Ruby on rails Rails中的同步语言环境yml文件工具
我想知道,是否可以与任何工具或gem或w/e 2或更多yml文件同步 我有一个希腊yml文件,叫做el.ymlRuby on rails Rails中的同步语言环境yml文件工具,ruby-on-rails,localization,yaml,Ruby On Rails,Localization,Yaml,我想知道,是否可以与任何工具或gem或w/e 2或更多yml文件同步 我有一个希腊yml文件,叫做el.yml el: layout: home: "Αρχική" 还有一个叫en.yml的英国人 en: layout: home: "Home" category: "Category" 有没有基于单个yml文件(即en.yml(root))的工具,该文件会转到yml的其余部分,并使用默认值(en.yml)创建缺少的翻译 运行这样一个工具后,我希望el.yml
el:
layout:
home: "Αρχική"
还有一个叫en.yml的英国人
en:
layout:
home: "Home"
category: "Category"
有没有基于单个yml文件(即en.yml(root))的工具,该文件会转到yml的其余部分,并使用默认值(en.yml)创建缺少的翻译
运行这样一个工具后,我希望el.yml变成这样:
el:
layout:
home: "Αρχική"
category: "Category"
我在.NET中使用了一个类似的工具,它确实可以做到这一点,但对于resx文件来说。这并不完全是您所需要的,但是签出可能会很有用 引述: 该插件提供了一个web界面,用于将Rails I18n文本(需要Rails 2.2或更高版本)从一个语言环境转换到另一个语言环境。该插件仅使用Rails附带的简单I18n后端进行了测试。I18n文本从config/locales下的YAML文件中读取和写入
也没有找到,所以我写了一个小宝石:
我刚刚为此编写了自己的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
它执行一个简单的merge()。在您的例子中,它接受en.yml并将el.yml合并到其中,并将其保存为el.yml。en.yml不会被触碰。您可以试试locale\u assistant gem。如果你在更多的目录中有更多的文件,那就很方便了
(我是这个gem的创建者)具有很好的功能,但在这个阶段似乎处于休眠状态-过去2年没有签入,公开问题包括“不适用于Rails 3”。有点惭愧。小心自我推销,看看;它很快被视为垃圾邮件。我们希望您能给出一个小小的“我是维护者”免责声明。:-)