diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 042fd549a0b..a79a487392c 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -218,7 +218,7 @@ string.desc = Z - A [error] occurred = An error occurred -report_message = If you believe that this is a Gitea bug, please search for issues on GitHub or open a new issue if necessary. +report_message = If you believe that this is a Gitea bug, please search for issues on GitHub or open a new issue if necessary. missing_csrf = Bad Request: no CSRF token present invalid_csrf = Bad Request: invalid CSRF token not_found = The target couldn't be found. @@ -227,13 +227,13 @@ network_error = Network error [startpage] app_desc = A painless, self-hosted Git service install = Easy to install -install_desc = Simply run the binary for your platform, ship it with Docker, or get it packaged. +install_desc = Simply run the binary for your platform, ship it with Docker, or get it packaged. platform = Cross-platform -platform_desc = Gitea runs anywhere Go can compile for: Windows, macOS, Linux, ARM, etc. Choose the one you love! +platform_desc = Gitea runs anywhere Go can compile for: Windows, macOS, Linux, ARM, etc. Choose the one you love! lightweight = Lightweight lightweight_desc = Gitea has low minimal requirements and can run on an inexpensive Raspberry Pi. Save your machine energy! license = Open Source -license_desc = Go get code.gitea.io/gitea! Join us by contributing to make this project even better. Don't be shy to be a contributor! +license_desc = Go get %[2]s! Join us by contributing to make this project even better. Don't be shy to be a contributor! [install] install = Installation @@ -456,7 +456,7 @@ authorize_title = Authorize "%s" to access your account? authorization_failed = Authorization failed authorization_failed_desc = The authorization failed because we detected an invalid request. Please contact the maintainer of the app you have tried to authorize. sspi_auth_failed = SSPI authentication failed -password_pwned = The password you chose is on a list of stolen passwords previously exposed in public data breaches. Please try again with a different password and consider changing this password elsewhere too. +password_pwned = The password you chose is on a list of stolen passwords previously exposed in public data breaches. Please try again with a different password and consider changing this password elsewhere too. password_pwned_err = Could not complete request to HaveIBeenPwned last_admin = You cannot remove the last admin. There must be at least one admin. signin_passkey = Sign in with a passkey @@ -954,7 +954,7 @@ passcode_invalid = The passcode is incorrect. Try again. twofa_enrolled = Your account has been successfully enrolled. Store your single-use recovery key (%s) in a safe place, as it will not be shown again. twofa_failed_get_secret = Failed to get secret. -webauthn_desc = Security keys are hardware devices containing cryptographic keys. They can be used for two-factor authentication. Security keys must support the WebAuthn Authenticator standard. +webauthn_desc = Security keys are hardware devices containing cryptographic keys. They can be used for two-factor authentication. Security keys must support the WebAuthn Authenticator standard. webauthn_register_key = Add Security Key webauthn_nickname = Nickname webauthn_delete_key = Remove Security Key @@ -2325,7 +2325,7 @@ settings.event_pull_request_merge = Pull Request Merge settings.event_package = Package settings.event_package_desc = Package created or deleted in a repository. settings.branch_filter = Branch filter -settings.branch_filter_desc = Branch whitelist for push, branch creation and branch deletion events, specified as glob pattern. If empty or *, events for all branches are reported. See github.com/gobwas/glob documentation for syntax. Examples: master, {master,release*}. +settings.branch_filter_desc = Branch whitelist for push, branch creation and branch deletion events, specified as glob pattern. If empty or *, events for all branches are reported. See %[2]s documentation for syntax. Examples: master, {master,release*}. settings.authorization_header = Authorization Header settings.authorization_header_desc = Will be included as authorization header for requests when present. Examples: %s. settings.active = Active @@ -2425,12 +2425,12 @@ settings.ignore_stale_approvals_desc = Do not count approvals that were made on settings.require_signed_commits = Require Signed Commits settings.require_signed_commits_desc = Reject pushes to this branch if they are unsigned or unverifiable. settings.protect_branch_name_pattern = Protected Branch Name Pattern -settings.protect_branch_name_pattern_desc = "Protected branch name patterns. See the documentation for pattern syntax. Examples: main, release/**" +settings.protect_branch_name_pattern_desc = "Protected branch name patterns. See the documentation for pattern syntax. Examples: main, release/**" settings.protect_patterns = Patterns settings.protect_protected_file_patterns = "Protected file patterns (separated using semicolon ';'):" -settings.protect_protected_file_patterns_desc = "Protected files are not allowed to be changed directly even if user has rights to add, edit, or delete files in this branch. Multiple patterns can be separated using semicolon (';'). See github.com/gobwas/glob documentation for pattern syntax. Examples: .drone.yml, /docs/**/*.txt." +settings.protect_protected_file_patterns_desc = "Protected files are not allowed to be changed directly even if user has rights to add, edit, or delete files in this branch. Multiple patterns can be separated using semicolon (';'). See %[2]s documentation for pattern syntax. Examples: .drone.yml, /docs/**/*.txt." settings.protect_unprotected_file_patterns = "Unprotected file patterns (separated using semicolon ';'):" -settings.protect_unprotected_file_patterns_desc = "Unprotected files that are allowed to be changed directly if user has write access, bypassing push restriction. Multiple patterns can be separated using semicolon (';'). See github.com/gobwas/glob documentation for pattern syntax. Examples: .drone.yml, /docs/**/*.txt." +settings.protect_unprotected_file_patterns_desc = "Unprotected files that are allowed to be changed directly if user has write access, bypassing push restriction. Multiple patterns can be separated using semicolon (';'). See %[2]s documentation for pattern syntax. Examples: .drone.yml, /docs/**/*.txt." settings.add_protected_branch = Enable protection settings.delete_protected_branch = Disable protection settings.update_protect_branch_success = Branch protection for rule "%s" has been updated. @@ -2462,7 +2462,7 @@ settings.tags.protection.allowed.teams = Allowed teams settings.tags.protection.allowed.noone = No One settings.tags.protection.create = Protect Tag settings.tags.protection.none = There are no protected tags. -settings.tags.protection.pattern.description = You can use a single name or a glob pattern or regular expression to match multiple tags. Read more in the protected tags guide. +settings.tags.protection.pattern.description = You can use a single name or a glob pattern or regular expression to match multiple tags. Read more in the protected tags guide. settings.bot_token = Bot Token settings.chat_id = Chat ID settings.thread_id = Thread ID @@ -2844,7 +2844,7 @@ last_page = Last total = Total: %d settings = Admin Settings -dashboard.new_version_hint = Gitea %s is now available, you are running %s. Check the blog for more details. +dashboard.new_version_hint = Gitea %s is now available, you are running %s. Check the blog for more details. dashboard.statistic = Summary dashboard.maintenance_operations = Maintenance Operations dashboard.system_status = System Status @@ -3036,12 +3036,12 @@ packages.size = Size packages.published = Published defaulthooks = Default Webhooks -defaulthooks.desc = Webhooks automatically make HTTP POST requests to a server when certain Gitea events trigger. Webhooks defined here are defaults and will be copied into all new repositories. Read more in the webhooks guide. +defaulthooks.desc = Webhooks automatically make HTTP POST requests to a server when certain Gitea events trigger. Webhooks defined here are defaults and will be copied into all new repositories. Read more in the webhooks guide. defaulthooks.add_webhook = Add Default Webhook defaulthooks.update_webhook = Update Default Webhook systemhooks = System Webhooks -systemhooks.desc = Webhooks automatically make HTTP POST requests to a server when certain Gitea events trigger. Webhooks defined here will act on all repositories on the system, so please consider any performance implications this may have. Read more in the webhooks guide. +systemhooks.desc = Webhooks automatically make HTTP POST requests to a server when certain Gitea events trigger. Webhooks defined here will act on all repositories on the system, so please consider any performance implications this may have. Read more in the webhooks guide. systemhooks.add_webhook = Add System Webhook systemhooks.update_webhook = Update System Webhook @@ -3136,18 +3136,18 @@ auths.tips = Tips auths.tips.oauth2.general = OAuth2 Authentication auths.tips.oauth2.general.tip = When registering a new OAuth2 authentication, the callback/redirect URL should be: auths.tip.oauth2_provider = OAuth2 Provider -auths.tip.bitbucket = Register a new OAuth consumer on https://bitbucket.org/account/user/{your-username}/oauth-consumers/new and add the permission 'Account' - 'Read' +auths.tip.bitbucket = Register a new OAuth consumer on %s and add the permission 'Account' - 'Read' auths.tip.nextcloud = Register a new OAuth consumer on your instance using the following menu "Settings -> Security -> OAuth 2.0 client" -auths.tip.dropbox = Create a new application at https://www.dropbox.com/developers/apps -auths.tip.facebook = Register a new application at https://developers.facebook.com/apps and add the product "Facebook Login" -auths.tip.github = Register a new OAuth application on https://github.com/settings/applications/new -auths.tip.gitlab_new = Register a new application on https://gitlab.com/-/profile/applications -auths.tip.google_plus = Obtain OAuth2 client credentials from the Google API console at https://console.developers.google.com/ +auths.tip.dropbox = Create a new application at %s +auths.tip.facebook = Register a new application at %s and add the product "Facebook Login" +auths.tip.github = Register a new OAuth application on %s +auths.tip.gitlab_new = Register a new application on %s +auths.tip.google_plus = Obtain OAuth2 client credentials from the Google API console at %s auths.tip.openid_connect = Use the OpenID Connect Discovery URL "https://{server}/.well-known/openid-configuration" to specify the endpoints -auths.tip.twitter = Go to https://dev.twitter.com/apps, create an application and ensure that the “Allow this application to be used to Sign in with Twitter” option is enabled -auths.tip.discord = Register a new application on https://discordapp.com/developers/applications/me -auths.tip.gitea = Register a new OAuth2 application. Guide can be found at https://docs.gitea.com/development/oauth2-provider -auths.tip.yandex = Create a new application at https://oauth.yandex.com/client/new. Select following permissions from the "Yandex.Passport API" section: "Access to email address", "Access to user avatar" and "Access to username, first name and surname, gender" +auths.tip.twitter = Go to %s, create an application and ensure that the “Allow this application to be used to Sign in with Twitter” option is enabled +auths.tip.discord = Register a new application on %s +auths.tip.gitea = Register a new OAuth2 application. Guide can be found at %s +auths.tip.yandex = Create a new application at %s. Select following permissions from the "Yandex.Passport API" section: "Access to email address", "Access to user avatar" and "Access to username, first name and surname, gender" auths.tip.mastodon = Input a custom instance URL for the mastodon instance you want to authenticate with (or use the default one) auths.edit = Edit Authentication Source auths.activated = This Authentication Source is Activated diff --git a/routers/web/admin/hooks.go b/routers/web/admin/hooks.go index 8d59fbb858e..e40580b6e77 100644 --- a/routers/web/admin/hooks.go +++ b/routers/web/admin/hooks.go @@ -34,7 +34,7 @@ func DefaultOrSystemWebhooks(ctx *context.Context) { } sys["Title"] = ctx.Tr("admin.systemhooks") - sys["Description"] = ctx.Tr("admin.systemhooks.desc") + sys["Description"] = ctx.Tr("admin.systemhooks.desc", "https://docs.gitea.com/usage/webhooks") sys["Webhooks"], err = webhook.GetSystemWebhooks(ctx, optional.None[bool]()) sys["BaseLink"] = setting.AppSubURL + "/admin/hooks" sys["BaseLinkNew"] = setting.AppSubURL + "/admin/system-hooks" @@ -44,7 +44,7 @@ func DefaultOrSystemWebhooks(ctx *context.Context) { } def["Title"] = ctx.Tr("admin.defaulthooks") - def["Description"] = ctx.Tr("admin.defaulthooks.desc") + def["Description"] = ctx.Tr("admin.defaulthooks.desc", "https://docs.gitea.com/usage/webhooks") def["Webhooks"], err = webhook.GetDefaultWebhooks(ctx) def["BaseLink"] = setting.AppSubURL + "/admin/hooks" def["BaseLinkNew"] = setting.AppSubURL + "/admin/default-hooks" diff --git a/routers/web/admin/users.go b/routers/web/admin/users.go index 623b39b4efc..34bb1dfe26d 100644 --- a/routers/web/admin/users.go +++ b/routers/web/admin/users.go @@ -166,7 +166,7 @@ func NewUserPost(ctx *context.Context) { } if err := password.IsPwned(ctx, form.Password); err != nil { ctx.Data["Err_Password"] = true - errMsg := ctx.Tr("auth.password_pwned") + errMsg := ctx.Tr("auth.password_pwned", "https://haveibeenpwned.com/Passwords") if password.IsErrIsPwnedRequest(err) { log.Error(err.Error()) errMsg = ctx.Tr("auth.password_pwned_err") @@ -401,7 +401,7 @@ func EditUserPost(ctx *context.Context) { ctx.RenderWithErr(password.BuildComplexityError(ctx.Locale), tplUserEdit, &form) case errors.Is(err, password.ErrIsPwned): ctx.Data["Err_Password"] = true - ctx.RenderWithErr(ctx.Tr("auth.password_pwned"), tplUserEdit, &form) + ctx.RenderWithErr(ctx.Tr("auth.password_pwned", "https://haveibeenpwned.com/Passwords"), tplUserEdit, &form) case password.IsErrIsPwnedRequest(err): ctx.Data["Err_Password"] = true ctx.RenderWithErr(ctx.Tr("auth.password_pwned_err"), tplUserEdit, &form) diff --git a/routers/web/auth/auth.go b/routers/web/auth/auth.go index 15a80bc1046..f295cf039f6 100644 --- a/routers/web/auth/auth.go +++ b/routers/web/auth/auth.go @@ -504,7 +504,7 @@ func SignUpPost(ctx *context.Context) { return } if err := password.IsPwned(ctx, form.Password); err != nil { - errMsg := ctx.Tr("auth.password_pwned") + errMsg := ctx.Tr("auth.password_pwned", "https://haveibeenpwned.com/Passwords") if password.IsErrIsPwnedRequest(err) { log.Error(err.Error()) errMsg = ctx.Tr("auth.password_pwned_err") diff --git a/routers/web/auth/password.go b/routers/web/auth/password.go index 0e88fe68f92..334d864c6a7 100644 --- a/routers/web/auth/password.go +++ b/routers/web/auth/password.go @@ -212,7 +212,7 @@ func ResetPasswdPost(ctx *context.Context) { case errors.Is(err, password.ErrComplexity): ctx.RenderWithErr(password.BuildComplexityError(ctx.Locale), tplResetPassword, nil) case errors.Is(err, password.ErrIsPwned): - ctx.RenderWithErr(ctx.Tr("auth.password_pwned"), tplResetPassword, nil) + ctx.RenderWithErr(ctx.Tr("auth.password_pwned", "https://haveibeenpwned.com/Passwords"), tplResetPassword, nil) case password.IsErrIsPwnedRequest(err): ctx.RenderWithErr(ctx.Tr("auth.password_pwned_err"), tplResetPassword, nil) default: @@ -295,7 +295,7 @@ func MustChangePasswordPost(ctx *context.Context) { ctx.RenderWithErr(password.BuildComplexityError(ctx.Locale), tplMustChangePassword, &form) case errors.Is(err, password.ErrIsPwned): ctx.Data["Err_Password"] = true - ctx.RenderWithErr(ctx.Tr("auth.password_pwned"), tplMustChangePassword, &form) + ctx.RenderWithErr(ctx.Tr("auth.password_pwned", "https://haveibeenpwned.com/Passwords"), tplMustChangePassword, &form) case password.IsErrIsPwnedRequest(err): ctx.Data["Err_Password"] = true ctx.RenderWithErr(ctx.Tr("auth.password_pwned_err"), tplMustChangePassword, &form) diff --git a/routers/web/user/setting/account.go b/routers/web/user/setting/account.go index 563f39f0c8a..7f2dece4169 100644 --- a/routers/web/user/setting/account.go +++ b/routers/web/user/setting/account.go @@ -85,7 +85,7 @@ func AccountPost(ctx *context.Context) { case errors.Is(err, password.ErrComplexity): ctx.Flash.Error(password.BuildComplexityError(ctx.Locale)) case errors.Is(err, password.ErrIsPwned): - ctx.Flash.Error(ctx.Tr("auth.password_pwned")) + ctx.Flash.Error(ctx.Tr("auth.password_pwned", "https://haveibeenpwned.com/Passwords")) case password.IsErrIsPwnedRequest(err): ctx.Flash.Error(ctx.Tr("auth.password_pwned_err")) default: diff --git a/templates/admin/auth/new.tmpl b/templates/admin/auth/new.tmpl index e3985cb227f..be4995c7846 100644 --- a/templates/admin/auth/new.tmpl +++ b/templates/admin/auth/new.tmpl @@ -91,29 +91,29 @@
{{ctx.Locale.Tr "admin.auths.tip.oauth2_provider"}}
  • Bitbucket
  • - {{ctx.Locale.Tr "admin.auths.tip.bitbucket"}} + {{ctx.Locale.Tr "admin.auths.tip.bitbucket" "https://bitbucket.org/account/user/{your-username}/oauth-consumers/new"}}
  • Dropbox
  • - {{ctx.Locale.Tr "admin.auths.tip.dropbox"}} + {{ctx.Locale.Tr "admin.auths.tip.dropbox" "https://www.dropbox.com/developers/apps"}}
  • Facebook
  • - {{ctx.Locale.Tr "admin.auths.tip.facebook"}} + {{ctx.Locale.Tr "admin.auths.tip.facebook" "https://developers.facebook.com/apps"}}
  • GitHub
  • - {{ctx.Locale.Tr "admin.auths.tip.github"}} + {{ctx.Locale.Tr "admin.auths.tip.github" "https://github.com/settings/applications/new"}}
  • GitLab
  • - {{ctx.Locale.Tr "admin.auths.tip.gitlab_new"}} + {{ctx.Locale.Tr "admin.auths.tip.gitlab_new" "https://gitlab.com/-/profile/applications"}}
  • Google
  • - {{ctx.Locale.Tr "admin.auths.tip.google_plus"}} + {{ctx.Locale.Tr "admin.auths.tip.google_plus" "https://console.developers.google.com/"}}
  • OpenID Connect
  • {{ctx.Locale.Tr "admin.auths.tip.openid_connect"}}
  • Twitter
  • - {{ctx.Locale.Tr "admin.auths.tip.twitter"}} + {{ctx.Locale.Tr "admin.auths.tip.twitter" "https://dev.twitter.com/apps"}}
  • Discord
  • - {{ctx.Locale.Tr "admin.auths.tip.discord"}} + {{ctx.Locale.Tr "admin.auths.tip.discord" "https://discordapp.com/developers/applications/me"}}
  • Gitea
  • - {{ctx.Locale.Tr "admin.auths.tip.gitea"}} + {{ctx.Locale.Tr "admin.auths.tip.gitea" "https://docs.gitea.com/development/oauth2-provider"}}
  • Nextcloud
  • {{ctx.Locale.Tr "admin.auths.tip.nextcloud"}}
  • Yandex
  • - {{ctx.Locale.Tr "admin.auths.tip.yandex"}} + {{ctx.Locale.Tr "admin.auths.tip.yandex" "https://oauth.yandex.com/client/new"}}
  • Mastodon
  • {{ctx.Locale.Tr "admin.auths.tip.mastodon"}}
    diff --git a/templates/admin/dashboard.tmpl b/templates/admin/dashboard.tmpl index 2f9875f0d9a..b82922df0c7 100644 --- a/templates/admin/dashboard.tmpl +++ b/templates/admin/dashboard.tmpl @@ -2,7 +2,7 @@
    {{if .NeedUpdate}}
    -

    {{ctx.Locale.Tr "admin.dashboard.new_version_hint" .RemoteVersion AppVer}}

    +

    {{ctx.Locale.Tr "admin.dashboard.new_version_hint" .RemoteVersion AppVer "https://blog.gitea.com"}}

    {{end}}

    diff --git a/templates/home.tmpl b/templates/home.tmpl index e6fd4ef020d..116dc487dc3 100644 --- a/templates/home.tmpl +++ b/templates/home.tmpl @@ -17,7 +17,7 @@ {{svg "octicon-flame"}} {{ctx.Locale.Tr "startpage.install"}}

    - {{ctx.Locale.Tr "startpage.install_desc"}} + {{ctx.Locale.Tr "startpage.install_desc" "https://docs.gitea.com/installation/install-from-binary" "https://github.com/go-gitea/gitea/tree/master/docker" "https://docs.gitea.com/installation/install-from-package"}}

    @@ -25,7 +25,7 @@ {{svg "octicon-device-desktop"}} {{ctx.Locale.Tr "startpage.platform"}}

    - {{ctx.Locale.Tr "startpage.platform_desc"}} + {{ctx.Locale.Tr "startpage.platform_desc" "https://go.dev/"}}

    @@ -43,7 +43,7 @@ {{svg "octicon-code"}} {{ctx.Locale.Tr "startpage.license"}}

    - {{ctx.Locale.Tr "startpage.license_desc"}} + {{ctx.Locale.Tr "startpage.license_desc" "https://code.gitea.io/gitea" "code.gitea.io/gitea" "https://github.com/go-gitea/gitea"}}

    diff --git a/templates/repo/settings/protected_branch.tmpl b/templates/repo/settings/protected_branch.tmpl index 364b5ccc558..6fab4a625a5 100644 --- a/templates/repo/settings/protected_branch.tmpl +++ b/templates/repo/settings/protected_branch.tmpl @@ -10,17 +10,17 @@ -

    {{ctx.Locale.Tr "repo.settings.protect_branch_name_pattern_desc"}}

    +

    {{ctx.Locale.Tr "repo.settings.protect_branch_name_pattern_desc" "https://github.com/gobwas/glob"}}

    -

    {{ctx.Locale.Tr "repo.settings.protect_protected_file_patterns_desc"}}

    +

    {{ctx.Locale.Tr "repo.settings.protect_protected_file_patterns_desc" "https://pkg.go.dev/github.com/gobwas/glob#Compile" "github.com/gobwas/glob"}}

    -

    {{ctx.Locale.Tr "repo.settings.protect_unprotected_file_patterns_desc"}}

    +

    {{ctx.Locale.Tr "repo.settings.protect_unprotected_file_patterns_desc" "https://pkg.go.dev/github.com/gobwas/glob#Compile" "github.com/gobwas/glob"}}

    {{.CsrfTokenHtml}} diff --git a/templates/repo/settings/tags.tmpl b/templates/repo/settings/tags.tmpl index c9efb7b67e9..27b0f519a82 100644 --- a/templates/repo/settings/tags.tmpl +++ b/templates/repo/settings/tags.tmpl @@ -21,7 +21,7 @@
    -
    {{ctx.Locale.Tr "repo.settings.tags.protection.pattern.description"}}
    +
    {{ctx.Locale.Tr "repo.settings.tags.protection.pattern.description" "https://docs.gitea.com/usage/protected-tags"}}
    diff --git a/templates/repo/settings/webhook/settings.tmpl b/templates/repo/settings/webhook/settings.tmpl index 6862ce5a2c9..cf3b0eb0530 100644 --- a/templates/repo/settings/webhook/settings.tmpl +++ b/templates/repo/settings/webhook/settings.tmpl @@ -255,7 +255,7 @@
    - {{ctx.Locale.Tr "repo.settings.branch_filter_desc"}} + {{ctx.Locale.Tr "repo.settings.branch_filter_desc" "https://pkg.go.dev/github.com/gobwas/glob#Compile" "github.com/gobwas/glob"}}
    diff --git a/templates/status/500.tmpl b/templates/status/500.tmpl index 0e8d0f6593f..198f1ea8981 100644 --- a/templates/status/500.tmpl +++ b/templates/status/500.tmpl @@ -43,7 +43,7 @@ {{end}}
    {{if or .SignedUser.IsAdmin .ShowFooterVersion}}

    {{ctx.Locale.Tr "admin.config.app_ver"}}: {{AppVer}}

    {{end}} - {{if .SignedUser.IsAdmin}}

    {{ctx.Locale.Tr "error.report_message"}}

    {{end}} + {{if .SignedUser.IsAdmin}}

    {{ctx.Locale.Tr "error.report_message" "https://github.com/go-gitea/gitea/issues"}}

    {{end}}
    diff --git a/templates/user/settings/security/webauthn.tmpl b/templates/user/settings/security/webauthn.tmpl index eceee191bd8..280ece9175b 100644 --- a/templates/user/settings/security/webauthn.tmpl +++ b/templates/user/settings/security/webauthn.tmpl @@ -1,6 +1,6 @@

    {{ctx.Locale.Tr "settings.webauthn"}}

    -

    {{ctx.Locale.Tr "settings.webauthn_desc"}}

    +

    {{ctx.Locale.Tr "settings.webauthn_desc" "https://w3c.github.io/webauthn/#webauthn-authenticator"}}

    {{ctx.Locale.Tr "settings.webauthn_key_loss_warning"}} {{ctx.Locale.Tr "settings.webauthn_alternative_tip"}}

    {{template "user/auth/webauthn_error" .}}