devise_invitable 2.0.0 → 2.0.5

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of devise_invitable might be problematic. Click here for more details.

Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -0
  3. data/README.rdoc +27 -33
  4. data/app/controllers/devise/invitations_controller.rb +31 -30
  5. data/app/controllers/devise_invitable/registrations_controller.rb +11 -11
  6. data/app/views/devise/invitations/edit.html.erb +1 -1
  7. data/app/views/devise/mailer/invitation_instructions.html.erb +1 -1
  8. data/app/views/devise/mailer/invitation_instructions.text.erb +1 -1
  9. data/config/locales/ar.yml +23 -0
  10. data/config/locales/da.yml +41 -0
  11. data/config/locales/de.yml +31 -0
  12. data/config/locales/es.yml +31 -0
  13. data/config/locales/et.yml +23 -0
  14. data/config/locales/fa.yml +31 -0
  15. data/config/locales/fr.yml +34 -0
  16. data/config/locales/it.yml +31 -0
  17. data/config/locales/ja.yml +31 -0
  18. data/config/locales/ko.yml +24 -0
  19. data/config/locales/nl.yml +32 -0
  20. data/config/locales/no.yml +17 -0
  21. data/config/locales/pl.yml +31 -0
  22. data/config/locales/pt-BR.yml +23 -0
  23. data/config/locales/pt.yml +23 -0
  24. data/config/locales/ru.yml +23 -0
  25. data/config/locales/tr.yml +24 -0
  26. data/config/locales/ua.yml +31 -0
  27. data/config/locales/vi.yml +25 -0
  28. data/config/locales/zh-HK.yml +31 -0
  29. data/config/locales/zh-TW.yml +31 -0
  30. data/lib/devise_invitable.rb +2 -1
  31. data/lib/devise_invitable/controllers/helpers.rb +3 -4
  32. data/lib/devise_invitable/inviter.rb +4 -3
  33. data/lib/devise_invitable/mapping.rb +6 -5
  34. data/lib/devise_invitable/models.rb +13 -11
  35. data/lib/devise_invitable/models/authenticatable.rb +7 -1
  36. data/lib/devise_invitable/parameter_sanitizer.rb +18 -18
  37. data/lib/devise_invitable/routes.rb +1 -1
  38. data/lib/devise_invitable/version.rb +1 -1
  39. data/lib/generators/active_record/templates/migration.rb +0 -1
  40. data/lib/generators/devise_invitable/install_generator.rb +4 -3
  41. data/test/generators/views_generator_test.rb +7 -6
  42. data/test/generators_test.rb +3 -2
  43. data/test/integration_tests_helper.rb +0 -1
  44. data/test/models/invitable_test.rb +16 -0
  45. data/test/rails_app/app/controllers/admins_controller.rb +4 -3
  46. data/test/rails_app/app/controllers/application_controller.rb +10 -9
  47. data/test/rails_app/app/controllers/free_invitations_controller.rb +12 -9
  48. data/test/rails_app/config/initializers/devise.rb +4 -3
  49. data/test/rails_app/config/initializers/secret_token.rb +9 -0
  50. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -2
  51. data/test/test_helper.rb +4 -17
  52. metadata +31 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2723ccf2ae328662f6728a699ac484ff5067dbb24248e59d7d596a9d445747ab
4
- data.tar.gz: 7d95b8d919685e863dbe8126ce5823b78f949c67f6ada3e69adab431d29e7711
3
+ metadata.gz: 0517f954240bfc3c1fd255df0d502d5fdbd461d4e695cd0c5ec725854af50dcf
4
+ data.tar.gz: 239b887a32e66dbc38fbf1e04625def2f1dea325fcc6d20af0e1befd066dd000
5
5
  SHA512:
