diff --git a/polylan_submitter/package.json b/polylan_submitter/package.json index 0b9d332..4170d55 100644 --- a/polylan_submitter/package.json +++ b/polylan_submitter/package.json @@ -19,7 +19,8 @@ "pinia": "^3.0.3", "tailwindcss": "^4.1.16", "tesseract.js": "^5.1.1", - "vue": "^3.5.22" + "vue": "^3.5.22", + "vue-i18n": "^11.4.12" }, "devDependencies": { "@hey-api/openapi-ts": "^0.97.2", diff --git a/polylan_submitter/pnpm-lock.yaml b/polylan_submitter/pnpm-lock.yaml index 01ef3b0..d24910f 100644 --- a/polylan_submitter/pnpm-lock.yaml +++ b/polylan_submitter/pnpm-lock.yaml @@ -35,6 +35,9 @@ importers: vue: specifier: ^3.5.22 version: 3.5.22(typescript@5.9.3) + vue-i18n: + specifier: ^11.4.12 + version: 11.4.12(vue@3.5.22(typescript@5.9.3)) devDependencies: '@hey-api/openapi-ts': specifier: ^0.97.2 @@ -264,6 +267,22 @@ packages: '@hey-api/types@0.1.4': resolution: {integrity: sha512-thWfawrDIP7wSI9ioT13I5soaaqB5vAPIiZmgD8PbeEVKNrkonc0N/Sjj97ezl7oQgusZmaNphGdMKipPO6IBg==} + '@intlify/core-base@11.4.12': + resolution: {integrity: sha512-tvYUWgMJmk+UvLFa7ck8uRQ9m19tTI9B2e01KCAjBV7+HN2zFLnnORvMO85hM1P8DIw4MTvot1ZSBUdoR+F6jA==} + engines: {node: '>= 22'} + + '@intlify/devtools-types@11.4.12': + resolution: {integrity: sha512-Ctkcs8DQItaEL9HHdkyasFFcZFP59iBvZmrjiA7b72JFq/JlI6c6GPQHN7oEwbYTo8rndPMqNY7SX71aPm4MkA==} + engines: {node: '>= 22'} + + '@intlify/message-compiler@11.4.12': + resolution: {integrity: sha512-kBczk9r44fdBYnkC5tXRWa/UaA+e9NglXE3cX7jPnDd2nHzoFHYrKGfIbn8JFZpMA9omexZZo2WxOpTvlHdjsw==} + engines: {node: '>= 22'} + + '@intlify/shared@11.4.12': + resolution: {integrity: sha512-ojfehaXMFrGFcSnK3cJPaMxlrSXT8FwZUG9H4i+WKX4OFD4Yl1WKdTmfwoC0REnwIfTrnt1QhRtd8kwi/te6bQ==} + engines: {node: '>= 22'} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -543,6 +562,9 @@ packages: '@vue/compiler-ssr@3.5.22': resolution: {integrity: sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==} + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + '@vue/devtools-api@7.7.7': resolution: {integrity: sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==} @@ -1047,6 +1069,12 @@ packages: vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + vue-i18n@11.4.12: + resolution: {integrity: sha512-yvArvvo3ErLKFNlQrZUGmRkxL/ctM5xFYtE9FxTKiE/PalWP1bnTopBgbSRGLluYEyYSNl1Pt8l2J7zVavbXww==} + engines: {node: '>= 22'} + peerDependencies: + vue: ^3.0.0 + vue-tsc@3.1.2: resolution: {integrity: sha512-3fd4DY0rFczs5f+VB3OhcLU83V6+3Puj2yLBe0Ak65k7ERk+STVNKaOAi0EBo6Lc15UiJB6LzU6Mxy4+h/pKew==} hasBin: true @@ -1230,6 +1258,24 @@ snapshots: '@hey-api/types@0.1.4': {} + '@intlify/core-base@11.4.12': + dependencies: + '@intlify/devtools-types': 11.4.12 + '@intlify/message-compiler': 11.4.12 + '@intlify/shared': 11.4.12 + + '@intlify/devtools-types@11.4.12': + dependencies: + '@intlify/core-base': 11.4.12 + '@intlify/shared': 11.4.12 + + '@intlify/message-compiler@11.4.12': + dependencies: + '@intlify/shared': 11.4.12 + source-map-js: 1.2.1 + + '@intlify/shared@11.4.12': {} + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -1456,6 +1502,8 @@ snapshots: '@vue/compiler-dom': 3.5.22 '@vue/shared': 3.5.22 + '@vue/devtools-api@6.6.4': {} + '@vue/devtools-api@7.7.7': dependencies: '@vue/devtools-kit': 7.7.7 @@ -1906,6 +1954,14 @@ snapshots: vscode-uri@3.1.0: {} + vue-i18n@11.4.12(vue@3.5.22(typescript@5.9.3)): + dependencies: + '@intlify/core-base': 11.4.12 + '@intlify/devtools-types': 11.4.12 + '@intlify/shared': 11.4.12 + '@vue/devtools-api': 6.6.4 + vue: 3.5.22(typescript@5.9.3) + vue-tsc@3.1.2(typescript@5.9.3): dependencies: '@volar/typescript': 2.4.23 diff --git a/polylan_submitter/polylan_submitter/settings.py b/polylan_submitter/polylan_submitter/settings.py index 465b2a1..de634ce 100644 --- a/polylan_submitter/polylan_submitter/settings.py +++ b/polylan_submitter/polylan_submitter/settings.py @@ -60,6 +60,7 @@ MIDDLEWARE = [ "django.middleware.security.SecurityMiddleware", "whitenoise.middleware.WhiteNoiseMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", + "django.middleware.locale.LocaleMiddleware", "django.middleware.common.CommonMiddleware", "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", @@ -79,6 +80,7 @@ TEMPLATES = [ "OPTIONS": { "context_processors": [ "django.template.context_processors.request", + "django.template.context_processors.i18n", "django.contrib.auth.context_processors.auth", "django.contrib.messages.context_processors.messages", ], @@ -124,6 +126,10 @@ AUTH_PASSWORD_VALIDATORS = [ LANGUAGE_CODE = "en-us" +LANGUAGES = [ + ("en", "English"), +] + TIME_ZONE = "UTC" USE_I18N = True diff --git a/polylan_submitter/src/ErrorPage.vue b/polylan_submitter/src/ErrorPage.vue index c3c4930..021204a 100644 --- a/polylan_submitter/src/ErrorPage.vue +++ b/polylan_submitter/src/ErrorPage.vue @@ -1,16 +1,29 @@ @@ -24,11 +37,11 @@ const goBack = () => window.history.back();
- Go home + {{ t("errorPage.goHome") }}
diff --git a/polylan_submitter/src/Home.vue b/polylan_submitter/src/Home.vue index 46baba4..648b609 100644 --- a/polylan_submitter/src/Home.vue +++ b/polylan_submitter/src/Home.vue @@ -1,5 +1,7 @@ diff --git a/polylan_submitter/src/components/PuzzleResults.vue b/polylan_submitter/src/components/PuzzleResults.vue index 537e979..da9e003 100644 --- a/polylan_submitter/src/components/PuzzleResults.vue +++ b/polylan_submitter/src/components/PuzzleResults.vue @@ -1,8 +1,10 @@ diff --git a/polylan_submitter/src/components/Results.vue b/polylan_submitter/src/components/Results.vue index 34a41c9..4541fa0 100644 --- a/polylan_submitter/src/components/Results.vue +++ b/polylan_submitter/src/components/Results.vue @@ -1,9 +1,11 @@