Repository: pennersr/django-allauth
Pull request #3720 (2024-04-08 07:19:06)

Feat(accounts): Use select_related instead of prefetch_related
Small performance improvement by replacing prefetch_related with select_related. We can do that here because it's a ForeignKey, not a M2M relationship. This leads to performing a single database request vs 2 when using prefetch.

`(0.001) SELECT "account_emailaddress"."id", "account_emailaddress"."user_id", "account_emailaddress"."email", "account_emailaddress"."verified", "account_emailaddress"."primary", "user_user"."last_login", "user_user"."created_at", "user_user"."updated_at", "user_user"."id", "user_user"."username", "user_user"."email", "user_user"."avatar", "user_user"."password", "user_user"."score", "user_user"."is_creator", "user_user"."date_of_birth", "user_user"."is_active", "user_user"."is_superuser", "user_user"."is_staff" FROM "account_emailaddress" INNER JOIN "user_user" ON ("account_emailaddress"."user_id" = "user_user"."id") WHERE UPPER("account_emailaddress"."email"::text) = UPPER('myemail@test.com'); args=('myemail@test.com',); alias=default`




Patch:
diff --git a/AUTHORS b/AUTHORS
index ab41bdf6..9a0d08a7 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -15,6 +15,7 @@ Ahmet Emre Aladağ
 Aiden Lu
 Aldiantoro Nugroho
 Alexander Gaevsky
+Alfredo Altamirano
 Andrean Franc
 Andrei Satsevich
 Andrew Chen Wang
diff --git a/ChangeLog.rst b/ChangeLog.rst
index c8039b24..e084f3ab 100644
--- a/ChangeLog.rst
+++ b/ChangeLog.rst
@@ -6,6 +6,8 @@ Note worthy changes
 
 - Added a dummy provider, useful for testing purposes: ``allauth.socialaccount.providers.dummy``.
 
+- Added a new provider, Atlassian
+
 
 Backwards incompatible changes
 ------------------------------
diff --git a/allauth/account/utils.py b/allauth/account/utils.py
index 5c8f3a93..b9c17911 100644
--- a/allauth/account/utils.py
+++ b/allauth/account/utils.py
@@ -421,7 +421,7 @@ def filter_users_by_email(email, is_active=None, prefer_verified=False):
     from .models import EmailAddress
 
     User = get_user_model()
-    mails = EmailAddress.objects.filter(email__iexact=email).prefetch_related("user")
+    mails = EmailAddress.objects.filter(email__iexact=email).select_related("user")
     mails = list(mails)
     is_verified = False
     if prefer_verified:
diff --git a/allauth/locale/es/LC_MESSAGES/django.po b/allauth/locale/es/LC_MESSAGES/django.po
index 32c1c6d2..c151f2f3 100644
--- a/allauth/locale/es/LC_MESSAGES/django.po
+++ b/allauth/locale/es/LC_MESSAGES/django.po
@@ -7,15 +7,16 @@ msgstr ""
 "Project-Id-Version: 0.61.1\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2024-01-23 12:50-0600\n"
-"PO-Revision-Date: 2024-02-26 19:28+0100\n"
-"Last-Translator: Quique <cronopios@gmail.com>\n"
-"Language-Team: Spanish <>\n"
+"PO-Revision-Date: 2024-04-11 15:01+0000\n"
+"Last-Translator: gallegonovato <fran-carro@hotmail.es>\n"
+"Language-Team: Spanish <https://hosted.weblate.org/projects/django-allauth/"
+"django-allauth/es/>\n"
 "Language: es\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-"X-Generator: Gtranslator 42.0\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Weblate 5.5-dev\n"
 
 #: account/adapter.py:50
 msgid "Username can not be used. Please use other username."
@@ -247,7 +248,7 @@ msgstr "Códigos de recuperación"
 
 #: mfa/models.py:20
 msgid "TOTP Authenticator"
-msgstr ""
+msgstr "Verificador TOTP"
 
 #: socialaccount/adapter.py:31
 #, python-format
@@ -417,11 +418,11 @@ msgstr "Confirmar acceso"
 
 #: templates/account/base_reauthenticate.html:11
 msgid "Please reauthenticate to safeguard your account."
-msgstr ""
+msgstr "Por favor, vuelva a autenticarse para proteger su cuenta."
 
 #: templates/account/base_reauthenticate.html:17
 msgid "Alternative options"
-msgstr ""
+msgstr "Opciones alternativas"
 
 #: templates/account/email.html:4 templates/account/email.html:8
 msgid "Email Addresses"
@@ -486,6 +487,18 @@ msgid ""
 "\n"
 "%(password_reset_url)s"
 msgstr ""
+"Usted está recibiendo este correo electrónico porque usted u otra persona "
+"intentó registrarse para una cuenta de\n"
+"cuenta utilizando la dirección de correo electrónico\n"
+"\n"
+"%(email)s\n"
+"\n"
+"Sin embargo, ya existe una cuenta con esa dirección de correo electrónico.  "
+"En caso de que\n"
+"olvidado, utilice el procedimiento de olvido de contraseña para recuperar\n"
+"su cuenta:\n"
+"\n"
+"%(password_reset_url)s"
 
 #: templates/account/email/account_already_exists_subject.txt:3
 msgid "Account Already Exists"
@@ -510,6 +523,8 @@ msgid ""
 "You are receiving this mail because the following change was made to your "
 "account:"
 msgstr ""
+"Está recibiendo este correo porque se ha realizado el siguiente cambio en su "
+"cuenta:"
 
 #: templates/account/email/base_notification.txt:10
 #, python-format
@@ -521,47 +536,43 @@ msgid ""
 "- Browser: %(user_agent)s\n"
 "- Date: %(timestamp)s"
 msgstr ""
+"Si no reconoce este cambio, tome inmediatamente las precauciones de "
+"seguridad adecuadas. El cambio en su cuenta se origina en:\n"
+"\n"
+"- Dirección IP: %(ip)s\n"
+"- Navegador: %(user_agent)s\n"
+"- Fecha: %(timestamp)s"
 
 #: templates/account/email/email_changed_message.txt:4
 #, python-format
 msgid "Your email has been changed from %(from_email)s to %(to_email)s."
-msgstr ""
+msgstr "Tu email ha sido cambiado de %(from_email)s a %(to_email)s."
 
 #: templates/account/email/email_changed_subject.txt:3
-#, fuzzy
-#| msgid "Email address"
 msgid "Email Changed"
-msgstr "Correo electrónico"
+msgstr "Correo electrónico modificado"
 
 #: templates/account/email/email_confirm_message.txt:4
-#, fuzzy
-#| msgid "Your password has been deleted."
 msgid "Your email has been confirmed."
-msgstr "Tu contraseña fue eliminada."
+msgstr "Su correo electrónico ha sido verificado."
 
 #: templates/account/email/email_confirm_subject.txt:3
-#, fuzzy
-#| msgid "email confirmation"
 msgid "Email Confirmation"
-msgstr "confirmación de correo electrónico"
+msgstr "Correo electrónico confirmado"
 
 #: templates/account/email/email_confirmation_message.txt:5
-#, fuzzy, python-format
-#| msgid ""
-#| "You're receiving this e-mail because user %(user_display)s has given your "
-#| "e-mail address to register an account on %(site_domain)s.\n"
-#| "\n"
-#| "To confirm this is correct, go to %(activate_url)s"
+#, python-format
 msgid ""
 "You're receiving this email because user %(user_display)s has given your "
 "email address to register an account on %(site_domain)s.\n"
 "\n"
 "To confirm this is correct, go to %(activate_url)s"
 msgstr ""
-"Ha recibido este correo electrónico porque el usuario %(user_display)s ha "
-"proporcionado su dirección para registrar una cuenta en %(site_domain)s.\n"
+"Está recibiendo este correo electrónico porque el usuario %(user_display)s "
+"ha facilitado su dirección de correo electrónico para registrar una cuenta "
+"en %(site_domain)s.\n"
 "\n"
-"Para confirmar que esto es correcto, siga este enlace %(activate_url)s"
+"Para confirmar que esto es correcto, vaya a %(activate_url)s"
 
 #: templates/account/email/email_confirmation_subject.txt:3
 msgid "Please Confirm Your Email Address"
@@ -571,32 +582,22 @@ msgstr "Por favor, confirme su dirección de correo electrónico"
 #, python-format
 msgid "Email address %(deleted_email)s has been removed from your account."
 msgstr ""
+"La dirección de correo electrónico %(deleted_email)s ha sido eliminada de tu "
+"cuenta."
 
 #: templates/account/email/email_deleted_subject.txt:3
-#, fuzzy
-#| msgid "Remove"
 msgid "Email Removed"
-msgstr "Eliminar"
+msgstr "Correo electrónico eliminado"
 
 #: templates/account/email/password_changed_message.txt:4
-#, fuzzy
-#| msgid "Your password is now changed."
 msgid "Your password has been changed."
-msgstr "Su contraseña ha cambiado."
+msgstr "Su contraseña ha sido modificada."
 
 #: templates/account/email/password_changed_subject.txt:3
-#, fuzzy
-#| msgid "Password (again)"
 msgid "Password Changed"
-msgstr "Contraseña (de nuevo)"
+msgstr "Contraseña modificada"
 
 #: templates/account/email/password_reset_key_message.txt:4
-#, fuzzy
-#| msgid ""
-#| "You're receiving this e-mail because you or someone else has requested a "
-#| "password for your user account.\n"
-#| "It can be safely ignored if you did not request a password reset. Click "
-#| "the link below to reset your password."
 msgid ""
 "You're receiving this email because you or someone else has requested a "
 "password reset for your user account.\n"
@@ -604,9 +605,9 @@ msgid ""
 "link below to reset your password."
 msgstr ""
 "Está recibiendo este correo electrónico porque usted u otra persona ha "
