-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathupdate-translation.sh
executable file
·156 lines (141 loc) · 4.32 KB
/
update-translation.sh
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#!/bin/bash
set -e
#set -x
# Transifex.com user and password
TRANSIFEX_USER=""
TRANSIFEX_PASSWD=""
# This is constant transifex.com API URL.
TRANSIFEX_API_URL="https://www.transifex.com/api/2/project/cataclysm-dda"
FTP_HOST=""
FTP_USER=""
FTP_PASSWD=""
FTP_PREFIX=""
# Put all credentials info in this file if you want hide them.
# FTP_USER FTP_PASSWD TRANSIFEX_USER TRANSIFEX_PASSWD
#source cred.sh
# Where script will be store all files.
WORKING_DIR=""
# This is constant values. Don't change it.
MASTER_RESOURCE="master-cataclysm-dda"
STABLE_RESOURCE="stable-cataclysm-dda"
OLD_RESOURCE="old-cataclysm-dda"
# Change it to your language.
LANGS="ru es_AR de it_IT es_ES"
OLD_PWD=$PWD
function check_requirements {
check_passed=0
for exe in "grep" "wget" "msgfmt" "tar" "zip" "lftp"
do
if !which $exe &>/dev/null
then
echo "Required executable '$exe' was not found."
check_passed=1
fi
done
for var_name in "TRANSIFEX_USER" "TRANSIFEX_PASSWD" "FTP_HOST" "FTP_USER" "FTP_PASSWD"
do
req_var=$var_name
if [ -z "${!req_var}" ]
then
echo "Required variable '$var_name' is not set."
check_passed=1
fi
done
return $check_passed
}
if [ -d "$WORKING_DIR" ]
then
cd "$WORKING_DIR"
else
if [ -z "$WORKING_DIR" ]
then
echo "You need to specify full path of working directory."
echo "Working directory value is stored in \$WORKINGDIR variable."
exit 1
fi
echo "Initial run. Check parameters..."
check_requirements
mkdir "$WORKING_DIR"
cd "$WORKING_DIR"
fi
# Main loop
for LL in $LANGS
do
if [ ! -d "$WORKING_DIR/$LL" ]
then
mkdir "$WORKING_DIR/$LL"
fi
cd "$WORKING_DIR/$LL"
for BRANCH in "MASTER" "STABLE" "OLD"
do
# Magic with vars
# Need update flag
TO_UPDATE=false
# Branch name in lowercase
BR_LNAME=$(echo $BRANCH | tr '[:upper:]' '[:lower:]')
# Transifex resource slug(internal name).
TMP="${BRANCH}_RESOURCE"
BR_RESOURCE=${!TMP}
# Remote last update timestamp for branch.
BR_REMOTE_TS=$(wget --quiet --output-document=- --user=$TRANSIFEX_USER \
--password=$TRANSIFEX_PASSWD \
$TRANSIFEX_API_URL/resource/$BR_RESOURCE/stats/$LL/ | \
grep '"last_update"' | \
grep -oE '[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}')
if [ -z "$BR_REMOTE_TS" ]
then
echo "'$BR_LNAME': Unable to get last update timestamp from API."
exit 1
else
BR_REMOTE_TS=$(date --date="$BR_REMOTE_TS" +"%s")
fi
# Compare local/remote timestamps.
BR_WORKDIR=$BR_LNAME
if [ ! -d "$BR_WORKDIR" ]
then
mkdir "$BR_WORKDIR"
fi
if [ -f "$BR_WORKDIR/timestamp.txt" ]
then
BR_LOCAL_TS=$(cat "$BR_WORKDIR/timestamp.txt")
if [ $BR_LOCAL_TS -lt $BR_REMOTE_TS ]
then
echo "$BR_REMOTE_TS" > $BR_WORKDIR/timestamp.txt
TO_UPDATE=true
fi
else
echo "$BR_REMOTE_TS" > $BR_WORKDIR/timestamp.txt
TO_UPDATE=true
fi
if $TO_UPDATE
then
cd $BR_WORKDIR
# 1. Get updated translation
wget --quiet --output-document=${BR_LNAME}.po \
--user=$TRANSIFEX_USER --password=$TRANSIFEX_PASSWD \
$TRANSIFEX_API_URL/resource/$BR_RESOURCE/translation/$LL/?file
# 2. Compile and archive
msgfmt -o cataclysm-dda.mo ${BR_LNAME}.po
MO_DIR="lang/mo/$LL/LC_MESSAGES/"
if [ ! -d "$MO_DIR" ]
then
mkdir -p $MO_DIR
fi
cp cataclysm-dda.mo $MO_DIR
zip -q -9 latest.zip $MO_DIR/cataclysm-dda.mo
tar -z -c -f latest.tar.gz $MO_DIR/cataclysm-dda.mo
# 3. Upload translation to ftp
echo "Start uploading... $BR_LNAME updates."
FTP_CMD="cd $FTP_PREFIX/$LL/$BR_LNAME; put latest.zip; put latest.tar.gz; \\
put cataclysm-dda.mo; put timestamp.txt; bye"
lftp -e "$FTP_CMD" -u $FTP_USER,$FTP_PASSWD $FTP_HOST &>/dev/null
# 4. Clean
rm -rf lang
rm cataclysm-dda.mo
rm latest.*
rm *.po
cd $WORKING_DIR
fi
done
done
cd $OLD_PWD