あなたは@ patnowakの答えを選ぶことをお勧めします。 Gettextを使用してください。これは翻訳のために作られたツールであり、十分強力です。
まだ実行したい場合は、定義されている場合はコントローラで関数が定義されているコントローラのrender/3
を覚えておいてください。そうでなければ、デフォルトレンダリング機能を実行し、テンプレートを探します。詳細については、docsをお読みください。
だから例えば、これはコントローラです:今
def index(conn, params) do
# defined assigns as you wish
render(conn, "index.html", assigns)
end
、ビューでこれを定義します。
def render("index.html, assigns) do
case assigns[:lang] do
"fr" -> render("index_fr.html", assigns)
_others -> render("index_en.html", assigns)
end
end
また、自動的に割り当てに:lang
を置くためにプラグを書くことがあります。
def lang_plug(conn, opts) do
conn
|> fetch_query_params()
|> (fn cn -> assign(cn, :lang, cn.query_params[:lang] || "en").()
end
を参照してください。のドキュメントを参照してください。 0とassign/3
と、ヘッダーやボディなどの他の場所から言語を取得するための他の関数もあります。
あなたは考えを得る。プラグでは、fillは:lang
で割り当てられ、定義されたレンダリング関数内でそれらをフェッチし、適切に動作します。
まだ、Do not do this。 Gettextの使用は適切な方法です。
フランス語の「index.html.eex」は、同じフォルダ(別のファイル名)に保存されているのですか、別のファイルですか?各コントローラの翻訳ごとに別々のViewモジュールがありますか? – Dogbert
私はテンプレートディレクトリに2つのフォルダを持つことを計画していました。1つはすべての英語テンプレート用で、もう1つはすべてのフランス語テンプレートを含みます – RobStallion