Firefox 3ではじめる拡張機能開発

第5回 localeパッケージによるローカライズ

この記事を読むのに必要な時間:およそ 5.5 分

PluralFormモジュールを使用した高度なローカライズ

やや高度な技術となりますが,ここからはFirefox 3の新機能のひとつであるPluralFormモジュールを使用した複数形を含む文字列のローカライズについて簡単に解説します。PluralFormモジュールについての詳細な解説は,下記URLを参照してください。

PluralFormモジュールの使用例として,⁠選択範囲からタグを生成」メニュー項目からタグを追加した後,⁠3個のタグを追加しました。」のようなメッセージを表示する機能を追加します。一見するとリスト9のようにタグの個数を引数としてstringbundle要素のgetFormattedStringメソッドを使用すれば良さそうに思えます。

リスト9 ⁠overlay.js」「generateTags」プロパティへの記述内容(タグの個数表示機能を追加)

generateTags: function() {

  (省略)

  alert(bundle.getFormattedString("ADDED", [keywords.length]));
},

このとき,日本語版の「overlay.properties」ファイルには,⁠ADDED=%S個のタグを追加しました。」という内容を追加すれば問題ありませんが,英語版の「overlay.properties」ファイルへ追加するべき内容は,タグの個数が単数の場合は「ADDED=%S tag was added.」となり,複数の場合は「ADDED=%S tags were added.」と2通りになってしまいます。Firefox 3自体が定義するJavaScriptコードモジュール注2のひとつであるPluralFormモジュールは,このような複雑な文法に対応したローカライズを可能にします。PluralFormモジュールを使用するには,まずリスト10のようにモジュールをインポートします。

注2)
JavaScriptコードモジュールについては,第4回の「JavaScriptコードモジュールを利用する」を参照してください。

リスト10 ⁠overlay.js」「init」プロパティへの記述内容(PluralFormモジュールのインポート)

init: function() {
  var contextMenu = document.getElementById("contentAreaContextMenu"); 
  contextMenu.addEventListener("popupshowing", this, false);
  Components.utils.import("resource://gre/modules/PluralForm.jsm");
},

次に,⁠overlay.js」「generateTags」プロパティへリスト11のように記述を追加・修正してください。

リスト11 ⁠overlay.js」「generateTags」プロパティへの記述内容(PluralFormモジュールの使用)

generateTags: function() {

  (省略)

  var numTags = keywords.length;
  var msg = PluralForm.get(numTags, bundle.getString("ADDED")); 
  msg = msg.replace("#1", numTags);
  alert(msg + "\n" + keywords.join(", "));
},

引き続き,各言語のpropertiesファイル「overlay.properties」「ADDED」キーの内容を追加します。英語版の「overlay.properties」ファイルには,リスト12のように単数形の場合の文字列と複数形の場合の文字列を「;」で区切って並べて記述します注3)⁠一方,日本語版の「overlay.properties」ファイルは単数形・複数形による文字列の違いがないため,リスト13のような記述を追加します。

注3)
言語によって記述すべきパターンの個数が決まっています。

リスト12 ⁠en-US」フォルダ内の「overlay.properties」への記述内容(ADDEDキーの追加)

ADDED=One tag was added.;#1 tags were added.

リスト13 ⁠ja-JP」フォルダ内の「overlay.properties」への記述内容(ADDEDキーの追加)

ADDED=#1個のタグが追加されました。

リスト11ではPluralForm.getメソッドの引数にタグの個数とstringbundle要素のgetStringメソッドで取得したメッセージの文字列を指定し,タグの個数が単数か複数かに応じた適切な文字列を取得します。さらに,取得した文字列中の「#1」をタグの個数に置換し,最後にalert関数でメッセージを表示します。

動作確認

PluralFormモジュールによって,タグの個数が単数か複数かに応じて適切な文字列が選択されることを確かめるには,日本語ではなく英語での動作確認が必要となります。そこで,まず「about:config」で設定値「general.useragent.locale」の値を「ja」から「en-US」に変更し,Firefoxを再起動後に以下の2点を確認してください。

  • ブックマーク済みのWebページ上で範囲をひとつだけ選択し,右クリックから「選択範囲からタグを生成」メニュー項目を選択すると,図5のようなメッセージが表示される。
  • ブックマーク済みのWebページ上でCtrlキーを押下しながら複数の範囲を選択し,右クリックから「選択範囲からタグを生成」メニュー項目を選択すると,図6のようなメッセージが表示される。

図5 ローカライズされたメッセージ(英語・単数形)

図5 ローカライズされたメッセージ(英語・単数形)

図6 ローカライズされたメッセージ(英語・複数形)

図6 ローカライズされたメッセージ(英語・複数形)

まとめと次回の予告

今回はlocaleパッケージを追加することで,拡張機能のUIの文言をローカライズ可能にし,日本語での表示ができるようにしました。DTDファイルによるローカライズ,propertiesファイルによるローカライズともに,拡張機能を開発するでは必須の技術といえるでしょう。

次回は,skinパッケージを追加して拡張機能のUIの装飾を行います。

著者プロフィール

Gomita

拡張機能開発者。
現在までにScrapBook,FoxAge2ch,Tab Scope,FireGesturesの4つをリリースしている。

URLhttp://www.xuldev.org/