最近、Sinatraで多言語化することがあったので、
どんな感じにやったかの共有です。
元々、sessionに保存された言語情報から同じURLでも言語を切替えて表示してたのですが、
google的に微妙っぽいのでサブディレクトリ風に管理することにしました。
http://hogehoge.com/ => http://hogehoge.com/ja/
で、その場合に、いままでのルーティングを極力変更しないで移行したかったので、
以下の様な記述をbeforeフィルタに追加しました。
request.path_info =~ /^\/([A-z]{2})\// supported_langs = ["ja", "en"] if supported_langs.include?($1) session[:lang] = request.path_info[1..2].to_sym # /en/aaa => en request.path_info = request.path_info[3..-1] # /en/aaa => /aaa else if session[:lang].nil? session[:lang] = r18n.locale.code.downcase # 適当に言語情報取得 end # 言語に依存しないスクリプト周りやPOST通信などはリダイレクトしない if request.get? && request.path_info !~ /^\/(api|js)/ redirect "/#{session[:lang]}#{request.path_info}" end end
ざっくりこんな感じです。