diff options
author | Bob Van Landuyt <bob@vanlanduyt.co> | 2017-08-25 11:23:48 +0200 |
---|---|---|
committer | Bob Van Landuyt <bob@vanlanduyt.co> | 2017-08-31 21:13:01 +0200 |
commit | cdaf1072daecd628a89f019b701bc0a2fa27c20e (patch) | |
tree | 827e95260bb018b40fdd2537321fc8c31c9ea035 /lib/gitlab/i18n/po_entry.rb | |
parent | 0fa0ed7d854761c5f055e421464adb0ff3522411 (diff) | |
download | gitlab-ce-cdaf1072daecd628a89f019b701bc0a2fa27c20e.tar.gz |
Move detailed information of an entry into a separate class
Diffstat (limited to 'lib/gitlab/i18n/po_entry.rb')
-rw-r--r-- | lib/gitlab/i18n/po_entry.rb | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/lib/gitlab/i18n/po_entry.rb b/lib/gitlab/i18n/po_entry.rb new file mode 100644 index 00000000000..aabb477bbea --- /dev/null +++ b/lib/gitlab/i18n/po_entry.rb @@ -0,0 +1,66 @@ +module Gitlab + module I18n + class PoEntry + attr_reader :entry_data + + def initialize(entry_data) + @entry_data = entry_data + end + + def msgid + entry_data[:msgid] + end + + def metadata? + msgid.empty? + end + + def plural_id + entry_data[:msgid_plural] + end + + def plural? + plural_id.present? + end + + def singular_translation + plural? ? entry_data['msgstr[0]'] : entry_data[:msgstr] + end + + def all_translations + @all_translations ||= entry_data.fetch_values(*translation_keys) + end + + def plural_translations + return [] unless plural? + + # The singular translation is used if there's only translation. This is + # the case for languages without plurals. + return all_translations if all_translations.size == 1 + + entry_data.fetch_values(*plural_translation_keys) + end + + def flag + entry_data[:flag] + end + + private + + def plural_translation_keys + @plural_translation_keys ||= translation_keys.select do |key| + plural_index = key.scan(/\d+/).first.to_i + plural_index > 0 + end + end + + def translation_keys + @translation_keys ||= if plural? + entry_data.keys.select { |key| key =~ /msgstr\[\d+\]/ } + else + [:msgstr] + end + end + end + end +end |