如何将 i18n 翻译方法与 Draper gem 一起使用?

发布于 2024-12-10 14:37:40 字数 395 浏览 0 评论 0原文

我使用 Draper gem 来装饰我的模型。这里我有非常经典的设置:

# app/decorators/subject_decorator.rb
class SubjectDecorator < ApplicationDecorator
  decorates :subject

  def edit_link
    h.link_to(h.t('.edit'), '#')
  end
end

我使用 i18n 进行国际化。但是当我运行这个时,我得到:

Cannot use t(".edit") shortcut because path is not available

所以我想知道以前是否有人这样做过?它应该非常简单。

I use Draper gem to decorate my models. Here I have pretty classic settings:

# app/decorators/subject_decorator.rb
class SubjectDecorator < ApplicationDecorator
  decorates :subject

  def edit_link
    h.link_to(h.t('.edit'), '#')
  end
end

I use i18n for internationalization. But when I run this, I get:

Cannot use t(".edit") shortcut because path is not available

So I was wondering if anyone has done this before? It should be pretty straight forward.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

渡你暖光 2024-12-17 14:37:40

问题是你不能在装饰器中利用延迟查找,因为它们不没有任何上下文来确定视图文件级别(索引、显示、编辑等)。因此,开箱即用,您只需拼出整个内容,例如 t('subjects.show.edit') 或其他内容。

这就是我最终所做的事情,让它对我有所帮助。

class ApplicationDecorator < Draper::Base
  def translate(key, options={})
    if key.to_s[0] == '.'
      key = model_class.to_s.downcase.pluralize + key
    end

    I18n.translate(key, options)
  end
  alias :t :translate
end

这不会为您提供完整的 subjects.show.edit 参考,您只会获得 subjects.edit 但对我来说似乎总比没有好。

The problem is you can't take advantage of lazy lookup in decorators because they don't have any context to determine the view file level (index, show, edit, etc.). So out of the box you just need to spell out the whole thing like t('subjects.show.edit') or whatever.

Here's what I wound up doing to get it somewhat working for me.

class ApplicationDecorator < Draper::Base
  def translate(key, options={})
    if key.to_s[0] == '.'
      key = model_class.to_s.downcase.pluralize + key
    end

    I18n.translate(key, options)
  end
  alias :t :translate
end

This won't get you the full subjects.show.edit reference, you'll just get subjects.edit but it seemed better than nothing to me.

浮华 2024-12-17 14:37:40

在你的代码中你必须使用:

I18n.t('mylabelkey')

尝试一下......它应该可以工作

Inside your code you have to use :

I18n.t('mylabelkey')

give it a try... it should work

星星的軌跡 2024-12-17 14:37:40

您所要做的就是将其添加到装饰器类的顶部...

include Draper::LazyHelpers

...它可以处理许多最常见的帮助器方法,包括 i18n 内容。你也可以在 draper 类中放弃写所有这些“h”。

All you have to do is add this to the top of your decorator class...

include Draper::LazyHelpers

...and it handles many of the most common helper methods including i18n stuff. You can also ditch writing all those "h's" in your draper class.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文