gettext.rake
2.73 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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#
# Added for Ruby-GetText-Package
#
require 'pathname'
makemo_stamp = 'tmp/makemo.stamp'
desc "Create mo-files for L10n"
task :makemo => makemo_stamp
file makemo_stamp => Dir.glob('po/*/noosfero.po') do
Rake::Task['symlinkmo'].invoke
require 'gettext'
require 'gettext/tools'
GetText.create_mofiles(
verbose: true,
po_root: 'po',
mo_root: 'locale',
)
Dir.glob('plugins/*').each do |plugindir|
GetText.create_mofiles(
verbose: true,
po_root: File.join(plugindir, 'po'),
mo_root: File.join(plugindir, 'locale'),
)
end
FileUtils.mkdir_p 'tmp'
FileUtils.touch makemo_stamp
end
task :cleanmo do
rm_f makemo_stamp
end
task :clean => 'cleanmo'
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
desc "Update pot/po files to match new version."
task :updatepo do
puts 'Extracting strings from source. This may take a while ...'
files_to_translate = [
"{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
require 'gettext'
require 'gettext/tools'
GetText.update_pofiles(
'noosfero',
files_to_translate,
Noosfero::VERSION,
{
po_root: 'po',
}
)
end
Dir.glob('plugins/*').each do |plugindir|
plugin = File.basename(plugindir)
task :updatepo => "updatepo:plugin:#{plugin}"
desc "Extract strings from #{plugin} plugin"
task "updatepo:plugin:#{plugin}" do
files = Dir.glob("#{plugindir}/**/*.{rb,html.erb}")
po_root = File.join(plugindir, 'po')
require 'gettext'
require 'gettext/tools'
GetText.update_pofiles(
plugin,
files,
Noosfero::VERSION,
{
po_root: po_root,
}
)
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'
puts
end
end
task :checkpo do
sh 'for po in po/*/noosfero.po; do echo -n "$po: "; msgfmt --statistics --output /dev/null $po; done'
end
# vim: ft=ruby