Multijezičnost - Upute: .Properties Fajlovi Su Zapravo Samo Fajlovi Koji Sadrže Key-Value Parove Prijevoda

You might also like

Download as odt, pdf, or txt
Download as odt, pdf, or txt
You are on page 1of 3

MULTIJEZIČNOST - UPUTE

Grails aplikacije čuvaju stringove prijevoda za jezike u .properties fajlovima.

Fajlovi za svaki jezik se nalaze u grails-app/i18n direktoriju.

Npr. za španjolski jezik fajl se zove: messages_es.properties jer je es locale string za španjolski
jezik (en je za engleski, it za talijanski, pl za poljski itd.)

.properties fajlovi su zapravo samo fajlovi koji sadrže key-value parove prijevoda:

npr. u datoteci messages_en.properties (engleski jezik) imamo definiran key-value string:

label.permissions=Permissions

ukoliko želimo isti string na njemačkom jeziku, onda samo u messages_de.properties dodamo isti
string i promijenimo prijevod, key ostaje isti:

label.permissions=Berechtigungen

Trenutni jezik aplikacije se može promijeniti ako se doda ?lang=localeOdJezika na kraj URL-a,
npr. želimo postaviti hrvatski kao trenutni jezik:

http://conciergetest.hotelstouch.com:9005/concierge/node/index?lang=hr

Za dohvatiti neku poruku u kontroleru:

flash.error = message(code: “label.item.does.not.exist”)

grails će automatski dohvatiti jezik iz request parametra i vratiti prevedenu poruku na trenutno
odabrani jezik, tako da ga se ne mora posebno vaditi.

Za dohvatiti neku poruku u servisu:

treba prvo definirati unutar klase servisa messageSource objekt messageSource:

MessageSource messageSource

nakon toga se može u bilo kojoj metodi u servisu dohvatiti poruka na sljedeći način:

UserLoginData uld = UserLoginData.getCurrent()


messageSource.getMessage("label.permissions ", null, new Locale(uld.getCurrentLocale()))

napravljeno je da se u UserLoginData zapamti trenutni locale jezika, s tim da je u string tipu


podatka a kod dohvaćanja iz servisa treba poslati baš objekt klase Locale!
Za dohvatiti neku poruku u gsp-u:

<div class="profile-data" data-title="${g.message(code: "label.permissions")}">

Pomoćne metode I servisi:

InternationalizationHelperService – servis za dohvaćanje message stringova, sadrži 2 metode:

getAllMessageCodes(Locale loc) – metoda koja za proslijeđeni Locale vraća listu HashMap


objekata s key-value parovima svih poruka za jezik proslijeđenog Locale parametra, npr.

getAllMessageCodes(Locale(“de”))

[
{labelKey: “label.permissions”, labelValue: “Berechtigungen”},
{labelKey: “label.rooms”, labelValue: “Zimmer”}
]

getMessageCodesByLabelType(Locale loc, String labelType) – metoda koja za proslijeđeni


Locale I labelType vraća listu HashMap objekata s key-value parovima gdje key-evi započinju kao
labelType. Npr imate key-value stringove:

messages_en.properties

label.dateranges.last.week=Last week
label.dateranges.yesterday=Yesterday
label.dateranges.last.month=Last month
label.dateranges.custom=Custom

messages_de.properties

label.dateranges.last.week=Letzte Woche
label.dateranges.yesterday=Gestern
label.dateranges.last.month=Vergangenen Monat
label.dateranges.custom=maßgeschneidert

ukoliko se pozove metoda:

def dateRanges = getMessageCodesByLabelType(Locale(“de”), “label.dateranges”)

dobije se rezultat:

[
{labelKey: “label.dateranges.last.week”, labelValue: “Letzte Woche”, originalValue: “Last week”},
{labelKey: “label.dateranges.yesterday”, labelValue: “Gestern”, originalValue: “Yesterday”},
{labelKey: “label.dateranges.last.month”, labelValue: “Vergangenen Monat”, originalValue: “Last
month”},
{labelKey: “label.dateranges.custom”, labelValue: “Maßgeschneidert”, originalValue: “Custom”}
]
Primjer:

<div class="hotelstouch-filter hotelstouch-selector"


data-label="${g.message(code: "label.date.range")}">

<g:each in="${dateRanges}" var="dr" status="i">

<input type="radio" name="dateRangeType" value="${dr["originalValue"]}"


id="dr_${i}"
${us?.defaultDateRange == dr["originalValue"] ? "checked":""}>

<label for="dr_${i}" class="hotelstouch-selector-option"


data-label="${dr["labelValue"]}"></label>

</g:each>

</div>

promijeniti nazive da budu bolje formatirani

wrapper metoda za dohvaćanje poruke, ako ne postoji da se dohvati na engleskom jeziku

You might also like