6
- metadata.gz: ba422fbe6c9b3d7d13dae30f24daf9638ace499ceead90f7d3d18949655028b33d53c5275000aafecd4a9b75595ad174d3348a4511a7dbe70957bd9a43cd5945
7
- data.tar.gz: b8eb68401a1fd5e41b861fbe8d8dd38b4f9050d87427d00cb5ea394630e5e5f5a16d6889da85199e597d8bdc2947aa8523208aca95fb731d39c50ba9f5d4a4d5
6
+ metadata.gz: 957006ebe6e94715459f941b52004a1002e72005e9344baca46679398bc34e360604e3a8a205d9099a4ff5015be597c1c02a89055137db6c12f10ecf03949db7
7
+ data.tar.gz: 17200aa6cf76d5abf07de1e4c0987f197140087a7a3210df0bf948a6098602eeeab05d65983cc69ef2185f2de741813ebc778a28d476a86bc5b1527bbd918f4c
data/CHANGELOG.md CHANGED
@@ -1,3 +1,21 @@
1
+ ## 2.0.5
2
+ - Fix NoMethodError in random_password when validatable is not used ([#850](https://github.com/scambra/devise_invitable/pull/850))
3
+
4
+ ## 2.0.4
5
+ - Fix devise deprecations ([#842](https://github.com/scambra/devise_invitable/pull/842))
6
+ - Update translations ([#844](https://github.com/scambra/devise_invitable/pull/844), [#845](https://github.com/scambra/devise_invitable/pull/845))
7
+ - Fix/enforce initial password length to follow devise ([#848](https://github.com/scambra/devise_invitable/pull/848))
8
+
9
+ ## 2.0.3
10
+ - Add locales ([#834](https://github.com/scambra/devise_invitable/pull/834), [#835](https://github.com/scambra/devise_invitable/pull/835))
11
+ - Remove index on invitations_count column ([#830](https://github.com/scambra/devise_invitable/pull/830))
12
+
13
+ ## 2.0.2
14
+ - Fix ruby 2.7 deprecation warning
15
+
16
+ ## 2.0.1
17
+ - Use per-model allow_insecure_sign_in_after_accept ([#790](https://github.com/scambra/devise_invitable/pull/790))
18
+
1
19
  ## 2.0.0
2
20
  - Remove deprecated devise_error_messages! from templates ([#786](https://github.com/scambra/devise_invitable/pull/785))
3
21
  - Drop Devise < 4.6 support ([#786](https://github.com/scambra/devise_invitable/pull/786))
data/README.rdoc CHANGED
@@ -1,5 +1,5 @@
1
1
  = DeviseInvitable
2
- {<img src="https://badge.fury.io/rb/devise_invitable.svg"/>}[http://badge.fury.io/rb/devise_invitable] {<img src="https://travis-ci.org/scambra/devise_invitable.png"/>}[https://travis-ci.org/scambra/devise_invitable] {<img src="https://codeclimate.com/github/scambra/devise_invitable/badges/gpa.svg"/>}[https://codeclimate.com/github/scambra/devise_invitable]
2
+ {<img src="https://badge.fury.io/rb/devise_invitable.svg"/>}[http://badge.fury.io/rb/devise_invitable] {<img src="https://travis-ci.org/scambra/devise_invitable.svg"/>}[https://travis-ci.org/scambra/devise_invitable] {<img src="https://codeclimate.com/github/scambra/devise_invitable/badges/gpa.svg"/>}[https://codeclimate.com/github/scambra/devise_invitable]
3
3
 
4
4
  It adds support to Devise[https://github.com/plataformatec/devise] for sending invitations by email (it requires to be authenticated) and accept the invitation setting the password.
5
5
 
@@ -70,11 +70,6 @@ or for a model that already exists, define a migration to add DeviseInvitable to
70
70
  add_column :users, :invited_by_id, :integer
71
71
  add_column :users, :invited_by_type, :string
72
72
  add_index :users, :invitation_token, unique: true
73
-
74
- # Allow null encrypted_password
75
- change_column_null :users, :encrypted_password, :string, true
76
- # Allow null password_salt (add it if you are using Devise's encryptable module)
77
- change_column_null :users, :password_salt, :string, true
78
73
  end
79
74
 
80
75
  If you previously used devise_invitable with a <tt>:limit</tt> on <tt>:invitation_token</tt>, remove it:
@@ -109,13 +104,13 @@ Remember to create indexes within the MongoDB database after deploying your chan
109
104
 
110
105
  DeviseInvitable adds some new configuration options:
111
106
 
112
- * <tt>invite_for</tt>: The period the generated invitation token is valid, after this period, the invited resource won't be able to accept the invitation. When <tt>invite_for</tt> is <tt>0</tt> (the default), the invitation won't expire.
107
+ * <tt>invite_for</tt>: The period the generated invitation token is valid. After this period, the invited resource won't be able to accept the invitation. When <tt>invite_for</tt> is <tt>0</tt> (the default), the invitation won't expire.
113
108
 
114
109
  You can set this configuration option in the Devise initializer as follow:
115
110
 
116
111
  # ==> Configuration for :invitable
117
- # The period the generated invitation token is valid, after
118
- # this period, the invited resource won't be able to accept the invitation.
112
+ # The period the generated invitation token is valid.
113
+ # After this period, the invited resource won't be able to accept the invitation.
119
114
  # When invite_for is 0 (the default), the invitation won't expire.
120
115
  # config.invite_for = 2.weeks
121
116
 
@@ -186,23 +181,21 @@ To change behaviour of inviting or accepting users, you can simply override two
186
181
  class Users::InvitationsController < Devise::InvitationsController
187
182
  private
188
183
 
189
- # this is called when creating invitation
190
- # should return an instance of resource class
191
- def invite_resource
192
- ## skip sending emails on invite
193
- super do |u|
194
- u.skip_invitation = true
184
+ # This is called when creating invitation.
185
+ # It should return an instance of resource class.
186
+ def invite_resource
187
+ # skip sending emails on invite
188
+ super { |user| user.skip_invitation = true }
195
189
  end
196
- end
197
190
 
198
- # this is called when accepting invitation
199
- # should return an instance of resource class
200
- def accept_resource
201
- resource = resource_class.accept_invitation!(update_resource_params)
202
- ## Report accepting invitation to analytics
203
- Analytics.report('invite.accept', resource.id)
204
- resource
205
- end
191
+ # This is called when accepting invitation.
192
+ # It should return an instance of resource class.
193
+ def accept_resource
194
+ resource = resource_class.accept_invitation!(update_resource_params)
195
+ # Report accepting invitation to analytics
196
+ Analytics.report('invite.accept', resource.id)
197
+ resource
198
+ end
206
199
  end
207
200
 
208
201
  == Strong Parameters
@@ -241,13 +234,13 @@ If you want to create the invitation but not send it, you can set <tt>skip_invit
241
234
  end
242
235
  # => the record will be created, but the invitation email will not be sent
243
236
 
244
- When generating the <tt>accept_user_invitation_url</tt> yourself, you must use the <tt>raw_invitation_token</tt>
245
- the value is temporarily available when you invite a user and will be decrypted when recieved.
237
+ When generating the <tt>accept_user_invitation_url</tt> yourself, you must use the <tt>raw_invitation_token</tt>.
238
+ This value is temporarily available when you invite a user and will be decrypted when received.
246
239
 
247
240
  accept_user_invitation_url(invitation_token: user.raw_invitation_token)
248
241
 
249
242
  When <tt>skip_invitation</tt> is used, you must also then set the <tt>invitation_sent_at</tt> field when the user is sent their token. Failure to do so will yield "Invalid invitation token" error when the user attempts to accept the invite.
250
- You can set column, or call <tt>deliver_invitation</tt> to sent invitation and set column:
243
+ You can set the column, or call <tt>deliver_invitation</tt> to send the invitation and set the column:
251
244
 
252
245
  user.deliver_invitation
253
246
 
@@ -315,7 +308,7 @@ A pair of scopes to find those users that have accepted, and those that have not
315
308
 
316
309
  == Integration in a Rails application
317
310
 
318
- Since the invitations controller take care of all the creation/acceptation of an invitation, in most cases you wouldn't call the <tt>invite!</tt> and <tt>accept_invitation!</tt> methods directly.
311
+ Since the invitations controller takes care of all the creation/acceptation of an invitation, in most cases you wouldn't call the <tt>invite!</tt> and <tt>accept_invitation!</tt> methods directly.
319
312
  Instead, in your views, put a link to <tt>new_user_invitation_path</tt> or <tt>new_invitation_path(:user)</tt> or even <tt>/users/invitation/new</tt> to prepare and send an invitation (to a user in this example).
320
313
 
321
314
  After an invitation is created and sent, the inviter will be redirected to <tt>after_invite_path_for(inviter, invitee)</tt>, which is the same path as <tt>signed_in_root_path</tt> by default.
@@ -324,7 +317,7 @@ After an invitation is accepted, the invitee will be redirected to <tt>after_acc
324
317
 
325
318
  The invitation email includes a link to accept the invitation that looks like this: <tt>/users/invitation/accept?invitation_token=abcd123</tt>. When clicked, the invited must set a password in order to accept its invitation. Note that if the <tt>invitation_token</tt> is not present or not valid, the invited is redirected to <tt>after_sign_out_path_for(resource_name)</tt>.
326
319
 
327
- The controller sets the <tt>invited_by_id</tt> attribute for the new user to the current user. This will let you easily keep track of who invited who.
320
+ The controller sets the <tt>invited_by_id</tt> attribute for the new user to the current user. This will let you easily keep track of who invited whom.
328
321
 
329
322
  == Controller filter
330
323
 
@@ -335,10 +328,11 @@ Default behavior requires authentication of the same resource as the invited one
335
328
  You would have a <tt>User</tt> model which is configured as invitable and an <tt>Admin</tt> model which is not. If you want to allow only admins to send invitations, simply overwrite the <tt>authenticate_inviter!</tt> method as follow:
336
329
 
337
330
  class ApplicationController < ActionController::Base
338
- protected
339
- def authenticate_inviter!
340
- authenticate_admin!(force: true)
341
- end
331
+ protected
332
+
333
+ def authenticate_inviter!
334
+ authenticate_admin!(force: true)
335
+ end
342
336
  end
343
337
 
344
338
  And include <tt>DeviseInvitable::Inviter</tt> module into <tt>Admin</tt> model:
@@ -51,9 +51,10 @@ class Devise::InvitationsController < DeviseController
51
51
  yield resource if block_given?
52
52
 
53
53
  if invitation_accepted
54
- if Devise.allow_insecure_sign_in_after_accept
54
+ if resource.class.allow_insecure_sign_in_after_accept
55
55
  flash_message = resource.active_for_authentication? ? :updated : :updated_not_active
56
56
  set_flash_message :notice, flash_message if is_flashing_format?
57
+ resource.after_database_authentication
57
58
  sign_in(resource_name, resource)
58
59
  respond_with resource, location: after_accept_path_for(resource)
59
60
  else
@@ -75,42 +76,42 @@ class Devise::InvitationsController < DeviseController
75
76
 
76
77
  protected
77
78
 
78
- def invite_resource(&block)
79
- resource_class.invite!(invite_params, current_inviter, &block)
80
- end
79
+ def invite_resource(&block)
80
+ resource_class.invite!(invite_params, current_inviter, &block)
81
+ end
81
82
 
82
- def accept_resource
83
- resource_class.accept_invitation!(update_resource_params)
84
- end
83
+ def accept_resource
84
+ resource_class.accept_invitation!(update_resource_params)
85
+ end
85
86
 
86
- def current_inviter
87
- authenticate_inviter!
88
- end
87
+ def current_inviter
88
+ authenticate_inviter!
89
+ end
89
90
 
90
- def has_invitations_left?
91
- unless current_inviter.nil? || current_inviter.has_invitations_left?
92
- self.resource = resource_class.new
93
- set_flash_message :alert, :no_invitations_remaining if is_flashing_format?
94
- respond_with_navigational(resource) { render :new }
91
+ def has_invitations_left?
92
+ unless current_inviter.nil? || current_inviter.has_invitations_left?
93
+ self.resource = resource_class.new
94
+ set_flash_message :alert, :no_invitations_remaining if is_flashing_format?
95
+ respond_with_navigational(resource) { render :new }
96
+ end
95
97
  end
96
- end
97
98
 
98
- def resource_from_invitation_token
99
- unless params[:invitation_token] && self.resource = resource_class.find_by_invitation_token(params[:invitation_token], true)
100
- set_flash_message(:alert, :invitation_token_invalid) if is_flashing_format?
101
- redirect_to after_sign_out_path_for(resource_name)
99
+ def resource_from_invitation_token
100
+ unless params[:invitation_token] && self.resource = resource_class.find_by_invitation_token(params[:invitation_token], true)
101
+ set_flash_message(:alert, :invitation_token_invalid) if is_flashing_format?
102
+ redirect_to after_sign_out_path_for(resource_name)
103
+ end
102
104
  end
103
- end
104
105
 
105
- def invite_params
106
- devise_parameter_sanitizer.sanitize(:invite)
107
- end
106
+ def invite_params
107
+ devise_parameter_sanitizer.sanitize(:invite)
108
+ end
108
109
 
109
- def update_resource_params
110
- devise_parameter_sanitizer.sanitize(:accept_invitation)
111
- end
110
+ def update_resource_params
111
+ devise_parameter_sanitizer.sanitize(:accept_invitation)
112
+ end
112
113
 
113
- def translation_scope
114
- 'devise.invitations'
115
- end
114
+ def translation_scope
115
+ 'devise.invitations'
116
+ end
116
117
  end
@@ -1,17 +1,17 @@
1
1
  class DeviseInvitable::RegistrationsController < Devise::RegistrationsController
2
2
  protected
3
3
 
4
- def build_resource(hash = {})
5
- if hash[:email]
6
- self.resource = resource_class.where(email: hash[:email]).first
7
- if self.resource && self.resource.respond_to?(:invited_to_sign_up?) && self.resource.invited_to_sign_up?
8
- self.resource.attributes = hash
9
- self.resource.send_confirmation_instructions if self.resource.confirmation_required_for_invited?
10
- self.resource.accept_invitation
11
- else
12
- self.resource = nil
4
+ def build_resource(hash = {})
5
+ if hash[:email]
6
+ self.resource = resource_class.where(email: hash[:email]).first
7
+ if self.resource && self.resource.respond_to?(:invited_to_sign_up?) && self.resource.invited_to_sign_up?
8
+ self.resource.attributes = hash
9
+ self.resource.send_confirmation_instructions if self.resource.confirmation_required_for_invited?
10
+ self.resource.accept_invitation
11
+ else
12
+ self.resource = nil
13
+ end
13
14
  end
15
+ self.resource ||= super
14
16
  end
15
- self.resource ||= super
16
- end
17
17
  end
@@ -7,7 +7,7 @@
7
7
  <% if f.object.class.require_password_on_accepting %>
8
8
  <div class="field">
9
9
  <%= f.label :password %><br />
10
- <%= f.password_field :password %></p>
10
+ <%= f.password_field :password %>
11
11
  </div>
12
12
 
13
13
  <div class="field">
@@ -2,7 +2,7 @@
2
2
 
3
3
  <p><%= t("devise.mailer.invitation_instructions.someone_invited_you", url: root_url) %></p>
4
4
 
5
- <p><%= link_to t("devise.mailer.invitation_instructions.accept"), accept_invitation_url(@resource, :invitation_token => @token) %></p>
5
+ <p><%= link_to t("devise.mailer.invitation_instructions.accept"), accept_invitation_url(@resource, invitation_token: @token) %></p>
6
6
 
7
7
  <% if @resource.invitation_due_at %>
8
8
  <p><%= t("devise.mailer.invitation_instructions.accept_until", due_date: l(@resource.invitation_due_at, format: :'devise.mailer.invitation_instructions.accept_until_format')) %></p>
@@ -2,7 +2,7 @@
2
2
 
3
3
  <%= t("devise.mailer.invitation_instructions.someone_invited_you", url: root_url) %>
4
4
 
5
- <%= accept_invitation_url(@resource, :invitation_token => @token) %>
5
+ <%= accept_invitation_url(@resource, invitation_token: @token) %>
6
6
 
7
7
  <% if @resource.invitation_due_at %>
8
8
  <%= t("devise.mailer.invitation_instructions.accept_until", due_date: l(@resource.invitation_due_at, format: :'devise.mailer.invitation_instructions.accept_until_format')) %>
@@ -0,0 +1,23 @@
1
+ ar:
2
+ devise:
3
+ failure:
4
+ invited: 'لديك دعوة معلّقة، يجب عليك قبولها للإنتهاء من إنشاء حسابك.'
5
+ invitations:
6
+ send_instructions: 'تم إرسال الدعوة إلى البريد الإلكتروني %{email}.'
7
+ invitation_token_invalid: 'كود الدعوة غير صحيح'
8
+ updated: 'تم تحديد كلمة المرور الخاص بك، انت الآن مسجل دخول.'
9
+ no_invitations_remaining: "لم يبق لديك دعوات"
10
+ invitation_removed: 'تم حذف دعوتك.'
11
+ new:
12
+ header: "ارسال الدعوة"
13
+ submit_button: "ارسل الدعوة"
14
+ edit:
15
+ header: "تحديد كلمة المرور"
16
+ submit_button: "حدد كلمة المرور"
17
+ mailer:
18
+ invitation_instructions:
19
+ subject: 'تعليمات الدعوة'
20
+ hello: 'مرحبا %{email}'
21
+ someone_invited_you: 'تم إرسال دعوة لك إلى %{url}, يمكنك الموافقة من خلال الرابط في الأسفل'
22
+ accept: 'قبول الدعوة'
23
+ ignore: "إذا كنت لا تريد قبول الدعوة، الرجاء تجاهل هذا البريد.<br />لن يتم إنشاء حساب خاص بك إلا إذا دخلت على الرابط أعلاه وحددت كلمة مرور خاص بك."
@@ -0,0 +1,41 @@
1
+ da:
2
+ activerecord:
3
+ attributes:
4
+ user:
5
+ invitation_token: Invitationsnøgle
6
+ invitation_created_at: Invitation oprettet
7
+ invitation_sent_at: Invitation sendt
8
+ invitation_accepted_at: Invitation accepteret
9
+ invitation_limit: Invitationsbegrænsning
10
+ invited_by: Inviteret af
11
+ invitations_count: Antal invitationer
12
+ devise:
13
+ failure:
14
+ invited: "Du har allerede en ventende invitation, som du bedes acceptere for at oprette en konto."
15
+ invitations:
16
+ send_instructions: "Der er sendt en invitationsmail til %{email}."
17
+ invitation_token_invalid: "Den angivne invitationsnøgle er ikke gyldig."
18
+ updated: "Din adgangskode er gemt, og du er nu logget ind."
19
+ updated_not_active: "Din adgangskode er gemt, og du kan nu logge ind på din konto."
20
+ no_invitations_remaining: "Ikke flere invitationer tilbage"
21
+ invitation_removed: "Din invitation er blevet fjernet."
22
+ new:
23
+ header: "Send en invitation"
24
+ submit_button: "Send mail"
25
+ edit:
26
+ header: "Vælg din adgangskode"
27
+ submit_button: "Gem adgangskode"
28
+ mailer:
29
+ invitation_instructions:
30
+ subject: "Invitation til at oprette en konto"
31
+ hello: "Hej %{email}"
32
+ someone_invited_you: "Du er blevet inviteret til at oprette en konto på %{url}, og du kan gøre det via linket herunder."
33
+ accept: "Accepter invitation"
34
+ accept_until: "Invitation gælder indtil %{due_date}."
35
+ ignore: "Hvis du ikke vil tage imod invitationen om at oprette en konto, kan du blot ignorere denne mail.<br />\nDer vil ikke blive oprettet nogen konto, medmindre du følger linket herover og derefter opretter en adgangskode."
36
+ time:
37
+ formats:
38
+ devise:
39
+ mailer:
40
+ invitation_instructions:
41
+ accept_until_format: "%e. %B %Y kl. %H.%M"
@@ -0,0 +1,31 @@
1
+ de:
2
+ devise:
3
+ failure:
4
+ invited: "Du hast bereits eine Einladung erhalten. Nimm die Einladung an um dein Nutzerkonto zu erstellen."
5
+ invitations:
6
+ send_instructions: "Eine Einladung wurde an %{email} verschickt."
7
+ invitation_token_invalid: "Der Einladungs-Code ist ungültig!"
8
+ updated: "Dein Passwort wurde gesetzt. Du bist nun angemeldet."
9
+ updated_not_active: "Dein Passwort wurde gesetzt."
10
+ no_invitations_remaining: "Es gibt keine weiteren Einladungen"
11
+ invitation_removed: "Deine Einladung wurde gelöscht."
12
+ new:
13
+ header: "Einladung schicken"
14
+ submit_button: "Einladung schicken"
15
+ edit:
16
+ header: "Setze ein Passwort"
17
+ submit_button: "Passwort setzen"
18
+ mailer:
19
+ invitation_instructions:
20
+ subject: "Einladung"
21
+ hello: "Hallo %{email}"
22
+ someone_invited_you: "Jemand hat dich zu %{url} eingeladen. Du kannst die Einladung mit dem Link unten annehmen."
23
+ accept: "Einladung annehmen"
24
+ accept_until: "Diese Einladung ist gültig bis zum %{due_date}."
25
+ ignore: "Wenn du die Einladung nicht annehmen willst, ignoriere diese E-Mail einfach.<br />\nEs wird kein Benutzerkonto erstellt solange du nicht die Einladung mi↪ttels des Links oben annimmst."
26
+ time:
27
+ formats:
28
+ devise:
29
+ mailer:
30
+ invitation_instructions:
31
+ accept_until_format: "%d. %B %Y %H:%M"
@@ -0,0 +1,31 @@
1
+ es:
2
+ devise:
3
+ failure:
4
+ invited: "Tienes una invitación pendiente, acéptala para acabar de crear tu cuenta."
5
+ invitations:
6
+ send_instructions: "Se ha enviado una invitación a %{email}."
7
+ invitation_token_invalid: "¡La invitación no es válida!"
8
+ updated: "Se ha configurado su contraseña y ha ingresado al sistema"
9
+ updated_not_active: "Su contraseña se ha configurado correctamente."
10
+ no_invitations_remaining: "No quedan invitaciones"
11
+ invitation_removed: "Se ha retirado su invitación"
12
+ new:
13
+ header: "Enviar Invitación"
14
+ submit_button: "Envía una invitación"
15
+ edit:
16
+ header: "Establecer contraseña"
17
+ submit_button: "Guardar mi contraseña"
18
+ mailer:
19
+ invitation_instructions:
20
+ subject: "Instruciones de la invitación"
21
+ hello: "Hola %{email}"
22
+ someone_invited_you: "Has sido invitado a %{url}, puedes aceptarlo siguiendo el siguiente enlace"
23
+ accept: "Aceptar la invitación"
24
+ accept_until: "Esta invitación expirará en %{due_date}."
25
+ ignore: "Si no le interesa esta invitación, simplemente ignore este correo. No se creará tu cuenta hasta que accedas al enlace anterior y crees una contraseña."
26
+ time:
27
+ formats:
28
+ devise:
29
+ mailer:
30
+ invitation_instructions:
31
+ accept_until_format: "%d de %B de %Y, %H:%M"
@@ -0,0 +1,23 @@
1
+ et:
2
+ devise:
3
+ failure:
4
+ invited: 'Sul on kutse ootel - aktsepteeri, et konto loomine lõpule viia.'
5
+ invitations:
6
+ send_instructions: 'Kutse on saadetud emailile %{email}.'
7
+ invitation_token_invalid: 'Antud kutse ei ole kehtiv!'
8
+ updated: 'Sinu salasõna on edukalt sätitud. Oled nüüd sisse logitud.'
9
+ no_invitations_remaining: "Kutseid pole rohkem järgi."
10
+ invitation_removed: 'Sinu kutse eemaldati.'
11
+ new:
12
+ header: "Kutse saatmine"
13
+ submit_button: "Saada kutse"
14
+ edit:
15
+ header: "Salasõna sättimine"
16
+ submit_button: "Säti mu salasõna"
17
+ mailer:
18
+ invitation_instructions:
19
+ subject: 'Kutse juhised'
20
+ hello: 'Tere, %{email}'
21
+ someone_invited_you: 'Keegi kutsus Sind aadressile %{url}. Kutse saad vastu võtta allolevalt lingilt.'
22
+ accept: 'Võta kutse vastu'
23
+ ignore: "Kui Sa ei soovi kutset vastu võtta, siis lihtsalt ignoreeri seda emaili.<br />Sinu kontot ei looda enne, kui oled ülalolevat linki külastanud ja oma salasõna määranud."