0

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

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

www.site.com/zh/home(默认的语言环境路径 /en 会自动添加到 URL 中)

但是我怎样才能让我的网站同时支持这两种语言呢?

当默认区域设置为 :zh 时,我尝试通过将“zh”替换为“en”来更改 URL,但页面仍然是中文,而不是英文。

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

还是我没有正确设置路由过滤器 gem?

谢谢!

4

2 回答 2

2

阅读源代码后,我看到了这个 gem 在做什么。

以下是源代码中的注释。

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

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 添加了所需的逻辑,所以一切正常。

于 2012-06-06T17:17:55.553 回答
0

如果您只想在当前页面中切换语言环境,那么您不需要放入路径。只是编码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>

或者

<nav id="trans-nav">
    <%= link_to 'KOR', url_for(:locale => 'ko'), :class => ('active' if I18n.locale.to_s == 'ko' ) %>
    <%= link_to 'ENG', url_for(:locale => 'en'), :class => ('active' if I18n.locale.to_s == 'en' ) %>
    <%= link_to 'CHI', url_for(:locale => 'cn'), :class => ('active' if I18n.locale.to_s == 'cn' ) %>
</nav>
于 2015-10-29T10:39:17.147 回答