ruby-on-rails - Rails - 查找不同语言环境之间丢失的键(.yml 文件)

标签 ruby-on-rails locale yaml routines

我有 2 个语言环境文件 en.ymlpt.yml。有些键仅存在于 pt.yml 上,而其他键仅存在于 en.yml

是否有方法或例程来列出所有这些键? (只是比较两个文件)

示例输出:

en.activerecord.attributes.person.hand
pt.activerecord.models.bird

Obs:除了 i18n-tasks Missing 任务之外的其他内容。

最佳答案

我发现这个解决方案非常完美。它来自 Kisko Labs 的博客文章。引用在这里:http://blog.kiskolabs.com/post/908453942/comparing-rails-locale-files-for-missing

LOCALE_1 = "~/Code/project/config/locales/fi.yml"
LOCALE_2 = "~/Code/project/config/locales/en.yml"
    
require 'yaml'
    
def flatten_keys(hash, prefix="")
  keys = []
  hash.keys.each do |key|
    if hash[key].is_a? Hash
      current_prefix = prefix + "#{key}."
      keys << flatten_keys(hash[key], current_prefix)
    else
      keys << "#{prefix}#{key}"
    end
  end
  prefix == "" ? keys.flatten : keys
end
 
def compare(locale_1, locale_2)
  yaml_1 = YAML.load(File.open(File.expand_path(locale_1)))
  yaml_2 = YAML.load(File.open(File.expand_path(locale_2)))

  keys_1 = flatten_keys(yaml_1[yaml_1.keys.first])
  keys_2 = flatten_keys(yaml_2[yaml_2.keys.first])

  missing = keys_2 - keys_1
  file = locale_1.split('/').last
  if missing.any?
    puts "Missing from #{file}:"
    missing.each { |key| puts "  - #{key}" }
  else
    puts "Nothing missing from #{file}."
  end
end

关于ruby-on-rails - Rails - 查找不同语言环境之间丢失的键(.yml 文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28194836/

相关文章:

ruby-on-rails - 我正在使用 `fcm` gem 发送推送通知,它适用于 Android,但不适用于 IOS

ruby-on-rails - 验证自定义单词

ruby-on-rails - Rails 服务器仍在新打开的 docker 容器中运行

javascript - Rails 4 的 EJS 不工作

python - 发生连接错误时Python Redis中的UnicodeDecodeError

ruby-on-rails - Active Record 序列化 attr 丢失字符串编码(可能是 YAML 问题),解决方法?

string - 如何在多行中打破 YAML 中的字符串?

python - 从字符串解析 python 日期 - 波兰语语言环境

android - 获取国家代码

java - 如何将嵌套 yaml 结构映射到 Java ConfigurationProvider Builder?