4

任意のツールや宝石、または 2 つ以上の yml ファイルと同期することは可能ですか?

例えば。私はel.ymlと呼ばれるギリシャ語の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 Synchronizerで同様のツールを使用していますが、それはまさにそれを行いますが、resx ファイルの場合です。

4

4 に答える 4

2

私はこれのために私自身のレーキタスクを書いた:

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は変更されません。

于 2011-03-23T13:06:44.243 に答える
1

どちらも見つからなかったので、小さな宝石を書きました: http://github.com/nofxx/i18n_sync

于 2010-05-17T05:15:49.540 に答える
1

これはまさにあなたが必要としているものではありませんが、http: //www.github.com/mynewsdesk/translate を調べてみると役に立つかもしれません。

見積もり:

このプラグインは、Rails I18n テキスト (Rails 2.2 以降が必要) をあるロケールから別のロケールに翻訳するための Web インターフェースを提供します。このプラグインは、Rails に同梱されている単純な I18n バックエンドでのみテストされています。I18n テキストは、config/locales の下の YAML ファイルから読み書きされます。

于 2009-10-03T17:27:32.563 に答える
0

locale_assistant gem を試すことができます。より多くのディレクトリにさらに多くのファイルがある場合、非常に便利です。

https://github.com/jsaak/locale_assistant

(私はこの宝石の作成者です)

于 2013-03-04T21:46:15.403 に答える