Piwik\Common::extractCountryCodeFromBrowserLanguage PHP Méthode

extractCountryCodeFromBrowserLanguage() public static méthode

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)
Résultat array Array of 2 letter ISO codes
    public static function extractCountryCodeFromBrowserLanguage($browserLanguage, $validCountries, $enableLanguageToCountryGuess)
    {
        /** @var LanguageDataProvider $dataProvider */
        $dataProvider = StaticContainer::get('Piwik\\Intl\\Data\\Provider\\LanguageDataProvider');
        $langToCountry = $dataProvider->getLanguageToCountryList();
        if ($enableLanguageToCountryGuess) {
            if (preg_match('/^([a-z]{2,3})(?:,|;|$)/', $browserLanguage, $matches)) {
                // match language (without region) to infer the country of origin
                if (array_key_exists($matches[1], $langToCountry)) {
                    return $langToCountry[$matches[1]];
                }
            }
        }
        if (!empty($validCountries) && preg_match_all('/[-]([a-z]{2})/', $browserLanguage, $matches, PREG_SET_ORDER)) {
            foreach ($matches as $parts) {
                // match location; we don't make any inferences from the language
                if (array_key_exists($parts[1], $validCountries)) {
                    return $parts[1];
                }
            }
        }
        return self::LANGUAGE_CODE_INVALID;
    }

Usage Example

Exemple #1
0
 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);
 }
All Usage Examples Of Piwik\Common::extractCountryCodeFromBrowserLanguage