2015-10-09 2 views
0

Если я добавляю подобный бокс или плагин для страниц, поэтому я должен выбрать язык, на котором он будет отображаться.Таблица кодов языков Facebook

Но что делать, если у меня есть многоязычная система сайта на PHP, которая запоминает только коды стран (en, es ...). Поэтому мне, вероятно, нужен такой стол, но со всеми языками:

en => en_US 
es => es_ES ... 

Знаете ли вы о некотором?

+0

Вы используете коды _language_, а не _country_. В любом случае использование 'en', вероятно, окажется сложным, что в таких локалях, как' en_GB', 'en_CA',' en_US' и т. Д. –

+0

https://developers.facebook.com/docs/internationalization#locales относится к XML-файл, содержащий все локали, поддерживаемые Facebook. Поэтому вы можете легко составить список оттуда самостоятельно. – CBroe

ответ

-1

Наконец я создал эту таблицу из всех поддерживаемых facebok lang-locales, то я выбрал один, используя 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'; 
} 

Надеюсь, это поможет кому-то еще.

0

Facebook использует коды стран, но эти коды являются более конкретными, поэтому их в основном называют Язык ID (язык и код страны).

Вы можете просто захватить XML из Facebook со всеми локали идентификаторами используемых ими:

<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_US или en_GB. Таким образом, отображение от 2 до 4 букв не будет работать. Вам нужно иметь таблицу с кодом страны и страны, например en_US.

Самый современный браузер отправляет заголовок «принять язык», но beware Это не на 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); 
} 
+0

Спасибо, было полезно ... – Melounek

+0

вы приветствуете :) – swidmann

Смежные вопросы