From 6f419cfbcb837c1202148b085cfdd1a81f27c3a5 Mon Sep 17 00:00:00 2001 From: Bubka <858858+Bubka@users.noreply.github.com> Date: Fri, 20 Jun 2025 18:14:21 +0200 Subject: [PATCH] Move locales to single json files & Replace laravel-vue-i18n with vue-i18n --- app/Api/v1/Controllers/IconController.php | 2 +- app/Api/v1/Controllers/QrCodeController.php | 2 +- app/Api/v1/Controllers/SettingController.php | 2 +- .../v1/Controllers/TwoFAccountController.php | 8 +- .../v1/Controllers/UserManagerController.php | 6 +- app/Api/v1/Requests/GroupStoreRequest.php | 4 +- .../Maintenance/FixOrphanAccounts.php | 2 +- .../Maintenance/FixServiceFieldEncryption.php | 4 +- .../Maintenance/FixUnsplittedAccounts.php | 2 +- app/Exceptions/Handler.php | 12 +- app/Http/Controllers/Auth/LoginController.php | 2 +- .../Controllers/Auth/PasswordController.php | 6 +- .../Auth/PersonalAccessTokenController.php | 6 +- app/Http/Controllers/Auth/UserController.php | 8 +- .../Auth/WebAuthnDeviceLostController.php | 2 +- .../Auth/WebAuthnLoginController.php | 2 +- .../Auth/WebAuthnManageController.php | 4 +- .../Auth/WebAuthnRecoveryController.php | 4 +- app/Http/Middleware/RejectIfAuthenticated.php | 2 +- app/Http/Middleware/RejectIfDemoMode.php | 2 +- app/Http/Middleware/RejectIfReverseProxy.php | 2 +- .../RejectIfSsoOnlyAndNotForAdmin.php | 2 +- .../Requests/WebauthnAttestationRequest.php | 2 +- app/Http/Requests/WebauthnAttestedRequest.php | 2 +- app/Http/Requests/WebauthnRenameRequest.php | 2 +- app/Models/Group.php | 2 +- app/Models/Traits/CanEncryptField.php | 2 +- app/Models/TwoFAccount.php | 2 +- app/Notifications/FailedLoginNotification.php | 2 +- .../SignedInWithNewDeviceNotification.php | 2 +- .../TestEmailSettingNotification.php | 8 +- app/Services/GroupService.php | 2 +- app/Services/Migrators/AegisMigrator.php | 4 +- app/Services/Migrators/GoogleAuthMigrator.php | 4 +- app/Services/Migrators/PlainTextMigrator.php | 4 +- app/Services/Migrators/TwoFASMigrator.php | 4 +- app/Services/Migrators/TwoFAuthMigrator.php | 4 +- app/Services/QrCodeService.php | 8 +- app/Services/SettingService.php | 2 +- ...3136_encrypt_twofaccount_service_field.php | 4 +- package-lock.json | 881 +++++++++++++- package.json | 4 +- resources/js/App.vue | 7 + resources/js/app.js | 18 +- resources/js/components/AccessLogViewer.vue | 54 +- resources/js/components/ActionButtons.vue | 14 +- resources/js/components/CopyButton.vue | 6 +- .../components/DestinationGroupSelector.vue | 8 +- resources/js/components/ExportButtons.vue | 20 +- resources/js/components/GroupSwitch.vue | 2 +- resources/js/components/OtpDisplay.vue | 16 +- resources/js/components/QrContentDisplay.vue | 14 +- resources/js/components/SearchBox.vue | 6 +- resources/js/components/Spinner.vue | 2 +- resources/js/components/SsoConnectLink.vue | 2 +- resources/js/components/Toolbar.vue | 12 +- resources/js/components/VersionChecker.vue | 8 +- .../js/composables/appSettingsUpdater.js | 5 +- resources/js/composables/useI18n.ts | 6 + resources/js/i18n.ts | 15 + resources/js/layouts/AdminTabs.vue | 6 +- resources/js/layouts/Footer.vue | 22 +- resources/js/layouts/SettingTabs.vue | 8 +- resources/js/router/index.js | 5 - .../webauthn/identifyAuthenticationError.js | 12 +- .../webauthn/identifyRegistrationError.js | 24 +- .../js/services/webauthn/webauthnService.js | 8 +- resources/js/stores/appSettings.js | 3 +- resources/js/stores/groups.js | 10 +- resources/js/stores/notify.js | 11 +- resources/js/stores/twofaccounts.js | 4 +- resources/js/stores/user.js | 24 +- resources/js/views/About.vue | 18 +- resources/js/views/Error.vue | 10 +- resources/js/views/Start.vue | 16 +- resources/js/views/admin/AppSetup.vue | 48 +- resources/js/views/admin/Auth.vue | 24 +- resources/js/views/admin/Users.vue | 18 +- resources/js/views/admin/logs/Access.vue | 4 +- resources/js/views/admin/users/Create.vue | 16 +- resources/js/views/admin/users/Manage.vue | 84 +- resources/js/views/auth/Login.vue | 127 +- resources/js/views/auth/Register.vue | 29 +- resources/js/views/auth/RequestReset.vue | 7 +- resources/js/views/auth/password/Reset.vue | 10 +- resources/js/views/auth/webauthn/Recover.vue | 18 +- resources/js/views/groups/CreateUpdate.vue | 6 +- resources/js/views/groups/Groups.vue | 16 +- resources/js/views/settings/Account.vue | 48 +- .../js/views/settings/Credentials/Edit.vue | 12 +- resources/js/views/settings/OAuth.vue | 40 +- resources/js/views/settings/Options.vue | 158 +-- resources/js/views/settings/WebAuthn.vue | 44 +- resources/js/views/twofaccounts/Accounts.vue | 28 +- resources/js/views/twofaccounts/Capture.vue | 22 +- .../js/views/twofaccounts/CreateUpdate.vue | 76 +- resources/js/views/twofaccounts/Import.vue | 82 +- resources/js/views/twofaccounts/QRcode.vue | 2 +- resources/lang/ar/admin.php | 148 --- resources/lang/ar/auth.php | 142 --- resources/lang/ar/commons.php | 95 -- resources/lang/ar/errors.php | 79 -- resources/lang/ar/groups.php | 41 - resources/lang/ar/languages.php | 29 - resources/lang/ar/notifications.php | 36 - resources/lang/ar/pagination.php | 19 - resources/lang/ar/passwords.php | 26 - resources/lang/ar/settings.php | 193 --- resources/lang/ar/titles.php | 58 - resources/lang/ar/twofaccounts.php | 182 --- resources/lang/ar/validation.php | 227 ---- resources/lang/bg/admin.php | 148 --- resources/lang/bg/auth.php | 142 --- resources/lang/bg/commons.php | 95 -- resources/lang/bg/errors.php | 79 -- resources/lang/bg/groups.php | 41 - resources/lang/bg/languages.php | 29 - resources/lang/bg/notifications.php | 36 - resources/lang/bg/pagination.php | 19 - resources/lang/bg/passwords.php | 26 - resources/lang/bg/settings.php | 193 --- resources/lang/bg/titles.php | 58 - resources/lang/bg/twofaccounts.php | 182 --- resources/lang/bg/validation.php | 227 ---- resources/lang/da/admin.php | 148 --- resources/lang/da/auth.php | 142 --- resources/lang/da/commons.php | 95 -- resources/lang/da/errors.php | 79 -- resources/lang/da/groups.php | 41 - resources/lang/da/languages.php | 29 - resources/lang/da/notifications.php | 36 - resources/lang/da/pagination.php | 19 - resources/lang/da/passwords.php | 26 - resources/lang/da/settings.php | 193 --- resources/lang/da/titles.php | 58 - resources/lang/da/twofaccounts.php | 182 --- resources/lang/da/validation.php | 227 ---- resources/lang/de/admin.php | 148 --- resources/lang/de/auth.php | 142 --- resources/lang/de/commons.php | 95 -- resources/lang/de/errors.php | 79 -- resources/lang/de/groups.php | 41 - resources/lang/de/languages.php | 29 - resources/lang/de/notifications.php | 36 - resources/lang/de/pagination.php | 19 - resources/lang/de/passwords.php | 26 - resources/lang/de/settings.php | 193 --- resources/lang/de/titles.php | 58 - resources/lang/de/twofaccounts.php | 182 --- resources/lang/de/validation.php | 227 ---- resources/lang/en.json | 807 ++++++++++++- resources/lang/en/admin.php | 152 --- resources/lang/en/auth.php | 142 --- resources/lang/en/commons.php | 97 -- resources/lang/en/errors.php | 79 -- resources/lang/en/groups.php | 41 - resources/lang/en/languages.php | 29 - resources/lang/en/notifications.php | 36 - resources/lang/en/pagination.php | 19 - resources/lang/en/passwords.php | 26 - resources/lang/en/settings.php | 205 ---- resources/lang/en/titles.php | 58 - resources/lang/en/twofaccounts.php | 182 --- resources/lang/en/validation.php | 227 ---- resources/lang/es-ES/admin.php | 148 --- resources/lang/es-ES/auth.php | 142 --- resources/lang/es-ES/commons.php | 95 -- resources/lang/es-ES/errors.php | 79 -- resources/lang/es-ES/groups.php | 41 - resources/lang/es-ES/languages.php | 29 - resources/lang/es-ES/notifications.php | 36 - resources/lang/es-ES/pagination.php | 19 - resources/lang/es-ES/passwords.php | 26 - resources/lang/es-ES/settings.php | 193 --- resources/lang/es-ES/titles.php | 58 - resources/lang/es-ES/twofaccounts.php | 182 --- resources/lang/es-ES/validation.php | 227 ---- resources/lang/fr.json | 1043 +++++++++++++++++ resources/lang/fr/admin.php | 148 --- resources/lang/fr/auth.php | 142 --- resources/lang/fr/commons.php | 95 -- resources/lang/fr/errors.php | 79 -- resources/lang/fr/groups.php | 41 - resources/lang/fr/languages.php | 29 - resources/lang/fr/notifications.php | 36 - resources/lang/fr/pagination.php | 19 - resources/lang/fr/passwords.php | 26 - resources/lang/fr/settings.php | 193 --- resources/lang/fr/titles.php | 58 - resources/lang/fr/twofaccounts.php | 182 --- resources/lang/fr/validation.php | 227 ---- resources/lang/hi/admin.php | 148 --- resources/lang/hi/auth.php | 142 --- resources/lang/hi/commons.php | 95 -- resources/lang/hi/errors.php | 79 -- resources/lang/hi/groups.php | 41 - resources/lang/hi/languages.php | 29 - resources/lang/hi/notifications.php | 36 - resources/lang/hi/pagination.php | 19 - resources/lang/hi/passwords.php | 26 - resources/lang/hi/settings.php | 193 --- resources/lang/hi/titles.php | 58 - resources/lang/hi/twofaccounts.php | 182 --- resources/lang/hi/validation.php | 227 ---- resources/lang/id/admin.php | 148 --- resources/lang/id/auth.php | 141 --- resources/lang/id/commons.php | 95 -- resources/lang/id/errors.php | 79 -- resources/lang/id/groups.php | 41 - resources/lang/id/languages.php | 29 - resources/lang/id/notifications.php | 36 - resources/lang/id/pagination.php | 19 - resources/lang/id/passwords.php | 26 - resources/lang/id/settings.php | 193 --- resources/lang/id/titles.php | 58 - resources/lang/id/twofaccounts.php | 182 --- resources/lang/id/validation.php | 227 ---- resources/lang/it/admin.php | 148 --- resources/lang/it/auth.php | 142 --- resources/lang/it/commons.php | 95 -- resources/lang/it/errors.php | 79 -- resources/lang/it/groups.php | 41 - resources/lang/it/languages.php | 29 - resources/lang/it/notifications.php | 36 - resources/lang/it/pagination.php | 19 - resources/lang/it/passwords.php | 26 - resources/lang/it/settings.php | 193 --- resources/lang/it/titles.php | 58 - resources/lang/it/twofaccounts.php | 182 --- resources/lang/it/validation.php | 227 ---- resources/lang/ja/admin.php | 148 --- resources/lang/ja/auth.php | 142 --- resources/lang/ja/commons.php | 95 -- resources/lang/ja/errors.php | 79 -- resources/lang/ja/groups.php | 41 - resources/lang/ja/languages.php | 29 - resources/lang/ja/notifications.php | 36 - resources/lang/ja/pagination.php | 19 - resources/lang/ja/passwords.php | 26 - resources/lang/ja/settings.php | 193 --- resources/lang/ja/titles.php | 58 - resources/lang/ja/twofaccounts.php | 182 --- resources/lang/ja/validation.php | 227 ---- resources/lang/ko/admin.php | 148 --- resources/lang/ko/auth.php | 142 --- resources/lang/ko/commons.php | 95 -- resources/lang/ko/errors.php | 79 -- resources/lang/ko/groups.php | 41 - resources/lang/ko/languages.php | 29 - resources/lang/ko/notifications.php | 36 - resources/lang/ko/pagination.php | 19 - resources/lang/ko/passwords.php | 26 - resources/lang/ko/settings.php | 193 --- resources/lang/ko/titles.php | 58 - resources/lang/ko/twofaccounts.php | 183 --- resources/lang/ko/validation.php | 227 ---- resources/lang/nl/admin.php | 148 --- resources/lang/nl/auth.php | 142 --- resources/lang/nl/commons.php | 95 -- resources/lang/nl/errors.php | 79 -- resources/lang/nl/groups.php | 41 - resources/lang/nl/languages.php | 29 - resources/lang/nl/notifications.php | 36 - resources/lang/nl/pagination.php | 19 - resources/lang/nl/passwords.php | 26 - resources/lang/nl/settings.php | 193 --- resources/lang/nl/titles.php | 58 - resources/lang/nl/twofaccounts.php | 182 --- resources/lang/nl/validation.php | 227 ---- resources/lang/pl/admin.php | 148 --- resources/lang/pl/auth.php | 142 --- resources/lang/pl/commons.php | 95 -- resources/lang/pl/errors.php | 79 -- resources/lang/pl/groups.php | 41 - resources/lang/pl/languages.php | 29 - resources/lang/pl/notifications.php | 36 - resources/lang/pl/pagination.php | 19 - resources/lang/pl/passwords.php | 26 - resources/lang/pl/settings.php | 193 --- resources/lang/pl/titles.php | 58 - resources/lang/pl/twofaccounts.php | 182 --- resources/lang/pl/validation.php | 227 ---- resources/lang/pt-BR/admin.php | 150 --- resources/lang/pt-BR/auth.php | 142 --- resources/lang/pt-BR/commons.php | 95 -- resources/lang/pt-BR/errors.php | 79 -- resources/lang/pt-BR/groups.php | 41 - resources/lang/pt-BR/languages.php | 29 - resources/lang/pt-BR/notifications.php | 36 - resources/lang/pt-BR/pagination.php | 19 - resources/lang/pt-BR/passwords.php | 26 - resources/lang/pt-BR/settings.php | 193 --- resources/lang/pt-BR/titles.php | 58 - resources/lang/pt-BR/twofaccounts.php | 195 --- resources/lang/pt-BR/validation.php | 227 ---- resources/lang/pt-PT/admin.php | 148 --- resources/lang/pt-PT/auth.php | 142 --- resources/lang/pt-PT/commons.php | 95 -- resources/lang/pt-PT/errors.php | 79 -- resources/lang/pt-PT/groups.php | 41 - resources/lang/pt-PT/languages.php | 29 - resources/lang/pt-PT/notifications.php | 36 - resources/lang/pt-PT/pagination.php | 19 - resources/lang/pt-PT/passwords.php | 26 - resources/lang/pt-PT/settings.php | 193 --- resources/lang/pt-PT/titles.php | 58 - resources/lang/pt-PT/twofaccounts.php | 182 --- resources/lang/pt-PT/validation.php | 227 ---- resources/lang/ro/admin.php | 148 --- resources/lang/ro/auth.php | 142 --- resources/lang/ro/commons.php | 95 -- resources/lang/ro/errors.php | 79 -- resources/lang/ro/groups.php | 41 - resources/lang/ro/languages.php | 24 - resources/lang/ro/notifications.php | 36 - resources/lang/ro/pagination.php | 19 - resources/lang/ro/passwords.php | 26 - resources/lang/ro/settings.php | 193 --- resources/lang/ro/titles.php | 58 - resources/lang/ro/twofaccounts.php | 182 --- resources/lang/ro/validation.php | 227 ---- resources/lang/ru/admin.php | 148 --- resources/lang/ru/auth.php | 142 --- resources/lang/ru/commons.php | 95 -- resources/lang/ru/errors.php | 79 -- resources/lang/ru/groups.php | 41 - resources/lang/ru/languages.php | 29 - resources/lang/ru/notifications.php | 36 - resources/lang/ru/pagination.php | 19 - resources/lang/ru/passwords.php | 26 - resources/lang/ru/settings.php | 193 --- resources/lang/ru/titles.php | 58 - resources/lang/ru/twofaccounts.php | 182 --- resources/lang/ru/validation.php | 227 ---- resources/lang/si/admin.php | 140 --- resources/lang/si/auth.php | 142 --- resources/lang/si/commons.php | 94 -- resources/lang/si/errors.php | 76 -- resources/lang/si/groups.php | 41 - resources/lang/si/languages.php | 24 - resources/lang/si/notifications.php | 36 - resources/lang/si/pagination.php | 19 - resources/lang/si/passwords.php | 26 - resources/lang/si/settings.php | 184 --- resources/lang/si/titles.php | 58 - resources/lang/si/twofaccounts.php | 174 --- resources/lang/si/validation.php | 207 ---- resources/lang/tr/admin.php | 148 --- resources/lang/tr/auth.php | 142 --- resources/lang/tr/commons.php | 95 -- resources/lang/tr/errors.php | 79 -- resources/lang/tr/groups.php | 41 - resources/lang/tr/languages.php | 29 - resources/lang/tr/notifications.php | 36 - resources/lang/tr/pagination.php | 19 - resources/lang/tr/passwords.php | 26 - resources/lang/tr/settings.php | 193 --- resources/lang/tr/titles.php | 58 - resources/lang/tr/twofaccounts.php | 182 --- resources/lang/tr/validation.php | 227 ---- resources/lang/uk/admin.php | 148 --- resources/lang/uk/auth.php | 142 --- resources/lang/uk/commons.php | 95 -- resources/lang/uk/errors.php | 79 -- resources/lang/uk/groups.php | 41 - resources/lang/uk/languages.php | 29 - resources/lang/uk/notifications.php | 36 - resources/lang/uk/pagination.php | 19 - resources/lang/uk/passwords.php | 26 - resources/lang/uk/settings.php | 193 --- resources/lang/uk/titles.php | 58 - resources/lang/uk/twofaccounts.php | 182 --- resources/lang/uk/validation.php | 227 ---- resources/lang/zh-CN/admin.php | 149 --- resources/lang/zh-CN/auth.php | 142 --- resources/lang/zh-CN/commons.php | 95 -- resources/lang/zh-CN/errors.php | 79 -- resources/lang/zh-CN/groups.php | 41 - resources/lang/zh-CN/languages.php | 29 - resources/lang/zh-CN/notifications.php | 36 - resources/lang/zh-CN/pagination.php | 19 - resources/lang/zh-CN/passwords.php | 26 - resources/lang/zh-CN/settings.php | 193 --- resources/lang/zh-CN/titles.php | 58 - resources/lang/zh-CN/twofaccounts.php | 182 --- resources/lang/zh-CN/validation.php | 227 ---- resources/lang/zh-TW/admin.php | 148 --- resources/lang/zh-TW/auth.php | 142 --- resources/lang/zh-TW/commons.php | 95 -- resources/lang/zh-TW/errors.php | 79 -- resources/lang/zh-TW/groups.php | 41 - resources/lang/zh-TW/languages.php | 29 - resources/lang/zh-TW/notifications.php | 36 - resources/lang/zh-TW/pagination.php | 19 - resources/lang/zh-TW/passwords.php | 26 - resources/lang/zh-TW/settings.php | 193 --- resources/lang/zh-TW/titles.php | 58 - resources/lang/zh-TW/twofaccounts.php | 182 --- resources/lang/zh-TW/validation.php | 227 ---- resources/views/emails/failedLogin.blade.php | 16 +- .../emails/signedInWithNewDevice.blade.php | 16 +- resources/views/landing.blade.php | 2 +- .../v1/Controllers/GroupControllerTest.php | 4 +- .../Console/FixServiceFieldEncryptionTest.php | 12 +- tests/Feature/Models/TwoFAccountModelTest.php | 2 +- .../FailedLoginNotificationTest.php | 2 +- .../SignedInWithNewDeviceNotificationTest.php | 2 +- .../TestEmailSettingNotificationTest.php | 2 +- tests/Unit/IconModelTest.php | 2 +- tests/Unit/TwoFAccountModelTest.php | 2 +- tsconfig.json | 2 + vite.config.js | 28 +- 412 files changed, 3531 insertions(+), 30057 deletions(-) create mode 100644 resources/js/composables/useI18n.ts create mode 100644 resources/js/i18n.ts delete mode 100644 resources/lang/ar/admin.php delete mode 100644 resources/lang/ar/auth.php delete mode 100644 resources/lang/ar/commons.php delete mode 100644 resources/lang/ar/errors.php delete mode 100644 resources/lang/ar/groups.php delete mode 100644 resources/lang/ar/languages.php delete mode 100644 resources/lang/ar/notifications.php delete mode 100644 resources/lang/ar/pagination.php delete mode 100644 resources/lang/ar/passwords.php delete mode 100644 resources/lang/ar/settings.php delete mode 100644 resources/lang/ar/titles.php delete mode 100644 resources/lang/ar/twofaccounts.php delete mode 100644 resources/lang/ar/validation.php delete mode 100644 resources/lang/bg/admin.php delete mode 100644 resources/lang/bg/auth.php delete mode 100644 resources/lang/bg/commons.php delete mode 100644 resources/lang/bg/errors.php delete mode 100644 resources/lang/bg/groups.php delete mode 100644 resources/lang/bg/languages.php delete mode 100644 resources/lang/bg/notifications.php delete mode 100644 resources/lang/bg/pagination.php delete mode 100644 resources/lang/bg/passwords.php delete mode 100644 resources/lang/bg/settings.php delete mode 100644 resources/lang/bg/titles.php delete mode 100644 resources/lang/bg/twofaccounts.php delete mode 100644 resources/lang/bg/validation.php delete mode 100644 resources/lang/da/admin.php delete mode 100644 resources/lang/da/auth.php delete mode 100644 resources/lang/da/commons.php delete mode 100644 resources/lang/da/errors.php delete mode 100644 resources/lang/da/groups.php delete mode 100644 resources/lang/da/languages.php delete mode 100644 resources/lang/da/notifications.php delete mode 100644 resources/lang/da/pagination.php delete mode 100644 resources/lang/da/passwords.php delete mode 100644 resources/lang/da/settings.php delete mode 100644 resources/lang/da/titles.php delete mode 100644 resources/lang/da/twofaccounts.php delete mode 100644 resources/lang/da/validation.php delete mode 100644 resources/lang/de/admin.php delete mode 100644 resources/lang/de/auth.php delete mode 100644 resources/lang/de/commons.php delete mode 100644 resources/lang/de/errors.php delete mode 100644 resources/lang/de/groups.php delete mode 100644 resources/lang/de/languages.php delete mode 100644 resources/lang/de/notifications.php delete mode 100644 resources/lang/de/pagination.php delete mode 100644 resources/lang/de/passwords.php delete mode 100644 resources/lang/de/settings.php delete mode 100644 resources/lang/de/titles.php delete mode 100644 resources/lang/de/twofaccounts.php delete mode 100644 resources/lang/de/validation.php delete mode 100644 resources/lang/en/admin.php delete mode 100644 resources/lang/en/auth.php delete mode 100644 resources/lang/en/commons.php delete mode 100644 resources/lang/en/errors.php delete mode 100644 resources/lang/en/groups.php delete mode 100644 resources/lang/en/languages.php delete mode 100644 resources/lang/en/notifications.php delete mode 100644 resources/lang/en/pagination.php delete mode 100644 resources/lang/en/passwords.php delete mode 100644 resources/lang/en/settings.php delete mode 100644 resources/lang/en/titles.php delete mode 100644 resources/lang/en/twofaccounts.php delete mode 100644 resources/lang/en/validation.php delete mode 100644 resources/lang/es-ES/admin.php delete mode 100644 resources/lang/es-ES/auth.php delete mode 100644 resources/lang/es-ES/commons.php delete mode 100644 resources/lang/es-ES/errors.php delete mode 100644 resources/lang/es-ES/groups.php delete mode 100644 resources/lang/es-ES/languages.php delete mode 100644 resources/lang/es-ES/notifications.php delete mode 100644 resources/lang/es-ES/pagination.php delete mode 100644 resources/lang/es-ES/passwords.php delete mode 100644 resources/lang/es-ES/settings.php delete mode 100644 resources/lang/es-ES/titles.php delete mode 100644 resources/lang/es-ES/twofaccounts.php delete mode 100644 resources/lang/es-ES/validation.php create mode 100644 resources/lang/fr.json delete mode 100644 resources/lang/fr/admin.php delete mode 100644 resources/lang/fr/auth.php delete mode 100644 resources/lang/fr/commons.php delete mode 100644 resources/lang/fr/errors.php delete mode 100644 resources/lang/fr/groups.php delete mode 100644 resources/lang/fr/languages.php delete mode 100644 resources/lang/fr/notifications.php delete mode 100644 resources/lang/fr/pagination.php delete mode 100644 resources/lang/fr/passwords.php delete mode 100644 resources/lang/fr/settings.php delete mode 100644 resources/lang/fr/titles.php delete mode 100644 resources/lang/fr/twofaccounts.php delete mode 100644 resources/lang/fr/validation.php delete mode 100644 resources/lang/hi/admin.php delete mode 100644 resources/lang/hi/auth.php delete mode 100644 resources/lang/hi/commons.php delete mode 100644 resources/lang/hi/errors.php delete mode 100644 resources/lang/hi/groups.php delete mode 100644 resources/lang/hi/languages.php delete mode 100644 resources/lang/hi/notifications.php delete mode 100644 resources/lang/hi/pagination.php delete mode 100644 resources/lang/hi/passwords.php delete mode 100644 resources/lang/hi/settings.php delete mode 100644 resources/lang/hi/titles.php delete mode 100644 resources/lang/hi/twofaccounts.php delete mode 100644 resources/lang/hi/validation.php delete mode 100644 resources/lang/id/admin.php delete mode 100644 resources/lang/id/auth.php delete mode 100644 resources/lang/id/commons.php delete mode 100644 resources/lang/id/errors.php delete mode 100644 resources/lang/id/groups.php delete mode 100644 resources/lang/id/languages.php delete mode 100644 resources/lang/id/notifications.php delete mode 100644 resources/lang/id/pagination.php delete mode 100644 resources/lang/id/passwords.php delete mode 100644 resources/lang/id/settings.php delete mode 100644 resources/lang/id/titles.php delete mode 100644 resources/lang/id/twofaccounts.php delete mode 100644 resources/lang/id/validation.php delete mode 100644 resources/lang/it/admin.php delete mode 100644 resources/lang/it/auth.php delete mode 100644 resources/lang/it/commons.php delete mode 100644 resources/lang/it/errors.php delete mode 100644 resources/lang/it/groups.php delete mode 100644 resources/lang/it/languages.php delete mode 100644 resources/lang/it/notifications.php delete mode 100644 resources/lang/it/pagination.php delete mode 100644 resources/lang/it/passwords.php delete mode 100644 resources/lang/it/settings.php delete mode 100644 resources/lang/it/titles.php delete mode 100644 resources/lang/it/twofaccounts.php delete mode 100644 resources/lang/it/validation.php delete mode 100644 resources/lang/ja/admin.php delete mode 100644 resources/lang/ja/auth.php delete mode 100644 resources/lang/ja/commons.php delete mode 100644 resources/lang/ja/errors.php delete mode 100644 resources/lang/ja/groups.php delete mode 100644 resources/lang/ja/languages.php delete mode 100644 resources/lang/ja/notifications.php delete mode 100644 resources/lang/ja/pagination.php delete mode 100644 resources/lang/ja/passwords.php delete mode 100644 resources/lang/ja/settings.php delete mode 100644 resources/lang/ja/titles.php delete mode 100644 resources/lang/ja/twofaccounts.php delete mode 100644 resources/lang/ja/validation.php delete mode 100644 resources/lang/ko/admin.php delete mode 100644 resources/lang/ko/auth.php delete mode 100644 resources/lang/ko/commons.php delete mode 100644 resources/lang/ko/errors.php delete mode 100644 resources/lang/ko/groups.php delete mode 100644 resources/lang/ko/languages.php delete mode 100644 resources/lang/ko/notifications.php delete mode 100644 resources/lang/ko/pagination.php delete mode 100644 resources/lang/ko/passwords.php delete mode 100644 resources/lang/ko/settings.php delete mode 100644 resources/lang/ko/titles.php delete mode 100644 resources/lang/ko/twofaccounts.php delete mode 100644 resources/lang/ko/validation.php delete mode 100644 resources/lang/nl/admin.php delete mode 100644 resources/lang/nl/auth.php delete mode 100644 resources/lang/nl/commons.php delete mode 100644 resources/lang/nl/errors.php delete mode 100644 resources/lang/nl/groups.php delete mode 100644 resources/lang/nl/languages.php delete mode 100644 resources/lang/nl/notifications.php delete mode 100644 resources/lang/nl/pagination.php delete mode 100644 resources/lang/nl/passwords.php delete mode 100644 resources/lang/nl/settings.php delete mode 100644 resources/lang/nl/titles.php delete mode 100644 resources/lang/nl/twofaccounts.php delete mode 100644 resources/lang/nl/validation.php delete mode 100644 resources/lang/pl/admin.php delete mode 100644 resources/lang/pl/auth.php delete mode 100644 resources/lang/pl/commons.php delete mode 100644 resources/lang/pl/errors.php delete mode 100644 resources/lang/pl/groups.php delete mode 100644 resources/lang/pl/languages.php delete mode 100644 resources/lang/pl/notifications.php delete mode 100644 resources/lang/pl/pagination.php delete mode 100644 resources/lang/pl/passwords.php delete mode 100644 resources/lang/pl/settings.php delete mode 100644 resources/lang/pl/titles.php delete mode 100644 resources/lang/pl/twofaccounts.php delete mode 100644 resources/lang/pl/validation.php delete mode 100644 resources/lang/pt-BR/admin.php delete mode 100644 resources/lang/pt-BR/auth.php delete mode 100644 resources/lang/pt-BR/commons.php delete mode 100644 resources/lang/pt-BR/errors.php delete mode 100644 resources/lang/pt-BR/groups.php delete mode 100644 resources/lang/pt-BR/languages.php delete mode 100644 resources/lang/pt-BR/notifications.php delete mode 100644 resources/lang/pt-BR/pagination.php delete mode 100644 resources/lang/pt-BR/passwords.php delete mode 100644 resources/lang/pt-BR/settings.php delete mode 100644 resources/lang/pt-BR/titles.php delete mode 100644 resources/lang/pt-BR/twofaccounts.php delete mode 100644 resources/lang/pt-BR/validation.php delete mode 100644 resources/lang/pt-PT/admin.php delete mode 100644 resources/lang/pt-PT/auth.php delete mode 100644 resources/lang/pt-PT/commons.php delete mode 100644 resources/lang/pt-PT/errors.php delete mode 100644 resources/lang/pt-PT/groups.php delete mode 100644 resources/lang/pt-PT/languages.php delete mode 100644 resources/lang/pt-PT/notifications.php delete mode 100644 resources/lang/pt-PT/pagination.php delete mode 100644 resources/lang/pt-PT/passwords.php delete mode 100644 resources/lang/pt-PT/settings.php delete mode 100644 resources/lang/pt-PT/titles.php delete mode 100644 resources/lang/pt-PT/twofaccounts.php delete mode 100644 resources/lang/pt-PT/validation.php delete mode 100644 resources/lang/ro/admin.php delete mode 100644 resources/lang/ro/auth.php delete mode 100644 resources/lang/ro/commons.php delete mode 100644 resources/lang/ro/errors.php delete mode 100644 resources/lang/ro/groups.php delete mode 100644 resources/lang/ro/languages.php delete mode 100644 resources/lang/ro/notifications.php delete mode 100644 resources/lang/ro/pagination.php delete mode 100644 resources/lang/ro/passwords.php delete mode 100644 resources/lang/ro/settings.php delete mode 100644 resources/lang/ro/titles.php delete mode 100644 resources/lang/ro/twofaccounts.php delete mode 100644 resources/lang/ro/validation.php delete mode 100644 resources/lang/ru/admin.php delete mode 100644 resources/lang/ru/auth.php delete mode 100644 resources/lang/ru/commons.php delete mode 100644 resources/lang/ru/errors.php delete mode 100644 resources/lang/ru/groups.php delete mode 100644 resources/lang/ru/languages.php delete mode 100644 resources/lang/ru/notifications.php delete mode 100644 resources/lang/ru/pagination.php delete mode 100644 resources/lang/ru/passwords.php delete mode 100644 resources/lang/ru/settings.php delete mode 100644 resources/lang/ru/titles.php delete mode 100644 resources/lang/ru/twofaccounts.php delete mode 100644 resources/lang/ru/validation.php delete mode 100644 resources/lang/si/admin.php delete mode 100644 resources/lang/si/auth.php delete mode 100644 resources/lang/si/commons.php delete mode 100644 resources/lang/si/errors.php delete mode 100644 resources/lang/si/groups.php delete mode 100644 resources/lang/si/languages.php delete mode 100644 resources/lang/si/notifications.php delete mode 100644 resources/lang/si/pagination.php delete mode 100644 resources/lang/si/passwords.php delete mode 100644 resources/lang/si/settings.php delete mode 100644 resources/lang/si/titles.php delete mode 100644 resources/lang/si/twofaccounts.php delete mode 100644 resources/lang/si/validation.php delete mode 100644 resources/lang/tr/admin.php delete mode 100644 resources/lang/tr/auth.php delete mode 100644 resources/lang/tr/commons.php delete mode 100644 resources/lang/tr/errors.php delete mode 100644 resources/lang/tr/groups.php delete mode 100644 resources/lang/tr/languages.php delete mode 100644 resources/lang/tr/notifications.php delete mode 100644 resources/lang/tr/pagination.php delete mode 100644 resources/lang/tr/passwords.php delete mode 100644 resources/lang/tr/settings.php delete mode 100644 resources/lang/tr/titles.php delete mode 100644 resources/lang/tr/twofaccounts.php delete mode 100644 resources/lang/tr/validation.php delete mode 100644 resources/lang/uk/admin.php delete mode 100644 resources/lang/uk/auth.php delete mode 100644 resources/lang/uk/commons.php delete mode 100644 resources/lang/uk/errors.php delete mode 100644 resources/lang/uk/groups.php delete mode 100644 resources/lang/uk/languages.php delete mode 100644 resources/lang/uk/notifications.php delete mode 100644 resources/lang/uk/pagination.php delete mode 100644 resources/lang/uk/passwords.php delete mode 100644 resources/lang/uk/settings.php delete mode 100644 resources/lang/uk/titles.php delete mode 100644 resources/lang/uk/twofaccounts.php delete mode 100644 resources/lang/uk/validation.php delete mode 100644 resources/lang/zh-CN/admin.php delete mode 100644 resources/lang/zh-CN/auth.php delete mode 100644 resources/lang/zh-CN/commons.php delete mode 100644 resources/lang/zh-CN/errors.php delete mode 100644 resources/lang/zh-CN/groups.php delete mode 100644 resources/lang/zh-CN/languages.php delete mode 100644 resources/lang/zh-CN/notifications.php delete mode 100644 resources/lang/zh-CN/pagination.php delete mode 100644 resources/lang/zh-CN/passwords.php delete mode 100644 resources/lang/zh-CN/settings.php delete mode 100644 resources/lang/zh-CN/titles.php delete mode 100644 resources/lang/zh-CN/twofaccounts.php delete mode 100644 resources/lang/zh-CN/validation.php delete mode 100644 resources/lang/zh-TW/admin.php delete mode 100644 resources/lang/zh-TW/auth.php delete mode 100644 resources/lang/zh-TW/commons.php delete mode 100644 resources/lang/zh-TW/errors.php delete mode 100644 resources/lang/zh-TW/groups.php delete mode 100644 resources/lang/zh-TW/languages.php delete mode 100644 resources/lang/zh-TW/notifications.php delete mode 100644 resources/lang/zh-TW/pagination.php delete mode 100644 resources/lang/zh-TW/passwords.php delete mode 100644 resources/lang/zh-TW/settings.php delete mode 100644 resources/lang/zh-TW/titles.php delete mode 100644 resources/lang/zh-TW/twofaccounts.php delete mode 100644 resources/lang/zh-TW/validation.php diff --git a/app/Api/v1/Controllers/IconController.php b/app/Api/v1/Controllers/IconController.php index 9cd884ae..605ba75d 100644 --- a/app/Api/v1/Controllers/IconController.php +++ b/app/Api/v1/Controllers/IconController.php @@ -41,7 +41,7 @@ class IconController extends Controller return $isStored ? response()->json(['filename' => $name], 201) - : response()->json(['message' => __('errors.file_upload_failed')], 500); + : response()->json(['message' => __('error.file_upload_failed')], 500); } /** diff --git a/app/Api/v1/Controllers/QrCodeController.php b/app/Api/v1/Controllers/QrCodeController.php index 8358d47a..f3e83a26 100644 --- a/app/Api/v1/Controllers/QrCodeController.php +++ b/app/Api/v1/Controllers/QrCodeController.php @@ -34,6 +34,6 @@ class QrCodeController extends Controller return $file instanceof \Illuminate\Http\UploadedFile ? response()->json(['data' => QrCode::decode($file)], 200) - : response()->json(['message' => __('errors.file_upload_failed')], 500); + : response()->json(['message' => __('error.file_upload_failed')], 500); } } diff --git a/app/Api/v1/Controllers/SettingController.php b/app/Api/v1/Controllers/SettingController.php index 7577bdeb..d73c570a 100644 --- a/app/Api/v1/Controllers/SettingController.php +++ b/app/Api/v1/Controllers/SettingController.php @@ -109,7 +109,7 @@ class SettingController extends Controller if (array_key_exists($settingName, $defaultAppSettings) && $defaultAppSettings[$settingName] !== '') { return response()->json( ['message' => 'bad request', - 'reason' => [__('errors.delete_user_setting_only')], + 'reason' => [__('error.delete_user_setting_only')], ], 400); } diff --git a/app/Api/v1/Controllers/TwoFAccountController.php b/app/Api/v1/Controllers/TwoFAccountController.php index 70997761..b301e6b2 100644 --- a/app/Api/v1/Controllers/TwoFAccountController.php +++ b/app/Api/v1/Controllers/TwoFAccountController.php @@ -151,7 +151,7 @@ class TwoFAccountController extends Controller return $migrationResource instanceof \Illuminate\Http\UploadedFile ? new TwoFAccountCollection(TwoFAccounts::migrate($migrationResource->get())) - : response()->json(['message' => __('errors.file_upload_failed')], 500); + : response()->json(['message' => __('error.file_upload_failed')], 500); } else { return new TwoFAccountCollection(TwoFAccounts::migrate($request->payload)); } @@ -203,7 +203,7 @@ class TwoFAccountController extends Controller if ($this->tooManyIds($validated['ids'])) { return response()->json([ 'message' => 'bad request', - 'reason' => [__('errors.too_many_ids')], + 'reason' => [__('error.too_many_ids')], ], 400); } @@ -276,7 +276,7 @@ class TwoFAccountController extends Controller if ($this->tooManyIds($validated['ids'])) { return response()->json([ 'message' => 'bad request', - 'reason' => [__('errors.too_many_ids')], + 'reason' => [__('error.too_many_ids')], ], 400); } @@ -316,7 +316,7 @@ class TwoFAccountController extends Controller if ($this->tooManyIds($validated['ids'])) { return response()->json([ 'message' => 'bad request', - 'reason' => [__('errors.too_many_ids')], + 'reason' => [__('error.too_many_ids')], ], 400); } diff --git a/app/Api/v1/Controllers/UserManagerController.php b/app/Api/v1/Controllers/UserManagerController.php index 55cf4c2d..c33dd804 100644 --- a/app/Api/v1/Controllers/UserManagerController.php +++ b/app/Api/v1/Controllers/UserManagerController.php @@ -72,7 +72,7 @@ class UserManagerController extends Controller } else { return response()->json([ 'message' => 'bad request', - 'reason' => is_string($response) ? __($response) : __('errors.no_pwd_reset_for_this_user_type'), + 'reason' => is_string($response) ? __($response) : __('error.no_pwd_reset_for_this_user_type'), ], 400); } @@ -181,7 +181,7 @@ class UserManagerController extends Controller // Deletion will not be done (and returns False) if the user is the only existing admin (see UserObserver clas) return $user->delete() === false ? response()->json([ - 'message' => __('errors.cannot_delete_the_only_admin'), + 'message' => __('error.cannot_delete_the_only_admin'), ], 403) : response()->json(null, 204); } @@ -203,7 +203,7 @@ class UserManagerController extends Controller } return response()->json([ - 'message' => __('errors.cannot_demote_the_only_admin'), + 'message' => __('error.cannot_demote_the_only_admin'), ], 403); } diff --git a/app/Api/v1/Requests/GroupStoreRequest.php b/app/Api/v1/Requests/GroupStoreRequest.php index d42c742a..be1fc7cb 100644 --- a/app/Api/v1/Requests/GroupStoreRequest.php +++ b/app/Api/v1/Requests/GroupStoreRequest.php @@ -30,7 +30,7 @@ class GroupStoreRequest extends FormRequest 'required', 'regex:/^[A-zÀ-ú0-9\s\-_]+$/', 'max:32', - Rule::notIn([__('commons.all')]), + Rule::notIn([__('message.all')]), Rule::unique('groups')->where(fn ($query) => $query->where('user_id', $this->user()->id)), ], ]; @@ -44,7 +44,7 @@ class GroupStoreRequest extends FormRequest public function messages() : array { return [ - 'name.not_in' => __('errors.reserved_name_please_choose_something_else'), + 'name.not_in' => __('error.reserved_name_please_choose_something_else'), ]; } } diff --git a/app/Console/Commands/Maintenance/FixOrphanAccounts.php b/app/Console/Commands/Maintenance/FixOrphanAccounts.php index e21b2105..ec31ffd6 100644 --- a/app/Console/Commands/Maintenance/FixOrphanAccounts.php +++ b/app/Console/Commands/Maintenance/FixOrphanAccounts.php @@ -67,7 +67,7 @@ class FixOrphanAccounts extends Command $this->line('Trying to fix them...'); foreach ($twofaccounts as $twofaccount) { - if ($twofaccount->legacy_uri === __('errors.indecipherable')) { + if ($twofaccount->legacy_uri === __('error.indecipherable')) { $this->error(sprintf('Account #%d cannot be deciphered', $twofaccount->id)); } else { try { diff --git a/app/Console/Commands/Maintenance/FixServiceFieldEncryption.php b/app/Console/Commands/Maintenance/FixServiceFieldEncryption.php index ad07e426..f72a0756 100644 --- a/app/Console/Commands/Maintenance/FixServiceFieldEncryption.php +++ b/app/Console/Commands/Maintenance/FixServiceFieldEncryption.php @@ -72,8 +72,8 @@ class FixServiceFieldEncryption extends Command protected function encryptServiceField() : void { $twofaccounts = TwoFAccount::all(); - $fullyEncryptedTwofaccounts = $twofaccounts->whereNotIn('service', [__('errors.indecipherable')]); - $partiallyEncryptedTwofaccounts = $twofaccounts->where('service', __('errors.indecipherable')); + $fullyEncryptedTwofaccounts = $twofaccounts->whereNotIn('service', [__('error.indecipherable')]); + $partiallyEncryptedTwofaccounts = $twofaccounts->where('service', __('error.indecipherable')); if ($fullyEncryptedTwofaccounts->count() === $twofaccounts->count()) { $this->components->info('The Service field is fully encrypted'); diff --git a/app/Console/Commands/Maintenance/FixUnsplittedAccounts.php b/app/Console/Commands/Maintenance/FixUnsplittedAccounts.php index a46b2b54..819ea1b5 100644 --- a/app/Console/Commands/Maintenance/FixUnsplittedAccounts.php +++ b/app/Console/Commands/Maintenance/FixUnsplittedAccounts.php @@ -76,7 +76,7 @@ class FixUnsplittedAccounts extends Command $this->line('Trying to fix them...'); foreach ($twofaccounts as $twofaccount) { - if ($twofaccount->legacy_uri === __('errors.indecipherable')) { + if ($twofaccount->legacy_uri === __('error.indecipherable')) { $this->error(sprintf('Account #%d cannot be deciphered', $twofaccount->id)); } else { try { diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 3b02033a..dbe9fbc1 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -62,37 +62,37 @@ class Handler extends ExceptionHandler $this->renderable(function (InvalidMigrationDataException $exception, $request) { return response()->json([ - 'message' => __('errors.invalid_x_migration', ['appname' => $exception->getMessage()]), + 'message' => __('error.invalid_x_migration', ['appname' => $exception->getMessage()]), ], 400); }); $this->renderable(function (UnsupportedMigrationException $exception, $request) { return response()->json([ - 'message' => __('errors.unsupported_migration'), + 'message' => __('error.unsupported_migration'), ], 400); }); $this->renderable(function (EncryptedMigrationException $exception, $request) { return response()->json([ - 'message' => __('errors.encrypted_migration'), + 'message' => __('error.encrypted_migration'), ], 400); }); $this->renderable(function (UndecipherableException $exception, $request) { return response()->json([ - 'message' => __('errors.cannot_decipher_secret'), + 'message' => __('error.cannot_decipher_secret'), ], 400); }); $this->renderable(function (UnsupportedOtpTypeException $exception, $request) { return response()->json([ - 'message' => __('errors.unsupported_otp_type'), + 'message' => __('error.unsupported_otp_type'), ], 400); }); $this->renderable(function (FailedIconStoreDatabaseTogglingException $exception, $request) { return response()->json([ - 'message' => __('errors.failed_icon_store_database_toggling'), + 'message' => __('error.failed_icon_store_database_toggling'), ], 400); }); diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index f9222b05..2a6efbab 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -148,7 +148,7 @@ class LoginController extends Controller $this->throttleKey($request) ); - return response()->json(['message' => Lang::get('auth.throttle', ['seconds' => $seconds])], Response::HTTP_TOO_MANY_REQUESTS); + return response()->json(['message' => Lang::get('message.auth.throttle', ['seconds' => $seconds])], Response::HTTP_TOO_MANY_REQUESTS); } /** diff --git a/app/Http/Controllers/Auth/PasswordController.php b/app/Http/Controllers/Auth/PasswordController.php index 1e8ff517..e146526f 100644 --- a/app/Http/Controllers/Auth/PasswordController.php +++ b/app/Http/Controllers/Auth/PasswordController.php @@ -23,13 +23,13 @@ class PasswordController extends Controller if ($user->oauth_provider) { Log::notice('Password update rejected: external account from a sso provider'); - return response()->json(['message' => __('errors.account_managed_by_external_provider')], 400); + return response()->json(['message' => __('error.account_managed_by_external_provider')], 400); } if (! Hash::check($validated['currentPassword'], Auth::user()->password)) { Log::notice('Password update failed: wrong password provided'); - return response()->json(['message' => __('errors.wrong_current_password')], 400); + return response()->json(['message' => __('error.wrong_current_password')], 400); } if (! config('2fauth.config.isDemoApp')) { @@ -39,6 +39,6 @@ class PasswordController extends Controller Log::info(sprintf('Password of user ID #%s updated', $user->id)); } - return response()->json(['message' => __('auth.forms.password_successfully_changed')]); + return response()->json(['message' => __('message.auth.forms.password_successfully_changed')]); } } diff --git a/app/Http/Controllers/Auth/PersonalAccessTokenController.php b/app/Http/Controllers/Auth/PersonalAccessTokenController.php index 2057dc55..6b057a4b 100644 --- a/app/Http/Controllers/Auth/PersonalAccessTokenController.php +++ b/app/Http/Controllers/Auth/PersonalAccessTokenController.php @@ -18,7 +18,7 @@ class PersonalAccessTokenController extends PassportPatController public function forUser(Request $request) { if (Gate::denies('manage-pat')) { - throw new AccessDeniedHttpException(__('errors.unsupported_with_sso_only')); + throw new AccessDeniedHttpException(__('error.unsupported_with_sso_only')); } return parent::forUser($request); @@ -33,7 +33,7 @@ class PersonalAccessTokenController extends PassportPatController public function store(Request $request) { if (Gate::denies('manage-pat')) { - throw new AccessDeniedHttpException(__('errors.unsupported_with_sso_only')); + throw new AccessDeniedHttpException(__('error.unsupported_with_sso_only')); } return parent::store($request); @@ -49,7 +49,7 @@ class PersonalAccessTokenController extends PassportPatController public function destroy(Request $request, $tokenId) { if (Gate::denies('manage-pat')) { - throw new AccessDeniedHttpException(__('errors.unsupported_with_sso_only')); + throw new AccessDeniedHttpException(__('error.unsupported_with_sso_only')); } return parent::destroy($request, $tokenId); diff --git a/app/Http/Controllers/Auth/UserController.php b/app/Http/Controllers/Auth/UserController.php index 55b77d9e..8a387134 100644 --- a/app/Http/Controllers/Auth/UserController.php +++ b/app/Http/Controllers/Auth/UserController.php @@ -27,13 +27,13 @@ class UserController extends Controller if (config('auth.defaults.guard') === 'reverse-proxy-guard' || $user->oauth_provider) { Log::notice('Account update rejected: reverse-proxy-guard enabled or account from external sso provider'); - return response()->json(['message' => __('errors.account_managed_by_external_provider')], 400); + return response()->json(['message' => __('error.account_managed_by_external_provider')], 400); } if (! Hash::check($request->password, Auth::user()->password)) { Log::notice('Account update failed: wrong password provided'); - return response()->json(['message' => __('errors.wrong_current_password')], 400); + return response()->json(['message' => __('error.wrong_current_password')], 400); } if (! config('2fauth.config.isDemoApp')) { @@ -58,14 +58,14 @@ class UserController extends Controller $user = Auth::user(); if (! Hash::check($validated['password'], Auth::user()->password)) { - return response()->json(['message' => __('errors.wrong_current_password')], 400); + return response()->json(['message' => __('error.wrong_current_password')], 400); } // This will delete the user and all its 2FAs & Groups thanks to the onCascadeDelete constrains. // Deletion will not be done (and returns False) if the user is the only existing admin (see UserObserver clas) return $user->delete() === false ? response()->json([ - 'message' => __('errors.cannot_delete_the_only_admin'), + 'message' => __('error.cannot_delete_the_only_admin'), ], 400) : response()->json(null, 204); } diff --git a/app/Http/Controllers/Auth/WebAuthnDeviceLostController.php b/app/Http/Controllers/Auth/WebAuthnDeviceLostController.php index 30df5ab8..5ddefa3b 100644 --- a/app/Http/Controllers/Auth/WebAuthnDeviceLostController.php +++ b/app/Http/Controllers/Auth/WebAuthnDeviceLostController.php @@ -51,6 +51,6 @@ class WebAuthnDeviceLostController extends Controller */ protected function sendRecoveryLinkResponse(Request $request, string $response) { - return response()->json(['message' => __('auth.webauthn.account_recovery_email_sent')]); + return response()->json(['message' => __('message.auth.webauthn.account_recovery_email_sent')]); } } diff --git a/app/Http/Controllers/Auth/WebAuthnLoginController.php b/app/Http/Controllers/Auth/WebAuthnLoginController.php index 688e8d85..5f03783c 100644 --- a/app/Http/Controllers/Auth/WebAuthnLoginController.php +++ b/app/Http/Controllers/Auth/WebAuthnLoginController.php @@ -164,7 +164,7 @@ class WebAuthnLoginController extends Controller $this->throttleKey($request) ); - return response()->json(['message' => Lang::get('auth.throttle', ['seconds' => $seconds])], Response::HTTP_TOO_MANY_REQUESTS); + return response()->json(['message' => Lang::get('message.auth.throttle', ['seconds' => $seconds])], Response::HTTP_TOO_MANY_REQUESTS); } /** diff --git a/app/Http/Controllers/Auth/WebAuthnManageController.php b/app/Http/Controllers/Auth/WebAuthnManageController.php index 90bfce93..bf9eab65 100644 --- a/app/Http/Controllers/Auth/WebAuthnManageController.php +++ b/app/Http/Controllers/Auth/WebAuthnManageController.php @@ -19,7 +19,7 @@ class WebAuthnManageController extends Controller public function index(Request $request) { if (Gate::denies('manage-webauthn-credentials')) { - throw new AccessDeniedHttpException(__('errors.unsupported_with_sso_only')); + throw new AccessDeniedHttpException(__('error.unsupported_with_sso_only')); } $allUserCredentials = $request->user()->webAuthnCredentials()->WhereEnabled()->get(); @@ -54,7 +54,7 @@ class WebAuthnManageController extends Controller Log::info('Deletion of security device requested'); if (Gate::denies('manage-webauthn-credentials')) { - throw new AccessDeniedHttpException(__('errors.unsupported_with_sso_only')); + throw new AccessDeniedHttpException(__('error.unsupported_with_sso_only')); } $user = $request->user(); diff --git a/app/Http/Controllers/Auth/WebAuthnRecoveryController.php b/app/Http/Controllers/Auth/WebAuthnRecoveryController.php index 49d9a995..cb0e5c23 100644 --- a/app/Http/Controllers/Auth/WebAuthnRecoveryController.php +++ b/app/Http/Controllers/Auth/WebAuthnRecoveryController.php @@ -80,7 +80,7 @@ class WebAuthnRecoveryController extends Controller */ protected function sendRecoveryResponse(Request $request, string $response) : JsonResponse { - return response()->json(['message' => __('auth.webauthn.webauthn_login_disabled')]); + return response()->json(['message' => __('message.auth.webauthn.webauthn_login_disabled')]); } /** @@ -93,7 +93,7 @@ class WebAuthnRecoveryController extends Controller { switch ($response) { case Password::INVALID_TOKEN: - throw ValidationException::withMessages(['token' => [__('auth.webauthn.invalid_reset_token')]]); + throw ValidationException::withMessages(['token' => [__('message.auth.webauthn.invalid_reset_token')]]); default: throw ValidationException::withMessages(['email' => [trans($response)]]); } diff --git a/app/Http/Middleware/RejectIfAuthenticated.php b/app/Http/Middleware/RejectIfAuthenticated.php index 2de4095a..06ef0992 100644 --- a/app/Http/Middleware/RejectIfAuthenticated.php +++ b/app/Http/Middleware/RejectIfAuthenticated.php @@ -20,7 +20,7 @@ class RejectIfAuthenticated foreach ($guards as $guard) { if (Auth::guard($guard)->check()) { - return response()->json(['message' => __('auth.already_authenticated')], 400); + return response()->json(['message' => __('message.auth.already_authenticated')], 400); } } diff --git a/app/Http/Middleware/RejectIfDemoMode.php b/app/Http/Middleware/RejectIfDemoMode.php index a6d18a7b..9a2e27b7 100644 --- a/app/Http/Middleware/RejectIfDemoMode.php +++ b/app/Http/Middleware/RejectIfDemoMode.php @@ -19,7 +19,7 @@ class RejectIfDemoMode if (config('2fauth.config.isDemoApp')) { Log::info('Cannot request this action in Demo mode'); - return response()->json(['message' => __('auth.forms.disabled_in_demo')], Response::HTTP_UNAUTHORIZED); + return response()->json(['message' => __('message.auth.forms.disabled_in_demo')], Response::HTTP_UNAUTHORIZED); } return $next($request); diff --git a/app/Http/Middleware/RejectIfReverseProxy.php b/app/Http/Middleware/RejectIfReverseProxy.php index 889ada97..52167be5 100644 --- a/app/Http/Middleware/RejectIfReverseProxy.php +++ b/app/Http/Middleware/RejectIfReverseProxy.php @@ -19,7 +19,7 @@ class RejectIfReverseProxy Log::info('Cannot request this action in reverse proxy mode'); return response()->json([ - 'message' => __('errors.unsupported_with_reverseproxy'), + 'message' => __('error.unsupported_with_reverseproxy'), ], 405); } diff --git a/app/Http/Middleware/RejectIfSsoOnlyAndNotForAdmin.php b/app/Http/Middleware/RejectIfSsoOnlyAndNotForAdmin.php index 64362925..af68b5b8 100644 --- a/app/Http/Middleware/RejectIfSsoOnlyAndNotForAdmin.php +++ b/app/Http/Middleware/RejectIfSsoOnlyAndNotForAdmin.php @@ -34,7 +34,7 @@ class RejectIfSsoOnlyAndNotForAdmin Log::notice(sprintf('Request to %s rejected, only Admins can request it while authentication is restricted to SSO only', $request->getPathInfo())); - return response()->json(['message' => __('errors.unsupported_with_sso_only')], Response::HTTP_METHOD_NOT_ALLOWED); + return response()->json(['message' => __('error.unsupported_with_sso_only')], Response::HTTP_METHOD_NOT_ALLOWED); } return $next($request); diff --git a/app/Http/Requests/WebauthnAttestationRequest.php b/app/Http/Requests/WebauthnAttestationRequest.php index f193a643..9019c9a6 100644 --- a/app/Http/Requests/WebauthnAttestationRequest.php +++ b/app/Http/Requests/WebauthnAttestationRequest.php @@ -18,7 +18,7 @@ class WebauthnAttestationRequest extends AttestationRequest */ protected function failedAuthorization() { - throw new AccessDeniedHttpException(__('errors.unsupported_with_sso_only')); + throw new AccessDeniedHttpException(__('error.unsupported_with_sso_only')); } /** diff --git a/app/Http/Requests/WebauthnAttestedRequest.php b/app/Http/Requests/WebauthnAttestedRequest.php index b22be57f..58729649 100644 --- a/app/Http/Requests/WebauthnAttestedRequest.php +++ b/app/Http/Requests/WebauthnAttestedRequest.php @@ -18,7 +18,7 @@ class WebauthnAttestedRequest extends AttestedRequest */ protected function failedAuthorization() { - throw new AccessDeniedHttpException(__('errors.unsupported_with_sso_only')); + throw new AccessDeniedHttpException(__('error.unsupported_with_sso_only')); } /** diff --git a/app/Http/Requests/WebauthnRenameRequest.php b/app/Http/Requests/WebauthnRenameRequest.php index 4f65d443..c5dba0a1 100644 --- a/app/Http/Requests/WebauthnRenameRequest.php +++ b/app/Http/Requests/WebauthnRenameRequest.php @@ -18,7 +18,7 @@ class WebauthnRenameRequest extends FormRequest */ protected function failedAuthorization() { - throw new AccessDeniedHttpException(__('errors.unsupported_with_sso_only')); + throw new AccessDeniedHttpException(__('error.unsupported_with_sso_only')); } /** diff --git a/app/Models/Group.php b/app/Models/Group.php index 0d677e75..2ad064b6 100644 --- a/app/Models/Group.php +++ b/app/Models/Group.php @@ -112,7 +112,7 @@ class Group extends Model // resolution logic to return an instance instead of not found. if ($value === '0') { $group = new self([ - 'name' => __('commons.all'), + 'name' => __('message.all'), ]); $group->id = 0; diff --git a/app/Models/Traits/CanEncryptField.php b/app/Models/Traits/CanEncryptField.php index 26d6bdf0..d9d2d6a3 100644 --- a/app/Models/Traits/CanEncryptField.php +++ b/app/Models/Traits/CanEncryptField.php @@ -17,7 +17,7 @@ trait CanEncryptField try { return Crypt::decryptString($value); } catch (\Exception $ex) { - return __('errors.indecipherable'); + return __('error.indecipherable'); } } else { return $value; diff --git a/app/Models/TwoFAccount.php b/app/Models/TwoFAccount.php index a080bc50..0026e3a9 100644 --- a/app/Models/TwoFAccount.php +++ b/app/Models/TwoFAccount.php @@ -406,7 +406,7 @@ class TwoFAccount extends Model implements Sortable Log::info(sprintf('OTP requested for TwoFAccount (%s)', $this->id ? 'id:' . $this->id : 'preview')); // Early exit if the model has an undecipherable secret - if (strtolower($this->secret) === __('errors.indecipherable')) { + if (strtolower($this->secret) === __('error.indecipherable')) { Log::error('Secret cannot be deciphered, OTP generation aborted'); throw new UndecipherableException; diff --git a/app/Notifications/FailedLoginNotification.php b/app/Notifications/FailedLoginNotification.php index d6cd8d16..8da26441 100644 --- a/app/Notifications/FailedLoginNotification.php +++ b/app/Notifications/FailedLoginNotification.php @@ -45,7 +45,7 @@ class FailedLoginNotification extends Notification public function toMail(mixed $notifiable) : MailMessage { return (new MailMessage) - ->subject(__('notifications.failed_login.subject')) + ->subject(__('message.notifications.failed_login.subject')) ->markdown('emails.failedLogin', [ 'account' => $notifiable, 'time' => $this->authLog->login_at, diff --git a/app/Notifications/SignedInWithNewDeviceNotification.php b/app/Notifications/SignedInWithNewDeviceNotification.php index 99a3b32f..9cb5cc8b 100644 --- a/app/Notifications/SignedInWithNewDeviceNotification.php +++ b/app/Notifications/SignedInWithNewDeviceNotification.php @@ -42,7 +42,7 @@ class SignedInWithNewDeviceNotification extends Notification public function toMail(mixed $notifiable) : MailMessage { return (new MailMessage) - ->subject(__('notifications.new_device.subject')) + ->subject(__('message.notifications.new_device.subject')) ->markdown('emails.signedInWithNewDevice', [ 'account' => $notifiable, 'time' => $this->authLog->login_at, diff --git a/app/Notifications/TestEmailSettingNotification.php b/app/Notifications/TestEmailSettingNotification.php index 74668914..67433f30 100644 --- a/app/Notifications/TestEmailSettingNotification.php +++ b/app/Notifications/TestEmailSettingNotification.php @@ -48,13 +48,13 @@ class TestEmailSettingNotification extends Notification public function toMail($notifiable) { return (new MailMessage) - ->subject(Lang::get('notifications.test_email_settings.subject')) - ->greeting(Lang::get('notifications.hello')) + ->subject(Lang::get('message.notifications.test_email_settings.subject')) + ->greeting(Lang::get('message.notifications.hello')) ->line( - Lang::get('notifications.test_email_settings.reason') + Lang::get('message.notifications.test_email_settings.reason') ) ->line( - Lang::get('notifications.test_email_settings.success') + Lang::get('message.notifications.test_email_settings.success') ); } } diff --git a/app/Services/GroupService.php b/app/Services/GroupService.php index f6b5205c..ab42eea1 100644 --- a/app/Services/GroupService.php +++ b/app/Services/GroupService.php @@ -88,7 +88,7 @@ class GroupService public static function prependTheAllGroup(Collection $groups, User $user) { $theAllGroup = new Group([ - 'name' => __('commons.all'), + 'name' => __('message.all'), ]); $theAllGroup->id = 0; diff --git a/app/Services/Migrators/AegisMigrator.php b/app/Services/Migrators/AegisMigrator.php index 3df9b48d..d80c8da4 100644 --- a/app/Services/Migrators/AegisMigrator.php +++ b/app/Services/Migrators/AegisMigrator.php @@ -101,8 +101,8 @@ class AegisMigrator extends Migrator $fakeAccount->id = TwoFAccount::FAKE_ID; $fakeAccount->otp_type = $otp_parameters['type'] ?? TwoFAccount::TOTP; // Only basic fields are filled to limit the risk of another exception. - $fakeAccount->account = $otp_parameters['name'] ?? __('twofaccounts.import.invalid_account'); - $fakeAccount->service = $otp_parameters['issuer'] ?? __('twofaccounts.import.invalid_service'); + $fakeAccount->account = $otp_parameters['name'] ?? __('message.twofaccounts.import.invalid_account'); + $fakeAccount->service = $otp_parameters['issuer'] ?? __('message.twofaccounts.import.invalid_service'); // The secret field is used to pass the error, not very clean but will do the job for now. $fakeAccount->secret = $exception->getMessage(); diff --git a/app/Services/Migrators/GoogleAuthMigrator.php b/app/Services/Migrators/GoogleAuthMigrator.php index d97e24e4..2fb1787a 100644 --- a/app/Services/Migrators/GoogleAuthMigrator.php +++ b/app/Services/Migrators/GoogleAuthMigrator.php @@ -63,8 +63,8 @@ class GoogleAuthMigrator extends Migrator $fakeAccount->id = TwoFAccount::FAKE_ID; $fakeAccount->otp_type = $fakeAccount::TOTP; // Only basic fields are filled to limit the risk of another exception. - $fakeAccount->account = $otp_parameters->getName() ?? __('twofaccounts.import.invalid_account'); - $fakeAccount->service = $otp_parameters->getIssuer() ?? __('twofaccounts.import.invalid_service'); + $fakeAccount->account = $otp_parameters->getName() ?? __('message.twofaccounts.import.invalid_account'); + $fakeAccount->service = $otp_parameters->getIssuer() ?? __('message.twofaccounts.import.invalid_service'); // The secret field is used to pass the error, not very clean but will do the job for now. $fakeAccount->secret = $exception->getMessage(); diff --git a/app/Services/Migrators/PlainTextMigrator.php b/app/Services/Migrators/PlainTextMigrator.php index aee63f5c..ed3160f1 100644 --- a/app/Services/Migrators/PlainTextMigrator.php +++ b/app/Services/Migrators/PlainTextMigrator.php @@ -41,8 +41,8 @@ class PlainTextMigrator extends Migrator $fakeAccount->id = TwoFAccount::FAKE_ID; $fakeAccount->otp_type = substr($uri, 10, 4); // Only basic fields are filled to limit the risk of another exception. - $fakeAccount->account = __('twofaccounts.import.invalid_account'); - $fakeAccount->service = filter_input(INPUT_GET, 'issuer', FILTER_SANITIZE_ENCODED) ?? __('twofaccounts.import.invalid_service'); + $fakeAccount->account = __('message.twofaccounts.import.invalid_account'); + $fakeAccount->service = filter_input(INPUT_GET, 'issuer', FILTER_SANITIZE_ENCODED) ?? __('message.twofaccounts.import.invalid_service'); // The secret field is used to pass the error, not very clean but will do the job for now. $fakeAccount->secret = $exception->getMessage(); diff --git a/app/Services/Migrators/TwoFASMigrator.php b/app/Services/Migrators/TwoFASMigrator.php index 8d7129af..dd3e6052 100644 --- a/app/Services/Migrators/TwoFASMigrator.php +++ b/app/Services/Migrators/TwoFASMigrator.php @@ -107,8 +107,8 @@ class TwoFASMigrator extends Migrator $fakeAccount->id = TwoFAccount::FAKE_ID; $fakeAccount->otp_type = $otp_parameters['otp']['tokenType'] ?? TwoFAccount::TOTP; // Only basic fields are filled to limit the risk of another exception. - $fakeAccount->account = $otp_parameters['otp']['account'] ?? __('twofaccounts.import.invalid_account'); - $fakeAccount->service = $otp_parameters['name'] ?? __('twofaccounts.import.invalid_service'); + $fakeAccount->account = $otp_parameters['otp']['account'] ?? __('message.twofaccounts.import.invalid_account'); + $fakeAccount->service = $otp_parameters['name'] ?? __('message.twofaccounts.import.invalid_service'); // The secret field is used to pass the error, not very clean but will do the job for now. $fakeAccount->secret = $exception->getMessage(); diff --git a/app/Services/Migrators/TwoFAuthMigrator.php b/app/Services/Migrators/TwoFAuthMigrator.php index 5f755521..c5e31641 100644 --- a/app/Services/Migrators/TwoFAuthMigrator.php +++ b/app/Services/Migrators/TwoFAuthMigrator.php @@ -119,8 +119,8 @@ class TwoFAuthMigrator extends Migrator $fakeAccount->id = TwoFAccount::FAKE_ID; $fakeAccount->otp_type = $otp_parameters['otp']['tokenType'] ?? TwoFAccount::TOTP; // Only basic fields are filled to limit the risk of another exception. - $fakeAccount->account = $otp_parameters['otp']['account'] ?? __('twofaccounts.import.invalid_account'); - $fakeAccount->service = $otp_parameters['name'] ?? __('twofaccounts.import.invalid_service'); + $fakeAccount->account = $otp_parameters['otp']['account'] ?? __('message.twofaccounts.import.invalid_account'); + $fakeAccount->service = $otp_parameters['name'] ?? __('message.twofaccounts.import.invalid_service'); // The secret field is used to pass the error, not very clean but will do the job for now. $fakeAccount->secret = $exception->getMessage(); diff --git a/app/Services/QrCodeService.php b/app/Services/QrCodeService.php index d84d7482..8655d6e9 100644 --- a/app/Services/QrCodeService.php +++ b/app/Services/QrCodeService.php @@ -58,13 +58,13 @@ class QrCodeService if (! $text) { switch (get_class($qrcode->getError())) { case NotFoundException::class: - throw new \App\Exceptions\InvalidQrCodeException(__('errors.cannot_detect_qrcode_in_image')); + throw new \App\Exceptions\InvalidQrCodeException(__('error.cannot_detect_qrcode_in_image')); case FormatException::class: - throw new \App\Exceptions\InvalidQrCodeException(__('errors.cannot_decode_detected_qrcode')); + throw new \App\Exceptions\InvalidQrCodeException(__('error.cannot_decode_detected_qrcode')); case ChecksumException::class: - throw new \App\Exceptions\InvalidQrCodeException(__('errors.qrcode_has_invalid_checksum')); + throw new \App\Exceptions\InvalidQrCodeException(__('error.qrcode_has_invalid_checksum')); default: - throw new \App\Exceptions\InvalidQrCodeException(__('errors.no_readable_qrcode')); + throw new \App\Exceptions\InvalidQrCodeException(__('error.no_readable_qrcode')); } } diff --git a/app/Services/SettingService.php b/app/Services/SettingService.php index 6a471e21..298cc29e 100644 --- a/app/Services/SettingService.php +++ b/app/Services/SettingService.php @@ -190,7 +190,7 @@ class SettingService } } else { Log::warning('Some data cannot be encrypted/decrypted, the useEncryption setting remain unchanged'); - throw new DbEncryptionException($state === true ? __('errors.error_during_encryption') : __('errors.error_during_decryption')); + throw new DbEncryptionException($state === true ? __('error.error_during_encryption') : __('error.error_during_decryption')); } } } diff --git a/database/migrations/2024_08_08_133136_encrypt_twofaccount_service_field.php b/database/migrations/2024_08_08_133136_encrypt_twofaccount_service_field.php index bf3d4f00..1af20d86 100644 --- a/database/migrations/2024_08_08_133136_encrypt_twofaccount_service_field.php +++ b/database/migrations/2024_08_08_133136_encrypt_twofaccount_service_field.php @@ -48,7 +48,7 @@ return new class extends Migration // We don't want to encrypt the Service field with a different APP_KEY // than the one used to encrypt the legacy_uri, account and secret fields, the // model would be inconsistent. - if ($twofaccount->legacy_uri === __('errors.indecipherable')) { + if ($twofaccount->legacy_uri === __('error.indecipherable')) { Log::warning(sprintf('Migration: Service encryption failed for twofaccount with id #%s. The current APP_KEY cannot decipher already encrypted fields, encrypting the Service field with this key would lead to inconsistent model encryption', $twofaccount->id)); } else { @@ -69,7 +69,7 @@ return new class extends Migration foreach (TwoFAccount::all() as $twofaccount) { Log::notice(sprintf('Migration rollback: Trying to decipher Service field for twofaccount with id #%s', $twofaccount->id)); - if ($twofaccount->legacy_uri === __('errors.indecipherable')) { + if ($twofaccount->legacy_uri === __('error.indecipherable')) { Log::warning(sprintf('Migration rollback: Service decipherement failed for twofaccount with id #%s', $twofaccount->id)); } else { diff --git a/package-lock.json b/package-lock.json index 8abf566a..1ada6327 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@fortawesome/free-regular-svg-icons": "^6.4.2", "@fortawesome/free-solid-svg-icons": "^6.4.2", "@fortawesome/vue-fontawesome": "^3.0.3", + "@intlify/unplugin-vue-i18n": "^6.0.8", "@kyvg/vue3-notification": "^3.0.2", "@vitejs/plugin-vue": "^5.0.4", "@vueuse/components": "^10.4.1", @@ -22,16 +23,17 @@ "eslint-plugin-vue": "^10.0.0", "file-saver": "^2.0.5", "laravel-vite-plugin": "^1.0.2", - "laravel-vue-i18n": "^2.7.1", "lucide-vue-next": "^0.517.0", "php-parser": "^3.1.5", "pinia": "^2.1.6", "sass": "^1.67.0", "sortablejs": "^1.15.0", "typescript": "^5.8.2", + "unimport": "^5.0.1", "unplugin-auto-import": "^19.1.2", "vite": "^5.2.7", "vue": "^3.3.4", + "vue-i18n": "^11.1.6", "vue-qrcode-reader": "^5.4.0", "vue-router": "^4.2.4" } @@ -808,6 +810,248 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@intlify/bundle-utils": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-10.0.1.tgz", + "integrity": "sha512-WkaXfSevtpgtUR4t8K2M6lbR7g03mtOxFeh+vXp5KExvPqS12ppaRj1QxzwRuRI5VUto54A22BjKoBMLyHILWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@intlify/message-compiler": "^11.1.2", + "@intlify/shared": "^11.1.2", + "acorn": "^8.8.2", + "escodegen": "^2.1.0", + "estree-walker": "^2.0.2", + "jsonc-eslint-parser": "^2.3.0", + "mlly": "^1.2.0", + "source-map-js": "^1.0.1", + "yaml-eslint-parser": "^1.2.2" + }, + "engines": { + "node": ">= 18" + }, + "peerDependenciesMeta": { + "petite-vue-i18n": { + "optional": true + }, + "vue-i18n": { + "optional": true + } + } + }, + "node_modules/@intlify/core-base": { + "version": "11.1.6", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-11.1.6.tgz", + "integrity": "sha512-gfMLnoWGiQkA1BwK6Qbrog/e3I6Lnkhqk08XObJb0lMq6sLG1Ggl2MazVaMfGnv/E1Td8pCS5UwR54Ys+fOxmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@intlify/message-compiler": "11.1.6", + "@intlify/shared": "11.1.6" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "11.1.6", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-11.1.6.tgz", + "integrity": "sha512-w0LYo5sqgQZF3vEmjLlx+5PYk5EEiB+uigsBkka/DKoAIH2c5xlXcjAxhTgSw35Vrck+GOGriahFsfbHL+ZjPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@intlify/shared": "11.1.6", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/shared": { + "version": "11.1.6", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-11.1.6.tgz", + "integrity": "sha512-G1Pe4UILhiGOItuehRW+Pk9/NlnRaMFsdnhZ1fwBjiHvrzitmPNZdLx7Eo3GPfRrsk1mdkilZSfgH8SnM419vA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/unplugin-vue-i18n": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-6.0.8.tgz", + "integrity": "sha512-Vvm3KhjE6TIBVUQAk37rBiaYy2M5OcWH0ZcI1XKEsOTeN1o0bErk+zeuXmcrcMc/73YggfI8RoxOUz9EB/69JQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@intlify/bundle-utils": "^10.0.1", + "@intlify/shared": "^11.1.2", + "@intlify/vue-i18n-extensions": "^8.0.0", + "@rollup/pluginutils": "^5.1.0", + "@typescript-eslint/scope-manager": "^8.13.0", + "@typescript-eslint/typescript-estree": "^8.13.0", + "debug": "^4.3.3", + "fast-glob": "^3.2.12", + "js-yaml": "^4.1.0", + "json5": "^2.2.3", + "pathe": "^1.0.0", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2", + "unplugin": "^1.1.0", + "vue": "^3.4" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "petite-vue-i18n": "*", + "vue": "^3.2.25", + "vue-i18n": "*" + }, + "peerDependenciesMeta": { + "petite-vue-i18n": { + "optional": true + }, + "vue-i18n": { + "optional": true + } + } + }, + "node_modules/@intlify/unplugin-vue-i18n/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@intlify/unplugin-vue-i18n/node_modules/unplugin": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", + "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@intlify/vue-i18n-extensions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@intlify/vue-i18n-extensions/-/vue-i18n-extensions-8.0.0.tgz", + "integrity": "sha512-w0+70CvTmuqbskWfzeYhn0IXxllr6mU+IeM2MU0M+j9OW64jkrvqY+pYFWrUnIIC9bEdij3NICruicwd5EgUuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.24.6", + "@intlify/shared": "^10.0.0", + "@vue/compiler-dom": "^3.2.45", + "vue-i18n": "^10.0.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@intlify/shared": "^9.0.0 || ^10.0.0 || ^11.0.0", + "@vue/compiler-dom": "^3.0.0", + "vue": "^3.0.0", + "vue-i18n": "^9.0.0 || ^10.0.0 || ^11.0.0" + }, + "peerDependenciesMeta": { + "@intlify/shared": { + "optional": true + }, + "@vue/compiler-dom": { + "optional": true + }, + "vue": { + "optional": true + }, + "vue-i18n": { + "optional": true + } + } + }, + "node_modules/@intlify/vue-i18n-extensions/node_modules/@intlify/core-base": { + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-10.0.7.tgz", + "integrity": "sha512-mE71aUH5baH0me8duB4FY5qevUJizypHsYw3eCvmOx07QvmKppgOONx3dYINxuA89Z2qkAGb/K6Nrpi7aAMwew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@intlify/message-compiler": "10.0.7", + "@intlify/shared": "10.0.7" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/vue-i18n-extensions/node_modules/@intlify/message-compiler": { + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-10.0.7.tgz", + "integrity": "sha512-nrC4cDL/UHZSUqd8sRbVz+DPukzZ8NnG5OK+EB/nlxsH35deyzyVkXP/QuR8mFZrISJ+4hCd6VtCQCcT+RO+5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@intlify/shared": "10.0.7", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/vue-i18n-extensions/node_modules/@intlify/shared": { + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-10.0.7.tgz", + "integrity": "sha512-oeoq0L5+5P4ShXa6jBQcx+BT+USe3MjX0xJexZO1y7rfDJdwZ9+QP3jO4tcS1nxhBYYdjvFTqe4bmnLijV0GxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/vue-i18n-extensions/node_modules/vue-i18n": { + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-10.0.7.tgz", + "integrity": "sha512-bKsk0PYwP9gdYF4nqSAT0kDpnLu1gZzlxFl885VH4mHVhEnqP16+/mAU05r1U6NIrc0fGDWP89tZ8GzeJZpe+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@intlify/core-base": "10.0.7", + "@intlify/shared": "10.0.7", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", @@ -823,6 +1067,80 @@ "vue": "^3.0.0" } }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.2.0.tgz", + "integrity": "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.24.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.4.tgz", @@ -1108,6 +1426,137 @@ "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", "dev": true }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.1.tgz", + "integrity": "sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.34.1", + "@typescript-eslint/types": "^8.34.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz", + "integrity": "sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.1.tgz", + "integrity": "sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.1.tgz", + "integrity": "sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz", + "integrity": "sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.34.1", + "@typescript-eslint/tsconfig-utils": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz", + "integrity": "sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.34.1", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@vitejs/plugin-vue": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz", @@ -1463,7 +1912,6 @@ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", - "peer": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -1521,8 +1969,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, - "license": "Python-2.0", - "peer": true + "license": "Python-2.0" }, "node_modules/asynckit": { "version": "0.4.0", @@ -1546,8 +1993,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "peer": true + "dev": true }, "node_modules/barcode-detector": { "version": "2.2.2", @@ -1578,6 +2024,16 @@ "dev": true, "license": "ISC" }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", @@ -1749,7 +2205,6 @@ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ms": "^2.1.3" }, @@ -1843,6 +2298,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, "node_modules/eslint": { "version": "9.23.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.23.0.tgz", @@ -2032,6 +2509,20 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esquery": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", @@ -2066,7 +2557,6 @@ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "engines": { "node": ">=4.0" } @@ -2083,7 +2573,6 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -2103,6 +2592,23 @@ "license": "MIT", "peer": true }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -2119,6 +2625,16 @@ "license": "MIT", "peer": true }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -2388,7 +2904,6 @@ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "argparse": "^2.0.1" }, @@ -2420,6 +2935,69 @@ "license": "MIT", "peer": true }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-eslint-parser": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz", + "integrity": "sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/jsonc-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/jsonc-eslint-parser/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -2450,22 +3028,6 @@ "vite": "^5.0.0" } }, - "node_modules/laravel-vue-i18n": { - "version": "2.7.8", - "resolved": "https://registry.npmjs.org/laravel-vue-i18n/-/laravel-vue-i18n-2.7.8.tgz", - "integrity": "sha512-HY4yZl1fqApzJzoLFGcmiBusHIouZgT+grMtTCQu3gkilEbcqPOt6L4ksfpkZOYppPQkUlnXLqN8nDNc0gyLUQ==", - "dev": true, - "dependencies": { - "php-parser": "3.1.3", - "vue": "^3.2.45" - } - }, - "node_modules/laravel-vue-i18n/node_modules/php-parser": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/php-parser/-/php-parser-3.1.3.tgz", - "integrity": "sha512-hPvBmnRYPqWEtMfIFOlyjQv1q75UUtxt4U+YscKIQViGmEE2Xa4BuS1B1/cZdjy7MVcwtnr0WkEsr915LgRKOw==", - "dev": true - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2552,6 +3114,30 @@ "@jridgewell/sourcemap-codec": "^1.5.0" } }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -2573,6 +3159,22 @@ "node": ">= 0.6" } }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/mlly": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", @@ -2610,8 +3212,7 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/nanoid": { "version": "3.3.7", @@ -2932,6 +3533,27 @@ ], "license": "MIT" }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -2955,6 +3577,17 @@ "node": ">=4" } }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rollup": { "version": "4.24.4", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.4.tgz", @@ -2993,6 +3626,30 @@ "fsevents": "~2.3.2" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/sass": { "version": "1.72.0", "resolved": "https://registry.npmjs.org/sass/-/sass-1.72.0.tgz", @@ -3067,6 +3724,17 @@ "integrity": "sha512-zdK3/kwwAK1cJgy1rwl1YtNTbRmc8qW/+vgXf75A7NHag5of4pyI6uK86ktmQETyWRH7IGaE73uZOOBcGxgqZg==", "dev": true }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -3119,13 +3787,13 @@ } }, "node_modules/tinyglobby": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", - "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", "dev": true, "license": "MIT", "dependencies": { - "fdir": "^6.4.3", + "fdir": "^6.4.4", "picomatch": "^4.0.2" }, "engines": { @@ -3136,9 +3804,9 @@ } }, "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", - "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", "dev": true, "license": "MIT", "peerDependencies": { @@ -3176,6 +3844,19 @@ "node": ">=8.0" } }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -3212,9 +3893,9 @@ "license": "MIT" }, "node_modules/unimport": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/unimport/-/unimport-4.1.3.tgz", - "integrity": "sha512-H+IVJ7rAkE3b+oC8rSJ2FsPaVsweeMC8eKZc+C6Mz7+hxDF45AnrY/tVCNRBvzMwWNcJEV67WdAVcal27iMjOw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/unimport/-/unimport-5.0.1.tgz", + "integrity": "sha512-1YWzPj6wYhtwHE+9LxRlyqP4DiRrhGfJxdtH475im8ktyZXO3jHj/3PZ97zDdvkYoovFdi0K4SKl3a7l92v3sQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3229,8 +3910,8 @@ "pkg-types": "^2.1.0", "scule": "^1.3.0", "strip-literal": "^3.0.0", - "tinyglobby": "^0.2.12", - "unplugin": "^2.2.2", + "tinyglobby": "^0.2.13", + "unplugin": "^2.3.2", "unplugin-utils": "^0.2.4" }, "engines": { @@ -3261,13 +3942,14 @@ } }, "node_modules/unplugin": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.2.2.tgz", - "integrity": "sha512-Qp+iiD+qCRnUek+nDoYvtWX7tfnYyXsrOnJ452FRTgOyKmTM7TUJ3l+PLPJOOWPTUyKISKp4isC5JJPSXUjGgw==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.5.tgz", + "integrity": "sha512-RyWSb5AHmGtjjNQ6gIlA67sHOsWpsbWpwDokLwTcejVdOjEkJZh7QKu14J00gDDVSh8kGH4KYC/TNBceXFZhtw==", "dev": true, "license": "MIT", "dependencies": { "acorn": "^8.14.1", + "picomatch": "^4.0.2", "webpack-virtual-modules": "^0.6.2" }, "engines": { @@ -3307,6 +3989,16 @@ } } }, + "node_modules/unplugin-auto-import/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/unplugin-auto-import/node_modules/picomatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", @@ -3320,6 +4012,32 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/unplugin-auto-import/node_modules/unimport": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unimport/-/unimport-4.2.0.tgz", + "integrity": "sha512-mYVtA0nmzrysnYnyb3ALMbByJ+Maosee2+WyE0puXl+Xm2bUwPorPaaeZt0ETfuroPOtG8jj1g/qeFZ6buFnag==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.14.1", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "local-pkg": "^1.1.1", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "pkg-types": "^2.1.0", + "scule": "^1.3.0", + "strip-literal": "^3.0.0", + "tinyglobby": "^0.2.12", + "unplugin": "^2.2.2", + "unplugin-utils": "^0.2.4" + }, + "engines": { + "node": ">=18.12.0" + } + }, "node_modules/unplugin-utils": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.2.4.tgz", @@ -3350,6 +4068,19 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/unplugin/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -3484,6 +4215,27 @@ "eslint": "^8.57.0 || ^9.0.0" } }, + "node_modules/vue-i18n": { + "version": "11.1.6", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-11.1.6.tgz", + "integrity": "sha512-+IbsW/sTZHj7U1w0rPOYJbuSB0/7DeO1nvUo3BxvO20OQgHs+ukJ3QeLqvoUA6DiLk+8SA9+djRmKC9+FC6cAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@intlify/core-base": "11.1.6", + "@intlify/shared": "11.1.6", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, "node_modules/vue-qrcode-reader": { "version": "5.5.11", "resolved": "https://registry.npmjs.org/vue-qrcode-reader/-/vue-qrcode-reader-5.5.11.tgz", @@ -3570,6 +4322,49 @@ "node": ">=12" } }, + "node_modules/yaml": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/yaml-eslint-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.3.0.tgz", + "integrity": "sha512-E/+VitOorXSLiAqtTd7Yqax0/pAS3xaYMP+AUUJGOK1OZG3rhcj9fcJOM5HJ2VrP1FrStVCWr1muTfQCdj4tAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.0.0", + "yaml": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/yaml-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 2a8de74c..c44e5336 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "@fortawesome/free-regular-svg-icons": "^6.4.2", "@fortawesome/free-solid-svg-icons": "^6.4.2", "@fortawesome/vue-fontawesome": "^3.0.3", + "@intlify/unplugin-vue-i18n": "^6.0.8", "@kyvg/vue3-notification": "^3.0.2", "@vitejs/plugin-vue": "^5.0.4", "@vueuse/components": "^10.4.1", @@ -24,16 +25,17 @@ "eslint-plugin-vue": "^10.0.0", "file-saver": "^2.0.5", "laravel-vite-plugin": "^1.0.2", - "laravel-vue-i18n": "^2.7.1", "lucide-vue-next": "^0.517.0", "php-parser": "^3.1.5", "pinia": "^2.1.6", "sass": "^1.67.0", "sortablejs": "^1.15.0", "typescript": "^5.8.2", + "unimport": "^5.0.1", "unplugin-auto-import": "^19.1.2", "vite": "^5.2.7", "vue": "^3.3.4", + "vue-i18n": "^11.1.6", "vue-qrcode-reader": "^5.4.0", "vue-router": "^4.2.4" } diff --git a/resources/js/App.vue b/resources/js/App.vue index d854f64a..fcc4ab69 100644 --- a/resources/js/App.vue +++ b/resources/js/App.vue @@ -1,5 +1,7 @@ \ No newline at end of file diff --git a/resources/js/components/ActionButtons.vue b/resources/js/components/ActionButtons.vue index 1a944858..310ac7dc 100644 --- a/resources/js/components/ActionButtons.vue +++ b/resources/js/components/ActionButtons.vue @@ -33,7 +33,7 @@

+

@@ -50,8 +50,8 @@ :disabled='areDisabled' class="button is-rounded" :class="[{ 'is-outlined': mode == 'dark' || areDisabled }, areDisabled ? 'is-dark': 'is-link']" @click="$emit('move-button-clicked')" - :title="$t('groups.move_selected_to_group')" > - {{ $t('commons.move') }} + :title="$t('message.groups.move_selected_to_group')" > + {{ $t('message.move') }}

@@ -61,7 +61,7 @@ :disabled='areDisabled' class="button is-rounded" :class="[{ 'is-outlined': mode == 'dark' || areDisabled }, areDisabled ? 'is-dark': 'is-link']" @click="$emit('delete-button-clicked')" > - {{ $t('commons.delete') }} + {{ $t('message.delete') }}

@@ -71,8 +71,8 @@ :disabled='areDisabled' class="button is-rounded" :class="[{ 'is-outlined': mode == 'dark' || areDisabled }, areDisabled ? 'is-dark': 'is-link']" @click="$emit('export-button-clicked')" - :title="$t('twofaccounts.export_selected_accounts')" > - {{ $t('commons.export') }} + :title="$t('message.twofaccounts.export_selected_accounts')" > + {{ $t('message.export') }}

diff --git a/resources/js/components/CopyButton.vue b/resources/js/components/CopyButton.vue index a6d55fed..22b6b2fc 100644 --- a/resources/js/components/CopyButton.vue +++ b/resources/js/components/CopyButton.vue @@ -1,5 +1,7 @@ \ No newline at end of file diff --git a/resources/js/components/DestinationGroupSelector.vue b/resources/js/components/DestinationGroupSelector.vue index 529f15a0..3e985916 100644 --- a/resources/js/components/DestinationGroupSelector.vue +++ b/resources/js/components/DestinationGroupSelector.vue @@ -33,7 +33,7 @@
- {{ $t('groups.move_selected_to') }} + {{ $t('message.groups.move_selected_to') }}
@@ -41,7 +41,7 @@
- {{ $t('groups.manage_groups') }} + {{ $t('message.groups.manage_groups') }}
@@ -60,7 +60,7 @@

- +

diff --git a/resources/js/components/ExportButtons.vue b/resources/js/components/ExportButtons.vue index 9a057161..9c47bcc9 100644 --- a/resources/js/components/ExportButtons.vue +++ b/resources/js/components/ExportButtons.vue @@ -11,29 +11,29 @@

- {{ $t('twofaccounts.twofauth_export_format_sub') }} + {{ $t('message.twofaccounts.twofauth_export_format_sub') }}

- {{ $t('twofaccounts.twofauth_export_format_desc') }} - {{ $t('twofaccounts.twofauth_export_format_url') }} + {{ $t('message.twofaccounts.twofauth_export_format_desc') }} + {{ $t('message.twofaccounts.twofauth_export_format_url') }} - {{ $t('twofaccounts.twofauth_export_schema') }} + {{ $t('message.twofaccounts.twofauth_export_schema') }}

-

- {{ $t('twofaccounts.otpauth_export_format_sub') }} + {{ $t('message.twofaccounts.otpauth_export_format_sub') }}

- {{ $t('twofaccounts.otpauth_export_format_desc') }} + {{ $t('message.twofaccounts.otpauth_export_format_desc') }}

-
\ No newline at end of file diff --git a/resources/js/components/GroupSwitch.vue b/resources/js/components/GroupSwitch.vue index e1e1e65d..4ddd12cd 100644 --- a/resources/js/components/GroupSwitch.vue +++ b/resources/js/components/GroupSwitch.vue @@ -39,7 +39,7 @@
- {{ $t('groups.manage_groups') }} + {{ $t('message.groups.manage_groups') }}
diff --git a/resources/js/components/OtpDisplay.vue b/resources/js/components/OtpDisplay.vue index 68436d2a..e120abe3 100644 --- a/resources/js/components/OtpDisplay.vue +++ b/resources/js/components/OtpDisplay.vue @@ -1,4 +1,5 @@