-"solicitado una contraseña para su cuenta de usuario.\n"
-"Se puede ignorar de forma segura si no solicitó un restablecimiento de "
-"contraseña. Siga el siguiente enlace para restablecer su contraseña."
+"solicitado un restablecimiento de contraseña para su cuenta de usuario.\n"
+"Puedes ignorarlo si no lo has solicitado. Haga clic en el siguiente enlace "
+"para restablecer su contraseña."
 
 #: templates/account/email/password_reset_key_message.txt:9
 #, python-format
@@ -619,10 +620,8 @@ msgid "Password Reset Email"
 msgstr "Correo electrónico para restablecer contraseña"
 
 #: templates/account/email/password_reset_message.txt:4
-#, fuzzy
-#| msgid "Your password has been deleted."
 msgid "Your password has been reset."
-msgstr "Tu contraseña fue eliminada."
+msgstr "Su contraseña ha sido restablecida."
 
 #: templates/account/email/password_reset_subject.txt:3
 #: templates/account/password_reset.html:4
@@ -633,24 +632,15 @@ msgid "Password Reset"
 msgstr "Restablecer Contraseña"
 
 #: templates/account/email/password_set_message.txt:4
-#, fuzzy
-#| msgid "Your password has been deleted."
 msgid "Your password has been set."
-msgstr "Tu contraseña fue eliminada."
+msgstr "Su contraseña ha sido establecida."
 
 #: templates/account/email/password_set_subject.txt:3
-#, fuzzy
-#| msgid "Password Reset"
 msgid "Password Set"
-msgstr "Restablecer Contraseña"
+msgstr "Establecer contraseña"
 
 #: templates/account/email/unknown_account_message.txt:4
-#, fuzzy, python-format
-#| msgid ""
-#| "You're receiving this e-mail because you or someone else has requested a "
-#| "password for your user account.\n"
-#| "It can be safely ignored if you did not request a password reset. Click "
-#| "the link below to reset your password."
+#, python-format
 msgid ""
 "You are receiving this email because you or someone else has requested a\n"
 "password for your user account. However, we do not have any record of a "
@@ -662,42 +652,41 @@ msgid ""
 "If it was you, you can sign up for an account using the link below."
 msgstr ""
 "Está recibiendo este correo electrónico porque usted u otra persona ha "
-"solicitado una contraseña para su cuenta de usuario.\n"
-"Se puede ignorar de forma segura si no solicitó un restablecimiento de "
-"contraseña. Siga el siguiente enlace para restablecer su contraseña."
+"solicitado una\n"
+"contraseña para su cuenta de usuario. Sin embargo, no tenemos ningún "
+"registro de un usuario\n"
+"con email %(email)s en nuestra base de datos.\n"
+"\n"
+"Este correo puede ser ignorado con seguridad si usted no solicitó un "
+"restablecimiento de contraseña.\n"
+"\n"
+"Si has sido tú, puedes registrarte para obtener una cuenta utilizando el "
+"siguiente enlace."
 
 #: templates/account/email_change.html:5 templates/account/email_change.html:9
-#, fuzzy
-#| msgid "Email Addresses"
 msgid "Email Address"
-msgstr "Direcciones de correo electrónico"
+msgstr "Correo electrónico"
 
 #: templates/account/email_change.html:21
 #: templates/account/email_change.html:29
-#, fuzzy
-#| msgid "Current Password"
 msgid "Current email"
-msgstr "Contraseña actual"
+msgstr "Correo electrónico actual"
 
 #: templates/account/email_change.html:31
 msgid "Changing to"
-msgstr ""
+msgstr "Cambiando a"
 
 #: templates/account/email_change.html:35
-#, fuzzy
-#| msgid "Your primary email address must be verified."
 msgid "Your email address is still pending verification."
-msgstr "Su dirección principal de correo electrónico debe ser verificada."
+msgstr "Su dirección de correo electrónico está pendiente de verificación."
 
 #: templates/account/email_change.html:41
 msgid "Cancel Change"
-msgstr ""
+msgstr "Cancelar el cambio"
 
 #: templates/account/email_change.html:49
-#, fuzzy
-#| msgid "Change Email"
 msgid "Change to"
-msgstr "Cambiar correo electrónico"
+msgstr "Cambiar a"
 
 #: templates/account/email_change.html:55
 #: templates/allauth/layouts/base.html:29
@@ -710,16 +699,13 @@ msgid "Confirm Email Address"
 msgstr "Confirmar dirección de correo electrónico"
 
 #: templates/account/email_confirm.html:16
-#, fuzzy, python-format
-#| msgid ""
-#| "Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an e-"
-#| "mail address for user %(user_display)s."
+#, python-format
 msgid ""
 "Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an email "
 "address for user %(user_display)s."
 msgstr ""
-"Por favor confirme que <a href=\"mailto:%(email)s\">%(email)s</a> es una "
-"dirección de correo electrónico del usuario %(user_display)s."
+"Por favor, confirme que <a href=\"mailto:%(email)s\">%(email)s</a> es una "
+"dirección de correo electrónico para el usuario %(user_display)s."
 
 #: templates/account/email_confirm.html:23
 #: templates/account/reauthenticate.html:20
@@ -729,25 +715,22 @@ msgstr "Confirmar"
 
 #: templates/account/email_confirm.html:29
 #: templates/account/messages/email_confirmation_failed.txt:2
-#, fuzzy, python-format
-#| msgid "The social account is already connected to a different account."
+#, python-format
 msgid ""
 "Unable to confirm %(email)s because it is already confirmed by a different "
 "account."
-msgstr "Esta cuenta de red social ya ha sido asociada a otra cuenta."
+msgstr ""
+"No se puede confirmar %(email)s porque ya está confirmado por otra cuenta."
 
 #: templates/account/email_confirm.html:35
-#, fuzzy, python-format
-#| msgid ""
-#| "This e-mail confirmation link expired or is invalid. Please <a "
-#| "href=\"%(email_url)s\">issue a new e-mail confirmation request</a>."
+#, python-format
 msgid ""
 "This email confirmation link expired or is invalid. Please <a "
 "href=\"%(email_url)s\">issue a new email confirmation request</a>."
 msgstr ""
-"Este enlace de verificación de correo ha expirado o es inválido. Por favor "
-"<a href=\"%(email_url)s\">solicite una nueva verificación por correo "
-"electrónico.</a>."
+"Este enlace de confirmación por correo electrónico ha caducado o no es "
+"válido. Por favor, <a href=\"%(email_url)s\"> emita una nueva solicitud de "
+"confirmación por correo electrónico</a>."
 
 #: templates/account/login.html:5 templates/account/login.html:9
 #: templates/account/login.html:29 templates/allauth/layouts/base.html:36
@@ -758,16 +741,13 @@ msgid "Sign In"
 msgstr "Iniciar sesión"
 
 #: templates/account/login.html:12
-#, fuzzy, python-format
-#| msgid ""
-#| "If you have not created an account yet, then please\n"
-#| "<a href=\"%(signup_url)s\">sign up</a> first."
+#, python-format
 msgid ""
 "If you have not created an account yet, then please\n"
 "    <a href=\"%(signup_url)s\">sign up</a> first."
 msgstr ""
-"Si todavía no ha creado una cuenta, entonces por favor\n"
-"<a href=\"%(signup_url)s\">regístrese</a> primero."
+"Si aún no ha creado una cuenta, por favor\n"
+"    <a href=\"%(signup_url)s\">regístrese</a> primero."
 
 #: templates/account/logout.html:4 templates/account/logout.html:8
 #: templates/account/logout.html:23 templates/allauth/layouts/base.html:32
@@ -858,18 +838,13 @@ msgstr ""
 "contáctenos."
 
 #: templates/account/password_reset_done.html:16
-#, fuzzy
-#| msgid ""
-#| "We have sent you an e-mail. If you have not received it please check your "
-#| "spam folder. Otherwise contact us if you do not receive it in a few "
-#| "minutes."
 msgid ""
 "We have sent you an email. If you have not received it please check your "
 "spam folder. Otherwise contact us if you do not receive it in a few minutes."
 msgstr ""
-"Le hemos enviado un correo electrónico. Si no lo ha recibido, por favor "
-"revise su carpeta de correo no deseado. En caso contrario, póngase en "
-"contacto con nosotros si no lo recibe en unos minutos."
+"Le hemos enviado un correo electrónico. Si no lo ha recibido, compruebe su "
+"carpeta de correo no deseado. De lo contrario, póngase en contacto con "
+"nosotros si no lo recibe en unos minutos."
 
 #: templates/account/password_reset_from_key.html:10
 msgid "Bad Token"
@@ -939,18 +914,13 @@ msgid "Warning:"
 msgstr "Advertencia:"
 
 #: templates/account/snippets/warn_no_email.html:3
-#, fuzzy
-#| msgid ""
-#| "You currently do not have any e-mail address set up. You should really "
-#| "add an e-mail address so you can receive notifications, reset your "
-#| "password, etc."
 msgid ""
 "You currently do not have any email address set up. You should really add an "
 "email address so you can receive notifications, reset your password, etc."
 msgstr ""
-"Actualmente no tiene ninguna dirección de correo electrónico definida. "
-"Debería añadir una dirección de correo electrónico para poder recibir "
-"notificaciones, restablecer la contraseña, etc."
+"Actualmente no tienes ninguna dirección de correo electrónico configurada. "
+"Debería añadir una dirección de correo electrónico para recibir "
+"notificaciones, restablecer su contraseña, etc."
 
 #: templates/account/verification_sent.html:5
 #: templates/account/verification_sent.html:9
@@ -960,12 +930,6 @@ msgid "Verify Your Email Address"
 msgstr "Verifique su dirección de correo electrónico"
 
 #: templates/account/verification_sent.html:12
