translate_routes 3.0.2 → 3.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -9,46 +9,51 @@ It works fine with all kind of routing definitions, including RESTful and named
9
9
  **Your current code will remain untouched**: your current routing code, helpers and links will be translated transparently - even in your tests.
10
10
  (Un)installing it is a very clean and simple process, so why don't you give it a chance? ;)
11
11
 
12
- Quick start
12
+ Installation
13
+ ------------
14
+ Add translate_routes to your `Gemfile`:
15
+
16
+ gem 'translate_routes'
17
+
18
+ And let bundle do the rest:
19
+
20
+ bundle install
21
+
22
+ Quick Start
13
23
  -----------
14
24
 
15
- Let's start with a tiny example. Of course you need to define your routes first, e.g:
25
+ 1) Let's imagine you have this `routes.rb` file:
16
26
 
17
- YourApp::Application.routes.draw do
18
- match 'contact', :to => 'contact#index', :as => 'contact'
27
+ TranslateRoutesApp::Application.routes.draw do
28
+ match 'contact' => 'contact#index'
19
29
  end
20
30
 
21
- 1) Download the plugin to your app's `/vendor/plugins` directory.
22
-
23
- 2) Write your translations on a standard YAML file (e.g: i18n-routes.yml), including the locales and it translations pairs:
31
+ You can see the available routes with the `rake routes` task:
24
32
 
25
- es:
26
- contact: contacto
27
33
 
34
+ contact /contact(.:format) {:controller=>"contact", :action=>"index"}
28
35
 
29
- 3) Append a line to your routes.rb file to activate the translations. If you loaded the translations file with
30
- your other I18n translations files, the line will be:
36
+ 2) Now write your translations on a standard YAML file (e.g: in `/config/i18n-routes.yml`), including all the locales and their translations pairs:
31
37
 
32
- ActionDispatch::Routing::Translator.i18n('es')
38
+ en:
39
+ # you can leave empty locales, for example the default one
40
+ es:
41
+ contact: contacto
33
42
 
34
- and if you want to keep the file separated (e.g: config/i18n-routes.yml), the line to append is:
43
+ 3) Append this line in your `routes.rb` file to activate the translations specifying the path of the translations file:
35
44
 
36
45
  ActionDispatch::Routing::Translator.translate_from_file('config','i18n-routes.yml')
37
46
 
38
- You can see it working by executing `rake routes` on the shell:
39
-
40
-
41
- contact_es_es_path /es-ES/contacto {:locale=>"es", :controller=>"contact", :action=>"index"}
42
- contact_en_us_path /contact {:locale=>"'en'", :controller=>"contact", :action=>"index"}
43
-
47
+ 4) Execute `rake routes` to see the new routes:
44
48
 
45
- As we can see, a new spanish route has been setted up and a `locale` parameter has been added to the routes.
49
+ contact_es /es/contacto(.:format) {:controller=>"contact", :action=>"index"}
50
+ contact_en /contact(.:format) {:controller=>"contact", :action=>"index"}
46
51
 
47
- 4) Include this filter in your ApplicationController:
52
+ 5) Include this filter in your ApplicationController:
48
53
 
49
54
  before_filter :set_locale_from_url
50
55
 
51
- Now your application recognizes the different routes and sets the `I18n.locale` value on your controllers,
56
+ Now your application recognizes the different routes and sets the `I18n.locale` value in your controllers,
52
57
  but what about the routes generation? As you can see on the previous `rake routes` execution, the
53
58
  `contact_es_es_path` and `contact_en_us_path` routing helpers have been generated and are
54
59
  available in your controllers and views. Additionally, a `contact_path` helper has been generated, which
@@ -56,7 +61,7 @@ generates the routes according to the current request's locale. This way your li
56
61
 
57
62
  This means that if you use named routes **you don't need to modify your application links** because the routing helpers are automatically adapted to the current locale.
58
63
 
59
- 5) Hey, but what about my tests?
64
+ 6) Hey, but what about my tests?
60
65
 
61
66
  Of course, your functional and integration testing involves some requests.
62
67
  The plugin includes some code to add a default locale parameter so they can remain untouched.
@@ -222,7 +222,7 @@ class RouteTranslator
222
222
  final_optional_segments = path.match(/(\(.+\))$/)[1] rescue nil # i.e: (.:format)
223
223
  path_segments = path.gsub(final_optional_segments,'').split("/")
224
224
  new_path = path_segments.map{ |seg| translate_path_segment(seg, locale) }.join('/')
225
- new_path = "/#{locale}#{new_path}" if add_prefix? locale
225
+ new_path = "/#{locale.downcase}#{new_path}" if add_prefix? locale
226
226
  new_path = '/' if new_path.blank?
227
227
  final_optional_segments ? new_path + final_optional_segments : new_path
228
228
  end
@@ -237,7 +237,7 @@ class RouteTranslator
237
237
 
238
238
  match = TRANSLATABLE_SEGMENT.match(segment)[1] rescue nil
239
239
 
240
- translate_string(match, locale) || segment
240
+ (translate_string(match, locale) || segment).downcase
241
241
  end
242
242
 
243
243
  def translate_string str, locale
@@ -157,6 +157,21 @@ class TranslateRoutesTest < ActionController::TestCase
157
157
  assert_equal '/es(.:format)', path_string(named_route('root_es'))
158
158
  end
159
159
 
160
+ def test_routes_translations_are_always_downcased
161
+ @routes.draw { match 'people', :to => 'people#index', :as => 'people'}
162
+ config_default_locale_settings 'en'
163
+ @route_translator.yield_dictionary { |t| t['en'] = {}; t['es'] = {'people' => 'Gente'} }
164
+ translate_routes
165
+ assert_routing '/es/gente', :controller => 'people', :action => 'index', :locale => 'es'
166
+ end
167
+
168
+ def test_routes_locale_prefixes_are_always_downcased
169
+ @routes.draw { match 'people', :to => 'people#index', :as => 'people'}
170
+ config_default_locale_settings 'en'
171
+ @route_translator.yield_dictionary { |t| t['en'] = {}; t['ES'] = {'people' => 'Gente'} }
172
+ translate_routes
173
+ assert_routing '/es/gente', :controller => 'people', :action => 'index', :locale => 'ES'
174
+ end
160
175
 
161
176
  def test_languages_load_from_file
162
177
  @routes.draw { match 'people', :to => 'people#index', :as => 'people'}
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: translate_routes
3
3
  version: !ruby/object:Gem::Version
4
- hash: 3
4
+ hash: 1
5
5
  prerelease: false
6
6
  segments:
7
7
  - 3
8
8
  - 0
9
- - 2
10
- version: 3.0.2
9
+ - 3
10
+ version: 3.0.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Raul Murciano
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-18 00:00:00 +01:00
18
+ date: 2010-12-28 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -38,8 +38,8 @@ homepage: http://github.com/raul/translate_routes
38
38
  licenses: []
39
39
 
40
40
  post_install_message:
41
- rdoc_options:
42
- - --charset=UTF-8
41
+ rdoc_options: []
42
+
43
43
  require_paths:
44
44
  - lib
45
45
  required_ruby_version: !ruby/object:Gem::Requirement