2016-11-09 61 views
-1

如何从Symfony2当前语言环境中以[language code] _ [country_code]格式猜测用户“culture”。如何在PHP中使用[语言代码] _ [国家代码]格式猜测用户“culture”

我想要一个函数,它返回以下格式的字符串:[language code] _ [country_code]来自当前语言环境。

这里是我搜索功能:

/** 
* @param string $locale ex: "en" 
* @param string $countryCode ex: "GB" 
* 
* @return string ex: "en_GB" 
*/ 
function getCultureFromLocale($locale, $countryCode = '') { 

    //... code to find 

    return $culture; 
} 

例:

$culture = getCultureFromLocale('en') //return 'en_GB' by default; 
$culture = getCultureFromLocale('en', 'GB') //return 'en_GB'; 
$culture = getCultureFromLocale('en', 'US') //return 'en_US'; 

我希望这是很清楚。

+0

请说明您的具体问题或添加额外的细节,突显你需要什么。正如目前所写,很难确切地说出你在问什么。 – Chausser

+0

@Chausser我已经更新了这个问题。 – Tsounabe

+0

所以如果你通过'en'你想推断'en_GB'?或者如果你给'en_US'你想获得'en_US'?无论如何你为什么需要这个? – Chausser

回答

0

我发现基于这个答案的解决方案:Is there a simple way to get the language code from a country code in PHP

这里是我的功能(可优化):

