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 };