summaryrefslogtreecommitdiff
path: root/lib/tasks/i18n.rake
blob: 2392d8ae30b37ad85d5a91d31378f63fbd67cc30 (plain)
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
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
    en_yml = File.join(Rails.root, '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/') 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

  desc "pull translations from transifex"
  task :download do
    Dir.chdir('config/') do
      if !File.exists?('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 "downloading #{lang}"
        `curl -L --netrc-file transifex.netrc -X GET 'https://www.transifex.com/api/2/project/bitmask/resource/leap_web/translation/#{lang}/?file' > locales/#{lang}.yml`
      end
    end
  end

end