簡體   English   中英

Facebook語言代碼表

[英]Facebook language codes table

如果要添加類似框或頁面插件,那么我必須選擇顯示它的語言。

但是,如果我在PHP中有多語言站點系統,該系統僅記住國家/地區代碼(en,es ...),該怎么辦。 所以我可能需要一個這樣的表,但是要使用所有語言:

en => en_US
es => es_ES ...

你知道一些嗎?

Facebook正在使用國家/地區代碼,但是此代碼更為具體,因此通常被稱為區域設置ID (語言和國家/地區代碼)。

您可以從Facebook獲取XML以及它們使用的所有語言環境ID的XML:

<locale>
  <englishName>English (UK)</englishName>
    <codes>
      <code>
        <standard>
          <name>FB</name>
          <representation>en_GB</representation>
        </standard>
      </code>
   </codes>
</locale>

您可以在這里找到整個文件( https://www.facebook.com/translations/FacebookLocales.xml

但是:這里的問題是,您不能從en引用en_USen_GB 因此,從2到4個字母的映射將不起作用。 您需要有一個表,其中包含語言和國家/地區代碼,例如en_US

大多數現代瀏覽器都會發送“接受語言”標頭,但請注意,它並不是100%可靠的,它只是用戶瀏覽器的主要語言,而實際上不是國家/地區代碼。

試試: var_dump( $_SERVER['HTTP_ACCEPT_LANGUAGE'] ); 得到: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4

您也可以嘗試使用API​​,例如http://www.hostip.info/

一個例子是:

$theFirstPart = "en";// you said you already got this
$userIP = "12.215.42.19";// from $_SERVER var

$languageCode = "en_US";// your standard

//you should use curl for this
// and it's really slow, so please cache this for at least a day or two ;)
$content = file_get_contents( "http://api.hostip.info/get_json.php?ip=$userIP" );
if( $content ) {
    $json = json_decode( $content );
    if( $json && isset( $json->country_code ) ) {
        // before you assign the value, you should check if it's in the facebook xml
        $languageCode = $theFirstPart.'_'.$json->country_code;
    }

    echo "<pre>";
    var_dump( $languageCode );
}

最終,我從所有受支持的facebok lang-locals創建了該表,然后使用stripos()選擇了一個表,並且由於它很少幾次選擇了錯誤的代碼,因此我通過將首選位置放到數組頂部來對數組重新排序。

也許這不是最好的解決方案,但它解決了我的問題。

function fb_lang($lang_code){
    $fb_locales = [ 
        'es_ES', 'en_US', 'fr_FR', 'tr_TR', 'sv_SE', // prefered codes are moved to line
        'af_ZA', 'sq_AL', 'ar_AR', 'hy_AM', 'ay_BO', 'az_AZ', 'eu_ES', 'be_BY', 'bn_IN', 'bs_BA', 'bg_BG', 'ca_ES', 'ck_US', 
        'hr_HR', 'cs_CZ', 'da_DK', 'nl_NL', 'nl_BE', 'en_PI', 'en_GB', 'en_UD', 'eo_EO', 'et_EE', 'fo_FO', 'tl_PH', 'fi_FI', 
        'fb_FI', 'fr_CA', 'gl_ES', 'ka_GE', 'de_DE', 'el_GR', 'gn_PY', 'gu_IN', 'he_IL', 'hi_IN', 'hu_HU', 'is_IS', 'id_ID', 
        'ga_IE', 'it_IT', 'ja_JP', 'jv_ID', 'kn_IN', 'kk_KZ', 'km_KH', 'tl_ST', 'ko_KR', 'ku_TR', 'la_VA', 'lv_LV', 'fb_LT', 'li_NL', 
        'lt_LT', 'mk_MK', 'mg_MG', 'ms_MY', 'ml_IN', 'mt_MT', 'mr_IN', 'mn_MN', 'ne_NP', 'se_NO', 'nb_NO', 'nn_NO', 'ps_AF', 'fa_IR', 
        'pl_PL', 'pt_BR', 'pt_PT', 'pa_IN', 'qu_PE', 'ro_RO', 'rm_CH', 'ru_RU', 'sa_IN', 'sr_RS', 'zh_CN', 'sk_SK', 'sl_SI', 'so_SO', 
        'es_LA', 'es_CL', 'es_CO', 'es_MX', 'es_VE', 'sw_KE', 'sy_SY', 'tg_TJ', 'ta_IN', 'tt_RU', 'te_IN', 'th_TH', 
        'zh_HK', 'zh_TW', 'uk_UA', 'ur_PK', 'uz_UZ', 'vi_VN', 'cy_GB', 'xh_ZA', 'yi_DE', 'zu_ZA'
    ];
    foreach($fb_locales as $fbl){
        if(stripos($fbl,$lang_code)!==false){
            return $fbl;
        }
    }
    trigger_error('Fb_lang() couldn\'t find equvalent for language code "'.$lang_code.'"');
    return 'en_US';
}

希望它會幫助別人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM