pgkiln 0.63.0 → 0.65.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.
Files changed (59) hide show
  1. package/SECURITY.md +2 -0
  2. package/db/migrations/132_app_user_mfa.sql +58 -0
  3. package/db/migrations/133_app_user_passkeys_stepup.sql +54 -0
  4. package/docs/apex-feature-parity.md +6 -1
  5. package/docs/guide/08-security.md +81 -5
  6. package/docs/guide/09-reference.md +5 -1
  7. package/docs/guide/11-from-apex.md +2 -1
  8. package/docs/guide/12-development.md +13 -1
  9. package/docs/guide/13-rest-api.md +4 -0
  10. package/package.json +1 -1
  11. package/public/app.css +10 -0
  12. package/public/app.js +63 -0
  13. package/public/builder.js +1 -62
  14. package/src/account-mfa.ts +184 -0
  15. package/src/api.ts +9 -2
  16. package/src/builder/advisor.ts +8 -0
  17. package/src/builder/api.ts +3 -1
  18. package/src/builder/components.ts +1 -0
  19. package/src/builder/i18n/de.ts +6 -0
  20. package/src/builder/i18n/en.ts +6 -0
  21. package/src/builder/i18n/es.ts +6 -0
  22. package/src/builder/i18n/fr.ts +6 -0
  23. package/src/builder/i18n/nl.ts +6 -0
  24. package/src/builder/i18n/pt.ts +6 -0
  25. package/src/builder/login-page.ts +32 -3
  26. package/src/builder/rest-modules.ts +1 -1
  27. package/src/builder/security.ts +3 -19
  28. package/src/builder/shared.ts +5 -3
  29. package/src/builder/users.ts +34 -3
  30. package/src/i18n/ar.ts +65 -0
  31. package/src/i18n/cs.ts +65 -0
  32. package/src/i18n/da.ts +65 -0
  33. package/src/i18n/de.ts +65 -0
  34. package/src/i18n/el.ts +65 -0
  35. package/src/i18n/es.ts +65 -0
  36. package/src/i18n/fi.ts +65 -0
  37. package/src/i18n/fr.ts +65 -0
  38. package/src/i18n/he.ts +65 -0
  39. package/src/i18n/it.ts +65 -0
  40. package/src/i18n/ja.ts +65 -0
  41. package/src/i18n/ko.ts +65 -0
  42. package/src/i18n/nb.ts +65 -0
  43. package/src/i18n/pl.ts +65 -0
  44. package/src/i18n/pt.ts +65 -0
  45. package/src/i18n/ru.ts +65 -0
  46. package/src/i18n/sv.ts +65 -0
  47. package/src/i18n/tr.ts +65 -0
  48. package/src/i18n/uk.ts +65 -0
  49. package/src/i18n/zh.ts +65 -0
  50. package/src/i18n.ts +130 -0
  51. package/src/metadata.ts +11 -2
  52. package/src/mfa.ts +94 -65
  53. package/src/remember.ts +1 -1
  54. package/src/runtime/account.ts +7 -1
  55. package/src/runtime/authz.ts +23 -4
  56. package/src/runtime/routes.ts +21 -7
  57. package/src/runtime/two-step.ts +702 -0
  58. package/src/sharedlogin.ts +1 -1
  59. package/src/webauthn.ts +20 -0
package/src/i18n/ar.ts CHANGED
@@ -805,4 +805,69 @@ export const ar: Record<MessageKey, string> = {
805
805
  'ai_filter.per_group': "{what} لكل مجموعة",
806
806
  'ai_filter.needs_number': "تحتاج {fn} إلى عمود أرقام.",
807
807
  'ai_filter.invalid': "هذا التغيير غير ممكن: {why}",
808
+ // (sprint 130) two-step sign-in
809
+ "mfa.step_title": "تسجيل الدخول بخطوتين",
810
+ "mfa.step_intro": "أدخل الرمز المكوّن من 6 أرقام من تطبيق المصادقة، أو أحد رموز الاسترداد.",
811
+ "mfa.code": "الرمز",
812
+ "mfa.verify": "تحقق",
813
+ "mfa.wrong": "الرمز غير صحيح أو سبق استخدامه.",
814
+ "mfa.expired": "استغرق تسجيل الدخول وقتًا طويلًا. يُرجى تسجيل الدخول مرة أخرى.",
815
+ "mfa.enrol_title": "إعداد تسجيل الدخول بخطوتين",
816
+ "mfa.enrol_intro": "يطلب هذا التطبيق رمزًا من تطبيق مصادقة عند تسجيل الدخول. أضف تطبيقًا الآن للمتابعة.",
817
+ "mfa.scan": "امسح رمز QR باستخدام تطبيق مصادقة، مثل Google Authenticator أو Microsoft Authenticator أو 1Password.",
818
+ "mfa.or_enter": "أو أدخل هذا المفتاح:",
819
+ "mfa.enter_code": "أدخل الرمز المكوّن من 6 أرقام الذي يعرضه التطبيق.",
820
+ "mfa.qr_label": "رمز QR لتطبيق المصادقة",
821
+ "mfa.codes_title": "رموز الاسترداد",
822
+ "mfa.codes_once": "احتفظ بهذه الرموز في مكان آمن. يتيح لك كل رمز تسجيل الدخول مرة واحدة عندما لا يكون هاتفك معك. لن تظهر إلا الآن.",
823
+ "mfa.codes_saved": "لقد حفظت هذه الرموز",
824
+ "mfa.continue": "متابعة",
825
+ "mfa.no_key": "لم يتم إعداد تسجيل الدخول بخطوتين على هذا الخادم بعد. يُرجى التواصل مع المسؤول.",
826
+ "mfa.app_name": "الاسم",
827
+ "mfa.app_default": "تطبيق المصادقة",
828
+ "mfa.on": "عند تسجيل الدخول، تُدخل أيضًا رمزًا من تطبيق المصادقة.",
829
+ "mfa.off": "أضف تطبيق مصادقة لحماية حسابك بخطوة ثانية عند تسجيل الدخول.",
830
+ "mfa.required_you": "يتطلب هذا التطبيق منك تسجيل الدخول بخطوتين: أضف تطبيق مصادقة.",
831
+ "mfa.add_app": "إضافة تطبيق مصادقة",
832
+ "mfa.confirm_app": "إضافة التطبيق",
833
+ "mfa.cancel": "إلغاء",
834
+ "mfa.remove": "إزالة",
835
+ "mfa.remove_code": "رمز حالي أو رمز استرداد",
836
+ "mfa.removed": "تمت إزالة تطبيق المصادقة.",
837
+ "mfa.keep_one": "يتطلب هذا التطبيق منك تسجيل الدخول بخطوتين: أضف تطبيقًا آخر قبل إزالة هذا التطبيق.",
838
+ "mfa.added": "تمت إضافة تطبيق المصادقة.",
839
+ "mfa.codes_left": "رموز الاسترداد المتبقية: {n}",
840
+ "mfa.codes_new": "رموز استرداد جديدة",
841
+ "mfa.recovery_used": "سجّلت الدخول باستخدام رمز استرداد. رموز الاسترداد المتبقية: {n}.",
842
+ // (sprint 131) passkeys, e-mail codes, step-up, API tokens
843
+ "mfa.on_any": "عند تسجيل الدخول، تُدخل أيضًا رمزًا أو تستخدم مفتاح مرور.",
844
+ "mfa.use_passkey": "استخدام مفتاح مرور",
845
+ "mfa.passkey_failed": "لم يعمل مفتاح المرور. حاول مرة أخرى أو أدخل رمزًا.",
846
+ "mfa.email_send": "أرسل لي رمزًا بالبريد الإلكتروني بدلًا من ذلك",
847
+ "mfa.email_sent": "أرسلنا رمزًا إلى عنوان بريدك الإلكتروني. وهو صالح لمدة {minutes} دقيقة.",
848
+ "mfa.email_failed": "تعذّر إرسال رمز الآن. استخدم تطبيق المصادقة أو مفتاح مرور أو رمز استرداد.",
849
+ "mfa.email_subject": "رمز تسجيل الدخول إلى {app}",
850
+ "mfa.email_body": "رمز تسجيل الدخول إلى {app} هو {code}. وهو صالح لمدة {minutes} دقيقة.\n\nإذا لم تحاول تسجيل الدخول، فغيّر كلمة المرور.",
851
+ "mfa.stepup_title": "أكّد أنك أنت",
852
+ "mfa.stepup_intro": "تطلب هذه الصفحة خطوتك الثانية مرة أخرى. أدخل رمزًا من تطبيق المصادقة أو رمز استرداد، أو استخدم مفتاح مرور.",
853
+ "mfa.stepup_none": "تتطلب هذه الصفحة تسجيل الدخول بخطوتين. أضف أولًا تطبيق مصادقة أو مفتاح مرور في حسابي.",
854
+ "mfa.my_account": "حسابي",
855
+ "mfa.passkey_default": "مفتاح مرور",
856
+ "mfa.add_passkey": "إضافة مفتاح مرور",
857
+ "mfa.passkey_intro": "يتيح لك مفتاح المرور تسجيل الدخول ببصمة الإصبع أو الوجه أو قفل الشاشة أو مفتاح أمان، دون كتابة رمز.",
858
+ "mfa.passkey_added": "تمت إضافة مفتاح المرور.",
859
+ "mfa.passkey_removed": "تمت إزالة مفتاح المرور.",
860
+ "mfa.passkey_known": "تمت إضافة مفتاح المرور هذا من قبل.",
861
+ "mfa.passkey_needs_host": "تتطلب مفاتيح المرور أن يكون عنوان التطبيق اسم مضيف، لا عنوان IP.",
862
+ "mfa.passkey_needs_js": "تتطلب إضافة مفتاح مرور JavaScript.",
863
+ "mfa.or_passkey": "أو أضف مفتاح مرور بدلًا من ذلك:",
864
+ "mfa.kind_passkey": "مفتاح مرور",
865
+ "mfa.kind_app": "تطبيق المصادقة",
866
+ "token.title": "رمز REST API المميز",
867
+ "token.intro": "يتيح الرمز المميز لبرنامج نصي استخدام REST API لهذا التطبيق باسمك حتى تنتهي صلاحيته. يُعرض مرة واحدة فقط.",
868
+ "token.needs_step": "تُقدّم خطوتك الثانية مرة أخرى أولًا.",
869
+ "token.hours": "صالح لمدة (ساعات)",
870
+ "token.create": "إنشاء رمز مميز",
871
+ "token.shown_once": "رمزك المميز (يُعرض مرة واحدة، صالح {hours} ساعة):",
872
+ "token.step_first": "أكّد أنك أنت قبل إنشاء رمز مميز.",
808
873
  };
package/src/i18n/cs.ts CHANGED
@@ -805,4 +805,69 @@ export const cs: Record<MessageKey, string> = {
805
805
  'ai_filter.per_group': "{what} na skupinu",
806
806
  'ai_filter.needs_number': "{fn} potřebuje sloupec s čísly.",
807
807
  'ai_filter.invalid': "Tuto změnu nelze provést: {why}",
808
+ // (sprint 130) two-step sign-in
809
+ "mfa.step_title": "Dvoufázové přihlášení",
810
+ "mfa.step_intro": "Zadejte šestimístný kód z ověřovací aplikace nebo jeden ze záložních kódů.",
811
+ "mfa.code": "Kód",
812
+ "mfa.verify": "Ověřit",
813
+ "mfa.wrong": "Kód není správný nebo už byl použit.",
814
+ "mfa.expired": "Přihlášení trvalo příliš dlouho. Přihlaste se znovu.",
815
+ "mfa.enrol_title": "Nastavení dvoufázového přihlášení",
816
+ "mfa.enrol_intro": "Tato aplikace při přihlášení vyžaduje kód z ověřovací aplikace. Pokračujte jejím přidáním.",
817
+ "mfa.scan": "Naskenujte QR kód ověřovací aplikací, například Google Authenticator, Microsoft Authenticator nebo 1Password.",
818
+ "mfa.or_enter": "Nebo zadejte tento klíč:",
819
+ "mfa.enter_code": "Zadejte šestimístný kód, který aplikace zobrazuje.",
820
+ "mfa.qr_label": "QR kód pro ověřovací aplikaci",
821
+ "mfa.codes_title": "Záložní kódy",
822
+ "mfa.codes_once": "Uložte si tyto kódy na bezpečné místo. Každý vás jednou přihlásí, když nemáte telefon. Zobrazují se pouze nyní.",
823
+ "mfa.codes_saved": "Kódy jsem si uložil",
824
+ "mfa.continue": "Pokračovat",
825
+ "mfa.no_key": "Dvoufázové přihlášení zatím na tomto serveru není nastaveno. Obraťte se na správce.",
826
+ "mfa.app_name": "Název",
827
+ "mfa.app_default": "Ověřovací aplikace",
828
+ "mfa.on": "Při přihlášení zadáváte také kód z ověřovací aplikace.",
829
+ "mfa.off": "Přidejte ověřovací aplikaci a chraňte svůj účet při přihlášení druhým krokem.",
830
+ "mfa.required_you": "Tato aplikace od vás vyžaduje dvoufázové přihlášení: přidejte ověřovací aplikaci.",
831
+ "mfa.add_app": "Přidat ověřovací aplikaci",
832
+ "mfa.confirm_app": "Přidat aplikaci",
833
+ "mfa.cancel": "Zrušit",
834
+ "mfa.remove": "Odebrat",
835
+ "mfa.remove_code": "Aktuální kód nebo záložní kód",
836
+ "mfa.removed": "Ověřovací aplikace byla odebrána.",
837
+ "mfa.keep_one": "Tato aplikace od vás vyžaduje dvoufázové přihlášení: než tuto aplikaci odeberete, přidejte jinou.",
838
+ "mfa.added": "Ověřovací aplikace byla přidána.",
839
+ "mfa.codes_left": "Zbývající záložní kódy: {n}",
840
+ "mfa.codes_new": "Nové záložní kódy",
841
+ "mfa.recovery_used": "Přihlásili jste se záložním kódem. Zbývající záložní kódy: {n}.",
842
+ // (sprint 131) passkeys, e-mail codes, step-up, API tokens
843
+ "mfa.on_any": "Při přihlášení zadáte také kód nebo použijete přístupový klíč.",
844
+ "mfa.use_passkey": "Použít přístupový klíč",
845
+ "mfa.passkey_failed": "Přístupový klíč nefungoval. Zkuste to znovu nebo zadejte kód.",
846
+ "mfa.email_send": "Raději mi pošlete kód e-mailem",
847
+ "mfa.email_sent": "Poslali jsme kód na vaši e-mailovou adresu. Platí {minutes} minut.",
848
+ "mfa.email_failed": "Kód teď nelze odeslat. Použijte ověřovací aplikaci, přístupový klíč nebo záložní kód.",
849
+ "mfa.email_subject": "Váš přihlašovací kód pro {app}",
850
+ "mfa.email_body": "Váš přihlašovací kód pro {app} je {code}. Platí {minutes} minut.\n\nPokud jste se nepokoušeli přihlásit, změňte si heslo.",
851
+ "mfa.stepup_title": "Potvrďte, že jste to vy",
852
+ "mfa.stepup_intro": "Tato stránka znovu žádá váš druhý krok. Zadejte kód z ověřovací aplikace nebo záložní kód, nebo použijte přístupový klíč.",
853
+ "mfa.stepup_none": "Tato stránka vyžaduje dvoufázové přihlášení. Nejprve si v Můj účet přidejte ověřovací aplikaci nebo přístupový klíč.",
854
+ "mfa.my_account": "Můj účet",
855
+ "mfa.passkey_default": "Přístupový klíč",
856
+ "mfa.add_passkey": "Přidat přístupový klíč",
857
+ "mfa.passkey_intro": "Přístupový klíč vás přihlásí otiskem prstu, obličejem, zámkem obrazovky nebo bezpečnostním klíčem, bez psaní kódu.",
858
+ "mfa.passkey_added": "Přístupový klíč byl přidán.",
859
+ "mfa.passkey_removed": "Přístupový klíč byl odebrán.",
860
+ "mfa.passkey_known": "Tento přístupový klíč už byl přidán.",
861
+ "mfa.passkey_needs_host": "Přístupové klíče vyžadují, aby adresa aplikace byla název hostitele, ne IP adresa.",
862
+ "mfa.passkey_needs_js": "Přidání přístupového klíče vyžaduje JavaScript.",
863
+ "mfa.or_passkey": "Nebo místo toho přidejte přístupový klíč:",
864
+ "mfa.kind_passkey": "Přístupový klíč",
865
+ "mfa.kind_app": "Ověřovací aplikace",
866
+ "token.title": "Token REST API",
867
+ "token.intro": "Token umožní skriptu používat REST API této aplikace vaším jménem, dokud nevyprší. Zobrazí se jen jednou.",
868
+ "token.needs_step": "Nejprve znovu zadáte svůj druhý krok.",
869
+ "token.hours": "Platnost (hodiny)",
870
+ "token.create": "Vytvořit token",
871
+ "token.shown_once": "Váš token (zobrazen jednou, platí {hours} h):",
872
+ "token.step_first": "Než vytvoříte token, potvrďte, že jste to vy.",
808
873
  };
