我正在尝试配置heroku/rails/spree
网站以在url中使用语言环境。例如:www.sample.com/en/products
和www.sample.com/ca/products
和默认语言环境为:www.sample.com/
如何配置:Rails - Spree - i18n -/locale在url中或默认为/默认语言环境
的spree i18n
宝石做工精细,允许大礼包后端翻译。导轨的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
这完美的作品。不过,我想将管理后端语言修改为英语(en)。
的config/routes.rb中
scope "(:locale)", locale: /en|nl/ do
resources :books
end
我已经尝试了各种组合来获得: 的config/routes.rb中 安装施普雷
为指向路线配置的国际化说明: :Core :: Engine,位于:'/' 要与/en
和/ca
一起使用,但没有成功。
我试图使用路由过滤器gem来包装一个区域设置的狂欢应用程序,但很少成功。
我认为在多语言网站的网址是首选的方法。相信会有支持或有关该主题的教程。但是我的研究还没有找到任何解决方案。
我可以让/ ca //es /和/ en /工作。但我仍然需要在/上/而不是/ 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中没有语言环境或语言环境,则设置为默认值。
然后,一旦总是设置区域设置,将狂欢引擎挂载在/ is es上,在/ ca上如果ca或on/en是en locale。
我试过了路由过滤器的宝石。在路由中使用filer区域设置。它所做的只是将应用程序默认设置为ca语言环境。甚至在/ es和/ en上。此外,页面呈现为模板有效载荷的整页,这给了我两个页面标题。有一些非常错误的地方。
我试过这种方法:i18n Routing To Mounted Engine - Ignoring locale但没有配置为我工作。
看起来像spree-globalization gem没有正确安装。现在,我拥有所有/ locale /路径在路由或应用程序控制器中不配置的情况下工作。现在唯一要做的就是将缺省语言环境推送到root /。