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 文件组织良好吗?
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 %>