-#, fuzzy
-#| msgid ""
-#| "We have sent an e-mail to you for verification. Follow the link provided "
-#| "to finalize the signup process. If you do not see the verification e-mail "
-#| "in your main inbox, check your spam folder. Please contact us if you do "
-#| "not receive the verification e-mail within a few minutes."
 msgid ""
 "We have sent an email to you for verification. Follow the link provided to "
 "finalize the signup process. If you do not see the verification email in "
@@ -973,32 +937,22 @@ msgid ""
 "receive the verification email within a few minutes."
 msgstr ""
 "Le hemos enviado un correo electrónico para su verificación. Siga el enlace "
-"para completar el proceso de registro. Por favor contacte con nosotros si no "
-"lo recibe en unos minutos."
+"proporcionado para finalizar el proceso de registro. Si no ves el correo "
+"electrónico de verificación en tu bandeja de entrada principal, comprueba tu "
+"carpeta de correo no deseado. Por favor, póngase en contacto con nosotros si "
+"no recibe el correo electrónico de verificación en unos minutos."
 
 #: templates/account/verified_email_required.html:13
-#, fuzzy
-#| msgid ""
-#| "This part of the site requires us to verify that\n"
-#| "you are who you claim to be. For this purpose, we require that you\n"
-#| "verify ownership of your e-mail address. "
 msgid ""
 "This part of the site requires us to verify that\n"
 "you are who you claim to be. For this purpose, we require that you\n"
 "verify ownership of your email address. "
 msgstr ""
-"Esta parte del sitio web requiere que verifiquemos que es quien dice ser. "
-"Para este fin, le requerimos que verifique la propiedad de su correo "
-"electrónico. "
+"Esta parte de la página requiere que verifiquemos que\n"
+"usted es quien dice ser. Para ello, le pedimos que\n"
+"verifique la titularidad de su dirección de correo electrónico. "
 
 #: templates/account/verified_email_required.html:18
-#, fuzzy
-#| msgid ""
-#| "We have sent an e-mail to you for\n"
-#| "verification. Please click on the link inside that e-mail. If you do not "
-#| "see the verification e-mail in your main inbox, check your spam folder. "
-#| "Otherwise\n"
-#| "contact us if you do not receive it within a few minutes."
 msgid ""
 "We have sent an email to you for\n"
 "verification. Please click on the link inside that email. If you do not see "
@@ -1006,20 +960,20 @@ msgid ""
 "Otherwise\n"
 "contact us if you do not receive it within a few minutes."
 msgstr ""
-"Le hemos enviado un correo electrónico para su verificación. Por favor, siga "
-"el enlace de ese correo. Contacte con nosotros si no lo recibe en unos "
-"minutos."
+"Le hemos enviado un correo electrónico para\n"
+"verificación. Por favor, haga clic en el enlace que aparece en ese correo "
+"electrónico. Si no ve el correo electrónico de verificación en su bandeja de "
+"entrada principal, compruebe su carpeta de correo no deseado. De lo "
+"contrario,\n"
+"póngase en contacto con nosotros si no lo recibe en unos minutos."
 
 #: templates/account/verified_email_required.html:23
-#, fuzzy, python-format
-#| msgid ""
-#| "<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change "
-#| "your e-mail address</a>."
+#, python-format
 msgid ""
 "<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change your "
 "email address</a>."
 msgstr ""
-"<strong>Nota:</strong> todavía puede <a href=\"%(email_url)s\">cambiar su "
+"<strong>Nota:</strong> aún puedes <a href=\"%(email_url)s\">cambiar tu "
 "dirección de correo electrónico</a>."
 
 #: templates/allauth/layouts/base.html:18
@@ -1033,13 +987,15 @@ msgstr "Menú:"
 #: templates/mfa/authenticate.html:9 templates/mfa/index.html:5
 #: templates/mfa/index.html:9
 msgid "Two-Factor Authentication"
-msgstr ""
+msgstr "Autenticació de doble factor"
 
 #: templates/mfa/authenticate.html:12
 msgid ""
 "Your account is protected by two-factor authentication. Please enter an "
 "authenticator code:"
 msgstr ""
+"Su cuenta está protegida por doble factor de autenticación. Por favor, entre "
+"el código del autenticador:"
 
 #: templates/mfa/authenticate.html:27
 msgid "Cancel"
@@ -1049,58 +1005,56 @@ msgstr "Cancelar"
 msgid ""
 "A new set of Two-Factor Authentication recovery codes has been generated."
 msgstr ""
+"Se ha generado un nuevo conjunto de códigos de recuperación de Autenticación "
+"de Dos Factores."
 
 #: templates/mfa/email/recovery_codes_generated_subject.txt:3
 msgid "New Recovery Codes Generated"
-msgstr ""
+msgstr "Generados nevos códigos de recuperación"
 
 #: templates/mfa/email/totp_activated_message.txt:4
 #: templates/mfa/messages/totp_activated.txt:2
 msgid "Authenticator app activated."
-msgstr ""
+msgstr "La aplicación de autenticación ha sido activada."
 
 #: templates/mfa/email/totp_activated_subject.txt:3
-#, fuzzy
-#| msgid "token secret"
 msgid "Authenticator App Activated"
-msgstr "frase secreta de token"
+msgstr "Aplicación de autenticación activada."
 
 #: templates/mfa/email/totp_deactivated_message.txt:4
 #: templates/mfa/messages/totp_deactivated.txt:2
 msgid "Authenticator app deactivated."
-msgstr ""
+msgstr "Aplicación de autenticación desactivada."
 
 #: templates/mfa/email/totp_deactivated_subject.txt:3
-#, fuzzy
-#| msgid "token secret"
 msgid "Authenticator App Deactivated"
-msgstr "frase secreta de token"
+msgstr "Aplicación de autenticación desactivada."
 
 #: templates/mfa/index.html:14 templates/mfa/totp/base.html:4
 msgid "Authenticator App"
-msgstr ""
+msgstr "Aplicación de autenticación"
 
 #: templates/mfa/index.html:18
 msgid "Authentication using an authenticator app is active."
-msgstr ""
+msgstr "La autenticación con una aplicación de autenticación está activa."
 
 #: templates/mfa/index.html:20
 msgid "An authenticator app is not active."
-msgstr ""
+msgstr "No hay ninguna aplicación de autenticación activa."
 
 #: templates/mfa/index.html:28 templates/mfa/totp/deactivate_form.html:24
 msgid "Deactivate"
-msgstr ""
+msgstr "Desactivar"
 
 #: templates/mfa/index.html:32 templates/mfa/totp/activate_form.html:32
 msgid "Activate"
-msgstr ""
+msgstr "Activar"
 
 #: templates/mfa/index.html:42 templates/mfa/recovery_codes/base.html:4
 #: templates/mfa/recovery_codes/generate.html:6
 #: templates/mfa/recovery_codes/index.html:6
 msgid "Recovery Codes"
-msgstr ""
+msgstr "Códigos de recuperación"
 
 #: templates/mfa/index.html:47 templates/mfa/recovery_codes/index.html:9
 #, python-format
@@ -1109,62 +1063,64 @@ msgid ""
 msgid_plural ""
 "There are %(unused_count)s out of %(total_count)s recovery codes available."
 msgstr[0] ""
+"Hay %(unused_count)s de %(total_count)s códigos de recuperación disponibles."
 msgstr[1] ""
+"Hay %(unused_count)s de %(total_count)s códigos de recuperación disponibles."
 
 #: templates/mfa/index.html:50
 msgid "No recovery codes set up."
-msgstr ""
+msgstr "No se han configurado códigos de recuperación."
 
 #: templates/mfa/index.html:59
 msgid "View"
-msgstr ""
+msgstr "Mostrar"
 
 #: templates/mfa/index.html:65
 msgid "Download"
-msgstr ""
+msgstr "Descargar"
 
 #: templates/mfa/index.html:73 templates/mfa/recovery_codes/generate.html:29
 msgid "Generate"
-msgstr ""
+msgstr "Generar"
 
 #: templates/mfa/messages/recovery_codes_generated.txt:2
 msgid "A new set of recovery codes has been generated."
-msgstr ""
+msgstr "Se ha generado un nuevo conjunto de código de recuperación."
 
 #: templates/mfa/reauthenticate.html:5
-#, fuzzy
-#| msgid "token secret"
 msgid "Enter an authenticator code:"
-msgstr "frase secreta de token"
+msgstr "Ingrese un código de autenticación:"
 
 #: templates/mfa/recovery_codes/generate.html:9
 msgid "You are about to generate a new set of recovery codes for your account."
 msgstr ""
+"Está a punto de generar un nuevo conjunto de código de recuperación para su "
+"cuenta."
 
 #: templates/mfa/recovery_codes/generate.html:11
 msgid "This action will invalidate your existing codes."
-msgstr ""
+msgstr "Esta operación invalidará sus códigos existentes."
 
 #: templates/mfa/recovery_codes/generate.html:13
 msgid "Are you sure?"
-msgstr ""
+msgstr "¿Está seguro?"
 
 #: templates/mfa/recovery_codes/index.html:13
 msgid "Unused codes"
-msgstr ""
+msgstr "Códigos no utilizados"
 
 #: templates/mfa/recovery_codes/index.html:25
 msgid "Download codes"
-msgstr ""
+msgstr "Descarga los códigos"
 
 #: templates/mfa/recovery_codes/index.html:30
 msgid "Generate new codes"
-msgstr ""
+msgstr "Crear nuevos códigos"
 
 #: templates/mfa/totp/activate_form.html:4
 #: templates/mfa/totp/activate_form.html:8
 msgid "Activate Authenticator App"
-msgstr ""
+msgstr "Activar la aplicación de autenticación"
 
 #: templates/mfa/totp/activate_form.html:11
 msgid ""
@@ -1172,47 +1128,46 @@ msgid ""
 "below with your authenticator app. Then, input the verification code "
 "generated by the app below."
 msgstr ""