package/src/i18n/da.ts CHANGED
@@ -805,4 +805,69 @@ export const da: Record<MessageKey, string> = {
805
805
  'ai_filter.per_group': "{what} pr. gruppe",
806
806
  'ai_filter.needs_number': "{fn} kræver en kolonne med tal.",
807
807
  'ai_filter.invalid': "Den ændring er ikke mulig: {why}",
808
+ // (sprint 130) two-step sign-in
809
+ "mfa.step_title": "Totrinslogin",
810
+ "mfa.step_intro": "Indtast den 6-cifrede kode fra din godkendelsesapp eller en af dine gendannelseskoder.",
811
+ "mfa.code": "Kode",
812
+ "mfa.verify": "Bekræft",
813
+ "mfa.wrong": "Koden er forkert eller er allerede brugt.",
814
+ "mfa.expired": "Login tog for lang tid. Log ind igen.",
815
+ "mfa.enrol_title": "Konfigurer totrinslogin",
816
+ "mfa.enrol_intro": "Denne applikation beder om en kode fra en godkendelsesapp, når du logger ind. Tilføj en nu for at fortsætte.",
817
+ "mfa.scan": "Scan QR-koden med en godkendelsesapp, f.eks. Google Authenticator, Microsoft Authenticator eller 1Password.",
818
+ "mfa.or_enter": "Eller indtast denne nøgle:",
819
+ "mfa.enter_code": "Indtast den 6-cifrede kode, som appen viser.",
820
+ "mfa.qr_label": "QR-kode til en godkendelsesapp",
821
+ "mfa.codes_title": "Gendannelseskoder",
822
+ "mfa.codes_once": "Opbevar koderne et sikkert sted. Hver kode logger dig ind én gang, når du ikke har din telefon. De vises kun nu.",
823
+ "mfa.codes_saved": "Jeg har gemt koderne",
824
+ "mfa.continue": "Fortsæt",
825
+ "mfa.no_key": "Totrinslogin er endnu ikke konfigureret på denne server. Kontakt administratoren.",
826
+ "mfa.app_name": "Navn",
827
+ "mfa.app_default": "Godkendelsesapp",
828
+ "mfa.on": "Når du logger ind, angiver du også en kode fra din godkendelsesapp.",
829
+ "mfa.off": "Tilføj en godkendelsesapp for at beskytte din konto med et ekstra trin, når du logger ind.",
830
+ "mfa.required_you": "Denne applikation kræver totrinslogin for dig: tilføj en godkendelsesapp.",
831
+ "mfa.add_app": "Tilføj en godkendelsesapp",
832
+ "mfa.confirm_app": "Tilføj app",
833
+ "mfa.cancel": "Annuller",
834
+ "mfa.remove": "Fjern",
835
+ "mfa.remove_code": "En aktuel kode eller en gendannelseskode",
836
+ "mfa.removed": "Godkendelsesappen blev fjernet.",
837
+ "mfa.keep_one": "Denne applikation kræver totrinslogin for dig: tilføj en anden app, før du fjerner denne.",
838
+ "mfa.added": "Godkendelsesappen blev tilføjet.",
839
+ "mfa.codes_left": "Resterende gendannelseskoder: {n}",
840
+ "mfa.codes_new": "Nye gendannelseskoder",
841
+ "mfa.recovery_used": "Du loggede ind med en gendannelseskode. Resterende gendannelseskoder: {n}.",
842
+ // (sprint 131) passkeys, e-mail codes, step-up, API tokens
843
+ "mfa.on_any": "Når du logger ind, angiver du også en kode eller bruger en adgangsnøgle.",
844
+ "mfa.use_passkey": "Brug en adgangsnøgle",
845
+ "mfa.passkey_failed": "Adgangsnøglen virkede ikke. Prøv igen, eller indtast en kode.",
846
+ "mfa.email_send": "Send mig hellere en kode via e-mail",
847
+ "mfa.email_sent": "Vi har sendt en kode til din e-mailadresse. Den er gyldig i {minutes} minutter.",
848
+ "mfa.email_failed": "Der kunne ikke sendes en kode lige nu. Brug din godkendelsesapp, en adgangsnøgle eller en gendannelseskode.",
849
+ "mfa.email_subject": "Din login-kode til {app}",
850
+ "mfa.email_body": "Din login-kode til {app} er {code}. Den er gyldig i {minutes} minutter.\n\nHvis du ikke prøvede at logge ind, så skift din adgangskode.",
851
+ "mfa.stepup_title": "Bekræft, at det er dig",
852
+ "mfa.stepup_intro": "Denne side beder om dit andet trin igen. Indtast en kode fra din godkendelsesapp eller en gendannelseskode, eller brug en adgangsnøgle.",
853
+ "mfa.stepup_none": "Denne side kræver login i to trin. Tilføj først en godkendelsesapp eller en adgangsnøgle under Min konto.",
854
+ "mfa.my_account": "Min konto",
855
+ "mfa.passkey_default": "Adgangsnøgle",
856
+ "mfa.add_passkey": "Tilføj en adgangsnøgle",
857
+ "mfa.passkey_intro": "Med en adgangsnøgle logger du ind med fingeraftryk, ansigt, skærmlås eller en sikkerhedsnøgle uden at skrive en kode.",
858
+ "mfa.passkey_added": "Adgangsnøglen er tilføjet.",
859
+ "mfa.passkey_removed": "Adgangsnøglen er fjernet.",
860
+ "mfa.passkey_known": "Denne adgangsnøgle var allerede tilføjet.",
861
+ "mfa.passkey_needs_host": "Adgangsnøgler kræver, at applikationens adresse er et værtsnavn, ikke en IP-adresse.",
862
+ "mfa.passkey_needs_js": "Det kræver JavaScript at tilføje en adgangsnøgle.",
863
+ "mfa.or_passkey": "Eller tilføj i stedet en adgangsnøgle:",
864
+ "mfa.kind_passkey": "Adgangsnøgle",
865
+ "mfa.kind_app": "Godkendelsesapp",
866
+ "token.title": "REST API-token",
867
+ "token.intro": "Med et token kan et script bruge applikationens REST API som dig, indtil det udløber. Det vises kun én gang.",
868
+ "token.needs_step": "Du angiver først dit andet trin igen.",
869
+ "token.hours": "Gyldigt i (timer)",
870
+ "token.create": "Opret token",
871
+ "token.shown_once": "Dit token (vises én gang, gyldigt i {hours} t):",
872
+ "token.step_first": "Bekræft, at det er dig, før du opretter et token.",
808
873
  };
