* The language tag is defined by ISO 639-1
* The region tag is defined by ISO 3166-1
public static extractLanguageAndRegionCodeFromBrowserLanguage ( string $browserLanguage, array $validLanguages = [] ) : string | ||
$browserLanguage | string | Browser's accepted langauge header |
$validLanguages | array | array of valid language codes. Note that if the array includes "fr" then it will consider all regional variants of this language valid, such as "fr-ca" etc. |
return | string | 2 letter ISO 639 code 'es' (Spanish) or if found, includes the region as well: 'es-ar' |
/** * For better privacy we store only the main language code, instead of the whole browser language string. * * @param $acceptLanguagesString * @return string */ protected function getSingleLanguageFromAcceptedLanguages($acceptLanguagesString) { if (empty($acceptLanguagesString)) { return ''; } $languageCode = Common::extractLanguageAndRegionCodeFromBrowserLanguage($acceptLanguagesString); return $languageCode; }
/** * @dataProvider getLanguageDataToExtractLanguageRegionCode */ public function testExtractLanguageAndRegionCodeFromBrowserLanguage($browserLanguage, $validLanguages, $expected) { $this->assertEquals($expected, Common::extractLanguageAndRegionCodeFromBrowserLanguage($browserLanguage, $validLanguages), "test with {$browserLanguage} failed, expected {$expected}"); }