月曜日 1 28, 2008

OpenSolaris では、Subversion または Mercurial が使われています。ちょっと前までは Team Ware で sccs や bringover コマンドを叩いていて、CVS を使ったりしていましたが、そろそろ Mercurial を使う時でしょうか。

詳しい事は本家のページを読むと分かります。ですが、私は最初分散レポジトリ、というのが想像つかなくて、しばらくハテナマークが頭の中を飛びました。レポジトリのコピーも、全ての履歴を持っていて、しかも作業ディレクトリとは別個になっているんですね。Child Workspace を自分の好きな様にローカルに作れるので、ちょっとだけ Team Ware に似ているかもしれません。

OpenSolaris での使い方は、ここ に載っています。SUNWmercurial というパッケージは、Solaris Express にも入っています。

試しに、G11N のソースを持ってきてみました。

  • $ hg clone ssh://anon-AT-hg.opensolaris-DOT-org/hg/nv-g11n/g11n g11n
ちょっと時間がかかりますが、ちゃんと持って来られました。

木曜日 1 10, 2008

ローカライズメッセージを java のプロパティファイルを使って表示する場合、apostrophe の取り扱いで、問題が起こる事があります。前からある注意点なのですが、最近もまた同じもので引っかかってしまいました。

MessageFormat クラス の String 中での単一引用符(') のエスケープの仕方がちょっと変わっていて、単一引用符(') を2つ重ねて('')エスケープします。ResourceBundle を使って property ファイルから翻訳メッセージを拾い、MessageFormat を使って表示する場合に、このエスケープ処理を property ファイル中でしておく必要があります。Unicode を指定して他の似た文字(\u2032 や \u2018, \u2019)を使う方法もありますが、UTF-8 以外の ISO-8859-1 等で表示する場合がある時は、該当する文字が 8859-1 のキャラクターセットにないので使えません。
逆に MessageFormat クラスを使わずに、ResourceBundle で得たメッセージを表示する場合は、単一引用符はそのまま表示されますので、どの単一引用符でも2つ重ねておけばいいということでもありません。 MessageFormat クラス の「警告」の所には、ローカライズ対象メッセージにコメントを書いておいて翻訳者に知らせるように書いてありますね。

中括弧({}) を使ったメッセージの場合は、MessageFormat を使っている場合が多いでしょうから、これを目安にしてエラーを検出する手もあります。

あと、Java Script の中で ResourceBundle を使って property ファイルから翻訳された文字を使う場合も翻訳には気をつける必要があります。単一引用符(') などの特殊文字が翻訳された文字列の中だけに現れると、そこで Java Script が hang することがあります。単一引用符だけでなく、改行文字(\n)なども、適切にエスケープしてあげないと、望みの表示が得られなくなります。

This blog copyright 2008 by kazuhiko