package/src/i18n/de.ts CHANGED
@@ -805,4 +805,69 @@ export const de: Record<MessageKey, string> = {
805
805
  'ai_filter.per_group': "{what} pro Gruppe",
806
806
  'ai_filter.needs_number': "{fn} braucht eine Spalte mit Zahlen.",
807
807
  'ai_filter.invalid': "Diese Änderung ist nicht möglich: {why}",
808
+ // (sprint 130) two-step sign-in
809
+ "mfa.step_title": "Anmeldung in zwei Schritten",
810
+ "mfa.step_intro": "Geben Sie den 6-stelligen Code aus Ihrer Authenticator-App oder einen Ihrer Wiederherstellungscodes ein.",
811
+ "mfa.code": "Code",
812
+ "mfa.verify": "Bestätigen",
813
+ "mfa.wrong": "Dieser Code ist falsch oder wurde bereits verwendet.",
814
+ "mfa.expired": "Die Anmeldung hat zu lange gedauert. Bitte melden Sie sich erneut an.",
815
+ "mfa.enrol_title": "Anmeldung in zwei Schritten einrichten",
816
+ "mfa.enrol_intro": "Diese Anwendung verlangt bei der Anmeldung einen Code aus einer Authenticator-App. Fügen Sie jetzt eine hinzu, um fortzufahren.",
817
+ "mfa.scan": "Scannen Sie den QR-Code mit einer Authenticator-App wie Google Authenticator, Microsoft Authenticator oder 1Password.",
818
+ "mfa.or_enter": "Oder geben Sie diesen Schlüssel ein:",
819
+ "mfa.enter_code": "Geben Sie den 6-stelligen Code ein, den die App anzeigt.",
820
+ "mfa.qr_label": "QR-Code für eine Authenticator-App",
821
+ "mfa.codes_title": "Wiederherstellungscodes",
822
+ "mfa.codes_once": "Bewahren Sie diese Codes sicher auf. Jeder Code meldet Sie einmal an, wenn Sie Ihr Telefon nicht haben. Sie werden nur jetzt angezeigt.",
823
+ "mfa.codes_saved": "Ich habe diese Codes gespeichert",
824
+ "mfa.continue": "Weiter",
825
+ "mfa.no_key": "Die Anmeldung in zwei Schritten ist auf diesem Server noch nicht eingerichtet. Wenden Sie sich an den Administrator.",
826
+ "mfa.app_name": "Name",
827
+ "mfa.app_default": "Authenticator-App",
828
+ "mfa.on": "Bei der Anmeldung geben Sie zusätzlich einen Code aus Ihrer Authenticator-App ein.",
829
+ "mfa.off": "Fügen Sie eine Authenticator-App hinzu, um Ihr Konto bei der Anmeldung mit einem zweiten Schritt zu schützen.",
830
+ "mfa.required_you": "Diese Anwendung verlangt von Ihnen die Anmeldung in zwei Schritten: Fügen Sie eine Authenticator-App hinzu.",
831
+ "mfa.add_app": "Authenticator-App hinzufügen",
832
+ "mfa.confirm_app": "App hinzufügen",
833
+ "mfa.cancel": "Abbrechen",
834
+ "mfa.remove": "Entfernen",
835
+ "mfa.remove_code": "Ein aktueller Code oder ein Wiederherstellungscode",
836
+ "mfa.removed": "Die Authenticator-App wurde entfernt.",
837
+ "mfa.keep_one": "Diese Anwendung verlangt von Ihnen die Anmeldung in zwei Schritten: Fügen Sie zuerst eine andere App hinzu, bevor Sie diese entfernen.",
838
+ "mfa.added": "Die Authenticator-App wurde hinzugefügt.",
839
+ "mfa.codes_left": "Verbleibende Wiederherstellungscodes: {n}",
840
+ "mfa.codes_new": "Neue Wiederherstellungscodes",
841
+ "mfa.recovery_used": "Sie haben sich mit einem Wiederherstellungscode angemeldet. Verbleibende Wiederherstellungscodes: {n}.",
842
+ // (sprint 131) passkeys, e-mail codes, step-up, API tokens
843
+ "mfa.on_any": "Bei der Anmeldung geben Sie zusätzlich einen Code ein oder verwenden einen Passkey.",
844
+ "mfa.use_passkey": "Passkey verwenden",
845
+ "mfa.passkey_failed": "Der Passkey hat nicht funktioniert. Versuchen Sie es erneut oder geben Sie einen Code ein.",
846
+ "mfa.email_send": "Stattdessen einen Code per E-Mail senden",
847
+ "mfa.email_sent": "Wir haben einen Code an Ihre E-Mail-Adresse gesendet. Er ist {minutes} Minuten gültig.",
848
+ "mfa.email_failed": "Gerade konnte kein Code gesendet werden. Verwenden Sie Ihre Authenticator-App, einen Passkey oder einen Wiederherstellungscode.",
849
+ "mfa.email_subject": "Ihr Anmeldecode für {app}",
850
+ "mfa.email_body": "Ihr Anmeldecode für {app} lautet {code}. Er ist {minutes} Minuten gültig.\n\nWenn Sie sich nicht anmelden wollten, ändern Sie Ihr Passwort.",
851
+ "mfa.stepup_title": "Bestätigen Sie, dass Sie es sind",
852
+ "mfa.stepup_intro": "Diese Seite fragt erneut nach Ihrem zweiten Schritt. Geben Sie einen Code aus Ihrer Authenticator-App oder einen Wiederherstellungscode ein, oder verwenden Sie einen Passkey.",
853
+ "mfa.stepup_none": "Diese Seite erfordert die Anmeldung in zwei Schritten. Fügen Sie zuerst unter Mein Konto eine Authenticator-App oder einen Passkey hinzu.",
854
+ "mfa.my_account": "Mein Konto",
855
+ "mfa.passkey_default": "Passkey",
856
+ "mfa.add_passkey": "Passkey hinzufügen",
857
+ "mfa.passkey_intro": "Mit einem Passkey melden Sie sich per Fingerabdruck, Gesicht, Bildschirmsperre oder Sicherheitsschlüssel an, ohne einen Code einzugeben.",
858
+ "mfa.passkey_added": "Der Passkey wurde hinzugefügt.",
859
+ "mfa.passkey_removed": "Der Passkey wurde entfernt.",
860
+ "mfa.passkey_known": "Dieser Passkey wurde bereits hinzugefügt.",
861
+ "mfa.passkey_needs_host": "Passkeys erfordern, dass die Adresse der Anwendung ein Hostname ist, keine IP-Adresse.",
862
+ "mfa.passkey_needs_js": "Zum Hinzufügen eines Passkeys wird JavaScript benötigt.",
863
+ "mfa.or_passkey": "Oder fügen Sie stattdessen einen Passkey hinzu:",
864
+ "mfa.kind_passkey": "Passkey",
865
+ "mfa.kind_app": "Authenticator-App",
866
+ "token.title": "REST-API-Token",
867
+ "token.intro": "Mit einem Token nutzt ein Skript die REST-API dieser Anwendung in Ihrem Namen, bis es abläuft. Es wird nur einmal angezeigt.",
868
+ "token.needs_step": "Sie bestätigen zuerst erneut Ihren zweiten Schritt.",
869
+ "token.hours": "Gültig für (Stunden)",
870
+ "token.create": "Token erstellen",
871
+ "token.shown_once": "Ihr Token (wird einmal angezeigt, {hours} Std. gültig):",
872
+ "token.step_first": "Bestätigen Sie, dass Sie es sind, bevor Sie ein Token erstellen.",
808
873
  };
