Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何有选择地停用Rails I18n转换\u缺失的跨距?_Ruby On Rails_Internationalization_Ruby On Rails 5_Rails I18n - Fatal编程技术网

Ruby on rails 如何有选择地停用Rails I18n转换\u缺失的跨距?

Ruby on rails 如何有选择地停用Rails I18n转换\u缺失的跨距?,ruby-on-rails,internationalization,ruby-on-rails-5,rails-i18n,Ruby On Rails,Internationalization,Ruby On Rails 5,Rails I18n,在我的Rails 5.2应用程序中,除了管理区域外,几乎所有的UI都使用t()进行了国际化。“翻译缺失”的跨度通常会破坏布局,但我认为这是一个值得付出的代价,以便知道我何时可能拼错了密钥或未提交文件或其他内容。然而,有一个地方跨度确实不起作用,那就是当涉及到人们在我的团队中所扮演的自我描述的角色时。角色可以是预定义的字符串,它们是我的en.yml的一部分,比如“协调员”、“司库”等等,但它们也可以是插入式的,比如“令人敬畏的部长”。因此,执行t(“groups.roles.”+role)是不起作

在我的Rails 5.2应用程序中,除了管理区域外,几乎所有的UI都使用t()进行了国际化。“翻译缺失”的跨度通常会破坏布局,但我认为这是一个值得付出的代价,以便知道我何时可能拼错了密钥或未提交文件或其他内容。然而,有一个地方跨度确实不起作用,那就是当涉及到人们在我的团队中所扮演的自我描述的角色时。角色可以是预定义的字符串,它们是我的en.yml的一部分,比如“协调员”、“司库”等等,但它们也可以是插入式的,比如“令人敬畏的部长”。因此,执行
t(“groups.roles.”+role)
是不起作用的,因为“缺少翻译”的跨度会弄乱布局。这在以前版本的Rails中不是问题,因为生产环境会自动禁用“translation missing”跨距,并且只显示键的最后一部分,也就是说,正是我想要的功能。在Rails 5.2中,跨度也出现在生产中,这是一个问题,至少对这部分来说是这样

我真正想要的功能,过去是标准的,是:

  • 如果翻译存在,则显示它
  • 如果翻译不存在,则显示en.yml中的英语字符串(英语定义为后备语言)
  • 如果英语也不存在,则显示键的最后一部分。“翻译缺失”的跨度在发展中,而在生产中却没有

  • 我在这里浏览了关于如何在生产中禁用这些错误消息的所有答案,建议的解决方案似乎适合Rails 4或不起作用。或者,它们的副作用是停用回退翻译,这对我来说是一个不可接受的权衡,因为我的大部分应用程序都需要英语回退。覆盖或扩展似乎是一项重要的任务,特别是因为我只希望在生产中删除跨度(就像它过去的工作一样)。因此,就我的情况而言,就目前而言,我决定不进行完全覆盖,我只在一个地方更改了辅助对象,我希望在这个地方缺少翻译,这不是问题:

    def human_role(role)
      str = t("groups.roles." + role)
      if str.include?("translation missing")
        role
      else 
        str
      end
    end
    
    您可以使用如下选项:

    t("groups.roles.#{role}", default: role)
    
    如果您希望在开发中有
    “翻译缺失”
    ,而在生产中没有它们(这有点难看):


    我试过了,但是默认设置覆盖了英语。我需要它先退回到英语,然后用这个键作为第二个退路。(“角色不需要翻译,只需要其他角色)
    t("groups.roles.#{role}", default: Rails.env.development? ? "#{role} translation missing" : role)