You know, most of us in the world are natively speaking not English.
So I think that it would make sense to pre-configure Seam samples and seam-gen to produce ready-to-localize applications. I spent last Friday by figuring out how to fill this gap.
Here is my step-by-step localization guide compiled from different sources on net:
1) add new supported locale
in .../WEB-INF/faces-config.xml for example:
<locale-config> <default-locale>en</default-locale> <supported-locale>en</supported-locale> <supported-locale>de</supported-locale> <supported-locale>ru</supported-locale> </locale-config>
2) Create new messages files, in my example messages_de.properties and messages_ru.properties
The 1st obstacle that should be considered here: property files should be UTF-8 encoded and transformed into ASCII by escaping UTF-8 characters (mix of ISO char sets is not advisable in a multi-language web application).
Built-in Eclipse properties editor cannot handle this, so I've installed Resource Bundle editor from
http://sourceforge.net/projects/eclipse-rbe/ (thank you guys for excellent work!)
Alternatively you can use utility from JDK, e.g.:
native2ascii.exe -encoding utf-8 messages_ru.txt messages_ru.properties
3) Configure your code editors to use UTF-8.
For example in Eclipse 3.2 check settings under i. Window-Preferences-General-Workspace-Text and ii. Window-Preferences-Web and XML-CSS Files, HTML Files, JSP Files, XML Files
4) In order to enable UTF-8 in input fields (the 2nd big obstacle) you will need a phase listener (compensating bug in myfaces and(or) JSF components?) that re-sets request char set to UTF-8.
To do this follow instructions found in
(see also discussion here http://www.jboss.com/?module=bb&op=viewtopic&t=73369)
and activate the listener in the .../WEB-INF/faces-config.xml file, e.g.:
<lifecycle> <phase-listener>org.jboss.seam.jsf.SeamExtendedManagedPersistencePhaseListener</phase-listener> <phase-listener>com.xxx.yyy.zzz.util.UTF8PhaseListener</phase-listener> </lifecycle>
5) Set char set in template(s) to UTF-8:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" pageEncoding="UTF-8" />
6) The last, MySQL specific, obstacle eaten much time to find out a solution: force JDBC driver to use UTF-8, otherwise only ? characters will be saved in the database. So extend JDBC url in a data source file, e.g.:
<jndi-name>myDatasource</jndi-name> <connection-url>jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8&charactetrResultSets=utf8</connection-url> <driver-class>com.mysql.jdbc.Driver</driver-class>
7) Create database with default UTF-8 support, for example for MySQL:
CREATE DATABASE mydb DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
Note: probably you have to change default tables type to InnoDB for transactions support. You can do this by adding start parameter (or via MySQL configuration file). On SuSE 9.2 this can look so:
$bindir/mysqld_safe --datadir=$datadir --default-table-type=innodb --pid-file=$pid_file >/dev/null 2>&1 &
Ready, now you have your native language as static text, data input and database output.
I hope this small contribution will save you a couple of hours.
And I hope that others in this forum will follow my example and share their experience in more detail, not simply stating: "I've solved the problem XYZ!"