Home > Internet > Movabletype > config.yamlで書いたテーマでのL10N適用

config.yamlで書いたテーマでのL10N適用

どうしても、うまくいかない事があったんで、悩んでないで書いてしまう事にしました。(後で解決したけど)

とある理由で、テーマをプラグインとして作成したいと思っています。(テーマとプラグイン・別々のインストールは避けたいだけなんですが)
それで、config.yamlでのテーマの書き方を調べて、テーマの作成までは問題なく終了しました。ただ、一箇所だけうまくいかない事があって、それがL10Nの適用です。

厳密には、プラグインやテーマにL10Nを適用させる事は出来ています。問題はそこから。適用されたテーマによって作成されたテンプレート内で、「プラグイン側のL10Nで拡張したローカライズ部分の、ローカライズ結果」が、「テンプレートの初期化を行った時に無効になる(デフォルトの英語になってしまう)」という現象です。

現象としては、以上の通りなのですが、再現性の有る現象として説明する為に、作成したプラグインの説明をします。

テーマ・プラグインのローカライズには、L10N設定を書ける箇所が2つある

ローカライズの為のL10N指定は、テーマプラグインの場合、書く場所(書ける場所)が2箇所あります。プラグイン全体について書かれている部分と、テーマについて書かれている部分です。
と、言葉で言ってみても、解りづらいでしょうから、今回試してみたプラグインのコード曝します。

name: L10N Yaml Sample Theme
id: JaSample
description: <__trans phrase="JaSample">
l10n_lexicon:
  ja: l10n_ja.yaml
version: 1.0
themes:
  JaSample:
    id: JaSample
    label: Sample Theme
    description: <__trans phrase="JaSample">
    version: 2.3
    class: blog
    l10n_lexicon:
      ja: l10n_ja.yaml
    elements:
      template_set:
        component: core
        importer: template_set
        name: Template Set
        data:
          base_path: templates
          require: 1
          templates:
            index:
              main_index:
                label: Main Index
                outfile: index.html
                rebuild_me: 1
            module:
              header:
                label: Header

ちなみにl10n_ja.yamlとmain_index.mtmlのファイルはこんな感じの中身。header.mtmlの中身は適当に。

Header: ヘッダー
JaSample: 日本語サンプル
Sample Theme: さんぷる・テヱマ
<__trans phrase="Header">

2ヶ所のうち、どちらに書くかで、テーマ・プラグインのローカライズ動作が、違ってきます。なお、ローカライズが行われたかどうかは、プラグインで追加した語句についてのローカライズ結果で判断しています。これらの設定にかかわらず、MTがもともと持っている語句のローカライズは、常に行われました。

ちなみに、どうやら「l10n_lexicon:」の書き方は、プラグインでも有効みたいです。yamlで書けるので、ずいぶん簡単です。

プラグイン部分のL10Nのみ有効にする

プラグインのL10N指定(最初の方)のみ有効な状態のプラグインを作ると、予想通りプラグインの動作に関する部分(出力メッセージやプラグイン管理画面など)を日本語化する事が出来ます。
テーマ選択画面でのテーマ一覧での表示については、「テーマ名称」のローカライズは行われますが、「description」部分についてはローカライズが有効になっていません。
適用後のテンプレート名称はローカライズされています。またこの時点でのテンプレート内も問題無くローカライズが行われています。
しかし、このテンプレートに対してプルダウンアクションの「テンプレートの初期化」を行った場合には、ローカライズが無効になってしまうようです。

テーマ部分のL10Nのみ有効にする

プラグインのL10N指定をせずに、テーマ部分のL10N指定のみ書いた場合も、予想通りプラグイン絡みのメッセージは英語のままになりました。
テーマ選択画面でのテーマ一覧での表示については、さっきと逆に「description」部分のローカライズは行われますが、「テーマ名称」についてはローカライズが有効になっていません。
適用後のテンプレート名称はローカライズが行われません。またこの時点でのテンプレート内もローカライズが行われていません。
このテンプレートに対してプルダウンアクションの「テンプレートの初期化」を行った場合も、ローカライズは行われません。

両方のL10Nを有効にする

両方のL10Nを書いてみます。この場合、L10Nが適用される部分を正確に読み取って、二つのレキシコンを作成して指定してもいいのですが、管理するのが面倒になるだけなので、同じファイルを読むようにした方が良いと思います。
プラグインメッセージはローカライズされますし、テーマ表示もすべてローカライズされます。
テーマ適用後のテンプレート名称はローカライズされています。またこの時点でのテンプレート内も問題無くローカライズが行われています。
ここまでは完璧なのですが、このテンプレートに対してプルダウンアクションの「テンプレートの初期化」を行った場合には、ローカライズが無効になってしまいました。

両方有効な状態で、プラグインとテーマのidを別にする

プラグインとテーマのidを別なものにした場合でも、テーマの適用という動作自体は問題ありませんでした。
ローカライズの結果については、上のプラグイン・テーマ2つのL10Nを有効にした場合と、同じになりました。

色々実験していて解りましたが、「デザイン」>「テーマ」の「テーマの適用」と、「デザイン」>「テンプレート」での右下「アクション」内の「テンプレート初期化」リンクが同じ動作をし、「テンプレート一覧画面」でのプルダウンアクションの「テンプレートを初期化」と「テンプレート編集画面」でのプルダウンアクションの「テンプレートを初期化」が同じ結果になるようです。

config.yamlで作った時は"trans_section"

このエントリー書きながら、ふと思い付きました。もしかしたらMT4用のテンプレートセットみたく、trans_section指定するんじゃないかと。

早速main_index.mtmlの内容を以下のようにして、試してみました。

<$MTInclude module="<__trans_section component="JaSample"><__trans phrase="Header"></__trans_section>"$>

こうしてやると、テンプレートの初期化をした時も、きちんとローカライズが行われるようになります。

なんだ、そうだったんだ。
という訳で、無事解決したので、mt.Vicunaの追い込みに入ります。今週中には最初のバージョンを公開したいです。

ping a Trackback

TrackBack URL for this entry.(1)

Please! leave a Comment.

スクリプトの読み込みが完了していません。

Sign in Sign in Sign in

メールフォーム(Javascriptを使用していません)や、twitter.pngTwitter経由のCommentでもReplyいたします。ただし返信はブログのコメントとして行う事もあります。

Comment Form

QuickTagsHere

EmoticonHere

(入力しない場合「Anonymous」で代替されます)
(公開はされませんが、Gravatarアイコンの取得や、Comment Subscribeの送信先アドレスとして使われます)
(入力すると、コメント表示でユーザー名にリンクが貼られます)
(この情報は、JavascriptによりCookieに保存されます。)

NotifyMail Powered by Comment Subscribe

はてブコメント:

Home > Internet > Movabletype > config.yamlで書いたテーマでのL10N適用

MT5Techniques

MT5Techniques

2冊目の共著「Movable Type 5 実践テクニック」(シックスアパート監修)が出版されました。(ソフトバンク クリエイティブ刊)

検索
(5)
(6)

別ページに遷移します。

Powered by Hyper Estraier

Feeds
Link Status
In One

なかのひと

位置情報ブログパーツ「なかのひと」

Links
Powered By

Return to page top