You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails 5.1.4 | I18N:带空格的模型属性翻译异常问题

问题分析与解决

这不是Bug,是你不小心触发了重复翻译逻辑导致的问题,我给你拆解下其中的缘由:

问题根源

你写的代码<%= t(User.human_attribute_name("phone_number")) %>其实做了两次翻译相关的操作:

  1. 首先User.human_attribute_name("phone_number")会自动读取你en.yml里activerecord.attributes.user.phone_number的配置,直接返回你设置的"Phone number"。
  2. 接着你把这个返回的字符串传给了t()方法,t()会尝试去查找键为"Phone number"的翻译项,但你的配置里根本没有这个键,所以就弹出了那个translation_missing的提示框。

而当你把翻译改成单单词"Phonenumber"时,human_attribute_name返回"Phonenumber",此时t("Phonenumber")因为找不到对应翻译,会触发Rails的默认兜底逻辑——直接返回原字符串,所以看起来正常,但这其实是巧合,并非正确用法。

正确的两种写法

你只需要二选一就行:

  • 直接用human_attribute_name(这个方法本身就是用来获取模型属性人性化名称的,已经内置了翻译逻辑):
    <%= User.human_attribute_name("phone_number") %>
    
  • 或者直接用t()传入完整的翻译键:
    <%= t("activerecord.attributes.user.phone_number") %>
    

这两种写法都能正确渲染出"Phone number",不会再出现翻译缺失的提示。

内容的提问来源于stack exchange,提问作者Denis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:06:23