function locale_get_culture($locale, $country_code = '') 
    { 
     //Preferred country for some locales if no country setted 
     if (!$country_code) { 
      if ($locale == 'fr') { 
       $country_code = 'FR'; 
      } elseif ($locale == 'en') { 
       $country_code = 'US'; 
      } elseif ($locale == 'es') { 
       $country_code = 'ES'; 
      } elseif ($locale == 'de') { 
       $country_code = 'DE'; 
      } 
     } 

     // Cultures list taken from: https://stackoverflow.com/questions/3191664/ 
     $cultures = array(
      'af-ZA', 
      'am-ET', 
      'ar-AE', 
      'ar-BH', 
      'ar-DZ', 
      'ar-EG', 
      'ar-IQ', 
      'ar-JO', 
      'ar-KW', 
      'ar-LB', 
      'ar-LY', 
      'ar-MA', 
      'arn-CL', 
      'ar-OM', 
      'ar-QA', 
      'ar-SA', 
      'ar-SY', 
      'ar-TN', 
      'ar-YE', 
      'as-IN', 
      'az-Cyrl-AZ', 
      'az-Latn-AZ', 
      'ba-RU', 
      'be-BY', 
      'bg-BG', 
      'bn-BD', 
      'bn-IN', 
      'bo-CN', 
      'br-FR', 
      'bs-Cyrl-BA', 
      'bs-Latn-BA', 
      'ca-ES', 
      'co-FR', 
      'cs-CZ', 
      'cy-GB', 
      'da-DK', 
      'de-AT', 
      'de-CH', 
      'de-DE', 
      'de-LI', 
      'de-LU', 
      'dsb-DE', 
      'dv-MV', 
      'el-GR', 
      'en-029', 
      'en-AU', 
      'en-BZ', 
      'en-CA', 
      'en-GB', 
      'en-IE', 
      'en-IN', 
      'en-JM', 
      'en-MY', 
      'en-NZ', 
      'en-PH', 
      'en-SG', 
      'en-TT', 
      'en-US', 
      'en-ZA', 
      'en-ZW', 
      'es-AR', 
      'es-BO', 
      'es-CL', 
      'es-CO', 
      'es-CR', 
      'es-DO', 
      'es-EC', 
      'es-ES', 
      'es-GT', 
      'es-HN', 
      'es-MX', 
      'es-NI', 
      'es-PA', 
      'es-PE', 
      'es-PR', 
      'es-PY', 
      'es-SV', 
      'es-US', 
      'es-UY', 
      'es-VE', 
      'et-EE', 
      'eu-ES', 
      'fa-IR', 
      'fi-FI', 
      'fil-PH', 
      'fo-FO', 
      'fr-BE', 
      'fr-CA', 
      'fr-CH', 
      'fr-FR', 
      'fr-LU', 
      'fr-MC', 
      'fy-NL', 
      'ga-IE', 
      'gd-GB', 
      'gl-ES', 
      'gsw-FR', 
      'gu-IN', 
      'ha-Latn-NG', 
      'he-IL', 
      'hi-IN', 
      'hr-BA', 
      'hr-HR', 
      'hsb-DE', 
      'hu-HU', 
      'hy-AM', 
      'id-ID', 
      'ig-NG', 
      'ii-CN', 
      'is-IS', 
      'it-CH', 
      'it-IT', 
      'iu-Cans-CA', 
      'iu-Latn-CA', 
      'ja-JP', 
      'ka-GE', 
      'kk-KZ', 
      'kl-GL', 
      'km-KH', 
      'kn-IN', 
      'kok-IN', 
      'ko-KR', 
      'ky-KG', 
      'lb-LU', 
      'lo-LA', 
      'lt-LT', 
      'lv-LV', 
      'mi-NZ', 
      'mk-MK', 
      'ml-IN', 
      'mn-MN', 
      'mn-Mong-CN', 
      'moh-CA', 
      'mr-IN', 
      'ms-BN', 
      'ms-MY', 
      'mt-MT', 
      'nb-NO', 
      'ne-NP', 
      'nl-BE', 
      'nl-NL', 
      'nn-NO', 
      'nso-ZA', 
      'oc-FR', 
      'or-IN', 
      'pa-IN', 
      'pl-PL', 
      'prs-AF', 
      'ps-AF', 
      'pt-BR', 
      'pt-PT', 
      'qut-GT', 
      'quz-BO', 
      'quz-EC', 
      'quz-PE', 
      'rm-CH', 
      'ro-RO', 
      'ru-RU', 
      'rw-RW', 
      'sah-RU', 
      'sa-IN', 
      'se-FI', 
      'se-NO', 
      'se-SE', 
      'si-LK', 
      'sk-SK', 
      'sl-SI', 
      'sma-NO', 
      'sma-SE', 
      'smj-NO', 
      'smj-SE', 
      'smn-FI', 
      'sms-FI', 
      'sq-AL', 
      'sr-Cyrl-BA', 
      'sr-Cyrl-CS', 
      'sr-Cyrl-ME', 
      'sr-Cyrl-RS', 
      'sr-Latn-BA', 
      'sr-Latn-CS', 
      'sr-Latn-ME', 
      'sr-Latn-RS', 
      'sv-FI', 
      'sv-SE', 
      'sw-KE', 
      'syr-SY', 
      'ta-IN', 
      'te-IN', 
      'tg-Cyrl-TJ', 
      'th-TH', 
      'tk-TM', 
      'tn-ZA', 
      'tr-TR', 
      'tt-RU', 
      'tzm-Latn-DZ', 
      'ug-CN', 
      'uk-UA', 
      'ur-PK', 
      'uz-Cyrl-UZ', 
      'uz-Latn-UZ', 
      'vi-VN', 
      'wo-SN', 
      'xh-ZA', 
      'yo-NG', 
      'zh-CN', 
      'zh-HK', 
      'zh-MO', 
      'zh-SG', 
      'zh-TW', 
      'zu-ZA', 
     ); 

     foreach ($cultures as $culture) { 
      $locale_region = locale_get_region($culture); 
      $locale_language = locale_get_primary_language($culture); 
      $locale_array = array(
       'language' => $locale_language, 
       'region' => $locale_region 
      ); 

      if ((($country_code && strtoupper($country_code) == $locale_region) || !$country_code) 
       && strtolower($locale) == $locale_language 
      ) { 
       return locale_compose($locale_array); 
      } 
     } 

     return 'en_US';//default if not found 
    }