diff --git a/lib/gettext/tools/msginit.rb b/lib/gettext/tools/msginit.rb index 710d013b..3e8a06e3 100644 --- a/lib/gettext/tools/msginit.rb +++ b/lib/gettext/tools/msginit.rb @@ -62,6 +62,7 @@ def initialize @output_file = nil @locale = nil @language = nil + @charset = nil @entry = nil @comment = nil @translator = nil @@ -180,6 +181,11 @@ def validate end @locale = language_tag.to_simple.to_s @language = language_tag.language + if language_tag.respond_to?(:charset) + @charset = language_tag.charset + else + @charset = Locale.charset + end @output_file ||= "#{@locale}.po" if File.exist?(@output_file) @@ -280,6 +286,7 @@ def replace_entry replace_pot_revision_date replace_language replace_plural_forms + replace_charset end def replace_comment @@ -325,6 +332,12 @@ def replace_plural_forms end end + CONTENT_TYPE_CHARSET = /^(Content-Type:.+ charset=)CHARSET/ + + def replace_charset + @entry = @entry.gsub(CONTENT_TYPE_CHARSET, "\\1#{@charset}") + end + def plural_forms(language) converter = CLDRPluralsConverter.new(language) converter.convert diff --git a/test/tools/test_msginit.rb b/test/tools/test_msginit.rb index 27e6e8ac..69aa5f3c 100644 --- a/test/tools/test_msginit.rb +++ b/test/tools/test_msginit.rb @@ -49,6 +49,10 @@ def current_language Locale.current.language end + def current_charset + Locale.current.charset + end + def translator_name "me" end @@ -57,6 +61,10 @@ def translator_email "me@example.com" end + def template_charset + "CHARSET" + end + def create_pot_file(path, options=nil) options ||= {} File.open(path, "w") do |pot_file| @@ -77,6 +85,7 @@ def pot_header(options) options = default_po_header_options.merge(options) package_name = options[:package_name] || default_package_name have_plural_forms = options[:have_plural_forms] || true + charset = options[:charset] || "UTF-8" header = <\\n" "MIME-Version: 1.0\\n" -"Content-Type: text/plain; charset=UTF-8\\n" +"Content-Type: text/plain; charset=#{charset}\\n" "Content-Transfer-Encoding: 8bit\\n" EOF if have_plural_forms @@ -109,6 +118,7 @@ def po_header(locale, language, options={}) name = options[:translator_name] || "FULL NAME" email = options[:translator_email] || "EMAIL@ADDRESS" language_name = Locale::Info.get_language(language).name + charset = options[:charset] || "UTF-8" plural_forms = @msginit.send(:plural_forms, language) <