diff --git a/crates/i18n/src/translator.rs b/crates/i18n/src/translator.rs index 07415ff26..68afb1793 100644 --- a/crates/i18n/src/translator.rs +++ b/crates/i18n/src/translator.rs @@ -345,8 +345,8 @@ impl Translator { /// Get a list of available locales. #[must_use] - pub fn available_locales(&self) -> Vec<&DataLocale> { - self.translations.keys().collect() + pub fn available_locales(&self) -> Vec { + self.translations.keys().cloned().collect() } /// Check if a locale is available. diff --git a/crates/templates/src/context.rs b/crates/templates/src/context.rs index 345c8bf01..8c538a62a 100644 --- a/crates/templates/src/context.rs +++ b/crates/templates/src/context.rs @@ -105,13 +105,17 @@ pub trait TemplateContext: Serialize { /// /// This is then used to check for template validity in unit tests and in /// the CLI (`cargo run -- templates check`) - fn sample(now: chrono::DateTime, rng: &mut impl Rng) -> Vec + fn sample(now: chrono::DateTime, rng: &mut impl Rng, locales: &[DataLocale]) -> Vec where Self: Sized; } impl TemplateContext for () { - fn sample(_now: chrono::DateTime, _rng: &mut impl Rng) -> Vec + fn sample( + _now: chrono::DateTime, + _rng: &mut impl Rng, + _locales: &[DataLocale], + ) -> Vec where Self: Sized, { @@ -144,15 +148,19 @@ impl std::ops::Deref for WithLanguage { } impl TemplateContext for WithLanguage { - fn sample(now: chrono::DateTime, rng: &mut impl Rng) -> Vec + fn sample(now: chrono::DateTime, rng: &mut impl Rng, locales: &[DataLocale]) -> Vec where Self: Sized, { - T::sample(now, rng) - .into_iter() - .map(|inner| WithLanguage { - lang: "en".into(), - inner, + locales + .iter() + .flat_map(|locale| { + T::sample(now, rng, locales) + .into_iter() + .map(move |inner| WithLanguage { + lang: locale.to_string(), + inner, + }) }) .collect() } @@ -168,11 +176,11 @@ pub struct WithCsrf { } impl TemplateContext for WithCsrf { - fn sample(now: chrono::DateTime, rng: &mut impl Rng) -> Vec + fn sample(now: chrono::DateTime, rng: &mut impl Rng, locales: &[DataLocale]) -> Vec where Self: Sized, { - T::sample(now, rng) + T::sample(now, rng, locales) .into_iter() .map(|inner| WithCsrf { csrf_token: "fake_csrf_token".into(), @@ -192,14 +200,14 @@ pub struct WithSession { } impl TemplateContext for WithSession { - fn sample(now: chrono::DateTime, rng: &mut impl Rng) -> Vec + fn sample(now: chrono::DateTime, rng: &mut impl Rng, locales: &[DataLocale]) -> Vec where Self: Sized, { BrowserSession::samples(now, rng) .into_iter() .flat_map(|session| { - T::sample(now, rng) + T::sample(now, rng, locales) .into_iter() .map(move |inner| WithSession { current_session: session.clone(), @@ -220,7 +228,7 @@ pub struct WithOptionalSession { } impl TemplateContext for WithOptionalSession { - fn sample(now: chrono::DateTime, rng: &mut impl Rng) -> Vec + fn sample(now: chrono::DateTime, rng: &mut impl Rng, locales: &[DataLocale]) -> Vec where Self: Sized, { @@ -229,7 +237,7 @@ impl TemplateContext for WithOptionalSession { .map(Some) // Wrap all samples in an Option .chain(std::iter::once(None)) // Add the "None" option .flat_map(|session| { - T::sample(now, rng) + T::sample(now, rng, locales) .into_iter() .map(move |inner| WithOptionalSession { current_session: session.clone(), @@ -257,7 +265,11 @@ impl Serialize for EmptyContext { } impl TemplateContext for EmptyContext { - fn sample(_now: chrono::DateTime, _rng: &mut impl Rng) -> Vec + fn sample( + _now: chrono::DateTime, + _rng: &mut impl Rng, + _locales: &[DataLocale], + ) -> Vec where Self: Sized, { @@ -281,7 +293,11 @@ impl IndexContext { } impl TemplateContext for IndexContext { - fn sample(_now: chrono::DateTime, _rng: &mut impl Rng) -> Vec + fn sample( + _now: chrono::DateTime, + _rng: &mut impl Rng, + _locales: &[DataLocale], + ) -> Vec where Self: Sized, { @@ -323,7 +339,11 @@ impl AppContext { } impl TemplateContext for AppContext { - fn sample(_now: chrono::DateTime, _rng: &mut impl Rng) -> Vec + fn sample( + _now: chrono::DateTime, + _rng: &mut impl Rng, + _locales: &[DataLocale], + ) -> Vec where Self: Sized, { @@ -352,7 +372,11 @@ impl ApiDocContext { } impl TemplateContext for ApiDocContext { - fn sample(_now: chrono::DateTime, _rng: &mut impl Rng) -> Vec + fn sample( + _now: chrono::DateTime, + _rng: &mut impl Rng, + _locales: &[DataLocale], + ) -> Vec where Self: Sized, { @@ -440,7 +464,11 @@ pub struct LoginContext { } impl TemplateContext for LoginContext { - fn sample(_now: chrono::DateTime, _rng: &mut impl Rng) -> Vec + fn sample( + _now: chrono::DateTime, + _rng: &mut impl Rng, + _locales: &[DataLocale], + ) -> Vec where Self: Sized, { @@ -544,7 +572,11 @@ pub struct RegisterContext { } impl TemplateContext for RegisterContext { - fn sample(_now: chrono::DateTime, _rng: &mut impl Rng) -> Vec + fn sample( + _now: chrono::DateTime, + _rng: &mut impl Rng, + _locales: &[DataLocale], + ) -> Vec where Self: Sized, { @@ -583,7 +615,11 @@ pub struct PasswordRegisterContext { } impl TemplateContext for PasswordRegisterContext { - fn sample(_now: chrono::DateTime, _rng: &mut impl Rng) -> Vec + fn sample( + _now: chrono::DateTime, + _rng: &mut impl Rng, + _locales: &[DataLocale], + ) -> Vec where Self: Sized, { @@ -621,7 +657,7 @@ pub struct ConsentContext { } impl TemplateContext for ConsentContext { - fn sample(now: chrono::DateTime, rng: &mut impl Rng) -> Vec + fn sample(now: chrono::DateTime, rng: &mut impl Rng, _locales: &[DataLocale]) -> Vec where Self: Sized, { @@ -673,7 +709,7 @@ pub struct PolicyViolationContext { } impl TemplateContext for PolicyViolationContext { - fn sample(now: chrono::DateTime, rng: &mut impl Rng) -> Vec + fn sample(now: chrono::DateTime, rng: &mut impl Rng, _locales: &[DataLocale]) -> Vec where Self: Sized, { @@ -742,7 +778,7 @@ pub struct CompatSsoContext { } impl TemplateContext for CompatSsoContext { - fn sample(now: chrono::DateTime, rng: &mut impl Rng) -> Vec + fn sample(now: chrono::DateTime, rng: &mut impl Rng, _locales: &[DataLocale]) -> Vec where Self: Sized, { @@ -800,7 +836,7 @@ impl EmailRecoveryContext { } impl TemplateContext for EmailRecoveryContext { - fn sample(now: chrono::DateTime, rng: &mut impl Rng) -> Vec + fn sample(now: chrono::DateTime, rng: &mut impl Rng, _locales: &[DataLocale]) -> Vec where Self: Sized, { @@ -861,7 +897,7 @@ impl EmailVerificationContext { } impl TemplateContext for EmailVerificationContext { - fn sample(now: chrono::DateTime, rng: &mut impl Rng) -> Vec + fn sample(now: chrono::DateTime, rng: &mut impl Rng, _locales: &[DataLocale]) -> Vec where Self: Sized, { @@ -927,7 +963,7 @@ impl RegisterStepsVerifyEmailContext { } impl TemplateContext for RegisterStepsVerifyEmailContext { - fn sample(now: chrono::DateTime, rng: &mut impl Rng) -> Vec + fn sample(now: chrono::DateTime, rng: &mut impl Rng, _locales: &[DataLocale]) -> Vec where Self: Sized, { @@ -963,7 +999,11 @@ impl RegisterStepsEmailInUseContext { } impl TemplateContext for RegisterStepsEmailInUseContext { - fn sample(_now: chrono::DateTime, _rng: &mut impl Rng) -> Vec + fn sample( + _now: chrono::DateTime, + _rng: &mut impl Rng, + _locales: &[DataLocale], + ) -> Vec where Self: Sized, { @@ -1014,7 +1054,11 @@ impl RegisterStepsDisplayNameContext { } impl TemplateContext for RegisterStepsDisplayNameContext { - fn sample(_now: chrono::DateTime, _rng: &mut impl Rng) -> Vec + fn sample( + _now: chrono::DateTime, + _rng: &mut impl Rng, + _locales: &[DataLocale], + ) -> Vec where Self: Sized, { @@ -1061,7 +1105,11 @@ impl RecoveryStartContext { } impl TemplateContext for RecoveryStartContext { - fn sample(_now: chrono::DateTime, _rng: &mut impl Rng) -> Vec + fn sample( + _now: chrono::DateTime, + _rng: &mut impl Rng, + _locales: &[DataLocale], + ) -> Vec where Self: Sized, { @@ -1099,7 +1147,7 @@ impl RecoveryProgressContext { } impl TemplateContext for RecoveryProgressContext { - fn sample(now: chrono::DateTime, rng: &mut impl Rng) -> Vec + fn sample(now: chrono::DateTime, rng: &mut impl Rng, _locales: &[DataLocale]) -> Vec where Self: Sized, { @@ -1141,7 +1189,7 @@ impl RecoveryExpiredContext { } impl TemplateContext for RecoveryExpiredContext { - fn sample(now: chrono::DateTime, rng: &mut impl Rng) -> Vec + fn sample(now: chrono::DateTime, rng: &mut impl Rng, _locales: &[DataLocale]) -> Vec where Self: Sized, { @@ -1202,7 +1250,7 @@ impl RecoveryFinishContext { } impl TemplateContext for RecoveryFinishContext { - fn sample(now: chrono::DateTime, rng: &mut impl Rng) -> Vec + fn sample(now: chrono::DateTime, rng: &mut impl Rng, _locales: &[DataLocale]) -> Vec where Self: Sized, { @@ -1245,7 +1293,7 @@ impl UpstreamExistingLinkContext { } impl TemplateContext for UpstreamExistingLinkContext { - fn sample(now: chrono::DateTime, rng: &mut impl Rng) -> Vec + fn sample(now: chrono::DateTime, rng: &mut impl Rng, _locales: &[DataLocale]) -> Vec where Self: Sized, { @@ -1277,7 +1325,7 @@ impl UpstreamSuggestLink { } impl TemplateContext for UpstreamSuggestLink { - fn sample(now: chrono::DateTime, rng: &mut impl Rng) -> Vec + fn sample(now: chrono::DateTime, rng: &mut impl Rng, _locales: &[DataLocale]) -> Vec where Self: Sized, { @@ -1402,7 +1450,7 @@ impl UpstreamRegister { } impl TemplateContext for UpstreamRegister { - fn sample(now: chrono::DateTime, _rng: &mut impl Rng) -> Vec + fn sample(now: chrono::DateTime, _rng: &mut impl Rng, _locales: &[DataLocale]) -> Vec where Self: Sized, { @@ -1482,7 +1530,11 @@ impl DeviceLinkContext { } impl TemplateContext for DeviceLinkContext { - fn sample(_now: chrono::DateTime, _rng: &mut impl Rng) -> Vec + fn sample( + _now: chrono::DateTime, + _rng: &mut impl Rng, + _locales: &[DataLocale], + ) -> Vec where Self: Sized, { @@ -1512,7 +1564,7 @@ impl DeviceConsentContext { } impl TemplateContext for DeviceConsentContext { - fn sample(now: chrono::DateTime, rng: &mut impl Rng) -> Vec + fn sample(now: chrono::DateTime, rng: &mut impl Rng, _locales: &[DataLocale]) -> Vec where Self: Sized, { @@ -1553,7 +1605,7 @@ impl AccountInactiveContext { } impl TemplateContext for AccountInactiveContext { - fn sample(now: chrono::DateTime, rng: &mut impl Rng) -> Vec + fn sample(now: chrono::DateTime, rng: &mut impl Rng, _locales: &[DataLocale]) -> Vec where Self: Sized, { @@ -1583,7 +1635,7 @@ impl DeviceNameContext { } impl TemplateContext for DeviceNameContext { - fn sample(now: chrono::DateTime, rng: &mut impl Rng) -> Vec + fn sample(now: chrono::DateTime, rng: &mut impl Rng, _locales: &[DataLocale]) -> Vec where Self: Sized, { @@ -1605,11 +1657,11 @@ pub struct FormPostContext { } impl TemplateContext for FormPostContext { - fn sample(now: chrono::DateTime, rng: &mut impl Rng) -> Vec + fn sample(now: chrono::DateTime, rng: &mut impl Rng, locales: &[DataLocale]) -> Vec where Self: Sized, { - let sample_params = T::sample(now, rng); + let sample_params = T::sample(now, rng, locales); sample_params .into_iter() .map(|params| FormPostContext { @@ -1678,7 +1730,11 @@ impl std::fmt::Display for ErrorContext { } impl TemplateContext for ErrorContext { - fn sample(_now: chrono::DateTime, _rng: &mut impl Rng) -> Vec + fn sample( + _now: chrono::DateTime, + _rng: &mut impl Rng, + _locales: &[DataLocale], + ) -> Vec where Self: Sized, { @@ -1768,7 +1824,7 @@ impl NotFoundContext { } impl TemplateContext for NotFoundContext { - fn sample(_now: DateTime, _rng: &mut impl Rng) -> Vec + fn sample(_now: DateTime, _rng: &mut impl Rng, _locales: &[DataLocale]) -> Vec where Self: Sized, { diff --git a/crates/templates/src/context/captcha.rs b/crates/templates/src/context/captcha.rs index 4e8c9f726..38d723ca0 100644 --- a/crates/templates/src/context/captcha.rs +++ b/crates/templates/src/context/captcha.rs @@ -6,6 +6,7 @@ use std::sync::Arc; +use mas_i18n::DataLocale; use minijinja::{ Value, value::{Enumerator, Object}, @@ -60,11 +61,12 @@ impl TemplateContext for WithCaptcha { fn sample( now: chrono::DateTime, rng: &mut impl rand::prelude::Rng, + locales: &[DataLocale], ) -> Vec where Self: Sized, { - let inner = T::sample(now, rng); + let inner = T::sample(now, rng, locales); inner .into_iter() .map(|inner| Self::new(None, inner)) diff --git a/crates/templates/src/lib.rs b/crates/templates/src/lib.rs index c5d0f05e6..431b1f52b 100644 --- a/crates/templates/src/lib.rs +++ b/crates/templates/src/lib.rs @@ -456,12 +456,20 @@ impl Templates { check::render_recovery_disabled(self, now, rng)?; check::render_form_post::(self, now, rng)?; check::render_error(self, now, rng)?; + check::render_email_recovery_txt(self, now, rng)?; + check::render_email_recovery_html(self, now, rng)?; + check::render_email_recovery_subject(self, now, rng)?; check::render_email_verification_txt(self, now, rng)?; check::render_email_verification_html(self, now, rng)?; check::render_email_verification_subject(self, now, rng)?; check::render_upstream_oauth2_link_mismatch(self, now, rng)?; check::render_upstream_oauth2_suggest_link(self, now, rng)?; check::render_upstream_oauth2_do_register(self, now, rng)?; + check::render_device_link(self, now, rng)?; + check::render_device_consent(self, now, rng)?; + check::render_account_deactivated(self, now, rng)?; + check::render_account_locked(self, now, rng)?; + check::render_account_logged_out(self, now, rng)?; check::render_device_name(self, now, rng)?; Ok(()) } diff --git a/crates/templates/src/macros.rs b/crates/templates/src/macros.rs index b3ed9d60a..a3166b2bb 100644 --- a/crates/templates/src/macros.rs +++ b/crates/templates/src/macros.rs @@ -75,11 +75,12 @@ macro_rules! register_templates { /// # Errors /// /// Returns an error if the template fails to render with any of the sample. - pub fn $name + pub(crate) fn $name $(< $( $lt $( : $clt $(+ $dlt )* + TemplateContext )? ),+ >)? (templates: &Templates, now: chrono::DateTime, rng: &mut impl rand::Rng) -> anyhow::Result<()> { - let samples: Vec< $param > = TemplateContext::sample(now, rng); + let locales = templates.translator().available_locales(); + let samples: Vec< $param > = TemplateContext::sample(now, rng, &locales); let name = $template; for sample in samples { diff --git a/frontend/locales/de.json b/frontend/locales/de.json index d4e711d46..6dda0578a 100644 --- a/frontend/locales/de.json +++ b/frontend/locales/de.json @@ -300,7 +300,7 @@ "name_for_platform": "{{name}} für {{platform}}", "scopes_label": "Berechtigungsumfang", "set_device_name": { - "help": "Set a name that will help you identify this device.", + "help": "Geben Sie einen Namen ein, der Ihnen hilft, dieses Gerät zu identifizieren.", "label": "Gerätename", "title": "Gerätename bearbeiten" }, diff --git a/frontend/locales/et.json b/frontend/locales/et.json index 92c941663..d2a065609 100644 --- a/frontend/locales/et.json +++ b/frontend/locales/et.json @@ -300,9 +300,9 @@ "name_for_platform": "{{name}} / {{platform}}", "scopes_label": "Õigused", "set_device_name": { - "help": "Set a name that will help you identify this device.", - "label": "Device name", - "title": "Edit device name" + "help": "Sisesta nimi, mis aitab sul hiljem seda seadet ära tunda.", + "label": "Seadme nimi", + "title": "Muuda seadme nime" }, "signed_in_date": "Sisse logitud ", "signed_in_label": "Sisse logitud", diff --git a/frontend/locales/fi.json b/frontend/locales/fi.json index fe4ded01a..163c507d1 100644 --- a/frontend/locales/fi.json +++ b/frontend/locales/fi.json @@ -300,9 +300,9 @@ "name_for_platform": "{{name}} {{platform}}:lle", "scopes_label": "Vaikutusalue", "set_device_name": { - "help": "Set a name that will help you identify this device.", - "label": "Device name", - "title": "Edit device name" + "help": "Aseta nimi, jonka avulla tunnistat tämän laitteen.", + "label": "Laitteen nimi", + "title": "Muokkaa laitteen nimeä" }, "signed_in_date": "Kirjautunut sisään ", "signed_in_label": "Kirjautunut sisään", diff --git a/frontend/locales/uk.json b/frontend/locales/uk.json index 1ddcd306e..4df4d3c42 100644 --- a/frontend/locales/uk.json +++ b/frontend/locales/uk.json @@ -301,9 +301,9 @@ "name_for_platform": "{{name}} для {{platform}}", "scopes_label": "Області застосування (Scopes)", "set_device_name": { - "help": "Set a name that will help you identify this device.", - "label": "Device name", - "title": "Edit device name" + "help": "Вкажіть назву, яка допоможе вам ідентифікувати цей пристрій.", + "label": "Назва пристрою", + "title": "Змінити назву пристрою" }, "signed_in_date": "Вхід виконано ", "signed_in_label": "Вхід виконано", diff --git a/localazy.json b/localazy.json index f1be8ec07..96aeec83c 100644 --- a/localazy.json +++ b/localazy.json @@ -7,7 +7,7 @@ { "file": "file.json", "pattern": "translations/en.json", - "features": ["arb_metadata", "plural_object"] + "features": ["arb_metadata", "plural_object", "filter_untranslated"] }, { "file": "frontend.json", diff --git a/translations/cs.json b/translations/cs.json index f9fcb866b..710bb9f3a 100644 --- a/translations/cs.json +++ b/translations/cs.json @@ -100,11 +100,6 @@ "heading": "Přístup udělen" } }, - "device_display_name": { - "client_on_device": "%(client_name)s on %(device_name)s", - "name_for_platform": "%(name)s for %(platform)s", - "unknown_device": "Unknown device" - }, "email_in_use": { "description": "Pokud jste zapomněli přihlašovací údaje k účtu, můžete svůj účet obnovit. Můžete také začít znovu a použít jinou e-mailovou adresu.", "title": "E-mailová adresa %(email)s se již používá" diff --git a/translations/da.json b/translations/da.json index 490430211..b0da7552a 100644 --- a/translations/da.json +++ b/translations/da.json @@ -100,11 +100,6 @@ "heading": "Adgang givet" } }, - "device_display_name": { - "client_on_device": "%(client_name)s on %(device_name)s", - "name_for_platform": "%(name)s for %(platform)s", - "unknown_device": "Unknown device" - }, "email_in_use": { "description": "Hvis du har glemt dine kontooplysninger, kan du gendanne din konto. Du kan også starte forfra og bruge en anden e-mail-adresse.", "title": "E-mailadressen %(email)s er allerede i brug" diff --git a/translations/et.json b/translations/et.json index 1730a5013..729331c03 100644 --- a/translations/et.json +++ b/translations/et.json @@ -101,9 +101,9 @@ } }, "device_display_name": { - "client_on_device": "%(client_name)s on %(device_name)s", - "name_for_platform": "%(name)s for %(platform)s", - "unknown_device": "Unknown device" + "client_on_device": "%(client_name)s seadmes %(device_name)s", + "name_for_platform": "%(name)s platvormil %(platform)s", + "unknown_device": "Tundmatu seade" }, "email_in_use": { "description": "Kui sa oled unustanud oma konto kasutajanime ja/või salasõna, siis on sul võimalik taastada ligipääs oma kasutajakontole. Lisaks saad uue e-posti aadressi abil alustada nullist.", diff --git a/translations/fi.json b/translations/fi.json index 6b9b53be9..623744326 100644 --- a/translations/fi.json +++ b/translations/fi.json @@ -101,9 +101,9 @@ } }, "device_display_name": { - "client_on_device": "%(client_name)s on %(device_name)s", - "name_for_platform": "%(name)s for %(platform)s", - "unknown_device": "Unknown device" + "client_on_device": "%(client_name)s %(device_name)s:lla", + "name_for_platform": "%(name)s %(platform)s:lle", + "unknown_device": "Tuntematon laite" }, "email_in_use": { "description": "Jos olet unohtanut tilisi tunnistetiedot, voit palauttaa tilisi. Voit myös aloittaa alusta ja käyttää toista sähköpostiosoitetta.", diff --git a/translations/hu.json b/translations/hu.json index 6fdff188b..0ecc642c6 100644 --- a/translations/hu.json +++ b/translations/hu.json @@ -111,7 +111,7 @@ "copy_link": "Másolja a következő hivatkozást, és illessze be a böngészőbe egy új jelszó létrehozásához:", "create_new_password": "Új jelszó létrehozása", "fallback": "A gomb nem működik?", - "headline": "Jelszóvisszaállítást kért a(z) %(client_name)s fiókjához.", + "headline": "Jelszóvisszaállítást kért a(z) %(server_name)s fiókjához.", "subject": "Fiókjelszó visszaállítása (%(mxid)s)", "you_can_ignore": "Ha nem kért új jelszót, akkor figyelmen kívül hagyhatja ezt a levelet. A jelenlegi jelszava továbbra is működni fog." }, @@ -262,4 +262,4 @@ "headline": "E-mail-cím ellenőrzése" } } -} \ No newline at end of file +} diff --git a/translations/nl.json b/translations/nl.json index 84c137bbd..948e5fc32 100644 --- a/translations/nl.json +++ b/translations/nl.json @@ -6,14 +6,12 @@ "create_account": "Registreren", "sign_in": "Inloggen", "sign_out": "Uitloggen", - "skip": "Skip", "start_over": "Opnieuw beginnen", "submit": "Bevestigen" }, "app": { "human_name": "Matrix Authentication Service", - "name": "matrix-authentication-service", - "technical_description": "OpenID Connect discovery document: %(discovery_url)s" + "name": "matrix-authentication-service" }, "branding": { "privacy_policy": { @@ -38,231 +36,41 @@ "unexpected": "Onverwachte fout" }, "mas": { - "account": { - "deactivated": { - "description": "This account (%(mxid)s) has been deleted. If this is not expected, contact your server administrator.", - "heading": "Account deleted" - }, - "locked": { - "description": "This account (%(mxid)s) has been locked. If this is not expected, contact your server administrator.", - "heading": "Account locked" - }, - "logged_out": { - "description": "This session has been terminated. Sign out to be able to log back in", - "heading": "Session terminated" - } - }, - "add_email": { - "description": "Enter an email address to recover your account in case you lose access to it.", - "heading": "Add an email address" - }, - "back_to_homepage": "Go back to the homepage", - "captcha": { - "noscript": "This form is protected by a CAPTCHA and requires JavaScript to be enabled to submit it. Please enable JavaScript in your browser and reload this page." - }, "change_password": { "change": "Wachtwoord wijzigen", "confirm": "Bevestig wachtwoord", - "current": "Huidig wachtwoord", - "description": "This will change the password on your account.", - "heading": "Change my password", - "new": "New password" - }, - "choose_display_name": { - "description": "This is the name other people will see. You can change this at any time.", - "headline": "Choose your display name" - }, - "consent": { - "client_wants_access": "%(client_name)s at %(redirect_uri)s wants to access your account.", - "heading": "Allow access to your account?", - "make_sure_you_trust": "Make sure that you trust %(client_name)s.", - "this_will_allow": "This will allow %(client_name)s to:", - "you_may_be_sharing": "You may be sharing sensitive information with this site or app." - }, - "device_card": { - "access_requested": "Access requested", - "device_code": "Code", - "generic_device": "Device", - "ip_address": "IP address" - }, - "device_code_link": { - "description": "Link a device", - "headline": "Enter the code displayed on your device" - }, - "device_consent": { - "another_device_access": "Another device wants to access your account.", - "denied": { - "description": "You denied access to %(client_name)s. You can close this window.", - "heading": "Access denied" - }, - "granted": { - "description": "You granted access to %(client_name)s. You can close this window.", - "heading": "Access granted" - } - }, - "device_display_name": { - "client_on_device": "%(client_name)s on %(device_name)s", - "name_for_platform": "%(name)s for %(platform)s", - "unknown_device": "Unknown device" - }, - "email_in_use": { - "description": "If you have forgotten your account credentials, you can recover your account. You can also start over and use a different email address.", - "title": "The email address %(email)s is already in use" - }, - "emails": { - "greeting": "Hello %(username)s,", - "recovery": { - "click_button": "Click on the button below to create a new password:", - "copy_link": "Copy the following link and paste it into a browser to create a new password:", - "create_new_password": "Create new password", - "fallback": "The button doesn't work for you?", - "headline": "You requested a password reset for your %(server_name)s account.", - "subject": "Reset your account password (%(mxid)s)", - "you_can_ignore": "If you didn't ask for a new password, you can ignore this email. Your current password will continue to work." - }, - "verify": { - "body_html": "Your verification code to confirm this email address is: %(code)s", - "body_text": "Your verification code to confirm this email address is: %(code)s", - "subject": "Your email verification code is: %(code)s" - } + "current": "Huidig wachtwoord" }, "errors": { - "captcha": "CAPTCHA verification failed, please try again", - "denied_policy": "Denied by policy: %(policy)s", - "email_banned": "Email is banned by the server policy", - "email_domain_banned": "Email domain is banned by the server policy", - "email_domain_not_allowed": "Email domain is not allowed by the server policy", - "email_not_allowed": "Email is not allowed by the server policy", - "field_required": "This field is required", - "invalid_credentials": "Ongeldige gegevens", - "password_mismatch": "Password fields don't match", - "rate_limit_exceeded": "You've made too many requests in a short period. Please wait a few minutes and try again.", - "username_all_numeric": "Username cannot consist solely of numbers", - "username_banned": "Username is banned by the server policy", - "username_invalid_chars": "Username contains invalid characters. Use lowercase letters, numbers, dashes and underscores only.", - "username_not_allowed": "Username is not allowed by the server policy", - "username_taken": "This username is already taken", - "username_too_long": "Username is too long", - "username_too_short": "Username is too short" + "invalid_credentials": "Ongeldige gegevens" }, "login": { - "call_to_register": "Don't have an account yet?", "continue_with_provider": "Doorgaan met %(provider)s", - "description": "Please sign in to continue:", - "forgot_password": "Forgot password?", "headline": "Inloggen", - "link": { - "description": "Linking your %(provider)s account", - "headline": "Sign in to link" - }, - "no_login_methods": "No login methods available.", - "separator": "Of", - "username_or_email": "Username or Email" + "separator": "Of" }, "navbar": { - "my_account": "Mijn account", - "register": "Create an account", - "signed_in_as": "Signed in as %(username)s." + "my_account": "Mijn account" }, - "not_found": { - "description": "The page you were looking for doesn't exist or has been moved", - "heading": "Page not found" - }, - "not_you": "Not %(username)s?", "or_separator": "Of", - "policy_violation": { - "description": "This might be because of the client which authored the request, the currently logged in user, or the request itself.", - "heading": "The authorization request was denied the policy enforced by this service", - "logged_as": "Logged as %(username)s" - }, - "recovery": { - "consumed": { - "description": "To create a new password, start over and select “Forgot password”.", - "heading": "The link to reset your password has already been used" - }, - "disabled": { - "description": "If you have lost your credentials, please contact the administrator to recover your account.", - "heading": "Account recovery is disabled" - }, - "expired": { - "description": "Request a new email that will be sent to: %(email)s.", - "heading": "The link to reset your password has expired", - "resend_email": "Resend email" - }, - "finish": { - "confirm": "Enter new password again", - "description": "Choose a new password for your account.", - "heading": "Reset your password", - "new": "New password", - "save_and_continue": "Save and continue" - }, - "progress": { - "change_email": "Try a different email", - "description": "We sent an email with a link to reset your password if there's an account using %(email)s.", - "heading": "Check your email", - "resend_email": "Resend email" - }, - "start": { - "description": "An email will be sent with a link to reset your password.", - "heading": "Enter your email to continue" - } - }, - "register": { - "call_to_login": "Already have an account?", - "continue_with_email": "Continue with email address", - "create_account": { - "description": "Choose a username to continue.", - "heading": "Create an account" - }, - "sign_in_instead": "Sign in instead", - "terms_of_service": "I agree to the Terms and Conditions" - }, - "scope": { - "edit_profile": "Edit your profile and contact details", - "manage_sessions": "Manage your devices and sessions", - "mas_admin": "Administer any user on the matrix-authentication-service", - "send_messages": "Send new messages on your behalf", - "synapse_admin": "Administer the Synapse homeserver", - "view_messages": "View your existing messages and data", - "view_profile": "See your profile info and contact details" - }, "upstream_oauth2": { - "link_mismatch": { - "heading": "This upstream account is already linked to another account." - }, "register": { "choose_username": { - "description": "This cannot be changed later.", "heading": "Kies uw gebruikersnaam" }, "create_account": "Nieuw account aanmaken", - "enforced_by_policy": "Enforced by server policy", - "forced_display_name": "Will use the following display name", "forced_email": "De volgende e-mailadres zal worden gebruikt", "forced_localpart": "De volgende gebruikersnaam zal worden gebruikt", "import_data": { - "description": "Confirm the information that will be linked to your new %(server_name)s account.", "heading": "Importeer uw data" }, - "imported_from_upstream": "Imported from your upstream account", - "imported_from_upstream_with_name": "Imported from your %(human_name)s account", - "link_existing": "Link to an existing account", - "provider_name": "%(human_name)s account", - "signup_with_upstream": { - "heading": "Continue signing up with your %(human_name)s account" - }, "suggested_display_name": "Weergavenaam importeren", "suggested_email": "E-mailadres importeren", "use": "Gebruiken" - }, - "suggest_link": { - "action": "Link", - "heading": "Link to your existing account" } }, "verify_email": { "6_digit_code": "6-cijferige code", - "code": "Code", "description": "Voer de 6-cijferige code in die is verzonden naar: %(email)s", "headline": "Verifieer uw e-mailadres" } diff --git a/translations/pt.json b/translations/pt.json index 46738637a..52f9d47ba 100644 --- a/translations/pt.json +++ b/translations/pt.json @@ -100,11 +100,6 @@ "heading": "Acesso concedido" } }, - "device_display_name": { - "client_on_device": "%(client_name)s on %(device_name)s", - "name_for_platform": "%(name)s for %(platform)s", - "unknown_device": "Unknown device" - }, "email_in_use": { "description": "Se se esqueceu das suas credenciais de conta, pode recuperar a sua conta. Também pode começar de novo e utilizar um endereço de correio eletrónico diferente.", "title": "O endereço de correio eletrónico %(email)s já está a ser utilizado" diff --git a/translations/ru.json b/translations/ru.json index 84c10f5b9..9f69768e9 100644 --- a/translations/ru.json +++ b/translations/ru.json @@ -100,11 +100,6 @@ "heading": "Доступ предоставлен" } }, - "device_display_name": { - "client_on_device": "%(client_name)s on %(device_name)s", - "name_for_platform": "%(name)s for %(platform)s", - "unknown_device": "Unknown device" - }, "email_in_use": { "description": "Если вы забыли учетные данные, вы можете восстановить свою учётную запись. Вы также можете начать сначала и использовать другой адрес электронной почты.", "title": "Адрес электронной почты %(email)s уже используется" diff --git a/translations/sv.json b/translations/sv.json index aab7c3237..aa80542a6 100644 --- a/translations/sv.json +++ b/translations/sv.json @@ -38,20 +38,6 @@ "unexpected": "Oväntat fel" }, "mas": { - "account": { - "deactivated": { - "description": "This account (%(mxid)s) has been deleted. If this is not expected, contact your server administrator.", - "heading": "Account deleted" - }, - "locked": { - "description": "This account (%(mxid)s) has been locked. If this is not expected, contact your server administrator.", - "heading": "Account locked" - }, - "logged_out": { - "description": "This session has been terminated. Sign out to be able to log back in", - "heading": "Session terminated" - } - }, "add_email": { "description": "Ange en e-postadress för att återställa ditt konto om du förlorar åtkomsten till det.", "heading": "Lägg till en e-postadress" @@ -100,11 +86,6 @@ "heading": "Åtkomst beviljad" } }, - "device_display_name": { - "client_on_device": "%(client_name)s on %(device_name)s", - "name_for_platform": "%(name)s for %(platform)s", - "unknown_device": "Unknown device" - }, "email_in_use": { "description": "Om du har glömt dina kontouppgifter kan du återställa ditt konto. Du kan också börja om och använda en annan e-postadress.", "title": "E-postadressen %(email)s är redan i bruk" @@ -115,7 +96,6 @@ "click_button": "Klicka på knappen nedan för att skapa ett nytt lösenord:", "copy_link": "Kopiera följande länk och klistra in den i en webbläsare för att skapa ett nytt lösenord:", "create_new_password": "Skapa nytt lösenord", - "fallback": "The button doesn't work for you?", "headline": "Du begärde en lösenordsåterställning för ditt %(server_name)s konto.", "subject": "Återställ ditt kontolösenord (%(mxid)s)", "you_can_ignore": "Om du inte har bett om ett nytt lösenord kan du ignorera detta e-postmeddelande. Ditt nuvarande lösenord kommer att fortsätta att fungera." @@ -129,18 +109,14 @@ "errors": { "captcha": "CAPTCHA-verifiering misslyckades, försök igen", "denied_policy": "Nekad av policy: %(policy)s", - "email_banned": "Email is banned by the server policy", "email_domain_banned": "E-postdomänen är förbjuden av serverpolicyn", "email_domain_not_allowed": "E-postdomänen är inte tillåten enligt serverpolicyn", - "email_not_allowed": "Email is not allowed by the server policy", "field_required": "Detta fält är obligatoriskt", "invalid_credentials": "Ogiltiga autentiseringsuppgifter", "password_mismatch": "Lösenordsfälten matchar inte", "rate_limit_exceeded": "Du har gjort för många förfrågningar under en kort period. Vänta några minuter och försök igen.", "username_all_numeric": "Användarnamn kan inte enbart bestå av siffror", - "username_banned": "Username is banned by the server policy", "username_invalid_chars": "Användarnamnet innehåller ogiltiga tecken. Använd endast små bokstäver, siffror, streck och understreck.", - "username_not_allowed": "Username is not allowed by the server policy", "username_taken": "Detta användarnamn är redan upptaget", "username_too_long": "Användarnamnet är för långt", "username_too_short": "Användarnamnet är för kort" @@ -156,8 +132,7 @@ "headline": "Logga in för att länka" }, "no_login_methods": "Inga inloggningsmetoder tillgängliga.", - "separator": "eller", - "username_or_email": "Username or Email" + "separator": "eller" }, "navbar": { "my_account": "Mitt konto", diff --git a/translations/uk.json b/translations/uk.json index 8366cf079..f13fe20cb 100644 --- a/translations/uk.json +++ b/translations/uk.json @@ -101,9 +101,9 @@ } }, "device_display_name": { - "client_on_device": "%(client_name)s on %(device_name)s", - "name_for_platform": "%(name)s for %(platform)s", - "unknown_device": "Unknown device" + "client_on_device": "%(client_name)s на %(device_name)s", + "name_for_platform": "%(name)s для %(platform)s", + "unknown_device": "Невідомий пристрій" }, "email_in_use": { "description": "Якщо ви забули облікові дані облікового запису, ви можете відновити свій обліковий запис. Ви також можете почати спочатку і використовувати іншу адресу електронної пошти.", diff --git a/translations/zh-Hans.json b/translations/zh-Hans.json index a323c61e3..3c23efcb6 100644 --- a/translations/zh-Hans.json +++ b/translations/zh-Hans.json @@ -6,7 +6,6 @@ "create_account": "创建账户", "sign_in": "登录", "sign_out": "注销", - "skip": "Skip", "start_over": "重新开始", "submit": "提交" }, @@ -38,20 +37,6 @@ "unexpected": "意外错误" }, "mas": { - "account": { - "deactivated": { - "description": "This account (%(mxid)s) has been deleted. If this is not expected, contact your server administrator.", - "heading": "Account deleted" - }, - "locked": { - "description": "This account (%(mxid)s) has been locked. If this is not expected, contact your server administrator.", - "heading": "Account locked" - }, - "logged_out": { - "description": "This session has been terminated. Sign out to be able to log back in", - "heading": "Session terminated" - } - }, "add_email": { "description": "输入电子邮件地址,以便在失去访问权限时恢复账户。", "heading": "添加电子邮件地址" @@ -68,10 +53,6 @@ "heading": "更改我的密码", "new": "新密码" }, - "choose_display_name": { - "description": "This is the name other people will see. You can change this at any time.", - "headline": "Choose your display name" - }, "consent": { "client_wants_access": "%(client_name)s%(redirect_uri)s 希望访问您的账户。", "heading": "允许访问您的账户?", @@ -100,22 +81,12 @@ "heading": "已授予访问权限" } }, - "device_display_name": { - "client_on_device": "%(client_name)s on %(device_name)s", - "name_for_platform": "%(name)s for %(platform)s", - "unknown_device": "Unknown device" - }, - "email_in_use": { - "description": "If you have forgotten your account credentials, you can recover your account. You can also start over and use a different email address.", - "title": "The email address %(email)s is already in use" - }, "emails": { "greeting": "%(username)s 你好,", "recovery": { "click_button": "点击下面的按钮创建新密码:", "copy_link": "复制以下链接并粘贴到浏览器中以创建新密码:", "create_new_password": "创建新密码", - "fallback": "The button doesn't work for you?", "headline": "您请求重置您在 %(server_name)s 的账户密码。", "subject": "重置账户密码 (%(mxid)s)", "you_can_ignore": "如果您没有请求重置密码,可以忽略此邮件。您当前的密码仍然有效。" @@ -129,21 +100,11 @@ "errors": { "captcha": "验证码验证失败,请重试", "denied_policy": "被该策略拒绝:%(policy)s", - "email_banned": "Email is banned by the server policy", - "email_domain_banned": "Email domain is banned by the server policy", - "email_domain_not_allowed": "Email domain is not allowed by the server policy", - "email_not_allowed": "Email is not allowed by the server policy", "field_required": "此字段为必填项", "invalid_credentials": "无效的凭据", "password_mismatch": "密码字段不匹配", "rate_limit_exceeded": "您在短时间内发出了过多请求。请等待几分钟后重试。", - "username_all_numeric": "Username cannot consist solely of numbers", - "username_banned": "Username is banned by the server policy", - "username_invalid_chars": "Username contains invalid characters. Use lowercase letters, numbers, dashes and underscores only.", - "username_not_allowed": "Username is not allowed by the server policy", - "username_taken": "此用户名已被使用", - "username_too_long": "Username is too long", - "username_too_short": "Username is too short" + "username_taken": "此用户名已被使用" }, "login": { "call_to_register": "还没有账户?", @@ -156,8 +117,7 @@ "headline": "登录以链接" }, "no_login_methods": "没有可用的登录途径。", - "separator": "或", - "username_or_email": "Username or Email" + "separator": "或" }, "navbar": { "my_account": "我的账户", @@ -209,7 +169,6 @@ }, "register": { "call_to_login": "已有账户?", - "continue_with_email": "Continue with email address", "create_account": { "description": "请创建一个账户以开始使用:", "heading": "创建账户" @@ -245,12 +204,7 @@ "heading": "导入数据" }, "imported_from_upstream": "从上游账户导入", - "imported_from_upstream_with_name": "Imported from your %(human_name)s account", "link_existing": "链接到现有账户", - "provider_name": "%(human_name)s account", - "signup_with_upstream": { - "heading": "Continue signing up with your %(human_name)s account" - }, "suggested_display_name": "导入显示名称", "suggested_email": "导入电子邮件地址", "use": "使用"