LINUX.ORG.RU

Rails теряет преводы.

 


0

2

3.2.8, все гемы свежие.

array.each { |a| t('translate') }

Даёт:

1. Перевод
2. Translate missing

На разных страницах пропадают разные части переводов. Веб-сервера: webrick 1.3.1 и thin 1.5.0



Последнее исправление: daris (всего исправлений: 1)

array.each { |a| t('translate') }

Зачем ты одну строку 100500 раз переводишь и о чём, собственно, вопрос?

anonymous
()

Классная магия. Расскажи про array.each, там наверное что-то посложнее, да?

I18n.locale на каждой итерации одинаковый?

vladimir-vg ★★
()
Ответ на: комментарий от vladimir-vg

Одинаковый, это для примера.

Если в конфиге закомментировать «config.i18n.default_locale = :ru», в файлике с локалью поставить «en: ...», то переводы не пропадают.

Иначе - бессистемно исчезают.

daris
() автор топика

Хорошо бы увидеть реальный код.

Что находится в array? Пробовал ли указывать _полный_путь_ к переводу методу t (как в твоем примере)?

void
()
Ответ на: комментарий от void

array просто для примера, можно было написать 2.times {}

daris
() автор топика
Ответ на: комментарий от void

ЛОмается, как уточнил, только если использовать опцию

config.i18n.default_locale # = :ru или :en - без разницы, отваливается.

daris
() автор топика
Ответ на: комментарий от daris

и что говорит I18n.locale, когда опция config.i18n.default_locale закоментирована? По дефу должна быть :en...

Попробуй отследить что твориться в хеше переводов на той итерации, когда translation missing. Типа:

void@Amidala ~/Development/Web/depot_i (master)
$ rails c
Loading development environment (Rails 3.2.8)
1.9.3-p194 :001 > I18n.locale = :lv                                                                                                      => :lv 
1.9.3-p194 :002 > 5.times { puts I18n.t('layout.application.default_page_title'); puts I18n.backend.send(:translations)[:lv][:layout][:application]  }
Pragmatic Gramatnīca
{:default_page_title=>"Pragmatic Gramatnīca"}
Pragmatic Gramatnīca
{:default_page_title=>"Pragmatic Gramatnīca"}
Pragmatic Gramatnīca
{:default_page_title=>"Pragmatic Gramatnīca"}
Pragmatic Gramatnīca
{:default_page_title=>"Pragmatic Gramatnīca"}
Pragmatic Gramatnīca
{:default_page_title=>"Pragmatic Gramatnīca"}
 => 5 
1.9.3-p194 :003 >

void
()
Ответ на: комментарий от void
[3] pry(main)> I18n.locale = :en
=> :en
[4] pry(main)> 
[5] pry(main)> 
[6] pry(main)> 5.times do
[6] pry(main)*   puts I18n.t('controllers.session.update_info')  
[6] pry(main)*   puts I18n.backend.send(:translations)[:en][:layout][:application]  
[6] pry(main)* end  
 Пожалуйста, заполните нижерасположенные поля.
NoMethodError: undefined method `[]' for nil:NilClass
from (pry):9:in `block in __pry__'
[7] pry(main)> 

А что backend здеьс делает?

daris
() автор топика
Ответ на: комментарий от daris

А что backend здеьс делает?

ну, какбэ вопрос к разрабам.

module I18n
  module Backend
    # A simple backend that reads translations from YAML files and stores them in
    # an in-memory hash. Relies on the Base backend.

Если знаешь другой способ как добраться до хеша переводов - пробуй.

В твоем случае, судя по всему, ты должен был писать

puts I18n.backend.send(:translations)[:en][:controllers][:session]
или чтобы вывести весь хеш для всех языков
puts I18n.backend.send(:translations)

void
()
Ответ на: комментарий от daris

Если в rails console работает, попробуй посмотреть хеш переводов в контроллерах/представлениях в момент ошибки missing translation. Может не в хеше дело вовсе...

void
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.