Rails(v6.0.3)+simple_form文件输入标签无法自动翻译,需显式配置吗?
Rails 6.0.3 + Simple Form 文件输入框翻译问题解决方案
文件输入框默认不会自动读取模型属性的翻译键,确实需要额外配置才能实现自动翻译,以下是几种可行的解决方式:
显式指定翻译文本
直接在调用input时传入翻译后的标签,或者调用翻译文件中的键:# 直接写翻译后的文本 f.input :document, as: :file, label: "文档" # 或者调用翻译文件中的键 f.input :document, as: :file, label: t('activerecord.attributes.your_model.document')注意把
your_model替换成你的实际模型名称,同时确保config/locales/zh-CN.yml中存在对应的翻译项。全局配置Simple Form,让文件输入自动读取翻译
在config/initializers/simple_form.rb中添加自定义的文件输入包装器,让它自动加载模型属性的翻译:SimpleForm.setup do |config| # 定义针对文件输入的包装器 config.wrappers :file_with_translated_label, tag: 'div', class: 'form-group', error_class: 'has-error' do |b| b.use :label, default_label: lambda { |input| # 自动拼接模型属性的翻译键 t("activerecord.attributes.#{input.object.class.model_name.i18n_key}.#{input.attr_name}") } b.use :input b.use :error, wrap_with: { tag: 'span', class: 'help-block' } b.use :hint, wrap_with: { tag: 'p', class: 'help-block' } end # 给file类型的输入指定使用这个包装器 config.input_mappings = { file: :file_with_translated_label } end配置完成后,直接使用
f.input :document, as: :file就能自动加载翻译后的标签了。简化配置:启用默认标签并确保翻译存在
如果你不想修改全局配置,可以在调用时加上label: true,同时确保翻译文件中存在对应项:f.input :document, as: :file, label: true对应的
zh-CN.yml翻译示例:zh-CN: activerecord: attributes: your_model: document: "文档"
内容的提问来源于stack exchange,提问作者Julian
相关产品推荐
相关产品推荐

