Hlavní menu

Nástroje

WebFav / I18n

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

Updated 22 February 2007, 17:39 by Ľubomír Kováč

WebFav.I18n History

Hide minor edits - Show changes to markup

22 February 2007, 17:39 by Ľubomír Kováč -
Changed lines 41-48 from:

Když jen upravíte jazykové hlášky a nezměníte klíče, tak se bez restartu budou zobrazovat staré jazykové hlášky.

to:

Když jen upravíte jazykové hlášky a nezměníte klíče, tak se bez restartu budou zobrazovat staré jazykové hlášky.

Pozor! Nebezpečí!

Ve verzi 6.2.2 sem narazil na napříjemné chování. Když zadáte escape sekvenci zanku v UTF-8 a místo \uXXXX zadáte třeba \uXXX, tak se vám už po restartu servru nepodaří přihlásit se a dostat se do systému.

V adresáři WEB-INF/classes/ si ale můžete najít posledně upravovaný properties soubor přeložený do class a tam ho smazat. Se štěstím se to povede. Bohužel se může stát, že dojde k revertu databáze podle poslední exportované verze.

Další možnost je dostat se do OpenCMS přez plugin do Eclipse? LaughingPanda a tam dohledat chybu a opravit ji, nebo se nabourat přímo do databáze (to ale budete muset být už opravdu zoufalí).

17 December 2006, 13:08 by Ľubomír Kováč -
Changed lines 2-3 from:

Vytvoříme si nový modul?. Necháme si vygenerovat základní adresáře pro práci. Pracovat budeme v adresáři pages. Naše I18N? *.properties soubory budou uložené v adresáři classes/{jmeno-modulu}/. Kde jmeno-modulu je adresářová struktúra odpovídající balíkům javovovských tříd podle zadaného názvu modulu např: cz.zcu.fav.kiv.

to:

Vytvoříme si nový modul?. Necháme si vygenerovat základní adresáře pro práci. Pracovat budeme v adresáři pages. Naše I18N? *.properties soubory budou uložené v adresáři classes/{jmeno-modulu}/. Kde jmeno-modulu je adresářová struktúra odpovídající balíkům javovských tříd podle zadaného názvu modulu např: cz.zcu.fav.kiv.

17 December 2006, 13:06 by Ľubomír Kováč -
Changed lines 2-3 from:

Vytvoříme si nový modul?. Necháme si vygenerovat základní adresáře pro práce. Pracovat budeme v adresáři pages. Naše I18N? *.properties soubory budou uložené v adresáři classes/{jmeno-modulu}/. Kde jmeno-modulu je adresářová struktúra odpovídající balíkům javovovských tříd podle zadaného názvu modulu např: cz.zcu.fav.kiv.

to:

Vytvoříme si nový modul?. Necháme si vygenerovat základní adresáře pro práci. Pracovat budeme v adresáři pages. Naše I18N? *.properties soubory budou uložené v adresáři classes/{jmeno-modulu}/. Kde jmeno-modulu je adresářová struktúra odpovídající balíkům javovovských tříd podle zadaného názvu modulu např: cz.zcu.fav.kiv.

13 December 2006, 18:58 by Ľubomír Kováč -
Changed lines 39-40 from:

Po každé úpravě *.properties souborů je NUTNÉ restartovat server. Jinak se *.properties nepřeloží a zobrazí se 500, protože server vyhodil výjimku, že nezná nové klíče.

to:

Po každé úpravě *.properties souborů je NUTNÉ restartovat server. Jinak classloader nezná *.properties a zobrazí se 500, protože server vyhodil výjimku, že nezná nové klíče.

13 December 2006, 03:11 by Ľubomír Kováč -
Changed lines 27-35 from:

TODO

to:

Scriplet dáva více volnosti v tom jak zvolit zdroje. Je možné se napojit najednou na několik zdrojů a podobně. K tomu samému slouží i taglib JSTL. Následující funguje v JSP bez problémů, bohužel OpenCMS si s tím neumělo poradit a tak je to jenom přání, aby to fungovalo.

