【问题标题】:Rspec test if locales have the same keysRspec 测试语言环境是否具有相同的键
【发布时间】:2020-07-07 05:33:48
【问题描述】:

在这里回答我自己的问题,因为我认为这可能对很多人有用。

如何让 rspec 验证语言环境是否具有相同的键,因此不会丢失任何翻译?

【问题讨论】:

    标签: rspec rails-i18n


    【解决方案1】:

    这对我来说适用于 2 个语言环境,但可以轻松适应更多语言环境。

    我们将 I18n 数据转换为像 ['key', 'key.key', 'key.other_key'] 这样的平面数组,现在我们可以检查两个数组是否包含相同的内容。

    def print_tr(data, prefix = '')
      if data.kind_of?(Hash)
        results = data.map { |key, value| print_tr(value, prefix.empty? ? key : "#{prefix}.#{key}") }
        return results.flatten
      else
        return prefix
      end
    end
    
    RSpec.describe 'i18n' do
      it 'has same keys in both locales' do
        all_en = print_tr(I18n.t('.', locale: :en)).map(&:to_s).sort
        all_ja = print_tr(I18n.t('.', locale: :ja)).map(&:to_s).sort
        all_same = all_en == all_ja
        expect(all_same).to be_truthy
        unless all_same
          p 'Translations missing in ja'
          p all_en - all_ja
        end
      end
    end
    

    改编自此答案https://stackoverflow.com/a/18324848/2558108

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多