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'; } }