summaryrefslogtreecommitdiffstats
path: root/refresh-translations
blob: 40ab45f57fb65ebc6ffbf89e89e38b61a82ccd0d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#! /bin/sh

set -e
set -u

PERL_PROGS="/usr/local/bin/gpgApplet /usr/local/bin/tails-security-check \
   /usr/local/bin/tails-htp-notify-user \
   /usr/local/bin/tails-virt-notify-user \
   /usr/local/sbin/tails-restricted-network-detector"
PYTHON_PROGS="/etc/whisperback/config.py /usr/local/lib/shutdown-helper-applet \
   /usr/local/bin/tails-about /usr/local/sbin/tails-additional-software"
SHELL_PROGS="/etc/NetworkManager/dispatcher.d/60-tor-ready.sh \
   /usr/local/bin/electrum \
   /usr/local/bin/tails-upgrade-frontend-wrapper \
   /usr/local/sbin/tails-spoof-mac \
   /usr/local/sbin/tails-i2p \
   /usr/local/sbin/i2p-browser \
   /usr/local/bin/tor-browser \
   /usr/local/sbin/unsafe-browser"

LOCALE_BASEDIR=config/chroot_local-includes/usr/share/locale

### External libraries

. config/chroot_local-includes/usr/local/lib/tails-shell-library/po.sh

### Functions

prog_potfile () {
   prog=$1

   progpath="config/chroot_local-includes$prog"
   domain=$(basename $prog)
   echo "tmp/pot/${domain}.pot"
}

refresh_pot () {
   prog=$1
   proglang=$2

   progpath="config/chroot_local-includes$prog"
   pot=$(prog_potfile $prog)

   mkdir -p "$(dirname $pot)"

   if [ -e "${progpath}" ]; then
      xgettext --language="${proglang}" --from-code=UTF-8 \
        -o "${pot}" "${progpath}"
      sed -i "s@^\"Content-Type: text/plain\; charset=CHARSET\\\n\"@\"Content-Type: text/plain\; charset=UTF-8\\\n\"@" "${pot}"
   fi
}

po_file () {
   locale=$1

   echo "po/${locale}.po"
}

mo_file () {
   locale=$1

   echo "${LOCALE_BASEDIR}/${locale}/LC_MESSAGES/tails.mo"
}

refresh_mo () {
   for locale in "$@" ; do
      po=$(po_file $locale)
      mo=$(mo_file $locale)
      mkdir -p $(dirname "$mo")
      msgfmt -o "${mo}" "${po}"
   done
}

no_left_out_files () {
   (cd po && intltool-update --maintain)
   [ ! -e po/missing ] || return 1
   return 0
}

intltool_update_pot () {
   (
      cd po
      intltool-update --pot --gettext-package=tails
   )
}

intltool_merge () {
   grep -E --no-filename '[^ #]*\.(desktop|directory)\.in$' po/POTFILES.in \
      | while read infile ; do
           intltool-merge --quiet --desktop-style --utf8 \
	      po "$infile" "${infile%.in}"
        done
}

intltool_report () {
   (cd po && intltool-update --report --gettext-package=tails)
}

### Main

# Update POT files
mkdir -p tmp/pot
for prog in $PERL_PROGS   ; do refresh_pot $prog Perl   ; done
for prog in $PYTHON_PROGS ; do refresh_pot $prog Python ; done
for prog in $SHELL_PROGS  ; do refresh_pot $prog Shell  ; done
intltool_update_pot

# If left out files are detected, intltool-update --maintain writes
# them to po/missing.
no_left_out_files || exit 3

# Update PO files
intltool_update_po $(po_languages)

# Update files that are actually used at runtime
refresh_mo $(po_languages)
intltool_merge

# Report back
intltool_report