Stepan Roh napsal(a):
On Fri, 22 Dec 2006, Petr Kolesa wrote:
Stepan Roh napsal(a):
On Thu, 21 Dec 2006, Petr Kolesa wrote:
Ahoj,
chtel bych se zeptat, kde se da nastavit, resp. cim muze byt
ovlivneno, jak se jmenuje default resource bundle. V javadocu
java.util.ResourceBundle se pise, ze default resource proste nema
_xx cast. Jenze:
mam jednoduchou webapp a v ni dva resource soubory
messages.properties
messages_cs.properties
Kdyz spustim aplikaci na Win + Tomcat 5.0.28 + JDK 1.6, beha
vsechno podle predpokladu (tj s locale cs to bere hodnoty z
messages_cs.properties, pro ostatni locales hodnoty ze souboru
messages.properties)
Ale kdyz pustim aplikaci na Debian + Tomcat 5.0.30 + JDK 1.5.0_06,
bere to pro vsechny locales hodnoty ze souboru
messages_cs.properties. Kdyz pridam prazdny sobor
messages_en.properties, zacne to pro locale en fungovat podle
ocekavani. Ale napr pro locale fr, to stale cte hodnoty z
_cs.properties. Skoro to vypada, jako kdyby bylo nekde nastaveno,
ze pokud pro dane locale chybi messages_xx.properties, ma se brat _cs.
Netusite, kde hledat?
A neni to tak, ze mas treba LANG nastavene na cs a LC_ALL na en?
Podivej se, co pise prikaz locale.
LANG=cs_CZ.UTF-8
LC_CTYPE="cs_CZ.UTF-8"
....
LC_IDENTIFICATION="cs_CZ.UTF-8"
LC_ALL=
tj. LC_ALL neni nastaveny.
uplne z tech LC_xxx veci nejsem moudrej. Myslel jsem, ze java odtud
bere aktualni nastaveni pro resource bundle a ne nastaveni pro
defaultni (ve smyslu fall back) bundle.
Ani po porade s googlem nejsem o moc chytrejsi.
A zmenu na locale en provadis jak?
Stepan Roh
Jenom jestli si rozumime:
(zjednodusene) mam aplikaci, a k ni dva properties soubory s textama
(messages.properties a messages_cs.properties). V urcitej okamzik se
vola (neco jako) ResourceBundle.getBundle("messages", locale). Pokud
jsou locales 'cs', vraci to opravdu bundle odpovidajici messages_cs.
Pokud maji locales jakoukoli jinou hodnotu, vraci to bundle odpovidajici
messages_cs, zatimco ja bych potreboval, a z javadocu jsem nabyl dojem,
ze by to melo vracet locale odpovidajici messages.properties.
Viz java doc:
The family should have a default resource bundle which simply has the
same name as its family - "MyResources" - and will be used as the bundle
of last resort if a specific locale is not supported.
'Not supported' si vykladam jako 'neexistuje soubor
MyResources_xx.properties'
Takze odpoved na Tvoji otazku je: locale se meni v zavislosti na tom, co
zvoli uzivatel v aplikaci.
Problem je v tom, ze cely je to o neco komplikovanejsi. Jde o web
aplikaci na springu, takze (neco jako)
ResourceBundle.getBundle("messages", locale) se vola nekde hluboko v
kodu springu. Takze presne nevim, kdo tohle chovani zpusobuje.
Moznosti jsou takovyhle:
- muze za to spring. Vzhledem k tomu, ze spring dela jen wrapovani
kolem ResourceBundle z **java.util, zda se mi to nepravdepodobne
- muze za to kontajner, tedy Tomcat. Mozna je nekde magicke
nastaveni, ktere ovlivnuje, co se deje s 'not supported locale'
- mozna je to zpusobeno nekterym z parametru pri spousteni javy.
- je to mezi zidli a klavesnici
kolisko
**