国际化(通常缩写为 i18n)是指设计和准备软件以轻松适应各种语言、地区和文化,而不需要对代码进行工程更改。接下来通常是本地化(通常缩写为 l10n),其中涉及使国际化软件适应特定的语言环境,包括翻译文本、调整本地约定以及修改其他特定于语言环境的元素。
我们的目标是通过将核心逻辑与特定于语言环境的元素(如语言和文化约定)分离,使软件足够灵活以支持多种语言环境。
资源包
使用编程语言提供的 resourcebundle 类在普通 java 程序中本地化文本消息有点简单。 resourcebundle 类可以轻松加载属性文件中定义的特定于区域设置的键值属性。这些属性文件称为资源包.
resourcebundle resources =
resourcebundle.getbundle("messages", locale.france);
string greeting = resources.getstring("greeting.hello");
assertequals("bonjour le monde", greeting);
string greetingusername =
messageformat.format(resources.getstring("greeting.username"), "ayo");
assertequals("bonjour ayo", greetingusername);
登录后复制
使用 i8n 资源包
在 java 程序中本地化文本消息的另一种方法是使用第三方库。 i18n-resource-bundle 就是此类库之一。该库是前面讨论的 resourcebundle 的实现。
依赖性
如果您使用 maven,请在 pom.xml 中添加以下依赖项
io.github.jelilioi18n-resource-bundle0.0.2登录后复制
如果您更喜欢 gradle,请使用它;
implementation 'io.github.jelilio:i18n-resource-bundle:0.0.2'
登录后复制
消息源
i8n-resource-bundle 提供了 messagesource 接口,定义了多种解析消息的方法。它有两个实现,resourcebundlemessagesource和reloadableresourcebundlemessagesource。两种实现都使用类似于 java resourcebundle 的指定基本名称来访问资源包。 resourcebundlemessagesource 依靠 java 的 resourcebundle 实现结合 messageformat 进行消息解析,将消息解析为不同语言环境的资源包。
resourcebundlemessagesource messagesource =
new resourcebundlemessagesource();
messagesource.setbasenames("messages");
string greeting = messagesource
.getmessage("greeting.hello", null, locale.france);
assertequals("bonjour le monde", greeting);
string greetingusername = messagesource
.getmessage("greeting.username", new string[]{"ayo"}, locale.france);
assertequals("bonjour ayo", greetingusername);
登录后复制
reloadableresourcebundlemessagesource
与 resourcebundlemessagesource 不同,reloadableresourcebundlemessagesource 使用 java 的 properties 实例作为消息的自定义数据结构,使用不同的策略加载它们,允许根据时间戳更改和特定字符编码重新加载属性文件,而无需重新启动应用程序。
ReloadableResourceBundleMessageSource messageSource =
new ReloadableResourceBundleMessageSource();
messageSource.setBasenames("messages");
String greeting = messageSource
.getMessage("greeting.hello", null, Locale.FRANCE);
assertEquals("Bonjour le monde", greeting);
String greetingUsername = messageSource
.getMessage("greeting.username", new String[]{"Ayo"}, Locale.US);
assertEquals("Bonjour Ayo", greetingUsername);
登录后复制
结论
在本简短指南中,我们学习了使用resourcebundle?和 i18n-resource-bundle 在 java 应用程序中实现国际化 (i18n)。我们了解了如何根据提供的区域设置名称解析资源包,并看到了一个实际示例。
立即学习“Java免费学习笔记(深入)”;
参考
java? 教程 - 隔离特定于区域设置的数据
i18n-资源包
源代码:i18n-in-java
以上就是Java 的国际化的详细内容,更多请关注php中文网其它相关文章!
RichardTrugs4 天前
发表在:Java webservice多个参数怎么调用https://t.me/s/TgWin...
Charlesunwip6 天前
发表在:Java webservice多个参数怎么调用https://t.me/s/onewi...
Melvinhaf27 天前
发表在:07日27日,星期日,在这里每天60秒读懂世界!Get Blockchain Insur...
JosephAnype29 天前
发表在:07日24日,星期四,在这里每天60秒读懂世界!Get answer on your q...
CurtisPoozy2 个月前
发表在:关于我们Некоторые вебмастера...
Tommypoike3 个月前
发表在:关于我们hi
AmandaIncaboraa5 个月前
发表在:关于我们"我很想找出激励你的东西。 和我聊天 h...
AmandaIncabora25 个月前
发表在:关于我们我在等你的留言! 过来打个招呼! ...
AmandaIncaborac6 个月前
发表在:关于我们让我们今晚难忘...你的地方还是我的? ...
BryanDen6 个月前
发表在:关于我们Самый быстрый и безо...