我想知道在添加运行时数据的语句中处理国际化的正确方法是什么。例如 1)您的输入“xyz”非常好! 2)当你从“Barney and Freinds”改为“Spongebob”节目时,你已经“4岁了”。
双引号值是在运行时获取或计算的用户数据。我的平台主要是Java / Android。西方语言的正确解决方案优于较弱的通用语言。
答案 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,这个过程更容易。您只需将所有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#刀/刀/刀}。”