如何使用区域设置添加翻译?

时间:2014-02-01 12:50:43

标签: ruby-on-rails ruby spree

在config / locales / en.yml中,我有以下一行:

en:
  hello: "Hello world"
  home: "Home"
  about: "About"

在链接中我有这段代码:

<li id="about-link" data-hook><%= link_to Spree.t(:about), spree.root_path%></li>

当我启动服务器并转到网页并将鼠标悬停在about链接上时,我会看到以下替代文字:

translation missing en.spree.about

为什么翻译缺失?

2 个答案:

答案 0 :(得分:4)

您的区域设置应如下所示:

en:
  spree:
    hello: "Hello world"
    home: "Home"
    about: "About"

因为,spree已经为所有I18n.t调用设置了Spree范围的自己的国际化设置。因此,上面定义的约定应该有效。

答案 1 :(得分:1)

当您开始在 .yml 文件中添加区域设置时,要记住的一件好事是,当应用程序变大时,您的区域设置中将有数百条线路,您需要更好地整理它们,以便不会覆盖它们并使缺少翻译。您应该使用字典列表并利用Rails Lazy Lookup

Rails懒惰查找

想象一下,拥有一个模型产品的属性数量会在您应用的多个视图中显示不同的区域设置。因此,每次你必须写你的意见

 t('product.quantity1') => to get: Quantity 
 t('product.quantity2') => where the outputted text might be different.

通过在使用控制器名称和操作的语言环境中使用点规则和良好的字典列表,您不必在约定中使用深度。 因此,如果你在视图中写t('。quantity'),Rails会查找它并为你带来一个与调用 t 的视图相对应的一个。

您的语言环境文件应具有以下结构:

en:
  products:
    index:
      quantity: 'Items:'   
    show:
      quantity: 'Quantity:'
    edit:
      quantity: 'Number of items:'

根据您正在编辑的视图,在您的区域设置上使用上述结构,您可以使用完全相同的 t 约定调用,该调用将带来不同的翻译

详细说明:

t('.quantity') inside app/views/product/index.html.erb => Items:
t('.quantity') inside app/views/product/show.html.erb => Quantity:
t('.quantity') inside app/views/product/edit.html.erb => Number of items:

因此,我建议您开始在您的语言环境中更好地组织词典列表,这样您就不会以深度为2或更多点的方式调用 t ,因为这样会非常无聊。您还可以用短线和清洁来保持您的观点。选择权归您所有,但导轨让您轻松。