mirror of
https://github.com/directus/directus.git
synced 2026-02-15 16:05:06 -05:00
* translate fields during hydration * patch untranslated raw values on field edit * simplify/remove existing translate usages * minor codestyle * translate field note and validation_message * stub api call in fleld-detail store test * skip fields translation before user locale sets in * optimize hydration calls * use translateLiteral for note & validation_message * cherry pick field meta properties to patch * reduce setLanguage calls & settings requests * settings store test & type update * tweak variable casing * test server store & fix existing type/ref issues * update fields store test for skipTranslation * fix render-display merge * await field update before opening drawer * fetch meta at the end to load relationships first * add loading state to prevent editing some fields Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com> Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
41 lines
1.4 KiB
TypeScript
41 lines
1.4 KiB
TypeScript
import { useCollectionsStore } from '@/stores/collections';
|
|
import { useFieldsStore } from '@/stores/fields';
|
|
import availableLanguages from './available-languages.yaml';
|
|
import { i18n, Language, loadedLanguages } from './index';
|
|
import { useTranslationStrings } from '@/composables/use-translation-strings';
|
|
import { loadDateFNSLocale } from '@/utils/get-date-fns-locale';
|
|
|
|
export async function setLanguage(lang: Language): Promise<boolean> {
|
|
const collectionsStore = useCollectionsStore();
|
|
const fieldsStore = useFieldsStore();
|
|
const { mergeTranslationStringsForLanguage } = useTranslationStrings();
|
|
|
|
if (Object.keys(availableLanguages).includes(lang) === false) {
|
|
// eslint-disable-next-line no-console
|
|
console.warn(`"${lang}" is not an available language in the Directus app.`);
|
|
} else {
|
|
if (loadedLanguages.includes(lang) === false) {
|
|
try {
|
|
const { default: translations } = await import(`./translations/${lang}.yaml`);
|
|
i18n.global.mergeLocaleMessage(lang, translations);
|
|
loadedLanguages.push(lang);
|
|
} catch (err: any) {
|
|
// eslint-disable-next-line no-console
|
|
console.warn(err);
|
|
}
|
|
}
|
|
|
|
i18n.global.locale.value = lang;
|
|
|
|
(document.querySelector('html') as HTMLElement).setAttribute('lang', lang);
|
|
}
|
|
|
|
mergeTranslationStringsForLanguage(lang);
|
|
collectionsStore.translateCollections();
|
|
fieldsStore.translateFields();
|
|
|
|
await loadDateFNSLocale(lang);
|
|
|
|
return true;
|
|
}
|