V obou následujích případech předpokladám, že už máme získaný řetězec locale.

  1. Použijeme taglib fmt a to: <%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>. Přidáme do kontextu náš řetězec locale: pageContext.setAttribute("locale", locale); a můžeme definovat lokalizaci: <fmt:setLocale value="${locale}" />. Teď už jenom definujeme zdroj <fmt:setBundle basename="cz.zcu.fav.kiv.TestBundle" /> a voláme naše lokalizované texty: <fmt:message key="test.value01" />
  2. Použijeme jinou verzi fmt, která umožní použití direktív v definici locale a to <%@ taglib prefix="fmt_rt" uri="http://java.sun.com/jstl/fmt_rt" %>. Teď už můžeme použít: <fmt_rt:setLocale value="<%=locale%>" />. Vše ostatní je stejné jako v předchozím bode.

Kdybychom chtěli definovat více basename tak můžeme použít ještě atribut var: <fmt:setBundle basename="cz.zcu.fav.kiv.TestBundle" var="test" /> a pak když hledáme hlášku, tak přídáme atribut: <fmt:message key="test.value01" bundle="${test}"/>.

13 December 2006, 02:26 by Ľubomír Kováč -
Changed line 19 from:

TODO

to:
Changed line 27 from:
to:

TODO

13 December 2006, 02:24 by Ľubomír Kováč -
Added lines 1-33:

Příklady I18N?

Vytvoříme si nový modul?. Necháme si vygenerovat základní adresáře pro práce. Pracovat budeme v adresáři pages. Naše I18N? *.properties soubory budou uložené v adresáři classes/{jmeno-modulu}/. Kde jmeno-modulu je adresářová struktúra odpovídající balíkům javovovských tříd podle zadaného názvu modulu např: cz.zcu.fav.kiv.

Dál se samožrejmě můžeme zanořovat a vytvářet pod-adresáře podle libosti a podle toho rozlišit co k čemu náleží.

  1. V classes/{jmeno-modulu}/ vytvoříme
    • TestBundle.properties - defaultní jazyková mutace. Když není specifiková jazyková mutace, nebo hláška není nalezena v některé konkrétní jazykové mutace, nebo požadovaná jazyková mutace neexistuje, tak se použije tato jazyková verze.
    • TestBundle_de.properties - německá jazyková mutace
    • TestBundle_en.properties - anglická jazyková mutace
  2. V každém z vytvořených souborů si vytvoříme následující řádky
    • test.value01=***, *** je text v dané jazykové mutaci (ahoj, Hallo, hello)
    • test.value02=***, *** je text v dané jazykové mutaci (soused, Nachbar, neighbour)

Máme připravené lokalizované texte, které budeme zobrazovat podle lokalizace uživatelského prohlížeče.

V adresáři pages vytvoříme .jsp soubor. Máme několik možností jak zobrazit lokalizované texty:

  1. Scriplet
  2. JSTL

TODO

Scriplet

  1. Definujeme se nějakým způsobem lokalizaci, např.: Locale locale = Locale.ENGLISH; nebo Locale locale = new Locale("cs"); nebo jiným způsobem, který nám vyhovuje.
  2. Nalezneme zdroj: String bundle = jmeno-modulu + ".TestBundle";
  3. Spojíme se se zdrojem jazykových hlášek: ResourceBundle testBundle = PropertyResourceBundle.getBundle( bundle, locale );
  4. Upravíme import: <% page import="java.util.ResourceBundle, java.util.PropertyResourceBundle" %>
  5. Dál už voláme jazykové hlášky podle klíčů: <%= testBundle.getString("test.value01") %>

JSTL

Chyby

Když zadáte špatně zdroj, tak se místo lokalizovaného textu zobrazí text: ???test.value01???. Když však zadáte špatně klíč, tak server reaguje trošku radikálněji a to chybovou hláškou a chybou 500.

Důležité

Po každé úpravě *.properties souborů je NUTNÉ restartovat server. Jinak se *.properties nepřeloží a zobrazí se 500, protože server vyhodil výjimku, že nezná nové klíče.

Když jen upravíte jazykové hlášky a nezměníte klíče, tak se bez restartu budou zobrazovat staré jazykové hlášky.