gpt4 book ai didi

ruby-on-rails - 在 Rails 中同步语言环境 yml 文件工具

转载 作者:行者123 更新时间:2023-12-04 06:13:46 26 4
gpt4 key购买 nike

我想知道,是否可以与任何工具或 gem 或 w/e 2 或更多 yml 文件同步?

例如。我有一个名为 el.yml 的希腊 yml 文件

el:
layout:
home: "Αρχική"

英文名为 en.yml
en:
layout:
home: "Home"
category: "Category"

是否有任何基于单个 yml 文件的工具,即 en.yml ( root ) 转到其余 ymls 并使用默认 (en.yml) 值创建缺少的翻译?

运行这样一个工具后,我希望 el.yml 变成这样:
el:
layout:
home: "Αρχική"
category: "Category"

我在 .NET 中使用类似的工具 RESX Synchronizer它确实如此,但对于 resx 文件。

最佳答案

我刚刚为此编写了自己的 rake 任务:

LOCALES_PATH  = "#{Rails.root}/config/locales/*.yml"
MASTER_LOCALE = "#{Rails.root}/config/locales/en.yml"

class Hash
def to_yaml( opts = {} )
YAML::quick_emit( object_id, opts ) do |out|
out.map( taguri, to_yaml_style ) do |map|
sort.each do |k, v| # "sort" added
map.add( k, v )
end
end
end
end
end

namespace :locales do
task :merge do
require 'yaml'
master = YAML::load_file MASTER_LOCALE
master_language_code = File.basename(MASTER_LOCALE, '.yml')
Dir[LOCALES_PATH].each do |file_name|
if file_name == MASTER_LOCALE
puts "=> skipping master locale #{File.basename(MASTER_LOCALE)}"
next
end
language_code = File.basename(file_name, '.yml')
slave = YAML::load_file(file_name)
unless slave[language_code]
puts "-> ERROR on #{File.basename(file_name)}: can't find key '#{language_code}'!"
next
end
merged = master[master_language_code].deep_merge(slave[language_code])
final = { language_code => merged } # remove other keys
File.open(file_name, 'w') do |file|
file.write final.to_yaml.gsub(/\s+$/, '')
end
puts "+ merged #{File.basename(file_name)} with master"
end
end
end

它做了一个简单的合并()。在您的情况下,它采用 en.yml 并将 el.yml 合并到其中并将其保存为 el.yml。 en.yml 没有被触及。

关于ruby-on-rails - 在 Rails 中同步语言环境 yml 文件工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1513966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com