Runner in the High

技術のことをかくこころみ

Elmアプリケーションにおける多言語対応パターン

特段テクい話ではないが最近話す機会があったのでこちらでもメモ。

まず、以下のように対応している言語のパターンを表現した型を全画面共通で使える型として用意しておく。

type Lang 
    = Ja 
    | En

あとは各ページごとに画面で表示するラベルのインターフェイスとなるレコード型を用意しておき、言語別に出し分ける関数を作る。 これをview関数の中で呼び出せばよい。 非常にシンプル。

type alias Phrases = 
    { title : String
    , cancel : String
    , submit : String
    } 


toPhrases : Lang -> Phrases
toPhrases lang =
    case lang of
        Ja ->
            { title = "タイトル"
            , cancel = "キャンセル"
            , submit = "提出"
            }

        En ->
            { title = "Title"
            , cancel = "Cancel"
            , submit = "Submit"
            }

最後に言っておくと、Languageモジュールみたいな日英の多言語情報をまとめたぶっこみモジュールを作るのは強くオススメしない。 共通で使う文言ならまだしも、ある画面でしか使っていない文言を全部ひとつにまとめたくなった場合には、本当にまとめる意味があるのか考えるべきだ。

というわけで、画面モジュールごとに上で言うところのPhrasestoPhrasesをペアで用意するのがよい。