Rspec 测试区域设置是否具有相同的键
Rspec test if locales have the same keys
在这里回答我自己的问题,因为我认为这可能对很多人有用。
我如何才能 rspec 验证区域设置是否具有相同的键以便没有遗漏任何翻译?
这对我来说适用于 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
改编自此处的答案
在这里回答我自己的问题,因为我认为这可能对很多人有用。
我如何才能 rspec 验证区域设置是否具有相同的键以便没有遗漏任何翻译?
这对我来说适用于 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
改编自此处的答案