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


**

Odpovedet emailem