Rails 6 интернационализация - что изменилось? - PullRequest
1 голос
/ 15 марта 2020

Я запустил fre sh новый проект Rails 6 и застрял, чтобы выяснить, почему то, что, очевидно, только что сработало (это не первое приложение, которое я запускаю), терпит неудачу ... Итак, я создал фиктивное приложение просто rails без дополнительных драгоценные камни и страница home#index:

<h1>Home#index</h1>
<p>
    <%= t('hello.world') %>
</p>

Затем я добавил перевод для вышеуказанного ключа в config/locales/en.yml:

en:
  hello: "Hello !"
    world: "Hello World!"

и с учетом отступа в 1 вкладку. При переходе к localhost:3000/home/index я получил странную ошибку:

/Users/serguei/.rvm/gems/ruby-2.7.0/gems/i18n-1.8.2/lib/i18n.rb:195: warning: The called method `translate' is defined here
  Rendered home/index.html.erb within layouts/application (Duration: 6.2ms | Allocations: 3150)
Completed 500 Internal Server Error in 16ms (ActiveRecord: 0.0ms | Allocations: 5045)



ActionView::Template::Error (can not load translations from /Users/serguei/projects/rails/draft-app/config/locales/en.yml: #<Psych::SyntaxError: (<unknown>): did not find expected key while parsing a block mapping at line 2 column 3>):
    1: <h1>Home#index</h1>
    2: <p>
    3:  <%= t('hello.world') %>
    4: </p>

app/views/home/index.html.erb:3

При изменении вызываемого перевода на hello:

<h1>Home#index</h1>
<p>
    <%= t('hello') %>
</p>

и удалении последней строки из en.yml файл:

en:
  hello: "Hello !"

все работает. Почему так? Что изменилось со времен Rails 5? Разве мы не можем больше использовать вложенные переводы в файлах локалей? Направляющие рельса ничего особенного в этом нет. Или я что-то упустил?

Добавление rails-i18n gem в Gemfile не решило проблему.

  • Версия Rails: 6.0.2.1
  • Ruby версия: ruby 2.7.0p0 (редакция 2019-12-25 647ee6f091) [x86_64-darwin19]

1 Ответ

3 голосов
/ 15 марта 2020

Если вы хотите вложить его, тогда вы не можете присвоить строковое значение родительскому элементу, вместо этого сделайте это

en:
  hello:
    world: "Hello World!"

Тогда в erb это будет работать

<%= t('hello.world') %>

Дайте ему попытку.

...