Java i18n – Internationalization in Java

L’internazionalizzazione in Java o Java i18n è una funzionalità molto importante. Java fornisce il supporto all’internazionalizzazione (i18n) attraverso i pacchetti di risorse.

Internazionalizzazione in Java

Per rendere la tua applicazione supportata in diverse lingue, è necessario creare un file di proprietà specifico per la lingua. I nomi dei file seguono il modello del nome del pacchetto con il codice della lingua e il codice del paese, ad esempio ApplicationMessages_en_US.properties. Una volta che i file di proprietà per le lingue specifiche sono pronti, tutto ciò che devi fare è inizializzare il pacchetto di risorse con la corretta lingua. Java fornisce due classi, java.util.ResourceBundle e java.util.Locale, che vengono utilizzate per questo scopo. ResourceBundle legge il file di proprietà specifico per la lingua e puoi ottenere il valore specifico per la lingua di qualsiasi chiave. Questo è molto utile per rendere i testi dell’applicazione web specifici per la lingua, puoi ottenere le informazioni sulla lingua dalla richiesta HTTP e generare la pagina dinamica con quei file di pacchetti di risorse specifici per la lingua. Puoi anche fornire all’utente l’opzione di scegliere la lingua e aggiornare le etichette dinamicamente.

Esempio di i18n in Java

Per l’esempio di java i18n, ho creato il progetto la cui struttura è come nell’immagine seguente. Ecco il codice Java per la classe JavaInternationalizationExample.

package com.journaldev.i18n;

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

public class JavaInternationalizationExample {

    public static void main(String[] args) {
        // locale predefinito
        ResourceBundle bundle = ResourceBundle.getBundle("ApplicationMessages");
        // Ottieni ResourceBundle con la Locale già definita
        ResourceBundle bundleFR = ResourceBundle.getBundle("ApplicationMessages", Locale.FRANCE);
        // Ottieni il resource bundle quando è necessario creare una nuova Locale
        ResourceBundle bundleSWE = ResourceBundle.getBundle("ApplicationMessages", new Locale("sv", "SE"));
        
        // stampiamo alcuni messaggi
        printMessages(bundle);
        printMessages(bundleFR);
        printMessages(bundleSWE);
        
    }

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

}

Il nome del bundle è ApplicationMessages e ho 2 resource bundle specifici per la lingua e un resource bundle predefinito. ApplicationMessages.properties

CountryName=USA
CurrencyCode=USD

ApplicationMessages_fr_FR.properties

CountryName=France
CurrencyCode=Euro

ApplicationMessages_sv_SE.properties

CountryName=Sweden
CurrencyCode=Kr

Osserva l’uso della classe Locale, ci sono alcune locale già definite, ma possiamo sempre crearne una nuova passando il codice lingua e il codice paese al suo costruttore. Quando eseguo il programma sopra, ecco l’output.

USA
USD
France
Euro
Sweden
Kr

Ecco tutto per un rapido esempio di java i18n. L’internationalization in Java è molto utile nelle applicazioni web per servire pagine nella lingua specifica della locale.

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