如何使用路由过滤器gem Rails I18n应用程序更改URL中的区域设置?

时间:2012-06-06 16:39:34

标签: ruby-on-rails internationalization

我按照gem文档页面中的说明安装并设置了routing-filter。 https://github.com/svenfuchs/routing-filter

适用于默认语言环境。例如,如果我将默认语言环境设置为:en,则该站点为英语,如果我将默认语言环境设置为:zh,则该站点为中文。

www.site.com/zh/home(默认语言环境路径/ en自动添加到网址)

但是如何让我的网站支持两种语言?

当默认语言环境为:zh时,我试图通过用“en”代替“zh”来更改URL,但页面仍然是中文,而不是英文。

这是路由过滤器gem不支持的吗? 如果没有,我可以使用其他一些宝石吗?

或者我没有正确设置路由过滤器gem吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

阅读完源代码后,我会看到这个宝石正在做什么。

以下是源代码中的注释。

Locale过滤器从头开始提取匹配/:locale的段 识别的路径并将页面参数公开为params [:locale]。当一个 如果生成路径,则过滤器会相应地将段添加到路径中 page参数传递给url helper。

incoming url: /de/products
filtered url: /products
params: params[:locale] = 'de'

您可以像这样安装过滤器:

# in config/routes.rb
Rails.application.routes.draw do
filter :locale
end

要使您的named_route帮助器或url_for添加区域设置段 可以使用:

products_path(:locale => 'de')
url_for(:products, :locale => 'de'))

我在application_controller.rb中添加了所需的逻辑,所以它一切正常。

答案 1 :(得分:0)

如果您只想在当前页面中切换区域设置,那么您就不需要放入路径。只是代码DT <- cbind(DT,z = ifelse(DT[, .I] %in% my.rows , T, NA)) > DT # x y z # 1: A 2 NA # 2: B 6 NA # 3: C 5 TRUE # 4: D 8 NA # 5: E 9 TRUE # 6: F 4 NA # 7: G 1 TRUE # 8: H 7 NA # 9: I 10 NA #10: J 3 NA url_for(:locale => 'de')所以我像这样编码我的翻译导航。不妨用这段代码节省你的时间:)

url_for(params.merge(:locale => 'ko'))

<nav id="trans-nav">
    <%= link_to 'KOR', url_for(params.merge(:locale => 'ko')), :class => ('active' if I18n.locale.to_s == 'ko' ) %>
    <%= link_to 'ENG', url_for(params.merge(:locale => 'en')), :class => ('active' if I18n.locale.to_s == 'en' ) %>
    <%= link_to 'CHI', url_for(params.merge(:locale => 'cn')), :class => ('active' if I18n.locale.to_s == 'cn' ) %>
</nav>