UNPKG

@nolebase/ui

Version:

A collection of Vue components Nolebase uses.

74 lines (73 loc) 2.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createI18n = createI18n; var _vitepress = require("vitepress"); var _vue = require("vue"); function getValueByPropertyPaths(path, obj) { if (!obj) return void 0; const properties = String(path).split("."); let value = obj; for (const property of properties) { value = value?.[property]; if (!value) return void 0; } if (typeof value === "string") return value; return String(value); } function getTranslationValueByI18nPropertyKey(lang, key, options) { const { locales, defaultLocales } = options; if (!locales && !defaultLocales) return key; if (!lang) return key; let languageLocale = locales[lang]; if (!languageLocale) { languageLocale = defaultLocales[lang]; if (!languageLocale) languageLocale = options.defaultEnLocale; } const value = getValueByPropertyPaths(key, languageLocale); if (value) return value; const defaultLanguageLocale = defaultLocales[lang]; if (defaultLanguageLocale) { const defaultValue = getValueByPropertyPaths(key, defaultLanguageLocale); if (defaultValue) return defaultValue; } const defaultEnLocaleValue = getValueByPropertyPaths(key, options.defaultEnLocale); if (defaultEnLocaleValue) return defaultEnLocaleValue; return key; } function createI18n(injectionKey, defaultLocales, defaultEnLocale) { return () => { const options = (0, _vue.inject)(injectionKey, { locales: {} }); const { lang } = (0, _vitepress.useData)(); const language = (0, _vue.computed)(() => lang.value || "en"); return { t(key, translateOptions) { const translatedValue = (0, _vue.computed)(() => { return getTranslationValueByI18nPropertyKey(language.value, key, { locales: options.locales || {}, defaultLocales, defaultEnLocale }); }); if (!translatedValue.value) return translateOptions?.omitEmpty ? "" : key; if (translateOptions?.omitEmpty && translatedValue.value === key) return ""; if (!translateOptions || !translateOptions.props) return translatedValue.value; return (0, _vue.computed)(() => { let result = translatedValue.value; Object.entries(translateOptions.props || {}).forEach(([property, value]) => { result = result.replace(new RegExp(`{{${property}}}`, "g"), String(value)); }); return result; }).value; } }; }; }