首頁 > Java > java教程 > 主體

Java 的國際化

PHPz
發布: 2024-07-31 09:00:41
原創
574 人瀏覽過

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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!