From 4e980d83ad322bd32720667b5006b01851806a85 Mon Sep 17 00:00:00 2001 From: Flavio Calva Date: Wed, 21 Sep 2022 19:20:38 +0100 Subject: [PATCH] housekeeping (L10nCommand) --- setup.py | 16 ++++----- tests/ya2/build/test_lang.py | 8 ++--- ya2/build/lang.py | 64 ++++++++++++++++++------------------ 3 files changed, 44 insertions(+), 44 deletions(-) diff --git a/setup.py b/setup.py index 580e78d..5192051 100644 --- 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): diff --git a/tests/ya2/build/test_lang.py b/tests/ya2/build/test_lang.py index 1416e01..ec6d5fb 100644 --- a/tests/ya2/build/test_lang.py +++ b/tests/ya2/build/test_lang.py @@ -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')) diff --git a/ya2/build/lang.py b/ya2/build/lang.py index ae95b53..bac7271 100644 --- a/ya2/build/lang.py +++ b/ya2/build/lang.py @@ -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: -- 2.30.2