summaryrefslogtreecommitdiffstats
path: root/packaging
diff options
context:
space:
mode:
authorJabiertxof <jtx@jtx>2017-01-24 00:39:06 +0000
committerJabiertxof <jtx@jtx>2017-01-24 00:39:06 +0000
commitda07c5edaeefe35a92662e42579b3e0b36621cbb (patch)
treebd783169733a4b06927601fca59ec569dc5317b5 /packaging
parentUpdate to trunk (diff)
parentfix nodes reverting back during editing (diff)
downloadinkscape-da07c5edaeefe35a92662e42579b3e0b36621cbb.tar.gz
inkscape-da07c5edaeefe35a92662e42579b3e0b36621cbb.zip
Remove some code and make dependant of rotate copies
(bzr r15295.1.63)
Diffstat (limited to 'packaging')
-rwxr-xr-xpackaging/win32/inkscape.nsi62
-rw-r--r--packaging/win32/languages/Breton.nsh91
-rw-r--r--packaging/win32/languages/Breton_languageNames.nsh94
-rw-r--r--packaging/win32/languages/Catalan.nsh91
-rw-r--r--packaging/win32/languages/Catalan_languageNames.nsh94
-rw-r--r--packaging/win32/languages/Czech.nsh91
-rw-r--r--packaging/win32/languages/Czech_languageNames.nsh94
-rw-r--r--packaging/win32/languages/Danish.nsh91
-rw-r--r--packaging/win32/languages/Danish_languageNames.nsh94
-rw-r--r--packaging/win32/languages/Dutch.nsh91
-rw-r--r--packaging/win32/languages/Dutch_languageNames.nsh94
-rw-r--r--packaging/win32/languages/English.nsh91
-rw-r--r--packaging/win32/languages/English_languageNames.nsh94
-rw-r--r--packaging/win32/languages/Finnish.nsh91
-rw-r--r--packaging/win32/languages/Finnish_languageNames.nsh94
-rw-r--r--packaging/win32/languages/French.nsh91
-rw-r--r--packaging/win32/languages/French_languageNames.nsh94
-rw-r--r--packaging/win32/languages/Galician.nsh91
-rw-r--r--packaging/win32/languages/Galician_languageNames.nsh94
-rw-r--r--packaging/win32/languages/German.nsh91
-rw-r--r--packaging/win32/languages/German_languageNames.nsh94
-rw-r--r--packaging/win32/languages/Greek.nsh91
-rw-r--r--packaging/win32/languages/Greek_languageNames.nsh94
-rw-r--r--packaging/win32/languages/Hebrew.nsh91
-rw-r--r--packaging/win32/languages/Hebrew_languageNames.nsh94
-rw-r--r--packaging/win32/languages/Icelandic.nsh91
-rw-r--r--packaging/win32/languages/Icelandic_languageNames.nsh94
-rw-r--r--packaging/win32/languages/Indonesian.nsh91
-rw-r--r--packaging/win32/languages/Indonesian_languageNames.nsh94
-rw-r--r--packaging/win32/languages/Italian.nsh91
-rw-r--r--packaging/win32/languages/Italian_languageNames.nsh94
-rw-r--r--packaging/win32/languages/Japanese.nsh91
-rw-r--r--packaging/win32/languages/Japanese_languageNames.nsh94
-rw-r--r--packaging/win32/languages/Polish.nsh91
-rw-r--r--packaging/win32/languages/Polish_languageNames.nsh94
-rw-r--r--packaging/win32/languages/Portuguese.nsh91
-rw-r--r--packaging/win32/languages/PortugueseBR.nsh91
-rw-r--r--packaging/win32/languages/PortugueseBR_languageNames.nsh94
-rw-r--r--packaging/win32/languages/Portuguese_languageNames.nsh94
-rw-r--r--packaging/win32/languages/Romanian.nsh91
-rw-r--r--packaging/win32/languages/Romanian_languageNames.nsh94
-rw-r--r--packaging/win32/languages/Russian.nsh91
-rw-r--r--packaging/win32/languages/Russian_languageNames.nsh94
-rw-r--r--packaging/win32/languages/SimpChinese.nsh91
-rw-r--r--packaging/win32/languages/SimpChinese_languageNames.nsh94
-rw-r--r--packaging/win32/languages/Slovak.nsh91
-rw-r--r--packaging/win32/languages/Slovak_languageNames.nsh94
-rw-r--r--packaging/win32/languages/Slovenian.nsh91
-rw-r--r--packaging/win32/languages/Slovenian_languageNames.nsh94
-rw-r--r--packaging/win32/languages/Spanish.nsh91
-rw-r--r--packaging/win32/languages/Spanish_languageNames.nsh94
-rw-r--r--packaging/win32/languages/TradChinese.nsh91
-rw-r--r--packaging/win32/languages/TradChinese_languageNames.nsh94
-rw-r--r--packaging/win32/languages/Ukrainian.nsh91
-rw-r--r--packaging/win32/languages/Ukrainian_languageNames.nsh94
-rw-r--r--packaging/win32/languages/_language_lists.py79
-rw-r--r--packaging/win32/languages/_polib.py1870
-rw-r--r--packaging/wix/files.py16
-rw-r--r--packaging/wix/helpers.py6
59 files changed, 4566 insertions, 2462 deletions
diff --git a/packaging/win32/inkscape.nsi b/packaging/win32/inkscape.nsi
index 9f2c00727..7bc65cc69 100755
--- a/packaging/win32/inkscape.nsi
+++ b/packaging/win32/inkscape.nsi
@@ -85,6 +85,7 @@ LicenseForceSelection off
!define MUI_LICENSEPAGE_TEXT_BOTTOM "$(LICENSE_BOTTOM_TEXT)"
!insertmacro MUI_PAGE_LICENSE ..\..\Copying
; Components page {{{6
+!define MUI_PAGE_CUSTOMFUNCTION_SHOW SortTranslationsSection
!insertmacro MUI_PAGE_COMPONENTS
InstType "$(Full)"
InstType "$(Optimal)"
@@ -114,9 +115,11 @@ ShowUninstDetails hide
!verbose 3
!insertmacro MUI_LANGUAGE "English"
!insertmacro LANGFILE_INCLUDE "languages\English.nsh"
+!insertmacro LANGFILE_INCLUDE "languages\English_languageNames.nsh"
!macro INKLANGFILE LocaleName LocaleID
!insertmacro MUI_LANGUAGE "${LocaleName}"
!insertmacro LANGFILE_INCLUDE_WITHDEFAULT "languages\${LocaleName}.nsh" "languages\English.nsh"
+ !insertmacro LANGFILE_INCLUDE_WITHDEFAULT "languages\${LocaleName}_languageNames.nsh" "languages\English_languageNames.nsh"
!macroend
; include list of available installer translations from /languages/_language_lists.nsh
!insertmacro INSTALLER_TRANSLATIONS INKLANGFILE
@@ -542,7 +545,7 @@ SectionGroupEnd ; SecAddfiles }}}
SectionGroup "$(Languages)" SecLanguages ; Languages sections {{{
!macro Language SecName lng ; A macro to create each section {{{
- Section /o "$(lng_${lng}) (${lng})" Sec${SecName}
+ Section /o "$(lng_${lng})" Sec${SecName}
SectionIn 1 ; flags will be adjusted below, see LanguageAutoSelect in .onInit
!ifndef DUMMYINSTALL
DetailPrint "Installing translations and translated content for ${SecName} (${lng}) locale..."
@@ -678,6 +681,63 @@ SectionEnd ; -FinalizeInstallation }}}
!insertmacro MUI_FUNCTION_DESCRIPTION_END ; Section descriptions }}}
+Function SortTranslationsSection ; sorts the available translations in the component dialog alphabetically
+ ; originally from http://nsis.sourceforge.net/Sorting_Components
+
+ ; defines
+ !define TVGN_ROOT 0
+ !define TVGN_NEXT 1
+ !define TVGN_NEXTVISIBLE 6
+
+ !define TVIF_TEXT 1
+
+ !define TVM_GETNEXTITEM 4362
+ !define TVM_GETITEMA 4364
+ !define TVM_GETITEMW 4414
+ !define TVM_GETITEM 4414
+ !define TVM_SORTCHILDREN 4371
+
+ !define TVITEM '(i, i, i, i, i, i, i, i, i, i)'
+
+ ; get the window handle and search for the tree view control
+ FindWindow $0 "#32770" "" $HWNDPARENT
+ GetDlgItem $0 $0 1032
+
+ ; find the first tree item
+ SendMessage $0 ${TVM_GETNEXTITEM} ${TVGN_ROOT} 0 $1
+
+ ; allocate a string in memory to store the section name
+ System::Alloc ${NSIS_MAX_STRLEN}
+ Pop $2
+
+ ; loop through all tree view items until the one containing the translations is found
+ loopSections:
+ ; allocate a TVITEM (https://msdn.microsoft.com/en-us/library/windows/desktop/bb773456.aspx) structure in memory
+ System::Call '*${TVITEM}(${TVIF_TEXT}, r1,,, r2, ${NSIS_MAX_STRLEN},,,,) i .r3'
+ ; send TVM_GETITEM message (https://msdn.microsoft.com/de-de/library/windows/desktop/bb773596.aspx)
+ ; which stores information on the current tree item in the structure
+ SendMessage $0 ${TVM_GETITEM} 0 $3
+ ; read the string pointed to by pszText (which is the displayed text of the tree item)
+ System::Call '*$2(&t${NSIS_MAX_STRLEN} .r4)'
+ ; check if this matches the localized string for "Translations", i.e. the Section we're looking for
+ StrCmp $4 "$(Languages)" 0 +2
+ Goto foundSection
+
+ ; send TVM_GETNEXTITEM message (https://msdn.microsoft.com/de-de/library/windows/desktop/bb773622.aspx)
+ ; will return 0 if the last item was reached (if this happens something went wrong and we did not find the translations section)
+ SendMessage $0 ${TVM_GETNEXTITEM} ${TVGN_NEXTVISIBLE} $1 $1
+ StrCmp 0 $1 doneSections loopSections
+
+ ; sort the children of the translations section alphabetically
+ foundSection:
+ SendMessage $0 ${TVM_SORTCHILDREN} 0 $1
+
+ doneSections:
+ System::Free $2
+ System::Free $3
+FunctionEnd
+
+
Function .onInit ; initialise the installer {{{2
; This code will be executed before the sections, but due to the
; language code in the sections it must come after it in the code.
diff --git a/packaging/win32/languages/Breton.nsh b/packaging/win32/languages/Breton.nsh
index bbbb834ac..a28687a1f 100644
--- a/packaging/win32/languages/Breton.nsh
+++ b/packaging/win32/languages/Breton.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Dictionaries"
${LangFileString} DictionariesDesc "Dictionaries for some common languages for spell checking in Inkscape"
${LangFileString} Languages "Troidigezhioù"
${LangFileString} LanguagesDesc "Staliañ troidigezhioù evit Inkscape"
-${LangFileString} lng_am "Amhareg"
-${LangFileString} lng_ar "Arabeg"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "Azerbaidjaneg"
-${LangFileString} lng_be "Bieloruseg"
-${LangFileString} lng_bg "Bulgareg"
-${LangFileString} lng_bn "Bengalieg"
-${LangFileString} lng_bn_BD "Bengali Bangladesh"
-${LangFileString} lng_br "Brezhoneg"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "Katalaneg"
-${LangFileString} lng_ca@valencia "Katalaneg Valensia"
-${LangFileString} lng_cs "Tchekeg"
-${LangFileString} lng_da "Daneg"
-${LangFileString} lng_de "Alamaneg"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "Dzongkheg"
-${LangFileString} lng_el "Gresianeg"
-${LangFileString} lng_en "Saozneg"
-${LangFileString} lng_en_AU "Saozneg Australia"
-${LangFileString} lng_en_CA "Saozneg Kanada"
-${LangFileString} lng_en_GB "Saozneg Breizh-Veur"
-${LangFileString} lng_en_US@piglatin "Pig Latin"
-${LangFileString} lng_eo "Esperanto"
-${LangFileString} lng_es "Spagnoleg"
-${LangFileString} lng_es_MX "Spagnoleg Mec'hiko"
-${LangFileString} lng_et "Estoneg"
-${LangFileString} lng_eu "Euskareg"
-${LangFileString} lng_fa "Farsi"
-${LangFileString} lng_fi "Finneg"
-${LangFileString} lng_fr "Galleg"
-${LangFileString} lng_ga "Iwerzhoneg"
-${LangFileString} lng_gl "Galisianeg"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "Hebraeg"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "Kroateg"
-${LangFileString} lng_hu "Hungareg"
-${LangFileString} lng_hy "Armenian"
-${LangFileString} lng_id "Indoneseg"
-${LangFileString} lng_is "Icelandic"
-${LangFileString} lng_it "Italianeg"
-${LangFileString} lng_ja "Japoneg"
-${LangFileString} lng_km "Khmereg"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "Koreaneg"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "Lituaneg"
-${LangFileString} lng_lv "Latvian"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "Makédonieg"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "Mongoleg"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in Bengali script"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "Norvegeg Bokmal"
-${LangFileString} lng_ne "Nepalieg"
-${LangFileString} lng_nl "Nederlandeg"
-${LangFileString} lng_nn "Norvegeg Ninorsk"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "Pendjabeg"
-${LangFileString} lng_pl "Poloneg"
-${LangFileString} lng_pt "Portugaleg"
-${LangFileString} lng_pt_BR "Portugaleg Brazil"
-${LangFileString} lng_ro "Romanieg"
-${LangFileString} lng_ru "Ruseg"
-${LangFileString} lng_rw "Kinyarwandeg"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "Sloveg"
-${LangFileString} lng_sl "Sloveneg"
-${LangFileString} lng_sq "Albaneg"
-${LangFileString} lng_sr "Serbeg"
-${LangFileString} lng_sr@latin "Serbeg skrivet mod latin"
-${LangFileString} lng_sv "Swedeg"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "Telugu"
-${LangFileString} lng_th "Thaieg"
-${LangFileString} lng_tr "Turkeg"
-${LangFileString} lng_uk "Ukrenieg"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "Vietnameg"
-${LangFileString} lng_zh_CN "Sineg eeunaet"
-${LangFileString} lng_zh_TW "Sineg hengounel"
${LangFileString} UInstOpt "Dibarzhioù distaliañ"
${LangFileString} UInstOpt1 "Dibabit e-touez an dibarzhioù ouzhpenn"
${LangFileString} PurgePrefs "Mirout ar gwellvezioù personel"
diff --git a/packaging/win32/languages/Breton_languageNames.nsh b/packaging/win32/languages/Breton_languageNames.nsh
new file mode 100644
index 000000000..3b88398b9
--- /dev/null
+++ b/packaging/win32/languages/Breton_languageNames.nsh
@@ -0,0 +1,94 @@
+### Breton (br) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'Breton.nsh'
+${LangFileString} lng_am "Amharieg (am)"
+${LangFileString} lng_ar "Arabeg (ar)"
+${LangFileString} lng_as "Assamese (as)"
+${LangFileString} lng_az "Azerbaijanieg (az)"
+${LangFileString} lng_be "Belarusianeg (be)"
+${LangFileString} lng_bg "Bulgarieg (bg)"
+${LangFileString} lng_bn "Bengalieg (bn)"
+${LangFileString} lng_bn_BD "Bengalieg/Bangladech (bn_BD)"
+${LangFileString} lng_br "Brezhoneg (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "Katalaneg (ca)"
+${LangFileString} lng_ca@valencia "Katalaneg Valensia (ca@valencia)"
+${LangFileString} lng_cs "Tchekeg (cs)"
+${LangFileString} lng_da "Daneg (da)"
+${LangFileString} lng_de "Alamaneg (de)"
+${LangFileString} lng_doi "Dogri (doi)"
+${LangFileString} lng_dz "Dzongkheg (dz)"
+${LangFileString} lng_el "Gresianeg (el)"
+${LangFileString} lng_en "Saozneg (en)"
+${LangFileString} lng_en_AU "Saozneg/Aostalia (en_AU)"
+${LangFileString} lng_en_CA "Saozneg/Kanada (en_CA)"
+${LangFileString} lng_en_GB "Saozneg/Breizh-Veur (en_GB)"
+${LangFileString} lng_en_US@piglatin "Pig Latin (en_US@piglatin)"
+${LangFileString} lng_eo "Esperanto (eo)"
+${LangFileString} lng_es "Spagnoleg (es)"
+${LangFileString} lng_es_MX "Spagnoleg/Mec'hiko (es_MX)"
+${LangFileString} lng_et "Estonieg (et)"
+${LangFileString} lng_eu "Euskareg (eu)"
+${LangFileString} lng_fa "Farsieg (fa)"
+${LangFileString} lng_fi "Finneg (fi)"
+${LangFileString} lng_fr "Galleg (fr)"
+${LangFileString} lng_ga "Iwerzhoneg (ga)"
+${LangFileString} lng_gl "Galisieg (gl)"
+${LangFileString} lng_gu "Gujarati (gu)"
+${LangFileString} lng_he "Hebraeg (he)"
+${LangFileString} lng_hi "Hindi (hi)"
+${LangFileString} lng_hr "Kroateg (hr)"
+${LangFileString} lng_hu "Hungareg (hu)"
+${LangFileString} lng_hy "Armenieg (hy)"
+${LangFileString} lng_id "Indonezieg (id)"
+${LangFileString} lng_is "Icelandic (is)"
+${LangFileString} lng_it "Italianeg (it)"
+${LangFileString} lng_ja "Japoneg (ja)"
+${LangFileString} lng_km "Khmereg (km)"
+${LangFileString} lng_kn "Kannada (kn)"
+${LangFileString} lng_ko "Koreeg (ko)"
+${LangFileString} lng_kok "Konkani (kok)"
+${LangFileString} lng_kok@latin "Konkani in Latin script (kok@latin)"
+${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script (ks@aran)"
+${LangFileString} lng_ks@deva "Kashmiri in Devanagari script (ks@deva)"
+${LangFileString} lng_lt "Lituanieg (lt)"
+${LangFileString} lng_lv "Letoneg (lv)"
+${LangFileString} lng_mai "Maithili (mai)"
+${LangFileString} lng_mk "Makedonieg (mk)"
+${LangFileString} lng_ml "Malayalam (ml)"
+${LangFileString} lng_mn "Mongolieg (mn)"
+${LangFileString} lng_mni "Manipuri (mni)"
+${LangFileString} lng_mni@beng "Manipuri in Bengali script (mni@beng)"
+${LangFileString} lng_mr "Marathi (mr)"
+${LangFileString} lng_nb "Norwegeg mod Bokmål (nb)"
+${LangFileString} lng_ne "Nepalegi (ne)"
+${LangFileString} lng_nl "Izelvroeg (nl)"
+${LangFileString} lng_nn "Norwegeg mod Nynorsk (nn)"
+${LangFileString} lng_or "Odia (or)"
+${LangFileString} lng_pa "Penjabeg (pa)"
+${LangFileString} lng_pl "Pologneg (pl)"
+${LangFileString} lng_pt "Portugaleg (pt)"
+${LangFileString} lng_pt_BR "Portuguese/Brazil (pt_BR)"
+${LangFileString} lng_ro "Romanieg (ro)"
+${LangFileString} lng_ru "Rusianeg (ru)"
+${LangFileString} lng_rw "Kinyarwandeg (rw)"
+${LangFileString} lng_sa "Sanskrit (sa)"
+${LangFileString} lng_sat "Santali (sat)"
+${LangFileString} lng_sat@deva "Santali in Devanagari script (sat@deva)"
+${LangFileString} lng_sd "Sindhi (sd)"
+${LangFileString} lng_sd@deva "Sindhi in Devanagari script (sd@deva)"
+${LangFileString} lng_sk "Sloveg (sk)"
+${LangFileString} lng_sl "Slovenieg (sl)"
+${LangFileString} lng_sq "Albanieg (sq)"
+${LangFileString} lng_sr "Serbeg (sr)"
+${LangFileString} lng_sr@latin "Serbeg dre skritur Latin (sr@latin)"
+${LangFileString} lng_sv "Swedeg (sv)"
+${LangFileString} lng_ta "Tamil (ta)"
+${LangFileString} lng_te "Telugueg (te)"
+${LangFileString} lng_th "Thaieg (th)"
+${LangFileString} lng_tr "Turkeg (tr)"
+${LangFileString} lng_uk "Ukrainieg (uk)"
+${LangFileString} lng_ur "Urdu (ur)"
+${LangFileString} lng_vi "Vietnameg (vi)"
+${LangFileString} lng_zh_CN "Sineg/Sina (zh_CN)"
+${LangFileString} lng_zh_TW "Sineg/Taiwan (zh_TW)"
diff --git a/packaging/win32/languages/Catalan.nsh b/packaging/win32/languages/Catalan.nsh
index 5c951c161..c163ad260 100644
--- a/packaging/win32/languages/Catalan.nsh
+++ b/packaging/win32/languages/Catalan.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Dictionaries"
${LangFileString} DictionariesDesc "Dictionaries for some common languages for spell checking in Inkscape"
${LangFileString} Languages "Traduccions"
${LangFileString} LanguagesDesc "Instal·la més traduccions per a l'Inkscape"
-${LangFileString} lng_am "Amharic"
-${LangFileString} lng_ar "Arabic"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "Azerbaijani"
-${LangFileString} lng_be "Biel·lorús"
-${LangFileString} lng_bg "Búlgar"
-${LangFileString} lng_bn "Bengalí"
-${LangFileString} lng_bn_BD "Bengali Bangladesh"
-${LangFileString} lng_br "Breton"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "Català"
-${LangFileString} lng_ca@valencia "Català valencià"
-${LangFileString} lng_cs "Txec"
-${LangFileString} lng_da "Danès"
-${LangFileString} lng_de "Alemany"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "Dzongkha"
-${LangFileString} lng_el "Grec"
-${LangFileString} lng_en "Anglès"
-${LangFileString} lng_en_AU "Anglès d'Austràlia"
-${LangFileString} lng_en_CA "Anglès del Canadà"
-${LangFileString} lng_en_GB "Anglès britànic"
-${LangFileString} lng_en_US@piglatin "Pig Latin"
-${LangFileString} lng_eo "Esperanto"
-${LangFileString} lng_es "Espanyol"
-${LangFileString} lng_es_MX "Espanyol mexicà"
-${LangFileString} lng_et "Estonià"
-${LangFileString} lng_eu "Basc"
-${LangFileString} lng_fa "Farsi"
-${LangFileString} lng_fi "Finès"
-${LangFileString} lng_fr "Francès"
-${LangFileString} lng_ga "Irlandès"
-${LangFileString} lng_gl "Gallec"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "Hebreu"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "Croat"
-${LangFileString} lng_hu "Hongarès"
-${LangFileString} lng_hy "Armenian"
-${LangFileString} lng_id "Indonesi"
-${LangFileString} lng_is "Icelandic"
-${LangFileString} lng_it "Italià"
-${LangFileString} lng_ja "Japonès"
-${LangFileString} lng_km "Khmer"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "Coreà"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "Lituà"
-${LangFileString} lng_lv "Latvian"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "Macedoni"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "Mongol"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in Bengali script"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "Noruec Bokmål"
-${LangFileString} lng_ne "Nepalí"
-${LangFileString} lng_nl "Holandès"
-${LangFileString} lng_nn "Noruec Nynorsk"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "Panjabi"
-${LangFileString} lng_pl "Polonès"
-${LangFileString} lng_pt "Portuguès"
-${LangFileString} lng_pt_BR "Portuguès brasiler"
-${LangFileString} lng_ro "Romanès"
-${LangFileString} lng_ru "Rus"
-${LangFileString} lng_rw "Kinyarwanda"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "Eslovac"
-${LangFileString} lng_sl "Esloveni"
-${LangFileString} lng_sq "Albanès"
-${LangFileString} lng_sr "Serbi"
-${LangFileString} lng_sr@latin "Serbi en alfabet llatí"
-${LangFileString} lng_sv "Suec"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "Telugu"
-${LangFileString} lng_th "Thai"
-${LangFileString} lng_tr "Turc"
-${LangFileString} lng_uk "Ucraïnès"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "Vietnamese"
-${LangFileString} lng_zh_CN "Xinès simplificat"
-${LangFileString} lng_zh_TW "Xinès tradicional"
${LangFileString} UInstOpt "Opcions de desinstal·lació"
${LangFileString} UInstOpt1 "Seleccioneu les vostres opcions addicionals"
${LangFileString} PurgePrefs "Conserva les preferències personals"
diff --git a/packaging/win32/languages/Catalan_languageNames.nsh b/packaging/win32/languages/Catalan_languageNames.nsh
new file mode 100644
index 000000000..db7430072
--- /dev/null
+++ b/packaging/win32/languages/Catalan_languageNames.nsh
@@ -0,0 +1,94 @@
+### Catalan (ca) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'Catalan.nsh'
+${LangFileString} lng_am "Amhàric (am)"
+${LangFileString} lng_ar "Àrab (ar)"
+${LangFileString} lng_as "Assamès (as)"
+${LangFileString} lng_az "Àzeri (az)"
+${LangFileString} lng_be "Bielorús (be)"
+${LangFileString} lng_bg "Búlgar (bg)"
+${LangFileString} lng_bn "Bengalí (bn)"
+${LangFileString} lng_bn_BD "Bengalí/Bangladesh (bn_BD)"
+${LangFileString} lng_br "Bretó (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "Català (ca)"
+${LangFileString} lng_ca@valencia "Català de València (ca@valencia)"
+${LangFileString} lng_cs "Txec (cs)"
+${LangFileString} lng_da "Danès (da)"
+${LangFileString} lng_de "Alemany (de)"
+${LangFileString} lng_doi "Dogri (doi)"
+${LangFileString} lng_dz "Dzongkha (dz)"
+${LangFileString} lng_el "Grec (el)"
+${LangFileString} lng_en "Anglès (en)"
+${LangFileString} lng_en_AU "Anglès d'Austràlia (en_AU)"
+${LangFileString} lng_en_CA "Anglès del Canadà (en_CA)"
+${LangFileString} lng_en_GB "Anglès de Gran Bretanya (en_GB)"
+${LangFileString} lng_en_US@piglatin "Pig Latin (en_US@piglatin)"
+${LangFileString} lng_eo "Esperanto (eo)"
+${LangFileString} lng_es "Espanyol (es)"
+${LangFileString} lng_es_MX "Espanyol de Mèxic (es_MX)"
+${LangFileString} lng_et "Estonià (et)"
+${LangFileString} lng_eu "Basc (eu)"
+${LangFileString} lng_fa "Persa (fa)"
+${LangFileString} lng_fi "Finès (fi)"
+${LangFileString} lng_fr "Francès (fr)"
+${LangFileString} lng_ga "Irlandès (ga)"
+${LangFileString} lng_gl "Gallec (gl)"
+${LangFileString} lng_gu "Gujarati (gu)"
+${LangFileString} lng_he "Hebreu (he)"
+${LangFileString} lng_hi "Hindi (hi)"
+${LangFileString} lng_hr "Croat (hr)"
+${LangFileString} lng_hu "Hongarès (hu)"
+${LangFileString} lng_hy "Armeni (hy)"
+${LangFileString} lng_id "Indonesi (id)"
+${LangFileString} lng_is "Islandès (is)"
+${LangFileString} lng_it "Italià (it)"
+${LangFileString} lng_ja "Japonès (ja)"
+${LangFileString} lng_km "Khmer (km)"
+${LangFileString} lng_kn "Kanarès (kn)"
+${LangFileString} lng_ko "Coreà (ko)"
+${LangFileString} lng_kok "Konkani (kok)"
+${LangFileString} lng_kok@latin "Konkani amb alfabet llatí (kok@latin)"
+${LangFileString} lng_ks@aran "Caixmiri en l'escriptura perso-àrab (ks@aran)"
+${LangFileString} lng_ks@deva "Caixmiri en l'escriptura devanagari (ks@deva)"
+${LangFileString} lng_lt "Lituà (lt)"
+${LangFileString} lng_lv "Letó (lt)"
+${LangFileString} lng_mai "Maithili (mai)"
+${LangFileString} lng_mk "Macedoni (mk)"
+${LangFileString} lng_ml "Malaiàlam (ml)"
+${LangFileString} lng_mn "Mongol (mn)"
+${LangFileString} lng_mni "Manipuri (mni)"
+${LangFileString} lng_mni@beng "Manipuri amb alfabet bengalí (mni@beng)"
+${LangFileString} lng_mr "Marathi (mr)"
+${LangFileString} lng_nb "Bokmål noruec (nb)"
+${LangFileString} lng_ne "Nepalès (ne)"
+${LangFileString} lng_nl "Holandès (nl)"
+${LangFileString} lng_nn "Nynorsk noruec (nn)"
+${LangFileString} lng_or "Oriya (or)"
+${LangFileString} lng_pa "Panjabi (pa)"
+${LangFileString} lng_pl "Polonès (pl)"
+${LangFileString} lng_pt "Portuguès (pt)"
+${LangFileString} lng_pt_BR "Portuguès del Brasil (pt_BR)"
+${LangFileString} lng_ro "Romanès (ro)"
+${LangFileString} lng_ru "Rus (ru)"
+${LangFileString} lng_rw "Kinyarwanda (rw)"
+${LangFileString} lng_sa "Sànscrit (sa)"
+${LangFileString} lng_sat "Santali (sat)"
+${LangFileString} lng_sat@deva "Santali amb alfabet devanagari (sat@deva)"
+${LangFileString} lng_sd "Sindhi (sd)"
+${LangFileString} lng_sd@deva "Sindhi amb alfabet devanagari (sd@deva)"
+${LangFileString} lng_sk "Eslovac (sk)"
+${LangFileString} lng_sl "Eslovè (sl)"
+${LangFileString} lng_sq "Albanès (sq)"
+${LangFileString} lng_sr "Serbi (sr)"
+${LangFileString} lng_sr@latin "Serbi amb alfabet llatí (sr@latin)"
+${LangFileString} lng_sv "Suec (sv)"
+${LangFileString} lng_ta "Tàmil (ta)"
+${LangFileString} lng_te "Telugu (te)"
+${LangFileString} lng_th "Tai (th)"
+${LangFileString} lng_tr "Turc (tr)"
+${LangFileString} lng_uk "Ucraïnès (uk)"
+${LangFileString} lng_ur "Urdú (ur)"
+${LangFileString} lng_vi "Vietnamita (vi)"
+${LangFileString} lng_zh_CN "Xinès de Xina (zh_CN)"
+${LangFileString} lng_zh_TW "Xinès de Taiwan (zh_TW)"
diff --git a/packaging/win32/languages/Czech.nsh b/packaging/win32/languages/Czech.nsh
index 22385f46b..e02c3ed5d 100644
--- a/packaging/win32/languages/Czech.nsh
+++ b/packaging/win32/languages/Czech.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Dictionaries"
${LangFileString} DictionariesDesc "Dictionaries for some common languages for spell checking in Inkscape"
${LangFileString} Languages "Jazykové sady"
${LangFileString} LanguagesDesc "Nainstalovat další jazykové sady Inkscape"
-${LangFileString} lng_am "Amharic"
-${LangFileString} lng_ar "Arabic"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "Azerbajdžánština"
-${LangFileString} lng_be "Běloruština"
-${LangFileString} lng_bg "Bulgarian"
-${LangFileString} lng_bn "Bengali"
-${LangFileString} lng_bn_BD "Bengali Bangladesh"
-${LangFileString} lng_br "Breton"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "Katalánština"
-${LangFileString} lng_ca@valencia "Valencian Catalan"
-${LangFileString} lng_cs "Čeština"
-${LangFileString} lng_da "Dánština"
-${LangFileString} lng_de "Němčina"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "Dzongkha"
-${LangFileString} lng_el "Řečtina"
-${LangFileString} lng_en "Angličina"
-${LangFileString} lng_en_AU "Australian English"
-${LangFileString} lng_en_CA "Kanadská Angličtina"
-${LangFileString} lng_en_GB "Britská Angličtina"
-${LangFileString} lng_en_US@piglatin "Pig Latin"
-${LangFileString} lng_eo "Esperanto"
-${LangFileString} lng_es "Španělština"
-${LangFileString} lng_es_MX "Mexická Španělština"
-${LangFileString} lng_et "Estonština"
-${LangFileString} lng_eu "Basque"
-${LangFileString} lng_fa "Farsi"
-${LangFileString} lng_fi "Finština"
-${LangFileString} lng_fr "Francouzština"
-${LangFileString} lng_ga "Irština"
-${LangFileString} lng_gl "Galician"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "Hebrew"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "Chorvatština"
-${LangFileString} lng_hu "Maďarština"
-${LangFileString} lng_hy "Armenian"
-${LangFileString} lng_id "Indonesian"
-${LangFileString} lng_is "Icelandic"
-${LangFileString} lng_it "Italština"
-${LangFileString} lng_ja "Japonština"
-${LangFileString} lng_km "Khmer"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "Korejština"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "Litevština"
-${LangFileString} lng_lv "Latvian"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "Makedonština"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "Mongolština"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in Bengali script"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "Norština Bokmal"
-${LangFileString} lng_ne "Nepálština"
-${LangFileString} lng_nl "Holandština"
-${LangFileString} lng_nn "Norština Nynorsk"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "Panjabi"
-${LangFileString} lng_pl "Polština"
-${LangFileString} lng_pt "Portugalština"
-${LangFileString} lng_pt_BR "Brazilská Portugalština"
-${LangFileString} lng_ro "Romanian"
-${LangFileString} lng_ru "Ruština"
-${LangFileString} lng_rw "Kinyarwanda"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "Slovenština"
-${LangFileString} lng_sl "Slovinština"
-${LangFileString} lng_sq "Albánština"
-${LangFileString} lng_sr "Srbština"
-${LangFileString} lng_sr@latin "Srbština v latince"
-${LangFileString} lng_sv "Švédština"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "Telugu"
-${LangFileString} lng_th "Thai"
-${LangFileString} lng_tr "Turečtina"
-${LangFileString} lng_uk "Ukrajinština"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "Vietnamština"
-${LangFileString} lng_zh_CN "Zjednodušená Čínština"
-${LangFileString} lng_zh_TW "Tradiční Čínština"
${LangFileString} UInstOpt "Volby pro odinstalování"
${LangFileString} UInstOpt1 "Vyberte prosím další nastavení"
${LangFileString} PurgePrefs "Ponechat osobní nastavení"
diff --git a/packaging/win32/languages/Czech_languageNames.nsh b/packaging/win32/languages/Czech_languageNames.nsh
new file mode 100644
index 000000000..83fc5ad66
--- /dev/null
+++ b/packaging/win32/languages/Czech_languageNames.nsh
@@ -0,0 +1,94 @@
+### Czech (cs) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'Czech.nsh'
+${LangFileString} lng_am "amharština (am)"
+${LangFileString} lng_ar "arabština (ar)"
+${LangFileString} lng_as "Assamese (as)"
+${LangFileString} lng_az "azerbajdžánština (az)"
+${LangFileString} lng_be "běloruština (be)"
+${LangFileString} lng_bg "bulharština (bg)"
+${LangFileString} lng_bn "bengálština (bn)"
+${LangFileString} lng_bn_BD "Bengali/Bangladesh (bn_BD)"
+${LangFileString} lng_br "bretonština (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "katalánština (ca)"
+${LangFileString} lng_ca@valencia "valencijská katalánština (ca@valencia)"
+${LangFileString} lng_cs "čeština (cs)"
+${LangFileString} lng_da "dánština (da)"
+${LangFileString} lng_de "němčina (de)"
+${LangFileString} lng_doi "Dogri (doi)"
+${LangFileString} lng_dz "Dzongkä (dz)"
+${LangFileString} lng_el "řečtina (el)"
+${LangFileString} lng_en "English (en)"
+${LangFileString} lng_en_AU "angličtina (Austrálie) (en_AU)"
+${LangFileString} lng_en_CA "angličtina (Kanada) (en_CA)"
+${LangFileString} lng_en_GB "angličtina (Spojené království) (en_GB)"
+${LangFileString} lng_en_US@piglatin "Pig Latin (en_US@piglatin)"
+${LangFileString} lng_eo "Esperanto (eo)"
+${LangFileString} lng_es "španělština (es)"
+${LangFileString} lng_es_MX "španělština (Mexiko) (es_MX)"
+${LangFileString} lng_et "estonština (et)"
+${LangFileString} lng_eu "Basque (eu)"
+${LangFileString} lng_fa "Farsi (fa)"
+${LangFileString} lng_fi "finština (fi)"
+${LangFileString} lng_fr "francouzština (fr)"
+${LangFileString} lng_ga "irština (ga)"
+${LangFileString} lng_gl "galicijština (gl)"
+${LangFileString} lng_gu "Gujarati (gu)"
+${LangFileString} lng_he "hebrejština (he)"
+${LangFileString} lng_hi "Hindi (hi)"
+${LangFileString} lng_hr "chorvatština (hr)"
+${LangFileString} lng_hu "maďarština (hu)"
+${LangFileString} lng_hy "arménština (hy)"
+${LangFileString} lng_id "indonéština (id)"
+${LangFileString} lng_is "Icelandic (is)"
+${LangFileString} lng_it "Italian (it)"
+${LangFileString} lng_ja "japonština (ja)"
+${LangFileString} lng_km "khmerština (km)"
+${LangFileString} lng_kn "Kannada (kn)"
+${LangFileString} lng_ko "korejština (ko)"
+${LangFileString} lng_kok "Konkani (kok)"
+${LangFileString} lng_kok@latin "Konkani in Latin script (kok@latin)"
+${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script (ks@aran)"
+${LangFileString} lng_ks@deva "Kashmiri in Devanagari script (ks@deva)"
+${LangFileString} lng_lt "litevština (lt)"
+${LangFileString} lng_lv "Latvian (lv)"
+${LangFileString} lng_mai "Maithili (mai)"
+${LangFileString} lng_mk "makedonština (mk)"
+${LangFileString} lng_ml "Malayalam (ml)"
+${LangFileString} lng_mn "mongolština (mn)"
+${LangFileString} lng_mni "Manipuri (mni)"
+${LangFileString} lng_mni@beng "Manipuri in Bengali script (mni@beng)"
+${LangFileString} lng_mr "Marathi (mr)"
+${LangFileString} lng_nb "Norwegian Bokmål (nb)"
+${LangFileString} lng_ne "Nepali (ne)"
+${LangFileString} lng_nl "nizozemština (nl)"
+${LangFileString} lng_nn "norský nynorsk (nn)"
+${LangFileString} lng_or "Odia (or)"
+${LangFileString} lng_pa "paňdžábština (pa)"
+${LangFileString} lng_pl "polština (pl)"
+${LangFileString} lng_pt "portugalština (pt)"
+${LangFileString} lng_pt_BR "portugalština (Brazílie) (pt_BR)"
+${LangFileString} lng_ro "rumunština (ro)"
+${LangFileString} lng_ru "ruština (ru)"
+${LangFileString} lng_rw "rwandština (rw)"
+${LangFileString} lng_sa "Sanskrit (sa)"
+${LangFileString} lng_sat "Santali (sat)"
+${LangFileString} lng_sat@deva "Santali in Devanagari script (sat@deva)"
+${LangFileString} lng_sd "Sindhi (sd)"
+${LangFileString} lng_sd@deva "Sindhi in Devanagari script (sd@deva)"
+${LangFileString} lng_sk "slovenština (sk)"
+${LangFileString} lng_sl "slovinština (sl)"
+${LangFileString} lng_sq "albánština (sq)"
+${LangFileString} lng_sr "srbština (sr)"
+${LangFileString} lng_sr@latin "srbština (latinka) (sr@latin)"
+${LangFileString} lng_sv "švédština (sv)"
+${LangFileString} lng_ta "Tamil (ta)"
+${LangFileString} lng_te "Telugu (te)"
+${LangFileString} lng_th "thajština (th)"
+${LangFileString} lng_tr "turečtina (tr)"
+${LangFileString} lng_uk "ukrajinština (uk)"
+${LangFileString} lng_ur "Urdu (ur)"
+${LangFileString} lng_vi "vietnamština (vi)"
+${LangFileString} lng_zh_CN "čínština (Čína) (zh_CN)"
+${LangFileString} lng_zh_TW "čínština (Taiwan) (zh_TW)"
diff --git a/packaging/win32/languages/Danish.nsh b/packaging/win32/languages/Danish.nsh
index 8091b92f9..881536844 100644
--- a/packaging/win32/languages/Danish.nsh
+++ b/packaging/win32/languages/Danish.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Ordbøger"
${LangFileString} DictionariesDesc "Ordbøger til nogle almene sprog til stavekontrol i Inkscape"
${LangFileString} Languages "Oversættelser"
${LangFileString} LanguagesDesc "Installér diverse oversættelser til Inkscape"
-${LangFileString} lng_am "Amharisk"
-${LangFileString} lng_ar "Arabisk"
-${LangFileString} lng_as "Assamesisk"
-${LangFileString} lng_az "Aserbajdsjansk"
-${LangFileString} lng_be "Hviderussisk"
-${LangFileString} lng_bg "Bulgarsk"
-${LangFileString} lng_bn "Bengalsk"
-${LangFileString} lng_bn_BD "Bengalsk (Bangladesh)"
-${LangFileString} lng_br "Bretonsk"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "Katalansk"
-${LangFileString} lng_ca@valencia "Katalansk (Valenciansk)"
-${LangFileString} lng_cs "Tjekkisk"
-${LangFileString} lng_da "Dansk"
-${LangFileString} lng_de "Tysk"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "Dzongkha"
-${LangFileString} lng_el "Græsk"
-${LangFileString} lng_en "Engelsk"
-${LangFileString} lng_en_AU "Engelsk (Australsk)"
-${LangFileString} lng_en_CA "Engelsk (Canadisk)"
-${LangFileString} lng_en_GB "Engelsk (Britisk)"
-${LangFileString} lng_en_US@piglatin "Pig Latin"
-${LangFileString} lng_eo "Esperanto"
-${LangFileString} lng_es "Spansk"
-${LangFileString} lng_es_MX "Spansk (Mexicansk)"
-${LangFileString} lng_et "Estisk"
-${LangFileString} lng_eu "Baskisk"
-${LangFileString} lng_fa "Farsi"
-${LangFileString} lng_fi "Finsk"
-${LangFileString} lng_fr "Fransk"
-${LangFileString} lng_ga "Irsk"
-${LangFileString} lng_gl "Galicisk"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "Hebraisk"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "Kroatisk"
-${LangFileString} lng_hu "Ungarsk"
-${LangFileString} lng_hy "Armensk"
-${LangFileString} lng_id "Indonesisk"
-${LangFileString} lng_is "Islandsk"
-${LangFileString} lng_it "Italiensk"
-${LangFileString} lng_ja "Japansk"
-${LangFileString} lng_km "Khmer"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "Koreansk"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani i latinsk skrift"
-${LangFileString} lng_ks@aran "Kashmiri i persisk-arabisk skrift"
-${LangFileString} lng_ks@deva "Kashmiri i devanagari skrift"
-${LangFileString} lng_lt "Litauisk"
-${LangFileString} lng_lv "Lettisk"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "Makedonsk"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "Mongolsk"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri i bengali skrift"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "Norsk (Bogmål)"
-${LangFileString} lng_ne "Nepalesisk"
-${LangFileString} lng_nl "Nederlandsk"
-${LangFileString} lng_nn "Norsk (Nynorsk)"
-${LangFileString} lng_or "Oriya"
-${LangFileString} lng_pa "Punjabisk"
-${LangFileString} lng_pl "Polsk"
-${LangFileString} lng_pt "Portugisisk"
-${LangFileString} lng_pt_BR "Portugisisk (Brasiliansk)"
-${LangFileString} lng_ro "Rumænsk"
-${LangFileString} lng_ru "Russisk"
-${LangFileString} lng_rw "Kinyarwanda"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali i devanagari skrift"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi i devanagari skrift"
-${LangFileString} lng_sk "Slovakisk"
-${LangFileString} lng_sl "Slovensk"
-${LangFileString} lng_sq "Albansk"
-${LangFileString} lng_sr "Serbisk"
-${LangFileString} lng_sr@latin "Serbisk i latinsk skrift"
-${LangFileString} lng_sv "Svensk"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "Telugu"
-${LangFileString} lng_th "Thai"
-${LangFileString} lng_tr "Tyrkisk"
-${LangFileString} lng_uk "Ukrainsk"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "Vietnamesisk"
-${LangFileString} lng_zh_CN "Kinesisk (forenklet)"
-${LangFileString} lng_zh_TW "Kinesisk (traditionel)"
${LangFileString} UInstOpt "Valgmuligheder for afinstallation"
${LangFileString} UInstOpt1 "Foretag venligst dine valg af yderligere valgmuligheder"
${LangFileString} PurgePrefs "Behold personlige præferencer"
diff --git a/packaging/win32/languages/Danish_languageNames.nsh b/packaging/win32/languages/Danish_languageNames.nsh
new file mode 100644
index 000000000..4e7368910
--- /dev/null
+++ b/packaging/win32/languages/Danish_languageNames.nsh
@@ -0,0 +1,94 @@
+### Danish (da) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'Danish.nsh'
+${LangFileString} lng_am "Amharic (am)"
+${LangFileString} lng_ar "Arabic (ar)"
+${LangFileString} lng_as "Assamese (as)"
+${LangFileString} lng_az "Azerbaijani (az)"
+${LangFileString} lng_be "Belarusian (be)"
+${LangFileString} lng_bg "Bulgarian (bg)"
+${LangFileString} lng_bn "Bengali (bn)"
+${LangFileString} lng_bn_BD "Bengali/Bangladesh (bn_BD)"
+${LangFileString} lng_br "Breton (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "Catalan (ca)"
+${LangFileString} lng_ca@valencia "Valencian Catalan (ca@valencia)"
+${LangFileString} lng_cs "Czech (cs)"
+${LangFileString} lng_da "Dansk (da)"
+${LangFileString} lng_de "German (de)"
+${LangFileString} lng_doi "Dogri (doi)"
+${LangFileString} lng_dz "Dzongkha (dz)"
+${LangFileString} lng_el "Greek (el)"
+${LangFileString} lng_en "Engelsk (en)"
+${LangFileString} lng_en_AU "English/Australia (en_AU)"
+${LangFileString} lng_en_CA "English/Canada (en_CA)"
+${LangFileString} lng_en_GB "English/Great Britain (en_GB)"
+${LangFileString} lng_en_US@piglatin "Pig Latin (en_US@piglatin)"
+${LangFileString} lng_eo "Esperanto (eo)"
+${LangFileString} lng_es "Spanish (es)"
+${LangFileString} lng_es_MX "Spanish/Mexico (es_MX)"
+${LangFileString} lng_et "Estonian (et)"
+${LangFileString} lng_eu "Basque (eu)"
+${LangFileString} lng_fa "Farsi (fa)"
+${LangFileString} lng_fi "Finnish (fi)"
+${LangFileString} lng_fr "French (fr)"
+${LangFileString} lng_ga "Irish (ga)"
+${LangFileString} lng_gl "Galician (gl)"
+${LangFileString} lng_gu "Gujarati (gu)"
+${LangFileString} lng_he "Hebrew (he)"
+${LangFileString} lng_hi "Hindi (hi)"
+${LangFileString} lng_hr "Croatian (hr)"
+${LangFileString} lng_hu "Hungarian (hu)"
+${LangFileString} lng_hy "Armenian (hy)"
+${LangFileString} lng_id "Indonesian (id)"
+${LangFileString} lng_is "Icelandic (is)"
+${LangFileString} lng_it "Italian (it)"
+${LangFileString} lng_ja "Japanese (ja)"
+${LangFileString} lng_km "Khmer (km)"
+${LangFileString} lng_kn "Kannada (kn)"
+${LangFileString} lng_ko "Korean (ko)"
+${LangFileString} lng_kok "Konkani (kok)"
+${LangFileString} lng_kok@latin "Konkani in Latin script (kok@latin)"
+${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script (ks@aran)"
+${LangFileString} lng_ks@deva "Kashmiri in Devanagari script (ks@deva)"
+${LangFileString} lng_lt "Lithuanian (lt)"
+${LangFileString} lng_lv "Latvian (lv)"
+${LangFileString} lng_mai "Maithili (mai)"
+${LangFileString} lng_mk "Macedonian (mk)"
+${LangFileString} lng_ml "Malayalam (ml)"
+${LangFileString} lng_mn "Mongolian (mn)"
+${LangFileString} lng_mni "Manipuri (mni)"
+${LangFileString} lng_mni@beng "Manipuri in Bengali script (mni@beng)"
+${LangFileString} lng_mr "Marathi (mr)"
+${LangFileString} lng_nb "Norwegian Bokmål (nb)"
+${LangFileString} lng_ne "Nepali (ne)"
+${LangFileString} lng_nl "Dutch (nl)"
+${LangFileString} lng_nn "Norwegian Nynorsk (nn)"
+${LangFileString} lng_or "Odia (or)"
+${LangFileString} lng_pa "Panjabi (pa)"
+${LangFileString} lng_pl "Polish (pl)"
+${LangFileString} lng_pt "Portuguese (pt)"
+${LangFileString} lng_pt_BR "Portuguese/Brazil (pt_BR)"
+${LangFileString} lng_ro "Romanian (ro)"
+${LangFileString} lng_ru "Russian (ru)"
+${LangFileString} lng_rw "Kinyarwanda (rw)"
+${LangFileString} lng_sa "Sanskrit (sa)"
+${LangFileString} lng_sat "Santali (sat)"
+${LangFileString} lng_sat@deva "Santali in Devanagari script (sat@deva)"
+${LangFileString} lng_sd "Sindhi (sd)"
+${LangFileString} lng_sd@deva "Sindhi in Devanagari script (sd@deva)"
+${LangFileString} lng_sk "Slovak (sk)"
+${LangFileString} lng_sl "Slovenian (sl)"
+${LangFileString} lng_sq "Albanian (sq)"
+${LangFileString} lng_sr "Serbian (sr)"
+${LangFileString} lng_sr@latin "Serbian in Latin script (sr@latin)"
+${LangFileString} lng_sv "Swedish (sv)"
+${LangFileString} lng_ta "Tamil (ta)"
+${LangFileString} lng_te "Telugu (te)"
+${LangFileString} lng_th "Thai (th)"
+${LangFileString} lng_tr "Turkish (tr)"
+${LangFileString} lng_uk "Ukrainian (uk)"
+${LangFileString} lng_ur "Urdu (ur)"
+${LangFileString} lng_vi "Vietnamese (vi)"
+${LangFileString} lng_zh_CN "Chinese/China (zh_CN)"
+${LangFileString} lng_zh_TW "Chinese/Taiwan (zh_TW)"
diff --git a/packaging/win32/languages/Dutch.nsh b/packaging/win32/languages/Dutch.nsh
index 27ce36bd8..4031edf81 100644
--- a/packaging/win32/languages/Dutch.nsh
+++ b/packaging/win32/languages/Dutch.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Dictionaries"
${LangFileString} DictionariesDesc "Dictionaries for some common languages for spell checking in Inkscape"
${LangFileString} Languages "Vertalingen"
${LangFileString} LanguagesDesc "Diverse vertalingen voor Inkscape installeren"
-${LangFileString} lng_am "Amhaars"
-${LangFileString} lng_ar "Arabisch"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "Azeri"
-${LangFileString} lng_be "Wit-Russisch"
-${LangFileString} lng_bg "Bulgaars"
-${LangFileString} lng_bn "Bengaals"
-${LangFileString} lng_bn_BD "Bengali Bangladesh"
-${LangFileString} lng_br "Bretoens"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "Catalaans"
-${LangFileString} lng_ca@valencia "Catalaans/Valencia"
-${LangFileString} lng_cs "Tsjechisch"
-${LangFileString} lng_da "Deens"
-${LangFileString} lng_de "Duits"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "Dzongkha"
-${LangFileString} lng_el "Grieks"
-${LangFileString} lng_en "Engels"
-${LangFileString} lng_en_AU "Engels/Australië"
-${LangFileString} lng_en_CA "Engels/Canada"
-${LangFileString} lng_en_GB "Engels/Groot-Brittannië"
-${LangFileString} lng_en_US@piglatin "Pig Latin"
-${LangFileString} lng_eo "Esperanto"
-${LangFileString} lng_es "Spaans"
-${LangFileString} lng_es_MX "Spaans/Mexico"
-${LangFileString} lng_et "Ests"
-${LangFileString} lng_eu "Baskisch"
-${LangFileString} lng_fa "Perzisch"
-${LangFileString} lng_fi "Fins"
-${LangFileString} lng_fr "Frans"
-${LangFileString} lng_ga "Iers"
-${LangFileString} lng_gl "Galisisch"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "Hebreeuws"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "Kroatisch"
-${LangFileString} lng_hu "Hongaars"
-${LangFileString} lng_hy "Armenian"
-${LangFileString} lng_id "Indonesisch"
-${LangFileString} lng_is "Icelandic"
-${LangFileString} lng_it "Italiaans"
-${LangFileString} lng_ja "Japans"
-${LangFileString} lng_km "Khmer"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "Koreaans"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "Litouws"
-${LangFileString} lng_lv "Latvian"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "Macedonisch"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "Mongools"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in Bengali script"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "Noors Bokmål"
-${LangFileString} lng_ne "Nepalees"
-${LangFileString} lng_nl "Nederlands"
-${LangFileString} lng_nn "Noors Nynorsk"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "Punjabi"
-${LangFileString} lng_pl "Pools"
-${LangFileString} lng_pt "Portugees"
-${LangFileString} lng_pt_BR "Portugees/Brazilië"
-${LangFileString} lng_ro "Roemeens"
-${LangFileString} lng_ru "Russisch"
-${LangFileString} lng_rw "Rwandees"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "Slovaaks"
-${LangFileString} lng_sl "Sloveens"
-${LangFileString} lng_sq "Albanees"
-${LangFileString} lng_sr "Servisch"
-${LangFileString} lng_sr@latin "Servisch in Latijnse karakters"
-${LangFileString} lng_sv "Zweeds"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "Telugu"
-${LangFileString} lng_th "Thai"
-${LangFileString} lng_tr "Turks"
-${LangFileString} lng_uk "Oekraïens"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "Vietnamees"
-${LangFileString} lng_zh_CN "Vereenvoudigd Chinees"
-${LangFileString} lng_zh_TW "Traditioneel Chinees"
${LangFileString} UInstOpt "Deïnstallatieopties"
${LangFileString} UInstOpt1 "Maak alstublief je keuzes voor additionele opties"
${LangFileString} PurgePrefs "Persoonlijke voorkeuren behouden"
diff --git a/packaging/win32/languages/Dutch_languageNames.nsh b/packaging/win32/languages/Dutch_languageNames.nsh
new file mode 100644
index 000000000..146f855b3
--- /dev/null
+++ b/packaging/win32/languages/Dutch_languageNames.nsh
@@ -0,0 +1,94 @@
+### Dutch (nl) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'Dutch.nsh'
+${LangFileString} lng_am "Amhaars (am)"
+${LangFileString} lng_ar "Arabisch (ar)"
+${LangFileString} lng_as "Assamees (as)"
+${LangFileString} lng_az "Azerbeidzjaans (az)"
+${LangFileString} lng_be "Wit-Russisch (be)"
+${LangFileString} lng_bg "Bulgaars (bg)"
+${LangFileString} lng_bn "Bengaals (bn)"
+${LangFileString} lng_bn_BD "Bengaals/Bangladesh (bn_BD)"
+${LangFileString} lng_br "Bretoens (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "Catalaans (ca)"
+${LangFileString} lng_ca@valencia "Catalaans/Valencia (ca@valencia)"
+${LangFileString} lng_cs "Tsjechisch (cs)"
+${LangFileString} lng_da "Deens (da)"
+${LangFileString} lng_de "Duits (de)"
+${LangFileString} lng_doi "Dogri (doi)"
+${LangFileString} lng_dz "Dzongkha (dz)"
+${LangFileString} lng_el "Grieks (el)"
+${LangFileString} lng_en "English (en)"
+${LangFileString} lng_en_AU "Engels/Australië (en_AU)"
+${LangFileString} lng_en_CA "Engels/Canada (en_CA)"
+${LangFileString} lng_en_GB "Engels/Groot-Brittannië (en_GB)"
+${LangFileString} lng_en_US@piglatin "Pig Latin (en_US@piglatin)"
+${LangFileString} lng_eo "Esperanto (eo)"
+${LangFileString} lng_es "Spaans (es)"
+${LangFileString} lng_es_MX "Spaans/Mexico (es_MX)"
+${LangFileString} lng_et "Ests (et)"
+${LangFileString} lng_eu "Baskisch (eu)"
+${LangFileString} lng_fa "Perzisch (fa)"
+${LangFileString} lng_fi "Fins (fi)"
+${LangFileString} lng_fr "Frans (fr)"
+${LangFileString} lng_ga "Iers (ga)"
+${LangFileString} lng_gl "Galisisch (gl)"
+${LangFileString} lng_gu "Gujarati (gu)"
+${LangFileString} lng_he "Hebreeuws (he)"
+${LangFileString} lng_hi "Hindi (hi)"
+${LangFileString} lng_hr "Kroatisch (hr)"
+${LangFileString} lng_hu "Hongaars (hu)"
+${LangFileString} lng_hy "Armeens (hy)"
+${LangFileString} lng_id "Indonesisch (id)"
+${LangFileString} lng_is "Ijslands (is)"
+${LangFileString} lng_it "Italiaans (it)"
+${LangFileString} lng_ja "Japans (ja)"
+${LangFileString} lng_km "Khmer (km)"
+${LangFileString} lng_kn "Kannada (kn)"
+${LangFileString} lng_ko "Koreaans (ko)"
+${LangFileString} lng_kok "Konkani (kok)"
+${LangFileString} lng_kok@latin "Konkani in Latijnse karakters (kok@latin)"
+${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script (ks@aran)"
+${LangFileString} lng_ks@deva "Kashmiri in Devanagari schrift (ks@deva)"
+${LangFileString} lng_lt "Litouws (lt)"
+${LangFileString} lng_lv "Lets (lv)"
+${LangFileString} lng_mai "Maithili (mai)"
+${LangFileString} lng_mk "Macedonisch (mk)"
+${LangFileString} lng_ml "Malayalam (ml)"
+${LangFileString} lng_mn "Mongools (mn)"
+${LangFileString} lng_mni "Manipuri (mni)"
+${LangFileString} lng_mni@beng "Manipuri in Bengaals schrift (mni@beng)"
+${LangFileString} lng_mr "Marathi (mr)"
+${LangFileString} lng_nb "Noors Bokmål (nb)"
+${LangFileString} lng_ne "Nepalees (ne)"
+${LangFileString} lng_nl "Nederlands (nl)"
+${LangFileString} lng_nn "Noors Nynorsk (nn)"
+${LangFileString} lng_or "Oriya (or)"
+${LangFileString} lng_pa "Punjabi (pa)"
+${LangFileString} lng_pl "Pools (pl)"
+${LangFileString} lng_pt "Portugees (pt)"
+${LangFileString} lng_pt_BR "Portugees/Brazillië (pt_BR)"
+${LangFileString} lng_ro "Roemeens (ro)"
+${LangFileString} lng_ru "Russisch (ru)"
+${LangFileString} lng_rw "Rwandees (rw)"
+${LangFileString} lng_sa "Sanskriet (sa)"
+${LangFileString} lng_sat "Santali (sat)"
+${LangFileString} lng_sat@deva "Santali in Devanagari schrift (sat@deva)"
+${LangFileString} lng_sd "Sindhi (sd)"
+${LangFileString} lng_sd@deva "Sindhi in Devanagari schrift (sd@deva)"
+${LangFileString} lng_sk "Slowaaks (sk)"
+${LangFileString} lng_sl "Sloveens (sl)"
+${LangFileString} lng_sq "Albanees (sq)"
+${LangFileString} lng_sr "Servisch (sr)"
+${LangFileString} lng_sr@latin "Servisch in Latijnse karakters (sr@latin)"
+${LangFileString} lng_sv "Zweeds (sv)"
+${LangFileString} lng_ta "Tamil (ta)"
+${LangFileString} lng_te "Telugu (te)"
+${LangFileString} lng_th "Thai (th)"
+${LangFileString} lng_tr "Turks (tr)"
+${LangFileString} lng_uk "Oekraïens (uk)"
+${LangFileString} lng_ur "Urdu (ur)"
+${LangFileString} lng_vi "Vietnamees (vi)"
+${LangFileString} lng_zh_CN "Chinees/China (zh_CN)"
+${LangFileString} lng_zh_TW "Chinees/Taiwan (zh_TW)"
diff --git a/packaging/win32/languages/English.nsh b/packaging/win32/languages/English.nsh
index be6d6c217..6c6700caa 100644
--- a/packaging/win32/languages/English.nsh
+++ b/packaging/win32/languages/English.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Dictionaries"
${LangFileString} DictionariesDesc "Dictionaries for some common languages for spell checking in Inkscape"
${LangFileString} Languages "Translations"
${LangFileString} LanguagesDesc "Translations and localized content for Inkscape"
-${LangFileString} lng_am "Amharic"
-${LangFileString} lng_ar "Arabic"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "Azerbaijani"
-${LangFileString} lng_be "Belarusian"
-${LangFileString} lng_bg "Bulgarian"
-${LangFileString} lng_bn "Bengali"
-${LangFileString} lng_bn_BD "Bengali Bangladesh"
-${LangFileString} lng_br "Breton"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "Catalan"
-${LangFileString} lng_ca@valencia "Valencian Catalan"
-${LangFileString} lng_cs "Czech"
-${LangFileString} lng_da "Danish"
-${LangFileString} lng_de "German"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "Dzongkha"
-${LangFileString} lng_el "Greek"
-${LangFileString} lng_en "English"
-${LangFileString} lng_en_AU "Australian English"
-${LangFileString} lng_en_CA "Canadian English"
-${LangFileString} lng_en_GB "British English"
-${LangFileString} lng_en_US@piglatin "Pig Latin"
-${LangFileString} lng_eo "Esperanto"
-${LangFileString} lng_es "Spanish"
-${LangFileString} lng_es_MX "Mexican Spanish"
-${LangFileString} lng_et "Estonian"
-${LangFileString} lng_eu "Basque"
-${LangFileString} lng_fa "Farsi"
-${LangFileString} lng_fi "Finnish"
-${LangFileString} lng_fr "French"
-${LangFileString} lng_ga "Irish"
-${LangFileString} lng_gl "Galician"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "Hebrew"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "Croatian"
-${LangFileString} lng_hu "Hungarian"
-${LangFileString} lng_hy "Armenian"
-${LangFileString} lng_id "Indonesian"
-${LangFileString} lng_is "Icelandic"
-${LangFileString} lng_it "Italian"
-${LangFileString} lng_ja "Japanese"
-${LangFileString} lng_km "Khmer"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "Korean"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "Lithuanian"
-${LangFileString} lng_lv "Latvian"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "Macedonian"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "Mongolian"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in Bengali script"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "Norwegian Bokmål"
-${LangFileString} lng_ne "Nepali"
-${LangFileString} lng_nl "Dutch"
-${LangFileString} lng_nn "Norwegian Nynorsk"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "Panjabi"
-${LangFileString} lng_pl "Polish"
-${LangFileString} lng_pt "Portuguese"
-${LangFileString} lng_pt_BR "Brazilian Portuguese"
-${LangFileString} lng_ro "Romanian"
-${LangFileString} lng_ru "Russian"
-${LangFileString} lng_rw "Kinyarwanda"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "Slovak"
-${LangFileString} lng_sl "Slovenian"
-${LangFileString} lng_sq "Albanian"
-${LangFileString} lng_sr "Serbian"
-${LangFileString} lng_sr@latin "Serbian in Latin script"
-${LangFileString} lng_sv "Swedish"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "Telugu"
-${LangFileString} lng_th "Thai"
-${LangFileString} lng_tr "Turkish"
-${LangFileString} lng_uk "Ukrainian"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "Vietnamese"
-${LangFileString} lng_zh_CN "Simplifed Chinese"
-${LangFileString} lng_zh_TW "Traditional Chinese"
${LangFileString} UInstOpt "Uninstallation Options"
${LangFileString} UInstOpt1 "Please make your choices for additional options"
${LangFileString} PurgePrefs "Keep personal Preferences"
diff --git a/packaging/win32/languages/English_languageNames.nsh b/packaging/win32/languages/English_languageNames.nsh
new file mode 100644
index 000000000..ce6f9e225
--- /dev/null
+++ b/packaging/win32/languages/English_languageNames.nsh
@@ -0,0 +1,94 @@
+### English (en) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'English.nsh'
+${LangFileString} lng_am "Amharic (am)"
+${LangFileString} lng_ar "Arabic (ar)"
+${LangFileString} lng_as "Assamese (as)"
+${LangFileString} lng_az "Azerbaijani (az)"
+${LangFileString} lng_be "Belarusian (be)"
+${LangFileString} lng_bg "Bulgarian (bg)"
+${LangFileString} lng_bn "Bengali (bn)"
+${LangFileString} lng_bn_BD "Bengali/Bangladesh (bn_BD)"
+${LangFileString} lng_br "Breton (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "Catalan (ca)"
+${LangFileString} lng_ca@valencia "Valencian Catalan (ca@valencia)"
+${LangFileString} lng_cs "Czech (cs)"
+${LangFileString} lng_da "Danish (da)"
+${LangFileString} lng_de "German (de)"
+${LangFileString} lng_doi "Dogri (doi)"
+${LangFileString} lng_dz "Dzongkha (dz)"
+${LangFileString} lng_el "Greek (el)"
+${LangFileString} lng_en "English (en)"
+${LangFileString} lng_en_AU "English/Australia (en_AU)"
+${LangFileString} lng_en_CA "English/Canada (en_CA)"
+${LangFileString} lng_en_GB "English/Great Britain (en_GB)"
+${LangFileString} lng_en_US@piglatin "Pig Latin (en_US@piglatin)"
+${LangFileString} lng_eo "Esperanto (eo)"
+${LangFileString} lng_es "Spanish (es)"
+${LangFileString} lng_es_MX "Spanish/Mexico (es_MX)"
+${LangFileString} lng_et "Estonian (et)"
+${LangFileString} lng_eu "Basque (eu)"
+${LangFileString} lng_fa "Farsi (fa)"
+${LangFileString} lng_fi "Finnish (fi)"
+${LangFileString} lng_fr "French (fr)"
+${LangFileString} lng_ga "Irish (ga)"
+${LangFileString} lng_gl "Galician (gl)"
+${LangFileString} lng_gu "Gujarati (gu)"
+${LangFileString} lng_he "Hebrew (he)"
+${LangFileString} lng_hi "Hindi (hi)"
+${LangFileString} lng_hr "Croatian (hr)"
+${LangFileString} lng_hu "Hungarian (hu)"
+${LangFileString} lng_hy "Armenian (hy)"
+${LangFileString} lng_id "Indonesian (id)"
+${LangFileString} lng_is "Icelandic (is)"
+${LangFileString} lng_it "Italian (it)"
+${LangFileString} lng_ja "Japanese (ja)"
+${LangFileString} lng_km "Khmer (km)"
+${LangFileString} lng_kn "Kannada (kn)"
+${LangFileString} lng_ko "Korean (ko)"
+${LangFileString} lng_kok "Konkani (kok)"
+${LangFileString} lng_kok@latin "Konkani in Latin script (kok@latin)"
+${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script (ks@aran)"
+${LangFileString} lng_ks@deva "Kashmiri in Devanagari script (ks@deva)"
+${LangFileString} lng_lt "Lithuanian (lt)"
+${LangFileString} lng_lv "Latvian (lv)"
+${LangFileString} lng_mai "Maithili (mai)"
+${LangFileString} lng_mk "Macedonian (mk)"
+${LangFileString} lng_ml "Malayalam (ml)"
+${LangFileString} lng_mn "Mongolian (mn)"
+${LangFileString} lng_mni "Manipuri (mni)"
+${LangFileString} lng_mni@beng "Manipuri in Bengali script (mni@beng)"
+${LangFileString} lng_mr "Marathi (mr)"
+${LangFileString} lng_nb "Norwegian Bokmål (nb)"
+${LangFileString} lng_ne "Nepali (ne)"
+${LangFileString} lng_nl "Dutch (nl)"
+${LangFileString} lng_nn "Norwegian Nynorsk (nn)"
+${LangFileString} lng_or "Odia (or)"
+${LangFileString} lng_pa "Panjabi (pa)"
+${LangFileString} lng_pl "Polish (pl)"
+${LangFileString} lng_pt "Portuguese (pt)"
+${LangFileString} lng_pt_BR "Portuguese/Brazil (pt_BR)"
+${LangFileString} lng_ro "Romanian (ro)"
+${LangFileString} lng_ru "Russian (ru)"
+${LangFileString} lng_rw "Kinyarwanda (rw)"
+${LangFileString} lng_sa "Sanskrit (sa)"
+${LangFileString} lng_sat "Santali (sat)"
+${LangFileString} lng_sat@deva "Santali in Devanagari script (sat@deva)"
+${LangFileString} lng_sd "Sindhi (sd)"
+${LangFileString} lng_sd@deva "Sindhi in Devanagari script (sd@deva)"
+${LangFileString} lng_sk "Slovak (sk)"
+${LangFileString} lng_sl "Slovenian (sl)"
+${LangFileString} lng_sq "Albanian (sq)"
+${LangFileString} lng_sr "Serbian (sr)"
+${LangFileString} lng_sr@latin "Serbian in Latin script (sr@latin)"
+${LangFileString} lng_sv "Swedish (sv)"
+${LangFileString} lng_ta "Tamil (ta)"
+${LangFileString} lng_te "Telugu (te)"
+${LangFileString} lng_th "Thai (th)"
+${LangFileString} lng_tr "Turkish (tr)"
+${LangFileString} lng_uk "Ukrainian (uk)"
+${LangFileString} lng_ur "Urdu (ur)"
+${LangFileString} lng_vi "Vietnamese (vi)"
+${LangFileString} lng_zh_CN "Chinese/China (zh_CN)"
+${LangFileString} lng_zh_TW "Chinese/Taiwan (zh_TW)"
diff --git a/packaging/win32/languages/Finnish.nsh b/packaging/win32/languages/Finnish.nsh
index a33fa1722..492f2633e 100644
--- a/packaging/win32/languages/Finnish.nsh
+++ b/packaging/win32/languages/Finnish.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Dictionaries"
${LangFileString} DictionariesDesc "Dictionaries for some common languages for spell checking in Inkscape"
${LangFileString} Languages "Käännökset"
${LangFileString} LanguagesDesc "Asenna Inkscapen käännökset"
-${LangFileString} lng_am "amhari"
-${LangFileString} lng_ar "Arabic"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "azerbaid?ani"
-${LangFileString} lng_be "valkovenäjä"
-${LangFileString} lng_bg "bulgaria"
-${LangFileString} lng_bn "Bengali"
-${LangFileString} lng_bn_BD "Bengali Bangladesh"
-${LangFileString} lng_br "Breton"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "katalaani"
-${LangFileString} lng_ca@valencia "Valencian Catalan"
-${LangFileString} lng_cs "t?ekki"
-${LangFileString} lng_da "tanska"
-${LangFileString} lng_de "saksa"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "dzongkha"
-${LangFileString} lng_el "kreikka"
-${LangFileString} lng_en "englanti"
-${LangFileString} lng_en_AU "Australian English"
-${LangFileString} lng_en_CA "Kanadan englanti"
-${LangFileString} lng_en_GB "Britti-englanti"
-${LangFileString} lng_en_US@piglatin "kontin kieli (en)"
-${LangFileString} lng_eo "Esperanto"
-${LangFileString} lng_es "espanja"
-${LangFileString} lng_es_MX "Meksikon espanja"
-${LangFileString} lng_et "eesti"
-${LangFileString} lng_eu "Basque"
-${LangFileString} lng_fa "Farsi"
-${LangFileString} lng_fi "suomi"
-${LangFileString} lng_fr "ranska"
-${LangFileString} lng_ga "iiri"
-${LangFileString} lng_gl "galicia"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "Hebrew"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "kroatia"
-${LangFileString} lng_hu "unkari"
-${LangFileString} lng_hy "Armenian"
-${LangFileString} lng_id "Indonesian"
-${LangFileString} lng_is "Icelandic"
-${LangFileString} lng_it "italia"
-${LangFileString} lng_ja "japani"
-${LangFileString} lng_km "Khmer"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "korea"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "liettua"
-${LangFileString} lng_lv "Latvian"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "makedonia"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "mongolia"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in Bengali script"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "kirjanorja"
-${LangFileString} lng_ne "nepali"
-${LangFileString} lng_nl "hollanti"
-${LangFileString} lng_nn "nykynorja"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "punjabi"
-${LangFileString} lng_pl "puola"
-${LangFileString} lng_pt "portugali"
-${LangFileString} lng_pt_BR "Brasilian portugali"
-${LangFileString} lng_ro "Romanian"
-${LangFileString} lng_ru "venäjä"
-${LangFileString} lng_rw "ruanda"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "slovakki"
-${LangFileString} lng_sl "sloveeni"
-${LangFileString} lng_sq "albania"
-${LangFileString} lng_sr "serbia"
-${LangFileString} lng_sr@latin "serbia (latin)"
-${LangFileString} lng_sv "ruotsi"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "Telugu"
-${LangFileString} lng_th "thai"
-${LangFileString} lng_tr "turkki"
-${LangFileString} lng_uk "ukraina"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "vietnami"
-${LangFileString} lng_zh_CN "yksinkertaistettu kiina"
-${LangFileString} lng_zh_TW "perinteinen kiina"
${LangFileString} UInstOpt "Ohjelman poiston asetukset"
${LangFileString} UInstOpt1 "Valitse haluamasi asetukset ohjelman poistamiseksi"
${LangFileString} PurgePrefs "Säilytä omat asetukset"
diff --git a/packaging/win32/languages/Finnish_languageNames.nsh b/packaging/win32/languages/Finnish_languageNames.nsh
new file mode 100644
index 000000000..b0c5a18ee
--- /dev/null
+++ b/packaging/win32/languages/Finnish_languageNames.nsh
@@ -0,0 +1,94 @@
+### Finnish (fi) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'Finnish.nsh'
+${LangFileString} lng_am "Amharic (am)"
+${LangFileString} lng_ar "Arabia (ar)"
+${LangFileString} lng_as "Assamese (as)"
+${LangFileString} lng_az "Azerbaijani (az)"
+${LangFileString} lng_be "Valkovenäjä (be)"
+${LangFileString} lng_bg "Bulgaria (bg)"
+${LangFileString} lng_bn "Bengali (bn)"
+${LangFileString} lng_bn_BD "Bengali/Bangladesh (bn_BD)"
+${LangFileString} lng_br "Breton (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "Catalan (ca)"
+${LangFileString} lng_ca@valencia "Valencian Catalan (ca@valencia)"
+${LangFileString} lng_cs "Tsekki (cs)"
+${LangFileString} lng_da "Tanska (da)"
+${LangFileString} lng_de "Saksa (de)"
+${LangFileString} lng_doi "Dogri (doi)"
+${LangFileString} lng_dz "Dzongkha (dz)"
+${LangFileString} lng_el "Kreikka (el)"
+${LangFileString} lng_en "Englanti (en)"
+${LangFileString} lng_en_AU "Englanti/Australia (en_AU)"
+${LangFileString} lng_en_CA "Englanti/Kanada (en_CA)"
+${LangFileString} lng_en_GB "Englanti/Iso Britannia (en_GB)"
+${LangFileString} lng_en_US@piglatin "Siansaksa (en_US@piglatin)"
+${LangFileString} lng_eo "Esperanto (eo)"
+${LangFileString} lng_es "Espanja (es)"
+${LangFileString} lng_es_MX "Espanja/Meksiko (es_MX)"
+${LangFileString} lng_et "Viro (et)"
+${LangFileString} lng_eu "Basque (eu)"
+${LangFileString} lng_fa "Farsi (fa)"
+${LangFileString} lng_fi "Suomi (fi)"
+${LangFileString} lng_fr "Ranska (fr)"
+${LangFileString} lng_ga "Irlanti (ga)"
+${LangFileString} lng_gl "Galician (gl)"
+${LangFileString} lng_gu "Gujarati (gu)"
+${LangFileString} lng_he "Heprea (he)"
+${LangFileString} lng_hi "Hindi (hi)"
+${LangFileString} lng_hr "Kroatia (hr)"
+${LangFileString} lng_hu "Unkari (hu)"
+${LangFileString} lng_hy "Armenia (hy)"
+${LangFileString} lng_id "Indonesa (id)"
+${LangFileString} lng_is "Icelandic (is)"
+${LangFileString} lng_it "Italia (it)"
+${LangFileString} lng_ja "Japani (ja)"
+${LangFileString} lng_km "Khmer (km)"
+${LangFileString} lng_kn "Kannada (kn)"
+${LangFileString} lng_ko "Korea (ko)"
+${LangFileString} lng_kok "Konkani (kok)"
+${LangFileString} lng_kok@latin "Konkani in Latin script (kok@latin)"
+${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script (ks@aran)"
+${LangFileString} lng_ks@deva "Kashmiri in Devanagari script (ks@deva)"
+${LangFileString} lng_lt "Liettua (lt)"
+${LangFileString} lng_lv "Latvian (lv)"
+${LangFileString} lng_mai "Maithili (mai)"
+${LangFileString} lng_mk "Makedonia (mk)"
+${LangFileString} lng_ml "Malayalam (ml)"
+${LangFileString} lng_mn "Mongolia (mn)"
+${LangFileString} lng_mni "Manipuri (mni)"
+${LangFileString} lng_mni@beng "Manipuri in Bengali script (mni@beng)"
+${LangFileString} lng_mr "Marathi (mr)"
+${LangFileString} lng_nb "Norja Bokmål (nb)"
+${LangFileString} lng_ne "Nepali (ne)"
+${LangFileString} lng_nl "Hollanti (nl)"
+${LangFileString} lng_nn "Norja Nynorsk (nn)"
+${LangFileString} lng_or "Odia (or)"
+${LangFileString} lng_pa "Panjabi (pa)"
+${LangFileString} lng_pl "Puola (pl)"
+${LangFileString} lng_pt "Portugali (pt)"
+${LangFileString} lng_pt_BR "Portugali/Brasilia (pt_BR)"
+${LangFileString} lng_ro "Romania (ro)"
+${LangFileString} lng_ru "Venäjä (ru)"
+${LangFileString} lng_rw "Kinyarwanda (rw)"
+${LangFileString} lng_sa "Sanskrit (sa)"
+${LangFileString} lng_sat "Santali (sat)"
+${LangFileString} lng_sat@deva "Santali in Devanagari script (sat@deva)"
+${LangFileString} lng_sd "Sindhi (sd)"
+${LangFileString} lng_sd@deva "Sindhi in Devanagari script (sd@deva)"
+${LangFileString} lng_sk "Slovakia (sk)"
+${LangFileString} lng_sl "Slovenia (sl)"
+${LangFileString} lng_sq "Albania (sq)"
+${LangFileString} lng_sr "Serbia (sr)"
+${LangFileString} lng_sr@latin "Serbia/Latin (sr@latin)"
+${LangFileString} lng_sv "Ruotsi (sv)"
+${LangFileString} lng_ta "Tamil (ta)"
+${LangFileString} lng_te "Telugu (te)"
+${LangFileString} lng_th "Thai (th)"
+${LangFileString} lng_tr "Turkki (tr)"
+${LangFileString} lng_uk "Ukraina (uk)"
+${LangFileString} lng_ur "Urdu (ur)"
+${LangFileString} lng_vi "Vietnami (vi)"
+${LangFileString} lng_zh_CN "Kiina (zh_CN)"
+${LangFileString} lng_zh_TW "Kiina/Taiwan (zh_TW)"
diff --git a/packaging/win32/languages/French.nsh b/packaging/win32/languages/French.nsh
index 64d8793d4..e7349853d 100644
--- a/packaging/win32/languages/French.nsh
+++ b/packaging/win32/languages/French.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Dictionaries"
${LangFileString} DictionariesDesc "Dictionaries for some common languages for spell checking in Inkscape"
${LangFileString} Languages "Traductions"
${LangFileString} LanguagesDesc "Installer les traductions d'Inkscape"
-${LangFileString} lng_am "Amharique"
-${LangFileString} lng_ar "Arabe"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "Azéri"
-${LangFileString} lng_be "Biélorusse"
-${LangFileString} lng_bg "Bulgare"
-${LangFileString} lng_bn "Bengali"
-${LangFileString} lng_bn_BD "Bengali (Bangladesh)"
-${LangFileString} lng_br "Breton"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "Catalan"
-${LangFileString} lng_ca@valencia "Catalan (Valence)"
-${LangFileString} lng_cs "Tchèque"
-${LangFileString} lng_da "Danois"
-${LangFileString} lng_de "Allemand"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "Dzongkha"
-${LangFileString} lng_el "Grec"
-${LangFileString} lng_en "Anglais"
-${LangFileString} lng_en_AU "Anglais (Australie)"
-${LangFileString} lng_en_CA "Anglais (Canada)"
-${LangFileString} lng_en_GB "Anglais (Royaume-Uni)"
-${LangFileString} lng_en_US@piglatin "Pig latin"
-${LangFileString} lng_eo "Espéranto"
-${LangFileString} lng_es "Espagnol"
-${LangFileString} lng_es_MX "Espagnol (Mexique)"
-${LangFileString} lng_et "Estonien"
-${LangFileString} lng_eu "Basque"
-${LangFileString} lng_fa "Farsi"
-${LangFileString} lng_fi "Finnois"
-${LangFileString} lng_fr "Français"
-${LangFileString} lng_ga "Irlandais"
-${LangFileString} lng_gl "Galicien"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "Hébreu"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "Croate"
-${LangFileString} lng_hu "Hongrois"
-${LangFileString} lng_hy "Armenian"
-${LangFileString} lng_id "Indonésien"
-${LangFileString} lng_is "Islandais"
-${LangFileString} lng_it "Italien"
-${LangFileString} lng_ja "Japonais"
-${LangFileString} lng_km "Khmer"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "Coréen"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "Lituanien"
-${LangFileString} lng_lv "Latvian"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "Macédonien"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "Mongol"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in Bengali script"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "Bokmål (Norvège)"
-${LangFileString} lng_ne "Népalais"
-${LangFileString} lng_nl "Néerlandais"
-${LangFileString} lng_nn "Nynorsk (Norvège)"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "Pendjabi"
-${LangFileString} lng_pl "Polonais"
-${LangFileString} lng_pt "Portugais"
-${LangFileString} lng_pt_BR "Portugais (Brésil)"
-${LangFileString} lng_ro "Roumain"
-${LangFileString} lng_ru "Russe"
-${LangFileString} lng_rw "Kinyarouandais"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "Slovaque"
-${LangFileString} lng_sl "Slovène"
-${LangFileString} lng_sq "Albanais"
-${LangFileString} lng_sr "Serbe"
-${LangFileString} lng_sr@latin "Serbe (notation latine)"
-${LangFileString} lng_sv "Suédois"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "Telugu"
-${LangFileString} lng_th "Thaï"
-${LangFileString} lng_tr "Turc"
-${LangFileString} lng_uk "Ukrainien"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "Vietnamien"
-${LangFileString} lng_zh_CN "Chinois"
-${LangFileString} lng_zh_TW "Chinois (Taïwan)"
${LangFileString} UInstOpt "Options de désinstallation"
${LangFileString} UInstOpt1 "Choisissez parmi les options additionnelles"
${LangFileString} PurgePrefs "Conserver les préférences personnelles"
diff --git a/packaging/win32/languages/French_languageNames.nsh b/packaging/win32/languages/French_languageNames.nsh
new file mode 100644
index 000000000..00dbda62a
--- /dev/null
+++ b/packaging/win32/languages/French_languageNames.nsh
@@ -0,0 +1,94 @@
+### French (fr) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'French.nsh'
+${LangFileString} lng_am "Amharique (am)"
+${LangFileString} lng_ar "Arabe (ar)"
+${LangFileString} lng_as "Assamais (as)"
+${LangFileString} lng_az "Azéri (az)"
+${LangFileString} lng_be "Biélorusse (be)"
+${LangFileString} lng_bg "Bulgare (bg)"
+${LangFileString} lng_bn "Bengali (bn)"
+${LangFileString} lng_bn_BD "Bengali/Bangladesh (bn_BD)"
+${LangFileString} lng_br "Breton (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "Catalan (ca)"
+${LangFileString} lng_ca@valencia "Catalan valencien (ca@valencia)"
+${LangFileString} lng_cs "Tchèque (cs)"
+${LangFileString} lng_da "Danois (da)"
+${LangFileString} lng_de "Allemand (de)"
+${LangFileString} lng_doi "Dogri (doi)"
+${LangFileString} lng_dz "Dzongkha (dz)"
+${LangFileString} lng_el "Grec (el)"
+${LangFileString} lng_en "Anglais (en)"
+${LangFileString} lng_en_AU "Anglais/Australie (en_AU)"
+${LangFileString} lng_en_CA "Anglais/Canada (en_CA)"
+${LangFileString} lng_en_GB "Anglais/Grande-Bretagne (en_GB)"
+${LangFileString} lng_en_US@piglatin "Pig Latin (en_US@piglatin)"
+${LangFileString} lng_eo "Espéranto (eo)"
+${LangFileString} lng_es "Espagnol (es)"
+${LangFileString} lng_es_MX "Espagnol/Mexique (es_MX)"
+${LangFileString} lng_et "Estonien (et)"
+${LangFileString} lng_eu "Basque (eu)"
+${LangFileString} lng_fa "Farsi (fa)"
+${LangFileString} lng_fi "Finnois (fi)"
+${LangFileString} lng_fr "Français (fr)"
+${LangFileString} lng_ga "Irlandais (ga)"
+${LangFileString} lng_gl "Galicien (gl)"
+${LangFileString} lng_gu "Gujarati (gu)"
+${LangFileString} lng_he "Hébreu (he)"
+${LangFileString} lng_hi "Hindi (hi)"
+${LangFileString} lng_hr "Croate (hr)"
+${LangFileString} lng_hu "Hongrois (hu)"
+${LangFileString} lng_hy "Arménien (hy)"
+${LangFileString} lng_id "Indonésien (id)"
+${LangFileString} lng_is "Islandais (is)"
+${LangFileString} lng_it "Italien (it)"
+${LangFileString} lng_ja "Japonais (ja)"
+${LangFileString} lng_km "Khmer (km)"
+${LangFileString} lng_kn "Kannada (kn)"
+${LangFileString} lng_ko "Coréen (ko)"
+${LangFileString} lng_kok "Konkani (kok)"
+${LangFileString} lng_kok@latin "Konkani, alphabet latin (kok@latin)"
+${LangFileString} lng_ks@aran "Kashmiri, écriture perso-arabe (ks@aran)"
+${LangFileString} lng_ks@deva "Kashmiri, écriture dévanagarie (ks@deva)"
+${LangFileString} lng_lt "Lituanien (lt)"
+${LangFileString} lng_lv "Letton (lv)"
+${LangFileString} lng_mai "Maithili (mai)"
+${LangFileString} lng_mk "Macédonien (mk)"
+${LangFileString} lng_ml "Malayalam (ml)"
+${LangFileString} lng_mn "Mongol (mn)"
+${LangFileString} lng_mni "Manipuri (mni)"
+${LangFileString} lng_mni@beng "Manipuri, écriture bengalie (mni@beng)"
+${LangFileString} lng_mr "Marathi (mr)"
+${LangFileString} lng_nb "Norvégien Bokmål (nb)"
+${LangFileString} lng_ne "Népalais (ne)"
+${LangFileString} lng_nl "Néerlandais (nl)"
+${LangFileString} lng_nn "Norvégien Nynorsk (nn)"
+${LangFileString} lng_or "Odia (or)"
+${LangFileString} lng_pa "Panjabi (pa)"
+${LangFileString} lng_pl "Polonais (pl)"
+${LangFileString} lng_pt "Portugais (pt)"
+${LangFileString} lng_pt_BR "Portugais/Brésil (pt_BR)"
+${LangFileString} lng_ro "Roumain (ro)"
+${LangFileString} lng_ru "Russe (ru)"
+${LangFileString} lng_rw "Kinyarouanda (rw)"
+${LangFileString} lng_sa "Sanskrit (sa)"
+${LangFileString} lng_sat "Santali (sat)"
+${LangFileString} lng_sat@deva "Santali, écriture dévanagarie (sat@deva)"
+${LangFileString} lng_sd "Sindhi (sd)"
+${LangFileString} lng_sd@deva "Sindhi, écriture dévanagarie (sd@deva)"
+${LangFileString} lng_sk "Slovaque (sk)"
+${LangFileString} lng_sl "Slovène (sl)"
+${LangFileString} lng_sq "Albanais (sq)"
+${LangFileString} lng_sr "Serbe (sr)"
+${LangFileString} lng_sr@latin "Serbe, alphabet latin (sr@latin)"
+${LangFileString} lng_sv "Suédois (sv)"
+${LangFileString} lng_ta "Tamoul (ta)"
+${LangFileString} lng_te "Télougou (te)"
+${LangFileString} lng_th "Thaï (th)"
+${LangFileString} lng_tr "Turc (tr)"
+${LangFileString} lng_uk "Ukrainien (uk)"
+${LangFileString} lng_ur "Urdu (ur)"
+${LangFileString} lng_vi "Vietnamien (vi)"
+${LangFileString} lng_zh_CN "Chinois/Chine (zh_CN)"
+${LangFileString} lng_zh_TW "Chinois/Taïwan (zh_TW)"
diff --git a/packaging/win32/languages/Galician.nsh b/packaging/win32/languages/Galician.nsh
index bc5bd6724..f107118b1 100644
--- a/packaging/win32/languages/Galician.nsh
+++ b/packaging/win32/languages/Galician.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Dictionaries"
${LangFileString} DictionariesDesc "Dictionaries for some common languages for spell checking in Inkscape"
${LangFileString} Languages "Traducións"
${LangFileString} LanguagesDesc "Instala varias traducións de Inkscape"
-${LangFileString} lng_am "Amhárico"
-${LangFileString} lng_ar "Arabic"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "Azerí"
-${LangFileString} lng_be "Bielorruso"
-${LangFileString} lng_bg "Búlgaro"
-${LangFileString} lng_bn "Bengalí"
-${LangFileString} lng_bn_BD "Bengali Bangladesh"
-${LangFileString} lng_br "Breton"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "Catalán"
-${LangFileString} lng_ca@valencia "Catalán Valenciano"
-${LangFileString} lng_cs "Checo"
-${LangFileString} lng_da "Danés"
-${LangFileString} lng_de "Alemán"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "Dzongkha"
-${LangFileString} lng_el "Grego"
-${LangFileString} lng_en "Inglés"
-${LangFileString} lng_en_AU "Inglés Australiano"
-${LangFileString} lng_en_CA "Inglés Canadense"
-${LangFileString} lng_en_GB "Inglés Británico"
-${LangFileString} lng_en_US@piglatin "Pig Latin"
-${LangFileString} lng_eo "Esperanto"
-${LangFileString} lng_es "Español"
-${LangFileString} lng_es_MX "Español Mexicano"
-${LangFileString} lng_et "Estonio"
-${LangFileString} lng_eu "Éuscaro "
-${LangFileString} lng_fa "Farsi"
-${LangFileString} lng_fi "Finés"
-${LangFileString} lng_fr "Francés"
-${LangFileString} lng_ga "Gaélico Irlandés"
-${LangFileString} lng_gl "Galego"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "Hebreo"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "Croata"
-${LangFileString} lng_hu "Húngaro"
-${LangFileString} lng_hy "Armenian"
-${LangFileString} lng_id "Indonesio"
-${LangFileString} lng_is "Icelandic"
-${LangFileString} lng_it "Italiano"
-${LangFileString} lng_ja "Xaponés"
-${LangFileString} lng_km "Khmer"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "Coreano"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "Lituano"
-${LangFileString} lng_lv "Latvian"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "Macedonio"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "Mongol"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in Bengali script"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "Noruegués Bokmål"
-${LangFileString} lng_ne "Nepalí"
-${LangFileString} lng_nl "Neerlandés"
-${LangFileString} lng_nn "Noruegués Nynorsk"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "Punjabi"
-${LangFileString} lng_pl "Polaco"
-${LangFileString} lng_pt "Portugués"
-${LangFileString} lng_pt_BR "Portugués Brasileiro"
-${LangFileString} lng_ro "Romanés"
-${LangFileString} lng_ru "Ruso"
-${LangFileString} lng_rw "Kinyarwanda"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "Eslovaco"
-${LangFileString} lng_sl "Eslovenio"
-${LangFileString} lng_sq "Albanés"
-${LangFileString} lng_sr "Serbio"
-${LangFileString} lng_sr@latin "Serbio con alfabeto Latino"
-${LangFileString} lng_sv "Sueco"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "Telugu"
-${LangFileString} lng_th "Tailandés"
-${LangFileString} lng_tr "Turco"
-${LangFileString} lng_uk "Ucraíno"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "Vietnamita"
-${LangFileString} lng_zh_CN "Chinés Simplificado"
-${LangFileString} lng_zh_TW "Chinés Tradicional"
${LangFileString} UInstOpt "Opcións de Desinstalación"
${LangFileString} UInstOpt1 "Escolla as opcións adicionais"
${LangFileString} PurgePrefs "Conservar a Configuración persoal"
diff --git a/packaging/win32/languages/Galician_languageNames.nsh b/packaging/win32/languages/Galician_languageNames.nsh
new file mode 100644
index 000000000..34c67228c
--- /dev/null
+++ b/packaging/win32/languages/Galician_languageNames.nsh
@@ -0,0 +1,94 @@
+### Galician (gl) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'Galician.nsh'
+${LangFileString} lng_am "Amharic (am)"
+${LangFileString} lng_ar "Árabe (ar)"
+${LangFileString} lng_as "Assamese (as)"
+${LangFileString} lng_az "Acerí (az)"
+${LangFileString} lng_be "Bieloruso (be)"
+${LangFileString} lng_bg "Búlgaro (bg)"
+${LangFileString} lng_bn "Bengalí (bn)"
+${LangFileString} lng_bn_BD "Bengali/Bangladesh (bn_BD)"
+${LangFileString} lng_br "Bretón (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "Catalán (ca)"
+${LangFileString} lng_ca@valencia "Catalán de Valencia (ca@valencia)"
+${LangFileString} lng_cs "Checo (cs)"
+${LangFileString} lng_da "Dinamarqués (da)"
+${LangFileString} lng_de "Alemán (de)"
+${LangFileString} lng_doi "Dogri (doi)"
+${LangFileString} lng_dz "Dzongkha (dz)"
+${LangFileString} lng_el "Grego (el)"
+${LangFileString} lng_en "Inglés (en)"
+${LangFileString} lng_en_AU "Inglés de Australia (en_AU)"
+${LangFileString} lng_en_CA "Inglés de Canadá (en_CA)"
+${LangFileString} lng_en_GB "Inglés de Gran Bretaña (en_GB)"
+${LangFileString} lng_en_US@piglatin "Pig Latin (en_US@piglatin)"
+${LangFileString} lng_eo "Esperanto (eo)"
+${LangFileString} lng_es "Castelán (es)"
+${LangFileString} lng_es_MX "Castelán de México (es_MX)"
+${LangFileString} lng_et "Estonio (et)"
+${LangFileString} lng_eu "Éuscaro (eu)"
+${LangFileString} lng_fa "Persa (fa)"
+${LangFileString} lng_fi "Finlandés (fi)"
+${LangFileString} lng_fr "Francés (fr)"
+${LangFileString} lng_ga "Irlandés (ga)"
+${LangFileString} lng_gl "Galego (gl)"
+${LangFileString} lng_gu "Gujarati (gu)"
+${LangFileString} lng_he "Hebreo (he)"
+${LangFileString} lng_hi "Hindi (hi)"
+${LangFileString} lng_hr "Croata (hr)"
+${LangFileString} lng_hu "Húngaro (hu)"
+${LangFileString} lng_hy "Armenio (hy)"
+${LangFileString} lng_id "Indonesio (id)"
+${LangFileString} lng_is "Icelandic (is)"
+${LangFileString} lng_it "Italiano (it)"
+${LangFileString} lng_ja "Xaponés (ja)"
+${LangFileString} lng_km "Khmer (km)"
+${LangFileString} lng_kn "Kannada (kn)"
+${LangFileString} lng_ko "Coreano (ko)"
+${LangFileString} lng_kok "Konkani (kok)"
+${LangFileString} lng_kok@latin "Konkani in Latin script (kok@latin)"
+${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script (ks@aran)"
+${LangFileString} lng_ks@deva "Kashmiri in Devanagari script (ks@deva)"
+${LangFileString} lng_lt "Lituano (lt)"
+${LangFileString} lng_lv "Latvian (lv)"
+${LangFileString} lng_mai "Maithili (mai)"
+${LangFileString} lng_mk "Macedonio (mk)"
+${LangFileString} lng_ml "Malayalam (ml)"
+${LangFileString} lng_mn "Mongol (mn)"
+${LangFileString} lng_mni "Manipuri (mni)"
+${LangFileString} lng_mni@beng "Manipuri in Bengali script (mni@beng)"
+${LangFileString} lng_mr "Marathi (mr)"
+${LangFileString} lng_nb "Noruegués, Bokmål (nb)"
+${LangFileString} lng_ne "Nepalí (ne)"
+${LangFileString} lng_nl "Holandés (nl)"
+${LangFileString} lng_nn "Noruegués, Nynorsk (nn)"
+${LangFileString} lng_or "Odia (or)"
+${LangFileString} lng_pa "Panjabi (pa)"
+${LangFileString} lng_pl "Polaco (pl)"
+${LangFileString} lng_pt "Portugués (pt)"
+${LangFileString} lng_pt_BR "Portugués brasileiro (pt_BR)"
+${LangFileString} lng_ro "Romanés (ro)"
+${LangFileString} lng_ru "Ruso (ru)"
+${LangFileString} lng_rw "Kinyarwanda (rw)"
+${LangFileString} lng_sa "Sanskrit (sa)"
+${LangFileString} lng_sat "Santali (sat)"
+${LangFileString} lng_sat@deva "Santali in Devanagari script (sat@deva)"
+${LangFileString} lng_sd "Sindhi (sd)"
+${LangFileString} lng_sd@deva "Sindhi in Devanagari script (sd@deva)"
+${LangFileString} lng_sk "Eslovaco (sk)"
+${LangFileString} lng_sl "Esloveno (sl)"
+${LangFileString} lng_sq "Albanés (sq)"
+${LangFileString} lng_sr "Serbio (sr)"
+${LangFileString} lng_sr@latin "Serbio en alfabeto latino (sr@latin)"
+${LangFileString} lng_sv "Sueco (sv)"
+${LangFileString} lng_ta "Tamil (ta)"
+${LangFileString} lng_te "Telugu (te)"
+${LangFileString} lng_th "Tailandés (th)"
+${LangFileString} lng_tr "Turco (tr)"
+${LangFileString} lng_uk "Ucraíno (uk)"
+${LangFileString} lng_ur "Urdu (ur)"
+${LangFileString} lng_vi "Vietnamita (vi)"
+${LangFileString} lng_zh_CN "Chinés de China (zh_CN)"
+${LangFileString} lng_zh_TW "Chinés de Taiwán (zh_TW)"
diff --git a/packaging/win32/languages/German.nsh b/packaging/win32/languages/German.nsh
index c663456b8..bb0f8ec00 100644
--- a/packaging/win32/languages/German.nsh
+++ b/packaging/win32/languages/German.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Wörterbücher"
${LangFileString} DictionariesDesc "Wörterbücher für einige gängige Sprachen zur Rechtschreibprüfung in Inkscape"
${LangFileString} Languages "Übersetzungen"
${LangFileString} LanguagesDesc "Übersetzungen und sprachspezifische Inhalte für Inkscape"
-${LangFileString} lng_am "Amharisch"
-${LangFileString} lng_ar "Arabisch"
-${LangFileString} lng_as "Assamesisch"
-${LangFileString} lng_az "Aserbaidschanisch"
-${LangFileString} lng_be "Weißrussisch"
-${LangFileString} lng_bg "Bulgarisch"
-${LangFileString} lng_bn "Bangla"
-${LangFileString} lng_bn_BD "Bangla Bangladesch"
-${LangFileString} lng_br "Bretonisch"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "Katalanisch"
-${LangFileString} lng_ca@valencia "Valencianisches Katalan"
-${LangFileString} lng_cs "Tschechisch"
-${LangFileString} lng_da "Dänisch"
-${LangFileString} lng_de "Deutsch"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "Dzongkha"
-${LangFileString} lng_el "Griechisch"
-${LangFileString} lng_en "Englisch"
-${LangFileString} lng_en_AU "Englisch/Australien"
-${LangFileString} lng_en_CA "Englisch/Kanada"
-${LangFileString} lng_en_GB "Englisch/Großbritannien"
-${LangFileString} lng_en_US@piglatin "Pig Latin"
-${LangFileString} lng_eo "Esperanto"
-${LangFileString} lng_es "Spanisch"
-${LangFileString} lng_es_MX "Spanisch/Mexico"
-${LangFileString} lng_et "Estnisch"
-${LangFileString} lng_eu "Baskisch"
-${LangFileString} lng_fa "Farsi"
-${LangFileString} lng_fi "Finnisch"
-${LangFileString} lng_fr "Französisch"
-${LangFileString} lng_ga "Irisch"
-${LangFileString} lng_gl "Galizisch"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "Hebräisch"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "Kroatisch"
-${LangFileString} lng_hu "Ungarisch"
-${LangFileString} lng_hy "Armenisch"
-${LangFileString} lng_id "Indonesisch"
-${LangFileString} lng_is "Isländisch"
-${LangFileString} lng_it "Italienisch"
-${LangFileString} lng_ja "Japanisch"
-${LangFileString} lng_km "Khmer"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "Koreanisch"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in lateinischer Schrift"
-${LangFileString} lng_ks@aran "Kashmiri in erweiterter arabischer Schrift"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari-Schrift"
-${LangFileString} lng_lt "Litauisch"
-${LangFileString} lng_lv "Lettisch"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "Mazedonisch"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "Mongolisch"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in bengalischer Schrift"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "Norwegisch/Bokmål"
-${LangFileString} lng_ne "Nepalesisch"
-${LangFileString} lng_nl "Niederländisch"
-${LangFileString} lng_nn "Norwegisch/Nynorsk"
-${LangFileString} lng_or "Orya"
-${LangFileString} lng_pa "Panjabi"
-${LangFileString} lng_pl "Polnisch"
-${LangFileString} lng_pt "Portugiesisch"
-${LangFileString} lng_pt_BR "Portugiesisch/Brasilien"
-${LangFileString} lng_ro "Rumänisch"
-${LangFileString} lng_ru "Russisch"
-${LangFileString} lng_rw "Kinyarwanda"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari-Schrift"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari-Schrift"
-${LangFileString} lng_sk "Slowakisch"
-${LangFileString} lng_sl "Slowenisch"
-${LangFileString} lng_sq "Albanisch"
-${LangFileString} lng_sr "Serbisch"
-${LangFileString} lng_sr@latin "Serbisch in lateinischer Schrift"
-${LangFileString} lng_sv "Schwedisch"
-${LangFileString} lng_ta "Tamilisch"
-${LangFileString} lng_te "Telugu"
-${LangFileString} lng_th "Thai"
-${LangFileString} lng_tr "Türkisch"
-${LangFileString} lng_uk "Ukrainisch"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "Vietnamesisch"
-${LangFileString} lng_zh_CN "Chinesisch (vereinfacht)"
-${LangFileString} lng_zh_TW "Chinesisch (traditionell)"
${LangFileString} UInstOpt "Deinstallations-Optionen"
${LangFileString} UInstOpt1 "Bitte wählen Sie die optionalen Deinstallationsparameter"
${LangFileString} PurgePrefs "Persönliche Inkscape-Einstellungen behalten"
diff --git a/packaging/win32/languages/German_languageNames.nsh b/packaging/win32/languages/German_languageNames.nsh
new file mode 100644
index 000000000..15cb3e103
--- /dev/null
+++ b/packaging/win32/languages/German_languageNames.nsh
@@ -0,0 +1,94 @@
+### German (de) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'German.nsh'
+${LangFileString} lng_am "Amharisch (am)"
+${LangFileString} lng_ar "Arabisch (ar)"
+${LangFileString} lng_as "Assamesisch (as)"
+${LangFileString} lng_az "Aserbeidschanisch (az)"
+${LangFileString} lng_be "Belorussisch (be)"
+${LangFileString} lng_bg "Bulgarisch (bg)"
+${LangFileString} lng_bn "Bengalesisch (bn)"
+${LangFileString} lng_bn_BD "Bengalesisch (bn_BD)"
+${LangFileString} lng_br "Bretonisch (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "Katalanisch (ca)"
+${LangFileString} lng_ca@valencia "Valencianisches Katalan (ca@valencia)"
+${LangFileString} lng_cs "Tschechisch (cs)"
+${LangFileString} lng_da "Dänisch (da)"
+${LangFileString} lng_de "Deutsch (de)"
+${LangFileString} lng_doi "Dogri (doi)"
+${LangFileString} lng_dz "Dzongkha (dz)"
+${LangFileString} lng_el "Griechisch (el)"
+${LangFileString} lng_en "Englisch (en)"
+${LangFileString} lng_en_AU "Englisch/Australien (en_AU)"
+${LangFileString} lng_en_CA "Englisch/Kanada (en_CA)"
+${LangFileString} lng_en_GB "Englisch/Großbritannien (en_GB)"
+${LangFileString} lng_en_US@piglatin "Pig Latin (en_US@piglatin)"
+${LangFileString} lng_eo "Esperanto (eo)"
+${LangFileString} lng_es "Spanisch (es)"
+${LangFileString} lng_es_MX "Spanisch/Mexico (es_MX)"
+${LangFileString} lng_et "Estnisch (et)"
+${LangFileString} lng_eu "Baskisch (eu)"
+${LangFileString} lng_fa "Farsi (fa)"
+${LangFileString} lng_fi "Finnisch (fi)"
+${LangFileString} lng_fr "Französisch (fr)"
+${LangFileString} lng_ga "Irisch (ga)"
+${LangFileString} lng_gl "Galizisch (gl)"
+${LangFileString} lng_gu "Gujarati (gu)"
+${LangFileString} lng_he "Hebräisch (he)"
+${LangFileString} lng_hi "Hindi (hi)"
+${LangFileString} lng_hr "Kroatisch (hr)"
+${LangFileString} lng_hu "Ungarisch (hu)"
+${LangFileString} lng_hy "Armenisch (hy)"
+${LangFileString} lng_id "Indonesisch (id)"
+${LangFileString} lng_is "Isländisch (is)"
+${LangFileString} lng_it "Italienisch (it)"
+${LangFileString} lng_ja "Japanisch (ja)"
+${LangFileString} lng_km "Khmer (km)"
+${LangFileString} lng_kn "Kannada (kn)"
+${LangFileString} lng_ko "Koreanisch (ko)"
+${LangFileString} lng_kok "Konkani (kok)"
+${LangFileString} lng_kok@latin "Konkani in lateinischer Schrift (sr@latin)"
+${LangFileString} lng_ks@aran "Kashmiri in erweiterter arabischer Schrift (ks@aran)"
+${LangFileString} lng_ks@deva "Kashmiri in Devanagari-Schrift (ks@deva)"
+${LangFileString} lng_lt "Litauisch (lt)"
+${LangFileString} lng_lv "Lettisch (lv)"
+${LangFileString} lng_mai "Maithili (mai)"
+${LangFileString} lng_mk "Mazedonisch (mk)"
+${LangFileString} lng_ml "Malayalam (ml)"
+${LangFileString} lng_mn "Mongolisch (mn)"
+${LangFileString} lng_mni "Meitei (mni)"
+${LangFileString} lng_mni@beng "Manipuri in bengalischer Schrift (mni@beng)"
+${LangFileString} lng_mr "Marathi (mr)"
+${LangFileString} lng_nb "Norwegisch/Bokmål (nb)"
+${LangFileString} lng_ne "Nepalesisch (ne)"
+${LangFileString} lng_nl "Niderländisch (nl)"
+${LangFileString} lng_nn "Norwegisch/Nynorsk (nn)"
+${LangFileString} lng_or "Orya (or)"
+${LangFileString} lng_pa "Panjabi (pa)"
+${LangFileString} lng_pl "Polnisch (pl)"
+${LangFileString} lng_pt "Portugisisch(pt)"
+${LangFileString} lng_pt_BR "Portugisisch/Brasilien (pt_BR)"
+${LangFileString} lng_ro "Rumänisch (ro)"
+${LangFileString} lng_ru "Russisch (ru)"
+${LangFileString} lng_rw "Kinyarwanda (rw)"
+${LangFileString} lng_sa "Sanskrit (sa)"
+${LangFileString} lng_sat "Santali (sat)"
+${LangFileString} lng_sat@deva "Santali in Devanagari-Schrift (sat@deva)"
+${LangFileString} lng_sd "Sindhi (sd)"
+${LangFileString} lng_sd@deva "Sindhi in Devanagari-Schrift (sd@deva)"
+${LangFileString} lng_sk "Slovakisch (sk)"
+${LangFileString} lng_sl "Slovenisch (sl)"
+${LangFileString} lng_sq "Albanisch (sq)"
+${LangFileString} lng_sr "Serbisch (sr)"
+${LangFileString} lng_sr@latin "Serbisch in lateinischer Schrift (sr@latin)"
+${LangFileString} lng_sv "Schwedisch (sv)"
+${LangFileString} lng_ta "Tamilisch (ta)"
+${LangFileString} lng_te "Telugu (te)"
+${LangFileString} lng_th "Thai (th)"
+${LangFileString} lng_tr "Türkisch (tr)"
+${LangFileString} lng_uk "Ukrainisch (uk)"
+${LangFileString} lng_ur "Urdu (ur)"
+${LangFileString} lng_vi "Vietnamesisch (vi)"
+${LangFileString} lng_zh_CN "Chinesisch/china (zh_CN)"
+${LangFileString} lng_zh_TW "Chinesisch/Taiwan (zh_TW)"
diff --git a/packaging/win32/languages/Greek.nsh b/packaging/win32/languages/Greek.nsh
index a0fa0176f..2f07e36b1 100644
--- a/packaging/win32/languages/Greek.nsh
+++ b/packaging/win32/languages/Greek.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Dictionaries"
${LangFileString} DictionariesDesc "Dictionaries for some common languages for spell checking in Inkscape"
${LangFileString} Languages "Μεταφράσεις"
${LangFileString} LanguagesDesc "Εγκατάσταση ποικίλων μεταφράσεων για το Inkscape"
-${LangFileString} lng_am "Αμχαρικά"
-${LangFileString} lng_ar "Αραβικά"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "Αζέρικα"
-${LangFileString} lng_be "Λευκορώσικα"
-${LangFileString} lng_bg "Βουλγαρικά"
-${LangFileString} lng_bn "Μπενγκάλι"
-${LangFileString} lng_bn_BD "Bengali Bangladesh"
-${LangFileString} lng_br "Βρετονικά"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "Καταλανικά"
-${LangFileString} lng_ca@valencia "Καταλανικά Βαλένθιας"
-${LangFileString} lng_cs "Τσέχικα"
-${LangFileString} lng_da "Δανέζικα"
-${LangFileString} lng_de "Γερμανικά"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "Ντζόνγκα"
-${LangFileString} lng_el "Ελληνικά"
-${LangFileString} lng_en "Αγγλικά"
-${LangFileString} lng_en_AU "Αγγλικά Αυστραλίας"
-${LangFileString} lng_en_CA "Αγγλικά Καναδά"
-${LangFileString} lng_en_GB "Αγγλικά Βρετανίας"
-${LangFileString} lng_en_US@piglatin "Pig Λατινικά"
-${LangFileString} lng_eo "Εσπεράντο"
-${LangFileString} lng_es "Ισπανικά"
-${LangFileString} lng_es_MX "Ισπανικά Μεξικού"
-${LangFileString} lng_et "Εσθονικά"
-${LangFileString} lng_eu "Βασκικά"
-${LangFileString} lng_fa "Φαρσί"
-${LangFileString} lng_fi "Φινλανδικά"
-${LangFileString} lng_fr "Γαλλικά"
-${LangFileString} lng_ga "Ιρλανδικά"
-${LangFileString} lng_gl "Γαλικιανικά"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "Εβραϊκά"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "Κροατικά"
-${LangFileString} lng_hu "Ουγγρικά"
-${LangFileString} lng_hy "Armenian"
-${LangFileString} lng_id "Ινδονησιακά"
-${LangFileString} lng_is "Icelandic"
-${LangFileString} lng_it "Ιταλικά"
-${LangFileString} lng_ja "Γιαπωνέζικα"
-${LangFileString} lng_km "Χμερ"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "Κορεατικά"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "Λιθουανικά"
-${LangFileString} lng_lv "Latvian"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "Μακεδονικά"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "Μογγολικά"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in Bengali script"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "Νορβηγικά Bokmεl"
-${LangFileString} lng_ne "Νεπαλικά"
-${LangFileString} lng_nl "Ολλανδικά"
-${LangFileString} lng_nn "Νορβηγικά Nynorsk"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "Παντζάμπικα"
-${LangFileString} lng_pl "Πολωνικά"
-${LangFileString} lng_pt "Πορτογαλικά"
-${LangFileString} lng_pt_BR "Πορτογαλικά Βραζιλίας"
-${LangFileString} lng_ro "Ρουμάνικα"
-${LangFileString} lng_ru "Ρώσικα"
-${LangFileString} lng_rw "Κίνιαρουάντα"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "Σλοβάκικα"
-${LangFileString} lng_sl "Σλοβένικα"
-${LangFileString} lng_sq "Αλβανικά"
-${LangFileString} lng_sr "Σέρβικα"
-${LangFileString} lng_sr@latin "Σέρβικα σε λατινική γραφή"
-${LangFileString} lng_sv "Σουηδικά"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "Τελούγκου"
-${LangFileString} lng_th "Τάι"
-${LangFileString} lng_tr "Τούρκικα"
-${LangFileString} lng_uk "Ουκρανικά"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "Βιετναμέζικα"
-${LangFileString} lng_zh_CN "Απλοποιημένα κινέζικα"
-${LangFileString} lng_zh_TW "Παραδοσιακά κινέζικα"
${LangFileString} UInstOpt "Επιλογές απεγκατάστασης"
${LangFileString} UInstOpt1 "Παρακαλώ διαλέξτε για πρόσθετες επιλογές"
${LangFileString} PurgePrefs "Διατήρηση προσωπικών προτιμήσεων"
diff --git a/packaging/win32/languages/Greek_languageNames.nsh b/packaging/win32/languages/Greek_languageNames.nsh
new file mode 100644
index 000000000..2ff2827a7
--- /dev/null
+++ b/packaging/win32/languages/Greek_languageNames.nsh
@@ -0,0 +1,94 @@
+### Greek (el) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'Greek.nsh'
+${LangFileString} lng_am "Αμχαρικά (am)"
+${LangFileString} lng_ar "Αραβικά (ar)"
+${LangFileString} lng_as "Ασαμικά (as)"
+${LangFileString} lng_az "Αζέρικα (az)"
+${LangFileString} lng_be "Λευκορώσικα (be)"
+${LangFileString} lng_bg "Βουλγαρικά (bg)"
+${LangFileString} lng_bn "Μπενγκάλι (bn)"
+${LangFileString} lng_bn_BD "Μπεγκάλι/Μπανγκλαντές (bn_BD)"
+${LangFileString} lng_br "Βρετονικά (br)"
+${LangFileString} lng_brx "Μπόντο (brx)"
+${LangFileString} lng_ca "Καταλανικά (ca)"
+${LangFileString} lng_ca@valencia "Καταλανικά Βαλένθιας (ca@valencia)"
+${LangFileString} lng_cs "Τσέχικα (cs)"
+${LangFileString} lng_da "Δανέζικα (da)"
+${LangFileString} lng_de "Γερμανικά (de)"
+${LangFileString} lng_doi "Ντόγκρι (doi)"
+${LangFileString} lng_dz "Ντζόγκα (dz)"
+${LangFileString} lng_el "Ελληνικά (el)"
+${LangFileString} lng_en "Αγγλικά (Αμερικής)"
+${LangFileString} lng_en_AU "Αγγλικά/Αυστραλία (en_AU)"
+${LangFileString} lng_en_CA "Αγγλικά/Καναδάς (en_CA)"
+${LangFileString} lng_en_GB "Αγγλικά/Μεγάλη Βρετανία (en_GB)"
+${LangFileString} lng_en_US@piglatin "Pig Latin (en_US@piglatin)"
+${LangFileString} lng_eo "Εσπεράντο (eo)"
+${LangFileString} lng_es "Ισπανικά (es)"
+${LangFileString} lng_es_MX "Ισπανικά/Μέξικο (es_MX)"
+${LangFileString} lng_et "Εσθονικά (et)"
+${LangFileString} lng_eu "Βασκικά (eu)"
+${LangFileString} lng_fa "Φαρσί (fa)"
+${LangFileString} lng_fi "Φινλανδικά (fi)"
+${LangFileString} lng_fr "Γαλλικά (fr)"
+${LangFileString} lng_ga "Ιρλανδική (ga)"
+${LangFileString} lng_gl "Γαλικία (gl)"
+${LangFileString} lng_gu "Γκουαράτι (gu)"
+${LangFileString} lng_he "Εβραϊκά (he)"
+${LangFileString} lng_hi "Χίντι (hi)"
+${LangFileString} lng_hr "Κροατικά (hr)"
+${LangFileString} lng_hu "Ουγγρικά (hu)"
+${LangFileString} lng_hy "Αρμένικα (hy)"
+${LangFileString} lng_id "Ινδονησιακά (id)"
+${LangFileString} lng_is "Ισλανδικά (is)"
+${LangFileString} lng_it "Ιταλικά (it)"
+${LangFileString} lng_ja "Γιαπωνέζικα (ja)"
+${LangFileString} lng_km "Χμερ (km)"
+${LangFileString} lng_kn "Κανάντα (kn)"
+${LangFileString} lng_ko "Κορεάτικα (ko)"
+${LangFileString} lng_kok "Κονκανικά (kok)"
+${LangFileString} lng_kok@latin "Κονκανικά με λατινική γραφή (kok@latin)"
+${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script (ks@aran)"
+${LangFileString} lng_ks@deva "Κασμιρικά με γραφή ντεβάνγκαρι (ks@deva)"
+${LangFileString} lng_lt "Λιθουανικά (lt)"
+${LangFileString} lng_lv "Λιθουανικά (lv)"
+${LangFileString} lng_mai "Μαιτίλι (mai)"
+${LangFileString} lng_mk "Μακεδονικά (mk)"
+${LangFileString} lng_ml "Μαγιαλαμικά (ml)"
+${LangFileString} lng_mn "Μογγολικά (mn)"
+${LangFileString} lng_mni "Μανιπουρικά (mni)"
+${LangFileString} lng_mni@beng "Μανιπουρικά με γραφή Βεγγάλης (mni@beng)"
+${LangFileString} lng_mr "Μαραθικά (mr)"
+${LangFileString} lng_nb "Νορβηγικά Bokmål (nb)"
+${LangFileString} lng_ne "Νεπαλικά (ne)"
+${LangFileString} lng_nl "Ολλανδικά (nl)"
+${LangFileString} lng_nn "Νορβηγικά Nynorsk (nn)"
+${LangFileString} lng_or "Όντια (or)"
+${LangFileString} lng_pa "Πουντζάμπι (pa)"
+${LangFileString} lng_pl "Πολωνικά (pl)"
+${LangFileString} lng_pt "Πορτογαλικά (pt)"
+${LangFileString} lng_pt_BR "Πορτογαλικά/Βραζιλίας (pt_BR)"
+${LangFileString} lng_ro "Ρουμανικά (ro)"
+${LangFileString} lng_ru "Ρωσικά (ru)"
+${LangFileString} lng_rw "Κινιαρουάντα (rw)"
+${LangFileString} lng_sa "Σανσκριτικά (sa)"
+${LangFileString} lng_sat "Σανταλικά (sat)"
+${LangFileString} lng_sat@deva "Σανταλικά με γραφή ντεβαναγκάρι (sat@deva)"
+${LangFileString} lng_sd "Σίντι (sd)"
+${LangFileString} lng_sd@deva "Σίντι με γραφή ντεβαναγκάρι (sd@deva)"
+${LangFileString} lng_sk "Σλοβακικά (sk)"
+${LangFileString} lng_sl "Σλοβένικα (sl)"
+${LangFileString} lng_sq "Αλβανικά (sq)"
+${LangFileString} lng_sr "Σερβικά/Λατινικά (sr)"
+${LangFileString} lng_sr@latin "Σερβικά σε λατινική γραφή (sr@latin)"
+${LangFileString} lng_sv "Σουηδικά (sv)"
+${LangFileString} lng_ta "Ταμίλ (ta)"
+${LangFileString} lng_te "Τελούγκου (te)"
+${LangFileString} lng_th "Μπατ Ταϊλάνδης (th)"
+${LangFileString} lng_tr "Τουρκικά (tr)"
+${LangFileString} lng_uk "Ουκρανικά (uk)"
+${LangFileString} lng_ur "Ούρντου (ur)"
+${LangFileString} lng_vi "Βιετναμέζικα (vi)"
+${LangFileString} lng_zh_CN "Κινέζικα/Κίνα (zh_CN)"
+${LangFileString} lng_zh_TW "Κινέζικα/Ταϊβάν (zh_TW)"
diff --git a/packaging/win32/languages/Hebrew.nsh b/packaging/win32/languages/Hebrew.nsh
index 2de0d69c7..ecc94c3fe 100644
--- a/packaging/win32/languages/Hebrew.nsh
+++ b/packaging/win32/languages/Hebrew.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Dictionaries"
${LangFileString} DictionariesDesc "Dictionaries for some common languages for spell checking in Inkscape"
${LangFileString} Languages "תרגומים"
${LangFileString} LanguagesDesc "התקנת מגוון תרגומים לאינקסקייפ"
-${LangFileString} lng_am "אמהרית"
-${LangFileString} lng_ar "ערבית"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "אזרית"
-${LangFileString} lng_be "בלרוסית"
-${LangFileString} lng_bg "בולגרית"
-${LangFileString} lng_bn "בנגלית"
-${LangFileString} lng_bn_BD "Bengali Bangladesh"
-${LangFileString} lng_br "ברטונית"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "קטלאנית"
-${LangFileString} lng_ca@valencia "קטלאנית ולנסית"
-${LangFileString} lng_cs "צ׳כית"
-${LangFileString} lng_da "דנית"
-${LangFileString} lng_de "גרמנית"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "דזונגקה"
-${LangFileString} lng_el "יוונית"
-${LangFileString} lng_en "אנגלית"
-${LangFileString} lng_en_AU "אנגלית אוסטרלית"
-${LangFileString} lng_en_CA "אנגלית קנדית"
-${LangFileString} lng_en_GB "אנגלית בריטית"
-${LangFileString} lng_en_US@piglatin "לטינית חזירית"
-${LangFileString} lng_eo "אספרנטו"
-${LangFileString} lng_es "ספרדית"
-${LangFileString} lng_es_MX "ספרדית מקסיקנית"
-${LangFileString} lng_et "אסטונית"
-${LangFileString} lng_eu "בסקית"
-${LangFileString} lng_fa "פרסית"
-${LangFileString} lng_fi "פינית"
-${LangFileString} lng_fr "צרפתית"
-${LangFileString} lng_ga "אירית"
-${LangFileString} lng_gl "גליסית"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "עברית"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "קרואטית"
-${LangFileString} lng_hu "הונגרית"
-${LangFileString} lng_hy "Armenian"
-${LangFileString} lng_id "אינדונזית"
-${LangFileString} lng_is "Icelandic"
-${LangFileString} lng_it "איטלקית"
-${LangFileString} lng_ja "יפנית"
-${LangFileString} lng_km "קמרית"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "קוריאנית"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "ליטאית"
-${LangFileString} lng_lv "Latvian"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "מקדונית"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "מונגולית"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in Bengali script"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "נורבגית בוקמולית"
-${LangFileString} lng_ne "נפאלית"
-${LangFileString} lng_nl "Dutch"
-${LangFileString} lng_nn "נורבגית נינורשקית"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "פנג׳אבי"
-${LangFileString} lng_pl "פולנית"
-${LangFileString} lng_pt "פורטוגלית"
-${LangFileString} lng_pt_BR "פורטוגלית בריזלאית"
-${LangFileString} lng_ro "רומנית"
-${LangFileString} lng_ru "רוסית"
-${LangFileString} lng_rw "קיניַרואנדה"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "סלובקית"
-${LangFileString} lng_sl "סלובנית"
-${LangFileString} lng_sq "אלבנית"
-${LangFileString} lng_sr "סרבית"
-${LangFileString} lng_sr@latin "סרבית בכתב לטיני"
-${LangFileString} lng_sv "שבדית"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "טלוגו"
-${LangFileString} lng_th "תאי"
-${LangFileString} lng_tr "טורקית"
-${LangFileString} lng_uk "אוקראינית"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "וייטנאמית"
-${LangFileString} lng_zh_CN "סינית מפושטת"
-${LangFileString} lng_zh_TW "סינית מסורתית"
${LangFileString} UInstOpt "אפשרויות הסרה"
${LangFileString} UInstOpt1 "נא לבחור מהרשימה כדי להשתמש באפשרויות נוספות"
${LangFileString} PurgePrefs "שמירת ההעדפות האישיות"
diff --git a/packaging/win32/languages/Hebrew_languageNames.nsh b/packaging/win32/languages/Hebrew_languageNames.nsh
new file mode 100644
index 000000000..210a6b63d
--- /dev/null
+++ b/packaging/win32/languages/Hebrew_languageNames.nsh
@@ -0,0 +1,94 @@
+### Hebrew (he) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'Hebrew.nsh'
+${LangFileString} lng_am "אמהרית (am)"
+${LangFileString} lng_ar "ערבית (ar)"
+${LangFileString} lng_as "Assamese (as)"
+${LangFileString} lng_az "אזרבייג׳נית (az)"
+${LangFileString} lng_be "בלרוסית (be)"
+${LangFileString} lng_bg "בולגרית (bg)"
+${LangFileString} lng_bn "בנגאלית (bn)"
+${LangFileString} lng_bn_BD "Bengali/Bangladesh (bn_BD)"
+${LangFileString} lng_br "ברטון (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "קטלונית (ca)"
+${LangFileString} lng_ca@valencia "קטלונית ולסיאנית (ca@valencia)"
+${LangFileString} lng_cs "צ׳כית (cs)"
+${LangFileString} lng_da "דנית (da)"
+${LangFileString} lng_de "גרמנית (de)"
+${LangFileString} lng_doi "Dogri (doi)"
+${LangFileString} lng_dz "דזונקה (dz)"
+${LangFileString} lng_el "יוונית (el)"
+${LangFileString} lng_en "אנגלית (en)"
+${LangFileString} lng_en_AU "אנגלית/אוסטרליה (en_AU)"
+${LangFileString} lng_en_CA "אנגלית/קנדה (en_CA)"
+${LangFileString} lng_en_GB "אנגלית/אנגליה (en_GB)"
+${LangFileString} lng_en_US@piglatin "לטינית חזירית (en_US@piglatin)"
+${LangFileString} lng_eo "אספרנטו (eo)"
+${LangFileString} lng_es "ספרדית (es)"
+${LangFileString} lng_es_MX "ספרדית/מקסיקו (es_MX)"
+${LangFileString} lng_et "אסטונית (et)"
+${LangFileString} lng_eu "בסקית (eu)"
+${LangFileString} lng_fa "פרסית (fa)"
+${LangFileString} lng_fi "פינית (fi)"
+${LangFileString} lng_fr "צרפתית (fr)"
+${LangFileString} lng_ga "אירית (ga)"
+${LangFileString} lng_gl "גליסית (gl)"
+${LangFileString} lng_gu "Gujarati (gu)"
+${LangFileString} lng_he "עברית (he)"
+${LangFileString} lng_hi "Hindi (hi)"
+${LangFileString} lng_hr "קרואטית (hr)"
+${LangFileString} lng_hu "הונגרית (hu)"
+${LangFileString} lng_hy "ארמנית (hy)"
+${LangFileString} lng_id "אינדונזית (id)"
+${LangFileString} lng_is "Icelandic (is)"
+${LangFileString} lng_it "איטלקית (it)"
+${LangFileString} lng_ja "יפנית (ja)"
+${LangFileString} lng_km "ח׳מר (km)"
+${LangFileString} lng_kn "Kannada (kn)"
+${LangFileString} lng_ko "קוריאנית (ko)"
+${LangFileString} lng_kok "Konkani (kok)"
+${LangFileString} lng_kok@latin "Konkani in Latin script (kok@latin)"
+${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script (ks@aran)"
+${LangFileString} lng_ks@deva "Kashmiri in Devanagari script (ks@deva)"
+${LangFileString} lng_lt "ליטאית (lt)"
+${LangFileString} lng_lv "Latvian (lv)"
+${LangFileString} lng_mai "Maithili (mai)"
+${LangFileString} lng_mk "מקדונית (mk)"
+${LangFileString} lng_ml "Malayalam (ml)"
+${LangFileString} lng_mn "מונגולית (mn)"
+${LangFileString} lng_mni "Manipuri (mni)"
+${LangFileString} lng_mni@beng "Manipuri in Bengali script (mni@beng)"
+${LangFileString} lng_mr "Marathi (mr)"
+${LangFileString} lng_nb "נורבגית בוקמול (nb)"
+${LangFileString} lng_ne "נפאלית (ne)"
+${LangFileString} lng_nl "הולנדית (nl)"
+${LangFileString} lng_nn "נורבגית נינורשק (nn)"
+${LangFileString} lng_or "Odia (or)"
+${LangFileString} lng_pa "פנג׳בית (pa)"
+${LangFileString} lng_pl "פולנית (pl)"
+${LangFileString} lng_pt "פורטוגזית (pt)"
+${LangFileString} lng_pt_BR "פורטוגזית/ברזיל (pt_BR)"
+${LangFileString} lng_ro "רומנית (ro)"
+${LangFileString} lng_ru "רוסית (ru)"
+${LangFileString} lng_rw "קיניארוונדה (rw)"
+${LangFileString} lng_sa "Sanskrit (sa)"
+${LangFileString} lng_sat "Santali (sat)"
+${LangFileString} lng_sat@deva "Santali in Devanagari script (sat@deva)"
+${LangFileString} lng_sd "Sindhi (sd)"
+${LangFileString} lng_sd@deva "Sindhi in Devanagari script (sd@deva)"
+${LangFileString} lng_sk "סלובקית (sk)"
+${LangFileString} lng_sl "סלובנית (sl)"
+${LangFileString} lng_sq "אלבנית (sq)"
+${LangFileString} lng_sr "סרבית (sr)"
+${LangFileString} lng_sr@latin "סרבית בכתב לטיני (sr@latin)"
+${LangFileString} lng_sv "שבדית (sv)"
+${LangFileString} lng_ta "Tamil (ta)"
+${LangFileString} lng_te "Telugu (te)"
+${LangFileString} lng_th "תאילנדית (th)"
+${LangFileString} lng_tr "טורקית (tr)"
+${LangFileString} lng_uk "אוקראינית (uk)"
+${LangFileString} lng_ur "Urdu (ur)"
+${LangFileString} lng_vi "וייטנאמית (vi)"
+${LangFileString} lng_zh_CN "סינית/סין (zh_CN)"
+${LangFileString} lng_zh_TW "סינית/טייוואן (zh_TW)"
diff --git a/packaging/win32/languages/Icelandic.nsh b/packaging/win32/languages/Icelandic.nsh
index f7dfaa104..f5f3bb253 100644
--- a/packaging/win32/languages/Icelandic.nsh
+++ b/packaging/win32/languages/Icelandic.nsh
@@ -45,97 +45,6 @@ ${LangFileString} Dictionaries "Dictionaries"
${LangFileString} DictionariesDesc "Dictionaries for some common languages for spell checking in Inkscape"
${LangFileString} Languages "Þýðingar"
${LangFileString} LanguagesDesc "Setja inn ýmsar þýðingar á Inkscape"
-${LangFileString} lng_am "Amharíska"
-${LangFileString} lng_ar "Arabíska"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "Azerbadjanska"
-${LangFileString} lng_be "Hvítrússneska"
-${LangFileString} lng_bg "Búlgarska"
-${LangFileString} lng_bn "Bengalska"
-${LangFileString} lng_bn_BD "Bangladesh bengalska"
-${LangFileString} lng_br "Bretónska"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "Katalónska"
-${LangFileString} lng_ca@valencia "Valensíönsk katalónska"
-${LangFileString} lng_cs "Tékkneska"
-${LangFileString} lng_da "Danska"
-${LangFileString} lng_de "Þýska"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "Dzongkha"
-${LangFileString} lng_el "Gríska"
-${LangFileString} lng_en "Enska"
-${LangFileString} lng_en_AU "Áströlsk enska"
-${LangFileString} lng_en_CA "Kanadísk enska"
-${LangFileString} lng_en_GB "Bresk enska"
-${LangFileString} lng_en_US@piglatin "Pig Latína"
-${LangFileString} lng_eo "Esperantó"
-${LangFileString} lng_es "Spænska"
-${LangFileString} lng_es_MX "Mexíkönsk spænska"
-${LangFileString} lng_et "Eistneska"
-${LangFileString} lng_eu "Baskneska"
-${LangFileString} lng_fa "Farsi"
-${LangFileString} lng_fi "Finnska"
-${LangFileString} lng_fr "Franska"
-${LangFileString} lng_ga "Írska"
-${LangFileString} lng_gl "Galisíska"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "Hebreska"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "Króatíska"
-${LangFileString} lng_hu "Ungverska"
-${LangFileString} lng_hy "Armenska"
-${LangFileString} lng_id "Indónesíska"
-${LangFileString} lng_is "Íslenska"
-${LangFileString} lng_it "Ítalska"
-${LangFileString} lng_ja "Japanska"
-${LangFileString} lng_km "Khmeríska"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "Kóreska"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "Litháenska"
-${LangFileString} lng_lv "Lettneska"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "Makedónska"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "Mongólska"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in Bengali script"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "Norskt bókmál"
-${LangFileString} lng_ne "Nepalska"
-${LangFileString} lng_nl "Hollenska"
-${LangFileString} lng_nn "Nýnorska"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "Panjabi"
-${LangFileString} lng_pl "Pólska"
-${LangFileString} lng_pt "Portúgalska"
-${LangFileString} lng_pt_BR "Brasilísk portúgalska"
-${LangFileString} lng_ro "Rúmenska"
-${LangFileString} lng_ru "Rússneska"
-${LangFileString} lng_rw "Kinyarwanda"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "Slóvakíska"
-${LangFileString} lng_sl "Slóvenska"
-${LangFileString} lng_sq "Albanska"
-${LangFileString} lng_sr "Serbneska"
-${LangFileString} lng_sr@latin "Serbneska með latnesku letri"
-${LangFileString} lng_sv "Sænska"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "Telúgú"
-${LangFileString} lng_th "Tælenska"
-${LangFileString} lng_tr "Tyrkneska"
-${LangFileString} lng_uk "Úkraínska"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "Víetnamska"
-${LangFileString} lng_zh_CN "Einfölduð kínverska"
-${LangFileString} lng_zh_TW "Hefðbundin kínverska"
${LangFileString} UInstOpt "Valkostir við fjarlægingu"
${LangFileString} UInstOpt1 "Ákveddu hvað þú vilt gera fyrir þessa aukavalkosti"
${LangFileString} PurgePrefs "Halda persónulegum kjörstillingum"
diff --git a/packaging/win32/languages/Icelandic_languageNames.nsh b/packaging/win32/languages/Icelandic_languageNames.nsh
new file mode 100644
index 000000000..9065ab158
--- /dev/null
+++ b/packaging/win32/languages/Icelandic_languageNames.nsh
@@ -0,0 +1,94 @@
+### Icelandic (is) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'Icelandic.nsh'
+${LangFileString} lng_am "Amharíska (am)"
+${LangFileString} lng_ar "Arabíska (ar)"
+${LangFileString} lng_as "Assamíska (as)"
+${LangFileString} lng_az "Azerbaijanska (az)"
+${LangFileString} lng_be "Hvítrússneska (be)"
+${LangFileString} lng_bg "Búlgarska (bg)"
+${LangFileString} lng_bn "Bengalska (bn)"
+${LangFileString} lng_bn_BD "Bengali/Bangladesh (bn_BD)"
+${LangFileString} lng_br "Bretónska (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "Katalónska (ca)"
+${LangFileString} lng_ca@valencia "Valensísk-katalónska (ca@valencia)"
+${LangFileString} lng_cs "Tékkneska (cs)"
+${LangFileString} lng_da "Danska (da)"
+${LangFileString} lng_de "Þýska (de)"
+${LangFileString} lng_doi "Dogri (doi)"
+${LangFileString} lng_dz "Dzongkha (dz)"
+${LangFileString} lng_el "Gríska (el)"
+${LangFileString} lng_en "Enska (en)"
+${LangFileString} lng_en_AU "Enska/Ástralía (en_AU)"
+${LangFileString} lng_en_CA "Enska/Kanada (en_CA)"
+${LangFileString} lng_en_GB "Enska/Stóra Bretland (en_GB)"
+${LangFileString} lng_en_US@piglatin "Pig Latin (en_US@piglatin)"
+${LangFileString} lng_eo "Esperantó (eo)"
+${LangFileString} lng_es "Spænska (es)"
+${LangFileString} lng_es_MX "Spænska/Mexíkó (es_MX)"
+${LangFileString} lng_et "Eistneska (et)"
+${LangFileString} lng_eu "Baskneska (eu)"
+${LangFileString} lng_fa "Farsí (fa)"
+${LangFileString} lng_fi "Finnska (fi)"
+${LangFileString} lng_fr "Franska (fr)"
+${LangFileString} lng_ga "Írska (ga)"
+${LangFileString} lng_gl "Galisíska (gl)"
+${LangFileString} lng_gu "Gújaratí (gu)"
+${LangFileString} lng_he "Hebreska (he)"
+${LangFileString} lng_hi "Hindí (hi)"
+${LangFileString} lng_hr "Króatíska (hr)"
+${LangFileString} lng_hu "Ungverska (hu)"
+${LangFileString} lng_hy "Armenska (hy)"
+${LangFileString} lng_id "Indónesíska (id)"
+${LangFileString} lng_is "Íslenska (is)"
+${LangFileString} lng_it "Ítalska (it)"
+${LangFileString} lng_ja "Japanska (ja)"
+${LangFileString} lng_km "Khmeríska (km)"
+${LangFileString} lng_kn "Kannada (kn)"
+${LangFileString} lng_ko "Kóreska (ko)"
+${LangFileString} lng_kok "Konkaní (kok)"
+${LangFileString} lng_kok@latin "Konkaní með latneskt letur (kok@latin)"
+${LangFileString} lng_ks@aran "Kashmírska með Peso-Arabísku letri (ks@aran)"
+${LangFileString} lng_ks@deva "Kashmírska með Devanagarí letur (ks@deva)"
+${LangFileString} lng_lt "Litháíska (lt)"
+${LangFileString} lng_lv "Lettlenska (lv)"
+${LangFileString} lng_mai "Maithilí (mai)"
+${LangFileString} lng_mk "Makedónska (mk)"
+${LangFileString} lng_ml "Malaíalam (ml)"
+${LangFileString} lng_mn "Mongólska (mn)"
+${LangFileString} lng_mni "Manipurí (mni)"
+${LangFileString} lng_mni@beng "Manipurí með Bengalí letri (mni@beng)"
+${LangFileString} lng_mr "Marathí (mr)"
+${LangFileString} lng_nb "Norskt bókmál (nb)"
+${LangFileString} lng_ne "Nepalska (ne)"
+${LangFileString} lng_nl "Hollenska (nl)"
+${LangFileString} lng_nn "Nýnorska (nn)"
+${LangFileString} lng_or "Odia (or)"
+${LangFileString} lng_pa "Panjabi (pa)"
+${LangFileString} lng_pl "Pólska (pl)"
+${LangFileString} lng_pt "Portúgalska (pt)"
+${LangFileString} lng_pt_BR "Portúgalska/Brasilía (pt_BR)"
+${LangFileString} lng_ro "Rúmenska (ro)"
+${LangFileString} lng_ru "Rússneska (ru)"
+${LangFileString} lng_rw "Kinyarwanda (rw)"
+${LangFileString} lng_sa "Sanskrít (sa)"
+${LangFileString} lng_sat "Santalí (sat)"
+${LangFileString} lng_sat@deva "Santalí með Devanagarí letur (sd@deva)"
+${LangFileString} lng_sd "Shindí (sd)"
+${LangFileString} lng_sd@deva "Sindhí með Devanagarí letur (sd@deva)"
+${LangFileString} lng_sk "Slóvakíska (sk)"
+${LangFileString} lng_sl "Slóvenska (sl)"
+${LangFileString} lng_sq "Albanska (sq)"
+${LangFileString} lng_sr "Serbneska (sr)"
+${LangFileString} lng_sr@latin "Serbneska með latneskt letur (sr@latin)"
+${LangFileString} lng_sv "Sænska (sv)"
+${LangFileString} lng_ta "Tamílska (ta)"
+${LangFileString} lng_te "Telugu (te)"
+${LangFileString} lng_th "Tælenska (th)"
+${LangFileString} lng_tr "Tyrkneska (tr)"
+${LangFileString} lng_uk "Úkraínska (uk)"
+${LangFileString} lng_ur "Úrdú (ur)"
+${LangFileString} lng_vi "Víetnamska (vi)"
+${LangFileString} lng_zh_CN "Kínverska/Kína (zh_CN)"
+${LangFileString} lng_zh_TW "Kínverska/Taívan (zh_TW)"
diff --git a/packaging/win32/languages/Indonesian.nsh b/packaging/win32/languages/Indonesian.nsh
index 8310ad186..55f577d4f 100644
--- a/packaging/win32/languages/Indonesian.nsh
+++ b/packaging/win32/languages/Indonesian.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Dictionaries"
${LangFileString} DictionariesDesc "Dictionaries for some common languages for spell checking in Inkscape"
${LangFileString} Languages "Terjemahan"
${LangFileString} LanguagesDesc "Pasang macam-macam terjemahan untuk Inkscape"
-${LangFileString} lng_am "Amharic"
-${LangFileString} lng_ar "Arab"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "Azerbaijan"
-${LangFileString} lng_be "Belarus"
-${LangFileString} lng_bg "Bulgaria"
-${LangFileString} lng_bn "Benggala"
-${LangFileString} lng_bn_BD "Bengali Bangladesh"
-${LangFileString} lng_br "Breton"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "Katalan"
-${LangFileString} lng_ca@valencia "Katalan Valencia"
-${LangFileString} lng_cs "Ceko"
-${LangFileString} lng_da "Denmark"
-${LangFileString} lng_de "Jerman"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "Dzongkha"
-${LangFileString} lng_el "Yunani"
-${LangFileString} lng_en "Inggris"
-${LangFileString} lng_en_AU "Inggris Australia"
-${LangFileString} lng_en_CA "Inggris Kanada"
-${LangFileString} lng_en_GB "Inggris Inggris"
-${LangFileString} lng_en_US@piglatin "Pig Latin"
-${LangFileString} lng_eo "Esperanto"
-${LangFileString} lng_es "Spanyol"
-${LangFileString} lng_es_MX "Spanyol Meksiko"
-${LangFileString} lng_et "Estonia"
-${LangFileString} lng_eu "Basque"
-${LangFileString} lng_fa "Persia"
-${LangFileString} lng_fi "Finlandia"
-${LangFileString} lng_fr "Perancis"
-${LangFileString} lng_ga "Irlandia"
-${LangFileString} lng_gl "Galician"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "Ibrani"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "Kroasia"
-${LangFileString} lng_hu "Hongaria"
-${LangFileString} lng_hy "Armenian"
-${LangFileString} lng_id "Bahasa Indonesia"
-${LangFileString} lng_is "Icelandic"
-${LangFileString} lng_it "Italia"
-${LangFileString} lng_ja "Jepang"
-${LangFileString} lng_km "Khmer"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "Korea"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "Lithuania"
-${LangFileString} lng_lv "Latvian"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "Macedonia"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "Mongolia"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in Bengali script"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "Bokmål Norwegia"
-${LangFileString} lng_ne "Nepal"
-${LangFileString} lng_nl "Belanda"
-${LangFileString} lng_nn "Nynorsk Norwegia"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "Panjabi"
-${LangFileString} lng_pl "Polandia"
-${LangFileString} lng_pt "Portugis"
-${LangFileString} lng_pt_BR "Portugis Brasil"
-${LangFileString} lng_ro "Rumania"
-${LangFileString} lng_ru "Rusia"
-${LangFileString} lng_rw "Kinyarwanda"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "Slovakia"
-${LangFileString} lng_sl "Slovenia"
-${LangFileString} lng_sq "Albania"
-${LangFileString} lng_sr "Serbia"
-${LangFileString} lng_sr@latin "Serbia dalam Latin"
-${LangFileString} lng_sv "Swedia"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "Telugu"
-${LangFileString} lng_th "Thai"
-${LangFileString} lng_tr "Turki"
-${LangFileString} lng_uk "Ukraina"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "Vietnam"
-${LangFileString} lng_zh_CN "Cina Simplifed"
-${LangFileString} lng_zh_TW "Cina Tradisional"
${LangFileString} UInstOpt "Pilihan Pelepasan"
${LangFileString} UInstOpt1 "Silahkan pilih pilihan tambahan"
${LangFileString} PurgePrefs "Simpal preferensi personal"
diff --git a/packaging/win32/languages/Indonesian_languageNames.nsh b/packaging/win32/languages/Indonesian_languageNames.nsh
new file mode 100644
index 000000000..270b03ec9
--- /dev/null
+++ b/packaging/win32/languages/Indonesian_languageNames.nsh
@@ -0,0 +1,94 @@
+### Indonesian (id) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'Indonesian.nsh'
+${LangFileString} lng_am "Amharik (am)"
+${LangFileString} lng_ar "Arab (ar)"
+${LangFileString} lng_as "Assamese (as)"
+${LangFileString} lng_az "Azerbaijan (az)"
+${LangFileString} lng_be "Belarusia (be)"
+${LangFileString} lng_bg "Bulgaria (bg)"
+${LangFileString} lng_bn "Bengali (bn)"
+${LangFileString} lng_bn_BD "Bengali/Bangladesh (bn_BD)"
+${LangFileString} lng_br "Breton (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "Katalan (ca)"
+${LangFileString} lng_ca@valencia "Katalan Valensia (ca@valencia)"
+${LangFileString} lng_cs "Ceko (cs)"
+${LangFileString} lng_da "Denmark (da)"
+${LangFileString} lng_de "Jerman (de)"
+${LangFileString} lng_doi "Dogri (doi)"
+${LangFileString} lng_dz "Dzongkha (dz)"
+${LangFileString} lng_el "Yunani (el)"
+${LangFileString} lng_en "Inggris (en)"
+${LangFileString} lng_en_AU "Inggris/Australia (en_AU)"
+${LangFileString} lng_en_CA "Inggris/Kanada (en_CA)"
+${LangFileString} lng_en_GB "Inggris/Inggris Raya (en_GB)"
+${LangFileString} lng_en_US@piglatin "Pig Latin (en_US@piglatin)"
+${LangFileString} lng_eo "Esperanto (eo)"
+${LangFileString} lng_es "Spanyol (es)"
+${LangFileString} lng_es_MX "Spanyol/Meksiko (es_MX)"
+${LangFileString} lng_et "Estonia (et)"
+${LangFileString} lng_eu "Basque (eu)"
+${LangFileString} lng_fa "Persia (fa)"
+${LangFileString} lng_fi "Finlandia (fi)"
+${LangFileString} lng_fr "Perancis (fr)"
+${LangFileString} lng_ga "Irlandia (ga)"
+${LangFileString} lng_gl "Galisia (gl)"
+${LangFileString} lng_gu "Gujarati (gu)"
+${LangFileString} lng_he "Ibrani (he)"
+${LangFileString} lng_hi "Hindi (hi)"
+${LangFileString} lng_hr "Kroasia (hr)"
+${LangFileString} lng_hu "Hungaria (hu)"
+${LangFileString} lng_hy "Armenia (hy)"
+${LangFileString} lng_id "Indonesia (id)"
+${LangFileString} lng_is "Icelandic (is)"
+${LangFileString} lng_it "Italia (it)"
+${LangFileString} lng_ja "Jepang (ja)"
+${LangFileString} lng_km "Khmer (km)"
+${LangFileString} lng_kn "Kannada (kn)"
+${LangFileString} lng_ko "Korea (ko)"
+${LangFileString} lng_kok "Konkani (kok)"
+${LangFileString} lng_kok@latin "Konkani in Latin script (kok@latin)"
+${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script (ks@aran)"
+${LangFileString} lng_ks@deva "Kashmiri in Devanagari script (ks@deva)"
+${LangFileString} lng_lt "Lituania (lt)"
+${LangFileString} lng_lv "Latvian (lv)"
+${LangFileString} lng_mai "Maithili (mai)"
+${LangFileString} lng_mk "Makedonia (mk)"
+${LangFileString} lng_ml "Malayalam (ml)"
+${LangFileString} lng_mn "Mongolia (mn)"
+${LangFileString} lng_mni "Manipuri (mni)"
+${LangFileString} lng_mni@beng "Manipuri in Bengali script (mni@beng)"
+${LangFileString} lng_mr "Marathi (mr)"
+${LangFileString} lng_nb "Norwegia Bokmål (nb)"
+${LangFileString} lng_ne "Nepal (ne)"
+${LangFileString} lng_nl "Belanda (nl)"
+${LangFileString} lng_nn "Norwegia Ninorski (nn)"
+${LangFileString} lng_or "Odia (or)"
+${LangFileString} lng_pa "Panjabi (pa)"
+${LangFileString} lng_pl "Polandia (pl)"
+${LangFileString} lng_pt "Portugis (pt)"
+${LangFileString} lng_pt_BR "Portugis/Brasil (pt_BR)"
+${LangFileString} lng_ro "Rumania (ro)"
+${LangFileString} lng_ru "Rusia (ru)"
+${LangFileString} lng_rw "Kinyarwanda (rw)"
+${LangFileString} lng_sa "Sanskrit (sa)"
+${LangFileString} lng_sat "Santali (sat)"
+${LangFileString} lng_sat@deva "Santali in Devanagari script (sat@deva)"
+${LangFileString} lng_sd "Sindhi (sd)"
+${LangFileString} lng_sd@deva "Sindhi in Devanagari script (sd@deva)"
+${LangFileString} lng_sk "Slovakia (sk)"
+${LangFileString} lng_sl "Slovenia (sl)"
+${LangFileString} lng_sq "Albania (sq)"
+${LangFileString} lng_sr "Serbia (sr)"
+${LangFileString} lng_sr@latin "Serbia dengan skrip Latin (sr@latin)"
+${LangFileString} lng_sv "Swedia (sv)"
+${LangFileString} lng_ta "Tamil (ta)"
+${LangFileString} lng_te "Telugu (te)"
+${LangFileString} lng_th "Thai (th)"
+${LangFileString} lng_tr "Turki (tr)"
+${LangFileString} lng_uk "Ukraina (uk)"
+${LangFileString} lng_ur "Urdu (ur)"
+${LangFileString} lng_vi "Vietnam (vi)"
+${LangFileString} lng_zh_CN "Cina/Cina (zh_CN)"
+${LangFileString} lng_zh_TW "Cina/Taiwan (zh_TW)"
diff --git a/packaging/win32/languages/Italian.nsh b/packaging/win32/languages/Italian.nsh
index d2fb18a03..9a38f8b58 100644
--- a/packaging/win32/languages/Italian.nsh
+++ b/packaging/win32/languages/Italian.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Dizionari"
${LangFileString} DictionariesDesc "Dizionari di varie lingue utilizzati per il controllo ortografico in Inkscape"
${LangFileString} Languages "Traduzioni"
${LangFileString} LanguagesDesc "Installa altre traduzioni per Inkscape"
-${LangFileString} lng_am "Aramaico"
-${LangFileString} lng_ar "Arabo"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "Azerbaigiano"
-${LangFileString} lng_be "Bielorusso"
-${LangFileString} lng_bg "Bulgaro"
-${LangFileString} lng_bn "Bengali"
-${LangFileString} lng_bn_BD "Bengali Bangladesh"
-${LangFileString} lng_br "Bretone"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "Catalano"
-${LangFileString} lng_ca@valencia "Catalano Valenciano"
-${LangFileString} lng_cs "Ceco"
-${LangFileString} lng_da "Danese"
-${LangFileString} lng_de "Tedesco"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "Dzongkha"
-${LangFileString} lng_el "Greco"
-${LangFileString} lng_en "Inglese"
-${LangFileString} lng_en_AU "Inglese Australiano"
-${LangFileString} lng_en_CA "Inglese Canadese"
-${LangFileString} lng_en_GB "Inglese Britannico"
-${LangFileString} lng_en_US@piglatin "Pig Latin"
-${LangFileString} lng_eo "Esperanto"
-${LangFileString} lng_es "Spagnolo"
-${LangFileString} lng_es_MX "Spagnolo Messicano"
-${LangFileString} lng_et "Estone"
-${LangFileString} lng_eu "Basco"
-${LangFileString} lng_fa "Farsi"
-${LangFileString} lng_fi "Finlandese"
-${LangFileString} lng_fr "Francese"
-${LangFileString} lng_ga "Irlandese"
-${LangFileString} lng_gl "Gallese"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "Ebreo"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "Croato"
-${LangFileString} lng_hu "Ungherese"
-${LangFileString} lng_hy "Armenian"
-${LangFileString} lng_id "Indonesiano"
-${LangFileString} lng_is "Icelandic"
-${LangFileString} lng_it "Italiano"
-${LangFileString} lng_ja "Giopponese"
-${LangFileString} lng_km "Khmer"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "Koreano"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "Lituano"
-${LangFileString} lng_lv "Latvian"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "Macedone"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "Mongolo"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in Bengali script"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "Norvegese Bokmål"
-${LangFileString} lng_ne "Nepali"
-${LangFileString} lng_nl "Olandese"
-${LangFileString} lng_nn "Norvegese Nynorsk"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "Panjabi"
-${LangFileString} lng_pl "Polacco"
-${LangFileString} lng_pt "Portoghese"
-${LangFileString} lng_pt_BR "Portoghese Brasiliano"
-${LangFileString} lng_ro "Rumeno"
-${LangFileString} lng_ru "Russo"
-${LangFileString} lng_rw "Kinyarwanda"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "Slovacco"
-${LangFileString} lng_sl "Sloveno"
-${LangFileString} lng_sq "Albanese"
-${LangFileString} lng_sr "Serbo"
-${LangFileString} lng_sr@latin "Serbo in caratteri Latini"
-${LangFileString} lng_sv "Svedese"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "Telugu"
-${LangFileString} lng_th "Thai"
-${LangFileString} lng_tr "Turco"
-${LangFileString} lng_uk "Ucraino"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "Vietnamese"
-${LangFileString} lng_zh_CN "Cinese Semplificato"
-${LangFileString} lng_zh_TW "Cinese Tradizionale"
${LangFileString} UInstOpt "Opzioni di Disinstallazione"
${LangFileString} UInstOpt1 "Scegli ulteriori Opzioni"
${LangFileString} PurgePrefs "Mantieni le Impostazioni personali"
diff --git a/packaging/win32/languages/Italian_languageNames.nsh b/packaging/win32/languages/Italian_languageNames.nsh
new file mode 100644
index 000000000..020b60730
--- /dev/null
+++ b/packaging/win32/languages/Italian_languageNames.nsh
@@ -0,0 +1,94 @@
+### Italian (it) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'Italian.nsh'
+${LangFileString} lng_am "Amarico (am)"
+${LangFileString} lng_ar "Arabo (ar)"
+${LangFileString} lng_as "Assamese (as)"
+${LangFileString} lng_az "Azero (az)"
+${LangFileString} lng_be "Bielorusso (be)"
+${LangFileString} lng_bg "Bulgaro (bg)"
+${LangFileString} lng_bn "Bengalese (bn)"
+${LangFileString} lng_bn_BD "Bengalese/Bangladesh (bn_BD)"
+${LangFileString} lng_br "Bretone (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "Catalano (ca)"
+${LangFileString} lng_ca@valencia "Catalano Valenziano (ca@valencia)"
+${LangFileString} lng_cs "Ceco (cs)"
+${LangFileString} lng_da "Danese (da)"
+${LangFileString} lng_de "Tedesco (de)"
+${LangFileString} lng_doi "Dogri (doi)"
+${LangFileString} lng_dz "Dzongkha (dz)"
+${LangFileString} lng_el "Greco (el)"
+${LangFileString} lng_en "Inglese (en)"
+${LangFileString} lng_en_AU "Inglese/Australia (en_AU)"
+${LangFileString} lng_en_CA "Inglese/Canada (en_CA)"
+${LangFileString} lng_en_GB "Inglese/Gran Bretagna (en_GB)"
+${LangFileString} lng_en_US@piglatin "Pig Latin (en_US@piglatin)"
+${LangFileString} lng_eo "Esperanto (eo)"
+${LangFileString} lng_es "Spagnolo (es)"
+${LangFileString} lng_es_MX "Spagnolo/Messicano (es_MX)"
+${LangFileString} lng_et "Estone (et)"
+${LangFileString} lng_eu "Basco (eu)"
+${LangFileString} lng_fa "Persiano (fa)"
+${LangFileString} lng_fi "Finlandese (fi)"
+${LangFileString} lng_fr "Francese (fr)"
+${LangFileString} lng_ga "Irlandese (ga)"
+${LangFileString} lng_gl "Galiziona (gl)"
+${LangFileString} lng_gu "Gujarati (gu)"
+${LangFileString} lng_he "Ebreo (he)"
+${LangFileString} lng_hi "Hindi (hi)"
+${LangFileString} lng_hr "Croato (hr)"
+${LangFileString} lng_hu "Ungherese (hu)"
+${LangFileString} lng_hy "Armeno (hy)"
+${LangFileString} lng_id "Indonesiano (id)"
+${LangFileString} lng_is "Islandese (is)"
+${LangFileString} lng_it "Italiano (it)"
+${LangFileString} lng_ja "Giapponese (ja)"
+${LangFileString} lng_km "Khmer (km)"
+${LangFileString} lng_kn "Kannada (kn)"
+${LangFileString} lng_ko "Koreano (ko)"
+${LangFileString} lng_kok "Konkani (kok)"
+${LangFileString} lng_kok@latin "Konkani in caratteri latini (kok@latin)"
+${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script (ks@aran)"
+${LangFileString} lng_ks@deva "Kashmiri in caratteri devanagari (ks@deva)"
+${LangFileString} lng_lt "Lituano (lt)"
+${LangFileString} lng_lv "Lettone (lv)"
+${LangFileString} lng_mai "Maithili (mai)"
+${LangFileString} lng_mk "Macedone (mk)"
+${LangFileString} lng_ml "Malayalam (ml)"
+${LangFileString} lng_mn "Mongolo (mn)"
+${LangFileString} lng_mni "Manipuri (mni)"
+${LangFileString} lng_mni@beng "Manipuri in caratteri bengalesi (mni@beng)"
+${LangFileString} lng_mr "Marathi (mr)"
+${LangFileString} lng_nb "Norvegese Bokmål (nb)"
+${LangFileString} lng_ne "Nepalese (ne)"
+${LangFileString} lng_nl "Olandese (nl)"
+${LangFileString} lng_nn "Norvegese Nynorsk (nn)"
+${LangFileString} lng_or "Odia (or)"
+${LangFileString} lng_pa "Panjabi (pa)"
+${LangFileString} lng_pl "Polacco (pl)"
+${LangFileString} lng_pt "Portoghese (pt)"
+${LangFileString} lng_pt_BR "Portoghese/Brasiliano (pt_BR)"
+${LangFileString} lng_ro "Rumeno (ro)"
+${LangFileString} lng_ru "Russo (ru)"
+${LangFileString} lng_rw "Kinyarwanda (rw)"
+${LangFileString} lng_sa "Sanscrito (sa)"
+${LangFileString} lng_sat "Santali (sat)"
+${LangFileString} lng_sat@deva "Santali in caratteri devanagari (sat@deva)"
+${LangFileString} lng_sd "Sindhi (sd)"
+${LangFileString} lng_sd@deva "Sindhi in caratteri devanagari (sd@deva)"
+${LangFileString} lng_sk "Slovacco (sk)"
+${LangFileString} lng_sl "Sloveno (sl)"
+${LangFileString} lng_sq "Albanese (sq)"
+${LangFileString} lng_sr "Serbo (sr)"
+${LangFileString} lng_sr@latin "Serbo in caratteri latini (sr@latin)"
+${LangFileString} lng_sv "Svedese (sv)"
+${LangFileString} lng_ta "Tamil (ta)"
+${LangFileString} lng_te "Telugu (te)"
+${LangFileString} lng_th "Tailandese (th)"
+${LangFileString} lng_tr "Turco (tr)"
+${LangFileString} lng_uk "Ucraino (uk)"
+${LangFileString} lng_ur "Urdu (ur)"
+${LangFileString} lng_vi "Vietnamita (vi)"
+${LangFileString} lng_zh_CN "Cinese/Cina (zh_CN)"
+${LangFileString} lng_zh_TW "Cinese/Taiwan (zh_TW)"
diff --git a/packaging/win32/languages/Japanese.nsh b/packaging/win32/languages/Japanese.nsh
index 023654aa2..0c8f28aa8 100644
--- a/packaging/win32/languages/Japanese.nsh
+++ b/packaging/win32/languages/Japanese.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Dictionaries"
${LangFileString} DictionariesDesc "Dictionaries for some common languages for spell checking in Inkscape"
${LangFileString} Languages "言語"
${LangFileString} LanguagesDesc "Inkscape のさまざまな言語ファイルをインストール"
-${LangFileString} lng_am "アムハラ語"
-${LangFileString} lng_ar "アラビア語"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "アゼルバイジャン語"
-${LangFileString} lng_be "ベラルーシ語"
-${LangFileString} lng_bg "ブルガリア語"
-${LangFileString} lng_bn "ベンガル語"
-${LangFileString} lng_bn_BD "Bengali Bangladesh"
-${LangFileString} lng_br "ブルトン語"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "カタロニア語"
-${LangFileString} lng_ca@valencia "バレンシア語"
-${LangFileString} lng_cs "チェコ語"
-${LangFileString} lng_da "デンマーク語"
-${LangFileString} lng_de "ドイツ語"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "ゾンカ語"
-${LangFileString} lng_el "ギリシャ語"
-${LangFileString} lng_en "英語"
-${LangFileString} lng_en_AU "英語 (オーストラリア)"
-${LangFileString} lng_en_CA "英語 (カナダ)"
-${LangFileString} lng_en_GB "英語 (英国)"
-${LangFileString} lng_en_US@piglatin "ピッグ・ラテン語"
-${LangFileString} lng_eo "エスペラント語"
-${LangFileString} lng_es "スペイン語"
-${LangFileString} lng_es_MX "スペイン語 (メキシコ)"
-${LangFileString} lng_et "エストニア語"
-${LangFileString} lng_eu "バスク語"
-${LangFileString} lng_fa "ファルシ語"
-${LangFileString} lng_fi "フィンランド語"
-${LangFileString} lng_fr "フランス語"
-${LangFileString} lng_ga "アイルランド語"
-${LangFileString} lng_gl "ガリシア語"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "ヘブライ語"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "クロアチア語"
-${LangFileString} lng_hu "ハンガリー語"
-${LangFileString} lng_hy "Armenian"
-${LangFileString} lng_id "インドネシア語"
-${LangFileString} lng_is "Icelandic"
-${LangFileString} lng_it "イタリア語"
-${LangFileString} lng_ja "日本語"
-${LangFileString} lng_km "クメール語"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "韓国語"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "リトアニア語"
-${LangFileString} lng_lv "Latvian"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "マケドニア語"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "モンゴル語"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in Bengali script"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "ノルウェー語ブークモール"
-${LangFileString} lng_ne "ネパール語"
-${LangFileString} lng_nl "オランダ語"
-${LangFileString} lng_nn "ノルウェー語ニーノシュク"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "パンジャブ語"
-${LangFileString} lng_pl "ポーランド語"
-${LangFileString} lng_pt "ポルトガル語"
-${LangFileString} lng_pt_BR "ポルトガル語 (ブラジル)"
-${LangFileString} lng_ro "ルーマニア語"
-${LangFileString} lng_ru "ロシア語"
-${LangFileString} lng_rw "キニヤルワンダ語"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "スロバキア語"
-${LangFileString} lng_sl "スロベニア語"
-${LangFileString} lng_sq "アルバニア語"
-${LangFileString} lng_sr "セルビア語"
-${LangFileString} lng_sr@latin "セルビア語ラテン文字"
-${LangFileString} lng_sv "スウェーデン語"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "テルグ語"
-${LangFileString} lng_th "タイ語"
-${LangFileString} lng_tr "トルコ語"
-${LangFileString} lng_uk "ウクライナ語"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "ベトナム語"
-${LangFileString} lng_zh_CN "中国語 (簡体字)"
-${LangFileString} lng_zh_TW "中国語 (繁体字)"
${LangFileString} UInstOpt "アンインストールオプション"
${LangFileString} UInstOpt1 "必要であれば以下のオプションを選択してください"
${LangFileString} PurgePrefs "個人設定を残す"
diff --git a/packaging/win32/languages/Japanese_languageNames.nsh b/packaging/win32/languages/Japanese_languageNames.nsh
new file mode 100644
index 000000000..109e8d7fc
--- /dev/null
+++ b/packaging/win32/languages/Japanese_languageNames.nsh
@@ -0,0 +1,94 @@
+### Japanese (ja) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'Japanese.nsh'
+${LangFileString} lng_am "アムハラ語 (am)"
+${LangFileString} lng_ar "アラビア語 (ar)"
+${LangFileString} lng_as "Assamese (as)"
+${LangFileString} lng_az "アゼルバイジャン語 (az)"
+${LangFileString} lng_be "ベラルーシ語 (be)"
+${LangFileString} lng_bg "ブルガリア語 (bg)"
+${LangFileString} lng_bn "ベンガル語 (bn)"
+${LangFileString} lng_bn_BD "ベンガル語/バングラデシュ (bn_BD)"
+${LangFileString} lng_br "ブルトン語 (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "カタルーニャ語 (ca)"
+${LangFileString} lng_ca@valencia "バレンシア語 (ca@valencia)"
+${LangFileString} lng_cs "チェコ語 (cs)"
+${LangFileString} lng_da "デンマーク語 (da)"
+${LangFileString} lng_de "ドイツ語 (de)"
+${LangFileString} lng_doi "Dogri (doi)"
+${LangFileString} lng_dz "ゾンカ語 (dz)"
+${LangFileString} lng_el "ギリシャ語 (el)"
+${LangFileString} lng_en "英語 (en)"
+${LangFileString} lng_en_AU "英語/オーストラリア (en_AU)"
+${LangFileString} lng_en_CA "英語/カナダ (en_CA)"
+${LangFileString} lng_en_GB "英語/イギリス (en_GB)"
+${LangFileString} lng_en_US@piglatin "ピッグ・ラテン語 (en_US@piglatin)"
+${LangFileString} lng_eo "エスペラント語 (eo)"
+${LangFileString} lng_es "スペイン語 (es)"
+${LangFileString} lng_es_MX "スペイン語/メキシコ (es_MX)"
+${LangFileString} lng_et "エストニア語 (et)"
+${LangFileString} lng_eu "バスク語 (eu)"
+${LangFileString} lng_fa "ファルシ語 (fa)"
+${LangFileString} lng_fi "フィンランド語 (fi)"
+${LangFileString} lng_fr "フランス語 (fr)"
+${LangFileString} lng_ga "アイルランド語 (ga)"
+${LangFileString} lng_gl "ガリシア語 (gl)"
+${LangFileString} lng_gu "Gujarati (gu)"
+${LangFileString} lng_he "ヘブライ語 (he)"
+${LangFileString} lng_hi "Hindi (hi)"
+${LangFileString} lng_hr "クロアチア語 (hr)"
+${LangFileString} lng_hu "ハンガリー語 (hu)"
+${LangFileString} lng_hy "アルメニア語 (hy)"
+${LangFileString} lng_id "インドネシア語 (id)"
+${LangFileString} lng_is "Icelandic (is)"
+${LangFileString} lng_it "イタリア語 (it)"
+${LangFileString} lng_ja "日本語 (ja)"
+${LangFileString} lng_km "クメール語 (km)"
+${LangFileString} lng_kn "Kannada (kn)"
+${LangFileString} lng_ko "韓国語 (ko)"
+${LangFileString} lng_kok "Konkani (kok)"
+${LangFileString} lng_kok@latin "Konkani in Latin script (kok@latin)"
+${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script (ks@aran)"
+${LangFileString} lng_ks@deva "Kashmiri in Devanagari script (ks@deva)"
+${LangFileString} lng_lt "リトアニア語 (lt)"
+${LangFileString} lng_lv "ラトビア語 (lv)"
+${LangFileString} lng_mai "Maithili (mai)"
+${LangFileString} lng_mk "マケドニア語 (mk)"
+${LangFileString} lng_ml "Malayalam (ml)"
+${LangFileString} lng_mn "モンゴル語 (mn)"
+${LangFileString} lng_mni "Manipuri (mni)"
+${LangFileString} lng_mni@beng "Manipuri in Bengali script (mni@beng)"
+${LangFileString} lng_mr "Marathi (mr)"
+${LangFileString} lng_nb "ノルウェー語ブークモール (nb)"
+${LangFileString} lng_ne "ネパール語 (ne)"
+${LangFileString} lng_nl "オランダ語 (nl)"
+${LangFileString} lng_nn "ノルウェー語ニーノシュク (nn)"
+${LangFileString} lng_or "Odia (or)"
+${LangFileString} lng_pa "パンジャブ語 (pa)"
+${LangFileString} lng_pl "ポーランド語 (pl)"
+${LangFileString} lng_pt "ポルトガル語 (pt)"
+${LangFileString} lng_pt_BR "ポルトガル語/ブラジル (pt_BR)"
+${LangFileString} lng_ro "ルーマニア語 (ro)"
+${LangFileString} lng_ru "ロシア語 (ru)"
+${LangFileString} lng_rw "キニヤルワンダ語 (rw)"
+${LangFileString} lng_sa "Sanskrit (sa)"
+${LangFileString} lng_sat "Santali (sat)"
+${LangFileString} lng_sat@deva "Santali in Devanagari script (sat@deva)"
+${LangFileString} lng_sd "Sindhi (sd)"
+${LangFileString} lng_sd@deva "Sindhi in Devanagari script (sd@deva)"
+${LangFileString} lng_sk "スロバキア語 (sk)"
+${LangFileString} lng_sl "スロベニア語 (sl)"
+${LangFileString} lng_sq "アルバニア語 (sq)"
+${LangFileString} lng_sr "セルビア語 (sr)"
+${LangFileString} lng_sr@latin "セルビア語ラテン文字 (sr@latin)"
+${LangFileString} lng_sv "スウェーデン語 (sv)"
+${LangFileString} lng_ta "Tamil (ta)"
+${LangFileString} lng_te "Telugu (te)"
+${LangFileString} lng_th "タイ語 (th)"
+${LangFileString} lng_tr "トルコ語 (tr)"
+${LangFileString} lng_uk "ウクライナ語 (uk)"
+${LangFileString} lng_ur "Urdu (ur)"
+${LangFileString} lng_vi "ベトナム語 (vi)"
+${LangFileString} lng_zh_CN "中国語/中国 (zh_CN)"
+${LangFileString} lng_zh_TW "中国語/台湾 (zh_TW)"
diff --git a/packaging/win32/languages/Polish.nsh b/packaging/win32/languages/Polish.nsh
index bea4dd958..a0ade97ee 100644
--- a/packaging/win32/languages/Polish.nsh
+++ b/packaging/win32/languages/Polish.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Dictionaries"
${LangFileString} DictionariesDesc "Dictionaries for some common languages for spell checking in Inkscape"
${LangFileString} Languages "Języki interfejsu"
${LangFileString} LanguagesDesc "Dostępne języki interfejsu dla programu Inkscape"
-${LangFileString} lng_am "Amharski"
-${LangFileString} lng_ar "Arabski"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "Azerski"
-${LangFileString} lng_be "Białoruski"
-${LangFileString} lng_bg "Bułgarski"
-${LangFileString} lng_bn "Bengalski"
-${LangFileString} lng_bn_BD "Bengali Bangladesh"
-${LangFileString} lng_br "Bretoński"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "Kataloński"
-${LangFileString} lng_ca@valencia "Walencki-Kataloński"
-${LangFileString} lng_cs "Czeski"
-${LangFileString} lng_da "Duński"
-${LangFileString} lng_de "Niemiecki"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "Dzongkha"
-${LangFileString} lng_el "Grecki"
-${LangFileString} lng_en "Angielski"
-${LangFileString} lng_en_AU "Angielski-Australijski"
-${LangFileString} lng_en_CA "Angielski-Kanadyjski"
-${LangFileString} lng_en_GB "Angielski-Brytyjski"
-${LangFileString} lng_en_US@piglatin "Pig Latin"
-${LangFileString} lng_eo "Esperanto"
-${LangFileString} lng_es "Hiszpański"
-${LangFileString} lng_es_MX "Hiszpański-Meksykański"
-${LangFileString} lng_et "Estoński"
-${LangFileString} lng_eu "Baskijski"
-${LangFileString} lng_fa "Farsi"
-${LangFileString} lng_fi "Fiński"
-${LangFileString} lng_fr "Francuski"
-${LangFileString} lng_ga "Irlandzki"
-${LangFileString} lng_gl "Galicyjski"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "Hebrajski"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "Chorwacki"
-${LangFileString} lng_hu "Węgierski"
-${LangFileString} lng_hy "Armenian"
-${LangFileString} lng_id "Indonezyjski"
-${LangFileString} lng_is "Icelandic"
-${LangFileString} lng_it "Włoski"
-${LangFileString} lng_ja "Japoński"
-${LangFileString} lng_km "Kmerski"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "Koreański"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "Litewski"
-${LangFileString} lng_lv "Latvian"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "Macedoński"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "Mongolski"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in Bengali script"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "Norweski Bokmĺl"
-${LangFileString} lng_ne "Nepali"
-${LangFileString} lng_nl "Holenderski"
-${LangFileString} lng_nn "Norweski Nynorsk"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "Pendżabski"
-${LangFileString} lng_pl "Polski"
-${LangFileString} lng_pt "Portugalski"
-${LangFileString} lng_pt_BR "Portugalski-Brazylijski"
-${LangFileString} lng_ro "Rumuński"
-${LangFileString} lng_ru "Rosyjski"
-${LangFileString} lng_rw "Ruanda-Rundi "
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "Słowacki"
-${LangFileString} lng_sl "Słoweński"
-${LangFileString} lng_sq "Albański"
-${LangFileString} lng_sr "Serbski"
-${LangFileString} lng_sr@latin "Serbski skrypt łaciński"
-${LangFileString} lng_sv "Szwedzki"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "Telugu"
-${LangFileString} lng_th "Tajski"
-${LangFileString} lng_tr "Turecki"
-${LangFileString} lng_uk "Ukraiński"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "Wietnamski"
-${LangFileString} lng_zh_CN "Chiński uproszczony"
-${LangFileString} lng_zh_TW "Chiński tradycyjny"
${LangFileString} UInstOpt "Opcje dezinstalacji"
${LangFileString} UInstOpt1 "Dokonaj wyboru spośród dodatkowych opcji"
${LangFileString} PurgePrefs "Zachowaj ustawienia użytkownika"
diff --git a/packaging/win32/languages/Polish_languageNames.nsh b/packaging/win32/languages/Polish_languageNames.nsh
new file mode 100644
index 000000000..6fcfdc84b
--- /dev/null
+++ b/packaging/win32/languages/Polish_languageNames.nsh
@@ -0,0 +1,94 @@
+### Polish (pl) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'Polish.nsh'
+${LangFileString} lng_am "amharski (am)"
+${LangFileString} lng_ar "arabski (ar)"
+${LangFileString} lng_as "Assamese (as)"
+${LangFileString} lng_az "azerski (az)"
+${LangFileString} lng_be "białoruski (ba)"
+${LangFileString} lng_bg "bułgarski (bg)"
+${LangFileString} lng_bn "bengalski (bn)"
+${LangFileString} lng_bn_BD "bengalski/Bangladesz (bn_BD)"
+${LangFileString} lng_br "bretoński (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "kataloński (ca)"
+${LangFileString} lng_ca@valencia "kataloński waloński (ca@valencia)"
+${LangFileString} lng_cs "czeski (cs)"
+${LangFileString} lng_da "duński (da)"
+${LangFileString} lng_de "niemiecki (de)"
+${LangFileString} lng_doi "Dogri (doi)"
+${LangFileString} lng_dz "dzongkha (dz)"
+${LangFileString} lng_el "grecki (el)"
+${LangFileString} lng_en "angielski (en)"
+${LangFileString} lng_en_AU "angielski/Australia (en-AU)"
+${LangFileString} lng_en_CA "angielski/Kanada (en_CA)"
+${LangFileString} lng_en_GB "angielski/Wlk.Brytania (en_GB)"
+${LangFileString} lng_en_US@piglatin "Pig Latin (en_US@piglatin)"
+${LangFileString} lng_eo "esperanto (eo)"
+${LangFileString} lng_es "hiszpański (es)"
+${LangFileString} lng_es_MX "hiszpański/Meksyk (es_MX)"
+${LangFileString} lng_et "estoński (et)"
+${LangFileString} lng_eu "baskijski (eu)"
+${LangFileString} lng_fa "perski (fa)"
+${LangFileString} lng_fi "fiński (fi)"
+${LangFileString} lng_fr "francuski (fr)"
+${LangFileString} lng_ga "irlandzki (ga)"
+${LangFileString} lng_gl "galicyjski (gl)"
+${LangFileString} lng_gu "Gujarati (gu)"
+${LangFileString} lng_he "hebrajski (he)"
+${LangFileString} lng_hi "Hindi (hi)"
+${LangFileString} lng_hr "chorwacki (hr)"
+${LangFileString} lng_hu "węgierski (hu)"
+${LangFileString} lng_hy "armeński (hy)"
+${LangFileString} lng_id "indonezyjski (id)"
+${LangFileString} lng_is "Icelandic (is)"
+${LangFileString} lng_it "włoski (it)"
+${LangFileString} lng_ja "japoński (ja)"
+${LangFileString} lng_km "kmerski (km)"
+${LangFileString} lng_kn "Kannada (kn)"
+${LangFileString} lng_ko "koreański (ko)"
+${LangFileString} lng_kok "Konkani (kok)"
+${LangFileString} lng_kok@latin "Konkani in Latin script (kok@latin)"
+${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script (ks@aran)"
+${LangFileString} lng_ks@deva "Kashmiri in Devanagari script (ks@deva)"
+${LangFileString} lng_lt "litewski (lt)"
+${LangFileString} lng_lv "łotewski (lv)"
+${LangFileString} lng_mai "Maithili (mai)"
+${LangFileString} lng_mk "macedoński (mk)"
+${LangFileString} lng_ml "Malayalam (ml)"
+${LangFileString} lng_mn "mongolski (mn)"
+${LangFileString} lng_mni "Manipuri (mni)"
+${LangFileString} lng_mni@beng "Manipuri in Bengali script (mni@beng)"
+${LangFileString} lng_mr "Marathi (mr)"
+${LangFileString} lng_nb "norweski Bokmål (nb)"
+${LangFileString} lng_ne "nepalski (ne)"
+${LangFileString} lng_nl "holenderski (nl)"
+${LangFileString} lng_nn "norweski Nynorsk (nn)"
+${LangFileString} lng_or "Odia (or)"
+${LangFileString} lng_pa "pendżabski (pa)"
+${LangFileString} lng_pl "polski (pl)"
+${LangFileString} lng_pt "portugalski (pt)"
+${LangFileString} lng_pt_BR "portugalski/Brazylia (pt_BR)"
+${LangFileString} lng_ro "rumuński (ro)"
+${LangFileString} lng_ru "rosyjski (ru)"
+${LangFileString} lng_rw "ruanda-rundi (rw)"
+${LangFileString} lng_sa "Sanskrit (sa)"
+${LangFileString} lng_sat "Santali (sat)"
+${LangFileString} lng_sat@deva "Santali in Devanagari script (sat@deva)"
+${LangFileString} lng_sd "Sindhi (sd)"
+${LangFileString} lng_sd@deva "Sindhi in Devanagari script (sd@deva)"
+${LangFileString} lng_sk "słowacki (sk)"
+${LangFileString} lng_sl "słoweński (sl)"
+${LangFileString} lng_sq "albański (sq)"
+${LangFileString} lng_sr "serbski (sr)"
+${LangFileString} lng_sr@latin "serbski, skrypt łaciński (sr@latin)"
+${LangFileString} lng_sv "szwedzki (sv)"
+${LangFileString} lng_ta "Tamil (ta)"
+${LangFileString} lng_te "Telugu (te)"
+${LangFileString} lng_th "tajski (th)"
+${LangFileString} lng_tr "turecki (tr)"
+${LangFileString} lng_uk "ukraiński (uk)"
+${LangFileString} lng_ur "Urdu (ur)"
+${LangFileString} lng_vi "wietnamski (vi)"
+${LangFileString} lng_zh_CN "chiński/Chiny (zh_CN)"
+${LangFileString} lng_zh_TW "chiński/Tajwan (zh_TW)"
diff --git a/packaging/win32/languages/Portuguese.nsh b/packaging/win32/languages/Portuguese.nsh
index c17973801..b0f745349 100644
--- a/packaging/win32/languages/Portuguese.nsh
+++ b/packaging/win32/languages/Portuguese.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Dicionários"
${LangFileString} DictionariesDesc "Dicionários para algumas linguagens comuns para correcção ortográfica no Inkscape"
${LangFileString} Languages "Traduções"
${LangFileString} LanguagesDesc "Instalar várias traduções do Inkscape"
-${LangFileString} lng_am "Amárico"
-${LangFileString} lng_ar "Arábico"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "Azerbaijano"
-${LangFileString} lng_be "Bielorrusso"
-${LangFileString} lng_bg "Búlgaro"
-${LangFileString} lng_bn "Bengali"
-${LangFileString} lng_bn_BD "Bengali do Bangladeche"
-${LangFileString} lng_br "Bretão"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "Catalão"
-${LangFileString} lng_ca@valencia "Catalão Valenciano"
-${LangFileString} lng_cs "Checo"
-${LangFileString} lng_da "Dinamarquês"
-${LangFileString} lng_de "Alemão"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "Butanês"
-${LangFileString} lng_el "Grego"
-${LangFileString} lng_en "Inglês"
-${LangFileString} lng_en_AU "Inglês Australiano"
-${LangFileString} lng_en_CA "Inglês Canadiano"
-${LangFileString} lng_en_GB "Inglês Britânico"
-${LangFileString} lng_en_US@piglatin "Pig Latin"
-${LangFileString} lng_eo "Esperanto"
-${LangFileString} lng_es "Espanhol"
-${LangFileString} lng_es_MX "Espanhol Mexicano"
-${LangFileString} lng_et "Estónio"
-${LangFileString} lng_eu "Basco"
-${LangFileString} lng_fa "Persa"
-${LangFileString} lng_fi "Finlandês"
-${LangFileString} lng_fr "Francês"
-${LangFileString} lng_ga "Irlandês"
-${LangFileString} lng_gl "Galego"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "Hebraico"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "Croata"
-${LangFileString} lng_hu "Húngaro"
-${LangFileString} lng_hy "Arménio"
-${LangFileString} lng_id "Indonésio"
-${LangFileString} lng_is "Islandês"
-${LangFileString} lng_it "Italiano"
-${LangFileString} lng_ja "Japonês"
-${LangFileString} lng_km "Cambojano"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "Coreano"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "Lituano"
-${LangFileString} lng_lv "Letão"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "Macedónio"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "Mongol"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri no alfabeto Bengali"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "Bokmål Norueguês"
-${LangFileString} lng_ne "Nepalês"
-${LangFileString} lng_nl "Holandês"
-${LangFileString} lng_nn "Novo Norueguês"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "Panjabi"
-${LangFileString} lng_pl "Polaco"
-${LangFileString} lng_pt "Português"
-${LangFileString} lng_pt_BR "Português do Brasil"
-${LangFileString} lng_ro "Romeno"
-${LangFileString} lng_ru "Russo"
-${LangFileString} lng_rw "Quiniaruanda"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "Eslovaco"
-${LangFileString} lng_sl "Esloveno"
-${LangFileString} lng_sq "Albanês"
-${LangFileString} lng_sr "Sérvio"
-${LangFileString} lng_sr@latin "Sérvio no alfabeto Latino"
-${LangFileString} lng_sv "Sueco"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "Telugo"
-${LangFileString} lng_th "Tailandês"
-${LangFileString} lng_tr "Turco"
-${LangFileString} lng_uk "Ucraniano"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "Vietnamita"
-${LangFileString} lng_zh_CN "Chinês Simplificado"
-${LangFileString} lng_zh_TW "Chinês Traditional"
${LangFileString} UInstOpt "Opções de Desinstalação"
${LangFileString} UInstOpt1 "Por favor faça as suas escolhas para opções adicionais"
${LangFileString} PurgePrefs "Manter Preferências"
diff --git a/packaging/win32/languages/PortugueseBR.nsh b/packaging/win32/languages/PortugueseBR.nsh
index 15a6cc3db..3225743e6 100644
--- a/packaging/win32/languages/PortugueseBR.nsh
+++ b/packaging/win32/languages/PortugueseBR.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Dictionaries"
${LangFileString} DictionariesDesc "Dictionaries for some common languages for spell checking in Inkscape"
${LangFileString} Languages "Traduções"
${LangFileString} LanguagesDesc "Instala várias traduçoes do Inkscape"
-${LangFileString} lng_am "Aramaico"
-${LangFileString} lng_ar "Árabe"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "Azerbaijão"
-${LangFileString} lng_be "Bielo-Russo"
-${LangFileString} lng_bg "Búlgaro"
-${LangFileString} lng_bn "Bengali"
-${LangFileString} lng_bn_BD "Bengali Bangladesh"
-${LangFileString} lng_br "Bretão"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "Catalão"
-${LangFileString} lng_ca@valencia "Catalão de Valência"
-${LangFileString} lng_cs "Tcheco"
-${LangFileString} lng_da "Dinamarquês"
-${LangFileString} lng_de "Alemão"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "Dzongkha"
-${LangFileString} lng_el "Grego"
-${LangFileString} lng_en "Inglês"
-${LangFileString} lng_en_AU "Inglês Australiano"
-${LangFileString} lng_en_CA "Inglês Canadense"
-${LangFileString} lng_en_GB "Inglês Britânico"
-${LangFileString} lng_en_US@piglatin "Pig Latin"
-${LangFileString} lng_eo "Esperanto"
-${LangFileString} lng_es "Espanhol"
-${LangFileString} lng_es_MX "Espanhol Mexicano"
-${LangFileString} lng_et "Estônia"
-${LangFileString} lng_eu "Basco"
-${LangFileString} lng_fa "Persa"
-${LangFileString} lng_fi "Finlandês"
-${LangFileString} lng_fr "Francês"
-${LangFileString} lng_ga "Irlandês"
-${LangFileString} lng_gl "Galego"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "Hebreu"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "Croata"
-${LangFileString} lng_hu "Húngaro"
-${LangFileString} lng_hy "Armênio"
-${LangFileString} lng_id "Indonésio"
-${LangFileString} lng_is "Islandês"
-${LangFileString} lng_it "Italiano"
-${LangFileString} lng_ja "Japonês"
-${LangFileString} lng_km "Khmer"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "Coreano"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "Lituano"
-${LangFileString} lng_lv "Latvian"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "Macedônio"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "Mongol"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in Bengali script"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "Bokmål Norueguês"
-${LangFileString} lng_ne "Nepalês"
-${LangFileString} lng_nl "Holandês"
-${LangFileString} lng_nn "Nynorsk Norueguês"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "Punjabi"
-${LangFileString} lng_pl "Polonês"
-${LangFileString} lng_pt "Português"
-${LangFileString} lng_pt_BR "Português do Brasil"
-${LangFileString} lng_ro "Romeno"
-${LangFileString} lng_ru "Russo"
-${LangFileString} lng_rw "Quiniaruanda"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "Eslováquio"
-${LangFileString} lng_sl "Esloveno"
-${LangFileString} lng_sq "Albanês"
-${LangFileString} lng_sr "Sérvio"
-${LangFileString} lng_sr@latin "Sérvio no alfabeto latino"
-${LangFileString} lng_sv "Sueco"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "Telugu"
-${LangFileString} lng_th "Tailandês"
-${LangFileString} lng_tr "Turco"
-${LangFileString} lng_uk "Ucraniano"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "Vietnamita"
-${LangFileString} lng_zh_CN "Chinês Simplificado"
-${LangFileString} lng_zh_TW "Chinês Tradicional"
${LangFileString} UInstOpt "Opções de Desinstalação"
${LangFileString} UInstOpt1 "Determine suas opções adicionais"
${LangFileString} PurgePrefs "Manter Preferências pessoais"
diff --git a/packaging/win32/languages/PortugueseBR_languageNames.nsh b/packaging/win32/languages/PortugueseBR_languageNames.nsh
new file mode 100644
index 000000000..98295ce00
--- /dev/null
+++ b/packaging/win32/languages/PortugueseBR_languageNames.nsh
@@ -0,0 +1,94 @@
+### Portuguese/Brazil (pt_BR) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'PortugueseBR.nsh'
+${LangFileString} lng_am "Amárico (am)"
+${LangFileString} lng_ar "Árabe (ar)"
+${LangFileString} lng_as "Assamese (as)"
+${LangFileString} lng_az "Azerbaijano (az)"
+${LangFileString} lng_be "Bielo-russo (be)"
+${LangFileString} lng_bg "Búlgaro (bg)"
+${LangFileString} lng_bn "Bengali (bn)"
+${LangFileString} lng_bn_BD "Bengali/Bangladesh (bn_BD)"
+${LangFileString} lng_br "Bretão (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "Catalã (ca)"
+${LangFileString} lng_ca@valencia "Catalã Valenciano (ca@valencia)"
+${LangFileString} lng_cs "Tcheco (cs)"
+${LangFileString} lng_da "Dinamarquês (da)"
+${LangFileString} lng_de "Alemão (de)"
+${LangFileString} lng_doi "Dogri (doi)"
+${LangFileString} lng_dz "Dzonga (dz)"
+${LangFileString} lng_el "Grego (el)"
+${LangFileString} lng_en "Inglês (en)"
+${LangFileString} lng_en_AU "Inglês/Austrália (en_AU)"
+${LangFileString} lng_en_CA "Inglês/Canadá (en_CA)"
+${LangFileString} lng_en_GB "Inglês/Grã-Bretanha (en_AU)"
+${LangFileString} lng_en_US@piglatin "Pig Latin (en_US@piglatin)"
+${LangFileString} lng_eo "Esperanto (eo)"
+${LangFileString} lng_es "Espanhol (es)"
+${LangFileString} lng_es_MX "Espanhol / México (es_MX)"
+${LangFileString} lng_et "Estoniano (et)"
+${LangFileString} lng_eu "Basco (eu)"
+${LangFileString} lng_fa "Persa (fa)"
+${LangFileString} lng_fi "Finlandês (fi)"
+${LangFileString} lng_fr "Francês (fr)"
+${LangFileString} lng_ga "Irlandês (ga)"
+${LangFileString} lng_gl "Galego (gl)"
+${LangFileString} lng_gu "Gujarati (gu)"
+${LangFileString} lng_he "Hebraico (he)"
+${LangFileString} lng_hi "Hindi (hi)"
+${LangFileString} lng_hr "Croácio (hr)"
+${LangFileString} lng_hu "Húngaro (hu)"
+${LangFileString} lng_hy "Armênio (hy)"
+${LangFileString} lng_id "Indonésio (id)"
+${LangFileString} lng_is "Icelandic (is)"
+${LangFileString} lng_it "Italiano (it)"
+${LangFileString} lng_ja "Japonês (ja)"
+${LangFileString} lng_km "Khmer (km)"
+${LangFileString} lng_kn "Kannada (kn)"
+${LangFileString} lng_ko "Coreano (ko)"
+${LangFileString} lng_kok "Konkani (kok)"
+${LangFileString} lng_kok@latin "Konkani in Latin script (kok@latin)"
+${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script (ks@aran)"
+${LangFileString} lng_ks@deva "Kashmiri in Devanagari script (ks@deva)"
+${LangFileString} lng_lt "Lituano (lt)"
+${LangFileString} lng_lv "Letão (lt)"
+${LangFileString} lng_mai "Maithili (mai)"
+${LangFileString} lng_mk "Macedônio (mk)"
+${LangFileString} lng_ml "Malayalam (ml)"
+${LangFileString} lng_mn "Mongol (mn)"
+${LangFileString} lng_mni "Manipuri (mni)"
+${LangFileString} lng_mni@beng "Manipuri in Bengali script (mni@beng)"
+${LangFileString} lng_mr "Marathi (mr)"
+${LangFileString} lng_nb "Dano-norueguesa (nb)"
+${LangFileString} lng_ne "Nepalês (ne)"
+${LangFileString} lng_nl "Holandês (nl)"
+${LangFileString} lng_nn "Novo norueguês (nn)"
+${LangFileString} lng_or "Odia (or)"
+${LangFileString} lng_pa "Panjabi (pa)"
+${LangFileString} lng_pl "Polonês (pl)"
+${LangFileString} lng_pt "Português (pt)"
+${LangFileString} lng_pt_BR "Português / Brasil (pt_BR)"
+${LangFileString} lng_ro "Romeno (ro)"
+${LangFileString} lng_ru "Russo (ru)"
+${LangFileString} lng_rw "Kinyarwanda (rw)"
+${LangFileString} lng_sa "Sanskrit (sa)"
+${LangFileString} lng_sat "Santali (sat)"
+${LangFileString} lng_sat@deva "Santali in Devanagari script (sat@deva)"
+${LangFileString} lng_sd "Sindhi (sd)"
+${LangFileString} lng_sd@deva "Sindhi in Devanagari script (sd@deva)"
+${LangFileString} lng_sk "Eslovaco (sk)"
+${LangFileString} lng_sl "Esloveno (sl)"
+${LangFileString} lng_sq "Albanês (sq)"
+${LangFileString} lng_sr "Sérvio (sr)"
+${LangFileString} lng_sr@latin "Sérvio latino (sr@latin)"
+${LangFileString} lng_sv "Sueco (sv)"
+${LangFileString} lng_ta "Tamil (ta)"
+${LangFileString} lng_te "Telugu (te)"
+${LangFileString} lng_th "Tailandês (th)"
+${LangFileString} lng_tr "Turco (tr)"
+${LangFileString} lng_uk "Ucraniano (uk)"
+${LangFileString} lng_ur "Urdu (ur)"
+${LangFileString} lng_vi "Vietnamita (vi)"
+${LangFileString} lng_zh_CN "Chinês/China (zh_CN)"
+${LangFileString} lng_zh_TW "Chinês/Taiwan (zh_TW)"
diff --git a/packaging/win32/languages/Portuguese_languageNames.nsh b/packaging/win32/languages/Portuguese_languageNames.nsh
new file mode 100644
index 000000000..fd3c4e921
--- /dev/null
+++ b/packaging/win32/languages/Portuguese_languageNames.nsh
@@ -0,0 +1,94 @@
+### Portuguese (pt) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'Portuguese.nsh'
+${LangFileString} lng_am "Amárico (am)"
+${LangFileString} lng_ar "Arábico (ar)"
+${LangFileString} lng_as "Assamês (as)"
+${LangFileString} lng_az "Azerbaijano (az)"
+${LangFileString} lng_be "Bielorrusso (be)"
+${LangFileString} lng_bg "Búlgaro (bg)"
+${LangFileString} lng_bn "Bengali (bn)"
+${LangFileString} lng_bn_BD "Bengali/Bangladeche (bn_BD)"
+${LangFileString} lng_br "Bretão (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "Catalão (ca)"
+${LangFileString} lng_ca@valencia "Catalão Valenciano (ca@valencia)"
+${LangFileString} lng_cs "Checo (cs)"
+${LangFileString} lng_da "Dinamarquês (da)"
+${LangFileString} lng_de "Alemão (de)"
+${LangFileString} lng_doi "Dogri (doi)"
+${LangFileString} lng_dz "Butanês (dz)"
+${LangFileString} lng_el "Grego (el)"
+${LangFileString} lng_en "Inglês (en)"
+${LangFileString} lng_en_AU "Inglês/Austrália (en_AU)"
+${LangFileString} lng_en_CA "Inglês/Canadá (en_CA)"
+${LangFileString} lng_en_GB "Inglês/Grâ-Bretanha (en_GB)"
+${LangFileString} lng_en_US@piglatin "Pig Latin (en_US@piglatin)"
+${LangFileString} lng_eo "Esperanto (eo)"
+${LangFileString} lng_es "Espanhol (es)"
+${LangFileString} lng_es_MX "Espanhol/México (es_MX)"
+${LangFileString} lng_et "Estónio (et)"
+${LangFileString} lng_eu "Basco (eu)"
+${LangFileString} lng_fa "Persa (fa)"
+${LangFileString} lng_fi "Finlandês (fi)"
+${LangFileString} lng_fr "Francês (fr)"
+${LangFileString} lng_ga "Irlandês (ga)"
+${LangFileString} lng_gl "Galego (gl)"
+${LangFileString} lng_gu "Gujaráti (gu)"
+${LangFileString} lng_he "Hebraico (he)"
+${LangFileString} lng_hi "Hindi (hi)"
+${LangFileString} lng_hr "Croata (hr)"
+${LangFileString} lng_hu "Húngaro (hu)"
+${LangFileString} lng_hy "Arménio (hy)"
+${LangFileString} lng_id "Indonésio (id)"
+${LangFileString} lng_is "Islandês (is)"
+${LangFileString} lng_it "Italiano (it)"
+${LangFileString} lng_ja "Japonês (ja)"
+${LangFileString} lng_km "Cambojano (km)"
+${LangFileString} lng_kn "Canarês (kn)"
+${LangFileString} lng_ko "Coreano (ko)"
+${LangFileString} lng_kok "Concani (kok)"
+${LangFileString} lng_kok@latin "Concani no alfabeto Latino (kok@latin)"
+${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script (ks@aran)"
+${LangFileString} lng_ks@deva "Caxemiriano no alfabeto Devanágari (ks@deva)"
+${LangFileString} lng_lt "Lituano (lt)"
+${LangFileString} lng_lv "Letão (lv)"
+${LangFileString} lng_mai "Maithili (mai)"
+${LangFileString} lng_mk "Macedónio (mk)"
+${LangFileString} lng_ml "Malaiala (ml)"
+${LangFileString} lng_mn "Mongol (mn)"
+${LangFileString} lng_mni "Manipuri (mni)"
+${LangFileString} lng_mni@beng "Manipuri no alfabeto Bengali (mni@beng)"
+${LangFileString} lng_mr "Marata (mr)"
+${LangFileString} lng_nb "Bokmål Norueguês (nb)"
+${LangFileString} lng_ne "Nepalês (ne)"
+${LangFileString} lng_nl "Neerlandês (nl)"
+${LangFileString} lng_nn "Novo Norueguês (nn)"
+${LangFileString} lng_or "Odia (or)"
+${LangFileString} lng_pa "Panjabi (pa)"
+${LangFileString} lng_pl "Polaco (pl)"
+${LangFileString} lng_pt "Português (pt)"
+${LangFileString} lng_pt_BR "Português/Brasil (pt_BR)"
+${LangFileString} lng_ro "Romeno (ro)"
+${LangFileString} lng_ru "Russo (ru)"
+${LangFileString} lng_rw "Quiniaruanda (rw)"
+${LangFileString} lng_sa "Sânscrito (sa)"
+${LangFileString} lng_sat "Santali (sat)"
+${LangFileString} lng_sat@deva "Santali no alfabeto Devanágari (sat@deva)"
+${LangFileString} lng_sd "Sindi (sd)"
+${LangFileString} lng_sd@deva "Sindi no alfabeto Devanágari (sd@deva)"
+${LangFileString} lng_sk "Eslovaco (sk)"
+${LangFileString} lng_sl "Esloveno (sl)"
+${LangFileString} lng_sq "Albanês (sq)"
+${LangFileString} lng_sr "Sérvio (sr)"
+${LangFileString} lng_sr@latin "Sérvio no alfabeto Latino (sr@latin)"
+${LangFileString} lng_sv "Sueco (sv)"
+${LangFileString} lng_ta "Tâmil (ta)"
+${LangFileString} lng_te "Telugo (te)"
+${LangFileString} lng_th "Tailandês (th)"
+${LangFileString} lng_tr "Turco (tr)"
+${LangFileString} lng_uk "Ucraniano (uk)"
+${LangFileString} lng_ur "Urdu (ur)"
+${LangFileString} lng_vi "Vietnamita (vi)"
+${LangFileString} lng_zh_CN "Chinês/China (zh_CN)"
+${LangFileString} lng_zh_TW "Chinese/Taiwan (zh_TW)"
diff --git a/packaging/win32/languages/Romanian.nsh b/packaging/win32/languages/Romanian.nsh
index e69502793..d7b0efd7e 100644
--- a/packaging/win32/languages/Romanian.nsh
+++ b/packaging/win32/languages/Romanian.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Dictionaries"
${LangFileString} DictionariesDesc "Dictionaries for some common languages for spell checking in Inkscape"
${LangFileString} Languages "Traduceri"
${LangFileString} LanguagesDesc "Instalează diverse traduceri ale interfeţei pentru Inkscape"
-${LangFileString} lng_am "Amharică"
-${LangFileString} lng_ar "Arabă"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "Azeră"
-${LangFileString} lng_be "Bielorusă"
-${LangFileString} lng_bg "Bulgară"
-${LangFileString} lng_bn "Bengali"
-${LangFileString} lng_bn_BD "Bengali Bangladesh"
-${LangFileString} lng_br "Bretonă"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "Catalană"
-${LangFileString} lng_ca@valencia "Catalană, Valencian"
-${LangFileString} lng_cs "Cehă"
-${LangFileString} lng_da "Daneză"
-${LangFileString} lng_de "Germană"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "Dzongkha"
-${LangFileString} lng_el "Greacă"
-${LangFileString} lng_en "Engleză"
-${LangFileString} lng_en_AU "Engleză australiană"
-${LangFileString} lng_en_CA "Engleză canadiană"
-${LangFileString} lng_en_GB "Engleză britanică"
-${LangFileString} lng_en_US@piglatin "Pig Latin"
-${LangFileString} lng_eo "Esperanto"
-${LangFileString} lng_es "Spaniolă"
-${LangFileString} lng_es_MX "Spaniolă mexicană"
-${LangFileString} lng_et "Estoniană"
-${LangFileString} lng_eu "Bască"
-${LangFileString} lng_fa "Farsi"
-${LangFileString} lng_fi "Finlandeză"
-${LangFileString} lng_fr "Franceză"
-${LangFileString} lng_ga "Irlandeză"
-${LangFileString} lng_gl "Galiciană"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "Ebraică"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "Croată"
-${LangFileString} lng_hu "Maghiară"
-${LangFileString} lng_hy "Armenian"
-${LangFileString} lng_id "Indoneziană"
-${LangFileString} lng_is "Icelandic"
-${LangFileString} lng_it "Italiană"
-${LangFileString} lng_ja "Japoneză"
-${LangFileString} lng_km "Khmeră"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "Koreană"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "Lituaniană"
-${LangFileString} lng_lv "Latvian"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "Macedoneană"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "Mongolă"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in Bengali script"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "Norvegiană cărturărească"
-${LangFileString} lng_ne "Nepaleză"
-${LangFileString} lng_nl "Olandeză"
-${LangFileString} lng_nn "Norvegiană nouă"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "Panjabi"
-${LangFileString} lng_pl "Poloneză"
-${LangFileString} lng_pt "Portugheză"
-${LangFileString} lng_pt_BR "Portugheză braziliană"
-${LangFileString} lng_ro "Romanână"
-${LangFileString} lng_ru "Rusă"
-${LangFileString} lng_rw "Kinyarwanda"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "Slovacă"
-${LangFileString} lng_sl "Slovenă"
-${LangFileString} lng_sq "Albaneză"
-${LangFileString} lng_sr "Sârbă"
-${LangFileString} lng_sr@latin "Sârbă (alfabet Latin)"
-${LangFileString} lng_sv "Suedeză"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "Telugu"
-${LangFileString} lng_th "Tailandeză"
-${LangFileString} lng_tr "Turcă"
-${LangFileString} lng_uk "Ucraineană"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "Vietnameză"
-${LangFileString} lng_zh_CN "Chineză simplificată"
-${LangFileString} lng_zh_TW "Chineză tradiţională"
${LangFileString} UInstOpt "Opţiuni de dezinstalare"
${LangFileString} UInstOpt1 "Alegeţi dintre opţiunile adiţionale"
${LangFileString} PurgePrefs "Păstrează preferinţele personale"
diff --git a/packaging/win32/languages/Romanian_languageNames.nsh b/packaging/win32/languages/Romanian_languageNames.nsh
new file mode 100644
index 000000000..09821fb43
--- /dev/null
+++ b/packaging/win32/languages/Romanian_languageNames.nsh
@@ -0,0 +1,94 @@
+### Romanian (ro) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'Romanian.nsh'
+${LangFileString} lng_am "Amharic (am)"
+${LangFileString} lng_ar "Arabă (ar)"
+${LangFileString} lng_as "Assamese (as)"
+${LangFileString} lng_az "Azerbaijani (az)"
+${LangFileString} lng_be "Belarusă (be)"
+${LangFileString} lng_bg "Bulgară (bg)"
+${LangFileString} lng_bn "Bengaleză (bn)"
+${LangFileString} lng_bn_BD "Bengaleză/Bangladesh (bn_BD)"
+${LangFileString} lng_br "Bretonă (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "Catalană (ca)"
+${LangFileString} lng_ca@valencia "Catalană Valencia (ca@valencia)"
+${LangFileString} lng_cs "Cehă (cs)"
+${LangFileString} lng_da "Daneză (da)"
+${LangFileString} lng_de "Germană (de)"
+${LangFileString} lng_doi "Dogri (doi)"
+${LangFileString} lng_dz "Dzongkha (dz)"
+${LangFileString} lng_el "Greacă (el)"
+${LangFileString} lng_en "Engleză (en)"
+${LangFileString} lng_en_AU "Engleză/Australia (en_AU)"
+${LangFileString} lng_en_CA "Engleză/Canada (en_CA)"
+${LangFileString} lng_en_GB "Engleză/Marea Britanie (en_GB)"
+${LangFileString} lng_en_US@piglatin "Pig Latin (en_US@piglatin)"
+${LangFileString} lng_eo "Esperanto (eo)"
+${LangFileString} lng_es "Spaniolă (es)"
+${LangFileString} lng_es_MX "Spaniolă/Mexic (es_MX)"
+${LangFileString} lng_et "Estoniană (et)"
+${LangFileString} lng_eu "Bască (eu)"
+${LangFileString} lng_fa "Farsi (fa)"
+${LangFileString} lng_fi "Finlandeză (fi)"
+${LangFileString} lng_fr "Franceză (fr)"
+${LangFileString} lng_ga "Irlandeză (ga)"
+${LangFileString} lng_gl "Galeză (gl)"
+${LangFileString} lng_gu "Gujarati (gu)"
+${LangFileString} lng_he "Ebraică (he)"
+${LangFileString} lng_hi "Hindi (hi)"
+${LangFileString} lng_hr "Croată (hr)"
+${LangFileString} lng_hu "Maghiară (hu)"
+${LangFileString} lng_hy "Armenă (hy)"
+${LangFileString} lng_id "Indoneză (id)"
+${LangFileString} lng_is "Icelandic (is)"
+${LangFileString} lng_it "Italiană (it)"
+${LangFileString} lng_ja "Japoneză (ja)"
+${LangFileString} lng_km "Khmer (km)"
+${LangFileString} lng_kn "Kannada (kn)"
+${LangFileString} lng_ko "Koreană (ko)"
+${LangFileString} lng_kok "Konkani (kok)"
+${LangFileString} lng_kok@latin "Konkani in Latin script (kok@latin)"
+${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script (ks@aran)"
+${LangFileString} lng_ks@deva "Kashmiri in Devanagari script (ks@deva)"
+${LangFileString} lng_lt "Lituaniană (lt)"
+${LangFileString} lng_lv "Letonă (lv)"
+${LangFileString} lng_mai "Maithili (mai)"
+${LangFileString} lng_mk "Macedoneană (mk)"
+${LangFileString} lng_ml "Malayalam (ml)"
+${LangFileString} lng_mn "Mongolă (mn)"
+${LangFileString} lng_mni "Manipuri (mni)"
+${LangFileString} lng_mni@beng "Manipuri in Bengali script (mni@beng)"
+${LangFileString} lng_mr "Marathi (mr)"
+${LangFileString} lng_nb "Norwegiană Bokmål (nb)"
+${LangFileString} lng_ne "Nepaleză (ne)"
+${LangFileString} lng_nl "Olandeză (nl)"
+${LangFileString} lng_nn "Norwegiană Nynorsk (nn)"
+${LangFileString} lng_or "Odia (or)"
+${LangFileString} lng_pa "Panjabi (pa)"
+${LangFileString} lng_pl "Poloneză (pl)"
+${LangFileString} lng_pt "Portugheză (pt)"
+${LangFileString} lng_pt_BR "Portugheză/Brazilia (pt_BR)"
+${LangFileString} lng_ro "Română (ro)"
+${LangFileString} lng_ru "Rusă (ru)"
+${LangFileString} lng_rw "Kinyarwanda (rw)"
+${LangFileString} lng_sa "Sanskrit (sa)"
+${LangFileString} lng_sat "Santali (sat)"
+${LangFileString} lng_sat@deva "Santali in Devanagari script (sat@deva)"
+${LangFileString} lng_sd "Sindhi (sd)"
+${LangFileString} lng_sd@deva "Sindhi in Devanagari script (sd@deva)"
+${LangFileString} lng_sk "Slovacă (sk)"
+${LangFileString} lng_sl "Slovenă (sl)"
+${LangFileString} lng_sq "Albaniană (sq)"
+${LangFileString} lng_sr "Sârbă (sr)"
+${LangFileString} lng_sr@latin "Sârbă în alfabet latin (sr@latin)"
+${LangFileString} lng_sv "Suedeză (sv)"
+${LangFileString} lng_ta "Tamil (ta)"
+${LangFileString} lng_te "Telugu (te)"
+${LangFileString} lng_th "Tailandeză (th)"
+${LangFileString} lng_tr "Turcă (tr)"
+${LangFileString} lng_uk "Ucraineană (uk)"
+${LangFileString} lng_ur "Urdu (ur)"
+${LangFileString} lng_vi "Vietnameză (vi)"
+${LangFileString} lng_zh_CN "Chineză/China (zh_CN)"
+${LangFileString} lng_zh_TW "Chineză/Taiwan (zh_TW)"
diff --git a/packaging/win32/languages/Russian.nsh b/packaging/win32/languages/Russian.nsh
index 16d5f0d4f..539e95828 100644
--- a/packaging/win32/languages/Russian.nsh
+++ b/packaging/win32/languages/Russian.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Словари"
${LangFileString} DictionariesDesc "Словари для проверки правописания в текстах на некоторых распространенных языках"
${LangFileString} Languages "Переводы"
${LangFileString} LanguagesDesc "Установка переводов Inkscape на разные языки"
-${LangFileString} lng_am "Амхарский (Амаринья)"
-${LangFileString} lng_ar "Арабский"
-${LangFileString} lng_as "Ассамский"
-${LangFileString} lng_az "Азербайджанский"
-${LangFileString} lng_be "Белорусский"
-${LangFileString} lng_bg "Болгарский"
-${LangFileString} lng_bn "Бенгальский"
-${LangFileString} lng_bn_BD "Бенгальский (Бангладеш)"
-${LangFileString} lng_br "Бретонский"
-${LangFileString} lng_brx "Бодо"
-${LangFileString} lng_ca "Каталанский"
-${LangFileString} lng_ca@valencia "Каталонский (Валенсия)"
-${LangFileString} lng_cs "Чешский"
-${LangFileString} lng_da "Датский"
-${LangFileString} lng_de "Немецкий"
-${LangFileString} lng_doi "Догри"
-${LangFileString} lng_dz "Дзонг-кэ"
-${LangFileString} lng_el "Греческий"
-${LangFileString} lng_en "Английский"
-${LangFileString} lng_en_AU "Английский (Австралия)"
-${LangFileString} lng_en_CA "Английский (Канада)"
-${LangFileString} lng_en_GB "Английский (Великобритания)"
-${LangFileString} lng_en_US@piglatin "Поросячья латынь"
-${LangFileString} lng_eo "Эсперанто"
-${LangFileString} lng_es "Испанский"
-${LangFileString} lng_es_MX "Испанский (Мексика)"
-${LangFileString} lng_et "Эстонский"
-${LangFileString} lng_eu "Баскский"
-${LangFileString} lng_fa "Фарси"
-${LangFileString} lng_fi "Финский"
-${LangFileString} lng_fr "Французский"
-${LangFileString} lng_ga "Ирландский"
-${LangFileString} lng_gl "Галисийский"
-${LangFileString} lng_gu "Гуджарати"
-${LangFileString} lng_he "Иврит"
-${LangFileString} lng_hi "Хинди"
-${LangFileString} lng_hr "Хорватский"
-${LangFileString} lng_hu "Венгерский"
-${LangFileString} lng_hy "Армянский"
-${LangFileString} lng_id "Индонезийский"
-${LangFileString} lng_is "Исландский"
-${LangFileString} lng_it "Итальянский"
-${LangFileString} lng_ja "Японский"
-${LangFileString} lng_km "Кхмерский"
-${LangFileString} lng_kn "Каннада"
-${LangFileString} lng_ko "Корейский"
-${LangFileString} lng_kok "Конкани"
-${LangFileString} lng_kok@latin "Конкани на латинице"
-${LangFileString} lng_ks@aran "Кашмирский в арабском письме"
-${LangFileString} lng_ks@deva "Кашмирский в письме деванагари"
-${LangFileString} lng_lt "Литовский"
-${LangFileString} lng_lv "Латвийский"
-${LangFileString} lng_mai "Майтхили"
-${LangFileString} lng_mk "Македонский"
-${LangFileString} lng_ml "Малаялам"
-${LangFileString} lng_mn "Монгольский"
-${LangFileString} lng_mni "Манипури"
-${LangFileString} lng_mni@beng "Манипури в бенгальском письме"
-${LangFileString} lng_mr "Маратхи"
-${LangFileString} lng_nb "Норвежский (букмол)"
-${LangFileString} lng_ne "Непальский"
-${LangFileString} lng_nl "Датский"
-${LangFileString} lng_nn "Норвежский (нюнорск)"
-${LangFileString} lng_or "Ория"
-${LangFileString} lng_pa "Пенджабский"
-${LangFileString} lng_pl "Польский"
-${LangFileString} lng_pt "Португальский"
-${LangFileString} lng_pt_BR "Португальский (Бразилия)"
-${LangFileString} lng_ro "Румынский"
-${LangFileString} lng_ru "Русский"
-${LangFileString} lng_rw "Киньяруанда"
-${LangFileString} lng_sa "Санскрит"
-${LangFileString} lng_sat "Сантали"
-${LangFileString} lng_sat@deva "Сантали в письме деванагари"
-${LangFileString} lng_sd "Синдхи"
-${LangFileString} lng_sd@deva "Синдхи в письме деванагари"
-${LangFileString} lng_sk "Словацкий"
-${LangFileString} lng_sl "Словенский"
-${LangFileString} lng_sq "Албанский"
-${LangFileString} lng_sr "Сербский"
-${LangFileString} lng_sr@latin "Сербский (латиница)"
-${LangFileString} lng_sv "Шведский"
-${LangFileString} lng_ta "Тамильский"
-${LangFileString} lng_te "Телугу"
-${LangFileString} lng_th "Тайский"
-${LangFileString} lng_tr "Турецкий"
-${LangFileString} lng_uk "Украинский"
-${LangFileString} lng_ur "Урду"
-${LangFileString} lng_vi "Вьетнамский"
-${LangFileString} lng_zh_CN "Китайский упрощённый"
-${LangFileString} lng_zh_TW "Китайский традиционный"
${LangFileString} UInstOpt "Параметры удаления программы из системы"
${LangFileString} UInstOpt1 "Убедитесь в том, что указали дополнительные параметры"
${LangFileString} PurgePrefs "Сохранить личные настройки"
diff --git a/packaging/win32/languages/Russian_languageNames.nsh b/packaging/win32/languages/Russian_languageNames.nsh
new file mode 100644
index 000000000..195c5de47
--- /dev/null
+++ b/packaging/win32/languages/Russian_languageNames.nsh
@@ -0,0 +1,94 @@
+### Russian (ru) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'Russian.nsh'
+${LangFileString} lng_am "Амхарский (am)"
+${LangFileString} lng_ar "Арабский (ar)"
+${LangFileString} lng_as "Assamese (as)"
+${LangFileString} lng_az "Азербайджанский (az)"
+${LangFileString} lng_be "Белорусский (be)"
+${LangFileString} lng_bg "Болгарский (bg)"
+${LangFileString} lng_bn "Бенгальский (bn)"
+${LangFileString} lng_bn_BD "Bengali/Bangladesh (bn_BD)"
+${LangFileString} lng_br "Бретонский (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "Каталонский (ca)"
+${LangFileString} lng_ca@valencia "Каталонский, Валенсия (ca@valencia)"
+${LangFileString} lng_cs "Чешский (cs)"
+${LangFileString} lng_da "Датский (da)"
+${LangFileString} lng_de "Немецкий (de)"
+${LangFileString} lng_doi "Dogri (doi)"
+${LangFileString} lng_dz "Дзонг-кэ (dz)"
+${LangFileString} lng_el "Греческий (el)"
+${LangFileString} lng_en "Английский (en)"
+${LangFileString} lng_en_AU "Английский, Австралия (en_AU)"
+${LangFileString} lng_en_CA "Английский, Канада (en_CA)"
+${LangFileString} lng_en_GB "Английский, Великобритания (en_GB)"
+${LangFileString} lng_en_US@piglatin "Поросячья латынь (en_US@piglatin)"
+${LangFileString} lng_eo "Эсперанто (eo)"
+${LangFileString} lng_es "Испанский (es)"
+${LangFileString} lng_es_MX "Испанский, Мексика (es_MX)"
+${LangFileString} lng_et "Эстонский (et)"
+${LangFileString} lng_eu "Баскский (eu)"
+${LangFileString} lng_fa "Фарси (fa)"
+${LangFileString} lng_fi "Финский (fi)"
+${LangFileString} lng_fr "Французский (fr)"
+${LangFileString} lng_ga "Ирландский (ga)"
+${LangFileString} lng_gl "Галицийский (gl)"
+${LangFileString} lng_gu "Gujarati (gu)"
+${LangFileString} lng_he "Иврит (he)"
+${LangFileString} lng_hi "Хинди (hi)"
+${LangFileString} lng_hr "Хорватский (hr)"
+${LangFileString} lng_hu "Венгерский (hu)"
+${LangFileString} lng_hy "Армянский (hy)"
+${LangFileString} lng_id "Индонезийский (id)"
+${LangFileString} lng_is "Icelandic (is)"
+${LangFileString} lng_it "Итальянский (it)"
+${LangFileString} lng_ja "Японский (ja)"
+${LangFileString} lng_km "Кхмерский (km)"
+${LangFileString} lng_kn "Kannada (kn)"
+${LangFileString} lng_ko "Корейский (ko)"
+${LangFileString} lng_kok "Konkani (kok)"
+${LangFileString} lng_kok@latin "Konkani in Latin script (kok@latin)"
+${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script (ks@aran)"
+${LangFileString} lng_ks@deva "Kashmiri in Devanagari script (ks@deva)"
+${LangFileString} lng_lt "Литовский (lt)"
+${LangFileString} lng_lv "Latvian (lv)"
+${LangFileString} lng_mai "Maithili (mai)"
+${LangFileString} lng_mk "Македонский (mk)"
+${LangFileString} lng_ml "Malayalam (ml)"
+${LangFileString} lng_mn "Монгольский (mn)"
+${LangFileString} lng_mni "Manipuri (mni)"
+${LangFileString} lng_mni@beng "Manipuri in Bengali script (mni@beng)"
+${LangFileString} lng_mr "Marathi (mr)"
+${LangFileString} lng_nb "Норвежский, бокмол (nb)"
+${LangFileString} lng_ne "Непальский (ne)"
+${LangFileString} lng_nl "Голландский (nl)"
+${LangFileString} lng_nn "Норвежский, нюнорск (nn)"
+${LangFileString} lng_or "Odia (or)"
+${LangFileString} lng_pa "Пенджаби (pa)"
+${LangFileString} lng_pl "Польский (pl)"
+${LangFileString} lng_pt "Португальский (pt)"
+${LangFileString} lng_pt_BR "Португальский, Бразилия (pt_BR)"
+${LangFileString} lng_ro "Румынский (ro)"
+${LangFileString} lng_ru "Русский (ru)"
+${LangFileString} lng_rw "Руанда (rw)"
+${LangFileString} lng_sa "Sanskrit (sa)"
+${LangFileString} lng_sat "Santali (sat)"
+${LangFileString} lng_sat@deva "Santali in Devanagari script (sat@deva)"
+${LangFileString} lng_sd "Sindhi (sd)"
+${LangFileString} lng_sd@deva "Sindhi in Devanagari script (sd@deva)"
+${LangFileString} lng_sk "Словацкий (sk)"
+${LangFileString} lng_sl "Словенский (sl)"
+${LangFileString} lng_sq "Албанский (sq)"
+${LangFileString} lng_sr "Сербский, кириллица (sr)"
+${LangFileString} lng_sr@latin "Сербский, латиница (sr@latin)"
+${LangFileString} lng_sv "Шведский (sv)"
+${LangFileString} lng_ta "Tamil (ta)"
+${LangFileString} lng_te "Телугу (te)"
+${LangFileString} lng_th "Тайский (th)"
+${LangFileString} lng_tr "Турецкий (tr)"
+${LangFileString} lng_uk "Украинский (uk)"
+${LangFileString} lng_ur "Урду (ur)"
+${LangFileString} lng_vi "Вьетнамский (vi)"
+${LangFileString} lng_zh_CN "Китайский, Китай (zh_CN)"
+${LangFileString} lng_zh_TW "Китайский, Тайвань (zh_TW)"
diff --git a/packaging/win32/languages/SimpChinese.nsh b/packaging/win32/languages/SimpChinese.nsh
index 79105b76c..48a2a3a35 100644
--- a/packaging/win32/languages/SimpChinese.nsh
+++ b/packaging/win32/languages/SimpChinese.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Dictionaries"
${LangFileString} DictionariesDesc "Dictionaries for some common languages for spell checking in Inkscape"
${LangFileString} Languages "语言"
${LangFileString} LanguagesDesc "安装 Inkscape 各种语言翻译"
-${LangFileString} lng_am "am 阿比西尼亚语"
-${LangFileString} lng_ar "ar 阿拉伯语"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "az 亚塞拜然语"
-${LangFileString} lng_be "be 白俄罗斯语"
-${LangFileString} lng_bg "bg 保加利亚语"
-${LangFileString} lng_bn "bn 孟加拉语"
-${LangFileString} lng_bn_BD "Bengali Bangladesh"
-${LangFileString} lng_br "br 不列塔尼语"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "ca 加泰隆语"
-${LangFileString} lng_ca@valencia "ca@valencia 瓦伦西亚语 加泰罗尼亚语"
-${LangFileString} lng_cs "cs 捷克语"
-${LangFileString} lng_da "da 丹麦语"
-${LangFileString} lng_de "de 德语"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "dz 宗卡语"
-${LangFileString} lng_el "el 希腊语"
-${LangFileString} lng_en "en 英语"
-${LangFileString} lng_en_AU "en_AU 英语(澳大利亚)"
-${LangFileString} lng_en_CA "en_CA 英语(加拿大)"
-${LangFileString} lng_en_GB "en_GB 英语(英国)"
-${LangFileString} lng_en_US@piglatin "en_US@piglatin 猪拉丁语"
-${LangFileString} lng_eo "eo 世界语"
-${LangFileString} lng_es "es 西班牙文"
-${LangFileString} lng_es_MX "es_MX 西班牙语(墨西哥)"
-${LangFileString} lng_et "et 爱沙尼亚语"
-${LangFileString} lng_eu "eu 巴斯克语"
-${LangFileString} lng_fa "Farsi"
-${LangFileString} lng_fi "fi 芬兰语"
-${LangFileString} lng_fr "fr 法文"
-${LangFileString} lng_ga "ga 爱尔兰语"
-${LangFileString} lng_gl "gl 加里西亚语"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "he 希伯來语"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "hr 克罗埃西亚语"
-${LangFileString} lng_hu "hu 匈牙利语"
-${LangFileString} lng_hy "Armenian"
-${LangFileString} lng_id "id 印尼语"
-${LangFileString} lng_is "Icelandic"
-${LangFileString} lng_it "it 意大利文"
-${LangFileString} lng_ja "ja 日文"
-${LangFileString} lng_km "km 高棉语"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "ko 韩文"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "lt 立陶宛语"
-${LangFileString} lng_lv "Latvian"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "mk 马其顿语"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "mn 蒙古语"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in Bengali script"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "nb 挪威 Bokmal 语"
-${LangFileString} lng_ne "ne 尼泊尔语"
-${LangFileString} lng_nl "nl 荷兰语"
-${LangFileString} lng_nn "nn 挪威 Nynorsk 语"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "pa 旁遮普语"
-${LangFileString} lng_pl "po 波兰语"
-${LangFileString} lng_pt "pt 葡萄牙文"
-${LangFileString} lng_pt_BR "pt_BR 葡萄牙文(巴西)"
-${LangFileString} lng_ro "ro 罗马尼亚语"
-${LangFileString} lng_ru "ru 俄文"
-${LangFileString} lng_rw "rw 金亚卢安达语"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "sk 斯洛法克语"
-${LangFileString} lng_sl "sl 斯洛凡尼亚语"
-${LangFileString} lng_sq "sq 阿尔巴尼亚语"
-${LangFileString} lng_sr "sr 赛尔维亚语"
-${LangFileString} lng_sr@latin "sr@latin 塞尔维亚文-拉丁"
-${LangFileString} lng_sv "sv 瑞典语"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "Telugu"
-${LangFileString} lng_th "th 泰语"
-${LangFileString} lng_tr "tr 土耳其语"
-${LangFileString} lng_uk "uk 乌克兰语"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "vi 越南話"
-${LangFileString} lng_zh_CN "zh_CH 简体中文"
-${LangFileString} lng_zh_TW "zh_TW 繁体中文"
${LangFileString} UInstOpt "反安装选项"
${LangFileString} UInstOpt1 "请选择其他选项"
${LangFileString} PurgePrefs "保留个人偏好设定"
diff --git a/packaging/win32/languages/SimpChinese_languageNames.nsh b/packaging/win32/languages/SimpChinese_languageNames.nsh
new file mode 100644
index 000000000..a75313800
--- /dev/null
+++ b/packaging/win32/languages/SimpChinese_languageNames.nsh
@@ -0,0 +1,94 @@
+### Chinese/China (zh_CN) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'SimpChinese.nsh'
+${LangFileString} lng_am "阿姆哈拉语(am)"
+${LangFileString} lng_ar "阿拉伯语(ar)"
+${LangFileString} lng_as "阿萨姆语(as)"
+${LangFileString} lng_az "阿塞拜疆语(az)"
+${LangFileString} lng_be "白俄罗斯语(be)"
+${LangFileString} lng_bg "保加利亚语(bg)"
+${LangFileString} lng_bn "孟加拉语(bn)"
+${LangFileString} lng_bn_BD "孟加拉语/西孟加拉 (bn_BD)"
+${LangFileString} lng_br "布利托尼语(br)"
+${LangFileString} lng_brx "博多语(brx)"
+${LangFileString} lng_ca "加泰罗尼亚语(ca)"
+${LangFileString} lng_ca@valencia "瓦伦西亚加泰罗尼亚语(ca@valencia)"
+${LangFileString} lng_cs "捷克语(cs)"
+${LangFileString} lng_da "丹麦语(da)"
+${LangFileString} lng_de "德语(de)"
+${LangFileString} lng_doi "多格拉语(doi)"
+${LangFileString} lng_dz "不丹语(dz)"
+${LangFileString} lng_el "希腊语(el)"
+${LangFileString} lng_en "英语(en)"
+${LangFileString} lng_en_AU "英语/澳大利亚(en_AU)"
+${LangFileString} lng_en_CA "英语/加拿大(en_CA)"
+${LangFileString} lng_en_GB "英语/英国(en_GB)"
+${LangFileString} lng_en_US@piglatin "大拉丁语(en_US@piglatin)"
+${LangFileString} lng_eo "世界语(eo)"
+${LangFileString} lng_es "西班牙语(es)"
+${LangFileString} lng_es_MX "西班牙语/墨西哥(es_MX)"
+${LangFileString} lng_et "爱沙尼亚语(et)"
+${LangFileString} lng_eu "巴斯克语(eu)"
+${LangFileString} lng_fa "波斯语(fa)"
+${LangFileString} lng_fi "芬兰语(fi)"
+${LangFileString} lng_fr "法语(fr)"
+${LangFileString} lng_ga "爱尔兰语(ga)"
+${LangFileString} lng_gl "加利西亚语(gl)"
+${LangFileString} lng_gu "古吉拉特语(gu)"
+${LangFileString} lng_he "希伯来语(he)"
+${LangFileString} lng_hi "印地语(hi)"
+${LangFileString} lng_hr "克罗地亚语(hr)"
+${LangFileString} lng_hu "匈牙利语(hu)"
+${LangFileString} lng_hy "亚美尼亚语(hy)"
+${LangFileString} lng_id "印度尼西亚语(id)"
+${LangFileString} lng_is "冰岛语(is)"
+${LangFileString} lng_it "意大利语(it)"
+${LangFileString} lng_ja "日语(ja)"
+${LangFileString} lng_km "柬埔寨语(km)"
+${LangFileString} lng_kn "坎那达文 (kn)"
+${LangFileString} lng_ko "韩语(ko)"
+${LangFileString} lng_kok "孔卡尼语(kok)"
+${LangFileString} lng_kok@latin "孔卡尼语,拉丁字书写(sr@latin)"
+${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script (ks@aran)"
+${LangFileString} lng_ks@deva "Kashmiri in Devanagari script (ks@deva)"
+${LangFileString} lng_lt "立陶宛语(lt)"
+${LangFileString} lng_lv "拉脱维亚语(lv)"
+${LangFileString} lng_mai "迈蒂利语(mai)"
+${LangFileString} lng_mk "马其顿语(mk)"
+${LangFileString} lng_ml "马拉雅拉姆语(ml)"
+${LangFileString} lng_mn "蒙古语(mn)"
+${LangFileString} lng_mni "曼尼普尔语(mni)"
+${LangFileString} lng_mni@beng "Manipuri in Bengali script (mni@beng)"
+${LangFileString} lng_mr "马拉地语(mr)"
+${LangFileString} lng_nb "挪威巴克摩语(nb)"
+${LangFileString} lng_ne "尼泊尔语(ne)"
+${LangFileString} lng_nl "荷兰语(nl)"
+${LangFileString} lng_nn "挪威尼诺斯克语(nn)"
+${LangFileString} lng_or "奥里亚语(or)"
+${LangFileString} lng_pa "潘贾比语(pa)"
+${LangFileString} lng_pl "波兰语(pl)"
+${LangFileString} lng_pt "葡萄牙语(pt)"
+${LangFileString} lng_pt_BR "葡萄牙语/巴西(pt_BR)"
+${LangFileString} lng_ro "罗马尼亚语(ro)"
+${LangFileString} lng_ru "俄语(ru)"
+${LangFileString} lng_rw "卢旺达语(rw)"
+${LangFileString} lng_sa "梵语(sa)"
+${LangFileString} lng_sat "桑塔尔语(sat)"
+${LangFileString} lng_sat@deva "Santali in Devanagari script (sat@deva)"
+${LangFileString} lng_sd "信德语(sd)"
+${LangFileString} lng_sd@deva "Sindhi in Devanagari script (sd@deva)"
+${LangFileString} lng_sk "斯洛伐克语(sk)"
+${LangFileString} lng_sl "斯洛文尼亚语(sl)"
+${LangFileString} lng_sq "阿尔巴尼亚语(sq)"
+${LangFileString} lng_sr "塞尔维亚语(sr)"
+${LangFileString} lng_sr@latin "塞尔维亚语,拉丁字书写(sr@latin)"
+${LangFileString} lng_sv "瑞典语(sv)"
+${LangFileString} lng_ta "泰米尔语(ta)"
+${LangFileString} lng_te "泰卢固语(te)"
+${LangFileString} lng_th "泰语(th)"
+${LangFileString} lng_tr "土耳其语(tr)"
+${LangFileString} lng_uk "乌克兰语(uk)"
+${LangFileString} lng_ur "乌尔都语(ur)"
+${LangFileString} lng_vi "越南语(vi)"
+${LangFileString} lng_zh_CN "中文/中国(zh_CN)"
+${LangFileString} lng_zh_TW "中文/台湾(zh_TW)"
diff --git a/packaging/win32/languages/Slovak.nsh b/packaging/win32/languages/Slovak.nsh
index cb4d84d1b..befe7f43a 100644
--- a/packaging/win32/languages/Slovak.nsh
+++ b/packaging/win32/languages/Slovak.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Dictionaries"
${LangFileString} DictionariesDesc "Dictionaries for some common languages for spell checking in Inkscape"
${LangFileString} Languages "Jazykové sady"
${LangFileString} LanguagesDesc "Nainštalovať ďalšie jazykové sady Inkscape"
-${LangFileString} lng_am "amharčina"
-${LangFileString} lng_ar "arabčina"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "azerbajdžančina"
-${LangFileString} lng_be "bieloruština"
-${LangFileString} lng_bg "bulharčina"
-${LangFileString} lng_bn "bengálčina"
-${LangFileString} lng_bn_BD "Bengali Bangladesh"
-${LangFileString} lng_br "bretónčina"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "katalánčina"
-${LangFileString} lng_ca@valencia "valencijčina"
-${LangFileString} lng_cs "čeština"
-${LangFileString} lng_da "dánčina"
-${LangFileString} lng_de "nemčina"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "dzongkä"
-${LangFileString} lng_el "gréčtina"
-${LangFileString} lng_en "angličtina"
-${LangFileString} lng_en_AU "angličtina (Austrália)"
-${LangFileString} lng_en_CA "angličtina (Kanada)"
-${LangFileString} lng_en_GB "angličtina (Spojené kráľovstvo)"
-${LangFileString} lng_en_US@piglatin "Pig Latin"
-${LangFileString} lng_eo "esperanto"
-${LangFileString} lng_es "španielčina"
-${LangFileString} lng_es_MX "španielčina (Mexiko)"
-${LangFileString} lng_et "estónčina"
-${LangFileString} lng_eu "baskičtina"
-${LangFileString} lng_fa "farsi"
-${LangFileString} lng_fi "fínčina"
-${LangFileString} lng_fr "francúzština"
-${LangFileString} lng_ga "írčina"
-${LangFileString} lng_gl "galícijčina"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "hebrejčina"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "chorvátčina"
-${LangFileString} lng_hu "maďarčina"
-${LangFileString} lng_hy "Armenian"
-${LangFileString} lng_id "indonézština"
-${LangFileString} lng_is "Icelandic"
-${LangFileString} lng_it "taliančina"
-${LangFileString} lng_ja "japončina"
-${LangFileString} lng_km "khmérčina"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "kórejčina"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "litovčina"
-${LangFileString} lng_lv "Latvian"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "macedónčina"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "mongolčina"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in Bengali script"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "nórsky bokmal"
-${LangFileString} lng_ne "nepálčina"
-${LangFileString} lng_nl "holandčina"
-${LangFileString} lng_nn "nórsky nynorsk"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "pandžábčina"
-${LangFileString} lng_pl "poľština"
-${LangFileString} lng_pt "portugalčina"
-${LangFileString} lng_pt_BR "portugalčina (Brazília)"
-${LangFileString} lng_ro "rumunčina"
-${LangFileString} lng_ru "ruština"
-${LangFileString} lng_rw "rwandčina"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "slovenčina"
-${LangFileString} lng_sl "slovinčina"
-${LangFileString} lng_sq "albánčina"
-${LangFileString} lng_sr "srbčina"
-${LangFileString} lng_sr@latin "srbčina (latinka)"
-${LangFileString} lng_sv "švédčina"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "telugu"
-${LangFileString} lng_th "thajčina"
-${LangFileString} lng_tr "turečtina"
-${LangFileString} lng_uk "ukrajinčina"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "Vietnamese"
-${LangFileString} lng_zh_CN "čínština (zjednodušená)"
-${LangFileString} lng_zh_TW "čínština (tradičná)"
${LangFileString} UInstOpt "Možnosti deinštalácie"
${LangFileString} UInstOpt1 "Zvoľte prosím ďalšie možnosti"
${LangFileString} PurgePrefs "Ponechať osobné nastavenia"
diff --git a/packaging/win32/languages/Slovak_languageNames.nsh b/packaging/win32/languages/Slovak_languageNames.nsh
new file mode 100644
index 000000000..9e38b9109
--- /dev/null
+++ b/packaging/win32/languages/Slovak_languageNames.nsh
@@ -0,0 +1,94 @@
+### Slovak (sk) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'Slovak.nsh'
+${LangFileString} lng_am "amharčina (am)"
+${LangFileString} lng_ar "arabčina (ar)"
+${LangFileString} lng_as "ásámčina (as)"
+${LangFileString} lng_az "azerbajdžančina (az)"
+${LangFileString} lng_be "bieloruština (be)"
+${LangFileString} lng_bg "bulharčina (bg)"
+${LangFileString} lng_bn "bengálčina (bn)"
+${LangFileString} lng_bn_BD "bengálčina (Bangladéš) (bn)"
+${LangFileString} lng_br "bretónčina (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "katalánčina (ca)"
+${LangFileString} lng_ca@valencia "valencijčina (ca@valencia)"
+${LangFileString} lng_cs "čeština (cs)"
+${LangFileString} lng_da "dánčina (da)"
+${LangFileString} lng_de "nemčina (de)"
+${LangFileString} lng_doi "dógrí (doi)"
+${LangFileString} lng_dz "dzongkä (dz)"
+${LangFileString} lng_el "gréčtina (el)"
+${LangFileString} lng_en "angličtina (en)"
+${LangFileString} lng_en_AU "angličtina (Austrália) (en_AU)"
+${LangFileString} lng_en_CA "angličtina (Kanada) (en_CA)"
+${LangFileString} lng_en_GB "angličtina (Spojené kráľovstvo) (en_GB)"
+${LangFileString} lng_en_US@piglatin "pig latin (en_US@piglatin)"
+${LangFileString} lng_eo "esperanto (eo)"
+${LangFileString} lng_es "španielčina (es)"
+${LangFileString} lng_es_MX "španielčina (Mexiko) (es_MX)"
+${LangFileString} lng_et "estónčina (et)"
+${LangFileString} lng_eu "baskičtina (eu)"
+${LangFileString} lng_fa "perzština (fa)"
+${LangFileString} lng_fi "fínčina (fi)"
+${LangFileString} lng_fr "francúzština (fr)"
+${LangFileString} lng_ga "írčina (ga)"
+${LangFileString} lng_gl "galícijčina (gl)"
+${LangFileString} lng_gu "gudžarátčina (gu)"
+${LangFileString} lng_he "hebrejčina (he)"
+${LangFileString} lng_hi "hindčina (hi)"
+${LangFileString} lng_hr "chorvátčina (hr)"
+${LangFileString} lng_hu "maďarčina (hu)"
+${LangFileString} lng_hy "arménčina (hy)"
+${LangFileString} lng_id "indonézština (id)"
+${LangFileString} lng_is "islandčina (is)"
+${LangFileString} lng_it "taliančina (it)"
+${LangFileString} lng_ja "japončina (ja)"
+${LangFileString} lng_km "khmérčina (km)"
+${LangFileString} lng_kn "kannadčina (kn)"
+${LangFileString} lng_ko "kórejčina (ko)"
+${LangFileString} lng_kok "konkánčina (kok)"
+${LangFileString} lng_kok@latin "konkánčina v latinke (kok@latin)"
+${LangFileString} lng_ks@aran "kašmírčina v perzsko-arabskom skripte (ks@aran)"
+${LangFileString} lng_ks@deva "kašmírčina v skripte Devanagari (ks@deva)"
+${LangFileString} lng_lt "litovčina (lt)"
+${LangFileString} lng_lv "lotyština (lv)"
+${LangFileString} lng_mai "maithilčina (mai)"
+${LangFileString} lng_mk "macedónčina (mk)"
+${LangFileString} lng_ml "malajálamčina (ml)"
+${LangFileString} lng_mn "mongolčina (mn)"
+${LangFileString} lng_mni "manípurčina (mni)"
+${LangFileString} lng_mni@beng "manípurčina v bengálskom skripte (mni@beng)"
+${LangFileString} lng_mr "maráthčina (mr)"
+${LangFileString} lng_nb "nórsky bokmål (nb)"
+${LangFileString} lng_ne "nepálčina (ne)"
+${LangFileString} lng_nl "holandčina (nl)"
+${LangFileString} lng_nn "nórsky nynorsk (nn)"
+${LangFileString} lng_or "Odia (or)"
+${LangFileString} lng_pa "pandžábčina (pa)"
+${LangFileString} lng_pl "poľština (pl)"
+${LangFileString} lng_pt "portugalčina (pt)"
+${LangFileString} lng_pt_BR "portugalčina (Brazília) (pt_BR)"
+${LangFileString} lng_ro "rumunčina (ro)"
+${LangFileString} lng_ru "ruština (ru)"
+${LangFileString} lng_rw "rwandčina (rw)"
+${LangFileString} lng_sa "sanskrit (sa)"
+${LangFileString} lng_sat "santalčina (sat)"
+${LangFileString} lng_sat@deva "santalčina v skripte Devanagari (sat@deva)"
+${LangFileString} lng_sd "sindhčina (sd)"
+${LangFileString} lng_sd@deva "sindhčina v skripte Devanagari (sd@deva)"
+${LangFileString} lng_sk "slovenčina (sk)"
+${LangFileString} lng_sl "slovinčina (sl)"
+${LangFileString} lng_sq "albánčina (sq)"
+${LangFileString} lng_sr "srbčina (sr)"
+${LangFileString} lng_sr@latin "srbčina v latinke (sr@latin)"
+${LangFileString} lng_sv "švédčina (sv)"
+${LangFileString} lng_ta "tamilčina (ta)"
+${LangFileString} lng_te "telugčina (te)"
+${LangFileString} lng_th "thajčina (th)"
+${LangFileString} lng_tr "turečtina (tr)"
+${LangFileString} lng_uk "ukrajinčina (uk)"
+${LangFileString} lng_ur "urdčina (ur)"
+${LangFileString} lng_vi "vietnamčina (vi)"
+${LangFileString} lng_zh_CN "čínština (Čína) (zh_CN)"
+${LangFileString} lng_zh_TW "čínština (Taiwan) (zh_TW)"
diff --git a/packaging/win32/languages/Slovenian.nsh b/packaging/win32/languages/Slovenian.nsh
index 8042f3cb6..fd50222c2 100644
--- a/packaging/win32/languages/Slovenian.nsh
+++ b/packaging/win32/languages/Slovenian.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Dictionaries"
${LangFileString} DictionariesDesc "Dictionaries for some common languages for spell checking in Inkscape"
${LangFileString} Languages "Prevodi"
${LangFileString} LanguagesDesc "Namesti različne prevode za Inkscape"
-${LangFileString} lng_am "amharski"
-${LangFileString} lng_ar "arabski"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "azerbajdžanski"
-${LangFileString} lng_be "beloruski"
-${LangFileString} lng_bg "bolgarski"
-${LangFileString} lng_bn "bengalski"
-${LangFileString} lng_bn_BD "Bengali Bangladesh"
-${LangFileString} lng_br "bretonski"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "katalonski"
-${LangFileString} lng_ca@valencia "valencijski katalonski"
-${LangFileString} lng_cs "češki"
-${LangFileString} lng_da "danski"
-${LangFileString} lng_de "nemški"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "džongški"
-${LangFileString} lng_el "grški"
-${LangFileString} lng_en "angleški"
-${LangFileString} lng_en_AU "avstralsko angleški"
-${LangFileString} lng_en_CA "kanadsko angleški"
-${LangFileString} lng_en_GB "britansko angleški"
-${LangFileString} lng_en_US@piglatin "obrnjeni angleški zlogi"
-${LangFileString} lng_eo "esperanto"
-${LangFileString} lng_es "španski"
-${LangFileString} lng_es_MX "mehiško španski"
-${LangFileString} lng_et "estonski"
-${LangFileString} lng_eu "baskovski"
-${LangFileString} lng_fa "farsi"
-${LangFileString} lng_fi "finski"
-${LangFileString} lng_fr "francoski"
-${LangFileString} lng_ga "irski"
-${LangFileString} lng_gl "galegaški"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "hebrejski"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "hrvaški"
-${LangFileString} lng_hu "madžarski"
-${LangFileString} lng_hy "Armenian"
-${LangFileString} lng_id "indonezijski"
-${LangFileString} lng_is "Icelandic"
-${LangFileString} lng_it "italijanski"
-${LangFileString} lng_ja "japonski"
-${LangFileString} lng_km "kmerski"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "korejski"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "litovski"
-${LangFileString} lng_lv "Latvian"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "makedonski"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "mongolski"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in Bengali script"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "norveški Bokmal"
-${LangFileString} lng_ne "nepalski"
-${LangFileString} lng_nl "nizozemski"
-${LangFileString} lng_nn "norveški Nyorsk"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "pundžabski"
-${LangFileString} lng_pl "poljski"
-${LangFileString} lng_pt "portugalski"
-${LangFileString} lng_pt_BR "brazilski portugalski"
-${LangFileString} lng_ro "romunski"
-${LangFileString} lng_ru "ruski"
-${LangFileString} lng_rw "kinjarvandski"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "slovaški"
-${LangFileString} lng_sl "slovenski"
-${LangFileString} lng_sq "albanski"
-${LangFileString} lng_sr "srbski"
-${LangFileString} lng_sr@latin "srbski - latinica"
-${LangFileString} lng_sv "švedski"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "telugu"
-${LangFileString} lng_th "tajski"
-${LangFileString} lng_tr "turški"
-${LangFileString} lng_uk "ukrajinski"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "vietnamski"
-${LangFileString} lng_zh_CN "poenostavljeni kitajski"
-${LangFileString} lng_zh_TW "tradicionalni kitajski"
${LangFileString} UInstOpt "Možnosti odstranitve"
${LangFileString} UInstOpt1 "Izberite dodatne možnosti"
${LangFileString} PurgePrefs "Ohrani osebne nastavitve"
diff --git a/packaging/win32/languages/Slovenian_languageNames.nsh b/packaging/win32/languages/Slovenian_languageNames.nsh
new file mode 100644
index 000000000..633e73ee7
--- /dev/null
+++ b/packaging/win32/languages/Slovenian_languageNames.nsh
@@ -0,0 +1,94 @@
+### Slovenian (sl) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'Slovenian.nsh'
+${LangFileString} lng_am "amharski (am)"
+${LangFileString} lng_ar "arabski (ar)"
+${LangFileString} lng_as "Assamese (as)"
+${LangFileString} lng_az "azerbajdžanski (az)"
+${LangFileString} lng_be "beloruski (be)"
+${LangFileString} lng_bg "bolgarski (bg)"
+${LangFileString} lng_bn "bengalski (bn)"
+${LangFileString} lng_bn_BD "Bengali/Bangladesh (bn_BD)"
+${LangFileString} lng_br "bretonski (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "katalonski (ca)"
+${LangFileString} lng_ca@valencia "katalonski, Valencia (ca@valencia)"
+${LangFileString} lng_cs "češki (cs)"
+${LangFileString} lng_da "danski (da)"
+${LangFileString} lng_de "nemški (de)"
+${LangFileString} lng_doi "Dogri (doi)"
+${LangFileString} lng_dz "džonkški (dz)"
+${LangFileString} lng_el "grški (el)"
+${LangFileString} lng_en "angleški (en)"
+${LangFileString} lng_en_AU "angleški/Avstralija (en_AU)"
+${LangFileString} lng_en_CA "angleški/Kanada (en_CA)"
+${LangFileString} lng_en_GB "angleški/Velika Britanija (en_GB)"
+${LangFileString} lng_en_US@piglatin "obrnjeni zlogi (en_US@piglatin)"
+${LangFileString} lng_eo "esperanto (eo)"
+${LangFileString} lng_es "španski (es)"
+${LangFileString} lng_es_MX "španski/Mehika (es_MX)"
+${LangFileString} lng_et "estonski (et)"
+${LangFileString} lng_eu "baskovski (eu)"
+${LangFileString} lng_fa "farsi (fa)"
+${LangFileString} lng_fi "finski (fi)"
+${LangFileString} lng_fr "francoski (fr)"
+${LangFileString} lng_ga "irski (ga)"
+${LangFileString} lng_gl "galicijski (gl)"
+${LangFileString} lng_gu "Gujarati (gu)"
+${LangFileString} lng_he "hebrejski (he)"
+${LangFileString} lng_hi "Hindi (hi)"
+${LangFileString} lng_hr "hrvaški (hr)"
+${LangFileString} lng_hu "madžarski (hu)"
+${LangFileString} lng_hy "armenski (hy)"
+${LangFileString} lng_id "indonezijski (id)"
+${LangFileString} lng_is "Icelandic (is)"
+${LangFileString} lng_it "italijanski (it)"
+${LangFileString} lng_ja "japonski (ja)"
+${LangFileString} lng_km "kmerski (km)"
+${LangFileString} lng_kn "Kannada (kn)"
+${LangFileString} lng_ko "korejski (ko)"
+${LangFileString} lng_kok "Konkani (kok)"
+${LangFileString} lng_kok@latin "Konkani in Latin script (kok@latin)"
+${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script (ks@aran)"
+${LangFileString} lng_ks@deva "Kashmiri in Devanagari script (ks@deva)"
+${LangFileString} lng_lt "litovski (lt)"
+${LangFileString} lng_lv "latvijski (lt)"
+${LangFileString} lng_mai "Maithili (mai)"
+${LangFileString} lng_mk "makedonski (mk)"
+${LangFileString} lng_ml "Malayalam (ml)"
+${LangFileString} lng_mn "mongolski (mn)"
+${LangFileString} lng_mni "Manipuri (mni)"
+${LangFileString} lng_mni@beng "Manipuri in Bengali script (mni@beng)"
+${LangFileString} lng_mr "Marathi (mr)"
+${LangFileString} lng_nb "norveški, Bokmål (nb)"
+${LangFileString} lng_ne "nepalski (ne)"
+${LangFileString} lng_nl "nizozemski (nl)"
+${LangFileString} lng_nn "norveški, Nynorsk (nn)"
+${LangFileString} lng_or "Odia (or)"
+${LangFileString} lng_pa "pandžabski (pa)"
+${LangFileString} lng_pl "poljski (pl)"
+${LangFileString} lng_pt "portugalski (pt)"
+${LangFileString} lng_pt_BR "portugalski/Brazilija (pt_BR)"
+${LangFileString} lng_ro "romunski (ro)"
+${LangFileString} lng_ru "ruski (ru)"
+${LangFileString} lng_rw "kinjarvandski (rw)"
+${LangFileString} lng_sa "Sanskrit (sa)"
+${LangFileString} lng_sat "Santali (sat)"
+${LangFileString} lng_sat@deva "Santali in Devanagari script (sat@deva)"
+${LangFileString} lng_sd "Sindhi (sd)"
+${LangFileString} lng_sd@deva "Sindhi in Devanagari script (sd@deva)"
+${LangFileString} lng_sk "slovaški (sk)"
+${LangFileString} lng_sl "slovenski (sl)"
+${LangFileString} lng_sq "albanski (sq)"
+${LangFileString} lng_sr "srbski (sr)"
+${LangFileString} lng_sr@latin "srbski, latinica (sr@latin)"
+${LangFileString} lng_sv "švedski (sv)"
+${LangFileString} lng_ta "Tamil (ta)"
+${LangFileString} lng_te "Telugu (te)"
+${LangFileString} lng_th "tajski (th)"
+${LangFileString} lng_tr "turški (tr)"
+${LangFileString} lng_uk "ukrajinski (uk)"
+${LangFileString} lng_ur "Urdu (ur)"
+${LangFileString} lng_vi "vietnamski (vi)"
+${LangFileString} lng_zh_CN "kitajski/Kitajska (zh_CN)"
+${LangFileString} lng_zh_TW "kitajski/Tajvan (zh_TW)"
diff --git a/packaging/win32/languages/Spanish.nsh b/packaging/win32/languages/Spanish.nsh
index af38422f6..c28d29433 100644
--- a/packaging/win32/languages/Spanish.nsh
+++ b/packaging/win32/languages/Spanish.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Dictionaries"
${LangFileString} DictionariesDesc "Dictionaries for some common languages for spell checking in Inkscape"
${LangFileString} Languages "Traducciones"
${LangFileString} LanguagesDesc "Instalar varias traducciones para Inkscape"
-${LangFileString} lng_am "Amárico"
-${LangFileString} lng_ar "Árabe"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "Azerbayano"
-${LangFileString} lng_be "Bielorruso"
-${LangFileString} lng_bg "Búlgaro"
-${LangFileString} lng_bn "Bengalí"
-${LangFileString} lng_bn_BD "Bengali Bangladesh"
-${LangFileString} lng_br "Bretón"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "Catalán"
-${LangFileString} lng_ca@valencia "Valenciano"
-${LangFileString} lng_cs "Checo"
-${LangFileString} lng_da "Dané"
-${LangFileString} lng_de "Alemán"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "Dzongkha"
-${LangFileString} lng_el "Griego"
-${LangFileString} lng_en "Inglés"
-${LangFileString} lng_en_AU "Inglés australiano"
-${LangFileString} lng_en_CA "Inglés canadiense"
-${LangFileString} lng_en_GB "Inglés británico"
-${LangFileString} lng_en_US@piglatin "Pig Latin"
-${LangFileString} lng_eo "Esperanto"
-${LangFileString} lng_es "Español"
-${LangFileString} lng_es_MX "Español mexicano"
-${LangFileString} lng_et "Estonio"
-${LangFileString} lng_eu "Euskera"
-${LangFileString} lng_fa "Farsi"
-${LangFileString} lng_fi "Finés"
-${LangFileString} lng_fr "Francés"
-${LangFileString} lng_ga "Irlandés"
-${LangFileString} lng_gl "Galego"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "Hebreo"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "Croata"
-${LangFileString} lng_hu "Húngaro"
-${LangFileString} lng_hy "Armenian"
-${LangFileString} lng_id "Indonesio"
-${LangFileString} lng_is "Icelandic"
-${LangFileString} lng_it "Italiano"
-${LangFileString} lng_ja "Japonés"
-${LangFileString} lng_km "Jemer"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "Coreano"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "Lituano"
-${LangFileString} lng_lv "Latvian"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "Macedonio"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "Mongol"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in Bengali script"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "Bokmål noruego"
-${LangFileString} lng_ne "Nepalí"
-${LangFileString} lng_nl "Holandés"
-${LangFileString} lng_nn "Nynorsk noruego"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "Punyabi"
-${LangFileString} lng_pl "Polaco"
-${LangFileString} lng_pt "Portugués"
-${LangFileString} lng_pt_BR "Portugués brasileño"
-${LangFileString} lng_ro "Rumano"
-${LangFileString} lng_ru "Ruso"
-${LangFileString} lng_rw "Kinyarwanda"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "Eslovaco"
-${LangFileString} lng_sl "Esloveno"
-${LangFileString} lng_sq "Albano"
-${LangFileString} lng_sr "Serbio"
-${LangFileString} lng_sr@latin "Serbio en escritura latina"
-${LangFileString} lng_sv "Sueco"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "Telugu"
-${LangFileString} lng_th "Tai"
-${LangFileString} lng_tr "Turco"
-${LangFileString} lng_uk "Ucranio"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "Vietnamita"
-${LangFileString} lng_zh_CN "Chino simplificado"
-${LangFileString} lng_zh_TW "Chino taiwanés"
${LangFileString} UInstOpt "Opciones de desinstalación"
${LangFileString} UInstOpt1 "Elija sus opciones adicionales"
${LangFileString} PurgePrefs "Guardar las preferencias personales"
diff --git a/packaging/win32/languages/Spanish_languageNames.nsh b/packaging/win32/languages/Spanish_languageNames.nsh
new file mode 100644
index 000000000..b904bae9e
--- /dev/null
+++ b/packaging/win32/languages/Spanish_languageNames.nsh
@@ -0,0 +1,94 @@
+### Spanish (es) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'Spanish.nsh'
+${LangFileString} lng_am "Amárico (am)"
+${LangFileString} lng_ar "Árabe (ar)"
+${LangFileString} lng_as "Asamés (as)"
+${LangFileString} lng_az "Azerbayano (az)"
+${LangFileString} lng_be "Bielorruso (be) "
+${LangFileString} lng_bg "Búlgaro (bg)"
+${LangFileString} lng_bn "Bengalí (bn)"
+${LangFileString} lng_bn_BD "Bengalí/Bangladesh (bn_BD)"
+${LangFileString} lng_br "Bretón (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "Catalán (ca)"
+${LangFileString} lng_ca@valencia "Valenciano (ca@valencia)"
+${LangFileString} lng_cs "Checo (cs)"
+${LangFileString} lng_da "Danés (da)"
+${LangFileString} lng_de "Alemán (de)"
+${LangFileString} lng_doi "Dogri (doi)"
+${LangFileString} lng_dz "Dzongkha (dz)"
+${LangFileString} lng_el "Griego (el)"
+${LangFileString} lng_en "Inglés (en)"
+${LangFileString} lng_en_AU "Inglés/Australia (en_AU)"
+${LangFileString} lng_en_CA "Inglés/Canada (en_CA)"
+${LangFileString} lng_en_GB "Inglés/Gran Bretaña (en_GB)"
+${LangFileString} lng_en_US@piglatin "Galimatías - Pig Latin (en_US@piglatin)"
+${LangFileString} lng_eo "Esperanto (eo)"
+${LangFileString} lng_es "Español (es)"
+${LangFileString} lng_es_MX "Español/México (es_MX)"
+${LangFileString} lng_et "Estonio (et)"
+${LangFileString} lng_eu "Euskera (eu)"
+${LangFileString} lng_fa "Farsi (fa)"
+${LangFileString} lng_fi "Finés (fi)"
+${LangFileString} lng_fr "Francés (fr)"
+${LangFileString} lng_ga "Irlandés (ga)"
+${LangFileString} lng_gl "Gallego (gl)"
+${LangFileString} lng_gu "Gujarati (gu)"
+${LangFileString} lng_he "Hebreo (he)"
+${LangFileString} lng_hi "Hindi (hi)"
+${LangFileString} lng_hr "Croata (hr)"
+${LangFileString} lng_hu "Húngaro (hu)"
+${LangFileString} lng_hy "Armenio (hy)"
+${LangFileString} lng_id "Indonesio (id)"
+${LangFileString} lng_is "Islandés (is)"
+${LangFileString} lng_it "Italiano (it)"
+${LangFileString} lng_ja "Japonés (ja)"
+${LangFileString} lng_km "Jemer (km)"
+${LangFileString} lng_kn "Kannada (kn)"
+${LangFileString} lng_ko "Coreano (ko)"
+${LangFileString} lng_kok "Konkani (kok)"
+${LangFileString} lng_kok@latin "Konkani en escritura latina (kok@latin)"
+${LangFileString} lng_ks@aran "Cachemiro en escritura Perso-Arábica (ks@aran)"
+${LangFileString} lng_ks@deva "Cachemiro en escritura Devanagari (ks@deva)"
+${LangFileString} lng_lt "Lituano (lt)"
+${LangFileString} lng_lv "Letón (lv)"
+${LangFileString} lng_mai "Maithili (mai)"
+${LangFileString} lng_mk "Macedonio (mk)"
+${LangFileString} lng_ml "Malayalam (ml)"
+${LangFileString} lng_mn "Mongol (mn)"
+${LangFileString} lng_mni "Manipuri (mni)"
+${LangFileString} lng_mni@beng "Manipuri en escritura Bengalí (mni@beng)"
+${LangFileString} lng_mr "Marathi (mr)"
+${LangFileString} lng_nb "Noruego Bokmål (nb)"
+${LangFileString} lng_ne "Nepalí (ne)"
+${LangFileString} lng_nl "Holandés (nl)"
+${LangFileString} lng_nn "Noruego Nynorsk (nn)"
+${LangFileString} lng_or "Odia (or)"
+${LangFileString} lng_pa "Panjabí (pa)"
+${LangFileString} lng_pl "Polaco (pl)"
+${LangFileString} lng_pt "Portugués (pt)"
+${LangFileString} lng_pt_BR "Portugués brasileño (pt_BR)"
+${LangFileString} lng_ro "Rumano (ro)"
+${LangFileString} lng_ru "Ruso (ru)"
+${LangFileString} lng_rw "Kinyarwanda (rw)"
+${LangFileString} lng_sa "Sánscrito (sa)"
+${LangFileString} lng_sat "Santali (sat)"
+${LangFileString} lng_sat@deva "Santali en escritura Devanagari (sat@deva)"
+${LangFileString} lng_sd "Sindhi (sd)"
+${LangFileString} lng_sd@deva "Sindhi en escritura Devanagari (sd@deva)"
+${LangFileString} lng_sk "Eslovaco (sk)"
+${LangFileString} lng_sl "Esloveno (sl)"
+${LangFileString} lng_sq "Albanés (sq)"
+${LangFileString} lng_sr "Serbio (sr)"
+${LangFileString} lng_sr@latin "Serbio en escritura latina (sr@latin)"
+${LangFileString} lng_sv "Sueco (sv)"
+${LangFileString} lng_ta "Tamil (ta)"
+${LangFileString} lng_te "Telugu (te)"
+${LangFileString} lng_th "Thai (th)"
+${LangFileString} lng_tr "Turco (tr)"
+${LangFileString} lng_uk "Ukranio (uk)"
+${LangFileString} lng_ur "Urdu (ur)"
+${LangFileString} lng_vi "Vietnamita (vi)"
+${LangFileString} lng_zh_CN "Chino/China (zh_CN)"
+${LangFileString} lng_zh_TW "Chino/Taiwán (zh_TW)"
diff --git a/packaging/win32/languages/TradChinese.nsh b/packaging/win32/languages/TradChinese.nsh
index 6e75dea77..38d017949 100644
--- a/packaging/win32/languages/TradChinese.nsh
+++ b/packaging/win32/languages/TradChinese.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Dictionaries"
${LangFileString} DictionariesDesc "Dictionaries for some common languages for spell checking in Inkscape"
${LangFileString} Languages "語言"
${LangFileString} LanguagesDesc "安裝 Inkscape 各種語言翻譯"
-${LangFileString} lng_am "阿比西尼亞語"
-${LangFileString} lng_ar "阿拉伯語"
-${LangFileString} lng_as "Assamese"
-${LangFileString} lng_az "亞塞拜然語"
-${LangFileString} lng_be "白俄羅斯語"
-${LangFileString} lng_bg "保加利亞語"
-${LangFileString} lng_bn "孟加拉語"
-${LangFileString} lng_bn_BD "Bengali Bangladesh"
-${LangFileString} lng_br "不列塔尼語"
-${LangFileString} lng_brx "Bodo"
-${LangFileString} lng_ca "加泰隆語"
-${LangFileString} lng_ca@valencia "瓦倫西亞語 加泰羅尼亞語"
-${LangFileString} lng_cs "捷克語"
-${LangFileString} lng_da "丹麥語"
-${LangFileString} lng_de "德語"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "宗卡語"
-${LangFileString} lng_el "希臘語"
-${LangFileString} lng_en "英語"
-${LangFileString} lng_en_AU "英語(澳大利亞)"
-${LangFileString} lng_en_CA "英語(加拿大)"
-${LangFileString} lng_en_GB "英語(不列顛)"
-${LangFileString} lng_en_US@piglatin "豬拉丁語"
-${LangFileString} lng_eo "世界語"
-${LangFileString} lng_es "西班牙文"
-${LangFileString} lng_es_MX "西班牙語(墨西哥)"
-${LangFileString} lng_et "愛沙尼亞語"
-${LangFileString} lng_eu "巴斯克語"
-${LangFileString} lng_fa "Farsi"
-${LangFileString} lng_fi "芬蘭語"
-${LangFileString} lng_fr "法文"
-${LangFileString} lng_ga "愛爾蘭語"
-${LangFileString} lng_gl "加里西亞語"
-${LangFileString} lng_gu "Gujarati"
-${LangFileString} lng_he "希伯來語"
-${LangFileString} lng_hi "Hindi"
-${LangFileString} lng_hr "克羅埃西亞語"
-${LangFileString} lng_hu "匈牙利語"
-${LangFileString} lng_hy "Armenian"
-${LangFileString} lng_id "印尼語"
-${LangFileString} lng_is "Icelandic"
-${LangFileString} lng_it "義大利文"
-${LangFileString} lng_ja "日文"
-${LangFileString} lng_km "高棉語"
-${LangFileString} lng_kn "Kannada"
-${LangFileString} lng_ko "韓文"
-${LangFileString} lng_kok "Konkani"
-${LangFileString} lng_kok@latin "Konkani in Latin script"
-${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script"
-${LangFileString} lng_ks@deva "Kashmiri in Devanagari script"
-${LangFileString} lng_lt "立陶宛語"
-${LangFileString} lng_lv "Latvian"
-${LangFileString} lng_mai "Maithili"
-${LangFileString} lng_mk "馬其頓語"
-${LangFileString} lng_ml "Malayalam"
-${LangFileString} lng_mn "蒙古語"
-${LangFileString} lng_mni "Manipuri"
-${LangFileString} lng_mni@beng "Manipuri in Bengali script"
-${LangFileString} lng_mr "Marathi"
-${LangFileString} lng_nb "挪威 Bokmal 語"
-${LangFileString} lng_ne "尼泊爾語"
-${LangFileString} lng_nl "荷蘭語"
-${LangFileString} lng_nn "挪威 Nynorsk 語"
-${LangFileString} lng_or "Odia"
-${LangFileString} lng_pa "旁遮普語"
-${LangFileString} lng_pl "波蘭語"
-${LangFileString} lng_pt "葡萄牙文"
-${LangFileString} lng_pt_BR "葡萄牙文(巴西)"
-${LangFileString} lng_ro "羅馬尼亞語"
-${LangFileString} lng_ru "俄文"
-${LangFileString} lng_rw "金亞盧安達語"
-${LangFileString} lng_sa "Sanskrit"
-${LangFileString} lng_sat "Santali"
-${LangFileString} lng_sat@deva "Santali in Devanagari script"
-${LangFileString} lng_sd "Sindhi"
-${LangFileString} lng_sd@deva "Sindhi in Devanagari script"
-${LangFileString} lng_sk "斯洛法克語"
-${LangFileString} lng_sl "斯洛凡尼亞語"
-${LangFileString} lng_sq "阿爾巴尼亞語"
-${LangFileString} lng_sr "賽爾維亞語"
-${LangFileString} lng_sr@latin "塞爾維亞文-拉丁"
-${LangFileString} lng_sv "瑞典語"
-${LangFileString} lng_ta "Tamil"
-${LangFileString} lng_te "Telugu"
-${LangFileString} lng_th "泰語"
-${LangFileString} lng_tr "土耳其語"
-${LangFileString} lng_uk "烏克蘭語"
-${LangFileString} lng_ur "Urdu"
-${LangFileString} lng_vi "越南話"
-${LangFileString} lng_zh_CN "簡體中文"
-${LangFileString} lng_zh_TW "繁體中文"
${LangFileString} UInstOpt "反安裝選項"
${LangFileString} UInstOpt1 "請選擇其他選項"
${LangFileString} PurgePrefs "保留個人偏好設定"
diff --git a/packaging/win32/languages/TradChinese_languageNames.nsh b/packaging/win32/languages/TradChinese_languageNames.nsh
new file mode 100644
index 000000000..6d1a66954
--- /dev/null
+++ b/packaging/win32/languages/TradChinese_languageNames.nsh
@@ -0,0 +1,94 @@
+### Chinese/Taiwan (zh_TW) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'TradChinese.nsh'
+${LangFileString} lng_am "阿比西尼亞語 (am)"
+${LangFileString} lng_ar "阿拉伯語 (ar)"
+${LangFileString} lng_as "Assamese (as)"
+${LangFileString} lng_az "亞塞拜然語 (az)"
+${LangFileString} lng_be "白俄羅斯語 (be)"
+${LangFileString} lng_bg "保加利亞語 (bg)"
+${LangFileString} lng_bn "孟加拉語 (bn)"
+${LangFileString} lng_bn_BD "孟加拉語 / 西孟加拉 (bn)"
+${LangFileString} lng_br "不列塔尼語 (br)"
+${LangFileString} lng_brx "Bodo (brx)"
+${LangFileString} lng_ca "加達朗語 (ca)"
+${LangFileString} lng_ca@valencia "瓦倫西亞語 加泰羅尼亞語 (ca@valencia)"
+${LangFileString} lng_cs "捷克語 (cs)"
+${LangFileString} lng_da "丹麥語 (da)"
+${LangFileString} lng_de "德語 (de)"
+${LangFileString} lng_doi "多格萊語 (doi)"
+${LangFileString} lng_dz "宗卡語 (dz)"
+${LangFileString} lng_el "希臘語 (el)"
+${LangFileString} lng_en "英語 (en)"
+${LangFileString} lng_en_AU "英語/澳大利亞 (en_AU)"
+${LangFileString} lng_en_CA "英語 / 加拿大 (en_CA)"
+${LangFileString} lng_en_GB "英語 / 大不列顛 (en_GB)"
+${LangFileString} lng_en_US@piglatin "兒童黑話 (en_US@piglatin)"
+${LangFileString} lng_eo "世界語 (eo)"
+${LangFileString} lng_es "西班牙語 (es)"
+${LangFileString} lng_es_MX "西班牙語 / 墨西哥 (es_MX)"
+${LangFileString} lng_et "愛沙尼亞語 (et)"
+${LangFileString} lng_eu "巴斯克語 (eu)"
+${LangFileString} lng_fa "波斯語 (fa)"
+${LangFileString} lng_fi "芬蘭語 (fi)"
+${LangFileString} lng_fr "法語 (fr)"
+${LangFileString} lng_ga "愛爾蘭語 (ga)"
+${LangFileString} lng_gl "加裡西亞語 (gl)"
+${LangFileString} lng_gu "Gujarati (gu)"
+${LangFileString} lng_he "希伯來語 (he)"
+${LangFileString} lng_hi "印地語 (hi)"
+${LangFileString} lng_hr "克羅埃西亞語 (hr)"
+${LangFileString} lng_hu "匈牙利語 (hu)"
+${LangFileString} lng_hy "亞美尼亞語 (hy)"
+${LangFileString} lng_id "印尼語 (id)"
+${LangFileString} lng_is "冰島語 (is)"
+${LangFileString} lng_it "義大利語 (it)"
+${LangFileString} lng_ja "日文 (ja)"
+${LangFileString} lng_km "高棉語 (km)"
+${LangFileString} lng_kn "Kannada (kn)"
+${LangFileString} lng_ko "韓語 (ko)"
+${LangFileString} lng_kok "Konkani (kok)"
+${LangFileString} lng_kok@latin "Konkani in Latin script (kok@latin)"
+${LangFileString} lng_ks@aran "Kashmiri in Perso-Arabic script (ks@aran)"
+${LangFileString} lng_ks@deva "迪瓦那格里書寫體喀什米爾語 (ks@deva)"
+${LangFileString} lng_lt "立陶宛語 (lt)"
+${LangFileString} lng_lv "拉脫維亞語 (lv)"
+${LangFileString} lng_mai "邁蒂利語 (mai)"
+${LangFileString} lng_mk "馬其頓語 (mk)"
+${LangFileString} lng_ml "Malayalam (ml)"
+${LangFileString} lng_mn "蒙古語 (mn)"
+${LangFileString} lng_mni "曼尼普爾語 (mni)"
+${LangFileString} lng_mni@beng "孟加拉書寫體曼尼普爾語 (mni@beng)"
+${LangFileString} lng_mr "馬拉提語 (mr)"
+${LangFileString} lng_nb "挪威 Bokmål 語 (nb)"
+${LangFileString} lng_ne "尼泊爾語 (ne)"
+${LangFileString} lng_nl "荷蘭語 (nl)"
+${LangFileString} lng_nn "挪威 Nynorsk 語 (nn)"
+${LangFileString} lng_or "歐利亞語 (or)"
+${LangFileString} lng_pa "旁遮普語 (pa)"
+${LangFileString} lng_pl "波蘭語 (pl)"
+${LangFileString} lng_pt "葡萄牙語 (pt)"
+${LangFileString} lng_pt_BR "葡萄牙語 / 巴西 (pt_BR)"
+${LangFileString} lng_ro "羅馬尼亞語 (ro)"
+${LangFileString} lng_ru "俄文 (ru)"
+${LangFileString} lng_rw "金亞盧安達語 (rw)"
+${LangFileString} lng_sa "梵語 (sa)"
+${LangFileString} lng_sat "Santali (sat)"
+${LangFileString} lng_sat@deva "Santali in Devanagari script (sat@deva)"
+${LangFileString} lng_sd "信德語 (sd)"
+${LangFileString} lng_sd@deva "Sindhi in Devanagari script (sd@deva)"
+${LangFileString} lng_sk "斯洛法克語 (sk)"
+${LangFileString} lng_sl "斯洛凡尼亞語 (sl)"
+${LangFileString} lng_sq "阿爾巴尼亞語 (sq)"
+${LangFileString} lng_sr "賽爾維亞語 (sr)"
+${LangFileString} lng_sr@latin "塞爾維亞文 - 拉丁 (sr@latin)"
+${LangFileString} lng_sv "瑞典語 (sv)"
+${LangFileString} lng_ta "Tamil (ta)"
+${LangFileString} lng_te "泰盧固語 (te)"
+${LangFileString} lng_th "泰語 (th)"
+${LangFileString} lng_tr "土耳其語 (tr)"
+${LangFileString} lng_uk "烏克蘭語 (uk)"
+${LangFileString} lng_ur "烏爾都語 (ur)"
+${LangFileString} lng_vi "越南話 (vi)"
+${LangFileString} lng_zh_CN "中文 / 中國 (zh_CN)"
+${LangFileString} lng_zh_TW "中文 / 臺灣 (zh_TW)"
diff --git a/packaging/win32/languages/Ukrainian.nsh b/packaging/win32/languages/Ukrainian.nsh
index 5c015da1e..a1c6c1d1f 100644
--- a/packaging/win32/languages/Ukrainian.nsh
+++ b/packaging/win32/languages/Ukrainian.nsh
@@ -44,97 +44,6 @@ ${LangFileString} Dictionaries "Словники"
${LangFileString} DictionariesDesc "Словники для перевірки правопису поширеними мовами у Inkscape"
${LangFileString} Languages "Переклади"
${LangFileString} LanguagesDesc "Встановити переклади Inkscape різними мовами"
-${LangFileString} lng_am "Амхарською"
-${LangFileString} lng_ar "Арабською"
-${LangFileString} lng_as "Асамською"
-${LangFileString} lng_az "Азербайджанською"
-${LangFileString} lng_be "Білоруською"
-${LangFileString} lng_bg "Болгарською"
-${LangFileString} lng_bn "Бенгальською"
-${LangFileString} lng_bn_BD "Бенгальською (Бангладеш)"
-${LangFileString} lng_br "Бретонською"
-${LangFileString} lng_brx "Бодо"
-${LangFileString} lng_ca "Каталанською"
-${LangFileString} lng_ca@valencia "Валенсійською каталанською"
-${LangFileString} lng_cs "Чеською"
-${LangFileString} lng_da "Данською"
-${LangFileString} lng_de "Німецькою"
-${LangFileString} lng_doi "Dogri"
-${LangFileString} lng_dz "Дзонг-кхе"
-${LangFileString} lng_el "Грецькою"
-${LangFileString} lng_en "Англійською"
-${LangFileString} lng_en_AU "Австралійською англійською"
-${LangFileString} lng_en_CA "Канадською англійською"
-${LangFileString} lng_en_GB "Британською англійською"
-${LangFileString} lng_en_US@piglatin "Поросячою латиною"
-${LangFileString} lng_eo "Есперанто"
-${LangFileString} lng_es "Іспанською"
-${LangFileString} lng_es_MX "Мексиканською іспанською"
-${LangFileString} lng_et "Естонською"
-${LangFileString} lng_eu "Баською"
-${LangFileString} lng_fa "Фарсі"
-${LangFileString} lng_fi "Фінською"
-${LangFileString} lng_fr "Французькою"
-${LangFileString} lng_ga "Ірландською"
-${LangFileString} lng_gl "Галісійською"
-${LangFileString} lng_gu "Гуджараті"
-${LangFileString} lng_he "Івритом"
-${LangFileString} lng_hi "Гінді"
-${LangFileString} lng_hr "Хорватською"
-${LangFileString} lng_hu "Угорською"
-${LangFileString} lng_hy "Вірменською"
-${LangFileString} lng_id "Індонезійською"
-${LangFileString} lng_is "Ісландською"
-${LangFileString} lng_it "Італійською"
-${LangFileString} lng_ja "Японською"
-${LangFileString} lng_km "Кхмерською"
-${LangFileString} lng_kn "Каннадською"
-${LangFileString} lng_ko "Корейською"
-${LangFileString} lng_kok "Конкані"
-${LangFileString} lng_kok@latin "Конкані з латинською писемністю"
-${LangFileString} lng_ks@aran "Кашмірською із персо-арабською писемністю"
-${LangFileString} lng_ks@deva "Кашмірською із писемністю деванагарі"
-${LangFileString} lng_lt "Литовською"
-${LangFileString} lng_lv "Латвійською"
-${LangFileString} lng_mai "Майтілі"
-${LangFileString} lng_mk "Македонською"
-${LangFileString} lng_ml "Малаялам"
-${LangFileString} lng_mn "Монгольською"
-${LangFileString} lng_mni "Маніпурі"
-${LangFileString} lng_mni@beng "Маніпурі із бенгальською писемністю"
-${LangFileString} lng_mr "Мараті"
-${LangFileString} lng_nb "Норвезькою (букмол)"
-${LangFileString} lng_ne "Непальською"
-${LangFileString} lng_nl "Голландською"
-${LangFileString} lng_nn "Норвезькою (нюноршк)"
-${LangFileString} lng_or "Одія"
-${LangFileString} lng_pa "Пенджабі"
-${LangFileString} lng_pl "Польською"
-${LangFileString} lng_pt "Португальською"
-${LangFileString} lng_pt_BR "Бразильською португальською"
-${LangFileString} lng_ro "Румунською"
-${LangFileString} lng_ru "Російською"
-${LangFileString} lng_rw "Киньяруанда"
-${LangFileString} lng_sa "Санскритом"
-${LangFileString} lng_sat "Санталі"
-${LangFileString} lng_sat@deva "Санталі із писемністю деванагарі"
-${LangFileString} lng_sd "Сіндською"
-${LangFileString} lng_sd@deva "Сіндською із писемністю деванагарі"
-${LangFileString} lng_sk "Словацькою"
-${LangFileString} lng_sl "Словенською"
-${LangFileString} lng_sq "Албанською"
-${LangFileString} lng_sr "Сербською"
-${LangFileString} lng_sr@latin "Сербською (латиницею)"
-${LangFileString} lng_sv "Шведською"
-${LangFileString} lng_ta "Тамільською"
-${LangFileString} lng_te "Телугу"
-${LangFileString} lng_th "Тайською"
-${LangFileString} lng_tr "Турецькою"
-${LangFileString} lng_uk "Українською"
-${LangFileString} lng_ur "Урду"
-${LangFileString} lng_vi "В’єтнамською"
-${LangFileString} lng_zh_CN "Спрощеною китайською"
-${LangFileString} lng_zh_TW "Традиційною китайською"
${LangFileString} UInstOpt "Параметри вилучення програми"
${LangFileString} UInstOpt1 "Будь ласка, вкажіть додаткові параметри"
${LangFileString} PurgePrefs "Зберегти особисті налаштування"
diff --git a/packaging/win32/languages/Ukrainian_languageNames.nsh b/packaging/win32/languages/Ukrainian_languageNames.nsh
new file mode 100644
index 000000000..1c53aa503
--- /dev/null
+++ b/packaging/win32/languages/Ukrainian_languageNames.nsh
@@ -0,0 +1,94 @@
+### Ukrainian (uk) translations for language names
+# This file has been automatically created by '_language_lists.py', do not edit it manually!
+# Strings that should be translated are in 'Ukrainian.nsh'
+${LangFileString} lng_am "Амхарська (am)"
+${LangFileString} lng_ar "Арабська (ar)"
+${LangFileString} lng_as "Ассамська (as)"
+${LangFileString} lng_az "Азербайджанська (az)"
+${LangFileString} lng_be "Білоруська (be)"
+${LangFileString} lng_bg "Болгарська (bg)"
+${LangFileString} lng_bn "Бенгальська (bn)"
+${LangFileString} lng_bn_BD "Бенгальська, Бангладеш (bn_BD)"
+${LangFileString} lng_br "Бретонська (br)"
+${LangFileString} lng_brx "Бодо (brx)"
+${LangFileString} lng_ca "Каталанська (ca)"
+${LangFileString} lng_ca@valencia "Валенсійска каталанська (ca@valencia)"
+${LangFileString} lng_cs "Чеська (cs)"
+${LangFileString} lng_da "Данська (da)"
+${LangFileString} lng_de "Німецька (de)"
+${LangFileString} lng_doi "Догрі (doi)"
+${LangFileString} lng_dz "Джонка (dz)"
+${LangFileString} lng_el "Грецька (el)"
+${LangFileString} lng_en "Англійська (en)"
+${LangFileString} lng_en_AU "Англійська/Австралія (en_AU)"
+${LangFileString} lng_en_CA "Англійська/Канада (en_CA)"
+${LangFileString} lng_en_GB "Англійська/Великобританія (en_GB)"
+${LangFileString} lng_en_US@piglatin "Свиняча латина (en_US@piglatin)"
+${LangFileString} lng_eo "Есперанто (eo)"
+${LangFileString} lng_es "Іспанська (es)"
+${LangFileString} lng_es_MX "Іспанська (Мексика) (es_MX)"
+${LangFileString} lng_et "Естонська (et)"
+${LangFileString} lng_eu "Баскська (eu)"
+${LangFileString} lng_fa "Фарсі (fa)"
+${LangFileString} lng_fi "Фінська (fi)"
+${LangFileString} lng_fr "Французька (fr)"
+${LangFileString} lng_ga "Ірландська (ga)"
+${LangFileString} lng_gl "Галісійська (gl)"
+${LangFileString} lng_gu "Гуджараті (gu)"
+${LangFileString} lng_he "Єврейська (he)"
+${LangFileString} lng_hi "Хінді (hi)"
+${LangFileString} lng_hr "Хорватська (hr)"
+${LangFileString} lng_hu "Угорська (hu)"
+${LangFileString} lng_hy "Вірменська (hy)"
+${LangFileString} lng_id "Індонезійська (id)"
+${LangFileString} lng_is "ісландська (is)"
+${LangFileString} lng_it "Італійська (it)"
+${LangFileString} lng_ja "Японська (ja)"
+${LangFileString} lng_km "Кхмерська (km)"
+${LangFileString} lng_kn "Каннада (kn)"
+${LangFileString} lng_ko "Корейська (ko)"
+${LangFileString} lng_kok "Конканська (kok)"
+${LangFileString} lng_kok@latin "Конканська (латиниця) (sr@latin)"
+${LangFileString} lng_ks@aran "Кашмірська, записана персько-арабською писемністю (ks@aran)"
+${LangFileString} lng_ks@deva "Кашмірська, записана писемністю деванагарі (ks@deva)"
+${LangFileString} lng_lt "Литовська (lt)"
+${LangFileString} lng_lv "Латвійська (lv)"
+${LangFileString} lng_mai "Майтілі (mai)"
+${LangFileString} lng_mk "Македонська (mk)"
+${LangFileString} lng_ml "Малаялам (ml)"
+${LangFileString} lng_mn "Монгольська (mn)"
+${LangFileString} lng_mni "Маніпурі (mni)"
+${LangFileString} lng_mni@beng "Маніпурі, записана бенгальською писемністю (mni@beng)"
+${LangFileString} lng_mr "Маратійська (gu)"
+${LangFileString} lng_nb "Норвезька (букмол) (nb)"
+${LangFileString} lng_ne "Непальська (ne)"
+${LangFileString} lng_nl "Голландська (nl)"
+${LangFileString} lng_nn "Норвезька (нюноршк) (nn)"
+${LangFileString} lng_or "Орія (or)"
+${LangFileString} lng_pa "Пенджабі (pa)"
+${LangFileString} lng_pl "Польська (pl)"
+${LangFileString} lng_pt "Португальська (pt)"
+${LangFileString} lng_pt_BR "Португальська бразильська (pt_BR)"
+${LangFileString} lng_ro "Румунська (ro)"
+${LangFileString} lng_ru "Російська (ru)"
+${LangFileString} lng_rw "Руандійська (rw)"
+${LangFileString} lng_sa "Санскрит (sa)"
+${LangFileString} lng_sat "Санталі (it)"
+${LangFileString} lng_sat@deva "Санталі, записана писемністю деванагарі (sat@deva)"
+${LangFileString} lng_sd "Сіндхська (sd)"
+${LangFileString} lng_sd@deva "Сіндхська, записана писемністю деванагарі (sd@deva)"
+${LangFileString} lng_sk "Словацька (sk)"
+${LangFileString} lng_sl "Словенська (sl)"
+${LangFileString} lng_sq "Албанська (sq)"
+${LangFileString} lng_sr "Сербська (sr)"
+${LangFileString} lng_sr@latin "Сербська (латиниця) (sr@latin)"
+${LangFileString} lng_sv "Шведська (sv)"
+${LangFileString} lng_ta "Тамільська (ta)"
+${LangFileString} lng_te "Телугу (te)"
+${LangFileString} lng_th "Тайська (th)"
+${LangFileString} lng_tr "Турецька (tr)"
+${LangFileString} lng_uk "Українська (uk)"
+${LangFileString} lng_ur "Урду (ur)"
+${LangFileString} lng_vi "В'єтнамська (vi)"
+${LangFileString} lng_zh_CN "Китайська/Китай (zh_CN)"
+${LangFileString} lng_zh_TW "Китайська/Тайвань (zh_TW)"
diff --git a/packaging/win32/languages/_language_lists.py b/packaging/win32/languages/_language_lists.py
new file mode 100644
index 000000000..9ca0234b6
--- /dev/null
+++ b/packaging/win32/languages/_language_lists.py
@@ -0,0 +1,79 @@
+# use this to update the translated language strings in the *_languageNames.nsh files
+# translated language names are extracted from the .po files in the /po directory
+
+from __future__ import print_function
+from __future__ import unicode_literals # make all literals unicode strings by default (even in Python 2)
+
+import os
+import re
+import sys
+from io import open # needed for support of encoding parameter in Python 2
+
+from _polib import pofile
+
+
+# get the list of available Inkscape UI translations (by parsing inkscape-preferences.cpp)
+sys.path.append('../../wix/')
+from helpers import get_inkscape_locales_and_names
+inkscape_locales = get_inkscape_locales_and_names()
+
+# get the list of translations offered in the installer (by parsing _language_lists.nsh)
+re_installer_locales = re.compile(r'!macro INKSCAPE_TRANSLATIONS _MACRONAME\n(.+?)!macroend', re.DOTALL)
+re_installer_locale = re.compile(r'[ \t]+!insertmacro \${_MACRONAME}[ \t]+([\w]+)[ \t]+([\w@]+)\n')
+with open('_language_lists.nsh', 'r') as f:
+ installer_locales = re.search(re_installer_locales, f.read())
+if installer_locales:
+ installer_locales = re.finditer(re_installer_locale, installer_locales.group(1))
+ if installer_locales:
+ installer_locales = {
+ installer_locale.group(2): installer_locale.group(1) for installer_locale in installer_locales
+ }
+if not installer_locales:
+ print("Could not get the list of Inkscape translations from _language_lists.nsh")
+ sys.exit(1)
+installer_locales['en'] = 'English'
+
+
+# check if the lists are in sync
+for installer_locale in installer_locales:
+ if installer_locale not in inkscape_locales:
+ print(
+ "Error: Locale '" + installer_locale +
+ "' is present in '_language_lists.nsh' but is not a selectable Inkscape translation!"
+ )
+ sys.exit(1)
+for inkscape_locale in inkscape_locales:
+ if inkscape_locale not in installer_locales:
+ print(
+ "Warning: Locale '" + inkscape_locale +
+ "' is a selectable Inkscape translation but not present in '_language_lists.nsh'\n" +
+ " You should consider adding it."
+ )
+
+
+# extract translation names from .po files for locales offered in the installer
+for locale in sorted(installer_locales):
+ if os.path.isfile(installer_locales[locale] + '.nsh'):
+ print("Getting translation names for " + inkscape_locales[locale])
+ filename = installer_locales[locale] + '_languageNames.nsh'
+ with open(filename, 'w', encoding='utf-8', newline='\n') as f:
+ f.write(
+ "### " + inkscape_locales[locale] + " translations for language names\n" +
+ "# This file has been automatically created by '" + __file__ + "', do not edit it manually!\n"
+ "# Strings that should be translated are in '" + installer_locales[locale] + ".nsh'\n")
+ if locale is 'en':
+ for locale in sorted(installer_locales):
+ locale_name = inkscape_locales[locale]
+ f.write('${LangFileString} lng_' + locale + ' ')
+ f.write('"' + locale_name + '"\n')
+ else:
+ po_filename = '../../../po/' + locale + '.po'
+ po = pofile(po_filename)
+ for locale in sorted(installer_locales):
+ po_entry = po.find(inkscape_locales[locale])
+ if po_entry.translated():
+ locale_name = po_entry.msgstr
+ else:
+ locale_name = inkscape_locales[locale]
+ f.write('${LangFileString} lng_' + locale + ' ')
+ f.write('"' + locale_name + '"\n')
diff --git a/packaging/win32/languages/_polib.py b/packaging/win32/languages/_polib.py
new file mode 100644
index 000000000..5fc4d82b2
--- /dev/null
+++ b/packaging/win32/languages/_polib.py
@@ -0,0 +1,1870 @@
+# -* coding: utf-8 -*-
+#
+# License: MIT
+#
+# Copyright (c) 2006-2015 David Jean Louis.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+#
+# vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4:
+
+"""
+**polib** allows you to manipulate, create, modify gettext files (pot, po and
+mo files). You can load existing files, iterate through it's entries, add,
+modify entries, comments or metadata, etc. or create new po files from scratch.
+
+**polib** provides a simple and pythonic API via the :func:`~polib.pofile` and
+:func:`~polib.mofile` convenience functions.
+"""
+
+__author__ = 'David Jean Louis <izimobil@gmail.com>'
+__version__ = '1.0.8'
+__all__ = ['pofile', 'POFile', 'POEntry', 'mofile', 'MOFile', 'MOEntry',
+ 'default_encoding', 'escape', 'unescape', 'detect_encoding', ]
+
+import array
+import codecs
+import os
+import re
+import struct
+import sys
+import textwrap
+
+try:
+ import io
+except ImportError:
+ # replacement of io.open() for python < 2.6
+ # we use codecs instead
+ class io(object):
+ @staticmethod
+ def open(fpath, mode='r', encoding=None):
+ return codecs.open(fpath, mode, encoding)
+
+
+# the default encoding to use when encoding cannot be detected
+default_encoding = 'utf-8'
+
+# python 2/3 compatibility helpers {{{
+
+
+if sys.version_info[:2] < (3, 0):
+ PY3 = False
+ text_type = unicode
+
+ def b(s):
+ return s
+
+ def u(s):
+ return unicode(s, "unicode_escape")
+
+else:
+ PY3 = True
+ text_type = str
+
+ def b(s):
+ return s.encode("latin-1")
+
+ def u(s):
+ return s
+# }}}
+# _pofile_or_mofile {{{
+
+
+def _pofile_or_mofile(f, type, **kwargs):
+ """
+ Internal function used by :func:`polib.pofile` and :func:`polib.mofile` to
+ honor the DRY concept.
+ """
+ # get the file encoding
+ enc = kwargs.get('encoding')
+ if enc is None:
+ enc = detect_encoding(f, type == 'mofile')
+
+ # parse the file
+ kls = type == 'pofile' and _POFileParser or _MOFileParser
+ parser = kls(
+ f,
+ encoding=enc,
+ check_for_duplicates=kwargs.get('check_for_duplicates', False),
+ klass=kwargs.get('klass')
+ )
+ instance = parser.parse()
+ instance.wrapwidth = kwargs.get('wrapwidth', 78)
+ return instance
+# }}}
+# _is_file {{{
+
+
+def _is_file(filename_or_contents):
+ """
+ Safely returns the value of os.path.exists(filename_or_contents).
+
+ Arguments:
+
+ ``filename_or_contents``
+ either a filename, or a string holding the contents of some file.
+ In the latter case, this function will always return False.
+ """
+ try:
+ return os.path.exists(filename_or_contents)
+ except (ValueError, UnicodeEncodeError):
+ return False
+# }}}
+# function pofile() {{{
+
+
+def pofile(pofile, **kwargs):
+ """
+ Convenience function that parses the po or pot file ``pofile`` and returns
+ a :class:`~polib.POFile` instance.
+
+ Arguments:
+
+ ``pofile``
+ string, full or relative path to the po/pot file or its content (data).
+
+ ``wrapwidth``
+ integer, the wrap width, only useful when the ``-w`` option was passed
+ to xgettext (optional, default: ``78``).
+
+ ``encoding``
+ string, the encoding to use (e.g. "utf-8") (default: ``None``, the
+ encoding will be auto-detected).
+
+ ``check_for_duplicates``
+ whether to check for duplicate entries when adding entries to the
+ file (optional, default: ``False``).
+
+ ``klass``
+ class which is used to instantiate the return value (optional,
+ default: ``None``, the return value with be a :class:`~polib.POFile`
+ instance).
+ """
+ return _pofile_or_mofile(pofile, 'pofile', **kwargs)
+# }}}
+# function mofile() {{{
+
+
+def mofile(mofile, **kwargs):
+ """
+ Convenience function that parses the mo file ``mofile`` and returns a
+ :class:`~polib.MOFile` instance.
+
+ Arguments:
+
+ ``mofile``
+ string, full or relative path to the mo file or its content (data).
+
+ ``wrapwidth``
+ integer, the wrap width, only useful when the ``-w`` option was passed
+ to xgettext to generate the po file that was used to format the mo file
+ (optional, default: ``78``).
+
+ ``encoding``
+ string, the encoding to use (e.g. "utf-8") (default: ``None``, the
+ encoding will be auto-detected).
+
+ ``check_for_duplicates``
+ whether to check for duplicate entries when adding entries to the
+ file (optional, default: ``False``).
+
+ ``klass``
+ class which is used to instantiate the return value (optional,
+ default: ``None``, the return value with be a :class:`~polib.POFile`
+ instance).
+ """
+ return _pofile_or_mofile(mofile, 'mofile', **kwargs)
+# }}}
+# function detect_encoding() {{{
+
+
+def detect_encoding(file, binary_mode=False):
+ """
+ Try to detect the encoding used by the ``file``. The ``file`` argument can
+ be a PO or MO file path or a string containing the contents of the file.
+ If the encoding cannot be detected, the function will return the value of
+ ``default_encoding``.
+
+ Arguments:
+
+ ``file``
+ string, full or relative path to the po/mo file or its content.
+
+ ``binary_mode``
+ boolean, set this to True if ``file`` is a mo file.
+ """
+ PATTERN = r'"?Content-Type:.+? charset=([\w_\-:\.]+)'
+ rxt = re.compile(u(PATTERN))
+ rxb = re.compile(b(PATTERN))
+
+ def charset_exists(charset):
+ """Check whether ``charset`` is valid or not."""
+ try:
+ codecs.lookup(charset)
+ except LookupError:
+ return False
+ return True
+
+ if not _is_file(file):
+ match = rxt.search(file)
+ if match:
+ enc = match.group(1).strip()
+ if charset_exists(enc):
+ return enc
+ else:
+ # For PY3, always treat as binary
+ if binary_mode or PY3:
+ mode = 'rb'
+ rx = rxb
+ else:
+ mode = 'r'
+ rx = rxt
+ f = open(file, mode)
+ for l in f.readlines():
+ match = rx.search(l)
+ if match:
+ f.close()
+ enc = match.group(1).strip()
+ if not isinstance(enc, text_type):
+ enc = enc.decode('utf-8')
+ if charset_exists(enc):
+ return enc
+ f.close()
+ return default_encoding
+# }}}
+# function escape() {{{
+
+
+def escape(st):
+ """
+ Escapes the characters ``\\\\``, ``\\t``, ``\\n``, ``\\r`` and ``"`` in
+ the given string ``st`` and returns it.
+ """
+ return st.replace('\\', r'\\')\
+ .replace('\t', r'\t')\
+ .replace('\r', r'\r')\
+ .replace('\n', r'\n')\
+ .replace('\"', r'\"')
+# }}}
+# function unescape() {{{
+
+
+def unescape(st):
+ """
+ Unescapes the characters ``\\\\``, ``\\t``, ``\\n``, ``\\r`` and ``"`` in
+ the given string ``st`` and returns it.
+ """
+ def unescape_repl(m):
+ m = m.group(1)
+ if m == 'n':
+ return '\n'
+ if m == 't':
+ return '\t'
+ if m == 'r':
+ return '\r'
+ if m == '\\':
+ return '\\'
+ return m # handles escaped double quote
+ return re.sub(r'\\(\\|n|t|r|")', unescape_repl, st)
+# }}}
+# function natural_sort() {{{
+
+
+def natural_sort(lst):
+ """
+ Sort naturally the given list.
+ Credits: http://stackoverflow.com/a/4836734
+ """
+ convert = lambda text: int(text) if text.isdigit() else text.lower()
+ alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ]
+ return sorted(lst, key = alphanum_key)
+# }}}
+# class _BaseFile {{{
+
+
+class _BaseFile(list):
+ """
+ Common base class for the :class:`~polib.POFile` and :class:`~polib.MOFile`
+ classes. This class should **not** be instantiated directly.
+ """
+
+ def __init__(self, *args, **kwargs):
+ """
+ Constructor, accepts the following keyword arguments:
+
+ ``pofile``
+ string, the path to the po or mo file, or its content as a string.
+
+ ``wrapwidth``
+ integer, the wrap width, only useful when the ``-w`` option was
+ passed to xgettext (optional, default: ``78``).
+
+ ``encoding``
+ string, the encoding to use, defaults to ``default_encoding``
+ global variable (optional).
+
+ ``check_for_duplicates``
+ whether to check for duplicate entries when adding entries to the
+ file, (optional, default: ``False``).
+ """
+ list.__init__(self)
+ # the opened file handle
+ pofile = kwargs.get('pofile', None)
+ if pofile and _is_file(pofile):
+ self.fpath = pofile
+ else:
+ self.fpath = kwargs.get('fpath')
+ # the width at which lines should be wrapped
+ self.wrapwidth = kwargs.get('wrapwidth', 78)
+ # the file encoding
+ self.encoding = kwargs.get('encoding', default_encoding)
+ # whether to check for duplicate entries or not
+ self.check_for_duplicates = kwargs.get('check_for_duplicates', False)
+ # header
+ self.header = ''
+ # both po and mo files have metadata
+ self.metadata = {}
+ self.metadata_is_fuzzy = 0
+
+ def __unicode__(self):
+ """
+ Returns the unicode representation of the file.
+ """
+ ret = []
+ entries = [self.metadata_as_entry()] + \
+ [e for e in self if not e.obsolete]
+ for entry in entries:
+ ret.append(entry.__unicode__(self.wrapwidth))
+ for entry in self.obsolete_entries():
+ ret.append(entry.__unicode__(self.wrapwidth))
+ ret = u('\n').join(ret)
+
+ assert isinstance(ret, text_type)
+ #if type(ret) != text_type:
+ # return unicode(ret, self.encoding)
+ return ret
+
+ if PY3:
+ def __str__(self):
+ return self.__unicode__()
+ else:
+ def __str__(self):
+ """
+ Returns the string representation of the file.
+ """
+ return unicode(self).encode(self.encoding)
+
+ def __contains__(self, entry):
+ """
+ Overridden ``list`` method to implement the membership test (in and
+ not in).
+ The method considers that an entry is in the file if it finds an entry
+ that has the same msgid (the test is **case sensitive**) and the same
+ msgctxt (or none for both entries).
+
+ Argument:
+
+ ``entry``
+ an instance of :class:`~polib._BaseEntry`.
+ """
+ return self.find(entry.msgid, by='msgid', msgctxt=entry.msgctxt) \
+ is not None
+
+ def __eq__(self, other):
+ return str(self) == str(other)
+
+ def append(self, entry):
+ """
+ Overridden method to check for duplicates entries, if a user tries to
+ add an entry that is already in the file, the method will raise a
+ ``ValueError`` exception.
+
+ Argument:
+
+ ``entry``
+ an instance of :class:`~polib._BaseEntry`.
+ """
+ # check_for_duplicates may not be defined (yet) when unpickling.
+ # But if pickling, we never want to check for duplicates anyway.
+ if getattr(self, 'check_for_duplicates', False) and entry in self:
+ raise ValueError('Entry "%s" already exists' % entry.msgid)
+ super(_BaseFile, self).append(entry)
+
+ def insert(self, index, entry):
+ """
+ Overridden method to check for duplicates entries, if a user tries to
+ add an entry that is already in the file, the method will raise a
+ ``ValueError`` exception.
+
+ Arguments:
+
+ ``index``
+ index at which the entry should be inserted.
+
+ ``entry``
+ an instance of :class:`~polib._BaseEntry`.
+ """
+ if self.check_for_duplicates and entry in self:
+ raise ValueError('Entry "%s" already exists' % entry.msgid)
+ super(_BaseFile, self).insert(index, entry)
+
+ def metadata_as_entry(self):
+ """
+ Returns the file metadata as a :class:`~polib.POFile` instance.
+ """
+ e = POEntry(msgid='')
+ mdata = self.ordered_metadata()
+ if mdata:
+ strs = []
+ for name, value in mdata:
+ # Strip whitespace off each line in a multi-line entry
+ strs.append('%s: %s' % (name, value))
+ e.msgstr = '\n'.join(strs) + '\n'
+ if self.metadata_is_fuzzy:
+ e.flags.append('fuzzy')
+ return e
+
+ def save(self, fpath=None, repr_method='__unicode__'):
+ """
+ Saves the po file to ``fpath``.
+ If it is an existing file and no ``fpath`` is provided, then the
+ existing file is rewritten with the modified data.
+
+ Keyword arguments:
+
+ ``fpath``
+ string, full or relative path to the file.
+
+ ``repr_method``
+ string, the method to use for output.
+ """
+ if self.fpath is None and fpath is None:
+ raise IOError('You must provide a file path to save() method')
+ contents = getattr(self, repr_method)()
+ if fpath is None:
+ fpath = self.fpath
+ if repr_method == 'to_binary':
+ fhandle = open(fpath, 'wb')
+ else:
+ fhandle = io.open(fpath, 'w', encoding=self.encoding)
+ if not isinstance(contents, text_type):
+ contents = contents.decode(self.encoding)
+ fhandle.write(contents)
+ fhandle.close()
+ # set the file path if not set
+ if self.fpath is None and fpath:
+ self.fpath = fpath
+
+ def find(self, st, by='msgid', include_obsolete_entries=False,
+ msgctxt=False):
+ """
+ Find the entry which msgid (or property identified by the ``by``
+ argument) matches the string ``st``.
+
+ Keyword arguments:
+
+ ``st``
+ string, the string to search for.
+
+ ``by``
+ string, the property to use for comparison (default: ``msgid``).
+
+ ``include_obsolete_entries``
+ boolean, whether to also search in entries that are obsolete.
+
+ ``msgctxt``
+ string, allows specifying a specific message context for the
+ search.
+ """
+ if include_obsolete_entries:
+ entries = self[:]
+ else:
+ entries = [e for e in self if not e.obsolete]
+ for e in entries:
+ if getattr(e, by) == st:
+ if msgctxt is not False and e.msgctxt != msgctxt:
+ continue
+ return e
+ return None
+
+ def ordered_metadata(self):
+ """
+ Convenience method that returns an ordered version of the metadata
+ dictionary. The return value is list of tuples (metadata name,
+ metadata_value).
+ """
+ # copy the dict first
+ metadata = self.metadata.copy()
+ data_order = [
+ 'Project-Id-Version',
+ 'Report-Msgid-Bugs-To',
+ 'POT-Creation-Date',
+ 'PO-Revision-Date',
+ 'Last-Translator',
+ 'Language-Team',
+ 'Language',
+ 'MIME-Version',
+ 'Content-Type',
+ 'Content-Transfer-Encoding',
+ 'Plural-Forms'
+ ]
+ ordered_data = []
+ for data in data_order:
+ try:
+ value = metadata.pop(data)
+ ordered_data.append((data, value))
+ except KeyError:
+ pass
+ # the rest of the metadata will be alphabetically ordered since there
+ # are no specs for this AFAIK
+ for data in natural_sort(metadata.keys()):
+ value = metadata[data]
+ ordered_data.append((data, value))
+ return ordered_data
+
+ def to_binary(self):
+ """
+ Return the binary representation of the file.
+ """
+ offsets = []
+ entries = self.translated_entries()
+
+ # the keys are sorted in the .mo file
+ def cmp(_self, other):
+ # msgfmt compares entries with msgctxt if it exists
+ self_msgid = _self.msgctxt and _self.msgctxt or _self.msgid
+ other_msgid = other.msgctxt and other.msgctxt or other.msgid
+ if self_msgid > other_msgid:
+ return 1
+ elif self_msgid < other_msgid:
+ return -1
+ else:
+ return 0
+ # add metadata entry
+ entries.sort(key=lambda o: o.msgctxt or o.msgid)
+ mentry = self.metadata_as_entry()
+ #mentry.msgstr = mentry.msgstr.replace('\\n', '').lstrip()
+ entries = [mentry] + entries
+ entries_len = len(entries)
+ ids, strs = b(''), b('')
+ for e in entries:
+ # For each string, we need size and file offset. Each string is
+ # NUL terminated; the NUL does not count into the size.
+ msgid = b('')
+ if e.msgctxt:
+ # Contexts are stored by storing the concatenation of the
+ # context, a <EOT> byte, and the original string
+ msgid = self._encode(e.msgctxt + '\4')
+ if e.msgid_plural:
+ msgstr = []
+ for index in sorted(e.msgstr_plural.keys()):
+ msgstr.append(e.msgstr_plural[index])
+ msgid += self._encode(e.msgid + '\0' + e.msgid_plural)
+ msgstr = self._encode('\0'.join(msgstr))
+ else:
+ msgid += self._encode(e.msgid)
+ msgstr = self._encode(e.msgstr)
+ offsets.append((len(ids), len(msgid), len(strs), len(msgstr)))
+ ids += msgid + b('\0')
+ strs += msgstr + b('\0')
+
+ # The header is 7 32-bit unsigned integers.
+ keystart = 7 * 4 + 16 * entries_len
+ # and the values start after the keys
+ valuestart = keystart + len(ids)
+ koffsets = []
+ voffsets = []
+ # The string table first has the list of keys, then the list of values.
+ # Each entry has first the size of the string, then the file offset.
+ for o1, l1, o2, l2 in offsets:
+ koffsets += [l1, o1 + keystart]
+ voffsets += [l2, o2 + valuestart]
+ offsets = koffsets + voffsets
+
+ output = struct.pack(
+ "Iiiiiii",
+ # Magic number
+ MOFile.MAGIC,
+ # Version
+ 0,
+ # number of entries
+ entries_len,
+ # start of key index
+ 7 * 4,
+ # start of value index
+ 7 * 4 + entries_len * 8,
+ # size and offset of hash table, we don't use hash tables
+ 0, keystart
+
+ )
+ if PY3 and sys.version_info.minor > 1: # python 3.2 or superior
+ output += array.array("i", offsets).tobytes()
+ else:
+ output += array.array("i", offsets).tostring()
+ output += ids
+ output += strs
+ return output
+
+ def _encode(self, mixed):
+ """
+ Encodes the given ``mixed`` argument with the file encoding if and
+ only if it's an unicode string and returns the encoded string.
+ """
+ if isinstance(mixed, text_type):
+ mixed = mixed.encode(self.encoding)
+ return mixed
+# }}}
+# class POFile {{{
+
+
+class POFile(_BaseFile):
+ """
+ Po (or Pot) file reader/writer.
+ This class inherits the :class:`~polib._BaseFile` class and, by extension,
+ the python ``list`` type.
+ """
+
+ def __unicode__(self):
+ """
+ Returns the unicode representation of the po file.
+ """
+ ret, headers = '', self.header.split('\n')
+ for header in headers:
+ if not len(header):
+ ret += "#\n"
+ elif header[:1] in [',', ':']:
+ ret += '#%s\n' % header
+ else:
+ ret += '# %s\n' % header
+
+ if not isinstance(ret, text_type):
+ ret = ret.decode(self.encoding)
+
+ return ret + _BaseFile.__unicode__(self)
+
+ def save_as_mofile(self, fpath):
+ """
+ Saves the binary representation of the file to given ``fpath``.
+
+ Keyword argument:
+
+ ``fpath``
+ string, full or relative path to the mo file.
+ """
+ _BaseFile.save(self, fpath, 'to_binary')
+
+ def percent_translated(self):
+ """
+ Convenience method that returns the percentage of translated
+ messages.
+ """
+ total = len([e for e in self if not e.obsolete])
+ if total == 0:
+ return 100
+ translated = len(self.translated_entries())
+ return int(translated * 100 / float(total))
+
+ def translated_entries(self):
+ """
+ Convenience method that returns the list of translated entries.
+ """
+ return [e for e in self if e.translated()]
+
+ def untranslated_entries(self):
+ """
+ Convenience method that returns the list of untranslated entries.
+ """
+ return [e for e in self if not e.translated() and not e.obsolete
+ and not 'fuzzy' in e.flags]
+
+ def fuzzy_entries(self):
+ """
+ Convenience method that returns the list of fuzzy entries.
+ """
+ return [e for e in self if 'fuzzy' in e.flags]
+
+ def obsolete_entries(self):
+ """
+ Convenience method that returns the list of obsolete entries.
+ """
+ return [e for e in self if e.obsolete]
+
+ def merge(self, refpot):
+ """
+ Convenience method that merges the current pofile with the pot file
+ provided. It behaves exactly as the gettext msgmerge utility:
+
+ * comments of this file will be preserved, but extracted comments and
+ occurrences will be discarded;
+ * any translations or comments in the file will be discarded, however,
+ dot comments and file positions will be preserved;
+ * the fuzzy flags are preserved.
+
+ Keyword argument:
+
+ ``refpot``
+ object POFile, the reference catalog.
+ """
+ # Store entries in dict/set for faster access
+ self_entries = dict((entry.msgid, entry) for entry in self)
+ refpot_msgids = set(entry.msgid for entry in refpot)
+ # Merge entries that are in the refpot
+ for entry in refpot:
+ e = self_entries.get(entry.msgid)
+ if e is None:
+ e = POEntry()
+ self.append(e)
+ e.merge(entry)
+ # ok, now we must "obsolete" entries that are not in the refpot anymore
+ for entry in self:
+ if entry.msgid not in refpot_msgids:
+ entry.obsolete = True
+# }}}
+# class MOFile {{{
+
+
+class MOFile(_BaseFile):
+ """
+ Mo file reader/writer.
+ This class inherits the :class:`~polib._BaseFile` class and, by
+ extension, the python ``list`` type.
+ """
+ MAGIC = 0x950412de
+ MAGIC_SWAPPED = 0xde120495
+
+ def __init__(self, *args, **kwargs):
+ """
+ Constructor, accepts all keywords arguments accepted by
+ :class:`~polib._BaseFile` class.
+ """
+ _BaseFile.__init__(self, *args, **kwargs)
+ self.magic_number = None
+ self.version = 0
+
+ def save_as_pofile(self, fpath):
+ """
+ Saves the mofile as a pofile to ``fpath``.
+
+ Keyword argument:
+
+ ``fpath``
+ string, full or relative path to the file.
+ """
+ _BaseFile.save(self, fpath)
+
+ def save(self, fpath=None):
+ """
+ Saves the mofile to ``fpath``.
+
+ Keyword argument:
+
+ ``fpath``
+ string, full or relative path to the file.
+ """
+ _BaseFile.save(self, fpath, 'to_binary')
+
+ def percent_translated(self):
+ """
+ Convenience method to keep the same interface with POFile instances.
+ """
+ return 100
+
+ def translated_entries(self):
+ """
+ Convenience method to keep the same interface with POFile instances.
+ """
+ return self
+
+ def untranslated_entries(self):
+ """
+ Convenience method to keep the same interface with POFile instances.
+ """
+ return []
+
+ def fuzzy_entries(self):
+ """
+ Convenience method to keep the same interface with POFile instances.
+ """
+ return []
+
+ def obsolete_entries(self):
+ """
+ Convenience method to keep the same interface with POFile instances.
+ """
+ return []
+# }}}
+# class _BaseEntry {{{
+
+
+class _BaseEntry(object):
+ """
+ Base class for :class:`~polib.POEntry` and :class:`~polib.MOEntry` classes.
+ This class should **not** be instantiated directly.
+ """
+
+ def __init__(self, *args, **kwargs):
+ """
+ Constructor, accepts the following keyword arguments:
+
+ ``msgid``
+ string, the entry msgid.
+
+ ``msgstr``
+ string, the entry msgstr.
+
+ ``msgid_plural``
+ string, the entry msgid_plural.
+
+ ``msgstr_plural``
+ list, the entry msgstr_plural lines.
+
+ ``msgctxt``
+ string, the entry context (msgctxt).
+
+ ``obsolete``
+ bool, whether the entry is "obsolete" or not.
+
+ ``encoding``
+ string, the encoding to use, defaults to ``default_encoding``
+ global variable (optional).
+ """
+ self.msgid = kwargs.get('msgid', '')
+ self.msgstr = kwargs.get('msgstr', '')
+ self.msgid_plural = kwargs.get('msgid_plural', '')
+ self.msgstr_plural = kwargs.get('msgstr_plural', {})
+ self.msgctxt = kwargs.get('msgctxt', None)
+ self.obsolete = kwargs.get('obsolete', False)
+ self.encoding = kwargs.get('encoding', default_encoding)
+
+ def __unicode__(self, wrapwidth=78):
+ """
+ Returns the unicode representation of the entry.
+ """
+ if self.obsolete:
+ delflag = '#~ '
+ else:
+ delflag = ''
+ ret = []
+ # write the msgctxt if any
+ if self.msgctxt is not None:
+ ret += self._str_field("msgctxt", delflag, "", self.msgctxt,
+ wrapwidth)
+ # write the msgid
+ ret += self._str_field("msgid", delflag, "", self.msgid, wrapwidth)
+ # write the msgid_plural if any
+ if self.msgid_plural:
+ ret += self._str_field("msgid_plural", delflag, "",
+ self.msgid_plural, wrapwidth)
+ if self.msgstr_plural:
+ # write the msgstr_plural if any
+ msgstrs = self.msgstr_plural
+ keys = list(msgstrs)
+ keys.sort()
+ for index in keys:
+ msgstr = msgstrs[index]
+ plural_index = '[%s]' % index
+ ret += self._str_field("msgstr", delflag, plural_index, msgstr,
+ wrapwidth)
+ else:
+ # otherwise write the msgstr
+ ret += self._str_field("msgstr", delflag, "", self.msgstr,
+ wrapwidth)
+ ret.append('')
+ ret = u('\n').join(ret)
+ return ret
+
+ if PY3:
+ def __str__(self):
+ return self.__unicode__()
+ else:
+ def __str__(self):
+ """
+ Returns the string representation of the entry.
+ """
+ return unicode(self).encode(self.encoding)
+
+ def __eq__(self, other):
+ return str(self) == str(other)
+
+ def _str_field(self, fieldname, delflag, plural_index, field,
+ wrapwidth=78):
+ lines = field.splitlines(True)
+ if len(lines) > 1:
+ lines = [''] + lines # start with initial empty line
+ else:
+ escaped_field = escape(field)
+ specialchars_count = 0
+ for c in ['\\', '\n', '\r', '\t', '"']:
+ specialchars_count += field.count(c)
+ # comparison must take into account fieldname length + one space
+ # + 2 quotes (eg. msgid "<string>")
+ flength = len(fieldname) + 3
+ if plural_index:
+ flength += len(plural_index)
+ real_wrapwidth = wrapwidth - flength + specialchars_count
+ if wrapwidth > 0 and len(field) > real_wrapwidth:
+ # Wrap the line but take field name into account
+ lines = [''] + [unescape(item) for item in wrap(
+ escaped_field,
+ wrapwidth - 2, # 2 for quotes ""
+ drop_whitespace=False,
+ break_long_words=False
+ )]
+ else:
+ lines = [field]
+ if fieldname.startswith('previous_'):
+ # quick and dirty trick to get the real field name
+ fieldname = fieldname[9:]
+
+ ret = ['%s%s%s "%s"' % (delflag, fieldname, plural_index,
+ escape(lines.pop(0)))]
+ for line in lines:
+ ret.append('%s"%s"' % (delflag, escape(line)))
+ return ret
+# }}}
+# class POEntry {{{
+
+
+class POEntry(_BaseEntry):
+ """
+ Represents a po file entry.
+ """
+
+ def __init__(self, *args, **kwargs):
+ """
+ Constructor, accepts the following keyword arguments:
+
+ ``comment``
+ string, the entry comment.
+
+ ``tcomment``
+ string, the entry translator comment.
+
+ ``occurrences``
+ list, the entry occurrences.
+
+ ``flags``
+ list, the entry flags.
+
+ ``previous_msgctxt``
+ string, the entry previous context.
+
+ ``previous_msgid``
+ string, the entry previous msgid.
+
+ ``previous_msgid_plural``
+ string, the entry previous msgid_plural.
+
+ ``linenum``
+ integer, the line number of the entry
+ """
+ _BaseEntry.__init__(self, *args, **kwargs)
+ self.comment = kwargs.get('comment', '')
+ self.tcomment = kwargs.get('tcomment', '')
+ self.occurrences = kwargs.get('occurrences', [])
+ self.flags = kwargs.get('flags', [])
+ self.previous_msgctxt = kwargs.get('previous_msgctxt', None)
+ self.previous_msgid = kwargs.get('previous_msgid', None)
+ self.previous_msgid_plural = kwargs.get('previous_msgid_plural', None)
+ self.linenum = kwargs.get('linenum', None)
+
+ def __unicode__(self, wrapwidth=78):
+ """
+ Returns the unicode representation of the entry.
+ """
+ ret = []
+ # comments first, if any (with text wrapping as xgettext does)
+ if self.obsolete:
+ comments = [('tcomment', '# ')]
+ else:
+ comments = [('comment', '#. '), ('tcomment', '# ')]
+ for c in comments:
+ val = getattr(self, c[0])
+ if val:
+ for comment in val.split('\n'):
+ if wrapwidth > 0 and len(comment) + len(c[1]) > wrapwidth:
+ ret += wrap(
+ comment,
+ wrapwidth,
+ initial_indent=c[1],
+ subsequent_indent=c[1],
+ break_long_words=False
+ )
+ else:
+ ret.append('%s%s' % (c[1], comment))
+
+ # occurrences (with text wrapping as xgettext does)
+ if not self.obsolete and self.occurrences:
+ filelist = []
+ for fpath, lineno in self.occurrences:
+ if lineno:
+ filelist.append('%s:%s' % (fpath, lineno))
+ else:
+ filelist.append(fpath)
+ filestr = ' '.join(filelist)
+ if wrapwidth > 0 and len(filestr) + 3 > wrapwidth:
+ # textwrap split words that contain hyphen, this is not
+ # what we want for filenames, so the dirty hack is to
+ # temporally replace hyphens with a char that a file cannot
+ # contain, like "*"
+ ret += [l.replace('*', '-') for l in wrap(
+ filestr.replace('-', '*'),
+ wrapwidth,
+ initial_indent='#: ',
+ subsequent_indent='#: ',
+ break_long_words=False
+ )]
+ else:
+ ret.append('#: ' + filestr)
+
+ # flags (TODO: wrapping ?)
+ if self.flags:
+ ret.append('#, %s' % ', '.join(self.flags))
+
+ # previous context and previous msgid/msgid_plural
+ fields = ['previous_msgctxt', 'previous_msgid',
+ 'previous_msgid_plural']
+ if self.obsolete:
+ prefix = "#~| "
+ else:
+ prefix = "#| "
+ for f in fields:
+ val = getattr(self, f)
+ if val:
+ ret += self._str_field(f, prefix, "", val, wrapwidth)
+
+ ret.append(_BaseEntry.__unicode__(self, wrapwidth))
+ ret = u('\n').join(ret)
+ return ret
+
+ def __cmp__(self, other):
+ """
+ Called by comparison operations if rich comparison is not defined.
+ """
+
+ # First: Obsolete test
+ if self.obsolete != other.obsolete:
+ if self.obsolete:
+ return -1
+ else:
+ return 1
+ # Work on a copy to protect original
+ occ1 = sorted(self.occurrences[:])
+ occ2 = sorted(other.occurrences[:])
+ pos = 0
+ for entry1 in occ1:
+ try:
+ entry2 = occ2[pos]
+ except IndexError:
+ return 1
+ pos = pos + 1
+ if entry1[0] != entry2[0]:
+ if entry1[0] > entry2[0]:
+ return 1
+ else:
+ return -1
+ if entry1[1] != entry2[1]:
+ if entry1[1] > entry2[1]:
+ return 1
+ else:
+ return -1
+ # Compare msgid_plural if set
+ if self.msgid_plural:
+ if not other.msgid_plural:
+ return 1
+ for pos in self.msgid_plural:
+ if pos not in other.msgid_plural:
+ return 1
+ if self.msgid_plural[pos] > other.msgid_plural[pos]:
+ return 1
+ if self.msgid_plural[pos] < other.msgid_plural[pos]:
+ return -1
+ # Finally: Compare message ID
+ if self.msgid > other.msgid:
+ return 1
+ elif self.msgid < other.msgid:
+ return -1
+ return 0
+
+ def __gt__(self, other):
+ return self.__cmp__(other) > 0
+
+ def __lt__(self, other):
+ return self.__cmp__(other) < 0
+
+ def __ge__(self, other):
+ return self.__cmp__(other) >= 0
+
+ def __le__(self, other):
+ return self.__cmp__(other) <= 0
+
+ def __eq__(self, other):
+ return self.__cmp__(other) == 0
+
+ def __ne__(self, other):
+ return self.__cmp__(other) != 0
+
+ def translated(self):
+ """
+ Returns ``True`` if the entry has been translated or ``False``
+ otherwise.
+ """
+ if self.obsolete or 'fuzzy' in self.flags:
+ return False
+ if self.msgstr != '':
+ return True
+ if self.msgstr_plural:
+ for pos in self.msgstr_plural:
+ if self.msgstr_plural[pos] == '':
+ return False
+ return True
+ return False
+
+ def merge(self, other):
+ """
+ Merge the current entry with the given pot entry.
+ """
+ self.msgid = other.msgid
+ self.msgctxt = other.msgctxt
+ self.occurrences = other.occurrences
+ self.comment = other.comment
+ fuzzy = 'fuzzy' in self.flags
+ self.flags = other.flags[:] # clone flags
+ if fuzzy:
+ self.flags.append('fuzzy')
+ self.msgid_plural = other.msgid_plural
+ self.obsolete = other.obsolete
+ self.previous_msgctxt = other.previous_msgctxt
+ self.previous_msgid = other.previous_msgid
+ self.previous_msgid_plural = other.previous_msgid_plural
+ if other.msgstr_plural:
+ for pos in other.msgstr_plural:
+ try:
+ # keep existing translation at pos if any
+ self.msgstr_plural[pos]
+ except KeyError:
+ self.msgstr_plural[pos] = ''
+
+ def __hash__(self):
+ return hash((self.msgid, self.msgstr))
+# }}}
+# class MOEntry {{{
+
+
+class MOEntry(_BaseEntry):
+ """
+ Represents a mo file entry.
+ """
+ def __init__(self, *args, **kwargs):
+ """
+ Constructor, accepts the following keyword arguments,
+ for consistency with :class:`~polib.POEntry`:
+
+ ``comment``
+ ``tcomment``
+ ``occurrences``
+ ``flags``
+ ``previous_msgctxt``
+ ``previous_msgid``
+ ``previous_msgid_plural``
+
+ Note: even though these keyword arguments are accepted,
+ they hold no real meaning in the context of MO files
+ and are simply ignored.
+ """
+ _BaseEntry.__init__(self, *args, **kwargs)
+ self.comment = ''
+ self.tcomment = ''
+ self.occurrences = []
+ self.flags = []
+ self.previous_msgctxt = None
+ self.previous_msgid = None
+ self.previous_msgid_plural = None
+
+ def __hash__(self):
+ return hash((self.msgid, self.msgstr))
+
+# }}}
+# class _POFileParser {{{
+
+
+class _POFileParser(object):
+ """
+ A finite state machine to parse efficiently and correctly po
+ file format.
+ """
+
+ def __init__(self, pofile, *args, **kwargs):
+ """
+ Constructor.
+
+ Keyword arguments:
+
+ ``pofile``
+ string, path to the po file or its content
+
+ ``encoding``
+ string, the encoding to use, defaults to ``default_encoding``
+ global variable (optional).
+
+ ``check_for_duplicates``
+ whether to check for duplicate entries when adding entries to the
+ file (optional, default: ``False``).
+ """
+ enc = kwargs.get('encoding', default_encoding)
+ if _is_file(pofile):
+ try:
+ self.fhandle = io.open(pofile, 'rt', encoding=enc)
+ except LookupError:
+ enc = default_encoding
+ self.fhandle = io.open(pofile, 'rt', encoding=enc)
+ else:
+ self.fhandle = pofile.splitlines()
+
+ klass = kwargs.get('klass')
+ if klass is None:
+ klass = POFile
+ self.instance = klass(
+ pofile=pofile,
+ encoding=enc,
+ check_for_duplicates=kwargs.get('check_for_duplicates', False)
+ )
+ self.transitions = {}
+ self.current_line = 0
+ self.current_entry = POEntry(linenum=self.current_line)
+ self.current_state = 'st'
+ self.current_token = None
+ # two memo flags used in handlers
+ self.msgstr_index = 0
+ self.entry_obsolete = 0
+ # Configure the state machine, by adding transitions.
+ # Signification of symbols:
+ # * ST: Beginning of the file (start)
+ # * HE: Header
+ # * TC: a translation comment
+ # * GC: a generated comment
+ # * OC: a file/line occurrence
+ # * FL: a flags line
+ # * CT: a message context
+ # * PC: a previous msgctxt
+ # * PM: a previous msgid
+ # * PP: a previous msgid_plural
+ # * MI: a msgid
+ # * MP: a msgid plural
+ # * MS: a msgstr
+ # * MX: a msgstr plural
+ # * MC: a msgid or msgstr continuation line
+ all = ['st', 'he', 'gc', 'oc', 'fl', 'ct', 'pc', 'pm', 'pp', 'tc',
+ 'ms', 'mp', 'mx', 'mi']
+
+ self.add('tc', ['st', 'he'], 'he')
+ self.add('tc', ['gc', 'oc', 'fl', 'tc', 'pc', 'pm', 'pp', 'ms',
+ 'mp', 'mx', 'mi'], 'tc')
+ self.add('gc', all, 'gc')
+ self.add('oc', all, 'oc')
+ self.add('fl', all, 'fl')
+ self.add('pc', all, 'pc')
+ self.add('pm', all, 'pm')
+ self.add('pp', all, 'pp')
+ self.add('ct', ['st', 'he', 'gc', 'oc', 'fl', 'tc', 'pc', 'pm',
+ 'pp', 'ms', 'mx'], 'ct')
+ self.add('mi', ['st', 'he', 'gc', 'oc', 'fl', 'ct', 'tc', 'pc',
+ 'pm', 'pp', 'ms', 'mx'], 'mi')
+ self.add('mp', ['tc', 'gc', 'pc', 'pm', 'pp', 'mi'], 'mp')
+ self.add('ms', ['mi', 'mp', 'tc'], 'ms')
+ self.add('mx', ['mi', 'mx', 'mp', 'tc'], 'mx')
+ self.add('mc', ['ct', 'mi', 'mp', 'ms', 'mx', 'pm', 'pp', 'pc'], 'mc')
+
+ def parse(self):
+ """
+ Run the state machine, parse the file line by line and call process()
+ with the current matched symbol.
+ """
+
+ keywords = {
+ 'msgctxt': 'ct',
+ 'msgid': 'mi',
+ 'msgstr': 'ms',
+ 'msgid_plural': 'mp',
+ }
+ prev_keywords = {
+ 'msgid_plural': 'pp',
+ 'msgid': 'pm',
+ 'msgctxt': 'pc',
+ }
+ tokens = []
+ for line in self.fhandle:
+ self.current_line += 1
+ line = line.strip()
+ if line == '':
+ continue
+
+ tokens = line.split(None, 2)
+ nb_tokens = len(tokens)
+
+ if tokens[0] == '#~|':
+ continue
+
+ if tokens[0] == '#~' and nb_tokens > 1:
+ line = line[3:].strip()
+ tokens = tokens[1:]
+ nb_tokens -= 1
+ self.entry_obsolete = 1
+ else:
+ self.entry_obsolete = 0
+
+ # Take care of keywords like
+ # msgid, msgid_plural, msgctxt & msgstr.
+ if tokens[0] in keywords and nb_tokens > 1:
+ line = line[len(tokens[0]):].lstrip()
+ if re.search(r'([^\\]|^)"', line[1:-1]):
+ raise IOError('Syntax error in po file %s (line %s): '
+ 'unescaped double quote found' %
+ (self.instance.fpath, self.current_line))
+ self.current_token = line
+ self.process(keywords[tokens[0]])
+ continue
+
+ self.current_token = line
+
+ if tokens[0] == '#:':
+ if nb_tokens <= 1:
+ continue
+ # we are on a occurrences line
+ self.process('oc')
+
+ elif line[:1] == '"':
+ # we are on a continuation line
+ if re.search(r'([^\\]|^)"', line[1:-1]):
+ raise IOError('Syntax error in po file %s (line %s): '
+ 'unescaped double quote found' %
+ (self.instance.fpath, self.current_line))
+ self.process('mc')
+
+ elif line[:7] == 'msgstr[':
+ # we are on a msgstr plural
+ self.process('mx')
+
+ elif tokens[0] == '#,':
+ if nb_tokens <= 1:
+ continue
+ # we are on a flags line
+ self.process('fl')
+
+ elif tokens[0] == '#' or tokens[0].startswith('##'):
+ if line == '#':
+ line += ' '
+ # we are on a translator comment line
+ self.process('tc')
+
+ elif tokens[0] == '#.':
+ if nb_tokens <= 1:
+ continue
+ # we are on a generated comment line
+ self.process('gc')
+
+ elif tokens[0] == '#|':
+ if nb_tokens <= 1:
+ raise IOError('Syntax error in po file %s (line %s)' %
+ (self.instance.fpath, self.current_line))
+
+ # Remove the marker and any whitespace right after that.
+ line = line[2:].lstrip()
+ self.current_token = line
+
+ if tokens[1].startswith('"'):
+ # Continuation of previous metadata.
+ self.process('mc')
+ continue
+
+ if nb_tokens == 2:
+ # Invalid continuation line.
+ raise IOError('Syntax error in po file %s (line %s): '
+ 'invalid continuation line' %
+ (self.instance.fpath, self.current_line))
+
+ # we are on a "previous translation" comment line,
+ if tokens[1] not in prev_keywords:
+ # Unknown keyword in previous translation comment.
+ raise IOError('Syntax error in po file %s (line %s): '
+ 'unknown keyword %s' %
+ (self.instance.fpath, self.current_line,
+ tokens[1]))
+
+ # Remove the keyword and any whitespace
+ # between it and the starting quote.
+ line = line[len(tokens[1]):].lstrip()
+ self.current_token = line
+ self.process(prev_keywords[tokens[1]])
+
+ else:
+ raise IOError('Syntax error in po file %s (line %s)' %
+ (self.instance.fpath, self.current_line))
+
+ if self.current_entry and len(tokens) > 0 and \
+ not tokens[0].startswith('#'):
+ # since entries are added when another entry is found, we must add
+ # the last entry here (only if there are lines). Trailing comments
+ # are ignored
+ self.instance.append(self.current_entry)
+
+ # before returning the instance, check if there's metadata and if
+ # so extract it in a dict
+ metadataentry = self.instance.find('')
+ if metadataentry: # metadata found
+ # remove the entry
+ self.instance.remove(metadataentry)
+ self.instance.metadata_is_fuzzy = metadataentry.flags
+ key = None
+ for msg in metadataentry.msgstr.splitlines():
+ try:
+ key, val = msg.split(':', 1)
+ self.instance.metadata[key] = val.strip()
+ except (ValueError, KeyError):
+ if key is not None:
+ self.instance.metadata[key] += '\n' + msg.strip()
+ # close opened file
+ if not isinstance(self.fhandle, list): # must be file
+ self.fhandle.close()
+ return self.instance
+
+ def add(self, symbol, states, next_state):
+ """
+ Add a transition to the state machine.
+
+ Keywords arguments:
+
+ ``symbol``
+ string, the matched token (two chars symbol).
+
+ ``states``
+ list, a list of states (two chars symbols).
+
+ ``next_state``
+ the next state the fsm will have after the action.
+ """
+ for state in states:
+ action = getattr(self, 'handle_%s' % next_state)
+ self.transitions[(symbol, state)] = (action, next_state)
+
+ def process(self, symbol):
+ """
+ Process the transition corresponding to the current state and the
+ symbol provided.
+
+ Keywords arguments:
+
+ ``symbol``
+ string, the matched token (two chars symbol).
+
+ ``linenum``
+ integer, the current line number of the parsed file.
+ """
+ try:
+ (action, state) = self.transitions[(symbol, self.current_state)]
+ if action():
+ self.current_state = state
+ except Exception:
+ raise IOError('Syntax error in po file (line %s)' %
+ self.current_line)
+
+ # state handlers
+
+ def handle_he(self):
+ """Handle a header comment."""
+ if self.instance.header != '':
+ self.instance.header += '\n'
+ self.instance.header += self.current_token[2:]
+ return 1
+
+ def handle_tc(self):
+ """Handle a translator comment."""
+ if self.current_state in ['mc', 'ms', 'mx']:
+ self.instance.append(self.current_entry)
+ self.current_entry = POEntry(linenum=self.current_line)
+ if self.current_entry.tcomment != '':
+ self.current_entry.tcomment += '\n'
+ tcomment = self.current_token.lstrip('#')
+ if tcomment.startswith(' '):
+ tcomment = tcomment[1:]
+ self.current_entry.tcomment += tcomment
+ return True
+
+ def handle_gc(self):
+ """Handle a generated comment."""
+ if self.current_state in ['mc', 'ms', 'mx']:
+ self.instance.append(self.current_entry)
+ self.current_entry = POEntry(linenum=self.current_line)
+ if self.current_entry.comment != '':
+ self.current_entry.comment += '\n'
+ self.current_entry.comment += self.current_token[3:]
+ return True
+
+ def handle_oc(self):
+ """Handle a file:num occurrence."""
+ if self.current_state in ['mc', 'ms', 'mx']:
+ self.instance.append(self.current_entry)
+ self.current_entry = POEntry(linenum=self.current_line)
+ occurrences = self.current_token[3:].split()
+ for occurrence in occurrences:
+ if occurrence != '':
+ try:
+ fil, line = occurrence.rsplit(':', 1)
+ if not line.isdigit():
+ fil = fil + line
+ line = ''
+ self.current_entry.occurrences.append((fil, line))
+ except (ValueError, AttributeError):
+ self.current_entry.occurrences.append((occurrence, ''))
+ return True
+
+ def handle_fl(self):
+ """Handle a flags line."""
+ if self.current_state in ['mc', 'ms', 'mx']:
+ self.instance.append(self.current_entry)
+ self.current_entry = POEntry(linenum=self.current_line)
+ self.current_entry.flags += [c.strip() for c in
+ self.current_token[3:].split(',')]
+ return True
+
+ def handle_pp(self):
+ """Handle a previous msgid_plural line."""
+ if self.current_state in ['mc', 'ms', 'mx']:
+ self.instance.append(self.current_entry)
+ self.current_entry = POEntry(linenum=self.current_line)
+ self.current_entry.previous_msgid_plural = \
+ unescape(self.current_token[1:-1])
+ return True
+
+ def handle_pm(self):
+ """Handle a previous msgid line."""
+ if self.current_state in ['mc', 'ms', 'mx']:
+ self.instance.append(self.current_entry)
+ self.current_entry = POEntry(linenum=self.current_line)
+ self.current_entry.previous_msgid = \
+ unescape(self.current_token[1:-1])
+ return True
+
+ def handle_pc(self):
+ """Handle a previous msgctxt line."""
+ if self.current_state in ['mc', 'ms', 'mx']:
+ self.instance.append(self.current_entry)
+ self.current_entry = POEntry(linenum=self.current_line)
+ self.current_entry.previous_msgctxt = \
+ unescape(self.current_token[1:-1])
+ return True
+
+ def handle_ct(self):
+ """Handle a msgctxt."""
+ if self.current_state in ['mc', 'ms', 'mx']:
+ self.instance.append(self.current_entry)
+ self.current_entry = POEntry(linenum=self.current_line)
+ self.current_entry.msgctxt = unescape(self.current_token[1:-1])
+ return True
+
+ def handle_mi(self):
+ """Handle a msgid."""
+ if self.current_state in ['mc', 'ms', 'mx']:
+ self.instance.append(self.current_entry)
+ self.current_entry = POEntry(linenum=self.current_line)
+ self.current_entry.obsolete = self.entry_obsolete
+ self.current_entry.msgid = unescape(self.current_token[1:-1])
+ return True
+
+ def handle_mp(self):
+ """Handle a msgid plural."""
+ self.current_entry.msgid_plural = unescape(self.current_token[1:-1])
+ return True
+
+ def handle_ms(self):
+ """Handle a msgstr."""
+ self.current_entry.msgstr = unescape(self.current_token[1:-1])
+ return True
+
+ def handle_mx(self):
+ """Handle a msgstr plural."""
+ index = self.current_token[7]
+ value = self.current_token[self.current_token.find('"') + 1:-1]
+ self.current_entry.msgstr_plural[int(index)] = unescape(value)
+ self.msgstr_index = int(index)
+ return True
+
+ def handle_mc(self):
+ """Handle a msgid or msgstr continuation line."""
+ token = unescape(self.current_token[1:-1])
+ if self.current_state == 'ct':
+ self.current_entry.msgctxt += token
+ elif self.current_state == 'mi':
+ self.current_entry.msgid += token
+ elif self.current_state == 'mp':
+ self.current_entry.msgid_plural += token
+ elif self.current_state == 'ms':
+ self.current_entry.msgstr += token
+ elif self.current_state == 'mx':
+ self.current_entry.msgstr_plural[self.msgstr_index] += token
+ elif self.current_state == 'pp':
+ self.current_entry.previous_msgid_plural += token
+ elif self.current_state == 'pm':
+ self.current_entry.previous_msgid += token
+ elif self.current_state == 'pc':
+ self.current_entry.previous_msgctxt += token
+ # don't change the current state
+ return False
+# }}}
+# class _MOFileParser {{{
+
+
+class _MOFileParser(object):
+ """
+ A class to parse binary mo files.
+ """
+
+ def __init__(self, mofile, *args, **kwargs):
+ """
+ Constructor.
+
+ Keyword arguments:
+
+ ``mofile``
+ string, path to the mo file or its content
+
+ ``encoding``
+ string, the encoding to use, defaults to ``default_encoding``
+ global variable (optional).
+
+ ``check_for_duplicates``
+ whether to check for duplicate entries when adding entries to the
+ file (optional, default: ``False``).
+ """
+ self.fhandle = open(mofile, 'rb')
+
+ klass = kwargs.get('klass')
+ if klass is None:
+ klass = MOFile
+ self.instance = klass(
+ fpath=mofile,
+ encoding=kwargs.get('encoding', default_encoding),
+ check_for_duplicates=kwargs.get('check_for_duplicates', False)
+ )
+
+ def __del__(self):
+ """
+ Make sure the file is closed, this prevents warnings on unclosed file
+ when running tests with python >= 3.2.
+ """
+ if self.fhandle:
+ self.fhandle.close()
+
+ def parse(self):
+ """
+ Build the instance with the file handle provided in the
+ constructor.
+ """
+ # parse magic number
+ magic_number = self._readbinary('<I', 4)
+ if magic_number == MOFile.MAGIC:
+ ii = '<II'
+ elif magic_number == MOFile.MAGIC_SWAPPED:
+ ii = '>II'
+ else:
+ raise IOError('Invalid mo file, magic number is incorrect !')
+ self.instance.magic_number = magic_number
+ # parse the version number and the number of strings
+ version, numofstrings = self._readbinary(ii, 8)
+ # from MO file format specs: "A program seeing an unexpected major
+ # revision number should stop reading the MO file entirely"
+ if version not in (0, 1):
+ raise IOError('Invalid mo file, unexpected major revision number')
+ self.instance.version = version
+ # original strings and translation strings hash table offset
+ msgids_hash_offset, msgstrs_hash_offset = self._readbinary(ii, 8)
+ # move to msgid hash table and read length and offset of msgids
+ self.fhandle.seek(msgids_hash_offset)
+ msgids_index = []
+ for i in range(numofstrings):
+ msgids_index.append(self._readbinary(ii, 8))
+ # move to msgstr hash table and read length and offset of msgstrs
+ self.fhandle.seek(msgstrs_hash_offset)
+ msgstrs_index = []
+ for i in range(numofstrings):
+ msgstrs_index.append(self._readbinary(ii, 8))
+ # build entries
+ encoding = self.instance.encoding
+ for i in range(numofstrings):
+ self.fhandle.seek(msgids_index[i][1])
+ msgid = self.fhandle.read(msgids_index[i][0])
+
+ self.fhandle.seek(msgstrs_index[i][1])
+ msgstr = self.fhandle.read(msgstrs_index[i][0])
+ if i == 0 and not msgid: # metadata
+ raw_metadata, metadata = msgstr.split(b('\n')), {}
+ for line in raw_metadata:
+ tokens = line.split(b(':'), 1)
+ if tokens[0] != b(''):
+ try:
+ k = tokens[0].decode(encoding)
+ v = tokens[1].decode(encoding)
+ metadata[k] = v.strip()
+ except IndexError:
+ metadata[k] = u('')
+ self.instance.metadata = metadata
+ continue
+ # test if we have a plural entry
+ msgid_tokens = msgid.split(b('\0'))
+ if len(msgid_tokens) > 1:
+ entry = self._build_entry(
+ msgid=msgid_tokens[0],
+ msgid_plural=msgid_tokens[1],
+ msgstr_plural=dict((k, v) for k, v in
+ enumerate(msgstr.split(b('\0'))))
+ )
+ else:
+ entry = self._build_entry(msgid=msgid, msgstr=msgstr)
+ self.instance.append(entry)
+ # close opened file
+ self.fhandle.close()
+ return self.instance
+
+ def _build_entry(self, msgid, msgstr=None, msgid_plural=None,
+ msgstr_plural=None):
+ msgctxt_msgid = msgid.split(b('\x04'))
+ encoding = self.instance.encoding
+ if len(msgctxt_msgid) > 1:
+ kwargs = {
+ 'msgctxt': msgctxt_msgid[0].decode(encoding),
+ 'msgid': msgctxt_msgid[1].decode(encoding),
+ }
+ else:
+ kwargs = {'msgid': msgid.decode(encoding)}
+ if msgstr:
+ kwargs['msgstr'] = msgstr.decode(encoding)
+ if msgid_plural:
+ kwargs['msgid_plural'] = msgid_plural.decode(encoding)
+ if msgstr_plural:
+ for k in msgstr_plural:
+ msgstr_plural[k] = msgstr_plural[k].decode(encoding)
+ kwargs['msgstr_plural'] = msgstr_plural
+ return MOEntry(**kwargs)
+
+ def _readbinary(self, fmt, numbytes):
+ """
+ Private method that unpack n bytes of data using format <fmt>.
+ It returns a tuple or a mixed value if the tuple length is 1.
+ """
+ bytes = self.fhandle.read(numbytes)
+ tup = struct.unpack(fmt, bytes)
+ if len(tup) == 1:
+ return tup[0]
+ return tup
+# }}}
+# class TextWrapper {{{
+
+
+class TextWrapper(textwrap.TextWrapper):
+ """
+ Subclass of textwrap.TextWrapper that backport the
+ drop_whitespace option.
+ """
+ def __init__(self, *args, **kwargs):
+ drop_whitespace = kwargs.pop('drop_whitespace', True)
+ textwrap.TextWrapper.__init__(self, *args, **kwargs)
+ self.drop_whitespace = drop_whitespace
+
+ def _wrap_chunks(self, chunks):
+ """_wrap_chunks(chunks : [string]) -> [string]
+
+ Wrap a sequence of text chunks and return a list of lines of
+ length 'self.width' or less. (If 'break_long_words' is false,
+ some lines may be longer than this.) Chunks correspond roughly
+ to words and the whitespace between them: each chunk is
+ indivisible (modulo 'break_long_words'), but a line break can
+ come between any two chunks. Chunks should not have internal
+ whitespace; ie. a chunk is either all whitespace or a "word".
+ Whitespace chunks will be removed from the beginning and end of
+ lines, but apart from that whitespace is preserved.
+ """
+ lines = []
+ if self.width <= 0:
+ raise ValueError("invalid width %r (must be > 0)" % self.width)
+
+ # Arrange in reverse order so items can be efficiently popped
+ # from a stack of chucks.
+ chunks.reverse()
+
+ while chunks:
+
+ # Start the list of chunks that will make up the current line.
+ # cur_len is just the length of all the chunks in cur_line.
+ cur_line = []
+ cur_len = 0
+
+ # Figure out which static string will prefix this line.
+ if lines:
+ indent = self.subsequent_indent
+ else:
+ indent = self.initial_indent
+
+ # Maximum width for this line.
+ width = self.width - len(indent)
+
+ # First chunk on line is whitespace -- drop it, unless this
+ # is the very beginning of the text (ie. no lines started yet).
+ if self.drop_whitespace and chunks[-1].strip() == '' and lines:
+ del chunks[-1]
+
+ while chunks:
+ l = len(chunks[-1])
+
+ # Can at least squeeze this chunk onto the current line.
+ if cur_len + l <= width:
+ cur_line.append(chunks.pop())
+ cur_len += l
+
+ # Nope, this line is full.
+ else:
+ break
+
+ # The current line is full, and the next chunk is too big to
+ # fit on *any* line (not just this one).
+ if chunks and len(chunks[-1]) > width:
+ self._handle_long_word(chunks, cur_line, cur_len, width)
+
+ # If the last chunk on this line is all whitespace, drop it.
+ if self.drop_whitespace and cur_line and not cur_line[-1].strip():
+ del cur_line[-1]
+
+ # Convert current line back to a string and store it in list
+ # of all lines (return value).
+ if cur_line:
+ lines.append(indent + ''.join(cur_line))
+
+ return lines
+# }}}
+# function wrap() {{{
+
+
+def wrap(text, width=70, **kwargs):
+ """
+ Wrap a single paragraph of text, returning a list of wrapped lines.
+ """
+ if sys.version_info < (2, 6):
+ return TextWrapper(width=width, **kwargs).wrap(text)
+ return textwrap.wrap(text, width=width, **kwargs)
+
+# }}}
diff --git a/packaging/wix/files.py b/packaging/wix/files.py
index 7034021ac..9bf5f393e 100644
--- a/packaging/wix/files.py
+++ b/packaging/wix/files.py
@@ -1,13 +1,22 @@
#!/usr/bin/python
from __future__ import print_function
+from __future__ import unicode_literals # make all literals unicode strings by default (even in Python 2)
import os
import re
import uuid
+from io import open # needed for support of encoding parameter in Python 2
from helpers import get_inkscape_dist_dir, get_inkscape_locales_and_names
+# basestring is not available in Python 3
+try:
+ basestring
+except NameError:
+ basestring = (str,bytes)
+
+
directory_ids = {}
file_ids = {}
@@ -88,7 +97,7 @@ inkscape_dist_dir = get_inkscape_dist_dir()
# get locales currently supported by Inkscape (dict of the form {'de': 'German (de)'})
locales = get_inkscape_locales_and_names()
-with open('files.wxs', 'w') as wxs:
+with open('files.wxs', 'w', encoding='utf-8') as wxs:
wxs.write("<!-- do not edit, this file is created by files.py tool any changes will be lost -->\n")
wxs.write("<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>\n")
wxs.write(indent(1) + "<?include version.wxi?>\n")
@@ -125,8 +134,9 @@ with open('files.wxs', 'w') as wxs:
# create a FeatureGroup for translations
wxs.write(indent(2) + "<FeatureGroup Id='Translations'>\n")
- for lang_code in sorted(locales):
- wxs.write(indent(3) + "<Feature Id='Translation_" + valid_id(lang_code) + "' Level='1' Title='" + locales[lang_code] + "' AllowAdvertise='no'>\n")
+ sorted_locales = sorted( ((v,k) for k,v in locales.items()) ) # sort by language name (instead of language code)
+ for lang_name, lang_code in sorted_locales:
+ wxs.write(indent(3) + "<Feature Id='Translation_" + valid_id(lang_code) + "' Level='1' Title='" + lang_name + "' AllowAdvertise='no'>\n")
wxs.write(indent(4) + "<ComponentGroupRef Id='Translation_" + valid_id(lang_code) + "' />\n")
wxs.write(indent(3) + "</Feature>\n")
wxs.write(indent(2) + "</FeatureGroup>\n")
diff --git a/packaging/wix/helpers.py b/packaging/wix/helpers.py
index 7bd706398..4e8ef4547 100644
--- a/packaging/wix/helpers.py
+++ b/packaging/wix/helpers.py
@@ -1,10 +1,12 @@
#!/usr/bin/python
from __future__ import print_function
+from __future__ import unicode_literals # make all literals unicode strings by default (even in Python 2)
import os
import re
import sys
+from io import open # needed for support of encoding parameter in Python 2
# check where to look for the Inkscape files to bundle
@@ -35,13 +37,15 @@ def get_inkscape_locales():
# get the list of available Inkscape UI translations (by parsing inkscape-preferences.cpp)
+# (note that this is also used in /packaging/win32/languages/_language_lists.py, don't break it!)
def get_inkscape_locales_and_names():
re_languages = re.compile(r'Glib::ustring languages\[\] = \{(.+?)\};', re.DOTALL)
re_langValues = re.compile(r'Glib::ustring langValues\[\] = \{(.+?)\};', re.DOTALL)
re_quotes = re.compile(r'"(.*?)"')
# get the raw array contents from inkscape-preferences.cpp
- with open('..\\..\\src\\ui\\dialog\\inkscape-preferences.cpp', 'r') as f:
+ filepath = os.path.join(os.path.dirname(__file__), '../../src/ui/dialog/inkscape-preferences.cpp')
+ with open(filepath, 'r', encoding='utf-8') as f:
languages = re.search(re_languages, f.read())
f.seek(0)
langValues = re.search(re_langValues, f.read())