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 markup

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:
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.