Localization fixes:

- Correct format specifiers.
- Fix missing trailing quote if following escaped quote. #385
- Don't put developer comments into generated headers unless --force-comments is used.
- Ruby 1.9.3 fix.
- Initial fuzzy support.
- Fix two character lang codes not working.
This commit is contained in:
Jim Derry 2016-03-22 10:35:03 +08:00
parent a5ae647ee3
commit 9ecdf30774
2 changed files with 25 additions and 12 deletions

View file

@ -363,6 +363,7 @@ module PoConvertModule
self.items[l_key] = {} unless items.has_key?(l_key) self.items[l_key] = {} unless items.has_key?(l_key)
self.items[l_key][num_case] = {} self.items[l_key][num_case] = {}
self.items[l_key][num_case][:comment] = comment self.items[l_key][num_case][:comment] = comment
self.items[l_key][num_case][:fuzzy] = ( comment =~ /\(fuzzy\)/i ) != nil
self.items[l_key][num_case][:case] = num_case self.items[l_key][num_case][:case] = num_case
self.items[l_key][num_case][:if_group] = nil self.items[l_key][num_case][:if_group] = nil
# Reconstitute Hex Escapes # Reconstitute Hex Escapes
@ -370,7 +371,7 @@ module PoConvertModule
line.lstrip.gsub(/\\x(..)/) { |g| [$1.hex].pack('c*').force_encoding('UTF-8') } line.lstrip.gsub(/\\x(..)/) { |g| [$1.hex].pack('c*').force_encoding('UTF-8') }
end end
# Eliminate C double-double-quotes. # Eliminate C double-double-quotes.
tmp = tmp.join.gsub(/""/) { |g| } tmp = tmp.join.gsub(/(?<!\\)""/) { |g| }
self.items[l_key][num_case][:string] = tmp self.items[l_key][num_case][:string] = tmp
end end
if !self.items || self.items.empty? if !self.items || self.items.empty?
@ -386,7 +387,7 @@ module PoConvertModule
content.scan(%r!^#if (.*?)#endif!m) do | found_block | content.scan(%r!^#if (.*?)#endif!m) do | found_block |
found_block[0].scan(%r!^\s*\{(?:/\* .*? \*/)?\s*(.*?),\s*.*?,\s*.*?\s*\},?!m) do | item | found_block[0].scan(%r!^\s*\{(?:/\* .*? \*/)?\s*(.*?),\s*.*?,\s*.*?\s*\},?!m) do | item |
self.items[item[0].to_sym].each_value do | plural | self.items[item[0].to_sym].each_value do | plural |
plural[:if_group] = found_block[0].lines[0].rstrip plural[:if_group] = found_block[0].each_line("\n").to_a[0].rstrip
end end
end end
end end
@ -408,6 +409,7 @@ module PoConvertModule
attr_accessor :emacs_footer attr_accessor :emacs_footer
attr_accessor :plaintext attr_accessor :plaintext
attr_accessor :force_comments
######################################################### #########################################################
# initialize # initialize
@ -417,6 +419,7 @@ module PoConvertModule
@known_locales = {} # The locales we know about. @known_locales = {} # The locales we know about.
@emacs_footer = false # Indicates whether or not to add emacs instructions. @emacs_footer = false # Indicates whether or not to add emacs instructions.
@plaintext = false # Indicates whether or not we should stick to plaintext. @plaintext = false # Indicates whether or not we should stick to plaintext.
@force_comments = false # Force comments into non-English header files?
end end
@ -535,7 +538,7 @@ module PoConvertModule
if result if result
@@log.info "#{__method__}: The header template was found at #{@@header_template}" @@log.info "#{__method__}: The header template was found at #{@@header_template}"
else else
@@log.error "#{__method__}: Cannot find the header teamplate file. Check the value of @@header_template in this script." @@log.error "#{__method__}: Cannot find the header template file. Check the value of @@header_template in this script."
return false return false
end end
@ -655,7 +658,7 @@ msgstr ""
"#{header_pot_line}\\n" "#{header_pot_line}\\n"
"Last-Translator: #{ENV['USER']}#{ENV['USERNAME']}\\n" "Last-Translator: #{ENV['USER']}#{ENV['USERNAME']}\\n"
"Language-Team: \\n" "Language-Team: \\n"
"BAD"
HEREDOC HEREDOC
untranslated_items.delete(:TIDY_LANGUAGE) untranslated_items.delete(:TIDY_LANGUAGE)
@ -665,9 +668,14 @@ msgstr ""
if value['0'][:comment] if value['0'][:comment]
value['0'][:comment].each_line { |line| report << "#. #{line.strip}\n"} value['0'][:comment].each_line { |line| report << "#. #{line.strip}\n"}
end end
if %w($u $s $d).any? { | find | value['0'][:string].include?(find) }
report << "#, c-format\n" attribs = []
attribs << 'fuzzy' if value['0'][:fuzzy]
attribs << 'c-format' if %w(%u %s %d).any? { | find | value['0'][:string].include?(find) }
if attribs.count > 0
report << "#, #{attribs.join(', ')}\n"
end end
report << "msgctxt \"#{key.to_s}\"\n" report << "msgctxt \"#{key.to_s}\"\n"
# Handle the untranslated strings, with the possibility that there # Handle the untranslated strings, with the possibility that there
@ -779,7 +787,7 @@ msgstr ""
po_content.items.each do |key, value| po_content.items.each do |key, value|
value.each_value do |item_entry| value.each_value do |item_entry|
item_entry[:if_group] = lang_en.items[key]['0'][:if_group] item_entry[:if_group] = lang_en.items[key]['0'][:if_group]
item_entry[:comment] = lang_en.items[key]['0'][:comment] item_entry[:comment] = force_comments ? lang_en.items[key]['0'][:comment] : nil
end end
end end
@ -1083,6 +1091,10 @@ Complete Help:
:type => :boolean, :type => :boolean,
:desc => 'Specifies that the generated file contain hex escaped characters.', :desc => 'Specifies that the generated file contain hex escaped characters.',
:aliases => '-h' :aliases => '-h'
option :force_comments,
:type =>:boolean,
:desc => 'Forces comments into the header file. Base language_en.h always has comments.',
:aliases => '-f'
desc 'msgfmt <input_file.po>', 'Creates a Tidy header H file from the given PO file.' desc 'msgfmt <input_file.po>', 'Creates a Tidy header H file from the given PO file.'
long_desc <<-LONG_DESC long_desc <<-LONG_DESC
Creates a Tidy header H file from the specified <input_file.po> PO file, Creates a Tidy header H file from the specified <input_file.po> PO file,
@ -1104,6 +1116,7 @@ Complete Help:
args.each do |input_file| args.each do |input_file|
converter = PoConverter.new converter = PoConverter.new
converter.plaintext = !options[:hex] converter.plaintext = !options[:hex]
converter.force_comments = options[:force_comments]
set_options set_options
error_count = converter.convert_to_h( input_file, options[:baselang] ) ? error_count : error_count + 1 error_count = converter.convert_to_h( input_file, options[:baselang] ) ? error_count : error_count + 1
end end

View file

@ -622,7 +622,7 @@ tmbstr tidyNormalizedLocaleName( ctmbstr locale )
len = strlen( search ); len = strlen( search );
len = len <= 5 ? len : 5; len = len <= 5 ? len : 5;
for ( i = 0; i < len; i++ ) for ( i = 0; i <= len; i++ )
{ {
if ( i == 2 ) if ( i == 2 )
{ {