Internazionalizzazione delle stringhe di interfaccia utente

Le API Java e Javascript consentono di internazionalizzare le stringhe nei seguenti tipi di risorse:

  • File Java sorgente.
  • Script JSP.
  • Javascript nelle librerie lato client o nell'origine pagina.
  • Valori delle proprietà del nodo JCR utilizzati nelle finestre di dialogo e nelle proprietà di configurazione del componente.

Per una panoramica del processo di internazionalizzazione e localizzazione, vedere Internazionalizzazione dei componenti.

Internazionalizzazione delle stringhe in Java e codice JSP

Il pacchetto Java com.day.cq.i18n consente di visualizzare stringhe localizzate nell'interfaccia utente. La classe I18n fornisce il metodo get che recupera le stringhe localizzate dal dizionario AEM. L'unico parametro richiesto del metodo get è il valore letterale di stringa nella lingua inglese. L’inglese è la lingua predefinita per l’interfaccia utente. L'esempio seguente localizza la parola Search:

i18n.get("Search");

L'identificazione della stringa nella lingua inglese è diversa dai tipici framework di internazionalizzazione in cui un ID identifica una stringa e viene utilizzato per fare riferimento alla stringa in fase di esecuzione. L'utilizzo del valore letterale di stringa inglese offre i seguenti vantaggi:

  • Il codice è facile da capire.
  • La stringa nella lingua predefinita è sempre disponibile.

Definizione della lingua dell'utente

Esistono due modi per determinare la lingua preferita dall'utente:

  • Per gli utenti autenticati, stabilite la lingua dalle preferenze nell'account utente.
  • Le impostazioni internazionali della pagina richiesta.

La proprietà language dell'account utente è il metodo preferito perché è più affidabile. Tuttavia, l'utente deve aver eseguito l'accesso per utilizzare questo metodo.

Creazione dell'oggetto Java I18n

La classe I18n fornisce due costruttori. Il modo in cui viene determinato il linguaggio preferito dall'utente determina il costruttore da utilizzare.

Per presentare la stringa nella lingua specificata nell'account utente, utilizzare il seguente costruttore (dopo l'importazione di com.day.cq.i18n.I18n):

I18n i18n = new I18n(slingRequest);

Il costruttore utilizza SlingHTTPRequest per recuperare l'impostazione della lingua dell'utente.

Per utilizzare le impostazioni internazionali della pagina per determinare la lingua, è innanzitutto necessario ottenere ResourceBundle per la lingua della pagina richiesta:

Locale pageLang = currentPage.getLanguage(false);
ResourceBundle resourceBundle = slingRequest.getResourceBundle(pageLang);
I18n i18n = new I18n(resourceBundle);

Internazionalizzazione di una stringa

Utilizzare il metodo get dell'oggetto I18n per internazionalizzare una stringa. L'unico parametro richiesto del metodo get è la stringa da internazionalizzare. La stringa corrisponde a una stringa in un dizionario di traduttori. Il metodo get cerca la stringa nel dizionario e restituisce la traduzione per la lingua corrente.

Il primo argomento del metodo get deve essere conforme alle seguenti regole:

  • Il valore deve essere un valore letterale di stringa. Una variabile di tipo String non è accettabile.
  • La stringa letterale deve essere espressa su una sola riga.
  • La stringa fa distinzione tra maiuscole e minuscole.
i18n.get("Enter a search keyword");

Utilizzo dei suggerimenti di traduzione

Specificare il hint di traduzione della stringa internazionalizzata per distinguere tra stringhe duplicate nel dizionario. Utilizzate il secondo parametro opzionale del metodo get per fornire il suggerimento di conversione. Il suggerimento di traduzione deve corrispondere esattamente alla proprietà Commento dell'elemento nel dizionario.

Ad esempio, il dizionario contiene due volte la stringa Request: una volta come verbo e una come sostantivo. Il codice seguente include il suggerimento di conversione come argomento nel metodo get:

i18n.get("Request","A noun, as in a request for a web page");

Inclusione di variabili nelle frasi localizzate

Includete le variabili nella stringa localizzata per creare un significato contestuale in una frase. Ad esempio, dopo aver effettuato l'accesso a un'applicazione Web, nella home page viene visualizzato il messaggio "Benvenuti all'amministratore. Hai 2 messaggi nella tua inbox." Il contesto della pagina determina il nome utente e il numero di messaggi.

Nel dizionario, le variabili sono rappresentate in stringhe come indici tra parentesi. Specificare i valori delle variabili come argomenti del metodo get. Gli argomenti vengono inseriti dopo il suggerimento di traduzione e gli indici corrispondono all'ordine degli argomenti:

i18n.get("Welcome back {0}. You have {1} messages.", "user name, number of messages", user.getDisplayName(), numItems);

