你如何处理国际化“你的输入'xyz'非常棒!”

时间:2010-07-21 15:04:50

标签: java android internationalization

我想知道在添加运行时数据的语句中处理国际化的正确方法是什么。例如 1)您的输入“xyz”非常好! 2)当你从“Barney and Freinds”改为“Spongebob”节目时,你已经“4岁了”。

双引号值是在运行时获取或计算的用户数据。我的平台主要是Java / Android。西方语言的正确解决方案优于较弱的通用语言。

3 个答案:

答案 0 :(得分:12)

爪哇

要检索本地化文本(消息),请使用java.util.ResourceBundle API。要格式化消息,请使用java.text.MessageFormat API。

基本上,首先像这样创建一个properties file

key1 = Your input {0} is excellent!
key2 = You were {0} old when you switched from {1} to {2} shows.

{n}内容是参数的占位符,因为您可以通过MessageFormat#format()传入。

然后加载它:

ResourceBundle bundle = ResourceBundle.getBundle("filename", Locale.ENGLISH);

然后按键获取消息,执行:

String key1 = bundle.getString("key1");
String key2 = bundle.getString("key2");

然后格式化它,执行:

String formattedKey1 = MessageFormat.format(key1, "xyz");
String formattedKey2 = MessageFormat.format(key2, "4 years", "Barney and Friends", "Spongebob");

另见:


的Android

关于Android,这个过程更容易。您只需将所有String条消息放入res/values/strings.xml文件即可。然后,您可以使用不同语言创建该文件的版本,并将该文件放在包含语言代码的values文件夹中。例如,如果您想添加西班牙语支持,则只需创建一个名为res/values-es/的文件夹,并将strings.xml的西班牙语版本放在那里。 Android会自动决定使用哪个文件,具体取决于手机的配置。

另见:

答案 1 :(得分:3)

一个非技术性考虑因素。在英语短语中嵌入免费数据在许多文化(包括西方语言)中看起来不会很顺利,在这些文化中你需要语法上的协议。数量,性别或案例。更多的电报风格通常有帮助(例如优秀输入:“xyz”) - 然后至少每个人都获得相同程度的笨拙!

答案 2 :(得分:0)

我认为可能必须定义一个格式字符串以包括“1-of-N”特征,优选地定义以便使普通情况容易(例如复数)。例如,如果参数0为零或更小,则定义{0#string1 / string2 / string3}以输出string1;如果它精确为1,则定义string2;如果大于1,则定义string3}。然后可以说“你在抽屉里有{0} {0#刀/刀/刀}。”