【问题标题】:Rails internationalization (i18n): Everything translating except layouts/application.html.erbRails 国际化 (i18n):除 layouts/application.html.erb 外的所有内容都在翻译
【发布时间】:2013-01-01 07:25:51
【问题描述】:

我不断收到“翻译缺失:en.layouts.application.title” 对于标题或我尝试在 app/views/layouts/application.html.erb 文件中翻译的任何项目。

config/locales/en.yml

en:

  layouts:
    application:
      title:  "My Catalog"
      home:  "Home"
      store:   "Store"
      faq:      "FAQ"
      contact:  "Contact"
      about:    "About"

app/views/layouts/application.html.erb

<div id="banner">
  <% t('.title') %>
</div>
<div id="nav_menu" class="sidebar_menu">
  <a href="/"><%= t('.home') %></a>
  <a href="/store"><%= t('.store') %></a>
  <a href="/faq"><%= t('.faq') %></a>
  <a href="/contact"><%= t('.contact') %></a>
  <a href="/about"><%= t('.about') %></a>
</div>

视图中的所有翻译都正常工作,但布局中的任何内容都表明它丢失了。 我正在使用 en.yml、fr.yml 和 es.yml,它们都是相同的问题(分别为 fr.layouts.application.title 和 es.layouts.application.title)

如果我将行移出布局:应用程序:嵌套并进入 .yml 文件的根层次结构(当然从 t 方法中删除句点),那么一切都会翻译。 一旦我将它们移回布局下:应用程序:我再次缺少翻译。

可能出了什么问题? 我正在使用 Rails 3.2.7

编辑 1:刚刚尝试使用 但仍然说翻译丢失。

编辑 2:如果我将 application.html.erb 复制或重命名为不同的名称(并相应地更改 *.yml 文件),则找到解决方法。
如果我开始一个新项目,翻译在 application.html.erb 中工作得很好。 但是在当前项目中:只要我使用 application.html.erb(即使测试内容最少),我仍然会丢失翻译。

【问题讨论】:

  • 您能否澄清一下,当您将翻译留在嵌套层次结构中时(不要将它们移动到根层次结构)并使用完整查找而不是惰性查找意见即t('layouts.application.title')?
  • 感谢您的回复。它仍然让我缺少翻译。更新了原始帖子。
  • 奇怪...你在用 Spork 吗?如果是这样,您是否重新启动它以确保它重新加载您在 locales 目录下所做的更改?
  • 是的。每次更改后重新启动 webrick 以确认。
  • 只要它使用 layouts: application: lookup 就会出现同样的错误。如果我将 application.html.erb 复制到另一个文件并在布局下使用新文件名,我找到了一种解决方法:en.yml 中的层次结构,那么它就可以工作。不知道为什么会发生这种情况,因为如果我从头开始一个新项目,我没有任何问题。

标签: ruby-on-rails ruby-on-rails-3 internationalization ruby-on-rails-3.2 rails-i18n


【解决方案1】:

更新:离开这个项目有一段时间了,但发现了问题......

已解决:我可能会添加非常愚蠢的内容。
确保不要使用制表符 ('\t') 来分隔文件中的文本。
显然它无法使用制表符正确编译。

【讨论】:

  • 有趣的注解:硅谷节目中的制表符与间隔辩论在这里很好地发挥了作用!
【解决方案2】:

我今天遇到了完全相同的问题,经过调试会话后,我找到了问题的根源。我敢打赌这也是你的问题,因为它也适用于你的解决方法,并且这个问题不会发生在一个全新的项目上。你碰巧有等级吗

en:
  layouts:
    application:

在您的 yml 文件中的其他位置定义?

我在定义

en:
  layouts:
    header:
      language: "Language"

和

en:
  layouts:
    header:
      my_profile: "My profile"

在两个不同的地方,所以我猜翻译器会寻找第一个(并且假设是唯一的)组合键,而永远找不到另一个......

希望这能解决您的问题!

【讨论】:

  • 已检查。不,我没有在其他任何地方定义它,但是谢谢。
  • 当然!很高兴你解决了这个问题
猜你喜欢
  • 2014-09-24
  • 1970-01-01
  • 2012-02-25
  • 2016-11-30
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
  • 2019-06-08
相关资源
最近更新 更多