devise-security 0.14.3 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +114 -58
  3. data/app/controllers/devise/password_expired_controller.rb +10 -1
  4. data/app/views/devise/paranoid_verification_code/show.html.erb +3 -3
  5. data/app/views/devise/password_expired/show.html.erb +5 -5
  6. data/config/locales/by.yml +48 -0
  7. data/config/locales/cs.yml +40 -0
  8. data/config/locales/de.yml +12 -2
  9. data/config/locales/en.yml +12 -1
  10. data/config/locales/es.yml +9 -9
  11. data/config/locales/fa.yml +40 -0
  12. data/config/locales/hi.yml +41 -0
  13. data/config/locales/it.yml +34 -4
  14. data/config/locales/ja.yml +1 -1
  15. data/config/locales/nl.yml +40 -0
  16. data/config/locales/pt.yml +40 -0
  17. data/config/locales/ru.yml +48 -0
  18. data/config/locales/uk.yml +48 -0
  19. data/config/locales/zh_CN.yml +40 -0
  20. data/config/locales/zh_TW.yml +40 -0
  21. data/lib/devise-security/controllers/helpers.rb +59 -50
  22. data/lib/devise-security/hooks/password_expirable.rb +2 -0
  23. data/lib/devise-security/hooks/session_limitable.rb +13 -7
  24. data/lib/devise-security/models/password_expirable.rb +5 -1
  25. data/lib/devise-security/models/session_limitable.rb +8 -1
  26. data/lib/devise-security/validators/password_complexity_validator.rb +4 -2
  27. data/lib/devise-security/version.rb +1 -1
  28. data/lib/generators/devise_security/install_generator.rb +2 -2
  29. data/test/controllers/test_password_expired_controller.rb +111 -16
  30. data/test/dummy/app/assets/config/manifest.js +3 -0
  31. data/test/dummy/config/routes.rb +3 -3
  32. data/test/dummy/log/test.log +1799 -0
  33. data/test/integration/test_password_expirable_workflow.rb +57 -0
  34. data/test/orm/active_record.rb +4 -1
  35. data/test/support/integration_helpers.rb +1 -1
  36. data/test/test_complexity_validator.rb +12 -0
  37. data/test/test_helper.rb +10 -3
  38. data/test/test_install_generator.rb +10 -0
  39. data/test/test_session_limitable.rb +17 -0
  40. data/test/tmp/config/initializers/devise-security.rb +44 -0
  41. data/test/tmp/config/locales/devise.security_extension.de.yml +38 -0
  42. data/test/tmp/config/locales/devise.security_extension.en.yml +40 -0
  43. data/test/tmp/config/locales/devise.security_extension.es.yml +29 -0
  44. data/test/tmp/config/locales/devise.security_extension.fa.yml +40 -0
  45. data/test/tmp/config/locales/devise.security_extension.fr.yml +29 -0
  46. data/test/tmp/config/locales/devise.security_extension.it.yml +40 -0
  47. data/test/tmp/config/locales/devise.security_extension.ja.yml +29 -0
  48. data/test/tmp/config/locales/devise.security_extension.nl.yml +40 -0
  49. data/test/tmp/config/locales/devise.security_extension.pt.yml +40 -0
  50. data/test/tmp/config/locales/devise.security_extension.ru.yml +48 -0
  51. data/test/tmp/config/locales/devise.security_extension.tr.yml +17 -0
  52. data/test/tmp/config/locales/devise.security_extension.uk.yml +48 -0
  53. data/test/tmp/config/locales/devise.security_extension.zh_CN.yml +40 -0
  54. metadata +152 -118
  55. data/.codeclimate.yml +0 -63
  56. data/.document +0 -5
  57. data/.gitignore +0 -43
  58. data/.mdlrc +0 -1
  59. data/.rubocop.yml +0 -64
  60. data/.ruby-version +0 -1
  61. data/.travis.yml +0 -39
  62. data/Appraisals +0 -35
  63. data/Gemfile +0 -10
  64. data/Rakefile +0 -27
  65. data/devise-security.gemspec +0 -50
  66. data/gemfiles/rails_4.2_stable.gemfile +0 -16
  67. data/gemfiles/rails_5.0_stable.gemfile +0 -15
  68. data/gemfiles/rails_5.1_stable.gemfile +0 -15
  69. data/gemfiles/rails_5.2_stable.gemfile +0 -15
  70. data/gemfiles/rails_6.0_beta.gemfile +0 -15
  71. data/test/dummy/app/models/.gitkeep +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 18a1162386aaffc07faded355851e3536733160c505ac8444ba4ce2e4e28cd1f
