首页 > Java > java教程 > Java 的国际化

Java 的国际化

PHPz
发布: 2024-07-31 09:00:41
原创
587 人浏览过

Internationalisation in Java

国际化(通常缩写为 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 中添加以下依赖项

<dependency>
    <groupId>io.github.jelilio</groupId>
    <artifactId>i18n-resource-bundle</artifactId>
    <version>0.0.2</version>
</dependency>
登录后复制

如果您更喜欢 Gradle,请使用它;

implementation 'io.github.jelilio:i18n-resource-bundle:0.0.2'
登录后复制

消息源

i8n-resource-bundle 提供了 MessageSource 接口,它定义了几种解析消息的方法。它有两个实现,ResourceBundleMessageSourceReloadableResourceBundleMessageSource。两种实现都使用类似于 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™ 教程 - 隔离特定于语言环境的数据
  • 国际化资源包
  • 源代码:i18n-in-java

以上是Java 的国际化的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板