JavaME国际化(i18n)

3

有人对JavaME国际化有了解吗?我正在寻找尽可能多的信息,例如示例、经验和最佳实践。 谢谢。

4个回答

3
一些想法。J2ME不支持i18n,因为API支持不够(无法使用资源包)。但我们可以在有限的范围内做到这一点。以下是我发现的内容。
  1. 对于给定的J2ME应用程序,支持英语和中文等语言(印刷字符)是困难的,如果不是不可能的。但是支持英语和西班牙语(我忘记了正确的术语来谈论i18n支持,但您明白我的意思)更容易。
  2. 我们可以将所有字符串放在一个配置类中,这样您就可以将其替换为不同的语言。
  3. 我们可以在应用程序的初始启动时从服务器下载文本/字符串,从而具有从服务器替换它的能力。
  4. 由于屏幕大小不同,最好使用自定义字体,以便编写代码来计算显示文本的长度。这将使多种语言支持更加容易。
  5. 可以根据不同的语言从服务器下载图像资产。但我认为我们无法更改MIDlet图标,因此它应该是通用的。
有了这些想法,设计多语言支持就成为了可能。

谢谢,我会记住你的建议。 只有一件事,关于第三点,这将是一个问题,因为它需要Midlet被签名,否则设备会抱怨并要求授权。 - Stefano Driussi
我假设所有的应用程序都是已签名的,但这在大多数运营商(至少在美国)使用J2ME时是一个不幸的方面。他们要求应用程序在进行网络连接时必须进行签名。 - omermuhammed

1

请查看JavaME的实际国际化规范:http://www.jcp.org/en/jsr/detail?id=238

最近的塞班手机应该支持此功能。

一个明显的建议是在本地化手机上实际尝试您的应用程序:从瑞士获取一部手机(它应该支持至少4种语言),另一部手机来自香港(具有3种不同版本的“中文”)。也值得研究东欧或前苏联等地区。

当实际字符不是您通常使用的ASCII字符时,您需要使用TextBox或TextField以便在屏幕上拥有本地化的本地控件。


1

omemuhammed的回答是关于移动端本地化的优秀覆盖。

我只需要支持EFIGS(英语,法语,意大利语,德语和西班牙语)。我们将所有字符串存储在XML中,每种语言都有一个XML包。然后,我们将这些XML包编译成专有的二进制数据,并能够构建5种语言的构建,仅在应用程序大小紧张的情况下为构建选择一种语言,或从服务器下载二进制文件。

本地化的其他考虑因素是屏幕布局。我还建议使用自定义字体,以便更好地控制在许多不同设备上的显示。您将需要一些自动换行代码,以便能够适应不同的屏幕分辨率和纵横比,并且您需要一种处理在某些设备上超出屏幕的字符串的方法。分页或滚动都是不错的解决方案。

最后,请知道德语会破坏您的格式。尝试在英语菜单和其他UI元素中留出20-30%的填充空间,因为德语翻译将比其他语言长得多。


非常感谢,我之前不知道德语翻译的问题。 - Stefano Driussi

0
请记住,当您使用RTL(从右到左)语言,例如阿拉伯语时,您应该反转屏幕上几乎所有东西的位置,例如在拉丁语言中,列表将如下所示:
  • 列表项1
  • 列表项2
  • 列表项3
但是在阿拉伯语中,项目符号会出现在屏幕的另一侧(我试图在这里制作一个倒置列表,但无法生成:P)。
另外一件事是最好将字符串存储在类中而不是纯文本属性中,因为这可能会导致某些语言的Unicode在使用的操作系统和文本编辑器中解释错误。
我通常做的是有一个I18nManager类,在startApp中存储语言,并通过此类获取所需的所有字符串。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接