Internationaliserar gränssnittssträngar internationalizing-ui-strings

Med API:erna för Java™ och JavaScript kan du internationalisera strängar med följande typer av resurser:

  • Java™-källfiler.
  • JSP-skript.
  • JavaScript i bibliotek på klientsidan eller i sidkällan.
  • Egenskapsvärden för JCR-nod som används i dialogrutor och komponentkonfigurationsegenskaper.

En översikt över internationaliseringen och lokaliseringsprocessen finns i Internationalisering av komponenter.

Internationalisering av strängar i Java™ och JSP Code internationalizing-strings-in-java-and-jsp-code

Med Java™-paketet com.day.cq.i18n kan du visa lokaliserade strängar i ditt användargränssnitt. Klassen I18n innehåller metoden get som hämtar lokaliserade strängar från Adobe Experience Manager (AEM)-ordlistan. Den enda obligatoriska parametern för metoden get är stränglitteralen på engelska. Engelska är standardspråk för användargränssnittet. I följande exempel lokaliseras ordet Search:

i18n.get("Search");

Att identifiera strängen på det engelska språket skiljer sig från vanliga internationaliseringsramverk där ett ID identifierar en sträng och används för att referera till strängen vid körning. Att använda den engelska stränglitteralen ger följande fördelar:

  • Kod är lätt att förstå.
  • Strängen i standardspråket är alltid tillgänglig.

Bestämma användarens språk determining-the-user-s-language

Det finns två sätt att avgöra vilket språk användaren föredrar:

  • För autentiserade användare anger du språket i inställningarna för användarkontot.
  • Språkinställningen för den begärda sidan.

Användarkontots language-egenskap är den metod som rekommenderas eftersom den är mer tillförlitlig. Användaren måste dock vara inloggad för att kunna använda den här metoden.

Skapa I18n Java™-objektet creating-the-i-n-java-object

I18n-klassen innehåller två konstruktorer. Hur du avgör vilket språk användaren föredrar avgör vilken konstruktor som ska användas.

Om du vill presentera strängen på det språk som anges i användarkontot använder du följande konstruktor (efter import av com.day.cq.i18n.I18n)):

I18n i18n = new I18n(slingRequest);

Konstruktorn använder SlingHTTPRequest för att hämta användarens språkinställning.

Om du vill använda sidans språkområde för att fastställa språket hämtar du först ResourceBundle för den begärda sidans språk:

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

Internationalisering av en sträng internationalizing-a-string

Använd metoden get för objektet I18n för att internationalisera en sträng. Den enda obligatoriska parametern för metoden get är strängen för internationalisering. Strängen motsvarar en sträng i en Translator-ordlista. get-metoden söker upp strängen i ordlistan och returnerar översättningen för det aktuella språket.

Det första argumentet för metoden get måste uppfylla följande regler:

  • Värdet måste vara en stränglitteral. En variabel av typen String kan inte accepteras.
  • Stränglitteralen måste uttryckas på en rad.
  • Strängen är skiftlägeskänslig.
i18n.get("Enter a search keyword");

Använda översättningstips using-translation-hints

Ange översättningstips för den internationaliserade strängen för att skilja mellan dubblettsträngar i ordlistan. Använd den andra valfria parametern för metoden get för att tillhandahålla översättningstipset. Översättningstipset måste exakt matcha kommentaregenskapen för objektet i ordlistan.

Ordlistan innehåller till exempel strängen Request två gånger: en gång som ett verb och en gång som ett substantiv. I följande kod inkluderas översättningstipset som ett argument i metoden get:

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

Inkludera variabler i lokaliserade meningar including-variables-in-localized-sentences

Inkludera variabler i den lokaliserade strängen för att skapa sammanhangsbaserad betydelse i en mening. När du har loggat in i ett webbprogram visas till exempel meddelandet "Welcome back Administrator" på startsidan. Du har två meddelanden i din inkorg." Sidkontexten bestämmer användarnamnet och antalet meddelanden.

