Class: Gitlab::I18n::TranslationEntry
- Inherits:
-
Object
- Object
- Gitlab::I18n::TranslationEntry
- Defined in:
- lib/gitlab/i18n/translation_entry.rb
Constant Summary collapse
- PERCENT_REGEX =
/(?:^|[^%])%(?!{\w*}|[a-z%])/- ANGLE_BRACKET_REGEX =
/[<>]/- NAMESPACE_REGEX =
/^((?u)\w+|\s)*\|/- SPACE_REGEX =
/[\p{Separator}\u0009-\u000d\u001c-\u001f\u0085\u180e]/- MULTIPLE_CONSECUTIVE_SPACES_REGEX =
/#{SPACE_REGEX}{2,}/o
Instance Attribute Summary collapse
-
#entry_data ⇒ Object
readonly
Returns the value of attribute entry_data.
-
#nplurals ⇒ Object
readonly
Returns the value of attribute nplurals.
Instance Method Summary collapse
- #all_translations ⇒ Object
- #contains_leading_space?(translation) ⇒ Boolean
- #contains_multiple_spaces?(translation) ⇒ Boolean
- #contains_namespace?(string) ⇒ Boolean
- #contains_trailing_space?(translation) ⇒ Boolean
- #contains_unescaped_chars?(string) ⇒ Boolean
- #flag ⇒ Object
- #has_plural? ⇒ Boolean
- #has_singular_translation? ⇒ Boolean
-
#initialize(entry_data:, nplurals:) ⇒ TranslationEntry
constructor
A new instance of TranslationEntry.
- #msgid ⇒ Object
- #msgid_contains_potential_html? ⇒ Boolean
- #msgid_contains_unescaped_chars? ⇒ Boolean
- #msgid_has_multiple_lines? ⇒ Boolean
- #msgid_without_namespace ⇒ Object
- #plural_id ⇒ Object
- #plural_id_contains_potential_html? ⇒ Boolean
- #plural_id_contains_unescaped_chars? ⇒ Boolean
- #plural_id_has_multiple_lines? ⇒ Boolean
- #plural_translations ⇒ Object
- #singular_translation ⇒ Object
- #translated? ⇒ Boolean
- #translations_contain_leading_space? ⇒ Boolean
- #translations_contain_multiple_spaces? ⇒ Boolean
- #translations_contain_namespace? ⇒ Boolean
- #translations_contain_potential_html? ⇒ Boolean
- #translations_contain_trailing_space? ⇒ Boolean
- #translations_contain_unescaped_chars? ⇒ Boolean
- #translations_have_multiple_lines? ⇒ Boolean
Constructor Details
#initialize(entry_data:, nplurals:) ⇒ TranslationEntry
Returns a new instance of TranslationEntry.
14 15 16 17 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 14 def initialize(entry_data:, nplurals:) @entry_data = entry_data @nplurals = nplurals end |
Instance Attribute Details
#entry_data ⇒ Object (readonly)
Returns the value of attribute entry_data.
12 13 14 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 12 def entry_data @entry_data end |
#nplurals ⇒ Object (readonly)
Returns the value of attribute nplurals.
12 13 14 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 12 def nplurals @nplurals end |
Instance Method Details
#all_translations ⇒ Object
39 40 41 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 39 def all_translations @all_translations ||= translation_entries.map { |translation| Array(translation).join } end |
#contains_leading_space?(translation) ⇒ Boolean
90 91 92 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 90 def contains_leading_space?(translation) translation.match?(/\A,?#{SPACE_REGEX}/o) && !msgid_without_namespace.match?(/\A,?#{SPACE_REGEX}/o) end |
#contains_multiple_spaces?(translation) ⇒ Boolean
106 107 108 109 110 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 106 def contains_multiple_spaces?(translation) msgid_matches = msgid_without_namespace.scan(MULTIPLE_CONSECUTIVE_SPACES_REGEX) translation_matches = translation.scan(MULTIPLE_CONSECUTIVE_SPACES_REGEX) msgid_matches.sort != translation_matches.sort end |
#contains_namespace?(string) ⇒ Boolean
82 83 84 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 82 def contains_namespace?(string) string =~ NAMESPACE_REGEX end |
#contains_trailing_space?(translation) ⇒ Boolean
98 99 100 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 98 def contains_trailing_space?(translation) translation.match?(/#{SPACE_REGEX}\Z/o) && !msgid_without_namespace.match?(/#{SPACE_REGEX}\Z/o) end |
#contains_unescaped_chars?(string) ⇒ Boolean
124 125 126 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 124 def contains_unescaped_chars?(string) string =~ PERCENT_REGEX end |
#flag ⇒ Object
58 59 60 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 58 def flag entry_data[:flag] end |
#has_plural? ⇒ Boolean
31 32 33 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 31 def has_plural? plural_id.present? end |
#has_singular_translation? ⇒ Boolean
62 63 64 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 62 def has_singular_translation? nplurals > 1 || !has_plural? end |
#msgid ⇒ Object
19 20 21 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 19 def msgid @msgid ||= Array(entry_data[:msgid]).join end |
#msgid_contains_potential_html? ⇒ Boolean
128 129 130 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 128 def msgid_contains_potential_html? contains_angle_brackets?(msgid) end |
#msgid_contains_unescaped_chars? ⇒ Boolean
112 113 114 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 112 def msgid_contains_unescaped_chars? contains_unescaped_chars?(msgid) end |
#msgid_has_multiple_lines? ⇒ Boolean
66 67 68 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 66 def msgid_has_multiple_lines? entry_data[:msgid].is_a?(Array) end |
#msgid_without_namespace ⇒ Object
27 28 29 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 27 def msgid_without_namespace @msgid_without_namespace ||= msgid.sub(NAMESPACE_REGEX, '') end |
#plural_id ⇒ Object
23 24 25 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 23 def plural_id @plural_id ||= Array(entry_data[:msgid_plural]).join end |
#plural_id_contains_potential_html? ⇒ Boolean
132 133 134 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 132 def plural_id_contains_potential_html? contains_angle_brackets?(plural_id) end |
#plural_id_contains_unescaped_chars? ⇒ Boolean
116 117 118 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 116 def plural_id_contains_unescaped_chars? contains_unescaped_chars?(plural_id) end |
#plural_id_has_multiple_lines? ⇒ Boolean
70 71 72 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 70 def plural_id_has_multiple_lines? entry_data[:msgid_plural].is_a?(Array) end |
#plural_translations ⇒ Object
47 48 49 50 51 52 53 54 55 56 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 47 def plural_translations return [] unless has_plural? return [] unless translated? @plural_translations ||= if has_singular_translation? all_translations.drop(1) else all_translations end end |
#singular_translation ⇒ Object
35 36 37 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 35 def singular_translation all_translations.first.to_s if has_singular_translation? end |
#translated? ⇒ Boolean
43 44 45 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 43 def translated? all_translations.any? end |
#translations_contain_leading_space? ⇒ Boolean
86 87 88 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 86 def translations_contain_leading_space? all_translations.any? { |translation| contains_leading_space?(translation) } end |
#translations_contain_multiple_spaces? ⇒ Boolean
102 103 104 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 102 def translations_contain_multiple_spaces? all_translations.any? { |translation| contains_multiple_spaces?(translation) } end |
#translations_contain_namespace? ⇒ Boolean
78 79 80 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 78 def translations_contain_namespace? all_translations.any? { |translation| contains_namespace?(translation) } end |
#translations_contain_potential_html? ⇒ Boolean
136 137 138 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 136 def translations_contain_potential_html? all_translations.any? { |translation| contains_angle_brackets?(translation) } end |
#translations_contain_trailing_space? ⇒ Boolean
94 95 96 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 94 def translations_contain_trailing_space? all_translations.any? { |translation| contains_trailing_space?(translation) } end |
#translations_contain_unescaped_chars? ⇒ Boolean
120 121 122 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 120 def translations_contain_unescaped_chars? all_translations.any? { |translation| contains_unescaped_chars?(translation) } end |
#translations_have_multiple_lines? ⇒ Boolean
74 75 76 |
# File 'lib/gitlab/i18n/translation_entry.rb', line 74 def translations_have_multiple_lines? translation_entries.any?(Array) end |