2017-10-08 134 views
1

我正在嘗試顯示基於區域設置的國家/地區列表。例如,假設我們有以下國家/地區列表:React-intl支持根據位置轉換國家/地區名稱嗎?

United States, China, Japan, and France. 

並且您是瀏覽我的網站的客戶。如果您帳戶的地區設置爲en_US,那麼您應該看到英文版的國家/地區列表。但是,如果您帳戶的區域設置爲ja_JP,則應該看到列表的日文版中的列表,依此類推。

使用React-intl可以嗎?我試圖動態解決這個問題,而不是硬編碼的翻譯。 我搜索了很多,但不能拿出解決方案。

回答

0

由於這是關於數據的一切,您不需要特殊的React庫。您只能使用有關像here這樣的國家/地區的數據。這是在下面的模式JSON(我削減了一些領域,完整的例子可以發現here):

{ 
    "name": { 
     "common": "Austria", 
     "official": "Republic of Austria", 
     "native": { 
      "bar": { 
       "official": "Republik Österreich", 
       "common": "Österreich" 
      } 
     } 
    }, 
    "cca2": "AT", 
    "cca3": "AUT", 
    "translations": { 
     "deu": {"official": "Republik Österreich", "common": "Österreich"}, 
     "fra": {"official": "République d'Autriche", "common": "Autriche"}, 
     "ita": {"official": "Repubblica d'Austria", "common": "Austria"}, 
     "jpn": {"official": "オーストリア共和國", "common": "オーストリア"}, 
     "spa": {"official": "República de Austria", "common": "Austria"} 
    }, 
} 

注意,雖然翻譯部分採用ISO 639-3碼和識別部分使用ISO 3166-1代碼,你可以很容易地將它們映射因爲土生土長的語言部分使用ISO 639-3代碼。

假設您必須顯示預定義的國家列表。你所要做的就是獲得他們的cca3代碼並將它們放入一個數組中。然後,當你在ISO 639-3格式(userLoc在下面的例子中)發現你的用戶區域,可以使用lodash或類似的庫來獲得相應的翻譯:

// userLoc - current user locale in ISO 639-3 
// codesToSelect - array of country codes in ISO 3166-1 you want to show 

_.map(codesToSelect, (cca3) => { 

    let countryObject = _.find(countriesData, { 'cca3': cca3 }); 

    let translatedName = (countryObject && 
          countryObject.translations && 
          countryObject.translations[ userLoc ]) 
     ? countryObject.translations[ userLoc ] 
     : cca3 

    return translatedName; 
}) 

注意,有可能不是一個指定的翻譯國家代碼,所以cca3將被用作後備。

0

我嘗試了一段時間react-intl,我覺得它像一個魅力。實際上,他們給出了一些值得嘗試的功能性例子。

  1. 克隆回購。(https://github.com/yahoo/react-intl
  2. 運行NPM安裝或紗線在回購的根目錄下安裝,這一步驟將安裝一些依賴將由例如使用。
  3. 轉到示例目錄和翻譯目錄。
  4. 運行npm編譯或生成紗線
  5. 訪問localhost:8080查看結果。您可以在en-US和en-UPPER之間切換lang。

所有這些語言集都不是在應用程序代碼中硬編碼,而是以json格式單獨保存在build/lang目錄中。我認爲react-intl可以解決你的問題!

相關問題