2017-10-08 122 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可以解决你的问题!

相关问题