package/src/i18n/el.ts CHANGED
@@ -805,4 +805,69 @@ export const el: Record<MessageKey, string> = {
805
805
  'ai_filter.per_group': "{what} ανά ομάδα",
806
806
  'ai_filter.needs_number': "Η συνάρτηση {fn} χρειάζεται στήλη με αριθμούς.",
807
807
  'ai_filter.invalid': "Αυτή η αλλαγή δεν είναι δυνατή: {why}",
808
+ // (sprint 130) two-step sign-in
809
+ "mfa.step_title": "Σύνδεση δύο βημάτων",
810
+ "mfa.step_intro": "Πληκτρολογήστε τον 6ψήφιο κωδικό από την εφαρμογή ελέγχου ταυτότητας ή έναν από τους κωδικούς ανάκτησης.",
811
+ "mfa.code": "Κωδικός",
812
+ "mfa.verify": "Επαλήθευση",
813
+ "mfa.wrong": "Ο κωδικός δεν είναι σωστός ή έχει ήδη χρησιμοποιηθεί.",
814
+ "mfa.expired": "Η σύνδεση άργησε πολύ. Συνδεθείτε ξανά.",
815
+ "mfa.enrol_title": "Ρύθμιση σύνδεσης δύο βημάτων",
816
+ "mfa.enrol_intro": "Αυτή η εφαρμογή ζητά κωδικό από εφαρμογή ελέγχου ταυτότητας κατά τη σύνδεση. Προσθέστε μία τώρα για να συνεχίσετε.",
817
+ "mfa.scan": "Σαρώστε τον κωδικό QR με μια εφαρμογή ελέγχου ταυτότητας, όπως Google Authenticator, Microsoft Authenticator ή 1Password.",
818
+ "mfa.or_enter": "Ή πληκτρολογήστε αυτό το κλειδί:",
819
+ "mfa.enter_code": "Πληκτρολογήστε τον 6ψήφιο κωδικό που εμφανίζει η εφαρμογή.",
820
+ "mfa.qr_label": "Κωδικός QR για εφαρμογή ελέγχου ταυτότητας",
821
+ "mfa.codes_title": "Κωδικοί ανάκτησης",
822
+ "mfa.codes_once": "Φυλάξτε αυτούς τους κωδικούς σε ασφαλές μέρος. Ο καθένας σας συνδέει μία φορά όταν δεν έχετε το τηλέφωνό σας. Εμφανίζονται μόνο τώρα.",
823
+ "mfa.codes_saved": "Αποθήκευσα αυτούς τους κωδικούς",
824
+ "mfa.continue": "Συνέχεια",
825
+ "mfa.no_key": "Η σύνδεση δύο βημάτων δεν έχει ρυθμιστεί ακόμη σε αυτόν τον διακομιστή. Επικοινωνήστε με τον διαχειριστή.",
826
+ "mfa.app_name": "Όνομα",
827
+ "mfa.app_default": "Εφαρμογή ελέγχου ταυτότητας",
828
+ "mfa.on": "Κατά τη σύνδεση δίνετε επίσης έναν κωδικό από την εφαρμογή ελέγχου ταυτότητας.",
829
+ "mfa.off": "Προσθέστε μια εφαρμογή ελέγχου ταυτότητας για να προστατεύσετε τον λογαριασμό σας με δεύτερο βήμα κατά τη σύνδεση.",
830
+ "mfa.required_you": "Αυτή η εφαρμογή απαιτεί από εσάς σύνδεση δύο βημάτων: προσθέστε μια εφαρμογή ελέγχου ταυτότητας.",
831
+ "mfa.add_app": "Προσθήκη εφαρμογής ελέγχου ταυτότητας",
832
+ "mfa.confirm_app": "Προσθήκη εφαρμογής",
833
+ "mfa.cancel": "Ακύρωση",
834
+ "mfa.remove": "Κατάργηση",
835
+ "mfa.remove_code": "Ένας τρέχων κωδικός ή ένας κωδικός ανάκτησης",
836
+ "mfa.removed": "Η εφαρμογή ελέγχου ταυτότητας καταργήθηκε.",
837
+ "mfa.keep_one": "Αυτή η εφαρμογή απαιτεί από εσάς σύνδεση δύο βημάτων: προσθέστε άλλη εφαρμογή πριν καταργήσετε αυτήν.",
838
+ "mfa.added": "Η εφαρμογή ελέγχου ταυτότητας προστέθηκε.",
839
+ "mfa.codes_left": "Κωδικοί ανάκτησης που απομένουν: {n}",
840
+ "mfa.codes_new": "Νέοι κωδικοί ανάκτησης",
841
+ "mfa.recovery_used": "Συνδεθήκατε με κωδικό ανάκτησης. Κωδικοί ανάκτησης που απομένουν: {n}.",
842
+ // (sprint 131) passkeys, e-mail codes, step-up, API tokens
843
+ "mfa.on_any": "Κατά τη σύνδεση δίνετε επίσης έναν κωδικό ή χρησιμοποιείτε ένα κλειδί πρόσβασης.",
844
+ "mfa.use_passkey": "Χρήση κλειδιού πρόσβασης",
845
+ "mfa.passkey_failed": "Το κλειδί πρόσβασης δεν λειτούργησε. Δοκιμάστε ξανά ή εισαγάγετε έναν κωδικό.",
846
+ "mfa.email_send": "Στείλτε μου αντί αυτού κωδικό με email",
847
+ "mfa.email_sent": "Στείλαμε έναν κωδικό στη διεύθυνση email σας. Ισχύει για {minutes} λεπτά.",
848
+ "mfa.email_failed": "Δεν ήταν δυνατή η αποστολή κωδικού αυτή τη στιγμή. Χρησιμοποιήστε την εφαρμογή ελέγχου ταυτότητας, ένα κλειδί πρόσβασης ή έναν κωδικό ανάκτησης.",
849
+ "mfa.email_subject": "Ο κωδικός σύνδεσής σας για {app}",
850
+ "mfa.email_body": "Ο κωδικός σύνδεσής σας για {app} είναι {code}. Ισχύει για {minutes} λεπτά.\n\nΑν δεν προσπαθήσατε να συνδεθείτε, αλλάξτε τον κωδικό πρόσβασής σας.",
851
+ "mfa.stepup_title": "Επιβεβαιώστε ότι είστε εσείς",
852
+ "mfa.stepup_intro": "Αυτή η σελίδα ζητά ξανά το δεύτερο βήμα σας. Εισαγάγετε έναν κωδικό από την εφαρμογή ελέγχου ταυτότητας ή έναν κωδικό ανάκτησης, ή χρησιμοποιήστε ένα κλειδί πρόσβασης.",
853
+ "mfa.stepup_none": "Αυτή η σελίδα απαιτεί σύνδεση σε δύο βήματα. Προσθέστε πρώτα μια εφαρμογή ελέγχου ταυτότητας ή ένα κλειδί πρόσβασης στον Λογαριασμό μου.",
854
+ "mfa.my_account": "Ο λογαριασμός μου",
855
+ "mfa.passkey_default": "Κλειδί πρόσβασης",
856
+ "mfa.add_passkey": "Προσθήκη κλειδιού πρόσβασης",
857
+ "mfa.passkey_intro": "Με ένα κλειδί πρόσβασης συνδέεστε με το δακτυλικό αποτύπωμα, το πρόσωπο, το κλείδωμα οθόνης ή ένα κλειδί ασφαλείας, χωρίς να πληκτρολογείτε κωδικό.",
858
+ "mfa.passkey_added": "Το κλειδί πρόσβασης προστέθηκε.",
859
+ "mfa.passkey_removed": "Το κλειδί πρόσβασης αφαιρέθηκε.",
860
+ "mfa.passkey_known": "Αυτό το κλειδί πρόσβασης έχει ήδη προστεθεί.",
861
+ "mfa.passkey_needs_host": "Τα κλειδιά πρόσβασης απαιτούν η διεύθυνση της εφαρμογής να είναι όνομα κεντρικού υπολογιστή, όχι διεύθυνση IP.",
862
+ "mfa.passkey_needs_js": "Η προσθήκη κλειδιού πρόσβασης απαιτεί JavaScript.",
863
+ "mfa.or_passkey": "Ή προσθέστε αντί αυτού ένα κλειδί πρόσβασης:",
864
+ "mfa.kind_passkey": "Κλειδί πρόσβασης",
865
+ "mfa.kind_app": "Εφαρμογή ελέγχου ταυτότητας",
866
+ "token.title": "Διακριτικό REST API",
867
+ "token.intro": "Ένα διακριτικό επιτρέπει σε ένα σενάριο να χρησιμοποιεί το REST API αυτής της εφαρμογής ως εσάς, μέχρι να λήξει. Εμφανίζεται μόνο μία φορά.",
868
+ "token.needs_step": "Πρώτα δίνετε ξανά το δεύτερο βήμα σας.",
869
+ "token.hours": "Ισχύει για (ώρες)",
870
+ "token.create": "Δημιουργία διακριτικού",
871
+ "token.shown_once": "Το διακριτικό σας (εμφανίζεται μία φορά, ισχύει {hours} ώρες):",
872
+ "token.step_first": "Επιβεβαιώστε ότι είστε εσείς πριν δημιουργήσετε διακριτικό.",
808
873
  };
