【问题标题】:Localization of android application. One string resources for several countries安卓应用本地化。多个国家的一串资源
【发布时间】:2018-08-14 10:49:56
【问题描述】:

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

【问题讨论】:

标签: android localization android-resources android-location localizable.strings


【解决方案1】:

我强烈推荐使用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()
    );

【讨论】:

  • 谢谢,您能否提供一个指向您在 playmarket 中的应用程序的链接,以便尝试在不同的语言环境中进行测试?
  • @yozhik 不幸的是,我不能:我们不通过 GooglePlay 分发它,因为它是一家博彩公司,被 Google 政策禁止。你可以看看这里:fonbet.ru/get/?android(会自动开始下载)
  • Georgy,我还有一个问题:这种设置用户区域设置的解决方法是否可以在 Application 类之外工作(我需要在 Activity 中使用它)。我的意思是,如果我将在当前活动中切换到另一个语言环境并调用:getResources().updateConfiguration()。它会立即应用更改吗?或者我只需要重新创建这个 Activity,或者我需要杀死应用程序并重新启动它,同时获取以前保存到共享首选项的区域设置?
  • @yozhik 是也不是。它会立即更改,但是您必须重新加载当前屏幕或导航回/到另一个屏幕才能应用这些更改。关于此限制的解决方法可能很少,例如显示一个完全透明的片段并立即关闭它,以便应用正确显示
【解决方案2】:

你想做的是:

  1. 以键值对的格式提供语言/区域设置明智的内容翻译列表。您可以在同一个文件中实现此目的,也可以使用单独的文件并根据语言区域设置组合命名它们。我更喜欢后一个版本,更容易维护。

  2. 接下来在应用初始化时,您想使用

    读取手机的当前语言环境
    Locale current = getResources().getConfiguration().locale;
    

    将此值映射到上面创建的内容文件(因框架而异),您就可以立即进行本地化。

【讨论】:

  • 所以,我需要创建 strings-RU.xml、strings-UA.xml、strings-GE.xml(将包含俄语文本)和 strings.xml 将包含英文文本和字符串-SP.xml 哪个会有西班牙文本?正确的?但是我不明白如何根据当前的语言环境获取字符串资源。您能否提供代码以及关于我的 LoginRegistration 活动的代码,我需要在哪里编写代码,该活动在 Splash 活动之后立即开始?
  • 您可以检查启动活动本身的语言环境。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多