在locales文件中使用辅助方法?

时间:2012-02-01 22:39:01

标签: ruby-on-rails ruby-on-rails-3 internationalization gitorious

我正在尝试使用Rails 3获得Gitorious并运行,但我遇到了一个问题。

我在视图中有这一行。

<p><%= t("views.commits.message").call(self, tree_path(@commit.id)) %></p>

相应的区域设置行看起来像这个[config/locales/en.rb]

 :message => lambda { |this, path| "This is the initial commit in this repository, " +
      this.link_to( "browse the initial tree state", path ) + "." }

这里的问题是lambda方法没有在视图中使用#call调用,而是由其他人调用,这意味着this不是self那个正在传递给它。

this包含views.commits.messagepath包含{:rescue_format=>:html}。 Gitorious团队在整个应用程序中都使用了这种方法,这意味着我不能将逻辑转换为辅助方法,而无需花费一天时间进行表单工作。

我做了一些研究,并找到了关于确切行的this帖子。

这是解决问题的方法。

  

这似乎表明你的系统上安装了i18n gem;这个宝石与Gitorious不相容。使用Rubygems卸载它可以解决问题。

我尝试卸载i18n,但正在运行bundle install只是再次安装它。

如果不重构700行语言环境文件,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

这是一个常见的问题,如何分解复杂的嵌套文本。

使用markdown来简化它

This is the initial commit in this repository
[browse the initial tree state](http://example.com/some/path)
.

也许用中文你会说

这是第一个提交在这个知识库
[看初始状态](http://example.com/some/path)
。

我们必须考虑三件事;

  1. 外部文字
  2. 链接文字
  3. 这两个的顺序和位置
  4. 如果链接相对于文本的位置不需要更改,则@WattsInABox更正。

    views.commits.message: "This is the initial commit in this repository"
    views.commits.browse:  "browse the initial tree state"
    

    然后我们只是撰写

    <p>
      <%= t "views.commits.message" %>
      <%= link_to t("views.commits.browse"), tree_path(@commit.id) %>
      .
    </p>
    

    但有时秩序和位置确实重要, 在这种情况下,我们可以尝试更聪明。

    views.commits.message: "This is the initial commit in this repository %{link}"
    views.commits.browse:  "browse the initial tree state"
    

    然后我们可以在正确的位置插入链接

    <p>
      <%= t "views.commits.message", link: link_to(t("views.commits.browse"), tree_path(@commit.id)) %>
    </p>