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 getLanguageDataToExtractLanguageCode */ public function testExtractLanguageCodeFromBrowserLanguage($browserLanguage, $validLanguages, $expected) { $this->assertEquals($expected, Common::extractLanguageCodeFromBrowserLanguage($browserLanguage, $validLanguages), "test with {$browserLanguage} failed, expected {$expected}"); }
/** * @return string Two letters language code, eg. "fr" */ public static function getLanguageCodeForCurrentUser() { $languageCode = self::getLanguageFromPreferences(); if (!API::getInstance()->isLanguageAvailable($languageCode)) { $languageCode = Common::extractLanguageCodeFromBrowserLanguage(Common::getBrowserLanguage(), API::getInstance()->getAvailableLanguages()); } if (!API::getInstance()->isLanguageAvailable($languageCode)) { $languageCode = Translate::getLanguageDefault(); } return $languageCode; }
protected function aggregateByLanguage() { $query = $this->getLogAggregator()->queryVisitsByDimension(array("label" => self::LANGUAGE_DIMENSION)); $languageCodes = array_keys(Common::getLanguagesList()); $metricsByLanguage = new DataArray(); while ($row = $query->fetch()) { $code = Common::extractLanguageCodeFromBrowserLanguage($row['label'], $languageCodes); $metricsByLanguage->sumMetricsVisits($code, $row); } $report = $metricsByLanguage->asDataTable(); $this->insertTable(self::LANGUAGE_RECORD_NAME, $report); }
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); }