@intlayer/vue-i18n 9.0.0-canary.7 → 9.0.0-canary.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/createI18n.mjs
CHANGED
|
@@ -3,12 +3,18 @@ import { parseTranslateArguments, resolveVueMessage } from "./resolveVueMessage.
|
|
|
3
3
|
import { internationalization, log } from "@intlayer/config/built";
|
|
4
4
|
import * as ANSIColors from "@intlayer/config/colors";
|
|
5
5
|
import { colorize, getAppLogger } from "@intlayer/config/logger";
|
|
6
|
+
import { getIntlayer } from "@intlayer/core/interpreter";
|
|
6
7
|
import { computed, inject } from "vue";
|
|
7
8
|
import { createIntlayerClient, installIntlayer, useLocale } from "vue-intlayer";
|
|
8
9
|
|
|
9
10
|
//#region src/createI18n.ts
|
|
10
11
|
const VERSION = "9.13.1";
|
|
11
12
|
const I18nInjectionKey = Symbol("global-i18n");
|
|
13
|
+
/**
|
|
14
|
+
* Dictionary key used for keys that carry no explicit namespace and are not
|
|
15
|
+
* dot-namespaced (i18next-style flat keys, e.g. `t('greeting')`).
|
|
16
|
+
*/
|
|
17
|
+
const DEFAULT_NAMESPACE = "translation";
|
|
12
18
|
const navigatePath = (objectValue, path) => {
|
|
13
19
|
if (!path) return objectValue;
|
|
14
20
|
let current = objectValue;
|
|
@@ -27,17 +33,39 @@ const navigatePath = (objectValue, path) => {
|
|
|
27
33
|
* 3. The first key segment as the dictionary key (`'home.title'` →
|
|
28
34
|
* dictionary `home`, path `title`)
|
|
29
35
|
*/
|
|
30
|
-
|
|
36
|
+
/** Resolves a single dictionary by key and navigates to the given path. */
|
|
37
|
+
const lookupInDictionary = (locale, dictionaryKey, path) => {
|
|
38
|
+
try {
|
|
39
|
+
const value = navigatePath(getIntlayer(dictionaryKey, locale), path);
|
|
40
|
+
if (value !== void 0 && value !== null) return value;
|
|
41
|
+
} catch {}
|
|
42
|
+
};
|
|
43
|
+
const lookupRaw = (locale, namespace, key) => {
|
|
44
|
+
let targetNamespace = namespace;
|
|
45
|
+
let path = key;
|
|
31
46
|
if (key.includes(":")) {
|
|
32
47
|
const separatorIndex = key.indexOf(":");
|
|
33
|
-
key.slice(0, separatorIndex);
|
|
34
|
-
key.slice(separatorIndex + 1);
|
|
48
|
+
targetNamespace = key.slice(0, separatorIndex);
|
|
49
|
+
path = key.slice(separatorIndex + 1);
|
|
50
|
+
}
|
|
51
|
+
if (targetNamespace) {
|
|
52
|
+
const value = lookupInDictionary(locale, targetNamespace, path);
|
|
53
|
+
if (value !== void 0) return value;
|
|
54
|
+
}
|
|
55
|
+
if (path.includes(".")) {
|
|
56
|
+
const separatorIndex = path.indexOf(".");
|
|
57
|
+
const value = lookupInDictionary(locale, path.slice(0, separatorIndex), path.slice(separatorIndex + 1));
|
|
58
|
+
if (value !== void 0) return value;
|
|
59
|
+
}
|
|
60
|
+
if (!targetNamespace) {
|
|
61
|
+
const value = lookupInDictionary(locale, DEFAULT_NAMESPACE, path);
|
|
62
|
+
if (value !== void 0) return value;
|
|
35
63
|
}
|
|
36
64
|
};
|
|
37
65
|
/** Translates a key with vue-i18n's polymorphic argument list. */
|
|
38
66
|
const translateKey = (locale, namespace, key, args, fallbackMessages) => {
|
|
39
67
|
const { values, count, defaultMessage } = parseTranslateArguments(args);
|
|
40
|
-
const rawValue = lookupRaw(namespace, key);
|
|
68
|
+
const rawValue = lookupRaw(locale, namespace, key);
|
|
41
69
|
if (rawValue === void 0) {
|
|
42
70
|
if (fallbackMessages?.[locale]) {
|
|
43
71
|
const targetPath = namespace ? `${namespace}.${key}` : key;
|
|
@@ -76,8 +104,8 @@ const createI18n = ((options = {}) => {
|
|
|
76
104
|
fallbackLocale: options.fallbackLocale ?? internationalization?.defaultLocale,
|
|
77
105
|
t: globalTranslate,
|
|
78
106
|
tc: globalTranslate,
|
|
79
|
-
te: (key) => lookupRaw(void 0, key) !== void 0,
|
|
80
|
-
tm: (key) => lookupRaw(void 0, key) ?? {},
|
|
107
|
+
te: (key) => lookupRaw(currentLocale(), void 0, key) !== void 0,
|
|
108
|
+
tm: (key) => lookupRaw(currentLocale(), void 0, key) ?? {},
|
|
81
109
|
rt: (message, ...args) => {
|
|
82
110
|
const { values, count } = parseTranslateArguments(args);
|
|
83
111
|
return resolveVueMessage(message, values, count, currentLocale());
|
|
@@ -181,8 +209,8 @@ const useI18n = (options) => {
|
|
|
181
209
|
availableLocales,
|
|
182
210
|
t: translate,
|
|
183
211
|
tc: translate,
|
|
184
|
-
te: (key) => lookupRaw(namespace, String(key)) !== void 0,
|
|
185
|
-
tm: (key) => lookupRaw(namespace, String(key)) ?? {},
|
|
212
|
+
te: (key) => lookupRaw(currentLocale.value, namespace, String(key)) !== void 0,
|
|
213
|
+
tm: (key) => lookupRaw(currentLocale.value, namespace, String(key)) ?? {},
|
|
186
214
|
rt: (message, ...args) => {
|
|
187
215
|
const { values, count } = parseTranslateArguments(args);
|
|
188
216
|
return resolveVueMessage(message, values, count, currentLocale.value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createI18n.mjs","names":[],"sources":["../../src/createI18n.ts"],"sourcesContent":["import { internationalization, log } from '@intlayer/config/built';\nimport * as ANSIColors from '@intlayer/config/colors';\nimport { colorize, getAppLogger } from '@intlayer/config/logger';\nimport type { ValidDotPathsFor } from '@intlayer/core/transpiler';\nimport type {\n DictionaryKeys,\n LocalesValues,\n} from '@intlayer/types/module_augmentation';\nimport type {\n App,\n DirectiveBinding,\n InjectionKey,\n WritableComputedRef,\n} from 'vue';\nimport { computed, inject } from 'vue';\nimport type { createI18n as _createI18n, I18n } from 'vue-i18n';\nimport { createIntlayerClient, installIntlayer, useLocale } from 'vue-intlayer';\nimport {\n type DateTimeFormatsConfig,\n formatDateValue,\n formatNumberValue,\n type NumberFormatsConfig,\n} from './formats';\nimport {\n parseTranslateArguments,\n resolveVueMessage,\n} from './resolveVueMessage';\n\nexport const VERSION = '9.13.1';\nexport const I18nInjectionKey: InjectionKey<I18n> = Symbol('global-i18n');\n\nconst navigatePath = (objectValue: unknown, path: string): unknown => {\n if (!path) return objectValue;\n let current: unknown = objectValue;\n for (const part of path.split('.')) {\n if (\n current === null ||\n current === undefined ||\n typeof current !== 'object'\n ) {\n return undefined;\n }\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n};\n\n/**\n * Looks up a raw value for a vue-i18n key against intlayer dictionaries.\n *\n * Resolution order:\n * 1. `ns:key` prefix → dictionary `ns`\n * 2. The default namespace dictionary with the full dot-path\n * 3. The first key segment as the dictionary key (`'home.title'` →\n * dictionary `home`, path `title`)\n */\nconst lookupRaw = (namespace: string | undefined, key: string): unknown => {\n let _targetNamespace = namespace;\n let _path = key;\n\n if (key.includes(':')) {\n const separatorIndex = key.indexOf(':');\n _targetNamespace = key.slice(0, separatorIndex);\n _path = key.slice(separatorIndex + 1);\n }\n\n // Without getDictionaries, global translation fallback to intlayer dictionaries\n // is disabled for bundle optimization purposes.\n // We only lookup if the namespace exists globally, but since we don't have getDictionaries\n // we rely strictly on what vue-i18n already has in its messages.\n\n return undefined;\n};\n\n/** Translates a key with vue-i18n's polymorphic argument list. */\nconst translateKey = (\n locale: string,\n namespace: string | undefined,\n key: string,\n args: unknown[],\n fallbackMessages?: Record<string, unknown>\n): string => {\n const { values, count, defaultMessage } = parseTranslateArguments(args);\n\n const rawValue = lookupRaw(namespace, key);\n\n if (rawValue === undefined) {\n if (fallbackMessages?.[locale]) {\n // Defer to the user's provided messages if not found in dictionaries\n const targetPath = namespace ? `${namespace}.${key}` : key;\n const fallbackValue = navigatePath(fallbackMessages[locale], targetPath);\n if (fallbackValue !== undefined) {\n return resolveVueMessage(\n fallbackValue,\n values,\n count,\n locale as LocalesValues\n );\n }\n }\n if (defaultMessage !== undefined) {\n return resolveVueMessage(\n defaultMessage,\n values,\n count,\n locale as LocalesValues\n );\n }\n return key;\n }\n\n return resolveVueMessage(rawValue, values, count, locale as LocalesValues);\n};\n\nconst getAvailableLocales = (): string[] =>\n internationalization?.locales?.map(String) ?? [];\n\nconst warnDeprecatedRuntimeMessages = (location: string) => {\n const appLogger = getAppLogger({ log });\n appLogger(\n `${colorize(location, ANSIColors.CYAN)} has no effect with ${colorize('@intlayer/vue-i18n', ANSIColors.MAGENTA)} — translations are managed by the compiled intlayer dictionaries.`\n );\n};\n\n/** Value accepted by the `v-t` directive. */\ntype TranslateDirectiveValue =\n | string\n | { path: string; args?: Record<string, unknown>; choice?: number };\n\nexport const createI18n: typeof _createI18n = ((\n options: Record<string, unknown> = {}\n) => {\n const fallbackMessages = options.messages as\n | Record<string, unknown>\n | undefined;\n\n if (\n options.messages !== undefined &&\n process.env.NODE_ENV === 'development'\n ) {\n const appLogger = getAppLogger({ log });\n appLogger(\n `${colorize('createI18n', ANSIColors.CYAN)}: the ${colorize('`messages`', ANSIColors.CYAN)} option is used as a fallback. For optimal bundle size, remove the locale JSON imports and use ${colorize('useDictionary', ANSIColors.CYAN)} or compile your intlayer dictionaries instead:\\n ${colorize('Before:', ANSIColors.GREY)} createI18n({ messages: { en, fr, … } })\\n ${colorize('After: ', ANSIColors.GREY)} createI18n({})`\n );\n }\n\n const client = createIntlayerClient(options.locale as LocalesValues);\n\n const datetimeFormats = options.datetimeFormats as\n | DateTimeFormatsConfig\n | undefined;\n const numberFormats = options.numberFormats as\n | NumberFormatsConfig\n | undefined;\n\n const currentLocale = (): string => String(client.locale.value);\n\n /** Writable ref matching vue-i18n's composition-mode `global.locale`. */\n const localeRef: WritableComputedRef<string> = computed({\n get: () => currentLocale(),\n set: (newLocale: string) => {\n client.setLocale(newLocale as LocalesValues);\n },\n });\n\n const globalTranslate = (key: string, ...args: unknown[]): string =>\n translateKey(currentLocale(), undefined, key, args, fallbackMessages);\n\n const globalDate = (\n value: Date | number | string,\n formatOrOptions?: string | Intl.DateTimeFormatOptions\n ): string =>\n formatDateValue(value, formatOrOptions, currentLocale(), datetimeFormats);\n\n const globalNumber = (\n value: number,\n formatOrOptions?: string | Intl.NumberFormatOptions\n ): string =>\n formatNumberValue(value, formatOrOptions, currentLocale(), numberFormats);\n\n const global = {\n locale: localeRef,\n availableLocales: getAvailableLocales(),\n fallbackLocale: (options.fallbackLocale ??\n internationalization?.defaultLocale) as string,\n t: globalTranslate,\n tc: globalTranslate,\n te: (key: string): boolean => lookupRaw(undefined, key) !== undefined,\n tm: (key: string): unknown => lookupRaw(undefined, key) ?? {},\n rt: (message: unknown, ...args: unknown[]): string => {\n const { values, count } = parseTranslateArguments(args);\n return resolveVueMessage(\n message,\n values,\n count,\n currentLocale() as LocalesValues\n );\n },\n d: globalDate,\n n: globalNumber,\n setLocaleMessage: (_locale: string, _messages: unknown) => {\n warnDeprecatedRuntimeMessages('setLocaleMessage');\n },\n mergeLocaleMessage: (_locale: string, _messages: unknown) => {\n warnDeprecatedRuntimeMessages('mergeLocaleMessage');\n },\n getLocaleMessage: (_locale: string): Record<string, unknown> => {\n warnDeprecatedRuntimeMessages('getLocaleMessage');\n // We do not load global dictionaries anymore for bundle optimization.\n // The user should use useDictionary or rely on manually provided messages.\n return {};\n },\n };\n\n /** Legacy Options-API facade (`this.$i18n`) with a string `locale`. */\n const legacyI18n = {\n get locale(): string {\n return currentLocale();\n },\n set locale(newLocale: string) {\n client.setLocale(newLocale as LocalesValues);\n },\n get availableLocales(): string[] {\n return getAvailableLocales();\n },\n t: globalTranslate,\n tc: globalTranslate,\n te: global.te,\n tm: global.tm,\n rt: global.rt,\n d: globalDate,\n n: globalNumber,\n };\n\n const applyTranslateDirective = (\n element: HTMLElement,\n binding: DirectiveBinding<TranslateDirectiveValue>\n ) => {\n const bindingValue = binding.value;\n if (typeof bindingValue === 'string') {\n element.textContent = globalTranslate(bindingValue);\n } else if (bindingValue && typeof bindingValue === 'object') {\n const directiveArgs: unknown[] = [];\n if (bindingValue.args) directiveArgs.push(bindingValue.args);\n if (typeof bindingValue.choice === 'number')\n directiveArgs.push(bindingValue.choice);\n element.textContent = globalTranslate(\n bindingValue.path,\n ...directiveArgs\n );\n }\n };\n\n const i18nInstance = {\n global,\n mode: options.legacy === true ? 'legacy' : 'composition',\n __optionsMessages: fallbackMessages,\n install(app: App) {\n installIntlayer(app, {\n locale: options.locale as LocalesValues,\n });\n\n // Provide under I18nInjectionKey to satisfy inject(I18nInjectionKey) calls\n app.provide(I18nInjectionKey, i18nInstance as unknown as I18n);\n\n // Legacy API support ($t / $tc / $te / $tm / $rt / $d / $n / $i18n)\n app.config.globalProperties.$t = globalTranslate;\n (app.config.globalProperties as Record<string, unknown>).$tc =\n globalTranslate;\n (app.config.globalProperties as Record<string, unknown>).$te = global.te;\n (app.config.globalProperties as Record<string, unknown>).$tm = global.tm;\n (app.config.globalProperties as Record<string, unknown>).$rt = global.rt;\n (app.config.globalProperties as Record<string, unknown>).$d = globalDate;\n (app.config.globalProperties as Record<string, unknown>).$n =\n globalNumber;\n (app.config.globalProperties as Record<string, unknown>).$i18n =\n legacyI18n;\n\n // `v-t` directive support\n app.directive('t', {\n beforeMount: applyTranslateDirective,\n updated: applyTranslateDirective,\n });\n },\n };\n\n return i18nInstance as unknown as I18n;\n}) as typeof _createI18n;\n\n/**\n * Composable providing a typed `t()` function scoped to a dictionary namespace.\n * Pass `{ namespace: 'myDict' }` to restrict keys to valid dot-notation paths\n * within that intlayer dictionary (autocompleted and validated at compile time).\n *\n * Supports vue-i18n's full message syntax: named (`{name}`) and list (`{0}`)\n * interpolation, pipe choice messages (`'car | cars'` with a count argument),\n * plus `te`/`tm`/`rt` and `Intl`-backed `d()`/`n()` formatters.\n *\n * @example\n * ```ts\n * const { t } = useI18n({ namespace: 'about' });\n * t('counter.label'); // ✓ typed; compile error if key doesn't exist\n * t('apples', 5); // pipe plural choice\n * ```\n */\nexport const useI18n = <N extends DictionaryKeys = DictionaryKeys>(\n options?: Record<string, unknown> & { namespace?: N }\n): {\n locale: WritableComputedRef<string>;\n availableLocales: string[];\n t: <P extends ValidDotPathsFor<N>>(key: P, ...args: unknown[]) => string;\n tc: <P extends ValidDotPathsFor<N>>(key: P, ...args: unknown[]) => string;\n te: <P extends ValidDotPathsFor<N>>(key: P) => boolean;\n tm: <P extends ValidDotPathsFor<N>>(key: P) => unknown;\n rt: (message: unknown, ...args: unknown[]) => string;\n d: (\n value: Date | number | string,\n formatOrOptions?: string | Intl.DateTimeFormatOptions\n ) => string;\n n: (\n value: number,\n formatOrOptions?: string | Intl.NumberFormatOptions\n ) => string;\n} => {\n const { locale: currentLocale, setLocale, availableLocales } = useLocale();\n const instance = inject(I18nInjectionKey) as\n | Record<string, unknown>\n | undefined;\n const fallbackMessages = instance?.__optionsMessages as\n | Record<string, unknown>\n | undefined;\n\n const namespace = options?.namespace as string | undefined as N | undefined;\n\n const datetimeFormats = options?.datetimeFormats as\n | DateTimeFormatsConfig\n | undefined;\n const numberFormats = options?.numberFormats as\n | NumberFormatsConfig\n | undefined;\n\n const localeRef = computed({\n get: () => currentLocale.value as string,\n set: (newLocale: string) => {\n setLocale(newLocale as LocalesValues);\n },\n });\n\n const translate = <P extends ValidDotPathsFor<N>>(\n key: P,\n ...args: unknown[]\n ): string =>\n translateKey(\n currentLocale.value,\n namespace,\n String(key),\n args,\n fallbackMessages\n );\n\n return {\n locale: localeRef,\n availableLocales: availableLocales as string[],\n t: translate,\n tc: translate,\n te: <P extends ValidDotPathsFor<N>>(key: P): boolean =>\n lookupRaw(namespace, String(key)) !== undefined,\n tm: <P extends ValidDotPathsFor<N>>(key: P): unknown =>\n lookupRaw(namespace, String(key)) ?? {},\n rt: (message: unknown, ...args: unknown[]): string => {\n const { values, count } = parseTranslateArguments(args);\n return resolveVueMessage(\n message,\n values,\n count,\n currentLocale.value as LocalesValues\n );\n },\n d: (\n value: Date | number | string,\n formatOrOptions?: string | Intl.DateTimeFormatOptions\n ): string =>\n formatDateValue(\n value,\n formatOrOptions,\n currentLocale.value,\n datetimeFormats\n ),\n n: (\n value: number,\n formatOrOptions?: string | Intl.NumberFormatOptions\n ): string =>\n formatNumberValue(\n value,\n formatOrOptions,\n currentLocale.value,\n numberFormats\n ),\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createI18n.mjs","names":[],"sources":["../../src/createI18n.ts"],"sourcesContent":["import { internationalization, log } from '@intlayer/config/built';\nimport * as ANSIColors from '@intlayer/config/colors';\nimport { colorize, getAppLogger } from '@intlayer/config/logger';\nimport { getIntlayer } from '@intlayer/core/interpreter';\nimport type { ValidDotPathsFor } from '@intlayer/core/transpiler';\nimport type {\n DictionaryKeys,\n LocalesValues,\n} from '@intlayer/types/module_augmentation';\nimport type {\n App,\n DirectiveBinding,\n InjectionKey,\n WritableComputedRef,\n} from 'vue';\nimport { computed, inject } from 'vue';\nimport type { createI18n as _createI18n, I18n } from 'vue-i18n';\nimport { createIntlayerClient, installIntlayer, useLocale } from 'vue-intlayer';\nimport {\n type DateTimeFormatsConfig,\n formatDateValue,\n formatNumberValue,\n type NumberFormatsConfig,\n} from './formats';\nimport {\n parseTranslateArguments,\n resolveVueMessage,\n} from './resolveVueMessage';\n\nexport const VERSION = '9.13.1';\nexport const I18nInjectionKey: InjectionKey<I18n> = Symbol('global-i18n');\n\n/**\n * Dictionary key used for keys that carry no explicit namespace and are not\n * dot-namespaced (i18next-style flat keys, e.g. `t('greeting')`).\n */\nconst DEFAULT_NAMESPACE = 'translation';\n\nconst navigatePath = (objectValue: unknown, path: string): unknown => {\n if (!path) return objectValue;\n let current: unknown = objectValue;\n for (const part of path.split('.')) {\n if (\n current === null ||\n current === undefined ||\n typeof current !== 'object'\n ) {\n return undefined;\n }\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n};\n\n/**\n * Looks up a raw value for a vue-i18n key against intlayer dictionaries.\n *\n * Resolution order:\n * 1. `ns:key` prefix → dictionary `ns`\n * 2. The default namespace dictionary with the full dot-path\n * 3. The first key segment as the dictionary key (`'home.title'` →\n * dictionary `home`, path `title`)\n */\n/** Resolves a single dictionary by key and navigates to the given path. */\nconst lookupInDictionary = (\n locale: string,\n dictionaryKey: string,\n path: string\n): unknown => {\n try {\n const dictionary = getIntlayer(\n dictionaryKey as DictionaryKeys,\n locale as LocalesValues\n );\n const value = navigatePath(dictionary, path);\n if (value !== undefined && value !== null) return value;\n } catch {}\n return undefined;\n};\n\nconst lookupRaw = (\n locale: string,\n namespace: string | undefined,\n key: string\n): unknown => {\n let targetNamespace = namespace;\n let path = key;\n\n if (key.includes(':')) {\n const separatorIndex = key.indexOf(':');\n targetNamespace = key.slice(0, separatorIndex);\n path = key.slice(separatorIndex + 1);\n }\n\n // 1. Explicit namespace (from `useI18n({ namespace })` or a `ns:key` prefix)\n if (targetNamespace) {\n const value = lookupInDictionary(locale, targetNamespace, path);\n if (value !== undefined) return value;\n }\n\n // 2. First key segment as the dictionary key (`'home.title'` →\n // dictionary `home`, path `title`). This makes the global `t()` work\n // without a namespace, matching how intlayer splits dictionaries by key.\n if (path.includes('.')) {\n const separatorIndex = path.indexOf('.');\n const value = lookupInDictionary(\n locale,\n path.slice(0, separatorIndex),\n path.slice(separatorIndex + 1)\n );\n if (value !== undefined) return value;\n }\n\n // 3. Default `translation` bucket for flat, namespace-less keys.\n if (!targetNamespace) {\n const value = lookupInDictionary(locale, DEFAULT_NAMESPACE, path);\n if (value !== undefined) return value;\n }\n\n return undefined;\n};\n\n/** Translates a key with vue-i18n's polymorphic argument list. */\nconst translateKey = (\n locale: string,\n namespace: string | undefined,\n key: string,\n args: unknown[],\n fallbackMessages?: Record<string, unknown>\n): string => {\n const { values, count, defaultMessage } = parseTranslateArguments(args);\n\n const rawValue = lookupRaw(locale, namespace, key);\n\n if (rawValue === undefined) {\n if (fallbackMessages?.[locale]) {\n // Defer to the user's provided messages if not found in dictionaries\n const targetPath = namespace ? `${namespace}.${key}` : key;\n const fallbackValue = navigatePath(fallbackMessages[locale], targetPath);\n if (fallbackValue !== undefined) {\n return resolveVueMessage(\n fallbackValue,\n values,\n count,\n locale as LocalesValues\n );\n }\n }\n if (defaultMessage !== undefined) {\n return resolveVueMessage(\n defaultMessage,\n values,\n count,\n locale as LocalesValues\n );\n }\n return key;\n }\n\n return resolveVueMessage(rawValue, values, count, locale as LocalesValues);\n};\n\nconst getAvailableLocales = (): string[] =>\n internationalization?.locales?.map(String) ?? [];\n\nconst warnDeprecatedRuntimeMessages = (location: string) => {\n const appLogger = getAppLogger({ log });\n appLogger(\n `${colorize(location, ANSIColors.CYAN)} has no effect with ${colorize('@intlayer/vue-i18n', ANSIColors.MAGENTA)} — translations are managed by the compiled intlayer dictionaries.`\n );\n};\n\n/** Value accepted by the `v-t` directive. */\ntype TranslateDirectiveValue =\n | string\n | { path: string; args?: Record<string, unknown>; choice?: number };\n\nexport const createI18n: typeof _createI18n = ((\n options: Record<string, unknown> = {}\n) => {\n const fallbackMessages = options.messages as\n | Record<string, unknown>\n | undefined;\n\n if (\n options.messages !== undefined &&\n process.env.NODE_ENV === 'development'\n ) {\n const appLogger = getAppLogger({ log });\n appLogger(\n `${colorize('createI18n', ANSIColors.CYAN)}: the ${colorize('`messages`', ANSIColors.CYAN)} option is used as a fallback. For optimal bundle size, remove the locale JSON imports and use ${colorize('useDictionary', ANSIColors.CYAN)} or compile your intlayer dictionaries instead:\\n ${colorize('Before:', ANSIColors.GREY)} createI18n({ messages: { en, fr, … } })\\n ${colorize('After: ', ANSIColors.GREY)} createI18n({})`\n );\n }\n\n const client = createIntlayerClient(options.locale as LocalesValues);\n\n const datetimeFormats = options.datetimeFormats as\n | DateTimeFormatsConfig\n | undefined;\n const numberFormats = options.numberFormats as\n | NumberFormatsConfig\n | undefined;\n\n const currentLocale = (): string => String(client.locale.value);\n\n /** Writable ref matching vue-i18n's composition-mode `global.locale`. */\n const localeRef: WritableComputedRef<string> = computed({\n get: () => currentLocale(),\n set: (newLocale: string) => {\n client.setLocale(newLocale as LocalesValues);\n },\n });\n\n const globalTranslate = (key: string, ...args: unknown[]): string =>\n translateKey(currentLocale(), undefined, key, args, fallbackMessages);\n\n const globalDate = (\n value: Date | number | string,\n formatOrOptions?: string | Intl.DateTimeFormatOptions\n ): string =>\n formatDateValue(value, formatOrOptions, currentLocale(), datetimeFormats);\n\n const globalNumber = (\n value: number,\n formatOrOptions?: string | Intl.NumberFormatOptions\n ): string =>\n formatNumberValue(value, formatOrOptions, currentLocale(), numberFormats);\n\n const global = {\n locale: localeRef,\n availableLocales: getAvailableLocales(),\n fallbackLocale: (options.fallbackLocale ??\n internationalization?.defaultLocale) as string,\n t: globalTranslate,\n tc: globalTranslate,\n te: (key: string): boolean =>\n lookupRaw(currentLocale(), undefined, key) !== undefined,\n tm: (key: string): unknown =>\n lookupRaw(currentLocale(), undefined, key) ?? {},\n rt: (message: unknown, ...args: unknown[]): string => {\n const { values, count } = parseTranslateArguments(args);\n return resolveVueMessage(\n message,\n values,\n count,\n currentLocale() as LocalesValues\n );\n },\n d: globalDate,\n n: globalNumber,\n setLocaleMessage: (_locale: string, _messages: unknown) => {\n warnDeprecatedRuntimeMessages('setLocaleMessage');\n },\n mergeLocaleMessage: (_locale: string, _messages: unknown) => {\n warnDeprecatedRuntimeMessages('mergeLocaleMessage');\n },\n getLocaleMessage: (_locale: string): Record<string, unknown> => {\n warnDeprecatedRuntimeMessages('getLocaleMessage');\n // We do not load global dictionaries anymore for bundle optimization.\n // The user should use useDictionary or rely on manually provided messages.\n return {};\n },\n };\n\n /** Legacy Options-API facade (`this.$i18n`) with a string `locale`. */\n const legacyI18n = {\n get locale(): string {\n return currentLocale();\n },\n set locale(newLocale: string) {\n client.setLocale(newLocale as LocalesValues);\n },\n get availableLocales(): string[] {\n return getAvailableLocales();\n },\n t: globalTranslate,\n tc: globalTranslate,\n te: global.te,\n tm: global.tm,\n rt: global.rt,\n d: globalDate,\n n: globalNumber,\n };\n\n const applyTranslateDirective = (\n element: HTMLElement,\n binding: DirectiveBinding<TranslateDirectiveValue>\n ) => {\n const bindingValue = binding.value;\n if (typeof bindingValue === 'string') {\n element.textContent = globalTranslate(bindingValue);\n } else if (bindingValue && typeof bindingValue === 'object') {\n const directiveArgs: unknown[] = [];\n if (bindingValue.args) directiveArgs.push(bindingValue.args);\n if (typeof bindingValue.choice === 'number')\n directiveArgs.push(bindingValue.choice);\n element.textContent = globalTranslate(\n bindingValue.path,\n ...directiveArgs\n );\n }\n };\n\n const i18nInstance = {\n global,\n mode: options.legacy === true ? 'legacy' : 'composition',\n __optionsMessages: fallbackMessages,\n install(app: App) {\n installIntlayer(app, {\n locale: options.locale as LocalesValues,\n });\n\n // Provide under I18nInjectionKey to satisfy inject(I18nInjectionKey) calls\n app.provide(I18nInjectionKey, i18nInstance as unknown as I18n);\n\n // Legacy API support ($t / $tc / $te / $tm / $rt / $d / $n / $i18n)\n app.config.globalProperties.$t = globalTranslate;\n (app.config.globalProperties as Record<string, unknown>).$tc =\n globalTranslate;\n (app.config.globalProperties as Record<string, unknown>).$te = global.te;\n (app.config.globalProperties as Record<string, unknown>).$tm = global.tm;\n (app.config.globalProperties as Record<string, unknown>).$rt = global.rt;\n (app.config.globalProperties as Record<string, unknown>).$d = globalDate;\n (app.config.globalProperties as Record<string, unknown>).$n =\n globalNumber;\n (app.config.globalProperties as Record<string, unknown>).$i18n =\n legacyI18n;\n\n // `v-t` directive support\n app.directive('t', {\n beforeMount: applyTranslateDirective,\n updated: applyTranslateDirective,\n });\n },\n };\n\n return i18nInstance as unknown as I18n;\n}) as typeof _createI18n;\n\n/**\n * Composable providing a typed `t()` function scoped to a dictionary namespace.\n * Pass `{ namespace: 'myDict' }` to restrict keys to valid dot-notation paths\n * within that intlayer dictionary (autocompleted and validated at compile time).\n *\n * Supports vue-i18n's full message syntax: named (`{name}`) and list (`{0}`)\n * interpolation, pipe choice messages (`'car | cars'` with a count argument),\n * plus `te`/`tm`/`rt` and `Intl`-backed `d()`/`n()` formatters.\n *\n * @example\n * ```ts\n * const { t } = useI18n({ namespace: 'about' });\n * t('counter.label'); // ✓ typed; compile error if key doesn't exist\n * t('apples', 5); // pipe plural choice\n * ```\n */\nexport const useI18n = <N extends DictionaryKeys = DictionaryKeys>(\n options?: Record<string, unknown> & { namespace?: N }\n): {\n locale: WritableComputedRef<string>;\n availableLocales: string[];\n t: <P extends ValidDotPathsFor<N>>(key: P, ...args: unknown[]) => string;\n tc: <P extends ValidDotPathsFor<N>>(key: P, ...args: unknown[]) => string;\n te: <P extends ValidDotPathsFor<N>>(key: P) => boolean;\n tm: <P extends ValidDotPathsFor<N>>(key: P) => unknown;\n rt: (message: unknown, ...args: unknown[]) => string;\n d: (\n value: Date | number | string,\n formatOrOptions?: string | Intl.DateTimeFormatOptions\n ) => string;\n n: (\n value: number,\n formatOrOptions?: string | Intl.NumberFormatOptions\n ) => string;\n} => {\n const { locale: currentLocale, setLocale, availableLocales } = useLocale();\n const instance = inject(I18nInjectionKey) as\n | Record<string, unknown>\n | undefined;\n const fallbackMessages = instance?.__optionsMessages as\n | Record<string, unknown>\n | undefined;\n\n const namespace = options?.namespace as string | undefined as N | undefined;\n\n const datetimeFormats = options?.datetimeFormats as\n | DateTimeFormatsConfig\n | undefined;\n const numberFormats = options?.numberFormats as\n | NumberFormatsConfig\n | undefined;\n\n const localeRef = computed({\n get: () => currentLocale.value as string,\n set: (newLocale: string) => {\n setLocale(newLocale as LocalesValues);\n },\n });\n\n const translate = <P extends ValidDotPathsFor<N>>(\n key: P,\n ...args: unknown[]\n ): string =>\n translateKey(\n currentLocale.value,\n namespace,\n String(key),\n args,\n fallbackMessages\n );\n\n return {\n locale: localeRef,\n availableLocales: availableLocales as string[],\n t: translate,\n tc: translate,\n te: <P extends ValidDotPathsFor<N>>(key: P): boolean =>\n lookupRaw(currentLocale.value, namespace, String(key)) !== undefined,\n tm: <P extends ValidDotPathsFor<N>>(key: P): unknown =>\n lookupRaw(currentLocale.value, namespace, String(key)) ?? {},\n rt: (message: unknown, ...args: unknown[]): string => {\n const { values, count } = parseTranslateArguments(args);\n return resolveVueMessage(\n message,\n values,\n count,\n currentLocale.value as LocalesValues\n );\n },\n d: (\n value: Date | number | string,\n formatOrOptions?: string | Intl.DateTimeFormatOptions\n ): string =>\n formatDateValue(\n value,\n formatOrOptions,\n currentLocale.value,\n datetimeFormats\n ),\n n: (\n value: number,\n formatOrOptions?: string | Intl.NumberFormatOptions\n ): string =>\n formatNumberValue(\n value,\n formatOrOptions,\n currentLocale.value,\n numberFormats\n ),\n };\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createI18n.d.ts","names":[],"sources":["../../src/createI18n.ts"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"createI18n.d.ts","names":[],"sources":["../../src/createI18n.ts"],"mappings":";;;;;;cA6Ba,OAAA;AAAA,cACA,gBAAA,EAAkB,YAAA,CAAa,IAAA;AAAA,cAmJ/B,UAAA,SAAmB,YAAA;;;;;AAnJhC;;;;;AAmJA;;;;;AAkLA;;cAAa,OAAA,aAAqB,cAAA,GAAiB,cAAA,EACjD,OAAA,GAAU,MAAA;EAA4B,SAAA,GAAY,CAAA;AAAA;EAElD,MAAA,EAAQ,mBAAA;EACR,gBAAA;EACA,CAAA,aAAc,gBAAA,CAAiB,CAAA,GAAI,GAAA,EAAK,CAAA,KAAM,IAAA;EAC9C,EAAA,aAAe,gBAAA,CAAiB,CAAA,GAAI,GAAA,EAAK,CAAA,KAAM,IAAA;EAC/C,EAAA,aAAe,gBAAA,CAAiB,CAAA,GAAI,GAAA,EAAK,CAAA;EACzC,EAAA,aAAe,gBAAA,CAAiB,CAAA,GAAI,GAAA,EAAK,CAAA;EACzC,EAAA,GAAK,OAAA,cAAqB,IAAA;EAC1B,CAAA,GACE,KAAA,EAAO,IAAA,oBACP,eAAA,YAA2B,IAAA,CAAK,qBAAA;EAElC,CAAA,GACE,KAAA,UACA,eAAA,YAA2B,IAAA,CAAK,mBAAA;AAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intlayer/vue-i18n",
|
|
3
|
-
"version": "9.0.0-canary.
|
|
3
|
+
"version": "9.0.0-canary.9",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "vue-i18n API adapter for intlayer — useI18n, createI18n, and installIntlayer backed by vue-intlayer",
|
|
6
6
|
"keywords": [
|
|
@@ -75,13 +75,13 @@
|
|
|
75
75
|
"typecheck": "tsc --noEmit --project tsconfig.types.json"
|
|
76
76
|
},
|
|
77
77
|
"dependencies": {
|
|
78
|
-
"@intlayer/chokidar": "9.0.0-canary.
|
|
79
|
-
"@intlayer/config": "9.0.0-canary.
|
|
80
|
-
"@intlayer/core": "9.0.0-canary.
|
|
81
|
-
"@intlayer/dictionaries-entry": "9.0.0-canary.
|
|
82
|
-
"@intlayer/types": "9.0.0-canary.
|
|
83
|
-
"vite-intlayer": "9.0.0-canary.
|
|
84
|
-
"vue-intlayer": "9.0.0-canary.
|
|
78
|
+
"@intlayer/chokidar": "9.0.0-canary.9",
|
|
79
|
+
"@intlayer/config": "9.0.0-canary.9",
|
|
80
|
+
"@intlayer/core": "9.0.0-canary.9",
|
|
81
|
+
"@intlayer/dictionaries-entry": "9.0.0-canary.9",
|
|
82
|
+
"@intlayer/types": "9.0.0-canary.9",
|
|
83
|
+
"vite-intlayer": "9.0.0-canary.9",
|
|
84
|
+
"vue-intlayer": "9.0.0-canary.9"
|
|
85
85
|
},
|
|
86
86
|
"devDependencies": {
|
|
87
87
|
"@types/node": "25.9.4",
|