gpt4 book ai didi

java - 以编程方式更改区域设置在某些设备中不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:38:32 28 4
gpt4 key购买 nike

我有以下代码:

/**
* Sets a new Locale for the APP.
* @param newLocale - Valid new locale.
*/
private static void setLocale( String newLocale )
{
Locale locale = new Locale( newLocale );
Locale.setDefault( locale );

Configuration config = new Configuration();
config.locale = locale;

context.getResources().updateConfiguration( config, context.getResources().getDisplayMetrics() );
}

简单。

但是,当我在智能手机 (4.1.1) 中运行它时,它确实可以完美运行。设备更改字符串以匹配语言。

但是对于平板电脑 (4.3),它不起作用。如果我输出类似:

Log.d("TAG",Locale.getDefault());

两种设备上的语言环境似乎都发生了变化,但正如我所说,字符串没有被翻译成正确的语言。

我做了很多调试,发现了对象之间的差异:查看 4.1.1 上的 Configuration 对象:

enter image description here

并检查平板电脑上的配置对象 (4.3) enter image description here

如您所见,唯一显着的区别是 userSetLocale 在平板电脑上设置为 False。

所以我检查了 Google 源代码 ( https://github.com/android/platform_frameworks_base/blob/master/core/java/android/content/res/Configuration.java ),它指出:

 /**
* Locale should persist on setting. This is hidden because it is really
* questionable whether this is the right way to expose the functionality.
* @hide
*/
public boolean userSetLocale;

看起来这对我有影响。因此,由于我无法访问此值,也无法通过 getter/setter 或公共(public)访问访问,因此我使用反射来更改它。

然而,在通过反射更改它之后,即使我看到它在内部发生了变化(反射后 boolean 值设置为 false),同样的问题仍然存在。

你们有什么建议吗?

同时我会继续测试。

谢谢。测试:

  • Nexus 10 - 4.4.2 - 正常
  • Nexus 5 - 4.4.2 - 正常
  • 平板电脑 320 dpi - 4.4.2 - OK
  • 智能手机 480 dpi - 4.3 - OK
  • 智能手机 160 dpi - 4.1.1 - OK
  • 平板电脑 160 dpi - 4.3 - 不正常
  • 智能手机 320 dpi - 4.1.1 - OK

最佳答案

这是我用于本地化的代码。它被超过 100 万人使用,从未听说过任何关于不更改字符串的投诉,所以我希望它也对你有用:

一流的:

Locale myLocale;

函数:

    public void setLocale(String lang) { 
myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
reloadUI(); // you may not need this, in my activity ui must be refreshed immediately so it has a function like this.
}

函数调用:

//example for setting English
setLocale("en_gb");

关于java - 以编程方式更改区域设置在某些设备中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23131499/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com