ya2 · news · projects · code · about

housekeeping (L10nCommand)
authorFlavio Calva <f.calva@gmail.com>
Wed, 21 Sep 2022 18:20:38 +0000 (19:20 +0100)
committerFlavio Calva <f.calva@gmail.com>
Wed, 21 Sep 2022 18:20:38 +0000 (19:20 +0100)
setup.py
tests/ya2/build/test_lang.py
ya2/build/lang.py

index 580e78d9bd2fb520748cd99ee5a57065bf265404..5192051b993bd7a9f9a15db19c2fcd3aa6d377d9 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -33,6 +33,7 @@ class SetupDevelopmentCommand(develop):
         develop.run(self)
         Popen([executable, __file__, 'lang']).communicate()
         Popen([executable, __file__, 'models']).communicate()
+        Popen([executable, __file__, 'images']).communicate()
 
 
 class BaseCommand(Command):
@@ -74,14 +75,13 @@ class L10nCommand(BaseCommand):
     l10n_path = 'assets/locale/'
 
     def run(self):
-        LanguageBuilder.build_pot(app_name, 'assets/locale/po/')
-        list(map(self.__process_language, ['it_IT']))
-
-    def __process_language(self, lang_code):
-        LanguageBuilder.merge(lang_code, 'assets/locale/po/', self.l10n_path, app_name)
-        mo_template = '%s%s/LC_MESSAGES/%s.mo'
-        mo_name = mo_template % (self.l10n_path, lang_code, app_name)
-        LanguageBuilder.build_mo(mo_name, self.l10n_path, app_name)
+        self.__language_builder = LanguageBuilder(app_name, 'assets/locale/po/', 'assets/locale/')
+        self.__language_builder.build_pot()
+        for l in ['it_IT']: self.__process_language(l)
+
+    def __process_language(self, language_code):
+        self.__language_builder.merge(language_code)
+        self.__language_builder.build_mo(language_code)
 
 
 class BDistAppsCommand(bdist_apps):
index 1416e015a193d1fcfbf7871ab9528451c783fd3e..ec6d5fb8698d6e3b4e266bcba4491afcf3219a83 100644 (file)
@@ -22,9 +22,9 @@ class LangTests(TestCase):
             rmtree('./tests/' + dirname, ignore_errors=True)
 
     def test_lang(self):
-        LanguageBuilder.build_pot('test_pmachines', './tests/po/')
+        l = LanguageBuilder('test_pmachines', './tests/po/', './tests/locale/')
+        l.build_pot()
         self.assertTrue(exists('./tests/po/test_pmachines.pot'))
-        LanguageBuilder.merge('it_IT', './tests/po/', './tests/locale/', 'test_pmachines')
-        LanguageBuilder.build_mo('./tests/locale/it_IT/LC_MESSAGES/test_pmachines.mo',
-                           './tests/locale/', 'test_pmachines')
+        l.merge('it_IT')
+        l.build_mo('it_IT')
         self.assertTrue(exists('./tests/locale/it_IT/LC_MESSAGES/test_pmachines.mo'))
index ae95b535faa1b91e19bc540438928a34242b73ec..bac7271064944364f5c5b20739010a77b20c3387 100644 (file)
@@ -8,66 +8,66 @@ from ya2.build.build import find_file_names, FindFileNamesInfo
 class LanguageBuilder:
     '''Tools for building files for l10n.'''
 
-    @staticmethod
-    def build_mo(tgt, lng_dir_code, appname):
+    def __init__(self, app_name, po_path, mo_path):
+        self.__app_name = app_name
+        self.__po_path = po_path
+        self.__mo_path = mo_path
+
+    def build_mo(self, language_code):
         '''Builds the mo file in the lng_dir_code directory.'''
-        lng_code = tgt[len(lng_dir_code):].split('/')[0]
-        lng_dir = lng_dir_code + lng_code + '/LC_MESSAGES/'
+        mo_template = '%s%s/LC_MESSAGES/%s.mo'
+        mo_name = mo_template % (self.__mo_path, language_code, self.__app_name)
+        lng_code = mo_name[len(self.__mo_path):].split('/')[0]
+        lng_dir = self.__mo_path + lng_code + '/LC_MESSAGES/'
         cmd = 'msgfmt -o {lng_dir}{appname}.mo assets/locale/po/{lng_code}.po'
-        system(cmd.format(lng_dir=lng_dir, appname=appname, lng_code=lng_code))
+        system(cmd.format(lng_dir=lng_dir, appname=self.__app_name, lng_code=lng_code))
 
