aboutsummaryrefslogtreecommitdiffstats
path: root/lib/tasks/gettext.rake
diff options
context:
space:
mode:
Diffstat (limited to 'lib/tasks/gettext.rake')
-rw-r--r--lib/tasks/gettext.rake47
1 files changed, 46 insertions, 1 deletions
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