【问题标题】:App name doesn't change language after user changes it programmatically用户以编程方式更改应用名称后,应用名称不会更改语言
【发布时间】:2018-01-05 19:21:22
【问题描述】:

我让我的用户有机会更改应用语言。我用这个:

public void languageToLoad(String language) {
    String lang = language;
    Locale locale = new Locale(lang);
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config,
            getBaseContext().getResources().getDisplayMetrics());
}

英语:languageToLoad(en) 或法语:languageToLoad(fr)

但我的问题是应用名称不会改变。

strings.xml(英文):

<string name="app_name">SoccerPro</string>

strings.xml(法国):

<string name="app_name">FootballPro</string>

每个字符串都会更改其值,但不会更改 'app_name'。

如果设备语言发生变化,那么它会发生变化,但不像我的方式。我做错了什么?

【问题讨论】:

  • “但我的问题是应用名称不会改变”——你在哪里寻找它来改变?
  • 在我设备的主屏幕上。在应用图标下
  • 您是否尝试过重启设备?

标签: java android string


【解决方案1】:

您对updateConfiguration() 的调用最多会影响您的流程。它不影响其他进程。这意味着除非您的应用主屏幕,否则主屏幕不会改变。 updateConfiguration() 不会在系统级别影响用户的语言,AFAIK 普通的 SDK 应用无法做到这一点。

【讨论】:

  • 所以没有办法做到这一点?
  • @Feuer1978:我不知道“那个”指的是什么,抱歉。
  • 以编程方式为主屏幕更改“app_name”的值
  • @Feuer1978:您可以尝试的唯一方法是在清单中包含 N 个 &lt;activity-alias&gt; 元素,每种语言一个,指向特定语言的字符串资源 name i>(例如,app_name_fr,而不仅仅是app_name)。每个都有MAIN/LAUNCHER&lt;intent-filter&gt;,但只会启用您的默认语言。然后,使用PackageManager 启用/禁用使所选语言的&lt;activity-alias&gt; 成为启用的组件。不过,并非所有主屏幕都会在不重新启动的情况下接受这一点。
  • @Feuer1978:除此之外,您甚至无法告诉主屏幕您想要一种不同的语言,更不用说让主屏幕知道它是什么语言以及要显示什么字符串。请记住,主屏幕实现有数百个,甚至数千个,因此您与它们交互的规范越多,您就越有可能遇到不一致的行为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 2015-02-21
相关资源
最近更新 更多