ruby-on-rails - 如何有选择地停用 Rails I18n translation_missing spans?
问题描述
在我的 Rails 5.2 应用程序中,我几乎所有的 UI(管理区域除外)都使用 t() 进行了国际化。“翻译缺失”跨度经常破坏布局,但我认为这是值得付出的代价,以便知道我何时可能拼错了键或未提交文件或其他内容。然而,有一个地方跨度确实不起作用,那就是当涉及到人们在我的小组中所拥有的自我描述的角色时。这些角色可以是我的 en.yml 中的预定义字符串,例如“coordinator”、“treasurer”等,但它们也可以是写入的,例如“minister of awesome”。这样做t("groups.roles." + role)
不起作用,因为“翻译缺失”跨度会弄乱布局。这在以前版本的 Rails 中不是问题,因为生产环境中自动禁用了“翻译缺失”跨度,并且只显示了密钥的最后一部分,即正是我想要的功能。在 Rails 5.2 中,跨度也出现在生产环境中,这是一个问题,至少对于这一部分而言。
我真正想要的功能,曾经是标准的,是:
- 如果翻译存在,则显示它。
- 如果翻译不存在,则显示来自 en.yml 的英文字符串(英文被定义为备用语言)
- 如果英文也不存在,则显示密钥的最后一部分。在开发中“缺少翻译”跨度,而在生产中没有它们。
解决方案
我在这里浏览了有关如何在生产中禁用这些错误消息的所有答案,建议的解决方案似乎适用于 Rails 4 或不起作用。或者它们具有停用后备翻译的副作用,这对我来说是一个不可接受的权衡,因为我的大部分应用程序都需要英语后备。覆盖或扩展TranslationHelper似乎是一项艰巨的任务,尤其是因为我只希望在生产中删除跨度(就像它曾经工作的那样)。因此,就我的情况而言,就目前而言,我决定不进行完全覆盖,并且只在我希望缺少不成问题的翻译的地方更改了助手:
def human_role(role)
str = t("groups.roles." + role)
if str.include?("translation missing")
role
else
str
end
end
推荐阅读
- wordpress - 需要打印由我当前的分类页面过滤的帖子吗?
- numpy - 从其批处理版本重建火炬张量
- angular - *ngIf 导致 android 键盘关闭
- c# - 如何使用存储库模式在 EF Core 3.0 中进行并行异步查询?
- javascript - 有没有办法让 slackbot 在它调用的任何频道中发帖
- java - 如何在 Java 中创建和访问列表列表的列表?
- swift - Collectionview滚动交叉顶部uiview
- ruby - 如何使用 ruby flat_map 映射到子元素和父元素的元组
- google-chrome-extension - 如何在 Google Chrome 内容脚本中使用 Tippy.js?
- bash - 有没有可能做`做; 健康)状况; 而;`在bash?