ホームページ  >  記事  >  Java  >  Java の国際化

Java の国際化

PHPz
PHPzオリジナル
2024-07-31 09:00:41549ブラウズ

Internationalisation in Java

国際化 (i18n と略されることが多い) とは、コードにエンジニアリング変更を加えることなく、さまざまな言語、地域、文化に簡単に適応できるようにソフトウェアを設計および準備することを指します。通常、この後にローカリゼーション (l10n と略されることがよくあります) が続きます。これには、テキストの翻訳、現地の規則に合わせた調整、その他のロケール固有の要素の変更など、国際化されたソフトウェアを特定のロケールに適応させる作業が含まれます。

目標は、コア ロジックを言語や文化的慣習などのロケール固有の要素から分離することで、複数のロケールをサポートできる十分な柔軟性をソフトウェアに与えることです。

リソースバンドル

プレーン Java プログラムでのテキスト メッセージのローカライズは、プログラミング言語によって提供される ResourceBundle クラスを使用することで少し簡単になります。 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-resource-bundle の使用

Java プログラムでテキスト メッセージをローカライズするもう 1 つの方法は、サードパーティのライブラリを使用することです。そのようなライブラリの 1 つが 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 の 2 つの実装があります。どちらの実装も、Java ResourceBundle と同様に、指定されたベース名を使用してリソース バンドルにアクセスします。 ResourceBundleMessageSource は、メッセージ解析用の MessageFormat と組み合わせた Java の ResourceBundle 実装に依存することで、さまざまなロケールのリソース バンドルからのメッセージを解決します。

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-リソースバンドル
  • ソースコード: i18n-in-java

以上がJava の国際化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。