@atproto/oauth-provider 0.5.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -0
- package/dist/account/account-manager.d.ts +7 -5
- package/dist/account/account-manager.d.ts.map +1 -1
- package/dist/account/account-manager.js +34 -25
- package/dist/account/account-manager.js.map +1 -1
- package/dist/account/account-store.d.ts +13 -5
- package/dist/account/account-store.d.ts.map +1 -1
- package/dist/account/account-store.js +24 -8
- package/dist/account/account-store.js.map +1 -1
- package/dist/account/account.d.ts +1 -11
- package/dist/account/account.d.ts.map +1 -1
- package/dist/account/{sign-up-data.d.ts → sign-up-input.d.ts} +5 -5
- package/dist/account/sign-up-input.d.ts.map +1 -0
- package/dist/account/{sign-up-data.js → sign-up-input.js} +3 -3
- package/dist/account/sign-up-input.js.map +1 -0
- package/dist/assets/assets-middleware.d.ts +2 -0
- package/dist/assets/assets-middleware.d.ts.map +1 -1
- package/dist/assets/assets-middleware.js +12 -14
- package/dist/assets/assets-middleware.js.map +1 -1
- package/dist/errors/invalid-invite-code-error.d.ts +5 -0
- package/dist/errors/invalid-invite-code-error.d.ts.map +1 -0
- package/dist/errors/invalid-invite-code-error.js +11 -0
- package/dist/errors/invalid-invite-code-error.js.map +1 -0
- package/dist/errors/oauth-error.d.ts +2 -2
- package/dist/errors/oauth-error.js.map +1 -1
- package/dist/lib/csp/index.d.ts +5 -6
- package/dist/lib/csp/index.d.ts.map +1 -1
- package/dist/lib/csp/index.js +14 -11
- package/dist/lib/csp/index.js.map +1 -1
- package/dist/lib/hcaptcha.d.ts +5 -3
- package/dist/lib/hcaptcha.d.ts.map +1 -1
- package/dist/lib/hcaptcha.js +7 -4
- package/dist/lib/hcaptcha.js.map +1 -1
- package/dist/lib/html/build-document.d.ts +2 -2
- package/dist/lib/html/build-document.d.ts.map +1 -1
- package/dist/lib/html/build-document.js +11 -7
- package/dist/lib/html/build-document.js.map +1 -1
- package/dist/lib/html/html.d.ts.map +1 -1
- package/dist/lib/html/html.js +10 -13
- package/dist/lib/html/html.js.map +1 -1
- package/dist/lib/html/util.d.ts +0 -1
- package/dist/lib/html/util.d.ts.map +1 -1
- package/dist/lib/html/util.js +0 -4
- package/dist/lib/html/util.js.map +1 -1
- package/dist/lib/http/response.d.ts +3 -1
- package/dist/lib/http/response.d.ts.map +1 -1
- package/dist/lib/http/response.js +3 -0
- package/dist/lib/http/response.js.map +1 -1
- package/dist/lib/http/security-headers.d.ts +48 -0
- package/dist/lib/http/security-headers.d.ts.map +1 -0
- package/dist/lib/http/security-headers.js +62 -0
- package/dist/lib/http/security-headers.js.map +1 -0
- package/dist/lib/util/type.d.ts +8 -0
- package/dist/lib/util/type.d.ts.map +1 -1
- package/dist/lib/util/type.js.map +1 -1
- package/dist/oauth-errors.d.ts +1 -0
- package/dist/oauth-errors.d.ts.map +1 -1
- package/dist/oauth-errors.js +3 -1
- package/dist/oauth-errors.js.map +1 -1
- package/dist/oauth-hooks.d.ts +4 -25
- package/dist/oauth-hooks.d.ts.map +1 -1
- package/dist/oauth-provider.d.ts.map +1 -1
- package/dist/oauth-provider.js +26 -25
- package/dist/oauth-provider.js.map +1 -1
- package/dist/output/backend-data.d.ts +4 -0
- package/dist/output/backend-data.d.ts.map +1 -0
- package/dist/output/backend-data.js +19 -0
- package/dist/output/backend-data.js.map +1 -0
- package/dist/output/build-authorize-data.d.ts +3 -19
- package/dist/output/build-authorize-data.d.ts.map +1 -1
- package/dist/output/build-authorize-data.js.map +1 -1
- package/dist/output/build-customization-data.d.ts +11 -18
- package/dist/output/build-customization-data.d.ts.map +1 -1
- package/dist/output/build-customization-data.js +1 -1
- package/dist/output/build-customization-data.js.map +1 -1
- package/dist/output/build-error-data.d.ts +3 -0
- package/dist/output/build-error-data.d.ts.map +1 -0
- package/dist/output/build-error-data.js +10 -0
- package/dist/output/build-error-data.js.map +1 -0
- package/dist/output/build-error-payload.d.ts +2 -1
- package/dist/output/build-error-payload.d.ts.map +1 -1
- package/dist/output/build-error-payload.js.map +1 -1
- package/dist/output/output-manager.d.ts +10 -4
- package/dist/output/output-manager.d.ts.map +1 -1
- package/dist/output/output-manager.js +68 -39
- package/dist/output/output-manager.js.map +1 -1
- package/dist/output/send-web-page.d.ts +6 -10
- package/dist/output/send-web-page.d.ts.map +1 -1
- package/dist/output/send-web-page.js +27 -47
- package/dist/output/send-web-page.js.map +1 -1
- package/dist/signer/signed-token-payload.d.ts +3 -3
- package/dist/signer/signer.d.ts +2 -2
- package/package.json +7 -39
- package/src/account/account-manager.ts +55 -34
- package/src/account/account-store.ts +29 -6
- package/src/account/account.ts +1 -14
- package/src/account/{sign-up-data.ts → sign-up-input.ts} +2 -2
- package/src/assets/assets-middleware.ts +11 -17
- package/src/errors/invalid-invite-code-error.ts +10 -0
- package/src/errors/oauth-error.ts +1 -1
- package/src/lib/csp/index.ts +16 -13
- package/src/lib/hcaptcha.ts +10 -7
- package/src/lib/html/build-document.ts +15 -8
- package/src/lib/html/html.ts +11 -18
- package/src/lib/html/util.ts +0 -4
- package/src/lib/http/response.ts +9 -1
- package/src/lib/http/security-headers.ts +91 -0
- package/src/lib/util/type.ts +18 -0
- package/src/oauth-errors.ts +1 -0
- package/src/oauth-hooks.ts +4 -25
- package/src/oauth-provider.ts +40 -34
- package/src/output/backend-data.ts +18 -0
- package/src/output/build-authorize-data.ts +3 -26
- package/src/output/build-customization-data.ts +2 -13
- package/src/output/build-error-data.ts +8 -0
- package/src/output/build-error-payload.ts +4 -2
- package/src/output/output-manager.ts +86 -47
- package/src/output/send-web-page.ts +29 -58
- package/tsconfig.backend.json +1 -2
- package/tsconfig.backend.tsbuildinfo +1 -1
- package/tsconfig.json +1 -5
- package/.linguirc +0 -57
- package/dist/account/sign-up-data.d.ts.map +0 -1
- package/dist/account/sign-up-data.js.map +0 -1
- package/dist/assets/app/bundle-manifest.json +0 -614
- package/dist/assets/app/index-ItwwtJ8r.js +0 -36
- package/dist/assets/app/index-ItwwtJ8r.js.map +0 -1
- package/dist/assets/app/main-B_dNxQo_.js +0 -4
- package/dist/assets/app/main-B_dNxQo_.js.map +0 -1
- package/dist/assets/app/main-CSatvmRR.css +0 -3
- package/dist/assets/app/main-CSatvmRR.js +0 -306
- package/dist/assets/app/main-CSatvmRR.js.map +0 -1
- package/dist/assets/app/messages-BQeltXSF.js +0 -4
- package/dist/assets/app/messages-BQeltXSF.js.map +0 -1
- package/dist/assets/app/messages-BQkEhfjg.js +0 -4
- package/dist/assets/app/messages-BQkEhfjg.js.map +0 -1
- package/dist/assets/app/messages-BUjKj_UJ.js +0 -4
- package/dist/assets/app/messages-BUjKj_UJ.js.map +0 -1
- package/dist/assets/app/messages-BWIQa8fO.js +0 -4
- package/dist/assets/app/messages-BWIQa8fO.js.map +0 -1
- package/dist/assets/app/messages-BaNVb0bp.js +0 -4
- package/dist/assets/app/messages-BaNVb0bp.js.map +0 -1
- package/dist/assets/app/messages-BaizVXcF.js +0 -4
- package/dist/assets/app/messages-BaizVXcF.js.map +0 -1
- package/dist/assets/app/messages-BfoClA1Y.js +0 -4
- package/dist/assets/app/messages-BfoClA1Y.js.map +0 -1
- package/dist/assets/app/messages-BsKGDZnC.js +0 -4
- package/dist/assets/app/messages-BsKGDZnC.js.map +0 -1
- package/dist/assets/app/messages-Bu-TJhml.js +0 -4
- package/dist/assets/app/messages-Bu-TJhml.js.map +0 -1
- package/dist/assets/app/messages-BvOKnBQk.js +0 -4
- package/dist/assets/app/messages-BvOKnBQk.js.map +0 -1
- package/dist/assets/app/messages-BxDzCiWz.js +0 -4
- package/dist/assets/app/messages-BxDzCiWz.js.map +0 -1
- package/dist/assets/app/messages-CDgFOy4S.js +0 -4
- package/dist/assets/app/messages-CDgFOy4S.js.map +0 -1
- package/dist/assets/app/messages-CLbTz0o9.js +0 -4
- package/dist/assets/app/messages-CLbTz0o9.js.map +0 -1
- package/dist/assets/app/messages-CNwSh0t7.js +0 -4
- package/dist/assets/app/messages-CNwSh0t7.js.map +0 -1
- package/dist/assets/app/messages-CSMNJ6P8.js +0 -4
- package/dist/assets/app/messages-CSMNJ6P8.js.map +0 -1
- package/dist/assets/app/messages-CZQUw3mp.js +0 -4
- package/dist/assets/app/messages-CZQUw3mp.js.map +0 -1
- package/dist/assets/app/messages-CZT41oVp.js +0 -4
- package/dist/assets/app/messages-CZT41oVp.js.map +0 -1
- package/dist/assets/app/messages-C_b-d3t8.js +0 -4
- package/dist/assets/app/messages-C_b-d3t8.js.map +0 -1
- package/dist/assets/app/messages-C_u3MTc2.js +0 -4
- package/dist/assets/app/messages-C_u3MTc2.js.map +0 -1
- package/dist/assets/app/messages-Cn8nHZic.js +0 -4
- package/dist/assets/app/messages-Cn8nHZic.js.map +0 -1
- package/dist/assets/app/messages-CtDywJUm.js +0 -4
- package/dist/assets/app/messages-CtDywJUm.js.map +0 -1
- package/dist/assets/app/messages-CurtIjBF.js +0 -4
- package/dist/assets/app/messages-CurtIjBF.js.map +0 -1
- package/dist/assets/app/messages-Cv6zIbaP.js +0 -4
- package/dist/assets/app/messages-Cv6zIbaP.js.map +0 -1
- package/dist/assets/app/messages-D1eLQuPE.js +0 -4
- package/dist/assets/app/messages-D1eLQuPE.js.map +0 -1
- package/dist/assets/app/messages-D8vHEaYW.js +0 -4
- package/dist/assets/app/messages-D8vHEaYW.js.map +0 -1
- package/dist/assets/app/messages-DJ1Q4GeC.js +0 -4
- package/dist/assets/app/messages-DJ1Q4GeC.js.map +0 -1
- package/dist/assets/app/messages-DRL3exqd.js +0 -4
- package/dist/assets/app/messages-DRL3exqd.js.map +0 -1
- package/dist/assets/app/messages-DWLPQRTp.js +0 -4
- package/dist/assets/app/messages-DWLPQRTp.js.map +0 -1
- package/dist/assets/app/messages-DjVaE9YE.js +0 -4
- package/dist/assets/app/messages-DjVaE9YE.js.map +0 -1
- package/dist/assets/app/messages-DqpMfFJR.js +0 -4
- package/dist/assets/app/messages-DqpMfFJR.js.map +0 -1
- package/dist/assets/app/messages-ETjhJBEN.js +0 -4
- package/dist/assets/app/messages-ETjhJBEN.js.map +0 -1
- package/dist/assets/app/messages-EUKrgrGn.js +0 -4
- package/dist/assets/app/messages-EUKrgrGn.js.map +0 -1
- package/dist/assets/app/messages-QQrOUcPW.js +0 -4
- package/dist/assets/app/messages-QQrOUcPW.js.map +0 -1
- package/dist/assets/app/messages-e2QGqFL6.js +0 -4
- package/dist/assets/app/messages-e2QGqFL6.js.map +0 -1
- package/dist/assets/app/messages-p61py7gD.js +0 -4
- package/dist/assets/app/messages-p61py7gD.js.map +0 -1
- package/dist/assets/asset.d.ts +0 -9
- package/dist/assets/asset.d.ts.map +0 -1
- package/dist/assets/asset.js +0 -3
- package/dist/assets/asset.js.map +0 -1
- package/dist/assets/index.d.ts +0 -5
- package/dist/assets/index.d.ts.map +0 -1
- package/dist/assets/index.js +0 -78
- package/dist/assets/index.js.map +0 -1
- package/rollup.config.js +0 -98
- package/src/assets/app/app.tsx +0 -43
- package/src/assets/app/backend-data.ts +0 -27
- package/src/assets/app/backend-types.ts +0 -66
- package/src/assets/app/components/forms/button-toggle-visibility.tsx +0 -43
- package/src/assets/app/components/forms/button.tsx +0 -60
- package/src/assets/app/components/forms/fieldset.tsx +0 -55
- package/src/assets/app/components/forms/form-card-async.tsx +0 -103
- package/src/assets/app/components/forms/form-card.tsx +0 -49
- package/src/assets/app/components/forms/input-checkbox.tsx +0 -73
- package/src/assets/app/components/forms/input-container.tsx +0 -107
- package/src/assets/app/components/forms/input-email-address.tsx +0 -66
- package/src/assets/app/components/forms/input-new-password.tsx +0 -62
- package/src/assets/app/components/forms/input-password.tsx +0 -88
- package/src/assets/app/components/forms/input-text.tsx +0 -76
- package/src/assets/app/components/forms/input-token.tsx +0 -94
- package/src/assets/app/components/forms/wizard-card.tsx +0 -116
- package/src/assets/app/components/layouts/layout-title-page.tsx +0 -77
- package/src/assets/app/components/layouts/layout-welcome.tsx +0 -73
- package/src/assets/app/components/utils/account-identifier.tsx +0 -23
- package/src/assets/app/components/utils/account-image.tsx +0 -33
- package/src/assets/app/components/utils/admonition.tsx +0 -52
- package/src/assets/app/components/utils/client-name.tsx +0 -45
- package/src/assets/app/components/utils/error-card.tsx +0 -93
- package/src/assets/app/components/utils/error-message.tsx +0 -62
- package/src/assets/app/components/utils/help-card.tsx +0 -46
- package/src/assets/app/components/utils/icons.tsx +0 -88
- package/src/assets/app/components/utils/link-anchor.tsx +0 -28
- package/src/assets/app/components/utils/link-title.tsx +0 -26
- package/src/assets/app/components/utils/multi-lang-string.tsx +0 -56
- package/src/assets/app/components/utils/password-strength-label.tsx +0 -37
- package/src/assets/app/components/utils/password-strength-meter.tsx +0 -58
- package/src/assets/app/components/utils/url-viewer.tsx +0 -73
- package/src/assets/app/cookies.ts +0 -11
- package/src/assets/app/hooks/use-api.ts +0 -178
- package/src/assets/app/hooks/use-async-action.ts +0 -120
- package/src/assets/app/hooks/use-bound-dispatch.ts +0 -5
- package/src/assets/app/hooks/use-browser-color-scheme.ts +0 -31
- package/src/assets/app/hooks/use-csrf-token.ts +0 -5
- package/src/assets/app/hooks/use-random-string.ts +0 -37
- package/src/assets/app/hooks/use-stepper.ts +0 -87
- package/src/assets/app/index.html +0 -182
- package/src/assets/app/lib/api.ts +0 -267
- package/src/assets/app/lib/clsx.ts +0 -6
- package/src/assets/app/lib/json-client.ts +0 -94
- package/src/assets/app/lib/password.ts +0 -98
- package/src/assets/app/lib/ref.ts +0 -17
- package/src/assets/app/lib/util.ts +0 -13
- package/src/assets/app/locales/an/messages.po +0 -492
- package/src/assets/app/locales/ast/messages.po +0 -492
- package/src/assets/app/locales/ca/messages.po +0 -492
- package/src/assets/app/locales/da/messages.po +0 -492
- package/src/assets/app/locales/de/messages.po +0 -492
- package/src/assets/app/locales/el/messages.po +0 -492
- package/src/assets/app/locales/en/messages.po +0 -492
- package/src/assets/app/locales/en-GB/messages.po +0 -492
- package/src/assets/app/locales/es/messages.po +0 -492
- package/src/assets/app/locales/eu/messages.po +0 -492
- package/src/assets/app/locales/fi/messages.po +0 -492
- package/src/assets/app/locales/fr/messages.po +0 -492
- package/src/assets/app/locales/ga/messages.po +0 -492
- package/src/assets/app/locales/gl/messages.po +0 -492
- package/src/assets/app/locales/hi/messages.po +0 -492
- package/src/assets/app/locales/hu/messages.po +0 -492
- package/src/assets/app/locales/ia/messages.po +0 -492
- package/src/assets/app/locales/id/messages.po +0 -492
- package/src/assets/app/locales/it/messages.po +0 -492
- package/src/assets/app/locales/ja/messages.po +0 -492
- package/src/assets/app/locales/km/messages.po +0 -492
- package/src/assets/app/locales/ko/messages.po +0 -492
- package/src/assets/app/locales/load.ts +0 -8
- package/src/assets/app/locales/locale-context.ts +0 -19
- package/src/assets/app/locales/locale-provider.tsx +0 -112
- package/src/assets/app/locales/locale-selector.tsx +0 -58
- package/src/assets/app/locales/locales.ts +0 -168
- package/src/assets/app/locales/ne/messages.po +0 -492
- package/src/assets/app/locales/nl/messages.po +0 -492
- package/src/assets/app/locales/pl/messages.po +0 -492
- package/src/assets/app/locales/pt-BR/messages.po +0 -492
- package/src/assets/app/locales/ro/messages.po +0 -492
- package/src/assets/app/locales/ru/messages.po +0 -492
- package/src/assets/app/locales/sv/messages.po +0 -492
- package/src/assets/app/locales/th/messages.po +0 -492
- package/src/assets/app/locales/tr/messages.po +0 -492
- package/src/assets/app/locales/uk/messages.po +0 -492
- package/src/assets/app/locales/vi/messages.po +0 -492
- package/src/assets/app/locales/zh-CN/messages.po +0 -492
- package/src/assets/app/locales/zh-HK/messages.po +0 -492
- package/src/assets/app/locales/zh-TW/messages.po +0 -492
- package/src/assets/app/main.css +0 -33
- package/src/assets/app/main.tsx +0 -44
- package/src/assets/app/views/authorize/accept/accept-form.tsx +0 -150
- package/src/assets/app/views/authorize/accept/accept-view.tsx +0 -70
- package/src/assets/app/views/authorize/authorize-view.tsx +0 -180
- package/src/assets/app/views/authorize/reset-password/reset-password-confirm-form.tsx +0 -88
- package/src/assets/app/views/authorize/reset-password/reset-password-request-form.tsx +0 -80
- package/src/assets/app/views/authorize/reset-password/reset-password-view.tsx +0 -127
- package/src/assets/app/views/authorize/sign-in/sign-in-form.tsx +0 -244
- package/src/assets/app/views/authorize/sign-in/sign-in-picker.tsx +0 -116
- package/src/assets/app/views/authorize/sign-in/sign-in-view.tsx +0 -145
- package/src/assets/app/views/authorize/sign-up/sign-up-account-form.tsx +0 -140
- package/src/assets/app/views/authorize/sign-up/sign-up-disclaimer.tsx +0 -51
- package/src/assets/app/views/authorize/sign-up/sign-up-handle-form.tsx +0 -289
- package/src/assets/app/views/authorize/sign-up/sign-up-hcaptcha-form.tsx +0 -108
- package/src/assets/app/views/authorize/sign-up/sign-up-view.tsx +0 -158
- package/src/assets/app/views/authorize/welcome/welcome-view.tsx +0 -56
- package/src/assets/app/views/error/error-view.tsx +0 -31
- package/src/assets/asset.ts +0 -9
- package/src/assets/index.ts +0 -86
- package/tailwind.config.js +0 -31
- package/tsconfig.frontend.json +0 -11
- package/tsconfig.frontend.tsbuildinfo +0 -1
- package/tsconfig.tools.json +0 -8
- package/tsconfig.tools.tsbuildinfo +0 -1
- package/vite.config.mjs +0 -16
@@ -1,492 +0,0 @@
|
|
1
|
-
msgid ""
|
2
|
-
msgstr ""
|
3
|
-
"POT-Creation-Date: 2025-02-27 14:42+0100\n"
|
4
|
-
"MIME-Version: 1.0\n"
|
5
|
-
"Content-Type: text/plain; charset=utf-8\n"
|
6
|
-
"Content-Transfer-Encoding: 8bit\n"
|
7
|
-
"X-Generator: @lingui/cli\n"
|
8
|
-
"Language: ko\n"
|
9
|
-
"Project-Id-Version: \n"
|
10
|
-
"Report-Msgid-Bugs-To: \n"
|
11
|
-
"PO-Revision-Date: \n"
|
12
|
-
"Last-Translator: \n"
|
13
|
-
"Language-Team: \n"
|
14
|
-
"Plural-Forms: \n"
|
15
|
-
|
16
|
-
#: src/assets/app/views/authorize/accept/accept-form.tsx:76
|
17
|
-
msgid "<0/> is asking for permission to access your account (<1/>)."
|
18
|
-
msgstr ""
|
19
|
-
|
20
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-form.tsx:221
|
21
|
-
msgid "2FA Confirmation"
|
22
|
-
msgstr ""
|
23
|
-
|
24
|
-
#: src/assets/app/components/utils/error-message.tsx:47
|
25
|
-
msgid "A second authentication factor is required"
|
26
|
-
msgstr ""
|
27
|
-
|
28
|
-
#: src/assets/app/views/authorize/accept/accept-form.tsx:144
|
29
|
-
msgid "Access your account data (except chat messages)"
|
30
|
-
msgstr ""
|
31
|
-
|
32
|
-
#: src/assets/app/views/authorize/accept/accept-form.tsx:146
|
33
|
-
msgid "Access your chat messages"
|
34
|
-
msgstr ""
|
35
|
-
|
36
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-form.tsx:138
|
37
|
-
msgid "Account"
|
38
|
-
msgstr ""
|
39
|
-
|
40
|
-
#: src/assets/app/views/authorize/reset-password/reset-password-view.tsx:71
|
41
|
-
msgid "Already have a code?"
|
42
|
-
msgstr ""
|
43
|
-
|
44
|
-
#: src/assets/app/components/utils/client-name.tsx:35
|
45
|
-
msgid "An application on your device"
|
46
|
-
msgstr ""
|
47
|
-
|
48
|
-
#: src/assets/app/components/utils/error-message.tsx:61
|
49
|
-
msgid "An unknown error occurred"
|
50
|
-
msgstr ""
|
51
|
-
|
52
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-picker.tsx:110
|
53
|
-
msgid "Another account"
|
54
|
-
msgstr ""
|
55
|
-
|
56
|
-
#: src/assets/app/views/authorize/welcome/welcome-view.tsx:28
|
57
|
-
msgid "Authenticate"
|
58
|
-
msgstr ""
|
59
|
-
|
60
|
-
#: src/assets/app/views/authorize/accept/accept-view.tsx:55
|
61
|
-
#: src/assets/app/views/authorize/accept/accept-form.tsx:56
|
62
|
-
msgid "Authorize"
|
63
|
-
msgstr ""
|
64
|
-
|
65
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-picker.tsx:47
|
66
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-form.tsx:130
|
67
|
-
#: src/assets/app/views/authorize/reset-password/reset-password-view.tsx:65
|
68
|
-
#: src/assets/app/views/authorize/reset-password/reset-password-view.tsx:95
|
69
|
-
#: src/assets/app/components/forms/wizard-card.tsx:93
|
70
|
-
msgid "Back"
|
71
|
-
msgstr ""
|
72
|
-
|
73
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-handle-form.tsx:152
|
74
|
-
msgid "Between {minLength} and {maxLength} characters"
|
75
|
-
msgstr ""
|
76
|
-
|
77
|
-
#: src/assets/app/views/authorize/accept/accept-form.tsx:89
|
78
|
-
msgid "By clicking <0>Authorize</0>, you allow this application to perform the following actions in accordance with their <1>terms of service</1> and <2>privacy policy</2>:"
|
79
|
-
msgstr ""
|
80
|
-
|
81
|
-
#. placeholder {0}: tosLink ? ( <LinkAnchor className="text-brand underline" link={tosLink}> <Trans>Terms of Service</Trans> </LinkAnchor> ) : ( <Trans>Terms of Service</Trans> )
|
82
|
-
#. placeholder {1}: ppLink ? ( <LinkAnchor className="text-brand underline" link={ppLink}> <Trans>Privacy Policy</Trans> </LinkAnchor> ) : ( <Trans>Privacy Policy</Trans> )
|
83
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-disclaimer.tsx:30
|
84
|
-
msgid "By creating an account you agree to the {0} and the {1} of this service."
|
85
|
-
msgstr ""
|
86
|
-
|
87
|
-
#: src/assets/app/views/authorize/welcome/welcome-view.tsx:51
|
88
|
-
#: src/assets/app/components/forms/form-card-async.tsx:85
|
89
|
-
msgid "Cancel"
|
90
|
-
msgstr ""
|
91
|
-
|
92
|
-
#. placeholder {0}: secondFactor.hint
|
93
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-form.tsx:234
|
94
|
-
msgid "Check your {0} email for a login code and enter it here."
|
95
|
-
msgstr ""
|
96
|
-
|
97
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-view.tsx:94
|
98
|
-
msgid "Choose a username"
|
99
|
-
msgstr ""
|
100
|
-
|
101
|
-
#: src/assets/app/components/utils/error-card.tsx:78
|
102
|
-
msgid "Code"
|
103
|
-
msgstr ""
|
104
|
-
|
105
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-form.tsx:135
|
106
|
-
msgid "Confirm"
|
107
|
-
msgstr ""
|
108
|
-
|
109
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-view.tsx:65
|
110
|
-
msgid "Confirm your password to continue"
|
111
|
-
msgstr ""
|
112
|
-
|
113
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-form.tsx:225
|
114
|
-
msgid "Confirmation code"
|
115
|
-
msgstr ""
|
116
|
-
|
117
|
-
#: src/assets/app/views/authorize/welcome/welcome-view.tsx:35
|
118
|
-
msgid "Create a new account"
|
119
|
-
msgstr ""
|
120
|
-
|
121
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-view.tsx:78
|
122
|
-
msgid "Create Account"
|
123
|
-
msgstr ""
|
124
|
-
|
125
|
-
#: src/assets/app/views/authorize/accept/accept-form.tsx:60
|
126
|
-
msgid "Deny access"
|
127
|
-
msgstr ""
|
128
|
-
|
129
|
-
#: src/assets/app/components/utils/error-card.tsx:85
|
130
|
-
msgid "Description"
|
131
|
-
msgstr ""
|
132
|
-
|
133
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-account-form.tsx:112
|
134
|
-
#: src/assets/app/components/forms/input-email-address.tsx:49
|
135
|
-
#: src/assets/app/components/forms/input-email-address.tsx:50
|
136
|
-
#: src/assets/app/components/forms/input-email-address.tsx:51
|
137
|
-
msgid "Email"
|
138
|
-
msgstr ""
|
139
|
-
|
140
|
-
#: src/assets/app/views/authorize/reset-password/reset-password-request-form.tsx:55
|
141
|
-
#: src/assets/app/views/authorize/reset-password/reset-password-request-form.tsx:60
|
142
|
-
msgid "Email address"
|
143
|
-
msgstr ""
|
144
|
-
|
145
|
-
#: src/assets/app/components/forms/input-new-password.tsx:44
|
146
|
-
msgid "Enter a password"
|
147
|
-
msgstr ""
|
148
|
-
|
149
|
-
#: src/assets/app/views/authorize/reset-password/reset-password-view.tsx:85
|
150
|
-
msgid "Enter the code you received to reset your password."
|
151
|
-
msgstr ""
|
152
|
-
|
153
|
-
#: src/assets/app/views/authorize/reset-password/reset-password-request-form.tsx:71
|
154
|
-
msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password."
|
155
|
-
msgstr ""
|
156
|
-
|
157
|
-
#: src/assets/app/views/authorize/reset-password/reset-password-request-form.tsx:58
|
158
|
-
msgid "Enter your email address"
|
159
|
-
msgstr ""
|
160
|
-
|
161
|
-
#: src/assets/app/components/forms/input-new-password.tsx:45
|
162
|
-
msgid "Enter your new password"
|
163
|
-
msgstr ""
|
164
|
-
|
165
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-view.tsx:86
|
166
|
-
msgid "Enter your password"
|
167
|
-
msgstr ""
|
168
|
-
|
169
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-view.tsx:104
|
170
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-view.tsx:120
|
171
|
-
msgid "Enter your username and password"
|
172
|
-
msgstr ""
|
173
|
-
|
174
|
-
#: src/assets/app/views/error/error-view.tsx:28
|
175
|
-
msgid "Error"
|
176
|
-
msgstr ""
|
177
|
-
|
178
|
-
#: src/assets/app/components/utils/password-strength-label.tsx:25
|
179
|
-
msgid "Extra"
|
180
|
-
msgstr ""
|
181
|
-
|
182
|
-
#: src/assets/app/views/authorize/reset-password/reset-password-view.tsx:53
|
183
|
-
msgid "Forgot Password"
|
184
|
-
msgstr ""
|
185
|
-
|
186
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-form.tsx:180
|
187
|
-
msgid "Forgot?"
|
188
|
-
msgstr ""
|
189
|
-
|
190
|
-
#. placeholder {0}: account.preferred_username || account.email || account.sub
|
191
|
-
#: src/assets/app/views/authorize/accept/accept-view.tsx:40
|
192
|
-
msgid "Grant access to your <0>{0}</0> account"
|
193
|
-
msgstr ""
|
194
|
-
|
195
|
-
#: src/assets/app/components/utils/help-card.tsx:32
|
196
|
-
msgid "Having trouble? <0>Contact support</0>"
|
197
|
-
msgstr ""
|
198
|
-
|
199
|
-
#: src/assets/app/components/forms/button-toggle-visibility.tsx:34
|
200
|
-
msgid "Hide"
|
201
|
-
msgstr ""
|
202
|
-
|
203
|
-
#: src/assets/app/components/utils/link-title.tsx:15
|
204
|
-
msgid "Home"
|
205
|
-
msgstr ""
|
206
|
-
|
207
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-picker.tsx:86
|
208
|
-
msgid "Identifier"
|
209
|
-
msgstr ""
|
210
|
-
|
211
|
-
#: src/assets/app/locales/locale-selector.tsx:48
|
212
|
-
msgid "Interface language selector"
|
213
|
-
msgstr ""
|
214
|
-
|
215
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-handle-form.tsx:277
|
216
|
-
msgid "Invalid"
|
217
|
-
msgstr ""
|
218
|
-
|
219
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-account-form.tsx:95
|
220
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-account-form.tsx:99
|
221
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-account-form.tsx:100
|
222
|
-
msgid "Invite code"
|
223
|
-
msgstr ""
|
224
|
-
|
225
|
-
#: src/assets/app/views/authorize/reset-password/reset-password-view.tsx:55
|
226
|
-
msgid "Let's get your password reset!"
|
227
|
-
msgstr ""
|
228
|
-
|
229
|
-
#: src/assets/app/views/authorize/authorize-view.tsx:172
|
230
|
-
msgid "Login complete"
|
231
|
-
msgstr ""
|
232
|
-
|
233
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-picker.tsx:104
|
234
|
-
msgid "Login to account that is not listed"
|
235
|
-
msgstr ""
|
236
|
-
|
237
|
-
#: src/assets/app/components/forms/input-token.tsx:59
|
238
|
-
msgid "Looks like {example}"
|
239
|
-
msgstr ""
|
240
|
-
|
241
|
-
#: src/assets/app/components/forms/button-toggle-visibility.tsx:34
|
242
|
-
msgid "Make visible"
|
243
|
-
msgstr ""
|
244
|
-
|
245
|
-
#: src/assets/app/components/utils/password-strength-label.tsx:33
|
246
|
-
msgid "Missing"
|
247
|
-
msgstr ""
|
248
|
-
|
249
|
-
#: src/assets/app/components/utils/password-strength-label.tsx:29
|
250
|
-
msgid "Moderate"
|
251
|
-
msgstr ""
|
252
|
-
|
253
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-picker.tsx:80
|
254
|
-
msgid "Name"
|
255
|
-
msgstr ""
|
256
|
-
|
257
|
-
#: src/assets/app/views/authorize/reset-password/reset-password-confirm-form.tsx:76
|
258
|
-
msgid "New password"
|
259
|
-
msgstr ""
|
260
|
-
|
261
|
-
#: src/assets/app/views/authorize/reset-password/reset-password-view.tsx:60
|
262
|
-
#: src/assets/app/views/authorize/reset-password/reset-password-view.tsx:90
|
263
|
-
#: src/assets/app/components/forms/wizard-card.tsx:96
|
264
|
-
msgid "Next"
|
265
|
-
msgstr ""
|
266
|
-
|
267
|
-
#: src/assets/app/views/authorize/reset-password/reset-password-view.tsx:119
|
268
|
-
msgid "Okay"
|
269
|
-
msgstr ""
|
270
|
-
|
271
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-handle-form.tsx:157
|
272
|
-
msgid "Only letters, numbers, and hyphens"
|
273
|
-
msgstr ""
|
274
|
-
|
275
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-account-form.tsx:126
|
276
|
-
#: src/assets/app/components/forms/input-password.tsx:51
|
277
|
-
#: src/assets/app/components/forms/input-password.tsx:52
|
278
|
-
#: src/assets/app/components/forms/input-password.tsx:53
|
279
|
-
msgid "Password"
|
280
|
-
msgstr ""
|
281
|
-
|
282
|
-
#: src/assets/app/components/utils/password-strength-label.tsx:23
|
283
|
-
msgid "Password strength"
|
284
|
-
msgstr ""
|
285
|
-
|
286
|
-
#: src/assets/app/components/utils/password-strength-meter.tsx:45
|
287
|
-
msgid "Password strength indicator"
|
288
|
-
msgstr ""
|
289
|
-
|
290
|
-
#: src/assets/app/views/authorize/reset-password/reset-password-view.tsx:106
|
291
|
-
msgid "Password Updated"
|
292
|
-
msgstr ""
|
293
|
-
|
294
|
-
#: src/assets/app/views/authorize/reset-password/reset-password-view.tsx:113
|
295
|
-
msgid "Password updated!"
|
296
|
-
msgstr ""
|
297
|
-
|
298
|
-
#: src/assets/app/components/forms/input-new-password.tsx:46
|
299
|
-
msgid "Password with at least {MIN_PASSWORD_LENGTH} characters"
|
300
|
-
msgstr ""
|
301
|
-
|
302
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-form.tsx:194
|
303
|
-
msgid "Please verify the domain name of the website before entering your password. Never enter your password on a domain you do not trust."
|
304
|
-
msgstr ""
|
305
|
-
|
306
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-disclaimer.tsx:42
|
307
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-disclaimer.tsx:45
|
308
|
-
#: src/assets/app/components/utils/link-title.tsx:17
|
309
|
-
msgid "Privacy Policy"
|
310
|
-
msgstr ""
|
311
|
-
|
312
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-form.tsx:208
|
313
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-form.tsx:213
|
314
|
-
msgid "Remember this account on this device"
|
315
|
-
msgstr ""
|
316
|
-
|
317
|
-
#: src/assets/app/views/authorize/accept/accept-form.tsx:123
|
318
|
-
msgid "Requested permissions"
|
319
|
-
msgstr ""
|
320
|
-
|
321
|
-
#: src/assets/app/views/authorize/reset-password/reset-password-confirm-form.tsx:61
|
322
|
-
msgid "Reset code"
|
323
|
-
msgstr ""
|
324
|
-
|
325
|
-
#: src/assets/app/views/authorize/reset-password/reset-password-view.tsx:82
|
326
|
-
msgid "Reset Password"
|
327
|
-
msgstr ""
|
328
|
-
|
329
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-form.tsx:178
|
330
|
-
msgid "Reset your password"
|
331
|
-
msgstr ""
|
332
|
-
|
333
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-handle-form.tsx:198
|
334
|
-
msgid "Select domain"
|
335
|
-
msgstr ""
|
336
|
-
|
337
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-view.tsx:135
|
338
|
-
msgid "Select from an existing account"
|
339
|
-
msgstr ""
|
340
|
-
|
341
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-form.tsx:204
|
342
|
-
msgid "Session"
|
343
|
-
msgstr ""
|
344
|
-
|
345
|
-
#: src/assets/app/views/authorize/welcome/welcome-view.tsx:45
|
346
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-view.tsx:48
|
347
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-form.tsx:135
|
348
|
-
msgid "Sign in"
|
349
|
-
msgstr ""
|
350
|
-
|
351
|
-
#. placeholder {0}: account.name
|
352
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-picker.tsx:75
|
353
|
-
msgid "Sign in as {0}"
|
354
|
-
msgstr ""
|
355
|
-
|
356
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-picker.tsx:53
|
357
|
-
msgid "Sign in as..."
|
358
|
-
msgstr ""
|
359
|
-
|
360
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-view.tsx:84
|
361
|
-
msgid "Sign up"
|
362
|
-
msgstr ""
|
363
|
-
|
364
|
-
#: src/assets/app/components/forms/wizard-card.tsx:106
|
365
|
-
msgid "Step {currentPosition} of {count}"
|
366
|
-
msgstr ""
|
367
|
-
|
368
|
-
#: src/assets/app/components/utils/password-strength-label.tsx:27
|
369
|
-
msgid "Strong"
|
370
|
-
msgstr ""
|
371
|
-
|
372
|
-
#: src/assets/app/components/forms/form-card-async.tsx:96
|
373
|
-
msgid "Submit"
|
374
|
-
msgstr ""
|
375
|
-
|
376
|
-
#: src/assets/app/components/utils/link-title.tsx:21
|
377
|
-
msgid "Support"
|
378
|
-
msgstr ""
|
379
|
-
|
380
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-disclaimer.tsx:34
|
381
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-disclaimer.tsx:37
|
382
|
-
#: src/assets/app/components/utils/link-title.tsx:19
|
383
|
-
msgid "Terms of Service"
|
384
|
-
msgstr ""
|
385
|
-
|
386
|
-
#: src/assets/app/components/utils/error-message.tsx:42
|
387
|
-
msgid "That handle cannot be used"
|
388
|
-
msgstr ""
|
389
|
-
|
390
|
-
#: src/assets/app/components/utils/error-message.tsx:33
|
391
|
-
msgid "The domain name is not allowed"
|
392
|
-
msgstr ""
|
393
|
-
|
394
|
-
#: src/assets/app/components/utils/error-message.tsx:35
|
395
|
-
msgid "The handle contains inappropriate language"
|
396
|
-
msgstr ""
|
397
|
-
|
398
|
-
#: src/assets/app/components/utils/error-message.tsx:40
|
399
|
-
msgid "The handle is already in use"
|
400
|
-
msgstr ""
|
401
|
-
|
402
|
-
#: src/assets/app/components/utils/error-message.tsx:31
|
403
|
-
msgid "The handle is invalid"
|
404
|
-
msgstr ""
|
405
|
-
|
406
|
-
#: src/assets/app/components/utils/error-message.tsx:25
|
407
|
-
msgid "This email is already used"
|
408
|
-
msgstr ""
|
409
|
-
|
410
|
-
#: src/assets/app/components/utils/error-message.tsx:38
|
411
|
-
msgid "This handle is reserved"
|
412
|
-
msgstr ""
|
413
|
-
|
414
|
-
#: src/assets/app/components/utils/error-message.tsx:54
|
415
|
-
msgid "This sign-in session has expired"
|
416
|
-
msgstr ""
|
417
|
-
|
418
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-handle-form.tsx:166
|
419
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-handle-form.tsx:167
|
420
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-handle-form.tsx:168
|
421
|
-
msgid "Type your desired username"
|
422
|
-
msgstr ""
|
423
|
-
|
424
|
-
#: src/assets/app/components/utils/error-message.tsx:58
|
425
|
-
msgid "Unexpected server response"
|
426
|
-
msgstr ""
|
427
|
-
|
428
|
-
#: src/assets/app/views/authorize/accept/accept-form.tsx:142
|
429
|
-
msgid "Uniquely identify you"
|
430
|
-
msgstr ""
|
431
|
-
|
432
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-form.tsx:143
|
433
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-form.tsx:144
|
434
|
-
msgid "Username or email address"
|
435
|
-
msgstr ""
|
436
|
-
|
437
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-handle-form.tsx:272
|
438
|
-
msgid "Valid"
|
439
|
-
msgstr ""
|
440
|
-
|
441
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-form.tsx:154
|
442
|
-
msgid "Valid email address or username"
|
443
|
-
msgstr ""
|
444
|
-
|
445
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-view.tsx:135
|
446
|
-
msgid "Verify you are human"
|
447
|
-
msgstr ""
|
448
|
-
|
449
|
-
#: src/assets/app/views/authorize/sign-in/sign-in-form.tsx:191
|
450
|
-
msgid "Warning"
|
451
|
-
msgstr ""
|
452
|
-
|
453
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-view.tsx:80
|
454
|
-
msgid "We're so excited to have you join us!"
|
455
|
-
msgstr ""
|
456
|
-
|
457
|
-
#: src/assets/app/components/utils/password-strength-label.tsx:31
|
458
|
-
msgid "Weak"
|
459
|
-
msgstr ""
|
460
|
-
|
461
|
-
#: src/assets/app/components/utils/error-message.tsx:21
|
462
|
-
msgid "Wrong identifier or password"
|
463
|
-
msgstr ""
|
464
|
-
|
465
|
-
#: src/assets/app/views/authorize/authorize-view.tsx:173
|
466
|
-
msgid "You are being redirected..."
|
467
|
-
msgstr ""
|
468
|
-
|
469
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-handle-form.tsx:237
|
470
|
-
msgid "You can change this username to any domain name you control after your account is set up."
|
471
|
-
msgstr ""
|
472
|
-
|
473
|
-
#: src/assets/app/views/authorize/reset-password/reset-password-view.tsx:116
|
474
|
-
msgid "You can now sign in with your new password."
|
475
|
-
msgstr ""
|
476
|
-
|
477
|
-
#: src/assets/app/views/authorize/reset-password/reset-password-confirm-form.tsx:54
|
478
|
-
msgid "You will receive an email with a \"reset code\". Enter that code here then enter your new password."
|
479
|
-
msgstr ""
|
480
|
-
|
481
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-view.tsx:116
|
482
|
-
msgid "Your account"
|
483
|
-
msgstr ""
|
484
|
-
|
485
|
-
#. placeholder {0}: segment.length ? ( <strong className="text-gray-800 dark:text-gray-200"> {preview} </strong> ) : ( <span aria-hidden className="bg-gray-300 dark:bg-slate-600 rounded-md p-2 w-24" /> )
|
486
|
-
#: src/assets/app/views/authorize/sign-up/sign-up-handle-form.tsx:219
|
487
|
-
msgid "Your full username will be: {0}"
|
488
|
-
msgstr ""
|
489
|
-
|
490
|
-
#: src/assets/app/views/authorize/reset-password/reset-password-view.tsx:108
|
491
|
-
msgid "Your password has been updated!"
|
492
|
-
msgstr ""
|
@@ -1,8 +0,0 @@
|
|
1
|
-
import { Messages } from '@lingui/core'
|
2
|
-
|
3
|
-
// @NOTE run "pnpm run po:compile" to compile the messages from the PO files
|
4
|
-
|
5
|
-
export async function loadMessages(locale: string): Promise<Messages> {
|
6
|
-
const { messages } = await import(`./${locale}/messages.ts`)
|
7
|
-
return messages
|
8
|
-
}
|
@@ -1,19 +0,0 @@
|
|
1
|
-
import { createContext, useContext } from 'react'
|
2
|
-
// @NOTE run "pnpm run po:compile" to compile the messages from the PO files
|
3
|
-
import { KnownLocale } from './locales.ts'
|
4
|
-
|
5
|
-
export type LocaleContextValue = {
|
6
|
-
locale: string
|
7
|
-
locales: Partial<Record<KnownLocale, { name: string; flag?: string }>>
|
8
|
-
setLocale: (locale: KnownLocale) => void
|
9
|
-
}
|
10
|
-
|
11
|
-
export const LocaleContext = createContext<LocaleContextValue | null>(null)
|
12
|
-
|
13
|
-
export function useLocaleContext(): LocaleContextValue {
|
14
|
-
const context = useContext(LocaleContext)
|
15
|
-
if (!context) {
|
16
|
-
throw new Error('useLocaleContext must be used within a LocaleProvider')
|
17
|
-
}
|
18
|
-
return context
|
19
|
-
}
|
@@ -1,112 +0,0 @@
|
|
1
|
-
import { I18n } from '@lingui/core'
|
2
|
-
import { I18nProvider } from '@lingui/react'
|
3
|
-
import { ReactNode, useEffect, useMemo, useState } from 'react'
|
4
|
-
// @NOTE run "pnpm run po:compile" to compile the messages from the PO files
|
5
|
-
import { messages as en } from './en/messages.ts'
|
6
|
-
import { loadMessages } from './load.ts'
|
7
|
-
import { LocaleContext, LocaleContextValue } from './locale-context.ts'
|
8
|
-
import { KnownLocale, knownLocales, locales, resolveLocale } from './locales.ts'
|
9
|
-
|
10
|
-
export type LocaleProviderProps = {
|
11
|
-
availableLocales?: readonly string[]
|
12
|
-
children?: ReactNode
|
13
|
-
}
|
14
|
-
|
15
|
-
export function LocaleProvider({
|
16
|
-
availableLocales,
|
17
|
-
children,
|
18
|
-
}: LocaleProviderProps) {
|
19
|
-
// Bundle "en" messages with the app
|
20
|
-
const [i18n] = useState(() => new I18n({ locale: 'en', messages: { en } }))
|
21
|
-
|
22
|
-
const [desiredLocale, setDesiredLocale] = useState<KnownLocale>(() =>
|
23
|
-
detectLocale(
|
24
|
-
knownLocales.filter(
|
25
|
-
(l) => !availableLocales || availableLocales.includes(l),
|
26
|
-
),
|
27
|
-
),
|
28
|
-
)
|
29
|
-
const [currentLocale, setCurrentLocale] = useState<string>(() => i18n.locale)
|
30
|
-
|
31
|
-
const [loaded, setLoaded] = useState(desiredLocale === currentLocale)
|
32
|
-
|
33
|
-
// Keep currentLocale in sync with i18n
|
34
|
-
useEffect(() => {
|
35
|
-
const onChange = () => {
|
36
|
-
setCurrentLocale(i18n.locale)
|
37
|
-
document.documentElement.setAttribute('lang', i18n.locale)
|
38
|
-
}
|
39
|
-
i18n.on('change', onChange)
|
40
|
-
return () => i18n.removeListener('change', onChange)
|
41
|
-
}, [i18n])
|
42
|
-
|
43
|
-
useEffect(() => {
|
44
|
-
if (currentLocale === desiredLocale) {
|
45
|
-
setLoaded(true)
|
46
|
-
return
|
47
|
-
}
|
48
|
-
|
49
|
-
let canceled = false
|
50
|
-
loadMessages(desiredLocale)
|
51
|
-
.then((messages) => {
|
52
|
-
i18n.load(desiredLocale, messages)
|
53
|
-
if (!canceled) i18n.activate(desiredLocale)
|
54
|
-
})
|
55
|
-
.catch((err) => {
|
56
|
-
console.error(`Failed to load locale "${desiredLocale}":`, err)
|
57
|
-
})
|
58
|
-
.finally(() => {
|
59
|
-
if (!canceled) setLoaded(true)
|
60
|
-
})
|
61
|
-
return () => {
|
62
|
-
canceled = true
|
63
|
-
}
|
64
|
-
}, [currentLocale, desiredLocale])
|
65
|
-
|
66
|
-
const value = useMemo<LocaleContextValue>(
|
67
|
-
() => ({
|
68
|
-
locale: currentLocale,
|
69
|
-
locales: Object.fromEntries(
|
70
|
-
knownLocales
|
71
|
-
.filter((l) => !availableLocales || availableLocales.includes(l))
|
72
|
-
.map((l) => [l, locales[l]]),
|
73
|
-
),
|
74
|
-
setLocale: setDesiredLocale,
|
75
|
-
}),
|
76
|
-
[currentLocale, availableLocales, locales, setDesiredLocale],
|
77
|
-
)
|
78
|
-
|
79
|
-
return (
|
80
|
-
<LocaleContext value={value}>
|
81
|
-
<I18nProvider i18n={i18n}>{loaded && children}</I18nProvider>
|
82
|
-
</LocaleContext>
|
83
|
-
)
|
84
|
-
}
|
85
|
-
|
86
|
-
function detectLocale<L extends string>(
|
87
|
-
availableLocales: readonly L[],
|
88
|
-
fallbackLocale: L | 'en' = 'en',
|
89
|
-
): L {
|
90
|
-
// Use, in priority, the locale that was set by the backend
|
91
|
-
if (typeof document === 'object') {
|
92
|
-
const htmlLang = document.documentElement.getAttribute('lang')
|
93
|
-
const resolved = htmlLang && resolveLocale(htmlLang, availableLocales)
|
94
|
-
if (resolved) return resolved
|
95
|
-
}
|
96
|
-
|
97
|
-
// Should that fail (though it should probably never), negotiate with the browser
|
98
|
-
if (typeof navigator === 'object' && navigator.languages) {
|
99
|
-
for (const locale of navigator.languages) {
|
100
|
-
const resolved = resolveLocale(locale, availableLocales)
|
101
|
-
if (resolved) return resolved
|
102
|
-
}
|
103
|
-
}
|
104
|
-
|
105
|
-
const fallback = resolveLocale(fallbackLocale, availableLocales)
|
106
|
-
if (fallback) return fallback
|
107
|
-
|
108
|
-
// Type-safety
|
109
|
-
throw new TypeError(
|
110
|
-
`Available locales should always contain "${fallbackLocale}"`,
|
111
|
-
)
|
112
|
-
}
|
@@ -1,58 +0,0 @@
|
|
1
|
-
import { useLingui } from '@lingui/react/macro'
|
2
|
-
import { JSX } from 'react'
|
3
|
-
import { clsx } from '../lib/clsx.ts'
|
4
|
-
import { useLocaleContext } from './locale-context.ts'
|
5
|
-
|
6
|
-
export type LocaleSelectorProps = Omit<
|
7
|
-
JSX.IntrinsicElements['select'],
|
8
|
-
'value' | 'defaultValue'
|
9
|
-
>
|
10
|
-
|
11
|
-
export function LocaleSelector({
|
12
|
-
className,
|
13
|
-
onChange,
|
14
|
-
...props
|
15
|
-
}: LocaleSelectorProps) {
|
16
|
-
const { locale, locales, setLocale } = useLocaleContext()
|
17
|
-
const { t } = useLingui()
|
18
|
-
|
19
|
-
return (
|
20
|
-
<select
|
21
|
-
{...props}
|
22
|
-
className={clsx(
|
23
|
-
'accent-brand',
|
24
|
-
// Background
|
25
|
-
'bg-gray-100 focus:bg-slate-200 has-[:focus]:bg-slate-200',
|
26
|
-
'dark:bg-slate-800 dark:focus:bg-slate-700 dark:has-[:focus]:bg-slate-700',
|
27
|
-
// Border
|
28
|
-
'outline-none',
|
29
|
-
'border-solid border-2 border-transparent',
|
30
|
-
'focus:border-brand has-[:focus]:border-brand',
|
31
|
-
'hover:border-gray-400 hover:focus:border-gray-400',
|
32
|
-
'dark:hover:border-gray-500 dark:hover:focus:border-gray-500',
|
33
|
-
// Border
|
34
|
-
'rounded-lg',
|
35
|
-
// Font
|
36
|
-
'text-slate-600 dark:text-slate-300',
|
37
|
-
// Layout
|
38
|
-
'py-1 px-2',
|
39
|
-
className,
|
40
|
-
)}
|
41
|
-
value={locale}
|
42
|
-
onChange={(e) => {
|
43
|
-
onChange?.(e)
|
44
|
-
if (!e.defaultPrevented) {
|
45
|
-
setLocale(e.target.value as keyof typeof locales)
|
46
|
-
}
|
47
|
-
}}
|
48
|
-
aria-label={t`Interface language selector`}
|
49
|
-
>
|
50
|
-
{Object.entries(locales).map(([key, { name, flag }]) => (
|
51
|
-
<option key={key} value={key}>
|
52
|
-
{name}
|
53
|
-
{flag ? ` ${flag}` : ''}
|
54
|
-
</option>
|
55
|
-
))}
|
56
|
-
</select>
|
57
|
-
)
|
58
|
-
}
|