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 output

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 -> WebFav.Eclipse-u ]] [[ LaughingPanda -> WebFav.OpenCMSVFSInEclipse ]] 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 -> WebFav.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 -> WebFav.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 -> WebFav.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 -> WebFav.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@].

#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" />@]
#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 -> WebFav.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ží.

#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
#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:
#Scriplet
#JSTL
*TODO*
!!!Scriplet
#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.
#Nalezneme zdroj: [@ String bundle = jmeno-modulu + ".TestBundle";@]
#Spojíme se se zdrojem jazykových hlášek: [@ResourceBundle testBundle = PropertyResourceBundle.getBundle( bundle, locale );@]
#Upravíme import: [@<% page import="java.util.ResourceBundle, java.util.PropertyResourceBundle" %>@]
#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.