Come internazionalizzare e localizzare applicazioni Java

Scopri come configurare l’internazionalizzazione Java, tradurre i file .properties e automatizzare il tuo flusso di lavoro di localizzazione Java.

Come funziona l’internazionalizzazione Java

Il sistema i18n di Java si basa su due elementi:

  • .properties file che memorizzano le tue stringhe tradotte
  • La classe ResourceBundle che carica il file corretto in fase di esecuzione in base al locale dell’utente

Quando la tua app viene eseguita, ResourceBundle controlla il locale dell’utente e carica automaticamente il file corrispondente. Se manca una traduzione, torna al file predefinito in modo che nulla si interrompa.

Richiamare una stringa nel codice è semplice:

ResourceBundle bundle = ResourceBundle.getBundle("messages", Locale.FRENCH);
String greeting = bundle.getString("welcome.message");

Questo è l’intero meccanismo. Il resto del lavoro di localizzazione avviene nei file .properties stessi, ed è per questo che strutturarli correttamente è importante.

Configurazione del tuo Resource Bundle

Un resource bundle è un insieme di file .properties che condividono un nome base comune. Il nome base è la parte del nome del file prima del suffisso del locale ed è ciò che ResourceBundle.getBundle() usa per trovare il file corretto in fase di esecuzione.

messages.properties         # default (usually English)
messages_fr.properties      # French
messages_de.properties      # German
messages_es.properties      # Spanish

Qui, messages è il nome base. Puoi chiamarlo come vuoi, ma dovrebbe riflettere ciò che il file contiene. Le applicazioni più grandi spesso utilizzano più resource bundle per mantenere le cose organizzate:

src/main/resources/
  messages.properties
  errors.properties
  emails.properties

Java si aspetta un modello di denominazione specifico: basename_language.properties o basename_language_COUNTRY.properties per varianti regionali.

messages_fr.properties       # French
messages_fr_CA.properties    # French (Canada)
messages_pt_BR.properties    # Portuguese (Brazil)

I codici lingua seguono ISO 639-1 e i codici paese seguono ISO 3166-1. Usare il formato sbagliato significa che ResourceBundle non troverà il file in fase di esecuzione.

Strutturazione dei file Java .properties

Ogni riga in un file .properties è una coppia chiave-valore separata da =.

welcome.message = Welcome to our application
error.login.invalid_credentials = Invalid username or password
form.submit.button = Submit

Oltre a utilizzare coppie chiave-valore, è importante sapere che il modo in cui scrivi il tuo file sorgente influisce direttamente sulla qualità delle tue traduzioni. Alcune best practice si applicano sempre, indipendentemente dal fatto che tu stia traducendo manualmente o utilizzando uno strumento di traduzione AI come PTC.

1

Usa chiavi chiare e descrittive

Le chiavi dovrebbero rendere ovvio dove e come viene utilizzata una stringa. Questo è importante quando gestisci centinaia di stringhe su più file.

Uso errato delle chiavi:

btn1 = Submit 
msg2 = Error

Uso corretto delle chiavi:

form.submit.button = Submit 
error.login.invalid_credentials = Invalid username or password

2

Usa i placeholder per il contenuto dinamico

Scrivi la frase completa nel tuo file .properties e usa segnaposto numerati per il contenuto variabile invece di concatenare stringhe nel codice.

Errato (nel codice):

"Hello, " + username + "! You have " + count + " new messages." 

Corretto (nel file .properties):

dashboard.greeting = Hello, {0}! You have {1} new messages.

Molte lingue cambiano l’ordine delle parole e le regole di concordanza, quindi dividere le frasi in frammenti rende impossibile una traduzione corretta.

3

Gestisci la pluralizzazione con ChoiceFormat

Alcune stringhe cambiano a seconda di un valore numerico. Invece di scrivere chiavi separate per singolare e plurale, usa un pattern ChoiceFormat direttamente nel tuo file .properties:

