mirror of
https://github.com/danbulant/Portfolio
synced 2026-06-24 17:11:49 +00:00
Merge pull request #172 from EETagent/svelte_i18n
(frontend) i18n překlady
This commit is contained in:
commit
37b33ff52f
25 changed files with 1201 additions and 111 deletions
7
frontend/.typesafe-i18n.json
Normal file
7
frontend/.typesafe-i18n.json
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"baseLocale": "cs",
|
||||||
|
"adapter": "svelte",
|
||||||
|
"esmImports": true,
|
||||||
|
"outputPath": "./src/translations",
|
||||||
|
"$schema": "https://unpkg.com/typesafe-i18n@5.20.0/schema/typesafe-i18n.json"
|
||||||
|
}
|
||||||
|
|
@ -10,7 +10,8 @@
|
||||||
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
||||||
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
||||||
"lint": "prettier --plugin-search-dir . --check . && eslint .",
|
"lint": "prettier --plugin-search-dir . --check . && eslint .",
|
||||||
"format": "prettier --plugin-search-dir . --write ."
|
"format": "prettier --plugin-search-dir . --write .",
|
||||||
|
"typesafe-i18n": "typesafe-i18n"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@playwright/test": "^1.29.2",
|
"@playwright/test": "^1.29.2",
|
||||||
|
|
@ -46,6 +47,7 @@
|
||||||
"svelte-tippy": "^1.3.2",
|
"svelte-tippy": "^1.3.2",
|
||||||
"swiper": "^8.4.6",
|
"swiper": "^8.4.6",
|
||||||
"tippy.js": "^6.3.7",
|
"tippy.js": "^6.3.7",
|
||||||
|
"typesafe-i18n": "^5.20.0",
|
||||||
"yup": "^0.32.11"
|
"yup": "^0.32.11"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,9 @@ dependencies:
|
||||||
tippy.js:
|
tippy.js:
|
||||||
specifier: ^6.3.7
|
specifier: ^6.3.7
|
||||||
version: 6.3.7
|
version: 6.3.7
|
||||||
|
typesafe-i18n:
|
||||||
|
specifier: ^5.20.0
|
||||||
|
version: 5.20.0(typescript@4.9.4)
|
||||||
yup:
|
yup:
|
||||||
specifier: ^0.32.11
|
specifier: ^0.32.11
|
||||||
version: 0.32.11
|
version: 0.32.11
|
||||||
|
|
@ -2385,11 +2388,19 @@ packages:
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/typesafe-i18n@5.20.0(typescript@4.9.4):
|
||||||
|
resolution: {integrity: sha512-uOvKnVkp1tXRDNBz9Aom54qs0LP2xWrtDliMPdKm9Scsnvn0DC7ZqjSGdOWxVplpbFbqYWNZuzx5Q5jWOjnBTA==}
|
||||||
|
hasBin: true
|
||||||
|
peerDependencies:
|
||||||
|
typescript: '>=3.5.1'
|
||||||
|
dependencies:
|
||||||
|
typescript: 4.9.4
|
||||||
|
dev: false
|
||||||
|
|
||||||
/typescript@4.9.4:
|
/typescript@4.9.4:
|
||||||
resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==}
|
resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==}
|
||||||
engines: {node: '>=4.2.0'}
|
engines: {node: '>=4.2.0'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
dev: true
|
|
||||||
|
|
||||||
/unconfig@0.2.2:
|
/unconfig@0.2.2:
|
||||||
resolution: {integrity: sha512-JN1MeYJ/POnjBj7NgOJJxPp6+NcD6Nd0hEuK0D89kjm9GvQQUq8HeE2Eb7PZgtu+64mWkDiqeJn1IZoLH7htPg==}
|
resolution: {integrity: sha512-JN1MeYJ/POnjBj7NgOJJxPp6+NcD6Nd0hEuK0D89kjm9GvQQUq8HeE2Eb7PZgtu+64mWkDiqeJn1IZoLH7htPg==}
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,23 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import LL from '$i18n/i18n-svelte';
|
||||||
|
|
||||||
export let linkOk: boolean = false;
|
export let linkOk: boolean = false;
|
||||||
export let linkError: boolean = false;
|
export let linkError: boolean = false;
|
||||||
export let applications: Array<number>;
|
export let applications: Array<number>;
|
||||||
|
|
||||||
let title1 = `Ano, podával/a jsem dvě přihlášky na dva obory SSPŠaG (${applications[0]} a ${applications[1]})`;
|
let title1 = $LL.components.checkbox.accountLinkCheckBox.multiple.title({
|
||||||
let title2 = `Ne, přihlášku na SSPŠaG jsem podával/a jen jednu (${applications[0]})`;
|
first: applications[0],
|
||||||
|
second: applications[1]
|
||||||
|
});
|
||||||
|
let title2 = $LL.components.checkbox.accountLinkCheckBox.multiple.title2({
|
||||||
|
first: applications[0]
|
||||||
|
});
|
||||||
|
|
||||||
if (applications.length === 1) {
|
if (applications.length === 1) {
|
||||||
title1 = `Ano, přihlášku na SSPŠaG jsem podával/a jen jednu (${applications[0]})`;
|
title1 = $LL.components.checkbox.accountLinkCheckBox.single.title({
|
||||||
title2 = `Ne, přihlášku na SSPŠaG jsem podával více přihlášek`;
|
first: applications[0]
|
||||||
|
});
|
||||||
|
title2 = $LL.components.checkbox.accountLinkCheckBox.single.title2();
|
||||||
}
|
}
|
||||||
|
|
||||||
$: console.log(linkOk, linkError);
|
$: console.log(linkOk, linkError);
|
||||||
|
|
@ -43,7 +52,7 @@
|
||||||
<div class="w-full text-lg font-semibold">
|
<div class="w-full text-lg font-semibold">
|
||||||
{title1}
|
{title1}
|
||||||
</div>
|
</div>
|
||||||
<div class="w-full text-sm">Vše je v pořádku</div>
|
<div class="w-full text-sm">{$LL.components.checkbox.accountLinkCheckBox.ok()}</div>
|
||||||
</div>
|
</div>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -63,7 +72,7 @@
|
||||||
<div class="w-full text-lg font-semibold">
|
<div class="w-full text-lg font-semibold">
|
||||||
{title2}
|
{title2}
|
||||||
</div>
|
</div>
|
||||||
<div class="w-full text-sm">Co se děje?</div>
|
<div class="w-full text-sm">{$LL.components.checkbox.accountLinkCheckBox.whatHappened()}</div>
|
||||||
</div>
|
</div>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import LL from '$i18n/i18n-svelte';
|
||||||
|
|
||||||
export let value: boolean = false;
|
export let value: boolean = false;
|
||||||
|
|
||||||
export let error: string = '';
|
export let error: string = '';
|
||||||
|
|
@ -9,9 +11,9 @@
|
||||||
<div class="block">
|
<div class="block">
|
||||||
<span class="text-2xl">📜</span>
|
<span class="text-2xl">📜</span>
|
||||||
|
|
||||||
<div class="w-full text-lg font-semibold">Souhlas se zpracováním osobních údajů</div>
|
<div class="w-full text-lg font-semibold">{$LL.components.checkbox.gdprCheckBox.title()}</div>
|
||||||
<div class="w-full text-sm">Kliknutím vyjaďřujete souhlas se zpracováním osobních údajů</div>
|
<div class="w-full text-sm">{$LL.components.checkbox.gdprCheckBox.description()}</div>
|
||||||
<div class="w-full text-sm"><a class="underline" href="/gdpr">Zde</a></div>
|
<div class="w-full text-sm"><a class="underline" href="/gdpr">{$LL.components.checkbox.gdprCheckBox.here()}</a></div>
|
||||||
</div>
|
</div>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import LL from '$i18n/i18n-svelte';
|
||||||
|
|
||||||
import { fetchSubmProgress } from '$lib/stores/portfolio';
|
import { fetchSubmProgress } from '$lib/stores/portfolio';
|
||||||
import { apiDeleteCoverLetter, apiUploadCoverLetter } from '$lib/@api/candidate';
|
import { apiDeleteCoverLetter, apiUploadCoverLetter } from '$lib/@api/candidate';
|
||||||
import DashboardUploadCard from './DashboardUploadCard.svelte';
|
import DashboardUploadCard from './DashboardUploadCard.svelte';
|
||||||
|
|
@ -28,9 +30,9 @@
|
||||||
{error}
|
{error}
|
||||||
on:filedrop={(e) => onFileDrop(e.detail)}
|
on:filedrop={(e) => onFileDrop(e.detail)}
|
||||||
on:delete={onDelete}
|
on:delete={onDelete}
|
||||||
title="Motivační dopis"
|
title={$LL.components.dashboard.coverLetterUploadCard.title()}
|
||||||
filetype="PDF"
|
filetype="PDF"
|
||||||
filesize={10}
|
filesize={10}
|
||||||
fileType={1}
|
fileType={1}
|
||||||
placeholder="svůj motivanční dopis"
|
placeholder={$LL.components.dashboard.coverLetterUploadCard.placeholder()}
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import LL from '$i18n/i18n-svelte';
|
||||||
|
|
||||||
import debounce from 'just-debounce-it';
|
import debounce from 'just-debounce-it';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
|
@ -7,7 +9,6 @@
|
||||||
apiLogout,
|
apiLogout,
|
||||||
apiSubmitPortfolio
|
apiSubmitPortfolio
|
||||||
} from '$lib/@api/candidate';
|
} from '$lib/@api/candidate';
|
||||||
import Circles from '$lib/components/icons/Circles.svelte';
|
|
||||||
import { fetchSubmProgress, type Status } from '$lib/stores/portfolio';
|
import { fetchSubmProgress, type Status } from '$lib/stores/portfolio';
|
||||||
import StatusNotificationBig from './StatusNotificationBig.svelte';
|
import StatusNotificationBig from './StatusNotificationBig.svelte';
|
||||||
import InfoButton from './InfoButton.svelte';
|
import InfoButton from './InfoButton.svelte';
|
||||||
|
|
@ -150,39 +151,39 @@
|
||||||
class="mt-4 flex flex-col justify-between leading-10"
|
class="mt-4 flex flex-col justify-between leading-10"
|
||||||
>
|
>
|
||||||
<span
|
<span
|
||||||
>Ev. č. přihlášky ({getField($baseCandidateData.applications[0])}):
|
>{$LL.input.evidenceNumber()} ({getField($baseCandidateData.applications[0])}):
|
||||||
<span class="font-bold">{$baseCandidateData.applications[0]}</span></span
|
<span class="font-bold">{$baseCandidateData.applications[0]}</span></span
|
||||||
>
|
>
|
||||||
{#if $baseCandidateData.applications.length > 1}
|
{#if $baseCandidateData.applications.length > 1}
|
||||||
<span
|
<span
|
||||||
>Ev. č. přihlášky ({getField($baseCandidateData.applications[1])}):
|
>{$LL.input.evidenceNumber()} ({getField($baseCandidateData.applications[1])}):
|
||||||
<span class="font-bold">{$baseCandidateData.applications[1]}</span></span
|
<span class="font-bold">{$baseCandidateData.applications[1]}</span></span
|
||||||
>
|
>
|
||||||
{/if}
|
{/if}
|
||||||
<span>Adresa: <span class="font-bold">{$candidateData.candidate.address}</span></span>
|
<span>{$LL.input.address()}: <span class="font-bold">{$candidateData.candidate.address}</span></span>
|
||||||
<span
|
<span
|
||||||
>Datum narození: <span class="font-bold">{$candidateData.candidate.birthdate}</span
|
>{$LL.input.birthDate()}: <span class="font-bold">{$candidateData.candidate.birthdate}</span
|
||||||
></span
|
></span
|
||||||
>
|
>
|
||||||
<span
|
<span
|
||||||
>Místo narození: <span class="font-bold">{$candidateData.candidate.birthplace}</span
|
>{$LL.input.birthPlace()}: <span class="font-bold">{$candidateData.candidate.birthplace}</span
|
||||||
></span
|
></span
|
||||||
>
|
>
|
||||||
<span
|
<span
|
||||||
>Rodné číslo: <span class="font-bold"
|
>{$LL.input.personalIdentificationNumber()}: <span class="font-bold"
|
||||||
>{$candidateData.candidate.personalIdNumber}</span
|
>{$candidateData.candidate.personalIdNumber}</span
|
||||||
></span
|
></span
|
||||||
>
|
>
|
||||||
<span
|
<span
|
||||||
>IČO/Název školy: <span class="font-bold">{$candidateData.candidate.schoolName}</span
|
>{$LL.input.schoolIzo()}: <span class="font-bold">{$candidateData.candidate.schoolName}</span
|
||||||
></span
|
></span
|
||||||
>
|
>
|
||||||
<span
|
<span
|
||||||
>Číslo zdravotní pojišťovny: <span class="font-bold"
|
>{$LL.input.insuranceNumber()}: <span class="font-bold"
|
||||||
>{$candidateData.candidate.healthInsurance}</span
|
>{$candidateData.candidate.healthInsurance}</span
|
||||||
></span
|
></span
|
||||||
>
|
>
|
||||||
<span>Telefon: <span class="font-bold">{$candidateData.candidate.telephone}</span></span
|
<span>{$LL.input.telephone()}: <span class="font-bold">{$candidateData.candidate.telephone}</span></span
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
|
|
@ -200,8 +201,8 @@
|
||||||
<span class="text-sspsBlue text-xl font-bold"
|
<span class="text-sspsBlue text-xl font-bold"
|
||||||
>{parent.name + ' ' + parent.surname}</span
|
>{parent.name + ' ' + parent.surname}</span
|
||||||
>
|
>
|
||||||
<span>Email: <span class="font-bold">{parent.email}</span></span>
|
<span>{$LL.input.email()}: <span class="font-bold">{parent.email}</span></span>
|
||||||
<span>Telefon: <span class="font-bold">{parent.telephone}</span></span>
|
<span>{$LL.input.telephone()}: <span class="font-bold">{parent.telephone}</span></span>
|
||||||
</div>
|
</div>
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import LL from '$i18n/i18n-svelte';
|
||||||
|
|
||||||
import FileType from './FileType.svelte';
|
import FileType from './FileType.svelte';
|
||||||
import debounce from 'just-debounce-it';
|
import debounce from 'just-debounce-it';
|
||||||
import { filedrop, type FileDropOptions, type Files } from 'filedrop-svelte';
|
import { filedrop, type FileDropOptions, type Files } from 'filedrop-svelte';
|
||||||
|
|
@ -103,7 +105,7 @@
|
||||||
{#if status === 'uploaded'}
|
{#if status === 'uploaded'}
|
||||||
<button
|
<button
|
||||||
class="mr-3 rounded-xl bg-[#ef8b46] py-0.5 px-2 text-white shadow-md transition-all duration-300 hover:bg-orange-400"
|
class="mr-3 rounded-xl bg-[#ef8b46] py-0.5 px-2 text-white shadow-md transition-all duration-300 hover:bg-orange-400"
|
||||||
on:click={debounce(() => dispatch('delete'), 150)}>Smazat</button
|
on:click={debounce(() => dispatch('delete'), 150)}>{$LL.components.dashboard.dashboardUploadCard.delete()}</button
|
||||||
>
|
>
|
||||||
{/if}
|
{/if}
|
||||||
<StatusNotificationDot {status} />
|
<StatusNotificationDot {status} />
|
||||||
|
|
@ -131,9 +133,9 @@
|
||||||
>
|
>
|
||||||
<div class="hidden items-center xl:block">
|
<div class="hidden items-center xl:block">
|
||||||
{#if bytesTotal === 0 || Math.round(progress * 100) === 100}
|
{#if bytesTotal === 0 || Math.round(progress * 100) === 100}
|
||||||
<h2 class="text-xl font-bold">{status === 'submitted' ? 'Odesláno' : 'Nahráno'}</h2>
|
<h2 class="text-xl font-bold">{status === 'submitted' ? $LL.components.dashboard.dashboardUploadCard.sent() : $LL.components.dashboard.dashboardUploadCard.uploaded()}</h2>
|
||||||
{:else}
|
{:else}
|
||||||
<h2 class="text-xl">Nahráno {((bytesTotal / 1_000_000) * progress).toFixed(1)} MB</h2>
|
<h2 class="text-xl">{$LL.components.dashboard.dashboardUploadCard.uploaded()} {((bytesTotal / 1_000_000) * progress).toFixed(1)} MB</h2>
|
||||||
<h2 class="self-center text-xl">z {(bytesTotal / 1_000_000).toFixed(1)} MB</h2>
|
<h2 class="self-center text-xl">z {(bytesTotal / 1_000_000).toFixed(1)} MB</h2>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -168,8 +170,14 @@
|
||||||
{#if error}
|
{#if error}
|
||||||
<span class="font-semibold text-red-600">{error}</span>
|
<span class="font-semibold text-red-600">{error}</span>
|
||||||
{:else}
|
{:else}
|
||||||
<span class="text-[#406280]">Sem přetáhněte,</span>
|
<span class="text-[#406280]"
|
||||||
<span class="text-sspsGray">nebo nahrajte {placeholder}</span>
|
>{$LL.components.dashboard.dashboardUploadCard.dropHere()}</span
|
||||||
|
>
|
||||||
|
<span class="text-sspsGray"
|
||||||
|
>{$LL.components.dashboard.dashboardUploadCard.orUpload({
|
||||||
|
placeholder
|
||||||
|
})}</span
|
||||||
|
>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import LL from '$i18n/i18n-svelte';
|
||||||
|
|
||||||
import type { ApiError } from '$lib/@api';
|
import type { ApiError } from '$lib/@api';
|
||||||
import { fetchSubmProgress } from '$lib/stores/portfolio';
|
import { fetchSubmProgress } from '$lib/stores/portfolio';
|
||||||
import { apiDeletePortfolioLetter, apiUploadPortfolioLetter } from '../../@api/candidate';
|
import { apiDeletePortfolioLetter, apiUploadPortfolioLetter } from '../../@api/candidate';
|
||||||
|
|
@ -28,9 +30,9 @@
|
||||||
{error}
|
{error}
|
||||||
on:filedrop={(e) => onFileDrop(e.detail)}
|
on:filedrop={(e) => onFileDrop(e.detail)}
|
||||||
on:delete={onDelete}
|
on:delete={onDelete}
|
||||||
title="Portfolio"
|
title={$LL.components.dashboard.portfolioLetterUploadCard.title()}
|
||||||
filetype="PDF"
|
filetype="PDF"
|
||||||
filesize={10}
|
filesize={10}
|
||||||
fileType={2}
|
fileType={2}
|
||||||
placeholder="svoje portfolio"
|
placeholder={$LL.components.dashboard.portfolioLetterUploadCard.placeholder()}
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import LL from '$i18n/i18n-svelte';
|
||||||
|
|
||||||
import { fetchSubmProgress } from '$lib/stores/portfolio';
|
import { fetchSubmProgress } from '$lib/stores/portfolio';
|
||||||
import { apiDeletePortfolioZip, apiUploadPortfolioZip } from '$lib/@api/candidate';
|
import { apiDeletePortfolioZip, apiUploadPortfolioZip } from '$lib/@api/candidate';
|
||||||
import DashboardUploadCard from './DashboardUploadCard.svelte';
|
import DashboardUploadCard from './DashboardUploadCard.svelte';
|
||||||
|
|
@ -28,9 +30,9 @@
|
||||||
{error}
|
{error}
|
||||||
on:filedrop={(e) => onFileDrop(e.detail)}
|
on:filedrop={(e) => onFileDrop(e.detail)}
|
||||||
on:delete={onDelete}
|
on:delete={onDelete}
|
||||||
title="Další data"
|
title={$LL.components.dashboard.portfolioZipUploadCard.title()}
|
||||||
filetype="ZIP"
|
filetype="ZIP"
|
||||||
filesize={100}
|
filesize={100}
|
||||||
fileType={3}
|
fileType={3}
|
||||||
placeholder="vaše další soubory ve formátu ZIP"
|
placeholder={$LL.components.dashboard.portfolioZipUploadCard.placeholder()}
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import LL from '$i18n/i18n-svelte';
|
||||||
|
|
||||||
import type { Status } from '$lib/stores/portfolio';
|
import type { Status } from '$lib/stores/portfolio';
|
||||||
|
|
||||||
export let loading: boolean = false;
|
export let loading: boolean = false;
|
||||||
|
|
@ -8,16 +10,16 @@
|
||||||
let description: string;
|
let description: string;
|
||||||
$: switch (status) {
|
$: switch (status) {
|
||||||
case 'submitted':
|
case 'submitted':
|
||||||
title = 'Soubory odevzdány!';
|
title = $LL.components.dashboard.statusNotificationBig.submitted.title();
|
||||||
description = 'Vaše soubory smažete kliknutím zde';
|
description = $LL.components.dashboard.statusNotificationBig.submitted.description();
|
||||||
break;
|
break;
|
||||||
case 'uploaded':
|
case 'uploaded':
|
||||||
title = 'Soubory nebyly odevzdány!';
|
title = $LL.components.dashboard.statusNotificationBig.uploaded.title();
|
||||||
description = 'Odevzdejte soubory kliknutím zde';
|
description = $LL.components.dashboard.statusNotificationBig.uploaded.description();
|
||||||
break;
|
break;
|
||||||
case 'missing':
|
case 'missing':
|
||||||
title = 'Soubory nebyly nahrány!';
|
title = $LL.components.dashboard.statusNotificationBig.missing.title();
|
||||||
description = 'Nahrajte včechny soubory prosím';
|
description = $LL.components.dashboard.statusNotificationBig.missing.description();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,11 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import LL from '$i18n/i18n-svelte';
|
||||||
|
|
||||||
import lion from '$lib/assets/logo/lion.png';
|
import lion from '$lib/assets/logo/lion.png';
|
||||||
import SplitLayout from '$lib/components/layout/SplitLayout.svelte';
|
import SplitLayout from '$lib/components/layout/SplitLayout.svelte';
|
||||||
import TextField from '$lib/components/textfield/TextField.svelte';
|
import TextField from '$lib/components/textfield/TextField.svelte';
|
||||||
|
|
||||||
import background from '$lib/assets/background2.jpg';
|
import background from '$lib/assets/background2.jpg';
|
||||||
import Lock from '$lib/components/icons/Lock.svelte';
|
|
||||||
import { apiLogin } from '$lib/@api/admin';
|
import { apiLogin } from '$lib/@api/admin';
|
||||||
import { goto } from '$app/navigation';
|
import { goto } from '$app/navigation';
|
||||||
import Submit from '$lib/components/button/Submit.svelte';
|
import Submit from '$lib/components/button/Submit.svelte';
|
||||||
|
|
@ -30,20 +31,20 @@
|
||||||
>
|
>
|
||||||
<img class="object-cover" src={lion} alt="" />
|
<img class="object-cover" src={lion} alt="" />
|
||||||
</div>
|
</div>
|
||||||
<h1 class="text-sspsBlue mt-8 text-4xl font-semibold">Přihlášení</h1>
|
<h1 class="text-sspsBlue mt-8 text-4xl font-semibold">{$LL.admin.auth.login.title()}</h1>
|
||||||
<p class="text-sspsGray mt-8 text-center font-light">
|
<p class="text-sspsGray mt-8 text-center font-light">
|
||||||
Administrátoská sekce aplikace<br /> Přístup povolen pouze pro oprávněné osoby!
|
{$LL.admin.auth.login.description()}
|
||||||
</p>
|
</p>
|
||||||
<div class="mt-8 flex w-4/5 flex-col lg:w-3/5">
|
<div class="mt-8 flex w-4/5 flex-col lg:w-3/5">
|
||||||
<span>
|
<span>
|
||||||
<TextField bind:value={adminIdValue} placeholder="Admin id" type="number" />
|
<TextField bind:value={adminIdValue} placeholder={$LL.input.adminId()} type="number" />
|
||||||
</span>
|
</span>
|
||||||
<span class="mt-8">
|
<span class="mt-8">
|
||||||
<PasswordField bind:value={adminPasswordValue} placeholder="Heslo" />
|
<PasswordField bind:value={adminPasswordValue} placeholder={$LL.input.password()} />
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-8 w-4/5 lg:w-3/5">
|
<div class="mt-8 w-4/5 lg:w-3/5">
|
||||||
<Submit value="Odeslat" on:click={login} />
|
<Submit value={$LL.input.submit()} on:click={login} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</SplitLayout>
|
</SplitLayout>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import LL from '$i18n/i18n-svelte';
|
||||||
|
|
||||||
import { goto } from '$app/navigation';
|
import { goto } from '$app/navigation';
|
||||||
import { apiFillDetails } from '$lib/@api/candidate';
|
import { apiFillDetails } from '$lib/@api/candidate';
|
||||||
import Submit from '$lib/components/button/Submit.svelte';
|
import Submit from '$lib/components/button/Submit.svelte';
|
||||||
|
|
@ -27,12 +29,13 @@
|
||||||
let pageIndex = 0;
|
let pageIndex = 0;
|
||||||
let pagesFilled = [false, false, false, false, false, false, false];
|
let pagesFilled = [false, false, false, false, false, false, false];
|
||||||
let pageTexts = [
|
let pageTexts = [
|
||||||
'Zpracování osobních údajů',
|
$LL.candidate.register.second.title(),
|
||||||
'Registrace',
|
$LL.candidate.register.third.title(),
|
||||||
'Něco o Vás',
|
$LL.candidate.register.fourth.title(),
|
||||||
'Zákonný zástupce',
|
$LL.candidate.register.fifth.title(),
|
||||||
'Druhý zákonný zástupce',
|
$LL.candidate.register.sixth.title(),
|
||||||
'Poslední krok'
|
$LL.candidate.register.seventh.title(),
|
||||||
|
$LL.candidate.register.eighth.title()
|
||||||
];
|
];
|
||||||
|
|
||||||
export let data: PageData;
|
export let data: PageData;
|
||||||
|
|
@ -61,7 +64,7 @@
|
||||||
schoolName: '',
|
schoolName: '',
|
||||||
healthInsurance: '',
|
healthInsurance: '',
|
||||||
grades: [],
|
grades: [],
|
||||||
testLanguage: '',
|
testLanguage: ''
|
||||||
},
|
},
|
||||||
parents: [
|
parents: [
|
||||||
{
|
{
|
||||||
|
|
@ -121,8 +124,9 @@
|
||||||
semester: yup.string().required()
|
semester: yup.string().required()
|
||||||
})
|
})
|
||||||
.required()
|
.required()
|
||||||
).required(),
|
)
|
||||||
testLanguage: yup.string().required(),
|
.required(),
|
||||||
|
testLanguage: yup.string().required()
|
||||||
}),
|
}),
|
||||||
parents: yup.array().of(
|
parents: yup.array().of(
|
||||||
yup.object().shape({
|
yup.object().shape({
|
||||||
|
|
@ -364,7 +368,7 @@
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
if ($typedErrors["candidate"]["grades"].length > 0) return true;
|
if ($typedErrors['candidate']['grades'].length > 0) return true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -411,7 +415,7 @@
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
pageIndex = 2; // skip gdpr page
|
pageIndex = 2; // skip gdpr page
|
||||||
pageTexts[2] = 'Úprava osobních údajů';
|
pageTexts[2] = $LL.candidate.register.fourth.titleEdit();
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
@ -428,10 +432,9 @@
|
||||||
<form on:submit={handleSubmit} id="triggerForm" class="invisible hidden" />
|
<form on:submit={handleSubmit} id="triggerForm" class="invisible hidden" />
|
||||||
{#if pageIndex === 0}
|
{#if pageIndex === 0}
|
||||||
<form on:submit={handleSubmit}>
|
<form on:submit={handleSubmit}>
|
||||||
<h1 class="title mt-8">Propojení účtů</h1>
|
<h1 class="title mt-8">{$LL.candidate.register.first.title()}</h1>
|
||||||
<p class="description mt-8 block text-center">
|
<p class="description mt-8 block text-center">
|
||||||
Elektronickou přihlášky stačí vyplnit jen jednou i v případě, že jste podali dvě
|
{$LL.candidate.register.first.description()}
|
||||||
přihlášky. Potvrďte, že jste jste k nám skutečně podali dvě přihlášky.
|
|
||||||
</p>
|
</p>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<AccountLinkCheckBox
|
<AccountLinkCheckBox
|
||||||
|
|
@ -446,24 +449,18 @@
|
||||||
<form on:submit={handleSubmit}>
|
<form on:submit={handleSubmit}>
|
||||||
<h1 class="title mt-8">{pageTexts[0]}</h1>
|
<h1 class="title mt-8">{pageTexts[0]}</h1>
|
||||||
<p class="description mt-8 block text-center">
|
<p class="description mt-8 block text-center">
|
||||||
V rámci portálu pro přijímací řízení zpracováváme mnoho osobních údajů. Proto je nutný
|
{$LL.candidate.register.second.description()}
|
||||||
Váš souhlas s jejich zpracováním. O bezpečnosti zpracování Vašich osobních údajů si
|
<a href="/bezpecnost" class="text-sspsBlue underline"> {$LL.here()}</a>.
|
||||||
můžete přečíst
|
|
||||||
<a href="/bezpecnost" class="text-sspsBlue underline"> zde</a>.
|
|
||||||
</p>
|
</p>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<GdprCheckBox
|
<GdprCheckBox bind:value={$form.gdpr} error={$typedErrors['gdpr']} />
|
||||||
bind:value={$form.gdpr}
|
|
||||||
error={$typedErrors['gdpr']}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
{:else if pageIndex === 2}
|
{:else if pageIndex === 2}
|
||||||
<form on:submit={handleSubmit}>
|
<form on:submit={handleSubmit}>
|
||||||
<h1 class="title mt-8">{pageTexts[1]}</h1>
|
<h1 class="title mt-8">{pageTexts[1]}</h1>
|
||||||
<p class="description mt-8 block text-center">
|
<p class="description mt-8 block text-center">
|
||||||
V rámci usnadnění přijímacího řízení jsme připravili online formulář, který Vám pomůže s
|
{$LL.candidate.register.third.description()}
|
||||||
vyplněním potřebných údajů.
|
|
||||||
</p>
|
</p>
|
||||||
<div class="flex flex-col">
|
<div class="flex flex-col">
|
||||||
<span class="field">
|
<span class="field">
|
||||||
|
|
@ -471,21 +468,21 @@
|
||||||
error={$typedErrors['candidate']['name'] || $typedErrors['candidate']['surname']}
|
error={$typedErrors['candidate']['name'] || $typedErrors['candidate']['surname']}
|
||||||
bind:valueName={$form.candidate.name}
|
bind:valueName={$form.candidate.name}
|
||||||
bind:valueSurname={$form.candidate.surname}
|
bind:valueSurname={$form.candidate.surname}
|
||||||
placeholder="Jméno a příjmení"
|
placeholder={$LL.input.nameSurname()}
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
<span class="field">
|
<span class="field">
|
||||||
<EmailField
|
<EmailField
|
||||||
error={$typedErrors['candidate']['email']}
|
error={$typedErrors['candidate']['email']}
|
||||||
bind:value={$form.candidate.email}
|
bind:value={$form.candidate.email}
|
||||||
placeholder="E-mail"
|
placeholder={$LL.input.email()}
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
<span class="field">
|
<span class="field">
|
||||||
<TelephoneField
|
<TelephoneField
|
||||||
error={$typedErrors['candidate']['telephone']}
|
error={$typedErrors['candidate']['telephone']}
|
||||||
bind:value={$form.candidate.telephone}
|
bind:value={$form.candidate.telephone}
|
||||||
placeholder="Telefon"
|
placeholder={$LL.input.telephone()}
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -493,8 +490,7 @@
|
||||||
{:else if pageIndex === 3}
|
{:else if pageIndex === 3}
|
||||||
<h1 class="title mt-8">{pageTexts[2]}</h1>
|
<h1 class="title mt-8">{pageTexts[2]}</h1>
|
||||||
<p class="description mt-8 block text-center">
|
<p class="description mt-8 block text-center">
|
||||||
Pro registraci je potřeba vyplnit několik údajů o Vás. Tyto údaje budou použity pro
|
{$LL.candidate.register.fourth.description()}
|
||||||
přijímací řízení. Všechny údaje jsou důležité.
|
|
||||||
</p>
|
</p>
|
||||||
<div class="field flex">
|
<div class="field flex">
|
||||||
<span class="w-[66%]">
|
<span class="w-[66%]">
|
||||||
|
|
@ -503,7 +499,7 @@
|
||||||
$typedErrors['candidate']['houseNumber']}
|
$typedErrors['candidate']['houseNumber']}
|
||||||
bind:valueName={$form.candidate.street}
|
bind:valueName={$form.candidate.street}
|
||||||
bind:valueSurname={$form.candidate.houseNumber}
|
bind:valueSurname={$form.candidate.houseNumber}
|
||||||
placeholder="Ulice a č. p."
|
placeholder={$LL.input.address()}
|
||||||
helperText="Uveďte ulici a číslo popisné (např. Preslova 72)."
|
helperText="Uveďte ulici a číslo popisné (např. Preslova 72)."
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
|
|
@ -512,7 +508,7 @@
|
||||||
error={$typedErrors['candidate']['zip']}
|
error={$typedErrors['candidate']['zip']}
|
||||||
bind:value={$form.candidate.zip}
|
bind:value={$form.candidate.zip}
|
||||||
type="number"
|
type="number"
|
||||||
placeholder="PSČ"
|
placeholder={$LL.input.zipCode()}
|
||||||
helperText="Uveďte poštovní směrovací číslo. (např. 602 00)"
|
helperText="Uveďte poštovní směrovací číslo. (např. 602 00)"
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
|
|
@ -523,7 +519,7 @@
|
||||||
error={$typedErrors['candidate']['city']}
|
error={$typedErrors['candidate']['city']}
|
||||||
bind:value={$form.candidate.city}
|
bind:value={$form.candidate.city}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="Město"
|
placeholder={$LL.input.city()}
|
||||||
helperText="Uveďte město"
|
helperText="Uveďte město"
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
|
|
@ -532,7 +528,7 @@
|
||||||
error={$typedErrors['candidate']['birthplace']}
|
error={$typedErrors['candidate']['birthplace']}
|
||||||
bind:value={$form.candidate.birthplace}
|
bind:value={$form.candidate.birthplace}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="Místo narození"
|
placeholder={$LL.input.birthPlace()}
|
||||||
helperText="Uveďte město"
|
helperText="Uveďte město"
|
||||||
icon
|
icon
|
||||||
>
|
>
|
||||||
|
|
@ -548,7 +544,7 @@
|
||||||
error={$typedErrors['candidate']['birthdate']}
|
error={$typedErrors['candidate']['birthdate']}
|
||||||
bind:value={$form.candidate.birthdate}
|
bind:value={$form.candidate.birthdate}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="Datum narození"
|
placeholder={$LL.input.birthDate()}
|
||||||
helperText="TODO: (Uveďte ve formátu DD.MM.RRRR)"
|
helperText="TODO: (Uveďte ve formátu DD.MM.RRRR)"
|
||||||
/>
|
/>
|
||||||
<div class="ml-2">
|
<div class="ml-2">
|
||||||
|
|
@ -556,14 +552,14 @@
|
||||||
error={$typedErrors['candidate']['sex']}
|
error={$typedErrors['candidate']['sex']}
|
||||||
bind:value={$form.candidate.sex}
|
bind:value={$form.candidate.sex}
|
||||||
options={['Žena', 'Muž']}
|
options={['Žena', 'Muž']}
|
||||||
placeholder="Pohlaví"
|
placeholder={$LL.input.sex()}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{:else if pageIndex === 4}
|
{:else if pageIndex === 4}
|
||||||
<h1 class="title mt-8">{pageTexts[3]}</h1>
|
<h1 class="title mt-8">{pageTexts[3]}</h1>
|
||||||
<p class="description mt-8 block text-center">
|
<p class="description mt-8 block text-center">
|
||||||
Sběr dat o zákonném zástupci je klíčový pro získání důležitých kontaktů a informací.
|
{$LL.candidate.register.fifth.description()}
|
||||||
</p>
|
</p>
|
||||||
<div class="flex w-full flex-col">
|
<div class="flex w-full flex-col">
|
||||||
<span class="field">
|
<span class="field">
|
||||||
|
|
@ -571,28 +567,28 @@
|
||||||
error={$typedErrors['parents'][0]['name'] || $typedErrors['parents'][0]['surname']}
|
error={$typedErrors['parents'][0]['name'] || $typedErrors['parents'][0]['surname']}
|
||||||
bind:valueName={$form.parents[0].name}
|
bind:valueName={$form.parents[0].name}
|
||||||
bind:valueSurname={$form.parents[0].surname}
|
bind:valueSurname={$form.parents[0].surname}
|
||||||
placeholder="Jméno a příjmení zákonného zástupce"
|
placeholder={$LL.input.parent.nameSurname()}
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
<span class="field">
|
<span class="field">
|
||||||
<EmailField
|
<EmailField
|
||||||
error={$typedErrors['parents'][0]['email']}
|
error={$typedErrors['parents'][0]['email']}
|
||||||
bind:value={$form.parents[0].email}
|
bind:value={$form.parents[0].email}
|
||||||
placeholder="E-mail zákonného zástupce"
|
placeholder={$LL.input.parent.email()}
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
<span class="field">
|
<span class="field">
|
||||||
<TelephoneField
|
<TelephoneField
|
||||||
error={$typedErrors['parents'][0]['telephone']}
|
error={$typedErrors['parents'][0]['telephone']}
|
||||||
bind:value={$form.parents[0].telephone}
|
bind:value={$form.parents[0].telephone}
|
||||||
placeholder="Telefon zákonného zástupce"
|
placeholder={$LL.input.parent.telephone()}
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
{:else if pageIndex === 5}
|
{:else if pageIndex === 5}
|
||||||
<h1 class="title mt-8">{pageTexts[4]}</h1>
|
<h1 class="title mt-8">{pageTexts[4]}</h1>
|
||||||
<p class="description mt-8 block text-center">
|
<p class="description mt-8 block text-center">
|
||||||
Zde můžete zadat údaje o druhém zákonném zástupci. Škole tím umožníte lépe komunikovat.
|
{$LL.candidate.register.sixth.description()}
|
||||||
</p>
|
</p>
|
||||||
<div class="flex w-full flex-col">
|
<div class="flex w-full flex-col">
|
||||||
<span class="field">
|
<span class="field">
|
||||||
|
|
@ -600,29 +596,28 @@
|
||||||
error={$typedErrors['parents'][1]['name'] || $typedErrors['parents'][1]['surname']}
|
error={$typedErrors['parents'][1]['name'] || $typedErrors['parents'][1]['surname']}
|
||||||
bind:valueName={$form.parents[1].name}
|
bind:valueName={$form.parents[1].name}
|
||||||
bind:valueSurname={$form.parents[1].surname}
|
bind:valueSurname={$form.parents[1].surname}
|
||||||
placeholder="Jméno a příjmení zákonného zástupce (nepovinné)"
|
placeholder={`${$LL.input.parent.nameSurname()} (${$LL.input.optional()})`}
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
<span class="field">
|
<span class="field">
|
||||||
<EmailField
|
<EmailField
|
||||||
error={$typedErrors['parents'][1]['email']}
|
error={$typedErrors['parents'][1]['email']}
|
||||||
bind:value={$form.parents[1].email}
|
bind:value={$form.parents[1].email}
|
||||||
placeholder="E-mail zákonného zástupce (nepovinné)"
|
placeholder={`${$LL.input.parent.email()} (${$LL.input.optional()})`}
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
<span class="field">
|
<span class="field">
|
||||||
<TelephoneField
|
<TelephoneField
|
||||||
error={$typedErrors['parents'][1]['telephone']}
|
error={$typedErrors['parents'][1]['telephone']}
|
||||||
bind:value={$form.parents[1].telephone}
|
bind:value={$form.parents[1].telephone}
|
||||||
placeholder="Telefon zákonného zástupce (nepovinné)"
|
placeholder={`${$LL.input.parent.telephone()} (${$LL.input.optional()})`}
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
{:else if pageIndex === 6}
|
{:else if pageIndex === 6}
|
||||||
<h1 class="title mt-8">{pageTexts[5]}</h1>
|
<h1 class="title mt-8">{pageTexts[5]}</h1>
|
||||||
<p class="description mt-8 block text-center">
|
<p class="description mt-8 block text-center">
|
||||||
Zadejte prosím své občanství, rodné číslo, či jeho alternativu Vaší země a obor na který
|
{$LL.candidate.register.seventh.description()}
|
||||||
se hlásíte.
|
|
||||||
</p>
|
</p>
|
||||||
<div class="flex w-full flex-col">
|
<div class="flex w-full flex-col">
|
||||||
<div class="field flex w-full">
|
<div class="field flex w-full">
|
||||||
|
|
@ -630,15 +625,15 @@
|
||||||
<SelectField
|
<SelectField
|
||||||
error={$typedErrors['candidate']['citizenship']}
|
error={$typedErrors['candidate']['citizenship']}
|
||||||
bind:value={$form.candidate.citizenship}
|
bind:value={$form.candidate.citizenship}
|
||||||
placeholder="Občanství"
|
placeholder={$LL.input.citizenship()}
|
||||||
options={['Česká republika', 'Slovenská republika', 'Ukrajina', 'Jiné']}
|
options={['Česká republika', 'Slovenská republika', 'Ukrajina', 'Jiné']}
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
<span class="w-[50%] ml-2">
|
<span class="ml-2 w-[50%]">
|
||||||
<SelectField
|
<SelectField
|
||||||
error={$typedErrors['candidate']['testLanguage']}
|
error={$typedErrors['candidate']['testLanguage']}
|
||||||
bind:value={$form.candidate.testLanguage}
|
bind:value={$form.candidate.testLanguage}
|
||||||
placeholder="Jazyk odborných testů"
|
placeholder={$LL.input.testLanguage()}
|
||||||
options={['Čeština', 'Angličtina']}
|
options={['Čeština', 'Angličtina']}
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
|
|
@ -650,14 +645,14 @@
|
||||||
error={$typedErrors['candidate']['schoolName']}
|
error={$typedErrors['candidate']['schoolName']}
|
||||||
type="number"
|
type="number"
|
||||||
bind:value={$form.candidate.schoolName}
|
bind:value={$form.candidate.schoolName}
|
||||||
placeholder="IZO školy"
|
placeholder={$LL.input.schoolIzo()}
|
||||||
/>
|
/>
|
||||||
{:else}
|
{:else}
|
||||||
<TextField
|
<TextField
|
||||||
error={$typedErrors['candidate']['schoolName']}
|
error={$typedErrors['candidate']['schoolName']}
|
||||||
type="text"
|
type="text"
|
||||||
bind:value={$form.candidate.schoolName}
|
bind:value={$form.candidate.schoolName}
|
||||||
placeholder="Název školy"
|
placeholder={$LL.input.schoolName()}
|
||||||
/>
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
</span>
|
</span>
|
||||||
|
|
@ -667,7 +662,7 @@
|
||||||
error={$typedErrors['candidate']['healthInsurance']}
|
error={$typedErrors['candidate']['healthInsurance']}
|
||||||
type="text"
|
type="text"
|
||||||
bind:value={$form.candidate.healthInsurance}
|
bind:value={$form.candidate.healthInsurance}
|
||||||
placeholder="Číslo zdravotní pojišťovny"
|
placeholder={$LL.input.insuranceNumber()}
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -677,20 +672,20 @@
|
||||||
<IdField
|
<IdField
|
||||||
error={$typedErrors['candidate']['personalIdNumber']}
|
error={$typedErrors['candidate']['personalIdNumber']}
|
||||||
bind:value={$form.candidate.personalIdNumber}
|
bind:value={$form.candidate.personalIdNumber}
|
||||||
placeholder="Rodné číslo"
|
placeholder={$LL.input.personalIdentificationNumber()}
|
||||||
/>
|
/>
|
||||||
{:else}
|
{:else}
|
||||||
<TextField
|
<TextField
|
||||||
error={$typedErrors['candidate']['personalIdNumber']}
|
error={$typedErrors['candidate']['personalIdNumber']}
|
||||||
bind:value={$form.candidate.personalIdNumber}
|
bind:value={$form.candidate.personalIdNumber}
|
||||||
placeholder="Rodné číslo"
|
placeholder={$LL.input.personalIdentificationNumber()}
|
||||||
/>
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
{:else if pageIndex === 7}
|
{:else if pageIndex === 7}
|
||||||
<h1 class="title mt-8">{pageTexts[5]}</h1>
|
<h1 class="title mt-8">{pageTexts[6]}</h1>
|
||||||
<p class="description mt-8 block text-center">
|
<p class="description mt-8 block text-center">
|
||||||
Přidejte prosím přepis Vaších známek z posledních dvou let studia
|
{$LL.candidate.register.eighth.description()}
|
||||||
</p>
|
</p>
|
||||||
<GradesTable
|
<GradesTable
|
||||||
error={$typedErrors['candidate']['grades']}
|
error={$typedErrors['candidate']['grades']}
|
||||||
|
|
@ -712,7 +707,7 @@
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
errors.set(formInitialValues);
|
errors.set(formInitialValues);
|
||||||
}}
|
}}
|
||||||
value={pageIndex === pageCount ? 'Odeslat' : 'Pokračovat'}
|
value={pageIndex === pageCount ? $LL.input.submit() : $LL.input.continue()}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import LL from '$i18n/i18n-svelte';
|
||||||
import { goto } from '$app/navigation';
|
import { goto } from '$app/navigation';
|
||||||
import Submit from '$lib/components/button/Submit.svelte';
|
import Submit from '$lib/components/button/Submit.svelte';
|
||||||
|
|
||||||
|
|
@ -19,16 +20,15 @@
|
||||||
<SplitLayout>
|
<SplitLayout>
|
||||||
<div class="form">
|
<div class="form">
|
||||||
<SchoolBadge />
|
<SchoolBadge />
|
||||||
<h1 class="text-sspsBlue mt-8 text-4xl font-semibold">Přihlášení</h1>
|
<h1 class="text-sspsBlue mt-8 text-4xl font-semibold">{$LL.candidate.auth.login.title()}</h1>
|
||||||
<p class="text-sspsGray my-8 text-center font-light">
|
<p class="text-sspsGray my-8 text-center font-light">
|
||||||
Evidenční číslo je jedinečné číslo přidělené uchazeči, které slouží k jeho identifikaci<br /> a
|
{$LL.candidate.auth.login.description()}
|
||||||
přihlášení se do systému.
|
|
||||||
</p>
|
</p>
|
||||||
<div class="w-4/5 lg:w-3/5">
|
<div class="w-4/5 lg:w-3/5">
|
||||||
<TextField bind:value={applicationValue} placeholder="Ev. číslo" type="number" />
|
<TextField bind:value={applicationValue} placeholder={$LL.input.evidenceNumber()} type="number" />
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-8 w-4/5 lg:w-3/5">
|
<div class="mt-8 w-4/5 lg:w-3/5">
|
||||||
<Submit on:click={redirectToCode} value="Odeslat" />
|
<Submit on:click={redirectToCode} value={$LL.input.submit()} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</SplitLayout>
|
</SplitLayout>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import LL from '$i18n/i18n-svelte';
|
||||||
|
|
||||||
import FullLayout from '$lib/components/layout/FullLayout.svelte';
|
import FullLayout from '$lib/components/layout/FullLayout.svelte';
|
||||||
|
|
||||||
import woman from '$lib/assets/woman.png';
|
import woman from '$lib/assets/woman.png';
|
||||||
|
|
@ -132,9 +134,12 @@
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
<h3 class="text-sspsBlue mx-8 mt-8 text-center text-xl font-semibold">
|
<h3 class="text-sspsBlue mx-8 mt-8 text-center text-xl font-semibold">
|
||||||
Zadejte 12místný kód pro aktivaci účtu
|
{$LL.candidate.auth.application.title()}
|
||||||
</h3>
|
</h3>
|
||||||
<p class="text-sspsGray mx-8 mt-8 text-center">Nevíte si rady? Klikněte <u>zde</u></p>
|
<p class="text-sspsGray mx-8 mt-8 text-center">
|
||||||
|
{$LL.candidate.auth.application.help.description()}
|
||||||
|
<u>{$LL.candidate.auth.application.help.here()}</u>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</FullLayout>
|
</FullLayout>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,11 @@
|
||||||
|
import { setLocale } from '$i18n/i18n-svelte';
|
||||||
|
import { loadAllLocalesAsync } from '$i18n/i18n-util.async';
|
||||||
import type { LayoutLoad } from './$types';
|
import type { LayoutLoad } from './$types';
|
||||||
|
|
||||||
export const load: LayoutLoad = async ({ url }) => {
|
export const load: LayoutLoad = async ({ url }) => {
|
||||||
|
await loadAllLocalesAsync();
|
||||||
|
setLocale('cs');
|
||||||
|
|
||||||
return {
|
return {
|
||||||
url: url.pathname
|
url: url.pathname
|
||||||
};
|
};
|
||||||
|
|
|
||||||
158
frontend/src/translations/cs/index.ts
Normal file
158
frontend/src/translations/cs/index.ts
Normal file
|
|
@ -0,0 +1,158 @@
|
||||||
|
import type { BaseTranslation } from '../i18n-types.js';
|
||||||
|
|
||||||
|
const cs: BaseTranslation = {
|
||||||
|
here: 'zde',
|
||||||
|
admin: {
|
||||||
|
auth: {
|
||||||
|
login: {
|
||||||
|
title: 'Přihlášení',
|
||||||
|
description: 'Administrátoská sekce aplikace\nPřístup povolen pouze pro oprávněné osoby!'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
candidate: {
|
||||||
|
auth: {
|
||||||
|
login: {
|
||||||
|
title: 'Přihlášení',
|
||||||
|
description:
|
||||||
|
'Evidenční číslo je jedinečné číslo přidělené uchazeči, které slouží k jeho identifikaci\napřihlášení se do systému.'
|
||||||
|
},
|
||||||
|
application: {
|
||||||
|
title: 'Zadejte 12místný kód pro aktivaci účtu',
|
||||||
|
help: {
|
||||||
|
description: 'Nevíte si rady? Klikněte',
|
||||||
|
here: 'zde'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
register: {
|
||||||
|
first: {
|
||||||
|
title: 'Propojení účtů',
|
||||||
|
description:
|
||||||
|
'Elektronickou přihlášky stačí vyplnit jen jednou i v případě, že jste podali dvě přihlášky. Potvrďte, že jste jste k nám skutečně podali dvě přihlášky.'
|
||||||
|
},
|
||||||
|
second: {
|
||||||
|
title: 'Zpracování osobních údajů',
|
||||||
|
description:
|
||||||
|
'V rámci portálu pro přijímací řízení zpracováváme mnoho osobních údajů. Proto je nutný Váš souhlas s jejich zpracováním. O bezpečnosti zpracování Vašich osobních údajů si můžete přečíst'
|
||||||
|
},
|
||||||
|
third: {
|
||||||
|
title: 'Registrace',
|
||||||
|
description:
|
||||||
|
'V rámci usnadnění přijímacího řízení jsme připravili online formulář, který Vám pomůže s vyplněním potřebných údajů.'
|
||||||
|
},
|
||||||
|
fourth: {
|
||||||
|
title: 'Něco o Vás',
|
||||||
|
titleEdit: 'Úprava osobních údajů',
|
||||||
|
description:
|
||||||
|
'Pro registraci je potřeba vyplnit několik údajů o Vás. Tyto údaje budou použity pro přijímací řízení. Všechny údaje jsou důležité.'
|
||||||
|
},
|
||||||
|
fifth: {
|
||||||
|
title: 'Zákonný zástupce',
|
||||||
|
description:
|
||||||
|
'Sběr dat o zákonném zástupci je klíčový pro získání důležitých kontaktů a informací.'
|
||||||
|
},
|
||||||
|
sixth: {
|
||||||
|
title: 'Druhý zákonný zástupce',
|
||||||
|
description:
|
||||||
|
'Zde můžete zadat údaje o druhém zákonném zástupci. Škole tím umožníte lépe komunikovat.'
|
||||||
|
},
|
||||||
|
seventh: {
|
||||||
|
title: 'Dokončení registrace',
|
||||||
|
description:
|
||||||
|
'Zadejte prosím své občanství, rodné číslo, či jeho alternativu Vaší země a obor na který se hlásíte.'
|
||||||
|
},
|
||||||
|
eighth: {
|
||||||
|
title: 'Poslední krok',
|
||||||
|
description: 'Přidejte prosím přepis Vaších známek z posledních dvou let studia'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
dashboard: {
|
||||||
|
coverLetterUploadCard: {
|
||||||
|
title: 'Motivační dopis',
|
||||||
|
placeholder: 'svůj motivanční dopis'
|
||||||
|
},
|
||||||
|
portfolioLetterUploadCard: {
|
||||||
|
title: 'Portfolio',
|
||||||
|
placeholder: 'své portfolio'
|
||||||
|
},
|
||||||
|
portfolioZipUploadCard: {
|
||||||
|
title: 'Další data',
|
||||||
|
placeholder: 'vaše další soubory ve formátu ZIP'
|
||||||
|
},
|
||||||
|
dashboardUploadCard: {
|
||||||
|
dropHere: 'Sem přetáhněte,',
|
||||||
|
orUpload: 'Nebo nahrajte {placeholder:string}',
|
||||||
|
uploaded: 'Nahráno',
|
||||||
|
sent: 'Odesláno',
|
||||||
|
delete: 'Smazat'
|
||||||
|
},
|
||||||
|
statusNotificationBig: {
|
||||||
|
submitted: {
|
||||||
|
title: 'Soubory odevzdány!',
|
||||||
|
description: 'Vaše soubory smažete kliknutím zde'
|
||||||
|
},
|
||||||
|
uploaded: {
|
||||||
|
title: 'Soubory nebyly odevzdány!',
|
||||||
|
description: 'Odevzdejte soubory kliknutím zde'
|
||||||
|
},
|
||||||
|
missing: {
|
||||||
|
title: 'Soubory nebyly nahrány!',
|
||||||
|
description: 'Nahrajte včechny soubory prosím',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
checkbox: {
|
||||||
|
accountLinkCheckBox: {
|
||||||
|
ok: 'Vše je v pořádku',
|
||||||
|
whatHappened: 'Co se děje?',
|
||||||
|
multiple: {
|
||||||
|
title:
|
||||||
|
'Ano, podával/a jsem dvě přihlášky na dva obory SSPŠaG ({first:number}) a ({second:number})',
|
||||||
|
title2: 'Ne, přihlášku na SSPŠaG jsem podával/a jen jednu ({first:number})'
|
||||||
|
},
|
||||||
|
single: {
|
||||||
|
title: 'Ano, přihlášku na SSPŠaG jsem podával/a jen jednu ({first:number})',
|
||||||
|
title2: 'Ne, přihlášku na SSPŠaG jsem podával více přihlášek'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
gdprCheckBox: {
|
||||||
|
title: 'Souhlasím se zpracováním osobních údajů',
|
||||||
|
description: 'Kliknutím vyjaďřujete souhlas se zpracováním osobních údajů',
|
||||||
|
here: 'Zde'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
input: {
|
||||||
|
optional: 'nepovinné',
|
||||||
|
nameSurname: 'Jméno a příjmení',
|
||||||
|
email: 'E-mail',
|
||||||
|
telephone: 'Telefon',
|
||||||
|
address: 'Ulice a č. p.',
|
||||||
|
zipCode: 'PSČ',
|
||||||
|
city: 'Město',
|
||||||
|
birthPlace: 'Místo narození',
|
||||||
|
birthDate: 'Datum narození',
|
||||||
|
sex: 'Pohlaví',
|
||||||
|
citizenship: 'Občanství',
|
||||||
|
testLanguage: 'Jazyk odborných testů',
|
||||||
|
schoolIzo: 'IZO školy',
|
||||||
|
schoolName: 'Název školy',
|
||||||
|
insuranceNumber: 'Číslo zdravotní pojišťovny',
|
||||||
|
personalIdentificationNumber: 'Rodné číslo',
|
||||||
|
evidenceNumber: 'Ev. číslo',
|
||||||
|
adminId: 'Admin Id',
|
||||||
|
password: 'Heslo',
|
||||||
|
submit: 'Odeslat',
|
||||||
|
continue: 'Pokračovat',
|
||||||
|
parent: {
|
||||||
|
nameSurname: 'Jméno a příjmení zákonného zástupce',
|
||||||
|
email: 'E-mail zákonného zástupce',
|
||||||
|
telephone: 'Telefon zákonného zástupce'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default cs;
|
||||||
11
frontend/src/translations/formatters.ts
Normal file
11
frontend/src/translations/formatters.ts
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
import type { FormattersInitializer } from 'typesafe-i18n'
|
||||||
|
import type { Locales, Formatters } from './i18n-types.js'
|
||||||
|
|
||||||
|
export const initFormatters: FormattersInitializer<Locales, Formatters> = (locale: Locales) => {
|
||||||
|
|
||||||
|
const formatters: Formatters = {
|
||||||
|
// add your formatter functions here
|
||||||
|
}
|
||||||
|
|
||||||
|
return formatters
|
||||||
|
}
|
||||||
12
frontend/src/translations/i18n-svelte.ts
Normal file
12
frontend/src/translations/i18n-svelte.ts
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten.
|
||||||
|
/* eslint-disable */
|
||||||
|
|
||||||
|
import { initI18nSvelte } from 'typesafe-i18n/svelte'
|
||||||
|
import type { Formatters, Locales, TranslationFunctions, Translations } from './i18n-types.js'
|
||||||
|
import { loadedFormatters, loadedLocales } from './i18n-util.js'
|
||||||
|
|
||||||
|
const { locale, LL, setLocale } = initI18nSvelte<Locales, Translations, TranslationFunctions, Formatters>(loadedLocales, loadedFormatters)
|
||||||
|
|
||||||
|
export { locale, LL, setLocale }
|
||||||
|
|
||||||
|
export default LL
|
||||||
766
frontend/src/translations/i18n-types.ts
Normal file
766
frontend/src/translations/i18n-types.ts
Normal file
|
|
@ -0,0 +1,766 @@
|
||||||
|
// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten.
|
||||||
|
/* eslint-disable */
|
||||||
|
import type { BaseTranslation as BaseTranslationType, LocalizedString, RequiredParams } from 'typesafe-i18n'
|
||||||
|
|
||||||
|
export type BaseTranslation = BaseTranslationType
|
||||||
|
export type BaseLocale = 'cs'
|
||||||
|
|
||||||
|
export type Locales =
|
||||||
|
| 'cs'
|
||||||
|
|
||||||
|
export type Translation = RootTranslation
|
||||||
|
|
||||||
|
export type Translations = RootTranslation
|
||||||
|
|
||||||
|
type RootTranslation = {
|
||||||
|
/**
|
||||||
|
* zde
|
||||||
|
*/
|
||||||
|
here: string
|
||||||
|
admin: {
|
||||||
|
auth: {
|
||||||
|
login: {
|
||||||
|
/**
|
||||||
|
* Přihlášení
|
||||||
|
*/
|
||||||
|
title: string
|
||||||
|
/**
|
||||||
|
* Administrátoská sekce aplikace
|
||||||
|
Přístup povolen pouze pro oprávněné osoby!
|
||||||
|
*/
|
||||||
|
description: string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
candidate: {
|
||||||
|
auth: {
|
||||||
|
login: {
|
||||||
|
/**
|
||||||
|
* Přihlášení
|
||||||
|
*/
|
||||||
|
title: string
|
||||||
|
/**
|
||||||
|
* Evidenční číslo je jedinečné číslo přidělené uchazeči, které slouží k jeho identifikaci
|
||||||
|
apřihlášení se do systému.
|
||||||
|
*/
|
||||||
|
description: string
|
||||||
|
}
|
||||||
|
application: {
|
||||||
|
/**
|
||||||
|
* Zadejte 12místný kód pro aktivaci účtu
|
||||||
|
*/
|
||||||
|
title: string
|
||||||
|
help: {
|
||||||
|
/**
|
||||||
|
* Nevíte si rady? Klikněte
|
||||||
|
*/
|
||||||
|
description: string
|
||||||
|
/**
|
||||||
|
* zde
|
||||||
|
*/
|
||||||
|
here: string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
register: {
|
||||||
|
first: {
|
||||||
|
/**
|
||||||
|
* Propojení účtů
|
||||||
|
*/
|
||||||
|
title: string
|
||||||
|
/**
|
||||||
|
* Elektronickou přihlášky stačí vyplnit jen jednou i v případě, že jste podali dvě přihlášky. Potvrďte, že jste jste k nám skutečně podali dvě přihlášky.
|
||||||
|
*/
|
||||||
|
description: string
|
||||||
|
}
|
||||||
|
second: {
|
||||||
|
/**
|
||||||
|
* Zpracování osobních údajů
|
||||||
|
*/
|
||||||
|
title: string
|
||||||
|
/**
|
||||||
|
* V rámci portálu pro přijímací řízení zpracováváme mnoho osobních údajů. Proto je nutný Váš souhlas s jejich zpracováním. O bezpečnosti zpracování Vašich osobních údajů si můžete přečíst
|
||||||
|
*/
|
||||||
|
description: string
|
||||||
|
}
|
||||||
|
third: {
|
||||||
|
/**
|
||||||
|
* Registrace
|
||||||
|
*/
|
||||||
|
title: string
|
||||||
|
/**
|
||||||
|
* V rámci usnadnění přijímacího řízení jsme připravili online formulář, který Vám pomůže s vyplněním potřebných údajů.
|
||||||
|
*/
|
||||||
|
description: string
|
||||||
|
}
|
||||||
|
fourth: {
|
||||||
|
/**
|
||||||
|
* Něco o Vás
|
||||||
|
*/
|
||||||
|
title: string
|
||||||
|
/**
|
||||||
|
* Úprava osobních údajů
|
||||||
|
*/
|
||||||
|
titleEdit: string
|
||||||
|
/**
|
||||||
|
* Pro registraci je potřeba vyplnit několik údajů o Vás. Tyto údaje budou použity pro přijímací řízení. Všechny údaje jsou důležité.
|
||||||
|
*/
|
||||||
|
description: string
|
||||||
|
}
|
||||||
|
fifth: {
|
||||||
|
/**
|
||||||
|
* Zákonný zástupce
|
||||||
|
*/
|
||||||
|
title: string
|
||||||
|
/**
|
||||||
|
* Sběr dat o zákonném zástupci je klíčový pro získání důležitých kontaktů a informací.
|
||||||
|
*/
|
||||||
|
description: string
|
||||||
|
}
|
||||||
|
sixth: {
|
||||||
|
/**
|
||||||
|
* Druhý zákonný zástupce
|
||||||
|
*/
|
||||||
|
title: string
|
||||||
|
/**
|
||||||
|
* Zde můžete zadat údaje o druhém zákonném zástupci. Škole tím umožníte lépe komunikovat.
|
||||||
|
*/
|
||||||
|
description: string
|
||||||
|
}
|
||||||
|
seventh: {
|
||||||
|
/**
|
||||||
|
* Dokončení registrace
|
||||||
|
*/
|
||||||
|
title: string
|
||||||
|
/**
|
||||||
|
* Zadejte prosím své občanství, rodné číslo, či jeho alternativu Vaší země a obor na který se hlásíte.
|
||||||
|
*/
|
||||||
|
description: string
|
||||||
|
}
|
||||||
|
eighth: {
|
||||||
|
/**
|
||||||
|
* Poslední krok
|
||||||
|
*/
|
||||||
|
title: string
|
||||||
|
/**
|
||||||
|
* Přidejte prosím přepis Vaších známek z posledních dvou let studia
|
||||||
|
*/
|
||||||
|
description: string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
components: {
|
||||||
|
dashboard: {
|
||||||
|
coverLetterUploadCard: {
|
||||||
|
/**
|
||||||
|
* Motivační dopis
|
||||||
|
*/
|
||||||
|
title: string
|
||||||
|
/**
|
||||||
|
* svůj motivanční dopis
|
||||||
|
*/
|
||||||
|
placeholder: string
|
||||||
|
}
|
||||||
|
portfolioLetterUploadCard: {
|
||||||
|
/**
|
||||||
|
* Portfolio
|
||||||
|
*/
|
||||||
|
title: string
|
||||||
|
/**
|
||||||
|
* své portfolio
|
||||||
|
*/
|
||||||
|
placeholder: string
|
||||||
|
}
|
||||||
|
portfolioZipUploadCard: {
|
||||||
|
/**
|
||||||
|
* Další data
|
||||||
|
*/
|
||||||
|
title: string
|
||||||
|
/**
|
||||||
|
* vaše další soubory ve formátu ZIP
|
||||||
|
*/
|
||||||
|
placeholder: string
|
||||||
|
}
|
||||||
|
dashboardUploadCard: {
|
||||||
|
/**
|
||||||
|
* Sem přetáhněte,
|
||||||
|
*/
|
||||||
|
dropHere: string
|
||||||
|
/**
|
||||||
|
* Nebo nahrajte {placeholder}
|
||||||
|
* @param {string} placeholder
|
||||||
|
*/
|
||||||
|
orUpload: RequiredParams<'placeholder'>
|
||||||
|
/**
|
||||||
|
* Nahráno
|
||||||
|
*/
|
||||||
|
uploaded: string
|
||||||
|
/**
|
||||||
|
* Odesláno
|
||||||
|
*/
|
||||||
|
sent: string
|
||||||
|
/**
|
||||||
|
* Smazat
|
||||||
|
*/
|
||||||
|
'delete': string
|
||||||
|
}
|
||||||
|
statusNotificationBig: {
|
||||||
|
submitted: {
|
||||||
|
/**
|
||||||
|
* Soubory odevzdány!
|
||||||
|
*/
|
||||||
|
title: string
|
||||||
|
/**
|
||||||
|
* Vaše soubory smažete kliknutím zde
|
||||||
|
*/
|
||||||
|
description: string
|
||||||
|
}
|
||||||
|
uploaded: {
|
||||||
|
/**
|
||||||
|
* Soubory nebyly odevzdány!
|
||||||
|
*/
|
||||||
|
title: string
|
||||||
|
/**
|
||||||
|
* Odevzdejte soubory kliknutím zde
|
||||||
|
*/
|
||||||
|
description: string
|
||||||
|
}
|
||||||
|
missing: {
|
||||||
|
/**
|
||||||
|
* Soubory nebyly nahrány!
|
||||||
|
*/
|
||||||
|
title: string
|
||||||
|
/**
|
||||||
|
* Nahrajte včechny soubory prosím
|
||||||
|
*/
|
||||||
|
description: string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
checkbox: {
|
||||||
|
accountLinkCheckBox: {
|
||||||
|
/**
|
||||||
|
* Vše je v pořádku
|
||||||
|
*/
|
||||||
|
ok: string
|
||||||
|
/**
|
||||||
|
* Co se děje?
|
||||||
|
*/
|
||||||
|
whatHappened: string
|
||||||
|
multiple: {
|
||||||
|
/**
|
||||||
|
* Ano, podával/a jsem dvě přihlášky na dva obory SSPŠaG ({first}) a ({second})
|
||||||
|
* @param {number} first
|
||||||
|
* @param {number} second
|
||||||
|
*/
|
||||||
|
title: RequiredParams<'first' | 'second'>
|
||||||
|
/**
|
||||||
|
* Ne, přihlášku na SSPŠaG jsem podával/a jen jednu ({first})
|
||||||
|
* @param {number} first
|
||||||
|
*/
|
||||||
|
title2: RequiredParams<'first'>
|
||||||
|
}
|
||||||
|
single: {
|
||||||
|
/**
|
||||||
|
* Ano, přihlášku na SSPŠaG jsem podával/a jen jednu ({first})
|
||||||
|
* @param {number} first
|
||||||
|
*/
|
||||||
|
title: RequiredParams<'first'>
|
||||||
|
/**
|
||||||
|
* Ne, přihlášku na SSPŠaG jsem podával více přihlášek
|
||||||
|
*/
|
||||||
|
title2: string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gdprCheckBox: {
|
||||||
|
/**
|
||||||
|
* Souhlasím se zpracováním osobních údajů
|
||||||
|
*/
|
||||||
|
title: string
|
||||||
|
/**
|
||||||
|
* Kliknutím vyjaďřujete souhlas se zpracováním osobních údajů
|
||||||
|
*/
|
||||||
|
description: string
|
||||||
|
/**
|
||||||
|
* Zde
|
||||||
|
*/
|
||||||
|
here: string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
/**
|
||||||
|
* nepovinné
|
||||||
|
*/
|
||||||
|
optional: string
|
||||||
|
/**
|
||||||
|
* Jméno a příjmení
|
||||||
|
*/
|
||||||
|
nameSurname: string
|
||||||
|
/**
|
||||||
|
* E-mail
|
||||||
|
*/
|
||||||
|
email: string
|
||||||
|
/**
|
||||||
|
* Telefon
|
||||||
|
*/
|
||||||
|
telephone: string
|
||||||
|
/**
|
||||||
|
* Ulice a č. p.
|
||||||
|
*/
|
||||||
|
address: string
|
||||||
|
/**
|
||||||
|
* PSČ
|
||||||
|
*/
|
||||||
|
zipCode: string
|
||||||
|
/**
|
||||||
|
* Město
|
||||||
|
*/
|
||||||
|
city: string
|
||||||
|
/**
|
||||||
|
* Místo narození
|
||||||
|
*/
|
||||||
|
birthPlace: string
|
||||||
|
/**
|
||||||
|
* Datum narození
|
||||||
|
*/
|
||||||
|
birthDate: string
|
||||||
|
/**
|
||||||
|
* Pohlaví
|
||||||
|
*/
|
||||||
|
sex: string
|
||||||
|
/**
|
||||||
|
* Občanství
|
||||||
|
*/
|
||||||
|
citizenship: string
|
||||||
|
/**
|
||||||
|
* Jazyk odborných testů
|
||||||
|
*/
|
||||||
|
testLanguage: string
|
||||||
|
/**
|
||||||
|
* IZO školy
|
||||||
|
*/
|
||||||
|
schoolIzo: string
|
||||||
|
/**
|
||||||
|
* Název školy
|
||||||
|
*/
|
||||||
|
schoolName: string
|
||||||
|
/**
|
||||||
|
* Číslo zdravotní pojišťovny
|
||||||
|
*/
|
||||||
|
insuranceNumber: string
|
||||||
|
/**
|
||||||
|
* Rodné číslo
|
||||||
|
*/
|
||||||
|
personalIdentificationNumber: string
|
||||||
|
/**
|
||||||
|
* Ev. číslo
|
||||||
|
*/
|
||||||
|
evidenceNumber: string
|
||||||
|
/**
|
||||||
|
* Admin Id
|
||||||
|
*/
|
||||||
|
adminId: string
|
||||||
|
/**
|
||||||
|
* Heslo
|
||||||
|
*/
|
||||||
|
password: string
|
||||||
|
/**
|
||||||
|
* Odeslat
|
||||||
|
*/
|
||||||
|
submit: string
|
||||||
|
/**
|
||||||
|
* Pokračovat
|
||||||
|
*/
|
||||||
|
'continue': string
|
||||||
|
parent: {
|
||||||
|
/**
|
||||||
|
* Jméno a příjmení zákonného zástupce
|
||||||
|
*/
|
||||||
|
nameSurname: string
|
||||||
|
/**
|
||||||
|
* E-mail zákonného zástupce
|
||||||
|
*/
|
||||||
|
email: string
|
||||||
|
/**
|
||||||
|
* Telefon zákonného zástupce
|
||||||
|
*/
|
||||||
|
telephone: string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export type TranslationFunctions = {
|
||||||
|
/**
|
||||||
|
* zde
|
||||||
|
*/
|
||||||
|
here: () => LocalizedString
|
||||||
|
admin: {
|
||||||
|
auth: {
|
||||||
|
login: {
|
||||||
|
/**
|
||||||
|
* Přihlášení
|
||||||
|
*/
|
||||||
|
title: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Administrátoská sekce aplikace
|
||||||
|
Přístup povolen pouze pro oprávněné osoby!
|
||||||
|
*/
|
||||||
|
description: () => LocalizedString
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
candidate: {
|
||||||
|
auth: {
|
||||||
|
login: {
|
||||||
|
/**
|
||||||
|
* Přihlášení
|
||||||
|
*/
|
||||||
|
title: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Evidenční číslo je jedinečné číslo přidělené uchazeči, které slouží k jeho identifikaci
|
||||||
|
apřihlášení se do systému.
|
||||||
|
*/
|
||||||
|
description: () => LocalizedString
|
||||||
|
}
|
||||||
|
application: {
|
||||||
|
/**
|
||||||
|
* Zadejte 12místný kód pro aktivaci účtu
|
||||||
|
*/
|
||||||
|
title: () => LocalizedString
|
||||||
|
help: {
|
||||||
|
/**
|
||||||
|
* Nevíte si rady? Klikněte
|
||||||
|
*/
|
||||||
|
description: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* zde
|
||||||
|
*/
|
||||||
|
here: () => LocalizedString
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
register: {
|
||||||
|
first: {
|
||||||
|
/**
|
||||||
|
* Propojení účtů
|
||||||
|
*/
|
||||||
|
title: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Elektronickou přihlášky stačí vyplnit jen jednou i v případě, že jste podali dvě přihlášky. Potvrďte, že jste jste k nám skutečně podali dvě přihlášky.
|
||||||
|
*/
|
||||||
|
description: () => LocalizedString
|
||||||
|
}
|
||||||
|
second: {
|
||||||
|
/**
|
||||||
|
* Zpracování osobních údajů
|
||||||
|
*/
|
||||||
|
title: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* V rámci portálu pro přijímací řízení zpracováváme mnoho osobních údajů. Proto je nutný Váš souhlas s jejich zpracováním. O bezpečnosti zpracování Vašich osobních údajů si můžete přečíst
|
||||||
|
*/
|
||||||
|
description: () => LocalizedString
|
||||||
|
}
|
||||||
|
third: {
|
||||||
|
/**
|
||||||
|
* Registrace
|
||||||
|
*/
|
||||||
|
title: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* V rámci usnadnění přijímacího řízení jsme připravili online formulář, který Vám pomůže s vyplněním potřebných údajů.
|
||||||
|
*/
|
||||||
|
description: () => LocalizedString
|
||||||
|
}
|
||||||
|
fourth: {
|
||||||
|
/**
|
||||||
|
* Něco o Vás
|
||||||
|
*/
|
||||||
|
title: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Úprava osobních údajů
|
||||||
|
*/
|
||||||
|
titleEdit: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Pro registraci je potřeba vyplnit několik údajů o Vás. Tyto údaje budou použity pro přijímací řízení. Všechny údaje jsou důležité.
|
||||||
|
*/
|
||||||
|
description: () => LocalizedString
|
||||||
|
}
|
||||||
|
fifth: {
|
||||||
|
/**
|
||||||
|
* Zákonný zástupce
|
||||||
|
*/
|
||||||
|
title: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Sběr dat o zákonném zástupci je klíčový pro získání důležitých kontaktů a informací.
|
||||||
|
*/
|
||||||
|
description: () => LocalizedString
|
||||||
|
}
|
||||||
|
sixth: {
|
||||||
|
/**
|
||||||
|
* Druhý zákonný zástupce
|
||||||
|
*/
|
||||||
|
title: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Zde můžete zadat údaje o druhém zákonném zástupci. Škole tím umožníte lépe komunikovat.
|
||||||
|
*/
|
||||||
|
description: () => LocalizedString
|
||||||
|
}
|
||||||
|
seventh: {
|
||||||
|
/**
|
||||||
|
* Dokončení registrace
|
||||||
|
*/
|
||||||
|
title: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Zadejte prosím své občanství, rodné číslo, či jeho alternativu Vaší země a obor na který se hlásíte.
|
||||||
|
*/
|
||||||
|
description: () => LocalizedString
|
||||||
|
}
|
||||||
|
eighth: {
|
||||||
|
/**
|
||||||
|
* Poslední krok
|
||||||
|
*/
|
||||||
|
title: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Přidejte prosím přepis Vaších známek z posledních dvou let studia
|
||||||
|
*/
|
||||||
|
description: () => LocalizedString
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
components: {
|
||||||
|
dashboard: {
|
||||||
|
coverLetterUploadCard: {
|
||||||
|
/**
|
||||||
|
* Motivační dopis
|
||||||
|
*/
|
||||||
|
title: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* svůj motivanční dopis
|
||||||
|
*/
|
||||||
|
placeholder: () => LocalizedString
|
||||||
|
}
|
||||||
|
portfolioLetterUploadCard: {
|
||||||
|
/**
|
||||||
|
* Portfolio
|
||||||
|
*/
|
||||||
|
title: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* své portfolio
|
||||||
|
*/
|
||||||
|
placeholder: () => LocalizedString
|
||||||
|
}
|
||||||
|
portfolioZipUploadCard: {
|
||||||
|
/**
|
||||||
|
* Další data
|
||||||
|
*/
|
||||||
|
title: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* vaše další soubory ve formátu ZIP
|
||||||
|
*/
|
||||||
|
placeholder: () => LocalizedString
|
||||||
|
}
|
||||||
|
dashboardUploadCard: {
|
||||||
|
/**
|
||||||
|
* Sem přetáhněte,
|
||||||
|
*/
|
||||||
|
dropHere: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Nebo nahrajte {placeholder}
|
||||||
|
*/
|
||||||
|
orUpload: (arg: { placeholder: string }) => LocalizedString
|
||||||
|
/**
|
||||||
|
* Nahráno
|
||||||
|
*/
|
||||||
|
uploaded: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Odesláno
|
||||||
|
*/
|
||||||
|
sent: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Smazat
|
||||||
|
*/
|
||||||
|
'delete': () => LocalizedString
|
||||||
|
}
|
||||||
|
statusNotificationBig: {
|
||||||
|
submitted: {
|
||||||
|
/**
|
||||||
|
* Soubory odevzdány!
|
||||||
|
*/
|
||||||
|
title: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Vaše soubory smažete kliknutím zde
|
||||||
|
*/
|
||||||
|
description: () => LocalizedString
|
||||||
|
}
|
||||||
|
uploaded: {
|
||||||
|
/**
|
||||||
|
* Soubory nebyly odevzdány!
|
||||||
|
*/
|
||||||
|
title: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Odevzdejte soubory kliknutím zde
|
||||||
|
*/
|
||||||
|
description: () => LocalizedString
|
||||||
|
}
|
||||||
|
missing: {
|
||||||
|
/**
|
||||||
|
* Soubory nebyly nahrány!
|
||||||
|
*/
|
||||||
|
title: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Nahrajte včechny soubory prosím
|
||||||
|
*/
|
||||||
|
description: () => LocalizedString
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
checkbox: {
|
||||||
|
accountLinkCheckBox: {
|
||||||
|
/**
|
||||||
|
* Vše je v pořádku
|
||||||
|
*/
|
||||||
|
ok: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Co se děje?
|
||||||
|
*/
|
||||||
|
whatHappened: () => LocalizedString
|
||||||
|
multiple: {
|
||||||
|
/**
|
||||||
|
* Ano, podával/a jsem dvě přihlášky na dva obory SSPŠaG ({first}) a ({second})
|
||||||
|
*/
|
||||||
|
title: (arg: { first: number, second: number }) => LocalizedString
|
||||||
|
/**
|
||||||
|
* Ne, přihlášku na SSPŠaG jsem podával/a jen jednu ({first})
|
||||||
|
*/
|
||||||
|
title2: (arg: { first: number }) => LocalizedString
|
||||||
|
}
|
||||||
|
single: {
|
||||||
|
/**
|
||||||
|
* Ano, přihlášku na SSPŠaG jsem podával/a jen jednu ({first})
|
||||||
|
*/
|
||||||
|
title: (arg: { first: number }) => LocalizedString
|
||||||
|
/**
|
||||||
|
* Ne, přihlášku na SSPŠaG jsem podával více přihlášek
|
||||||
|
*/
|
||||||
|
title2: () => LocalizedString
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gdprCheckBox: {
|
||||||
|
/**
|
||||||
|
* Souhlasím se zpracováním osobních údajů
|
||||||
|
*/
|
||||||
|
title: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Kliknutím vyjaďřujete souhlas se zpracováním osobních údajů
|
||||||
|
*/
|
||||||
|
description: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Zde
|
||||||
|
*/
|
||||||
|
here: () => LocalizedString
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
/**
|
||||||
|
* nepovinné
|
||||||
|
*/
|
||||||
|
optional: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Jméno a příjmení
|
||||||
|
*/
|
||||||
|
nameSurname: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* E-mail
|
||||||
|
*/
|
||||||
|
email: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Telefon
|
||||||
|
*/
|
||||||
|
telephone: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Ulice a č. p.
|
||||||
|
*/
|
||||||
|
address: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* PSČ
|
||||||
|
*/
|
||||||
|
zipCode: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Město
|
||||||
|
*/
|
||||||
|
city: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Místo narození
|
||||||
|
*/
|
||||||
|
birthPlace: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Datum narození
|
||||||
|
*/
|
||||||
|
birthDate: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Pohlaví
|
||||||
|
*/
|
||||||
|
sex: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Občanství
|
||||||
|
*/
|
||||||
|
citizenship: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Jazyk odborných testů
|
||||||
|
*/
|
||||||
|
testLanguage: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* IZO školy
|
||||||
|
*/
|
||||||
|
schoolIzo: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Název školy
|
||||||
|
*/
|
||||||
|
schoolName: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Číslo zdravotní pojišťovny
|
||||||
|
*/
|
||||||
|
insuranceNumber: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Rodné číslo
|
||||||
|
*/
|
||||||
|
personalIdentificationNumber: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Ev. číslo
|
||||||
|
*/
|
||||||
|
evidenceNumber: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Admin Id
|
||||||
|
*/
|
||||||
|
adminId: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Heslo
|
||||||
|
*/
|
||||||
|
password: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Odeslat
|
||||||
|
*/
|
||||||
|
submit: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Pokračovat
|
||||||
|
*/
|
||||||
|
'continue': () => LocalizedString
|
||||||
|
parent: {
|
||||||
|
/**
|
||||||
|
* Jméno a příjmení zákonného zástupce
|
||||||
|
*/
|
||||||
|
nameSurname: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* E-mail zákonného zástupce
|
||||||
|
*/
|
||||||
|
email: () => LocalizedString
|
||||||
|
/**
|
||||||
|
* Telefon zákonného zástupce
|
||||||
|
*/
|
||||||
|
telephone: () => LocalizedString
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export type Formatters = {}
|
||||||
26
frontend/src/translations/i18n-util.async.ts
Normal file
26
frontend/src/translations/i18n-util.async.ts
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten.
|
||||||
|
/* eslint-disable */
|
||||||
|
|
||||||
|
import { initFormatters } from './formatters.js'
|
||||||
|
import type { Locales, Translations } from './i18n-types.js'
|
||||||
|
import { loadedFormatters, loadedLocales, locales } from './i18n-util.js'
|
||||||
|
|
||||||
|
const localeTranslationLoaders = {
|
||||||
|
cs: () => import('./cs/index.js'),
|
||||||
|
}
|
||||||
|
|
||||||
|
const updateDictionary = (locale: Locales, dictionary: Partial<Translations>): Translations =>
|
||||||
|
loadedLocales[locale] = { ...loadedLocales[locale], ...dictionary }
|
||||||
|
|
||||||
|
export const importLocaleAsync = async (locale: Locales): Promise<Translations> =>
|
||||||
|
(await localeTranslationLoaders[locale]()).default as unknown as Translations
|
||||||
|
|
||||||
|
export const loadLocaleAsync = async (locale: Locales): Promise<void> => {
|
||||||
|
updateDictionary(locale, await importLocaleAsync(locale))
|
||||||
|
loadFormatters(locale)
|
||||||
|
}
|
||||||
|
|
||||||
|
export const loadAllLocalesAsync = (): Promise<void[]> => Promise.all(locales.map(loadLocaleAsync))
|
||||||
|
|
||||||
|
export const loadFormatters = (locale: Locales): void =>
|
||||||
|
void (loadedFormatters[locale] = initFormatters(locale))
|
||||||
24
frontend/src/translations/i18n-util.sync.ts
Normal file
24
frontend/src/translations/i18n-util.sync.ts
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten.
|
||||||
|
/* eslint-disable */
|
||||||
|
|
||||||
|
import { initFormatters } from './formatters.js'
|
||||||
|
import type { Locales, Translations } from './i18n-types.js'
|
||||||
|
import { loadedFormatters, loadedLocales, locales } from './i18n-util.js'
|
||||||
|
|
||||||
|
import cs from './cs/index.js'
|
||||||
|
|
||||||
|
const localeTranslations = {
|
||||||
|
cs,
|
||||||
|
}
|
||||||
|
|
||||||
|
export const loadLocale = (locale: Locales): void => {
|
||||||
|
if (loadedLocales[locale]) return
|
||||||
|
|
||||||
|
loadedLocales[locale] = localeTranslations[locale] as unknown as Translations
|
||||||
|
loadFormatters(locale)
|
||||||
|
}
|
||||||
|
|
||||||
|
export const loadAllLocales = (): void => locales.forEach(loadLocale)
|
||||||
|
|
||||||
|
export const loadFormatters = (locale: Locales): void =>
|
||||||
|
void (loadedFormatters[locale] = initFormatters(locale))
|
||||||
34
frontend/src/translations/i18n-util.ts
Normal file
34
frontend/src/translations/i18n-util.ts
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten.
|
||||||
|
/* eslint-disable */
|
||||||
|
|
||||||
|
import { i18n as initI18n, i18nObject as initI18nObject, i18nString as initI18nString } from 'typesafe-i18n'
|
||||||
|
import type { LocaleDetector } from 'typesafe-i18n/detectors'
|
||||||
|
import type { LocaleTranslationFunctions, TranslateByString } from 'typesafe-i18n'
|
||||||
|
import { detectLocale as detectLocaleFn } from 'typesafe-i18n/detectors'
|
||||||
|
import type { Formatters, Locales, Translations, TranslationFunctions } from './i18n-types.js'
|
||||||
|
|
||||||
|
export const baseLocale: Locales = 'cs'
|
||||||
|
|
||||||
|
export const locales: Locales[] = [
|
||||||
|
'cs'
|
||||||
|
]
|
||||||
|
|
||||||
|
export const isLocale = (locale: string): locale is Locales => locales.includes(locale as Locales)
|
||||||
|
|
||||||
|
export const loadedLocales: Record<Locales, Translations> = {} as Record<Locales, Translations>
|
||||||
|
|
||||||
|
export const loadedFormatters: Record<Locales, Formatters> = {} as Record<Locales, Formatters>
|
||||||
|
|
||||||
|
export const i18nString = (locale: Locales): TranslateByString => initI18nString<Locales, Formatters>(locale, loadedFormatters[locale])
|
||||||
|
|
||||||
|
export const i18nObject = (locale: Locales): TranslationFunctions =>
|
||||||
|
initI18nObject<Locales, Translations, TranslationFunctions, Formatters>(
|
||||||
|
locale,
|
||||||
|
loadedLocales[locale],
|
||||||
|
loadedFormatters[locale]
|
||||||
|
)
|
||||||
|
|
||||||
|
export const i18n = (): LocaleTranslationFunctions<Locales, Translations, TranslationFunctions> =>
|
||||||
|
initI18n<Locales, Translations, TranslationFunctions, Formatters>(loadedLocales, loadedFormatters)
|
||||||
|
|
||||||
|
export const detectLocale = (...detectors: LocaleDetector[]): Locales => detectLocaleFn<Locales>(baseLocale, locales, ...detectors)
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
import adapter from '@sveltejs/adapter-node';
|
import adapter from '@sveltejs/adapter-node';
|
||||||
import preprocess from 'svelte-preprocess';
|
import preprocess from 'svelte-preprocess';
|
||||||
|
import path from "path";
|
||||||
import { windi } from 'svelte-windicss-preprocess';
|
import { windi } from 'svelte-windicss-preprocess';
|
||||||
|
|
||||||
/** @type {import('@sveltejs/kit').Config} */
|
/** @type {import('@sveltejs/kit').Config} */
|
||||||
|
|
@ -8,7 +9,11 @@ const config = {
|
||||||
// for more information about preprocessors
|
// for more information about preprocessors
|
||||||
preprocess: [preprocess(), windi({})],
|
preprocess: [preprocess(), windi({})],
|
||||||
kit: {
|
kit: {
|
||||||
adapter: adapter({ out: 'build' })
|
adapter: adapter({ out: 'build' }),
|
||||||
|
alias: {
|
||||||
|
$i18n: path.resolve('./src/translations'),
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,6 @@
|
||||||
"resolveJsonModule": true,
|
"resolveJsonModule": true,
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
"sourceMap": true,
|
"sourceMap": true,
|
||||||
"strict": true
|
"strict": true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue