Hlavní menu
Nástroje |
WebKiv.OpenCmsInternacionalizace HistoryHide minor edits - Show changes to markup 30 June 2009, 13:59
by
- 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:
29 June 2009, 23:17
by
- 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. InstalaceNení třeba instalovat nic nad rámec Spring frameworku verze 2.0 a vyšší. KonfiguraceDo 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 čarouInternacionalize 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. |