gettext.rake
2.83 KB
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
#
# 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
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_s 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
# vim: ft=ruby