4

我正在尝试使用 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 团队在整个应用程序中都使用了这种方法,这意味着我不能不花一天的时间就将逻辑转移到辅助方法中。

我做了一些研究,发现这个线程关于确切的行。

这是问题的答案。

这似乎表明您的系统上安装了 i18n gem;此 gem 与 Gitorious 不兼容。用 Rubygems 卸载它应该可以解决这个问题。

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

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

4

1 回答 1

1

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

使用降价来简化它

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. 这两个的顺序和位置

如果链接相对于文本的位置不需要更改,则 @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>
于 2013-01-28T00:56:58.567 回答