才正经弄国际化,惭愧。想问 http://localhost:3001/?locale=ja http://localhost:3001/ja/ 这两个方式,一个靠请求参数(default_url_options),一个靠路由(scope "/:locale")用哪个好,目前没看出来差别和各自优缺点。还是根据个人审美?
坐等答案,免得做了好久再改哈
http://guides.rubyonrails.org/routing.html http://guides.rubyonrails.org/i18n.html 看看 rails 的 routing 和 i18n,当然你要 /?locale=ja 这个也行,但 rails 中一般习惯不是这样做
好吧,guide 上的我都熟悉。
要明白一个问题,至少同一方向问三个为什么
我想知道最后的那个为什么的结果。比如实际用 route 来实现在哪些时候可以定制一些方便的功能,或者哪个方便日后项目和其它非 rails 工程集成时可以更顺利等等。习惯背后也有原因或理念。
直接根据浏览器语言,设定 locale,然后用户强制选择语言时,建议用 ?locale=ja,然后保存到 session,之后的请求就不带这个参数了。
如果是在 URL 中带了 /ja/ 这样的东西,感觉对规划路由和做 SEO 都不太友好,带参数就更加难看了,保存到 session 中是比较常见的做法吧。
好像每个做 locale 的都会遇到这个问题,我是这样做的,在 user model 添加一个 locale 属性,用户可以在设置界面进行修改,如果为空的话,就读取他的浏览器设置一个默认值,贴代码:
class ApplicationController < ActionController::Base
before_filter :set_locale
private
def set_locale
I18n.locale = cookies[:locale] || setup_locale
end
def setup_locale
if user_signed_in?
current_user.update_attribute(:locale, guess_browser_language) if current_user.locale.blank?
return cookies[:locale] = current_user.locale
else
return cookies[:locale] = guess_browser_language
end
end
def guess_browser_language
request.accept_language.split(/,/).each{|language|
if language =~ /zh-cn/i
return 'zh-cn'
else
return I18n.default_locale
end
} unless request.accept_language.blank?
return I18n.default_locale
end
end
#19 楼 @quakewang ,这个方法感觉很好。其实最喜欢直接给代码看滴,就是不好意思明说哈。Thx。
在做的时候特地跑 twitter 和 facebook 去看了下,都不在 url 里面。当然各有好处。 手上这个工程有些特殊原因用/ja 更好,以后普通应用感觉还是放数据库和客户端挺好。
新手提问!(github 页面的问题/octopress) 苦于一周才能发帖,问题自己实在不会解决,借宝贴一用。 今天在 rake setup_github_pages 的时候,提示 invalid byte sequence in UTF-8 因为实在对 ruby 一窍不通,只是勉强做了一个页面,麻烦求助一下大家,谢谢!