GNU gettextのフォーマット・i18nextの流れで日本語と英語を同期

GNU gettextのフォーマット・i18nextの流れで日本語と英語を同期

TL;DR

ペライチのページの日本語/英語対応を入れた。多言語対応標準のGNU gettextの流れに乗せたつもりだけど、あんまり楽になってないし、ページ二枚作るでよかったのでは。いちおう、デザインの統一は一枚なのでやりやすい。

続き

日本語と英語のドキュメントの同期 | 實松アウトプット
このエントリーの続き。

実際の挙動

http://tachikoma.io/

基本は英語。staticなgithub page。

http://tachikoma.io/?setLng=en-US
http://tachikoma.io/?setLng=ja-JP

setLangパラメータをつけると言語を変えられる。i18n対応部分は i18next使った。ある程度ホントのi18n対応 単数/複数・男性/女性(contextを指定する、ちょっと簡略)してるライブラリ。なお、時刻、日時周りはまた別のライブラリを使う必要がありそう。ある程度動的に使う用なライブラリなので、staticにhtmlの中身ごとに出し分けたい、程度にはオーバースペックかもしれない。

一度setLngパラメーターをつけると、それをcookieに保存してくれる。便利。オールインワン。

Alternative

ググった限りでは、jedi18next がGNU gettextベースでは良さそうに見えた。どちらも、dom組み立て終わってから、キー見て差し替えるので、特にdefaultがen-US以外のユーザーの場合は、普通に使うには厳しく感じるかも。まあとりあえずよい。

手順

GNU gettextな手順

素材 -> .pot -> .po -> .mo

に載せるうまい方法がググれなくて、なんかもうちょっとあるだろ、という感じの手順で変換した。

.html -(pandoc)-> .rst -(sphinx)-> .pot -(GNU gettext)-> .po -(翻訳)-> -(i18next-conv)-> .json

xgettextが.rst読めるかと思ったところで手間取った。xgettext rst読めると思うじゃん…
Resource String TablereStructuredText(reST)だと。

あとsphinxってハンズオン一回やったきりだったので全く覚えてなかった。

初回はコレで、2回目以降はこれ。

.html -(手作業)-> .pot -(GNU gettext)-> .po -(翻訳)-> -(i18next-conv)-> .json

感想

自分以外触るのは無理だろ、ッて感じなので、ページ二枚あるのとあんまり変わらない。gulpかnpmのコマンドで出来るようにしておけば、まだましなのか?? いちおう英語に全部fallbackする(はず)なので(設定足りてないかも dev localeに積む必要がある?)、翻訳漏れは合っても文言漏れがなくなるメリットがイイ。

translation.jsonを順番に探索していく(ja-JP -> ja -> dev)から必ず404出まくるのが心理的にもやっと来る。

一回やってみて納得したのでよかった。

他の事例(Edited 2014-11-08 12:02)

jsxgettext Pootle そういうのもあるのか。

手探りだったけど、大筋では方向性間違ってなさそう。よかった。

手順

# TL;DR

Use gettext format and i18next flow.

# Iteration

$ brew install gettext # convert .pot to .po
$ npm install -g i18next-conv # convert .po to .json

Edit index.html
Add data-i18n attribute
This is msgid
(Caution: Remove period from msgid!)

Add msgid + msgstr to _build/index.pot

$ msgmerge -U _build/index.en.po _build/index.pot
$ msgmerge -U _build/index.ja.po _build/index.pot

Translate *.po

$ i18next-conv -l ja -s ./_build/index.ja.po -t ./locales/ja/translation.json
$ i18next-conv -l en -s ./_build/index.en.po -t ./locales/en/translation.json

Done!

# Initial

$ brew install gettext
$ npm install -g i18next-conv
$ cabal install pandoc
$ pip install sphinx

# https://github.com/tachikomaio/maguro.tachikoma.io/pull/32
index.html to index.rst (pandoc)
$ ~/.cabal/bin/pandoc -f html -t rst -o index.rst index.html
index.rst to index.pot (sphinx)
$ make gettext

$ msginit --locale=ja --input=_build/locale/index.pot --output=locale/ja/LC_MESSAGES/index.po

# See: (3日目) Sphinx の文書を翻訳してみよう (gettext機能) Hack like a rolling stone
# http://tk0miya.hatenablog.com/entry/20111203/p1

i18n-step.txt

広告

GNU gettextのフォーマット・i18nextの流れで日本語と英語を同期」への1件のフィードバック

  1. ピンバック: 小分けの.potと.poと.json? 巨大な.potと.poと.json? | 實松アウトプット

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中