route_translator 7.1.2 → 9.0.0
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 +4 -4
- data/CHANGELOG.md +27 -0
- data/README.md +19 -2
- data/lib/route_translator.rb +3 -3
- data/lib/route_translator/extensions/mapper.rb +7 -7
- data/lib/route_translator/host.rb +2 -2
- data/lib/route_translator/translator/path/segment.rb +5 -5
- data/lib/route_translator/version.rb +1 -1
- metadata +34 -37
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: baff0e31d0c0f72b8daddc3754594542af32f47ffa29a0cacb6801a69e8a12c9
|
4
|
+
data.tar.gz: 277a5c0d34be1d75ab2aaefc16cd7e7d5f5a87d6c00e999445d5968121a699b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0a20daed33d3f7979dd0f18eb235944230351a4f730fde34da6642455bfbdcc0d435d405405cc8cb9e7bab8a467b4b4654dd87375e7019eac4bc9e4d0854c37
|
7
|
+
data.tar.gz: 9e321b96018d925b0cb42dd960243f2211258cf686d53939a6e637e683177bf93ab01cccd2abb7611dc4d7f1d15d2f21265d976c0bde8a8f54758abbf074c489
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,32 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 9.0.0 / 2020-11-07
|
4
|
+
|
5
|
+
* [ENHANCEMENT] Check for `empty?` instead of `any?` on available_locales array
|
6
|
+
* [ENHANCEMENT] Update development dependencies
|
7
|
+
|
8
|
+
## 8.2.1 / 2020-11-03
|
9
|
+
|
10
|
+
* [ENHANCEMENT] Fix deprecation with URI.parser ([#234](https://github.com/enriclluelles/route_translator/pull/234))
|
11
|
+
|
12
|
+
## 8.2.0 / 2020-11-03
|
13
|
+
|
14
|
+
* [FEATURE] Add Rails 6.1 compatibility
|
15
|
+
* [ENHANCEMENT] Update development dependencies
|
16
|
+
|
17
|
+
## 8.1.0 / 2020-08-10
|
18
|
+
|
19
|
+
* [FEATURE] Allow Ruby 3.0.0
|
20
|
+
* [ENHANCEMENT] Test against latest Ruby versions
|
21
|
+
* [ENHANCEMENT] Update development dependencies
|
22
|
+
|
23
|
+
## 8.0.0 / 2020-04-17
|
24
|
+
|
25
|
+
* [FEATURE] Drop Ruby 2.3 support
|
26
|
+
* [ENHANCEMENT] Add gem metadata for RubyGems.org
|
27
|
+
* [ENHANCEMENT] Test against latest Ruby versions
|
28
|
+
* [ENHANCEMENT] Update development dependencies
|
29
|
+
|
3
30
|
## 7.1.2 / 2020-03-02
|
4
31
|
|
5
32
|
* [BUGFIX] Fix lazy load of action controller ([#206](https://github.com/enriclluelles/route_translator/pull/206))
|
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# RouteTranslator
|
2
2
|
|
3
3
|
[](https://badge.fury.io/rb/route_translator)
|
4
|
+
[](https://dependabot.com/compatibility-score.html?dependency-name=route_translator&package-manager=bundler&version-scheme=semver)
|
4
5
|
[](https://travis-ci.org/enriclluelles/route_translator)
|
5
6
|
[](https://codeclimate.com/github/enriclluelles/route_translator/maintainability)
|
6
7
|
[](https://coveralls.io/github/enriclluelles/route_translator?branch=master)
|
@@ -9,7 +10,7 @@ RouteTranslator is a gem to allow you to manage the translations of your app rou
|
|
9
10
|
|
10
11
|
It started as a fork of the awesome [translate_routes](https://github.com/raul/translate_routes) plugin by [Raúl Murciano](https://github.com/raul).
|
11
12
|
|
12
|
-
Right now it works with Rails 5.x and Rails 6.
|
13
|
+
Right now it works with Rails 5.x and Rails 6.x
|
13
14
|
|
14
15
|
|
15
16
|
|
@@ -144,6 +145,21 @@ Right now it works with Rails 5.x and Rails 6.0
|
|
144
145
|
Note: you might be tempted to use `before_action` instead of `around_action`: just don't. That could lead to [thread-related issues](https://github.com/enriclluelles/route_translator/issues/44).
|
145
146
|
|
146
147
|
|
148
|
+
### Changing the Language
|
149
|
+
|
150
|
+
To change the language and reload the appropriate route while staying on the same page, use the following code snippet:
|
151
|
+
|
152
|
+
```ruby
|
153
|
+
link_to url_for(locale: 'es'), hreflang: 'es', rel: 'alternate'
|
154
|
+
```
|
155
|
+
|
156
|
+
Although locales are stored by Rails as a symbol (`:es`), when linking to a page in a different locale you need to use a string (`'es'`). Otherwise, instead of a namespaced route (`/es/my-route`) you will get a parameterized route (`/my-route?locale=es`).
|
157
|
+
|
158
|
+
If the page contains a localized slug, the above snippet does not work and a custom implementation is neede.
|
159
|
+
|
160
|
+
More information at [Generating translated URLs](https://github.com/enriclluelles/route_translator/wiki/Generating-translated-URLs)
|
161
|
+
|
162
|
+
|
147
163
|
### Namespaces
|
148
164
|
|
149
165
|
You can translate a namespace route by either its `name` or `path` option:
|
@@ -358,11 +374,12 @@ end
|
|
358
374
|
|
359
375
|
|
360
376
|
## Testing
|
361
|
-
Testing your controllers with routes-translator is easy, just add a locale parameter for your localized routes. Otherwise, an ActionController::UrlGenerationError will raise.
|
377
|
+
Testing your controllers with routes-translator is easy, just add a locale parameter as `String` for your localized routes. Otherwise, an `ActionController::UrlGenerationError` will raise.
|
362
378
|
|
363
379
|
```ruby
|
364
380
|
describe 'GET index' do
|
365
381
|
it 'should respond with success' do
|
382
|
+
# Remember to pass the locale param as String
|
366
383
|
get :index, locale: 'fr'
|
367
384
|
|
368
385
|
expect(response).to be_success
|
data/lib/route_translator.rb
CHANGED
@@ -11,7 +11,7 @@ module ActionDispatch
|
|
11
11
|
@localized = false
|
12
12
|
end
|
13
13
|
|
14
|
-
# rubocop:disable Lint/UnderscorePrefixedVariableName
|
14
|
+
# rubocop:disable Lint/UnderscorePrefixedVariableName, Metrics/PerceivedComplexity
|
15
15
|
def add_route(action, controller, options, _path, to, via, formatted, anchor, options_constraints) # :nodoc:
|
16
16
|
return super unless @localized
|
17
17
|
|
@@ -22,25 +22,25 @@ module ActionDispatch
|
|
22
22
|
|
23
23
|
default_action = options.delete(:action) || @scope[:action]
|
24
24
|
|
25
|
-
if
|
25
|
+
if %r{^[\w\-\/]+$}.match?(action)
|
26
26
|
default_action ||= action.tr('-', '_') unless action.include?('/')
|
27
27
|
else
|
28
28
|
action = nil
|
29
29
|
end
|
30
30
|
|
31
|
-
as = if
|
32
|
-
options.delete(:as)
|
33
|
-
else
|
31
|
+
as = if options.fetch(:as, true)
|
34
32
|
name_for_action(options.delete(:as), action)
|
33
|
+
else
|
34
|
+
options.delete(:as)
|
35
35
|
end
|
36
36
|
|
37
|
-
path = Mapping.normalize_path URI.
|
37
|
+
path = Mapping.normalize_path URI::DEFAULT_PARSER.escape(path), formatted
|
38
38
|
ast = Journey::Parser.parse path
|
39
39
|
|
40
40
|
mapping = Mapping.build(@scope, @set, ast, controller, default_action, to, via, formatted, options_constraints, anchor, options)
|
41
41
|
@set.add_localized_route(mapping, ast, as, anchor, @scope, path, controller, default_action, to, via, formatted, options_constraints, options)
|
42
42
|
end
|
43
|
-
# rubocop:enable Lint/UnderscorePrefixedVariableName
|
43
|
+
# rubocop:enable Lint/UnderscorePrefixedVariableName, Metrics/PerceivedComplexity
|
44
44
|
|
45
45
|
private
|
46
46
|
|
@@ -12,7 +12,7 @@ module RouteTranslator
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def native_locale?(locale)
|
15
|
-
locale.to_s.
|
15
|
+
locale.to_s.include?('native_')
|
16
16
|
end
|
17
17
|
|
18
18
|
def native_locales
|
@@ -23,7 +23,7 @@ module RouteTranslator
|
|
23
23
|
|
24
24
|
def locale_from_host(host)
|
25
25
|
locales = RouteTranslator.config.host_locales.each_with_object([]) do |(pattern, locale), result|
|
26
|
-
result << locale.to_sym if host
|
26
|
+
result << locale.to_sym if host&.match?(regex_for(pattern))
|
27
27
|
end
|
28
28
|
locales &= I18n.available_locales
|
29
29
|
locales.first&.to_sym
|
@@ -24,10 +24,10 @@ module RouteTranslator
|
|
24
24
|
handler = proc { |exception| exception }
|
25
25
|
opts = { locale: locale, scope: scope }
|
26
26
|
|
27
|
-
if I18n.
|
28
|
-
I18n.
|
27
|
+
if I18n.t(str, **opts.merge(exception_handler: handler)).is_a?(I18n::MissingTranslation)
|
28
|
+
I18n.t str, **opts.merge(fallback_options(str, locale))
|
29
29
|
else
|
30
|
-
I18n.
|
30
|
+
I18n.t str, **opts
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
@@ -51,12 +51,12 @@ module RouteTranslator
|
|
51
51
|
def translate(segment, locale, scope)
|
52
52
|
return segment if segment.empty?
|
53
53
|
|
54
|
-
if segment.
|
54
|
+
if segment.start_with?(':')
|
55
55
|
named_param, hyphenized = segment.split('-', 2)
|
56
56
|
return "#{named_param}-#{translate(hyphenized, locale, scope)}" if hyphenized
|
57
57
|
end
|
58
58
|
|
59
|
-
return segment if segment.
|
59
|
+
return segment if segment.start_with?('(', '*') || segment.include?(':')
|
60
60
|
|
61
61
|
appended_part = segment.slice!(/(\()$/)
|
62
62
|
str = translatable_segment(segment)
|
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: route_translator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 9.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Geremia Taglialatela
|
8
8
|
- Enric Lluelles
|
9
9
|
- Raul Murciano
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2020-
|
13
|
+
date: 2020-11-07 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: actionpack
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: 5.0.0.1
|
22
22
|
- - "<"
|
23
23
|
- !ruby/object:Gem::Version
|
24
|
-
version: '6.
|
24
|
+
version: '6.2'
|
25
25
|
type: :runtime
|
26
26
|
prerelease: false
|
27
27
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -31,7 +31,7 @@ dependencies:
|
|
31
31
|
version: 5.0.0.1
|
32
32
|
- - "<"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '6.
|
34
|
+
version: '6.2'
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: activesupport
|
37
37
|
requirement: !ruby/object:Gem::Requirement
|
@@ -41,7 +41,7 @@ dependencies:
|
|
41
41
|
version: 5.0.0.1
|
42
42
|
- - "<"
|
43
43
|
- !ruby/object:Gem::Version
|
44
|
-
version: '6.
|
44
|
+
version: '6.2'
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
47
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -51,7 +51,7 @@ dependencies:
|
|
51
51
|
version: 5.0.0.1
|
52
52
|
- - "<"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '6.
|
54
|
+
version: '6.2'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: addressable
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '2.
|
75
|
+
version: '2.3'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '2.
|
82
|
+
version: '2.3'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: byebug
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -104,22 +104,16 @@ dependencies:
|
|
104
104
|
name: coveralls_reborn
|
105
105
|
requirement: !ruby/object:Gem::Requirement
|
106
106
|
requirements:
|
107
|
-
- - "
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: 0.14.0
|
110
|
-
- - "<"
|
107
|
+
- - "~>"
|
111
108
|
- !ruby/object:Gem::Version
|
112
|
-
version:
|
109
|
+
version: 0.18.0
|
113
110
|
type: :development
|
114
111
|
prerelease: false
|
115
112
|
version_requirements: !ruby/object:Gem::Requirement
|
116
113
|
requirements:
|
117
|
-
- - "
|
118
|
-
- !ruby/object:Gem::Version
|
119
|
-
version: 0.14.0
|
120
|
-
- - "<"
|
114
|
+
- - "~>"
|
121
115
|
- !ruby/object:Gem::Version
|
122
|
-
version:
|
116
|
+
version: 0.18.0
|
123
117
|
- !ruby/object:Gem::Dependency
|
124
118
|
name: minitest
|
125
119
|
requirement: !ruby/object:Gem::Requirement
|
@@ -143,7 +137,7 @@ dependencies:
|
|
143
137
|
version: 5.0.0.1
|
144
138
|
- - "<"
|
145
139
|
- !ruby/object:Gem::Version
|
146
|
-
version: '6.
|
140
|
+
version: '6.2'
|
147
141
|
type: :development
|
148
142
|
prerelease: false
|
149
143
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -153,7 +147,7 @@ dependencies:
|
|
153
147
|
version: 5.0.0.1
|
154
148
|
- - "<"
|
155
149
|
- !ruby/object:Gem::Version
|
156
|
-
version: '6.
|
150
|
+
version: '6.2'
|
157
151
|
- !ruby/object:Gem::Dependency
|
158
152
|
name: rake
|
159
153
|
requirement: !ruby/object:Gem::Requirement
|
@@ -174,62 +168,62 @@ dependencies:
|
|
174
168
|
requirements:
|
175
169
|
- - "~>"
|
176
170
|
- !ruby/object:Gem::Version
|
177
|
-
version:
|
171
|
+
version: 1.2.0
|
178
172
|
type: :development
|
179
173
|
prerelease: false
|
180
174
|
version_requirements: !ruby/object:Gem::Requirement
|
181
175
|
requirements:
|
182
176
|
- - "~>"
|
183
177
|
- !ruby/object:Gem::Version
|
184
|
-
version:
|
178
|
+
version: 1.2.0
|
185
179
|
- !ruby/object:Gem::Dependency
|
186
180
|
name: rubocop-performance
|
187
181
|
requirement: !ruby/object:Gem::Requirement
|
188
182
|
requirements:
|
189
183
|
- - "~>"
|
190
184
|
- !ruby/object:Gem::Version
|
191
|
-
version: '1.
|
185
|
+
version: '1.8'
|
192
186
|
type: :development
|
193
187
|
prerelease: false
|
194
188
|
version_requirements: !ruby/object:Gem::Requirement
|
195
189
|
requirements:
|
196
190
|
- - "~>"
|
197
191
|
- !ruby/object:Gem::Version
|
198
|
-
version: '1.
|
192
|
+
version: '1.8'
|
199
193
|
- !ruby/object:Gem::Dependency
|
200
194
|
name: rubocop-rails
|
201
195
|
requirement: !ruby/object:Gem::Requirement
|
202
196
|
requirements:
|
203
197
|
- - "~>"
|
204
198
|
- !ruby/object:Gem::Version
|
205
|
-
version: '2.
|
199
|
+
version: '2.8'
|
206
200
|
type: :development
|
207
201
|
prerelease: false
|
208
202
|
version_requirements: !ruby/object:Gem::Requirement
|
209
203
|
requirements:
|
210
204
|
- - "~>"
|
211
205
|
- !ruby/object:Gem::Version
|
212
|
-
version: '2.
|
206
|
+
version: '2.8'
|
213
207
|
- !ruby/object:Gem::Dependency
|
214
208
|
name: simplecov
|
215
209
|
requirement: !ruby/object:Gem::Requirement
|
216
210
|
requirements:
|
217
211
|
- - ">="
|
218
212
|
- !ruby/object:Gem::Version
|
219
|
-
version: 0.
|
213
|
+
version: 0.18.5
|
220
214
|
- - "<"
|
221
215
|
- !ruby/object:Gem::Version
|
222
|
-
version: '0.
|
216
|
+
version: '0.20'
|
223
217
|
type: :development
|
224
218
|
prerelease: false
|
225
219
|
version_requirements: !ruby/object:Gem::Requirement
|
226
220
|
requirements:
|
227
221
|
- - ">="
|
228
222
|
- !ruby/object:Gem::Version
|
229
|
-
version: 0.
|
223
|
+
version: 0.18.5
|
230
224
|
- - "<"
|
231
225
|
- !ruby/object:Gem::Version
|
232
|
-
version: '0.
|
226
|
+
version: '0.20'
|
233
227
|
description: Translates the Rails routes of your application into the languages defined
|
234
228
|
in your locale files
|
235
229
|
email:
|
@@ -260,24 +254,27 @@ files:
|
|
260
254
|
homepage: https://github.com/enriclluelles/route_translator
|
261
255
|
licenses:
|
262
256
|
- MIT
|
263
|
-
metadata:
|
264
|
-
|
257
|
+
metadata:
|
258
|
+
bug_tracker_uri: https://github.com/enriclluelles/route_translator/issues
|
259
|
+
changelog_uri: https://github.com/enriclluelles/route_translator/blob/master/CHANGELOG.md
|
260
|
+
source_code_uri: https://github.com/enriclluelles/route_translator
|
261
|
+
post_install_message:
|
265
262
|
rdoc_options: []
|
266
263
|
require_paths:
|
267
264
|
- lib
|
268
265
|
required_ruby_version: !ruby/object:Gem::Requirement
|
269
266
|
requirements:
|
270
|
-
- - "
|
267
|
+
- - ">="
|
271
268
|
- !ruby/object:Gem::Version
|
272
|
-
version: '2.
|
269
|
+
version: '2.4'
|
273
270
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
274
271
|
requirements:
|
275
272
|
- - ">="
|
276
273
|
- !ruby/object:Gem::Version
|
277
274
|
version: '0'
|
278
275
|
requirements: []
|
279
|
-
rubygems_version: 3.1.
|
280
|
-
signing_key:
|
276
|
+
rubygems_version: 3.1.4
|
277
|
+
signing_key:
|
281
278
|
specification_version: 4
|
282
279
|
summary: Translate your Rails routes in a simple manner
|
283
280
|
test_files: []
|