From 667c5a294c971742d7b80b9f11d472f0d50a033e Mon Sep 17 00:00:00 2001 From: Gareth Rees Date: Thu, 11 Dec 2014 15:14:16 +0000 Subject: Add task to clean theme translations --- lib/tasks/gettext.rake | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'lib/tasks/gettext.rake') diff --git a/lib/tasks/gettext.rake b/lib/tasks/gettext.rake index 3f357213f..6c88ebb7d 100644 --- a/lib/tasks/gettext.rake +++ b/lib/tasks/gettext.rake @@ -28,6 +28,22 @@ namespace :gettext do ) end + desc 'Rewrite theme .po files into a consistent msgmerge format' + task :clean_theme do + theme = ENV['THEME'] + unless theme + puts "Usage: Specify an Alaveteli-theme with THEME=[theme directory name]" + exit(0) + end + + load_gettext + + Dir.glob("#{ theme_locale_path(theme) }/*/app.po") do |po_file| + GetText::msgmerge(po_file, po_file, 'alaveteli', + :msgmerge => [:sort_output, :no_location, :no_wrap]) + end + end + def theme_files_to_translate(theme) Dir.glob("{lib/themes/#{theme}/lib}/**/*.{rb,erb}") end -- cgit v1.2.3 From cef6acf0683da45c37d1669349c56b73d993c8df Mon Sep 17 00:00:00 2001 From: Gareth Rees Date: Thu, 11 Dec 2014 15:16:34 +0000 Subject: Extract duplication in gettext theme tasks --- lib/tasks/gettext.rake | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'lib/tasks/gettext.rake') diff --git a/lib/tasks/gettext.rake b/lib/tasks/gettext.rake index 6c88ebb7d..9bdb6169b 100644 --- a/lib/tasks/gettext.rake +++ b/lib/tasks/gettext.rake @@ -11,11 +11,7 @@ namespace :gettext do desc "Update pot/po files for a theme." task :find_theme => :environment do - theme = ENV['THEME'] - unless theme - puts "Usage: Specify an Alaveteli-theme with THEME=[theme directory name]" - exit(0) - end + theme = find_theme(ENV['THEME']) load_gettext msgmerge = Rails.application.config.gettext_i18n_rails.msgmerge msgmerge ||= %w[--sort-output --no-location --no-wrap] @@ -30,12 +26,7 @@ namespace :gettext do desc 'Rewrite theme .po files into a consistent msgmerge format' task :clean_theme do - theme = ENV['THEME'] - unless theme - puts "Usage: Specify an Alaveteli-theme with THEME=[theme directory name]" - exit(0) - end - + theme = find_theme(ENV['THEME']) load_gettext Dir.glob("#{ theme_locale_path(theme) }/*/app.po") do |po_file| @@ -44,6 +35,14 @@ namespace :gettext do end end + def find_theme(theme) + unless theme + puts "Usage: Specify an Alaveteli-theme with THEME=[theme directory name]" + exit(0) + end + theme + end + def theme_files_to_translate(theme) Dir.glob("{lib/themes/#{theme}/lib}/**/*.{rb,erb}") end -- cgit v1.2.3 From 5486a2135689eb59b03da4f9f530b58fa270d676 Mon Sep 17 00:00:00 2001 From: Louise Crow Date: Wed, 18 Mar 2015 17:49:45 +0000 Subject: Add rake task for uppdating locale files with slightly changed msgids We don't really want to make all the translators retranslate strings that are basically the same but slightly tweaked in the English version. So this task just replaces the msgid in the app.po files for each locale. --- lib/tasks/gettext.rake | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) (limited to 'lib/tasks/gettext.rake') diff --git a/lib/tasks/gettext.rake b/lib/tasks/gettext.rake index 9bdb6169b..4df92b008 100644 --- a/lib/tasks/gettext.rake +++ b/lib/tasks/gettext.rake @@ -35,14 +35,59 @@ namespace :gettext do end end + desc 'Update locale files with slightly changed English msgids using a csv file of old to new strings' + task :update_msgids_from_csv do + mapping_file = find_mapping_file(ENV['MAPPING_FILE']) + mappings = {} + CSV.parse(clean_csv_mapping_file(mapping_file)) do |csv_line| + from,to = csv_line + mappings[from] = to + end + Dir.glob("locale/**/app.po").each do |po_file| + lang_mappings = mappings.clone + lines = [] + File.read(po_file).each_line do |line| + /^msgid "(.*)"/ =~ line + if $1 && mappings[$1] + lines << "msgid \"#{lang_mappings.delete($1)}\"" + else + lines << line + end + end + puts "Mappings unused in #{po_file}: #{lang_mappings.keys}" unless lang_mappings.empty? + File.open(po_file, "w") { |f| f.puts(lines) } + end + end + + # Use a quote for quote-escaping as CSV errors on the \" with "Missing or stray quote" + def clean_csv_mapping_file(file) + data = '' + File.foreach(file) do |line| + data += line.gsub('\"', '""') + end + data + end + def find_theme(theme) unless theme puts "Usage: Specify an Alaveteli-theme with THEME=[theme directory name]" - exit(0) + exit(1) end theme end + def find_mapping_file(file) + unless file + puts "Usage: Specify a csv file mapping old to new strings with MAPPING_FILE=[file name]" + exit(1) + end + unless File.exists?(file) + puts "Error: MAPPING_FILE #{file} not found" + exit(1) + end + file + end + def theme_files_to_translate(theme) Dir.glob("{lib/themes/#{theme}/lib}/**/*.{rb,erb}") end -- cgit v1.2.3