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
|
require 'yaml'
require 'fileutils'
def process_locale_file(output, file)
## print separator to see where another file begins
output.write("\n\n" + '#' * 40 + "\n" + '### ' + file + "\n")
output.write(
# remove the toplevel "en" key
YAML.dump(YAML.load_file(file)['en']).lines.map {
|line| " #{line}" # << prefix all lines with two spaces (we're nested below "en:")
}[
1..-1 # << skip the first line (it's "---" and freaks out the parser if it sees it multiple times in a file)
].join
)
end
namespace :i18n do
#
# for coding, it helps to have the english strings in separate files.
# for translating, it helps to have a single file. This action will combine
# the small files into one big one.
#
# Also, transifex insists that the files be en_US and not just en.
# grrr. transifex is configured to automatically update from the
# file lib/en_US.yml.
#
desc "combine config/locales/*.en.yml to lib/en_US.yml"
task :bundle do
Dir.chdir(Rails.root) do
en_yml = 'lib/en_US.yml'
File.open(en_yml, 'w') do |output|
output.write("en_US:\n\n"+
"### Do NOT edit this file directly, as all changes will be overwritten by `rake i18n:bundle`\n"+
"### Instead, make changes in the appropriate file in config/locales.\n"+
"### Source strings in transifex are automatically updated from this file (via github url)")
Dir.chdir('config/locales/en') do
Dir.glob('*.en.yml').sort.each do |file|
process_locale_file(output, file)
end
end
Dir.chdir('engines') do
Dir.glob('*/config/locales/en.yml').sort.each do |file|
process_locale_file(output, file)
end
end
puts "You can now find the bundled locale yml in: #{en_yml}"
end
end
end
#
# I have not been able to get fallback from :pt => :'pt-BR' working.
# The rails guide implies that it does not work, even though I18n has
# a fallback mechanism.
# For now, just use a single language for ever locale.
#
LOCALE_ALIAS_MAP = {
:nb => 'nb-no',
:pt => 'pt-br'
}
desc "pull translations from transifex"
task :download do
Dir.chdir('config/') do
if !File.exist?('transifex.netrc')
puts "In order to download translations, you need a config/transifex.netrc file."
puts "For example:"
puts "machine www.transifex.com login yourusername password yourpassword"
exit
end
APP_CONFIG[:available_locales].each do |lang|
next if lang == :en
puts
puts "downloading #{lang}"
lang_url_segment = LOCALE_ALIAS_MAP[lang] || lang
url = "https://www.transifex.com/api/2/project/bitmask/resource/leap_web/translation/#{lang_url_segment}/?file"
command = %[echo "#{lang}:" > locales/#{lang}.yml && ]+
%[curl -L --netrc-file transifex.netrc -X GET '#{url}' ]+
%[| tail -n +2 >> locales/#{lang}.yml]
puts command
`#{command}`
end
end
end
end
|