grosser-fast_gettext 0.4.3 → 0.4.4
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 +7 -7
- data/VERSION.yml +1 -1
- data/examples/db/migration.rb +22 -0
- data/lib/fast_gettext/translation_repository/db.rb +8 -10
- data/lib/fast_gettext/translation_repository/db_models/translation_key.rb +15 -0
- data/lib/fast_gettext/translation_repository/db_models/translation_text.rb +9 -0
- data/spec/fast_gettext/translation_repository/db_spec.rb +6 -9
- metadata +6 -4
- data/lib/fast_gettext/translation_repository/db/translation_key.rb +0 -12
- data/lib/fast_gettext/translation_repository/db/translation_text.rb +0 -5
data/README.markdown
CHANGED
@@ -44,15 +44,15 @@ I already started work on a po/mo parser & reader that is easier to use, contrib
|
|
44
44
|
|
45
45
|
###Database
|
46
46
|
!!!This is very new/alpha-ish atm and surely will change!!!
|
47
|
-
|
48
|
-
|
47
|
+
Easy to maintain especially with many translations and multiple locales.
|
48
|
+
An example migration for ActiveRecord can be found in `exaples/db/migration`.
|
49
|
+
This is usable with any model DataMapper/Sequel or any other(non-database) backend, the only thing you need to do is respond to the self.translation(key, locale) call.
|
50
|
+
The default plural seperator is `||||` but you may overwrite it (or suggest a better one..).
|
51
|
+
include FastGettext::TranslationRepository::DB.require_models
|
49
52
|
FastGettext.add_text_domain('my_app', :type=>:db, :model=>TranslationKey)
|
50
|
-
#the model should be the model that represents the keys, you can use FastGettext::TranslationRepository::
|
51
|
-
#the model must have string:key and translations
|
52
|
-
#a Translation must have string:text and string:locale
|
53
|
+
#the model should be the model that represents the keys, you can use FastGettext::TranslationRepository::DBModel::TranslationKey
|
53
54
|
|
54
|
-
To get started have a look at the
|
55
|
-
in `lib/fast_gettext/translation_repository/db/translation_key`.
|
55
|
+
To get started have a look at the default models in `lib/fast_gettext/translation_repository/db/translation_key`.
|
56
56
|
|
57
57
|
Performance
|
58
58
|
===========
|
data/VERSION.yml
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
class CreateTranslationTables < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :translation_keys do |t|
|
4
|
+
t.string :key, :unique=>true, :null=>false
|
5
|
+
t.add_index :key
|
6
|
+
t.timestamps
|
7
|
+
end
|
8
|
+
|
9
|
+
create_table :translation_texts do |t|
|
10
|
+
t.text :text
|
11
|
+
t.string :locale
|
12
|
+
t.integer :translation_key_id, :null=>false
|
13
|
+
t.add_index :translation_key_id
|
14
|
+
t.timestamps
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.down
|
19
|
+
drop_table :translation_keys
|
20
|
+
drop_table :translation_texts
|
21
|
+
end
|
22
|
+
end
|
@@ -21,7 +21,7 @@ module FastGettext
|
|
21
21
|
|
22
22
|
def available_locales
|
23
23
|
if @model.respond_to? :available_locales
|
24
|
-
@model.available_locales
|
24
|
+
@model.available_locales || []
|
25
25
|
else
|
26
26
|
[]
|
27
27
|
end
|
@@ -36,23 +36,21 @@ module FastGettext
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def [](key)
|
39
|
-
translation
|
39
|
+
@model.translation(key, FastGettext.locale)
|
40
40
|
end
|
41
41
|
|
42
42
|
def plural(*args)
|
43
|
-
translation = translation(args*self.class.seperator)
|
44
|
-
|
45
|
-
translation.text.to_s.split(self.class.seperator)
|
43
|
+
if translation = @model.translation(args*self.class.seperator, FastGettext.locale)
|
44
|
+
translation.to_s.split(self.class.seperator)
|
46
45
|
else
|
47
46
|
[]
|
48
47
|
end
|
49
48
|
end
|
50
49
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
key.translations.find_by_locale(FastGettext.locale)
|
50
|
+
def self.require_models
|
51
|
+
require 'fast_gettext/translation_repository/db_models/translation_key'
|
52
|
+
require 'fast_gettext/translation_repository/db_models/translation_text'
|
53
|
+
FastGettext::TranslationRepository::DBModels
|
56
54
|
end
|
57
55
|
end
|
58
56
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module FastGettext::TranslationRepository
|
2
|
+
module DBModels
|
3
|
+
class TranslationKey < ActiveRecord::Base
|
4
|
+
has_many :translations, :class_name=>'TranslationText'
|
5
|
+
validates_uniqueness_of :key
|
6
|
+
validates_presence_of :key
|
7
|
+
|
8
|
+
def self.translation(key, locale)
|
9
|
+
return unless translation_key = find_by_key(key)
|
10
|
+
return unless translation_text = translation_key.translations.find_by_locale(locale)
|
11
|
+
translation_text.text
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
module FastGettext::TranslationRepository
|
2
|
+
module DBModels
|
3
|
+
class TranslationText < ActiveRecord::Base
|
4
|
+
belongs_to :key, :class_name=>'TranslationKey'
|
5
|
+
validates_presence_of :locale, :text
|
6
|
+
validates_uniqueness_of :locale, :scope=>:translation_key_id
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
@@ -3,10 +3,7 @@ require File.join(current_folder,'..','..','spec_helper')
|
|
3
3
|
|
4
4
|
require 'activerecord'
|
5
5
|
require 'fast_gettext/translation_repository/db'
|
6
|
-
|
7
|
-
require 'fast_gettext/translation_repository/db/translation_text'
|
8
|
-
|
9
|
-
include FastGettext::TranslationRepository
|
6
|
+
include FastGettext::TranslationRepository::DB.require_models
|
10
7
|
|
11
8
|
describe FastGettext::TranslationRepository::DB do
|
12
9
|
before :all do
|
@@ -31,15 +28,15 @@ describe FastGettext::TranslationRepository::DB do
|
|
31
28
|
end
|
32
29
|
|
33
30
|
before do
|
34
|
-
|
35
|
-
|
31
|
+
TranslationKey.delete_all
|
32
|
+
TranslationText.delete_all
|
36
33
|
FastGettext.locale = 'de'
|
37
|
-
@rep = FastGettext::TranslationRepository::DB.new('x', :model=>
|
34
|
+
@rep = FastGettext::TranslationRepository::DB.new('x', :model=>TranslationKey)
|
38
35
|
end
|
39
36
|
|
40
37
|
def create_translation(key, text)
|
41
|
-
translation_key =
|
42
|
-
|
38
|
+
translation_key = TranslationKey.create!(:key=>key)
|
39
|
+
TranslationText.create!(:translation_key_id=>translation_key.id, :text=>text, :locale=>'de')
|
43
40
|
end
|
44
41
|
|
45
42
|
it "can be built" do
|
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.
|
4
|
+
version: 0.4.4
|
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-
|
12
|
+
date: 2009-04-25 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -25,6 +25,7 @@ files:
|
|
25
25
|
- README.markdown
|
26
26
|
- Rakefile
|
27
27
|
- VERSION.yml
|
28
|
+
- examples/db/migration.rb
|
28
29
|
- examples/missing_translation_logger.rb
|
29
30
|
- lib/fast_gettext.rb
|
30
31
|
- lib/fast_gettext/mo_file.rb
|
@@ -35,8 +36,8 @@ files:
|
|
35
36
|
- lib/fast_gettext/translation_repository/base.rb
|
36
37
|
- lib/fast_gettext/translation_repository/chain.rb
|
37
38
|
- lib/fast_gettext/translation_repository/db.rb
|
38
|
-
- lib/fast_gettext/translation_repository/
|
39
|
-
- lib/fast_gettext/translation_repository/
|
39
|
+
- lib/fast_gettext/translation_repository/db_models/translation_key.rb
|
40
|
+
- lib/fast_gettext/translation_repository/db_models/translation_text.rb
|
40
41
|
- lib/fast_gettext/translation_repository/logger.rb
|
41
42
|
- lib/fast_gettext/translation_repository/mo.rb
|
42
43
|
- lib/fast_gettext/translation_repository/po.rb
|
@@ -109,4 +110,5 @@ test_files:
|
|
109
110
|
- spec/vendor/iconv_spec.rb
|
110
111
|
- spec/vendor/fake_load_path/iconv.rb
|
111
112
|
- spec/vendor/string_spec.rb
|
113
|
+
- examples/db/migration.rb
|
112
114
|
- examples/missing_translation_logger.rb
|
@@ -1,12 +0,0 @@
|
|
1
|
-
class FastGettext::TranslationRepository::DB::TranslationKey < ActiveRecord::Base
|
2
|
-
has_many :translations, :class_name=>'TranslationText'
|
3
|
-
validates_uniqueness_of :key
|
4
|
-
validates_presence_of :key
|
5
|
-
|
6
|
-
# TODO this should not be necessary, but
|
7
|
-
# TranslationKey.respond_to? :available_locales
|
8
|
-
# returns true even if this is not defined...
|
9
|
-
def self.available_locales
|
10
|
-
[]
|
11
|
-
end
|
12
|
-
end
|