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], :plural => [:msgid, :msgid_plural], :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.
-
#sources ⇒ Object
[“file1:line1”, “file2:line2”, …].
-
#type ⇒ Object
Required.
Class Method Summary collapse
-
.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.
36 37 38 |
# File 'lib/gettext/tools/pomessage.rb', line 36 def comment @comment end |
#msgctxt ⇒ Object
Returns the value of attribute msgctxt.
34 35 36 |
# File 'lib/gettext/tools/pomessage.rb', line 34 def msgctxt @msgctxt end |
#msgid ⇒ Object
Returns the value of attribute msgid.
31 32 33 |
# File 'lib/gettext/tools/pomessage.rb', line 31 def msgid @msgid end |
#msgid_plural ⇒ Object
Options
33 34 35 |
# File 'lib/gettext/tools/pomessage.rb', line 33 def msgid_plural @msgid_plural end |
#sources ⇒ Object
- “file1:line1”, “file2:line2”, …
35 36 37 |
# File 'lib/gettext/tools/pomessage.rb', line 35 def sources @sources end |
#type ⇒ Object
Required
30 31 32 |
# File 'lib/gettext/tools/pomessage.rb', line 30 def type @type end |
Class Method Details
.max_line_length ⇒ Object
Gets the max line length.
25 26 27 |
# File 'lib/gettext/tools/pomessage.rb', line 25 def self.max_line_length @@max_line_length end |
.max_line_length=(len) ⇒ Object
Sets the max line length.
20 21 22 |
# File 'lib/gettext/tools/pomessage.rb', line 20 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”]
162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
# File 'lib/gettext/tools/pomessage.rb', line 162 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).
64 65 66 |
# File 'lib/gettext/tools/pomessage.rb', line 64 def ==(other) other && other.msgid == self.msgid && other.msgctxt == self.msgctxt end |
#[](number) ⇒ Object
192 193 194 195 196 |
# File 'lib/gettext/tools/pomessage.rb', line 192 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
47 48 49 50 51 52 53 |
# File 'lib/gettext/tools/pomessage.rb', line 47 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.
57 58 59 60 |
# File 'lib/gettext/tools/pomessage.rb', line 57 def escaped(param_name) orig = self.send param_name orig.gsub(/"/, '\"').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.
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/gettext/tools/pomessage.rb', line 71 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.
132 133 134 135 136 137 |
# File 'lib/gettext/tools/pomessage.rb', line 132 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.
142 143 144 145 146 147 |
# File 'lib/gettext/tools/pomessage.rb', line 142 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.
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/gettext/tools/pomessage.rb', line 92 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 |