代码之家  ›  专栏  ›  技术社区  ›  yozhik

Android应用程序的本地化。多个国家的一个字符串资源

  •  0
  • yozhik  · 技术社区  · 7 年前

    我有这样一个问题:我有一个登录/注册活动,默认情况下它使用的是strings.xml的俄语版本。 所以当用户进入应用程序时,他看到的是俄语文本。但是在这个活动中有一个按钮可以选择另一种语言。 当他点击那个按钮时——我打开另一个活动,他可以选择使用哪种语言(英语/西班牙语/德语等)。当他选择 语言(比如德语)。我如何才能从这个时间点,向用户显示文本,现在应该使用德语版的strings.xml? 而且-我该怎么做:如果用户的区域设置来自俄罗斯、乌克兰、格鲁吉亚-那么使用俄罗斯版本的strings.xml,如果用户的 来自其他国家/地区的区域设置-用户英语版的strings.xml? 谢谢。

    2 回复  |  直到 7 年前
        1
  •  1
  •   jujka    7 年前

    我强烈建议使用 lokalise

    我们有一个6种口味和16种以上语言的应用程序。如果这个图书馆不存在的话,那将是一场噩梦。

    他们有一个 tutorial 关于如何使用自定义区域设置:但简而言之:

        // Create a new Locale object
        Locale locale = new Locale("ru");
        Locale.setDefault(locale);
        // Create a new configuration object
        Configuration config = new Configuration();
        // Set the locale of the new configuration
        config.locale = locale;
        // Update the configuration of the Accplication context
        getResources().updateConfiguration(
            config, 
            getResources().getDisplayMetrics()
        );
    
        2
  •  1
  •   Vikrant Siwach    7 年前

    你想做的是:

    1. 以键值对的格式列出语言/区域设置方面的内容翻译。您可以在同一个文件中实现这一点,或者拥有单独的文件,并根据语言区域设置组合对其进行命名。我更喜欢后一种版本,更容易维护。

    2. 下一次在app init的时候,您想用

      Locale current = getResources().getConfiguration().locale;
      

      将这个值映射到上面创建的内容文件(根据框架的不同而不同),您就有了即时的本地化。