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

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

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

前回まででタグヘルパー拡張機能の実装は完了しましたが,新しく追加したメニュー項目やダイアログの文言はすべて英語のままとなっています。今回はlocaleパッケージを追加することで,これらの文言をローカライズ可能にし,日本語での表示ができるようにします。なお,第5回完成時点でのソースファイルは,下記URLから入手可能です。

ソースファイルのフォルダ構成

前回までは,第2回で説明した「クロムと3種類のパッケージ」のうち,contentパッケージのみ使用しました。今回は,localeパッケージを追加します。localeパッケージのソースファイルは「locale」フォルダ内に作成した言語別のサブフォルダ内に格納します。したがって,第5回完成時点での各種ソースファイルのフォルダ構成は図1のようになります。また,第5回で新たに作成するソースファイルの概要を表1に示します。

図1 第5回完成時点でのフォルダ構成

図1 第5回完成時点でのフォルダ構成

表1 第5回で新たに作成するソースファイルの概要

ファイル名概要
overlay.dtd overlay.xulにて使用する実体参照を定義したDTDファイル。
overlay.properties overlay.jsにて使用するローカライズ可能文字列を定義したpropertiesファイル。

localeパッケージの追加

localeパッケージを追加するために,クロムマニフェストへリスト1の内容を追加してください。

リスト1 クロムマニフェストへの記述内容1(localeパッケージの追加)

content  taghelper  content/
locale  taghelper  en-US  locale/en-US/ 
locale  taghelper  ja-JP  locale/ja-JP/ 
overlay  chrome://browser/content/browser.xul  chrome://taghelper/content/overlay.xul 

リスト1の2行目が英語版(en-US)のlocaleパッケージを登録するための宣言です。パッケージ名が「taghelper」,localeパッケージ内のソースファイルを格納したフォルダへの相対パスが「locale/en-us/」となります注1)。同様に,リスト1の3行目が日本語版(ja-JP)のlocaleパッケージを登録するための宣言です。もし,フランス語や中国語といった他言語版のlocaleパッケージを追加するのであれば,リスト1のような宣言を追加し,「locale」フォルダ内に言語別のサブフォルダを作成して,その中に各言語へローカライズしたソースファイルを格納します。

注1)
今回は簡便のためlocaleパッケージのフォルダパスを「locale/en-US/」のようにしていますが,一般的にはフォルダパスを「locale/en-US/taghelper/」のようにします。

DTDファイルによるローカライズ

XULドキュメント内にハードコーディングされた英語の文字列を各言語へローカライズ可能にするには,英語の文字列を実体参照へと置き換え,その実体参照の定義を各言語のlocaleパッケージ内に格納したDTDファイルへ記述します。まず,「overlay.xul」リスト2の内容を追加してください。

リスト2 「overlay.xul」への記述内容(実体参照への置き換え)

<?xml version="1.0"?>

<!DOCTYPE overlay SYSTEM "chrome://taghelper/locale/overlay.dtd"> 

<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> 
  <script type="application/x-javascript" src="chrome://taghelper/content/overlay.js" /> 
  <popup id="contentAreaContextMenu">
    <menuitem id="taghelper-menu" 
              label="&taghelperMenu.label;"
              oncommand="TagHelper.generateTags();" />
  </popup>
</overlay>

リスト2では,menuitem要素のlabel属性「Generate Tags from Selection」を実体参照「&taghelperMenu.label;」に置き換えています。その実体参照の定義は「overlay.dtd」に記述しますので,「overlay.xul」の冒頭部分へDOCTYPE宣言を追加し,「overlay.dtd」を呼び出すようにします。

各言語の「overlay.dtd」には,リスト3リスト4のような内容を記述してください。なお,DTDファイルに日本語などのマルチバイト文字列を記述する場合,文字コードUTF-8,BOM(Byte Order Mark)無しの形式でファイルを保存する必要があります。

リスト3 「en-US」フォルダ内の「taghelper.dtd」への記述内容

<!ENTITY taghelperMenu.label "Generate Tags from Selection"> 

リスト4 「ja-JP」フォルダ内の「taghelper.dtd」への記述内容

<!ENTITY taghelperMenu.label "選択範囲からタグを生成"> 

動作確認

ここまでできたら,いったん動作確認を行います。今回はクロムマニフェストを修正して新たにlocaleパッケージを追加しました。クロムマニフェストはFirefox起動時に読み込まれますので,今回変更した内容を反映させるためには,Firefoxを一度再起動する必要があります。

Firefox再起動後,適当なWebページ上で範囲を選択し,右クリックメニューを表示すると,図2のようにタグヘルパーのメニュー項目が日本語で表示されることを確認してください。ただし,英語版のFirefoxを使用している場合,英語で表示されます。

図2 ローカライズされたタグヘルパーのメニュー項目

図2 ローカライズされたタグヘルパーのメニュー項目

なお,日本語版のFirefoxにて英語での表示を確認したい場合,「about:config」で設定値「general.useragent.locale」の値を「ja」から「en-US」に変更し,Firefoxの新しいウィンドウを開いてください。

著者プロフィール

Gomita

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

URLhttp://www.xuldev.org/

コメント

コメントの記入