ref: master
lib/tasks/gettext.rake
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# # Added for Ruby-GetText-Package # require 'pathname' require 'gettext/tools/task' GetText::Tools::Task.define do |task| task.domain = 'noosfero' task.enable_po = true task.po_base_directory = 'po' task.mo_base_directory = 'locale' task.files = [ "{app,lib}/**/*.{rb,rhtml,erb}", 'config/initializers/*.rb', 'public/*.html.erb', 'public/designs/themes/{base,noosfero,profile-base}/*.{rhtml,html.erb}', ].map { |pattern| Dir.glob(pattern) }.flatten # installed, no po/ available if !File.directory?(task.po_base_directory) task.locales = Dir.chdir(task.mo_base_directory) { Dir.glob('*') } end end task 'gettext:mo:update' => :symlinkmo task :symlinkmo do langmap = { 'pt' => 'pt_BR', } root = Pathname.new(File.dirname(__FILE__) + '/../..').expand_path mkdir_p(root.join('locale')) Dir.glob(root.join('po/*/')).each do |dir| lang = File.basename(dir) orig_lang = langmap[lang] || lang mkdir_p(root.join('locale', "#{lang}", 'LC_MESSAGES')) ['iso_3166'].each do |domain| origin = "/usr/share/locale/#{orig_lang}/LC_MESSAGES/#{domain}.mo" target = root.join('locale', "#{lang}", 'LC_MESSAGES', "#{domain}.mo") if !File.symlink?(target) ln_sf origin, target end end end end Dir.glob('plugins/*').each do |plugindir| plugin = File.basename(plugindir) po_root = File.join(plugindir, 'po') next if Dir["#{po_root}/**/*.po"].empty? namespace "noosfero:plugin:#{plugin}" do GetText::Tools::Task.define do |task| task.domain = plugin task.enable_po = true task.po_base_directory = po_root task.mo_base_directory = File.join(plugindir, 'locale') task.files = Dir["#{plugindir}/**/*.{rb,html.erb}"] end task "gettext:po:cleanup" do plugin_pot = File.join(po_root, plugin + '.pot') if File.exists?(plugin_pot) && system("LANG=C msgfmt --statistics --output /dev/null #{plugin_pot} 2>&1 | grep -q '^0 translated messages.$'") rm_f plugin_pot end sh 'find', po_root, '-type', 'd', '-empty', '-delete' end task "gettext:po:update" do Rake::Task["noosfero:plugin:#{plugin}:gettext:po:cleanup"].invoke end task "gettext:mo:update" do Rake::Task["noosfero:plugin:#{plugin}:gettext:po:cleanup"].invoke end end task 'gettext:po:update' => "noosfero:plugin:#{plugin}:gettext:po:update" task 'gettext:mo:update' => "noosfero:plugin:#{plugin}:gettext:mo:update" end def checkpo(po_files) max = po_files.map(&:size).max po_files.each do |po| printf "%#{max}s: ", po system "msgfmt --statistics --output /dev/null " + po end end desc "checks core translation files" task :checkpo do checkpo(Dir.glob('po/*/noosfero.po')) end languages = Dir.glob('po/*').select { |d| File.directory?(d) }.map { |d| File.basename(d) } languages.each do |lang| desc "checks #{lang} translation files" task "checkpo:#{lang}" do checkpo(Dir.glob("po/#{lang}/*.po") + Dir.glob("plugins/*/po/#{lang}/*.po")) end end task :makemo => 'tmp/makemo.stamp' file 'tmp/makemo.stamp' do |t| sh 'find po plugins/*/po -name "*.po" -exec touch "{}" ";"' Rake::Task['gettext:mo:update'].invoke touch t.name end task :updatepo => 'gettext:po:update' do Dir.glob('{po,plugins}/**/*.po').each do |po| sh "cp #{po} #{po}.tmp && msguniq -o #{po} #{po}.tmp && rm -f #{po}.tmp" end end # vim: ft=ruby |