summaryrefslogtreecommitdiffstats
path: root/packaging/win32/languages/_language_lists.py
blob: 9ca0234b6e3cede319eea78382ec76234f27da57 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# 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')