Fürstentum L10n #4

wasavi 本体の l10n は終わったが、まだオプションページとインストール時のメタ情報ファイルが残っている。

オプションページ
アーカイブ内の options.html をどうにかする。ところで勘違いしていたのだけど、Chrome で l10n 対象の文字列(__MSG_*__)が自動的に変換されるというのは、manifest.json と css ファイルだけだった。html ファイルは変換されない。しかしどのみち、Opera と Firefox では自前で変換しなければいけないので特に問題ではない。

オプションページにアタッチしたコンテントスクリプトで DOMContentLoaded イベントをリスンし、ページ内の __MSG_*__ を xpath で探し出し、変換後の文字列で置き換える。オプションページが ajax であれこれするページだともっとめんどくさいのだろうけど、いまのところはそうではないので、これだけ。

インストール時のメタ情報ファイル
このファイルの中で弄るのは具体的には、wasavi の説明文だ。これを l10n したい。”wasavi” という名前はまあ、別にどの言語でも同じでいいんじゃないかな?

  • Chrome
    Chrome では manifest.json がメタ情報に当たるが、前述の通り自動的な変換の対象なので、単に説明文を __MSG_wasavi_desc__ と置き換えるだけ。

    {
    "name": "wasavi",
    "version": "0.3.147",
    "description": "__MSG_wasavi_desc__",
    "default_locale": "en_US",
    "icons": {
    "16": "icon016.png",
    "48": "icon048.png",
    "128": "icon128.png"
    },
    :
    :
    }
  • Opera
    Opera では、config.xml 内に description 要素を置き、xml:lang を指定した上でそれぞれの言語の説明文を格納する。ソース中のメッセージカタログを走査して説明文を取り出し、xml 内に注入するスクリプトを書き、ant の build.xml でそれを呼び出すようにした。最終的にはこうなる:



    wasavi
    vi editor for any web page.
    :
    :
    vi editor for any web page.
    web ページ上の vi エディタ

  • Firefox
    Firefox では、install.rdf を弄る。ここに詳しい。

    ところで 1 つ気になることがある。Chrome と Opera では、メッセージカタログはそれぞれのエクステンションがネイティブで提供する l10n の仕組みに沿って格納しているが、Firefox ではそうではない。本来はエクステンションのアーカイブの /locale/[localeCode].json に置くのを、/resources/wasavi/data/xlocale/[localeCode]/message.json という Firefox のあずかり知らない場所と形式で格納している。

    これって AMO に登録する際にリジェクトの理由になったりするのかな? あるいは、リジェクトまでは行かなくても、エクステンションの一覧か何かで「このエクステンションはどの言語にもローカライズされてまへん」みたいな扱いになるかもしれない。

    それはちょっと悔しいので、wasavi の説明だけは Add-on SDK 標準の形式で各言語のメッセージカタログを置くようにしてみた。実行時に参照されることはないのだけど、一応どの言語へ l10n されているかは分かる。これもやはりそのためのスクリプトを書き、ビルド時に自動的に実行されるようにした。

    それから、Firefox でオプションページを開く手段として、アドオンバーにアイコンを追加するようにしていたのだけど、本当に単にオプションページを開くだけの機能しかなくてなんだかなーだった。しかし simple-prefsアドオンの管理ページにボタンを追加できるようなのでそうした。

    そうしたのだが、このボタンのラベルを l10n する手段がわからない。うーむこれはまあ分かったらいじることにしよう……。


ということでこんな感じに。

Leave a Reply

Your email address will not be published. Required fields are marked *