3

我正在做我的第一个refinerycms 项目,页脚中有这一行:

<%= t('.copyright', :year => Time.now.year, :site_name => Refinery::Core.site_name) %>

它在我的网站上显示:

i18n: Copyright

i18n 来自哪里,需要 t 函数吗?

编辑:

我的 /config/locales/en.yml 包含以下代码。我是否需要为此添加一些东西,或者最好只是删除 t() 标签?

en:
  hello: "Hello world"
4

3 回答 3

5

关于您的第二个问题 -t('.copyright')期望在您的文件夹树结构下有正确的键(因为它.在一开始就有)。例如,如果您的共享文件夹下有一个页脚(完整路径为app/views/shared/_footer.erb),那么您的 YML 应该有下一个结构:

en:
  shared:
    footer:
      copyright: "All rights reserved. (c) %{site_name} at %{year}"

%{site_name}并且%{year}是您的值的插值占位符:

<%= t('.copyright', :year => Time.now.year, :site_name => Refinery::Core.site_name) %>
于 2012-06-06T11:48:55.223 回答
3

i18n 它是 Rails 附带的国际化库,它有助于在 Rails 应用程序中的不同位置进行翻译。

t() 这只是对翻译的调用,我认为它实际上是一个别名。

您的语言环境文件夹中应该有一个 yaml 文件,其中有版权,需要一年和一个站点名称。

我猜你改变了位置,所以没有翻译,因为refineryCms 应该只有英文。

于 2012-06-06T00:44:02.997 回答
1

t方法是该方法的别名translate。它们都可以在ActionView::Helpers::TranslationHelper中找到。

假设options = { :year => Time.now.year, :site_name => Refinery::Core.site_name }

由于传递的键以句点开头,t('.copyright', options)因此refinery/_footer.html.erb视图中的调用实际上是调用I18n.translate('refinery.footer.copyright', options).

refinery.footer.copyright现在,可以在此处找到密钥的默认英文翻译。它是"Copyright © %{year} %{site_name}"。如果您想覆盖该值,那么我认为最好的方法是在您的config/locales/en.yml文件中设置该键。

en:
  refinery:
    footer:
      copyright: "My custom copyright text"
于 2013-04-23T20:24:49.623 回答