Hlavní menu

Nástroje

WebKiv / OpenCmsInternacionalizace

View (print) - Edit page | Recent changes - Page history

Updated 30 June 2009, 13:59 by PremekBrada

WebKiv.OpenCmsInternacionalizace History

Hide minor edits - Show changes to output

30 June 2009, 13:59 by PremekBrada -
Changed lines 3-4 from:
Čas od času je jeden z požadavků na modul jeho internacionalize, tedy potřeba mít modul ve více jazykových mutacích. K tomu je zde tento návod.
to:
Ve SpringMVC controlleru nejde dosáhnout na L10N properties spravované ve OpenCms VFS. K samostatnému řešení pro tento případ je zde tento návod.
30 June 2009, 09:21 by JaroslavPavuk -
Added lines 91-94:


----
Zpět na FrameworkyProWebKiv
29 June 2009, 23:17 by Tomas Peterka -
Added lines 1-90:
!Internacionalizace aplikace

Čas od času je jeden z požadavků na modul jeho internacionalize, tedy potřeba mít modul ve více jazykových mutacích. K tomu je zde tento návod.

!!!Instalace
Není třeba instalovat nic nad rámec Spring frameworku verze 2.0 a vyšší.

!!!Konfigurace
Do souboru ''web.xml'' je třeba přidat následující kód:

[@
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>messages</param-value>
</context-param>
@]

Díky tomuto kontextovému parametru je možno používat lokalizační tagy v rámci jsp stránek.

Pak se v applicationContext.xml musí přidat tyto tři beany:

[@
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages" />
</bean>

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="cookieName" value="language"/>
</bean>

<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="language"/>
</bean>
@]

První beana definuje jméno souboru s "messageSources". Properta basename odpovídá jménu souboru s lokalizovanými stringy, v tomto případě by šlo pro anglické locale o soubor ''''messages_en.properties, který musí být umístěn v adresáři ''classes''. Druhá beana říká, že o změnu jazyka se bude starat třída ''[=CookieLocaleResolver=]'' ze Springu, která bude kontrolovat definované cookie. A třetí beana je definování interceptoru, opět z rodinu Springu.

Dále je třeba upravit mapovací beanu v *-servlet.xml následujícím způsobem:

[@
<bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="interceptors">
<list>
<ref bean="localeChangeInterceptor"/>
</list>
</property>
<property name="mappings">
...
@]

Tímto se před předáním řízení controlleru provede kontrola nastavení Locale.

Dále je třeba mít připraven kratký javaScript, který se stará o nastavení cookie a je přístupný z každé jsp stránky:

[@
function zmenaJazyka(jazyk) {
var dnu = 14;
var datum = new Date(); // ziska aktualni datum v milisekundach
datum.setTime(datum.getTime() + 1000 * 60 * 60 * 24 * dnu); // k datu prida pocet dni
document.cookie ="language="+jazyk+"; path=/; expires=" + datum.toGMTString();
location.reload(true);
}
@]

K uvedenému javasriptu se dá přistupovat například přes následující kód:

[@
<a href="" onclick="javascript:zmenaJazyka('cs');" title="Cestina">Cs</a> |
<a href="" onclick="javascript:zmenaJazyka('de');" title="Deutsch">De</a> |
<a href="" onclick="javascript:zmenaJazyka('en');" title="English">En</a>
@]

Tento jazykový "panel" může být například vložen přes ''<%@ include file="*.jsp" %>''.

Nyní k vlastním zprávám v jsp stránkách. Každá stránka musí mít na začátku uveden následující kód:

[@
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
@]

Vlastní lokalizační zprávy vypadají následovně:

[@
<fmt:message key="osobyprehled.nadpis" />
@]

Každému klíči musí náležet záznam v souborech ''messages_xx.properties''.

!!!Poznámka pod čarou
Internacionalize aplikace se dá řešit i jinými způsoby. Ne vždy můsí být vhodné použití cookies, proto je možné použít řešení internacionalize přes objekt session nebo url parametr. Popis řešení je ale nad rámec tohoto dokumentu.