2016-05-08 86 views
0

我正在尝试配置heroku/rails/spree网站以在url中使用语言环境。例如:www.sample.com/en/productswww.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 /。

回答

0

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

因此,我重建了新鲜的铁轨。

补充这些宝石:

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按预期改变区域设置和链接路径。

经验教训。

相关问题