+"Escanee el código QR a continuación con su aplicación de autenticación para "
+"proteger su cuenta con autenticación de dos factores. Luego, ingrese el "
+"código de verificación generado por la aplicación a continuación."
 
 #: templates/mfa/totp/activate_form.html:21
-#, fuzzy
-#| msgid "token secret"
 msgid "Authenticator secret"
-msgstr "frase secreta de token"
+msgstr "Secreto de autenticador"
 
 #: templates/mfa/totp/activate_form.html:24
 msgid ""
 "You can store this secret and use it to reinstall your authenticator app at "
 "a later time."
 msgstr ""
+"Puede guardar este secreto y usarlo más tarde para reinstalar su aplicación "
+"de autenticación."
 
 #: templates/mfa/totp/deactivate_form.html:5
 #: templates/mfa/totp/deactivate_form.html:9
 msgid "Deactivate Authenticator App"
-msgstr ""
+msgstr "Deshabilitar la aplicación de autenticación"
 
 #: templates/mfa/totp/deactivate_form.html:12
 msgid ""
 "You are about to deactivate authenticator app based authentication. Are you "
 "sure?"
 msgstr ""
+"Está a punto de desactivar la autenticación a través de la aplicación de "
+"autenticación. ¿Está seguro?"
 
 #: templates/socialaccount/authentication_error.html:5
 #: templates/socialaccount/authentication_error.html:9
-#, fuzzy
-#| msgid "Social Network Login Failure"
 msgid "Third-Party Login Failure"
-msgstr "Error de inicio de sesión con red social"
+msgstr "Falló la autenticación de terceros"
 
 #: templates/socialaccount/authentication_error.html:11
-#, fuzzy
-#| msgid ""
-#| "An error occurred while attempting to login via your social network "
-#| "account."
 msgid ""
 "An error occurred while attempting to login via your third-party account."
 msgstr ""
-"Se produjo un error al intentar iniciar sesión a través de su cuenta de red "
-"social."
+"Se produjo un error al intentar iniciar sesión a través de su cuenta de "
+"terceros."
 
 #: templates/socialaccount/connections.html:5
 #: templates/socialaccount/connections.html:9
@@ -1220,40 +1175,30 @@ msgid "Account Connections"
 msgstr "Conexiones de Cuenta"
 
 #: templates/socialaccount/connections.html:13
-#, fuzzy
-#| msgid ""
-#| "You can sign in to your account using any of the following third party "
-#| "accounts:"
 msgid ""
 "You can sign in to your account using any of the following third-party "
 "accounts:"
-msgstr "Puede iniciar sesión con alguna de las siguientes cuentas externas:"
+msgstr ""
+"Puede iniciar sesión en su cuenta utilizando una de las siguientes cuentas "
+"de terceros:"
 
 #: templates/socialaccount/connections.html:45
-#, fuzzy
-#| msgid ""
-#| "You currently have no social network accounts connected to this account."
 msgid "You currently have no third-party accounts connected to this account."
-msgstr ""
-"Actualmente no tiene ninguna cuenta de red social asociada a esta cuenta."
+msgstr "Actualmente no tiene cuentas de terceros conectadas a esta cuenta."
 
 #: templates/socialaccount/connections.html:48
-#, fuzzy
-#| msgid "Add a 3rd Party Account"
 msgid "Add a Third-Party Account"
-msgstr "Agregar una cuenta de una red social externa"
+msgstr "Agregar una cuenta de terceros"
 
 #: templates/socialaccount/email/account_connected_message.txt:4
 #, python-format
 msgid ""
 "A third-party account from %(provider)s has been connected to your account."
-msgstr ""
+msgstr "Una cuenta de terceros de %(provider)s se ha conectado a su cuenta."
 
 #: templates/socialaccount/email/account_connected_subject.txt:3
-#, fuzzy
-#| msgid "Add a 3rd Party Account"
 msgid "Third-Party Account Connected"
-msgstr "Agregar una cuenta de una red social externa"
+msgstr "Cuenta de terceros vinculada"
 
 #: templates/socialaccount/email/account_disconnected_message.txt:4
 #, python-format
@@ -1261,6 +1206,7 @@ msgid ""
 "A third-party account from %(provider)s has been disconnected from your "
 "account."
 msgstr ""
+"La cuenta de terceros desde %(provider)s ha sido desvinculada de tu cuenta."
 
 #: templates/socialaccount/email/account_disconnected_subject.txt:3
 msgid "Third-Party Account Disconnected"
diff --git a/allauth/locale/ja/LC_MESSAGES/django.po b/allauth/locale/ja/LC_MESSAGES/django.po
index 2e96e82d..2550e118 100644
--- a/allauth/locale/ja/LC_MESSAGES/django.po
+++ b/allauth/locale/ja/LC_MESSAGES/django.po
@@ -3,20 +3,21 @@
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
-#, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2024-01-17 12:01-0600\n"
-"PO-Revision-Date: 2024-01-28 12:36+0900\n"
-"Last-Translator: k-brahma <k.brahma.nirvana@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: ja-JP\n"
+"PO-Revision-Date: 2024-03-29 08:01+0000\n"
+"Last-Translator: SATOH Fumiyasu <fumiyas@osstech.co.jp>\n"
+"Language-Team: Japanese <https://hosted.weblate.org/projects/django-allauth/"
+"django-allauth/ja/>\n"
+"Language: ja\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 5.5-dev\n"
 
 #: account/adapter.py:50
 msgid "Username can not be used. Please use other username."
@@ -35,10 +36,8 @@ msgid "Please type your current password."
 msgstr "現在のパスワードを入力してください。"
 
 #: account/adapter.py:60
-#, fuzzy
-#| msgid "Current Password"
 msgid "Incorrect password."
-msgstr "現在のパスワード"
+msgstr "不正なパスワードです。"
 
 #: account/adapter.py:61
 #, python-brace-format
@@ -58,10 +57,8 @@ msgid "Use your authenticator app"
 msgstr "認証アプリを利用する"
 
 #: account/admin.py:23
-#, fuzzy
-#| msgid "Your primary email address must be verified."
 msgid "Mark selected email addresses as verified"
-msgstr "メインのメールアドレスは確認済みでなければいけません。"
+msgstr "確認済みにするメールアドレスを選択"
 
 #: account/apps.py:11
 msgid "Accounts"
@@ -117,13 +114,12 @@ msgid "Login"
 msgstr "ログイン"
 
 #: account/forms.py:146
-#| msgid "Forgot Password?"
 msgid "Forgot your password?"
-msgstr "パスワードをお忘れですか？"
+msgstr "パスワードをお忘れですか?"
 
 #: account/forms.py:316
 msgid "Email (again)"
-msgstr "メールアドレス（確認用）"
+msgstr "メールアドレス (確認用)"
 
 #: account/forms.py:320
 #| msgid "email confirmation"
@@ -132,7 +128,7 @@ msgstr "メールアドレスの確認"
 
 #: account/forms.py:328
 msgid "Email (optional)"
-msgstr "メールアドレス（オプション）"
+msgstr "メールアドレス (オプション)"
 
 #: account/forms.py:383
 #| msgid "You must type the same password each time."
@@ -141,17 +137,16 @@ msgstr "同じパスワードを入力してください。"
 
 #: account/forms.py:418 account/forms.py:557
 msgid "Password (again)"
-msgstr "パスワード（再入力）"
+msgstr "パスワード (再入力)"
 
 #: account/forms.py:489
 msgid "This email address is already associated with this account."
 msgstr "このメールアドレスはすでに登録されています。"
 
 #: account/forms.py:491
-#, fuzzy, python-format
-#| msgid "Your account has no verified email address."
+#, python-format
 msgid "You cannot add more than %d email addresses."
-msgstr "確認済みのメールアドレスの登録が必要です。"
+msgstr "メールアドレスは %d 個までしか登録できません。"
 
 #: account/forms.py:529
 msgid "Current Password"
@@ -163,7 +158,7 @@ msgstr "新しいパスワード"
 
 #: account/forms.py:535 account/forms.py:638
 msgid "New Password (again)"
-msgstr "新しいパスワード（再入力）"
+msgstr "新しいパスワード (再入力)"
 
 #: account/forms.py:658
 msgid "The password reset token was invalid."
@@ -229,15 +224,15 @@ msgstr "コードが正しくありません。"
 
 #: mfa/adapter.py:27
 msgid "You cannot deactivate two-factor authentication."
-msgstr ""
+msgstr "二要素認証は無効化できません。"
 
 #: mfa/apps.py:9
 msgid "MFA"
-msgstr ""
+msgstr "多要素認証"
 
 #: mfa/forms.py:15 mfa/forms.py:17 mfa/forms.py:52
 msgid "Code"
-msgstr ""
+msgstr "コード"
 
 #: mfa/forms.py:50
 msgid "Authenticator code"
@@ -245,23 +240,19 @@ msgstr "認証アプリコード"
 
 #: mfa/models.py:19
 msgid "Recovery codes"
-msgstr ""
+msgstr "リカバリーコード"
 
 #: mfa/models.py:20
 msgid "TOTP Authenticator"
-msgstr ""
+msgstr "TOTP 認証アプリ"
 
 #: socialaccount/adapter.py:31
-#, fuzzy, python-format
-#| msgid ""
-#| "An account already exists with this e-mail address. Please sign in to "
-#| "that account first, then connect your %s account."
+#, python-format
 msgid ""
 "An account already exists with this email address. Please sign in to that "
 "account first, then connect your %s account."
-msgstr ""
-"このメールアドレスを使用するアカウントが既にあります。そのアカウントにログイ"
-"ンしてから%sアカウントを接続してください"
+msgstr "このメールアドレスを使用するアカウントが既にあります。"
+"そのアカウントにログインしてから %s アカウントを接続してください。"
 
 #: socialaccount/adapter.py:148
 msgid "Your account has no password set up."
