i18nをYAMLで管理するのしんどい
TL;DR
愚痴です。
問題
Railsのi18nではt(:hello)
みたいな感じで、tメソッドを使って多言語対応すると思います。*1
この多言語対応のtranslationファイルがYAMLで書かれていて
#common.en.yml en: hello: "Hello"
#common.ja.yml ja: hello: "こんにちは"
みたいなことになっているわけです。
実際のアプリケーションがこんなにシンプルなら誰も困らないわけですが実際には件数がもっと多くなるので、ファイルを分割したりviews
やmodels
などのディレクトリを掘ったりして整理します。しかし、その結果として一覧性が低下して、以下の様な設定漏れがあっても簡単に気づかなかったりします。
#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っていう気もしますが。