From 88e6a871f432ba894137b488071bcd27cb7a9e2a Mon Sep 17 00:00:00 2001 From: sebadob Date: Wed, 15 Jan 2025 13:03:24 +0100 Subject: [PATCH] Svelte 5 Migration 6: Update the whole i18n setup (#696) * define i18n interface * update changelog * API endpoint GET full i18n with caching and pre-compression * split i18n into email + ui mods * change i18n cache etag from app start to build time * i18n preload, LangSelector -> sv5, i18n override during local dev * automatically build i18n JSON in `build.rs` for 100% type checking * migrate LangSelector to svelte 5 * fix i18n during DEV ssr + compile via dynamic imports * add pre-built I18n JSON from the backend * fix i18n `preload` in static UI HTML * migrate `helpers.js` to `helpers.ts` * migrate account dashboard to `useI18n()`` * migrate device UI to `useI18n()`` * migrate error HTML to `useI18n()`` * migrate providers callback + WebauthnRequest to `useI18n()`` * migrate logout HTML to `useI18n()`` * migrate authorize HTML to `useI18n()`` * migrate user registration HTML to `useI18n()`` * migrate password reset HTML + PasswordPolicy to `useI18n()`` * migrate email changed confirm HTML to `useI18n()` * delete obsolete WithI18n * remove old `POST /i18n` endpoint * move HTML serving endpoints into separate module * remove all `i18n` pre-rendering entries from static HTML * drop all old UI i18n parts from the backend * final i18n cleanup --- CHANGELOG.md | 3 + Cargo.lock | 1 + frontend/src/app.html | 4 - frontend/src/components/ClientLogo.svelte | 4 +- frontend/src/components/Error.svelte | 69 +- frontend/src/components/HiddenValue.svelte | 7 +- frontend/src/components/ProviderLogo.svelte | 4 +- .../src/components/account/AccDevices.svelte | 4 +- .../src/components/account/AccEdit.svelte | 67 +- .../src/components/account/AccInfo.svelte | 48 +- frontend/src/components/account/AccMFA.svelte | 19 +- .../src/components/account/AccMain.svelte | 70 +- .../src/components/account/AccModPwd.svelte | 35 +- frontend/src/components/account/AccNav.svelte | 26 +- .../src/components/account/AccPassword.svelte | 38 +- .../src/components/account/AccWebId.svelte | 32 +- .../src/components/admin/AdminMain.svelte | 2 +- .../src/components/admin/AdminMainPre.svelte | 2 +- .../admin/api_keys/ApiKeyAddNew.svelte | 11 +- .../admin/api_keys/ApiKeyConfig.svelte | 2 +- .../admin/api_keys/ApiKeyTile.svelte | 2 +- .../admin/blacklist/Blacklist.svelte | 4 +- .../admin/clients/ClientBranding.svelte | 2 +- .../admin/clients/ClientConfig.svelte | 2 +- .../admin/clients/ClientTileAddNew.svelte | 2 +- .../admin/config/argon2/Argon2Utility.svelte | 4 +- .../password_policy/PasswordPolicy.svelte | 4 +- .../src/components/admin/events/Event.svelte | 2 +- .../admin/events/EventsArchive.svelte | 4 +- .../admin/events/EventsLegend.svelte | 2 +- .../admin/groups/GroupConfig.svelte | 6 +- .../admin/groups/GroupTileAddNew.svelte | 10 +- .../admin/providers/ProviderConfig.svelte | 2 +- .../admin/providers/ProviderTileAddNew.svelte | 2 +- .../components/admin/roles/RoleConfig.svelte | 2 +- .../admin/roles/RoleTileAddNew.svelte | 10 +- .../admin/scopes/ScopeConfig.svelte | 2 +- .../admin/scopes/ScopeDelete.svelte | 4 +- .../admin/scopes/ScopeTileAddNew.svelte | 10 +- .../admin/sessions/SessionRow.svelte | 2 +- .../components/admin/sessions/Sessions.svelte | 2 +- .../admin/userAttr/AttrConfig.svelte | 2 +- .../admin/userAttr/AttrTileAddNew.svelte | 8 +- .../components/admin/users/UserInfo.svelte | 2 +- .../src/components/admin/users/UserMfa.svelte | 2 +- .../admin/users/UserPassword.svelte | 2 +- .../admin/users/UserTileAddNew.svelte | 10 +- frontend/src/components/common/Devices.svelte | 38 +- .../passwordReset/PasswordPolicy.svelte | 16 +- .../webauthn/WebauthnRequest.svelte | 26 +- frontend/src/global_state/i18n.svelte.ts | 44 ++ frontend/src/global_state/is_dev.svelte.ts | 5 +- frontend/src/global_state/language.svelte.ts | 13 + frontend/src/hooks.server.js | 7 +- frontend/src/i18n/de.ts | 198 ++++++ frontend/src/i18n/en.ts | 198 ++++++ frontend/src/i18n/interface.ts | 199 ++++++ frontend/src/i18n/ko.ts | 198 ++++++ frontend/src/i18n/zh.ts | 198 ++++++ frontend/src/lib/WithI18n.svelte | 54 -- .../expandableInputs/ExpandableInputs.svelte | 2 +- frontend/src/lib/inputs/Input.svelte | 2 +- frontend/src/lib/inputs/PasswordInput.svelte | 2 +- frontend/src/lib/inputs/Textarea.svelte | 2 +- frontend/src/lib/nav/NavEntryGroup.svelte | 2 +- frontend/src/lib/search/SearchBar.svelte | 2 +- .../{lib => lib_svelte5}/LangSelector.svelte | 69 +- frontend/src/routes/+layout.svelte | 11 +- frontend/src/routes/{index => }/+page.svelte | 40 +- frontend/src/routes/account/+page.svelte | 27 +- frontend/src/routes/device/+page.svelte | 157 +++-- frontend/src/routes/fedcm/+page.svelte | 8 +- .../src/routes/oidc/authorize/+page.svelte | 253 ++++---- .../src/routes/oidc/callback/+page.svelte | 2 +- frontend/src/routes/oidc/logout/+page.svelte | 50 +- .../routes/providers/callback/+page.svelte | 50 +- .../src/routes/users/register/+page.svelte | 120 ++-- .../email_confirm/email_confirm/+page.svelte | 41 +- .../users/{id}/reset/reset/+page.svelte | 386 ++++++----- frontend/src/utils/constants.js | 2 +- frontend/src/utils/dataFetching.js | 2 +- frontend/src/utils/dataFetchingAdmin.js | 4 +- frontend/src/utils/{helpers.js => helpers.ts} | 68 +- frontend/src/utils/webauthn.js | 2 +- frontend/vite.config.js | 2 +- src/api/src/generic.rs | 242 +------ src/api/src/html.rs | 192 ++++++ src/api/src/lib.rs | 1 + src/bin/Cargo.toml | 5 + src/bin/build.rs | 32 + src/bin/src/main.rs | 43 +- src/models/src/email.rs | 23 +- src/models/src/entity/theme.rs | 2 +- src/models/src/i18n/account.rs | 606 ------------------ src/models/src/i18n/authorize.rs | 135 ---- src/models/src/i18n/device.rs | 120 ---- src/models/src/i18n/error.rs | 117 ---- src/models/src/i18n/index.rs | 60 -- src/models/src/i18n/logout.rs | 61 -- src/models/src/i18n/mod.rs | 23 - src/models/src/i18n/password_policy.rs | 68 -- src/models/src/i18n/password_reset.rs | 179 ------ src/models/src/i18n/register.rs | 110 ---- .../change_info_new.rs} | 9 +- .../change_info_old.rs} | 9 +- .../confirm_change.rs} | 9 +- .../confirm_change_html.rs} | 9 +- src/models/src/i18n_email/mod.rs | 7 + .../password_new.rs} | 9 +- .../email_reset.rs => i18n_email/reset.rs} | 9 +- .../reset_info.rs} | 9 +- src/models/src/language.rs | 2 +- src/models/src/lib.rs | 2 +- src/models/src/templates.rs | 52 -- 114 files changed, 2330 insertions(+), 2869 deletions(-) create mode 100644 frontend/src/global_state/i18n.svelte.ts create mode 100644 frontend/src/global_state/language.svelte.ts create mode 100644 frontend/src/i18n/de.ts create mode 100644 frontend/src/i18n/en.ts create mode 100644 frontend/src/i18n/interface.ts create mode 100644 frontend/src/i18n/ko.ts create mode 100644 frontend/src/i18n/zh.ts delete mode 100644 frontend/src/lib/WithI18n.svelte rename frontend/src/{lib => lib_svelte5}/LangSelector.svelte (53%) rename frontend/src/routes/{index => }/+page.svelte (56%) rename frontend/src/utils/{helpers.js => helpers.ts} (79%) create mode 100644 src/api/src/html.rs create mode 100644 src/bin/build.rs delete mode 100644 src/models/src/i18n/account.rs delete mode 100644 src/models/src/i18n/authorize.rs delete mode 100644 src/models/src/i18n/device.rs delete mode 100644 src/models/src/i18n/error.rs delete mode 100644 src/models/src/i18n/index.rs delete mode 100644 src/models/src/i18n/logout.rs delete mode 100644 src/models/src/i18n/mod.rs delete mode 100644 src/models/src/i18n/password_policy.rs delete mode 100644 src/models/src/i18n/password_reset.rs delete mode 100644 src/models/src/i18n/register.rs rename src/models/src/{i18n/email_change_info_new.rs => i18n_email/change_info_new.rs} (92%) rename src/models/src/{i18n/email_change_info_old.rs => i18n_email/change_info_old.rs} (93%) rename src/models/src/{i18n/email_confirm_change.rs => i18n_email/confirm_change.rs} (88%) rename src/models/src/{i18n/email_confirm_change_html.rs => i18n_email/confirm_change_html.rs} (89%) create mode 100644 src/models/src/i18n_email/mod.rs rename src/models/src/{i18n/email_password_new.rs => i18n_email/password_new.rs} (97%) rename src/models/src/{i18n/email_reset.rs => i18n_email/reset.rs} (97%) rename src/models/src/{i18n/email_reset_info.rs => i18n_email/reset_info.rs} (89%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2dc13514d..8100c024b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,9 @@ Korean has been added to the translations for all user-facing UI parts. - Fixed a regression from v0.27.0 which made it impossible to use `zh-Hans` as a users language. The deserialization of the database value would fail when using Hiqlite. [#693](https://github.com/sebadob/rauthy/pull/693) +- Fixed a bug in the UI - Custom User Attributed: When only a single existing attributed has been deleted, the + list would not properly update and remove it. + [#695](https://github.com/sebadob/rauthy/pull/695) ## v0.27.3 diff --git a/Cargo.lock b/Cargo.lock index 9e20dcccd..4b41a63ad 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4325,6 +4325,7 @@ dependencies = [ "serde", "serde_json", "spow", + "strum", "tokio", "tokio-test", "tracing", diff --git a/frontend/src/app.html b/frontend/src/app.html index 55b5d9eaf..7e0bd9603 100644 --- a/frontend/src/app.html +++ b/frontend/src/app.html @@ -6,13 +6,10 @@ - - -