Met Java- en Javascript-API's kunt u tekenreeksen internationaliseren in de volgende typen bronnen:
Zie Componenten internationaliseren voor een overzicht van het internationalisatie- en lokalisatieproces.
Met het Java-pakket com.day.cq.i18n
kunt u gelokaliseerde tekenreeksen weergeven in uw gebruikersinterface. De klasse I18n
biedt de methode get
waarmee gelokaliseerde tekenreeksen uit het AEM-woordenboek worden opgehaald. De enige vereiste parameter van de methode get
is het letterlijke koord in de Engelse taal. Engels is de standaardtaal voor UI. In het volgende voorbeeld wordt het woord Search
gelokaliseerd:
i18n.get("Search");
Het identificeren van de tekenreeks in de Engelse taal verschilt van gangbare internationalisatiekaders waar een id een tekenreeks identificeert en wordt gebruikt om bij uitvoering naar de tekenreeks te verwijzen. Het gebruik van de letterlijke Engelse tekenreeks biedt de volgende voordelen:
Er zijn twee manieren om de taal te bepalen die de gebruiker verkiest:
Het taalbezit van de gebruikersrekening is de aangewezen methode omdat het betrouwbaarder is. Nochtans, moet de gebruiker worden het programma geopend om deze methode te gebruiken.
De klasse I18n biedt twee constructors. Hoe u de aangewezen taal van de gebruiker bepaalt de te gebruiken aannemer.
Als u de tekenreeks wilt presenteren in de taal die in de gebruikersaccount is opgegeven, gebruikt u de volgende constructor (na het importeren van com.day.cq.i18n.I18n)
:
I18n i18n = new I18n(slingRequest);
De constructor gebruikt SlingHTTPRequest
om de taalinstelling van de gebruiker op te halen.
Om de paginalandaal te gebruiken om de taal te bepalen, moet u eerst ResourceBundle voor de taal van de gevraagde pagina verkrijgen:
Locale pageLang = currentPage.getLanguage(false);
ResourceBundle resourceBundle = slingRequest.getResourceBundle(pageLang);
I18n i18n = new I18n(resourceBundle);
Gebruik de methode get
van het object I18n
om een tekenreeks te internationaliseren. De enige vereiste parameter van de methode get
is de tekenreeks die moet worden geïnternationaliseerd. De tekenreeks komt overeen met een tekenreeks in een Vertaalwoordenboek. De methode get zoekt de tekenreeks op in het woordenboek en retourneert de vertaling voor de huidige taal.
Het eerste argument van de methode get
moet aan de volgende regels voldoen:
String
is niet aanvaardbaar.i18n.get("Enter a search keyword");
Geef de vertaalhint van de geïnternationaliseerde tekenreeks op om onderscheid te maken tussen dubbele tekenreeksen in het woordenboek. Gebruik de tweede, optionele parameter van de methode get
om de vertaalhint op te geven. De vertaalhint moet exact overeenkomen met de eigenschap Opmerking van het item in het woordenboek.
De woordenlijst bevat bijvoorbeeld de tekenreeks Request
tweemaal: eenmaal als werkwoord en eenmaal als zelfstandig naamwoord. De volgende code omvat de vertaalwenk als argument in de get
methode:
i18n.get("Request","A noun, as in a request for a web page");
Neem variabelen op in de gelokaliseerde tekenreeks om contextuele betekenis in een zin op te nemen. Nadat u zich bijvoorbeeld hebt aangemeld bij een webtoepassing, wordt op de homepage het bericht "Welkom terug Administrator" weergegeven. U hebt 2 berichten in uw Postvak IN." De paginacontext bepaalt de gebruikersnaam en het aantal berichten.
In het woordenboek worden de variabelen in tekenreeksen weergegeven als gehaakte indexen. Geef de waarden van de variabelen op als argumenten van de methode get
. De argumenten worden na de vertaalhint geplaatst, en de indexen beantwoorden aan de orde van de argumenten:
i18n.get("Welcome back {0}. You have {1} messages.", "user name, number of messages", user.getDisplayName(), numItems);
De geïnternationaliseerde tekenreeks en de vertaalhint moeten exact overeenkomen met de tekenreeks en de opmerking in het woordenboek. U kunt de lokalisatietip weglaten door als tweede argument een null
-waarde op te geven.
De klasse I18N
definieert een statische methode get
die nuttig is wanneer u een klein aantal tekenreeksen moet lokaliseren. Naast de parameters van de methode get
van een voorwerp, vereist de statische methode SlingHttpRequest
of ResourceBundle
die u gebruikt, volgens hoe u de aangewezen taal van de gebruiker bepaalt:
Gebruik de taalvoorkeur van de gebruiker: Verstrek SlingHttpRequest als eerste parameter.
I18n.get(slingHttpRequest, "Welcome back {}. You have {} messages.", "user name, number of messages", user.getDisplayName(), numItems);
De paginataal gebruiken: Verstrek ResourceBundle als eerste parameter.
I18n.get(resourceBundle,"Welcome back {}. You have {} messages.", "user name, number of messages", user.getDisplayName(), numItems);
Met de Javascript-API kunt u tekenreeksen lokaliseren op de client. Net als met Java- en JSP-code, kunt u met de Javascript API tekenreeksen identificeren die u kunt lokaliseren, lokalisatietips opgeven en variabelen opnemen in de gelokaliseerde tekenreeksen.
De granite.utils
clientbibliotheekmap biedt de Javascript-API. Als u de API wilt gebruiken, neemt u deze clientbibliotheekmap op de pagina op. Localisatiefuncties gebruiken de naamruimte Granite.I18n
.
Voordat u gelokaliseerde tekenreeksen aanbiedt, moet u de landinstelling instellen met de functie Granite.I18n.setLocale
. De functie vereist de taalcode van de landinstelling als argument:
Granite.I18n.setLocale("fr");
Als u een gelokaliseerde tekenreeks wilt presenteren, gebruikt u de functie Granite.I18n.get
:
Granite.I18n.get("string to localize");
In het volgende voorbeeld wordt de tekenreeks "Welcome back" geïnternationaliseerd:
Granite.I18n.setLocale("fr");
Granite.I18n.get("string to localize", [variables], "localization hint");
De functieparameters verschillen van de Java I18n.get-methode:
In het volgende voorbeeld wordt Javascript gebruikt om de welkomstbeheerder te lokaliseren. U hebt 2 berichten in uw Postvak IN." zin:
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");
UI-tekenreeksen zijn vaak gebaseerd op eigenschappen van JCR-knooppunten. De eigenschap jcr:title
van een pagina wordt bijvoorbeeld doorgaans gebruikt als de inhoud van het element h1
in de paginacode. De klasse I18n
biedt de methode getVar
voor het lokaliseren van deze tekenreeksen.
In het volgende voorbeeld haalt het JSP-script de eigenschap jcr:title
op uit de gegevensopslagruimte en wordt de gelokaliseerde tekenreeks op de pagina weergegeven:
<% title = properties.get("jcr:title", String.class);%>
<h1><%=i18n.getVar(title) %></h1>
Net als vertaalhints in de Java API kunt u vertaalhints opgeven om dubbele tekenreeksen in het woordenboek te onderscheiden. Geef de vertaaltip op als een eigenschap van het knooppunt dat de geïnternationaliseerde eigenschap bevat. De naam van de eigenschap hint bestaat uit de naam van de geïnternationaliseerde eigenschapnaam met het achtervoegsel _commentI18n
:
${prop}_commentI18n
Een cq:page
-knooppunt bevat bijvoorbeeld de eigenschap jcr:title die wordt gelokaliseerd. De hint wordt opgegeven als de waarde van de eigenschap met de naam jcr:title_commentI18n.
Test of u alle tekenreeksen in uw gebruikersinterface hebt geïnternationaliseerd. Als u wilt zien welke tekenreeksen worden bestreken, stelt u de gebruikerstaal in op zz_ZZ en opent u de gebruikersinterface in de webbrowser. De geïnternationaliseerde tekenreeksen worden weergegeven met een sectie in de volgende indeling:
USR_*Default-String*_尠
In de volgende afbeelding ziet u de stub-vertaling voor de AEM homepage:
Om de taal voor de gebruiker te plaatsen, vorm het taalbezit van de voorkeurenknoop voor de gebruikersrekening.
Het voorkeurenknooppunt van een gebruiker heeft een pad als volgt:
/home/users/<letter>/<hash>/preferences