OSTRACISM CO.

C#とObjective-CとJavaと...

ローカリゼーション

 .NETもCocoaもJavaもテキストの扱いはUNICODEベースになっているため、普通にプログラムを書くとそれは概ね国際化対応になっている。国際化(インターナショナリゼーション)に気を付けるべき点は色々あるのだが、日付もお金も関係ないGraphicGripGropはそのまま国際化対応である。
 残るは地域化(ローカリゼーション)の方で、.NETもCocoaもJavaもそれなりに工夫した仕組みを用意している。少なくともプログラマが独自に云々という状況はない。

C#

 System.Windows.Forms.FormクラスにLocalizableプロパティがあり、これをtrueにすることでFormの持つ文字列が.resxファイルに追い出され、複数言語対応にできるようになり、Languageの(規定値)以外の言語を選ぶことで対応言語を追加できる。
m_rmStrings = new ResourceManager("GGG4W.Resource1", GetType().Assembly);
...
this.btnSearch.Text = m_rmStrings.GetString("RS_SEARCH");
 この.resxファイルの仕組みは独自に利用できて、名前を指定してインスタンス化したSystem.Resources.ResourceManagerクラスを使って、ローカライズされた文字列を得ることができる。

Objective-C

 Xcodeにて.nibファイルの情報を見ると、言語環境を追加のボタンがある。言語を追加するとデフォルト(English)の.nibの複製が新しい言語用に用意され、それを編集することになる。ウィンドウやダイアログのリソースが多重化される(すなわちメンテナンス性が低い)のでできるだけローカリゼーションは先延ばしにしたいところだ。
[btnSearch setTitle:NSLocalizedString(@"Search", @"")];
 Licalizable.stringsという特別な名前のファイルを用意するとNSLocalizedString関数(実体はマクロ)でローカライズされた文字列を得ることができる。

Java

 NetBeansではウィンドウやダイアログのGUI部品のtextプロパティにて、StringEditorからリソースバンドルにモードを変えるとPropertiesクラスを使った仕組みで複数言語対応にできるようになる。いちいち指示をGUI部品単位でしなくてはいけないのはあんまりで、要改善であろう。
btnSearch.setText(java.util.ResourceBundle.getBundle(m_bundlePath).getString("btnSearch"));
 java.util.ResourceBundleクラスは上記ではResourceからResource.propertiesというファイルを元に文字列を持ってくるが、例えば日本語環境だとResource_ja.propertiesの優先度が上がる。  ただ、NetBeansの問題か、Javaの問題かは不明だが、
btnSearch=\u691C\u7D22
のように日本語はエスケープされる必要があり、直接は書けない。メンテナンス性は皆無ということだ。
 Java版GraphicGripGrop の日本語化はちょっと挫折しかかった。

2005.08.03
「インデックス」へ戻る

OSTRACISM CO.
OSTRA / Takeshi Yoneki