diff --git a/core/i18n.php b/core/i18n.php index 7097d2fb4..42ed4d127 100755 --- a/core/i18n.php +++ b/core/i18n.php @@ -1603,7 +1603,9 @@ class i18n extends Object { * @return string Long locale, e.g. "en_US" */ static function get_locale_from_lang($lang) { - if(isset(self::$likely_subtags[$lang])) { + if(preg_match('/\-|_/', $lang)) { + return $lang; + } else if(isset(self::$likely_subtags[$lang])) { return self::$likely_subtags[$lang]; } else { return $lang . '_' . strtoupper($lang); diff --git a/tests/i18n/i18nTest.php b/tests/i18n/i18nTest.php index 51b53edee..bdbd8fca5 100644 --- a/tests/i18n/i18nTest.php +++ b/tests/i18n/i18nTest.php @@ -198,6 +198,12 @@ class i18nTest extends SapphireTest { i18n::set_locale($oldLocale); } + + function testGetLocaleFromLang() { + $this->assertEquals('en_US', i18n::get_locale_from_lang('en')); + $this->assertEquals('de_DE', i18n::get_locale_from_lang('de_DE')); + $this->assertEquals('xy_XY', i18n::get_locale_from_lang('xy')); + } } class i18nTest_DataObject extends DataObject implements TestOnly {