如何配置:Rails-Spree-i18n-url中的locale或默认为/表示默认locale



我正在尝试将heroku/rails/spree站点配置为在url中使用区域设置。例如:www.sample.com/en/productswww.sample.com/ca/products,默认区域设置为:www.sample.com/

spree i18ngem运行良好,允许在后台进行翻译。i18n-gemforrails允许通过菜单选择器正确地进行本地更改。

该网站有三种语言。默认值为西班牙语,可选择英语和加泰罗尼亚语。

初始化程序/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

这非常有效。然而,我想将管理后端语言修复为英语(en)。

指向路线配置的i18n指令:

config/routes.rb

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

我尝试了各种组合以获得:config/routes.rbmount Spree::Core::Engine,位于:'/'与/en/ca合作但没有成功。

我曾尝试使用路由过滤器gem在区域设置中包装狂欢应用程序,但收效甚微。

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

我可以去上班。但我仍然需要让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以正确设置区域设置。如果url中没有区域设置或区域设置,请设置为默认值。

然后,一旦始终设置了区域设置,就在/is-es上、如果ca则在/ca上或在/en-is-en-locale上安装狂欢引擎。

我尝试了路由过滤器gem。路由中包含filer区域设置。它所做的只是将应用程序默认为ca区域设置。甚至在/es和/en上。此外,该页面在模板负载中呈现了一个完整的页面,这给了我两个页头。那里出了很大的问题。

我尝试了这种方法:i18n路由到安装的引擎-忽略区域设置,但没有任何配置对我有效

看起来疯狂的全球化宝石没有正确安装。现在,我有了所有的/loce/路径,而不是在路由或应用程序控制器中进行配置。现在唯一要做的就是将默认区域设置推送到root/。

我发现问题出在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按预期更改了区域设置和链接路径。

经验教训。

最新更新