Rails Form Builder 的 label for radio button 的 locales 文件该如何写

weiwei5987 · 2015年08月07日 · 最后由 yangman_wenzhu 回复于 2015年10月22日 · 1830 次阅读

在form中,如果是text_field,那么视图文件可以像下面这么写:

<div class="field">
    <%= f.label :amounts %><br>
    <%= f.text_field :amounts %>
</div>

对应的locales文件呢,可以如下写:

helpers:
    label:
      account_record:
        amounts: "金额"

但是如果是radio button,视图文件得写成这样:

<div class="field">
    <%= f.radio_button :incoming_or_outgoing, 'incoming', :checked => true %>
    <%= f.label :incoming_or_outgoing, I18n.t(:incoming), :value => 'incoming' %>
    <%= f.radio_button :incoming_or_outgoing, 'outgoing' %>
    <%= f.label :incoming_or_outgoing, I18n.t(:outgoing), :value => 'outgoing' %>
</div>

对应的locals文件没法把incoming和outgoing放在Model下面了。。。

请问该如何解决呢?谢谢回答。

共收到 10 条回复
1楼 已删除

请问楼主 只是要一个解决方法吗? i18n用full path行不?

I18n.t("helper.label.account_record.incoming")

#2楼 @flemon 谢谢回答,这样刚才试了一下没成功。 是不是I18n没有这种radio button等组件的国际化呢?

#1楼 @weiwei5987 好像不应该说是I18n,应该是form builder的

楼主怎么试的?发个代码看看,因为我觉得这个跟radio button没什么关系的,除非你用t()而不是I18n.t,因为view下得t()有个默认路径

6楼 已删除

#5楼 @flemon 不好意思,是我写的不对,给你添麻烦了。 full path行得通,但是和前面的label不一样的是,radio button的两个label都是for :incoming_or_outgoing,但是要显示的文字不一样,想必你在开发中也遇到过同样的问题,form build能自动为两个label生成不同的显示文字么?谢谢。

我的理解是应该可以的

f.label :incoming_or_outgoing, I18n.t("xx.xx.incoming_or_outgoing") #这是这个radio box选项的label
f.label :incoming_or_outgoing, I18n.t("xx.xx.incoming"), value: "incoming" #这是选项"incoming"的label
f.label :incoming_or_outgoing, I18n.t("xx.xx.outgoing"), value: "outgoing" #这是选项"outgoing"的label

但是因为没有亲自调试,要是我理解错了,请告知

#8楼 @flemon 你是对的,这样就是可行的,就是觉得没普通的label那样不用写full path那么自然

总会有点美中不足的。。。 如果是我的话,我会用t()而不是I18n.t(),路径是跟文件路径一致的,例如在app/views/account_records/_form.html.erb里使用代码<%= t(".radio_label.incoming") %>会寻找yaml路径account_records.index.form.radio_label.incoming

具体请看文档4.1.4 "Lazy" Lookup

在 app/config/locales/ 建立views文件夹 在建立一个users/en.yml && zh-CN.yml application.rb 配置: config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
然后前端使用t('users.incoming')

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册