/** * @return string Two letters language code, eg. "fr" */ public static function getLanguageCodeForCurrentUser() { $languageCode = self::getLanguageFromPreferences(); if (!Piwik_LanguagesManager_API::getInstance()->isLanguageAvailable($languageCode)) { $languageCode = Piwik_Common::extractLanguageCodeFromBrowserLanguage(Piwik_Common::getBrowserLanguage(), Piwik_LanguagesManager_API::getInstance()->getAvailableLanguages()); } if (!Piwik_LanguagesManager_API::getInstance()->isLanguageAvailable($languageCode)) { $languageCode = 'en'; } return $languageCode; }
/** * Data driven tests of extractLanguageCodeFromBrowserLanguage */ public function test_extractLanguageCodeFromBrowserLanguage() { $a1 = array(array("fr-ca", array("fr"), "fr"), array("", array(), "xx"), array("", array("en"), "xx"), array("fr", array("en"), "xx"), array("en", array("en"), "en"), array("en-ca", array("en-ca"), "en-ca"), array("en-ca", array("en"), "en"), array("fr,en-us", array("fr", "en"), "fr"), array("fr,en-us", array("en", "fr"), "fr"), array("fr-fr,fr-ca", array("fr"), "fr"), array("fr-fr,fr-ca", array("fr-ca"), "fr-ca"), array("fr-fr;q=1.0,fr-ca;q=0.9", array("fr-ca"), "fr-ca"), array("fr-ca,fr;q=0.1", array("fr-ca"), "fr-ca")); foreach ($a1 as $testdata) { $this->assertEqual($testdata[2], Piwik_Common::extractLanguageCodeFromBrowserLanguage($testdata[0], $testdata[1]), "test with {$testdata[0]} failed, expected {$testdata[2]}"); } }
/** * @dataProvider getLanguageDataToExtract * @group Core * @group Common * @group extractLanguageCodeFromBrowserLanguage */ public function testExtractLanguageCodeFromBrowserLanguage($browserLanguage, $validLanguages, $expected) { $this->assertEquals($expected, Piwik_Common::extractLanguageCodeFromBrowserLanguage($browserLanguage, $validLanguages), "test with {$browserLanguage} failed, expected {$expected}"); }