2015-05-29 8 views
3

В настоящее время я работаю над проектом, в котором есть 2 разных местных жителей (nl/fr).Switch locale на текущих рельсах страницы

Мы столкнулись с этой проблемой: Как я могу получить перевод URL для текущей страницы, когда я показываю пт кнопку/НЛА

Я в настоящее время работаю с friendly_id и глобализацией

мы попытались :

= link_to "nl", params.merge(locale: "nl") 
= link_to "nl", url_for(:locale => :nl) 

оба работают, чтобы изменить язык, но, как мы friendly_url, когда страница загружена на французском (LOCALHOST: 3000/с/Animaux)

мы должны иметь

localhost:3000/nl/c/dieren 

вместо

localhost:3000/nl/c/animaux 

Я так много ссылку, чтобы перевести, так что я хочу есть railsway, чтобы сделать это.

+0

Является ли «animaux» хранится в столбце слива и идет из вашей базы данных? – Surya

+0

Извините, я недостаточно внимательно прочитал вопрос, это не дубликат. – max

+0

Да, он хранится в базе данных с глобализацией: ** Таблица: ** 'name_fr: animaux' | 'name_nl: dieren' – Thounder

ответ

1

Вы можете либо передать ресурс url_for:

= link_to "nl", params.merge(locale: "nl", id: @resource.id) 

Если это слишком много кода дублирования можно создать помощника:

# Try to guess the resource from controller name 
# @param [String] locale 
# @param [Hash] options - passed on to url_for 
# @option options [String] :text the text for the link 
# @option options [Object] :resource the model to link to. 
def page_in_other_locale(locale, options = {}) 
    opts = params.dup.merge(options).merge(locale: locale) 
    text = opts[:text] || locale  
    resource = nil 

    if opts[:resource] 
    resource = opts[:resource] 
    else 
    resource = controller.instance_variable_get?(":@#{controller_name.singularize}") 
    end 

    opts.merge!(id: resource.try(:id)) if resource 
    link_to(text, opts.except(:text, :resource)) 
end 

Другой альтернативой является использование I18n.with_locale, это позволяет запустите блок в другом регионе:

I18n.with_locale(:nl) do 
    link_to('nl', params.merge(id: category.name)) 
end 
+0

Хорошо, спасибо за ваш ответ, вы получите мне часть решения, и я выяснить остальное на себе. '= link_to" nl ", params.merge (locale:" nl ", id: @ resource.id)' – Thounder