gettext_i18n_rails 0.2.6 → 0.2.7
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.md +75 -53
- data/VERSION +1 -1
- data/gettext_i18n_rails.gemspec +2 -2
- data/lib/gettext_i18n_rails/ruby_gettext_extractor.rb +1 -1
- metadata +3 -3
data/Readme.md
CHANGED
@@ -1,46 +1,52 @@
|
|
1
|
-
|
1
|
+
[FastGettext](http://github.com/grosser/fast_gettext) / Rails integration.
|
2
2
|
|
3
|
-
|
3
|
+
Translate via FastGettext, use any other I18n backend as extension/fallback.
|
4
4
|
|
5
|
-
Rails does: `I18n.t('
|
6
|
-
We do: `_('Just translate my damn text!')`
|
7
|
-
To use I18n calls
|
5
|
+
Rails does: `I18n.t('syntax.with.lots.of.dots')` with nested yml files
|
6
|
+
We do: `_('Just translate my damn text!')` with simple, flat mo/po/yml files or directly from db
|
7
|
+
To use I18n calls add a `syntax.with.lots.of.dots` translation.
|
8
8
|
|
9
9
|
[See it working in the example application.](https://github.com/grosser/gettext_i18n_rails_example)
|
10
10
|
|
11
11
|
Setup
|
12
12
|
=====
|
13
|
-
###Installation
|
14
|
-
As plugin: ` script/plugin install git://github.com/grosser/gettext_i18n_rails.git `
|
15
|
-
Or Gem: ` sudo gem install gettext_i18n_rails `
|
13
|
+
### Installation
|
16
14
|
|
17
|
-
|
15
|
+
#### Rails 3
|
18
16
|
|
19
|
-
|
20
|
-
GetText 1.93 or GetText 2.0: ` sudo gem install gettext `
|
21
|
-
GetText 2.0 will render 1.93 unusable, so only install if you do not have apps that use 1.93!
|
17
|
+
##### As plugin:
|
22
18
|
|
23
|
-
|
19
|
+
rails plugin install git://github.com/grosser/gettext_i18n_rails.git
|
24
20
|
|
25
|
-
|
26
|
-
|
27
|
-
|
21
|
+
# Gemfile
|
22
|
+
gem 'fast_gettext', '>=0.4.8'
|
23
|
+
|
24
|
+
##### As gem:
|
25
|
+
|
26
|
+
# Gemfile
|
27
|
+
gem 'gettext_i18n_rails'
|
28
|
+
|
29
|
+
##### Optional:
|
30
|
+
If you want to find translations or build .mo files
|
31
|
+
# Gemfile
|
32
|
+
gem 'gettext', '>=1.9.3', :require => false, :group => :development
|
33
|
+
|
34
|
+
#### Rails 2
|
28
35
|
|
29
|
-
|
36
|
+
##### As plugin:
|
37
|
+
|
38
|
+
script/plugin install git://github.com/grosser/gettext_i18n_rails.git
|
39
|
+
sudo gem install fast_gettext
|
30
40
|
|
31
41
|
# config/environment.rb
|
32
42
|
config.gem "fast_gettext", :version => '>=0.4.8'
|
33
43
|
|
34
|
-
|
35
|
-
config.gem "gettext", :version => '>=1.9.3', :lib => false
|
36
|
-
|
37
|
-
With bundler:
|
44
|
+
##### As gem:
|
38
45
|
|
39
|
-
|
40
|
-
gem 'fast_gettext', '>=0.4.8'
|
41
|
-
gem 'gettext', '>=1.9.3', :require => false
|
46
|
+
gem install gettext_i18n_rails
|
42
47
|
|
43
|
-
|
48
|
+
# config/environment.rb
|
49
|
+
config.gem 'gettext_i18n_rails'
|
44
50
|
|
45
51
|
#Rakefile
|
46
52
|
begin
|
@@ -49,10 +55,19 @@ Installed as gem and on Rails 2? Add to your Rakefile:
|
|
49
55
|
puts "gettext_i18n_rails is not installed, you probably should run 'rake gems:install' or 'bundle install'."
|
50
56
|
end
|
51
57
|
|
58
|
+
##### Optional:
|
59
|
+
If you want to find translations or build .mo files
|
60
|
+
# config/environments/development.rb
|
61
|
+
config.gem "gettext", :version => '>=1.9.3', :lib => false
|
62
|
+
|
63
|
+
### Locales & initialisation
|
64
|
+
Copy default locales with dates/sentence-connectors/AR-errors you want from e.g.
|
65
|
+
[rails i18n](http://github.com/svenfuchs/rails-i18n/tree/master/rails/locale/) into 'config/locales'
|
66
|
+
|
52
67
|
To initialize:
|
53
68
|
|
54
69
|
# config/initializers/fast_gettext.rb
|
55
|
-
FastGettext.add_text_domain 'app', :path => 'locale'
|
70
|
+
FastGettext.add_text_domain 'app', :path => 'locale', :type => :po
|
56
71
|
FastGettext.default_available_locales = ['en','de'] #all you want to allow
|
57
72
|
FastGettext.default_text_domain = 'app'
|
58
73
|
|
@@ -62,31 +77,49 @@ And in your application:
|
|
62
77
|
class ApplicationController < ...
|
63
78
|
before_filter :set_gettext_locale
|
64
79
|
|
65
|
-
|
66
80
|
Translating
|
67
81
|
===========
|
68
|
-
|
69
|
-
|
82
|
+
Performance is almost the same for all backends since translations are cached after first use.
|
83
|
+
|
84
|
+
### Option A: .po files
|
85
|
+
|
86
|
+
FastGettext.add_text_domain 'app', :path => 'locale', :type => :po
|
87
|
+
|
70
88
|
- use some _('translations')
|
71
89
|
- run `rake gettext:find`, to let GetText find all translations used
|
72
90
|
- (optional) run `rake gettext:store_model_attributes`, to parse the database for columns that can be translated
|
73
91
|
- if this is your first translation: `cp locale/app.pot locale/de/app.po` for every locale you want to use
|
74
|
-
- translate messages in 'locale/de/app.po' (leave msgstr blank and msgstr == msgid)
|
75
|
-
|
92
|
+
- translate messages in 'locale/de/app.po' (leave msgstr blank and msgstr == msgid)
|
93
|
+
|
94
|
+
New translations will be marked "fuzzy", search for this and remove it, so that they will be used.
|
76
95
|
Obsolete translations are marked with ~#, they usually can be removed since they are no longer needed
|
77
|
-
- run `rake gettext:pack` to write GetText format translation files
|
78
96
|
|
79
|
-
####
|
80
|
-
|
97
|
+
#### Unfound translations with rake gettext:find
|
98
|
+
Dynamic translations like `_("x"+"u")` cannot be fond. You have 4 options:
|
99
|
+
|
100
|
+
- add `N_('xu')` somewhere else in the code, so the parser sees it
|
101
|
+
- add `N_('xu')` in a totally separate file like `locale/unfound_translations.rb`, so the parser sees it
|
102
|
+
- use the [gettext_test_log rails plugin ](http://github.com/grosser/gettext_test_log) to find all translations that where used while testing
|
103
|
+
- add a Logger to a translation Chain, so every unfound translations is logged ([example]((http://github.com/grosser/fast_gettext)))
|
81
104
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
105
|
+
### Option B: Traditional .po/.mo files
|
106
|
+
|
107
|
+
FastGettext.add_text_domain 'app', :path => 'locale'
|
108
|
+
|
109
|
+
- follow Option A
|
110
|
+
- run `rake gettext:pack` to write binary GetText .mo files
|
111
|
+
|
112
|
+
### Option C: Database
|
113
|
+
Most scalable method, all translators can work simultaneously and online.
|
114
|
+
|
115
|
+
Easiest to use with the [translation database Rails engine](http://github.com/grosser/translation_db_engine).
|
86
116
|
Translations can be edited under `/translation_keys`
|
87
117
|
|
88
|
-
|
118
|
+
FastGettext::TranslationRepository::Db.require_models
|
119
|
+
FastGettext.add_text_domain 'app', :type => :db, :model => TranslationKey
|
89
120
|
|
121
|
+
I18n
|
122
|
+
====
|
90
123
|
I18n.locale <==> FastGettext.locale.to_sym
|
91
124
|
I18n.locale = :de <==> FastGettext.locale = 'de'
|
92
125
|
|
@@ -117,16 +150,14 @@ The model/attribute translations can be found through `rake gettext:store_model_
|
|
117
150
|
(which ignores some commonly untranslated columns like id,type,xxx_count,...).
|
118
151
|
|
119
152
|
Error messages can be translated through FastGettext, if the ':message' is a translation-id or the matching Rails I18n key is translated.
|
120
|
-
In any other case they go through the SimpleBackend.
|
121
153
|
|
122
154
|
####Option A:
|
123
155
|
Define a translation for "I need my rating!" and use it as message.
|
124
156
|
validates_inclusion_of :rating, :in=>1..5, :message=>N_('I need my rating!')
|
125
157
|
|
126
158
|
####Option B:
|
127
|
-
Do not use :message
|
128
159
|
validates_inclusion_of :rating, :in=>1..5
|
129
|
-
|
160
|
+
Make a translation for the I18n key: `activerecord.errors.models.rating.attributes.rating.inclusion`
|
130
161
|
|
131
162
|
####Option C:
|
132
163
|
Add a translation to each config/locales/*.yml files
|
@@ -145,20 +176,11 @@ Plurals
|
|
145
176
|
FastGettext supports pluralization
|
146
177
|
n_('Apple','Apples',3) == 'Apples'
|
147
178
|
|
148
|
-
|
149
|
-
====================
|
150
|
-
Sometimes translations like `_("x"+"u")` cannot be fond. You have 4 options:
|
151
|
-
|
152
|
-
- add `N_('xu')` somewhere else in the code, so the parser sees it
|
153
|
-
- add `N_('xu')` in a totally seperate file like `locale/unfound_translations.rb`, so the parser sees it
|
154
|
-
- use the [gettext_test_log rails plugin ](http://github.com/grosser/gettext_test_log) to find all translations that where used while testing
|
155
|
-
- add a Logger to a translation Chain, so every unfound translations is logged ([example]((http://github.com/grosser/fast_gettext)))
|
156
|
-
|
179
|
+
Abnormal plurals like e.g. Polish that has 4 different can also be addressed, see [FastGettext Readme](http://github.com/grosser/fast_gettext)
|
157
180
|
|
158
181
|
TODO
|
159
182
|
=====
|
160
183
|
- fix % on string to respect html_safe: `("<a>%{x}</a>".html_safe % {:x=>'<script>y</script>'})` should escape the `<script>y</script>` part)
|
161
|
-
- refactor Readme
|
162
184
|
|
163
185
|
Contributors
|
164
186
|
======
|
@@ -169,6 +191,6 @@ Contributors
|
|
169
191
|
- [J. Pablo Fernández](http://pupeno.com)
|
170
192
|
- [Anh Hai Trinh](http://blog.onideas.ws)
|
171
193
|
|
172
|
-
[Michael Grosser](http://
|
194
|
+
[Michael Grosser](http://grosser.it)
|
173
195
|
grosser.michael@gmail.com
|
174
196
|
Hereby placed under public domain, do what you want, just do not hold me accountable...
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.7
|
data/gettext_i18n_rails.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{gettext_i18n_rails}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.7"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Michael Grosser"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-10-13}
|
13
13
|
s.email = %q{grosser.michael@gmail.com}
|
14
14
|
s.files = [
|
15
15
|
".gitignore",
|
@@ -109,7 +109,7 @@ module RubyGettextExtractor
|
|
109
109
|
def new_call recv, meth, args = nil
|
110
110
|
# we dont care if the method is called on a a object
|
111
111
|
if recv.nil?
|
112
|
-
if (meth == :_ || meth == :p_ || meth == :N_ || meth == :pgettext)
|
112
|
+
if (meth == :_ || meth == :p_ || meth == :N_ || meth == :pgettext || meth == :s_)
|
113
113
|
key = extract_key(args, "\004")
|
114
114
|
elsif meth == :n_
|
115
115
|
key = extract_key(args, "\000")
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 0.2.
|
8
|
+
- 7
|
9
|
+
version: 0.2.7
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Michael Grosser
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-10-13 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|