grosser-fast_gettext 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.markdown CHANGED
@@ -1,6 +1,6 @@
1
1
  FastGettext
2
2
  ===========
3
- GetText but 8 x faster, 72 x less memory, simple, clean namespace (7 vs 34) and threadsave!
3
+ GetText but 3.5 x faster, 20 x less memory, simple, clean namespace (7 vs 34) and threadsave!
4
4
 
5
5
  [Example Rails application](https://github.com/grosser/gettext_i18n_rails_example)
6
6
 
@@ -39,19 +39,20 @@ Performance
39
39
  50_000 translations speed / memory
40
40
  small translation file <-> large translation file
41
41
  Baseline: (doing nothing in a loop)
42
- 0.420000s / 0K <->
42
+ 0.240000s / 1196K <->
43
43
 
44
44
  Ideal: (primitive Hash lookup)
45
- 1.170000s / 112K <-> 1.170000s / 112K
45
+ 0.790000s / 1200K <-> 0.760000s / 1200K
46
46
 
47
47
  FastGettext:
48
- 1.960000s / 136K <-> 1.950000s / 268K
48
+ 1.360000s / 1200K <-> 1.340000s / 1200K
49
49
 
50
- GetText 2.0:
51
- 15.490000s / 8872K <-> 15.510000s / 9336K
50
+ GetText 2.0.1:
51
+ 4.810000s / 6.176K <-> 4.770000s / 6.176K
52
52
 
53
53
  ActiveSupport I18n::Backend::Simple :
54
- 32.470000s / 9484K <->
54
+ 21.800000s / 11296K <->
55
+
55
56
 
56
57
 
57
58
 
@@ -95,7 +96,7 @@ I already started work on a po/mo parser & reader that is easier to use, contrib
95
96
  Advanced features
96
97
  =================
97
98
  ###Abnormal pluralisation
98
- Pluralisation rules can be set directly via a lambda (see code/specs), or by using the Gettext
99
+ Pluralisation rules can be set directly via a lambda (see specs/), or by using the Gettext
99
100
  plural definition (see spec/locale/en/test_plural.po or [Plural expressions for all languages](http://translate.sourceforge.net/wiki/l10n/pluralforms).
100
101
 
101
102
  ###default_text_domain
@@ -107,15 +108,15 @@ If the simple rule of "first `availble_locale` or 'en'" is not suficcient for yo
107
108
 
108
109
  ###Chains
109
110
  You can use any number of repositories to find a translation. Simply add them to a chain and when
110
- the first cannot translate a given key, the next is asked and so forth.
111
+ the first cannot translate a given msgid, the next is asked and so forth.
111
112
  repos = [
112
- FastGettext::TranslationRepository.build('old', :path=>'....'),
113
- FastGettext::TranslationRepository.build('new', :path=>'....')
113
+ FastGettext::TranslationRepository.build('new', :path=>'....'),
114
+ FastGettext::TranslationRepository.build('old', :path=>'....')
114
115
  ]
115
116
  FastGettext.add_text_domain 'combined', :type=>:chain, :chain=>repos
116
117
 
117
- #Logger
118
- When you want to know which keys could not be translated, or where used, add a Logger to a Chain:
118
+ ###Logger
119
+ When you want to know which keys could not be translated or were used, add a Logger to a Chain:
119
120
  repos = [
120
121
  FastGettext::TranslationRepository.build('app', :path=>'....')
121
122
  FastGettext::TranslationRepository.build('logger', :type=>:logger, :callback=>lamda{|msgid_or_array_of_ids| ... }),
@@ -123,7 +124,7 @@ When you want to know which keys could not be translated, or where used, add a L
123
124
  FastGettext.add_text_domain 'combined', :type=>:chain, :chain=>repos
124
125
  If the Logger is in position #1 it will see all translations, if it is in position #2 it will only see the unfound.
125
126
  Unfound may not always mean missing, if you chose not to translate a word because the msgid is a good translation, it will appear nevertheless.
126
- A lambda or anything that responds to `call` will do as callback.
127
+ A lambda or anything that responds to `call` will do as callback. A good starting point may be `examples/missing_translations_logger.rb`.
127
128
 
128
129
  ###Plugins
129
130
  Want a yml, xml, database version ?
@@ -133,7 +134,7 @@ Write your own TranslationRepository!
133
134
  module TranslationRepository
134
135
  class Wtf
135
136
  define initialize(name,options), [key], plural(*msgids) and
136
- either inherit from Base or define available_locales and pluralisation rule
137
+ either inherit from TranslationRepository::Base or define available_locales and pluralisation_rule
137
138
  end
138
139
  end
139
140
  end
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 4
4
- :patch: 0
4
+ :patch: 2
@@ -43,13 +43,15 @@ module FastGettext
43
43
 
44
44
  #(if plural==singular, prefer singular)
45
45
  def make_singular_and_plural_available
46
+ data = {}
46
47
  @data.each do |key,translation|
47
48
  next unless key.include? PLURAL_SEPERATOR
48
49
  singular, plural = split_plurals(key)
49
50
  translation = split_plurals(translation)
50
- @data[singular] ||= translation[0]
51
- @data[plural] ||= translation[1]
51
+ data[singular] ||= translation[0]
52
+ data[plural] ||= translation[1]
52
53
  end
54
+ @data.merge!(data){|key,old,new| old}
53
55
  end
54
56
 
55
57
  def split_plurals(singular_plural)
@@ -6,7 +6,30 @@ describe String do
6
6
  it "substitudes using % + Hash" do
7
7
  "x%{name}y" %{:name=>'a'}.should == 'xay'
8
8
  end
9
- it "substitudes using % + Array" do
10
- ("x%sy%s" % ['a','b']).should == 'xayb'
9
+
10
+ describe 'old sprintf style' do
11
+ it "substitudes using % + Array" do
12
+ ("x%sy%s" % ['a','b']).should == 'xayb'
13
+ end
14
+
15
+ it "does not remove %{} style replacements" do
16
+ ("%{name} x%sy%s" % ['a','b']).should == '%{name} xayb'
17
+ end
18
+
19
+ it "does not remove %<> style replacement" do
20
+ ("%{name} %<num>f %s" % ['x']).should == "%{name} %<num>f x"
21
+ end
22
+ end
23
+
24
+ describe 'ruby 1.9 style %< replacement' do
25
+ it "subsitutes %<something>d" do
26
+ ("x%<hello>dy" % {:hello=>1}).should == 'x1y'
27
+ end
28
+
29
+ it "substitutes #b" do
30
+ ("%<num>#b" % {:num => 1}).should == "0b1"
31
+ end
32
+
33
+
11
34
  end
12
35
  end
data/vendor/string.rb CHANGED
@@ -19,17 +19,28 @@ rescue ArgumentError
19
19
  # %(hash)
20
20
  #
21
21
  # Default: "%s, %s" % ["Masao", "Mutoh"]
22
- # Extended: "%{firstname}, %{lastname}" % {:firstname=>"Masao",:lastname=>"Mutoh"}
23
- #
22
+ # Extended:
23
+ # "%{firstname}, %{lastname}" % {:firstname=>"Masao",:lastname=>"Mutoh"} == "Masao Mutoh"
24
+ # with field type such as d(decimal), f(float), ...
25
+ # "%<age>d, %<weight>.1f" % {:age => 10, :weight => 43.4} == "10 43.4"
24
26
  # This is the recommanded way for Ruby-GetText
25
27
  # because the translators can understand the meanings of the msgids easily.
26
28
  def %(args)
27
- if args.kind_of?(Hash)
29
+ if args.kind_of? Hash
28
30
  ret = dup
31
+ # %{something} type
29
32
  args.each {|key, value| ret.gsub!(/\%\{#{key}\}/, value.to_s)}
33
+
34
+ # %<..>d type
35
+ args.each {|key, value|
36
+ ret.gsub!(/\%<#{key}>([ #\+-0\*]?\d*\.?\d*[bBdiouxXeEfgGcps])/){
37
+ sprintf("%#{$1}", value)
38
+ }
39
+ }
40
+ ret.gsub(/%%/, "%")
30
41
  ret
31
42
  else
32
- ret = gsub(/%\{/, '%%{')
43
+ ret = gsub(/%([{<])/, '%%\1')
33
44
  ret._fast_gettext_old_format_m(args)
34
45
  end
35
46
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grosser-fast_gettext
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Grosser
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-04-19 00:00:00 -07:00
12
+ date: 2009-04-22 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15