package/src/i18n/es.ts CHANGED
@@ -805,4 +805,69 @@ export const es: Record<MessageKey, string> = {
805
805
  'ai_filter.per_group': "{what} por grupo",
806
806
  'ai_filter.needs_number': "{fn} necesita una columna con números.",
807
807
  'ai_filter.invalid': "Ese cambio no es posible: {why}",
808
+ // (sprint 130) two-step sign-in
809
+ "mfa.step_title": "Inicio de sesión en dos pasos",
810
+ "mfa.step_intro": "Introduzca el código de 6 dígitos de su aplicación de autenticación, o uno de sus códigos de recuperación.",
811
+ "mfa.code": "Código",
812
+ "mfa.verify": "Verificar",
813
+ "mfa.wrong": "Ese código no es correcto o ya se ha utilizado.",
814
+ "mfa.expired": "El inicio de sesión tardó demasiado. Vuelva a iniciar sesión.",
815
+ "mfa.enrol_title": "Configurar el inicio de sesión en dos pasos",
816
+ "mfa.enrol_intro": "Esta aplicación pide un código de una aplicación de autenticación al iniciar sesión. Añada una ahora para continuar.",
817
+ "mfa.scan": "Escanee el código QR con una aplicación de autenticación, como Google Authenticator, Microsoft Authenticator o 1Password.",
818
+ "mfa.or_enter": "O introduzca esta clave:",
819
+ "mfa.enter_code": "Introduzca el código de 6 dígitos que muestra la aplicación.",
820
+ "mfa.qr_label": "Código QR para una aplicación de autenticación",
821
+ "mfa.codes_title": "Códigos de recuperación",
822
+ "mfa.codes_once": "Guarde estos códigos en un lugar seguro. Cada uno le permite iniciar sesión una vez si no tiene su teléfono. Solo se muestran ahora.",
823
+ "mfa.codes_saved": "He guardado estos códigos",
824
+ "mfa.continue": "Continuar",
825
+ "mfa.no_key": "El inicio de sesión en dos pasos aún no está configurado en este servidor. Consulte al administrador.",
826
+ "mfa.app_name": "Nombre",
827
+ "mfa.app_default": "Aplicación de autenticación",
828
+ "mfa.on": "Al iniciar sesión, también introduce un código de su aplicación de autenticación.",
829
+ "mfa.off": "Añada una aplicación de autenticación para proteger su cuenta con un segundo paso al iniciar sesión.",
830
+ "mfa.required_you": "Esta aplicación le exige el inicio de sesión en dos pasos: añada una aplicación de autenticación.",
831
+ "mfa.add_app": "Añadir una aplicación de autenticación",
832
+ "mfa.confirm_app": "Añadir aplicación",
833
+ "mfa.cancel": "Cancelar",
834
+ "mfa.remove": "Quitar",
835
+ "mfa.remove_code": "Un código actual o un código de recuperación",
836
+ "mfa.removed": "Se quitó la aplicación de autenticación.",
837
+ "mfa.keep_one": "Esta aplicación le exige el inicio de sesión en dos pasos: añada otra aplicación antes de quitar esta.",
838
+ "mfa.added": "Se añadió la aplicación de autenticación.",
839
+ "mfa.codes_left": "Códigos de recuperación restantes: {n}",
840
+ "mfa.codes_new": "Nuevos códigos de recuperación",
841
+ "mfa.recovery_used": "Ha iniciado sesión con un código de recuperación. Códigos de recuperación restantes: {n}.",
842
+ // (sprint 131) passkeys, e-mail codes, step-up, API tokens
843
+ "mfa.on_any": "Al iniciar sesión, también introduce un código o usa una clave de acceso.",
844
+ "mfa.use_passkey": "Usar una clave de acceso",
845
+ "mfa.passkey_failed": "La clave de acceso no funcionó. Inténtelo de nuevo o introduzca un código.",
846
+ "mfa.email_send": "Enviarme un código por correo electrónico",
847
+ "mfa.email_sent": "Hemos enviado un código a su dirección de correo. Es válido durante {minutes} minutos.",
848
+ "mfa.email_failed": "Ahora no se pudo enviar ningún código. Use su aplicación de autenticación, una clave de acceso o un código de recuperación.",
849
+ "mfa.email_subject": "Su código de inicio de sesión para {app}",
850
+ "mfa.email_body": "Su código de inicio de sesión para {app} es {code}. Es válido durante {minutes} minutos.\n\nSi no intentó iniciar sesión, cambie su contraseña.",
851
+ "mfa.stepup_title": "Confirme que es usted",
852
+ "mfa.stepup_intro": "Esta página vuelve a pedir su segundo paso. Introduzca un código de su aplicación de autenticación o un código de recuperación, o use una clave de acceso.",
853
+ "mfa.stepup_none": "Esta página requiere el inicio de sesión en dos pasos. Primero añada una aplicación de autenticación o una clave de acceso en Mi cuenta.",
854
+ "mfa.my_account": "Mi cuenta",
855
+ "mfa.passkey_default": "Clave de acceso",
856
+ "mfa.add_passkey": "Añadir una clave de acceso",
857
+ "mfa.passkey_intro": "Una clave de acceso le permite iniciar sesión con su huella, su cara, el bloqueo de pantalla o una llave de seguridad, sin escribir un código.",
858
+ "mfa.passkey_added": "Se ha añadido la clave de acceso.",
859
+ "mfa.passkey_removed": "Se ha eliminado la clave de acceso.",
860
+ "mfa.passkey_known": "Esta clave de acceso ya estaba añadida.",
861
+ "mfa.passkey_needs_host": "Las claves de acceso requieren que la dirección de la aplicación sea un nombre de host, no una dirección IP.",
862
+ "mfa.passkey_needs_js": "Añadir una clave de acceso requiere JavaScript.",
863
+ "mfa.or_passkey": "O añada en su lugar una clave de acceso:",
864
+ "mfa.kind_passkey": "Clave de acceso",
865
+ "mfa.kind_app": "Aplicación de autenticación",
866
+ "token.title": "Token de la API REST",
867
+ "token.intro": "Un token permite a un script usar la API REST de esta aplicación en su nombre hasta que caduque. Solo se muestra una vez.",
868
+ "token.needs_step": "Primero vuelve a dar su segundo paso.",
869
+ "token.hours": "Válido durante (horas)",
870
+ "token.create": "Crear token",
871
+ "token.shown_once": "Su token (se muestra una vez, válido {hours} h):",
872
+ "token.step_first": "Confirme que es usted antes de crear un token.",
808
873
  };
