LinguaPloneの利用 [Plone3.3]

LinguaPlone を利用することで Plone を多言語化することができる。

インストール

サーバへのインストール

$PLONE_INSTANCE : /usr/local/Plone/zinstance (Plone のインスタンス)

インストールは解凍後、開発用ソースディレクトリに Products.LinguaPlone という名前で格納する。ダウンロードは http://pypi.python.org/pypi/Products.LinguaPlone より行える。

# tar zxvf Products.LinguaPlone-3.0c3.zip
# mv Products.LinguaPlone-3.0c3 $PLONE_INSTANCE/src/Products.LinguaPlone

次にインスタンス内の buildout.cfg を設定する。

  eggs =
      Plone
       :
+     Products.LinguaPlone

  develop =
       :
+     src/Products.LinguaPlone

  [versions]
       :
  Products.LinguaPlone = 3.0c3

最後に設定を反映する。

# bin/buildout
# bin/plonectl stop; bin/plonectl start

Ploneへのインストール

次に Plone に管理者でログインし、「サイト設定→プロダクトを追加・削除」より LinguaPlone をインストールする。

言語セレクタに言語クラスを付ける

各言語に応じた CSS を適用できるよう、言語ごとの class 属性を付与する。Products.LinguaPlone/Products/LinguaPlone/browser/selector.pt を編集する。

  tal:attributes="href lang/url;
-                 title name">
+                 title name;
+                 class string:langtab-${code}">

ローカルロールユーザが対応付け言語選択時にPloneのルートまでたどれない点を修正

Products.LinguaPlone/Products/LinguaPlone/skins/LinguaPlone/translationbrowser_popup.pt を編集する。(\\部分は改行せず1行で記入)

- results python: test(search_text!='', query_results,                           \\
-     [item for item in here.listFolderContents() if checkPermission('View',item)]);
+ results python: test(search_text!='', query_results,                           \\
+     [item.getObject() for item in here.getFolderContents({'Language': 'all'})  \\
+     if checkPermission('View',item)]);

デフォルトビューコンテンツの言語切替時に1階層上のコンテンツに遷移してしまう点を修正

フォルダのデフォルトコンテンツがパラメータ付きの場合など、階層がずれることでエラーが発生してしまう。Products.LinguaPlone/Products/LinguaPlone/browser/selector.py を修正する。

-     data['url'] = state.canonical_object_url() + appendtourl
+     data['url'] = trans.absolute_url() + appendtourl
  else:

設定

以下では Plone のルートに各言語のトップページ用のフォルダ(日本語:ja、英語:en)を作成することを想定。

設定

Plone に管理者でログインし「サイト設定→言語」から次のように設定する。

  • デフォルト言語
    デフォルトでは日本語のコンテンツとして作成されるようにする。
    Japanese
  • 利用可能言語
    利用可能な言語は、日本語と英語とする。
    Japanese、English

さらにバーチャルホストを用いる場合は ZMI の portal_languages の Negotiation Scheme で次のものにもチェックを入れておく。

Use language codes in URL path for manual override.

 

ロゴのリンク先を変更

portal_view_customizations で plone.logo を編集する。

- tal:attributes="href view/navigation_root_url"
+ tal:define="base view/navigation_root_url"
+ tal:attributes="href python: base + '/' + context.Language()"

ホームタブの設定

言語に応じてホームのページを変更するため、portal_actions で Home を以下のように設定する。

- URL (Expression) : string:${globals_view/navigationRootUrl}
+ URL (Expression) : string:${globals_view/navigationRootUrl}/${here/Language}

検索結果を言語ごとのトップページ配下で呼び出す

検索結果の言語が英語になってしまうためこのように対応する。portal_view_customizations で plone.searchbox を編集する。

- tal:attributes="action string:${view/site_url}/search">
+ tal:attributes="action string:${view/site_url}/${context/Language}/search">