La stringa internazionalizzata e il suggerimento di traduzione devono corrispondere esattamente alla stringa e al commento nel dizionario. Potete omettere il suggerimento di localizzazione fornendo un valore null come secondo argomento.

Utilizzo del metodo Get statico

La classe I18N definisce un metodo statico get che è utile quando è necessario localizzare un numero limitato di stringhe. Oltre ai parametri del metodo get di un oggetto, il metodo statico richiede l'oggetto SlingHttpRequest o la ResourceBundle che si sta utilizzando, in base a come si determina la lingua preferita dell'utente:

  • Utilizzate le preferenze della lingua dell'utente: Fornite SlingHttpRequest come primo parametro.

    I18n.get(slingHttpRequest, "Welcome back {}. You have {} messages.", "user name, number of messages", user.getDisplayName(), numItems);

  • Utilizzate la lingua della pagina: Fornisci ResourceBundle come primo parametro.

    I18n.get(resourceBundle,"Welcome back {}. You have {} messages.", "user name, number of messages", user.getDisplayName(), numItems);

Internazionalizzazione delle stringhe nel codice JavaScript

L'API Javascript consente di localizzare le stringhe sul client. Come per il codice Java e JSP, l'API Javascript consente di identificare le stringhe da localizzare, fornire suggerimenti per la localizzazione e includere variabili nelle stringhe localizzate.

La granite.utils cartella della libreria client fornisce l'API Javascript. Per utilizzare l'API, includete questa cartella libreria client nella pagina. Le funzioni di localizzazione utilizzano lo spazio dei nomi Granite.I18n.

Prima di presentare le stringhe localizzate, è necessario impostare le impostazioni internazionali utilizzando la funzione Granite.I18n.setLocale. La funzione richiede il codice della lingua dell'impostazione internazionale come argomento:

Granite.I18n.setLocale("fr");

Per presentare una stringa localizzata, utilizzare la funzione Granite.I18n.get:

Granite.I18n.get("string to localize");

L'esempio seguente internazionalizza la stringa "Welcome back":

Granite.I18n.setLocale("fr");
Granite.I18n.get("string to localize", [variables], "localization hint");

I parametri della funzione sono diversi dal metodo Java I18n.get:

  • Il primo parametro è il valore letterale di stringa da localizzare.
  • Il secondo parametro è una matrice di valori da inserire nella stringa letterale.
  • Il terzo parametro è il suggerimento di localizzazione.

Nell'esempio seguente viene utilizzato Javascript per localizzare "Welcome back Administrator". Hai 2 messaggi nella tua inbox." frase:

Granite.I18n.setLocale("fr");
Granite.I18n.get("Welcome back {0}. You have {1} new messages in your inbox.", [username, numMsg], "user name, number of messages");

Internazionalizzazione delle stringhe dai nodi JCR

Le stringhe dell'interfaccia utente si basano spesso sulle proprietà dei nodi JCR. Ad esempio, la proprietà jcr:title di una pagina viene in genere utilizzata come contenuto dell'elemento h1 nel codice della pagina. La classe I18n fornisce il metodo getVar per localizzare queste stringhe.

Lo script JSP di esempio seguente recupera la proprietà jcr:title dall'archivio e visualizza la stringa localizzata sulla pagina:

<% title = properties.get("jcr:title", String.class);%>
<h1><%=i18n.getVar(title) %></h1>

Specifica dei suggerimenti di traduzione per i nodi JCR

Simili ai suggerimenti di traduzione nell'API Java, potete fornire suggerimenti di traduzione per distinguere le stringhe duplicate nel dizionario. Fornire il suggerimento di conversione come proprietà del nodo che contiene la proprietà internazionalizzata. Il nome della proprietà hint è composto dal nome della proprietà internazionalizzata con il suffisso _commentI18n:

${prop}_commentI18n

Ad esempio, un nodo cq:page include la proprietà jcr:title localizzata. L'hint viene fornito come valore della proprietà denominata jcr:title_commentI18n.

Verifica della copertura di internazionalizzazione

Verificare se sono state internazionalizzate tutte le stringhe nell’interfaccia utente. Per vedere quali stringhe sono coperte, impostate la lingua utente su zz_ZZ e aprite l’interfaccia nel browser Web. Le stringhe internazionalizzate vengono visualizzate con una traduzione stub nel seguente formato:

USR_*Default-String*_尠

L'immagine seguente mostra la traduzione stub per la pagina principale AEM:

chlimage_1

Per impostare la lingua per l'utente, configurate la proprietà della lingua del nodo delle preferenze per l'account utente.

Il nodo delle preferenze di un utente ha un percorso simile al seguente:

/home/users/<letter>/<hash>/preferences

chlimage_1-1

In questa pagina

Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now