【问题标题】:Rails switch from translated URLRails 从翻译后的 URL 切换
【发布时间】:2015-04-26 21:22:07
【问题描述】:

我在多语言 Rails 应用程序中配置了 I18n、Globalize 和 FriendlyId。 此外,我假装根据语言环境翻译 url。

例如:

http://localhost:3000/es/micontroller/mi-casa   
http://localhost:3000/en/mycontroller/my-house  

那些网址已经存在,翻译按预期工作。

这些是我添加的语言切换器链接:

= link_to_unless I18n.locale == :es, "Español", locale: :es  
= link_to_unless I18n.locale == :en, "English", locale: :en

我的问题是,当我切换语言时,url 只会更改语言环境参数,而不是更改 slug。

例如,从英语切换到西班牙语会产生如下结果:

http://localhost:3000/es/mycontroller/my-house

PD:我假装使用我的网址是一种好习惯吗?我搜索了一段时间没有结果。

【问题讨论】:

    标签: ruby-on-rails url rails-i18n globalize


    【解决方案1】:

    你没有提供你的问题的完整规格,所以我想出了自己的实现。

    借助这个 gem 的额外帮助,我已经成功地完成了您所期望的事情: https://github.com/norman/friendly_id-globalize

    它还翻译friendly_id 所需的slug 列。没有它,slug 直接取自主模型,而不是翻译。

    我的设置中很少有 sn-ps(我使用 Post 作为我的模型/脚手架):

    # model
    class Post < ActiveRecord::Base
      extend FriendlyId
      translates :title, :body, :slug
      friendly_id :title, use: :globalize
    end
    
    # routes
    scope "/:locale", locale: /#{I18n.available_locales.join("|")}/ do
      resources :posts
    end
    
    # migration
    class CreatePosts < ActiveRecord::Migration
      def up
        create_table :posts do |t|
          t.string :slug 
          # slug column needs to be both in normal and translations table
          # according to friendly_id-globalize docs
          t.timestamps null: false
        end
    
        Post.create_translation_table! title: :string, body: :text, slug: :string
      end
    
      def down
        drop_table :posts
        Post.drop_translation_table!
      end
    end
    
    
    # switcher in view
    <%= link_to_unless I18n.locale == :en, "English", locale: :en %>
    <%= link_to_unless I18n.locale == :es, "Español", locale: :es %>
    

    我希望这会有所帮助。如果没有,请提供更多详细信息。

    【讨论】:

    • 谢谢,您的代码具有与我使用的几乎相同的工作设置。我会提供更多细节。切换器的问题在于它不打印非当前语言环境的翻译后的 href。例如,如果我使用英语,则来自西班牙语链接的 href 将以英语打印 slug。所以当我点击它时,我的 url 会变成这样:/es/my-english-slug,而不是 /es/mi-slug-en-español
    • 我发现的一个解决方案是自己构建 url,但我认为这不是“Rails 方式”解决方案。我正在使用 globalize-accessors gem,它可以在同一个视图中打印所有翻译的 slug 版本,所以我可以打印 href,例如:/en/my-english 和 /es/mi-español。
    猜你喜欢
    • 2012-02-15
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    相关资源
    最近更新 更多