Rails 国际化 – 使用 Presenter 类进行惰性查找

问题描述 投票:0回答:1
Rails Guide 的

4.1.4 解释了国际化 gem 的“惰性”查找。

举个例子:

en.yml

en: clients: show: good client: 5 Star Client
应用程序/视图客户端/show.html.erb

<%= t '.good client' %>
呈现 5 星级客户端(从视图中推断clients.show 位)。
如果我现在想将视图逻辑移至 Presenter 或 Decorator 类中,我可以将视图更改为

<%= ClientPresenter.new.good_client %>
并添加
应用程序/演示者/client_presenter.rb

class ClientPresenter def good_client I18n.t('clients.show.good_client') end end
我获得了 Presenter 类的好处,但代价是翻译方法的参数更加冗长。 (clients.show 不会在视图/控制器之外推断)。我可以将 en.yml 更改为

en: good client: 5 Star Client
以及演讲者的方法

def good_client I18n.t('good_client') end
但是随后我丢失了 yml 文件中的组织结构...

我可以将视图逻辑提取到 Presenter 类中

并且保持翻译参数简洁并且保持 yml 文件组织良好吗?

ruby-on-rails internationalization decorator lazy-evaluation presenter
1个回答
0
投票
您必须将视图实例传递给您的演示者:

class ClientPresenter def initialize(view) @view = view end delegate :t, to: :@view def good_client t ".good_client" end end
<%= ClientPresenter.new(self).good_client %>


您也可以传递

t

 方法本身,但这可能是想太多了:

class ClientPresenter def initialize(t:) @translate = t end def good_client t ".good_client" end private def t(...) @translate.call(...) end end
<%= ClientPresenter.new(t: method(:t)).good_client %>
    
© www.soinside.com 2019 - 2024. All rights reserved.