@@ -290,11 +281,11 @@ msgstr "ユーザー名"
 
 #: socialaccount/models.py:52
 msgid "client id"
-msgstr "ユーザID"
+msgstr "ユーザー ID"
 
 #: socialaccount/models.py:54
 msgid "App ID, or consumer key"
-msgstr "App IDもしくはコンシューマキー"
+msgstr "App ID もしくはコンシューマキー"
 
 #: socialaccount/models.py:57
 msgid "secret key"
@@ -302,8 +293,7 @@ msgstr "シークレットキー"
 
 #: socialaccount/models.py:60
 msgid "API secret, client secret, or consumer secret"
-msgstr ""
-"APIシークレット、クライアントシークレット、またはコンシューマーシークレット"
+msgstr "API シークレット、クライアントシークレット、またはコンシューマーシークレット"
 
 #: socialaccount/models.py:63
 msgid "Key"
@@ -319,7 +309,7 @@ msgstr "ソーシャルアプリケーション"
 
 #: socialaccount/models.py:111
 msgid "uid"
-msgstr ""
+msgstr "ユーザー名"
 
 #: socialaccount/models.py:113
 msgid "last login"
@@ -347,7 +337,7 @@ msgstr "トークン"
 
 #: socialaccount/models.py:155
 msgid "\"oauth_token\" (OAuth1) or access token (OAuth2)"
-msgstr "\"oauth_token\" (OAuth1) もしくは Access Token (OAuth2)"
+msgstr "「oauth_token」(OAuth1) もしくは Access Token (OAuth2)"
 
 #: socialaccount/models.py:159
 msgid "token secret"
@@ -355,7 +345,7 @@ msgstr "トークンシークレット"
 
 #: socialaccount/models.py:160
 msgid "\"oauth_token_secret\" (OAuth1) or refresh token (OAuth2)"
-msgstr "\"oauth_token_secret\" (OAuth1) もしくは Refresh Token (OAuth2)"
+msgstr "「oauth_token_secret」(OAuth1) もしくは Refresh Token (OAuth2)"
 
 #: socialaccount/models.py:163
 msgid "expires at"
@@ -374,43 +364,38 @@ msgid "Invalid profile data"
 msgstr "無効なプロファイルデータ"
 
 #: socialaccount/providers/oauth/client.py:85
-#, fuzzy, python-format
-#| msgid "Invalid response while obtaining request token from \"%s\"."
+#, python-format
 msgid ""
 "Invalid response while obtaining request token from \"%s\". Response was: %s."
-msgstr ""
-"不正なレスポンスが返されたため、 \"%s\" からリクエストトークンを取得できませ"
-"んでした。"
+msgstr "「%s」からのリクエストトークン取得中に不正な応答がありました。レスポンス: %s"
 
 #: socialaccount/providers/oauth/client.py:119
 #: socialaccount/providers/pocket/client.py:86
 #, python-format
 msgid "Invalid response while obtaining access token from \"%s\"."
-msgstr ""
-"不正なレスポンスが返されたため、 \"%s\" からアクセストークンを取得できません"
-"でした。"
+msgstr "不正なレスポンスが返されたため、「%s」からアクセストークンを取得できませんで"
+"した。"
 
 #: socialaccount/providers/oauth/client.py:140
 #, python-format
 msgid "No request token saved for \"%s\"."
-msgstr "\"%s\" のリクエストトークンを保存できませんでした。"
+msgstr "「%s」のリクエストトークンを保存できませんでした。"
 
 #: socialaccount/providers/oauth/client.py:191
 #, python-format
 msgid "No access token saved for \"%s\"."
-msgstr "\"%s\" のアクセストークンを保存できませんでした。"
+msgstr "「%s」のアクセストークンを保存できませんでした。"
 
 #: socialaccount/providers/oauth/client.py:212
 #, python-format
 msgid "No access to private resources at \"%s\"."
-msgstr "\"%s\" の情報にアクセスできませんでした。"
+msgstr "「%s」の情報にアクセスできませんでした。"
 
 #: socialaccount/providers/pocket/client.py:41
 #, python-format
 msgid "Invalid response while obtaining request token from \"%s\"."
-msgstr ""
-"不正なレスポンスが返されたため、 \"%s\" からリクエストトークンを取得できませ"
-"んでした。"
+msgstr "不正なレスポンスが返されたため、「%s」からリクエストトークンを取得できません"
+"でした。"
 
 #: templates/account/account_inactive.html:5
 #: templates/account/account_inactive.html:9
@@ -440,7 +425,7 @@ msgstr "メールアドレス"
 
 #: templates/account/email.html:11
 msgid "The following email addresses are associated with your account:"
-msgstr "以下のメールアドレスがアカウントに登録されています："
+msgstr "以下のメールアドレスがアカウントに登録されています:"
 
 #: templates/account/email.html:23
 msgid "Verified"
@@ -476,7 +461,7 @@ msgstr "メールアドレスの登録"
 
 #: templates/account/email.html:79
 msgid "Do you really want to remove the selected email address?"
-msgstr "選択されたメールアドレスを削除してもよろしいですか？"
+msgstr "選択されたメールアドレスを削除してもよろしいですか?"
 
 #: templates/account/email/account_already_exists_message.txt:4
 #, python-format
@@ -498,12 +483,12 @@ msgstr ""
 
 #: templates/account/email/account_already_exists_subject.txt:3
 msgid "Account Already Exists"
-msgstr ""
+msgstr "アカウントが既に存在"
 
 #: templates/account/email/base_message.txt:1
 #, python-format
 msgid "Hello from %(site_name)s!"
-msgstr "こんにちは、%(site_name)sです。"
+msgstr "こんにちは、%(site_name)s!"
 
 #: templates/account/email/base_message.txt:5
 #, python-format
@@ -511,7 +496,7 @@ msgid ""
 "Thank you for using %(site_name)s!\n"
 "%(site_domain)s"
 msgstr ""
-"%(site_name)sを利用いただきありがとうございます!\n"
+"%(site_name)s を利用いただきありがとうございます!\n"
 "%(site_domain)s"
 
 #: templates/account/email/base_notification.txt:5
@@ -542,9 +527,8 @@ msgid "Email Changed"
 msgstr "メールアドレスが変更されました"
 
 #: templates/account/email/email_confirm_message.txt:4
-#| msgid "You have confirmed %(email)s."
 msgid "Your email has been confirmed."
-msgstr "あなたのメールアドレスは確認されました。"
+msgstr "あなたのメールアドレスが確認されました。"
 
 #: templates/account/email/email_confirm_subject.txt:3
 #| msgid "email confirmation"
@@ -558,8 +542,10 @@ msgid ""
 "\n"
 "To confirm this is correct, go to %(activate_url)s"
 msgstr ""
-"%(user_display)s さんが %(site_domain)s にこのメールアドレスを登録しようとしています。\n"
-"問題がなければ、確認のために以下のURLをクリックしてください。\n"
+"%(user_display)s さんが %(site_domain)s "
+"にこのメールアドレスを登録しようとしています。\n"
+"\n"
+"問題がなければ、確認のために下記の URL をクリックしてください。\n"
 "%(activate_url)s"
 
 #: templates/account/email/email_confirmation_subject.txt:3
@@ -569,7 +555,7 @@ msgstr "メールアドレスを確認してください"
 #: templates/account/email/email_deleted_message.txt:4
 #, python-format
 msgid "Email address %(deleted_email)s has been removed from your account."
-msgstr "メールアドレス %(deleted_email)s はあなたのアカウントから削除されました。"
+msgstr "メールアドレス %(deleted_email)s があなたのアカウントから削除されました。"
 
 #: templates/account/email/email_deleted_subject.txt:3
 #| msgid "Remove"
@@ -587,26 +573,22 @@ msgid "Password Changed"
 msgstr "パスワードが変更されました"
 
 #: templates/account/email/password_reset_key_message.txt:4
-#| msgid ""
-#| "You're receiving this e-mail because you or someone else has requested a "
-#| "password for your user account.\n"
-#| "It can be safely ignored if you did not request a password reset. Click "
-#| "the link below to reset your password."
 msgid ""
 "You're receiving this email because you or someone else has requested a "
 "password reset for your user account.\n"
 "It can be safely ignored if you did not request a password reset. Click the "
 "link below to reset your password."
 msgstr ""
-"このメールは、あなた（もしくは別の誰か）がパスワードの再設定を行おうとしたた"
-"めに送られました。\n"
+"このメールは、あなた (もしくは別の誰か) "
+"がパスワードの再設定を行おうとしたために送られました。\n"
 "パスワードの再設定を要求したのがあなたではない場合、このメールは無視してくだ"
-"さい。パスワードを再設定するためには、以下のリンクをクリックしてください。"
+"さい。\n"
+"パスワードを再設定するためには、以下のリンクをクリックしてください。"
 
 #: templates/account/email/password_reset_key_message.txt:9
 #, python-format
 msgid "In case you forgot, your username is %(username)s."
-msgstr "あなたのアカウント（ユーザー名）は %(username)s です。"
+msgstr "あなたのアカウントのユーザー名は %(username)s です。"
 
 #: templates/account/email/password_reset_key_subject.txt:3
 #: templates/account/email/unknown_account_subject.txt:3
@@ -632,9 +614,8 @@ msgid "Your password has been set."
 msgstr "パスワードが設定されました。"
 
 #: templates/account/email/password_set_subject.txt:3
-#| msgid "Password Reset"
 msgid "Password Set"
-msgstr "パスワード再設定"
+msgstr "パスワード設定"
 
 #: templates/account/email/unknown_account_message.txt:4
 #| msgid ""
@@ -682,10 +663,8 @@ msgid "Cancel Change"
 msgstr ""
 
 #: templates/account/email_change.html:49
