ri18n 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/lib/gettext.rb CHANGED
@@ -7,10 +7,10 @@ require 'rake'
7
7
  require 'rake/tasklib'
8
8
 
9
9
  class GettextScanner < String
10
- SINGLE = "'(.+?)'"
11
- DOUBLE = '"(.+?)"'
12
- MSG_PATTERN_SINGLE = /\W_i?\(#{SINGLE}\)/mu
13
- MSG_PATTERN_DOUBLE = /\W_i?\(#{DOUBLE}\)/mu
10
+ SINGLE = "'((?:[^\\\\]|(?:\\\\'))+?)'"
11
+ DOUBLE = '"((?:[^\\\\]|(?:\\\\"))+?)"'
12
+ MSG_PATTERN_SINGLE = /\W(?:s_|N_|_|_i)\(#{SINGLE}\)/mu
13
+ MSG_PATTERN_DOUBLE = /\W(?:s_|N_|_|_i)\(#{DOUBLE}\)/mu
14
14
  MSG_PATTERN_PLURAL = /\Wn_\(#{SINGLE},\s*#{SINGLE},\s*.+?\)/mu
15
15
  def GettextScanner::Gettext(source)
16
16
  GettextScanner.new(source).gettext
data/lib/ri18n/catalog.rb CHANGED
@@ -11,7 +11,15 @@ class Catalog < Hash
11
11
  @lang=lang
12
12
  end
13
13
 
14
- # in PO, header is defined as empty msgstr
14
+ # creates a catalog with untranslated msgstr
15
+ # lang is l, needed for plural forms (nplural depends on lang)
16
+ def Catalog.new_from_msgidlist(l, new_msg)
17
+ c = Catalog.new(l)
18
+ new_msg.each{|m| c[m] = Msg.new_untranslated(nil, m.id_plural, c.nplural)}
19
+ c
20
+ end
21
+
22
+ # in PO, header is defined as empty msgid
15
23
  def header
16
24
  self[""]
17
25
  end
@@ -25,7 +33,7 @@ class Catalog < Hash
25
33
  header[:comments]
26
34
  end
27
35
 
28
-
36
+ # returns the formated PO header
29
37
  def po_header(app_enc)
30
38
  if header
31
39
  ret = header_comments ? header_comments.dup.strip + "\n" : ''
@@ -78,12 +86,9 @@ msgstr ""
78
86
 
79
87
  # update the catalog with the new_msg messages
80
88
  def update(new_msg)
81
- new_ids = {}
82
- empty_plurals = []
83
- nplural.times do empty_plurals << "" end
84
- new_msg.each{|m| new_ids[m] = Msg.new("", nil, m.id_plural, empty_plurals )}
89
+ new_ids = Catalog.new_from_msgidlist(@lang, new_msg)
85
90
  new_msg.each{|m| self[m] = new_ids[m] unless self.has_key?(m)}
86
91
  end
87
-
92
+
88
93
  end
89
94
 
data/lib/ri18n/msg.rb CHANGED
@@ -12,17 +12,22 @@ class Msg < String
12
12
  msg = Msg.new(str, com)
13
13
  [id, msg]
14
14
  else
15
- [id, Msg::Plurals(str, com)]
15
+ [id, Msg::ParsePlurals(str, com)]
16
16
  end
17
17
  end
18
18
 
19
19
  MSGSTR_PLURAL_RE = /(.+?)(msgstr\[\d+\]\s+.+?)+/m
20
- def Msg::Plurals(entry, com)
20
+ def Msg::ParsePlurals(entry, com)
21
21
  all, idp, pl = *(MSGSTR_PLURAL_RE.match(entry))
22
22
  plurals = pl.strip.split(/msgstr\[\d+\]/).collect!{|mp| mp.strip_q}.compact
23
23
  Msg.new(plurals[0], com, idp.strip_q, plurals)
24
24
  end
25
25
 
26
+ # build a new untranslated msgstr
27
+ def Msg::new_untranslated(comments, id_plural, nplural)
28
+ Msg.new("", comments, id_plural, Array.new(nplural, "") )
29
+ end
30
+
26
31
  def initialize(msg, comments, idp=nil, pl=nil)
27
32
  super(msg)
28
33
  @comments = comments
data/lib/ri18n/po.rb CHANGED
@@ -54,6 +54,29 @@ class PoSource < String
54
54
 
55
55
  private
56
56
  def set_entries
57
- @entries = self.split(ENTRY_SEP)
57
+
58
+ newFile = [""]
59
+
60
+ self.each_line do |line|
61
+ if line.chomp.strip == ""
62
+ if newFile.last[-2] != '"'[0] and newFile.last != ""
63
+ newFile[-1] = newFile[-1].to_s + line
64
+ else
65
+ if newFile.last != ""
66
+ newFile[-1] = newFile[-1].chomp
67
+ newFile.push("")
68
+ end
69
+ end
70
+ else
71
+ newFile[-1] = newFile[-1].to_s + line
72
+ end
73
+ end
74
+
75
+ if newFile.last == ""
76
+ newFile.delete_at(-1)
77
+ end
78
+
79
+ @entries = newFile
58
80
  end
81
+
59
82
  end
@@ -8,6 +8,12 @@ def _(string)
8
8
  fetch.empty? ? string : fetch
9
9
  end
10
10
 
11
+ def s_(string)
12
+ fetch = I18nService.instance.table.fetch(string, "")
13
+ fetch.empty? ? string.split('|').last : fetch
14
+ end
15
+
16
+
11
17
  # Returns the translated +string+ if available; otherwise returns +string+
12
18
  # Does #{} interpolation on the tranlated string
13
19
  def _i(string, caller = self)
@@ -30,6 +36,11 @@ def n_(msgid, msgid_plural, n)
30
36
  end
31
37
  end
32
38
 
39
+ # the 'noop' translator, better named 'message marker'
40
+ def N_(msg)
41
+ msg
42
+ end
43
+
33
44
  unless i18n.try_load
34
45
  i18n.table = {}
35
46
  # Default translator used in case where no catalog is loaded.
metadata CHANGED
@@ -1,48 +1,65 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.8.10
3
- specification_version: 1
4
2
  name: ri18n
5
3
  version: !ruby/object:Gem::Version
6
- version: 0.0.3
7
- date: 2005-05-01
8
- summary: Ruby application internationalization and localization library
9
- require_paths:
10
- - lib
11
- email: dmertz at online dot de
12
- homepage: http://ri18n.berlios.de/
13
- rubyforge_project: ri18n
14
- description: Ri18n is an internationalization and localization library for Ruby applications.
15
- autorequire:
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: false
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- -
22
- - ">"
23
- - !ruby/object:Gem::Version
24
- version: 0.0.0
25
- version:
4
+ version: 0.0.4
26
5
  platform: ruby
27
6
  authors:
28
- - Denis Mertz
29
- files:
30
- - lib/i18nservice.rb
31
- - lib/gettext.rb
32
- - lib/ri18n/po.rb
33
- - lib/ri18n/langtools.rb
34
- - lib/ri18n/plural_forms.rb
35
- - lib/ri18n/translators.rb
36
- - lib/ri18n/standard_exts.rb
37
- - lib/ri18n/catalog.rb
38
- - lib/ri18n/msg.rb
39
- - lib/ri18n/pohelper.rb
40
- - lib/ri18n/newmsglist.rb
41
- test_files: []
42
- rdoc_options: []
43
- extra_rdoc_files: []
7
+ - Denis Mertz
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-01-06 00:00:00 +01:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: " Ri18n is an internationalization and localization library for Ruby applications.\n"
17
+ email: dmertz at online dot de
44
18
  executables: []
19
+
45
20
  extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - lib/i18nservice.rb
26
+ - lib/ri18n/standard_exts.rb
27
+ - lib/ri18n/pohelper.rb
28
+ - lib/ri18n/plural_forms.rb
29
+ - lib/ri18n/po.rb
30
+ - lib/ri18n/translators.rb
31
+ - lib/ri18n/msg.rb
32
+ - lib/ri18n/newmsglist.rb
33
+ - lib/ri18n/catalog.rb
34
+ - lib/ri18n/langtools.rb
35
+ - lib/gettext.rb
36
+ has_rdoc: true
37
+ homepage: http://ri18n.berlios.de/
38
+ licenses: []
39
+
40
+ post_install_message:
41
+ rdoc_options: []
42
+
43
+ require_paths:
44
+ - lib
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: "0"
50
+ version:
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: "0"
56
+ version:
46
57
  requirements:
47
- - Rake
48
- dependencies: []
58
+ - Rake
59
+ rubyforge_project: ri18n
60
+ rubygems_version: 1.3.5
61
+ signing_key:
62
+ specification_version: 3
63
+ summary: Ruby application internationalization and localization library
64
+ test_files: []
65
+