Class: GetText::PoMessage
- Inherits:
-
Object
- Object
- GetText::PoMessage
- Includes:
- PoMessageForRubyParser
- Defined in:
- lib/gettext/tools/pomessage.rb,
lib/gettext/tools/parser/ruby.rb
Overview
Contains data related to the expression or sentence that is to be translated.
Constant Summary collapse
- PARAMS =
{ :normal => [:msgid, :separator], :plural => [:msgid, :msgid_plural, :separator], :msgctxt => [:msgctxt, :msgid], :msgctxt_plural => [:msgctxt, :msgid, :msgid_plural] }
- @@max_line_length =
70
Instance Attribute Summary collapse
-
#comment ⇒ Object
Returns the value of attribute comment.
-
#msgctxt ⇒ Object
Returns the value of attribute msgctxt.
-
#msgid ⇒ Object
Returns the value of attribute msgid.
-
#msgid_plural ⇒ Object
Options.
-
#separator ⇒ Object
Returns the value of attribute separator.
-
#sources ⇒ Object
[“file1:line1”, “file2:line2”, …].
-
#type ⇒ Object
Required.
Class Method Summary collapse
- .escape(string) ⇒ Object
-
.max_line_length ⇒ Object
Gets the max line length.
-
.max_line_length=(len) ⇒ Object
Sets the max line length.
-
.new_from_ary(ary) ⇒ Object
For backward comatibility.
Instance Method Summary collapse
-
#==(other) ⇒ Object
Checks if the other translation target is mergeable with the current one.
- #[](number) ⇒ Object
-
#add_comment(new_comment) ⇒ Object
Support for extracted comments.
-
#escaped(param_name) ⇒ Object
Returns a parameter representation suitable for po-files and other purposes.
-
#initialize(type) ⇒ PoMessage
constructor
Create the object.
-
#initialize_old ⇒ PoMessage
Create the object.
-
#merge(other) ⇒ Object
Merges two translation targets with the same msgid and returns the merged result.
-
#msgctxt? ⇒ Boolean
Returns true if the type is kind of msgctxt.
-
#plural? ⇒ Boolean
Returns true if the type is kind of plural.
-
#to_po_str ⇒ Object
Output the po message for the po-file.
Methods included from PoMessageForRubyParser
#advance_to_next_attribute, #init_param, #set_current_attribute
Constructor Details
Instance Attribute Details
#comment ⇒ Object
Returns the value of attribute comment.
69 70 71 |
# File 'lib/gettext/tools/pomessage.rb', line 69 def comment @comment end |
#msgctxt ⇒ Object
Returns the value of attribute msgctxt.
67 68 69 |
# File 'lib/gettext/tools/pomessage.rb', line 67 def msgctxt @msgctxt end |
#msgid ⇒ Object
Returns the value of attribute msgid.
63 64 65 |
# File 'lib/gettext/tools/pomessage.rb', line 63 def msgid @msgid end |
#msgid_plural ⇒ Object
Options
65 66 67 |
# File 'lib/gettext/tools/pomessage.rb', line 65 def msgid_plural @msgid_plural end |
#separator ⇒ Object
Returns the value of attribute separator.
66 67 68 |
# File 'lib/gettext/tools/pomessage.rb', line 66 def separator @separator end |
#sources ⇒ Object
- “file1:line1”, “file2:line2”, …
68 69 70 |
# File 'lib/gettext/tools/pomessage.rb', line 68 def sources @sources end |
#type ⇒ Object
Required
62 63 64 |
# File 'lib/gettext/tools/pomessage.rb', line 62 def type @type end |
Class Method Details
.escape(string) ⇒ Object
37 38 39 40 41 42 43 44 45 46 |
# File 'lib/gettext/tools/pomessage.rb', line 37 def escape(string) string.gsub(/([\\"\n])/) do special_character = $1 if special_character == "\n" "\\n" else "\\#{special_character}" end end end |
.max_line_length ⇒ Object
Gets the max line length.
57 58 59 |
# File 'lib/gettext/tools/pomessage.rb', line 57 def self.max_line_length @@max_line_length end |
.max_line_length=(len) ⇒ Object
Sets the max line length.
52 53 54 |
# File 'lib/gettext/tools/pomessage.rb', line 52 def self.max_line_length=(len) @@max_line_length = len end |
.new_from_ary(ary) ⇒ Object
For backward comatibility. This doesn’t support “comment”. ary = [msgid1, “file1:line1”, “file2:line”]
195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 |
# File 'lib/gettext/tools/pomessage.rb', line 195 def self.new_from_ary(ary) ary = ary.dup msgid = ary.shift sources = ary type = :normal msgctxt = nil msgid_plural = nil if msgid.include? "\004" msgctxt, msgid = msgid.split(/\004/) type = :msgctxt end if msgid.include? "\000" ids = msgid.split(/\000/) msgid = ids[0] msgid_plural = ids[1] if type == :msgctxt type = :msgctxt_plural else type = :plural end end ret = self.new(type) ret.msgid = msgid ret.sources = sources ret.msgctxt = msgctxt ret.msgid_plural = msgid_plural ret end |
Instance Method Details
#==(other) ⇒ Object
Checks if the other translation target is mergeable with the current one. Relevant are msgid and translation context (msgctxt).
97 98 99 |
# File 'lib/gettext/tools/pomessage.rb', line 97 def ==(other) other && other.msgid == self.msgid && other.msgctxt == self.msgctxt end |
#[](number) ⇒ Object
225 226 227 228 229 |
# File 'lib/gettext/tools/pomessage.rb', line 225 def [](number) param = @param_type[number] raise ParseError, 'no more string parameters expected' unless param send param end |
#add_comment(new_comment) ⇒ Object
Support for extracted comments. Explanation s. www.gnu.org/software/gettext/manual/gettext.html#Names
80 81 82 83 84 85 86 |
# File 'lib/gettext/tools/pomessage.rb', line 80 def add_comment(new_comment) if (new_comment and ! new_comment.empty?) @comment ||= "" @comment += new_comment end to_s end |
#escaped(param_name) ⇒ Object
Returns a parameter representation suitable for po-files and other purposes.
90 91 92 93 |
# File 'lib/gettext/tools/pomessage.rb', line 90 def escaped(param_name) orig = self.send param_name self.class.escape(orig.gsub(/\r/, "")) end |
#initialize_old ⇒ PoMessage
Create the object. type
should be :normal, :plural, :msgctxt or :msgctxt_plural.
103 104 105 106 107 |
# File 'lib/gettext/tools/parser/ruby.rb', line 103 def initialize(type) @type = type @sources = [] @param_type = PARAMS[@type] end |
#merge(other) ⇒ Object
Merges two translation targets with the same msgid and returns the merged result. If one is declared as plural and the other not, then the one with the plural wins.
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/gettext/tools/pomessage.rb', line 104 def merge(other) return self unless other raise ParseError, "Translation targets do not match: \n" \ " self: #{self.inspect}\n other: '#{other.inspect}'" unless self == other if other.msgid_plural && !self.msgid_plural res = other unless (res.sources.include? self.sources[0]) res.sources += self.sources res.add_comment(self.comment) end else res = self unless (res.sources.include? other.sources[0]) res.sources += other.sources res.add_comment(other.comment) end end res end |
#msgctxt? ⇒ Boolean
Returns true if the type is kind of msgctxt. And if this is a kind of msgctxt and msgctxt property is nil, then raise an RuntimeException.
165 166 167 168 169 170 |
# File 'lib/gettext/tools/pomessage.rb', line 165 def msgctxt? if [:msgctxt, :msgctxt_plural].include? @type raise "This PoMessage is a kind of msgctxt but the msgctxt property is nil. msgid: #{msgid}" unless @msgctxt true end end |
#plural? ⇒ Boolean
Returns true if the type is kind of plural. And if this is a kind of plural and msgid_plural property is nil, then raise an RuntimeException.
175 176 177 178 179 180 |
# File 'lib/gettext/tools/pomessage.rb', line 175 def plural? if [:plural, :msgctxt_plural].include? @type raise "This PoMessage is a kind of plural but the msgid_plural property is nil. msgid: #{msgid}" unless @msgid_plural true end end |
#to_po_str ⇒ Object
Output the po message for the po-file.
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
# File 'lib/gettext/tools/pomessage.rb', line 125 def to_po_str raise "msgid is nil." unless @msgid raise "sources is nil." unless @sources str = "" # extracted comments if comment comment.split("\n").each do |comment_line| str << "\n#. #{comment_line.strip}" end end # references curr_pos = @@max_line_length sources.each do |e| if curr_pos + e.size > @@max_line_length str << "\n#:" curr_pos = 3 else curr_pos += (e.size + 1) end str << " " << e end # msgctxt, msgid, msgstr str << "\nmsgctxt \"" << msgctxt << "\"" if msgctxt? str << "\nmsgid \"" << escaped(:msgid) << "\"\n" if plural? str << "msgid_plural \"" << escaped(:msgid_plural) << "\"\n" str << "msgstr[0] \"\"\n" str << "msgstr[1] \"\"\n" else str << "msgstr \"\"\n" end str end |