package/src/i18n/fi.ts CHANGED
@@ -805,4 +805,69 @@ export const fi: Record<MessageKey, string> = {
805
805
  'ai_filter.per_group': "{what} ryhmää kohden",
806
806
  'ai_filter.needs_number': "{fn} vaatii numerosarakkeen.",
807
807
  'ai_filter.invalid': "Muutos ei ole mahdollinen: {why}",
808
+ // (sprint 130) two-step sign-in
809
+ "mfa.step_title": "Kaksivaiheinen kirjautuminen",
810
+ "mfa.step_intro": "Anna todennussovelluksen 6-numeroinen koodi tai jokin palautuskoodeistasi.",
811
+ "mfa.code": "Koodi",
812
+ "mfa.verify": "Vahvista",
813
+ "mfa.wrong": "Koodi on väärä tai se on jo käytetty.",
814
+ "mfa.expired": "Kirjautuminen kesti liian kauan. Kirjaudu uudelleen.",
815
+ "mfa.enrol_title": "Ota kaksivaiheinen kirjautuminen käyttöön",
816
+ "mfa.enrol_intro": "Tämä sovellus pyytää kirjautuessa koodia todennussovelluksesta. Lisää sellainen nyt jatkaaksesi.",
817
+ "mfa.scan": "Skannaa QR-koodi todennussovelluksella, kuten Google Authenticator, Microsoft Authenticator tai 1Password.",
818
+ "mfa.or_enter": "Tai anna tämä avain:",
819
+ "mfa.enter_code": "Anna sovelluksen näyttämä 6-numeroinen koodi.",
820
+ "mfa.qr_label": "QR-koodi todennussovellukselle",
821
+ "mfa.codes_title": "Palautuskoodit",
822
+ "mfa.codes_once": "Säilytä koodit turvallisessa paikassa. Kukin kirjaa sinut sisään kerran, kun puhelin ei ole käsillä. Ne näytetään vain nyt.",
823
+ "mfa.codes_saved": "Olen tallentanut koodit",
824
+ "mfa.continue": "Jatka",
825
+ "mfa.no_key": "Kaksivaiheista kirjautumista ei ole vielä otettu käyttöön tällä palvelimella. Ota yhteyttä ylläpitäjään.",
826
+ "mfa.app_name": "Nimi",
827
+ "mfa.app_default": "Todennussovellus",
828
+ "mfa.on": "Kirjautuessa annat myös koodin todennussovelluksesta.",
829
+ "mfa.off": "Lisää todennussovellus suojataksesi tilisi kirjautumisen toisella vaiheella.",
830
+ "mfa.required_you": "Tämä sovellus edellyttää sinulta kaksivaiheista kirjautumista: lisää todennussovellus.",
831
+ "mfa.add_app": "Lisää todennussovellus",
832
+ "mfa.confirm_app": "Lisää sovellus",
833
+ "mfa.cancel": "Peruuta",
834
+ "mfa.remove": "Poista",
835
+ "mfa.remove_code": "Voimassa oleva koodi tai palautuskoodi",
836
+ "mfa.removed": "Todennussovellus poistettiin.",
837
+ "mfa.keep_one": "Tämä sovellus edellyttää sinulta kaksivaiheista kirjautumista: lisää toinen sovellus ennen tämän poistamista.",
838
+ "mfa.added": "Todennussovellus lisättiin.",
839
+ "mfa.codes_left": "Palautuskoodeja jäljellä: {n}",
840
+ "mfa.codes_new": "Uudet palautuskoodit",
841
+ "mfa.recovery_used": "Kirjauduit palautuskoodilla. Palautuskoodeja jäljellä: {n}.",
842
+ // (sprint 131) passkeys, e-mail codes, step-up, API tokens
843
+ "mfa.on_any": "Kirjautuessasi annat myös koodin tai käytät pääsyavainta.",
844
+ "mfa.use_passkey": "Käytä pääsyavainta",
845
+ "mfa.passkey_failed": "Pääsyavain ei toiminut. Yritä uudelleen tai anna koodi.",
846
+ "mfa.email_send": "Lähetä minulle koodi sähköpostilla",
847
+ "mfa.email_sent": "Lähetimme koodin sähköpostiosoitteeseesi. Se on voimassa {minutes} minuuttia.",
848
+ "mfa.email_failed": "Koodia ei voitu lähettää juuri nyt. Käytä todennussovellusta, pääsyavainta tai palautuskoodia.",
849
+ "mfa.email_subject": "Kirjautumiskoodisi sovellukseen {app}",
850
+ "mfa.email_body": "Kirjautumiskoodisi sovellukseen {app} on {code}. Se on voimassa {minutes} minuuttia.\n\nJos et yrittänyt kirjautua, vaihda salasanasi.",
851
+ "mfa.stepup_title": "Vahvista, että se olet sinä",
852
+ "mfa.stepup_intro": "Tämä sivu pyytää toista vaihettasi uudelleen. Anna koodi todennussovelluksesta tai palautuskoodi, tai käytä pääsyavainta.",
853
+ "mfa.stepup_none": "Tämä sivu vaatii kaksivaiheisen kirjautumisen. Lisää ensin todennussovellus tai pääsyavain kohdassa Oma tili.",
854
+ "mfa.my_account": "Oma tili",
855
+ "mfa.passkey_default": "Pääsyavain",
856
+ "mfa.add_passkey": "Lisää pääsyavain",
857
+ "mfa.passkey_intro": "Pääsyavaimella kirjaudut sormenjäljellä, kasvoilla, näytön lukituksella tai suojausavaimella kirjoittamatta koodia.",
858
+ "mfa.passkey_added": "Pääsyavain lisättiin.",
859
+ "mfa.passkey_removed": "Pääsyavain poistettiin.",
860
+ "mfa.passkey_known": "Tämä pääsyavain on jo lisätty.",
861
+ "mfa.passkey_needs_host": "Pääsyavaimet edellyttävät, että sovelluksen osoite on isäntänimi eikä IP-osoite.",
862
+ "mfa.passkey_needs_js": "Pääsyavaimen lisääminen vaatii JavaScriptin.",
863
+ "mfa.or_passkey": "Tai lisää sen sijaan pääsyavain:",
864
+ "mfa.kind_passkey": "Pääsyavain",
865
+ "mfa.kind_app": "Todennussovellus",
866
+ "token.title": "REST API -tunnus",
867
+ "token.intro": "Tunnuksella skripti voi käyttää tämän sovelluksen REST API:a sinuna, kunnes se vanhenee. Se näytetään vain kerran.",
868
+ "token.needs_step": "Annat ensin toisen vaiheesi uudelleen.",
869
+ "token.hours": "Voimassa (tuntia)",
870
+ "token.create": "Luo tunnus",
871
+ "token.shown_once": "Tunnuksesi (näytetään kerran, voimassa {hours} h):",
872
+ "token.step_first": "Vahvista, että se olet sinä, ennen kuin luot tunnuksen.",
808
873
  };
