Hlavní menu

Nástroje

WebKiv / OpenCmsInternacionalizace

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

Updated 30 June 2009, 13:59 by PremekBrada

Internacionalizace aplikace

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.

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.


Zpět na FrameworkyProWebKiv