messages.count = {0,choice,0#no messages|1#one message|1<{0} messages}

Java elabora questo pattern in fase di esecuzione e restituisce la forma corretta in base al valore passato.

4

Escape dei caratteri speciali

Caratteri come =, :, # e \ hanno un significato speciale nei file .properties:

  • = o : separa le chiavi dai valori
  • # o ! inizia un commento
  • \ introduce sequenze di escape (come \n per la nuova riga)

Se devi usare questi caratteri in una stringa, usa l’escape con una barra rovesciata.

support.link = Visit us at https\://support.example.com

5

Salva i file in UTF-8

Salva sempre i file .properties in UTF-8. Senza di esso, i caratteri non ASCII vengono corrotti e le traduzioni diventano illeggibili.

6

Mantieni tutto il testo visibile agli utenti fuori dal tuo codice

Se una stringa è visibile agli utenti, appartiene a un file .properties Le stringhe hardcoded non verranno tradotte e la tua app finirà per mostrare un mix di lingue.

Altre considerazioni sulla localizzazione Java

Non tutto ciò che deve essere localizzato si trova in un file .properties. Date, orari, numeri e valori di valuta vengono formattati nel codice in fase di esecuzione, e farli correttamente è importante tanto quanto le tue stringhe tradotte.

Java fornisce classi integrate per questo:

  • DateTimeFormatter per la formattazione di data e ora sensibile al locale
  • NumberFormat per numeri, percentuali e valori di valuta

Poiché questa guida si concentra sui file .properties e sulla loro traduzione, non li tratteremo in modo approfondito qui. La documentazione ufficiale di Java per DateTimeFormatter e NumberFormat è un buon punto di partenza.

Traduzione dei file Java .properties

Una volta che il tuo file sorgente è pronto, hai alcune opzioni per farlo tradurre. La scelta giusta dipende dal tuo budget, dalla tempistica e da quanta automazione ti serve.

OpzioneTempi di consegnaCostoEsigenze di manutenzione
Traduttori professionistiDa giorni a settimaneAltaEsportazione manuale, invio, ricezione e reintegrazione a ogni aggiornamento
Script di traduzioneMinutiBassaRichiede revisione – i segnaposto possono rompersi, il contesto per le traduzioni potrebbe essere sbagliato
Traduzione AI (come PTC)MinutiBassaLe traduzioni sensibili al contesto si sincronizzano automaticamente tramite Git o CI/CD

Con PTC, le traduzioni di qualità umana sono pronte in pochi minuti e non c’è abbonamento: paghi solo per ciò che traduci. Per iniziare, ottieni 20.000 parole tradotte in due lingue gratuitamente, senza carta di credito.

Dopo la registrazione, un wizard di configurazione ti guida attraverso le basi: una breve descrizione della tua applicazione, le tue lingue di destinazione e il tuo file .properties. L’intero processo richiede circa 5 minuti. Per una procedura completa, consulta la nostra guida introduttiva.

Dopo che PTC ha terminato la traduzione, vai alla scheda Resource Files e scarica un file ZIP con i file .properties tradotti.

Aggiungi questi file nella cartella src/main/resources del tuo progetto, insieme al tuo file sorgente originale. In fase di esecuzione, ResourceBundle seleziona automaticamente il file corretto in base al locale dell’utente. Non devi modificare il tuo codice.

Mantenere sincronizzate le traduzioni Java .properties

Tradurre il tuo file .properties una volta è semplice. E per quanto riguarda il mantenimento delle traduzioni aggiornate man mano che la tua applicazione evolve? Ogni volta che aggiungi una nuova stringa, aggiorni il testo esistente o rimuovi una chiave, i tuoi file tradotti devono riflettere quel cambiamento.

Farlo manualmente significa esportare i file, inviarli per la traduzione, aspettare e reintegrarli ogni volta, ed è per questo che la maggior parte dei team alla fine lo automatizza.

PTC offre due modi per automatizzare il processo di traduzione:

Integrazione Git

Collega il tuo repository GitHub, GitLab o Bitbucket a PTC e monitorerà il tuo file .properties sorgente per le modifiche. Quando una stringa viene aggiunta o aggiornata, PTC la traduce automaticamente e consegna i file di traduzione aggiornati tramite una pull request. Le tue traduzioni rimangono sincronizzate senza passaggi manuali.

Integrazione CI/CD

Se preferisci mantenere tutto all’interno del tuo processo di build esistente, l’API di PTC ti consente di caricare il tuo file sorgente e recuperare le traduzioni come parte del tuo job CI. Ogni build produce traduzioni aggiornate automaticamente.

Entrambi gli approcci significano che aggiungere una nuova lingua in seguito è solo una modifica di configurazione, non un nuovo processo manuale.

Pronto a localizzare la tua app Java?

I tuoi file .properties sono la base del tuo flusso di lavoro di localizzazione Java. Struttura correttamente, mantieni le tue traduzioni sincronizzate e la tua app può supportare nuove lingue senza rallentare il tuo ciclo di rilascio.

Se non hai ancora provato PTC, la prova gratuita è un buon punto di partenza. 20.000 parole, due lingue, senza carta di credito richiesta.

Scorri verso l'alto