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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +18 -0
- data/README.rdoc +27 -33
- data/app/controllers/devise/invitations_controller.rb +31 -30
- data/app/controllers/devise_invitable/registrations_controller.rb +11 -11
- data/app/views/devise/invitations/edit.html.erb +1 -1
- data/app/views/devise/mailer/invitation_instructions.html.erb +1 -1
- data/app/views/devise/mailer/invitation_instructions.text.erb +1 -1
- data/config/locales/ar.yml +23 -0
- data/config/locales/da.yml +41 -0
- data/config/locales/de.yml +31 -0
- data/config/locales/es.yml +31 -0
- data/config/locales/et.yml +23 -0
- data/config/locales/fa.yml +31 -0
- data/config/locales/fr.yml +34 -0
- data/config/locales/it.yml +31 -0
- data/config/locales/ja.yml +31 -0
- data/config/locales/ko.yml +24 -0
- data/config/locales/nl.yml +32 -0
- data/config/locales/no.yml +17 -0
- data/config/locales/pl.yml +31 -0
- data/config/locales/pt-BR.yml +23 -0
- data/config/locales/pt.yml +23 -0
- data/config/locales/ru.yml +23 -0
- data/config/locales/tr.yml +24 -0
- data/config/locales/ua.yml +31 -0
- data/config/locales/vi.yml +25 -0
- data/config/locales/zh-HK.yml +31 -0
- data/config/locales/zh-TW.yml +31 -0
- data/lib/devise_invitable.rb +2 -1
- data/lib/devise_invitable/controllers/helpers.rb +3 -4
- data/lib/devise_invitable/inviter.rb +4 -3
- data/lib/devise_invitable/mapping.rb +6 -5
- data/lib/devise_invitable/models.rb +13 -11
- data/lib/devise_invitable/models/authenticatable.rb +7 -1
- data/lib/devise_invitable/parameter_sanitizer.rb +18 -18
- data/lib/devise_invitable/routes.rb +1 -1
- data/lib/devise_invitable/version.rb +1 -1
- data/lib/generators/active_record/templates/migration.rb +0 -1
- data/lib/generators/devise_invitable/install_generator.rb +4 -3
- data/test/generators/views_generator_test.rb +7 -6
- data/test/generators_test.rb +3 -2
- data/test/integration_tests_helper.rb +0 -1
- data/test/models/invitable_test.rb +16 -0
- data/test/rails_app/app/controllers/admins_controller.rb +4 -3
- data/test/rails_app/app/controllers/application_controller.rb +10 -9
- data/test/rails_app/app/controllers/free_invitations_controller.rb +12 -9
- data/test/rails_app/config/initializers/devise.rb +4 -3
- data/test/rails_app/config/initializers/secret_token.rb +9 -0
- data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -2
- data/test/test_helper.rb +4 -17
- metadata +31 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0517f954240bfc3c1fd255df0d502d5fdbd461d4e695cd0c5ec725854af50dcf
|
4
|
+
data.tar.gz: 239b887a32e66dbc38fbf1e04625def2f1dea325fcc6d20af0e1befd066dd000
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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
|
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
|
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
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
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
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
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
|
-
|
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
|
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
|
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
|
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
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
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
|
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
|
-
|
79
|
-
|
80
|
-
|
79
|
+
def invite_resource(&block)
|
80
|
+
resource_class.invite!(invite_params, current_inviter, &block)
|
81
|
+
end
|
81
82
|
|
82
|
-
|
83
|
-
|
84
|
-
|
83
|
+
def accept_resource
|
84
|
+
resource_class.accept_invitation!(update_resource_params)
|
85
|
+
end
|
85
86
|
|
86
|
-
|
87
|
-
|
88
|
-
|
87
|
+
def current_inviter
|
88
|
+
authenticate_inviter!
|
89
|
+
end
|
89
90
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
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
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
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
|
-
|
106
|
-
|
107
|
-
|
106
|
+
def invite_params
|
107
|
+
devise_parameter_sanitizer.sanitize(:invite)
|
108
|
+
end
|
108
109
|
|
109
|
-
|
110
|
-
|
111
|
-
|
110
|
+
def update_resource_params
|
111
|
+
devise_parameter_sanitizer.sanitize(:accept_invitation)
|
112
|
+
end
|
112
113
|
|
113
|
-
|
114
|
-
|
115
|
-
|
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
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
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
|
@@ -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, :
|
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, :
|
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."
|