Rails国际化(i18n):除了layouts/application.html.erb之外,一切都在翻译

4
我一直收到“translation missing: 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)。
如果我将这些行移到layouts:应用程序嵌套之外,并移动到.yml文件的根层次结构下(当然,要删除t方法中的句点),那么一切都会被翻译。 只要我把它们移回layouts:应用程序下,就会再次出现翻译缺失。
可能出了什么问题? 我正在使用Rails 3.2.7
编辑1:刚试过使用<% t('layouts.application.title') %> ,但仍然显示翻译缺失。
编辑2:找到一个解决办法,即复制或重命名application.html.erb为不同名称(并相应更改*.yml文件)。 如果我开始一个新项目,则在application.html.erb内部的翻译将正常工作。 但在当前项目中:只要我使用application.html.erb(即使只有最少的测试内容),我仍然会收到翻译缺失的提示。

你能否澄清一下,当你将翻译保留在嵌套层次结构中(不将其移至根层次结构)并在视图中使用完整查找而不是延迟查找时,是否仍然会出现缺失翻译错误?例如 t('layouts.application.title') - Paul Fioravanti
谢谢回复。它仍然显示“翻译缺失”。我已更新原帖。 - preOtep
奇怪...你在使用Spork吗?如果是的话,你是否重启了它以确保重新加载在locales目录下所做的更改? - Paul Fioravanti
好的。在每次更改后重新启动了Webrick以进行确认。 - preOtep
1
只要使用布局:application:lookup,它就会给出相同的错误。我找到了一个解决方法,如果我将application.html.erb复制到另一个文件中,并在en.yml的布局层次结构下使用新的文件名,那么它就可以工作了。不确定为什么会发生这种情况,因为如果我从头开始启动一个新项目,我就没有任何问题。 - preOtep
显示剩余3条评论
3个回答

4

更新:离开这个项目有一段时间,但找到了问题的原因....

已解决:可能会很愚蠢。
请确保在文件中不要用制表符('\t')来空格文本。
显然,它无法正确编译制表符字符。


有趣的一点:《硅谷》节目中的制表符与空格之争在这里得到了很好的体现! - preOtep

0
如果有帮助到其他人的话:
我的问题有点不同——我在翻译键中包含了句号(例如:回想起来...:'回想起来,那是个坏主意')。用单引号括起来并没有什么区别,所以我干脆把句号全部去掉,问题就解决了。

0
今天我遇到了完全相同的问题,在调试会话后,我找到了问题的根源。我敢打赌这也是你的问题,因为它与你的解决方法和在全新项目上没有发生问题也是有道理的。你是否碰巧有层次结构?
en:
  layouts:
    application:

在你的yml文件中的其他地方定义了吗?

我正在定义

en:
  layouts:
    header:
      language: "Language"

并且

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

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

希望这能解决你的问题!


检查过了。没有,在别的地方我也没有定义过,但谢了。 - preOtep
当然!很高兴你解决了那个问题。 - deivid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接