diff options
author | sgiehl <stefan@piwik.org> | 2018-08-27 13:49:50 +0300 |
---|---|---|
committer | sgiehl <stefan@piwik.org> | 2018-08-27 13:49:50 +0300 |
commit | 7a8e0894a78f1864f3c385c4cd34ed928b8d3937 (patch) | |
tree | 492eed4339b8e2861872ce4d4214aa130df1b934 /plugins/Intl | |
parent | 5c68962eb3ba08e26093a8292f96b81565954fe3 (diff) |
Adss support for territory specific languages (without an own language name)
Diffstat (limited to 'plugins/Intl')
-rw-r--r-- | plugins/Intl/Commands/GenerateIntl.php | 59 |
1 files changed, 56 insertions, 3 deletions
diff --git a/plugins/Intl/Commands/GenerateIntl.php b/plugins/Intl/Commands/GenerateIntl.php index 0095b25b59..b7d199c290 100644 --- a/plugins/Intl/Commands/GenerateIntl.php +++ b/plugins/Intl/Commands/GenerateIntl.php @@ -106,6 +106,24 @@ class GenerateIntl extends ConsoleCommand $this->fetchUnitData($output, $transformedLangCode, $requestLangCode, $translations); $this->fetchNumberFormattingData($output, $transformedLangCode, $requestLangCode, $translations); + // fix missing language name for territory specific languages (like es-AR) + if (empty($translations['Intl']['OriginalLanguageName']) && strpos($transformedLangCode, '-')) { + list($language, $territory) = explode('-', $transformedLangCode); + + if (!empty($translations['Intl']['Language_'.$language])) { + + $originalName = $this->transform($translations['Intl']['Language_'.$language]); + + if (!empty($translations['Intl']['Country_'.$territory])) { + $originalName .= ' (' . $translations['Intl']['Country_'.$territory] . ')'; + } else { + $originalName .= ' (' . strtoupper($language) . ')'; + } + + $translations['Intl']['OriginalLanguageName'] = $originalName; + } + } + ksort($translations['Intl']); file_put_contents(sprintf($writePath, $langCode), json_encode($translations, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); @@ -145,7 +163,7 @@ class GenerateIntl extends ConsoleCommand } } - protected function getEnglishLanguageName($code) + protected function getEnglishLanguageName($code, $alternateCode) { $languageDataUrl = 'https://raw.githubusercontent.com/unicode-cldr/cldr-localenames-full/master/main/%s/languages.json'; @@ -158,7 +176,42 @@ class GenerateIntl extends ConsoleCommand $languageData = $languageData['main']['en']['localeDisplayNames']['languages']; } - return (array_key_exists($code, $languageData) && $languageData[$code] != $code) ? $this->transform($languageData[$code]) : ''; + if (array_key_exists($code, $languageData) && $languageData[$code] != $code) { + return $this->transform($languageData[$code]); + } + + if (array_key_exists($alternateCode, $languageData) && $languageData[$alternateCode] != $alternateCode) { + return $this->transform($languageData[$alternateCode]); + } + + if (strpos($code, '-')) { + list($language, $territory) = explode('-', $code); + + if (!array_key_exists($language, $languageData)) { + return ''; + } + + $englishName = $this->transform($languageData[$language]); + + $territoryDataUrl = 'https://raw.githubusercontent.com/unicode-cldr/cldr-localenames-full/master/main/%s/territories.json'; + + try { + $territoryData = Http::fetchRemoteFile(sprintf($territoryDataUrl, 'en')); + $territoryData = json_decode($territoryData, true); + $territoryData = $territoryData['main']['en']['localeDisplayNames']['territories']; + + if (array_key_exists($territory, $territoryData)) { + $englishName .= ' ('.$territoryData[$territory].')'; + } else { + $englishName .= ' ('.strtoupper($language).')'; + } + } catch (\Exception $e) { + $englishName .= ' ('.strtoupper($language).')'; + } + + return $englishName; + } + } catch (\Exception $e) { } @@ -191,7 +244,7 @@ class GenerateIntl extends ConsoleCommand } else if (array_key_exists($requestLangCode, $languageData) && $languageData[$requestLangCode] != $requestLangCode) { $translations['Intl']['OriginalLanguageName'] = $this->transform($languageData[$requestLangCode]); } - $translations['Intl']['EnglishLanguageName'] = $this->getEnglishLanguageName($langCode) ? $this->getEnglishLanguageName($langCode) : $this->getEnglishLanguageName($requestLangCode); + $translations['Intl']['EnglishLanguageName'] = $this->getEnglishLanguageName($langCode, $requestLangCode); $output->writeln('Saved language data for ' . $langCode); } catch (\Exception $e) { |