nikolaで多国語ポスト対応

nikolaで多国語ポスト対応

nikola handbookのMultilingual postsの項を見ながら多国語対応の設定を行う。

基本的な設定

記事や固定ページの多国語対応を行う場合、conf.pyTRANSLATIONS_PATTERNで指定されたパターンに沿ったファイル名で言語ごとに記事を作成することになる。デフォルトだと

TRANSLATIONS_PATTERN = "{path}.{lang}.{ext}"

という指定になっているため、この記事(12.md)であれば英語ポストを作成する場合は12.en.mdというファイル名を付けることとなる。

上記パターンをどの国の言語に対応させるかどうかはTRANSLATIONSの設定を変更する。この設定では各言語をkeyとしてprefixとなるパスをvalueに持つdictを設定する。デフォルトではDEFAULT_LANG : ""のみが指定されているため、新たに追加したい言語とprefixを次にような形で指定する。

TRANSLATIONS = {
    DEFAULT_LANG: "",
    "en": "./en"
}

この設定を行った上でnikola buildを実行すると、過去の諸々のポストに対しても多言語対応のための再生成が走るためかブログ構築までに5分ほどを要する。構築後、nikola serve -bでローカルのブラウザ上でブログを閲覧すると右上にEnglishという表示が増える(3カ国語以上設定した場合は試していないがおそらく選択できるようになると思われる)。 独自ドメインを設定している場合はこのEnglishをクリックすると存在しないページにアクセスすることになるため、ローカルサーバ上でアクセスするためにはアドレスバーに127.0.0.1:8000/enと手動で打ち込む必要がある。このページにアクセスすると、英語版のページが表示される。 しかし、上記設定だけでは特に翻訳版の記事を用意していないため、ポストについては日本語版と全く同一の記事が表示され、また、それ以外の上部メニュー(ナビゲーションバー)なども翻訳されず日本語のままとなってしまっている。

以下ではこれらの多国語化について記す。多言語対応可能な設定項目についてはconf.pyにおいて(translatable)というコメントが添えられているため、基本的にはこれらの設定項目を調整していくことになる。

ナビゲーションバーの多言語化

ナビゲーションバーについてはNAVIGARTION_LINKSの設定を次のように変更する。

NAVIGATION_LINKS = {
    DEFAULT_LANG: (
        ("/archive.html", "文書一覧"),
        ("/categories/", "タグ"),
        ("/pages/about/index.html", "About"),
        ("/rss.xml", "RSSフィード"),
    ),
    "en": (
        ("/en/archive.html", "all posts"),
        ("/en/categories/", "tag"),
        ("/en/pages/about/index.html", "about"),
        ("/en/rss.xml", "RSS feed"),
    )
}

ここでは各言語をkeyとし、対応するパスとリンク名のタプルのタプルをvalueとするdictを設定している。 "en"に対して"/en"で始まるパスを指定していることに注意。

タグ、カテゴリの多言語化(調査中)

nikola v8ではポストごとに複数の分類を与えるタグ(tags)と、単一の分類を与えるカテゴリ(categories)が提供されている。現時点で当ブログはタグしか用いていない。なお前のポストにも記したが、nikolaのversion 7まではセクション(sections)という分類方法も存在していたが、これはversion 8以降は削除されている(nikola handbookにはこの機能はCATEGORY_DESTPATHの設定を用いて実現可能との記載がある)。 タグやカテゴリの多言語化の仕方であるが、conf.pyを見るとTAG_TRANSLATIONCATEGORY_TRANSLATION

   [
     {'en': 'private', 'de': 'Privat'},
     {'en': 'work', 'fr': 'travail', 'de': 'Arbeit'},
   ]

のような辞書のリストを指定すれば良いとの記載がある。しかしこれを日本語と英語の間の翻訳で試みたところ、英語ページにおいても日本語タグが指定した英語タグに翻訳されず日本語タグのままとなる現象を確認している。この現象の解決のためには調査を行う必要があるため、現時点ではタグ、カテゴリの多言語化は実現できていない。

多言語ポストの混在

多言語ブログを作成する場合、基本的に日本語で書いた記事は英語版では表示させず、翻訳を行った記事のみを英語版で表示するようにしたい。しかし、nikolaでは現状そのような制御を行うことができない。 このissueにおいて同様な要望が上がっているが、しばらくは対応されなさそうな雰囲気がある。

その他

  • 日本語タグに対応するURLが漢字部分については中国語の発音として変換されているが、これは依存ライブラリであるunidecodeのせいである。これはutils.pyに実装されているslugifyを呼ぶ際に呼び出される。このunidecodeであるが、元はperlのモジュールなのであるが、この説明において日本語では正しくない結果が出力されるだろうとの記載がある。したがって解決するためには日本語だけ特別扱いし、更にmecabなどで読み付与を行うといった作業が必要となる。

結論

現状nikolaで多言語サイトを作成する場合は中途半端な多言語サイトしか実現できないのが実情である。余裕があれば原因調査の上でこの記事についても追記を行なっていきたい。

Comments

Comments powered by Disqus