国際化 (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);
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 インターフェースを提供します。 ResourceBundleMessageSource と ReloadableResourceBundleMessageSource の 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);
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 の国際化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。