我在多语言Rails应用程序中配置了I18n,Globalize和FriendlyId。 此外,我假装根据当地情况翻译网址。
例如:
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只会更改locale参数,而不是更改slug。
例如,从英语切换到西班牙语会导致类似:
http://localhost:3000/es/mycontroller/my-house
PD:对我的网址假装做什么是一种很好的做法?我搜索了一段时间没有结果。
答案 0 :(得分:1)
你没有提供问题的完整规范,所以我想出了自己的实现。
我已经设法通过这个宝石的附加帮助完成了你所期望的那种: https://github.com/norman/friendly_id-globalize
它还会翻译friendly_id所需的slug列。没有它,slug直接从主模型中获取,而不是从翻译中获取。
我的设置中几个片段(我使用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 %>
我希望这会有所帮助。如果没有,请提供更多详细信息。