package/src/i18n/fr.ts CHANGED
@@ -805,4 +805,69 @@ export const fr: Record<MessageKey, string> = {
805
805
  'ai_filter.per_group': "{what} par groupe",
806
806
  'ai_filter.needs_number': "{fn} demande une colonne de nombres.",
807
807
  'ai_filter.invalid': "Cette modification n'est pas possible : {why}",
808
+ // (sprint 130) two-step sign-in
809
+ "mfa.step_title": "Connexion en deux étapes",
810
+ "mfa.step_intro": "Saisissez le code à 6 chiffres de votre application d'authentification, ou l'un de vos codes de récupération.",
811
+ "mfa.code": "Code",
812
+ "mfa.verify": "Vérifier",
813
+ "mfa.wrong": "Ce code est incorrect ou a déjà été utilisé.",
814
+ "mfa.expired": "La connexion a pris trop de temps. Veuillez vous reconnecter.",
815
+ "mfa.enrol_title": "Configurer la connexion en deux étapes",
816
+ "mfa.enrol_intro": "Cette application demande un code d'une application d'authentification à la connexion. Ajoutez-en une maintenant pour continuer.",
817
+ "mfa.scan": "Scannez le code QR avec une application d'authentification, comme Google Authenticator, Microsoft Authenticator ou 1Password.",
818
+ "mfa.or_enter": "Ou saisissez cette clé :",
819
+ "mfa.enter_code": "Saisissez le code à 6 chiffres affiché par l'application.",
820
+ "mfa.qr_label": "Code QR pour une application d'authentification",
821
+ "mfa.codes_title": "Codes de récupération",
822
+ "mfa.codes_once": "Conservez ces codes en lieu sûr. Chacun vous connecte une fois si vous n'avez pas votre téléphone. Ils ne sont affichés que maintenant.",
823
+ "mfa.codes_saved": "J'ai enregistré ces codes",
824
+ "mfa.continue": "Continuer",
825
+ "mfa.no_key": "La connexion en deux étapes n'est pas encore configurée sur ce serveur. Contactez l'administrateur.",
826
+ "mfa.app_name": "Nom",
827
+ "mfa.app_default": "Application d'authentification",
828
+ "mfa.on": "À la connexion, vous saisissez aussi un code de votre application d'authentification.",
829
+ "mfa.off": "Ajoutez une application d'authentification pour protéger votre compte par une deuxième étape à la connexion.",
830
+ "mfa.required_you": "Cette application exige pour vous la connexion en deux étapes : ajoutez une application d'authentification.",
831
+ "mfa.add_app": "Ajouter une application d'authentification",
832
+ "mfa.confirm_app": "Ajouter l'application",
833
+ "mfa.cancel": "Annuler",
834
+ "mfa.remove": "Supprimer",
835
+ "mfa.remove_code": "Un code actuel ou un code de récupération",
836
+ "mfa.removed": "L'application d'authentification a été supprimée.",
837
+ "mfa.keep_one": "Cette application exige pour vous la connexion en deux étapes : ajoutez une autre application avant de supprimer celle-ci.",
838
+ "mfa.added": "L'application d'authentification a été ajoutée.",
839
+ "mfa.codes_left": "Codes de récupération restants : {n}",
840
+ "mfa.codes_new": "Nouveaux codes de récupération",
841
+ "mfa.recovery_used": "Vous vous êtes connecté avec un code de récupération. Codes de récupération restants : {n}.",
842
+ // (sprint 131) passkeys, e-mail codes, step-up, API tokens
843
+ "mfa.on_any": "À la connexion, vous saisissez aussi un code ou utilisez une clé d'accès.",
844
+ "mfa.use_passkey": "Utiliser une clé d'accès",
845
+ "mfa.passkey_failed": "La clé d'accès n'a pas fonctionné. Réessayez ou saisissez un code.",
846
+ "mfa.email_send": "M'envoyer plutôt un code par e-mail",
847
+ "mfa.email_sent": "Nous avons envoyé un code à votre adresse e-mail. Il est valable {minutes} minutes.",
848
+ "mfa.email_failed": "Aucun code n'a pu être envoyé pour le moment. Utilisez votre application d'authentification, une clé d'accès ou un code de récupération.",
849
+ "mfa.email_subject": "Votre code de connexion pour {app}",
850
+ "mfa.email_body": "Votre code de connexion pour {app} est {code}. Il est valable {minutes} minutes.\n\nSi vous n'avez pas essayé de vous connecter, changez votre mot de passe.",
851
+ "mfa.stepup_title": "Confirmez votre identité",
852
+ "mfa.stepup_intro": "Cette page redemande votre deuxième étape. Saisissez un code de votre application d'authentification ou un code de récupération, ou utilisez une clé d'accès.",
853
+ "mfa.stepup_none": "Cette page exige la connexion en deux étapes. Ajoutez d'abord une application d'authentification ou une clé d'accès dans Mon compte.",
854
+ "mfa.my_account": "Mon compte",
855
+ "mfa.passkey_default": "Clé d'accès",
856
+ "mfa.add_passkey": "Ajouter une clé d'accès",
857
+ "mfa.passkey_intro": "Une clé d'accès vous connecte avec votre empreinte, votre visage, le verrouillage de l'écran ou une clé de sécurité, sans saisir de code.",
858
+ "mfa.passkey_added": "La clé d'accès a été ajoutée.",
859
+ "mfa.passkey_removed": "La clé d'accès a été supprimée.",
860
+ "mfa.passkey_known": "Cette clé d'accès a déjà été ajoutée.",
861
+ "mfa.passkey_needs_host": "Les clés d'accès exigent que l'adresse de l'application soit un nom d'hôte, pas une adresse IP.",
862
+ "mfa.passkey_needs_js": "L'ajout d'une clé d'accès nécessite JavaScript.",
863
+ "mfa.or_passkey": "Ou ajoutez plutôt une clé d'accès :",
864
+ "mfa.kind_passkey": "Clé d'accès",
865
+ "mfa.kind_app": "Application d'authentification",
866
+ "token.title": "Jeton d'API REST",
867
+ "token.intro": "Un jeton permet à un script d'utiliser l'API REST de cette application en votre nom, jusqu'à son expiration. Il n'est affiché qu'une fois.",
868
+ "token.needs_step": "Vous confirmez d'abord à nouveau votre deuxième étape.",
869
+ "token.hours": "Valable (heures)",
870
+ "token.create": "Créer un jeton",
871
+ "token.shown_once": "Votre jeton (affiché une fois, valable {hours} h) :",
872
+ "token.step_first": "Confirmez votre identité avant de créer un jeton.",
808
873
  };