diff --git a/src/components/date/datepickerWithRange.vue b/src/components/date/datepickerWithRange.vue index 8a39c7b41..07aaa3945 100644 --- a/src/components/date/datepickerWithRange.vue +++ b/src/components/date/datepickerWithRange.vue @@ -81,11 +81,8 @@ import Popup from '@/components/misc/popup.vue' import {DATE_RANGES} from '@/components/date/dateRanges' import BaseButton from '@/components/base/BaseButton.vue' import DatemathHelp from '@/components/date/datemathHelp.vue' -import {useAuthStore} from '@/stores/auth' -import FlatpickrLanguages from 'flatpickr/dist/l10n' -import {TRANS_LOCALES} from '@/i18n' +import { getFlatLanguage } from '@/helpers/dayLocale' -const authStore = useAuthStore() const {t} = useI18n({useScope: 'global'}) const emit = defineEmits(['update:modelValue']) @@ -96,9 +93,6 @@ const props = defineProps({ }) // FIXME: This seems to always contain the default value - that breaks the picker -const weekStart = computed(() => authStore.settings.weekStart ?? 0) -const locLang = FlatpickrLanguages[TRANS_LOCALES[authStore.settings.language]] -locLang.firstDayOfWeek = weekStart.value const flatPickerConfig = computed(() => ({ altFormat: t('date.altFormatLong'), altInput: true, @@ -106,7 +100,7 @@ const flatPickerConfig = computed(() => ({ enableTime: false, wrap: true, mode: 'range', - locale: locLang, + locale: getFlatLanguage(), })) const showHowItWorks = ref(false) diff --git a/src/components/input/datepickerInline.vue b/src/components/input/datepickerInline.vue index f1745db6a..9f741c5d2 100644 --- a/src/components/input/datepickerInline.vue +++ b/src/components/input/datepickerInline.vue @@ -80,10 +80,8 @@ import {formatDate} from '@/helpers/time/formatDate' import {calculateDayInterval} from '@/helpers/time/calculateDayInterval' import {calculateNearestHours} from '@/helpers/time/calculateNearestHours' import {createDateFromString} from '@/helpers/time/createDateFromString' -import {useAuthStore} from '@/stores/auth' import {useI18n} from 'vue-i18n' -import FlatpickrLanguages from 'flatpickr/dist/l10n' -import {TRANS_LOCALES} from '@/i18n' +import { getFlatLanguage } from '@/helpers/dayLocale' const props = defineProps({ modelValue: { @@ -107,10 +105,6 @@ watch( {immediate: true}, ) -const authStore = useAuthStore() -const weekStart = computed(() => authStore.settings.weekStart) -const locLang = FlatpickrLanguages[TRANS_LOCALES[authStore.settings.language]] -locLang.firstDayOfWeek = weekStart.value const flatPickerConfig = computed(() => ({ altFormat: t('date.altFormatLong'), altInput: true, @@ -118,7 +112,7 @@ const flatPickerConfig = computed(() => ({ enableTime: true, time_24hr: true, inline: true, - locale: locLang, + locale: getFlatLanguage(), })) // Since flatpickr dates are strings, we need to convert them to native date objects. diff --git a/src/components/tasks/partials/defer-task.vue b/src/components/tasks/partials/defer-task.vue index e0d97de88..60433dd72 100644 --- a/src/components/tasks/partials/defer-task.vue +++ b/src/components/tasks/partials/defer-task.vue @@ -44,9 +44,7 @@ import flatPickr from 'vue-flatpickr-component' import TaskService from '@/services/task' import type {ITask} from '@/modelTypes/ITask' -import {useAuthStore} from '@/stores/auth' -import FlatpickrLanguages from 'flatpickr/dist/l10n' -import {TRANS_LOCALES} from '@/i18n' +import { getFlatLanguage } from '@/helpers/dayLocale' const { modelValue, @@ -57,7 +55,6 @@ const { const emit = defineEmits(['update:modelValue']) const {t} = useI18n({useScope: 'global'}) -const authStore = useAuthStore() const taskService = shallowReactive(new TaskService()) const task = ref() @@ -97,9 +94,6 @@ onBeforeUnmount(() => { updateDueDate() }) -const locLang = FlatpickrLanguages[TRANS_LOCALES[authStore.settings.language]] -locLang.firstDayOfWeek = authStore.settings.weekStart - const flatPickerConfig = computed(() => ({ altFormat: t('date.altFormatLong'), altInput: true, @@ -107,7 +101,7 @@ const flatPickerConfig = computed(() => ({ enableTime: true, time_24hr: true, inline: true, - locale: locLang, + locale: getFlatLanguage(), })) function deferDays(days: number) { diff --git a/src/helpers/dayLocale.ts b/src/helpers/dayLocale.ts new file mode 100644 index 000000000..519186543 --- /dev/null +++ b/src/helpers/dayLocale.ts @@ -0,0 +1,22 @@ +import {useAuthStore} from '@/stores/auth' +import FlatpickrLanguages from 'flatpickr/dist/l10n' +import type { CustomLocale } from 'flatpickr/dist/types/locale' + +export function getFlatLanguage(): CustomLocale { + const authStore = useAuthStore() + const lang = authStore.settings.language + const entries = Object.entries(FlatpickrLanguages).filter(([langKey]) => { + if (lang === 'vi-VN') { + return langKey === 'vn' + } else { + return langKey === lang || lang.startsWith(langKey + '-') + } + }) + let language = entries.at(0)?.[1] + // default english + if (language == undefined) { + language = FlatpickrLanguages['en'] + } + language.firstDayOfWeek = authStore.settings.weekStart ?? 0 + return language +} \ No newline at end of file diff --git a/src/i18n/index.ts b/src/i18n/index.ts index 6749a9d9f..9ab9cbb53 100644 --- a/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -23,28 +23,6 @@ export const SUPPORTED_LOCALES = { 'sl-SI': 'Slovenščina', } as const -export const TRANS_LOCALES = { - 'en': 'en', - 'de-DE': 'de', - 'de-swiss': 'de', - 'ru-RU': 'ru', - 'fr-FR': 'fr', - 'vi-VN': 'vn', - 'it-IT': 'it', - 'cs-CZ': 'cs', - 'pl-PL': 'pl', - 'nl-NL': 'nl', - 'pt-PT': 'pt', - 'zh-CN': 'zh', - 'no-NO': 'no', - 'es-ES': 'es', - 'da-DK': 'da', - 'ja-JP': 'ja', - 'hu-HU': 'hu', - 'ar-SA': 'ar', - 'sl-SI': 'sl', -} as const - export type SupportedLocale = keyof typeof SUPPORTED_LOCALES export const DEFAULT_LANGUAGE: SupportedLocale= 'en' diff --git a/src/views/project/ProjectGantt.vue b/src/views/project/ProjectGantt.vue index 8a1679a7b..74e4d069f 100644 --- a/src/views/project/ProjectGantt.vue +++ b/src/views/project/ProjectGantt.vue @@ -50,13 +50,11 @@ diff --git a/src/views/user/settings/ApiTokens.vue b/src/views/user/settings/ApiTokens.vue index 8c6d9a3c3..dafee4b2a 100644 --- a/src/views/user/settings/ApiTokens.vue +++ b/src/views/user/settings/ApiTokens.vue @@ -10,11 +10,10 @@ import {MILLISECONDS_A_DAY} from '@/constants/date' import flatPickr from 'vue-flatpickr-component' import 'flatpickr/dist/flatpickr.css' import {useI18n} from 'vue-i18n' -import {useAuthStore} from '@/stores/auth' import Message from '@/components/misc/message.vue' import type {IApiToken} from '@/modelTypes/IApiToken' import FlatpickrLanguages from 'flatpickr/dist/l10n' -import {TRANS_LOCALES} from '@/i18n' +import { getFlatLanguage } from '@/helpers/dayLocale' const service = new ApiTokenService() const tokens = ref([]) @@ -34,11 +33,8 @@ const showDeleteModal = ref(false) const tokenToDelete = ref() const {t} = useI18n() -const authStore = useAuthStore() const now = new Date() -const locLang = FlatpickrLanguages[TRANS_LOCALES[authStore.settings.language]] -locLang.firstDayOfWeek = authStore.settings.weekStart const flatPickerConfig = computed(() => ({ altFormat: t('date.altFormatLong'), @@ -46,7 +42,7 @@ const flatPickerConfig = computed(() => ({ dateFormat: 'Y-m-d H:i', enableTime: true, time_24hr: true, - locale: locLang, + locale: getFlatLanguage(), minDate: now, }))