diff --git a/lib/twine/formatters/abstract.rb b/lib/twine/formatters/abstract.rb index a0ed5e9..8e4e657 100644 --- a/lib/twine/formatters/abstract.rb +++ b/lib/twine/formatters/abstract.rb @@ -166,21 +166,24 @@ module Twine result += rows.join end - def format_row(row, lang) - value = row.translated_string_for_lang(lang) - - return nil unless value - - result = "" - if row.comment - comment = format_comment(row.comment) - result += comment + "\n" if comment - end - - result += key_value_pattern % { key: format_key(row.key.dup), value: format_value(value.dup) } + def row_pattern + "%{comment}%{key_value}" end - def format_comment(comment) + def format_row(row, lang) + return nil unless row.translated_string_for_lang(lang) + + result = row_pattern.scan(/%\{([a-z_]+)\}/).flatten + result.map! { |element| send("format_#{element}".to_sym, row, lang) } + result.flatten.join + end + + def format_comment(row, lang) + end + + def format_key_value(row, lang) + value = row.translated_string_for_lang(lang) + key_value_pattern % { key: format_key(row.key.dup), value: format_value(value.dup) } end def key_value_pattern diff --git a/lib/twine/formatters/android.rb b/lib/twine/formatters/android.rb index e992231..ff32e7f 100644 --- a/lib/twine/formatters/android.rb +++ b/lib/twine/formatters/android.rb @@ -105,8 +105,8 @@ module Twine "\t" end - def format_comment(comment) - "\t" + def format_comment(row, lang) + "\t\n" if row.comment end def key_value_pattern diff --git a/lib/twine/formatters/apple.rb b/lib/twine/formatters/apple.rb index 64d480e..9810a9f 100644 --- a/lib/twine/formatters/apple.rb +++ b/lib/twine/formatters/apple.rb @@ -98,8 +98,8 @@ module Twine "\"%{key}\" = \"%{value}\";\n" end - def format_comment(comment) - "/* #{comment.gsub('*/', '* /')} */" + def format_comment(row, lang) + "/* #{row.comment.gsub('*/', '* /')} */\n" if row.comment end def format_key(key) diff --git a/lib/twine/formatters/django.rb b/lib/twine/formatters/django.rb index 69e13e1..cbadf73 100644 --- a/lib/twine/formatters/django.rb +++ b/lib/twine/formatters/django.rb @@ -103,19 +103,13 @@ module Twine "#--------- #{section.name} ---------#\n" end - def format_row(row, lang) - value = row.translated_string_for_lang(lang) + def row_pattern + "%{comment}%{base_translation}%{key_value}" + end - return nil unless value - - result = "" - if row.comment - comment = format_comment(row.comment) - result += comment + "\n" if comment - end - - result += "# base translation: \"#{row.translations[@default_lang]}\"\n" - result += key_value_pattern % { key: format_key(row.key.dup), value: format_value(value.dup) } + def format_base_translation(row, lang) + base_translation = row.translations[@default_lang] + "# base translation: \"#{base_translation}\"\n" if base_translation end def key_value_pattern @@ -123,8 +117,8 @@ module Twine "msgstr \"%{value}\"\n" end - def format_comment(comment) - "#. #{escape_quotes(comment)}" + def format_comment(row, lang) + "#. #{escape_quotes(row.comment)}\n" if row.comment end def format_key(key) diff --git a/lib/twine/formatters/flash.rb b/lib/twine/formatters/flash.rb index cb770c0..9b62314 100644 --- a/lib/twine/formatters/flash.rb +++ b/lib/twine/formatters/flash.rb @@ -78,8 +78,8 @@ module Twine "## #{section.name} ##\n" end - def format_comment(comment) - "# #{comment}" + def format_comment(row, lang) + "# #{row.comment}\n" if row.comment end def key_value_pattern diff --git a/lib/twine/formatters/gettext.rb b/lib/twine/formatters/gettext.rb index 27f1a09..0ac4f5a 100644 --- a/lib/twine/formatters/gettext.rb +++ b/lib/twine/formatters/gettext.rb @@ -73,26 +73,30 @@ module Twine "# SECTION: #{section.name}" end + def row_pattern + "%{comment}%{key}%{base_translation}%{value}" + end + def format_row(row, lang) return nil unless row.translated_string_for_lang(@default_lang) - value = row.translated_string_for_lang(lang) - - return nil unless value - - result = "" - if row.comment - comment = format_comment(row.comment) - result += comment + "\n" if comment - end - - result += "msgctxt \"#{format_key(row.key.dup)}\"\n" - result += "msgid \"#{format_value(row.translations[@default_lang])}\"\n" - result += "msgstr \"#{format_value(value)}\"\n" + super end - def format_comment(comment) - "#. \"#{escape_quotes(comment)}\"" + def format_comment(row, lang) + "#. \"#{escape_quotes(row.comment)}\"\n" if row.comment + end + + def format_key(row, lang) + "msgctxt \"#{row.key.dup}\"\n" + end + + def format_base_translation(row, lang) + "msgid \"#{row.translations[@default_lang]}\"\n" + end + + def format_value(row, lang) + "msgstr \"#{row.translated_string_for_lang(lang)}\"\n" end end end diff --git a/lib/twine/formatters/tizen.rb b/lib/twine/formatters/tizen.rb index 082f8ed..9453c8c 100644 --- a/lib/twine/formatters/tizen.rb +++ b/lib/twine/formatters/tizen.rb @@ -127,8 +127,8 @@ module Twine "\t" end - def format_comment(comment) - "\t" + def format_comment(row, lang) + "\t\n" if row.comment end def key_value_pattern