我正在尝试将heroku/rails/spree
站点配置为在url中使用区域设置。例如:www.sample.com/en/products
和www.sample.com/ca/products
,默认区域设置为:www.sample.com/
spree i18n
gem运行良好,允许在后台进行翻译。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按预期更改了区域设置和链接路径。
经验教训。