1173 lines
38 KiB
JavaScript
1173 lines
38 KiB
JavaScript
|
import { m as makeSymbol, a as assign, i as isNumber, b as isString, c as isObject, d as isArray, e as isBoolean, f as createCompileError, g as isEmptyObject, r as registerMessageCompiler, h as getGlobalThis, s as setDevToolsHook, j as isPlainObject, k as hasOwn, l as handleFlatJson, n as isRegExp, o as isFunction, p as createCoreContext, u as updateFallbackLocale, q as compileToFunction, t as resolveValue, v as clearDateTimeFormat, w as clearNumberFormat, x as setAdditionalMeta, N as NOT_REOSLVED, y as parseTranslateArgs, z as translate, M as MISSING_RESOLVE_VALUE, A as parseDateTimeArgs, B as datetime, C as parseNumberArgs, D as number, E as getLocaleChain } from "../@intlify/index.js";
|
||
|
import { h, Fragment, getCurrentInstance, inject, onMounted, onUnmounted, isRef, ref, computed, watch, createVNode, Text } from "vue";
|
||
|
/*!
|
||
|
* vue-i18n v9.1.10
|
||
|
* (c) 2022 kazuya kawaguchi
|
||
|
* Released under the MIT License.
|
||
|
*/
|
||
|
const VERSION = "9.1.10";
|
||
|
function initFeatureFlags() {
|
||
|
if (typeof __VUE_I18N_FULL_INSTALL__ !== "boolean") {
|
||
|
getGlobalThis().__VUE_I18N_FULL_INSTALL__ = true;
|
||
|
}
|
||
|
if (typeof __VUE_I18N_LEGACY_API__ !== "boolean") {
|
||
|
getGlobalThis().__VUE_I18N_LEGACY_API__ = true;
|
||
|
}
|
||
|
if (typeof __INTLIFY_PROD_DEVTOOLS__ !== "boolean") {
|
||
|
getGlobalThis().__INTLIFY_PROD_DEVTOOLS__ = false;
|
||
|
}
|
||
|
}
|
||
|
function createI18nError(code, ...args) {
|
||
|
return createCompileError(code, null, void 0);
|
||
|
}
|
||
|
const DEVTOOLS_META = "__INTLIFY_META__";
|
||
|
const TransrateVNodeSymbol = makeSymbol("__transrateVNode");
|
||
|
const DatetimePartsSymbol = makeSymbol("__datetimeParts");
|
||
|
const NumberPartsSymbol = makeSymbol("__numberParts");
|
||
|
makeSymbol("__enableEmitter");
|
||
|
makeSymbol("__disableEmitter");
|
||
|
const SetPluralRulesSymbol = makeSymbol("__setPluralRules");
|
||
|
makeSymbol("__intlifyMeta");
|
||
|
const InejctWithOption = makeSymbol("__injectWithOption");
|
||
|
let composerID = 0;
|
||
|
function defineCoreMissingHandler(missing) {
|
||
|
return (ctx, locale, key, type) => {
|
||
|
return missing(locale, key, getCurrentInstance() || void 0, type);
|
||
|
};
|
||
|
}
|
||
|
function getLocaleMessages(locale, options) {
|
||
|
const { messages, __i18n } = options;
|
||
|
const ret = isPlainObject(messages) ? messages : isArray(__i18n) ? {} : { [locale]: {} };
|
||
|
if (isArray(__i18n)) {
|
||
|
__i18n.forEach(({ locale: locale2, resource }) => {
|
||
|
if (locale2) {
|
||
|
ret[locale2] = ret[locale2] || {};
|
||
|
deepCopy(resource, ret[locale2]);
|
||
|
} else {
|
||
|
deepCopy(resource, ret);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
if (options.flatJson) {
|
||
|
for (const key in ret) {
|
||
|
if (hasOwn(ret, key)) {
|
||
|
handleFlatJson(ret[key]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return ret;
|
||
|
}
|
||
|
const isNotObjectOrIsArray = (val) => !isObject(val) || isArray(val);
|
||
|
function deepCopy(src, des) {
|
||
|
if (isNotObjectOrIsArray(src) || isNotObjectOrIsArray(des)) {
|
||
|
throw createI18nError(20);
|
||
|
}
|
||
|
for (const key in src) {
|
||
|
if (hasOwn(src, key)) {
|
||
|
if (isNotObjectOrIsArray(src[key]) || isNotObjectOrIsArray(des[key])) {
|
||
|
des[key] = src[key];
|
||
|
} else {
|
||
|
deepCopy(src[key], des[key]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
const getMetaInfo = () => {
|
||
|
const instance = getCurrentInstance();
|
||
|
return instance && instance.type[DEVTOOLS_META] ? { [DEVTOOLS_META]: instance.type[DEVTOOLS_META] } : null;
|
||
|
};
|
||
|
function createComposer(options = {}) {
|
||
|
const { __root } = options;
|
||
|
const _isGlobal = __root === void 0;
|
||
|
let _inheritLocale = isBoolean(options.inheritLocale) ? options.inheritLocale : true;
|
||
|
const _locale = ref(__root && _inheritLocale ? __root.locale.value : isString(options.locale) ? options.locale : "en-US");
|
||
|
const _fallbackLocale = ref(__root && _inheritLocale ? __root.fallbackLocale.value : isString(options.fallbackLocale) || isArray(options.fallbackLocale) || isPlainObject(options.fallbackLocale) || options.fallbackLocale === false ? options.fallbackLocale : _locale.value);
|
||
|
const _messages = ref(getLocaleMessages(_locale.value, options));
|
||
|
const _datetimeFormats = ref(isPlainObject(options.datetimeFormats) ? options.datetimeFormats : { [_locale.value]: {} });
|
||
|
const _numberFormats = ref(isPlainObject(options.numberFormats) ? options.numberFormats : { [_locale.value]: {} });
|
||
|
let _missingWarn = __root ? __root.missingWarn : isBoolean(options.missingWarn) || isRegExp(options.missingWarn) ? options.missingWarn : true;
|
||
|
let _fallbackWarn = __root ? __root.fallbackWarn : isBoolean(options.fallbackWarn) || isRegExp(options.fallbackWarn) ? options.fallbackWarn : true;
|
||
|
let _fallbackRoot = __root ? __root.fallbackRoot : isBoolean(options.fallbackRoot) ? options.fallbackRoot : true;
|
||
|
let _fallbackFormat = !!options.fallbackFormat;
|
||
|
let _missing = isFunction(options.missing) ? options.missing : null;
|
||
|
let _runtimeMissing = isFunction(options.missing) ? defineCoreMissingHandler(options.missing) : null;
|
||
|
let _postTranslation = isFunction(options.postTranslation) ? options.postTranslation : null;
|
||
|
let _warnHtmlMessage = isBoolean(options.warnHtmlMessage) ? options.warnHtmlMessage : true;
|
||
|
let _escapeParameter = !!options.escapeParameter;
|
||
|
const _modifiers = __root ? __root.modifiers : isPlainObject(options.modifiers) ? options.modifiers : {};
|
||
|
let _pluralRules = options.pluralRules || __root && __root.pluralRules;
|
||
|
let _context;
|
||
|
function getCoreContext() {
|
||
|
return createCoreContext({
|
||
|
version: VERSION,
|
||
|
locale: _locale.value,
|
||
|
fallbackLocale: _fallbackLocale.value,
|
||
|
messages: _messages.value,
|
||
|
datetimeFormats: _datetimeFormats.value,
|
||
|
numberFormats: _numberFormats.value,
|
||
|
modifiers: _modifiers,
|
||
|
pluralRules: _pluralRules,
|
||
|
missing: _runtimeMissing === null ? void 0 : _runtimeMissing,
|
||
|
missingWarn: _missingWarn,
|
||
|
fallbackWarn: _fallbackWarn,
|
||
|
fallbackFormat: _fallbackFormat,
|
||
|
unresolving: true,
|
||
|
postTranslation: _postTranslation === null ? void 0 : _postTranslation,
|
||
|
warnHtmlMessage: _warnHtmlMessage,
|
||
|
escapeParameter: _escapeParameter,
|
||
|
__datetimeFormatters: isPlainObject(_context) ? _context.__datetimeFormatters : void 0,
|
||
|
__numberFormatters: isPlainObject(_context) ? _context.__numberFormatters : void 0,
|
||
|
__v_emitter: isPlainObject(_context) ? _context.__v_emitter : void 0,
|
||
|
__meta: { framework: "vue" }
|
||
|
});
|
||
|
}
|
||
|
_context = getCoreContext();
|
||
|
updateFallbackLocale(_context, _locale.value, _fallbackLocale.value);
|
||
|
function trackReactivityValues() {
|
||
|
return [
|
||
|
_locale.value,
|
||
|
_fallbackLocale.value,
|
||
|
_messages.value,
|
||
|
_datetimeFormats.value,
|
||
|
_numberFormats.value
|
||
|
];
|
||
|
}
|
||
|
const locale = computed({
|
||
|
get: () => _locale.value,
|
||
|
set: (val) => {
|
||
|
_locale.value = val;
|
||
|
_context.locale = _locale.value;
|
||
|
}
|
||
|
});
|
||
|
const fallbackLocale = computed({
|
||
|
get: () => _fallbackLocale.value,
|
||
|
set: (val) => {
|
||
|
_fallbackLocale.value = val;
|
||
|
_context.fallbackLocale = _fallbackLocale.value;
|
||
|
updateFallbackLocale(_context, _locale.value, val);
|
||
|
}
|
||
|
});
|
||
|
const messages = computed(() => _messages.value);
|
||
|
const datetimeFormats = computed(() => _datetimeFormats.value);
|
||
|
const numberFormats = computed(() => _numberFormats.value);
|
||
|
function getPostTranslationHandler() {
|
||
|
return isFunction(_postTranslation) ? _postTranslation : null;
|
||
|
}
|
||
|
function setPostTranslationHandler(handler) {
|
||
|
_postTranslation = handler;
|
||
|
_context.postTranslation = handler;
|
||
|
}
|
||
|
function getMissingHandler() {
|
||
|
return _missing;
|
||
|
}
|
||
|
function setMissingHandler(handler) {
|
||
|
if (handler !== null) {
|
||
|
_runtimeMissing = defineCoreMissingHandler(handler);
|
||
|
}
|
||
|
_missing = handler;
|
||
|
_context.missing = _runtimeMissing;
|
||
|
}
|
||
|
function wrapWithDeps(fn, argumentParser, warnType, fallbackSuccess, fallbackFail, successCondition) {
|
||
|
trackReactivityValues();
|
||
|
let ret;
|
||
|
if (__INTLIFY_PROD_DEVTOOLS__) {
|
||
|
try {
|
||
|
setAdditionalMeta(getMetaInfo());
|
||
|
ret = fn(_context);
|
||
|
} finally {
|
||
|
setAdditionalMeta(null);
|
||
|
}
|
||
|
} else {
|
||
|
ret = fn(_context);
|
||
|
}
|
||
|
if (isNumber(ret) && ret === NOT_REOSLVED) {
|
||
|
const [key, arg2] = argumentParser();
|
||
|
return __root && _fallbackRoot ? fallbackSuccess(__root) : fallbackFail(key);
|
||
|
} else if (successCondition(ret)) {
|
||
|
return ret;
|
||
|
} else {
|
||
|
throw createI18nError(14);
|
||
|
}
|
||
|
}
|
||
|
function t(...args) {
|
||
|
return wrapWithDeps((context) => translate(context, ...args), () => parseTranslateArgs(...args), "translate", (root) => root.t(...args), (key) => key, (val) => isString(val));
|
||
|
}
|
||
|
function rt(...args) {
|
||
|
const [arg1, arg2, arg3] = args;
|
||
|
if (arg3 && !isObject(arg3)) {
|
||
|
throw createI18nError(15);
|
||
|
}
|
||
|
return t(...[arg1, arg2, assign({ resolvedMessage: true }, arg3 || {})]);
|
||
|
}
|
||
|
function d(...args) {
|
||
|
return wrapWithDeps((context) => datetime(context, ...args), () => parseDateTimeArgs(...args), "datetime format", (root) => root.d(...args), () => MISSING_RESOLVE_VALUE, (val) => isString(val));
|
||
|
}
|
||
|
function n(...args) {
|
||
|
return wrapWithDeps((context) => number(context, ...args), () => parseNumberArgs(...args), "number format", (root) => root.n(...args), () => MISSING_RESOLVE_VALUE, (val) => isString(val));
|
||
|
}
|
||
|
function normalize(values) {
|
||
|
return values.map((val) => isString(val) ? createVNode(Text, null, val, 0) : val);
|
||
|
}
|
||
|
const interpolate = (val) => val;
|
||
|
const processor = {
|
||
|
normalize,
|
||
|
interpolate,
|
||
|
type: "vnode"
|
||
|
};
|
||
|
function transrateVNode(...args) {
|
||
|
return wrapWithDeps((context) => {
|
||
|
let ret;
|
||
|
const _context2 = context;
|
||
|
try {
|
||
|
_context2.processor = processor;
|
||
|
ret = translate(_context2, ...args);
|
||
|
} finally {
|
||
|
_context2.processor = null;
|
||
|
}
|
||
|
return ret;
|
||
|
}, () => parseTranslateArgs(...args), "translate", (root) => root[TransrateVNodeSymbol](...args), (key) => [createVNode(Text, null, key, 0)], (val) => isArray(val));
|
||
|
}
|
||
|
function numberParts(...args) {
|
||
|
return wrapWithDeps((context) => number(context, ...args), () => parseNumberArgs(...args), "number format", (root) => root[NumberPartsSymbol](...args), () => [], (val) => isString(val) || isArray(val));
|
||
|
}
|
||
|
function datetimeParts(...args) {
|
||
|
return wrapWithDeps((context) => datetime(context, ...args), () => parseDateTimeArgs(...args), "datetime format", (root) => root[DatetimePartsSymbol](...args), () => [], (val) => isString(val) || isArray(val));
|
||
|
}
|
||
|
function setPluralRules(rules) {
|
||
|
_pluralRules = rules;
|
||
|
_context.pluralRules = _pluralRules;
|
||
|
}
|
||
|
function te(key, locale2) {
|
||
|
const targetLocale = isString(locale2) ? locale2 : _locale.value;
|
||
|
const message = getLocaleMessage(targetLocale);
|
||
|
return resolveValue(message, key) !== null;
|
||
|
}
|
||
|
function resolveMessages(key) {
|
||
|
let messages2 = null;
|
||
|
const locales = getLocaleChain(_context, _fallbackLocale.value, _locale.value);
|
||
|
for (let i = 0; i < locales.length; i++) {
|
||
|
const targetLocaleMessages = _messages.value[locales[i]] || {};
|
||
|
const messageValue = resolveValue(targetLocaleMessages, key);
|
||
|
if (messageValue != null) {
|
||
|
messages2 = messageValue;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
return messages2;
|
||
|
}
|
||
|
function tm(key) {
|
||
|
const messages2 = resolveMessages(key);
|
||
|
return messages2 != null ? messages2 : __root ? __root.tm(key) || {} : {};
|
||
|
}
|
||
|
function getLocaleMessage(locale2) {
|
||
|
return _messages.value[locale2] || {};
|
||
|
}
|
||
|
function setLocaleMessage(locale2, message) {
|
||
|
_messages.value[locale2] = message;
|
||
|
_context.messages = _messages.value;
|
||
|
}
|
||
|
function mergeLocaleMessage(locale2, message) {
|
||
|
_messages.value[locale2] = _messages.value[locale2] || {};
|
||
|
deepCopy(message, _messages.value[locale2]);
|
||
|
_context.messages = _messages.value;
|
||
|
}
|
||
|
function getDateTimeFormat(locale2) {
|
||
|
return _datetimeFormats.value[locale2] || {};
|
||
|
}
|
||
|
function setDateTimeFormat(locale2, format) {
|
||
|
_datetimeFormats.value[locale2] = format;
|
||
|
_context.datetimeFormats = _datetimeFormats.value;
|
||
|
clearDateTimeFormat(_context, locale2, format);
|
||
|
}
|
||
|
function mergeDateTimeFormat(locale2, format) {
|
||
|
_datetimeFormats.value[locale2] = assign(_datetimeFormats.value[locale2] || {}, format);
|
||
|
_context.datetimeFormats = _datetimeFormats.value;
|
||
|
clearDateTimeFormat(_context, locale2, format);
|
||
|
}
|
||
|
function getNumberFormat(locale2) {
|
||
|
return _numberFormats.value[locale2] || {};
|
||
|
}
|
||
|
function setNumberFormat(locale2, format) {
|
||
|
_numberFormats.value[locale2] = format;
|
||
|
_context.numberFormats = _numberFormats.value;
|
||
|
clearNumberFormat(_context, locale2, format);
|
||
|
}
|
||
|
function mergeNumberFormat(locale2, format) {
|
||
|
_numberFormats.value[locale2] = assign(_numberFormats.value[locale2] || {}, format);
|
||
|
_context.numberFormats = _numberFormats.value;
|
||
|
clearNumberFormat(_context, locale2, format);
|
||
|
}
|
||
|
composerID++;
|
||
|
if (__root) {
|
||
|
watch(__root.locale, (val) => {
|
||
|
if (_inheritLocale) {
|
||
|
_locale.value = val;
|
||
|
_context.locale = val;
|
||
|
updateFallbackLocale(_context, _locale.value, _fallbackLocale.value);
|
||
|
}
|
||
|
});
|
||
|
watch(__root.fallbackLocale, (val) => {
|
||
|
if (_inheritLocale) {
|
||
|
_fallbackLocale.value = val;
|
||
|
_context.fallbackLocale = val;
|
||
|
updateFallbackLocale(_context, _locale.value, _fallbackLocale.value);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
const composer = {
|
||
|
id: composerID,
|
||
|
locale,
|
||
|
fallbackLocale,
|
||
|
get inheritLocale() {
|
||
|
return _inheritLocale;
|
||
|
},
|
||
|
set inheritLocale(val) {
|
||
|
_inheritLocale = val;
|
||
|
if (val && __root) {
|
||
|
_locale.value = __root.locale.value;
|
||
|
_fallbackLocale.value = __root.fallbackLocale.value;
|
||
|
updateFallbackLocale(_context, _locale.value, _fallbackLocale.value);
|
||
|
}
|
||
|
},
|
||
|
get availableLocales() {
|
||
|
return Object.keys(_messages.value).sort();
|
||
|
},
|
||
|
messages,
|
||
|
datetimeFormats,
|
||
|
numberFormats,
|
||
|
get modifiers() {
|
||
|
return _modifiers;
|
||
|
},
|
||
|
get pluralRules() {
|
||
|
return _pluralRules || {};
|
||
|
},
|
||
|
get isGlobal() {
|
||
|
return _isGlobal;
|
||
|
},
|
||
|
get missingWarn() {
|
||
|
return _missingWarn;
|
||
|
},
|
||
|
set missingWarn(val) {
|
||
|
_missingWarn = val;
|
||
|
_context.missingWarn = _missingWarn;
|
||
|
},
|
||
|
get fallbackWarn() {
|
||
|
return _fallbackWarn;
|
||
|
},
|
||
|
set fallbackWarn(val) {
|
||
|
_fallbackWarn = val;
|
||
|
_context.fallbackWarn = _fallbackWarn;
|
||
|
},
|
||
|
get fallbackRoot() {
|
||
|
return _fallbackRoot;
|
||
|
},
|
||
|
set fallbackRoot(val) {
|
||
|
_fallbackRoot = val;
|
||
|
},
|
||
|
get fallbackFormat() {
|
||
|
return _fallbackFormat;
|
||
|
},
|
||
|
set fallbackFormat(val) {
|
||
|
_fallbackFormat = val;
|
||
|
_context.fallbackFormat = _fallbackFormat;
|
||
|
},
|
||
|
get warnHtmlMessage() {
|
||
|
return _warnHtmlMessage;
|
||
|
},
|
||
|
set warnHtmlMessage(val) {
|
||
|
_warnHtmlMessage = val;
|
||
|
_context.warnHtmlMessage = val;
|
||
|
},
|
||
|
get escapeParameter() {
|
||
|
return _escapeParameter;
|
||
|
},
|
||
|
set escapeParameter(val) {
|
||
|
_escapeParameter = val;
|
||
|
_context.escapeParameter = val;
|
||
|
},
|
||
|
t,
|
||
|
rt,
|
||
|
d,
|
||
|
n,
|
||
|
te,
|
||
|
tm,
|
||
|
getLocaleMessage,
|
||
|
setLocaleMessage,
|
||
|
mergeLocaleMessage,
|
||
|
getDateTimeFormat,
|
||
|
setDateTimeFormat,
|
||
|
mergeDateTimeFormat,
|
||
|
getNumberFormat,
|
||
|
setNumberFormat,
|
||
|
mergeNumberFormat,
|
||
|
getPostTranslationHandler,
|
||
|
setPostTranslationHandler,
|
||
|
getMissingHandler,
|
||
|
setMissingHandler,
|
||
|
[TransrateVNodeSymbol]: transrateVNode,
|
||
|
[NumberPartsSymbol]: numberParts,
|
||
|
[DatetimePartsSymbol]: datetimeParts,
|
||
|
[SetPluralRulesSymbol]: setPluralRules,
|
||
|
[InejctWithOption]: options.__injectWithOption
|
||
|
};
|
||
|
return composer;
|
||
|
}
|
||
|
function convertComposerOptions(options) {
|
||
|
const locale = isString(options.locale) ? options.locale : "en-US";
|
||
|
const fallbackLocale = isString(options.fallbackLocale) || isArray(options.fallbackLocale) || isPlainObject(options.fallbackLocale) || options.fallbackLocale === false ? options.fallbackLocale : locale;
|
||
|
const missing = isFunction(options.missing) ? options.missing : void 0;
|
||
|
const missingWarn = isBoolean(options.silentTranslationWarn) || isRegExp(options.silentTranslationWarn) ? !options.silentTranslationWarn : true;
|
||
|
const fallbackWarn = isBoolean(options.silentFallbackWarn) || isRegExp(options.silentFallbackWarn) ? !options.silentFallbackWarn : true;
|
||
|
const fallbackRoot = isBoolean(options.fallbackRoot) ? options.fallbackRoot : true;
|
||
|
const fallbackFormat = !!options.formatFallbackMessages;
|
||
|
const modifiers = isPlainObject(options.modifiers) ? options.modifiers : {};
|
||
|
const pluralizationRules = options.pluralizationRules;
|
||
|
const postTranslation = isFunction(options.postTranslation) ? options.postTranslation : void 0;
|
||
|
const warnHtmlMessage = isString(options.warnHtmlInMessage) ? options.warnHtmlInMessage !== "off" : true;
|
||
|
const escapeParameter = !!options.escapeParameterHtml;
|
||
|
const inheritLocale = isBoolean(options.sync) ? options.sync : true;
|
||
|
let messages = options.messages;
|
||
|
if (isPlainObject(options.sharedMessages)) {
|
||
|
const sharedMessages = options.sharedMessages;
|
||
|
const locales = Object.keys(sharedMessages);
|
||
|
messages = locales.reduce((messages2, locale2) => {
|
||
|
const message = messages2[locale2] || (messages2[locale2] = {});
|
||
|
assign(message, sharedMessages[locale2]);
|
||
|
return messages2;
|
||
|
}, messages || {});
|
||
|
}
|
||
|
const { __i18n, __root, __injectWithOption } = options;
|
||
|
const datetimeFormats = options.datetimeFormats;
|
||
|
const numberFormats = options.numberFormats;
|
||
|
const flatJson = options.flatJson;
|
||
|
return {
|
||
|
locale,
|
||
|
fallbackLocale,
|
||
|
messages,
|
||
|
flatJson,
|
||
|
datetimeFormats,
|
||
|
numberFormats,
|
||
|
missing,
|
||
|
missingWarn,
|
||
|
fallbackWarn,
|
||
|
fallbackRoot,
|
||
|
fallbackFormat,
|
||
|
modifiers,
|
||
|
pluralRules: pluralizationRules,
|
||
|
postTranslation,
|
||
|
warnHtmlMessage,
|
||
|
escapeParameter,
|
||
|
inheritLocale,
|
||
|
__i18n,
|
||
|
__root,
|
||
|
__injectWithOption
|
||
|
};
|
||
|
}
|
||
|
function createVueI18n(options = {}) {
|
||
|
const composer = createComposer(convertComposerOptions(options));
|
||
|
const vueI18n = {
|
||
|
id: composer.id,
|
||
|
get locale() {
|
||
|
return composer.locale.value;
|
||
|
},
|
||
|
set locale(val) {
|
||
|
composer.locale.value = val;
|
||
|
},
|
||
|
get fallbackLocale() {
|
||
|
return composer.fallbackLocale.value;
|
||
|
},
|
||
|
set fallbackLocale(val) {
|
||
|
composer.fallbackLocale.value = val;
|
||
|
},
|
||
|
get messages() {
|
||
|
return composer.messages.value;
|
||
|
},
|
||
|
get datetimeFormats() {
|
||
|
return composer.datetimeFormats.value;
|
||
|
},
|
||
|
get numberFormats() {
|
||
|
return composer.numberFormats.value;
|
||
|
},
|
||
|
get availableLocales() {
|
||
|
return composer.availableLocales;
|
||
|
},
|
||
|
get formatter() {
|
||
|
return {
|
||
|
interpolate() {
|
||
|
return [];
|
||
|
}
|
||
|
};
|
||
|
},
|
||
|
set formatter(val) {
|
||
|
},
|
||
|
get missing() {
|
||
|
return composer.getMissingHandler();
|
||
|
},
|
||
|
set missing(handler) {
|
||
|
composer.setMissingHandler(handler);
|
||
|
},
|
||
|
get silentTranslationWarn() {
|
||
|
return isBoolean(composer.missingWarn) ? !composer.missingWarn : composer.missingWarn;
|
||
|
},
|
||
|
set silentTranslationWarn(val) {
|
||
|
composer.missingWarn = isBoolean(val) ? !val : val;
|
||
|
},
|
||
|
get silentFallbackWarn() {
|
||
|
return isBoolean(composer.fallbackWarn) ? !composer.fallbackWarn : composer.fallbackWarn;
|
||
|
},
|
||
|
set silentFallbackWarn(val) {
|
||
|
composer.fallbackWarn = isBoolean(val) ? !val : val;
|
||
|
},
|
||
|
get modifiers() {
|
||
|
return composer.modifiers;
|
||
|
},
|
||
|
get formatFallbackMessages() {
|
||
|
return composer.fallbackFormat;
|
||
|
},
|
||
|
set formatFallbackMessages(val) {
|
||
|
composer.fallbackFormat = val;
|
||
|
},
|
||
|
get postTranslation() {
|
||
|
return composer.getPostTranslationHandler();
|
||
|
},
|
||
|
set postTranslation(handler) {
|
||
|
composer.setPostTranslationHandler(handler);
|
||
|
},
|
||
|
get sync() {
|
||
|
return composer.inheritLocale;
|
||
|
},
|
||
|
set sync(val) {
|
||
|
composer.inheritLocale = val;
|
||
|
},
|
||
|
get warnHtmlInMessage() {
|
||
|
return composer.warnHtmlMessage ? "warn" : "off";
|
||
|
},
|
||
|
set warnHtmlInMessage(val) {
|
||
|
composer.warnHtmlMessage = val !== "off";
|
||
|
},
|
||
|
get escapeParameterHtml() {
|
||
|
return composer.escapeParameter;
|
||
|
},
|
||
|
set escapeParameterHtml(val) {
|
||
|
composer.escapeParameter = val;
|
||
|
},
|
||
|
get preserveDirectiveContent() {
|
||
|
return true;
|
||
|
},
|
||
|
set preserveDirectiveContent(val) {
|
||
|
},
|
||
|
get pluralizationRules() {
|
||
|
return composer.pluralRules || {};
|
||
|
},
|
||
|
__composer: composer,
|
||
|
t(...args) {
|
||
|
const [arg1, arg2, arg3] = args;
|
||
|
const options2 = {};
|
||
|
let list = null;
|
||
|
let named = null;
|
||
|
if (!isString(arg1)) {
|
||
|
throw createI18nError(15);
|
||
|
}
|
||
|
const key = arg1;
|
||
|
if (isString(arg2)) {
|
||
|
options2.locale = arg2;
|
||
|
} else if (isArray(arg2)) {
|
||
|
list = arg2;
|
||
|
} else if (isPlainObject(arg2)) {
|
||
|
named = arg2;
|
||
|
}
|
||
|
if (isArray(arg3)) {
|
||
|
list = arg3;
|
||
|
} else if (isPlainObject(arg3)) {
|
||
|
named = arg3;
|
||
|
}
|
||
|
return composer.t(key, list || named || {}, options2);
|
||
|
},
|
||
|
rt(...args) {
|
||
|
return composer.rt(...args);
|
||
|
},
|
||
|
tc(...args) {
|
||
|
const [arg1, arg2, arg3] = args;
|
||
|
const options2 = { plural: 1 };
|
||
|
let list = null;
|
||
|
let named = null;
|
||
|
if (!isString(arg1)) {
|
||
|
throw createI18nError(15);
|
||
|
}
|
||
|
const key = arg1;
|
||
|
if (isString(arg2)) {
|
||
|
options2.locale = arg2;
|
||
|
} else if (isNumber(arg2)) {
|
||
|
options2.plural = arg2;
|
||
|
} else if (isArray(arg2)) {
|
||
|
list = arg2;
|
||
|
} else if (isPlainObject(arg2)) {
|
||
|
named = arg2;
|
||
|
}
|
||
|
if (isString(arg3)) {
|
||
|
options2.locale = arg3;
|
||
|
} else if (isArray(arg3)) {
|
||
|
list = arg3;
|
||
|
} else if (isPlainObject(arg3)) {
|
||
|
named = arg3;
|
||
|
}
|
||
|
return composer.t(key, list || named || {}, options2);
|
||
|
},
|
||
|
te(key, locale) {
|
||
|
return composer.te(key, locale);
|
||
|
},
|
||
|
tm(key) {
|
||
|
return composer.tm(key);
|
||
|
},
|
||
|
getLocaleMessage(locale) {
|
||
|
return composer.getLocaleMessage(locale);
|
||
|
},
|
||
|
setLocaleMessage(locale, message) {
|
||
|
composer.setLocaleMessage(locale, message);
|
||
|
},
|
||
|
mergeLocaleMessage(locale, message) {
|
||
|
composer.mergeLocaleMessage(locale, message);
|
||
|
},
|
||
|
d(...args) {
|
||
|
return composer.d(...args);
|
||
|
},
|
||
|
getDateTimeFormat(locale) {
|
||
|
return composer.getDateTimeFormat(locale);
|
||
|
},
|
||
|
setDateTimeFormat(locale, format) {
|
||
|
composer.setDateTimeFormat(locale, format);
|
||
|
},
|
||
|
mergeDateTimeFormat(locale, format) {
|
||
|
composer.mergeDateTimeFormat(locale, format);
|
||
|
},
|
||
|
n(...args) {
|
||
|
return composer.n(...args);
|
||
|
},
|
||
|
getNumberFormat(locale) {
|
||
|
return composer.getNumberFormat(locale);
|
||
|
},
|
||
|
setNumberFormat(locale, format) {
|
||
|
composer.setNumberFormat(locale, format);
|
||
|
},
|
||
|
mergeNumberFormat(locale, format) {
|
||
|
composer.mergeNumberFormat(locale, format);
|
||
|
},
|
||
|
getChoiceIndex(choice, choicesLength) {
|
||
|
return -1;
|
||
|
},
|
||
|
__onComponentInstanceCreated(target) {
|
||
|
const { componentInstanceCreatedListener } = options;
|
||
|
if (componentInstanceCreatedListener) {
|
||
|
componentInstanceCreatedListener(target, vueI18n);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
return vueI18n;
|
||
|
}
|
||
|
const baseFormatProps = {
|
||
|
tag: {
|
||
|
type: [String, Object]
|
||
|
},
|
||
|
locale: {
|
||
|
type: String
|
||
|
},
|
||
|
scope: {
|
||
|
type: String,
|
||
|
validator: (val) => val === "parent" || val === "global",
|
||
|
default: "parent"
|
||
|
},
|
||
|
i18n: {
|
||
|
type: Object
|
||
|
}
|
||
|
};
|
||
|
const Translation = {
|
||
|
name: "i18n-t",
|
||
|
props: assign({
|
||
|
keypath: {
|
||
|
type: String,
|
||
|
required: true
|
||
|
},
|
||
|
plural: {
|
||
|
type: [Number, String],
|
||
|
validator: (val) => isNumber(val) || !isNaN(val)
|
||
|
}
|
||
|
}, baseFormatProps),
|
||
|
setup(props, context) {
|
||
|
const { slots, attrs } = context;
|
||
|
const i18n = props.i18n || useI18n({
|
||
|
useScope: props.scope,
|
||
|
__useComponent: true
|
||
|
});
|
||
|
const keys = Object.keys(slots).filter((key) => key !== "_");
|
||
|
return () => {
|
||
|
const options = {};
|
||
|
if (props.locale) {
|
||
|
options.locale = props.locale;
|
||
|
}
|
||
|
if (props.plural !== void 0) {
|
||
|
options.plural = isString(props.plural) ? +props.plural : props.plural;
|
||
|
}
|
||
|
const arg = getInterpolateArg(context, keys);
|
||
|
const children = i18n[TransrateVNodeSymbol](props.keypath, arg, options);
|
||
|
const assignedAttrs = assign({}, attrs);
|
||
|
return isString(props.tag) ? h(props.tag, assignedAttrs, children) : isObject(props.tag) ? h(props.tag, assignedAttrs, children) : h(Fragment, assignedAttrs, children);
|
||
|
};
|
||
|
}
|
||
|
};
|
||
|
function getInterpolateArg({ slots }, keys) {
|
||
|
if (keys.length === 1 && keys[0] === "default") {
|
||
|
return slots.default ? slots.default() : [];
|
||
|
} else {
|
||
|
return keys.reduce((arg, key) => {
|
||
|
const slot = slots[key];
|
||
|
if (slot) {
|
||
|
arg[key] = slot();
|
||
|
}
|
||
|
return arg;
|
||
|
}, {});
|
||
|
}
|
||
|
}
|
||
|
function renderFormatter(props, context, slotKeys, partFormatter) {
|
||
|
const { slots, attrs } = context;
|
||
|
return () => {
|
||
|
const options = { part: true };
|
||
|
let overrides = {};
|
||
|
if (props.locale) {
|
||
|
options.locale = props.locale;
|
||
|
}
|
||
|
if (isString(props.format)) {
|
||
|
options.key = props.format;
|
||
|
} else if (isObject(props.format)) {
|
||
|
if (isString(props.format.key)) {
|
||
|
options.key = props.format.key;
|
||
|
}
|
||
|
overrides = Object.keys(props.format).reduce((options2, prop) => {
|
||
|
return slotKeys.includes(prop) ? assign({}, options2, { [prop]: props.format[prop] }) : options2;
|
||
|
}, {});
|
||
|
}
|
||
|
const parts = partFormatter(...[props.value, options, overrides]);
|
||
|
let children = [options.key];
|
||
|
if (isArray(parts)) {
|
||
|
children = parts.map((part, index) => {
|
||
|
const slot = slots[part.type];
|
||
|
return slot ? slot({ [part.type]: part.value, index, parts }) : [part.value];
|
||
|
});
|
||
|
} else if (isString(parts)) {
|
||
|
children = [parts];
|
||
|
}
|
||
|
const assignedAttrs = assign({}, attrs);
|
||
|
return isString(props.tag) ? h(props.tag, assignedAttrs, children) : isObject(props.tag) ? h(props.tag, assignedAttrs, children) : h(Fragment, assignedAttrs, children);
|
||
|
};
|
||
|
}
|
||
|
const NUMBER_FORMAT_KEYS = [
|
||
|
"localeMatcher",
|
||
|
"style",
|
||
|
"unit",
|
||
|
"unitDisplay",
|
||
|
"currency",
|
||
|
"currencyDisplay",
|
||
|
"useGrouping",
|
||
|
"numberingSystem",
|
||
|
"minimumIntegerDigits",
|
||
|
"minimumFractionDigits",
|
||
|
"maximumFractionDigits",
|
||
|
"minimumSignificantDigits",
|
||
|
"maximumSignificantDigits",
|
||
|
"notation",
|
||
|
"formatMatcher"
|
||
|
];
|
||
|
const NumberFormat = {
|
||
|
name: "i18n-n",
|
||
|
props: assign({
|
||
|
value: {
|
||
|
type: Number,
|
||
|
required: true
|
||
|
},
|
||
|
format: {
|
||
|
type: [String, Object]
|
||
|
}
|
||
|
}, baseFormatProps),
|
||
|
setup(props, context) {
|
||
|
const i18n = props.i18n || useI18n({ useScope: "parent", __useComponent: true });
|
||
|
return renderFormatter(props, context, NUMBER_FORMAT_KEYS, (...args) => i18n[NumberPartsSymbol](...args));
|
||
|
}
|
||
|
};
|
||
|
const DATETIME_FORMAT_KEYS = [
|
||
|
"dateStyle",
|
||
|
"timeStyle",
|
||
|
"fractionalSecondDigits",
|
||
|
"calendar",
|
||
|
"dayPeriod",
|
||
|
"numberingSystem",
|
||
|
"localeMatcher",
|
||
|
"timeZone",
|
||
|
"hour12",
|
||
|
"hourCycle",
|
||
|
"formatMatcher",
|
||
|
"weekday",
|
||
|
"era",
|
||
|
"year",
|
||
|
"month",
|
||
|
"day",
|
||
|
"hour",
|
||
|
"minute",
|
||
|
"second",
|
||
|
"timeZoneName"
|
||
|
];
|
||
|
const DatetimeFormat = {
|
||
|
name: "i18n-d",
|
||
|
props: assign({
|
||
|
value: {
|
||
|
type: [Number, Date],
|
||
|
required: true
|
||
|
},
|
||
|
format: {
|
||
|
type: [String, Object]
|
||
|
}
|
||
|
}, baseFormatProps),
|
||
|
setup(props, context) {
|
||
|
const i18n = props.i18n || useI18n({ useScope: "parent", __useComponent: true });
|
||
|
return renderFormatter(props, context, DATETIME_FORMAT_KEYS, (...args) => i18n[DatetimePartsSymbol](...args));
|
||
|
}
|
||
|
};
|
||
|
function getComposer$2(i18n, instance) {
|
||
|
const i18nInternal = i18n;
|
||
|
if (i18n.mode === "composition") {
|
||
|
return i18nInternal.__getInstance(instance) || i18n.global;
|
||
|
} else {
|
||
|
const vueI18n = i18nInternal.__getInstance(instance);
|
||
|
return vueI18n != null ? vueI18n.__composer : i18n.global.__composer;
|
||
|
}
|
||
|
}
|
||
|
function vTDirective(i18n) {
|
||
|
const bind = (el, { instance, value, modifiers }) => {
|
||
|
if (!instance || !instance.$) {
|
||
|
throw createI18nError(22);
|
||
|
}
|
||
|
const composer = getComposer$2(i18n, instance.$);
|
||
|
const parsedValue = parseValue(value);
|
||
|
el.textContent = composer.t(...makeParams(parsedValue));
|
||
|
};
|
||
|
return {
|
||
|
beforeMount: bind,
|
||
|
beforeUpdate: bind
|
||
|
};
|
||
|
}
|
||
|
function parseValue(value) {
|
||
|
if (isString(value)) {
|
||
|
return { path: value };
|
||
|
} else if (isPlainObject(value)) {
|
||
|
if (!("path" in value)) {
|
||
|
throw createI18nError(19, "path");
|
||
|
}
|
||
|
return value;
|
||
|
} else {
|
||
|
throw createI18nError(20);
|
||
|
}
|
||
|
}
|
||
|
function makeParams(value) {
|
||
|
const { path, locale, args, choice, plural } = value;
|
||
|
const options = {};
|
||
|
const named = args || {};
|
||
|
if (isString(locale)) {
|
||
|
options.locale = locale;
|
||
|
}
|
||
|
if (isNumber(choice)) {
|
||
|
options.plural = choice;
|
||
|
}
|
||
|
if (isNumber(plural)) {
|
||
|
options.plural = plural;
|
||
|
}
|
||
|
return [path, named, options];
|
||
|
}
|
||
|
function apply(app, i18n, ...options) {
|
||
|
const pluginOptions = isPlainObject(options[0]) ? options[0] : {};
|
||
|
const useI18nComponentName = !!pluginOptions.useI18nComponentName;
|
||
|
const globalInstall = isBoolean(pluginOptions.globalInstall) ? pluginOptions.globalInstall : true;
|
||
|
if (globalInstall) {
|
||
|
app.component(!useI18nComponentName ? Translation.name : "i18n", Translation);
|
||
|
app.component(NumberFormat.name, NumberFormat);
|
||
|
app.component(DatetimeFormat.name, DatetimeFormat);
|
||
|
}
|
||
|
app.directive("t", vTDirective(i18n));
|
||
|
}
|
||
|
function defineMixin(vuei18n, composer, i18n) {
|
||
|
return {
|
||
|
beforeCreate() {
|
||
|
const instance = getCurrentInstance();
|
||
|
if (!instance) {
|
||
|
throw createI18nError(22);
|
||
|
}
|
||
|
const options = this.$options;
|
||
|
if (options.i18n) {
|
||
|
const optionsI18n = options.i18n;
|
||
|
if (options.__i18n) {
|
||
|
optionsI18n.__i18n = options.__i18n;
|
||
|
}
|
||
|
optionsI18n.__root = composer;
|
||
|
if (this === this.$root) {
|
||
|
this.$i18n = mergeToRoot(vuei18n, optionsI18n);
|
||
|
} else {
|
||
|
optionsI18n.__injectWithOption = true;
|
||
|
this.$i18n = createVueI18n(optionsI18n);
|
||
|
}
|
||
|
} else if (options.__i18n) {
|
||
|
if (this === this.$root) {
|
||
|
this.$i18n = mergeToRoot(vuei18n, options);
|
||
|
} else {
|
||
|
this.$i18n = createVueI18n({
|
||
|
__i18n: options.__i18n,
|
||
|
__injectWithOption: true,
|
||
|
__root: composer
|
||
|
});
|
||
|
}
|
||
|
} else {
|
||
|
this.$i18n = vuei18n;
|
||
|
}
|
||
|
vuei18n.__onComponentInstanceCreated(this.$i18n);
|
||
|
i18n.__setInstance(instance, this.$i18n);
|
||
|
this.$t = (...args) => this.$i18n.t(...args);
|
||
|
this.$rt = (...args) => this.$i18n.rt(...args);
|
||
|
this.$tc = (...args) => this.$i18n.tc(...args);
|
||
|
this.$te = (key, locale) => this.$i18n.te(key, locale);
|
||
|
this.$d = (...args) => this.$i18n.d(...args);
|
||
|
this.$n = (...args) => this.$i18n.n(...args);
|
||
|
this.$tm = (key) => this.$i18n.tm(key);
|
||
|
},
|
||
|
mounted() {
|
||
|
},
|
||
|
beforeUnmount() {
|
||
|
const instance = getCurrentInstance();
|
||
|
if (!instance) {
|
||
|
throw createI18nError(22);
|
||
|
}
|
||
|
delete this.$t;
|
||
|
delete this.$rt;
|
||
|
delete this.$tc;
|
||
|
delete this.$te;
|
||
|
delete this.$d;
|
||
|
delete this.$n;
|
||
|
delete this.$tm;
|
||
|
i18n.__deleteInstance(instance);
|
||
|
delete this.$i18n;
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
function mergeToRoot(root, options) {
|
||
|
root.locale = options.locale || root.locale;
|
||
|
root.fallbackLocale = options.fallbackLocale || root.fallbackLocale;
|
||
|
root.missing = options.missing || root.missing;
|
||
|
root.silentTranslationWarn = options.silentTranslationWarn || root.silentFallbackWarn;
|
||
|
root.silentFallbackWarn = options.silentFallbackWarn || root.silentFallbackWarn;
|
||
|
root.formatFallbackMessages = options.formatFallbackMessages || root.formatFallbackMessages;
|
||
|
root.postTranslation = options.postTranslation || root.postTranslation;
|
||
|
root.warnHtmlInMessage = options.warnHtmlInMessage || root.warnHtmlInMessage;
|
||
|
root.escapeParameterHtml = options.escapeParameterHtml || root.escapeParameterHtml;
|
||
|
root.sync = options.sync || root.sync;
|
||
|
root.__composer[SetPluralRulesSymbol](options.pluralizationRules || root.pluralizationRules);
|
||
|
const messages = getLocaleMessages(root.locale, {
|
||
|
messages: options.messages,
|
||
|
__i18n: options.__i18n
|
||
|
});
|
||
|
Object.keys(messages).forEach((locale) => root.mergeLocaleMessage(locale, messages[locale]));
|
||
|
if (options.datetimeFormats) {
|
||
|
Object.keys(options.datetimeFormats).forEach((locale) => root.mergeDateTimeFormat(locale, options.datetimeFormats[locale]));
|
||
|
}
|
||
|
if (options.numberFormats) {
|
||
|
Object.keys(options.numberFormats).forEach((locale) => root.mergeNumberFormat(locale, options.numberFormats[locale]));
|
||
|
}
|
||
|
return root;
|
||
|
}
|
||
|
function createI18n(options = {}) {
|
||
|
const __legacyMode = __VUE_I18N_LEGACY_API__ && isBoolean(options.legacy) ? options.legacy : __VUE_I18N_LEGACY_API__;
|
||
|
const __globalInjection = !!options.globalInjection;
|
||
|
const __instances = /* @__PURE__ */ new Map();
|
||
|
const __global = __VUE_I18N_LEGACY_API__ && __legacyMode ? createVueI18n(options) : createComposer(options);
|
||
|
const symbol = makeSymbol("");
|
||
|
const i18n = {
|
||
|
get mode() {
|
||
|
return __VUE_I18N_LEGACY_API__ ? __legacyMode ? "legacy" : "composition" : "composition";
|
||
|
},
|
||
|
async install(app, ...options2) {
|
||
|
app.__VUE_I18N_SYMBOL__ = symbol;
|
||
|
app.provide(app.__VUE_I18N_SYMBOL__, i18n);
|
||
|
if (!__legacyMode && __globalInjection) {
|
||
|
injectGlobalFields(app, i18n.global);
|
||
|
}
|
||
|
if (__VUE_I18N_FULL_INSTALL__) {
|
||
|
apply(app, i18n, ...options2);
|
||
|
}
|
||
|
if (__VUE_I18N_LEGACY_API__ && __legacyMode) {
|
||
|
app.mixin(defineMixin(__global, __global.__composer, i18n));
|
||
|
}
|
||
|
},
|
||
|
get global() {
|
||
|
return __global;
|
||
|
},
|
||
|
__instances,
|
||
|
__getInstance(component) {
|
||
|
return __instances.get(component) || null;
|
||
|
},
|
||
|
__setInstance(component, instance) {
|
||
|
__instances.set(component, instance);
|
||
|
},
|
||
|
__deleteInstance(component) {
|
||
|
__instances.delete(component);
|
||
|
}
|
||
|
};
|
||
|
return i18n;
|
||
|
}
|
||
|
function useI18n(options = {}) {
|
||
|
const instance = getCurrentInstance();
|
||
|
if (instance == null) {
|
||
|
throw createI18nError(16);
|
||
|
}
|
||
|
if (!instance.appContext.app.__VUE_I18N_SYMBOL__) {
|
||
|
throw createI18nError(17);
|
||
|
}
|
||
|
const i18n = inject(instance.appContext.app.__VUE_I18N_SYMBOL__);
|
||
|
if (!i18n) {
|
||
|
throw createI18nError(22);
|
||
|
}
|
||
|
const global = i18n.mode === "composition" ? i18n.global : i18n.global.__composer;
|
||
|
const scope = isEmptyObject(options) ? "__i18n" in instance.type ? "local" : "global" : !options.useScope ? "local" : options.useScope;
|
||
|
if (scope === "global") {
|
||
|
let messages = isObject(options.messages) ? options.messages : {};
|
||
|
if ("__i18nGlobal" in instance.type) {
|
||
|
messages = getLocaleMessages(global.locale.value, {
|
||
|
messages,
|
||
|
__i18n: instance.type.__i18nGlobal
|
||
|
});
|
||
|
}
|
||
|
const locales = Object.keys(messages);
|
||
|
if (locales.length) {
|
||
|
locales.forEach((locale) => {
|
||
|
global.mergeLocaleMessage(locale, messages[locale]);
|
||
|
});
|
||
|
}
|
||
|
if (isObject(options.datetimeFormats)) {
|
||
|
const locales2 = Object.keys(options.datetimeFormats);
|
||
|
if (locales2.length) {
|
||
|
locales2.forEach((locale) => {
|
||
|
global.mergeDateTimeFormat(locale, options.datetimeFormats[locale]);
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
if (isObject(options.numberFormats)) {
|
||
|
const locales2 = Object.keys(options.numberFormats);
|
||
|
if (locales2.length) {
|
||
|
locales2.forEach((locale) => {
|
||
|
global.mergeNumberFormat(locale, options.numberFormats[locale]);
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
return global;
|
||
|
}
|
||
|
if (scope === "parent") {
|
||
|
let composer2 = getComposer(i18n, instance, options.__useComponent);
|
||
|
if (composer2 == null) {
|
||
|
composer2 = global;
|
||
|
}
|
||
|
return composer2;
|
||
|
}
|
||
|
if (i18n.mode === "legacy") {
|
||
|
throw createI18nError(18);
|
||
|
}
|
||
|
const i18nInternal = i18n;
|
||
|
let composer = i18nInternal.__getInstance(instance);
|
||
|
if (composer == null) {
|
||
|
const type = instance.type;
|
||
|
const composerOptions = assign({}, options);
|
||
|
if (type.__i18n) {
|
||
|
composerOptions.__i18n = type.__i18n;
|
||
|
}
|
||
|
if (global) {
|
||
|
composerOptions.__root = global;
|
||
|
}
|
||
|
composer = createComposer(composerOptions);
|
||
|
setupLifeCycle(i18nInternal, instance);
|
||
|
i18nInternal.__setInstance(instance, composer);
|
||
|
}
|
||
|
return composer;
|
||
|
}
|
||
|
function getComposer(i18n, target, useComponent = false) {
|
||
|
let composer = null;
|
||
|
const root = target.root;
|
||
|
let current = target.parent;
|
||
|
while (current != null) {
|
||
|
const i18nInternal = i18n;
|
||
|
if (i18n.mode === "composition") {
|
||
|
composer = i18nInternal.__getInstance(current);
|
||
|
} else {
|
||
|
const vueI18n = i18nInternal.__getInstance(current);
|
||
|
if (vueI18n != null) {
|
||
|
composer = vueI18n.__composer;
|
||
|
}
|
||
|
if (useComponent && composer && !composer[InejctWithOption]) {
|
||
|
composer = null;
|
||
|
}
|
||
|
}
|
||
|
if (composer != null) {
|
||
|
break;
|
||
|
}
|
||
|
if (root === current) {
|
||
|
break;
|
||
|
}
|
||
|
current = current.parent;
|
||
|
}
|
||
|
return composer;
|
||
|
}
|
||
|
function setupLifeCycle(i18n, target, composer) {
|
||
|
onMounted(() => {
|
||
|
}, target);
|
||
|
onUnmounted(() => {
|
||
|
i18n.__deleteInstance(target);
|
||
|
}, target);
|
||
|
}
|
||
|
const globalExportProps = [
|
||
|
"locale",
|
||
|
"fallbackLocale",
|
||
|
"availableLocales"
|
||
|
];
|
||
|
const globalExportMethods = ["t", "rt", "d", "n", "tm"];
|
||
|
function injectGlobalFields(app, composer) {
|
||
|
const i18n = /* @__PURE__ */ Object.create(null);
|
||
|
globalExportProps.forEach((prop) => {
|
||
|
const desc = Object.getOwnPropertyDescriptor(composer, prop);
|
||
|
if (!desc) {
|
||
|
throw createI18nError(22);
|
||
|
}
|
||
|
const wrap = isRef(desc.value) ? {
|
||
|
get() {
|
||
|
return desc.value.value;
|
||
|
},
|
||
|
set(val) {
|
||
|
desc.value.value = val;
|
||
|
}
|
||
|
} : {
|
||
|
get() {
|
||
|
return desc.get && desc.get();
|
||
|
}
|
||
|
};
|
||
|
Object.defineProperty(i18n, prop, wrap);
|
||
|
});
|
||
|
app.config.globalProperties.$i18n = i18n;
|
||
|
globalExportMethods.forEach((method) => {
|
||
|
const desc = Object.getOwnPropertyDescriptor(composer, method);
|
||
|
if (!desc || !desc.value) {
|
||
|
throw createI18nError(22);
|
||
|
}
|
||
|
Object.defineProperty(app.config.globalProperties, `$${method}`, desc);
|
||
|
});
|
||
|
}
|
||
|
registerMessageCompiler(compileToFunction);
|
||
|
{
|
||
|
initFeatureFlags();
|
||
|
}
|
||
|
if (__INTLIFY_PROD_DEVTOOLS__) {
|
||
|
const target = getGlobalThis();
|
||
|
target.__INTLIFY__ = true;
|
||
|
setDevToolsHook(target.__INTLIFY_DEVTOOLS_GLOBAL_HOOK__);
|
||
|
}
|
||
|
export { createI18n as c, useI18n as u };
|