New Crowdin updates (#14197)
* New translations devise.en.yml (Uyghur)
[ci skip]
* New translations doorkeeper.en.yml (Uyghur)
[ci skip]
* New translations en.json (Sorani (Kurdish))
[ci skip]
* New translations en.yml (Sorani (Kurdish))
[ci skip]
* New translations simple_form.en.yml (Sorani (Kurdish))
[ci skip]
* New translations activerecord.en.yml (Sorani (Kurdish))
[ci skip]
* New translations devise.en.yml (Sorani (Kurdish))
[ci skip]
* New translations doorkeeper.en.yml (Sorani (Kurdish))
[ci skip]
* New translations en.json (Kabyle)
[ci skip]
* New translations en.json (Chinese Traditional, Hong Kong)
[ci skip]
* New translations en.yml (Chinese Simplified)
[ci skip]
* New translations simple_form.en.yml (Chinese Simplified)
[ci skip]
* New translations en.yml (Chinese Simplified)
[ci skip]
* New translations en.json (Kabyle)
[ci skip]
* New translations en.json (Hebrew)
[ci skip]
* New translations en.json (Hebrew)
[ci skip]
* New translations en.json (Hebrew)
[ci skip]
* New translations en.json (Hebrew)
[ci skip]
* New translations en.json (Russian)
[ci skip]
* New translations en.yml (Persian)
[ci skip]
* New translations en.json (Persian)
[ci skip]
* New translations en.json (Croatian)
[ci skip]
* New translations en.json (Marathi)
[ci skip]
* New translations en.json (Norwegian Nynorsk)
[ci skip]
* New translations en.json (Bengali)
[ci skip]
* New translations en.json (Spanish, Argentina)
[ci skip]
* New translations en.json (Hindi)
[ci skip]
* New translations en.json (Latvian)
[ci skip]
* New translations en.json (Estonian)
[ci skip]
* New translations en.json (Kazakh)
[ci skip]
* New translations en.json (Galician)
[ci skip]
* New translations en.json (Vietnamese)
[ci skip]
* New translations en.json (Urdu (Pakistan))
[ci skip]
* New translations en.json (Chinese Traditional)
[ci skip]
* New translations en.json (Icelandic)
[ci skip]
* New translations en.json (Tamil)
[ci skip]
* New translations en.json (Persian)
[ci skip]
* New translations en.json (Indonesian)
[ci skip]
* New translations en.json (Portuguese, Brazilian)
[ci skip]
* New translations en.json (Ido)
[ci skip]
* New translations en.json (Kabyle)
[ci skip]
* New translations en.json (Corsican)
[ci skip]
* New translations en.json (Serbian (Latin))
[ci skip]
* New translations en.json (Uyghur)
[ci skip]
* New translations en.json (Sorani (Kurdish))
[ci skip]
* New translations en.json (Taigi)
[ci skip]
* New translations en.json (Silesian)
[ci skip]
* New translations en.json (Malay)
[ci skip]
* New translations en.json (Welsh)
[ci skip]
* New translations en.json (Esperanto)
[ci skip]
* New translations en.json (Telugu)
[ci skip]
* New translations en.json (Chinese Traditional, Hong Kong)
[ci skip]
* New translations en.json (Asturian)
[ci skip]
* New translations en.json (Kannada)
[ci skip]
* New translations en.json (Breton)
[ci skip]
* New translations en.json (Malayalam)
[ci skip]
* New translations en.json (Catalan)
[ci skip]
* New translations en.json (Bulgarian)
[ci skip]
* New translations en.json (Arabic)
[ci skip]
* New translations en.json (Spanish)
[ci skip]
* New translations en.json (Czech)
[ci skip]
* New translations en.json (Greek)
[ci skip]
* New translations en.json (Basque)
[ci skip]
* New translations en.json (Danish)
[ci skip]
* New translations en.json (German)
[ci skip]
* New translations en.json (Finnish)
[ci skip]
* New translations en.json (Thai)
[ci skip]
* New translations en.json (Slovenian)
[ci skip]
* New translations en.json (Sardinian)
[ci skip]
* New translations en.json (Romanian)
[ci skip]
* New translations en.json (Occitan)
[ci skip]
* New translations en.json (Chinese Simplified)
[ci skip]
* New translations en.json (Ukrainian)
[ci skip]
* New translations en.json (French)
[ci skip]
* New translations en.json (Hungarian)
[ci skip]
* New translations en.json (Slovak)
[ci skip]
* New translations en.json (Russian)
[ci skip]
* New translations en.json (Portuguese)
[ci skip]
* New translations en.json (Polish)
[ci skip]
* New translations en.json (Norwegian)
[ci skip]
* New translations en.json (Turkish)
[ci skip]
* New translations en.json (Swedish)
[ci skip]
* New translations en.json (Serbian (Cyrillic))
[ci skip]
* New translations en.json (Albanian)
[ci skip]
* New translations en.json (Italian)
[ci skip]
* New translations en.json (Armenian)
[ci skip]
* New translations en.json (Hebrew)
[ci skip]
* New translations en.json (Japanese)
[ci skip]
* New translations en.json (Dutch)
[ci skip]
* New translations en.json (Macedonian)
[ci skip]
* New translations en.json (Lithuanian)
[ci skip]
* New translations en.json (Georgian)
[ci skip]
* New translations en.json (Korean)
[ci skip]
* New translations en.json (Portuguese)
[ci skip]
* New translations en.json (Spanish)
[ci skip]
* New translations en.json (Korean)
[ci skip]
* New translations en.json (German)
[ci skip]
* New translations en.json (Japanese)
[ci skip]
* New translations en.json (Russian)
[ci skip]
* New translations en.json (French)
[ci skip]
* New translations en.json (Vietnamese)
[ci skip]
* New translations en.json (Catalan)
[ci skip]
* New translations en.json (Galician)
[ci skip]
* New translations en.json (Kabyle)
[ci skip]
* New translations en.json (Kabyle)
[ci skip]
* New translations en.json (Kabyle)
[ci skip]
* New translations en.json (Kabyle)
[ci skip]
* New translations en.json (Spanish, Argentina)
[ci skip]
* New translations en.json (Hungarian)
[ci skip]
* New translations en.json (Albanian)
[ci skip]
* New translations en.json (Corsican)
[ci skip]
* New translations simple_form.en.yml (Dutch)
[ci skip]
* New translations simple_form.en.yml (Dutch)
[ci skip]
* New translations en.json (Dutch)
[ci skip]
* New translations en.json (Dutch)
[ci skip]
* New translations en.json (Dutch)
[ci skip]
* New translations en.json (Dutch)
[ci skip]
* New translations en.json (Dutch)
[ci skip]
* New translations en.yml (Dutch)
[ci skip]
* New translations en.yml (Dutch)
[ci skip]
* New translations en.yml (Dutch)
[ci skip]
* New translations en.yml (Dutch)
[ci skip]
* New translations en.json (Thai)
[ci skip]
* New translations en.yml (Thai)
[ci skip]
* New translations en.yml (Dutch)
[ci skip]
* New translations en.yml (Dutch)
[ci skip]
* New translations en.yml (Dutch)
[ci skip]
* New translations en.yml (Dutch)
[ci skip]
* New translations en.yml (Dutch)
[ci skip]
* New translations en.json (Portuguese, Brazilian)
[ci skip]
* New translations en.json (Occitan)
[ci skip]
* New translations en.json (Occitan)
[ci skip]
* New translations en.yml (Occitan)
[ci skip]
* New translations en.json (Italian)
[ci skip]
* New translations en.json (Persian)
[ci skip]
* New translations en.json (French)
[ci skip]
* New translations en.yml (French)
[ci skip]
* New translations en.json (Arabic)
[ci skip]
* New translations en.json (Kabyle)
[ci skip]
* New translations en.json (Kabyle)
[ci skip]
* New translations en.yml (Kabyle)
[ci skip]
* New translations en.json (Icelandic)
[ci skip]
* New translations en.json (Portuguese, Brazilian)
[ci skip]
* New translations en.json (Indonesian)
[ci skip]
* New translations en.json (Persian)
[ci skip]
* New translations en.json (Galician)
[ci skip]
* New translations en.json (Tamil)
[ci skip]
* New translations en.json (Spanish, Argentina)
[ci skip]
* New translations en.json (Bengali)
[ci skip]
* New translations en.json (Marathi)
[ci skip]
* New translations en.json (Albanian)
[ci skip]
* New translations en.json (Serbian (Cyrillic))
[ci skip]
* New translations en.json (Swedish)
[ci skip]
* New translations en.json (Turkish)
[ci skip]
* New translations en.json (Chinese Traditional)
[ci skip]
* New translations en.json (Urdu (Pakistan))
[ci skip]
* New translations en.json (Vietnamese)
[ci skip]
* New translations en.json (Welsh)
[ci skip]
* New translations en.json (Esperanto)
[ci skip]
* New translations en.json (Chinese Traditional, Hong Kong)
[ci skip]
* New translations en.json (Malayalam)
[ci skip]
* New translations en.json (Telugu)
[ci skip]
* New translations en.json (Breton)
[ci skip]
* New translations en.json (Kannada)
[ci skip]
* New translations en.json (Uyghur)
[ci skip]
* New translations en.json (Croatian)
[ci skip]
* New translations en.json (Norwegian Nynorsk)
[ci skip]
* New translations en.json (Kazakh)
[ci skip]
* New translations en.json (Estonian)
[ci skip]
* New translations en.json (Latvian)
[ci skip]
* New translations en.json (Hindi)
[ci skip]
* New translations en.json (Malay)
[ci skip]
* New translations en.json (Spanish)
[ci skip]
* New translations en.json (Arabic)
[ci skip]
* New translations en.json (Bulgarian)
[ci skip]
* New translations en.json (Catalan)
[ci skip]
* New translations en.json (Czech)
[ci skip]
* New translations en.json (Danish)
[ci skip]
* New translations en.json (German)
[ci skip]
* New translations en.json (Greek)
[ci skip]
* New translations en.json (Romanian)
[ci skip]
* New translations en.json (Slovenian)
[ci skip]
* New translations en.json (Thai)
[ci skip]
* New translations en.json (Chinese Simplified)
[ci skip]
* New translations en.json (Slovak)
[ci skip]
* New translations en.json (Hungarian)
[ci skip]
* New translations en.json (French)
[ci skip]
* New translations en.json (Ukrainian)
[ci skip]
* New translations en.json (Norwegian)
[ci skip]
* New translations en.json (Lithuanian)
[ci skip]
* New translations en.json (Macedonian)
[ci skip]
* New translations en.json (Dutch)
[ci skip]
* New translations en.json (Polish)
[ci skip]
* New translations en.json (Basque)
[ci skip]
* New translations en.json (Portuguese)
[ci skip]
* New translations en.json (Russian)
[ci skip]
* New translations en.json (Armenian)
[ci skip]
* New translations en.json (Korean)
[ci skip]
* New translations en.json (Finnish)
[ci skip]
* New translations en.json (Hebrew)
[ci skip]
* New translations en.json (Georgian)
[ci skip]
* New translations en.json (Japanese)
[ci skip]
* New translations en.json (Italian)
[ci skip]
* New translations en.json (Ido)
[ci skip]
* New translations en.json (Taigi)
[ci skip]
* New translations en.json (Silesian)
[ci skip]
* New translations en.json (Sardinian)
[ci skip]
* New translations en.json (Occitan)
[ci skip]
* New translations en.json (Sorani (Kurdish))
[ci skip]
* New translations en.json (Asturian)
[ci skip]
* New translations en.json (Kabyle)
[ci skip]
* New translations en.json (Serbian (Latin))
[ci skip]
* New translations en.json (Corsican)
[ci skip]
* New translations en.json (Korean)
[ci skip]
* New translations en.json (Russian)
[ci skip]
* New translations en.json (Korean)
[ci skip]
* New translations en.json (Russian)
[ci skip]
* New translations en.json (Spanish)
[ci skip]
* New translations en.json (Korean)
[ci skip]
* New translations en.json (Portuguese)
[ci skip]
* New translations en.json (Portuguese)
[ci skip]
* New translations en.json (German)
[ci skip]
* New translations en.json (French)
[ci skip]
* New translations en.json (Korean)
[ci skip]
* New translations en.json (French)
[ci skip]
* New translations en.json (Esperanto)
[ci skip]
* New translations en.yml (Esperanto)
[ci skip]
* New translations en.json (Esperanto)
[ci skip]
* New translations en.json (Japanese)
[ci skip]
* New translations en.json (Vietnamese)
[ci skip]
* New translations en.json (Japanese)
[ci skip]
* New translations en.json (Spanish)
[ci skip]
* New translations en.json (Italian)
[ci skip]
* New translations en.json (Italian)
[ci skip]
* New translations en.json (Corsican)
[ci skip]
* New translations en.json (Corsican)
[ci skip]
* New translations en.json (Persian)
[ci skip]
* New translations en.json (Hungarian)
[ci skip]
* New translations en.json (Portuguese, Brazilian)
[ci skip]
* New translations en.json (Spanish)
[ci skip]
* New translations en.json (French)
[ci skip]
* New translations en.json (Spanish, Argentina)
[ci skip]
* New translations en.json (Galician)
[ci skip]
* New translations en.json (Galician)
[ci skip]
* New translations en.json (Portuguese)
[ci skip]
* New translations en.json (Portuguese)
[ci skip]
* New translations en.json (Albanian)
[ci skip]
* i18n-tasks normalize
* yarn manage:translations 4 years ago Add moderation warnings (#9519)
* Add moderation warnings
Replace individual routes for disabling, silencing, and suspending
a user, as well as the report update route, with a unified account
action controller that allows you to select an action (none,
disable, silence, suspend) as well as whether it should generate an
e-mail notification with optional custom text. That notification,
with the optional custom text, is saved as a warning.
Additionally, there are warning presets you can configure to save
time when performing the above.
* Use Account#local_username_and_domain
5 years ago Add moderation warnings (#9519)
* Add moderation warnings
Replace individual routes for disabling, silencing, and suspending
a user, as well as the report update route, with a unified account
action controller that allows you to select an action (none,
disable, silence, suspend) as well as whether it should generate an
e-mail notification with optional custom text. That notification,
with the optional custom text, is saved as a warning.
Additionally, there are warning presets you can configure to save
time when performing the above.
* Use Account#local_username_and_domain
5 years ago Add moderation warnings (#9519)
* Add moderation warnings
Replace individual routes for disabling, silencing, and suspending
a user, as well as the report update route, with a unified account
action controller that allows you to select an action (none,
disable, silence, suspend) as well as whether it should generate an
e-mail notification with optional custom text. That notification,
with the optional custom text, is saved as a warning.
Additionally, there are warning presets you can configure to save
time when performing the above.
* Use Account#local_username_and_domain
5 years ago Add WebAuthn as an alternative 2FA method (#14466)
* feat: add possibility of adding WebAuthn security keys to use as 2FA
This adds a basic UI for enabling WebAuthn 2FA. We did a little refactor
to the Settings page for editing the 2FA methods – now it will list the
methods that are available to the user (TOTP and WebAuthn) and from
there they'll be able to add or remove any of them.
Also, it's worth mentioning that for enabling WebAuthn it's required to
have TOTP enabled, so the first time that you go to the 2FA Settings
page, you'll be asked to set it up.
This work was inspired by the one donde by Github in their platform, and
despite it could be approached in different ways, we decided to go with
this one given that we feel that this gives a great UX.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: add request for WebAuthn as second factor at login if enabled
This commits adds the feature for using WebAuthn as a second factor for
login when enabled.
If users have WebAuthn enabled, now a page requesting for the use of a
WebAuthn credential for log in will appear, although a link redirecting
to the old page for logging in using a two-factor code will also be
present.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: add possibility of deleting WebAuthn Credentials
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: disable WebAuthn when an Admin disables 2FA for a user
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: remove ability to disable TOTP leaving only WebAuthn as 2FA
Following examples form other platforms like Github, we decided to make
Webauthn 2FA secondary to 2FA with TOTP, so that we removed the
possibility of removing TOTP authentication only, leaving users with
just WEbAuthn as 2FA. Instead, users will have to click on 'Disable 2FA'
in order to remove second factor auth.
The reason for WebAuthn being secondary to TOPT is that in that way,
users will still be able to log in using their code from their phone's
application if they don't have their security keys with them – or maybe
even lost them.
* We had to change a little the flow for setting up TOTP, given that now
it's possible to setting up again if you already had TOTP, in order to
let users modify their authenticator app – given that now it's not
possible for them to disable TOTP and set it up again with another
authenticator app.
So, basically, now instead of storing the new `otp_secret` in the
user, we store it in the session until the process of set up is
finished.
This was because, as it was before, when users clicked on 'Edit' in
the new two-factor methods lists page, but then went back without
finishing the flow, their `otp_secret` had been changed therefore
invalidating their previous authenticator app, making them unable to
log in again using TOTP.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* refactor: fix eslint errors
The PR build was failing given that linting returning some errors.
This commit attempts to fix them.
* refactor: normalize i18n translations
The build was failing given that i18n translations files were not
normalized.
This commits fixes that.
* refactor: avoid having the webauthn gem locked to a specific version
* refactor: use symbols for routes without '/'
* refactor: avoid sending webauthn disabled email when 2FA is disabled
When an admins disable 2FA for users, we were sending two mails
to them, one notifying that 2FA was disabled and the other to notify
that WebAuthn was disabled.
As the second one is redundant since the first email includes it, we can
remove it and send just one email to users.
* refactor: avoid creating new env variable for webauthn_origin config
* refactor: improve flash error messages for webauthn pages
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> 4 years ago Add WebAuthn as an alternative 2FA method (#14466)
* feat: add possibility of adding WebAuthn security keys to use as 2FA
This adds a basic UI for enabling WebAuthn 2FA. We did a little refactor
to the Settings page for editing the 2FA methods – now it will list the
methods that are available to the user (TOTP and WebAuthn) and from
there they'll be able to add or remove any of them.
Also, it's worth mentioning that for enabling WebAuthn it's required to
have TOTP enabled, so the first time that you go to the 2FA Settings
page, you'll be asked to set it up.
This work was inspired by the one donde by Github in their platform, and
despite it could be approached in different ways, we decided to go with
this one given that we feel that this gives a great UX.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: add request for WebAuthn as second factor at login if enabled
This commits adds the feature for using WebAuthn as a second factor for
login when enabled.
If users have WebAuthn enabled, now a page requesting for the use of a
WebAuthn credential for log in will appear, although a link redirecting
to the old page for logging in using a two-factor code will also be
present.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: add possibility of deleting WebAuthn Credentials
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: disable WebAuthn when an Admin disables 2FA for a user
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: remove ability to disable TOTP leaving only WebAuthn as 2FA
Following examples form other platforms like Github, we decided to make
Webauthn 2FA secondary to 2FA with TOTP, so that we removed the
possibility of removing TOTP authentication only, leaving users with
just WEbAuthn as 2FA. Instead, users will have to click on 'Disable 2FA'
in order to remove second factor auth.
The reason for WebAuthn being secondary to TOPT is that in that way,
users will still be able to log in using their code from their phone's
application if they don't have their security keys with them – or maybe
even lost them.
* We had to change a little the flow for setting up TOTP, given that now
it's possible to setting up again if you already had TOTP, in order to
let users modify their authenticator app – given that now it's not
possible for them to disable TOTP and set it up again with another
authenticator app.
So, basically, now instead of storing the new `otp_secret` in the
user, we store it in the session until the process of set up is
finished.
This was because, as it was before, when users clicked on 'Edit' in
the new two-factor methods lists page, but then went back without
finishing the flow, their `otp_secret` had been changed therefore
invalidating their previous authenticator app, making them unable to
log in again using TOTP.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* refactor: fix eslint errors
The PR build was failing given that linting returning some errors.
This commit attempts to fix them.
* refactor: normalize i18n translations
The build was failing given that i18n translations files were not
normalized.
This commits fixes that.
* refactor: avoid having the webauthn gem locked to a specific version
* refactor: use symbols for routes without '/'
* refactor: avoid sending webauthn disabled email when 2FA is disabled
When an admins disable 2FA for users, we were sending two mails
to them, one notifying that 2FA was disabled and the other to notify
that WebAuthn was disabled.
As the second one is redundant since the first email includes it, we can
remove it and send just one email to users.
* refactor: avoid creating new env variable for webauthn_origin config
* refactor: improve flash error messages for webauthn pages
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> 4 years ago Change unconfirmed user login behaviour (#11375)
Allow access to account settings, 2FA, authorized applications, and
account deletions to unconfirmed and pending users, as well as
users who had their accounts disabled. Suspended users cannot update
their e-mail or password or delete their account.
Display account status on account settings page, for example, when
an account is frozen, limited, unconfirmed or pending review.
After sign up, login users straight away and show a simple page that
tells them the status of their account with links to account settings
and logout, to reduce onboarding friction and allow users to correct
wrongly typed e-mail addresses.
Move the final sign-up step of SSO integrations to be the same
as above to reduce code duplication. 5 years ago Change unconfirmed user login behaviour (#11375)
Allow access to account settings, 2FA, authorized applications, and
account deletions to unconfirmed and pending users, as well as
users who had their accounts disabled. Suspended users cannot update
their e-mail or password or delete their account.
Display account status on account settings page, for example, when
an account is frozen, limited, unconfirmed or pending review.
After sign up, login users straight away and show a simple page that
tells them the status of their account with links to account settings
and logout, to reduce onboarding friction and allow users to correct
wrongly typed e-mail addresses.
Move the final sign-up step of SSO integrations to be the same
as above to reduce code duplication. 5 years ago Add WebAuthn as an alternative 2FA method (#14466)
* feat: add possibility of adding WebAuthn security keys to use as 2FA
This adds a basic UI for enabling WebAuthn 2FA. We did a little refactor
to the Settings page for editing the 2FA methods – now it will list the
methods that are available to the user (TOTP and WebAuthn) and from
there they'll be able to add or remove any of them.
Also, it's worth mentioning that for enabling WebAuthn it's required to
have TOTP enabled, so the first time that you go to the 2FA Settings
page, you'll be asked to set it up.
This work was inspired by the one donde by Github in their platform, and
despite it could be approached in different ways, we decided to go with
this one given that we feel that this gives a great UX.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: add request for WebAuthn as second factor at login if enabled
This commits adds the feature for using WebAuthn as a second factor for
login when enabled.
If users have WebAuthn enabled, now a page requesting for the use of a
WebAuthn credential for log in will appear, although a link redirecting
to the old page for logging in using a two-factor code will also be
present.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: add possibility of deleting WebAuthn Credentials
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: disable WebAuthn when an Admin disables 2FA for a user
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: remove ability to disable TOTP leaving only WebAuthn as 2FA
Following examples form other platforms like Github, we decided to make
Webauthn 2FA secondary to 2FA with TOTP, so that we removed the
possibility of removing TOTP authentication only, leaving users with
just WEbAuthn as 2FA. Instead, users will have to click on 'Disable 2FA'
in order to remove second factor auth.
The reason for WebAuthn being secondary to TOPT is that in that way,
users will still be able to log in using their code from their phone's
application if they don't have their security keys with them – or maybe
even lost them.
* We had to change a little the flow for setting up TOTP, given that now
it's possible to setting up again if you already had TOTP, in order to
let users modify their authenticator app – given that now it's not
possible for them to disable TOTP and set it up again with another
authenticator app.
So, basically, now instead of storing the new `otp_secret` in the
user, we store it in the session until the process of set up is
finished.
This was because, as it was before, when users clicked on 'Edit' in
the new two-factor methods lists page, but then went back without
finishing the flow, their `otp_secret` had been changed therefore
invalidating their previous authenticator app, making them unable to
log in again using TOTP.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* refactor: fix eslint errors
The PR build was failing given that linting returning some errors.
This commit attempts to fix them.
* refactor: normalize i18n translations
The build was failing given that i18n translations files were not
normalized.
This commits fixes that.
* refactor: avoid having the webauthn gem locked to a specific version
* refactor: use symbols for routes without '/'
* refactor: avoid sending webauthn disabled email when 2FA is disabled
When an admins disable 2FA for users, we were sending two mails
to them, one notifying that 2FA was disabled and the other to notify
that WebAuthn was disabled.
As the second one is redundant since the first email includes it, we can
remove it and send just one email to users.
* refactor: avoid creating new env variable for webauthn_origin config
* refactor: improve flash error messages for webauthn pages
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> 4 years ago Add WebAuthn as an alternative 2FA method (#14466)
* feat: add possibility of adding WebAuthn security keys to use as 2FA
This adds a basic UI for enabling WebAuthn 2FA. We did a little refactor
to the Settings page for editing the 2FA methods – now it will list the
methods that are available to the user (TOTP and WebAuthn) and from
there they'll be able to add or remove any of them.
Also, it's worth mentioning that for enabling WebAuthn it's required to
have TOTP enabled, so the first time that you go to the 2FA Settings
page, you'll be asked to set it up.
This work was inspired by the one donde by Github in their platform, and
despite it could be approached in different ways, we decided to go with
this one given that we feel that this gives a great UX.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: add request for WebAuthn as second factor at login if enabled
This commits adds the feature for using WebAuthn as a second factor for
login when enabled.
If users have WebAuthn enabled, now a page requesting for the use of a
WebAuthn credential for log in will appear, although a link redirecting
to the old page for logging in using a two-factor code will also be
present.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: add possibility of deleting WebAuthn Credentials
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: disable WebAuthn when an Admin disables 2FA for a user
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: remove ability to disable TOTP leaving only WebAuthn as 2FA
Following examples form other platforms like Github, we decided to make
Webauthn 2FA secondary to 2FA with TOTP, so that we removed the
possibility of removing TOTP authentication only, leaving users with
just WEbAuthn as 2FA. Instead, users will have to click on 'Disable 2FA'
in order to remove second factor auth.
The reason for WebAuthn being secondary to TOPT is that in that way,
users will still be able to log in using their code from their phone's
application if they don't have their security keys with them – or maybe
even lost them.
* We had to change a little the flow for setting up TOTP, given that now
it's possible to setting up again if you already had TOTP, in order to
let users modify their authenticator app – given that now it's not
possible for them to disable TOTP and set it up again with another
authenticator app.
So, basically, now instead of storing the new `otp_secret` in the
user, we store it in the session until the process of set up is
finished.
This was because, as it was before, when users clicked on 'Edit' in
the new two-factor methods lists page, but then went back without
finishing the flow, their `otp_secret` had been changed therefore
invalidating their previous authenticator app, making them unable to
log in again using TOTP.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* refactor: fix eslint errors
The PR build was failing given that linting returning some errors.
This commit attempts to fix them.
* refactor: normalize i18n translations
The build was failing given that i18n translations files were not
normalized.
This commits fixes that.
* refactor: avoid having the webauthn gem locked to a specific version
* refactor: use symbols for routes without '/'
* refactor: avoid sending webauthn disabled email when 2FA is disabled
When an admins disable 2FA for users, we were sending two mails
to them, one notifying that 2FA was disabled and the other to notify
that WebAuthn was disabled.
As the second one is redundant since the first email includes it, we can
remove it and send just one email to users.
* refactor: avoid creating new env variable for webauthn_origin config
* refactor: improve flash error messages for webauthn pages
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> 4 years ago Add WebAuthn as an alternative 2FA method (#14466)
* feat: add possibility of adding WebAuthn security keys to use as 2FA
This adds a basic UI for enabling WebAuthn 2FA. We did a little refactor
to the Settings page for editing the 2FA methods – now it will list the
methods that are available to the user (TOTP and WebAuthn) and from
there they'll be able to add or remove any of them.
Also, it's worth mentioning that for enabling WebAuthn it's required to
have TOTP enabled, so the first time that you go to the 2FA Settings
page, you'll be asked to set it up.
This work was inspired by the one donde by Github in their platform, and
despite it could be approached in different ways, we decided to go with
this one given that we feel that this gives a great UX.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: add request for WebAuthn as second factor at login if enabled
This commits adds the feature for using WebAuthn as a second factor for
login when enabled.
If users have WebAuthn enabled, now a page requesting for the use of a
WebAuthn credential for log in will appear, although a link redirecting
to the old page for logging in using a two-factor code will also be
present.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: add possibility of deleting WebAuthn Credentials
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: disable WebAuthn when an Admin disables 2FA for a user
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: remove ability to disable TOTP leaving only WebAuthn as 2FA
Following examples form other platforms like Github, we decided to make
Webauthn 2FA secondary to 2FA with TOTP, so that we removed the
possibility of removing TOTP authentication only, leaving users with
just WEbAuthn as 2FA. Instead, users will have to click on 'Disable 2FA'
in order to remove second factor auth.
The reason for WebAuthn being secondary to TOPT is that in that way,
users will still be able to log in using their code from their phone's
application if they don't have their security keys with them – or maybe
even lost them.
* We had to change a little the flow for setting up TOTP, given that now
it's possible to setting up again if you already had TOTP, in order to
let users modify their authenticator app – given that now it's not
possible for them to disable TOTP and set it up again with another
authenticator app.
So, basically, now instead of storing the new `otp_secret` in the
user, we store it in the session until the process of set up is
finished.
This was because, as it was before, when users clicked on 'Edit' in
the new two-factor methods lists page, but then went back without
finishing the flow, their `otp_secret` had been changed therefore
invalidating their previous authenticator app, making them unable to
log in again using TOTP.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* refactor: fix eslint errors
The PR build was failing given that linting returning some errors.
This commit attempts to fix them.
* refactor: normalize i18n translations
The build was failing given that i18n translations files were not
normalized.
This commits fixes that.
* refactor: avoid having the webauthn gem locked to a specific version
* refactor: use symbols for routes without '/'
* refactor: avoid sending webauthn disabled email when 2FA is disabled
When an admins disable 2FA for users, we were sending two mails
to them, one notifying that 2FA was disabled and the other to notify
that WebAuthn was disabled.
As the second one is redundant since the first email includes it, we can
remove it and send just one email to users.
* refactor: avoid creating new env variable for webauthn_origin config
* refactor: improve flash error messages for webauthn pages
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> 4 years ago Add WebAuthn as an alternative 2FA method (#14466)
* feat: add possibility of adding WebAuthn security keys to use as 2FA
This adds a basic UI for enabling WebAuthn 2FA. We did a little refactor
to the Settings page for editing the 2FA methods – now it will list the
methods that are available to the user (TOTP and WebAuthn) and from
there they'll be able to add or remove any of them.
Also, it's worth mentioning that for enabling WebAuthn it's required to
have TOTP enabled, so the first time that you go to the 2FA Settings
page, you'll be asked to set it up.
This work was inspired by the one donde by Github in their platform, and
despite it could be approached in different ways, we decided to go with
this one given that we feel that this gives a great UX.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: add request for WebAuthn as second factor at login if enabled
This commits adds the feature for using WebAuthn as a second factor for
login when enabled.
If users have WebAuthn enabled, now a page requesting for the use of a
WebAuthn credential for log in will appear, although a link redirecting
to the old page for logging in using a two-factor code will also be
present.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: add possibility of deleting WebAuthn Credentials
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: disable WebAuthn when an Admin disables 2FA for a user
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: remove ability to disable TOTP leaving only WebAuthn as 2FA
Following examples form other platforms like Github, we decided to make
Webauthn 2FA secondary to 2FA with TOTP, so that we removed the
possibility of removing TOTP authentication only, leaving users with
just WEbAuthn as 2FA. Instead, users will have to click on 'Disable 2FA'
in order to remove second factor auth.
The reason for WebAuthn being secondary to TOPT is that in that way,
users will still be able to log in using their code from their phone's
application if they don't have their security keys with them – or maybe
even lost them.
* We had to change a little the flow for setting up TOTP, given that now
it's possible to setting up again if you already had TOTP, in order to
let users modify their authenticator app – given that now it's not
possible for them to disable TOTP and set it up again with another
authenticator app.
So, basically, now instead of storing the new `otp_secret` in the
user, we store it in the session until the process of set up is
finished.
This was because, as it was before, when users clicked on 'Edit' in
the new two-factor methods lists page, but then went back without
finishing the flow, their `otp_secret` had been changed therefore
invalidating their previous authenticator app, making them unable to
log in again using TOTP.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* refactor: fix eslint errors
The PR build was failing given that linting returning some errors.
This commit attempts to fix them.
* refactor: normalize i18n translations
The build was failing given that i18n translations files were not
normalized.
This commits fixes that.
* refactor: avoid having the webauthn gem locked to a specific version
* refactor: use symbols for routes without '/'
* refactor: avoid sending webauthn disabled email when 2FA is disabled
When an admins disable 2FA for users, we were sending two mails
to them, one notifying that 2FA was disabled and the other to notify
that WebAuthn was disabled.
As the second one is redundant since the first email includes it, we can
remove it and send just one email to users.
* refactor: avoid creating new env variable for webauthn_origin config
* refactor: improve flash error messages for webauthn pages
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> 4 years ago Add WebAuthn as an alternative 2FA method (#14466)
* feat: add possibility of adding WebAuthn security keys to use as 2FA
This adds a basic UI for enabling WebAuthn 2FA. We did a little refactor
to the Settings page for editing the 2FA methods – now it will list the
methods that are available to the user (TOTP and WebAuthn) and from
there they'll be able to add or remove any of them.
Also, it's worth mentioning that for enabling WebAuthn it's required to
have TOTP enabled, so the first time that you go to the 2FA Settings
page, you'll be asked to set it up.
This work was inspired by the one donde by Github in their platform, and
despite it could be approached in different ways, we decided to go with
this one given that we feel that this gives a great UX.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: add request for WebAuthn as second factor at login if enabled
This commits adds the feature for using WebAuthn as a second factor for
login when enabled.
If users have WebAuthn enabled, now a page requesting for the use of a
WebAuthn credential for log in will appear, although a link redirecting
to the old page for logging in using a two-factor code will also be
present.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: add possibility of deleting WebAuthn Credentials
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: disable WebAuthn when an Admin disables 2FA for a user
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: remove ability to disable TOTP leaving only WebAuthn as 2FA
Following examples form other platforms like Github, we decided to make
Webauthn 2FA secondary to 2FA with TOTP, so that we removed the
possibility of removing TOTP authentication only, leaving users with
just WEbAuthn as 2FA. Instead, users will have to click on 'Disable 2FA'
in order to remove second factor auth.
The reason for WebAuthn being secondary to TOPT is that in that way,
users will still be able to log in using their code from their phone's
application if they don't have their security keys with them – or maybe
even lost them.
* We had to change a little the flow for setting up TOTP, given that now
it's possible to setting up again if you already had TOTP, in order to
let users modify their authenticator app – given that now it's not
possible for them to disable TOTP and set it up again with another
authenticator app.
So, basically, now instead of storing the new `otp_secret` in the
user, we store it in the session until the process of set up is
finished.
This was because, as it was before, when users clicked on 'Edit' in
the new two-factor methods lists page, but then went back without
finishing the flow, their `otp_secret` had been changed therefore
invalidating their previous authenticator app, making them unable to
log in again using TOTP.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* refactor: fix eslint errors
The PR build was failing given that linting returning some errors.
This commit attempts to fix them.
* refactor: normalize i18n translations
The build was failing given that i18n translations files were not
normalized.
This commits fixes that.
* refactor: avoid having the webauthn gem locked to a specific version
* refactor: use symbols for routes without '/'
* refactor: avoid sending webauthn disabled email when 2FA is disabled
When an admins disable 2FA for users, we were sending two mails
to them, one notifying that 2FA was disabled and the other to notify
that WebAuthn was disabled.
As the second one is redundant since the first email includes it, we can
remove it and send just one email to users.
* refactor: avoid creating new env variable for webauthn_origin config
* refactor: improve flash error messages for webauthn pages
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> 4 years ago Add WebAuthn as an alternative 2FA method (#14466)
* feat: add possibility of adding WebAuthn security keys to use as 2FA
This adds a basic UI for enabling WebAuthn 2FA. We did a little refactor
to the Settings page for editing the 2FA methods – now it will list the
methods that are available to the user (TOTP and WebAuthn) and from
there they'll be able to add or remove any of them.
Also, it's worth mentioning that for enabling WebAuthn it's required to
have TOTP enabled, so the first time that you go to the 2FA Settings
page, you'll be asked to set it up.
This work was inspired by the one donde by Github in their platform, and
despite it could be approached in different ways, we decided to go with
this one given that we feel that this gives a great UX.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: add request for WebAuthn as second factor at login if enabled
This commits adds the feature for using WebAuthn as a second factor for
login when enabled.
If users have WebAuthn enabled, now a page requesting for the use of a
WebAuthn credential for log in will appear, although a link redirecting
to the old page for logging in using a two-factor code will also be
present.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: add possibility of deleting WebAuthn Credentials
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: disable WebAuthn when an Admin disables 2FA for a user
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: remove ability to disable TOTP leaving only WebAuthn as 2FA
Following examples form other platforms like Github, we decided to make
Webauthn 2FA secondary to 2FA with TOTP, so that we removed the
possibility of removing TOTP authentication only, leaving users with
just WEbAuthn as 2FA. Instead, users will have to click on 'Disable 2FA'
in order to remove second factor auth.
The reason for WebAuthn being secondary to TOPT is that in that way,
users will still be able to log in using their code from their phone's
application if they don't have their security keys with them – or maybe
even lost them.
* We had to change a little the flow for setting up TOTP, given that now
it's possible to setting up again if you already had TOTP, in order to
let users modify their authenticator app – given that now it's not
possible for them to disable TOTP and set it up again with another
authenticator app.
So, basically, now instead of storing the new `otp_secret` in the
user, we store it in the session until the process of set up is
finished.
This was because, as it was before, when users clicked on 'Edit' in
the new two-factor methods lists page, but then went back without
finishing the flow, their `otp_secret` had been changed therefore
invalidating their previous authenticator app, making them unable to
log in again using TOTP.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* refactor: fix eslint errors
The PR build was failing given that linting returning some errors.
This commit attempts to fix them.
* refactor: normalize i18n translations
The build was failing given that i18n translations files were not
normalized.
This commits fixes that.
* refactor: avoid having the webauthn gem locked to a specific version
* refactor: use symbols for routes without '/'
* refactor: avoid sending webauthn disabled email when 2FA is disabled
When an admins disable 2FA for users, we were sending two mails
to them, one notifying that 2FA was disabled and the other to notify
that WebAuthn was disabled.
As the second one is redundant since the first email includes it, we can
remove it and send just one email to users.
* refactor: avoid creating new env variable for webauthn_origin config
* refactor: improve flash error messages for webauthn pages
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> 4 years ago Add WebAuthn as an alternative 2FA method (#14466)
* feat: add possibility of adding WebAuthn security keys to use as 2FA
This adds a basic UI for enabling WebAuthn 2FA. We did a little refactor
to the Settings page for editing the 2FA methods – now it will list the
methods that are available to the user (TOTP and WebAuthn) and from
there they'll be able to add or remove any of them.
Also, it's worth mentioning that for enabling WebAuthn it's required to
have TOTP enabled, so the first time that you go to the 2FA Settings
page, you'll be asked to set it up.
This work was inspired by the one donde by Github in their platform, and
despite it could be approached in different ways, we decided to go with
this one given that we feel that this gives a great UX.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: add request for WebAuthn as second factor at login if enabled
This commits adds the feature for using WebAuthn as a second factor for
login when enabled.
If users have WebAuthn enabled, now a page requesting for the use of a
WebAuthn credential for log in will appear, although a link redirecting
to the old page for logging in using a two-factor code will also be
present.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: add possibility of deleting WebAuthn Credentials
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: disable WebAuthn when an Admin disables 2FA for a user
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: remove ability to disable TOTP leaving only WebAuthn as 2FA
Following examples form other platforms like Github, we decided to make
Webauthn 2FA secondary to 2FA with TOTP, so that we removed the
possibility of removing TOTP authentication only, leaving users with
just WEbAuthn as 2FA. Instead, users will have to click on 'Disable 2FA'
in order to remove second factor auth.
The reason for WebAuthn being secondary to TOPT is that in that way,
users will still be able to log in using their code from their phone's
application if they don't have their security keys with them – or maybe
even lost them.
* We had to change a little the flow for setting up TOTP, given that now
it's possible to setting up again if you already had TOTP, in order to
let users modify their authenticator app – given that now it's not
possible for them to disable TOTP and set it up again with another
authenticator app.
So, basically, now instead of storing the new `otp_secret` in the
user, we store it in the session until the process of set up is
finished.
This was because, as it was before, when users clicked on 'Edit' in
the new two-factor methods lists page, but then went back without
finishing the flow, their `otp_secret` had been changed therefore
invalidating their previous authenticator app, making them unable to
log in again using TOTP.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* refactor: fix eslint errors
The PR build was failing given that linting returning some errors.
This commit attempts to fix them.
* refactor: normalize i18n translations
The build was failing given that i18n translations files were not
normalized.
This commits fixes that.
* refactor: avoid having the webauthn gem locked to a specific version
* refactor: use symbols for routes without '/'
* refactor: avoid sending webauthn disabled email when 2FA is disabled
When an admins disable 2FA for users, we were sending two mails
to them, one notifying that 2FA was disabled and the other to notify
that WebAuthn was disabled.
As the second one is redundant since the first email includes it, we can
remove it and send just one email to users.
* refactor: avoid creating new env variable for webauthn_origin config
* refactor: improve flash error messages for webauthn pages
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> 4 years ago Add moderation warnings (#9519)
* Add moderation warnings
Replace individual routes for disabling, silencing, and suspending
a user, as well as the report update route, with a unified account
action controller that allows you to select an action (none,
disable, silence, suspend) as well as whether it should generate an
e-mail notification with optional custom text. That notification,
with the optional custom text, is saved as a warning.
Additionally, there are warning presets you can configure to save
time when performing the above.
* Use Account#local_username_and_domain
5 years ago Add moderation warnings (#9519)
* Add moderation warnings
Replace individual routes for disabling, silencing, and suspending
a user, as well as the report update route, with a unified account
action controller that allows you to select an action (none,
disable, silence, suspend) as well as whether it should generate an
e-mail notification with optional custom text. That notification,
with the optional custom text, is saved as a warning.
Additionally, there are warning presets you can configure to save
time when performing the above.
* Use Account#local_username_and_domain
5 years ago Add moderation warnings (#9519)
* Add moderation warnings
Replace individual routes for disabling, silencing, and suspending
a user, as well as the report update route, with a unified account
action controller that allows you to select an action (none,
disable, silence, suspend) as well as whether it should generate an
e-mail notification with optional custom text. That notification,
with the optional custom text, is saved as a warning.
Additionally, there are warning presets you can configure to save
time when performing the above.
* Use Account#local_username_and_domain
5 years ago Add WebAuthn as an alternative 2FA method (#14466)
* feat: add possibility of adding WebAuthn security keys to use as 2FA
This adds a basic UI for enabling WebAuthn 2FA. We did a little refactor
to the Settings page for editing the 2FA methods – now it will list the
methods that are available to the user (TOTP and WebAuthn) and from
there they'll be able to add or remove any of them.
Also, it's worth mentioning that for enabling WebAuthn it's required to
have TOTP enabled, so the first time that you go to the 2FA Settings
page, you'll be asked to set it up.
This work was inspired by the one donde by Github in their platform, and
despite it could be approached in different ways, we decided to go with
this one given that we feel that this gives a great UX.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: add request for WebAuthn as second factor at login if enabled
This commits adds the feature for using WebAuthn as a second factor for
login when enabled.
If users have WebAuthn enabled, now a page requesting for the use of a
WebAuthn credential for log in will appear, although a link redirecting
to the old page for logging in using a two-factor code will also be
present.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: add possibility of deleting WebAuthn Credentials
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: disable WebAuthn when an Admin disables 2FA for a user
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* feat: remove ability to disable TOTP leaving only WebAuthn as 2FA
Following examples form other platforms like Github, we decided to make
Webauthn 2FA secondary to 2FA with TOTP, so that we removed the
possibility of removing TOTP authentication only, leaving users with
just WEbAuthn as 2FA. Instead, users will have to click on 'Disable 2FA'
in order to remove second factor auth.
The reason for WebAuthn being secondary to TOPT is that in that way,
users will still be able to log in using their code from their phone's
application if they don't have their security keys with them – or maybe
even lost them.
* We had to change a little the flow for setting up TOTP, given that now
it's possible to setting up again if you already had TOTP, in order to
let users modify their authenticator app – given that now it's not
possible for them to disable TOTP and set it up again with another
authenticator app.
So, basically, now instead of storing the new `otp_secret` in the
user, we store it in the session until the process of set up is
finished.
This was because, as it was before, when users clicked on 'Edit' in
the new two-factor methods lists page, but then went back without
finishing the flow, their `otp_secret` had been changed therefore
invalidating their previous authenticator app, making them unable to
log in again using TOTP.
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
* refactor: fix eslint errors
The PR build was failing given that linting returning some errors.
This commit attempts to fix them.
* refactor: normalize i18n translations
The build was failing given that i18n translations files were not
normalized.
This commits fixes that.
* refactor: avoid having the webauthn gem locked to a specific version
* refactor: use symbols for routes without '/'
* refactor: avoid sending webauthn disabled email when 2FA is disabled
When an admins disable 2FA for users, we were sending two mails
to them, one notifying that 2FA was disabled and the other to notify
that WebAuthn was disabled.
As the second one is redundant since the first email includes it, we can
remove it and send just one email to users.
* refactor: avoid creating new env variable for webauthn_origin config
* refactor: improve flash error messages for webauthn pages
Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> 4 years ago |
|
- ---
- en:
- about:
- about_hashtag_html: These are public toots tagged with <strong>#%{hashtag}</strong>. You can interact with them if you have an account anywhere in the fediverse.
- about_mastodon_html: 'The social network of the future: No ads, no corporate surveillance, ethical design, and decentralization! Own your data with Mastodon!'
- about_this: About
- active_count_after: active
- active_footnote: Monthly Active Users (MAU)
- administered_by: 'Administered by:'
- api: API
- apps: Mobile apps
- apps_platforms: Use Mastodon from iOS, Android and other platforms
- browse_directory: Browse a profile directory and filter by interests
- browse_local_posts: Browse a live stream of public posts from this server
- browse_public_posts: Browse a live stream of public posts on Mastodon
- contact: Contact
- contact_missing: Not set
- contact_unavailable: N/A
- discover_users: Discover users
- documentation: Documentation
- federation_hint_html: With an account on %{instance} you'll be able to follow people on any Mastodon server and beyond.
- get_apps: Try a mobile app
- hosted_on: Mastodon hosted on %{domain}
- instance_actor_flash: |
- This account is a virtual actor used to represent the server itself and not any individual user.
- It is used for federation purposes and should not be blocked unless you want to block the whole instance, in which case you should use a domain block.
- learn_more: Learn more
- privacy_policy: Privacy policy
- see_whats_happening: See what's happening
- server_stats: 'Server stats:'
- source_code: Source code
- status_count_after:
- one: status
- other: statuses
- status_count_before: Who authored
- tagline: Follow friends and discover new ones
- terms: Terms of service
- unavailable_content: Moderated servers
- unavailable_content_description:
- domain: Server
- reason: Reason
- rejecting_media: 'Media files from these servers will not be processed or stored, and no thumbnails will be displayed, requiring manual click-through to the original file:'
- rejecting_media_title: Filtered media
- silenced: 'Posts from these servers will be hidden in public timelines and conversations, and no notifications will be generated from their users interactions, unless you are following them:'
- silenced_title: Silenced servers
- suspended: 'No data from these servers will be processed, stored or exchanged, making any interaction or communication with users from these servers impossible:'
- suspended_title: Suspended servers
- unavailable_content_html: Mastodon generally allows you to view content from and interact with users from any other server in the fediverse. These are the exceptions that have been made on this particular server.
- user_count_after:
- one: user
- other: users
- user_count_before: Home to
- what_is_mastodon: What is Mastodon?
- accounts:
- choices_html: "%{name}'s choices:"
- endorsements_hint: You can endorse people you follow from the web interface, and they will show up here.
- featured_tags_hint: You can feature specific hashtags that will be displayed here.
- follow: Follow
- followers:
- one: Follower
- other: Followers
- following: Following
- joined: Joined %{date}
- last_active: last active
- link_verified_on: Ownership of this link was checked on %{date}
- media: Media
- moved_html: "%{name} has moved to %{new_profile_link}:"
- network_hidden: This information is not available
- never_active: Never
- nothing_here: There is nothing here!
- people_followed_by: People whom %{name} follows
- people_who_follow: People who follow %{name}
- pin_errors:
- following: You must be already following the person you want to endorse
- posts:
- one: Toot
- other: Toots
- posts_tab_heading: Toots
- posts_with_replies: Toots and replies
- reserved_username: The username is reserved
- roles:
- admin: Admin
- bot: Bot
- group: Group
- moderator: Mod
- unavailable: Profile unavailable
- unfollow: Unfollow
- admin:
- account_actions:
- action: Perform action
- title: Perform moderation action on %{acct}
- account_moderation_notes:
- create: Leave note
- created_msg: Moderation note successfully created!
- delete: Delete
- destroyed_msg: Moderation note successfully destroyed!
- accounts:
- add_email_domain_block: Block e-mail domain
- approve: Approve
- approve_all: Approve all
- are_you_sure: Are you sure?
- avatar: Avatar
- by_domain: Domain
- change_email:
- changed_msg: Account email successfully changed!
- current_email: Current email
- label: Change email
- new_email: New email
- submit: Change email
- title: Change email for %{username}
- confirm: Confirm
- confirmed: Confirmed
- confirming: Confirming
- deleted: Deleted
- demote: Demote
- disable: Disable
- disable_two_factor_authentication: Disable 2FA
- disabled: Disabled
- display_name: Display name
- domain: Domain
- edit: Edit
- email: Email
- email_status: Email status
- enable: Enable
- enabled: Enabled
- followers: Followers
- follows: Follows
- header: Header
- inbox_url: Inbox URL
- invited_by: Invited by
- ip: IP
- joined: Joined
- location:
- all: All
- local: Local
- remote: Remote
- title: Location
- login_status: Login status
- media_attachments: Media attachments
- memorialize: Turn into memoriam
- moderation:
- active: Active
- all: All
- pending: Pending
- silenced: Silenced
- suspended: Suspended
- title: Moderation
- moderation_notes: Moderation notes
- most_recent_activity: Most recent activity
- most_recent_ip: Most recent IP
- no_account_selected: No accounts were changed as none were selected
- no_limits_imposed: No limits imposed
- not_subscribed: Not subscribed
- pending: Pending review
- perform_full_suspension: Suspend
- promote: Promote
- protocol: Protocol
- public: Public
- push_subscription_expires: PuSH subscription expires
- redownload: Refresh profile
- reject: Reject
- reject_all: Reject all
- remove_avatar: Remove avatar
- remove_header: Remove header
- resend_confirmation:
- already_confirmed: This user is already confirmed
- send: Resend confirmation email
- success: Confirmation email successfully sent!
- reset: Reset
- reset_password: Reset password
- resubscribe: Resubscribe
- role: Permissions
- roles:
- admin: Administrator
- moderator: Moderator
- staff: Staff
- user: User
- search: Search
- search_same_email_domain: Other users with the same e-mail domain
- search_same_ip: Other users with the same IP
- shared_inbox_url: Shared inbox URL
- show:
- created_reports: Made reports
- targeted_reports: Reported by others
- silence: Silence
- silenced: Silenced
- statuses: Statuses
- subscribe: Subscribe
- suspended: Suspended
- time_in_queue: Waiting in queue %{time}
- title: Accounts
- unconfirmed_email: Unconfirmed email
- undo_silenced: Undo silence
- undo_suspension: Undo suspension
- unsubscribe: Unsubscribe
- username: Username
- warn: Warn
- web: Web
- whitelisted: Allowed for federation
- action_logs:
- action_types:
- assigned_to_self_report: Assign Report
- change_email_user: Change E-mail for User
- confirm_user: Confirm User
- create_account_warning: Create Warning
- create_announcement: Create Announcement
- create_custom_emoji: Create Custom Emoji
- create_domain_allow: Create Domain Allow
- create_domain_block: Create Domain Block
- create_email_domain_block: Create E-mail Domain Block
- demote_user: Demote User
- destroy_announcement: Delete Announcement
- destroy_custom_emoji: Delete Custom Emoji
- destroy_domain_allow: Delete Domain Allow
- destroy_domain_block: Delete Domain Block
- destroy_email_domain_block: Delete e-mail domain block
- destroy_status: Delete Status
- disable_2fa_user: Disable 2FA
- disable_custom_emoji: Disable Custom Emoji
- disable_user: Disable User
- enable_custom_emoji: Enable Custom Emoji
- enable_user: Enable User
- memorialize_account: Memorialize Account
- promote_user: Promote User
- remove_avatar_user: Remove Avatar
- reopen_report: Reopen Report
- reset_password_user: Reset Password
- resolve_report: Resolve Report
- silence_account: Silence Account
- suspend_account: Suspend Account
- unassigned_report: Unassign Report
- unsilence_account: Unsilence Account
- unsuspend_account: Unsuspend Account
- update_announcement: Update Announcement
- update_custom_emoji: Update Custom Emoji
- update_status: Update Status
- actions:
- assigned_to_self_report: "%{name} assigned report %{target} to themselves"
- change_email_user: "%{name} changed the e-mail address of user %{target}"
- confirm_user: "%{name} confirmed e-mail address of user %{target}"
- create_account_warning: "%{name} sent a warning to %{target}"
- create_announcement: "%{name} created new announcement %{target}"
- create_custom_emoji: "%{name} uploaded new emoji %{target}"
- create_domain_allow: "%{name} allowed federation with domain %{target}"
- create_domain_block: "%{name} blocked domain %{target}"
- create_email_domain_block: "%{name} blocked e-mail domain %{target}"
- demote_user: "%{name} demoted user %{target}"
- destroy_announcement: "%{name} deleted announcement %{target}"
- destroy_custom_emoji: "%{name} destroyed emoji %{target}"
- destroy_domain_allow: "%{name} disallowed federation with domain %{target}"
- destroy_domain_block: "%{name} unblocked domain %{target}"
- destroy_email_domain_block: "%{name} unblocked e-mail domain %{target}"
- destroy_status: "%{name} removed status by %{target}"
- disable_2fa_user: "%{name} disabled two factor requirement for user %{target}"
- disable_custom_emoji: "%{name} disabled emoji %{target}"
- disable_user: "%{name} disabled login for user %{target}"
- enable_custom_emoji: "%{name} enabled emoji %{target}"
- enable_user: "%{name} enabled login for user %{target}"
- memorialize_account: "%{name} turned %{target}'s account into a memoriam page"
- promote_user: "%{name} promoted user %{target}"
- remove_avatar_user: "%{name} removed %{target}'s avatar"
- reopen_report: "%{name} reopened report %{target}"
- reset_password_user: "%{name} reset password of user %{target}"
- resolve_report: "%{name} resolved report %{target}"
- silence_account: "%{name} silenced %{target}'s account"
- suspend_account: "%{name} suspended %{target}'s account"
- unassigned_report: "%{name} unassigned report %{target}"
- unsilence_account: "%{name} unsilenced %{target}'s account"
- unsuspend_account: "%{name} unsuspended %{target}'s account"
- update_announcement: "%{name} updated announcement %{target}"
- update_custom_emoji: "%{name} updated emoji %{target}"
- update_status: "%{name} updated status by %{target}"
- deleted_status: "(deleted status)"
- empty: No logs found.
- filter_by_action: Filter by action
- filter_by_user: Filter by user
- title: Audit log
- announcements:
- destroyed_msg: Announcement successfully deleted!
- edit:
- title: Edit announcement
- empty: No announcements found.
- live: Live
- new:
- create: Create announcement
- title: New announcement
- published_msg: Announcement successfully published!
- scheduled_for: Scheduled for %{time}
- scheduled_msg: Announcement scheduled for publication!
- title: Announcements
- unpublished_msg: Announcement successfully unpublished!
- updated_msg: Announcement successfully updated!
- custom_emojis:
- assign_category: Assign category
- by_domain: Domain
- copied_msg: Successfully created local copy of the emoji
- copy: Copy
- copy_failed_msg: Could not make a local copy of that emoji
- create_new_category: Create new category
- created_msg: Emoji successfully created!
- delete: Delete
- destroyed_msg: Emojo successfully destroyed!
- disable: Disable
- disabled: Disabled
- disabled_msg: Successfully disabled that emoji
- emoji: Emoji
- enable: Enable
- enabled: Enabled
- enabled_msg: Successfully enabled that emoji
- image_hint: PNG up to 50KB
- list: List
- listed: Listed
- new:
- title: Add new custom emoji
- not_permitted: You are not permitted to perform this action
- overwrite: Overwrite
- shortcode: Shortcode
- shortcode_hint: At least 2 characters, only alphanumeric characters and underscores
- title: Custom emojis
- uncategorized: Uncategorized
- unlist: Unlist
- unlisted: Unlisted
- update_failed_msg: Could not update that emoji
- updated_msg: Emoji successfully updated!
- upload: Upload
- dashboard:
- authorized_fetch_mode: Secure mode
- backlog: backlogged jobs
- config: Configuration
- feature_deletions: Account deletions
- feature_invites: Invite links
- feature_profile_directory: Profile directory
- feature_registrations: Registrations
- feature_relay: Federation relay
- feature_spam_check: Anti-spam
- feature_timeline_preview: Timeline preview
- features: Features
- hidden_service: Federation with hidden services
- open_reports: open reports
- pending_tags: hashtags waiting for review
- pending_users: users waiting for review
- recent_users: Recent users
- search: Full-text search
- single_user_mode: Single user mode
- software: Software
- space: Space usage
- title: Dashboard
- total_users: users in total
- trends: Trends
- week_interactions: interactions this week
- week_users_active: active this week
- week_users_new: users this week
- whitelist_mode: Limited federation mode
- domain_allows:
- add_new: Allow federation with domain
- created_msg: Domain has been successfully allowed for federation
- destroyed_msg: Domain has been disallowed from federation
- undo: Disallow federation with domain
- domain_blocks:
- add_new: Add new domain block
- created_msg: Domain block is now being processed
- destroyed_msg: Domain block has been undone
- domain: Domain
- edit: Edit domain block
- existing_domain_block_html: You have already imposed stricter limits on %{name}, you need to <a href="%{unblock_url}">unblock it</a> first.
- new:
- create: Create block
- hint: The domain block will not prevent creation of account entries in the database, but will retroactively and automatically apply specific moderation methods on those accounts.
- severity:
- desc_html: "<strong>Silence</strong> will make the account's posts invisible to anyone who isn't following them. <strong>Suspend</strong> will remove all of the account's content, media, and profile data. Use <strong>None</strong> if you just want to reject media files."
- noop: None
- silence: Silence
- suspend: Suspend
- title: New domain block
- private_comment: Private comment
- private_comment_hint: Comment about this domain limitation for internal use by the moderators.
- public_comment: Public comment
- public_comment_hint: Comment about this domain limitation for the general public, if advertising the list of domain limitations is enabled.
- reject_media: Reject media files
- reject_media_hint: Removes locally stored media files and refuses to download any in the future. Irrelevant for suspensions
- reject_reports: Reject reports
- reject_reports_hint: Ignore all reports coming from this domain. Irrelevant for suspensions
- rejecting_media: rejecting media files
- rejecting_reports: rejecting reports
- severity:
- silence: silenced
- suspend: suspended
- show:
- affected_accounts:
- one: One account in the database affected
- other: "%{count} accounts in the database affected"
- retroactive:
- silence: Unsilence existing affected accounts from this domain
- suspend: Unsuspend existing affected accounts from this domain
- title: Undo domain block for %{domain}
- undo: Undo
- undo: Undo domain block
- view: View domain block
- email_domain_blocks:
- add_new: Add new
- created_msg: Successfully blocked e-mail domain
- delete: Delete
- destroyed_msg: Successfully unblocked e-mail domain
- domain: Domain
- empty: No e-mail domains currently blocked.
- from_html: from %{domain}
- new:
- create: Add domain
- title: Block new e-mail domain
- title: Blocked e-mail domains
- instances:
- by_domain: Domain
- delivery_available: Delivery is available
- known_accounts:
- one: "%{count} known account"
- other: "%{count} known accounts"
- moderation:
- all: All
- limited: Limited
- title: Moderation
- private_comment: Private comment
- public_comment: Public comment
- title: Federation
- total_blocked_by_us: Blocked by us
- total_followed_by_them: Followed by them
- total_followed_by_us: Followed by us
- total_reported: Reports about them
- total_storage: Media attachments
- invites:
- deactivate_all: Deactivate all
- filter:
- all: All
- available: Available
- expired: Expired
- title: Filter
- title: Invites
- pending_accounts:
- title: Pending accounts (%{count})
- relationships:
- title: "%{acct}'s relationships"
- relays:
- add_new: Add new relay
- delete: Delete
- description_html: A <strong>federation relay</strong> is an intermediary server that exchanges large volumes of public toots between servers that subscribe and publish to it. <strong>It can help small and medium servers discover content from the fediverse</strong>, which would otherwise require local users manually following other people on remote servers.
- disable: Disable
- disabled: Disabled
- enable: Enable
- enable_hint: Once enabled, your server will subscribe to all public toots from this relay, and will begin sending this server's public toots to it.
- enabled: Enabled
- inbox_url: Relay URL
- pending: Waiting for relay's approval
- save_and_enable: Save and enable
- setup: Setup a relay connection
- signatures_not_enabled: Relays will not work correctly while secure mode or limited federation mode is enabled
- status: Status
- title: Relays
- report_notes:
- created_msg: Report note successfully created!
- destroyed_msg: Report note successfully deleted!
- reports:
- account:
- notes:
- one: "%{count} note"
- other: "%{count} notes"
- reports:
- one: "%{count} report"
- other: "%{count} reports"
- action_taken_by: Action taken by
- are_you_sure: Are you sure?
- assign_to_self: Assign to me
- assigned: Assigned moderator
- by_target_domain: Domain of reported account
- comment:
- none: None
- created_at: Reported
- mark_as_resolved: Mark as resolved
- mark_as_unresolved: Mark as unresolved
- notes:
- create: Add note
- create_and_resolve: Resolve with note
- create_and_unresolve: Reopen with note
- delete: Delete
- placeholder: Describe what actions have been taken, or any other related updates...
- reopen: Reopen report
- report: 'Report #%{id}'
- reported_account: Reported account
- reported_by: Reported by
- resolved: Resolved
- resolved_msg: Report successfully resolved!
- status: Status
- title: Reports
- unassign: Unassign
- unresolved: Unresolved
- updated_at: Updated
- settings:
- activity_api_enabled:
- desc_html: Counts of locally posted statuses, active users, and new registrations in weekly buckets
- title: Publish aggregate statistics about user activity
- bootstrap_timeline_accounts:
- desc_html: Separate multiple usernames by comma. Only local and unlocked accounts will work. Default when empty is all local admins.
- title: Default follows for new users
- contact_information:
- email: Business e-mail
- username: Contact username
- custom_css:
- desc_html: Modify the look with CSS loaded on every page
- title: Custom CSS
- default_noindex:
- desc_html: Affects all users who have not changed this setting themselves
- title: Opt users out of search engine indexing by default
- domain_blocks:
- all: To everyone
- disabled: To no one
- title: Show domain blocks
- users: To logged-in local users
- domain_blocks_rationale:
- title: Show rationale
- enable_bootstrap_timeline_accounts:
- title: Enable default follows for new users
- hero:
- desc_html: Displayed on the frontpage. At least 600x100px recommended. When not set, falls back to server thumbnail
- title: Hero image
- mascot:
- desc_html: Displayed on multiple pages. At least 293×205px recommended. When not set, falls back to default mascot
- title: Mascot image
- peers_api_enabled:
- desc_html: Domain names this server has encountered in the fediverse
- title: Publish list of discovered servers
- preview_sensitive_media:
- desc_html: Link previews on other websites will display a thumbnail even if the media is marked as sensitive
- title: Show sensitive media in OpenGraph previews
- profile_directory:
- desc_html: Allow users to be discoverable
- title: Enable profile directory
- registrations:
- closed_message:
- desc_html: Displayed on frontpage when registrations are closed. You can use HTML tags
- title: Closed registration message
- deletion:
- desc_html: Allow anyone to delete their account
- title: Open account deletion
- min_invite_role:
- disabled: No one
- title: Allow invitations by
- registrations_mode:
- modes:
- approved: Approval required for sign up
- none: Nobody can sign up
- open: Anyone can sign up
- title: Registrations mode
- show_known_fediverse_at_about_page:
- desc_html: When disabled, restricts the public timeline linked from the landing page to showing only local content
- title: Include federated content on unauthenticated public timeline page
- show_staff_badge:
- desc_html: Show a staff badge on a user page
- title: Show staff badge
- site_description:
- desc_html: Introductory paragraph on the API. Describe what makes this Mastodon server special and anything else important. You can use HTML tags, in particular <code><a></code> and <code><em></code>.
- title: Server description
- site_description_extended:
- desc_html: A good place for your code of conduct, rules, guidelines and other things that set your server apart. You can use HTML tags
- title: Custom extended information
- site_short_description:
- desc_html: Displayed in sidebar and meta tags. Describe what Mastodon is and what makes this server special in a single paragraph.
- title: Short server description
- site_terms:
- desc_html: You can write your own privacy policy, terms of service or other legalese. You can use HTML tags
- title: Custom terms of service
- site_title: Server name
- spam_check_enabled:
- desc_html: Mastodon can auto-report accounts that send repeated unsolicited messages. There may be false positives.
- title: Anti-spam automation
- thumbnail:
- desc_html: Used for previews via OpenGraph and API. 1200x630px recommended
- title: Server thumbnail
- timeline_preview:
- desc_html: Display link to public timeline on landing page and allow API access to the public timeline without authentication
- title: Allow unauthenticated access to public timeline
- title: Site settings
- trendable_by_default:
- desc_html: Affects hashtags that have not been previously disallowed
- title: Allow hashtags to trend without prior review
- trends:
- desc_html: Publicly display previously reviewed hashtags that are currently trending
- title: Trending hashtags
- site_uploads:
- delete: Delete uploaded file
- destroyed_msg: Site upload successfully deleted!
- statuses:
- back_to_account: Back to account page
- batch:
- delete: Delete
- nsfw_off: Mark as not sensitive
- nsfw_on: Mark as sensitive
- deleted: Deleted
- failed_to_execute: Failed to execute
- media:
- title: Media
- no_media: No media
- no_status_selected: No statuses were changed as none were selected
- title: Account statuses
- with_media: With media
- tags:
- accounts_today: Unique uses today
- accounts_week: Unique uses this week
- breakdown: Breakdown of today's usage by source
- context: Context
- directory: In directory
- in_directory: "%{count} in directory"
- last_active: Last active
- most_popular: Most popular
- most_recent: Most recent
- name: Hashtag
- review: Review status
- reviewed: Reviewed
- title: Hashtags
- trending_right_now: Trending right now
- unique_uses_today: "%{count} posting today"
- unreviewed: Not reviewed
- updated_msg: Hashtag settings updated successfully
- title: Administration
- warning_presets:
- add_new: Add new
- delete: Delete
- edit_preset: Edit warning preset
- title: Manage warning presets
- admin_mailer:
- new_pending_account:
- body: The details of the new account are below. You can approve or reject this application.
- subject: New account up for review on %{instance} (%{username})
- new_report:
- body: "%{reporter} has reported %{target}"
- body_remote: Someone from %{domain} has reported %{target}
- subject: New report for %{instance} (#%{id})
- new_trending_tag:
- body: 'The hashtag #%{name} is trending today, but has not been previously reviewed. It will not be displayed publicly unless you allow it to, or just save the form as it is to never hear about it again.'
- subject: New hashtag up for review on %{instance} (#%{name})
- aliases:
- add_new: Create alias
- created_msg: Successfully created a new alias. You can now initiate the move from the old account.
- deleted_msg: Successfully remove the alias. Moving from that account to this one will no longer be possible.
- empty: You have no aliases.
- hint_html: If you want to move from another account to this one, here you can create an alias, which is required before you can proceed with moving followers from the old account to this one. This action by itself is <strong>harmless and reversible</strong>. <strong>The account migration is initiated from the old account</strong>.
- remove: Unlink alias
- appearance:
- advanced_web_interface: Advanced web interface
- advanced_web_interface_hint: 'If you want to make use of your entire screen width, the advanced web interface allows you to configure many different columns to see as much information at the same time as you want: Home, notifications, federated timeline, any number of lists and hashtags.'
- animations_and_accessibility: Animations and accessibility
- confirmation_dialogs: Confirmation dialogs
- discovery: Discovery
- localization:
- body: Mastodon is translated by volunteers.
- guide_link: https://crowdin.com/project/mastodon
- guide_link_text: Everyone can contribute.
- sensitive_content: Sensitive content
- toot_layout: Toot layout
- application_mailer:
- notification_preferences: Change e-mail preferences
- salutation: "%{name},"
- settings: 'Change e-mail preferences: %{link}'
- view: 'View:'
- view_profile: View profile
- view_status: View status
- applications:
- created: Application successfully created
- destroyed: Application successfully deleted
- invalid_url: The provided URL is invalid
- regenerate_token: Regenerate access token
- token_regenerated: Access token successfully regenerated
- warning: Be very careful with this data. Never share it with anyone!
- your_token: Your access token
- auth:
- apply_for_account: Request an invite
- change_password: Password
- checkbox_agreement_html: I agree to the <a href="%{rules_path}" target="_blank">server rules</a> and <a href="%{terms_path}" target="_blank">terms of service</a>
- checkbox_agreement_without_rules_html: I agree to the <a href="%{terms_path}" target="_blank">terms of service</a>
- delete_account: Delete account
- delete_account_html: If you wish to delete your account, you can <a href="%{path}">proceed here</a>. You will be asked for confirmation.
- description:
- prefix_invited_by_user: "@%{name} invites you to join this server of Mastodon!"
- prefix_sign_up: Sign up on Mastodon today!
- suffix: With an account, you will be able to follow people, post updates and exchange messages with users from any Mastodon server and more!
- didnt_get_confirmation: Didn't receive confirmation instructions?
- dont_have_your_security_key: Don't have your security key?
- forgot_password: Forgot your password?
- invalid_reset_password_token: Password reset token is invalid or expired. Please request a new one.
- link_to_otp: Enter a two-factor code from your phone or a recovery code
- link_to_webauth: Use your security key device
- login: Log in
- logout: Logout
- migrate_account: Move to a different account
- migrate_account_html: If you wish to redirect this account to a different one, you can <a href="%{path}">configure it here</a>.
- or_log_in_with: Or log in with
- providers:
- cas: CAS
- saml: SAML
- register: Sign up
- registration_closed: "%{instance} is not accepting new members"
- resend_confirmation: Resend confirmation instructions
- reset_password: Reset password
- security: Security
- set_new_password: Set new password
- setup:
- email_below_hint_html: If the below e-mail address is incorrect, you can change it here and receive a new confirmation e-mail.
- email_settings_hint_html: The confirmation e-mail was sent to %{email}. If that e-mail address is not correct, you can change it in account settings.
- title: Setup
- status:
- account_status: Account status
- confirming: Waiting for e-mail confirmation to be completed.
- functional: Your account is fully operational.
- pending: Your application is pending review by our staff. This may take some time. You will receive an e-mail if your application is approved.
- redirecting_to: Your account is inactive because it is currently redirecting to %{acct}.
- trouble_logging_in: Trouble logging in?
- use_security_key: Use security key
- authorize_follow:
- already_following: You are already following this account
- already_requested: You have already sent a follow request to that account
- error: Unfortunately, there was an error looking up the remote account
- follow: Follow
- follow_request: 'You have sent a follow request to:'
- following: 'Success! You are now following:'
- post_follow:
- close: Or, you can just close this window.
- return: Show the user's profile
- web: Go to web
- title: Follow %{acct}
- challenge:
- confirm: Continue
- hint_html: "<strong>Tip:</strong> We won't ask you for your password again for the next hour."
- invalid_password: Invalid password
- prompt: Confirm password to continue
- crypto:
- errors:
- invalid_key: is not a valid Ed25519 or Curve25519 key
- invalid_signature: is not a valid Ed25519 signature
- date:
- formats:
- default: "%b %d, %Y"
- with_month_name: "%B %d, %Y"
- datetime:
- distance_in_words:
- about_x_hours: "%{count}h"
- about_x_months: "%{count}mo"
- about_x_years: "%{count}y"
- almost_x_years: "%{count}y"
- half_a_minute: Just now
- less_than_x_minutes: "%{count}m"
- less_than_x_seconds: Just now
- over_x_years: "%{count}y"
- x_days: "%{count}d"
- x_minutes: "%{count}m"
- x_months: "%{count}mo"
- x_seconds: "%{count}s"
- deletes:
- challenge_not_passed: The information you entered was not correct
- confirm_password: Enter your current password to verify your identity
- confirm_username: Enter your username to confirm the procedure
- proceed: Delete account
- success_msg: Your account was successfully deleted
- warning:
- before: 'Before proceeding, please read these notes carefully:'
- caches: Content that has been cached by other servers may persist
- data_removal: Your posts and other data will be permanently removed
- email_change_html: You can <a href="%{path}">change your e-mail address</a> without deleting your account
- email_contact_html: If it still doesn't arrive, you can e-mail <a href="mailto:%{email}">%{email}</a> for help
- email_reconfirmation_html: If you are not receiving the confirmation e-mail, you can <a href="%{path}">request it again</a>
- irreversible: You will not be able to restore or reactivate your account
- more_details_html: For more details, see the <a href="%{terms_path}">privacy policy</a>.
- username_available: Your username will become available again
- username_unavailable: Your username will remain unavailable
- directories:
- directory: Profile directory
- explanation: Discover users based on their interests
- explore_mastodon: Explore %{title}
- domain_validator:
- invalid_domain: is not a valid domain name
- errors:
- '400': The request you submitted was invalid or malformed.
- '403': You don't have permission to view this page.
- '404': The page you are looking for isn't here.
- '406': This page is not available in the requested format.
- '410': The page you were looking for doesn't exist here anymore.
- '422':
- content: Security verification failed. Are you blocking cookies?
- title: Security verification failed
- '429': Too many requests
- '500':
- content: We're sorry, but something went wrong on our end.
- title: This page is not correct
- '503': The page could not be served due to a temporary server failure.
- noscript_html: To use the Mastodon web application, please enable JavaScript. Alternatively, try one of the <a href="%{apps_path}">native apps</a> for Mastodon for your platform.
- existing_username_validator:
- not_found: could not find a local user with that username
- not_found_multiple: could not find %{usernames}
- exports:
- archive_takeout:
- date: Date
- download: Download your archive
- hint_html: You can request an archive of your <strong>toots and uploaded media</strong>. The exported data will be in the ActivityPub format, readable by any compliant software. You can request an archive every 7 days.
- in_progress: Compiling your archive...
- request: Request your archive
- size: Size
- blocks: You block
- csv: CSV
- domain_blocks: Domain blocks
- lists: Lists
- mutes: You mute
- storage: Media storage
- featured_tags:
- add_new: Add new
- errors:
- limit: You have already featured the maximum amount of hashtags
- hint_html: "<strong>What are featured hashtags?</strong> They are displayed prominently on your public profile and allow people to browse your public posts specifically under those hashtags. They are a great tool for keeping track of creative works or long-term projects."
- filters:
- contexts:
- account: Profiles
- home: Home timeline
- notifications: Notifications
- public: Public timelines
- thread: Conversations
- edit:
- title: Edit filter
- errors:
- invalid_context: None or invalid context supplied
- invalid_irreversible: Irreversible filtering only works with home or notifications context
- index:
- delete: Delete
- empty: You have no filters.
- title: Filters
- new:
- title: Add new filter
- footer:
- developers: Developers
- more: More…
- resources: Resources
- trending_now: Trending now
- generic:
- all: All
- changes_saved_msg: Changes successfully saved!
- copy: Copy
- delete: Delete
- no_batch_actions_available: No batch actions available on this page
- order_by: Order by
- save_changes: Save changes
- validation_errors:
- one: Something isn't quite right yet! Please review the error below
- other: Something isn't quite right yet! Please review %{count} errors below
- html_validator:
- invalid_markup: 'contains invalid HTML markup: %{error}'
- identity_proofs:
- active: Active
- authorize: Yes, authorize
- authorize_connection_prompt: Authorize this cryptographic connection?
- errors:
- failed: The cryptographic connection failed. Please try again from %{provider}.
- keybase:
- invalid_token: Keybase tokens are hashes of signatures and must be 66 hex characters
- verification_failed: Keybase does not recognize this token as a signature of Keybase user %{kb_username}. Please retry from Keybase.
- wrong_user: Cannot create a proof for %{proving} while logged in as %{current}. Log in as %{proving} and try again.
- explanation_html: Here you can cryptographically connect your other identities from other platforms, such as Keybase. This lets other people send you encrypted messages on those platforms and allows them to trust that the content you send them comes from you.
- i_am_html: I am %{username} on %{service}.
- identity: Identity
- inactive: Inactive
- publicize_checkbox: 'And toot this:'
- publicize_toot: 'It is proven! I am %{username} on %{service}: %{url}'
- remove: Remove proof from account
- removed: Successfully removed proof from account
- status: Verification status
- view_proof: View proof
- imports:
- modes:
- merge: Merge
- merge_long: Keep existing records and add new ones
- overwrite: Overwrite
- overwrite_long: Replace current records with the new ones
- preface: You can import data that you have exported from another server, such as a list of the people you are following or blocking.
- success: Your data was successfully uploaded and will now be processed in due time
- types:
- blocking: Blocking list
- domain_blocking: Domain blocking list
- following: Following list
- muting: Muting list
- upload: Upload
- in_memoriam_html: In Memoriam.
- invites:
- delete: Deactivate
- expired: Expired
- expires_in:
- '1800': 30 minutes
- '21600': 6 hours
- '3600': 1 hour
- '43200': 12 hours
- '604800': 1 week
- '86400': 1 day
- expires_in_prompt: Never
- generate: Generate invite link
- invited_by: 'You were invited by:'
- max_uses:
- one: 1 use
- other: "%{count} uses"
- max_uses_prompt: No limit
- prompt: Generate and share links with others to grant access to this server
- table:
- expires_at: Expires
- uses: Uses
- title: Invite people
- lists:
- errors:
- limit: You have reached the maximum amount of lists
- media_attachments:
- validations:
- images_and_video: Cannot attach a video to a status that already contains images
- not_ready: Cannot attach files that have not finished processing. Try again in a moment!
- too_many: Cannot attach more than 4 files
- migrations:
- acct: Moved to
- cancel: Cancel redirect
- cancel_explanation: Cancelling the redirect will re-activate your current account, but will not bring back followers that have been moved to that account.
- cancelled_msg: Successfully cancelled the redirect.
- errors:
- already_moved: is the same account you have already moved to
- missing_also_known_as: is not an alias of this account
- move_to_self: cannot be current account
- not_found: could not be found
- on_cooldown: You are on cooldown
- followers_count: Followers at time of move
- incoming_migrations: Moving from a different account
- incoming_migrations_html: To move from another account to this one, first you need to <a href="%{path}">create an account alias</a>.
- moved_msg: Your account is now redirecting to %{acct} and your followers are being moved over.
- not_redirecting: Your account is not redirecting to any other account currently.
- on_cooldown: You have recently migrated your account. This function will become available again in %{count} days.
- past_migrations: Past migrations
- proceed_with_move: Move followers
- redirected_msg: Your account is now redirecting to %{acct}.
- redirecting_to: Your account is redirecting to %{acct}.
- set_redirect: Set redirect
- warning:
- backreference_required: The new account must first be configured to back-reference this one
- before: 'Before proceeding, please read these notes carefully:'
- cooldown: After moving there is a cooldown period during which you will not be able to move again
- disabled_account: Your current account will not be fully usable afterwards. However, you will have access to data export as well as re-activation.
- followers: This action will move all followers from the current account to the new account
- only_redirect_html: Alternatively, you can <a href="%{path}">only put up a redirect on your profile</a>.
- other_data: No other data will be moved automatically
- redirect: Your current account's profile will be updated with a redirect notice and be excluded from searches
- moderation:
- title: Moderation
- move_handler:
- carry_blocks_over_text: This user moved from %{acct}, which you had blocked.
- carry_mutes_over_text: This user moved from %{acct}, which you had muted.
- copy_account_note_text: 'This user moved from %{acct}, here were your previous notes about them:'
- notification_mailer:
- digest:
- action: View all notifications
- body: Here is a brief summary of the messages you missed since your last visit on %{since}
- mention: "%{name} mentioned you in:"
- new_followers_summary:
- one: Also, you have acquired one new follower while being away! Yay!
- other: Also, you have acquired %{count} new followers while being away! Amazing!
- subject:
- one: "1 new notification since your last visit \U0001F418"
- other: "%{count} new notifications since your last visit \U0001F418"
- title: In your absence...
- favourite:
- body: 'Your status was favourited by %{name}:'
- subject: "%{name} favourited your status"
- title: New favourite
- follow:
- body: "%{name} is now following you!"
- subject: "%{name} is now following you"
- title: New follower
- follow_request:
- action: Manage follow requests
- body: "%{name} has requested to follow you"
- subject: 'Pending follower: %{name}'
- title: New follow request
- mention:
- action: Reply
- body: 'You were mentioned by %{name} in:'
- subject: You were mentioned by %{name}
- title: New mention
- reblog:
- body: 'Your status was boosted by %{name}:'
- subject: "%{name} boosted your status"
- title: New boost
- notifications:
- email_events: Events for e-mail notifications
- email_events_hint: 'Select events that you want to receive notifications for:'
- other_settings: Other notifications settings
- number:
- human:
- decimal_units:
- format: "%n%u"
- units:
- billion: B
- million: M
- quadrillion: Q
- thousand: K
- trillion: T
- unit: ''
- otp_authentication:
- code_hint: Enter the code generated by your authenticator app to confirm
- description_html: If you enable <strong>two-factor authentication</strong> using an authenticator app, logging in will require you to be in possession of your phone, which will generate tokens for you to enter.
- enable: Enable
- instructions_html: "<strong>Scan this QR code into Google Authenticator or a similiar TOTP app on your phone</strong>. From now on, that app will generate tokens that you will have to enter when logging in."
- manual_instructions: 'If you can''t scan the QR code and need to enter it manually, here is the plain-text secret:'
- setup: Set up
- wrong_code: The entered code was invalid! Are server time and device time correct?
- pagination:
- newer: Newer
- next: Next
- older: Older
- prev: Prev
- truncate: "…"
- polls:
- errors:
- already_voted: You have already voted on this poll
- duplicate_options: contain duplicate items
- duration_too_long: is too far into the future
- duration_too_short: is too soon
- expired: The poll has already ended
- invalid_choice: The chosen vote option does not exist
- over_character_limit: cannot be longer than %{max} characters each
- too_few_options: must have more than one item
- too_many_options: can't contain more than %{max} items
- preferences:
- other: Other
- posting_defaults: Posting defaults
- public_timelines: Public timelines
- reactions:
- errors:
- limit_reached: Limit of different reactions reached
- unrecognized_emoji: is not a recognized emoji
- relationships:
- activity: Account activity
- dormant: Dormant
- followers: Followers
- following: Following
- invited: Invited
- last_active: Last active
- most_recent: Most recent
- moved: Moved
- mutual: Mutual
- primary: Primary
- relationship: Relationship
- remove_selected_domains: Remove all followers from the selected domains
- remove_selected_followers: Remove selected followers
- remove_selected_follows: Unfollow selected users
- status: Account status
- remote_follow:
- acct: Enter your username@domain you want to act from
- missing_resource: Could not find the required redirect URL for your account
- no_account_html: Don't have an account? You can <a href='%{sign_up_path}' target='_blank'>sign up here</a>
- proceed: Proceed to follow
- prompt: 'You are going to follow:'
- reason_html: "<strong>Why is this step necessary?</strong> <code>%{instance}</code> might not be the server where you are registered, so we need to redirect you to your home server first."
- remote_interaction:
- favourite:
- proceed: Proceed to favourite
- prompt: 'You want to favourite this toot:'
- reblog:
- proceed: Proceed to boost
- prompt: 'You want to boost this toot:'
- reply:
- proceed: Proceed to reply
- prompt: 'You want to reply to this toot:'
- scheduled_statuses:
- over_daily_limit: You have exceeded the limit of %{limit} scheduled toots for that day
- over_total_limit: You have exceeded the limit of %{limit} scheduled toots
- too_soon: The scheduled date must be in the future
- sessions:
- activity: Last activity
- browser: Browser
- browsers:
- alipay: Alipay
- blackberry: Blackberry
- chrome: Chrome
- edge: Microsoft Edge
- electron: Electron
- firefox: Firefox
- generic: Unknown browser
- ie: Internet Explorer
- micro_messenger: MicroMessenger
- nokia: Nokia S40 Ovi Browser
- opera: Opera
- otter: Otter
- phantom_js: PhantomJS
- qq: QQ Browser
- safari: Safari
- uc_browser: UCBrowser
- weibo: Weibo
- current_session: Current session
- description: "%{browser} on %{platform}"
- explanation: These are the web browsers currently logged in to your Mastodon account.
- ip: IP
- platforms:
- adobe_air: Adobe Air
- android: Android
- blackberry: Blackberry
- chrome_os: ChromeOS
- firefox_os: Firefox OS
- ios: iOS
- linux: Linux
- mac: macOS
- other: unknown platform
- windows: Windows
- windows_mobile: Windows Mobile
- windows_phone: Windows Phone
- revoke: Revoke
- revoke_success: Session successfully revoked
- title: Sessions
- settings:
- account: Account
- account_settings: Account settings
- aliases: Account aliases
- appearance: Appearance
- authorized_apps: Authorized apps
- back: Back to Mastodon
- delete: Account deletion
- development: Development
- edit_profile: Edit profile
- export: Data export
- featured_tags: Featured hashtags
- identity_proofs: Identity proofs
- import: Import
- import_and_export: Import and export
- migrate: Account migration
- notifications: Notifications
- preferences: Preferences
- profile: Profile
- relationships: Follows and followers
- two_factor_authentication: Two-factor Auth
- webauthn_authentication: Security keys
- spam_check:
- spam_detected: This is an automated report. Spam has been detected.
- statuses:
- attached:
- audio:
- one: "%{count} audio"
- other: "%{count} audio"
- description: 'Attached: %{attached}'
- image:
- one: "%{count} image"
- other: "%{count} images"
- video:
- one: "%{count} video"
- other: "%{count} videos"
- boosted_from_html: Boosted from %{acct_link}
- content_warning: 'Content warning: %{warning}'
- disallowed_hashtags:
- one: 'contained a disallowed hashtag: %{tags}'
- other: 'contained the disallowed hashtags: %{tags}'
- errors:
- in_reply_not_found: The status you are trying to reply to does not appear to exist.
- language_detection: Automatically detect language
- open_in_web: Open in web
- over_character_limit: character limit of %{max} exceeded
- pin_errors:
- limit: You have already pinned the maximum number of toots
- ownership: Someone else's toot cannot be pinned
- private: Non-public toot cannot be pinned
- reblog: A boost cannot be pinned
- poll:
- total_people:
- one: "%{count} person"
- other: "%{count} people"
- total_votes:
- one: "%{count} vote"
- other: "%{count} votes"
- vote: Vote
- show_more: Show more
- show_thread: Show thread
- sign_in_to_participate: Sign in to participate in the conversation
- title: '%{name}: "%{quote}"'
- visibilities:
- private: Followers-only
- private_long: Only show to followers
- public: Public
- public_long: Everyone can see
- unlisted: Unlisted
- unlisted_long: Everyone can see, but not listed on public timelines
- stream_entries:
- pinned: Pinned toot
- reblogged: boosted
- sensitive_content: Sensitive content
- tags:
- does_not_match_previous_name: does not match the previous name
- terms:
- body_html: |
- <h2>Privacy Policy</h2>
- <h3 id="collect">What information do we collect?</h3>
-
- <ul>
- <li><em>Basic account information</em>: If you register on this server, you may be asked to enter a username, an e-mail address and a password. You may also enter additional profile information such as a display name and biography, and upload a profile picture and header image. The username, display name, biography, profile picture and header image are always listed publicly.</li>
- <li><em>Posts, following and other public information</em>: The list of people you follow is listed publicly, the same is true for your followers. When you submit a message, the date and time is stored as well as the application you submitted the message from. Messages may contain media attachments, such as pictures and videos. Public and unlisted posts are available publicly. When you feature a post on your profile, that is also publicly available information. Your posts are delivered to your followers, in some cases it means they are delivered to different servers and copies are stored there. When you delete posts, this is likewise delivered to your followers. The action of reblogging or favouriting another post is always public.</li>
- <li><em>Direct and followers-only posts</em>: All posts are stored and processed on the server. Followers-only posts are delivered to your followers and users who are mentioned in them, and direct posts are delivered only to users mentioned in them. In some cases it means they are delivered to different servers and copies are stored there. We make a good faith effort to limit the access to those posts only to authorized persons, but other servers may fail to do so. Therefore it's important to review servers your followers belong to. You may toggle an option to approve and reject new followers manually in the settings. <em>Please keep in mind that the operators of the server and any receiving server may view such messages</em>, and that recipients may screenshot, copy or otherwise re-share them. <em>Do not share any dangerous information over Mastodon.</em></li>
- <li><em>IPs and other metadata</em>: When you log in, we record the IP address you log in from, as well as the name of your browser application. All the logged in sessions are available for your review and revocation in the settings. The latest IP address used is stored for up to 12 months. We also may retain server logs which include the IP address of every request to our server.</li>
- </ul>
-
- <hr class="spacer" />
-
- <h3 id="use">What do we use your information for?</h3>
-
- <p>Any of the information we collect from you may be used in the following ways:</p>
-
- <ul>
- <li>To provide the core functionality of Mastodon. You can only interact with other people's content and post your own content when you are logged in. For example, you may follow other people to view their combined posts in your own personalized home timeline.</li>
- <li>To aid moderation of the community, for example comparing your IP address with other known ones to determine ban evasion or other violations.</li>
- <li>The email address you provide may be used to send you information, notifications about other people interacting with your content or sending you messages, and to respond to inquiries, and/or other requests or questions.</li>
- </ul>
-
- <hr class="spacer" />
-
- <h3 id="protect">How do we protect your information?</h3>
-
- <p>We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information. Among other things, your browser session, as well as the traffic between your applications and the API, are secured with SSL, and your password is hashed using a strong one-way algorithm. You may enable two-factor authentication to further secure access to your account.</p>
-
- <hr class="spacer" />
-
- <h3 id="data-retention">What is our data retention policy?</h3>
-
- <p>We will make a good faith effort to:</p>
-
- <ul>
- <li>Retain server logs containing the IP address of all requests to this server, in so far as such logs are kept, no more than 90 days.</li>
- <li>Retain the IP addresses associated with registered users no more than 12 months.</li>
- </ul>
-
- <p>You can request and download an archive of your content, including your posts, media attachments, profile picture, and header image.</p>
-
- <p>You may irreversibly delete your account at any time.</p>
-
- <hr class="spacer"/>
-
- <h3 id="cookies">Do we use cookies?</h3>
-
- <p>Yes. Cookies are small files that a site or its service provider transfers to your computer's hard drive through your Web browser (if you allow). These cookies enable the site to recognize your browser and, if you have a registered account, associate it with your registered account.</p>
-
- <p>We use cookies to understand and save your preferences for future visits.</p>
-
- <hr class="spacer" />
-
- <h3 id="disclose">Do we disclose any information to outside parties?</h3>
-
- <p>We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our site, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety.</p>
-
- <p>Your public content may be downloaded by other servers in the network. Your public and followers-only posts are delivered to the servers where your followers reside, and direct messages are delivered to the servers of the recipients, in so far as those followers or recipients reside on a different server than this.</p>
-
- <p>When you authorize an application to use your account, depending on the scope of permissions you approve, it may access your public profile information, your following list, your followers, your lists, all your posts, and your favourites. Applications can never access your e-mail address or password.</p>
-
- <hr class="spacer" />
-
- <h3 id="children">Site usage by children</h3>
-
- <p>If this server is in the EU or the EEA: Our site, products and services are all directed to people who are at least 16 years old. If you are under the age of 16, per the requirements of the GDPR (<a href="https://en.wikipedia.org/wiki/General_Data_Protection_Regulation">General Data Protection Regulation</a>) do not use this site.</p>
-
- <p>If this server is in the USA: Our site, products and services are all directed to people who are at least 13 years old. If you are under the age of 13, per the requirements of COPPA (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>) do not use this site.</p>
-
- <p>Law requirements can be different if this server is in another jurisdiction.</p>
-
- <hr class="spacer" />
-
- <h3 id="changes">Changes to our Privacy Policy</h3>
-
- <p>If we decide to change our privacy policy, we will post those changes on this page.</p>
-
- <p>This document is CC-BY-SA. It was last updated March 7, 2018.</p>
-
- <p>Originally adapted from the <a href="https://github.com/discourse/discourse">Discourse privacy policy</a>.</p>
- title: "%{instance} Terms of Service and Privacy Policy"
- themes:
- contrast: Mastodon (High contrast)
- default: Mastodon (Dark)
- mastodon-light: Mastodon (Light)
- time:
- formats:
- default: "%b %d, %Y, %H:%M"
- month: "%b %Y"
- two_factor_authentication:
- add: Add
- disable: Disable 2FA
- disabled_success: Two-factor authentication successfully disabled
- edit: Edit
- enabled: Two-factor authentication is enabled
- enabled_success: Two-factor authentication successfully enabled
- generate_recovery_codes: Generate recovery codes
- lost_recovery_codes: Recovery codes allow you to regain access to your account if you lose your phone. If you've lost your recovery codes, you can regenerate them here. Your old recovery codes will be invalidated.
- methods: Two-factor methods
- otp: Authenticator app
- recovery_codes: Backup recovery codes
- recovery_codes_regenerated: Recovery codes successfully regenerated
- recovery_instructions_html: If you ever lose access to your phone, you can use one of the recovery codes below to regain access to your account. <strong>Keep the recovery codes safe</strong>. For example, you may print them and store them with other important documents.
- webauthn: Security keys
- user_mailer:
- backup_ready:
- explanation: You requested a full backup of your Mastodon account. It's now ready for download!
- subject: Your archive is ready for download
- title: Archive takeout
- sign_in_token:
- details: 'Here are details of the attempt:'
- explanation: 'We detected an attempt to sign in to your account from an unrecognized IP address. If this is you, please enter the security code below on the sign in challenge page:'
- further_actions: 'If this wasn''t you, please change your password and enable two-factor authentication on your account. You can do so here:'
- subject: Please confirm attempted sign in
- title: Sign in attempt
- warning:
- explanation:
- disable: While your account is frozen, your account data remains intact, but you cannot perform any actions until it is unlocked.
- silence: While your account is limited, only people who are already following you will see your toots on this server, and you may be excluded from various public listings. However, others may still manually follow you.
- suspend: Your account has been suspended, and all of your toots and your uploaded media files have been irreversibly removed from this server, and servers where you had followers.
- get_in_touch: You can reply to this e-mail to get in touch with the staff of %{instance}.
- review_server_policies: Review server policies
- statuses: 'Specifically, for:'
- subject:
- disable: Your account %{acct} has been frozen
- none: Warning for %{acct}
- silence: Your account %{acct} has been limited
- suspend: Your account %{acct} has been suspended
- title:
- disable: Account frozen
- none: Warning
- silence: Account limited
- suspend: Account suspended
- welcome:
- edit_profile_action: Setup profile
- edit_profile_step: You can customize your profile by uploading an avatar, header, changing your display name and more. If you’d like to review new followers before they’re allowed to follow you, you can lock your account.
- explanation: Here are some tips to get you started
- final_action: Start posting
- final_step: 'Start posting! Even without followers your public messages may be seen by others, for example on the local timeline and in hashtags. You may want to introduce yourself on the #introductions hashtag.'
- full_handle: Your full handle
- full_handle_hint: This is what you would tell your friends so they can message or follow you from another server.
- review_preferences_action: Change preferences
- review_preferences_step: Make sure to set your preferences, such as which emails you'd like to receive, or what privacy level you’d like your posts to default to. If you don’t have motion sickness, you could choose to enable GIF autoplay.
- subject: Welcome to Mastodon
- tip_federated_timeline: The federated timeline is a firehose view of the Mastodon network. But it only includes people your neighbours are subscribed to, so it's not complete.
- tip_following: You follow your server's admin(s) by default. To find more interesting people, check the local and federated timelines.
- tip_local_timeline: The local timeline is a firehose view of people on %{instance}. These are your immediate neighbours!
- tip_mobile_webapp: If your mobile browser offers you to add Mastodon to your homescreen, you can receive push notifications. It acts like a native app in many ways!
- tips: Tips
- title: Welcome aboard, %{name}!
- users:
- blocked_email_provider: This e-mail provider isn't allowed
- follow_limit_reached: You cannot follow more than %{limit} people
- generic_access_help_html: Trouble accessing your account? You may get in touch with %{email} for assistance
- invalid_email: The e-mail address is invalid
- invalid_email_mx: The e-mail address does not seem to exist
- invalid_otp_token: Invalid two-factor code
- invalid_sign_in_token: Invalid security code
- otp_lost_help_html: If you lost access to both, you may get in touch with %{email}
- seamless_external_login: You are logged in via an external service, so password and e-mail settings are not available.
- signed_in_as: 'Signed in as:'
- suspicious_sign_in_confirmation: You appear to not have logged in from this device before, and you haven't logged in for a while, so we're sending a security code to your e-mail address to confirm that it's you.
- verification:
- explanation_html: 'You can <strong>verify yourself as the owner of the links in your profile metadata</strong>. For that, the linked website must contain a link back to your Mastodon profile. The link back <strong>must</strong> have a <code>rel="me"</code> attribute. The text content of the link does not matter. Here is an example:'
- verification: Verification
- webauthn_credentials:
- add: Add new security key
- create:
- error: There was a problem adding your security key. Please try again.
- success: Your security key was successfully added.
- delete: Delete
- delete_confirmation: Are you sure you want to delete this security key?
- description_html: If you enable <strong>security key authentication</strong>, logging in will require you to use one of your security keys.
- destroy:
- error: There was a problem deleting you security key. Please try again.
- success: Your security key was successfully deleted.
- invalid_credential: Invalid security key
- nickname_hint: Enter the nickname of your new security key
- not_enabled: You haven't enabled WebAuthn yet
- not_supported: This browser doesn't support security keys
- otp_required: To use security keys please enable two-factor authentication first.
- registered_on: Registered on %{date}
|