You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
27 lines
1.0 KiB
27 lines
1.0 KiB
import { unref, computed, isRef, ref, inject } from 'vue';
|
|
import { get } from 'lodash-unified';
|
|
import English from '../../locale/lang/en.mjs';
|
|
|
|
const buildTranslator = (locale) => (path, option) => translate(path, option, unref(locale));
|
|
const translate = (path, option, locale) => get(locale, path, path).replace(/\{(\w+)\}/g, (_, key) => {
|
|
var _a;
|
|
return `${(_a = option == null ? void 0 : option[key]) != null ? _a : `{${key}}`}`;
|
|
});
|
|
const buildLocaleContext = (locale) => {
|
|
const lang = computed(() => unref(locale).name);
|
|
const localeRef = isRef(locale) ? locale : ref(locale);
|
|
return {
|
|
lang,
|
|
locale: localeRef,
|
|
t: buildTranslator(locale)
|
|
};
|
|
};
|
|
const localeContextKey = Symbol("localeContextKey");
|
|
const useLocale = (localeOverrides) => {
|
|
const locale = localeOverrides || inject(localeContextKey, ref());
|
|
return buildLocaleContext(computed(() => locale.value || English));
|
|
};
|
|
|
|
export { buildLocaleContext, buildTranslator, localeContextKey, translate, useLocale };
|
|
//# sourceMappingURL=index.mjs.map
|