i18n_rails_helpers 2.0.1 → 2.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.
- checksums.yaml +5 -5
- data/README.md +170 -15
- data/app/helpers/i18n_helpers.rb +25 -36
- data/config/locales/de.yml +4 -0
- data/config/locales/en.yml +4 -0
- data/lib/i18n_rails_helpers/controller_helpers.rb +17 -0
- data/lib/i18n_rails_helpers/engine.rb +8 -0
- data/lib/i18n_rails_helpers/model_helpers.rb +40 -0
- data/lib/i18n_rails_helpers/version.rb +1 -1
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f7cac95e65c93521ee679616d514393c8fb0c7db16dbb284a0e4aa3d8d9f2860
|
4
|
+
data.tar.gz: fe5f13d1e2ba4f152e394adf9b1baadb7e4d4a3edc2667b551328d0c92bec359
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b2896f9666bfecf52e6f22964001a4f0bd9bf002e1ab256913a26ac617592affdfa102958f13a33125b75516f152e4063bad8099d6ed48347e479ad829e0a728
|
7
|
+
data.tar.gz: 045aecc3d6f2d2c08b0c454d8b645ef69556a024e01e580d3551f6f4eac383ce3ca844b3d18a2964a6d4a6fbea3377be27cf9cc6426659a560ced922b585fe7f
|
data/README.md
CHANGED
@@ -1,27 +1,182 @@
|
|
1
|
-
I18nRailsHelpers
|
2
|
-
================
|
1
|
+
# I18nRailsHelpers
|
3
2
|
|
4
3
|
[](http://travis-ci.org/huerlisi/i18n_rails_helpers)
|
5
4
|
|
6
5
|
Rails i18n view helpers for things like crud actions, models and and attributes.
|
7
6
|
|
8
|
-
Install
|
9
|
-
|
7
|
+
- [Install](#install)
|
8
|
+
- [Examples](#examples)
|
9
|
+
- [View Helpers](#view-helpers)
|
10
|
+
- [t_attr](#t_attr)
|
11
|
+
- [t_title](#t_title)
|
12
|
+
- [t_action](#t_action)
|
13
|
+
- [t_confirm_delete](#t_confirm_delete)
|
14
|
+
- [t_select_prompt](#t_select_prompt)
|
15
|
+
- [Controller Helpers](#controller-helpers)
|
16
|
+
- [redirect_notice](#redirect_notice)
|
17
|
+
- [t_attr](#t_attr-1)
|
18
|
+
- [t_title](#t_title-1)
|
19
|
+
- [t_action](#t_action-1)
|
20
|
+
- [Model helpers](#model-helpers)
|
21
|
+
- [enum_attribute_t methods](#enum_attribute_t-methods)
|
22
|
+
- [t_enum](#t_enum)
|
23
|
+
- [Required translations in locales (`config/locales/zz.yml`)](#required-translations-in-locales-configlocaleszzyml)
|
24
|
+
- [License](#license)
|
10
25
|
|
11
|
-
|
26
|
+
## Install
|
12
27
|
|
13
|
-
|
28
|
+
In Rails simply add this to your Gemfile:
|
14
29
|
|
15
|
-
|
16
|
-
|
30
|
+
```ruby
|
31
|
+
gem 'i18n_rails_helpers'
|
32
|
+
```
|
17
33
|
|
18
|
-
|
19
|
-
t_model # 'Konto' # when called in patients_controller views
|
20
|
-
t_title('delete') # 'Konto löschen' # when called in accounts_controller views
|
21
|
-
t_action('index') # 'Liste'
|
22
|
-
t_confirm_delete(@account) # 'Konto Kasse wirklich löschen'
|
34
|
+
## Examples
|
23
35
|
|
24
|
-
|
25
|
-
|
36
|
+
### View Helpers
|
37
|
+
|
38
|
+
#### t_attr
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
t_attr('first_name', Patient) # en: 'First name' de: 'Vorname' - when called from views of any controller
|
42
|
+
t_attr('first_name') # en: 'First name' de: 'Vorname' - when called in patients_controller views
|
43
|
+
t_attr(:first_name) # en: 'First name' de: 'Vorname' - can also be called with symbols
|
44
|
+
```
|
45
|
+
|
46
|
+
#### t_title
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
t_title(:index) # en: "%{model} index" , de: "%{model} Liste"
|
50
|
+
t_title(:edit) # en: "Edit %{model}", de: "%{model} bearbeiten"
|
51
|
+
t_title(:update) # en: "Edit %{model}", de: "%{model} bearbeiten"
|
52
|
+
t_title(:show) # en: "Show %{model}", de: "%{model} anzeigen"
|
53
|
+
t_title(:new) # en: "New %{model}", de: "%{model} erfassen"
|
54
|
+
t_title(:create) # en: "New %{model}", de: "%{model} erfassen"
|
55
|
+
t_title(:delete) # en: "Delete %{model}", de: "%{model} löschen"
|
56
|
+
t_title(:destroy) # en: "Delete %{model}", de: "%{model} löschen"
|
57
|
+
```
|
58
|
+
|
59
|
+
#### t_action
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
t_action(:index) # en: "Index", de: "Liste"
|
63
|
+
t_action(:edit) # en: "Edit", de: "Bearbeiten"
|
64
|
+
t_action(:update) # en: "Edit", de: "Bearbeiten"
|
65
|
+
t_action(:show) # en: "Show", de: "Anzeigen"
|
66
|
+
t_action(:new) # en: "New", de: "Erfassen"
|
67
|
+
t_action(:create) # en: "New", de: "Erfassen"
|
68
|
+
t_action(:delete) # en: "Delete", de: "Löschen"
|
69
|
+
t_action(:destroy) # en: "Delete", de: "Löschen"
|
70
|
+
t_action(:cancel) # en: "Abbrechen", de: "Abbrechen"
|
71
|
+
t_action(:back) # en: "Back", de: "Zurück"
|
72
|
+
t_action(:previous) # en: "Previous", de: "Zurück"
|
73
|
+
t_action(:next) # en: "Next", de: "Weiter"
|
74
|
+
```
|
75
|
+
|
76
|
+
#### t_confirm_delete
|
77
|
+
|
78
|
+
```ruby
|
79
|
+
t_confirm_delete(@account) # en: 'Really delete account Kasse?' de: 'Konto Kasse wirklich löschen?'
|
80
|
+
```
|
81
|
+
|
82
|
+
#### t_select_prompt
|
83
|
+
|
84
|
+
```ruby
|
85
|
+
t_select_prompt(@account) # en: 'Select Account' de: 'Konto auswählen'
|
86
|
+
```
|
87
|
+
|
88
|
+
### Controller Helpers
|
89
|
+
|
90
|
+
#### redirect_notice
|
91
|
+
|
92
|
+
```ruby
|
93
|
+
def create
|
94
|
+
# ...
|
95
|
+
redirect_to some_path, redirect_notice # => 'Klient erstellt.'
|
96
|
+
redirect_to some_path, redirect_notice(@client) # => 'Klient Example Client erstellt.'
|
97
|
+
end
|
98
|
+
|
99
|
+
def update
|
100
|
+
# ...
|
101
|
+
redirect_to some_path, redirect_notice # => 'Klient geändert.'
|
102
|
+
redirect_to some_path, redirect_notice(@client) # => 'Klient Example Client geändert.'
|
103
|
+
end
|
104
|
+
|
105
|
+
|
106
|
+
def destroy
|
107
|
+
# ...
|
108
|
+
redirect_to some_path, redirect_notice # => 'Klient gelöscht.'
|
109
|
+
redirect_to some_path, redirect_notice(@client) # => 'Klient Example Client gelöscht.'
|
110
|
+
end
|
111
|
+
```
|
112
|
+
|
113
|
+
#### t_attr
|
114
|
+
|
115
|
+
- [t_attr](#t_attr)
|
116
|
+
|
117
|
+
#### t_title
|
118
|
+
|
119
|
+
- [t_title](#t_title)
|
120
|
+
|
121
|
+
#### t_action
|
122
|
+
|
123
|
+
- [t_action](#t_action)
|
124
|
+
|
125
|
+
### Model helpers
|
126
|
+
|
127
|
+
#### enum_attribute_t methods
|
128
|
+
|
129
|
+
Automaticly generated enum attribut translation methods.
|
130
|
+
|
131
|
+
*[Required translations](#required-translations-in-locales-configlocaleszzyml)*.
|
132
|
+
|
133
|
+
```ruby
|
134
|
+
# Client model
|
135
|
+
enum gender: { undefined: 0, female: 1, male: 2, xy: 3 }
|
136
|
+
|
137
|
+
# in use
|
138
|
+
Client.first.gender # => 'female'
|
139
|
+
Client.first.gender_t # de: => 'Frau', en: => 'Woman'
|
140
|
+
Client.first.genders_t # => { undefined: 'Nicht definiert', female: 'Frau', male: 'Mann' }
|
141
|
+
```
|
142
|
+
|
143
|
+
#### t_enum
|
144
|
+
|
145
|
+
```ruby
|
146
|
+
# Client model
|
147
|
+
enum gender: { undefined: 0, female: 1, male: 2, xy: 3 }
|
148
|
+
|
149
|
+
Client.first.gender # => 'female'
|
150
|
+
Client.first.t_enum(:gender) # de: => 'Frau', en: => 'Women'
|
151
|
+
Client.first.t_enum(:gender, :male) # de: => 'Mann', en: => 'Men'
|
152
|
+
```
|
153
|
+
|
154
|
+
### Required translations in locales (`config/locales/zz.yml`)
|
155
|
+
|
156
|
+
```yaml
|
157
|
+
---
|
158
|
+
de:
|
159
|
+
activerecord:
|
160
|
+
attributes:
|
161
|
+
client:
|
162
|
+
genders:
|
163
|
+
undefined: Nicht definiert
|
164
|
+
female: Frau
|
165
|
+
male: Mann
|
166
|
+
---
|
167
|
+
en:
|
168
|
+
activerecord:
|
169
|
+
attributes:
|
170
|
+
client:
|
171
|
+
genders:
|
172
|
+
undefined: Not defined
|
173
|
+
female: Women
|
174
|
+
male: Man
|
175
|
+
---
|
176
|
+
fr:
|
177
|
+
# ...
|
178
|
+
```
|
179
|
+
|
180
|
+
## License
|
26
181
|
|
27
182
|
Released under the MIT license.
|
data/app/helpers/i18n_helpers.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
module I18nHelpers
|
2
2
|
# Returns translated identifier
|
3
3
|
def t_page_head
|
4
|
-
if params[:id]
|
5
|
-
|
4
|
+
if params[:id] && resource
|
5
|
+
"#{t_title} #{resource}"
|
6
6
|
else
|
7
|
-
|
7
|
+
t_title
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
@@ -18,12 +18,8 @@ module I18nHelpers
|
|
18
18
|
# t_attr('first_name') => 'Vorname' # when called in patients_controller views
|
19
19
|
#
|
20
20
|
def t_attr(attribute, model = nil)
|
21
|
-
|
22
|
-
|
23
|
-
elsif model.nil?
|
24
|
-
model_class = controller_name.classify.constantize
|
25
|
-
end
|
26
|
-
model_class.human_attribute_name(attribute)
|
21
|
+
model ||= controller_name.classify.constantize
|
22
|
+
model.human_attribute_name(attribute)
|
27
23
|
end
|
28
24
|
|
29
25
|
# Returns translated name for the given +model+.
|
@@ -37,18 +33,16 @@ module I18nHelpers
|
|
37
33
|
# t_model => 'Konto' # when called in patients_controller views
|
38
34
|
#
|
39
35
|
def t_model(model = nil)
|
40
|
-
if model.is_a? ActiveModel::Naming
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
end
|
51
|
-
I18n::translate(model_name, :scope => [:activerecord, :models])
|
36
|
+
return model.model_name.human if model.is_a? ActiveModel::Naming
|
37
|
+
return model.class.model_name.human if model.class.is_a? ActiveModel::Naming
|
38
|
+
model_key = if model.is_a? Class
|
39
|
+
model.name.underscore
|
40
|
+
elsif model.nil?
|
41
|
+
controller_name.singularize
|
42
|
+
else
|
43
|
+
model.class.name.underscore
|
44
|
+
end
|
45
|
+
I18n.t("activerecord.models.#{model_key}")
|
52
46
|
end
|
53
47
|
|
54
48
|
# Returns translated title for current +action+ on +model+.
|
@@ -67,19 +61,15 @@ module I18nHelpers
|
|
67
61
|
# #{controller_name}.#{action}.title
|
68
62
|
#
|
69
63
|
# Example:
|
70
|
-
# t_title('new', Account
|
71
|
-
# t_title('delete')
|
72
|
-
# t_title
|
64
|
+
# t_title('new', Account) => 'Konto anlegen'
|
65
|
+
# t_title('delete') => 'Konto löschen' # when called in accounts_controller views
|
66
|
+
# t_title => 'Konto ändern' # when called in accounts_controller edit view
|
73
67
|
#
|
74
68
|
def t_title(action = nil, model = nil)
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
context = controller_name.underscore
|
80
|
-
end
|
81
|
-
|
82
|
-
I18n::translate("#{context}.#{action}.title", :default => [:"crud.title.#{action}"], :model => t_model(model))
|
69
|
+
model_key = model&.model_name&.i18n_key || model&.class&.model_name&.i18n_key ||
|
70
|
+
controller_name.underscore
|
71
|
+
I18n.t("#{model_key}.#{action || action_name}.title",
|
72
|
+
default: [:"crud.title.#{action || action_name}"], model: t_model(model))
|
83
73
|
end
|
84
74
|
alias :t_crud :t_title
|
85
75
|
|
@@ -95,8 +85,7 @@ module I18nHelpers
|
|
95
85
|
# t_action => 'Ändern' # when called in an edit view
|
96
86
|
#
|
97
87
|
def t_action(action = nil, model = nil)
|
98
|
-
action
|
99
|
-
I18n::translate(action, :scope => 'crud.action', :model => t_model(model))
|
88
|
+
I18n.t("crud.action.#{action || action_name}", model: t_model(model))
|
100
89
|
end
|
101
90
|
|
102
91
|
# Returns translated deletion confirmation for +record+.
|
@@ -107,7 +96,7 @@ module I18nHelpers
|
|
107
96
|
# t_confirm_delete(@account) => 'Konto Kasse wirklich löschen'
|
108
97
|
#
|
109
98
|
def t_confirm_delete(record)
|
110
|
-
I18n
|
99
|
+
I18n.t('messages.confirm_delete', model: t_model(record), record: record.to_s)
|
111
100
|
end
|
112
101
|
|
113
102
|
# Returns translated drop down field prompt for +model+.
|
@@ -118,6 +107,6 @@ module I18nHelpers
|
|
118
107
|
# t_select_prompt(Account) => 'Konto auswählen'
|
119
108
|
#
|
120
109
|
def t_select_prompt(model = nil)
|
121
|
-
I18n
|
110
|
+
I18n.t('messages.select_prompt', model: t_model(model))
|
122
111
|
end
|
123
112
|
end
|
data/config/locales/de.yml
CHANGED
data/config/locales/en.yml
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
|
2
|
+
module I18nRailsHelpers
|
3
|
+
module ControllerHelpers
|
4
|
+
delegate :t_attr, :t_model, :t_action, to: :helpers
|
5
|
+
|
6
|
+
# returns a redirect notice for create, update and destroy actions
|
7
|
+
#
|
8
|
+
# Example in ClientsController:
|
9
|
+
# redirect_to some_path, redirect_notice # => 'Klient geändert.'
|
10
|
+
# redirect_to some_path, redirect_notice(@client) # => 'Klient Example Client geändert.'
|
11
|
+
#
|
12
|
+
def redirect_notice(record = nil)
|
13
|
+
{ notice: I18n.t("crud.notices.#{action_name}", model: helpers.t_model,
|
14
|
+
record: record.present? ? "#{record} " : '') }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'rails'
|
2
|
+
require 'i18n_rails_helpers/model_helpers'
|
3
|
+
require 'i18n_rails_helpers/controller_helpers'
|
2
4
|
|
3
5
|
module I18nRailsHelpers
|
4
6
|
class Engine < Rails::Engine
|
@@ -6,6 +8,12 @@ module I18nRailsHelpers
|
|
6
8
|
ActionView::Base.send :include, I18nHelpers
|
7
9
|
ActionView::Base.send :include, ContextualLinkHelpers
|
8
10
|
ActionView::Base.send :include, ListLinkHelpers
|
11
|
+
ActionController::Base.class_eval { include ControllerHelpers }
|
12
|
+
|
13
|
+
ActiveRecord::Base.class_eval do
|
14
|
+
include ModelHelpers
|
15
|
+
after_initialize :define_enum_t_methods
|
16
|
+
end
|
9
17
|
end
|
10
18
|
end
|
11
19
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module I18nRailsHelpers
|
2
|
+
module ModelHelpers
|
3
|
+
# enum attrubute_t and attributes_t return translated enum values
|
4
|
+
#
|
5
|
+
# Example:
|
6
|
+
# in the Client model
|
7
|
+
# enum gender: { undefined: 0, female: 1, male: 2 }
|
8
|
+
# in use
|
9
|
+
# Client.first.gender # => 'female'
|
10
|
+
# Client.first.gender_t # => 'Frau'
|
11
|
+
# Client.first.genders_t # => { undefined: 'Nicht definiert', female: 'Frau', male: 'Mann' }
|
12
|
+
#
|
13
|
+
# Requires:
|
14
|
+
# locale key: activerecord.attributes.#{model_name}.#{enum}.#{enum_value_key}
|
15
|
+
# eg.: activerecord.attributes.client.genders.female # => 'Frau'
|
16
|
+
#
|
17
|
+
def define_enum_t_methods
|
18
|
+
defined_enums.each do |enum_attr, values|
|
19
|
+
self.class.send(:define_method, "#{enum_attr}_t") { t_enum(enum_attr) }
|
20
|
+
self.class.send(:define_method, "#{enum_attr.pluralize}_t") do
|
21
|
+
t_enum_values(enum_attr, values)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def t_enum_values(enum_attr, values)
|
27
|
+
values.map do |enum_val_key, _|
|
28
|
+
[enum_val_key.to_sym, t_enum(enum_attr, enum_val_key)]
|
29
|
+
end.to_h
|
30
|
+
end
|
31
|
+
|
32
|
+
# translate enum fields value
|
33
|
+
def t_enum(enum_attr, enum_value = nil)
|
34
|
+
enum_value ||= public_send(enum_attr)
|
35
|
+
I18n.t(
|
36
|
+
"activerecord.attributes.#{model_name.i18n_key}.#{enum_attr.to_s.pluralize}.#{enum_value}"
|
37
|
+
)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: i18n_rails_helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simon Huerlimann (CyT)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 4.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 4.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: sqlite3
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,8 +80,7 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
-
description: Rails i18n view helpers for things like crud actions, models and
|
84
|
-
attributes.
|
83
|
+
description: Rails i18n view helpers for things like crud actions, models and attributes.
|
85
84
|
email:
|
86
85
|
- simon.huerlimann@cyt.ch
|
87
86
|
executables: []
|
@@ -105,7 +104,9 @@ files:
|
|
105
104
|
- config/locales/en.yml
|
106
105
|
- lib/boot_form_builder.rb
|
107
106
|
- lib/i18n_rails_helpers.rb
|
107
|
+
- lib/i18n_rails_helpers/controller_helpers.rb
|
108
108
|
- lib/i18n_rails_helpers/engine.rb
|
109
|
+
- lib/i18n_rails_helpers/model_helpers.rb
|
109
110
|
- lib/i18n_rails_helpers/version.rb
|
110
111
|
homepage: https://github.com/huerlisi/i18n_rails_helpers
|
111
112
|
licenses:
|
@@ -127,9 +128,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
127
128
|
version: '0'
|
128
129
|
requirements: []
|
129
130
|
rubyforge_project:
|
130
|
-
rubygems_version: 2.
|
131
|
+
rubygems_version: 2.7.6
|
131
132
|
signing_key:
|
132
133
|
specification_version: 4
|
133
134
|
summary: I18n Rails helpers
|
134
135
|
test_files: []
|
135
|
-
has_rdoc:
|