ネットの海の片隅で

技術ネタの放流、あるいは不法投棄。

i18nをYAMLで管理するのしんどい

TL;DR

愚痴です。

問題

Railsi18nではt(:hello)みたいな感じで、tメソッドを使って多言語対応すると思います。*1

この多言語対応のtranslationファイルがYAMLで書かれていて

#common.en.yml
en:
  hello: "Hello"
#common.ja.yml
ja:
  hello: "こんにちは"

みたいなことになっているわけです。

実際のアプリケーションがこんなにシンプルなら誰も困らないわけですが実際には件数がもっと多くなるので、ファイルを分割したりviewsmodelsなどのディレクトリを掘ったりして整理します。しかし、その結果として一覧性が低下して、以下の様な設定漏れがあっても簡単に気づかなかったりします。

#common.en.yml
en:
  good_morning: "Good morning"
  hello: "Hello"
  good_evening: "Good evening"
  good_night: "Good night"
#common.ja.yml
ja:
  good_morning: "おはよう"
  hello: "こんにちは"
  # good_evening の translation が抜けている!
  good_night: "おやすみ"

じゃあ、どうするか

各言語とtranslationの間には1対1対応があるはずなので、

:good_morning :hello :good_evening :good_night
:en "Good morning" "Hello" "Good evening" "Good night"
:ja "おはよう" "こんにちは" "おやすみ"

という二次元表で書けると思うんですよね。

この形式であれば、:ja:good_eveningが抜けていることも一目瞭然ですし、新しい言語や単語を追加したい時も行や列を追加するだけです。

とはいえ、表形式にするとCSVやTSVになると思うので、テキストエディタでは可読性がちょっとアレですね。

あ、表といえばExcelじゃないですか!

Excelいえーい!!!

*1:言語差し替えだけなら、m17nっていう気もしますが。