New upstream version 0.38.0+ds
Pierre-Elliott Bécue
5 years ago
46 | 46 | Guillaume Vincent |
47 | 47 | Guoyu Hao |
48 | 48 | Hatem Nassrat |
49 | Hyunwoo Shim | |
49 | 50 | J. Erm |
50 | 51 | J. Fernando Sánchez |
51 | 52 | Jack Shedd |
67 | 68 | Julen Ruiz Aizpuru |
68 | 69 | Justin Michalicek |
69 | 70 | Justin Pogrob |
71 | Kevin Dice | |
70 | 72 | Koichi Harakawa |
71 | 73 | Lee Semel |
72 | 74 | Luis Diego García |
85 | 87 | Morgante Pell |
86 | 88 | Nariman Gharib |
87 | 89 | Niklas A Emanuelsson |
90 | Pavel Savchenko | |
88 | 91 | Patrick Paul |
89 | 92 | Paulo Eduardo Neves |
90 | 93 | Peter Bittner |
91 | 94 | Peter Rowlands |
95 | Peter Stein | |
96 | Philip John James | |
92 | 97 | Rabi Alam |
93 | 98 | Radek Czajka |
94 | 99 | Rense VanderHoek |
107 | 112 | Terry Jones |
108 | 113 | Tomas Babej |
109 | 114 | Tomas Marcik |
115 | Tuk Bredsdorff | |
110 | 116 | Udi Oron |
111 | 117 | Vuong Nguyen |
112 | 118 | Volodymyr Yatsyk |
0 | 0.38.0 (2018-10-03) | |
1 | ******************* | |
2 | ||
3 | Security notice | |
4 | --------------- | |
5 | ||
6 | The ``{% user_display user %}`` tag did not escape properly. Depending on the | |
7 | username validation rules, this could lead to XSS issues. | |
8 | ||
9 | ||
10 | Note worthy changes | |
11 | ------------------- | |
12 | ||
13 | - New provider: Vimeo (OAuth2). | |
14 | ||
15 | - New translations: Basque. | |
16 | ||
17 | ||
18 | 0.37.1 (2018-08-27) | |
19 | ******************* | |
20 | ||
21 | Backwards incompatible changes | |
22 | ------------------------------ | |
23 | ||
24 | - Dropped the ``x-li-src: msdk`` headers from the ``linkedin_oauth2`` handshake. | |
25 | This header is only required for mobile tokens, and breaks the regular flow. | |
26 | Use the ``HEADERS`` setting to add this header if you need it. | |
27 | ||
28 | ||
29 | 0.37.0 (2018-08-27) | |
30 | ******************* | |
31 | ||
32 | Note worthy changes | |
33 | ------------------- | |
34 | ||
35 | - The Battle.net login backend now recognizes ``apac`` as a valid region. | |
36 | ||
37 | - User model using a ``UUIDField`` as it's primary key can now be logged | |
38 | in upon email confirmation (if using ``ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION``). | |
39 | ||
40 | - New providers: Agave, Cern, Disqus, Globus. | |
41 | ||
42 | - New translation: Danish. | |
43 | ||
0 | 44 | 0.36.0 (2018-05-08) |
1 | 45 | ******************* |
2 | 46 | |
1059 | 1103 | social login to existing accounts. The symptom is you end up with |
1060 | 1104 | users who have multiple primary email addresses which conflicts |
1061 | 1105 | with assumptions made by the code. In addition to fixing the code |
1062 | that allowed duplicates to occur, there is a managegement command | |
1106 | that allowed duplicates to occur, there is a management command | |
1063 | 1107 | you can run if you think this effects you (and if it doesn't effect |
1064 | 1108 | you there is no harm in running it anyways if you are unsure): |
1065 | 1109 |
0 | 0 | Metadata-Version: 1.1 |
1 | 1 | Name: django-allauth |
2 | Version: 0.36.0 | |
2 | Version: 0.38.0 | |
3 | 3 | Summary: Integrated set of Django applications addressing authentication, registration, account management as well as 3rd party (social) account authentication. |
4 | 4 | Home-page: http://github.com/pennersr/django-allauth |
5 | 5 | Author: Raymond Penners |
109 | 109 | Classifier: Framework :: Django |
110 | 110 | Classifier: Framework :: Django :: 1.11 |
111 | 111 | Classifier: Framework :: Django :: 2.0 |
112 | Classifier: Framework :: Django :: 2.1 |
7 | 7 | |
8 | 8 | """ |
9 | 9 | |
10 | VERSION = (0, 36, 0, 'final', 0) | |
10 | VERSION = (0, 38, 0, 'final', 0) | |
11 | 11 | |
12 | 12 | __title__ = 'django-allauth' |
13 | 13 | __version_info__ = VERSION |
267 | 267 | username_field).error_messages.get('unique') |
268 | 268 | if not error_message: |
269 | 269 | error_message = self.error_messages['username_taken'] |
270 | raise forms.ValidationError(error_message) | |
270 | raise forms.ValidationError( | |
271 | error_message, | |
272 | params={ | |
273 | 'model_name': user_model.__name__, | |
274 | 'field_label': username_field, | |
275 | } | |
276 | ) | |
271 | 277 | return username |
272 | 278 | |
273 | 279 | def clean_email(self, email): |
332 | 338 | if hasattr(response, 'render'): |
333 | 339 | response.render() |
334 | 340 | resp['html'] = response.content.decode('utf8') |
335 | if data is not None: | |
336 | resp['data'] = data | |
341 | if data is not None: | |
342 | resp['data'] = data | |
337 | 343 | return HttpResponse(json.dumps(resp), |
338 | 344 | status=status, |
339 | 345 | content_type='application/json') |
5 | 5 | register = template.Library() |
6 | 6 | |
7 | 7 | |
8 | class UserDisplayNode(template.Node): | |
9 | ||
10 | def __init__(self, user, as_var=None): | |
11 | self.user_var = template.Variable(user) | |
12 | self.as_var = as_var | |
13 | ||
14 | def render(self, context): | |
15 | user = self.user_var.resolve(context) | |
16 | ||
17 | display = user_display(user) | |
18 | ||
19 | if self.as_var: | |
20 | context[self.as_var] = display | |
21 | return "" | |
22 | return display | |
23 | ||
24 | ||
25 | @register.tag(name="user_display") | |
26 | def do_user_display(parser, token): | |
8 | @register.simple_tag(name='user_display') | |
9 | def user_display_tag(user): | |
27 | 10 | """ |
28 | 11 | Example usage:: |
29 | 12 | |
37 | 20 | {% endblocktrans %} |
38 | 21 | |
39 | 22 | """ |
40 | bits = token.split_contents() | |
41 | if len(bits) == 2: | |
42 | user = bits[1] | |
43 | as_var = None | |
44 | elif len(bits) == 4: | |
45 | user = bits[1] | |
46 | as_var = bits[3] | |
47 | else: | |
48 | raise template.TemplateSyntaxError( | |
49 | "'%s' takes either two or four arguments" % bits[0]) | |
50 | ||
51 | return UserDisplayNode(user, as_var) | |
23 | return user_display(user) |
10 | 10 | from django.core import mail, validators |
11 | 11 | from django.core.exceptions import ValidationError |
12 | 12 | from django.db import models |
13 | from django.http import HttpResponseRedirect | |
14 | from django.template import Context, Template | |
13 | 15 | from django.test.client import Client, RequestFactory |
14 | 16 | from django.test.utils import override_settings |
15 | 17 | from django.urls import reverse |
27 | 29 | from . import app_settings |
28 | 30 | from .adapter import get_adapter |
29 | 31 | from .auth_backends import AuthenticationBackend |
30 | from .signals import user_logged_out | |
32 | from .signals import user_logged_in, user_logged_out | |
31 | 33 | from .utils import ( |
32 | 34 | filter_users_by_username, |
33 | 35 | url_str_to_user_pk, |
1099 | 1101 | with patch('allauth.account.utils.get_user_model') as mocked_gum: |
1100 | 1102 | mocked_gum.return_value = UUIDUser |
1101 | 1103 | self.assertEqual(url_str_to_user_pk(self.user_id), |
1102 | self.user_id) | |
1104 | uuid.UUID(self.user_id)) | |
1103 | 1105 | |
1104 | 1106 | def test_pk_to_url_string_identifies_UUID_as_stringlike(self): |
1105 | 1107 | user = UUIDUser( |
1123 | 1125 | self.assertEqual(user_username(user), 'CamelCase') |
1124 | 1126 | # TODO: Actually test something |
1125 | 1127 | filter_users_by_username('camelcase', 'foobar') |
1128 | ||
1129 | def test_user_display(self): | |
1130 | user = get_user_model()(username='john<br/>doe') | |
1131 | expected_name = 'john<br/>doe' | |
1132 | templates = [ | |
1133 | '{% load account %}{% user_display user %}', | |
1134 | '{% load account %}{% user_display user as x %}{{ x }}' | |
1135 | ] | |
1136 | for template in templates: | |
1137 | t = Template(template) | |
1138 | content = t.render(Context({'user': user})) | |
1139 | self.assertEqual(content, expected_name) | |
1140 | ||
1141 | ||
1142 | class ConfirmationViewTests(TestCase): | |
1143 | def _create_user(self, username='john', password='doe'): | |
1144 | user = get_user_model().objects.create( | |
1145 | username=username, | |
1146 | is_active=True) | |
1147 | if password: | |
1148 | user.set_password(password) | |
1149 | else: | |
1150 | user.set_unusable_password() | |
1151 | user.save() | |
1152 | return user | |
1153 | ||
1154 | @override_settings(ACCOUNT_EMAIL_CONFIRMATION_HMAC=True, | |
1155 | ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION=True) | |
1156 | def test_login_on_confirm(self): | |
1157 | user = self._create_user() | |
1158 | email = EmailAddress.objects.create( | |
1159 | user=user, | |
1160 | email='a@b.com', | |
1161 | verified=False, | |
1162 | primary=True) | |
1163 | key = EmailConfirmationHMAC(email).key | |
1164 | ||
1165 | receiver_mock = Mock() # we've logged if signal was called | |
1166 | user_logged_in.connect(receiver_mock) | |
1167 | ||
1168 | # fake post-signup account_user stash | |
1169 | session = self.client.session | |
1170 | session['account_user'] = user_pk_to_url_str(user) | |
1171 | session.save() | |
1172 | ||
1173 | resp = self.client.post( | |
1174 | reverse('account_confirm_email', | |
1175 | args=[key])) | |
1176 | email = EmailAddress.objects.get(pk=email.pk) | |
1177 | self.assertTrue(email.verified) | |
1178 | ||
1179 | receiver_mock.assert_called_once_with( | |
1180 | sender=get_user_model(), | |
1181 | request=resp.wsgi_request, | |
1182 | response=resp, | |
1183 | user=get_user_model().objects.get(username='john'), | |
1184 | signal=user_logged_in, | |
1185 | ) | |
1186 | ||
1187 | user_logged_in.disconnect(receiver_mock) | |
1188 | ||
1189 | @override_settings(ACCOUNT_EMAIL_CONFIRMATION_HMAC=True, | |
1190 | ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION=True) | |
1191 | @patch('allauth.account.views.perform_login') | |
1192 | @patch('allauth.account.utils.get_user_model', return_value=UUIDUser) | |
1193 | def test_login_on_confirm_uuid_user(self, mocked_gum, mock_perform_login): | |
1194 | user = UUIDUser( | |
1195 | is_active=True, | |
1196 | email='john@example.com', | |
1197 | username='john') | |
1198 | ||
1199 | # fake post-signup account_user stash | |
1200 | session = self.client.session | |
1201 | session['account_user'] = user_pk_to_url_str(user) | |
1202 | session.save() | |
1203 | ||
1204 | # fake email and email confirmation to avoid swappable model hell | |
1205 | email = Mock(verified=False, user=user) | |
1206 | key = 'mockkey' | |
1207 | confirmation = Mock(autospec=EmailConfirmationHMAC, key=key) | |
1208 | confirmation.email_address = email | |
1209 | confirmation.from_key.return_value = confirmation | |
1210 | mock_perform_login.return_value = HttpResponseRedirect(redirect_to='/') | |
1211 | ||
1212 | with patch('allauth.account.views.EmailConfirmationHMAC', | |
1213 | confirmation): | |
1214 | self.client.post( | |
1215 | reverse('account_confirm_email', | |
1216 | args=[key])) | |
1217 | ||
1218 | assert mock_perform_login.called |
421 | 421 | else: |
422 | 422 | pk_field = User._meta.pk |
423 | 423 | if issubclass(type(pk_field), models.UUIDField): |
424 | return s | |
424 | return pk_field.to_python(s) | |
425 | 425 | try: |
426 | 426 | pk_field.to_python('a') |
427 | 427 | pk = s |
764 | 764 | if app_settings.LOGOUT_ON_GET: |
765 | 765 | return self.post(*args, **kwargs) |
766 | 766 | if not self.request.user.is_authenticated: |
767 | return redirect(self.get_redirect_url()) | |
767 | response = redirect(self.get_redirect_url()) | |
768 | return _ajax_response(self.request, response) | |
768 | 769 | ctx = self.get_context_data() |
769 | return self.render_to_response(ctx) | |
770 | response = self.render_to_response(ctx) | |
771 | return _ajax_response(self.request, response) | |
770 | 772 | |
771 | 773 | def post(self, *args, **kwargs): |
772 | 774 | url = self.get_redirect_url() |
773 | 775 | if self.request.user.is_authenticated: |
774 | 776 | self.logout() |
775 | return redirect(url) | |
777 | response = redirect(url) | |
778 | return _ajax_response(self.request, response) | |
776 | 779 | |
777 | 780 | def logout(self): |
778 | 781 | adapter = get_adapter(self.request) |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: 0.1\n" |
8 | 8 | "Report-Msgid-Bugs-To: \n" |
9 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
9 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
10 | 10 | "PO-Revision-Date: 2016-01-19 19:32+0100\n" |
11 | 11 | "Last-Translator: David D Lowe <daviddlowe.flimm@gmail.com>\n" |
12 | 12 | "Language-Team: Arabic\n" |
30 | 30 | msgid "A user is already registered with this e-mail address." |
31 | 31 | msgstr "هنالك مستخدم مسجل سابقا مع نفس عنوان البريد الاكتروني." |
32 | 32 | |
33 | #: account/adapter.py:288 | |
33 | #: account/adapter.py:294 | |
34 | 34 | #, python-brace-format |
35 | 35 | msgid "Password must be a minimum of {0} characters." |
36 | 36 | msgstr "كلمة المرور يجب أن لا تقل عن {0} حروف." |
7 | 7 | msgstr "" |
8 | 8 | "Project-Id-Version: 0.35\n" |
9 | 9 | "Report-Msgid-Bugs-To: \n" |
10 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
10 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
11 | 11 | "PO-Revision-Date: 2018-04-17 16:52+0200\n" |
12 | 12 | "Last-Translator: Beda Kosata <beda.kosata@gmail.com>\n" |
13 | 13 | "Language-Team: Czech <>\n" |
30 | 30 | msgid "A user is already registered with this e-mail address." |
31 | 31 | msgstr "Uživatel s tímto e-mailem je již registrován." |
32 | 32 | |
33 | #: account/adapter.py:288 | |
33 | #: account/adapter.py:294 | |
34 | 34 | #, python-brace-format |
35 | 35 | msgid "Password must be a minimum of {0} characters." |
36 | 36 | msgstr "Heslo musí obsahovat minimálně {0} znaků." |
0 | # SOME DESCRIPTIVE TITLE. | |
1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
4 | # | |
5 | msgid "" | |
6 | msgstr "" | |
7 | "Project-Id-Version: \n" | |
8 | "Report-Msgid-Bugs-To: \n" | |
9 | "POT-Creation-Date: 2018-09-03 14:25+0200\n" | |
10 | "PO-Revision-Date: 2018-09-03 16:04+0200\n" | |
11 | "Language: da\n" | |
12 | "MIME-Version: 1.0\n" | |
13 | "Content-Type: text/plain; charset=UTF-8\n" | |
14 | "Content-Transfer-Encoding: 8bit\n" | |
15 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" | |
16 | "Last-Translator: b'Tuk Bredsdorff <tukodeb@gmail.com>'\n" | |
17 | "Language-Team: \n" | |
18 | "X-Generator: Poedit 2.1.1\n" | |
19 | ||
20 | #: account/adapter.py:45 | |
21 | msgid "Username can not be used. Please use other username." | |
22 | msgstr "Brugernavn kan ikke bruges. Brug venligst et andet brugernavn." | |
23 | ||
24 | #: account/adapter.py:49 | |
25 | msgid "Too many failed login attempts. Try again later." | |
26 | msgstr "Der er for mange mislykkede logonforsøg. Prøv igen senere." | |
27 | ||
28 | #: account/adapter.py:51 | |
29 | msgid "A user is already registered with this e-mail address." | |
30 | msgstr "En bruger er allerede registreret med denne e-mail-adresse." | |
31 | ||
32 | #: account/adapter.py:294 | |
33 | #, python-brace-format | |
34 | msgid "Password must be a minimum of {0} characters." | |
35 | msgstr "Adgangskoden skal være på mindst {0} tegn." | |
36 | ||
37 | #: account/apps.py:7 | |
38 | msgid "Accounts" | |
39 | msgstr "Konti" | |
40 | ||
41 | #: account/forms.py:61 account/forms.py:398 | |
42 | msgid "You must type the same password each time." | |
43 | msgstr "Du skal skrive den samme adgangskode hver gang." | |
44 | ||
45 | #: account/forms.py:91 account/forms.py:365 account/forms.py:476 | |
46 | msgid "Password" | |
47 | msgstr "Adgangskode" | |
48 | ||
49 | #: account/forms.py:92 | |
50 | msgid "Remember Me" | |
51 | msgstr "Husk mig" | |
52 | ||
53 | #: account/forms.py:98 | |
54 | msgid "This account is currently inactive." | |
55 | msgstr "Denne konto er i øjeblikket inaktiv." | |
56 | ||
57 | #: account/forms.py:101 | |
58 | msgid "The e-mail address and/or password you specified are not correct." | |
59 | msgstr "Den angivne e-mail-adresse og/eller adgangskode er ikke korrekt." | |
60 | ||
61 | #: account/forms.py:104 | |
62 | msgid "The username and/or password you specified are not correct." | |
63 | msgstr "Det angivne brugernavn og/eller adgangskoden er ikke korrekt." | |
64 | ||
65 | #: account/forms.py:113 account/forms.py:268 account/forms.py:426 | |
66 | #: account/forms.py:495 | |
67 | msgid "E-mail address" | |
68 | msgstr "E-mail adresse" | |
69 | ||
70 | #: account/forms.py:115 account/forms.py:301 account/forms.py:421 | |
71 | #: account/forms.py:490 | |
72 | msgid "E-mail" | |
73 | msgstr "E-mail" | |
74 | ||
75 | #: account/forms.py:120 account/forms.py:123 account/forms.py:260 | |
76 | #: account/forms.py:264 | |
77 | msgid "Username" | |
78 | msgstr "Brugernavn" | |
79 | ||
80 | #: account/forms.py:130 | |
81 | msgid "Username or e-mail" | |
82 | msgstr "Brugernavn eller e-mail" | |
83 | ||
84 | #: account/forms.py:133 | |
85 | msgctxt "field label" | |
86 | msgid "Login" | |
87 | msgstr "Bruger" | |
88 | ||
89 | #: account/forms.py:292 | |
90 | msgid "E-mail (again)" | |
91 | msgstr "E-mail (igen)" | |
92 | ||
93 | #: account/forms.py:296 | |
94 | msgid "E-mail address confirmation" | |
95 | msgstr "Bekræftelse af e-mail-adresse" | |
96 | ||
97 | #: account/forms.py:304 | |
98 | msgid "E-mail (optional)" | |
99 | msgstr "E-mail (valgfri)" | |
100 | ||
101 | #: account/forms.py:345 | |
102 | msgid "You must type the same email each time." | |
103 | msgstr "Du skal skrive den samme e-mail hver gang." | |
104 | ||
105 | #: account/forms.py:368 account/forms.py:477 | |
106 | msgid "Password (again)" | |
107 | msgstr "Adgangskode (igen)" | |
108 | ||
109 | #: account/forms.py:432 | |
110 | msgid "This e-mail address is already associated with this account." | |
111 | msgstr "Denne e-mail-adresse er allerede knyttet til denne konto." | |
112 | ||
113 | #: account/forms.py:434 | |
114 | msgid "This e-mail address is already associated with another account." | |
115 | msgstr "Denne e-mail-adresse er allerede knyttet til en anden konto." | |
116 | ||
117 | #: account/forms.py:456 | |
118 | msgid "Current Password" | |
119 | msgstr "Nuværende adgangskode" | |
120 | ||
121 | #: account/forms.py:457 account/forms.py:546 | |
122 | msgid "New Password" | |
123 | msgstr "Ny adgangskode" | |
124 | ||
125 | #: account/forms.py:458 account/forms.py:547 | |
126 | msgid "New Password (again)" | |
127 | msgstr "Ny adgangskode (igen)" | |
128 | ||
129 | #: account/forms.py:466 | |
130 | msgid "Please type your current password." | |
131 | msgstr "Indtast din nuværende adgangskode." | |
132 | ||
133 | #: account/forms.py:504 | |
134 | msgid "The e-mail address is not assigned to any user account" | |
135 | msgstr "E-mail-adressen er ikke tildelt til nogen brugerkonto" | |
136 | ||
137 | #: account/forms.py:568 | |
138 | msgid "The password reset token was invalid." | |
139 | msgstr "Token for nulstilling af adgangskode var ugyldig." | |
140 | ||
141 | #: account/models.py:23 | |
142 | msgid "user" | |
143 | msgstr "bruger" | |
144 | ||
145 | #: account/models.py:27 account/models.py:81 | |
146 | msgid "e-mail address" | |
147 | msgstr "e-mail adresse" | |
148 | ||
149 | #: account/models.py:28 | |
150 | msgid "verified" | |
151 | msgstr "bekræftet" | |
152 | ||
153 | #: account/models.py:29 | |
154 | msgid "primary" | |
155 | msgstr "primær" | |
156 | ||
157 | #: account/models.py:34 | |
158 | msgid "email address" | |
159 | msgstr "e-mail adresse" | |
160 | ||
161 | #: account/models.py:35 | |
162 | msgid "email addresses" | |
163 | msgstr "e-mail adresser" | |
164 | ||
165 | #: account/models.py:83 | |
166 | msgid "created" | |
167 | msgstr "oprettet" | |
168 | ||
169 | #: account/models.py:85 | |
170 | msgid "sent" | |
171 | msgstr "sendt" | |
172 | ||
173 | #: account/models.py:86 socialaccount/models.py:55 | |
174 | msgid "key" | |
175 | msgstr "nøgle" | |
176 | ||
177 | #: account/models.py:91 | |
178 | msgid "email confirmation" | |
179 | msgstr "e-mail bekræftigelse" | |
180 | ||
181 | #: account/models.py:92 | |
182 | msgid "email confirmations" | |
183 | msgstr "e-mail bekræftigelser" | |
184 | ||
185 | #: socialaccount/adapter.py:26 | |
186 | #, python-format | |
187 | msgid "" | |
188 | "An account already exists with this e-mail address. Please sign in to that " | |
189 | "account first, then connect your %s account." | |
190 | msgstr "" | |
191 | "En konto med denne e-mail adresse eksisterer allerede. Log venligst ind med " | |
192 | "den konto først og tilknyt din %s konto derefter." | |
193 | ||
194 | #: socialaccount/adapter.py:131 | |
195 | msgid "Your account has no password set up." | |
196 | msgstr "Der er ikke oprettet noget password til din konto." | |
197 | ||
198 | #: socialaccount/adapter.py:138 | |
199 | msgid "Your account has no verified e-mail address." | |
200 | msgstr "Din konto har ikke noget bekræftiget e-mail adresse." | |
201 | ||
202 | #: socialaccount/apps.py:7 | |
203 | msgid "Social Accounts" | |
204 | msgstr "Sociale konti" | |
205 | ||
206 | #: socialaccount/models.py:43 socialaccount/models.py:77 | |
207 | msgid "provider" | |
208 | msgstr "udbyder" | |
209 | ||
210 | #: socialaccount/models.py:46 | |
211 | msgid "name" | |
212 | msgstr "navn" | |
213 | ||
214 | #: socialaccount/models.py:48 | |
215 | msgid "client id" | |
216 | msgstr "klient id" | |
217 | ||
218 | #: socialaccount/models.py:50 | |
219 | msgid "App ID, or consumer key" | |
220 | msgstr "App ID, eller konsumer nøgle" | |
221 | ||
222 | #: socialaccount/models.py:51 | |
223 | msgid "secret key" | |
224 | msgstr "hemmelig nøgle" | |
225 | ||
226 | #: socialaccount/models.py:53 | |
227 | msgid "API secret, client secret, or consumer secret" | |
228 | msgstr "API hemmelighed, klient hemmelighed eller konsumet hemmelighed" | |
229 | ||
230 | #: socialaccount/models.py:58 | |
231 | msgid "Key" | |
232 | msgstr "Nøgle" | |
233 | ||
234 | #: socialaccount/models.py:66 | |
235 | msgid "social application" | |
236 | msgstr "social applikation" | |
237 | ||
238 | #: socialaccount/models.py:67 | |
239 | msgid "social applications" | |
240 | msgstr "sociale applikationer" | |
241 | ||
242 | #: socialaccount/models.py:96 | |
243 | msgid "uid" | |
244 | msgstr "uid" | |
245 | ||
246 | #: socialaccount/models.py:98 | |
247 | msgid "last login" | |
248 | msgstr "sidste log ind" | |
249 | ||
250 | #: socialaccount/models.py:100 | |
251 | msgid "date joined" | |
252 | msgstr "dato oprettet" | |
253 | ||
254 | #: socialaccount/models.py:102 | |
255 | msgid "extra data" | |
256 | msgstr "ekstra data" | |
257 | ||
258 | #: socialaccount/models.py:106 | |
259 | msgid "social account" | |
260 | msgstr "social konto" | |
261 | ||
262 | #: socialaccount/models.py:107 | |
263 | msgid "social accounts" | |
264 | msgstr "sociale konti" | |
265 | ||
266 | #: socialaccount/models.py:133 | |
267 | msgid "token" | |
268 | msgstr "token" | |
269 | ||
270 | #: socialaccount/models.py:135 | |
271 | msgid "\"oauth_token\" (OAuth1) or access token (OAuth2)" | |
272 | msgstr "“oauth_token” (OAuth1) eller adgangstoken (OAuth2)" | |
273 | ||
274 | #: socialaccount/models.py:138 | |
275 | msgid "token secret" | |
276 | msgstr "token hemmelighed" | |
277 | ||
278 | #: socialaccount/models.py:140 | |
279 | msgid "\"oauth_token_secret\" (OAuth1) or refresh token (OAuth2)" | |
280 | msgstr "“oauth_token_secret” (OAuth1) eller fornyelsestoken (OAuth2)" | |
281 | ||
282 | #: socialaccount/models.py:142 | |
283 | msgid "expires at" | |
284 | msgstr "udløber den" | |
285 | ||
286 | #: socialaccount/models.py:146 | |
287 | msgid "social application token" | |
288 | msgstr "socialt applikationstoken" | |
289 | ||
290 | #: socialaccount/models.py:147 | |
291 | msgid "social application tokens" | |
292 | msgstr "sociale applikationstokener" | |
293 | ||
294 | #: socialaccount/providers/douban/views.py:36 | |
295 | msgid "Invalid profile data" | |
296 | msgstr "Ugyldig profildata" | |
297 | ||
298 | #: socialaccount/providers/oauth/client.py:78 | |
299 | #, python-format | |
300 | msgid "Invalid response while obtaining request token from \"%s\"." | |
301 | msgstr "Ugyldig respons under forsøg på at hente request token fra “%s”." | |
302 | ||
303 | #: socialaccount/providers/oauth/client.py:109 | |
304 | #, python-format | |
305 | msgid "Invalid response while obtaining access token from \"%s\"." | |
306 | msgstr "Ugyldig respons under forsøg på at hente adgangstoken fra “%s”." | |
307 | ||
308 | #: socialaccount/providers/oauth/client.py:128 | |
309 | #, python-format | |
310 | msgid "No request token saved for \"%s\"." | |
311 | msgstr "Intet request token gemt for “%s”." | |
312 | ||
313 | #: socialaccount/providers/oauth/client.py:177 | |
314 | #, python-format | |
315 | msgid "No access token saved for \"%s\"." | |
316 | msgstr "Intet adgangstoken gemt for “%s”." | |
317 | ||
318 | #: socialaccount/providers/oauth/client.py:197 | |
319 | #, python-format | |
320 | msgid "No access to private resources at \"%s\"." | |
321 | msgstr "Ingen adgang til private ressourcer på “%s”." | |
322 | ||
323 | #: templates/account/account_inactive.html:5 | |
324 | #: templates/account/account_inactive.html:8 | |
325 | msgid "Account Inactive" | |
326 | msgstr "Inaktiv konto" | |
327 | ||
328 | #: templates/account/account_inactive.html:10 | |
329 | msgid "This account is inactive." | |
330 | msgstr "Denne konto er inaktiv." | |
331 | ||
332 | #: templates/account/email.html:5 | |
333 | msgid "Account" | |
334 | msgstr "Konto" | |
335 | ||
336 | #: templates/account/email.html:8 | |
337 | msgid "E-mail Addresses" | |
338 | msgstr "E-mail adresser" | |
339 | ||
340 | #: templates/account/email.html:10 | |
341 | msgid "The following e-mail addresses are associated with your account:" | |
342 | msgstr "De følgende e-mail adresser er tilknyttet din konto:" | |
343 | ||
344 | #: templates/account/email.html:24 | |
345 | msgid "Verified" | |
346 | msgstr "Bekæftet" | |
347 | ||
348 | #: templates/account/email.html:26 | |
349 | msgid "Unverified" | |
350 | msgstr "Ubekræftet" | |
351 | ||
352 | #: templates/account/email.html:28 | |
353 | msgid "Primary" | |
354 | msgstr "Primær" | |
355 | ||
356 | #: templates/account/email.html:34 | |
357 | msgid "Make Primary" | |
358 | msgstr "Gør primær" | |
359 | ||
360 | #: templates/account/email.html:35 | |
361 | msgid "Re-send Verification" | |
362 | msgstr "Send bekræftigelse igen" | |
363 | ||
364 | #: templates/account/email.html:36 templates/socialaccount/connections.html:35 | |
365 | msgid "Remove" | |
366 | msgstr "Fjern" | |
367 | ||
368 | #: templates/account/email.html:43 | |
369 | msgid "Warning:" | |
370 | msgstr "Advarsel:" | |
371 | ||
372 | #: templates/account/email.html:43 | |
373 | msgid "" | |
374 | "You currently do not have any e-mail address set up. You should really add " | |
375 | "an e-mail address so you can receive notifications, reset your password, etc." | |
376 | msgstr "" | |
377 | "Du har på nuværende tidspunkt ikke nogen emailadresser tilknyttet. Du bør " | |
378 | "virkeligt tilknytte en email-adresse, så du kan modtage notifikationer, " | |
379 | "resette dit password osv." | |
380 | ||
381 | #: templates/account/email.html:48 | |
382 | msgid "Add E-mail Address" | |
383 | msgstr "Tilføj e-mail adresse" | |
384 | ||
385 | #: templates/account/email.html:53 | |
386 | msgid "Add E-mail" | |
387 | msgstr "Tilføj e-mail" | |
388 | ||
389 | #: templates/account/email.html:62 | |
390 | msgid "Do you really want to remove the selected e-mail address?" | |
391 | msgstr "Vil du virkeligt fjerne den valgte e-mail adresse?" | |
392 | ||
393 | #: templates/account/email/email_confirmation_message.txt:1 | |
394 | #, python-format | |
395 | msgid "" | |
396 | "Hello from %(site_name)s!\n" | |
397 | "\n" | |
398 | "You're receiving this e-mail because user %(user_display)s has given yours " | |
399 | "as an e-mail address to connect their account.\n" | |
400 | "\n" | |
401 | "To confirm this is correct, go to %(activate_url)s\n" | |
402 | msgstr "" | |
403 | "Hej fra %(site_name)s!\n" | |
404 | "\n" | |
405 | "Du modtager denne e-mail fordi brugeren %(user_display)s ønsker at bruge den " | |
406 | "til sin konto.\n" | |
407 | "\n" | |
408 | "For at bekræfte dette, gå til %(activate_url)s\n" | |
409 | ||
410 | #: templates/account/email/email_confirmation_message.txt:7 | |
411 | #, python-format | |
412 | msgid "" | |
413 | "Thank you from %(site_name)s!\n" | |
414 | "%(site_domain)s" | |
415 | msgstr "" | |
416 | "Tak fra %(site_name)s!\n" | |
417 | "%(site_domain)s" | |
418 | ||
419 | #: templates/account/email/email_confirmation_subject.txt:3 | |
420 | msgid "Please Confirm Your E-mail Address" | |
421 | msgstr "Bekræft venligst din e-mail adresse" | |
422 | ||
423 | #: templates/account/email/password_reset_key_message.txt:1 | |
424 | #, python-format | |
425 | msgid "" | |
426 | "Hello from %(site_name)s!\n" | |
427 | "\n" | |
428 | "You're receiving this e-mail because you or someone else has requested a " | |
429 | "password for your user account.\n" | |
430 | "It can be safely ignored if you did not request a password reset. Click the " | |
431 | "link below to reset your password." | |
432 | msgstr "" | |
433 | "Hej fra %(site_name)s!\n" | |
434 | "\n" | |
435 | "Du har modtaget denne email fordi du eller en anden har bedt om et password " | |
436 | "til din konto.\n" | |
437 | "Den kan trygt ses bort fra, hvis du ikke har bedt om at få nulstillet dit " | |
438 | "password. Klik linket herunder for at nulstille dit password." | |
439 | ||
440 | #: templates/account/email/password_reset_key_message.txt:8 | |
441 | #, python-format | |
442 | msgid "In case you forgot, your username is %(username)s." | |
443 | msgstr "I tilfælde af at du har glemt det er dit brugernavn %(username)s." | |
444 | ||
445 | #: templates/account/email/password_reset_key_message.txt:10 | |
446 | #, python-format | |
447 | msgid "" | |
448 | "Thank you for using %(site_name)s!\n" | |
449 | "%(site_domain)s" | |
450 | msgstr "" | |
451 | "Tak fordi du bruger %(site_name)s!\n" | |
452 | "%(site_domain)s" | |
453 | ||
454 | #: templates/account/email/password_reset_key_subject.txt:3 | |
455 | msgid "Password Reset E-mail" | |
456 | msgstr "Token for nulstilling af adgangskode var ugyldig" | |
457 | ||
458 | #: templates/account/email_confirm.html:6 | |
459 | #: templates/account/email_confirm.html:10 | |
460 | msgid "Confirm E-mail Address" | |
461 | msgstr "Bekræft venligst din e-mail adresse" | |
462 | ||
463 | #: templates/account/email_confirm.html:16 | |
464 | #, python-format | |
465 | msgid "" | |
466 | "Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an e-mail " | |
467 | "address for user %(user_display)s." | |
468 | msgstr "" | |
469 | "Bekræft venligst at <a href=\"mailto:%(email)s\">%(email)s</a> er en e-mail " | |
470 | "adresse for %(user_display)s." | |
471 | ||
472 | #: templates/account/email_confirm.html:20 | |
473 | msgid "Confirm" | |
474 | msgstr "Bekræft" | |
475 | ||
476 | #: templates/account/email_confirm.html:27 | |
477 | #, python-format | |
478 | msgid "" | |
479 | "This e-mail confirmation link expired or is invalid. Please <a href=" | |
480 | "\"%(email_url)s\">issue a new e-mail confirmation request</a>." | |
481 | msgstr "" | |
482 | "Dette e-mail bekræftigelseslink er udløbet eller ugyldigt. Lav venligst <a " | |
483 | "href=\"%(email_url)s\">et nyt</a>." | |
484 | ||
485 | #: templates/account/login.html:6 templates/account/login.html:10 | |
486 | #: templates/account/login.html:43 | |
487 | msgid "Sign In" | |
488 | msgstr "Log ind" | |
489 | ||
490 | #: templates/account/login.html:15 | |
491 | #, python-format | |
492 | msgid "" | |
493 | "Please sign in with one\n" | |
494 | "of your existing third party accounts. Or, <a href=\"%(signup_url)s\">sign " | |
495 | "up</a>\n" | |
496 | "for a %(site_name)s account and sign in below:" | |
497 | msgstr "" | |
498 | "Log venligst ind med en\n" | |
499 | "af dine eksisterende tredjeparts konti. Eller, <a href=\"%(signup_url)s" | |
500 | "\">opret</a>\n" | |
501 | "en konto på %(site_name)s og log ind herunder:" | |
502 | ||
503 | #: templates/account/login.html:25 | |
504 | msgid "or" | |
505 | msgstr "eller" | |
506 | ||
507 | #: templates/account/login.html:32 | |
508 | #, python-format | |
509 | msgid "" | |
510 | "If you have not created an account yet, then please\n" | |
511 | "<a href=\"%(signup_url)s\">sign up</a> first." | |
512 | msgstr "" | |
513 | "Hvis du ikke allerede har oprettet en konto, så\n" | |
514 | "<a href=\"%(signup_url)s\">opret dig</a> først." | |
515 | ||
516 | #: templates/account/login.html:42 | |
517 | msgid "Forgot Password?" | |
518 | msgstr "Glemt password?" | |
519 | ||
520 | #: templates/account/logout.html:5 templates/account/logout.html:8 | |
521 | #: templates/account/logout.html:17 | |
522 | msgid "Sign Out" | |
523 | msgstr "Log ud" | |
524 | ||
525 | #: templates/account/logout.html:10 | |
526 | msgid "Are you sure you want to sign out?" | |
527 | msgstr "Er du sikker på, at du vil logge af?" | |
528 | ||
529 | #: templates/account/messages/cannot_delete_primary_email.txt:2 | |
530 | #, python-format | |
531 | msgid "You cannot remove your primary e-mail address (%(email)s)." | |
532 | msgstr "Du kan ikke fjerne din primære e-mail adresse (%(email)s)." | |
533 | ||
534 | #: templates/account/messages/email_confirmation_sent.txt:2 | |
535 | #, python-format | |
536 | msgid "Confirmation e-mail sent to %(email)s." | |
537 | msgstr "Bekræftigelses-email sendt til %(email)s." | |
538 | ||
539 | #: templates/account/messages/email_confirmed.txt:2 | |
540 | #, python-format | |
541 | msgid "You have confirmed %(email)s." | |
542 | msgstr "Du har bekræftet %(email)s." | |
543 | ||
544 | #: templates/account/messages/email_deleted.txt:2 | |
545 | #, python-format | |
546 | msgid "Removed e-mail address %(email)s." | |
547 | msgstr "Fjernede e-mail adressen %(email)s." | |
548 | ||
549 | #: templates/account/messages/logged_in.txt:4 | |
550 | #, python-format | |
551 | msgid "Successfully signed in as %(name)s." | |
552 | msgstr "Loggede succesfuldt ind med %(name)s." | |
553 | ||
554 | #: templates/account/messages/logged_out.txt:2 | |
555 | msgid "You have signed out." | |
556 | msgstr "Du har logget ud." | |
557 | ||
558 | #: templates/account/messages/password_changed.txt:2 | |
559 | msgid "Password successfully changed." | |
560 | msgstr "Password ændret med success." | |
561 | ||
562 | #: templates/account/messages/password_set.txt:2 | |
563 | msgid "Password successfully set." | |
564 | msgstr "Password indstillet med success." | |
565 | ||
566 | #: templates/account/messages/primary_email_set.txt:2 | |
567 | msgid "Primary e-mail address set." | |
568 | msgstr "Primær e-mail indstillet." | |
569 | ||
570 | #: templates/account/messages/unverified_primary_email.txt:2 | |
571 | msgid "Your primary e-mail address must be verified." | |
572 | msgstr "Din primære e-mail adresse skal bekræftes." | |
573 | ||
574 | #: templates/account/password_change.html:5 | |
575 | #: templates/account/password_change.html:8 | |
576 | #: templates/account/password_change.html:13 | |
577 | #: templates/account/password_reset_from_key.html:4 | |
578 | #: templates/account/password_reset_from_key.html:7 | |
579 | #: templates/account/password_reset_from_key_done.html:4 | |
580 | #: templates/account/password_reset_from_key_done.html:7 | |
581 | msgid "Change Password" | |
582 | msgstr "Ændr password" | |
583 | ||
584 | #: templates/account/password_reset.html:6 | |
585 | #: templates/account/password_reset.html:10 | |
586 | #: templates/account/password_reset_done.html:6 | |
587 | #: templates/account/password_reset_done.html:9 | |
588 | msgid "Password Reset" | |
589 | msgstr "Nulstil password" | |
590 | ||
591 | #: templates/account/password_reset.html:15 | |
592 | msgid "" | |
593 | "Forgotten your password? Enter your e-mail address below, and we'll send you " | |
594 | "an e-mail allowing you to reset it." | |
595 | msgstr "" | |
596 | "Glemt dit password? Skriv din e-mail adresse herunder, og vi vil sende dig " | |
597 | "en e-mail, hvorfra du kan nulstille det." | |
598 | ||
599 | #: templates/account/password_reset.html:20 | |
600 | msgid "Reset My Password" | |
601 | msgstr "Nulstil mit password" | |
602 | ||
603 | #: templates/account/password_reset.html:23 | |
604 | msgid "Please contact us if you have any trouble resetting your password." | |
605 | msgstr "" | |
606 | "Kontakt os venligst, hvis du har problemer med at nulstille dit password." | |
607 | ||
608 | #: templates/account/password_reset_done.html:15 | |
609 | msgid "" | |
610 | "We have sent you an e-mail. Please contact us if you do not receive it " | |
611 | "within a few minutes." | |
612 | msgstr "" | |
613 | "Vi har sendt dig en e-mail. Kontakt os venligst, hvis du ikke modtager den i " | |
614 | "løbet af et par minutter." | |
615 | ||
616 | #: templates/account/password_reset_from_key.html:7 | |
617 | msgid "Bad Token" | |
618 | msgstr "Ugyldigt token" | |
619 | ||
620 | #: templates/account/password_reset_from_key.html:11 | |
621 | #, python-format | |
622 | msgid "" | |
623 | "The password reset link was invalid, possibly because it has already been " | |
624 | "used. Please request a <a href=\"%(passwd_reset_url)s\">new password reset</" | |
625 | "a>." | |
626 | msgstr "" | |
627 | "Linket til nulstilling af password var ugyldigt, muligvis fordi det allerede " | |
628 | "er blevet brugt. Lav venligst <a href=\"%(passwd_reset_url)s\">et nyt</a>." | |
629 | ||
630 | #: templates/account/password_reset_from_key.html:17 | |
631 | msgid "change password" | |
632 | msgstr "ændr password" | |
633 | ||
634 | #: templates/account/password_reset_from_key.html:20 | |
635 | #: templates/account/password_reset_from_key_done.html:8 | |
636 | msgid "Your password is now changed." | |
637 | msgstr "Dit password er nu ændret." | |
638 | ||
639 | #: templates/account/password_set.html:5 templates/account/password_set.html:8 | |
640 | #: templates/account/password_set.html:13 | |
641 | msgid "Set Password" | |
642 | msgstr "Indstil password" | |
643 | ||
644 | #: templates/account/signup.html:5 templates/socialaccount/signup.html:5 | |
645 | msgid "Signup" | |
646 | msgstr "Opret" | |
647 | ||
648 | #: templates/account/signup.html:8 templates/account/signup.html:18 | |
649 | #: templates/socialaccount/signup.html:8 templates/socialaccount/signup.html:19 | |
650 | msgid "Sign Up" | |
651 | msgstr "Opret konto" | |
652 | ||
653 | #: templates/account/signup.html:10 | |
654 | #, python-format | |
655 | msgid "" | |
656 | "Already have an account? Then please <a href=\"%(login_url)s\">sign in</a>." | |
657 | msgstr "Har du allerede en konto? Så <a href=\"%(login_url)s\">log ind</a>." | |
658 | ||
659 | #: templates/account/signup_closed.html:5 | |
660 | #: templates/account/signup_closed.html:8 | |
661 | msgid "Sign Up Closed" | |
662 | msgstr "Lukket for nye konti" | |
663 | ||
664 | #: templates/account/signup_closed.html:10 | |
665 | msgid "We are sorry, but the sign up is currently closed." | |
666 | msgstr "Vi beklager, men der er for tiden lukket for oprettelse af nye konti." | |
667 | ||
668 | #: templates/account/snippets/already_logged_in.html:5 | |
669 | msgid "Note" | |
670 | msgstr "Note" | |
671 | ||
672 | #: templates/account/snippets/already_logged_in.html:5 | |
673 | #, python-format | |
674 | msgid "you are already logged in as %(user_display)s." | |
675 | msgstr "du er allerede logget ind som %(user_display)s." | |
676 | ||
677 | #: templates/account/verification_sent.html:5 | |
678 | #: templates/account/verification_sent.html:8 | |
679 | #: templates/account/verified_email_required.html:5 | |
680 | #: templates/account/verified_email_required.html:8 | |
681 | msgid "Verify Your E-mail Address" | |
682 | msgstr "Bekræft din e-mail adresse" | |
683 | ||
684 | #: templates/account/verification_sent.html:10 | |
685 | msgid "" | |
686 | "We have sent an e-mail to you for verification. Follow the link provided to " | |
687 | "finalize the signup process. Please contact us if you do not receive it " | |
688 | "within a few minutes." | |
689 | msgstr "" | |
690 | "Vi har sendt en e-mail til dig. Følg linket i den for at færdiggøre " | |
691 | "oprettelsesprocessen. Kontakt os venligst, hvis du ikke modtager den i løbet " | |
692 | "af et par minutter." | |
693 | ||
694 | #: templates/account/verified_email_required.html:12 | |
695 | msgid "" | |
696 | "This part of the site requires us to verify that\n" | |
697 | "you are who you claim to be. For this purpose, we require that you\n" | |
698 | "verify ownership of your e-mail address. " | |
699 | msgstr "" | |
700 | "Denne del af siden kræver at du bekræftiger at\n" | |
701 | "du er hvem du påstår du er. Derfor er du nødt til at\n" | |
702 | "bekræftige at du ejer din e-mail adresse " | |
703 | ||
704 | #: templates/account/verified_email_required.html:16 | |
705 | msgid "" | |
706 | "We have sent an e-mail to you for\n" | |
707 | "verification. Please click on the link inside this e-mail. Please\n" | |
708 | "contact us if you do not receive it within a few minutes." | |
709 | msgstr "" | |
710 | "Vi har sendt en e-mail til dig for bekræftigelse.\n" | |
711 | "Klik på linket i den. Kontakt os venligst, hvis du ikke modtager\n" | |
712 | " den i løbet af et par minutter." | |
713 | ||
714 | #: templates/account/verified_email_required.html:20 | |
715 | #, python-format | |
716 | msgid "" | |
717 | "<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change your e-" | |
718 | "mail address</a>." | |
719 | msgstr "" | |
720 | "<strong>Bemærk:</strong> du kan stadig <a href=\"%(email_url)s\">ændre din e-" | |
721 | "mail adresse</a>." | |
722 | ||
723 | #: templates/openid/login.html:9 | |
724 | msgid "OpenID Sign In" | |
725 | msgstr "OpenID Log ind" | |
726 | ||
727 | #: templates/socialaccount/authentication_error.html:5 | |
728 | #: templates/socialaccount/authentication_error.html:8 | |
729 | msgid "Social Network Login Failure" | |
730 | msgstr "Social Network log ind-fejl" | |
731 | ||
732 | #: templates/socialaccount/authentication_error.html:10 | |
733 | msgid "" | |
734 | "An error occurred while attempting to login via your social network account." | |
735 | msgstr "" | |
736 | "Der opstod en fejl under forsøget på at logge ind via din social konto." | |
737 | ||
738 | #: templates/socialaccount/connections.html:5 | |
739 | #: templates/socialaccount/connections.html:8 | |
740 | msgid "Account Connections" | |
741 | msgstr "Kontoforbindelser" | |
742 | ||
743 | #: templates/socialaccount/connections.html:11 | |
744 | msgid "" | |
745 | "You can sign in to your account using any of the following third party " | |
746 | "accounts:" | |
747 | msgstr "Du kan logge ind med følgende tredjepartskonti:" | |
748 | ||
749 | #: templates/socialaccount/connections.html:43 | |
750 | msgid "" | |
751 | "You currently have no social network accounts connected to this account." | |
752 | msgstr "Du har ikke nogle social netværks-konti tilknyttet denne konto." | |
753 | ||
754 | #: templates/socialaccount/connections.html:46 | |
755 | msgid "Add a 3rd Party Account" | |
756 | msgstr "Tilføj tredjeparts konto" | |
757 | ||
758 | #: templates/socialaccount/login_cancelled.html:5 | |
759 | #: templates/socialaccount/login_cancelled.html:9 | |
760 | msgid "Login Cancelled" | |
761 | msgstr "Log ind afbrudt" | |
762 | ||
763 | #: templates/socialaccount/login_cancelled.html:13 | |
764 | #, python-format | |
765 | msgid "" | |
766 | "You decided to cancel logging in to our site using one of your existing " | |
767 | "accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s" | |
768 | "\">sign in</a>." | |
769 | msgstr "" | |
770 | "Du valgte at afbryde log ind på vores side med en af dine eksisterende " | |
771 | "konti. Hvis det var en fejl, så fortsæt venligst til <a " | |
772 | "href=“%(login_url)s”>log ind</a>." | |
773 | ||
774 | #: templates/socialaccount/messages/account_connected.txt:2 | |
775 | msgid "The social account has been connected." | |
776 | msgstr "Den social konto er tilknyttet." | |
777 | ||
778 | #: templates/socialaccount/messages/account_connected_other.txt:2 | |
779 | msgid "The social account is already connected to a different account." | |
780 | msgstr "Den sociale konto er allerede tilknyttet en anden konto." | |
781 | ||
782 | #: templates/socialaccount/messages/account_disconnected.txt:2 | |
783 | msgid "The social account has been disconnected." | |
784 | msgstr "Tilknytningen til den social konto er blevet afbrydt." | |
785 | ||
786 | #: templates/socialaccount/signup.html:10 | |
787 | #, python-format | |
788 | msgid "" | |
789 | "You are about to use your %(provider_name)s account to login to\n" | |
790 | "%(site_name)s. As a final step, please complete the following form:" | |
791 | msgstr "" | |
792 | "Du er ved at bruge din %(provider_name)s -konto til at logge ind i\n" | |
793 | "%(site_name)s. Som et sidste skridt, udfyld venligst denne formular:" |
7 | 7 | msgstr "" |
8 | 8 | "Project-Id-Version: django-allauth\n" |
9 | 9 | "Report-Msgid-Bugs-To: \n" |
10 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
10 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
11 | 11 | "PO-Revision-Date: 2017-11-04 16:22+0100\n" |
12 | 12 | "Last-Translator: Jannis Vajen <jvajen@gmail.com>\n" |
13 | 13 | "Language-Team: German (http://www.transifex.com/projects/p/django-allauth/" |
33 | 33 | msgid "A user is already registered with this e-mail address." |
34 | 34 | msgstr "Es ist bereits jemand mit dieser E-Mail-Adresse registriert." |
35 | 35 | |
36 | #: account/adapter.py:288 | |
36 | #: account/adapter.py:294 | |
37 | 37 | #, python-brace-format |
38 | 38 | msgid "Password must be a minimum of {0} characters." |
39 | 39 | msgstr "Das Passwort muss aus mindestens {0} Zeichen bestehen." |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: \n" |
8 | 8 | "Report-Msgid-Bugs-To: \n" |
9 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
9 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
10 | 10 | "PO-Revision-Date: 2014-08-12 00:29+0200\n" |
11 | 11 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
12 | 12 | "Language-Team: LANGUAGE <LL@li.org>\n" |
31 | 31 | msgid "A user is already registered with this e-mail address." |
32 | 32 | msgstr "Ένας χρήστης έχει ήδη εγγραφεί με τη συγκεκριμένη διεύθυνση e-mail." |
33 | 33 | |
34 | #: account/adapter.py:288 | |
34 | #: account/adapter.py:294 | |
35 | 35 | #, python-brace-format |
36 | 36 | msgid "Password must be a minimum of {0} characters." |
37 | 37 | msgstr "Ο κωδικός πρέπει να είναι κατ' ελάχιστο {0} χαρακτήρες." |
7 | 7 | msgstr "" |
8 | 8 | "Project-Id-Version: PACKAGE VERSION\n" |
9 | 9 | "Report-Msgid-Bugs-To: \n" |
10 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
10 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
11 | 11 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
12 | 12 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
13 | 13 | "Language-Team: LANGUAGE <LL@li.org>\n" |
28 | 28 | msgid "A user is already registered with this e-mail address." |
29 | 29 | msgstr "" |
30 | 30 | |
31 | #: account/adapter.py:288 | |
31 | #: account/adapter.py:294 | |
32 | 32 | #, python-brace-format |
33 | 33 | msgid "Password must be a minimum of {0} characters." |
34 | 34 | msgstr "" |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: django-allauth\n" |
8 | 8 | "Report-Msgid-Bugs-To: \n" |
9 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
9 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
10 | 10 | "PO-Revision-Date: 2018-02-14 17:46-0600\n" |
11 | 11 | "Last-Translator: Jannis \n" |
12 | 12 | "Language-Team: Spanish (http://www.transifex.com/projects/p/django-allauth/" |
30 | 30 | msgid "A user is already registered with this e-mail address." |
31 | 31 | msgstr "Un usuario ya fue registrado con esta dirección de correo electrónico." |
32 | 32 | |
33 | #: account/adapter.py:288 | |
33 | #: account/adapter.py:294 | |
34 | 34 | #, python-brace-format |
35 | 35 | msgid "Password must be a minimum of {0} characters." |
36 | 36 | msgstr "Una contraseña necesita al menos {0} caracteres." |
0 | # SOME DESCRIPTIVE TITLE. | |
1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
4 | # | |
5 | msgid "" | |
6 | msgstr "" | |
7 | "Project-Id-Version: django-allauth\n" | |
8 | "Report-Msgid-Bugs-To: \n" | |
9 | "POT-Creation-Date: 2018-08-28 20:53+0200\n" | |
10 | "PO-Revision-Date: 2018-08-29 08:16+0200\n" | |
11 | "Last-Translator: Eneko Illarramendi <eneko@illarra.com>\n" | |
12 | "Language-Team: Basque <translate@tropela.eus>\n" | |
13 | "Language: eu\n" | |
14 | "MIME-Version: 1.0\n" | |
15 | "Content-Type: text/plain; charset=UTF-8\n" | |
16 | "Content-Transfer-Encoding: 8bit\n" | |
17 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" | |
18 | "X-Generator: Poedit 2.1.1\n" | |
19 | ||
20 | #: account/adapter.py:45 | |
21 | msgid "Username can not be used. Please use other username." | |
22 | msgstr "" | |
23 | "Erabiltzaile izen hau ezin da erabili. Aukeratu beste erabiltzaile izen bat." | |
24 | ||
25 | #: account/adapter.py:49 | |
26 | msgid "Too many failed login attempts. Try again later." | |
27 | msgstr "Huts egite gehiegi saioa hasterakoan. Saiatu berriro beranduago." | |
28 | ||
29 | #: account/adapter.py:51 | |
30 | msgid "A user is already registered with this e-mail address." | |
31 | msgstr "" | |
32 | "Erabiltzaile batek kontu bat sortu du iada helbide elektroniko honekin." | |
33 | ||
34 | #: account/adapter.py:294 | |
35 | #, python-brace-format | |
36 | msgid "Password must be a minimum of {0} characters." | |
37 | msgstr "Pasahitzak gutxienez {0} karaktere izan behar ditu." | |
38 | ||
39 | #: account/apps.py:7 | |
40 | msgid "Accounts" | |
41 | msgstr "Kontuak" | |
42 | ||
43 | #: account/forms.py:61 account/forms.py:398 | |
44 | msgid "You must type the same password each time." | |
45 | msgstr "Pasahitz berdina idatzi behar duzu aldi bakoitzean." | |
46 | ||
47 | #: account/forms.py:91 account/forms.py:365 account/forms.py:476 | |
48 | msgid "Password" | |
49 | msgstr "Pasahitza" | |
50 | ||
51 | #: account/forms.py:92 | |
52 | msgid "Remember Me" | |
53 | msgstr "Gogora nazazue" | |
54 | ||
55 | #: account/forms.py:98 | |
56 | msgid "This account is currently inactive." | |
57 | msgstr "Kontu hau ez dago aktiboa orain." | |
58 | ||
59 | #: account/forms.py:101 | |
60 | msgid "The e-mail address and/or password you specified are not correct." | |
61 | msgstr "Sartutako helbide elektronikoa eta/edo pasahitza ez dira zuzenak." | |
62 | ||
63 | #: account/forms.py:104 | |
64 | msgid "The username and/or password you specified are not correct." | |
65 | msgstr "Sartutako erabiltzailea eta/edo pasahitza ez dira zuzenak." | |
66 | ||
67 | #: account/forms.py:113 account/forms.py:268 account/forms.py:426 | |
68 | #: account/forms.py:495 | |
69 | msgid "E-mail address" | |
70 | msgstr "Helbide elektronikoa" | |
71 | ||
72 | #: account/forms.py:115 account/forms.py:301 account/forms.py:421 | |
73 | #: account/forms.py:490 | |
74 | msgid "E-mail" | |
75 | msgstr "Emaila" | |
76 | ||
77 | #: account/forms.py:120 account/forms.py:123 account/forms.py:260 | |
78 | #: account/forms.py:264 | |
79 | msgid "Username" | |
80 | msgstr "Erabiltzailea" | |
81 | ||
82 | #: account/forms.py:130 | |
83 | msgid "Username or e-mail" | |
84 | msgstr "Erabiltzailea edo emaila" | |
85 | ||
86 | #: account/forms.py:133 | |
87 | msgctxt "field label" | |
88 | msgid "Login" | |
89 | msgstr "Logina" | |
90 | ||
91 | #: account/forms.py:292 | |
92 | msgid "E-mail (again)" | |
93 | msgstr "Emaila (berriro)" | |
94 | ||
95 | #: account/forms.py:296 | |
96 | msgid "E-mail address confirmation" | |
97 | msgstr "Helbide elektronikoaren egiaztapena" | |
98 | ||
99 | #: account/forms.py:304 | |
100 | msgid "E-mail (optional)" | |
101 | msgstr "Emaila (hautazkoa)" | |
102 | ||
103 | #: account/forms.py:345 | |
104 | msgid "You must type the same email each time." | |
105 | msgstr "Email berdina idatzi behar duzu aldi bakoitzean." | |
106 | ||
107 | #: account/forms.py:368 account/forms.py:477 | |
108 | msgid "Password (again)" | |
109 | msgstr "Pasahitza (berriro)" | |
110 | ||
111 | #: account/forms.py:432 | |
112 | msgid "This e-mail address is already associated with this account." | |
113 | msgstr "Helbide elektroniko hau dagoeneko kontu honi lotuta dago." | |
114 | ||
115 | #: account/forms.py:434 | |
116 | msgid "This e-mail address is already associated with another account." | |
117 | msgstr "Helbide elektroniko hau dagoeneko beste kontu bati lotuta dago." | |
118 | ||
119 | #: account/forms.py:456 | |
120 | msgid "Current Password" | |
121 | msgstr "Oraingo pasahitza" | |
122 | ||
123 | #: account/forms.py:457 account/forms.py:546 | |
124 | msgid "New Password" | |
125 | msgstr "Pasahitz berria" | |
126 | ||
127 | #: account/forms.py:458 account/forms.py:547 | |
128 | msgid "New Password (again)" | |
129 | msgstr "Pasahitz berria (berriro)" | |
130 | ||
131 | #: account/forms.py:466 | |
132 | msgid "Please type your current password." | |
133 | msgstr "Mesedez idatzi zure oraingo pasahitza." | |
134 | ||
135 | #: account/forms.py:504 | |
136 | msgid "The e-mail address is not assigned to any user account" | |
137 | msgstr "Helbide elektroniko hau ez dago kontu bati lotuta" | |
138 | ||
139 | #: account/forms.py:568 | |
140 | msgid "The password reset token was invalid." | |
141 | msgstr "Pasahitza berrezartzeko \"token\"-a baliogabea da." | |
142 | ||
143 | #: account/models.py:23 | |
144 | msgid "user" | |
145 | msgstr "erabiltzailea" | |
146 | ||
147 | #: account/models.py:27 account/models.py:81 | |
148 | msgid "e-mail address" | |
149 | msgstr "helbide elektronikoa" | |
150 | ||
151 | #: account/models.py:28 | |
152 | msgid "verified" | |
153 | msgstr "egiaztatuta" | |
154 | ||
155 | #: account/models.py:29 | |
156 | msgid "primary" | |
157 | msgstr "nagusia" | |
158 | ||
159 | #: account/models.py:34 | |
160 | msgid "email address" | |
161 | msgstr "helbide elektronikoa" | |
162 | ||
163 | #: account/models.py:35 | |
164 | msgid "email addresses" | |
165 | msgstr "helbide elektronikoak" | |
166 | ||
167 | #: account/models.py:83 | |
168 | msgid "created" | |
169 | msgstr "sortuta" | |
170 | ||
171 | #: account/models.py:85 | |
172 | msgid "sent" | |
173 | msgstr "bidalita" | |
174 | ||
175 | #: account/models.py:86 socialaccount/models.py:55 | |
176 | msgid "key" | |
177 | msgstr "giltza" | |
178 | ||
179 | #: account/models.py:91 | |
180 | msgid "email confirmation" | |
181 | msgstr "email egiaztapena" | |
182 | ||
183 | #: account/models.py:92 | |
184 | msgid "email confirmations" | |
185 | msgstr "email egiaztapenak" | |
186 | ||
187 | #: socialaccount/adapter.py:26 | |
188 | #, python-format | |
189 | msgid "" | |
190 | "An account already exists with this e-mail address. Please sign in to that " | |
191 | "account first, then connect your %s account." | |
192 | msgstr "" | |
193 | "Kontu bat sortu da iada helbide elektroniko honekin. Mesedez hasi saio berri " | |
194 | "bat kontu honekin eta gero zure %s kontua honi lotu." | |
195 | ||
196 | #: socialaccount/adapter.py:131 | |
197 | msgid "Your account has no password set up." | |
198 | msgstr "Zure kontuak ez du pasahitzik zehaztuta." | |
199 | ||
200 | #: socialaccount/adapter.py:138 | |
201 | msgid "Your account has no verified e-mail address." | |
202 | msgstr "Zure kontuak ez du egiaztatutako emailik." | |
203 | ||
204 | #: socialaccount/apps.py:7 | |
205 | msgid "Social Accounts" | |
206 | msgstr "Sare sozial kontuak" | |
207 | ||
208 | #: socialaccount/models.py:43 socialaccount/models.py:77 | |
209 | msgid "provider" | |
210 | msgstr "zerbitzua" | |
211 | ||
212 | #: socialaccount/models.py:46 | |
213 | msgid "name" | |
214 | msgstr "izena" | |
215 | ||
216 | #: socialaccount/models.py:48 | |
217 | msgid "client id" | |
218 | msgstr "client id" | |
219 | ||
220 | #: socialaccount/models.py:50 | |
221 | msgid "App ID, or consumer key" | |
222 | msgstr "Aplikazioaren ID-a, edo \"consumer key\"-a" | |
223 | ||
224 | #: socialaccount/models.py:51 | |
225 | msgid "secret key" | |
226 | msgstr "\"secret key\"-a" | |
227 | ||
228 | #: socialaccount/models.py:53 | |
229 | msgid "API secret, client secret, or consumer secret" | |
230 | msgstr "\"API secret\"-a, \"client secret\"-a edo \"consumer secret\"-a" | |
231 | ||
232 | #: socialaccount/models.py:58 | |
233 | msgid "Key" | |
234 | msgstr "Giltza" | |
235 | ||
236 | #: socialaccount/models.py:66 | |
237 | msgid "social application" | |
238 | msgstr "aplikazio soziala" | |
239 | ||
240 | #: socialaccount/models.py:67 | |
241 | msgid "social applications" | |
242 | msgstr "aplikazio sozialak" | |
243 | ||
244 | #: socialaccount/models.py:96 | |
245 | msgid "uid" | |
246 | msgstr "uid" | |
247 | ||
248 | #: socialaccount/models.py:98 | |
249 | msgid "last login" | |
250 | msgstr "azken logina" | |
251 | ||
252 | #: socialaccount/models.py:100 | |
253 | msgid "date joined" | |
254 | msgstr "erregistro eguna" | |
255 | ||
256 | #: socialaccount/models.py:102 | |
257 | msgid "extra data" | |
258 | msgstr "datu gehigarriak" | |
259 | ||
260 | #: socialaccount/models.py:106 | |
261 | msgid "social account" | |
262 | msgstr "sare sozial kontua" | |
263 | ||
264 | #: socialaccount/models.py:107 | |
265 | msgid "social accounts" | |
266 | msgstr "sare sozial kontuak" | |
267 | ||
268 | #: socialaccount/models.py:133 | |
269 | msgid "token" | |
270 | msgstr "\"token\"-a" | |
271 | ||
272 | #: socialaccount/models.py:135 | |
273 | msgid "\"oauth_token\" (OAuth1) or access token (OAuth2)" | |
274 | msgstr "\"oauth_token\"-a (OAuth1) edo \"access token\"-a (OAuth2)" | |
275 | ||
276 | #: socialaccount/models.py:138 | |
277 | msgid "token secret" | |
278 | msgstr "\"token secret\"-a" | |
279 | ||
280 | #: socialaccount/models.py:140 | |
281 | msgid "\"oauth_token_secret\" (OAuth1) or refresh token (OAuth2)" | |
282 | msgstr "\"oauth_token_secret\"-a (OAuth1) edo \"refresh token\"-a (OAuth2)" | |
283 | ||
284 | #: socialaccount/models.py:142 | |
285 | msgid "expires at" | |
286 | msgstr "iraungitze data" | |
287 | ||
288 | #: socialaccount/models.py:146 | |
289 | msgid "social application token" | |
290 | msgstr "aplikazio sozial \"token\"-a" | |
291 | ||
292 | #: socialaccount/models.py:147 | |
293 | msgid "social application tokens" | |
294 | msgstr "aplikazio sozial \"token\"-ak" | |
295 | ||
296 | #: socialaccount/providers/douban/views.py:36 | |
297 | msgid "Invalid profile data" | |
298 | msgstr "Profil datu baliogabeak" | |
299 | ||
300 | #: socialaccount/providers/oauth/client.py:78 | |
301 | #, python-format | |
302 | msgid "Invalid response while obtaining request token from \"%s\"." | |
303 | msgstr "Erantzun baliogabea \"%s\"-tik \"request token\"-a eskuratzean." | |
304 | ||
305 | #: socialaccount/providers/oauth/client.py:109 | |
306 | #, python-format | |
307 | msgid "Invalid response while obtaining access token from \"%s\"." | |
308 | msgstr "Erantzun baliogabea \"%s\"-tik \"access token\"-a eskuratzean." | |
309 | ||
310 | #: socialaccount/providers/oauth/client.py:128 | |
311 | #, python-format | |
312 | msgid "No request token saved for \"%s\"." | |
313 | msgstr "Ez dago \"request token\"-ik gordeta \"%s\"-entzat." | |
314 | ||
315 | #: socialaccount/providers/oauth/client.py:177 | |
316 | #, python-format | |
317 | msgid "No access token saved for \"%s\"." | |
318 | msgstr "Ez dago \"access token\"-ik gordeta \"%s\"-entzat." | |
319 | ||
320 | #: socialaccount/providers/oauth/client.py:197 | |
321 | #, python-format | |
322 | msgid "No access to private resources at \"%s\"." | |
323 | msgstr "Ez duzu baliabide pribatuetara sarbiderik: \"%s\"." | |
324 | ||
325 | #: templates/account/account_inactive.html:5 | |
326 | #: templates/account/account_inactive.html:8 | |
327 | msgid "Account Inactive" | |
328 | msgstr "Kontu ez aktiboa" | |
329 | ||
330 | #: templates/account/account_inactive.html:10 | |
331 | msgid "This account is inactive." | |
332 | msgstr "Kontu hau ez dago aktiboa." | |
333 | ||
334 | #: templates/account/email.html:5 | |
335 | msgid "Account" | |
336 | msgstr "Kontua" | |
337 | ||
338 | #: templates/account/email.html:8 | |
339 | msgid "E-mail Addresses" | |
340 | msgstr "Helbide elektronikoak" | |
341 | ||
342 | #: templates/account/email.html:10 | |
343 | msgid "The following e-mail addresses are associated with your account:" | |
344 | msgstr "Helbide elektroniko hauek zure kontuari lotuta daude:" | |
345 | ||
346 | #: templates/account/email.html:24 | |
347 | msgid "Verified" | |
348 | msgstr "Egiaztatuta" | |
349 | ||
350 | #: templates/account/email.html:26 | |
351 | msgid "Unverified" | |
352 | msgstr "Egiaztatu gabe" | |
353 | ||
354 | #: templates/account/email.html:28 | |
355 | msgid "Primary" | |
356 | msgstr "Nagusia" | |
357 | ||
358 | #: templates/account/email.html:34 | |
359 | msgid "Make Primary" | |
360 | msgstr "Nagusia egin" | |
361 | ||
362 | #: templates/account/email.html:35 | |
363 | msgid "Re-send Verification" | |
364 | msgstr "Egiaztapen emaila berbidali" | |
365 | ||
366 | #: templates/account/email.html:36 templates/socialaccount/connections.html:35 | |
367 | msgid "Remove" | |
368 | msgstr "Ezabatu" | |
369 | ||
370 | #: templates/account/email.html:43 | |
371 | msgid "Warning:" | |
372 | msgstr "Adi:" | |
373 | ||
374 | #: templates/account/email.html:43 | |
375 | msgid "" | |
376 | "You currently do not have any e-mail address set up. You should really add " | |
377 | "an e-mail address so you can receive notifications, reset your password, etc." | |
378 | msgstr "" | |
379 | "Oraingoz ez duzu helbide elektronikorik zehaztu. Helbide elektroniko bat " | |
380 | "gehitu beharko zenuke notifikazioak jaso ahal izateko, pasahitza " | |
381 | "berrezartzeko, etab." | |
382 | ||
383 | #: templates/account/email.html:48 | |
384 | msgid "Add E-mail Address" | |
385 | msgstr "Helbide elektronikoa gehitu" | |
386 | ||
387 | #: templates/account/email.html:53 | |
388 | msgid "Add E-mail" | |
389 | msgstr "Emaila gehitu" | |
390 | ||
391 | #: templates/account/email.html:62 | |
392 | msgid "Do you really want to remove the selected e-mail address?" | |
393 | msgstr "Ziur al zaude aukeratutako helbide elektronikoa ezabatu nahi duzula?" | |
394 | ||
395 | #: templates/account/email/email_confirmation_message.txt:1 | |
396 | #, python-format | |
397 | msgid "" | |
398 | "Hello from %(site_name)s!\n" | |
399 | "\n" | |
400 | "You're receiving this e-mail because user %(user_display)s has given yours " | |
401 | "as an e-mail address to connect their account.\n" | |
402 | "\n" | |
403 | "To confirm this is correct, go to %(activate_url)s\n" | |
404 | msgstr "" | |
405 | "Kaixo %(site_name)s webgunetik!\n" | |
406 | "\n" | |
407 | "Email hau jaso duzu %(user_display)s erabiltzaileak zure helbide " | |
408 | "elektronikoa bere kontuarekin lotu nahi duelako.\n" | |
409 | "\n" | |
410 | "Hau zuzena dela baieztatzeko, egin klik hemen: %(activate_url)s\n" | |
411 | ||
412 | #: templates/account/email/email_confirmation_message.txt:7 | |
413 | #, python-format | |
414 | msgid "" | |
415 | "Thank you from %(site_name)s!\n" | |
416 | "%(site_domain)s" | |
417 | msgstr "" | |
418 | "Mila esker %(site_name)s-(e)tik!\n" | |
419 | "%(site_domain)s" | |
420 | ||
421 | #: templates/account/email/email_confirmation_subject.txt:3 | |
422 | msgid "Please Confirm Your E-mail Address" | |
423 | msgstr "Mesedez egiaztatu zure helbide elektronikoa" | |
424 | ||
425 | #: templates/account/email/password_reset_key_message.txt:1 | |
426 | #, python-format | |
427 | msgid "" | |
428 | "Hello from %(site_name)s!\n" | |
429 | "\n" | |
430 | "You're receiving this e-mail because you or someone else has requested a " | |
431 | "password for your user account.\n" | |
432 | "It can be safely ignored if you did not request a password reset. Click the " | |
433 | "link below to reset your password." | |
434 | msgstr "" | |
435 | "Kaixo %(site_name)s webgunetik!\n" | |
436 | "\n" | |
437 | "Email hau jaso duzu zuk edo beste norbaitek pasahitza berrezartzeko eskaera " | |
438 | "egin duelako zure kontuarentzat.\n" | |
439 | "Eskaera zuk egin ez baduzu mezu hau alde batera utzi dezakezu. Edo egin klik " | |
440 | "ondorengo estekan zure pasahitza berrezartzeko." | |
441 | ||
442 | #: templates/account/email/password_reset_key_message.txt:8 | |
443 | #, python-format | |
444 | msgid "In case you forgot, your username is %(username)s." | |
445 | msgstr "Ahaztu baduzu, zure erabiltzaile izena %(username)s da." | |
446 | ||
447 | #: templates/account/email/password_reset_key_message.txt:10 | |
448 | #, python-format | |
449 | msgid "" | |
450 | "Thank you for using %(site_name)s!\n" | |
451 | "%(site_domain)s" | |
452 | msgstr "" | |
453 | "Mila esker %(site_name)s webgunea erabiltzeagatik!\n" | |
454 | "%(site_domain)s" | |
455 | ||
456 | #: templates/account/email/password_reset_key_subject.txt:3 | |
457 | msgid "Password Reset E-mail" | |
458 | msgstr "Pasahitza berrezartzeko emaila" | |
459 | ||
460 | #: templates/account/email_confirm.html:6 | |
461 | #: templates/account/email_confirm.html:10 | |
462 | msgid "Confirm E-mail Address" | |
463 | msgstr "Helbide elektronikoa egiaztatu" | |
464 | ||
465 | #: templates/account/email_confirm.html:16 | |
466 | #, python-format | |
467 | msgid "" | |
468 | "Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an e-mail " | |
469 | "address for user %(user_display)s." | |
470 | msgstr "" | |
471 | "Mesedez egiaztatu <a href=\"mailto:%(email)s\">%(email)s</a> " | |
472 | "%(user_display)s erabiltzailearen helbide elektroniko bat dela." | |
473 | ||
474 | #: templates/account/email_confirm.html:20 | |
475 | msgid "Confirm" | |
476 | msgstr "Egiaztatu" | |
477 | ||
478 | #: templates/account/email_confirm.html:27 | |
479 | #, python-format | |
480 | msgid "" | |
481 | "This e-mail confirmation link expired or is invalid. Please <a href=" | |
482 | "\"%(email_url)s\">issue a new e-mail confirmation request</a>." | |
483 | msgstr "" | |
484 | "Egiaztapen esteka hau iraungirik dago edo baliogabea da. Mesedez eskatu <a " | |
485 | "href=\"%(email_url)s\">egiaztapen email berri bat</a>." | |
486 | ||
487 | #: templates/account/login.html:6 templates/account/login.html:10 | |
488 | #: templates/account/login.html:43 | |
489 | msgid "Sign In" | |
490 | msgstr "Saioa hasi" | |
491 | ||
492 | #: templates/account/login.html:15 | |
493 | #, python-format | |
494 | msgid "" | |
495 | "Please sign in with one\n" | |
496 | "of your existing third party accounts. Or, <a href=\"%(signup_url)s\">sign " | |
497 | "up</a>\n" | |
498 | "for a %(site_name)s account and sign in below:" | |
499 | msgstr "" | |
500 | "Mesedez hasi saioa lotutako sare sozial kontu bat\n" | |
501 | "erabiliz, edo <a href=\"%(signup_url)s\">sortu kontu bat</a>\n" | |
502 | "%(site_name)s webgunean eta saioa hasi hemen:" | |
503 | ||
504 | #: templates/account/login.html:25 | |
505 | msgid "or" | |
506 | msgstr "edo" | |
507 | ||
508 | #: templates/account/login.html:32 | |
509 | #, python-format | |
510 | msgid "" | |
511 | "If you have not created an account yet, then please\n" | |
512 | "<a href=\"%(signup_url)s\">sign up</a> first." | |
513 | msgstr "" | |
514 | "Oraindik kontu bat sortu ez baduzu, mesedez\n" | |
515 | "<a href=\"%(signup_url)s\">sortu kontu bat</a> lehenik." | |
516 | ||
517 | #: templates/account/login.html:42 | |
518 | msgid "Forgot Password?" | |
519 | msgstr "Pasahitza ahaztu duzu?" | |
520 | ||
521 | #: templates/account/logout.html:5 templates/account/logout.html:8 | |
522 | #: templates/account/logout.html:17 | |
523 | msgid "Sign Out" | |
524 | msgstr "Saioa amaitu" | |
525 | ||
526 | #: templates/account/logout.html:10 | |
527 | msgid "Are you sure you want to sign out?" | |
528 | msgstr "Ziur al zaude saioa amaitu nahi duzula?" | |
529 | ||
530 | #: templates/account/messages/cannot_delete_primary_email.txt:2 | |
531 | #, python-format | |
532 | msgid "You cannot remove your primary e-mail address (%(email)s)." | |
533 | msgstr "Ezin duzu zure helbide elektroniko nagusia ezabatu (%(email)s)." | |
534 | ||
535 | #: templates/account/messages/email_confirmation_sent.txt:2 | |
536 | #, python-format | |
537 | msgid "Confirmation e-mail sent to %(email)s." | |
538 | msgstr "Egiaztapen emaila bidali da %(email)s helbidera." | |
539 | ||
540 | #: templates/account/messages/email_confirmed.txt:2 | |
541 | #, python-format | |
542 | msgid "You have confirmed %(email)s." | |
543 | msgstr "%(email)s emaila egiaztatu duzu." | |
544 | ||
545 | #: templates/account/messages/email_deleted.txt:2 | |
546 | #, python-format | |
547 | msgid "Removed e-mail address %(email)s." | |
548 | msgstr "%(email)s helbide elektronikoa ezabatu da." | |
549 | ||
550 | #: templates/account/messages/logged_in.txt:4 | |
551 | #, python-format | |
552 | msgid "Successfully signed in as %(name)s." | |
553 | msgstr "%(name)s bezala hasi duzu saioa." | |
554 | ||
555 | #: templates/account/messages/logged_out.txt:2 | |
556 | msgid "You have signed out." | |
557 | msgstr "Saioa amaitu duzu." | |
558 | ||
559 | #: templates/account/messages/password_changed.txt:2 | |
560 | msgid "Password successfully changed." | |
561 | msgstr "Pasahitza behar bezala aldatu da." | |
562 | ||
563 | #: templates/account/messages/password_set.txt:2 | |
564 | msgid "Password successfully set." | |
565 | msgstr "Pasahitza behar bezala zehaztu da." | |
566 | ||
567 | #: templates/account/messages/primary_email_set.txt:2 | |
568 | msgid "Primary e-mail address set." | |
569 | msgstr "Helbide elektroniko nagusia zehaztu da." | |
570 | ||
571 | #: templates/account/messages/unverified_primary_email.txt:2 | |
572 | msgid "Your primary e-mail address must be verified." | |
573 | msgstr "Zure email nagusiak egiaztatuta egon behar du." | |
574 | ||
575 | #: templates/account/password_change.html:5 | |
576 | #: templates/account/password_change.html:8 | |
577 | #: templates/account/password_change.html:13 | |
578 | #: templates/account/password_reset_from_key.html:4 | |
579 | #: templates/account/password_reset_from_key.html:7 | |
580 | #: templates/account/password_reset_from_key_done.html:4 | |
581 | #: templates/account/password_reset_from_key_done.html:7 | |
582 | msgid "Change Password" | |
583 | msgstr "Pasahitza aldatu" | |
584 | ||
585 | #: templates/account/password_reset.html:6 | |
586 | #: templates/account/password_reset.html:10 | |
587 | #: templates/account/password_reset_done.html:6 | |
588 | #: templates/account/password_reset_done.html:9 | |
589 | msgid "Password Reset" | |
590 | msgstr "Pasahitza berrezarri" | |
591 | ||
592 | #: templates/account/password_reset.html:15 | |
593 | msgid "" | |
594 | "Forgotten your password? Enter your e-mail address below, and we'll send you " | |
595 | "an e-mail allowing you to reset it." | |
596 | msgstr "" | |
597 | "Zure pasahitza ahaztu al duzu? Idatzi zure helbide elektronikoa hemen eta " | |
598 | "pasahitza berrezartzeko email bat bidaliko dizugu." | |
599 | ||
600 | #: templates/account/password_reset.html:20 | |
601 | msgid "Reset My Password" | |
602 | msgstr "Nire pasahitza berrezarri" | |
603 | ||
604 | #: templates/account/password_reset.html:23 | |
605 | msgid "Please contact us if you have any trouble resetting your password." | |
606 | msgstr "" | |
607 | "Mesedez jarri gurekin kontaktuan zure pasahitza berrezartzeko arazorik " | |
608 | "baduzu." | |
609 | ||
610 | #: templates/account/password_reset_done.html:15 | |
611 | msgid "" | |
612 | "We have sent you an e-mail. Please contact us if you do not receive it " | |
613 | "within a few minutes." | |
614 | msgstr "" | |
615 | "Email bat bidali dizugu. Mesedez jarri gurekin kontaktuan hurrengo " | |
616 | "minutuetan jasotzen ez baduzu." | |
617 | ||
618 | #: templates/account/password_reset_from_key.html:7 | |
619 | msgid "Bad Token" | |
620 | msgstr "Token baliogabea" | |
621 | ||
622 | #: templates/account/password_reset_from_key.html:11 | |
623 | #, python-format | |
624 | msgid "" | |
625 | "The password reset link was invalid, possibly because it has already been " | |
626 | "used. Please request a <a href=\"%(passwd_reset_url)s\">new password reset</" | |
627 | "a>." | |
628 | msgstr "" | |
629 | "Pasahitza berrezartzeko esteka baliogabea da, beharbada lehendik ere erabili " | |
630 | "delako. Mesedez eskatu <a href=\"%(passwd_reset_url)s\">pasahitza " | |
631 | "berrezartzeko email berri bat</a>." | |
632 | ||
633 | #: templates/account/password_reset_from_key.html:17 | |
634 | msgid "change password" | |
635 | msgstr "pasahitza aldatu" | |
636 | ||
637 | #: templates/account/password_reset_from_key.html:20 | |
638 | #: templates/account/password_reset_from_key_done.html:8 | |
639 | msgid "Your password is now changed." | |
640 | msgstr "Zure pasahitza aldatuta dago orain." | |
641 | ||
642 | #: templates/account/password_set.html:5 templates/account/password_set.html:8 | |
643 | #: templates/account/password_set.html:13 | |
644 | msgid "Set Password" | |
645 | msgstr "Pasahitza zehaztu" | |
646 | ||
647 | #: templates/account/signup.html:5 templates/socialaccount/signup.html:5 | |
648 | msgid "Signup" | |
649 | msgstr "Kontua sortu" | |
650 | ||
651 | #: templates/account/signup.html:8 templates/account/signup.html:18 | |
652 | #: templates/socialaccount/signup.html:8 templates/socialaccount/signup.html:19 | |
653 | msgid "Sign Up" | |
654 | msgstr "Kontua sortu" | |
655 | ||
656 | #: templates/account/signup.html:10 | |
657 | #, python-format | |
658 | msgid "" | |
659 | "Already have an account? Then please <a href=\"%(login_url)s\">sign in</a>." | |
660 | msgstr "" | |
661 | "Lehendik kontu bat sortua duzu? <a href=\"%(login_url)s\">Saioa hasi</a> " | |
662 | "orduan." | |
663 | ||
664 | #: templates/account/signup_closed.html:5 | |
665 | #: templates/account/signup_closed.html:8 | |
666 | msgid "Sign Up Closed" | |
667 | msgstr "Ezin da konturik sortu iada" | |
668 | ||
669 | #: templates/account/signup_closed.html:10 | |
670 | msgid "We are sorry, but the sign up is currently closed." | |
671 | msgstr "Sentitzen dugu baina ezin da kontu berririk sortu." | |
672 | ||
673 | #: templates/account/snippets/already_logged_in.html:5 | |
674 | msgid "Note" | |
675 | msgstr "Oharra" | |
676 | ||
677 | #: templates/account/snippets/already_logged_in.html:5 | |
678 | #, python-format | |
679 | msgid "you are already logged in as %(user_display)s." | |
680 | msgstr "lehendik saioa hasita duzu %(user_display)s bezala." | |
681 | ||
682 | #: templates/account/verification_sent.html:5 | |
683 | #: templates/account/verification_sent.html:8 | |
684 | #: templates/account/verified_email_required.html:5 | |
685 | #: templates/account/verified_email_required.html:8 | |
686 | msgid "Verify Your E-mail Address" | |
687 | msgstr "Zure helbide elektronikoa egiaztatu" | |
688 | ||
689 | #: templates/account/verification_sent.html:10 | |
690 | msgid "" | |
691 | "We have sent an e-mail to you for verification. Follow the link provided to " | |
692 | "finalize the signup process. Please contact us if you do not receive it " | |
693 | "within a few minutes." | |
694 | msgstr "" | |
695 | "Email bat bidali dizugu zure helbidea egiaztatzeko. Mesedez egin klik bertan " | |
696 | "aurkituko duzun estekan kontua sortzeko prozesua amaitzeko, edo jarri " | |
697 | "gurekin kontaktuan hurrengo minutuetan emailik jasotzen ez baduzu." | |
698 | ||
699 | #: templates/account/verified_email_required.html:12 | |
700 | msgid "" | |
701 | "This part of the site requires us to verify that\n" | |
702 | "you are who you claim to be. For this purpose, we require that you\n" | |
703 | "verify ownership of your e-mail address. " | |
704 | msgstr "" | |
705 | "Webguneko atal honek zuk diozuna zarela egiaztatzea\n" | |
706 | "eskatzen digu. Honetarako zure helbide elektronikoa\n" | |
707 | "egiaztatzea beharrezkoa da. " | |
708 | ||
709 | #: templates/account/verified_email_required.html:16 | |
710 | msgid "" | |
711 | "We have sent an e-mail to you for\n" | |
712 | "verification. Please click on the link inside this e-mail. Please\n" | |
713 | "contact us if you do not receive it within a few minutes." | |
714 | msgstr "" | |
715 | "Email bat bidali dizugu zure helbidea egiaztatzeko.\n" | |
716 | "Mesedez egin klik bertan aurkituko duzun estekan,\n" | |
717 | "edo jarri gurekin kontaktuan hurrengo minutuetan\n" | |
718 | "emailik jasotzen ez baduzu." | |
719 | ||
720 | #: templates/account/verified_email_required.html:20 | |
721 | #, python-format | |
722 | msgid "" | |
723 | "<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change your e-" | |
724 | "mail address</a>." | |
725 | msgstr "" | |
726 | "<strong>Oharra:</strong> oraindik <a href=\"%(email_url)s\">zure helbide " | |
727 | "elektronikoa aldatu</a> dezakezu." | |
728 | ||
729 | #: templates/openid/login.html:9 | |
730 | msgid "OpenID Sign In" | |
731 | msgstr "OpenID-rekin sartu" | |
732 | ||
733 | #: templates/socialaccount/authentication_error.html:5 | |
734 | #: templates/socialaccount/authentication_error.html:8 | |
735 | msgid "Social Network Login Failure" | |
736 | msgstr "Arazoak sare sozialarekin logina egitean" | |
737 | ||
738 | #: templates/socialaccount/authentication_error.html:10 | |
739 | msgid "" | |
740 | "An error occurred while attempting to login via your social network account." | |
741 | msgstr "" | |
742 | "Arazoren bat izan da zure sare sozial kontua erabiltzen saioa hasteko " | |
743 | "ahaleginean." | |
744 | ||
745 | #: templates/socialaccount/connections.html:5 | |
746 | #: templates/socialaccount/connections.html:8 | |
747 | msgid "Account Connections" | |
748 | msgstr "Lotutako kontuak" | |
749 | ||
750 | #: templates/socialaccount/connections.html:11 | |
751 | msgid "" | |
752 | "You can sign in to your account using any of the following third party " | |
753 | "accounts:" | |
754 | msgstr "" | |
755 | "Ondorengo zerbitzu hauetako edozein erabili dezakezu zure kontuan sartzeko:" | |
756 | ||
757 | #: templates/socialaccount/connections.html:43 | |
758 | msgid "" | |
759 | "You currently have no social network accounts connected to this account." | |
760 | msgstr "Oraingoz ez duzu sare sozial konturik lotu kontu honekin." | |
761 | ||
762 | #: templates/socialaccount/connections.html:46 | |
763 | msgid "Add a 3rd Party Account" | |
764 | msgstr "Sare sozial kontu bat gehitu" | |
765 | ||
766 | #: templates/socialaccount/login_cancelled.html:5 | |
767 | #: templates/socialaccount/login_cancelled.html:9 | |
768 | msgid "Login Cancelled" | |
769 | msgstr "Baliogabetutako logina" | |
770 | ||
771 | #: templates/socialaccount/login_cancelled.html:13 | |
772 | #, python-format | |
773 | msgid "" | |
774 | "You decided to cancel logging in to our site using one of your existing " | |
775 | "accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s" | |
776 | "\">sign in</a>." | |
777 | msgstr "" | |
778 | "Lotutako kontu batekin saioa hasteko saiakera bertan behera utzi duzu. " | |
779 | "Oharkabean gertatu bada, mesedez <a href=\"%(login_url)s\">saioa hasi</a> " | |
780 | "berriro." | |
781 | ||
782 | #: templates/socialaccount/messages/account_connected.txt:2 | |
783 | msgid "The social account has been connected." | |
784 | msgstr "Sare sozial kontua behar bezala lotu da." | |
785 | ||
786 | #: templates/socialaccount/messages/account_connected_other.txt:2 | |
787 | msgid "The social account is already connected to a different account." | |
788 | msgstr "Sare sozial kontua dagoeneko beste kontu bati lotuta dago." | |
789 | ||
790 | #: templates/socialaccount/messages/account_disconnected.txt:2 | |
791 | msgid "The social account has been disconnected." | |
792 | msgstr "Sare sozial kontu honekin lotura ezabatu da." | |
793 | ||
794 | #: templates/socialaccount/signup.html:10 | |
795 | #, python-format | |
796 | msgid "" | |
797 | "You are about to use your %(provider_name)s account to login to\n" | |
798 | "%(site_name)s. As a final step, please complete the following form:" | |
799 | msgstr "" | |
800 | "Zure %(provider_name)s kontua erabiltzear zaude %(site_name)s\n" | |
801 | "webgunean saioa hasteko. Azken pausu bezala, mesedez osa ezazu\n" | |
802 | "formulario hau:" |
5 | 5 | msgstr "" |
6 | 6 | "Project-Id-Version: \n" |
7 | 7 | "Report-Msgid-Bugs-To: \n" |
8 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
8 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
9 | 9 | "PO-Revision-Date: 2015-09-14 12:40-0000\n" |
10 | 10 | "Last-Translator: NARIMAN GHARIB <NARIMAN.GH@GMAIL.COM>\n" |
11 | 11 | "Language-Team: \n" |
27 | 27 | msgid "A user is already registered with this e-mail address." |
28 | 28 | msgstr "کاربر دیگری قبلا با این نام کاربری ثبت نام کرده است." |
29 | 29 | |
30 | #: account/adapter.py:288 | |
30 | #: account/adapter.py:294 | |
31 | 31 | #, python-brace-format |
32 | 32 | msgid "Password must be a minimum of {0} characters." |
33 | 33 | msgstr "پسورد تنها میتواند دارای {0} کاراکتر باشد." |
7 | 7 | msgstr "" |
8 | 8 | "Project-Id-Version: PACKAGE VERSION\n" |
9 | 9 | "Report-Msgid-Bugs-To: \n" |
10 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
10 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
11 | 11 | "PO-Revision-Date: 2015-08-13 15:17+0300\n" |
12 | 12 | "Last-Translator: Anonymous User <seppo.erviala@iki.fi>\n" |
13 | 13 | "Language-Team: LANGUAGE <LL@li.org>\n" |
31 | 31 | msgid "A user is already registered with this e-mail address." |
32 | 32 | msgstr "Tämä sähköpostiosoite on jo käytössä." |
33 | 33 | |
34 | #: account/adapter.py:288 | |
34 | #: account/adapter.py:294 | |
35 | 35 | #, python-brace-format |
36 | 36 | msgid "Password must be a minimum of {0} characters." |
37 | 37 | msgstr "Salasanan tulee olla vähintään {0} merkkiä pitkä." |
8 | 8 | msgstr "" |
9 | 9 | "Project-Id-Version: django-allauth\n" |
10 | 10 | "Report-Msgid-Bugs-To: \n" |
11 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
11 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
12 | 12 | "PO-Revision-Date: 2016-10-06 15:16+0200\n" |
13 | 13 | "Last-Translator: Steve Kossouho <steve.kossouho@yahoo.fr>\n" |
14 | 14 | "Language-Team: français <>\n" |
32 | 32 | msgid "A user is already registered with this e-mail address." |
33 | 33 | msgstr "Un autre utilisateur utilise déjà cette adresse e-mail." |
34 | 34 | |
35 | #: account/adapter.py:288 | |
35 | #: account/adapter.py:294 | |
36 | 36 | #, python-brace-format |
37 | 37 | msgid "Password must be a minimum of {0} characters." |
38 | 38 | msgstr "Le mot de passe doit contenir au minimum {0} caractères." |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: 0.1\n" |
8 | 8 | "Report-Msgid-Bugs-To: \n" |
9 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
9 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
10 | 10 | "PO-Revision-Date: 2017-08-26 16:11+0300\n" |
11 | 11 | "Last-Translator: Udi Oron <udioron@gmail.com>\n" |
12 | 12 | "Language-Team: Hebrew\n" |
29 | 29 | msgid "A user is already registered with this e-mail address." |
30 | 30 | msgstr "משתמש אחר כבר רשום עם כתובת אימייל זו." |
31 | 31 | |
32 | #: account/adapter.py:288 | |
32 | #: account/adapter.py:294 | |
33 | 33 | #, python-brace-format |
34 | 34 | msgid "Password must be a minimum of {0} characters." |
35 | 35 | msgstr "הסיסמה חייבת להיות באורך של לפחות {0} תווים." |
9 | 9 | msgstr "" |
10 | 10 | "Project-Id-Version: PACKAGE VERSION\n" |
11 | 11 | "Report-Msgid-Bugs-To: \n" |
12 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
12 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
13 | 13 | "PO-Revision-Date: 2014-08-12 00:31+0200\n" |
14 | 14 | "Last-Translator: <goran.cetusic@gmail.com>\n" |
15 | 15 | "Language-Team: Bojan Mihelac <bmihelac@mihelac.org>\n" |
34 | 34 | msgid "A user is already registered with this e-mail address." |
35 | 35 | msgstr "Već postoji korisnik registriran s ovom e-mail adresom." |
36 | 36 | |
37 | #: account/adapter.py:288 | |
37 | #: account/adapter.py:294 | |
38 | 38 | #, python-brace-format |
39 | 39 | msgid "Password must be a minimum of {0} characters." |
40 | 40 | msgstr "Lozinka treba imati najmanje {0} znakova." |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: \n" |
8 | 8 | "Report-Msgid-Bugs-To: \n" |
9 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
9 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
10 | 10 | "PO-Revision-Date: 2015-05-08 22:42+0100\n" |
11 | 11 | "Last-Translator: Tamás Makó <tom@greenplug.hu>\n" |
12 | 12 | "Language-Team: \n" |
28 | 28 | msgid "A user is already registered with this e-mail address." |
29 | 29 | msgstr "Egy felhasználó már regisztrált ezzel az email címmel." |
30 | 30 | |
31 | #: account/adapter.py:288 | |
31 | #: account/adapter.py:294 | |
32 | 32 | #, python-brace-format |
33 | 33 | msgid "Password must be a minimum of {0} characters." |
34 | 34 | msgstr "A jelszónak minimum {0} hosszúnak kell lennnie." |
9 | 9 | msgstr "" |
10 | 10 | "Project-Id-Version: django-allauth\n" |
11 | 11 | "Report-Msgid-Bugs-To: \n" |
12 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
12 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
13 | 13 | "PO-Revision-Date: 2018-03-08 00:40+0100\n" |
14 | 14 | "Last-Translator: joke2k <joke2k@gmail.com>\n" |
15 | 15 | "Language-Team: Italian (http://www.transifex.com/projects/p/django-allauth/" |
32 | 32 | msgid "A user is already registered with this e-mail address." |
33 | 33 | msgstr "Un altro utente si è già registrato con questo indirizzo e-mail." |
34 | 34 | |
35 | #: account/adapter.py:288 | |
35 | #: account/adapter.py:294 | |
36 | 36 | #, python-brace-format |
37 | 37 | msgid "Password must be a minimum of {0} characters." |
38 | 38 | msgstr "La password deve essere lunga almeno {0} caratteri." |
7 | 7 | msgstr "" |
8 | 8 | "Project-Id-Version: PACKAGE VERSION\n" |
9 | 9 | "Report-Msgid-Bugs-To: \n" |
10 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
10 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
11 | 11 | "PO-Revision-Date: 2014-08-12 00:32+0200\n" |
12 | 12 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
13 | 13 | "Language-Team: LANGUAGE <LL@li.org>\n" |
29 | 29 | msgid "A user is already registered with this e-mail address." |
30 | 30 | msgstr "他のユーザーがこのメールアドレスを使用しています。" |
31 | 31 | |
32 | #: account/adapter.py:288 | |
32 | #: account/adapter.py:294 | |
33 | 33 | #, python-brace-format |
34 | 34 | msgid "Password must be a minimum of {0} characters." |
35 | 35 | msgstr "パスワードは {0} 文字以上の長さが必要です。" |
7 | 7 | msgstr "" |
8 | 8 | "Project-Id-Version: PACKAGE VERSION\n" |
9 | 9 | "Report-Msgid-Bugs-To: \n" |
10 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
10 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
11 | 11 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
12 | 12 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
13 | 13 | "Language-Team: LANGUAGE <LL@li.org>\n" |
29 | 29 | msgid "A user is already registered with this e-mail address." |
30 | 30 | msgstr "해당 이메일은 이미 사용되고 있습니다." |
31 | 31 | |
32 | #: account/adapter.py:288 | |
32 | #: account/adapter.py:294 | |
33 | 33 | #, python-brace-format |
34 | 34 | msgid "Password must be a minimum of {0} characters." |
35 | 35 | msgstr "비밀번호는 최소 {0}자 이상이어야 합니다." |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: PACKAGE VERSION\n" |
8 | 8 | "Report-Msgid-Bugs-To: \n" |
9 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
9 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
10 | 10 | "PO-Revision-Date: 2016-07-20 22:24+0600\n" |
11 | 11 | "Last-Translator: Murat Jumashev <jumasheff at gmail dot com>\n" |
12 | 12 | "Language-Team: LANGUAGE <LL@li.org>\n" |
28 | 28 | msgid "A user is already registered with this e-mail address." |
29 | 29 | msgstr "Мындай эмейл менен катталган колдонуучу бар." |
30 | 30 | |
31 | #: account/adapter.py:288 | |
31 | #: account/adapter.py:294 | |
32 | 32 | #, python-brace-format |
33 | 33 | msgid "Password must be a minimum of {0} characters." |
34 | 34 | msgstr "Купуя жок дегенде {0} белгиден турушу керек." |
7 | 7 | msgstr "" |
8 | 8 | "Project-Id-Version: PACKAGE VERSION\n" |
9 | 9 | "Report-Msgid-Bugs-To: \n" |
10 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
10 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
11 | 11 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
12 | 12 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
13 | 13 | "Language-Team: LANGUAGE <LL@li.org>\n" |
31 | 31 | msgid "A user is already registered with this e-mail address." |
32 | 32 | msgstr "Šiuo el. pašto adresu jau yra užsiregistravęs kitas naudotojas." |
33 | 33 | |
34 | #: account/adapter.py:288 | |
34 | #: account/adapter.py:294 | |
35 | 35 | #, python-brace-format |
36 | 36 | msgid "Password must be a minimum of {0} characters." |
37 | 37 | msgstr "Slaptažodis turi būti sudarytas mažiausiai iš {0} simbolių." |
7 | 7 | msgstr "" |
8 | 8 | "Project-Id-Version: PACKAGE VERSION\n" |
9 | 9 | "Report-Msgid-Bugs-To: \n" |
10 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
10 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
11 | 11 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
12 | 12 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
13 | 13 | "Language-Team: LANGUAGE <LL@li.org>\n" |
32 | 32 | msgid "A user is already registered with this e-mail address." |
33 | 33 | msgstr "Lietotājs ar šādu e-pasta adresi jau ir reģistrēts." |
34 | 34 | |
35 | #: account/adapter.py:288 | |
35 | #: account/adapter.py:294 | |
36 | 36 | #, python-brace-format |
37 | 37 | msgid "Password must be a minimum of {0} characters." |
38 | 38 | msgstr "Parolei jābūt vismaz {0} simbolus garai." |
7 | 7 | msgstr "" |
8 | 8 | "Project-Id-Version: django-allauth\n" |
9 | 9 | "Report-Msgid-Bugs-To: \n" |
10 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
10 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
11 | 11 | "PO-Revision-Date: 2016-07-25 15:18+0200\n" |
12 | 12 | "Last-Translator: pennersr <raymond.penners@intenct.nl>\n" |
13 | 13 | "Language-Team: Dutch (http://www.transifex.com/projects/p/django-allauth/" |
30 | 30 | msgid "A user is already registered with this e-mail address." |
31 | 31 | msgstr "Er is al een gebruiker geregistreerd met dit e-mailadres." |
32 | 32 | |
33 | #: account/adapter.py:288 | |
33 | #: account/adapter.py:294 | |
34 | 34 | #, python-brace-format |
35 | 35 | msgid "Password must be a minimum of {0} characters." |
36 | 36 | msgstr "Het wachtwoord moet minimaal {0} tekens bevatten." |
7 | 7 | msgstr "" |
8 | 8 | "Project-Id-Version: PACKAGE VERSION\n" |
9 | 9 | "Report-Msgid-Bugs-To: \n" |
10 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
10 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
11 | 11 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
12 | 12 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
13 | 13 | "Language-Team: LANGUAGE <LL@li.org>\n" |
28 | 28 | msgid "A user is already registered with this e-mail address." |
29 | 29 | msgstr "En bruker med følgende e-postadresse er allerede registrert." |
30 | 30 | |
31 | #: account/adapter.py:288 | |
31 | #: account/adapter.py:294 | |
32 | 32 | #, python-brace-format |
33 | 33 | msgid "Password must be a minimum of {0} characters." |
34 | 34 | msgstr "Passordet må være minst {0} tegn." |
5 | 5 | msgstr "" |
6 | 6 | "Project-Id-Version: \n" |
7 | 7 | "Report-Msgid-Bugs-To: \n" |
8 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
8 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
9 | 9 | "PO-Revision-Date: 2016-12-05 10:43+0100\n" |
10 | 10 | "Last-Translator: Adam Dobrawy <naczelnik@jawnosc.tk>\n" |
11 | 11 | "Language-Team: \n" |
27 | 27 | msgid "A user is already registered with this e-mail address." |
28 | 28 | msgstr "W systemie jest już zarejestrowany użytkownik o tym adresie e-mail." |
29 | 29 | |
30 | #: account/adapter.py:288 | |
30 | #: account/adapter.py:294 | |
31 | 31 | #, python-brace-format |
32 | 32 | msgid "Password must be a minimum of {0} characters." |
33 | 33 | msgstr "Hasło musi składać się minimalnie z {0} znaków." |
10 | 10 | msgstr "" |
11 | 11 | "Project-Id-Version: django-allauth\n" |
12 | 12 | "Report-Msgid-Bugs-To: \n" |
13 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
13 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
14 | 14 | "PO-Revision-Date: 2014-12-01 01:20+0000\n" |
15 | 15 | "Last-Translator: cacarrara <caiocarrara@gmail.com>\n" |
16 | 16 | "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/" |
33 | 33 | msgid "A user is already registered with this e-mail address." |
34 | 34 | msgstr "Um usuário já foi registado com este endereço de e-mail." |
35 | 35 | |
36 | #: account/adapter.py:288 | |
36 | #: account/adapter.py:294 | |
37 | 37 | #, python-brace-format |
38 | 38 | msgid "Password must be a minimum of {0} characters." |
39 | 39 | msgstr "A senha deve ter no mínimo {0} caracteres." |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: django-allauth\n" |
8 | 8 | "Report-Msgid-Bugs-To: \n" |
9 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
9 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
10 | 10 | "PO-Revision-Date: 2014-08-12 00:33+0200\n" |
11 | 11 | "Last-Translator: Jannis \n" |
12 | 12 | "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/" |
29 | 29 | msgid "A user is already registered with this e-mail address." |
30 | 30 | msgstr "Um utilizador já foi registado com este endereço de e-mail." |
31 | 31 | |
32 | #: account/adapter.py:288 | |
32 | #: account/adapter.py:294 | |
33 | 33 | #, python-brace-format |
34 | 34 | msgid "Password must be a minimum of {0} characters." |
35 | 35 | msgstr "A palavra-passe deve ter no mínimo {0} caracteres." |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: \n" |
8 | 8 | "Report-Msgid-Bugs-To: \n" |
9 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
9 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
10 | 10 | "PO-Revision-Date: 2017-04-05 22:48+0300\n" |
11 | 11 | "Last-Translator: \n" |
12 | 12 | "Language-Team: \n" |
28 | 28 | msgid "A user is already registered with this e-mail address." |
29 | 29 | msgstr "Пользователь с таким e-mail адресом уже зарегистрирован." |
30 | 30 | |
31 | #: account/adapter.py:288 | |
31 | #: account/adapter.py:294 | |
32 | 32 | #, python-brace-format |
33 | 33 | msgid "Password must be a minimum of {0} characters." |
34 | 34 | msgstr "Минимальное количество символов в пароле: {0}." |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: \n" |
8 | 8 | "Report-Msgid-Bugs-To: \n" |
9 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
9 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
10 | 10 | "PO-Revision-Date: 2017-04-26 12:48+0200\n" |
11 | 11 | "Last-Translator: Tomas Babej <tomasbabej@gmail.com>\n" |
12 | 12 | "Language-Team: \n" |
28 | 28 | msgid "A user is already registered with this e-mail address." |
29 | 29 | msgstr "Používateľ s touto e-mailovou adresou už existuje." |
30 | 30 | |
31 | #: account/adapter.py:288 | |
31 | #: account/adapter.py:294 | |
32 | 32 | #, python-brace-format |
33 | 33 | msgid "Password must be a minimum of {0} characters." |
34 | 34 | msgstr "Heslo musí mať aspoň {0} znakov." |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: django-allauth\n" |
8 | 8 | "Report-Msgid-Bugs-To: \n" |
9 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
9 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
10 | 10 | "PO-Revision-Date: 2014-08-12 00:35+0200\n" |
11 | 11 | "Last-Translator: Jannis \n" |
12 | 12 | "Language-Team: Swedish (http://www.transifex.com/projects/p/django-allauth/" |
29 | 29 | msgid "A user is already registered with this e-mail address." |
30 | 30 | msgstr "En användare är redan registrerad med den här epost-adressen" |
31 | 31 | |
32 | #: account/adapter.py:288 | |
32 | #: account/adapter.py:294 | |
33 | 33 | #, python-brace-format |
34 | 34 | msgid "Password must be a minimum of {0} characters." |
35 | 35 | msgstr "Lösenordet måste vara minst {0} tecken långt" |
9 | 9 | msgstr "" |
10 | 10 | "Project-Id-Version: django-allauth\n" |
11 | 11 | "Report-Msgid-Bugs-To: \n" |
12 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
12 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
13 | 13 | "PO-Revision-Date: 2015-06-26 13:09+0700\n" |
14 | 14 | "Last-Translator: Nattaphoom Chaipreecha <attomos@gmail.com>\n" |
15 | 15 | "Language-Team: Thai <LL@li.org>\n" |
31 | 31 | msgid "A user is already registered with this e-mail address." |
32 | 32 | msgstr "ชื่อผู้ใช้ได้ถูกลงทะเบียนด้วยอีเมลนี้แล้ว" |
33 | 33 | |
34 | #: account/adapter.py:288 | |
34 | #: account/adapter.py:294 | |
35 | 35 | #, python-brace-format |
36 | 36 | msgid "Password must be a minimum of {0} characters." |
37 | 37 | msgstr "รหัสผ่านต้องมีอย่างน้อย {0} ตัวอักษร" |
7 | 7 | msgstr "" |
8 | 8 | "Project-Id-Version: django-allauth\n" |
9 | 9 | "Report-Msgid-Bugs-To: \n" |
10 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
10 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
11 | 11 | "PO-Revision-Date: 2014-08-12 00:35+0200\n" |
12 | 12 | "Last-Translator: Jannis \n" |
13 | 13 | "Language-Team: Turkish (http://www.transifex.com/projects/p/django-allauth/" |
30 | 30 | msgid "A user is already registered with this e-mail address." |
31 | 31 | msgstr "Bu e-posta adresiyle bir kullanıcı zaten kayıtlı." |
32 | 32 | |
33 | #: account/adapter.py:288 | |
33 | #: account/adapter.py:294 | |
34 | 34 | #, python-brace-format |
35 | 35 | msgid "Password must be a minimum of {0} characters." |
36 | 36 | msgstr "Parola en az {0} karakter olmalıdır." |
175 | 175 | |
176 | 176 | #: account/models.py:83 |
177 | 177 | msgid "created" |
178 | msgstr "" | |
178 | msgstr "oluşturuldu" | |
179 | 179 | |
180 | 180 | #: account/models.py:85 |
181 | 181 | msgid "sent" |
182 | msgstr "" | |
182 | msgstr "gönderildi" | |
183 | 183 | |
184 | 184 | #: account/models.py:86 socialaccount/models.py:55 |
185 | 185 | msgid "key" |
217 | 217 | |
218 | 218 | #: socialaccount/models.py:43 socialaccount/models.py:77 |
219 | 219 | msgid "provider" |
220 | msgstr "" | |
220 | msgstr "sağlayıcı" | |
221 | 221 | |
222 | 222 | #: socialaccount/models.py:46 |
223 | 223 | #, fuzzy |
258 | 258 | |
259 | 259 | #: socialaccount/models.py:98 |
260 | 260 | msgid "last login" |
261 | msgstr "" | |
261 | msgstr "son giriş" | |
262 | 262 | |
263 | 263 | #: socialaccount/models.py:100 |
264 | 264 | msgid "date joined" |
265 | msgstr "" | |
265 | msgstr "katıldığı tarih" | |
266 | 266 | |
267 | 267 | #: socialaccount/models.py:102 |
268 | 268 | msgid "extra data" |
306 | 306 | |
307 | 307 | #: socialaccount/providers/douban/views.py:36 |
308 | 308 | msgid "Invalid profile data" |
309 | msgstr "" | |
309 | msgstr "Geçersiz profil bilgisi" | |
310 | 310 | |
311 | 311 | #: socialaccount/providers/oauth/client.py:78 |
312 | 312 | #, python-format |
427 | 427 | "Thank you from %(site_name)s!\n" |
428 | 428 | "%(site_domain)s" |
429 | 429 | msgstr "" |
430 | "%(site_name)s: Teşekkürler!\n" | |
431 | "%(site_domain)s" | |
430 | 432 | |
431 | 433 | #: templates/account/email/email_confirmation_subject.txt:3 |
432 | 434 | #, fuzzy |
531 | 533 | #: templates/account/logout.html:5 templates/account/logout.html:8 |
532 | 534 | #: templates/account/logout.html:17 |
533 | 535 | msgid "Sign Out" |
534 | msgstr "" | |
536 | msgstr "Çıkış Yap" | |
535 | 537 | |
536 | 538 | #: templates/account/logout.html:10 |
537 | 539 | msgid "Are you sure you want to sign out?" |
538 | msgstr "" | |
540 | msgstr "Çıkış yapmak istediğinize emin misiniz?" | |
539 | 541 | |
540 | 542 | #: templates/account/messages/cannot_delete_primary_email.txt:2 |
541 | 543 | #, python-format |
545 | 547 | #: templates/account/messages/email_confirmation_sent.txt:2 |
546 | 548 | #, python-format |
547 | 549 | msgid "Confirmation e-mail sent to %(email)s." |
548 | msgstr "" | |
550 | msgstr "Doğrulama e-posta'sı %(email)s adresine gönderildi." | |
549 | 551 | |
550 | 552 | #: templates/account/messages/email_confirmed.txt:2 |
551 | 553 | #, python-format |
555 | 557 | #: templates/account/messages/email_deleted.txt:2 |
556 | 558 | #, python-format |
557 | 559 | msgid "Removed e-mail address %(email)s." |
558 | msgstr "" | |
560 | msgstr "%(email)s adresini sildiniz." | |
559 | 561 | |
560 | 562 | #: templates/account/messages/logged_in.txt:4 |
561 | 563 | #, python-format |
562 | 564 | msgid "Successfully signed in as %(name)s." |
563 | msgstr "" | |
565 | msgstr "%(name)s olarak başarıyla giriş yapıldı." | |
564 | 566 | |
565 | 567 | #: templates/account/messages/logged_out.txt:2 |
566 | 568 | msgid "You have signed out." |
627 | 629 | |
628 | 630 | #: templates/account/password_reset_from_key.html:7 |
629 | 631 | msgid "Bad Token" |
630 | msgstr "Kötü kod" | |
632 | msgstr "" | |
631 | 633 | |
632 | 634 | #: templates/account/password_reset_from_key.html:11 |
633 | 635 | #, python-format |
674 | 676 | #: templates/account/signup_closed.html:5 |
675 | 677 | #: templates/account/signup_closed.html:8 |
676 | 678 | msgid "Sign Up Closed" |
677 | msgstr "" | |
679 | msgstr "Kayıt Kapalı" | |
678 | 680 | |
679 | 681 | #: templates/account/signup_closed.html:10 |
680 | 682 | msgid "We are sorry, but the sign up is currently closed." |
7 | 7 | msgstr "" |
8 | 8 | "Project-Id-Version: PACKAGE VERSION\n" |
9 | 9 | "Report-Msgid-Bugs-To: \n" |
10 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
10 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
11 | 11 | "PO-Revision-Date: 2014-08-12 00:36+0200\n" |
12 | 12 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
13 | 13 | "Language-Team: LANGUAGE <LL@li.org>\n" |
32 | 32 | msgid "A user is already registered with this e-mail address." |
33 | 33 | msgstr "Користувач з такою e-mail адресою уже зареєстрований." |
34 | 34 | |
35 | #: account/adapter.py:288 | |
35 | #: account/adapter.py:294 | |
36 | 36 | #, python-brace-format |
37 | 37 | msgid "Password must be a minimum of {0} characters." |
38 | 38 | msgstr "Пароль повинен містити мінімум {0} символів." |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: django-allauth\n" |
8 | 8 | "Report-Msgid-Bugs-To: \n" |
9 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
9 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
10 | 10 | "PO-Revision-Date: 2014-08-12 00:36+0200\n" |
11 | 11 | "Last-Translator: jresins <jresins@gmail.com>\n" |
12 | 12 | "Language-Team: LANGUAGE <LL@li.org>\n" |
27 | 27 | msgid "A user is already registered with this e-mail address." |
28 | 28 | msgstr "此e-mail地址已被其他用户注册。" |
29 | 29 | |
30 | #: account/adapter.py:288 | |
30 | #: account/adapter.py:294 | |
31 | 31 | #, python-brace-format |
32 | 32 | msgid "Password must be a minimum of {0} characters." |
33 | 33 | msgstr "密码长度不得少于 {0} 个字符。" |
7 | 7 | msgstr "" |
8 | 8 | "Project-Id-Version: PACKAGE VERSION\n" |
9 | 9 | "Report-Msgid-Bugs-To: \n" |
10 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
10 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
11 | 11 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
12 | 12 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
13 | 13 | "Language-Team: LANGUAGE <LL@li.org>\n" |
29 | 29 | msgid "A user is already registered with this e-mail address." |
30 | 30 | msgstr "此e-mail地址已被其他用户注册。" |
31 | 31 | |
32 | #: account/adapter.py:288 | |
32 | #: account/adapter.py:294 | |
33 | 33 | #, python-brace-format |
34 | 34 | msgid "Password must be a minimum of {0} characters." |
35 | 35 | msgstr "密码长度不得少于 {0} 个字符。" |
445 | 445 | "It can be safely ignored if you did not request a password reset. Click the " |
446 | 446 | "link below to reset your password." |
447 | 447 | msgstr "" |
448 | "您收到此邮件表示您或者他人在网站 %(site_domain)s上为您的账号请求了密码重" | |
449 | "置。\n" | |
448 | "您收到此邮件表示您或者他人在网站 %(site_name)s上为您的账号请求了密码重置。\n" | |
450 | 449 | "若您未请求密码重置,可以直接忽略此邮件。如要重置密码,请点击下面的链接。" |
451 | 450 | |
452 | 451 | #: templates/account/email/password_reset_key_message.txt:8 |
7 | 7 | msgstr "" |
8 | 8 | "Project-Id-Version: PACKAGE VERSION\n" |
9 | 9 | "Report-Msgid-Bugs-To: \n" |
10 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
10 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
11 | 11 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
12 | 12 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
13 | 13 | "Language-Team: LANGUAGE <LL@li.org>\n" |
29 | 29 | msgid "A user is already registered with this e-mail address." |
30 | 30 | msgstr "已經有人使用這一個電子郵件註冊了。" |
31 | 31 | |
32 | #: account/adapter.py:288 | |
32 | #: account/adapter.py:294 | |
33 | 33 | #, python-brace-format |
34 | 34 | msgid "Password must be a minimum of {0} characters." |
35 | 35 | msgstr "密碼長度至少要有 {0} 個字元。" |
5 | 5 | msgstr "" |
6 | 6 | "Project-Id-Version: django-allauth\n" |
7 | 7 | "Report-Msgid-Bugs-To: \n" |
8 | "POT-Creation-Date: 2018-05-08 00:43-0500\n" | |
8 | "POT-Creation-Date: 2018-08-27 05:00-0500\n" | |
9 | 9 | "PO-Revision-Date: 2014-08-12 00:36+0200\n" |
10 | 10 | "Last-Translator: jresins <jresins@gmail.com>\n" |
11 | 11 | "Language-Team: Chinese (Traditional)\n" |
26 | 26 | msgid "A user is already registered with this e-mail address." |
27 | 27 | msgstr "已經有人使用這一個電子郵件註冊了。" |
28 | 28 | |
29 | #: account/adapter.py:288 | |
29 | #: account/adapter.py:294 | |
30 | 30 | #, python-brace-format |
31 | 31 | msgid "Password must be a minimum of {0} characters." |
32 | 32 | msgstr "密碼長度至少要有 {0} 個字元。" |
0 | from allauth.socialaccount.providers.base import ProviderAccount | |
1 | from allauth.socialaccount.providers.oauth2.provider import OAuth2Provider | |
2 | ||
3 | ||
4 | class AgaveAccount(ProviderAccount): | |
5 | ||
6 | def get_profile_url(self): | |
7 | return self.account.extra_data.get('web_url', 'dflt') | |
8 | ||
9 | def get_avatar_url(self): | |
10 | return self.account.extra_data.get('avatar_url', 'dflt') | |
11 | ||
12 | def to_str(self): | |
13 | dflt = super(AgaveAccount, self).to_str() | |
14 | return self.account.extra_data.get('name', dflt) | |
15 | ||
16 | ||
17 | class AgaveProvider(OAuth2Provider): | |
18 | id = 'agave' | |
19 | name = 'Agave' | |
20 | account_class = AgaveAccount | |
21 | ||
22 | def extract_uid(self, data): | |
23 | return str(data.get('create_time')) | |
24 | ||
25 | def extract_common_fields(self, data): | |
26 | return dict( | |
27 | email=data.get('email'), | |
28 | username=data.get('username'), | |
29 | name=(data.get('first_name') + ' ' + data.get('last_name')), | |
30 | ) | |
31 | ||
32 | def get_default_scope(self): | |
33 | scope = ['PRODUCTION'] | |
34 | return scope | |
35 | ||
36 | ||
37 | provider_classes = [AgaveProvider] |
0 | from allauth.socialaccount.tests import OAuth2TestsMixin | |
1 | from allauth.tests import MockedResponse, TestCase | |
2 | ||
3 | from .provider import AgaveProvider | |
4 | ||
5 | ||
6 | class AgaveTests(OAuth2TestsMixin, TestCase): | |
7 | provider_id = AgaveProvider.id | |
8 | ||
9 | def get_mocked_response(self): | |
10 | return MockedResponse(200, """ | |
11 | { | |
12 | "status": "success", | |
13 | "message": "User details retrieved successfully.", | |
14 | "version": "2.0.0-SNAPSHOT-rc3fad", | |
15 | "result": { | |
16 | "first_name": "John", | |
17 | "last_name": "Doe", | |
18 | "full_name": "John Doe", | |
19 | "email": "jon@doe.edu", | |
20 | "phone": "", | |
21 | "mobile_phone": "", | |
22 | "status": "Active", | |
23 | "create_time": "20180322043812Z", | |
24 | "username": "jdoe" | |
25 | } | |
26 | } | |
27 | """) |
0 | from allauth.socialaccount.providers.agave.provider import AgaveProvider | |
1 | from allauth.socialaccount.providers.oauth2.urls import default_urlpatterns | |
2 | ||
3 | ||
4 | urlpatterns = default_urlpatterns(AgaveProvider) |
0 | import requests | |
1 | ||
2 | from allauth.socialaccount.providers.agave.provider import AgaveProvider | |
3 | from allauth.socialaccount.providers.oauth2.views import ( | |
4 | OAuth2Adapter, | |
5 | OAuth2CallbackView, | |
6 | OAuth2LoginView, | |
7 | ) | |
8 | ||
9 | ||
10 | class AgaveAdapter(OAuth2Adapter): | |
11 | provider_id = AgaveProvider.id | |
12 | provider_default_url = 'https://public.agaveapi.co/' | |
13 | provider_api_version = 'v2' | |
14 | ||
15 | provider_base_url = 'https://public.agaveapi.co' | |
16 | ||
17 | access_token_url = '{0}/token'.format(provider_base_url) | |
18 | authorize_url = '{0}/authorize'.format(provider_base_url) | |
19 | profile_url = '{0}/profiles/v2/me'.format(provider_base_url) | |
20 | ||
21 | def complete_login(self, request, app, token, response): | |
22 | extra_data = requests.get(self.profile_url, params={ | |
23 | 'access_token': token.token | |
24 | }, headers={ | |
25 | 'Authorization': 'Bearer ' + token.token, | |
26 | }) | |
27 | ||
28 | return self.get_provider().sociallogin_from_response( | |
29 | request, | |
30 | extra_data.json()['result'] | |
31 | ) | |
32 | ||
33 | ||
34 | oauth2_login = OAuth2LoginView.adapter_view(AgaveAdapter) | |
35 | oauth2_callback = OAuth2CallbackView.adapter_view(AgaveAdapter) |
17 | 17 | name = 'Auth0' |
18 | 18 | account_class = Auth0Account |
19 | 19 | |
20 | def get_default_scope(self): | |
21 | return ['openid', 'profile', 'email'] | |
22 | ||
20 | 23 | def extract_uid(self, data): |
21 | 24 | return str(data['id']) |
22 | 25 |
12 | 12 | "picture": "https://secure.gravatar.com/avatar/123", |
13 | 13 | "email": "mr.bob@your.Auth0.server.example.com", |
14 | 14 | "id": 2, |
15 | "user_id": 2, | |
15 | "sub": 2, | |
16 | 16 | "identities": [], |
17 | 17 | "name": "Mr Bob" |
18 | 18 | } |
25 | 25 | 'access_token': token.token |
26 | 26 | }).json() |
27 | 27 | extra_data = { |
28 | 'user_id': extra_data['user_id'], | |
29 | 'id': extra_data['user_id'], | |
28 | 'user_id': extra_data['sub'], | |
29 | 'id': extra_data['sub'], | |
30 | 30 | 'name': extra_data['name'], |
31 | 31 | 'email': extra_data['email'] |
32 | 32 | } |
36 | 36 | |
37 | 37 | def extract_common_fields(self, data): |
38 | 38 | email = data.get('mail') |
39 | if not email and 'userPrincipalName' in data: | |
40 | email = data.get('userPrincipalName') | |
39 | 41 | return dict(email=email, |
40 | 42 | username=email, |
41 | 43 | last_name=data.get('surname'), |
3 | 3 | |
4 | 4 | class BaiduAccount(ProviderAccount): |
5 | 5 | def get_profile_url(self): |
6 | return ( | |
7 | 'https://openapi.baidu.com' | |
8 | '/rest/2.0/passport/users/getLoggedInUser') | |
6 | return "http://www.baidu.com/p/" + self.account.extra_data.get('uname') | |
9 | 7 | |
10 | 8 | def get_avatar_url(self): |
11 | 9 | return ( |
21 | 21 | ) |
22 | 22 | |
23 | 23 | from .provider import BattleNetProvider |
24 | ||
25 | ||
26 | class Region: | |
27 | APAC = "apac" | |
28 | CN = "cn" | |
29 | EU = "eu" | |
30 | KR = "kr" | |
31 | SEA = "sea" | |
32 | TW = "tw" | |
33 | US = "us" | |
24 | 34 | |
25 | 35 | |
26 | 36 | def _check_errors(response): |
66 | 76 | Can be any of eu, us, kr, sea, tw or cn |
67 | 77 | """ |
68 | 78 | provider_id = BattleNetProvider.id |
69 | valid_regions = ("us", "eu", "kr", "sea", "tw", "cn") | |
79 | valid_regions = ( | |
80 | Region.APAC, | |
81 | Region.CN, | |
82 | Region.EU, | |
83 | Region.KR, | |
84 | Region.SEA, | |
85 | Region.TW, | |
86 | Region.US, | |
87 | ) | |
70 | 88 | |
71 | 89 | @property |
72 | 90 | def battlenet_region(self): |
73 | 91 | region = self.request.GET.get("region", "").lower() |
74 | if region == "sea": | |
92 | if region == Region.SEA: | |
75 | 93 | # South-East Asia uses the same region as US everywhere |
76 | return "us" | |
94 | return Region.US | |
77 | 95 | if region in self.valid_regions: |
78 | 96 | return region |
79 | return "us" | |
97 | return Region.US | |
80 | 98 | |
81 | 99 | @property |
82 | 100 | def battlenet_base_url(self): |
83 | 101 | region = self.battlenet_region |
84 | if region == "cn": | |
102 | if region == Region.CN: | |
85 | 103 | return "https://www.battlenet.com.cn" |
86 | 104 | return "https://%s.battle.net" % (region) |
87 | 105 |
0 | from allauth.socialaccount.providers.base import ProviderAccount | |
1 | from allauth.socialaccount.providers.oauth2.provider import OAuth2Provider | |
2 | ||
3 | ||
4 | class CernAccount(ProviderAccount): | |
5 | def to_str(self): | |
6 | dflt = super(CernAccount, self).to_str() | |
7 | return self.account.extra_data.get('name', dflt) | |
8 | ||
9 | ||
10 | class CernProvider(OAuth2Provider): | |
11 | id = 'cern' | |
12 | name = 'Cern' | |
13 | account_class = CernAccount | |
14 | ||
15 | def get_auth_params(self, request, action): | |
16 | data = super(CernProvider, self).get_auth_params(request, action) | |
17 | data['scope'] = 'read:user' | |
18 | return data | |
19 | ||
20 | def extract_uid(self, data): | |
21 | return str(data.get('id')) | |
22 | ||
23 | def extract_common_fields(self, data): | |
24 | return dict( | |
25 | email=data.get('email'), | |
26 | username=data.get('username'), | |
27 | first_name=data.get('first_name'), | |
28 | last_name=data.get('last_name'), | |
29 | name=data.get('name') | |
30 | ) | |
31 | ||
32 | ||
33 | provider_classes = [CernProvider] |
0 | from allauth.socialaccount.tests import OAuth2TestsMixin | |
1 | from allauth.tests import MockedResponse, TestCase | |
2 | ||
3 | from .provider import CernProvider | |
4 | ||
5 | ||
6 | class CernTests(OAuth2TestsMixin, TestCase): | |
7 | provider_id = CernProvider.id | |
8 | ||
9 | def get_mocked_response(self): | |
10 | return MockedResponse(200, """ | |
11 | { | |
12 | "name":"Max Mustermann", | |
13 | "username":"mmuster", | |
14 | "id":8173921, | |
15 | "personid":924225, | |
16 | "email":"max.mustermann@cern.ch", | |
17 | "first_name":"Max", | |
18 | "last_name":"Mustermann", | |
19 | "identityclass":"CERN Registered", | |
20 | "federation":"CERN", | |
21 | "phone":null, | |
22 | "mobile":null | |
23 | } | |
24 | """) |
0 | from allauth.socialaccount.providers.oauth2.urls import default_urlpatterns | |
1 | ||
2 | from .provider import CernProvider | |
3 | ||
4 | ||
5 | urlpatterns = default_urlpatterns(CernProvider) |
0 | import requests | |
1 | ||
2 | from allauth.socialaccount.providers.oauth2.views import ( | |
3 | OAuth2Adapter, | |
4 | OAuth2CallbackView, | |
5 | OAuth2LoginView, | |
6 | ) | |
7 | ||
8 | from .provider import CernProvider | |
9 | ||
10 | ||
11 | class CernOAuth2Adapter(OAuth2Adapter): | |
12 | provider_id = CernProvider.id | |
13 | access_token_url = 'https://oauth.web.cern.ch/OAuth/Token' | |
14 | authorize_url = 'https://oauth.web.cern.ch/OAuth/Authorize' | |
15 | profile_url = 'https://oauthresource.web.cern.ch/api/User' | |
16 | groups_url = 'https://oauthresource.web.cern.ch/api/Groups' | |
17 | ||
18 | supports_state = False | |
19 | redirect_uri_protocol = 'https' | |
20 | ||
21 | def complete_login(self, request, app, token, **kwargs): | |
22 | headers = {'Authorization': 'Bearer {0}'.format(token.token)} | |
23 | user_response = requests.get(self.profile_url, headers=headers) | |
24 | groups_response = requests.get(self.groups_url, headers=headers) | |
25 | extra_data = user_response.json() | |
26 | extra_data.update(groups_response.json()) | |
27 | return self.get_provider().sociallogin_from_response(request, | |
28 | extra_data) | |
29 | ||
30 | ||
31 | oauth2_login = OAuth2LoginView.adapter_view(CernOAuth2Adapter) | |
32 | oauth2_callback = OAuth2CallbackView.adapter_view(CernOAuth2Adapter) |
0 | from allauth.account.models import EmailAddress | |
1 | from allauth.socialaccount.app_settings import QUERY_EMAIL | |
2 | from allauth.socialaccount.providers.base import ProviderAccount | |
3 | from allauth.socialaccount.providers.oauth2.provider import OAuth2Provider | |
4 | ||
5 | ||
6 | class DisqusAccount(ProviderAccount): | |
7 | def get_profile_url(self): | |
8 | return self.account.extra_data.get('profileUrl') | |
9 | ||
10 | def get_avatar_url(self): | |
11 | return self.account.extra_data.get('avatar', {}).get('permalink') | |
12 | ||
13 | def to_str(self): | |
14 | dflt = super(DisqusAccount, self).to_str() | |
15 | return self.account.extra_data.get('name', dflt) | |
16 | ||
17 | ||
18 | class DisqusProvider(OAuth2Provider): | |
19 | id = 'disqus' | |
20 | name = 'Disqus' | |
21 | account_class = DisqusAccount | |
22 | ||
23 | def get_default_scope(self): | |
24 | scope = ['read'] | |
25 | if QUERY_EMAIL: | |
26 | scope += ['email'] | |
27 | return scope | |
28 | ||
29 | def extract_uid(self, data): | |
30 | return str(data['id']) | |
31 | ||
32 | def extract_common_fields(self, data): | |
33 | return { | |
34 | 'username': data.get('username'), | |
35 | 'email': data.get('email'), | |
36 | 'name': data.get('name'), | |
37 | } | |
38 | ||
39 | def extract_email_addresses(self, data): | |
40 | ret = [] | |
41 | email = data.get('email') | |
42 | if email: | |
43 | ret.append(EmailAddress(email=email, verified=True, primary=True)) | |
44 | return ret | |
45 | ||
46 | ||
47 | provider_classes = [DisqusProvider] |
0 | # -*- coding: utf-8 -*- | |
1 | from __future__ import absolute_import, unicode_literals | |
2 | ||
3 | from django.contrib.auth.models import User | |
4 | from django.test.utils import override_settings | |
5 | ||
6 | from allauth.account import app_settings as account_settings | |
7 | from allauth.account.models import EmailAddress | |
8 | from allauth.socialaccount.models import SocialAccount | |
9 | from allauth.socialaccount.tests import OAuth2TestsMixin | |
10 | from allauth.tests import MockedResponse, TestCase | |
11 | ||
12 | from .provider import DisqusProvider | |
13 | ||
14 | ||
15 | @override_settings( | |
16 | SOCIALACCOUNT_AUTO_SIGNUP=True, | |
17 | ACCOUNT_SIGNUP_FORM_CLASS=None, | |
18 | ACCOUNT_EMAIL_VERIFICATION=account_settings | |
19 | .EmailVerificationMethod.MANDATORY) | |
20 | class DisqusTests(OAuth2TestsMixin, TestCase): | |
21 | provider_id = DisqusProvider.id | |
22 | ||
23 | def get_mocked_response(self, | |
24 | name='Raymond Penners', | |
25 | email="raymond.penners@example.com"): | |
26 | return MockedResponse(200, """ | |
27 | {"response": {"name": "%s", | |
28 | "avatar": { | |
29 | "permalink": "https://lh5.googleusercontent.com/photo.jpg" | |
30 | }, | |
31 | "email": "%s", | |
32 | "profileUrl": "https://plus.google.com/108204268033311374519", | |
33 | "id": "108204268033311374519" }} | |
34 | """ % (name, email)) | |
35 | ||
36 | def test_account_connect(self): | |
37 | email = "user@example.com" | |
38 | user = User.objects.create(username='user', | |
39 | is_active=True, | |
40 | email=email) | |
41 | user.set_password('test') | |
42 | user.save() | |
43 | EmailAddress.objects.create(user=user, | |
44 | email=email, | |
45 | primary=True, | |
46 | verified=True) | |
47 | self.client.login(username=user.username, | |
48 | password='test') | |
49 | self.login(self.get_mocked_response(), process='connect') | |
50 | # Check if we connected... | |
51 | self.assertTrue(SocialAccount.objects.filter( | |
52 | user=user, | |
53 | provider=DisqusProvider.id).exists()) | |
54 | # For now, we do not pick up any new e-mail addresses on connect | |
55 | self.assertEqual(EmailAddress.objects.filter(user=user).count(), 1) | |
56 | self.assertEqual(EmailAddress.objects.filter( | |
57 | user=user, | |
58 | email=email).count(), 1) |
0 | from allauth.socialaccount.providers.oauth2.urls import default_urlpatterns | |
1 | ||
2 | from .provider import DisqusProvider | |
3 | ||
4 | ||
5 | urlpatterns = default_urlpatterns(DisqusProvider) |
0 | import requests | |
1 | ||
2 | from allauth.socialaccount.providers.oauth2.views import ( | |
3 | OAuth2Adapter, | |
4 | OAuth2CallbackView, | |
5 | OAuth2LoginView, | |
6 | ) | |
7 | ||
8 | from .provider import DisqusProvider | |
9 | ||
10 | ||
11 | class DisqusOAuth2Adapter(OAuth2Adapter): | |
12 | provider_id = DisqusProvider.id | |
13 | access_token_url = 'https://disqus.com/api/oauth/2.0/access_token/' | |
14 | authorize_url = 'https://disqus.com/api/oauth/2.0/authorize/' | |
15 | profile_url = 'https://disqus.com/api/3.0/users/details.json' | |
16 | scope_delimiter = ',' | |
17 | ||
18 | def complete_login(self, request, app, token, **kwargs): | |
19 | resp = requests.get(self.profile_url, params={ | |
20 | 'access_token': token.token, | |
21 | 'api_key': app.client_id, | |
22 | 'api_secret': app.secret}) | |
23 | resp.raise_for_status() | |
24 | ||
25 | extra_data = resp.json().get('response') | |
26 | ||
27 | login = self.get_provider()\ | |
28 | .sociallogin_from_response(request, extra_data) | |
29 | return login | |
30 | ||
31 | ||
32 | oauth2_login = OAuth2LoginView.adapter_view(DisqusOAuth2Adapter) | |
33 | oauth2_callback = OAuth2CallbackView.adapter_view(DisqusOAuth2Adapter) |
10 | 10 | return MockedResponse(200, """ |
11 | 11 | { |
12 | 12 | "avatar_url": "https://secure.gravatar.com/avatar/123", |
13 | "bio": "", | |
14 | "can_create_group": "true", | |
15 | "can_create_project": "true", | |
16 | "color_scheme_id": 2, | |
17 | "created_at": "2015-12-14T23:40:33+0100", | |
18 | "current_sign_in_at": "2015-12-14T23:40:33+0100", | |
13 | "bio": null, | |
14 | "can_create_group": true, | |
15 | "can_create_project": true, | |
16 | "color_scheme_id": 5, | |
17 | "confirmed_at": "2015-03-02T16:53:58.370Z", | |
18 | "created_at": "2015-03-02T16:53:58.885Z", | |
19 | "current_sign_in_at": "2018-06-12T18:44:49.985Z", | |
19 | 20 | "email": "mr.bob@gitlab.example.com", |
21 | "external": false, | |
20 | 22 | "id": 2, |
21 | 23 | "identities": [], |
22 | "is_admin": "false", | |
24 | "last_activity_on": "2018-06-11", | |
25 | "last_sign_in_at": "2018-05-31T14:59:44.527Z", | |
23 | 26 | "linkedin": "", |
27 | "location": null, | |
24 | 28 | "name": "Mr Bob", |
25 | "private_token": "123", | |
29 | "organization": null, | |
26 | 30 | "projects_limit": 10, |
27 | "skype": "mr.bob", | |
31 | "shared_runners_minutes_limit": 2000, | |
32 | "skype": "", | |
28 | 33 | "state": "active", |
29 | 34 | "theme_id": 6, |
30 | 35 | "twitter": "mrbob", |
31 | "two_factor_enabled": "false", | |
36 | "two_factor_enabled": true, | |
32 | 37 | "username": "mr.bob", |
33 | 38 | "web_url": "https://gitlab.example.com/u/mr.bob", |
34 | "website_url": "https://example.com" | |
39 | "website_url": "" | |
35 | 40 | } |
36 | 41 | """) |
12 | 12 | class GitLabOAuth2Adapter(OAuth2Adapter): |
13 | 13 | provider_id = GitLabProvider.id |
14 | 14 | provider_default_url = 'https://gitlab.com' |
15 | provider_api_version = 'v3' | |
15 | provider_api_version = 'v4' | |
16 | 16 | |
17 | 17 | settings = app_settings.PROVIDERS.get(provider_id, {}) |
18 | 18 | provider_base_url = settings.get('GITLAB_URL', provider_default_url) |
0 | from allauth.socialaccount import app_settings | |
1 | from allauth.socialaccount.providers.base import ProviderAccount | |
2 | from allauth.socialaccount.providers.oauth2.provider import OAuth2Provider | |
3 | ||
4 | ||
5 | class GlobusAccount(ProviderAccount): | |
6 | ||
7 | def get_profile_url(self): | |
8 | return self.account.extra_data.get('web_url', 'dflt') | |
9 | ||
10 | def get_avatar_url(self): | |
11 | return self.account.extra_data.get('avatar_url', 'dflt') | |
12 | ||
13 | def to_str(self): | |
14 | dflt = super(GlobusAccount, self).to_str() | |
15 | return self.account.extra_data.get('name', dflt) | |
16 | ||
17 | ||
18 | class GlobusProvider(OAuth2Provider): | |
19 | id = 'globus' | |
20 | name = 'Globus' | |
21 | account_class = GlobusAccount | |
22 | ||
23 | def extract_uid(self, data): | |
24 | return str(data.get('create_time')) | |
25 | ||
26 | def extract_common_fields(self, data): | |
27 | return dict( | |
28 | email=data.get('email'), | |
29 | username=data.get('preferred_username'), | |
30 | name=data.get('name'), | |
31 | ) | |
32 | ||
33 | def get_default_scope(self): | |
34 | scope = ['openid', 'profile', 'offline_access'] | |
35 | if app_settings.QUERY_EMAIL: | |
36 | scope.append('email') | |
37 | return scope | |
38 | ||
39 | ||
40 | provider_classes = [GlobusProvider] |
0 | from django.test.utils import override_settings | |
1 | ||
2 | from allauth.socialaccount.tests import OAuth2TestsMixin | |
3 | from allauth.tests import MockedResponse, TestCase | |
4 | ||
5 | from .provider import GlobusProvider | |
6 | ||
7 | ||
8 | class GlobusTests(OAuth2TestsMixin, TestCase): | |
9 | provider_id = GlobusProvider.id | |
10 | ||
11 | @override_settings(SOCIALACCOUNT_QUERY_EMAIL=True) | |
12 | def get_mocked_response(self): | |
13 | return MockedResponse(200, """ | |
14 | { | |
15 | "identity_provider_display_name": "University of Gozorpazorp", | |
16 | "sub": "a6fc81e-4a6c1-97ac-b4c6-84ff6a8ce662", | |
17 | "preferred_username": "morty@ugz.edu", | |
18 | "identity_provider": "9a4c8312f-9432-9a7c-1654-6a987c6531fa", | |
19 | "organization": "University of Gozorpazorp", | |
20 | "email": "morty@ugz.edu", | |
21 | "name": "Morty Smith" | |
22 | } | |
23 | """) |
0 | from allauth.socialaccount.providers.globus.provider import GlobusProvider | |
1 | from allauth.socialaccount.providers.oauth2.urls import default_urlpatterns | |
2 | ||
3 | ||
4 | urlpatterns = default_urlpatterns(GlobusProvider) |
0 | import requests | |
1 | ||
2 | from allauth.socialaccount.providers.globus.provider import GlobusProvider | |
3 | from allauth.socialaccount.providers.oauth2.views import ( | |
4 | OAuth2Adapter, | |
5 | OAuth2CallbackView, | |
6 | OAuth2LoginView, | |
7 | ) | |
8 | ||
9 | ||
10 | class GlobusAdapter(OAuth2Adapter): | |
11 | provider_id = GlobusProvider.id | |
12 | provider_default_url = 'https://auth.globus.org/v2/oauth2' | |
13 | ||
14 | provider_base_url = 'https://auth.globus.org/v2/oauth2' | |
15 | ||
16 | access_token_url = '{0}/token'.format(provider_base_url) | |
17 | authorize_url = '{0}/authorize'.format(provider_base_url) | |
18 | profile_url = '{0}/userinfo'.format(provider_base_url) | |
19 | ||
20 | def complete_login(self, request, app, token, response): | |
21 | extra_data = requests.get(self.profile_url, params={ | |
22 | 'access_token': token.token | |
23 | }, headers={ | |
24 | 'Authorization': 'Bearer ' + token.token, | |
25 | }) | |
26 | ||
27 | return self.get_provider().sociallogin_from_response( | |
28 | request, | |
29 | extra_data.json() | |
30 | ) | |
31 | ||
32 | ||
33 | oauth2_login = OAuth2LoginView.adapter_view(GlobusAdapter) | |
34 | oauth2_callback = OAuth2CallbackView.adapter_view(GlobusAdapter) |
57 | 57 | return fields |
58 | 58 | |
59 | 59 | def get_default_scope(self): |
60 | scope = [] | |
60 | scope = ['r_basicprofile'] | |
61 | 61 | if app_settings.QUERY_EMAIL: |
62 | 62 | scope.append('r_emailaddress') |
63 | 63 | return scope |
10 | 10 | |
11 | 11 | class LinkedInOAuth2Adapter(OAuth2Adapter): |
12 | 12 | provider_id = LinkedInOAuth2Provider.id |
13 | access_token_url = 'https://api.linkedin.com/uas/oauth2/accessToken' | |
14 | authorize_url = 'https://www.linkedin.com/uas/oauth2/authorization' | |
13 | access_token_url = 'https://www.linkedin.com/oauth/v2/accessToken' | |
14 | authorize_url = 'https://www.linkedin.com/oauth/v2/authorization' | |
15 | 15 | profile_url = 'https://api.linkedin.com/v1/people/~' |
16 | 16 | # See: |
17 | 17 | # http://developer.linkedin.com/forum/unauthorized-invalid-or-expired-token-immediately-after-receiving-oauth2-token?page=1 # noqa |
25 | 25 | def get_user_info(self, token): |
26 | 26 | fields = self.get_provider().get_profile_fields() |
27 | 27 | url = self.profile_url + ':(%s)?format=json' % ','.join(fields) |
28 | resp = requests.get(url, params={'oauth2_access_token': token.token}) | |
28 | headers = {} | |
29 | headers.update(self.get_provider().get_settings().get('HEADERS', {})) | |
30 | headers['Authorization'] = ' '.join(['Bearer', token.token]) | |
31 | resp = requests.get(url, headers=headers) | |
29 | 32 | resp.raise_for_status() |
30 | 33 | return resp.json() |
31 | 34 |
0 | from allauth.account.models import EmailAddress | |
0 | 1 | from allauth.socialaccount.providers.base import ProviderAccount |
1 | 2 | from allauth.socialaccount.providers.oauth2.provider import OAuth2Provider |
2 | 3 | |
18 | 19 | def extract_uid(self, data): |
19 | 20 | return str(data['id']) |
20 | 21 | |
22 | def extract_common_fields(self, data): | |
23 | email = data.get("email") | |
24 | return dict(email=email) | |
25 | ||
26 | def extract_email_addresses(self, data): | |
27 | ret = [] | |
28 | email = data.get("email") | |
29 | if email: | |
30 | ret.append(EmailAddress(email=email, verified=True, primary=True)) | |
31 | return ret | |
32 | ||
21 | 33 | |
22 | 34 | provider_classes = [NaverProvider] |
72 | 72 | auth=auth) |
73 | 73 | |
74 | 74 | access_token = None |
75 | if resp.status_code == 200: | |
75 | if resp.status_code in [200, 201]: | |
76 | 76 | # Weibo sends json via 'text/plain;charset=UTF-8' |
77 | 77 | if (resp.headers['content-type'].split( |
78 | 78 | ';')[0] == 'application/json' or resp.text[:2] == '{"'): |
34 | 34 | ) |
35 | 35 | if form.is_valid(): |
36 | 36 | client = _openid_consumer(request) |
37 | provider = OpenIDProvider(request) | |
38 | realm = provider.get_settings().get( | |
39 | 'REALM', | |
40 | request.build_absolute_uri('/')) | |
37 | 41 | try: |
38 | 42 | auth_request = client.begin(form.cleaned_data['openid']) |
39 | 43 | if QUERY_EMAIL: |
57 | 61 | auth_request.addExtension(ax) |
58 | 62 | callback_url = reverse(callback) |
59 | 63 | SocialLogin.stash_state(request) |
60 | # https://github.com/pennersr/django-allauth/issues/1523 | |
61 | auth_request.return_to_args['next'] = \ | |
62 | form.cleaned_data.get('next', '/') | |
64 | # Fix for issues 1523 and 2072 (github django-allauth) | |
65 | if 'next' in form.cleaned_data and form.cleaned_data['next']: | |
66 | auth_request.return_to_args['next'] = \ | |
67 | form.cleaned_data['next'] | |
63 | 68 | redirect_url = auth_request.redirectURL( |
64 | request.build_absolute_uri('/'), | |
69 | realm, | |
65 | 70 | request.build_absolute_uri(callback_url)) |
66 | 71 | return HttpResponseRedirect(redirect_url) |
67 | 72 | # UnicodeDecodeError: |
0 | """ | |
1 | Provider for Patreon | |
2 | """ | |
3 | from allauth.socialaccount.providers.base import ProviderAccount | |
4 | from allauth.socialaccount.providers.oauth2.provider import OAuth2Provider | |
5 | ||
6 | ||
7 | class VimeoOAuth2Account(ProviderAccount): | |
8 | pass | |
9 | ||
10 | ||
11 | class VimeoOAuth2Provider(OAuth2Provider): | |
12 | id = 'vimeo_oauth2' | |
13 | name = 'Vimeo' | |
14 | account_class = VimeoOAuth2Account | |
15 | ||
16 | def get_default_scope(self): | |
17 | return ['public', 'private'] | |
18 | ||
19 | def extract_uid(self, data): | |
20 | return data.get('uri').split('/')[-1] | |
21 | ||
22 | def extract_common_fields(self, data): | |
23 | return { | |
24 | 'fullname': data.get('name'), | |
25 | } | |
26 | ||
27 | ||
28 | provider_classes = [VimeoOAuth2Provider] |
0 | from allauth.socialaccount.tests import OAuth2TestsMixin | |
1 | from allauth.tests import MockedResponse, TestCase | |
2 | ||
3 | from .provider import VimeoOAuth2Provider | |
4 | ||
5 | ||
6 | class VimeoOAuth2Tests(OAuth2TestsMixin, TestCase): | |
7 | provider_id = VimeoOAuth2Provider.id | |
8 | ||
9 | def get_mocked_response(self): | |
10 | return MockedResponse(200, """{ | |
11 | "uri": "/users/12345", | |
12 | "name": "AllAuth", | |
13 | "link": "https://vimeo.com/user12345", | |
14 | "created_time": "2012-06-04T00:02:16+00:00", | |
15 | "pictures": { | |
16 | "uri": null, | |
17 | "active": false, | |
18 | "type": "default", | |
19 | "sizes": [{ | |
20 | "width": 30, | |
21 | "height": 30, | |
22 | "link": "https://i.vimeocdn.com/portrait/defaults-blue_30x30.png" | |
23 | }], | |
24 | "resource_key": "1234567890abcdef" | |
25 | }, | |
26 | "resource_key": "1234567890abcdef", | |
27 | "account": "pro" | |
28 | }""") # noqa |
0 | """URLs for Patreon Provider""" | |
1 | ||
2 | from allauth.socialaccount.providers.oauth2.urls import default_urlpatterns | |
3 | ||
4 | from .provider import VimeoOAuth2Provider | |
5 | ||
6 | ||
7 | urlpatterns = default_urlpatterns(VimeoOAuth2Provider) |
0 | """ | |
1 | Views for PatreonProvider | |
2 | https://www.patreon.com/platform/documentation/oauth | |
3 | """ | |
4 | ||
5 | import requests | |
6 | ||
7 | from allauth.socialaccount.providers.oauth2.views import ( | |
8 | OAuth2Adapter, | |
9 | OAuth2CallbackView, | |
10 | OAuth2LoginView, | |
11 | ) | |
12 | ||
13 | from .provider import VimeoOAuth2Provider | |
14 | ||
15 | ||
16 | class VimeoOAuth2Adapter(OAuth2Adapter): | |
17 | provider_id = VimeoOAuth2Provider.id | |
18 | access_token_url = 'https://api.vimeo.com/oauth/access_token' | |
19 | authorize_url = 'https://api.vimeo.com/oauth/authorize' | |
20 | profile_url = 'https://api.vimeo.com/me/' | |
21 | ||
22 | def complete_login(self, request, app, token, **kwargs): | |
23 | resp = requests.get(self.profile_url, | |
24 | headers={'Authorization': 'Bearer ' + token.token}) | |
25 | extra_data = resp.json() | |
26 | return self.get_provider().sociallogin_from_response(request, | |
27 | extra_data) | |
28 | ||
29 | ||
30 | oauth2_login = OAuth2LoginView.adapter_view(VimeoOAuth2Adapter) | |
31 | oauth2_callback = OAuth2CallbackView.adapter_view(VimeoOAuth2Adapter) |
11 | 11 | <div> |
12 | 12 | <strong>Messages:</strong> |
13 | 13 | <ul> |
14 | {% for message in messages %} | |
15 | <li>{{message}}</li> | |
16 | {% endfor %} | |
14 | {% for message in messages %} | |
15 | <li>{{message}}</li> | |
16 | {% endfor %} | |
17 | 17 | </ul> |
18 | 18 | </div> |
19 | 19 | {% endif %} |
21 | 21 | <div> |
22 | 22 | <strong>Menu:</strong> |
23 | 23 | <ul> |
24 | {% if user.is_authenticated %} | |
25 | <li><a href="{% url 'account_email' %}">Change E-mail</a></li> | |
26 | <li><a href="{% url 'account_logout' %}">Sign Out</a></li> | |
27 | {% else %} | |
28 | <li><a href="{% url 'account_login' %}">Sign In</a></li> | |
29 | <li><a href="{% url 'account_signup' %}">Sign Up</a></li> | |
30 | {% endif %} | |
24 | {% if user.is_authenticated %} | |
25 | <li><a href="{% url 'account_email' %}">Change E-mail</a></li> | |
26 | <li><a href="{% url 'account_logout' %}">Sign Out</a></li> | |
27 | {% else %} | |
28 | <li><a href="{% url 'account_login' %}">Sign In</a></li> | |
29 | <li><a href="{% url 'account_signup' %}">Sign Up</a></li> | |
30 | {% endif %} | |
31 | 31 | </ul> |
32 | 32 | </div> |
33 | 33 | {% block content %} |
0 | 0 | Metadata-Version: 1.1 |
1 | 1 | Name: django-allauth |
2 | Version: 0.36.0 | |
2 | Version: 0.38.0 | |
3 | 3 | Summary: Integrated set of Django applications addressing authentication, registration, account management as well as 3rd party (social) account authentication. |
4 | 4 | Home-page: http://github.com/pennersr/django-allauth |
5 | 5 | Author: Raymond Penners |
109 | 109 | Classifier: Framework :: Django |
110 | 110 | Classifier: Framework :: Django :: 1.11 |
111 | 111 | Classifier: Framework :: Django :: 2.0 |
112 | Classifier: Framework :: Django :: 2.1 |
39 | 39 | allauth/locale/ar/LC_MESSAGES/django.po |
40 | 40 | allauth/locale/cs/LC_MESSAGES/django.mo |
41 | 41 | allauth/locale/cs/LC_MESSAGES/django.po |
42 | allauth/locale/da/LC_MESSAGES/django.mo | |
43 | allauth/locale/da/LC_MESSAGES/django.po | |
42 | 44 | allauth/locale/de/LC_MESSAGES/django.mo |
43 | 45 | allauth/locale/de/LC_MESSAGES/django.po |
44 | 46 | allauth/locale/el/LC_MESSAGES/django.mo |
47 | 49 | allauth/locale/en/LC_MESSAGES/django.po |
48 | 50 | allauth/locale/es/LC_MESSAGES/django.mo |
49 | 51 | allauth/locale/es/LC_MESSAGES/django.po |
52 | allauth/locale/eu/LC_MESSAGES/django.mo | |
53 | allauth/locale/eu/LC_MESSAGES/django.po | |
50 | 54 | allauth/locale/fa/LC_MESSAGES/django.mo |
51 | 55 | allauth/locale/fa/LC_MESSAGES/django.po |
52 | 56 | allauth/locale/fi/LC_MESSAGES/django.mo |
120 | 124 | allauth/socialaccount/migrations/__init__.py |
121 | 125 | allauth/socialaccount/providers/__init__.py |
122 | 126 | allauth/socialaccount/providers/base.py |
127 | allauth/socialaccount/providers/agave/__init__.py | |
128 | allauth/socialaccount/providers/agave/provider.py | |
129 | allauth/socialaccount/providers/agave/tests.py | |
130 | allauth/socialaccount/providers/agave/urls.py | |
131 | allauth/socialaccount/providers/agave/views.py | |
123 | 132 | allauth/socialaccount/providers/amazon/__init__.py |
124 | 133 | allauth/socialaccount/providers/amazon/provider.py |
125 | 134 | allauth/socialaccount/providers/amazon/tests.py |
189 | 198 | allauth/socialaccount/providers/box/tests.py |
190 | 199 | allauth/socialaccount/providers/box/urls.py |
191 | 200 | allauth/socialaccount/providers/box/views.py |
201 | allauth/socialaccount/providers/cern/__init__.py | |
202 | allauth/socialaccount/providers/cern/provider.py | |
203 | allauth/socialaccount/providers/cern/tests.py | |
204 | allauth/socialaccount/providers/cern/urls.py | |
205 | allauth/socialaccount/providers/cern/views.py | |
192 | 206 | allauth/socialaccount/providers/coinbase/__init__.py |
193 | 207 | allauth/socialaccount/providers/coinbase/provider.py |
194 | 208 | allauth/socialaccount/providers/coinbase/tests.py |
216 | 230 | allauth/socialaccount/providers/discord/tests.py |
217 | 231 | allauth/socialaccount/providers/discord/urls.py |
218 | 232 | allauth/socialaccount/providers/discord/views.py |
233 | allauth/socialaccount/providers/disqus/__init__.py | |
234 | allauth/socialaccount/providers/disqus/provider.py | |
235 | allauth/socialaccount/providers/disqus/tests.py | |
236 | allauth/socialaccount/providers/disqus/urls.py | |
237 | allauth/socialaccount/providers/disqus/views.py | |
219 | 238 | allauth/socialaccount/providers/douban/__init__.py |
220 | 239 | allauth/socialaccount/providers/douban/provider.py |
221 | 240 | allauth/socialaccount/providers/douban/tests.py |
309 | 328 | allauth/socialaccount/providers/gitlab/tests.py |
310 | 329 | allauth/socialaccount/providers/gitlab/urls.py |
311 | 330 | allauth/socialaccount/providers/gitlab/views.py |
331 | allauth/socialaccount/providers/globus/__init__.py | |
332 | allauth/socialaccount/providers/globus/provider.py | |
333 | allauth/socialaccount/providers/globus/tests.py | |
334 | allauth/socialaccount/providers/globus/urls.py | |
335 | allauth/socialaccount/providers/globus/views.py | |
312 | 336 | allauth/socialaccount/providers/google/__init__.py |
313 | 337 | allauth/socialaccount/providers/google/provider.py |
314 | 338 | allauth/socialaccount/providers/google/tests.py |
520 | 544 | allauth/socialaccount/providers/vimeo/tests.py |
521 | 545 | allauth/socialaccount/providers/vimeo/urls.py |
522 | 546 | allauth/socialaccount/providers/vimeo/views.py |
547 | allauth/socialaccount/providers/vimeo_oauth2/__init__.py | |
548 | allauth/socialaccount/providers/vimeo_oauth2/models.py | |
549 | allauth/socialaccount/providers/vimeo_oauth2/provider.py | |
550 | allauth/socialaccount/providers/vimeo_oauth2/test.py | |
551 | allauth/socialaccount/providers/vimeo_oauth2/urls.py | |
552 | allauth/socialaccount/providers/vimeo_oauth2/views.py | |
523 | 553 | allauth/socialaccount/providers/vk/__init__.py |
524 | 554 | allauth/socialaccount/providers/vk/provider.py |
525 | 555 | allauth/socialaccount/providers/vk/tests.py |
611 | 641 | docs/configuration.rst |
612 | 642 | docs/decorators.rst |
613 | 643 | docs/faq.rst |
644 | docs/forms.rst | |
614 | 645 | docs/index.rst |
615 | 646 | docs/installation.rst |
616 | 647 | docs/overview.rst |
129 | 129 | confirmation) can be altered by providing your own |
130 | 130 | templates. Templates are named as follows:: |
131 | 131 | |
132 | account/email/email_confirmation_signup_subject.txt | |
133 | account/email/email_confirmation_signup_message.txt | |
134 | ||
132 | 135 | account/email/email_confirmation_subject.txt |
133 | 136 | account/email/email_confirmation_message.txt |
134 | 137 | |
135 | 138 | In case you want to include an HTML representation, add an HTML |
136 | 139 | template as follows:: |
137 | 140 | |
141 | account/email/email_confirmation_signup_message.html | |
142 | ||
138 | 143 | account/email/email_confirmation_message.html |
139 | 144 | |
140 | 145 | The project does not contain any HTML email templates out of the box. |
129 | 129 | ACCOUNT_LOGOUT_ON_PASSWORD_CHANGE (=False) |
130 | 130 | Determines whether or not the user is automatically logged out after |
131 | 131 | changing or setting their password. See documentation for |
132 | `Django's session invalidation on password change <https://docs.djangoproject.com/en/1.8/topics/auth/default/#session-invalidation-on-password-change>`_. | |
132 | `Django's session invalidation on password change <https://docs.djangoproject.com/en/stable/topics/auth/default/#session-invalidation-on-password-change>`_. | |
133 | 133 | |
134 | 134 | ACCOUNT_LOGIN_ON_PASSWORD_RESET (=False) |
135 | 135 | By changing this setting to ``True``, users will automatically be logged in |
0 | Forms | |
1 | ===== | |
2 | ||
3 | The following forms can be overridden as needed. | |
4 | ||
5 | - Add extra fields for extra required information | |
6 | - Override save to add extra functionality on save | |
7 | ||
8 | Overriding Save | |
9 | --------------- | |
10 | ||
11 | If you decide to add fields to a form, you will need to | |
12 | manually save the custom fields data. | |
13 | ||
14 | ACCOUNT_FORMS | |
15 | ============= | |
16 | ||
17 | Default Settings:: | |
18 | ||
19 | ACCOUNT_FORMS = { | |
20 | 'login': 'allauth.account.forms.LoginForm', | |
21 | 'signup': 'allauth.account.forms.SignupForm', | |
22 | 'add_email': 'allauth.account.forms.AddEmailForm', | |
23 | 'change_password': 'allauth.account.forms.ChangePasswordForm', | |
24 | 'set_password': 'allauth.account.forms.SetPasswordForm', | |
25 | 'reset_password': 'allauth.account.forms.ResetPasswordForm', | |
26 | 'reset_password_from_key': 'allauth.account.forms.ResetPasswordKeyForm', | |
27 | } | |
28 | ||
29 | login (``allauth.account.forms.LoginForm``) | |
30 | ------------------------------------------- | |
31 | ||
32 | Used on `account_login <views.html#login-account-login>`__ view. | |
33 | ||
34 | ``save`` is not called, you need to override ``login`` | |
35 | :: | |
36 | ||
37 | from allauth.account.forms import LoginForm | |
38 | class MyCustomLoginForm(LoginForm): | |
39 | ||
40 | def login(self, *args, **kwargs): | |
41 | ||
42 | # Add your own processing here. | |
43 | ||
44 | # You must return the original result. | |
45 | return super(MyCustomLoginForm, self).login(*args, **kwargs) | |
46 | ||
47 | You have access to the following: | |
48 | ||
49 | - ``self.user`` is the User object that is logging in. | |
50 | ||
51 | ``settings.py``:: | |
52 | ||
53 | ACCOUNT_FORMS = {'login': 'mysite.forms.MyCustomLoginForm'} | |
54 | ||
55 | signup (``allauth.account.forms.SignupForm``) | |
56 | --------------------------------------------- | |
57 | ||
58 | Used on `account_signup <views.html#signup-account-signup>`__ view. | |
59 | ||
60 | :: | |
61 | ||
62 | from allauth.account.forms import SignupForm | |
63 | class MyCustomSignupForm(SignupForm): | |
64 | ||
65 | def save(self, request): | |
66 | ||
67 | # Ensure you call the parent classes save. | |
68 | # .save() returns a User object. | |
69 | user = super(MyCustomSignupForm, self).save(request) | |
70 | ||
71 | # Add your own processing here. | |
72 | ||
73 | # You must return the original result. | |
74 | return user | |
75 | ||
76 | ``settings.py``:: | |
77 | ||
78 | ACCOUNT_FORMS = {'signup': 'mysite.forms.MyCustomSignupForm'} | |
79 | ||
80 | add_email (``allauth.account.forms.AddEmailForm``) | |
81 | -------------------------------------------------- | |
82 | ||
83 | Used on `account_email <views.html#e-mails-management-account-email>`__ view. | |
84 | ||
85 | :: | |
86 | ||
87 | from allauth.account.forms import AddEmailForm | |
88 | class MyCustomAddEmailForm(AddEmailForm): | |
89 | ||
90 | def save(self): | |
91 | ||
92 | # Ensure you call the parent classes save. | |
93 | # .save() returns a allauth.account.models.EmailAddress object. | |
94 | email_address_obj = super(MyCustomAddEmailForm, self).save() | |
95 | ||
96 | # Add your own processing here. | |
97 | ||
98 | # You must return the original result. | |
99 | return email_address_obj | |
100 | ||
101 | You have access to the following: | |
102 | ||
103 | - ``self.user`` is the User object that is logged in. | |
104 | ||
105 | ``settings.py``:: | |
106 | ||
107 | ACCOUNT_FORMS = {'add_email': 'mysite.forms.MyCustomAddEmailForm'} | |
108 | ||
109 | change_password (``allauth.account.forms.ChangePasswordForm``) | |
110 | -------------------------------------------------------------- | |
111 | ||
112 | Used on `account_change_password <views.html#password-management>`__ view. | |
113 | ||
114 | :: | |
115 | ||
116 | from allauth.account.forms import ChangePasswordForm | |
117 | class MyCustomChangePasswordForm(ChangePasswordForm): | |
118 | ||
119 | def save(self): | |
120 | ||
121 | # Ensure you call the parent classes save | |
122 | # .save() does not return anything | |
123 | super(MyCustomChangePasswordForm, self).save() | |
124 | ||
125 | # Add your own processing here. | |
126 | ||
127 | You have access to the following: | |
128 | ||
129 | - ``self.user`` is the User object that is logged in. | |
130 | ||
131 | ``settings.py``:: | |
132 | ||
133 | ACCOUNT_FORMS = {'change_password': 'mysite.forms.MyCustomChangePasswordForm'} | |
134 | ||
135 | set_password (``allauth.account.forms.SetPasswordForm``) | |
136 | -------------------------------------------------------- | |
137 | ||
138 | Used on `account_set_password <views.html#password-management>`__ view. | |
139 | ||
140 | :: | |
141 | ||
142 | from allauth.account.forms import SetPasswordForm | |
143 | class MyCustomSetPasswordForm(SetPasswordForm): | |
144 | ||
145 | def save(self): | |
146 | ||
147 | # Ensure you call the parent classes save | |
148 | # .save() does not return anything | |
149 | super(MyCustomSetPasswordForm, self).save() | |
150 | ||
151 | # Add your own processing here. | |
152 | ||
153 | You have access to the following: | |
154 | ||
155 | - ``self.user`` is the User object that is logged in. | |
156 | ||
157 | ``settings.py``:: | |
158 | ||
159 | ACCOUNT_FORMS = {'set_password': 'mysite.forms.MyCustomSetPasswordForm'} | |
160 | ||
161 | reset_password (``allauth.account.forms.ResetPasswordForm``) | |
162 | ------------------------------------------------------------ | |
163 | ||
164 | Used on `account_reset_password <views.html#password-reset-account-reset-password>`__ view. | |
165 | ||
166 | :: | |
167 | ||
168 | from allauth.account.forms import ResetPasswordForm | |
169 | class MyCustomSetPasswordForm(ResetPasswordForm): | |
170 | ||
171 | def save(self): | |
172 | ||
173 | # Ensure you call the parent classes save | |
174 | # .save() returns a string containing the email address supplied | |
175 | email_address = super(MyCustomResetPasswordForm, self).save() | |
176 | ||
177 | # Add your own processing here. | |
178 | ||
179 | # Ensure you return the original result | |
180 | return email_address | |
181 | ||
182 | You have access to the following: | |
183 | ||
184 | - ``self.users`` is a list of all possible User objects with matching email address | |
185 | ||
186 | ``settings.py``:: | |
187 | ||
188 | ACCOUNT_FORMS = {'reset_password': 'mysite.forms.MyCustomResetPasswordForm'} | |
189 | ||
190 | reset_password_from_key (``allauth.account.forms.ResetPasswordKeyForm``) | |
191 | ------------------------------------------------------------------------ | |
192 | ||
193 | Used on `account_reset_password <views.html#password-reset-account-reset-password>`__ view. | |
194 | ||
195 | :: | |
196 | ||
197 | from allauth.account.forms import ResetPasswordKeyForm | |
198 | class MyCustomResetPasswordKeyForm(ResetPasswordKeyForm): | |
199 | ||
200 | def save(self): | |
201 | ||
202 | # Add your own processing here. | |
203 | ||
204 | # Ensure you call the parent classes save | |
205 | # .save() does not return anything | |
206 | super(MyCustomResetPasswordKeyForm, self).save() | |
207 | ||
208 | You have access to the following: | |
209 | ||
210 | - ``self.user`` is the User object | |
211 | ||
212 | ``settings.py``:: | |
213 | ||
214 | ACCOUNT_FORMS = {'reset_password_from_key': 'mysite.forms.MyCustomResetPasswordKeyForm'} | |
215 | ||
216 | SOCIALACCOUNT_FORMS | |
217 | =================== | |
218 | ||
219 | Default Settings:: | |
220 | ||
221 | SOCIALACCOUNT_FORMS = { | |
222 | 'login': 'allauth.socialaccount.forms.DisconnectForm', | |
223 | 'signup': 'allauth.socialaccount.forms.SignupForm', | |
224 | } | |
225 | ||
226 | signup (``allauth.socialaccount.forms.SignupForm``) | |
227 | --------------------------------------------------- | |
228 | ||
229 | Used on socialaccount_signup view used when someone initially signs up | |
230 | with a social account and needs to create an account. | |
231 | ||
232 | :: | |
233 | ||
234 | from allauth.socialaccount.forms import SignupForm | |
235 | class MyCustomSocialSignupForm(SignupForm): | |
236 | ||
237 | def save(self): | |
238 | ||
239 | # Ensure you call the parent classes save. | |
240 | # .save() returns a User object. | |
241 | user = super(MyCustomSocialSignupForm, self).save() | |
242 | ||
243 | # Add your own processing here. | |
244 | ||
245 | # You must return the original result. | |
246 | return user | |
247 | ||
248 | You have access to the following: | |
249 | ||
250 | - ``self.socialaccount`` | |
251 | ||
252 | ``settings.py``:: | |
253 | ||
254 | SOCIALACCOUNT_FORMS = {'signup': 'mysite.forms.MyCustomSocialSignupForm'} | |
255 | ||
256 | disconnect (``allauth.socialaccount.forms.DisconnectForm``) | |
257 | ----------------------------------------------------------- | |
258 | ||
259 | Used on socialaccount_connections view, used when removing a social account. | |
260 | ||
261 | :: | |
262 | ||
263 | from allauth.socialaccount.forms import DisconnectForm | |
264 | class MyCustomSocialDisconnectForm(DisconnectForm): | |
265 | ||
266 | def save(self): | |
267 | ||
268 | # Add your own processing here if you do need access to the | |
269 | # socialaccount being deleted. | |
270 | ||
271 | # Ensure you call the parent classes save. | |
272 | # .save() does not return anything | |
273 | super(MyCustomSocialDisconnectForm, self).save() | |
274 | ||
275 | # Add your own processing here if you don't need access to the | |
276 | # socialaccount being deleted. | |
277 | ||
278 | You have access to the following: | |
279 | ||
280 | - ``self.request`` is the request object | |
281 | - ``self.accounts`` is a list containing all of the users SocialAccount objects. | |
282 | - ``self.cleaned_data['account']`` contains the socialaccount being deleted. .save() | |
283 | issues the delete so if you need access to the socialaccount beforehand, move your | |
284 | code before .save() | |
285 | ||
286 | ``settings.py``:: | |
287 | ||
288 | SOCIALACCOUNT_FORMS = {'disconnect': 'mysite.forms.MyCustomSocialDisconnectForm'} |
40 | 40 | ... |
41 | 41 | # The following apps are required: |
42 | 42 | 'django.contrib.auth', |
43 | 'django.contrib.messages', | |
43 | 44 | 'django.contrib.sites', |
44 | 45 | |
45 | 46 | 'allauth', |
46 | 47 | 'allauth.account', |
47 | 48 | 'allauth.socialaccount', |
48 | 49 | # ... include the providers you want to enable: |
50 | 'allauth.socialaccount.providers.agave', | |
49 | 51 | 'allauth.socialaccount.providers.amazon', |
50 | 52 | 'allauth.socialaccount.providers.angellist', |
51 | 53 | 'allauth.socialaccount.providers.asana', |
56 | 58 | 'allauth.socialaccount.providers.bitbucket', |
57 | 59 | 'allauth.socialaccount.providers.bitbucket_oauth2', |
58 | 60 | 'allauth.socialaccount.providers.bitly', |
61 | 'allauth.socialaccount.providers.cern', | |
59 | 62 | 'allauth.socialaccount.providers.coinbase', |
60 | 63 | 'allauth.socialaccount.providers.dataporten', |
61 | 64 | 'allauth.socialaccount.providers.daum', |
62 | 65 | 'allauth.socialaccount.providers.digitalocean', |
63 | 66 | 'allauth.socialaccount.providers.discord', |
67 | 'allauth.socialaccount.providers.disqus', | |
64 | 68 | 'allauth.socialaccount.providers.douban', |
65 | 69 | 'allauth.socialaccount.providers.draugiem', |
66 | 70 | 'allauth.socialaccount.providers.dropbox', |
108 | 112 | 'allauth.socialaccount.providers.twitter', |
109 | 113 | 'allauth.socialaccount.providers.untappd', |
110 | 114 | 'allauth.socialaccount.providers.vimeo', |
115 | 'allauth.socialaccount.providers.vimeo_oauth2', | |
111 | 116 | 'allauth.socialaccount.providers.vk', |
112 | 117 | 'allauth.socialaccount.providers.weibo', |
113 | 118 | 'allauth.socialaccount.providers.weixin', |
3 | 3 | Requirements |
4 | 4 | ------------ |
5 | 5 | |
6 | - Python 2.7, 3.3, 3.4, or 3.5 | |
7 | ||
8 | - Django (1.10+) | |
6 | - Python 2.7, 3.3, 3.4, 3.5 or 3.6 | |
7 | ||
8 | - Django (1.11+) | |
9 | 9 | |
10 | 10 | - python-openid or python3-openid (depending on your Python version) |
11 | 11 | |
36 | 36 | |
37 | 37 | - 500px |
38 | 38 | |
39 | - AgaveAPI (OAuth2) | |
40 | ||
39 | 41 | - Amazon (OAuth2) |
40 | 42 | |
41 | 43 | - AngelList (OAuth2) |
60 | 62 | |
61 | 63 | - Box (OAuth2) |
62 | 64 | |
65 | - CERN (OAuth2) | |
66 | ||
63 | 67 | - Dataporten (OAuth2) |
64 | 68 | |
65 | 69 | - Daum (OAuth2) |
66 | 70 | |
67 | 71 | - Douban (OAuth2) |
68 | 72 | |
73 | - Disqus (OAuth2) | |
74 | ||
69 | 75 | - Doximity (OAuth2) |
70 | 76 | |
71 | 77 | - Dropbox (OAuth, OAuth2) |
92 | 98 | |
93 | 99 | - GitLab (OAuth2) |
94 | 100 | |
101 | - Globus (OAuth2) | |
102 | ||
95 | 103 | - Google (OAuth2) |
96 | 104 | |
97 | 105 | - Hubic (OAuth2) |
158 | 166 | |
159 | 167 | - Untappd (OAuth2) |
160 | 168 | |
161 | - Vimeo (OAuth) | |
169 | - Vimeo (OAuth, OAuth2) | |
162 | 170 | |
163 | 171 | - VK (OAuth2) |
164 | 172 |
42 | 42 | Development callback URL |
43 | 43 | http://localhost:8000/accounts/500px/login/callback/ |
44 | 44 | |
45 | ||
46 | AgaveAPI | |
47 | -------- | |
48 | ||
49 | Account Signup | |
50 | https://public.agaveapi.co/create_account | |
51 | ||
52 | App registration | |
53 | Run ``client-create`` from the cli: https://bitbucket.org/agaveapi/cli/overview | |
54 | ||
55 | Development callback URL | |
56 | http://localhost:8000/accounts/agave/login/callback/ | |
57 | *May require https url, even for localhost* | |
45 | 58 | |
46 | 59 | Amazon |
47 | 60 | ------ |
177 | 190 | http://localhost:8000/accounts/box/login/callback/ |
178 | 191 | |
179 | 192 | |
193 | CERN | |
194 | ---- | |
195 | App registration (get your key and secret here) | |
196 | https://sso-management.web.cern.ch/OAuth/RegisterOAuthClient.aspx | |
197 | ||
198 | CERN OAuth2 Documentation | |
199 | https://espace.cern.ch/authentication/CERN%20Authentication/OAuth.aspx | |
200 | ||
201 | ||
180 | 202 | Dataporten |
181 | 203 | ---------- |
182 | ||
183 | 204 | App registration (get your key and secret here) |
184 | 205 | https://docs.dataporten.no/docs/gettingstarted/ |
185 | 206 | |
643 | 664 | } |
644 | 665 | |
645 | 666 | |
667 | Globus | |
668 | ------ | |
669 | ||
670 | Registering an application: | |
671 | https://developers.globus.org/ | |
672 | ||
673 | By default, you will have access to the openid, profile, and offline_access | |
674 | scopes. With the offline_access scope, the API will provide you with a | |
675 | refresh token. For additional scopes, see the Globus API docs: | |
676 | https://docs.globus.org/api/auth/reference/ | |
677 | ||
678 | .. code-block:: python | |
679 | ||
680 | SOCIALACCOUNT_PROVIDERS = { | |
681 | 'globus': { | |
682 | 'SCOPE': [ | |
683 | 'openid', | |
684 | 'profile', | |
685 | 'email', | |
686 | 'urn:globus:auth:scope:transfer.api.globus.org:all' | |
687 | ] | |
688 | } | |
689 | } | |
690 | ||
691 | ||
692 | ||
646 | 693 | |
647 | 694 | ------ |
648 | 695 | |
755 | 802 | SOCIALACCOUNT_PROVIDERS = { |
756 | 803 | 'linkedin': { |
757 | 804 | 'SCOPE': [ |
758 | 'r_emailaddress', | |
805 | 'r_basicprofile', | |
806 | 'r_emailaddress' | |
759 | 807 | ], |
760 | 808 | 'PROFILE_FIELDS': [ |
761 | 809 | 'id', |
782 | 830 | fetching the access token:: |
783 | 831 | |
784 | 832 | missing required parameters, includes an invalid parameter value, parameter more then once. : Unable to retrieve access token : authorization code not found |
833 | ||
834 | If you are using tokens originating from the mobile SDK, you will need to specify | |
835 | additional headers: | |
836 | ||
837 | .. code-block:: python | |
838 | ||
839 | SOCIALACCOUNT_PROVIDERS = { | |
840 | 'linkedin': { | |
841 | 'HEADERS': { | |
842 | 'x-li-src': 'msdk' | |
843 | } | |
844 | } | |
845 | } | |
785 | 846 | |
786 | 847 | App registration (get your key and secret here) |
787 | 848 | https://www.linkedin.com/secure/developer?newapp= |
1374 | 1435 | https://developer.vimeo.com/apps |
1375 | 1436 | |
1376 | 1437 | Development callback URL |
1377 | http://localhost:8000 | |
1378 | ||
1438 | http://localhost:8000/a | |
1439 | ||
1440 | Vimeo (OAuth 2) | |
1441 | ----- | |
1442 | ||
1443 | App registration (get your key and secret here) | |
1444 | https://developer.vimeo.com/apps | |
1445 | ||
1446 | Development callback URL | |
1447 | http://localhost:8000/accounts/vimeo_oauth2/login/callback/ | |
1379 | 1448 | |
1380 | 1449 | VK |
1381 | 1450 | -- |
147 | 147 | 'Framework :: Django', |
148 | 148 | 'Framework :: Django :: 1.11', |
149 | 149 | 'Framework :: Django :: 2.0', |
150 | 'Framework :: Django :: 2.1', | |
150 | 151 | ], |
151 | 152 | packages=find_packages(exclude=['example']), |
152 | 153 | package_data=package_data, |
49 | 49 | 'allauth', |
50 | 50 | 'allauth.account', |
51 | 51 | 'allauth.socialaccount', |
52 | 'allauth.socialaccount.providers.agave', | |
52 | 53 | 'allauth.socialaccount.providers.amazon', |
53 | 54 | 'allauth.socialaccount.providers.angellist', |
54 | 55 | 'allauth.socialaccount.providers.asana', |
62 | 63 | 'allauth.socialaccount.providers.bitbucket_oauth2', |
63 | 64 | 'allauth.socialaccount.providers.bitly', |
64 | 65 | 'allauth.socialaccount.providers.box', |
66 | 'allauth.socialaccount.providers.cern', | |
65 | 67 | 'allauth.socialaccount.providers.coinbase', |
66 | 68 | 'allauth.socialaccount.providers.dataporten', |
67 | 69 | 'allauth.socialaccount.providers.daum', |
68 | 70 | 'allauth.socialaccount.providers.digitalocean', |
69 | 71 | 'allauth.socialaccount.providers.discord', |
72 | 'allauth.socialaccount.providers.disqus', | |
70 | 73 | 'allauth.socialaccount.providers.douban', |
71 | 74 | 'allauth.socialaccount.providers.doximity', |
72 | 75 | 'allauth.socialaccount.providers.draugiem', |
84 | 87 | 'allauth.socialaccount.providers.fxa', |
85 | 88 | 'allauth.socialaccount.providers.github', |
86 | 89 | 'allauth.socialaccount.providers.gitlab', |
90 | 'allauth.socialaccount.providers.globus', | |
87 | 91 | 'allauth.socialaccount.providers.google', |
88 | 92 | 'allauth.socialaccount.providers.hubic', |
89 | 93 | 'allauth.socialaccount.providers.instagram', |
121 | 125 | 'allauth.socialaccount.providers.twitter', |
122 | 126 | 'allauth.socialaccount.providers.untappd', |
123 | 127 | 'allauth.socialaccount.providers.vimeo', |
128 | 'allauth.socialaccount.providers.vimeo_oauth2', | |
124 | 129 | 'allauth.socialaccount.providers.vk', |
125 | 130 | 'allauth.socialaccount.providers.weibo', |
126 | 131 | 'allauth.socialaccount.providers.weixin', |