代码之家  ›  专栏  ›  技术社区  ›  Kostas Konstantinidis

Rails中的同步区域设置yml文件工具

  •  4
  • Kostas Konstantinidis  · 技术社区  · 16 年前

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

    en:
      layout:
        home: "Home"
        category: "Category"
    

    是否有任何基于单个yml文件(即en.yml(root))的工具,可以访问其他yml并使用默认(en.yml)值创建缺失的翻译?

    运行这样一个工具后,我希望el.yml变成这样:

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

    RESX Synchronizer

    4 回复  |  直到 13 年前
        1
  •  1
  •   himynameisjonas Petros    15 年前

    我刚刚为此编写了自己的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
    

        2
  •  2
  •   pseidemann    15 年前

    这不是你真正需要的,但也许可以看看 http://www.github.com/mynewsdesk/translate out可以证明是有用的。

    报价:

        3
  •  1
  •   nofxx    16 年前