From 07aea9d7b276ca888e29b16518e65bf2a7da841b Mon Sep 17 00:00:00 2001 From: Clemens Schwaighofer Date: Mon, 25 Apr 2022 10:15:11 +0900 Subject: [PATCH] Add local set to L10n class and use it in Smarty Extended The actual locale name of the folder where the mo file is located can be queried with getLocaleSet() This is used in smarty extended to set the smarty translation template for javascript strings --- 4dev/tests/CoreLibsLanguageL10nTest.php | 58 +++++++++++++++++----- www/lib/CoreLibs/Language/L10n.php | 17 ++++++- www/lib/CoreLibs/Template/SmartyExtend.php | 11 ++-- 3 files changed, 69 insertions(+), 17 deletions(-) diff --git a/4dev/tests/CoreLibsLanguageL10nTest.php b/4dev/tests/CoreLibsLanguageL10nTest.php index fa85cce3..e6d53085 100644 --- a/4dev/tests/CoreLibsLanguageL10nTest.php +++ b/4dev/tests/CoreLibsLanguageL10nTest.php @@ -109,10 +109,11 @@ final class CoreLibsLanguageL10nTest extends TestCase // 2: encoding // 3: path // 4: locale expected - // 5: domain exepcted - // 6: context (null for none) - // 7: test string in - // 8: test translated + // 5: locale set expected + // 6: domain exepcted + // 7: context (null for none) + // 8: test string in + // 9: test translated // new style load 'gettext load en' => [ 'en_US.UTF-8', @@ -120,6 +121,7 @@ final class CoreLibsLanguageL10nTest extends TestCase __DIR__ . 'includes/locale/', // 'en_US.UTF-8', + 'en_US', 'frontend', null, 'Original', @@ -131,6 +133,7 @@ final class CoreLibsLanguageL10nTest extends TestCase __DIR__ . 'includes/locale/', // 'en_US.UTF-8', + 'en_US', 'frontend', 'context', 'Original', @@ -142,6 +145,7 @@ final class CoreLibsLanguageL10nTest extends TestCase __DIR__ . 'includes/locale/', // 'ja_JP.UTF-8', + 'ja_JP', 'admin', null, 'Original', @@ -154,6 +158,7 @@ final class CoreLibsLanguageL10nTest extends TestCase 'frontend', // 'en_US.UTF-8', + 'en_US', 'frontend', 'context', 'Original', @@ -167,6 +172,7 @@ final class CoreLibsLanguageL10nTest extends TestCase // '', '', + '', null, 'Original', 'Original', @@ -185,6 +191,7 @@ final class CoreLibsLanguageL10nTest extends TestCase * @param string|null $domain * @param string|null $path * @param string $locale_expected + * @param string $locale_set_expected * @param string $domain_expected * @param ?string $context * @param string $original @@ -196,6 +203,7 @@ final class CoreLibsLanguageL10nTest extends TestCase ?string $domain, ?string $path, string $locale_expected, + string $locale_set_expected, string $domain_expected, ?string $context, string $original, @@ -217,6 +225,11 @@ final class CoreLibsLanguageL10nTest extends TestCase $l10n->getLocale(), 'Locale assert failed' ); + $this->assertEquals( + $locale_set_expected, + $l10n->getLocaleSet(), + 'Locale set assert failed' + ); $this->assertEquals( $domain_expected, $l10n->getDomain(), @@ -255,15 +268,17 @@ final class CoreLibsLanguageL10nTest extends TestCase // 3: load error // 4: input string to translated // 5: expected locale - // 6: expected domain - // 7: expected translation - // 8: change locale - // 9: change domain - // 10: change path - // 11: change load error - // 12: expected locale - // 13: expected domain - // 14: expected translation + // 6: expected locale set + // 7: expected domain + // 8: expected translation + // 9: change locale + // 10: change domain + // 11: change path + // 12: change load error + // 13: expected locale + // 14: expected locale set + // 15: expected domain + // 16: expected translation 'load and change (en->ja)' => [ // set 0-2 'en_US.UTF-8', @@ -275,6 +290,7 @@ final class CoreLibsLanguageL10nTest extends TestCase 'Original', // check setter 5-7 'en_US.UTF-8', + 'en_US', 'frontend', 'Translated frontend en_US', // set new 8-10 @@ -285,6 +301,7 @@ final class CoreLibsLanguageL10nTest extends TestCase false, // check new setter 12-14 'ja_JP.UTF-8', + 'ja_JP', 'frontend', 'Translated frontend ja_JP', ], @@ -300,6 +317,7 @@ final class CoreLibsLanguageL10nTest extends TestCase // check setter 5-7 '', '', + '', 'Original', // set new 8-10 'en_US.UTF-8', @@ -309,6 +327,7 @@ final class CoreLibsLanguageL10nTest extends TestCase false, // check new setter 12-14 'en_US.UTF-8', + 'en_US', 'frontend', 'Translated frontend en_US', ] @@ -329,12 +348,14 @@ final class CoreLibsLanguageL10nTest extends TestCase * @param bool $load_error * @param string $original * @param string $locale_expected_a + * @param string $locale_set_expected_a * @param string $domain_expected_a * @param string $translated_a * @param string|null $locale_new * @param string|null $domain_new * @param string|null $path_new * @param bool $load_error_new + * @param string $locale_set_expected_b * @param string $locale_expected_b * @param string $domain_expected_b * @param string $translated_b @@ -351,6 +372,7 @@ final class CoreLibsLanguageL10nTest extends TestCase string $original, // 5-7 string $locale_expected_a, + string $locale_set_expected_a, string $domain_expected_a, string $translated_a, // 8-10 @@ -361,6 +383,7 @@ final class CoreLibsLanguageL10nTest extends TestCase bool $load_error_new, // 12-14 string $locale_expected_b, + string $locale_set_expected_b, string $domain_expected_b, string $translated_b, ): void { @@ -384,6 +407,10 @@ final class CoreLibsLanguageL10nTest extends TestCase $locale_expected_a, $l10n->getLocale(), 'Locale init assert failed' + );$this->assertEquals( + $locale_set_expected_a, + $l10n->getLocaleSet(), + 'Locale Set init assert failed' ); $this->assertEquals( $domain_expected_a, @@ -435,6 +462,11 @@ final class CoreLibsLanguageL10nTest extends TestCase $l10n->getLocale(), 'Locale change assert failed' ); + $this->assertEquals( + $locale_set_expected_b, + $l10n->getLocaleSet(), + 'Locale Set change assert failed' + ); $this->assertEquals( $domain_expected_b, $l10n->getDomain(), diff --git a/www/lib/CoreLibs/Language/L10n.php b/www/lib/CoreLibs/Language/L10n.php index 7303f0fc..fca07ce2 100644 --- a/www/lib/CoreLibs/Language/L10n.php +++ b/www/lib/CoreLibs/Language/L10n.php @@ -34,6 +34,8 @@ class L10n { /** @var string the current locale */ private $locale = ''; + /** @var string the SET locale as WHERE the domain file is */ + private $locale_set = ''; /** @var string the default selected/active domain */ private $domain = ''; /** @var array> locale > domain = translator */ @@ -141,6 +143,7 @@ class L10n // store old settings $old_mofile = $this->mofile; $old_lang = $this->locale; + $old_lang_set = $this->locale_set; $old_domain = $this->domain; $old_base_locale_path = $this->base_locale_path; $old_base_content_path = $this->base_content_path; @@ -172,6 +175,7 @@ class L10n . $this->base_content_path . $domain . '.mo'; if (file_exists($this->mofile)) { + $this->locale_set = $_locale; break; } } @@ -202,6 +206,7 @@ class L10n // else fall back to the old ones $this->mofile = $old_mofile; $this->locale = $old_lang; + $this->locale_set = $old_lang_set; $this->domain = $old_domain; $this->base_locale_path = $old_base_locale_path; $this->base_content_path = $old_base_content_path; @@ -454,7 +459,7 @@ class L10n } /** - * get current set locale + * get current set locale (want locale) * * @return string */ @@ -463,6 +468,16 @@ class L10n return $this->locale; } + /** + * current set locale where mo file is located + * + * @return string + */ + public function getLocaleSet(): string + { + return $this->locale_set; + } + /** * get current set language * diff --git a/www/lib/CoreLibs/Template/SmartyExtend.php b/www/lib/CoreLibs/Template/SmartyExtend.php index 475290e1..5edee4df 100644 --- a/www/lib/CoreLibs/Template/SmartyExtend.php +++ b/www/lib/CoreLibs/Template/SmartyExtend.php @@ -32,6 +32,8 @@ class SmartyExtend extends \Smarty /** @var string */ public $lang; /** @var string */ + public $locale_set; + /** @var string */ public $lang_short; /** @var string */ public $domain; @@ -170,6 +172,7 @@ class SmartyExtend extends \Smarty // get first part from lang $this->lang_short = explode('_', $locale['lang'])[0]; $this->domain = $this->l10n->getDomain(); + $this->locale_set = $this->l10n->getLocaleSet(); $this->lang_dir = $this->l10n->getBaseLocalePath(); // opt load functions so we can use legacy init for smarty run perhaps @@ -312,7 +315,9 @@ class SmartyExtend extends \Smarty } // javascript translate data as template for auto translate if (empty($this->TEMPLATE_TRANSLATE)) { - $this->TEMPLATE_TRANSLATE = 'jsTranslate_' . $this->lang . '.tpl'; + $this->TEMPLATE_TRANSLATE = 'jsTranslate_' + . $this->locale_set . '.' . $this->encoding + . '.tpl'; } else { // we assume we have some fixed set // we must add _<$this->lang> @@ -321,12 +326,12 @@ class SmartyExtend extends \Smarty if (strpos($this->TEMPLATE_TRANSLATE, '.tpl')) { $this->TEMPLATE_TRANSLATE = str_replace( '.tpl', - '-' . $this->lang . '.' . $this->encoding . '.tpl', + '-' . $this->locale_set . '.' . $this->encoding . '.tpl', $this->TEMPLATE_TRANSLATE ); } else { $this->TEMPLATE_TRANSLATE .= '_' - . $this->lang . '.' . $this->encoding + . $this->locale_set . '.' . $this->encoding . '.tpl'; } }