2016-06-08 2 views
1

t some_translation_key находит, только если some_translation_key находится на первом уровне, то есть en.some_translation_key. Я хочу, чтобы метод, который будет найти перевод на любом уровне, то есть:Как найти перевод на любом уровне с Rails I18n?

en: 
    level1: 
    level2: 
     some_translation_key: 'The translation of some translation key' 

Я все еще хочу, чтобы получить доступ к нему с t some_translation_key, не зная level1 или level2. Есть ли способ?

ответ

1

Как бы вы различие между переводами для level1.level2.some_key и level3.level4.some_key?

Что вы можете сделать, чтобы получить краткие ключи перевода, это использовать его следующим образом: t '.some_key', это будет искать ключ в #{controller}.#{view}.some_key.

Например, если у вас есть этот код в app/views/users/new.html.erb:

<h1><%= t '.title' %></h1> 

Rails будет искать перевод с ключом users.new.title.

См раздел 4.1.4 "Ленивый" Lookup из http://guides.rubyonrails.org/i18n.html

+0

Спасибо, но я в основном хочу найти первую строку перевода, которую он находит. В принципе, не нужно размещать дубликаты только потому, что мне нужно написать динамический код, чтобы найти перевод, например, для «электронной почты» или аналогичного. – Aurimas

+1

Если ваш перевод очень общий, просто используйте «глобальный» ключ, например «app.email». По моему опыту, перевод может стать действительно волосатым, если вы идете с «динамическим переводом». –

1

Вы можете использовать строки, разделенные точкой.

t("level1.level2.some_translation_key") 
+0

У меня нет информации о 'level1' и' level2' только строка перевода конца. Это динамичная работа, с которой я работаю, но спасибо за очевидное, может быть, это полезно для кого-то. – Aurimas