feat: install svelte-18n and init setup
This commit is contained in:
		
							
								
								
									
										7
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
						"i18n-ally.localesPaths": ["locales"],
 | 
				
			||||||
 | 
						"i18n-ally.keystyle": "nested",
 | 
				
			||||||
 | 
						"i18n-ally.extract.ignoredByFiles": {
 | 
				
			||||||
 | 
							"src\\routes\\__layout.svelte": ["Coolify", "coolLabs logo"]
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
	"version": "2.2.7",
 | 
						"version": "2.2.7",
 | 
				
			||||||
	"license": "AGPL-3.0",
 | 
						"license": "AGPL-3.0",
 | 
				
			||||||
	"scripts": {
 | 
						"scripts": {
 | 
				
			||||||
		"dev": "docker-compose -f docker-compose-dev.yaml up -d && NODE_ENV=development svelte-kit dev",
 | 
							"dev": "docker-compose -f docker-compose-dev.yaml up -d && cross-env NODE_ENV=development & svelte-kit dev",
 | 
				
			||||||
		"dev:stop": "docker-compose -f docker-compose-dev.yaml down",
 | 
							"dev:stop": "docker-compose -f docker-compose-dev.yaml down",
 | 
				
			||||||
		"dev:logs": "docker-compose -f docker-compose-dev.yaml logs -f --tail 10",
 | 
							"dev:logs": "docker-compose -f docker-compose-dev.yaml logs -f --tail 10",
 | 
				
			||||||
		"studio": "npx prisma studio",
 | 
							"studio": "npx prisma studio",
 | 
				
			||||||
@@ -37,6 +37,7 @@
 | 
				
			|||||||
		"@typescript-eslint/parser": "4.31.1",
 | 
							"@typescript-eslint/parser": "4.31.1",
 | 
				
			||||||
		"@zerodevx/svelte-toast": "0.7.1",
 | 
							"@zerodevx/svelte-toast": "0.7.1",
 | 
				
			||||||
		"autoprefixer": "10.4.4",
 | 
							"autoprefixer": "10.4.4",
 | 
				
			||||||
 | 
							"cross-env": "^7.0.3",
 | 
				
			||||||
		"cross-var": "1.1.0",
 | 
							"cross-var": "1.1.0",
 | 
				
			||||||
		"eslint": "7.32.0",
 | 
							"eslint": "7.32.0",
 | 
				
			||||||
		"eslint-config-prettier": "8.5.0",
 | 
							"eslint-config-prettier": "8.5.0",
 | 
				
			||||||
@@ -50,6 +51,7 @@
 | 
				
			|||||||
		"prisma": "3.11.1",
 | 
							"prisma": "3.11.1",
 | 
				
			||||||
		"svelte": "3.46.4",
 | 
							"svelte": "3.46.4",
 | 
				
			||||||
		"svelte-check": "2.4.6",
 | 
							"svelte-check": "2.4.6",
 | 
				
			||||||
 | 
							"svelte-i18n": "^3.3.13",
 | 
				
			||||||
		"svelte-preprocess": "4.10.4",
 | 
							"svelte-preprocess": "4.10.4",
 | 
				
			||||||
		"svelte-select": "^4.4.7",
 | 
							"svelte-select": "^4.4.7",
 | 
				
			||||||
		"tailwindcss": "3.0.23",
 | 
							"tailwindcss": "3.0.23",
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										102
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										102
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							@@ -20,6 +20,7 @@ specifiers:
 | 
				
			|||||||
  compare-versions: 4.1.3
 | 
					  compare-versions: 4.1.3
 | 
				
			||||||
  cookie: 0.4.2
 | 
					  cookie: 0.4.2
 | 
				
			||||||
  cooltipz-css: ^2.1.0
 | 
					  cooltipz-css: ^2.1.0
 | 
				
			||||||
 | 
					  cross-env: ^7.0.3
 | 
				
			||||||
  cross-var: 1.1.0
 | 
					  cross-var: 1.1.0
 | 
				
			||||||
  cuid: 2.1.8
 | 
					  cuid: 2.1.8
 | 
				
			||||||
  dayjs: 1.11.0
 | 
					  dayjs: 1.11.0
 | 
				
			||||||
@@ -45,6 +46,7 @@ specifiers:
 | 
				
			|||||||
  prisma: 3.11.1
 | 
					  prisma: 3.11.1
 | 
				
			||||||
  svelte: 3.46.4
 | 
					  svelte: 3.46.4
 | 
				
			||||||
  svelte-check: 2.4.6
 | 
					  svelte-check: 2.4.6
 | 
				
			||||||
 | 
					  svelte-i18n: ^3.3.13
 | 
				
			||||||
  svelte-kit-cookie-session: 2.1.2
 | 
					  svelte-kit-cookie-session: 2.1.2
 | 
				
			||||||
  svelte-preprocess: 4.10.4
 | 
					  svelte-preprocess: 4.10.4
 | 
				
			||||||
  svelte-select: ^4.4.7
 | 
					  svelte-select: ^4.4.7
 | 
				
			||||||
@@ -92,6 +94,7 @@ devDependencies:
 | 
				
			|||||||
  '@typescript-eslint/parser': 4.31.1_eslint@7.32.0+typescript@4.6.3
 | 
					  '@typescript-eslint/parser': 4.31.1_eslint@7.32.0+typescript@4.6.3
 | 
				
			||||||
  '@zerodevx/svelte-toast': 0.7.1
 | 
					  '@zerodevx/svelte-toast': 0.7.1
 | 
				
			||||||
  autoprefixer: 10.4.4_postcss@8.4.12
 | 
					  autoprefixer: 10.4.4_postcss@8.4.12
 | 
				
			||||||
 | 
					  cross-env: 7.0.3
 | 
				
			||||||
  cross-var: 1.1.0
 | 
					  cross-var: 1.1.0
 | 
				
			||||||
  eslint: 7.32.0
 | 
					  eslint: 7.32.0
 | 
				
			||||||
  eslint-config-prettier: 8.5.0_eslint@7.32.0
 | 
					  eslint-config-prettier: 8.5.0_eslint@7.32.0
 | 
				
			||||||
@@ -105,6 +108,7 @@ devDependencies:
 | 
				
			|||||||
  prisma: 3.11.1
 | 
					  prisma: 3.11.1
 | 
				
			||||||
  svelte: 3.46.4
 | 
					  svelte: 3.46.4
 | 
				
			||||||
  svelte-check: 2.4.6_postcss@8.4.12+svelte@3.46.4
 | 
					  svelte-check: 2.4.6_postcss@8.4.12+svelte@3.46.4
 | 
				
			||||||
 | 
					  svelte-i18n: 3.3.13_svelte@3.46.4
 | 
				
			||||||
  svelte-preprocess: 4.10.4_296873641a0ad9f42fe92172d27bcedd
 | 
					  svelte-preprocess: 4.10.4_296873641a0ad9f42fe92172d27bcedd
 | 
				
			||||||
  svelte-select: 4.4.7
 | 
					  svelte-select: 4.4.7
 | 
				
			||||||
  tailwindcss: 3.0.23_b89136460714832cdda11d1e9d57d1ff
 | 
					  tailwindcss: 3.0.23_b89136460714832cdda11d1e9d57d1ff
 | 
				
			||||||
@@ -180,6 +184,55 @@ packages:
 | 
				
			|||||||
      - supports-color
 | 
					      - supports-color
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /@formatjs/ecma402-abstract/1.11.4:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@formatjs/intl-localematcher': 0.2.25
 | 
				
			||||||
 | 
					      tslib: 2.3.1
 | 
				
			||||||
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /@formatjs/fast-memoize/1.2.1:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      tslib: 2.3.1
 | 
				
			||||||
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /@formatjs/icu-messageformat-parser/2.0.19:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-8HsLm9YLyVVIDMyBJb7wmve2wGd461cUwJ470eUog5YH5ZsF4p5lgvaJ+oGKxz1mrSMNNdDHU9v/NDsS+z+ilg==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@formatjs/ecma402-abstract': 1.11.4
 | 
				
			||||||
 | 
					      '@formatjs/icu-skeleton-parser': 1.3.6
 | 
				
			||||||
 | 
					      tslib: 2.3.1
 | 
				
			||||||
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /@formatjs/icu-skeleton-parser/1.3.6:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@formatjs/ecma402-abstract': 1.11.4
 | 
				
			||||||
 | 
					      tslib: 2.3.1
 | 
				
			||||||
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /@formatjs/intl-localematcher/0.2.25:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      tslib: 2.3.1
 | 
				
			||||||
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /@humanwhocodes/config-array/0.5.0:
 | 
					  /@humanwhocodes/config-array/0.5.0:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
@@ -2081,6 +2134,17 @@ packages:
 | 
				
			|||||||
      luxon: 1.28.0
 | 
					      luxon: 1.28.0
 | 
				
			||||||
    dev: false
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /cross-env/7.0.3:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    engines: { node: '>=10.14', npm: '>=6', yarn: '>=1' }
 | 
				
			||||||
 | 
					    hasBin: true
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      cross-spawn: 7.0.3
 | 
				
			||||||
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /cross-spawn/5.1.0:
 | 
					  /cross-spawn/5.1.0:
 | 
				
			||||||
    resolution: { integrity: sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= }
 | 
					    resolution: { integrity: sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= }
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
@@ -2190,6 +2254,14 @@ packages:
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /deepmerge/4.2.2:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    engines: { node: '>=0.10.0' }
 | 
				
			||||||
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /defer-to-connect/2.0.1:
 | 
					  /defer-to-connect/2.0.1:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
@@ -3390,6 +3462,18 @@ packages:
 | 
				
			|||||||
        integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
 | 
					        integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /intl-messageformat/9.12.0:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-5Q9j21JreB1G27/CqMYsA+pvJ19JjHyhiTSeUuvZK9BCDJGHtOLgpUUcGM+GLHiUuoVMKVeeX1smamiVHQrSKQ==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@formatjs/ecma402-abstract': 1.11.4
 | 
				
			||||||
 | 
					      '@formatjs/fast-memoize': 1.2.1
 | 
				
			||||||
 | 
					      '@formatjs/icu-messageformat-parser': 2.0.19
 | 
				
			||||||
 | 
					      tslib: 2.3.1
 | 
				
			||||||
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /invariant/2.2.4:
 | 
					  /invariant/2.2.4:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
@@ -5159,6 +5243,24 @@ packages:
 | 
				
			|||||||
      svelte: 3.46.4
 | 
					      svelte: 3.46.4
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /svelte-i18n/3.3.13_svelte@3.46.4:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-RQM+ys4+Y9ztH//tX22H1UL2cniLNmIR+N4xmYygV6QpQ6EyQvloZiENRew8XrVzfvJ8HaE8NU6/yurLkl7z3g==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    engines: { node: '>= 11.15.0' }
 | 
				
			||||||
 | 
					    hasBin: true
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      svelte: ^3.25.1
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      deepmerge: 4.2.2
 | 
				
			||||||
 | 
					      estree-walker: 2.0.2
 | 
				
			||||||
 | 
					      intl-messageformat: 9.12.0
 | 
				
			||||||
 | 
					      sade: 1.7.4
 | 
				
			||||||
 | 
					      svelte: 3.46.4
 | 
				
			||||||
 | 
					      tiny-glob: 0.2.9
 | 
				
			||||||
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /svelte-kit-cookie-session/2.1.2:
 | 
					  /svelte-kit-cookie-session/2.1.2:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,6 +12,7 @@
 | 
				
			|||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script>
 | 
					<script>
 | 
				
			||||||
 | 
						import { _ } from 'svelte-i18n';
 | 
				
			||||||
	export let status;
 | 
						export let status;
 | 
				
			||||||
	export let error;
 | 
						export let error;
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
@@ -20,7 +21,8 @@
 | 
				
			|||||||
	<div class="pb-10 text-7xl font-bold">{status}</div>
 | 
						<div class="pb-10 text-7xl font-bold">{status}</div>
 | 
				
			||||||
	<div class="text-3xl font-bold">Ooops you are lost! But don't be afraid!</div>
 | 
						<div class="text-3xl font-bold">Ooops you are lost! But don't be afraid!</div>
 | 
				
			||||||
	<div class="text-xl">
 | 
						<div class="text-xl">
 | 
				
			||||||
		You can find your way back <a href="/" class="font-bold uppercase text-sky-400">here</a>
 | 
							{$_('error.you_can_find_your_way_back')}
 | 
				
			||||||
 | 
							<a href="/" class="font-bold uppercase text-sky-400">{$_('error.here')}</a>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
	<div class="py-10 text-xs font-bold">
 | 
						<div class="py-10 text-xs font-bold">
 | 
				
			||||||
		<pre
 | 
							<pre
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,7 +38,18 @@
 | 
				
			|||||||
	import { errorNotification } from '$lib/form';
 | 
						import { errorNotification } from '$lib/form';
 | 
				
			||||||
	import { asyncSleep } from '$lib/components/common';
 | 
						import { asyncSleep } from '$lib/components/common';
 | 
				
			||||||
	import { del, get, post } from '$lib/api';
 | 
						import { del, get, post } from '$lib/api';
 | 
				
			||||||
	import { browser, dev } from '$app/env';
 | 
						import { register, init, _, getLocaleFromNavigator } from 'svelte-i18n';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						async function setup() {
 | 
				
			||||||
 | 
							register('en', () => import('../../static/locales/en.json'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return await Promise.allSettled([
 | 
				
			||||||
 | 
								// TODO: add some more stuff you want to init ...
 | 
				
			||||||
 | 
								init({ initialLocale: getLocaleFromNavigator(), fallbackLocale: 'en' })
 | 
				
			||||||
 | 
							]);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const setupResult = setup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	let isUpdateAvailable = false;
 | 
						let isUpdateAvailable = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -104,7 +115,7 @@
 | 
				
			|||||||
				return window.location.reload();
 | 
									return window.location.reload();
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				await post(`/update.json`, { type: 'update', latestVersion });
 | 
									await post(`/update.json`, { type: 'update', latestVersion });
 | 
				
			||||||
				toast.push('Update completed.<br><br>Waiting for the new version to start...');
 | 
									toast.push(`${$_('layout.update_done')}<br><br>${$_('layout.wait_new_version_startup')}`);
 | 
				
			||||||
				let reachable = false;
 | 
									let reachable = false;
 | 
				
			||||||
				let tries = 0;
 | 
									let tries = 0;
 | 
				
			||||||
				do {
 | 
									do {
 | 
				
			||||||
@@ -118,7 +129,7 @@
 | 
				
			|||||||
					if (reachable) break;
 | 
										if (reachable) break;
 | 
				
			||||||
					tries++;
 | 
										tries++;
 | 
				
			||||||
				} while (!reachable || tries < 120);
 | 
									} while (!reachable || tries < 120);
 | 
				
			||||||
				toast.push('New version reachable. Reloading...');
 | 
									toast.push($_('layout.new_version'));
 | 
				
			||||||
				updateStatus.loading = false;
 | 
									updateStatus.loading = false;
 | 
				
			||||||
				updateStatus.success = true;
 | 
									updateStatus.success = true;
 | 
				
			||||||
				await asyncSleep(3000);
 | 
									await asyncSleep(3000);
 | 
				
			||||||
@@ -135,6 +146,10 @@
 | 
				
			|||||||
<svelte:head>
 | 
					<svelte:head>
 | 
				
			||||||
	<title>Coolify</title>
 | 
						<title>Coolify</title>
 | 
				
			||||||
</svelte:head>
 | 
					</svelte:head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{#await setupResult}
 | 
				
			||||||
 | 
						Please wait...
 | 
				
			||||||
 | 
					{:then}
 | 
				
			||||||
	<SvelteToast options={{ intro: { y: -64 }, duration: 3000, pausable: true }} />
 | 
						<SvelteToast options={{ intro: { y: -64 }, duration: 3000, pausable: true }} />
 | 
				
			||||||
	{#if $session.userId}
 | 
						{#if $session.userId}
 | 
				
			||||||
		<nav class="nav-main">
 | 
							<nav class="nav-main">
 | 
				
			||||||
@@ -321,7 +336,7 @@
 | 
				
			|||||||
						{#if isUpdateAvailable}
 | 
											{#if isUpdateAvailable}
 | 
				
			||||||
							<button
 | 
												<button
 | 
				
			||||||
								disabled={updateStatus.success === false}
 | 
													disabled={updateStatus.success === false}
 | 
				
			||||||
							title="Update available"
 | 
													title={$_('layout.update_available')}
 | 
				
			||||||
								on:click={update}
 | 
													on:click={update}
 | 
				
			||||||
								class="icons tooltip-right bg-gradient-to-r from-purple-500 via-pink-500 to-red-500 text-white duration-75 hover:scale-105"
 | 
													class="icons tooltip-right bg-gradient-to-r from-purple-500 via-pink-500 to-red-500 text-white duration-75 hover:scale-105"
 | 
				
			||||||
							>
 | 
												>
 | 
				
			||||||
@@ -519,7 +534,7 @@
 | 
				
			|||||||
			bind:value={selectedTeamId}
 | 
								bind:value={selectedTeamId}
 | 
				
			||||||
			on:change={switchTeam}
 | 
								on:change={switchTeam}
 | 
				
			||||||
		>
 | 
							>
 | 
				
			||||||
		<option value="" disabled selected>Switch to a different team...</option>
 | 
								<option value="" disabled selected>{$_('layout.switch_to_a_different_team')}</option>
 | 
				
			||||||
			{#each teams as team}
 | 
								{#each teams as team}
 | 
				
			||||||
				<option value={team.teamId}>{team.team.name} - {team.permission}</option>
 | 
									<option value={team.teamId}>{team.team.name} - {team.permission}</option>
 | 
				
			||||||
			{/each}
 | 
								{/each}
 | 
				
			||||||
@@ -528,3 +543,6 @@
 | 
				
			|||||||
	<main>
 | 
						<main>
 | 
				
			||||||
		<slot />
 | 
							<slot />
 | 
				
			||||||
	</main>
 | 
						</main>
 | 
				
			||||||
 | 
					{:catch error}
 | 
				
			||||||
 | 
						<p style="color: red">{error.message}</p>
 | 
				
			||||||
 | 
					{/await}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								static/locales/en.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								static/locales/en.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
						"layout": {
 | 
				
			||||||
 | 
							"update_done": "Update completed.",
 | 
				
			||||||
 | 
							"wait_new_version_startup": "Waiting for the new version to start...",
 | 
				
			||||||
 | 
							"new_version": "New version reachable. Reloading...",
 | 
				
			||||||
 | 
							"switch_to_a_different_team": "Switch to a different team...",
 | 
				
			||||||
 | 
							"update_available": "Update available"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"error": {
 | 
				
			||||||
 | 
							"you_can_find_your_way_back": "You can find your way back",
 | 
				
			||||||
 | 
							"here": "here"
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -12,6 +12,12 @@ const config = {
 | 
				
			|||||||
		vite: {
 | 
							vite: {
 | 
				
			||||||
			optimizeDeps: {
 | 
								optimizeDeps: {
 | 
				
			||||||
				exclude: ['svelte-kit-cookie-session']
 | 
									exclude: ['svelte-kit-cookie-session']
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								server: {
 | 
				
			||||||
 | 
									fs: {
 | 
				
			||||||
 | 
										// Allow serving files from one level up to the project root
 | 
				
			||||||
 | 
										allow: ['../locales']
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user