I ordlistan representeras variablerna i strängar som index inom parentes. Ange värdena för variablerna som argument för metoden get. Argumenten placeras efter översättningstipset och indexen motsvarar argumentens ordning:

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

Den internationaliserade strängen och översättningstipset måste exakt matcha strängen och kommentaren i ordlistan. Du kan utelämna lokaliseringstipset genom att ange ett null-värde som det andra argumentet.

Använda metoden Statisk hämtning using-the-static-get-method

Klassen I18N definierar en statisk get-metod som är användbar när du måste lokalisera några strängar. Förutom parametrarna för ett objekts get-metod kräver den statiska metoden det SlingHttpRequest -objekt eller den ResourceBundle som du använder, enligt hur du avgör vilket språk som användaren föredrar:

  • Använd användarens språkinställning: Ange SlingHttpRequest som den första parametern.

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

  • Använd sidspråket: Ange ResourceBundle som den första parametern.

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

Internationalisering av strängar i JavaScript Code internationalizing-strings-in-javascript-code

Med JavaScript API kan du lokalisera strängar på klienten. Precis som med Java™- och JSP-kod kan du med JavaScript API identifiera strängar för lokalisering, tillhandahålla lokaliseringstips och ta med variabler i de lokaliserade strängarna.

Klientbiblioteksmappen granite.utils 🔗 innehåller JavaScript API. Om du vill använda API:t inkluderar du den här klientbiblioteksmappen på sidan. Lokaliseringsfunktioner använder namnutrymmet Granite.I18n.

Innan du presenterar lokaliserade strängar anger du språkområdet med funktionen Granite.I18n.setLocale. Funktionen kräver språkkoden för språkområdet som ett argument:

Granite.I18n.setLocale("fr");

Om du vill presentera en lokaliserad sträng använder du funktionen Granite.I18n.get:

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

I följande exempel internationaliseras strängen "Welcome back":

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

Funktionsparametrarna skiljer sig från Java™ I18n.get-metoden:

  • Den första parametern är stränglitteralen som ska lokaliseras.
  • Den andra parametern är en array med värden som ska matas in i stränglitteralen.
  • Den tredje parametern är lokaliseringstipset.

I följande exempel används JavaScript för att lokalisera administratören för välkomstsidan. Du har två meddelanden i din inkorg." mening:

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");

Internationalisering av strängar från JCR-noder internationalizing-strings-from-jcr-nodes

Gränssnittssträngar baseras ofta på egenskaper för JCR-noder. Egenskapen jcr:title för en sida används till exempel vanligtvis som innehåll för elementet h1 i sidkoden. Klassen I18n innehåller metoden getVar för att lokalisera strängarna.

Följande exempel på JSP-skript hämtar egenskapen jcr:title från databasen och visar den lokaliserade strängen på sidan:

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

Ange översättningstips för JCR-noder specifying-translation-hints-for-jcr-nodes

Ungefär som översättningstips i Java™ API kan du ange översättningstips för att skilja på dubblettsträngar i ordlistan. Ange översättningstipset som en egenskap för noden som innehåller den internationaliserade egenskapen. Namnet på tipsegenskapen består av namnet på den internationella egenskapen med suffixet _commentI18n:

${prop}_commentI18n

En cq:page-nod innehåller till exempel egenskapen jcr:title som lokaliseras. Tipset anges som värdet för egenskapen jcr:title_commentI18n.

Testa täckningen för internationalisering testing-internationalization-coverage

Testa om du har internationaliserat alla strängar i användargränssnittet. Om du vill se vilka strängar som täcks anger du användarspråket till zz_ZZ och öppnar användargränssnittet i webbläsaren. De internationaliserade strängarna visas med en stub-översättning i följande format:

USR_*Default-String*_尠

I följande bild visas stub-förflyttningen för AEM hemsida:

chlimage_1

Konfigurera språkegenskapen för inställningsnoden för användarkontot för att ställa in språket för användaren.

Noden preferences för en användare har en sökväg som den här:

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

chlimage_1-1

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2