4
- data.tar.gz: 6ab4953ad5fcb9d9c223bcac1d58e2596e492fbc3f118619ebd7f55b757079f1
3
+ metadata.gz: 9172082dca0b721f493e44d5183a0e660c9dd67d3893bd86b03638b039c34935
4
+ data.tar.gz: 80b4649313476c6ae926fabf1db2a58abd9c8796fe639927743ab8ba8f53be97
5
5
  SHA512:
6
- metadata.gz: be02504cf8b1c576fb98a62ddb24da42777998613664fa773436b517ef2b8962d9f1d8aa1f31312b5b265b07e21e1b6896dafbfbcf582ba8fdafc2a1182e6516
7
- data.tar.gz: 9c4aa899e5cfd71562dd472a5fae04033706299536b3423af6dd523083962c522c4287f97ba46878ff489b8d0e78f601bac0600db23d73cc59a5baf77ac9a458
6
+ metadata.gz: 10f1e3243f77003658cdc377d13fe56d92fe6cf7713f3a658d01ea61ffc18788ce6508f3d894c664edf6847242e863174696f3ef810527d4d4889212a258baab
7
+ data.tar.gz: dc5802511d5c406923a541ea1d10f7d3ffff715b9278adc407a1ee87c18659eccf6b1ea9328b06b08cd0f30ae6b523236ff27164ae7c44f5608b7d5c31706fbb
data/README.md CHANGED
@@ -1,28 +1,45 @@
1
1
  # Devise Security
2
2
 
