如何配置:Rails - Spree - i18n - / locale在url中或默认为/为默认语言环境

时间:2016-05-08 15:43:30

标签: ruby-on-rails heroku spree rails-i18n

我正在尝试配置heroku/rails/spree网站以在网址中使用区域设置。例如:www.sample.com/en/productswww.sample.com/ca/products以及默认语言环境:www.sample.com/

spree i18n gem工作正常,允许在spree后端进行翻译。用于rails的i18n gem允许通过菜单选择器正确地进行本地更改。

该网站有三种语言版本。默认为西班牙语,包含英语和加泰罗尼亚语选项。

初​​始化/ locale.rb

# tell the I18n library where to find your translations
I18n.load_path += Dir[Rails.root.join('lib', 'locale', '*.{rb,yml}')]

# set default locale to something other than :en
I18n.default_locale = :es

完美无缺。但是,我想将管理员后端语言修复为english(en)。

指向路由配置的i18n指令:

配置/ routes.rb中

scope "(:locale)", locale: /en|nl/ do
  resources :books
end

我尝试了各种组合: 配置/ routes.rb中     装载Spree :: Core :: Engine,at:' /' 使用/en/ca但未成功。

我曾尝试使用routing-filter gem将spree应用程序包装在一个语言环境中,但收效甚微。

我认为多语言网站的网址中的区域设置是首选方法。相信会有关于这个主题的支持或教程。但我的研究还没有找到任何解决方案。

我可以让/ ca /​​ / es /和/ en /工作。但是我仍然需要让es去/ /而不是/ es /.

工作

以下是当前配置:

application_controller:

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception

  before_filter :set_locale


  def url_options
    { locale: I18n.locale }
  end

  def set_locale
    I18n.locale = params[:locale] || I18n.default_locale
    Rails.application.routes.default_url_options[:locale]= I18n.locale
  end
end

路线为:

Rails.application.routes.draw do

  scope "(:locale)", :locale => /en|es|ca/ do
   mount Spree::Core::Engine, at: '/'
  end

end

我认为它需要:

在控制器中,查看本地或网址以正确设置区域设置。如果url中没有区域设置或区域设置,请设置为默认值。

然后,一旦设置了语言环境,就将狂欢引擎挂载在/是es,on / ca if ca或on / en是en locale。

我尝试了路由过滤器gem。在路由中使用文件管理器区域设置。它所做的只是将应用程序默认为ca语言环境。甚至在/ es和/ en。此外,页面还在模板有效负载中呈现了一个完整页面,这给了我两个页面标题。那里有些不对劲。

我尝试了这种方法:i18n Routing To Mounted Engine - Ignoring locale但没有配置对我有效。

看起来spree-globalization gem没有正确安装。现在我让所有的/ locale /路径都没有在路由或应用程序控制器中配置。现在唯一要做的就是将默认语言环境推送到root /.

1 个答案:

答案 0 :(得分:0)

我发现问题是rails构建本身。我似乎不时有这个问题。它达到了停止正常工作的程度。不幸的是,我还没有足够的稳定分支。

所以我重建了铁轨。

添加了这些宝石:

gem 'spree', '~> 3.1.0.rc1'
gem 'spree_auth_devise', '~> 3.1.0.rc1'
gem 'spree_gateway', '~> 3.1.0.rc1'
gem 'spree_i18n', git: 'git://github.com/spree/spree_i18n.git', branch: '3-1-stable'
gem 'spree_reviews', github: 'spree-contrib/spree_reviews', branch: '3-1-stable'
gem 'spree_globalize', github: 'spree-contrib/spree_globalize', branch: 'master'

经过一些实验,上面是该组合的稳定宝石修订版。

我得到的一个失败是狂欢全球化宝石不会安装。所以我手动复制供应商js和css的include语句,然后运行:

rake spree_globalize:install:migrations

然后迁移。使用根据文档设置的默认语言环境。应用程序默认正确,/ en和/ ca按预期更改了语言环境和链接路径。

经验教训。