Fix getLanguageCodeFromCountryCode

This commit is contained in:
Laurent Destailleur 2018-11-21 16:28:36 +01:00
parent b6dac7da20
commit 5e9abe6aad
2 changed files with 67 additions and 52 deletions

View File

@ -6792,13 +6792,15 @@ function picto_from_langcode($codelang, $moreatt = '')
*/ */
function getLanguageCodeFromCountryCode($countrycode) function getLanguageCodeFromCountryCode($countrycode)
{ {
$countrycodetolanguage = array( global $mysoc;
'SA' => 'ar_AR',
'DK' => 'da_DA', if (strtoupper($countrycode) == 'MQ') return 'fr_CA';
'CA' => 'en_CA', if (strtoupper($countrycode) == 'SE') return 'sv_SE'; // se_SE is Sami/Sweden, and we want in priority sv_SE for SE country
'SE' => 'sv_SV' if (strtoupper($countrycode) == 'CH')
); {
if (! empty($countrycodetolanguage[$countrycode])) return $countrycodetolanguage[$countrycode]; if ($mysoc->country_code == 'FR') return 'fr_CH';
if ($mysoc->country_code == 'DE') return 'de_CH';
}
// Locale list taken from: // Locale list taken from:
// http://stackoverflow.com/questions/3191664/ // http://stackoverflow.com/questions/3191664/
@ -6816,7 +6818,6 @@ function getLanguageCodeFromCountryCode($countrycode)
'ar-LB', 'ar-LB',
'ar-LY', 'ar-LY',
'ar-MA', 'ar-MA',
'arn-CL',
'ar-OM', 'ar-OM',
'ar-QA', 'ar-QA',
'ar-SA', 'ar-SA',
@ -6824,8 +6825,6 @@ function getLanguageCodeFromCountryCode($countrycode)
'ar-TN', 'ar-TN',
'ar-YE', 'ar-YE',
'as-IN', 'as-IN',
'az-Cyrl-AZ',
'az-Latn-AZ',
'ba-RU', 'ba-RU',
'be-BY', 'be-BY',
'bg-BG', 'bg-BG',
@ -6833,8 +6832,6 @@ function getLanguageCodeFromCountryCode($countrycode)
'bn-IN', 'bn-IN',
'bo-CN', 'bo-CN',
'br-FR', 'br-FR',
'bs-Cyrl-BA',
'bs-Latn-BA',
'ca-ES', 'ca-ES',
'co-FR', 'co-FR',
'cs-CZ', 'cs-CZ',
@ -6845,10 +6842,8 @@ function getLanguageCodeFromCountryCode($countrycode)
'de-DE', 'de-DE',
'de-LI', 'de-LI',
'de-LU', 'de-LU',
'dsb-DE',
'dv-MV', 'dv-MV',
'el-GR', 'el-GR',
'en-029',
'en-AU', 'en-AU',
'en-BZ', 'en-BZ',
'en-CA', 'en-CA',
@ -6888,7 +6883,6 @@ function getLanguageCodeFromCountryCode($countrycode)
'eu-ES', 'eu-ES',
'fa-IR', 'fa-IR',
'fi-FI', 'fi-FI',
'fil-PH',
'fo-FO', 'fo-FO',
'fr-BE', 'fr-BE',
'fr-CA', 'fr-CA',
@ -6900,14 +6894,11 @@ function getLanguageCodeFromCountryCode($countrycode)
'ga-IE', 'ga-IE',
'gd-GB', 'gd-GB',
'gl-ES', 'gl-ES',
'gsw-FR',
'gu-IN', 'gu-IN',
'ha-Latn-NG',
'he-IL', 'he-IL',
'hi-IN', 'hi-IN',
'hr-BA', 'hr-BA',
'hr-HR', 'hr-HR',
'hsb-DE',
'hu-HU', 'hu-HU',
'hy-AM', 'hy-AM',
'id-ID', 'id-ID',
@ -6916,15 +6907,12 @@ function getLanguageCodeFromCountryCode($countrycode)
'is-IS', 'is-IS',
'it-CH', 'it-CH',
'it-IT', 'it-IT',
'iu-Cans-CA',
'iu-Latn-CA',
'ja-JP', 'ja-JP',
'ka-GE', 'ka-GE',
'kk-KZ', 'kk-KZ',
'kl-GL', 'kl-GL',
'km-KH', 'km-KH',
'kn-IN', 'kn-IN',
'kok-IN',
'ko-KR', 'ko-KR',
'ky-KG', 'ky-KG',
'lb-LU', 'lb-LU',
@ -6935,8 +6923,6 @@ function getLanguageCodeFromCountryCode($countrycode)
'mk-MK', 'mk-MK',
'ml-IN', 'ml-IN',
'mn-MN', 'mn-MN',
'mn-Mong-CN',
'moh-CA',
'mr-IN', 'mr-IN',
'ms-BN', 'ms-BN',
'ms-MY', 'ms-MY',
@ -6946,24 +6932,17 @@ function getLanguageCodeFromCountryCode($countrycode)
'nl-BE', 'nl-BE',
'nl-NL', 'nl-NL',
'nn-NO', 'nn-NO',
'nso-ZA',
'oc-FR', 'oc-FR',
'or-IN', 'or-IN',
'pa-IN', 'pa-IN',
'pl-PL', 'pl-PL',
'prs-AF',
'ps-AF', 'ps-AF',
'pt-BR', 'pt-BR',
'pt-PT', 'pt-PT',
'qut-GT',
'quz-BO',
'quz-EC',
'quz-PE',
'rm-CH', 'rm-CH',
'ro-RO', 'ro-RO',
'ru-RU', 'ru-RU',
'rw-RW', 'rw-RW',
'sah-RU',
'sa-IN', 'sa-IN',
'se-FI', 'se-FI',
'se-NO', 'se-NO',
@ -6971,39 +6950,21 @@ function getLanguageCodeFromCountryCode($countrycode)
'si-LK', 'si-LK',
'sk-SK', 'sk-SK',
'sl-SI', 'sl-SI',
'sma-NO',
'sma-SE',
'smj-NO',
'smj-SE',
'smn-FI',
'sms-FI',
'sq-AL', 'sq-AL',
'sr-Cyrl-BA',
'sr-Cyrl-CS',
'sr-Cyrl-ME',
'sr-Cyrl-RS',
'sr-Latn-BA',
'sr-Latn-CS',
'sr-Latn-ME',
'sr-Latn-RS',
'sv-FI', 'sv-FI',
'sv-SE', 'sv-SE',
'sw-KE', 'sw-KE',
'syr-SY', 'syr-SY',
'ta-IN', 'ta-IN',
'te-IN', 'te-IN',
'tg-Cyrl-TJ',
'th-TH', 'th-TH',
'tk-TM', 'tk-TM',
'tn-ZA', 'tn-ZA',
'tr-TR', 'tr-TR',
'tt-RU', 'tt-RU',
'tzm-Latn-DZ',
'ug-CN', 'ug-CN',
'uk-UA', 'uk-UA',
'ur-PK', 'ur-PK',
'uz-Cyrl-UZ',
'uz-Latn-UZ',
'vi-VN', 'vi-VN',
'wo-SN', 'wo-SN',
'xh-ZA', 'xh-ZA',
@ -7016,14 +6977,17 @@ function getLanguageCodeFromCountryCode($countrycode)
'zu-ZA', 'zu-ZA',
); );
$buildprimarykeytotest = strtolower($countrycode).'-'.strtoupper($countrycode);
if (in_array($buildprimarykeytotest, $locales)) return strtolower($countrycode).'_'.strtoupper($countrycode);
foreach ($locales as $locale) foreach ($locales as $locale)
{ {
$locale_region = locale_get_region($locale);
$locale_language = locale_get_primary_language($locale); $locale_language = locale_get_primary_language($locale);
$locale_array = array('language' => $locale_language, 'region' => $locale_region); $locale_region = locale_get_region($locale);
if (strtoupper($countrycode) == $locale_region) if (strtoupper($countrycode) == $locale_region)
{ {
return locale_compose($locale_array); //var_dump($locale.'-'.$locale_language.'-'.$locale_region);
return strtolower($locale_language).'_'.strtoupper($locale_region);
} }
} }

