Start i18n on static texts

This commit is contained in:
2025-08-21 20:52:59 +02:00
parent 5d1a029a54
commit 7948fed103
9 changed files with 225 additions and 85 deletions
@@ -45,7 +45,7 @@ titleStore.title = data.value ? tKey(data.value, 'title').value : undefined;
`/hunt/${data ? tSluggy(data.hunt).value : sluggy(huntSlug!)}`
)
"
>Back to Hunt</VaButton
>{{ t('pages.common.back_to_hunt') }}</VaButton
>
<VaButton icon="replay" color="success" @click="refresh"
>Refresh</VaButton
+28 -19
View File
@@ -85,14 +85,14 @@ async function submit() {
newImage.value = undefined;
} catch (e) {
if (e instanceof Error && 'statusCode' in e && e.statusCode === 418) {
submitError.value = 'Answer is already finalized, no update allowed!';
submitError.value = t('page.quest.already_finalized');
await refresh();
} else if (
e instanceof Error &&
'statusCode' in e &&
e.statusCode === 409
) {
submitError.value = 'Conflict: Please refresh';
submitError.value = t('page.quest.conflict');
} else {
submitError.value = parseError(e);
}
@@ -114,7 +114,7 @@ const createImageURL = (file: File) => URL.createObjectURL(file);
`/hunt/${data ? tSluggy(data.hunt).value : sluggy(huntSlug!)}`
)
"
>Back to Hunt</VaButton
>{{ t('pages.common.back_to_hunt') }}</VaButton
>
<VaButton
icon="refresh"
@@ -134,7 +134,7 @@ const createImageURL = (file: File) => URL.createObjectURL(file);
`/hunt/${data?.hunt ? tSluggy(data.hunt).value : sluggy(huntSlug!)}/${data ? tSluggy(data).value : sluggy(questSlug!)}}/admin`
)
"
>Admin</VaButton
>{{ t('pages.common.admin') }}</VaButton
></VaButtonGroup
>
<div v-if="data">
@@ -164,21 +164,27 @@ const createImageURL = (file: File) => URL.createObjectURL(file);
🖋: {{ t(`enums.text_type.${data.textType}`) }}
</p>
<p v-if="hasKey(data, 'extraText')">
<span class="uppercase">Extra points:</span>
<span class="uppercase">{{
t('page.quest.extra_points')
}}</span>
{{ tKey(data, 'extraText') }}
</p>
</div>
</VaCardContent>
</VaCard>
<VaCard v-if="data.answer?.review" color="info">
<VaCardTitle>Review</VaCardTitle>
<VaCardTitle>{{ t('page.quest.review') }}</VaCardTitle>
<VaCardContent>
<p v-if="data.answer.review?.score" class="mb-2">
Score:
{{ t('page.quest.score') }}
<VaChip color="success">{{ data.answer.review.score }}</VaChip>
<span v-if="data.answer.review.reviewer" class="text-sm">
by {{ data.answer.review.reviewer.name }} at
{{ d(data.answer.review.updatedAt, fullDate) }}</span
{{
t('page.quest.reviewed_by', {
name: data.answer.review.reviewer.name,
date: d(data.answer.review.updatedAt, fullDate)
})
}}</span
>
</p>
<div
@@ -200,7 +206,7 @@ const createImageURL = (file: File) => URL.createObjectURL(file);
stripe
:stripe-color="data.answer?.final ? 'success' : 'primary'"
>
<VaCardTitle>Submission</VaCardTitle>
<VaCardTitle>{{ t('page.quest.submission') }}</VaCardTitle>
<VaCardContent>
<div class="flex flex-col gap-4">
<VaInput
@@ -208,7 +214,7 @@ const createImageURL = (file: File) => URL.createObjectURL(file);
v-model="answer"
:label="tKey(data, 'question').value"
:disabled="uploading || data.answer?.final"
placeholder="Your answer"
:placeholder="t('page.quest.your_answer')"
:required-mark="data.textRequired"
:clearable="!!data.answer?.text"
:clear-value="data.answer?.text || ''"
@@ -216,7 +222,7 @@ const createImageURL = (file: File) => URL.createObjectURL(file);
:type="textType[data.textType]"
:messages="[
t(`enums.text_type.${data.textType}`),
data.textRequired ? 'Required Answer' : ''
data.textRequired ? t('page.quest.required_answer') : ''
]"
>
<template v-if="data.textUnit" #appendInner>
@@ -247,15 +253,18 @@ const createImageURL = (file: File) => URL.createObjectURL(file);
file-types="jpg,png,jpeg"
/>
<p v-if="data.answer?.updatedAt">
Last update:
{{ d(data.answer.updatedAt, fullDate) }}
by {{ data.answer.member.name }}
{{
t('page.quest.last_update', {
date: d(data.answer.updatedAt, fullDate),
name: data.answer.member.name
})
}}
</p>
<VaCheckbox
v-model="final"
:disabled="data.answer?.final"
label="Finalize answer"
messages="This allows the admins to review your answer and give you points. You cannot change your answer afterwards!"
:label="t('page.quest.finalize')"
:messages="t('page.quest.already_finalized')"
/>
<VaAlert
@@ -275,10 +284,10 @@ const createImageURL = (file: File) => URL.createObjectURL(file);
"
:loading="uploading"
@click="submit"
>Update</VaButton
>{{ t('page.common.update_btn') }}</VaButton
>
<p v-else class="font-bold">
Your final answer has already been submitted!
{{ t('page.quest.already_submitted') }}
</p>
</div>
</VaCardContent>