Class: Xlocalize::Executor
- Inherits:
-
Object
- Object
- Xlocalize::Executor
- Defined in:
- lib/xlocalize/executor.rb
Instance Method Summary collapse
- #download(wti, locales) ⇒ Object
- #export_master(wti, project, target, excl_prefix, master_lang) ⇒ Object
- #filename_from_xliff_provided_filename(file_name, locale) ⇒ Object
- #import(locales) ⇒ Object
- #import_plurals_if_needed(locale) ⇒ Object
- #import_xliff(locale) ⇒ Object
- #locale_file_name(locale) ⇒ Object
- #out_list_of_translations_of_locale(wti, locale, translations) ⇒ Object
- #plurals_file_name(locale) ⇒ Object
- #purelyze(locale, target, excl_prefix, project) ⇒ Object
- #push_master_file(wti, master_lang, master_file_name) ⇒ Object
Instance Method Details
#download(wti, locales) ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/xlocalize/executor.rb', line 91 def download(wti, locales) begin locales.each do |locale| puts "Downloading translations for #{locale}" translations = wti.pull(locale) out_list_of_translations_of_locale(wti, locale, translations).each do |out| File.open(out["path"], "w") do |file| file.write(out["content"]) puts "Done saving #{out['path']}.".green end end end rescue => err puts err.to_s.red end end |
#export_master(wti, project, target, excl_prefix, master_lang) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/xlocalize/executor.rb', line 19 def export_master(wti, project, target, excl_prefix, master_lang) master_file_name = locale_file_name(master_lang) # hacky way to finish xcodebuild -exportLocalizations script, because # since Xcode7.3 & OS X Sierra script hangs even though it produces # xliff output # http://www.openradar.me/25857436 File.delete(master_file_name) if File.exist?(master_file_name) system "xcodebuild -exportLocalizations -localizationPath ./ -project #{project} & sleep 0" while !File.exist?(master_file_name) do sleep(1) end purelyze(master_lang, target, excl_prefix, project) push_master_file(wti, master_lang, master_file_name) end |
#filename_from_xliff_provided_filename(file_name, locale) ⇒ Object
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/xlocalize/executor.rb', line 109 def filename_from_xliff_provided_filename(file_name, locale) parts = file_name.split('/') name = "" parts.each_with_index do |part, idx| name += "/" if idx > 0 if part.end_with?(".lproj") name += "#{locale}.lproj" elsif idx+1 == parts.count # TODO: join all parts till the last '.' name += "#{part.split('.')[0]}.strings" else name += part end end return name end |
#import(locales) ⇒ Object
161 162 163 164 165 166 167 168 |
# File 'lib/xlocalize/executor.rb', line 161 def import(locales) puts 'Importing translations' if $VERBOSE locales.each do |locale| import_xliff(locale) import_plurals_if_needed(locale) puts "Done #{locale}".green if $VERBOSE end end |
#import_plurals_if_needed(locale) ⇒ Object
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
# File 'lib/xlocalize/executor.rb', line 142 def import_plurals_if_needed(locale) plurals_fname = "#{locale}_plurals.yaml" return if !File.exist?(plurals_fname) plurals_yml = YAML.load_file(plurals_fname) plurals_yml[locale].each do |fname, trans_units| content = {} trans_units.each do |key, vals| content[key] = { "NSStringLocalizedFormatKey" => "%\#@value@", "value" => vals.merge({ "NSStringFormatSpecTypeKey" => "NSStringPluralRuleType", "NSStringFormatValueTypeKey" => "d" }) } end File.open(fname, 'w') { |f| f.write content.to_plist } end end |
#import_xliff(locale) ⇒ Object
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/xlocalize/executor.rb', line 126 def import_xliff(locale) Nokogiri::XML(open("#{locale}.xliff")).xpath("//xmlns:file").each do |node| File.open(filename_from_xliff_provided_filename(node["original"], locale), "w") do |file| (node > "body > trans-unit").each do |trans_unit| key = trans_unit["id"] target = (trans_unit > "target").text note = (trans_unit > "note").text note = "(No Commment)" if note.length <= 0 file.write "/* #{note} */\n" file.write "\"#{key}\" = #{target.inspect};\n\n" end end end end |
#locale_file_name(locale) ⇒ Object
15 16 17 |
# File 'lib/xlocalize/executor.rb', line 15 def locale_file_name(locale) return "#{locale}.xliff" end |
#out_list_of_translations_of_locale(wti, locale, translations) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/xlocalize/executor.rb', line 74 def out_list_of_translations_of_locale(wti, locale, translations) puts "Downloading translations for #{locale}" translations = wti.pull(locale) plurals_content = translations['plurals'] out_list = [{ "path" => "#{locale}.xliff", "content" => translations['xliff'] }] out_list << { "path" => "#{locale}_plurals.yaml", "content" => plurals_content } if not plurals_content.nil? return out_list end |
#plurals_file_name(locale) ⇒ Object
11 12 13 |
# File 'lib/xlocalize/executor.rb', line 11 def plurals_file_name(locale) return locale_file_name(locale) << '_plurals.yml' end |
#purelyze(locale, target, excl_prefix, project) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/xlocalize/executor.rb', line 53 def purelyze(locale, target, excl_prefix, project) locale_file_name = locale_file_name(locale) doc = Nokogiri::XML(open(locale_file_name)) puts "Removing all files not matching required targets" if $VERBOSE doc.filter_not_target_files(target) puts "Removing trans-unit's having reserverd prefix in their sources" if $VERBOSE doc.filter_trans_units(excl_prefix) puts "Filtering plurals" if $VERBOSE plurals = doc.filter_plurals(project) puts "Removing all files having no trans-unit elements after removal" if $VERBOSE doc.filter_empty_files puts "Writing modified XLIFF file to #{locale_file_name}" if $VERBOSE File.open(locale_file_name, 'w') { |f| f.write(doc.to_xml) } if !plurals.empty? puts "Writing plurals to plurals YAML file" if $VERBOSE File.open(plurals_file_name(locale), 'w') { |f| f.write({locale => plurals}.to_yaml) } end end |
#push_master_file(wti, master_lang, master_file_name) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/xlocalize/executor.rb', line 36 def push_master_file(wti, master_lang, master_file_name) # Pushing master file to WebtranslateIt begin puts "Uploading master file to WebtranslateIt" file = File.open(master_file_name, 'r') plurals_path = plurals_file_name(master_lang) plurals_file = File.exist?(plurals_path) ? File.open(plurals_path, 'r') : nil wti.push_master(file, plurals_file) puts "Done.".green rescue => err puts err.to_s.red ensure file.close unless file.nil? plurals_file.close unless plurals_file.nil? end if !wti.nil? end |