【问题标题】:Android emulator displays Hebrew resources correctly but device doesn'tAndroid 模拟器正确显示希伯来语资源,但设备没有
【发布时间】:2012-01-02 10:17:31
【问题描述】:

我想在我的应用程序中支持希伯来语资源(默认为英语)。 我在“res/values-iw/strings.xml”下分配了希伯来语资源,并在模拟器中对其进行了测试。结果很好 - 将模拟器语言切换为希伯来语后,我在我的应用程序中看到了希伯来语字符串。

问题是在将设备语言设置为希伯来语后,它没有出现在我的设备(Samsung Galaxy S2)中。我一直看到英文字符串。

有什么办法解决吗?

谢谢!

【问题讨论】:

  • 您有没有找到以相同方式本地化可绘制对象的解决方案?使用复制解决方案进行本地化会很昂贵...

标签: android


【解决方案1】:

尝试在 res/values-he/ 中添加一份来自 res/values-iw/ 的资源副本,同样适用于 res/xml-he / 等如果需要的话。

看起来三星 Galaxy S2 的操作系统处理希伯来语语言环境和资源的方式与其他 Android 设备不同。 Android 使用希伯来语的语言代码“iw”来实现旧版兼容性,而三星显然将其更改为使用语言代码“he”,根据 ISO 639-1,这可以说是正确的,但不兼容。有关更多背景信息,请参阅Android issue 3639

效果是 res/*-iw/ 中的资源没有加载到受影响的三星设备上,解决方法是在 res/* 中添加副本-他/.

要确认,试试这个:

Locale loc = new Locale("iw");
Log.i(TAG, "locale language: " + loc.getLanguage());
Log.i(TAG, "display language: " + loc.getDisplayLanguage());

这应该在普通 Android 设备上打印“iw”,在 Galaxy S2 上打印“he”,两者的显示语言为“עברית”。由于没有受影响的设备,我无法自己对此进行测试。

参见Hacker's Keyboard issue 122,它也受到同样问题的影响。

【讨论】:

  • 感谢您的回复。这在 API 10 (2.3.3) 中进行了测试。函数 getDisplayLanguage() 和 getDisplayCountry() 返回了正确的值。所以你是说这只是一个S2问题吗?我会继续在 S1 和一些 HTC 设备上进行测试。
  • 嗨,我在几台设备上检查过这个问题 - HTC、Galaxy S1、S2。所有具有root访问权限的设备都可以看到希伯来语字体,而所有没有更改ROM的“纯”设备都看不到希伯来语。另一个问题是,在所有 root 设备上我都看不到我的广告,而在非 root 设备上,我看到了广告
【解决方案2】:

模拟器安卓版和三星Galaxy S2版一样吗?

尝试找出在设备上转换为希伯来语后获得的区域设置语言和国家/地区。也许它不是 iw。

String lang = Locale.getLocale().getDisplayLanguage();
String country = Locale.getLocale().getDisplayCountry();

【讨论】:

    猜你喜欢
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多