-#, fuzzy
-#| msgid "Email"
 msgid "Change to"
-msgstr "メールアドレス"
+msgstr ""
 
 #: templates/account/email_change.html:55
 #: templates/allauth/layouts/base.html:29
@@ -714,24 +693,20 @@ msgstr "確認する"
 
 #: templates/account/email_confirm.html:29
 #: templates/account/messages/email_confirmation_failed.txt:2
-#, fuzzy, python-format
-#| msgid "The social account is already connected to a different account."
+#, python-format
 msgid ""
 "Unable to confirm %(email)s because it is already confirmed by a different "
 "account."
-msgstr "この外部アカウントは他のアカウントにリンクされています。"
+msgstr "%(email)s はすでにほかのアカウントで確認済みです。"
 
 #: templates/account/email_confirm.html:35
-#, fuzzy, python-format
-#| msgid ""
-#| "This e-mail confirmation link expired or is invalid. Please <a "
-#| "href=\"%(email_url)s\">issue a new e-mail confirmation request</a>."
+#, python-format
 msgid ""
 "This email confirmation link expired or is invalid. Please <a "
 "href=\"%(email_url)s\">issue a new email confirmation request</a>."
 msgstr ""
-"メールアドレス確認用のリンクが不正か、期限が切れています。<a "
-"href=\"%(email_url)s\">確認用のメールを再送</a>してください。"
+"メールアドレス確認用のリンクが不正か、期限が切れています。<a href=\""
+"%(email_url)s\">確認用のメールを再送</a>してください。"
 
 #: templates/account/login.html:5 templates/account/login.html:9
 #: templates/account/login.html:29 templates/allauth/layouts/base.html:36
@@ -745,8 +720,8 @@ msgstr "ログイン"
 msgid ""
 "If you have not created an account yet, then please\n"
 "    <a href=\"%(signup_url)s\">sign up</a> first."
-msgstr ""
-"アカウントをまだお持ちでなければ、こちらから <a href=\"%(signup_url)s\">ユーザー登録</a> してください。"
+msgstr "アカウントをまだお持ちでなければ、 <a href=\"%(signup_url)s\""
+">こちらからユーザー登録</a> してください。"
 
 #: templates/account/logout.html:4 templates/account/logout.html:8
 #: templates/account/logout.html:23 templates/allauth/layouts/base.html:32
@@ -756,22 +731,22 @@ msgstr "ログアウト"
 
 #: templates/account/logout.html:10
 msgid "Are you sure you want to sign out?"
-msgstr "ログアウトしますか？"
+msgstr "ログアウトしますか?"
 
 #: templates/account/messages/cannot_delete_primary_email.txt:2
 #, python-format
 msgid "You cannot remove your primary email address (%(email)s)."
-msgstr "メインのメールアドレス（%(email)s）を削除することはできません。"
+msgstr "メインのメールアドレス (%(email)s) を削除することはできません。"
 
 #: templates/account/messages/email_confirmation_sent.txt:2
 #, python-format
 msgid "Confirmation email sent to %(email)s."
-msgstr "%(email)s に確認メールを送信しました。"
+msgstr "確認メールを %(email)s へ送信しました。"
 
 #: templates/account/messages/email_confirmed.txt:2
 #, python-format
 msgid "You have confirmed %(email)s."
-msgstr "%(email)s は確認されました。"
+msgstr "%(email)s が確認されました。"
 
 #: templates/account/messages/email_deleted.txt:2
 #, python-format
@@ -816,14 +791,14 @@ msgstr "パスワード変更"
 
 #: templates/account/password_change.html:21
 msgid "Forgot Password?"
-msgstr "パスワードをお忘れですか？"
+msgstr "パスワードをお忘れですか?"
 
 #: templates/account/password_reset.html:14
 msgid ""
 "Forgotten your password? Enter your email address below, and we'll send you "
 "an email allowing you to reset it."
-msgstr ""
-"パスワードをお忘れですか？パスワードをリセットするために、メールアドレスを入力してください。"
+msgstr "パスワードをお忘れですか? "
+"パスワードをリセットするために、メールアドレスを入力してください。"
 
 #: templates/account/password_reset.html:25
 msgid "Reset My Password"
@@ -907,7 +882,7 @@ msgstr "%(user_display)s さんとしてすでにログイン中です。"
 
 #: templates/account/snippets/warn_no_email.html:3
 msgid "Warning:"
-msgstr "注意："
+msgstr "注意:"
 
 #: templates/account/snippets/warn_no_email.html:3
 msgid ""
@@ -936,11 +911,6 @@ msgstr ""
 "さい。"
 
 #: templates/account/verified_email_required.html:13
-#, fuzzy
-#| msgid ""
-#| "This part of the site requires us to verify that\n"
-#| "you are who you claim to be. For this purpose, we require that you\n"
-#| "verify ownership of your e-mail address. "
 msgid ""
 "This part of the site requires us to verify that\n"
 "you are who you claim to be. For this purpose, we require that you\n"
@@ -948,7 +918,7 @@ msgid ""
 msgstr ""
 "このページにアクセスするためには、本人確認が必要です。\n"
 "そのために、登録されているメールアドレスがご自身のものであることを確認してい"
-"ただきます。"
+"ただきます。 "
 
 #: templates/account/verified_email_required.html:18
 msgid ""
@@ -958,8 +928,10 @@ msgid ""
 "Otherwise\n"
 "contact us if you do not receive it within a few minutes."
 msgstr ""
-"確認のためのメールを送信しました。メールに記載されたリンクをクリックしてください。\n"
-"確認メールが受信ボックスに見つからない場合は、スパムフォルダをチェックしてください。"
+"確認のためのメールを送信しました。メールに記載されたリンクをクリックしてくだ"
+"さい。\n"
+"確認メールが受信ボックスに見つからない場合は、迷惑メールフォルダをチェックし"
+"てください。\n"
 "数分以内にメールが届かない場合はご連絡ください。"
 
 #: templates/account/verified_email_required.html:23
@@ -972,24 +944,23 @@ msgstr ""
 
 #: templates/allauth/layouts/base.html:18
 msgid "Messages:"
-msgstr "メッセージ"
+msgstr "メッセージ:"
 
 #: templates/allauth/layouts/base.html:25
 msgid "Menu:"
-msgstr "メニュー"
+msgstr "メニュー:"
 
 #: templates/mfa/authenticate.html:9 templates/mfa/index.html:5
 #: templates/mfa/index.html:9
 msgid "Two-Factor Authentication"
-msgstr "二段階認証"
+msgstr "二要素認証"
 
 #: templates/mfa/authenticate.html:12
 msgid ""
 "Your account is protected by two-factor authentication. Please enter an "
 "authenticator code:"
-msgstr ""
-"あなたのアカウントは二段階認証で保護されています。"
-"認証コードを入力してください:"
+msgstr "あなたのアカウントは二要素認証で保護されています。認証コードを入力してくださ"
+"い:"
 
 #: templates/mfa/authenticate.html:27
 msgid "Cancel"
@@ -998,11 +969,11 @@ msgstr "キャンセル"
 #: templates/mfa/email/recovery_codes_generated_message.txt:4
 msgid ""
 "A new set of Two-Factor Authentication recovery codes has been generated."
-msgstr "二段階認証用のリカバリーコードを新たに生成しました。"
+msgstr "二要素認証用のリカバリーコードを新たに生成しました。"
 
 #: templates/mfa/email/recovery_codes_generated_subject.txt:3
 msgid "New Recovery Codes Generated"
-msgstr "二段階認証用のリカバリーコードを生成しました。"
+msgstr "二要素認証用のリカバリーコードを生成しました"
 
 #: templates/mfa/email/totp_activated_message.txt:4
 #: templates/mfa/messages/totp_activated.txt:2
@@ -1011,7 +982,7 @@ msgstr "認証アプリが有効化されました。"
 
 #: templates/mfa/email/totp_activated_subject.txt:3
 msgid "Authenticator App Activated"
-msgstr "認証アプリが有効化されました。"
+msgstr "認証アプリが有効化されました"
 
 #: templates/mfa/email/totp_deactivated_message.txt:4
 #: templates/mfa/messages/totp_deactivated.txt:2
@@ -1019,10 +990,8 @@ msgid "Authenticator app deactivated."
 msgstr "認証アプリが無効化されました。"
 
 #: templates/mfa/email/totp_deactivated_subject.txt:3
-#, fuzzy
-#| msgid "token secret"
 msgid "Authenticator App Deactivated"
-msgstr "トークンシークレット"
+msgstr "認証アプリが無効化されました"
 
 #: templates/mfa/index.html:14 templates/mfa/totp/base.html:4
 msgid "Authenticator App"
@@ -1056,10 +1025,7 @@ msgid ""
 "There is %(unused_count)s out of %(total_count)s recovery codes available."
 msgid_plural ""
 "There are %(unused_count)s out of %(total_count)s recovery codes available."
-msgstr[0] ""
-"利用可能なリカバリーコードは%(unused_count)s個中%(total_count)s個です。"
-msgstr[1] ""
-"利用可能なリカバリーコードは%(unused_count)s個中%(total_count)s個です。"
+msgstr[0] "利用可能なリカバリーコードは %(unused_count)s 個中 %(total_count)s 個です。"
 
 #: templates/mfa/index.html:50
 msgid "No recovery codes set up."
@@ -1067,7 +1033,7 @@ msgstr "リカバリーコードがセットアップされていません。"
 
 #: templates/mfa/index.html:59
 msgid "View"
-msgstr ""
+msgstr "表示"
 
 #: templates/mfa/index.html:65
 msgid "Download"
@@ -1083,7 +1049,7 @@ msgstr "新しいリカバリーコードセットが生成されました。"
 
 #: templates/mfa/reauthenticate.html:5
 msgid "Enter an authenticator code:"
