Java i18n – Международная локализация в Java

Интернационализация в Java или Java i18n – очень важная функция. Java предоставляет поддержку интернационализации (i18n) через ресурсные пакеты.

Интернационализация в Java

Для обеспечения поддержки различных локалей в вашем приложении необходимо создать файлы свойств для каждой конкретной локали. Имена файлов следуют шаблону имени пакета с кодом языка и кодом страны, например ApplicationMessages_en_US.properties. Как только файлы свойств для конкретных локалей будут готовы, вам просто нужно будет инициализировать ресурсный пакет с правильной локалью. Java предоставляет два класса java.util.ResourceBundle и java.util.Locale, которые используются для этой цели. ResourceBundle читает файл свойств для конкретной локали, и вы можете получить значение для любого ключа, специфичное для этой локали. Это очень полезно для сделать тексты вашего веб-приложения специфичными для локали; вы можете получить информацию о локали из HTTP-запроса и создать динамическую страницу с файлами ресурсных пакетов для этой локали. Вы также можете предоставить пользователю возможность выбора локали и динамически обновлять метки.

Пример Java i18n

Для примера java i18n я создал проект, структура которого похожа на изображение ниже. Вот java-код класса JavaInternationalizationExample.

package com.journaldev.i18n;

import java.util.Locale;
import java.util.ResourceBundle;

public class JavaInternationalizationExample {

    public static void main(String[] args) {
        //локаль по умолчанию
        ResourceBundle bundle = ResourceBundle.getBundle("ApplicationMessages");
        //Получить ResourceBundle с уже определенной локалью
        ResourceBundle bundleFR = ResourceBundle.getBundle("ApplicationMessages", Locale.FRANCE);
        //Получить ресурсный пакет, когда требуется создать локаль
        ResourceBundle bundleSWE = ResourceBundle.getBundle("ApplicationMessages", new Locale("sv", "SE"));
        
        //давайте выведем некоторые сообщения
        printMessages(bundle);
        printMessages(bundleFR);
        printMessages(bundleSWE);
        
    }

    private static void printMessages(ResourceBundle bundle) {
        System.out.println(bundle.getString("CountryName"));
        System.out.println(bundle.getString("CurrencyCode"));
    }

}

Здесь имя пакета – ApplicationMessages, и у меня есть 2 локально-специфичных ресурсных пакета и один ресурсный пакет по умолчанию. ApplicationMessages.properties

CountryName=USA
CurrencyCode=USD

ApplicationMessages_fr_FR.properties

CountryName=France
CurrencyCode=Euro

ApplicationMessages_sv_SE.properties

CountryName=Sweden
CurrencyCode=Kr

Обратите внимание на использование класса Locale, уже определены некоторые локали, но мы всегда можем создать новую локаль, передавая код языка и код страны в его конструктор. Когда я запускаю программу выше, вот что выводится.

USA
USD
France
Euro
Sweden
Kr

Вот и все для быстрого примера java i18n. Интернационализация в java очень полезна в веб-приложениях для отображения страниц на локально-специфичных языках.

Source:
https://www.digitalocean.com/community/tutorials/java-i18n-internationalization-in-java