# This script pulls translation files from Transifex and ensures they are in the format we need. # You need the Transifex client installed. # http://docs.transifex.com/developer/client/setup # # Don't use this script to create pull requests. Do translations in Transifex. The Discourse # team will pull them in. require 'open3' if `which tx`.strip.empty? puts "", "The Transifex client needs to be installed to use this script." puts "Instructions are here: http://docs.transifex.com/developer/client/setup" puts "", "On Mac:", "" puts " curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py" puts " sudo python get-pip.py" puts " sudo pip install transifex-client", "" exit 1 end puts "Pulling new translations...", "" command = "tx pull --mode=developer #{ARGV.include?('force') ? '-f' : ''}" Open3.popen2e(command) do |stdin, stdout_err, wait_thr| while line = stdout_err.gets puts line end end puts "" unless $?.success? puts "Something failed. Check the output above.", "" exit $?.exitstatus end YML_FILE_COMMENTS = <<END # encoding: utf-8 # # Never edit this file. It will be overwritten when translations are pulled from Transifex. # # To work with us on translations, join this project: # https://www.transifex.com/projects/p/discourse-org/ END ALL_LOCALES = Dir.glob( File.expand_path("../../config/locales/client.*.yml", __FILE__) ).map {|x| x.split('.')[-2]}.sort LOCALE_MAPPINGS = [['fr', 'fr_FR'], ['es', 'es_ES'], ['pt', 'pt_PT'], ['ko', 'ko_KR']] YML_DIRS = ['config/locales', 'plugins/poll/config/locales', 'vendor/gems/discourse_imgur/lib/discourse_imgur/locale'] # Change root element in yml files for some languages because Transifex uses a different # locale code. LOCALE_MAPPINGS.each do |ours, theirs| ['client', 'server'].each do |base| YML_DIRS.each do |dir| contents = [] file_name = File.expand_path("../../#{dir}/#{base}.#{ours}.yml", __FILE__) found = false next unless File.exists?(file_name) File.open(file_name, 'r') do |file| file.each_line do |line| if found or line.strip != "#{theirs}:" contents << line else contents << "#{ours}:" found = true end end end File.open(file_name, 'w+') do |f| f.puts(YML_FILE_COMMENTS, '') unless contents[0][0] == '#' f.puts contents end end end end # Add comments to the top of files (ALL_LOCALES - LOCALE_MAPPINGS.map(&:first)).each do |locale| ['client', 'server'].each do |base| YML_DIRS.each do |dir| file_name = File.expand_path("../../#{dir}/#{base}.#{locale}.yml", __FILE__) next unless File.exists?(file_name) contents = File.readlines(file_name) File.open(file_name, 'w+') do |f| f.puts(YML_FILE_COMMENTS, '') unless contents[0][0] == '#' f.puts contents end end end end