View File

@ -48,7 +48,7 @@ if (! defined("NOLOGIN")) define("NOLOGIN",'1'); // If this page is
* @backupStaticAttributes enabled * @backupStaticAttributes enabled
* @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased.
*/ */
class FunctionsLibTest extends PHPUnit_Framework_TestCase class FunctionsLibTest extends PHPUnit\Framework\TestCase
{ {
protected $savconf; protected $savconf;
protected $savuser; protected $savuser;
@ -325,6 +325,57 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase
} }
/**
* testGetLanguageCodeFromCountryCode
*
* @return void
*/
public function testGetLanguageCodeFromCountryCode()
{
global $mysoc;
$language = getLanguageCodeFromCountryCode('US');
$this->assertEquals('en_US', $language, 'US');
$language = getLanguageCodeFromCountryCode('ES');
$this->assertEquals('es_ES', $language, 'ES');
$language = getLanguageCodeFromCountryCode('CL');
$this->assertEquals('es_CL', $language, 'CL');
$language = getLanguageCodeFromCountryCode('CA');
$this->assertEquals('en_CA', $language, 'CA');
$language = getLanguageCodeFromCountryCode('MQ');
$this->assertEquals('fr_CA', $language);
$language = getLanguageCodeFromCountryCode('FR');
$this->assertEquals('fr_FR', $language);
$language = getLanguageCodeFromCountryCode('BE');
$this->assertEquals('fr_BE', $language);
$mysoc->country_code = 'FR';
$language = getLanguageCodeFromCountryCode('CH');
$this->assertEquals('fr_CH', $language);
$mysoc->country_code = 'DE';
$language = getLanguageCodeFromCountryCode('CH');
$this->assertEquals('de_CH', $language);
$language = getLanguageCodeFromCountryCode('DE');
$this->assertEquals('de_DE', $language);
$language = getLanguageCodeFromCountryCode('SA');
$this->assertEquals('ar_SA', $language);
$language = getLanguageCodeFromCountryCode('SE');
$this->assertEquals('sv_SE', $language);
$language = getLanguageCodeFromCountryCode('DK');
$this->assertEquals('da_DK', $language);
}
/** /**
* testDolTextIsHtml * testDolTextIsHtml
* *