-msgstr "認証アプリのコードを入力する"
+msgstr "認証アプリのコードを入力:"
 
 #: templates/mfa/recovery_codes/generate.html:9
 msgid "You are about to generate a new set of recovery codes for your account."
@@ -1095,7 +1061,7 @@ msgstr "この操作により、現在のコードが無効になります。"
 
 #: templates/mfa/recovery_codes/generate.html:13
 msgid "Are you sure?"
-msgstr "本当によろしいですか？"
+msgstr "本当によろしいですか?"
 
 #: templates/mfa/recovery_codes/index.html:13
 msgid "Unused codes"
@@ -1120,20 +1086,19 @@ msgid ""
 "below with your authenticator app. Then, input the verification code "
 "generated by the app below."
 msgstr ""
-"アカウントを二要素認証で保護するために、認証アプリで以下のQRコードをスキャン"
-"してください。次に、アプリで生成された確認コードを以下に入力してください。"
+"アカウントを二要素認証で保護するために、認証アプリで以下の QR コードをスキャ"
+"ンしてください。次に、アプリで生成された確認コードを以下に入力してください。"
 
 #: templates/mfa/totp/activate_form.html:21
 msgid "Authenticator secret"
-msgstr "トークンシークレット"
+msgstr "認証アプリシークレット"
 
 #: templates/mfa/totp/activate_form.html:24
 msgid ""
 "You can store this secret and use it to reinstall your authenticator app at "
 "a later time."
-msgstr ""
-"このシークレットを保存し、後でオーセンティケーターアプリを再インストールする"
-"際に使用できます。"
+msgstr "このシークレットを保存し、後で認証アプリを再インストールする際に使用できます"
+"。"
 
 #: templates/mfa/totp/deactivate_form.html:5
 #: templates/mfa/totp/deactivate_form.html:9
@@ -1144,7 +1109,7 @@ msgstr "認証アプリを無効化する"
 msgid ""
 "You are about to deactivate authenticator app based authentication. Are you "
 "sure?"
-msgstr "認証アプリによる認証を無効化しようとしています。本当によろしいですか。"
+msgstr "認証アプリによる認証を無効化しようとしています。本当によろしいですか?"
 
 #: templates/socialaccount/authentication_error.html:5
 #: templates/socialaccount/authentication_error.html:9
@@ -1161,13 +1126,13 @@ msgstr ""
 #: templates/socialaccount/connections.html:5
 #: templates/socialaccount/connections.html:9
 msgid "Account Connections"
-msgstr "アカウントリンク"
+msgstr "アカウント接続"
 
 #: templates/socialaccount/connections.html:13
 msgid ""
 "You can sign in to your account using any of the following third-party "
 "accounts:"
-msgstr "以下の外部アカウントを使ってログインすることができます："
+msgstr "以下の外部アカウントを使ってログインすることができます:"
 
 #: templates/socialaccount/connections.html:45
 msgid "You currently have no third-party accounts connected to this account."
@@ -1184,10 +1149,8 @@ msgid ""
 msgstr ""
 
 #: templates/socialaccount/email/account_connected_subject.txt:3
-#, fuzzy
-#| msgid "Add a 3rd Party Account"
 msgid "Third-Party Account Connected"
-msgstr "外部アカウントを追加する"
+msgstr "外部アカウントと接続されました"
 
 #: templates/socialaccount/email/account_disconnected_message.txt:4
 #, python-format
@@ -1203,21 +1166,20 @@ msgstr "外部アカウントは接続解除されました"
 #: templates/socialaccount/login.html:10
 #, python-format
 msgid "Connect %(provider)s"
-msgstr "%(provider)sと連携する"
+msgstr "%(provider)s と接続する"
 
 #: templates/socialaccount/login.html:13
 msgid "You are about to connect a new third-party account from %(provider)s."
-msgstr ""
-"%(provider)sの新しいサードパーティーアカウントを連携しようとしています。"
+msgstr "%(provider)sの新しい外部アカウントを接続しようとしています。"
 
 #: templates/socialaccount/login.html:17
 #, python-format
 msgid "Sign In Via %(provider)s"
-msgstr "%(provider)sでログインする"
+msgstr "%(provider)s でログインする"
 
 #: templates/socialaccount/login.html:20
 msgid "You are about to sign in using a third-party account from %(provider)s."
-msgstr "%(provider)sのサードパーティーアカウントを使用してログインしようとしています。"
+msgstr "%(provider)s の外部アカウントを使用してログインしようとしています。"
 
 #: templates/socialaccount/login.html:27
 msgid "Continue"
@@ -1236,29 +1198,27 @@ msgid ""
 "href=\"%(login_url)s\">sign in</a>."
 msgstr ""
 "既存の外部アカウントを使ったログインはキャンセルされました。\n"
-"やり直される場合は<a href=\"%(login_url)s\">ログイン</a>ページにお進みくださ"
-"い。"
+"やり直す場合は<a href=\"%(login_url)s\">ログインページ</a>にお進みください。"
 
 #: templates/socialaccount/messages/account_connected.txt:2
-#| msgid "The social account has been connected."
 msgid "The third-party account has been connected."
-msgstr "外部アカウントがリンクされました"
+msgstr "外部アカウントが接続されました。"
 
 #: templates/socialaccount/messages/account_connected_other.txt:2
-#| msgid "The social account is already connected to a different account."
 msgid "The third-party account is already connected to a different account."
-msgstr "この外部アカウントは他のアカウントにリンクされています。"
+msgstr "この外部アカウントは他のアカウントに接続されています。"
 
 #: templates/socialaccount/messages/account_disconnected.txt:2
 msgid "The third-party account has been disconnected."
-msgstr "外部アカウントのリンクが解除されました。"
+msgstr "外部アカウントの接続が解除されました。"
 
 #: templates/socialaccount/signup.html:12
 msgid ""
 "You are about to use your %(provider_name)s account to login to\n"
 "%(site_name)s. As a final step, please complete the following form:"
 msgstr ""
-"%(provider_name)s アカウントを使って %(site_name)s にログインしようとしています。"
+"%(provider_name)s アカウントを使って %(site_name)s "
+"にログインしようとしています。\n"
 "ユーザー登録のために、以下のフォームに記入してください。"
 
 #: templates/socialaccount/snippets/login.html:9
@@ -1272,29 +1232,27 @@ msgstr ""
 #: templates/usersessions/usersession_list.html:6
 #: templates/usersessions/usersession_list.html:10
 msgid "Sessions"
-msgstr ""
+msgstr "セッション"
 
 #: templates/usersessions/usersession_list.html:23
 msgid "Started At"
-msgstr ""
+msgstr "開始日時"
 
 #: templates/usersessions/usersession_list.html:24
-#, fuzzy
-#| msgid "Email Addresses"
 msgid "IP Address"
-msgstr "メールアドレス"
+msgstr "IP アドレス"
 
 #: templates/usersessions/usersession_list.html:25
 msgid "Browser"
-msgstr ""
+msgstr "ブラウザー"
 
 #: templates/usersessions/usersession_list.html:27
 msgid "Last seen at"
-msgstr ""
+msgstr "閲覧日時"
 
 #: templates/usersessions/usersession_list.html:47
 msgid "Current"
-msgstr "現在のパスワード"
+msgstr "現在の"
 
 #: templates/usersessions/usersession_list.html:60
 msgid "Sign Out Other Sessions"
@@ -1302,11 +1260,11 @@ msgstr ""
 
 #: usersessions/apps.py:9
 msgid "User Sessions"
-msgstr ""
+msgstr "ユーザーセッション"
 
 #: usersessions/models.py:48
 msgid "session key"
-msgstr ""
+msgstr "セッションキー"
 
 #, fuzzy
 #~| msgid "The following email addresses are associated with your account:"
diff --git a/allauth/locale/ru/LC_MESSAGES/django.po b/allauth/locale/ru/LC_MESSAGES/django.po
index 6f79fec9..1b7ce0d0 100644
--- a/allauth/locale/ru/LC_MESSAGES/django.po
+++ b/allauth/locale/ru/LC_MESSAGES/django.po
@@ -90,7 +90,7 @@ msgstr "Указанные вами адрес электронной почты
 
 #: account/forms.py:102
 msgid "The username and/or password you specified are not correct."
-msgstr "Имя пользователя и/или пароль не верны."
+msgstr "Имя пользователя и/или пароль неверны."
 
 #: account/forms.py:112 account/forms.py:287 account/forms.py:477
 #: account/forms.py:574
@@ -573,25 +573,19 @@ msgstr "Пожалуйста, подтвердите Ваш адрес элек
 #: templates/account/email/email_deleted_message.txt:4
 #, python-format
 msgid "Email address %(deleted_email)s has been removed from your account."
-msgstr ""
+msgstr "Адрес электронной почты %(deleted_email)s был удалён из вашей учётной записи"
 
 #: templates/account/email/email_deleted_subject.txt:3
-#, fuzzy
-#| msgid "Remove"
 msgid "Email Removed"
-msgstr "Удалить"
+msgstr "Email удалён"
 
 #: templates/account/email/password_changed_message.txt:4
-#, fuzzy
-#| msgid "Your password is now changed."
 msgid "Your password has been changed."
 msgstr "Ваш пароль изменён."
 
 #: templates/account/email/password_changed_subject.txt:3
-#, fuzzy
-#| msgid "Password (again)"
 msgid "Password Changed"
-msgstr "Пароль (ещё раз)"
+msgstr "Пароль Изменён"
 
 #: templates/account/email/password_reset_key_message.txt:4
 msgid ""
@@ -616,10 +610,8 @@ msgid "Password Reset Email"
 msgstr "Письмо для сброса пароля"
 
 #: templates/account/email/password_reset_message.txt:4
-#, fuzzy
-#| msgid "Your password has been deleted."
 msgid "Your password has been reset."
