1#!/bin/sh
2
3#   Copyright (C) 1987-2015 by Jeffery P. Hansen
4#   Copyright (C) 2015-2018 by Andrey V. Skvortsov
5#
6#   This program is free software; you can redistribute it and/or modify
7#   it under the terms of the GNU General Public License as published by
8#   the Free Software Foundation; either version 2 of the License, or
9#   (at your option) any later version.
10#
11#   This program is distributed in the hope that it will be useful,
12#   but WITHOUT ANY WARRANTY; without even the implied warranty of
13#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14#   GNU General Public License for more details.
15#
16#   You should have received a copy of the GNU General Public License along
17#   with this program; if not, write to the Free Software Foundation, Inc.,
18#   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19#
20
21# Author: Loginov Alexey (alexl@mageia.org)
22
23convert="false"
24lang_param="$1"
25# if commandline parameter is present
26if [ ! -z "$lang_param" ]
27then
28   # if lang directory exists
29   if [ -d "$lang_param" ]
30   then
31      echo "Script will work only for $lang_param"
32      langs="$lang_param"
33   # if language directory does not exist
34   else
35      echo "Language directory $lang_param does not exist"
36      exit 1
37   fi
38# if commandline parameter is empty
39else
40   langs=`ls -1|grep -v pot|grep -v tcl |grep -v sh|cut -d "/" --fields=1|grep -v en`
41fi
42
43for lang in $langs
44do
45    file_po="$lang/messages_$lang.po"
46    if [ ! -f "$file_po" ]
47    then
48       echo "File $file_po does not exists"
49       continue
50    fi
51
52    echo "Creating $lang/messages.utf8"
53
54    # temporary files
55    lang1="$lang"1
56    lang2="$lang"2
57
58    # delete header
59    cat $file_po |sed '1,/#: en\/messages/ d' > $lang/$lang1.po
60    # delete comments
61    sed -i '/en\/messages/d' $lang/$lang1.po
62    # screened quotes \" -> YYYYY
63    sed -i 's|\\"|YYYYY|g' $lang/$lang1.po
64    # [ -> AAAAA
65    sed -i 's|\[|AAAAA|g' $lang/$lang1.po
66    # ] -> BBBBB
67    sed -i 's|\]|BBBBB|g' $lang/$lang1.po
68    # ""EOL" -> "
69    sed -i "s|\"\"/\n\"|\"|g" $lang/$lang1.po
70    # delete EOL
71    cat $lang/$lang1.po | tr -d '\n' > $lang/$lang2.po
72    # \n -> ZZZZZ
73    sed -i 's|\\n|ZZZZZ|g' $lang/$lang2.po
74    # msgstr "" -> XXXXX
75    sed -i 's|msgstr ""|XXXXX|g' $lang/$lang2.po
76    # delete double ""
77    sed -i 's|""||g' $lang/$lang2.po
78    # add EOL before msgctxt
79    sed -i "s|msgctxt|\nmsgctxt|g" $lang/$lang2.po
80    # delete all XXXXX strings (not translated)
81    sed -i '/XXXXX/d' $lang/$lang2.po
82    # add EOL before msgid
83    sed -i "s|msgid|\nmsgid|g" $lang/$lang2.po
84    # add EOL before msgstr
85    sed -i "s|msgstr|\nmsgstr|g" $lang/$lang2.po
86    # delete strings with msgid
87    sed -i '/msgid/d' $lang/$lang2.po
88    # delete the first string
89    sed -i -e "1d" $lang/$lang2.po
90    # add EOL
91    echo >> $lang/$lang2.po
92    # delete file
93    rm -f $lang/messages.utf8
94    # copying from config.txt
95    cat $lang/config.txt >> $lang/messages.utf8
96    # add EOL
97    echo "" >> $lang/messages.utf8
98    # read prepared PO file
99    cat $lang/$lang2.po|while read line
100    do
101    # line contents msgctxt or not
102    a=`echo $line|grep msgctxt`
103    # line contents msgstr or not
104    b=`echo $line|grep msgstr`
105    # line contents ZZZZZ (multiline) or not
106    c=`echo $line|grep ZZZZZ`
107    # if msgctxt is not empty
108    if [ ! -z "$a" ]
109    then
110        # msgctxt entry
111        a1=`echo $line|cut -d "\"" --fields=2`
112        # print msgctxt entry and tab into file
113        printf "$a1\t" >> $lang/messages.utf8
114    fi
115    # if msgstr is not empty (has translation)
116    if [ ! -z "$b" ]
117    then
118        # if string is not multiline
119        if [ -z "$c" ]
120        then
121            # msgstr entry
122            b1=`echo $line|cut -d "\"" --fields=2`
123            # add msgstr entry into file
124            echo $b1 >> $lang/messages.utf8
125        # if string is multiline
126        else
127            # msgstr entry
128            b1=`echo $line|cut -d "\"" --fields=2`
129            # add -begin- into file
130            echo "-begin-" >> $lang/messages.utf8
131            # add msgstr entry into file
132            echo $b1 >> $lang/messages.utf8
133            # add -end- into file
134            echo "-end-" >> $lang/messages.utf8
135        fi
136    fi
137    done
138
139    # restore EOL
140    sed -i 's|ZZZZZ|\n|g' $lang/messages.utf8
141    # restore screened quotes \"
142    sed -i 's|YYYYY|\"|g' $lang/messages.utf8
143    # restore [
144    sed -i 's|AAAAA|[|g' $lang/messages.utf8
145    # restore ]
146    sed -i 's|BBBBB|]|g' $lang/messages.utf8
147    # delete temporary files
148    rm -f $lang/$lang1.po
149    rm -f $lang/$lang2.po
150
151    # delete resulted files
152    rm -f $lang/messages
153
154    if [ "$convert" = "true" ]
155    then
156        # determine messages-encoding
157        enc=`cat $lang/config.txt|sed "s|\t\t| |g" |grep messages-encoding|cut -d " " --fields=2`
158        # if messages-encoding is not empty
159        if [ ! -z $enc ]
160        then
161        echo "Converting $lang/messages.utf8 in $enc -> $lang/messages"
162        # if messages-encoding is empty
163        else
164        echo "Missing messages-encoding in $lang/config.txt, using utf-8"
165        enc="utf-8"
166        fi
167        # converting
168        iconv -f UTF-8 -t $enc//TRANSLIT $lang/messages.utf8 > $lang/messages
169    else
170        echo "Doing $lang/messages.utf8 -> $lang/messages"
171        cp -f $lang/messages.utf8 $lang/messages
172    fi
173
174    rm -f $lang/messages.utf8
175done
176