-    @staticmethod
-    def build_pot(appname, pot_path):
+    def build_pot(self):
         '''Builds the pot file in the lng_dir_code directory.'''
         find_info = FindFileNamesInfo(['py'])
         src_files = ' '.join(find_file_names(find_info))
         cmd_tmpl = 'xgettext -ci18n -d {appname} -L python ' + \
             '-o {pot_path}{appname}.pot '
-        system(cmd_tmpl.format(appname=appname, pot_path=pot_path) + src_files)
+        system(cmd_tmpl.format(appname=self.__app_name, pot_path=self.__po_path) + src_files)
 
-    @staticmethod
-    def merge(lng_code, tgt_path, lng_dir, appname):
+    def merge(self, lng_code):
         '''Merges the new strings with the previous ones.'''
-        lng_base_dir = LanguageBuilder.__prepare(lng_dir, lng_code, appname)
-        LanguageBuilder.__merge(lng_base_dir, lng_code, appname, tgt_path)
-        LanguageBuilder.__postprocess(lng_code)
+        lng_base_dir = self.__prepare(lng_code)
+        self.__merge(lng_base_dir, lng_code)
+        self.__postprocess(lng_code)
 
-    @staticmethod
-    def __prepare(lng_base_dir, lng, appname):
+    def __prepare(self, lng_code):
         '''Prepares a directory for working with languages.'''
-        makedirs(lng_base_dir + lng + '/LC_MESSAGES', exist_ok=True)
-        lng_dir = lng_base_dir + lng + '/LC_MESSAGES/'
-        if not exists('assets/locale/po/' + lng + '.po'):
+        makedirs(self.__mo_path + lng_code + '/LC_MESSAGES', exist_ok=True)
+        lng_dir = self.__mo_path + lng_code + '/LC_MESSAGES/'
+        if not exists('assets/locale/po/' + lng_code + '.po'):
             lines_to_fix = ['CHARSET/UTF-8', 'ENCODING/8bit']
-            [LanguageBuilder.__fix_line(line, lng_dir, appname)
+            [self.__fix_line(line, lng_dir)
              for line in lines_to_fix]
-            copy(lng_dir + appname + '.pot', lng_dir + appname + '.po')
+            copy(lng_dir + self.__app_name + '.pot', lng_dir + self.__app_name + '.po')
         return lng_dir
 
-    @staticmethod
-    def __fix_line(line, lng_dir, appname):
+    def __fix_line(self, line, lng_dir):
         '''Fixes po files (misaligned entries).'''
         cmd_tmpl = "sed 's/{line}/' {lng_dir}{appname}.pot > " + \
             "{lng_dir}{appname}tmp.po"
-        system(cmd_tmpl.format(line=line, lng_dir=lng_dir, appname=appname))
-        move(lng_dir + appname + 'tmp.po', lng_dir + appname + '.pot')
+        system(cmd_tmpl.format(line=line, lng_dir=lng_dir, appname=self.__app_name))
+        move(lng_dir + self.__app_name + 'tmp.po', lng_dir + self.__app_name + '.pot')
 
-    @staticmethod
-    def __merge(lng_dir, lng_code, appname, tgt_path):
+    def __merge(self, lng_dir, lng_code):
         '''Manages the msgmerge's invokation.'''
         print('merge', lng_dir)
         cmd = 'msgmerge -o {lng_dir}{appname}merge.po ' + \
             '{tgt_path}{lng_code}.po {tgt_path}{appname}.pot'
-        cmd = cmd.format(lng_dir=lng_dir, lng_code=lng_code, appname=appname,
-                         tgt_path=tgt_path)
+        cmd = cmd.format(lng_dir=lng_dir, lng_code=lng_code, appname=self.__app_name,
+                         tgt_path=self.__po_path)
         system(cmd)
-        copy(lng_dir + appname + 'merge.po',
+        copy(lng_dir + self.__app_name + 'merge.po',
              'assets/locale/po/%s.po' % lng_code)
         poname_tmpl = '{lng_dir}{appname}merge.po'
-        remove(poname_tmpl.format(lng_dir=lng_dir, appname=appname))
+        remove(poname_tmpl.format(lng_dir=lng_dir, appname=self.__app_name))
 
-    @staticmethod
-    def __postprocess(lng_code):
+    def __postprocess(self, lng_code):
         '''Fixes po files at the end of the building process.'''
         lines = open('assets/locale/po/%s.po' % lng_code, 'r').readlines()
         with open('assets/locale/po/%s.po' % lng_code, 'w') as outf: