GWTのローカライズ(日本語対応の仕方)
公式(英語)に沢山方法が紹介されています。
ここでは、Constantsを元に日本語化する方法を説明します。
Eclipseを使いますので、日本語対応のプロパティーEditorをインストールしておいた方がいいです。
作成・修正するファイル
- Constantsを拡張したクラスを作成
- デフォルト(英語)の値を持つPropetyファイルを作成
- 日本語の値を持つPropertyファイルを作成
- 別途日本語版のHTMLを作成
- モジュールxmlに国際化モジュールの使用を追加
- Constantsのインスタンスを作成する部分をJavaコードに追加
例として以下の様なコードで日本語するとどうなるか説明します。
public String test(){
return "Hello";
}
Constantsを拡張したクラスを作成
名前は何でもいいのですが、プロパティーと揃えます。
メソッドで使用可能な文字列はそのまま使えます。
TextConstants.java
import com.google.gwt.i18n.client.Constants;
public interface TextConstants extends Constants {
public String Hello();
}
デフォルト(英語)の値を持つPropetyファイルを作成
Javaではおなじみのプロパティーファイルです。
TextConstants.properties
Hello=Hello
日本語の値を持つPropertyファイルを作成
日本語なので言語コードのjaをファイル名に付けます。
TextConstants_ja.properties
Hello=こんにちは
別途日本語版のHTMLを作成
日本語を使う場合、HTMLに別途localを明示するメタをhead部分に記述します。
<html>
<head>
<meta name="gwt:property" content="locale=ja">
..
</head>
<body>..</body>
</html>
モジュールxmlに国際化モジュールの使用を追加
国際化に対応するなら、I18Nを追加して、使用する言語も指定します。
<?xml version="1.0" encoding="UTF-8"?>
<module>
<inherits name="com.google.gwt.i18n.I18N"/>
<extend-property name="locale" values="ja"/>
..
</module>
Constantsのインスタンスを作成する部分をJavaコードに追加
GWT.createでインスタンスを作成します。
それに最初のサンプルと混ぜるとこうなります。
public class Dummy implements EntryPoint {
public static TextConstants textConstants=GWT.create(TextConstants.class);
public String test(){
return textConstants.Hello();
}
}
チップス
文字の置き換え方
Eclipseの置き換えで、探す文字列は "(.+?)"
置き換える文字列は textConstants.$1()
でそこそこうまく置き換わります。
別途スペースやハイフンなどの修正必要ですが
自動翻訳
プロパティーファイルは、Google 翻訳者ツールキットで一括翻訳可能です。
おまけ
私は、自作のテンプレート作成ツールで置き換えて作っています。
Input部分に置き換えたいキー一覧入れるだけで、上記の6つのファイルを生成してくれます。
まあ実際には、3つは内容固定なので、面倒なConstantsとpropertyを置き換えて生成してくれます。
テンプレート
##MULTI,false
##INPUT,0
##FILENAME,TextConstants.java
##HEADER
import com.google.gwt.i18n.client.Constants;
public interface TextConstants extends Constants {
##FOOTER
}
##ROW
public String ${_+value}();
##FILENAME,TextConstants.properties
##HEADER
##FOOTER
##ROW
${_+value}=${value}
##FILENAME,TextConstants_ja.properties
##HEADER
##FOOTER
##ROW
${_+value}=${value}
##FILENAME,Dummy.java
##HEADER
public class Dummy implements EntryPoint {
public static TextConstants textConstants=GWT.create(TextConstants.class);
public void list(){
##FOOTER
}
}
##ROW
textConstants.${_+value}();
##FILENAME,Dummy.html
##HEADER
<html>
<head>
<meta name="gwt:property" content="locale=ja">
##FOOTER
</head>
</html>
##ROW
##FILENAME,Dummy.gwt.xml
##HEADER
<?xml version="1.0" encoding="UTF-8"?>
<module>
<inherits name="com.google.gwt.i18n.I18N"/>
<extend-property name="locale" values="ja"/>
##FOOTER
</module>
##ROW