Returns list of valid country codes
public static extractCountryCodeFromBrowserLanguage ( string $browserLanguage, array $validCountries, boolean $enableLanguageToCountryGuess ) : array | ||
$browserLanguage | string | |
$validCountries | array | Array of valid countries |
$enableLanguageToCountryGuess | boolean | (if true, will guess country based on language that lacks region information) |
return | array | Array of 2 letter ISO codes |
protected function aggregateByLanguage() { /** @var RegionDataProvider $regionDataProvider */ $regionDataProvider = StaticContainer::get('Piwik\\Intl\\Data\\Provider\\RegionDataProvider'); $query = $this->getLogAggregator()->queryVisitsByDimension(array("label" => self::LANGUAGE_DIMENSION)); $countryCodes = $regionDataProvider->getCountryList($includeInternalCodes = true); $metricsByLanguage = new DataArray(); while ($row = $query->fetch()) { $langCode = Common::extractLanguageCodeFromBrowserLanguage($row['label']); $countryCode = Common::extractCountryCodeFromBrowserLanguage($row['label'], $countryCodes, $enableLanguageToCountryGuess = true); if ($countryCode == 'xx' || $countryCode == $langCode) { $metricsByLanguage->sumMetricsVisits($langCode, $row); } else { $metricsByLanguage->sumMetricsVisits($langCode . '-' . $countryCode, $row); } } $report = $metricsByLanguage->asDataTable(); $this->insertTable(self::LANGUAGE_RECORD_NAME, $report); }
/** * @dataProvider getCountryCodeTestDataInfer * @group Core */ public function testExtractCountryCodeFromBrowserLanguageInfer($browserLanguage, $validCountries, $expected, $expectedInfer) { // do not infer country from language $this->assertEquals($expected, Common::extractCountryCodeFromBrowserLanguage($browserLanguage, $validCountries, $enableLanguageToCountryGuess = false)); // infer country from language $this->assertEquals($expectedInfer, Common::extractCountryCodeFromBrowserLanguage($browserLanguage, $validCountries, $enableLanguageToCountryGuess = true)); }
protected function aggregateByLanguage() { $query = $this->getLogAggregator()->queryVisitsByDimension(array("label" => self::LANGUAGE_DIMENSION)); $languageCodes = array_keys(Common::getLanguagesList()); $countryCodes = Common::getCountriesList($includeInternalCodes = true); $metricsByLanguage = new DataArray(); while ($row = $query->fetch()) { $langCode = Common::extractLanguageCodeFromBrowserLanguage($row['label'], $languageCodes); $countryCode = Common::extractCountryCodeFromBrowserLanguage($row['label'], $countryCodes, $enableLanguageToCountryGuess = true); if ($countryCode == 'xx' || $countryCode == $langCode) { $metricsByLanguage->sumMetricsVisits($langCode, $row); } else { $metricsByLanguage->sumMetricsVisits($langCode . '-' . $countryCode, $row); } } $report = $metricsByLanguage->asDataTable(); $this->insertTable(self::LANGUAGE_RECORD_NAME, $report); }