devise_invitable 2.0.0 → 2.0.5
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 +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."
|