3
- [![Build Status](https://travis-ci.org/devise-security/devise-security.svg?branch=master)](https://travis-ci.org/devise-security/devise-security)[![Coverage Status](https://coveralls.io/repos/github/devise-security/devise-security/badge.svg?branch=master)](https://coveralls.io/github/devise-security/devise-security?branch=master)[![Maintainability](https://api.codeclimate.com/v1/badges/ace7cd003a0db8bffa5a/maintainability)](https://codeclimate.com/github/devise-security/devise-security/maintainability)
3
+ [![Build Status](https://travis-ci.org/devise-security/devise-security.svg?branch=master)](https://travis-ci.org/devise-security/devise-security)
4
+ [![Coverage Status](https://coveralls.io/repos/github/devise-security/devise-security/badge.svg?branch=master)](https://coveralls.io/github/devise-security/devise-security?branch=master)
5
+ [![Maintainability](https://api.codeclimate.com/v1/badges/ace7cd003a0db8bffa5a/maintainability)](https://codeclimate.com/github/devise-security/devise-security/maintainability)
4
6
 
5
- A [Devise](https://github.com/plataformatec/devise) extension to add additional security features required by modern web applications. Forked from [Devise Security Extension](https://github.com/phatworx/devise_security_extension)
7
+ A [Devise](https://github.com/plataformatec/devise) extension to add additional
8
+ security features required by modern web applications. Forked from
9
+ [Devise Security Extension](https://github.com/phatworx/devise_security_extension)
6
10
 
7
11
  It is composed of 7 additional Devise modules:
8
12
 
9
- - `:password_expirable` - passwords will expire after a configured time (and will need to be changed by the user). You will most likely want to use `:password_expirable` together with the `:password_archivable` module to [prevent the current expired password being reused](https://github.com/phatworx/devise_security_extension/issues/175) immediately as the new password.
10
- - `:secure_validatable` - better way to validate a model (email, stronger password validation). Don't use with Devise `:validatable` module!
11
- - `:password_archivable` - save used passwords in an `old_passwords` table for history checks (don't be able to use a formerly used password)
12
- - `:session_limitable` - ensures, that there is only one session usable per account at once
13
- - `:expirable` - expires a user account after x days of inactivity (default 90 days)
14
- - `:security_questionable` - as accessible substitution for captchas (security question with captcha fallback)
15
- - `:paranoid_verification` - admin can generate verification code that user needs to fill in otherwise he wont be able to use the application.
13
+ - `:password_expirable` - passwords will expire after a configured time (and
14
+ will need to be changed by the user). You will most likely want to use
15
+ `:password_expirable` together with the `:password_archivable` module to
16
+ [prevent the current expired password from being reused](https://github.com/phatworx/devise_security_extension/issues/175)
17
+ immediately as the new password.
18
+ - `:secure_validatable` - better way to validate a model (email, stronger
19
+ password validation). Don't use with Devise `:validatable` module!
20
+ - `:password_archivable` - save used passwords in an `old_passwords` table for
21
+ history checks (prevent reusing passwords)
22
+ - `:session_limitable` - ensures, that there is only one session usable per
23
+ account at once
24
+ - `:expirable` - expires a user account after x days of inactivity (default 90
25
+ days)
26
+ - `:security_questionable` - as accessible substitution for captchas (security
27
+ question with captcha fallback)
28
+ - `:paranoid_verification` - admin can generate verification code that user
29
+ needs to fill in otherwise he won't be able to use the application.
16
30
 
17
31
  Configuration and database schema for each module below.
18
32
 
19
33
  ## Additional features
20
34
 
21
- - **captcha support** for `sign_up`, `sign_in`, `recover` and `unlock` (to make automated mass creation and brute forcing of accounts harder)
35
+ **captcha support** for `sign_up`, `sign_in`, `recover` and `unlock` (to make
36
+ automated mass creation and brute forcing of accounts harder)
22
37
 
23
38
  ## Getting started
24
39
 
25
- Devise Security works with Devise on Rails 4.2 onwards. You can add it to your Gemfile after you successfully set up Devise (see [Devise documentation](https://github.com/plataformatec/devise)) with:
40
+ Devise Security works with Devise on Rails 4.2 onwards. You can add it to your
41
+ Gemfile after you successfully set up Devise (see
42
+ [Devise documentation](https://github.com/plataformatec/devise)) with:
26
43
 
27
44
  ```ruby
28
45
  gem 'devise-security'
@@ -36,7 +53,10 @@ After you installed Devise Security you need to run the generator:
36
53
  rails generate devise_security:install
37
54
  ```
38
55
 
39
- The generator adds optional configurations to `config/initializers/devise-security.rb`. Enable the modules you wish to use in the initializer you are ready to add Devise Security modules on top of Devise modules to any of your Devise models:
56
+ The generator adds optional configurations to
57
+ `config/initializers/devise-security.rb`. Enable the modules you wish to use in
58
+ the initializer you are ready to add Devise Security modules on top of Devise
59
+ modules to any of your Devise models:
40
60
 
41
61
  ```ruby
42
62
  devise :password_expirable, :secure_validatable, :password_archivable, :session_limitable, :expirable
@@ -44,13 +64,16 @@ devise :password_expirable, :secure_validatable, :password_archivable, :session_
44
64
 
45
65
  ### E-mail Validation
46
66
 
47
- for `:secure_validatable` you need to have a way to validate an e-mail. There are multiple libraries that support this, and even a way built into Ruby!
67
+ For `:secure_validatable` you need to have a way to validate an e-mail. There
68
+ are multiple libraries that support this, and even a way built into Ruby!
48
69
 
49
- [Ruby Constant](http://yogodoshi.com/ruby-already-has-its-own-regular-expression-to-validate-emails/)
50
- * Note: This method would require a `email_validation` method to be defined in order to hook into the `validates` method defined here.
51
- [email_address](https://github.com/afair/email_address) gem
52
- [valid_email2](https://github.com/micke/valid_email2) gem
53
- [rails_email_validator](https://github.com/phatworx/rails_email_validator) gem (deprecated)
70
+ - (Recommended) Ruby built-in `URI::MailTo::EMAIL_REGEXP` constant
71
+ > Note: This method would require a `email_validation` method to be defined in
72
+ > order to hook into the `validates` method defined here.
73
+ - [email_address](https://github.com/afair/email_address) gem
74
+ - [valid_email2](https://github.com/micke/valid_email2) gem
75
+ - [rails_email_validator](https://github.com/phatworx/rails_email_validator) gem
76
+ (deprecated)
54
77
 
55
78
  ## Configuration
56
79
 
@@ -61,7 +84,7 @@ Devise.setup do |config|
61
84
 
62
85
  # Password expires after a configurable time (in seconds).
63
86
  # Or expire passwords on demand by setting this configuration to `true`
64
- # Use `user.need_password_change!` to expire a password.
87
+ # Use `user.need_change_password!` to expire a password.
65
88
  # Setting the configuration to `false` will completely disable expiration checks.
66
89
  # config.expire_password_after = 3.months | true | false
67
90
 
@@ -106,60 +129,68 @@ end
106
129
 
107
130
  ## Other ORMs
108
131
 
109
- Devise-security supports [Mongoid](https://rubygems.org/gems/mongoid) as an alternative ORM to active_record. To use this ORM, add this to your `Gemfile`.
132
+ Devise-security supports [Mongoid](https://rubygems.org/gems/mongoid) as an
133
+ alternative ORM to active_record. To use this ORM, add this to your `Gemfile`.
110
134
 
111
- gem 'mongoid'
135
+ ```ruby
136
+ gem 'mongoid'
137
+ ```
112
138
 
113
139
  And then ensure that the environment variable `DEVISE_ORM=mongoid` is set.
114
140
 
115
141
  For local development you will need to have MongoDB installed locally.
116
142
 
117
- brew install mongodb
143
+ ```bash
144
+ brew install mongodb
145
+ ```
118
146
 
119
147
  ### Rails App setup example with Mongoid
120
148
 
121
149
  ```ruby
122
150
  # inside config/application.rb
123
- require File.expand_path('../boot', __FILE__)
124
- #...
125
- DEVISE_ORM=:mongoid
151
+ require File.expand_path('../boot', __FILE__)
152
+ #...
153
+ DEVISE_ORM=:mongoid
126
154
 
127
155
  # Require the gems listed in Gemfile, including any gems
128
156
  # you've limited to :test, :development, or :production.
129
- Bundler.require(*Rails.groups)
157
+ Bundler.require(*Rails.groups)
130
158
 
131
- module MyApp
159
+ module MyApp
132
160
  class Application < Rails::Application
133
161
  #...
134
162
  end
135
- end
163
+ end
136
164
  ```
137
165
 
138
166
  ## Captcha-Support
139
167
 
140
- The captcha support depends on [EasyCaptcha](https://github.com/phatworx/easy_captcha). See further documentation there.
168
+ The captcha support depends on
169
+ [EasyCaptcha](https://github.com/phatworx/easy_captcha). See further
170
+ documentation there.
141
171
 
142
172
  ### Installation
143
173
 
144
174
  1. Add EasyCaptcha to your `Gemfile` with
145
175
 
146
- ```ruby
147
- gem 'easy_captcha'
148
- ```
176
+ ```ruby
177
+ gem 'easy_captcha'
178
+ ```
149
179
 
150
- 1. Run the initializer
180
+ 2. Run the initializer
151
181
 
152
- ```ruby
153
- rails generate easy_captcha:install
154
- ```
182
+ ```ruby
183
+ rails generate easy_captcha:install
184
+ ```
155
185
 
156
- 1. Enable captcha - see "Configuration" of Devise Security above.
157
- 1. Add the captcha in the generated devise views for each controller you have activated
186
+ 3. Enable captcha - see "Configuration" of Devise Security above.
187
+ 4. Add the captcha in the generated devise views for each controller you have
188
+ activated.
158
189
 
159
- ```erb
160
- <p><%= captcha_tag %></p>
161
- <p><%= text_field_tag :captcha %></p>
162
- ```
190
+ ```erb
191
+ <p><%= captcha_tag %></p>
192
+ <p><%= text_field_tag :captcha %></p>
193
+ ```
163
194
 
164
195
  ## Schema
165
196
 
@@ -174,7 +205,8 @@ end
174
205
  add_index :the_resources, :password_changed_at
175
206
  ```
176
207
 
177
- Note: setting `password_changed_at` to `nil` will require the user to change their password.
208
+ Note: setting `password_changed_at` to `nil` will require the user to change
209
+ their password.
178
210
 
179
211
  ### Password archivable
180
212
 
@@ -271,13 +303,13 @@ end
271
303
 
272
304
  ## Requirements
273
305
 
274
- * Devise (<https://github.com/plataformatec/devise>)
275
- * Rails 4.2 onwards (<http://github.com/rails/rails>)
276
- * recommendations:
277
- - `autocomplete-off` (<http://github.com/phatworx/autocomplete-off>)
278
- - `easy_captcha` (<http://github.com/phatworx/easy_captcha>)
279
- - `mongodb` (<https://www.mongodb.com/>)
280
- - `rvm` (<https://rvm.io/>)
306
+ - Devise (<https://github.com/plataformatec/devise>)
307
+ - Rails 4.2 onwards (<http://github.com/rails/rails>)
308
+ - recommendations:
309
+ - `autocomplete-off` (<http://github.com/phatworx/autocomplete-off>)
310
+ - `easy_captcha` (<http://github.com/phatworx/easy_captcha>)
311
+ - `mongodb` (<https://www.mongodb.com/>)
312
+ - `rvm` (<https://rvm.io/>)
281
313
 
282
314
  ## Todo
283
315
 
@@ -295,7 +327,8 @@ end
295
327
  - 0.8 Support for Rails 4 (+ variety of patches)
296
328
  - 0.11 Support for Rails 5. Forked to allow project maintenance and features
297
329
 
298
- See also [Github Releases](https://github.com/devise-security/devise-security/releases)
330
+ See also
331
+ [Github Releases](https://github.com/devise-security/devise-security/releases)
299
332
 
300
333
  ## Maintainers
301
334
 
@@ -305,22 +338,45 @@ See also [Github Releases](https://github.com/devise-security/devise-security/re
305
338
 
306
339
  ## Contributing to devise-security
307
340
 
308
- - Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
309
- - Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
341
+ - Check out the latest master to make sure the feature hasn't been implemented
342
+ or the bug hasn't been fixed yet
343
+ - Check out the issue tracker to make sure someone already hasn't requested it
344
+ and/or contributed it
310
345
  - Fork the project
311
346
  - Start a feature/bugfix branch
312
347
  - Commit and push until you are happy with your contribution
313
- - Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
314
- - Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
348
+ - Make sure to add tests for it. This is important so I don't break it in a
349
+ future version unintentionally.
350
+ - Please try not to mess with the Rakefile, version, or history. If you want to
351
+ have your own version, or is otherwise necessary, that is fine, but please
352
+ isolate to its own commit so I can cherry-pick around it.
315
353
 
316
354
  ## Running tests
317
355
 
318
- Standard tests can be invoked using `rake`. To run the tests against the `mongoid` ORM, use `DEVISE_ORM=mongoid rake` while `mongodb` is running.
356
+ Standard tests can be invoked using `rake`. To run the tests against the
357
+ `mongoid` ORM, use `DEVISE_ORM=mongoid rake` while `mongodb` is running.
319
358
 
320
359
  To locally simulate what travis-ci will run when you push code use:
321
360
 
322
- $ gem install bundler -v '1.17.3'
323
- $ BUNDLER_VERSION=1.17.3 wwtd
361
+ ```bash
362
+ gem install bundler -v '1.17.3'
363
+ BUNDLER_VERSION=1.17.3 wwtd
364
+ ```
365
+
366
+ ## Maintenance Policy
367
+
368
+ We are committed to maintain support for `devise-security` for all normal or
369
+ security maintenance versions of the Ruby language
370
+ [as listed here](https://www.ruby-lang.org/en/downloads/branches/), and for the
371
+ Ruby on Rails framework
372
+ [as per their maintenance policy](https://rubyonrails.org/maintenance/).
373
+
374
+ Support for Rails 4.2 will be dropped in version 0.16.0.
375
+
376
+ In order to avoid introducing bugs caused by backwardly incompatible Ruby
377
+ language features, it is highly recommended that all development work be done
378
+ using the oldest supported ruby version. The contents of the `.ruby-version`
379
+ file should reflect this.
324
380
 
325
381
  ## Copyright
326
382
 
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Devise::PasswordExpiredController < DeviseController
4
+ before_action :verify_requested_format!
4
5
  skip_before_action :handle_password_change
5
6
  before_action :skip_password_change, only: [:show, :update]
6
7
  prepend_before_action :authenticate_scope!, only: [:show, :update]
@@ -9,13 +10,21 @@ class Devise::PasswordExpiredController < DeviseController
9
10
  respond_with(resource)
10
11
  end
11
12
 
13
+ # Update the password stored on the `resource`.
14
+ # @note if a common data format like :json or :xml are requested
15
+ # this will respond with a 204 No Content and set the Location header.
16
+ # Useful for dealing with APIs when JS clients would otherwise automatically
17
+ # follow the redirect, which can be problematic.
18
+ # @see https://stackoverflow.com/questions/228225/prevent-redirection-of-xmlhttprequest
19
+ # @see https://github.com/axios/axios/issues/932#issuecomment-307390761
20
+ # @see https://github.com/devise-security/devise-security/pull/111
12
21
  def update
13
22
  resource.extend(Devise::Models::DatabaseAuthenticatablePatch)
14
23
  if resource.update_with_password(resource_params)
15
24
  warden.session(scope)['password_expired'] = false
16
25
  set_flash_message :notice, :updated
17
26
  bypass_sign_in resource, scope: scope
18
- redirect_to stored_location_for(scope) || :root
27
+ respond_with({}, location: stored_location_for(scope) || :root)
19
28
  else
20
29
  clean_up_passwords(resource)
21
30
  respond_with(resource, action: :show)
@@ -1,10 +1,10 @@
1
- <h2>Submit verification code</h2>
1
+ <h2>t('.submit_verification_code')</h2>
2
2
 
3
3
  <%= form_for(resource, as: resource_name, url: [resource_name, :paranoid_verification_code], html: { method: :put }) do |f| %>
4
4
  <%= render partial: 'devise/shared/error_messages' %>
5
5
 
6
- <p><%= f.label :paranoid_verification_code, 'Verification code' %><br />
6
+ <p><%= f.label :paranoid_verification_code, t('.verification_code') %><br />
7
7
  <%= f.text_field :paranoid_verification_code, value: '' %></p>
8
8
 
9
- <p><%= f.submit 'Submit' %></p>
9
+ <p><%= f.submit t('.submit') %></p>
10
10
  <% end %>
@@ -1,16 +1,16 @@
1
- <h2>Renew your password</h2>
1
+ <h2><%= t('.renew_your_password') %></h2>
2
2
 
3
3
  <%= form_for(resource, as: resource_name, url: [resource_name, :password_expired], html: { method: :put }) do |f| %>
4
4
  <%= render partial: 'devise/shared/error_messages' %>
5
5
 
6
- <p><%= f.label :current_password, 'Current password' %><br />
6
+ <p><%= f.label :current_password, t('.current_password') %><br />
7
7
  <%= f.password_field :current_password %></p>
8
8
 
9
- <p><%= f.label :password, 'New password' %><br />
9
+ <p><%= f.label :password, t('.new_password') %><br />
10
10
  <%= f.password_field :password %></p>
11
11
 
12
- <p><%= f.label :password_confirmation, 'Confirm new password' %><br />
12
+ <p><%= f.label :password_confirmation, t('.new_password_confirmation') %><br />
13
13
  <%= f.password_field :password_confirmation %></p>
14
14
 
15
- <p><%= f.submit 'Change my password' %></p>
15
+ <p><%= f.submit t('.change_my_password') %></p>
16
16
  <% end %>
@@ -0,0 +1,48 @@
1
+ by:
2
+ errors:
3
+ messages:
4
+ taken_in_past: 'ужо раней выкарыстоўваўся.'
5
+ equal_to_current_password: 'павінен адрознівацца ад сучаснага пароля.'
6
+ password_complexity:
7
+ digit:
8
+ one: 'павінен утрымліваць хоць адну лічбу'
9
+ few: 'павінен утрымліваць хоць %{count} лічбы'
10
+ many: 'павінен утрымліваць хоць %{count} лічбы'
11
+ other: 'павінен утрымліваць хоць %{count} лічбы'
12
+ lower:
13
+ one: 'павінен утрымліваць хоць адну маленькую літару'
14
+ few: 'павінен утрымліваць хоць %{count} малыx літары'
15
+ many: 'павінен утрымліваць хоць %{count} малыx літары'
16
+ other: 'павінен утрымліваць хоць %{count} малыx літары'
17
+ symbol:
18
+ one: 'павінен утрымліваць хоць адзін знак пунктуацыі або сімвал'
19
+ few: 'павінен утрымліваць хоць %{count} знака пунктуацыі або сімвала'
20
+ many: 'павінен утрымліваць хоць %{count} знака пунктуацыі або сімвала'
21
+ other: 'павінен утрымліваць хоць %{count} знака пунктуацыі або сімвала'
22
+ upper:
23
+ one: 'павінен утрымліваць хоць адну вялікую літару'
24
+ few: 'павінен утрымліваць хоць %{count} вялікіx літары'
25
+ many: 'павінен утрымліваць хоць %{count} вялікіx літары'
26
+ other: 'павінен утрымліваць хоць %{count} вялікіx літары'
27
+ devise:
28
+ invalid_captcha: 'Уведзены няправільны код капчы.'
29
+ invalid_security_question: 'Адказ на сакрэтнае пытанне быў няправільны.'
30
+ paranoid_verify:
31
+ code_required: 'Калі ласка, увядзіце код, атрыманы ад нашай каманды падтрымкі'
32
+ paranoid_verification_code:
33
+ show:
34
+ submit_verification_code: 'Увод кода пацверджання'
35
+ verification_code: 'Код пацверджання'
36
+ submit: 'Адправіць'
37
+ password_expired:
38
+ updated: 'Ваш новы пароль захаваны.'
39
+ change_required: 'Ваш пароль састарэў. Калі ласка, усталюйце новы.'
40
+ show:
41
+ renew_your_password: 'Змена пароля'
42
+ current_password: 'Сучасны пароль'
43
+ new_password: 'Новы пароль'
44
+ new_password_confirmation: 'Пацвердзіце новы пароль'
45
+ change_my_password: 'Змяніць пароль'
46
+ failure:
47
+ session_limited: 'Вашы параметры ўваходу выкарыстоўваюцца ў іншым браўзэры. Калі ласка, аўтарызуйцеся зноў, каб працягнуць у гэтым браўзэры.'
48
+ expired: 'Ваш уліковы запіс састарэў з-за неактыўнасці. Калі ласка, звяжыцеся з адміністратарам.'
@@ -0,0 +1,40 @@
1
+ cs:
2
+ errors:
3
+ messages:
4
+ taken_in_past: bylo již použito v minulosti.
5
+ equal_to_current_password: se musí lišit od aktuálního hesla.
6
+ password_complexity:
7
+ digit:
8
+ one: musí obsahovat alespoň jednu číslici
9
+ other: musí obsahovat alespoň %{count} číslice
10
+ lower:
11
+ one: musí obsahovat alespoň jedno malé písmeno
12
+ other: musí obsahovat alespoň %{count} malé písmena
13
+ symbol:
14
+ one: musí obsahovat alespoň jedno interpunkční znaménko nebo symbol
15
+ other: musí obsahovat alespoň %{count} interpunkční znaménka nebo symboly
16
+ upper:
17
+ one: musí obsahovat alespoň jedno velké písmeno
18
+ other: musí obsahovat alespoň %{count} velké písmena
19
+ devise:
20
+ invalid_captcha: Chybná captcha.
21
+ invalid_security_question: Chybná odpověď na bezpečnostní otázku.
22
+ paranoid_verify:
23
+ code_required: Zadejte kód, který poskytla naše podpora
24
+ paranoid_verification_code:
25
+ show:
26
+ submit_verification_code: Odeslat ověřovací kód
27
+ verification_code: Ověřovací kód
28
+ submit: Odeslat
29
+ password_expired:
30
+ updated: Vaše nové heslo bylo uloženo.
31
+ change_required: Platnost Vašeho hesla vypršela. Prosím, obnovte si jej.
32
+ show:
33
+ renew_your_password: Obnovit heslo
34
+ current_password: Současné heslo
35
+ new_password: Nové heslo
36
+ new_password_confirmation: Potvrďte nové heslo
37
+ change_my_password: Změnit moje heslo
38
+ failure:
39
+ session_limited: Vaše přihlašovací údaje byly použity v jiném prohlížeči. Chcete-li pokračovat v tomto prohlížeči, znovu se přihlaste.
40
+ expired: Platnost Vašeho účtu vypršela z důvodu nečinnosti. Obraťte se na správce webu.