lolita-translation 0.0.1 → 0.0.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.md +0 -147
- data/VERSION +1 -1
- data/app/views/components/lolita/configuration/tab/translation/_display.html.erb +2 -1
- data/lolita-translation.gemspec +2 -2
- metadata +13 -13
data/README.md
CHANGED
@@ -31,150 +31,3 @@ This is a fork of http://github.com/dmitry/has_translations with small changes.
|
|
31
31
|
Blog::Article.sync_translation_table!
|
32
32
|
|
33
33
|
And run `rake db:seed` and it will do it for you. It also updates the table if you add news columns in the `translations :name, :title .....` method.
|
34
|
-
|
35
|
-
HasTranslations v0.3.1
|
36
|
-
======================
|
37
|
-
|
38
|
-
This simple plugin creates translations for your model.
|
39
|
-
Uses delegation pattern: http://en.wikipedia.org/wiki/Delegation_pattern
|
40
|
-
|
41
|
-
Tested with ActiveRecord versions: 2.3.5, 2.3.9, 3.0.0 (to test with Rails 3 run `rake RAILS_VERSION=3.0`)
|
42
|
-
|
43
|
-
Installation
|
44
|
-
============
|
45
|
-
|
46
|
-
gem install has_translations
|
47
|
-
|
48
|
-
or as a plugin
|
49
|
-
|
50
|
-
script/plugin install git://github.com/dmitry/has_translations.git
|
51
|
-
|
52
|
-
Example
|
53
|
-
=======
|
54
|
-
|
55
|
-
For example you have Article model and you want to have title and text to be translated.
|
56
|
-
|
57
|
-
Create model named ArticleTranslation (Rule: [CamelCaseModelName]Translation)
|
58
|
-
|
59
|
-
Migration should have `locale` as a string with two letters and `belongs_to associative id`, like:
|
60
|
-
|
61
|
-
class CreateArticleTranslations < ActiveRecord::Migration
|
62
|
-
def self.up
|
63
|
-
create_table :article_translations do |t|
|
64
|
-
t.integer :article_id, :null => false
|
65
|
-
t.string :locale, :null => false, :limit => 2
|
66
|
-
t.string :title, :null => false
|
67
|
-
t.text :text, :null => false
|
68
|
-
end
|
69
|
-
|
70
|
-
add_index :article_translations, [:article_id, :locale], :unique => true
|
71
|
-
end
|
72
|
-
|
73
|
-
def self.down
|
74
|
-
drop_table :article_translations
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
Add to article model `translations :value1, :value2`:
|
79
|
-
|
80
|
-
class Article < ActiveRecord::Base
|
81
|
-
translations :title, :text
|
82
|
-
end
|
83
|
-
|
84
|
-
And that's it. Now you can add your translations using:
|
85
|
-
|
86
|
-
article = Article.create
|
87
|
-
|
88
|
-
article.translations.create(:locale => 'en', :title => 'title', :text => 'text') # or ArticleTranslation.create(:article => article, :locale => 'en', :title => 'title', :text => 'text')
|
89
|
-
article.translations.create(:locale => 'ru', :title => 'заголовок', :text => 'текст')
|
90
|
-
article.reload # reload cached translations association array
|
91
|
-
I18n.locale = :en
|
92
|
-
article.text # text
|
93
|
-
I18n.locale = :ru
|
94
|
-
article.title # заголовок
|
95
|
-
|
96
|
-
You can use text filtering plugins, like acts_as_sanitiled and validations, and anything else that is available to the ActiveRecord:
|
97
|
-
|
98
|
-
class ArticleTranslation < ActiveRecord::Base
|
99
|
-
acts_as_sanitiled :title, :text
|
100
|
-
|
101
|
-
validates_presence_of :title, :text
|
102
|
-
validates_length_of :title, :maximum => 100
|
103
|
-
end
|
104
|
-
|
105
|
-
Options:
|
106
|
-
|
107
|
-
* :fallback => true [default: false] - fallback 1) default locale; 2) first from translations;
|
108
|
-
* :reader => false [default: true] - add reader to the model object
|
109
|
-
* :writer => true [default: false] - add writer to the model object
|
110
|
-
* :nil => nil [default: ''] - if no model found by default returns empty string, you can set it for example to `nil` (no `lambda` supported)
|
111
|
-
|
112
|
-
It's better to use translations with `accepts_nested_attributes_for`:
|
113
|
-
|
114
|
-
accepts_nested_attributes_for :translations
|
115
|
-
|
116
|
-
To create a form for this you can use `all_translations` method. It's have all
|
117
|
-
the locales that you have added using the `I18n.available_locales=` method.
|
118
|
-
If translation for one of the locale isn't exists, it will build it with :locale.
|
119
|
-
So an example which I used in the production (using `formtastic` gem):
|
120
|
-
|
121
|
-
<% semantic_form_for [:admin, @article] do |f| %>
|
122
|
-
<%= f.error_messages %>
|
123
|
-
|
124
|
-
<% f.inputs :name => "Basic" do %>
|
125
|
-
<% object.all_translations.values.each do |translation| %>
|
126
|
-
<% f.semantic_fields_for :translations, translation do |ft| %>
|
127
|
-
<%= ft.input :title, :label => "Title #{ft.object.locale.to_s.upcase}" %>
|
128
|
-
<%= ft.input :text, :label => "Text #{ft.object.locale.to_s.upcase}" %>
|
129
|
-
<%= ft.input :locale, :as => :hidden %>
|
130
|
-
<% end %>
|
131
|
-
<% end %>
|
132
|
-
<% end %>
|
133
|
-
<% end %>
|
134
|
-
|
135
|
-
Sometimes you have validations in the translation model, and if you want to skip
|
136
|
-
the translations that you don't want to add to the database, you can use
|
137
|
-
`:reject_if` option, which is available for the `accepts_nested_attributes_for`:
|
138
|
-
|
139
|
-
accepts_nested_attributes_for :translations, :reject_if => lambda { |attrs| attrs['title'].blank? && attrs['text'].blank? }
|
140
|
-
|
141
|
-
named_scope `translated(locale)` - with that named_scope you can find only
|
142
|
-
those models that is translated only to specific locale. For example if you will
|
143
|
-
have 2 models, one is translated to english and the second one isn't, then it
|
144
|
-
`Article.translated(:en)` will find only first one.
|
145
|
-
|
146
|
-
PS
|
147
|
-
==
|
148
|
-
|
149
|
-
I suggest you to use latest i18n gem, include it in your rails 2 environment:
|
150
|
-
|
151
|
-
config.gem 'i18n', :version => '0.4.1' # change version to the latest
|
152
|
-
|
153
|
-
TODO
|
154
|
-
====
|
155
|
-
|
156
|
-
* add installation description to readme
|
157
|
-
* model and migration generators
|
158
|
-
* caching
|
159
|
-
* write more examples: fallback feature
|
160
|
-
* write blog post about comparison and benefits of this plugin between another translation model plugins
|
161
|
-
|
162
|
-
|
163
|
-
Alternatives
|
164
|
-
============
|
165
|
-
|
166
|
-
I know three of them:
|
167
|
-
|
168
|
-
* [puret](http://github.com/jo/puret) - special for Rails 3 and almost the same as this project.
|
169
|
-
* [globalite2](http://github.com/joshmh/globalize2) - a lot of magic.
|
170
|
-
* [model_translations](http://github.com/janne/model_translations) - almost the same as this project, but more with more code in lib.
|
171
|
-
* [translatable_columns](http://github.com/iain/translatable_columns) - different approach: every column have own postfix "_#{locale}" in the same table (sometimes it could be fine).
|
172
|
-
|
173
|
-
|
174
|
-
Used in
|
175
|
-
=======
|
176
|
-
|
177
|
-
[noch.es](http://noch.es/), [eten.es](http://www.eten.es), [sem.ee](http://sem.ee/)
|
178
|
-
|
179
|
-
|
180
|
-
Copyright (c) 2009-2010 [Dmitry Polushkin], released under the MIT license
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
@@ -69,7 +69,8 @@
|
|
69
69
|
}
|
70
70
|
$.each(columns,function(i,column){
|
71
71
|
$('#has_translations_'+column).blur(function(){
|
72
|
-
|
72
|
+
alert('#object_translation_fields_'+$("#has_translations_locale").val()+' .'+column)
|
73
|
+
$('#object_translation_fields_'+$("#has_translations_locale").val()+' .'+column).val($(this).val())
|
73
74
|
})
|
74
75
|
})
|
75
76
|
</script>
|
data/lolita-translation.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{lolita-translation}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["ITHouse", "Gatis Tomsons", "Arturs Meisters"]
|
12
|
-
s.date = %q{2011-08-
|
12
|
+
s.date = %q{2011-08-02}
|
13
13
|
s.description = %q{Translates models in Lolita}
|
14
14
|
s.email = %q{support@ithouse.lv}
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lolita-translation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,12 +11,12 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2011-08-
|
14
|
+
date: 2011-08-02 00:00:00.000000000 +03:00
|
15
15
|
default_executable:
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: rails
|
19
|
-
requirement: &
|
19
|
+
requirement: &80022330 !ruby/object:Gem::Requirement
|
20
20
|
none: false
|
21
21
|
requirements:
|
22
22
|
- - ! '>='
|
@@ -24,10 +24,10 @@ dependencies:
|
|
24
24
|
version: 3.0.0
|
25
25
|
type: :runtime
|
26
26
|
prerelease: false
|
27
|
-
version_requirements: *
|
27
|
+
version_requirements: *80022330
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: shoulda
|
30
|
-
requirement: &
|
30
|
+
requirement: &80001760 !ruby/object:Gem::Requirement
|
31
31
|
none: false
|
32
32
|
requirements:
|
33
33
|
- - ! '>='
|
@@ -35,10 +35,10 @@ dependencies:
|
|
35
35
|
version: '0'
|
36
36
|
type: :development
|
37
37
|
prerelease: false
|
38
|
-
version_requirements: *
|
38
|
+
version_requirements: *80001760
|
39
39
|
- !ruby/object:Gem::Dependency
|
40
40
|
name: bundler
|
41
|
-
requirement: &
|
41
|
+
requirement: &80000980 !ruby/object:Gem::Requirement
|
42
42
|
none: false
|
43
43
|
requirements:
|
44
44
|
- - ~>
|
@@ -46,10 +46,10 @@ dependencies:
|
|
46
46
|
version: 1.0.0
|
47
47
|
type: :development
|
48
48
|
prerelease: false
|
49
|
-
version_requirements: *
|
49
|
+
version_requirements: *80000980
|
50
50
|
- !ruby/object:Gem::Dependency
|
51
51
|
name: jeweler
|
52
|
-
requirement: &
|
52
|
+
requirement: &79999400 !ruby/object:Gem::Requirement
|
53
53
|
none: false
|
54
54
|
requirements:
|
55
55
|
- - ~>
|
@@ -57,10 +57,10 @@ dependencies:
|
|
57
57
|
version: 1.5.2
|
58
58
|
type: :development
|
59
59
|
prerelease: false
|
60
|
-
version_requirements: *
|
60
|
+
version_requirements: *79999400
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: rcov
|
63
|
-
requirement: &
|
63
|
+
requirement: &79998150 !ruby/object:Gem::Requirement
|
64
64
|
none: false
|
65
65
|
requirements:
|
66
66
|
- - ! '>='
|
@@ -68,7 +68,7 @@ dependencies:
|
|
68
68
|
version: '0'
|
69
69
|
type: :development
|
70
70
|
prerelease: false
|
71
|
-
version_requirements: *
|
71
|
+
version_requirements: *79998150
|
72
72
|
description: Translates models in Lolita
|
73
73
|
email: support@ithouse.lv
|
74
74
|
executables: []
|
@@ -115,7 +115,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
115
115
|
version: '0'
|
116
116
|
segments:
|
117
117
|
- 0
|
118
|
-
hash:
|
118
|
+
hash: -1027194769
|
119
119
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
120
|
none: false
|
121
121
|
requirements:
|