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