summaryrefslogtreecommitdiff
path: root/lib/gitlab/i18n/po_entry.rb
diff options
context:
space:
mode:
authorBob Van Landuyt <bob@vanlanduyt.co>2017-08-25 11:23:48 +0200
committerBob Van Landuyt <bob@vanlanduyt.co>2017-08-31 21:13:01 +0200
commitcdaf1072daecd628a89f019b701bc0a2fa27c20e (patch)
tree827e95260bb018b40fdd2537321fc8c31c9ea035 /lib/gitlab/i18n/po_entry.rb
parent0fa0ed7d854761c5f055e421464adb0ff3522411 (diff)
downloadgitlab-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.rb66
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