-msgstr "Ваш пароль был удален."
+msgstr "Ваш пароль был сброшен."
 
 #: templates/account/email/password_reset_subject.txt:3
 #: templates/account/password_reset.html:4
@@ -630,16 +622,12 @@ msgid "Password Reset"
 msgstr "Сброс пароля"
 
 #: templates/account/email/password_set_message.txt:4
-#, fuzzy
-#| msgid "Your password has been deleted."
 msgid "Your password has been set."
-msgstr "Ваш пароль был удален."
+msgstr "Ваш пароль был установлен."
 
 #: templates/account/email/password_set_subject.txt:3
-#, fuzzy
-#| msgid "Password Reset"
 msgid "Password Set"
-msgstr "Сброс пароля"
+msgstr "Пароль Установлен"
 
 #: templates/account/email/unknown_account_message.txt:4
 #, python-format
@@ -1004,10 +992,8 @@ msgid ""
 msgstr "Был создан новый набор кодов восстановления."
 
 #: templates/mfa/email/recovery_codes_generated_subject.txt:3
-#, fuzzy
-#| msgid "Recovery Codes"
 msgid "New Recovery Codes Generated"
-msgstr "Коды восстановления"
+msgstr "Сгенерированы Новые Коды Восстановления"
 
 #: templates/mfa/email/totp_activated_message.txt:4
 #: templates/mfa/messages/totp_activated.txt:2
diff --git a/allauth/socialaccount/providers/atlassian/__init__.py b/allauth/socialaccount/providers/atlassian/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/allauth/socialaccount/providers/atlassian/provider.py b/allauth/socialaccount/providers/atlassian/provider.py
new file mode 100644
index 00000000..566d0ab3
--- /dev/null
+++ b/allauth/socialaccount/providers/atlassian/provider.py
@@ -0,0 +1,38 @@
+from allauth.socialaccount.providers.base import ProviderAccount
+from allauth.socialaccount.providers.oauth2.provider import OAuth2Provider
+
+from .views import AtlassianOAuth2Adapter
+
+
+class AtlassianAccount(ProviderAccount):
+    def get_profile_url(self):
+        return self.account.extra_data.get("picture")
+
+
+class AtlassianProvider(OAuth2Provider):
+    id = "atlassian"
+    name = "Atlassian"
+    account_class = AtlassianAccount
+    oauth2_adapter_class = AtlassianOAuth2Adapter
+
+    def extract_uid(self, data):
+        return data["account_id"]
+
+    def extract_common_fields(self, data):
+        return {
+            "email": data.get("email"),
+            "name": data.get("name"),
+            "username": data.get("nickname"),
+            "email_verified": data.get("email_verified"),
+        }
+
+    def get_default_scope(self):
+        return ["read:me"]
+
+    def get_auth_params(self):
+        params = super().get_auth_params()
+        params.update({"audience": "api.atlassian.com", "prompt": "consent"})
+        return params
+
+
+provider_classes = [AtlassianProvider]
diff --git a/allauth/socialaccount/providers/atlassian/urls.py b/allauth/socialaccount/providers/atlassian/urls.py
new file mode 100644
index 00000000..3c540d13
--- /dev/null
+++ b/allauth/socialaccount/providers/atlassian/urls.py
@@ -0,0 +1,6 @@
+from allauth.socialaccount.providers.oauth2.urls import default_urlpatterns
+
+from .provider import AtlassianProvider
+
+
+urlpatterns = default_urlpatterns(AtlassianProvider)
diff --git a/allauth/socialaccount/providers/atlassian/views.py b/allauth/socialaccount/providers/atlassian/views.py
new file mode 100644
index 00000000..3acb92e2
--- /dev/null
+++ b/allauth/socialaccount/providers/atlassian/views.py
@@ -0,0 +1,29 @@
+from allauth.socialaccount.adapter import get_adapter
+from allauth.socialaccount.providers.oauth2.views import (
+    OAuth2Adapter,
+    OAuth2CallbackView,
+    OAuth2LoginView,
+)
+
+
+class AtlassianOAuth2Adapter(OAuth2Adapter):
+    provider_id = "atlassian"
+    access_token_url = "https://api.atlassian.com/oauth/token"
+    authorize_url = "https://auth.atlassian.com/authorize"
+    profile_url = "https://api.atlassian.com/me"
+
+    def complete_login(self, request, app, access_token, **kwargs):
+        headers = {
+            "Authorization": f"Bearer {access_token}",
+            "Accept": "application/json",
+        }
+        response = (
+            get_adapter().get_requests_session().get(self.profile_url, headers=headers)
+        )
+        response.raise_for_status()
+        data = response.json()
+        return self.get_provider().sociallogin_from_response(request, data)
+
+
+oauth2_login = OAuth2LoginView.adapter_view(AtlassianOAuth2Adapter)
+oauth2_callback = OAuth2CallbackView.adapter_view(AtlassianOAuth2Adapter)
diff --git a/docs/installation/quickstart.rst b/docs/installation/quickstart.rst
index 0fff0121..95802a2f 100644
--- a/docs/installation/quickstart.rst
+++ b/docs/installation/quickstart.rst
@@ -168,6 +168,7 @@ the ``settings.py`` of your project::
         'allauth.socialaccount.providers.zoom',
         'allauth.socialaccount.providers.okta',
         'allauth.socialaccount.providers.feishu',
+        "allauth.socialaccount.providers.atlassian",
         ...
     ]
 
diff --git a/docs/socialaccount/providers/atlassian.rst b/docs/socialaccount/providers/atlassian.rst
new file mode 100644
index 00000000..cb04fb2a
--- /dev/null
+++ b/docs/socialaccount/providers/atlassian.rst
@@ -0,0 +1,56 @@
+Atlassian
+---------
+
+Atlassian OAuth 2.0 (3LO) apps provider.
+
+More info:
+    https://developer.atlassian.com/cloud/jira/platform/oauth-2-3lo-apps/
+
+
+Enabling OAuth 2.0 (3LO)
+************************
+Before you can implement OAuth 2.0 (3LO) for your app, you need to enable it for your app using the developer console.
+
+Atlassian developer console
+    https://developer.atlassian.com/console/myapps/
+
+1. From any page on developer.atlassian.com, select your profile icon in the top-right corner, and from the dropdown, select Developer console.
+2. Select your app from the list (or create one if you don't already have one).
+3. Select Authorization in the left menu.
+4. Next to OAuth 2.0 (3LO), select Configure.
+5. Enter the Callback URL. Ex. ``http://127.0.0.1:8000/accounts/atlassian/login/callback/``
+6. Click Save changes.
+
+Note, if you haven't already added an API to your app, you should do this now:
+
+1. Select Permissions in the left menu.
+2. Next to the API you want to add, select Add.
+
+
+Django setup
+************
+The app credentials are configured for your Django installation via the admin
+interface. Create a new socialapp through ``/admin/socialaccount/socialapp/``.
+
+Fill in the form as follows:
+
+* Provider, "Atlassian"
+* Name, your pick, suggest "Atlassian"
+* Client id, is called "Client ID" by Atlassian
+* Secret key, is called "Secret" by Atlassian
+* Key, is not needed, leave blank.
+
+Optionally, you can specify the scope to use as follows:
+
+.. code-block:: python
+
+    SOCIALACCOUNT_PROVIDERS = {
+        'atlassian': {
+            'SCOPE': [
+                'read:me',
+                'write:jira-work',
+            ],
+        }
+    }
+
+.. note:: By default (if you do not specify ``SCOPE``), ``read:me`` scope is requested.
diff --git a/docs/socialaccount/providers/index.rst b/docs/socialaccount/providers/index.rst
index 862e5a5d..19ea2bbd 100644
--- a/docs/socialaccount/providers/index.rst
+++ b/docs/socialaccount/providers/index.rst
@@ -40,6 +40,7 @@ Provider Specifics
    amazon
    angellist
    apple
+   atlassian
    auth0
    authentiq
    baidu


Test patch:
diff --git a/allauth/socialaccount/providers/atlassian/tests.py b/allauth/socialaccount/providers/atlassian/tests.py
new file mode 100644
index 00000000..53d15b36
--- /dev/null
+++ b/allauth/socialaccount/providers/atlassian/tests.py
@@ -0,0 +1,30 @@
+from allauth.socialaccount.tests import OAuth2TestsMixin
+from allauth.tests import MockedResponse, TestCase
+
+from .provider import AtlassianProvider
+
+
+class AtlassianTests(OAuth2TestsMixin, TestCase):
+    provider_id = AtlassianProvider.id
+
+    def get_mocked_response(self):
+        response_data = """
+        {
+            "account_type": "atlassian",
+            "account_id": "112233aa-bb11-cc22-33dd-445566abcabc",
+            "email": "mia@example.com",
+            "email_verified": true,
+            "name": "Mia Krystof",
+            "picture": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/112233aa-bb11-cc22-33dd-445566abcabc/1234abcd-9876-54aa-33aa-1234dfsade9487ds",
+            "account_status": "active",
+            "nickname": "mkrystof",
+            "zoneinfo": "Australia/Sydney",
+            "locale": "en-US",
+            "extended_profile": {
+                "job_title": "Designer",
+                "organization": "mia@example.com",
+                "department": "Design team",
+                "location": "Sydney"
+            }
+        }"""
+        return MockedResponse(200, response_data)
diff --git a/test_settings.py b/test_settings.py
index 87517141..b2a71a16 100644
--- a/test_settings.py
+++ b/test_settings.py
@@ -82,6 +82,7 @@ INSTALLED_APPS = (
     "allauth.socialaccount.providers.angellist",
     "allauth.socialaccount.providers.apple",
     "allauth.socialaccount.providers.asana",
+    "allauth.socialaccount.providers.atlassian",
     "allauth.socialaccount.providers.auth0",
     "allauth.socialaccount.providers.authentiq",
     "allauth.socialaccount.providers.baidu",