pidgin/pidgin
Clone
Summary
Browse
Changes
Graph
stream_management.c was missing from jabber/Makefile.mingw
release-2.x.y
2019-11-11, Gary Kramlich
0857d099906e
stream_management.c was missing from jabber/Makefile.mingw
#!/usr/bin/perl
#
# create_nsis_translations.pl
#
# Copyright (C) 2000-2009 Bruno Coudoin
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
use
strict
;
sub
usage
{
print
'create_nsis_translations.pl translations installer tmp_dir
translations
This is an input file that contains all the
translated strings. If must be formated as a GNU/Linux
desktop file and contains multiple strings entry.
For example you must have:
toBe=To be or not to be
toBe[fr]=Etre ou ne pas etre
installer
This is your nsis installer source file. You must include
in it the marker @INSERT_TRANSLATIONS@ before you use any
translation string.
After that you can use the variable $(toBe) in your file.
tmp_dir
This is a directory in which temporary files needed for
the translation system.
It will be created if non existant.
You can remove it once you have created your installer.
'
;
}
my
$translations
;
if
(
!
$ARGV
[
0
]
||
!
-
f
$ARGV
[
0
])
{
usage
();
}
else
{
$translations
=
$ARGV
[
0
];
}
shift
;
my
$installer
;
if
(
!
$ARGV
[
0
]
||
!
-
f
$ARGV
[
0
])
{
usage
();
}
else
{
$installer
=
$ARGV
[
0
];
}
shift
;
my
$tmp_dir
;
if
(
!
$ARGV
[
0
]
)
{
usage
();
}
else
{
$tmp_dir
=
$ARGV
[
0
];
if
(
!
-
d
$tmp_dir
)
{
mkdir
$tmp_dir
or
die
"ERROR: '$tmp_dir' $!\n"
;
}
}
print
"Processing translation file '$translations'\n"
;
print
" NSIS source file '$installer'\n"
;
print
" Working dir '$tmp_dir'\n"
;
# Commented out locales that are not available in nsis
# Map value is ["NSISFilename", "Encoding", "LCID"]
my
%localeNames
=
(
"af"
=>
[
"Afrikaans"
,
"WINDOWS-1252"
,
"1078"
],
# "am" => ["Amharic", "UTF-8"],
"ar"
=>
[
"Arabic"
,
"WINDOWS-1256"
,
"1025"
],
"be"
=>
[
"Belarusian"
,
"WINDOWS-1251"
,
"1059"
],
"bg"
=>
[
"Bulgarian"
,
"WINDOWS-1251"
,
"1026"
],
"bs"
=>
[
"Bosnian"
,
"WINDOWS-1250"
,
"5146"
],
"br"
=>
[
"Breton"
,
"WINDOWS-1252"
,
"1150"
],
"ca"
=>
[
"Catalan"
,
"WINDOWS-1252"
,
"1027"
],
"cs"
=>
[
"Czech"
,
"WINDOWS-1250"
,
"1029"
],
"cy"
=>
[
"Welsh"
,
"WINDOWS-1252"
,
"1160"
],
"da"
=>
[
"Danish"
,
"WINDOWS-1252"
,
"1030"
],
"de"
=>
[
"German"
,
"WINDOWS-1252"
,
"1031"
],
# "dz" => ["Dzongkha", "UTF-8"],
"el"
=>
[
"Greek"
,
"WINDOWS-1253"
,
"1032"
],
"en"
=>
[
"English"
,
"WINDOWS-1252"
,
"1033"
],
"eo"
=>
[
"Esperanto"
,
"WINDOWS-1252"
,
"9998"
],
"es"
=>
[
"Spanish"
,
"WINDOWS-1252"
,
"1034"
],
"et"
=>
[
"Estonian"
,
"WINDOWS-1257"
,
"1061"
],
"eu"
=>
[
"Basque"
,
"WINDOWS-1252"
,
"1069"
],
#Some values in the farsi translation can't be represented in what iconv thinks is WINDOWS-1256, so we disable it
# "fa" => ["Farsi", "WINDOWS-1256", "1065"],
"fi"
=>
[
"Finnish"
,
"WINDOWS-1252"
,
"1035"
],
"fr"
=>
[
"French"
,
"WINDOWS-1252"
,
"1036"
],
"ga"
=>
[
"Irish"
,
"WINDOWS-1252"
,
"2108"
],
"gl"
=>
[
"Galician"
,
"WINDOWS-1252"
,
"1110"
],
# "gu" => ["Gujarati", "UTF-8"],
"he"
=>
[
"Hebrew"
,
"WINDOWS-1255"
,
"1037"
],
# "hi" => ["Hindi", "UTF-8"],
"hr"
=>
[
"Croatian"
,
"WINDOWS-1250"
,
"1050"
],
"hu"
=>
[
"Hungarian"
,
"WINDOWS-1250"
,
"1038"
],
"id"
=>
[
"Indonesian"
,
"WINDOWS-1252"
,
"1057"
],
"is"
=>
[
"Icelandic"
,
"WINDOWS-1252"
,
"15"
],
#This should be 1039!
"it"
=>
[
"Italian"
,
"WINDOWS-1252"
,
"1040"
],
"ja"
=>
[
"Japanese"
,
"CP932"
,
"1041"
],
# "ka" => ["Georgian", "UTF-8"],
"ko"
=>
[
"Korean"
,
"CP949"
,
"1042"
],
"ku"
=>
[
"Kurdish"
,
"WINDOWS-1254"
,
"9999"
],
"lb"
=>
[
"Luxembourgish"
,
"WINDOWS-1252"
,
"4103"
],
"lt"
=>
[
"Lithuanian"
,
"WINDOWS-1257"
,
"1063"
],
"lv"
=>
[
"Latvian"
,
"WINDOWS-1257"
,
"1062"
],
"mk"
=>
[
"Macedonian"
,
"WINDOWS-1251"
,
"1071"
],
# "ml" => ["Malayalam", "UTF-8"],
# "mr" => ["Marathi", "UTF-8"],
"mn"
=>
[
"Mongolian"
,
"WINDOWS-1251"
,
"1104"
],
"ms"
=>
[
"Malay"
,
"WINDOWS-1252"
,
"1086"
],
"nb"
=>
[
"Norwegian"
,
"WINDOWS-1252"
,
"1044"
],
# "ne" => ["Nepal", "UTF-8"],
"nl"
=>
[
"Dutch"
,
"WINDOWS-1252"
,
"1043"
],
"nn"
=>
[
"NorwegianNynorsk"
,
"WINDOWS-1252"
,
"2068"
],
# "oc" => ["Occitan", "WINDOWS-1252"],
# "pa" => ["Punjabi", "UTF-8"],
"pl"
=>
[
"Polish"
,
"WINDOWS-1250"
,
"1045"
],
"pt"
=>
[
"Portuguese"
,
"WINDOWS-1252"
,
"2070"
],
"pt_BR"
=>
[
"PortugueseBR"
,
"WINDOWS-1252"
,
"1046"
],
"ro"
=>
[
"Romanian"
,
"WINDOWS-1250"
,
"1048"
],
"ru"
=>
[
"Russian"
,
"WINDOWS-1251"
,
"1049"
],
# "rw" => ["Kinyarwanda", "UTF-8"],
"sk"
=>
[
"Slovak"
,
"WINDOWS-1250"
,
"1051"
],
"sl"
=>
[
"Slovenian"
,
"WINDOWS-1250"
,
"1060"
],
# "so" => ["Somali", "UTF-8"],
"sq"
=>
[
"Albanian"
,
"WINDOWS-1252"
,
"1052"
],
"sr"
=>
[
"Serbian"
,
"WINDOWS-1251"
,
"3098"
],
"sr\@latin"
=>
[
"SerbianLatin"
,
"WINDOWS-1250"
,
"2074"
],
"sv"
=>
[
"Swedish"
,
"WINDOWS-1252"
,
"1053"
],
# "ta" => ["Tamil", "UTF-8"],
"th"
=>
[
"Thai"
,
"WINDOWS-874"
,
"1054"
],
"tr"
=>
[
"Turkish"
,
"WINDOWS-1254"
,
"1055"
],
"uk"
=>
[
"Ukrainian"
,
"WINDOWS-1251"
,
"1058"
],
"uz"
=>
[
"Uzbek"
,
"WINDOWS-1252"
,
"1091"
],
# "ur" => ["Urdu", "UTF-8"],
# "vi" => ["Vietnamese", "WINDOWS-1258"],
# "wa" => ["Walloon", "WINDOWS-1252"],
"zh_CN"
=>
[
"SimpChinese"
,
"WINDOWS-936"
,
"2052"
],
"zh_TW"
=>
[
"TradChinese"
,
"CP950"
,
"1028"
],
);
my
@localeKeys
=
keys
(
%localeNames
);
# Create the holder for the results
# %result{"locale"}{"stringname"} = result line
print
"Parsing nsis_translations.desktop\n"
;
my
%result
;
# Create a hash of the keys to translate
open
(
MYFILE
,
$translations
);
while
(
<MYFILE>
)
{
chomp
$_
;
if
(
$_
=~
/^Encoding=UTF-8/
||
$_
=~
/^\s*$/
||
$_
=~
/^\[Desktop Entry\]/
||
$_
=~
/^#/
)
{
next
;
}
elsif
(
$_
=~
/^(\w+)=(.*)/
)
{
my
$key
=
$1
;
my
$lang
=
"en"
;
my
$value
=
$2
;
$value
=~
s/["]/\$\\"/g
;
$result
{
"$lang"
}{
"$key"
}
=
"!define $key \"$value\"\n"
;
}
elsif
(
$_
=~
/^(\w+)\[([\w@]+)\]=(.*)/
)
{
my
$key
=
$1
;
my
$lang
=
$2
;
my
$value
=
$3
;
$value
=~
s/["]/\$\\"/g
;
$result
{
"$lang"
}{
"$key"
}
=
"!define $key \"$value\"\n"
;
}
else
{
print
"Found unrecognized line: '$_'\n"
;
}
}
close
(
MYFILE
);
# Lets insert the default languages
# in the installer file which means replacing:
# @INSERTMACRO_MUI_LANGUAGE@
# By the list of locales:
# !insertmacro MUI_LANGUAGE "French"
my
$muiLanguages
;
$muiLanguages
=
'
;; English goes first because its the default. The rest are
;; in alphabetical order (at least the strings actually displayed
;; will be).
!insertmacro MUI_LANGUAGE "English"
'
;
# The specific GCompris translation for the installer
# replacing:
# @GCOMPRIS_MACRO_INCLUDE_LANGFILE@
# By the list of locales:
# !insertmacro GCOMPRIS_MACRO_INCLUDE_LANGFILE "ALBANIAN" "${GCOMPRIS_NSIS_INCLUDE_PATH}\translations\albanian.nsh"
my
$gcomprisLanguages
;
$gcomprisLanguages
.=
'
;--------------------------------
;Translations
!define GCOMPRIS_DEFAULT_LANGFILE "${GCOMPRIS_NSIS_INCLUDE_PATH}\\translations\\en.nsh"
;;
;; Windows GCompris NSIS installer language macros
;;
!macro GCOMPRIS_MACRO_DEFAULT_STRING LABEL VALUE
!ifndef "${LABEL}"
!define "${LABEL}" "${VALUE}"
!ifdef INSERT_DEFAULT
!warning "${LANG} lang file missing ${LABEL}, using default..."
!endif
!endif
!macroend
!macro GCOMPRIS_MACRO_LANGSTRING_INSERT LABEL LANG
LangString "${LABEL}" "${LANG_${LANG}}" "${${LABEL}}"
!undef "${LABEL}"
!macroend
!macro GCOMPRIS_MACRO_LANGUAGEFILE_BEGIN LANG
!define CUR_LANG "${LANG}"
!macroend
'
;
# GCOMPRIS_MACRO_LANGUAGEFILE_END
$gcomprisLanguages
.=
'
!macro GCOMPRIS_MACRO_LANGUAGEFILE_END
!define INSERT_DEFAULT
!include "${GCOMPRIS_DEFAULT_LANGFILE}"
!undef INSERT_DEFAULT
; String labels should match those from the default language file.
'
;
my
$text_en
=
$result
{
"en"
};
foreach
my
$keyEn
(
keys
(
%$text_en
))
{
$gcomprisLanguages
.=
" !insertmacro GCOMPRIS_MACRO_LANGSTRING_INSERT $keyEn \${CUR_LANG}"
;
$gcomprisLanguages
.=
"\n"
;
}
$gcomprisLanguages
.=
'
!undef CUR_LANG
!macroend
'
;
$gcomprisLanguages
.=
'
!macro GCOMPRIS_MACRO_INCLUDE_LANGFILE LANG FILE
!insertmacro GCOMPRIS_MACRO_LANGUAGEFILE_BEGIN "${LANG}"
!include "${FILE}"
!insertmacro GCOMPRIS_MACRO_LANGUAGEFILE_END
!macroend
'
;
#
# Create each nsh translation file
#
print
"Creating the nsh default file\n"
;
open
(
DESC
,
">$tmp_dir/en.nsh"
);
print
DESC
";; Auto generated file by create_nsis_translations.pl\n"
;
foreach
my
$keyEn
(
keys
(
%$text_en
))
{
my
$line
=
$result
{
'en'
}{
$keyEn
};
$line
=~
s/!define /!insertmacro GCOMPRIS_MACRO_DEFAULT_STRING /
;
print
DESC
$line
;
}
close
DESC
;
$gcomprisLanguages
.=
" !insertmacro GCOMPRIS_MACRO_INCLUDE_LANGFILE"
.
" \"ENGLISH\""
.
" \"\${GCOMPRIS_NSIS_INCLUDE_PATH}\\translations\\en.nsh\"\n"
;
my
$selectTranslationFunction
=
'
!macro SELECT_TRANSLATION_SECTION LANG_NAME LANG_CODE
StrCmp "$LANGUAGE" "${LANG_${LANG_NAME}}" 0 end_${LANG_CODE}
!insertmacro SelectSection ${SecLang_${LANG_CODE}}
Goto done
end_${LANG_CODE}:
!macroend
; Convert the current $LANGUAGE to a language code that we can use for translation mo selection
; If there\'s a better way to do this, I\'d love to know it
!macro SELECT_TRANSLATION_FUNCTION
'
;
#
# Two pass are needed:
# - create the utf8 file
# - transform it to the proper windows locale
#
print
"Creating the nsh locale files\n"
;
foreach
my
$lang
(
@localeKeys
)
{
if
(
$lang
eq
"en"
)
{
next
;
}
open
(
DESC
,
">$tmp_dir/$lang.nsh.utf8"
);
print
DESC
";; Auto generated file by create_nsis_translations.pl\n"
;
print
DESC
";; Code Page: $localeNames{$lang}[1]\n"
;
my
$text_locale
=
$result
{
"$lang"
};
my
$total_key_count
=
0
;
my
$found_key_count
=
0
;
foreach
my
$keyEn
(
keys
(
%$text_en
))
{
my
$found
=
0
;
$total_key_count
++
;
foreach
my
$keyLocale
(
keys
(
%$text_locale
))
{
# Fine, we found a translation
if
(
$keyLocale
eq
$keyEn
)
{
print
DESC
"$result{$lang}{$keyLocale}"
;
$found
=
1
;
$found_key_count
++
;
last
;
}
}
# English keys are the reference.
# If not found they are inserted
#if ( ! $found )
#{
# print DESC "$result{'en'}{$keyEn}";
#}
}
close
DESC
;
# If we have at least 50% of the keys found, include the language
if
((
$found_key_count
*
1.0
/
$total_key_count
)
>=
0.5
)
{
$muiLanguages
.=
" !insertmacro MUI_LANGUAGE \"$localeNames{$lang}[0]\"\n"
;
$gcomprisLanguages
.=
" !insertmacro GCOMPRIS_MACRO_INCLUDE_LANGFILE"
.
" \""
.
uc
(
$localeNames
{
$lang
}[
0
])
.
"\""
.
" \"\${GCOMPRIS_NSIS_INCLUDE_PATH}\\translations\\$lang.nsh\"\n"
;
$selectTranslationFunction
.=
" !insertmacro SELECT_TRANSLATION_SECTION"
.
" \""
.
uc
(
$localeNames
{
$lang
}[
0
])
.
"\" \"$lang\"\n"
;
}
else
{
print
"Ignoring language $lang because it is less than 50% translated ($found_key_count of $total_key_count).\n"
;
next
;
}
# iconv conversion
system
(
"iconv -f UTF-8 -t $localeNames{$lang}[1] $tmp_dir/$lang.nsh.utf8 > $tmp_dir/$lang.nsh"
);
if
(
$?
ne
0
)
{
die
(
"ERROR: Failed to run: iconv -f UTF-8 -t $localeNames{$lang}[1] $lang.nsh.utf8 > $lang.nsh\n"
);
}
#`rm $tmp_dir/$lang.nsh.utf8`;
}
$selectTranslationFunction
.=
'
done:
!macroend
'
;
# We have all the data, let's replace it
my
$gcomprisInstaller
;
open
(
MYFILE
,
$installer
);
while
(
<MYFILE>
)
{
if
(
$_
=~
/\@INSERT_TRANSLATIONS\@/
)
{
print
"Processing \@INSERT_TRANSLATIONS\@\n"
;
$gcomprisInstaller
.=
$muiLanguages
;
$gcomprisInstaller
.=
$gcomprisLanguages
;
$gcomprisInstaller
.=
$selectTranslationFunction
;
}
else
{
$gcomprisInstaller
.=
"$_"
;
}
}
close
(
MYFILE
);
# Rewrite the file with the replaced data
open
(
MYFILE
,
">$installer"
);
print
MYFILE
"$gcomprisInstaller"
;
close
(
MYFILE
);