@lingui/core 3.17.0 → 3.17.2
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/CHANGELOG.md +19 -0
- package/build/cjs/compile.js +25 -34
- package/build/cjs/compile.js.map +1 -1
- package/build/cjs/index.js +213 -370
- package/build/cjs/index.js.map +1 -1
- package/build/esm/compile.js +25 -34
- package/build/esm/compile.js.map +1 -1
- package/build/esm/index.js +213 -370
- package/build/esm/index.js.map +1 -1
- package/build/index.d.ts +18 -17
- package/package.json +3 -3
package/build/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/essentials.ts","../../src/formats.ts","../../src/context.ts","../../src/eventEmitter.ts","../../src/i18n.ts","../../src/index.ts"],"sourcesContent":["export const isString = (s): s is string => typeof s === \"string\"\nexport const isFunction = (f): f is Function => typeof f === \"function\"\nexport function isEmpty(obj) {\n // null and undefined are \"empty\"\n if (obj === null || obj === undefined) return true\n\n if (obj.length > 0) return false\n if (obj.length === 0) return true\n\n return !Object.getOwnPropertyNames(obj).length\n}\n","import { isString } from \"./essentials\"\nimport { Locales } from \"./i18n\"\n\n/** Memoized cache */\nconst numberFormats = new Map<string, Intl.NumberFormat>()\nconst dateFormats = new Map<string, Intl.DateTimeFormat>()\n\nexport function date(\n locales: Locales,\n format: Intl.DateTimeFormatOptions = {},\n memoize: boolean = true,\n): (value: string | Date) => string {\n return (value) => {\n if (isString(value)) value = new Date(value)\n if (memoize) {\n const key = cacheKey<Intl.DateTimeFormatOptions>(locales, format)\n const cachedFormatter = dateFormats.get(key)\n if (cachedFormatter) {\n return cachedFormatter.format(value)\n }\n\n const formatter = new Intl.DateTimeFormat(locales, format)\n dateFormats.set(key, formatter)\n return formatter.format(value)\n }\n\n const formatter = new Intl.DateTimeFormat(locales, format)\n return formatter.format(value)\n }\n}\n\nexport function number(\n locales: Locales,\n format: Intl.NumberFormatOptions = {},\n memoize: boolean = true,\n): (value: number) => string {\n return (value) => {\n if (memoize) {\n const key = cacheKey<Intl.NumberFormatOptions>(locales, format)\n const cachedFormatter = numberFormats.get(key)\n if (cachedFormatter) {\n return cachedFormatter.format(value)\n }\n\n const formatter = new Intl.NumberFormat(locales, format)\n numberFormats.set(key, formatter)\n return formatter.format(value)\n }\n\n const formatter = new Intl.NumberFormat(locales, format)\n return formatter.format(value)\n }\n}\n\n/** Memoize helpers */\nfunction cacheKey<T>(\n locales?: string | string[],\n options: T = {} as T,\n) {\n const localeKey = Array.isArray(locales) ? locales.sort().join('-') : locales\n return `${localeKey}-${JSON.stringify(options)}`\n}\n","import {CompiledMessage, Formats, LocaleData, Locales, Values} from \"./i18n\"\nimport { date, number } from \"./formats\"\nimport { isString, isFunction } from \"./essentials\"\n\nexport const UNICODE_REGEX = /\\\\u[a-fA-F0-9]{4}|\\\\x[a-fA-F0-9]{2}/g;\n\nconst defaultFormats = (\n locale: string,\n locales: Locales,\n localeData: LocaleData = { plurals: undefined },\n formats: Formats = {}\n) => {\n locales = locales || locale\n const { plurals } = localeData\n const style = <T>(format: string | T): T =>\n isString(format)\n ? formats[format] || { style: format }\n : format as any\n const replaceOctothorpe = (value: number, message) => {\n return (ctx) => {\n const msg = isFunction(message) ? message(ctx) : message\n const norm = Array.isArray(msg) ? msg : [msg]\n const numberFormat = Object.keys(formats).length ? style('number') : {};\n const valueStr = number(locales, numberFormat)(value)\n return norm.map((m) => (isString(m) ? m.replace(\"#\", valueStr) : m))\n }\n }\n\n if (!plurals) {\n console.error(`Plurals for locale ${locale} aren't loaded. Use i18n.loadLocaleData method to load plurals for specific locale. Using other plural rule as a fallback.`)\n }\n\n return {\n plural: (value: number, { offset = 0, ...rules }) => {\n const message = rules[value] || rules[plurals?.(value - offset)] || rules.other\n\n return replaceOctothorpe(value - offset, message)\n },\n\n selectordinal: (value: number, { offset = 0, ...rules }) => {\n const message = rules[value] || rules[plurals?.(value - offset, true)] || rules.other\n return replaceOctothorpe(value - offset, message)\n },\n\n select: (value: string, rules) => rules[value] || rules.other,\n\n number: (value: number, format: string | Intl.NumberFormatOptions) => number(locales, style(format))(value),\n\n date: (value: string, format: string | Intl.DateTimeFormatOptions) => date(locales, style(format))(value),\n\n undefined: (value: unknown) => value,\n }\n}\n\n\n// Params -> CTX\n/**\n * Creates a context object, which formats ICU MessageFormat arguments based on\n * argument type.\n *\n * @param locale - Locale of message\n * @param locales - Locales to be used when formatting the numbers or dates\n * @param values - Parameters for variable interpolation\n * @param localeData - Locale data (e.g: plurals)\n * @param formats - Custom format styles\n * @returns {function(string, string, any)}\n */\nfunction context(\n locale: string,\n locales: Locales,\n values: Values,\n formats: Formats,\n localeData: LocaleData\n) {\n const formatters = defaultFormats(locale, locales, localeData, formats)\n\n const ctx = (name: string, type: string, format: any): string => {\n const value = values[name]\n const formatted = formatters[type](value, format)\n const message = isFunction(formatted) ? formatted(ctx) : formatted\n return Array.isArray(message) ? message.join(\"\") : message\n }\n\n return ctx\n}\n\nexport function interpolate(\n translation: CompiledMessage,\n locale: string,\n locales: Locales,\n localeData: LocaleData\n) {\n return (values: Values, formats: Formats = {}): string => {\n const ctx = context(\n locale,\n locales,\n values,\n formats,\n localeData,\n )\n\n const formatMessage = (message: CompiledMessage): string => {\n if (!Array.isArray(message)) return message\n\n return message.reduce<string>((message, token) => {\n if (isString(token)) return message + token\n\n const [name, type, format] = token\n\n let interpolatedFormat = {}\n if (format != null && !isString(format)) {\n Object.keys(format).forEach((key) => {\n interpolatedFormat[key] = formatMessage(format[key])\n })\n } else {\n interpolatedFormat = format\n }\n\n const value = ctx(name, type, interpolatedFormat)\n if (value == null) return message\n\n return message + value\n }, \"\")\n }\n\n const result = formatMessage(translation)\n if (isString(result) && UNICODE_REGEX.test(result)) return JSON.parse(`\"${result.trim()}\"`)\n if (isString(result)) return result.trim()\n return result\n }\n}\n","export class EventEmitter<\n Events extends { [name: string]: (...args: any[]) => any }\n> {\n private readonly _events: {\n [name in keyof Events]?: Array<Events[name]>\n } = {}\n\n on(event: keyof Events, listener: Events[typeof event]): () => void {\n if (!this._hasEvent(event)) this._events[event] = []\n\n this._events[event].push(listener)\n return () => this.removeListener(event, listener)\n }\n\n removeListener(event: keyof Events, listener: Events[typeof event]): void {\n if (!this._hasEvent(event)) return\n\n const index = this._events[event].indexOf(listener)\n if (~index) this._events[event].splice(index, 1)\n }\n\n emit(event: keyof Events, ...args: Parameters<Events[typeof event]>): void {\n if (!this._hasEvent(event)) return\n\n this._events[event].map((listener) => listener.apply(this, args))\n }\n\n private _hasEvent(event: keyof Events) {\n return Array.isArray(this._events[event])\n }\n}\n","import { interpolate, UNICODE_REGEX } from \"./context\"\nimport { isString, isFunction } from \"./essentials\"\nimport { date, number } from \"./formats\"\nimport { compileMessage } from \"@lingui/core/compile\"\nimport { EventEmitter } from \"./eventEmitter\"\nimport type {PluralCategory} from \"make-plural\"\n\nexport type MessageOptions = {\n message?: string\n context?: string\n formats?: Formats\n}\n\nexport type Locale = string\nexport type Locales = Locale | Locale[]\nexport type Formats = Record<string, Intl.DateTimeFormatOptions | Intl.NumberFormatOptions>\n\nexport type Values = Record<string, unknown>;\n\nexport type LocaleData = {\n plurals?: (n: number, ordinal?: boolean) => PluralCategory\n}\n\nexport type AllLocaleData = Record<Locale, LocaleData>\n\nexport type CompiledIcuChoices = Record<string, CompiledMessage> & {offset: number};\nexport type CompiledMessageToken = string | [name: string, type?: string, format?: null | string | CompiledIcuChoices];\n\nexport type CompiledMessage = string | CompiledMessageToken[]\n\nexport type Messages = Record<string, CompiledMessage>\n\nexport type AllMessages = Record<Locale, Messages>\n\nexport type MessageDescriptor = {\n id?: string\n comment?: string\n message?: string\n context?: string\n values?: Record<string, unknown>\n}\n\nexport type MissingMessageEvent = {\n locale: Locale\n id: string\n context?: string\n}\n\ntype setupI18nProps = {\n locale?: Locale\n locales?: Locales\n messages?: AllMessages\n localeData?: AllLocaleData\n missing?: string | ((message: string, id: string, context: string) => string)\n}\n\ntype Events = {\n change: () => void\n missing: (event: MissingMessageEvent) => void\n}\n\nexport class I18n extends EventEmitter<Events> {\n private _locale: Locale\n private _locales: Locales\n private _localeData: AllLocaleData\n private _messages: AllMessages\n private _missing: string | ((message, id, context) => string)\n\n constructor(params: setupI18nProps) {\n super()\n\n this._messages = {}\n this._localeData = {}\n\n if (params.missing != null) this._missing = params.missing\n if (params.messages != null) this.load(params.messages)\n if (params.localeData != null) this.loadLocaleData(params.localeData)\n if (params.locale != null || params.locales != null) {\n this.activate(params.locale, params.locales)\n }\n }\n\n get locale() {\n return this._locale\n }\n\n get locales() {\n return this._locales\n }\n\n get messages(): Messages {\n return this._messages[this._locale] ?? {}\n }\n\n get localeData(): LocaleData {\n return this._localeData[this._locale] ?? {}\n }\n\n private _loadLocaleData(locale: Locale, localeData: LocaleData) {\n if (this._localeData[locale] == null) {\n this._localeData[locale] = localeData\n } else {\n Object.assign(this._localeData[locale], localeData)\n }\n }\n\n public loadLocaleData(allLocaleData: AllLocaleData): void\n public loadLocaleData(locale: Locale, localeData: LocaleData): void\n\n loadLocaleData(localeOrAllData, localeData?) {\n if (localeData != null) {\n // loadLocaleData('en', enLocaleData)\n // Loading locale data for a single locale.\n this._loadLocaleData(localeOrAllData, localeData)\n } else {\n // loadLocaleData(allLocaleData)\n // Loading all locale data at once.\n Object.keys(localeOrAllData).forEach((locale) =>\n this._loadLocaleData(locale, localeOrAllData[locale])\n )\n }\n\n this.emit(\"change\")\n }\n\n private _load(locale: Locale, messages: Messages) {\n if (this._messages[locale] == null) {\n this._messages[locale] = messages\n } else {\n Object.assign(this._messages[locale], messages)\n }\n }\n\n public load(allMessages: AllMessages): void\n public load(locale: Locale, messages: Messages): void\n\n load(localeOrMessages, messages?) {\n if (messages != null) {\n // load('en', catalog)\n // Loading a catalog for a single locale.\n this._load(localeOrMessages, messages)\n } else {\n // load(catalogs)\n // Loading several locales at once.\n Object.keys(localeOrMessages).forEach((locale) =>\n this._load(locale, localeOrMessages[locale])\n )\n }\n\n this.emit(\"change\")\n }\n\n activate(locale: Locale, locales?: Locales) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!this._messages[locale]) {\n console.warn(`Messages for locale \"${locale}\" not loaded.`)\n }\n\n if (!this._localeData[locale]) {\n console.warn(\n `Locale data for locale \"${locale}\" not loaded. Plurals won't work correctly.`\n )\n }\n }\n\n this._locale = locale\n this._locales = locales\n this.emit(\"change\")\n }\n\n // method for translation and formatting\n _(\n id: MessageDescriptor | string,\n values: Values | undefined = {},\n { message, formats, context }: MessageOptions | undefined = {}\n ) {\n if (!isString(id)) {\n values = id.values || values\n message = id.message\n context = id.context\n id = id.id\n }\n\n const messageMissing = !context && !this.messages[id]\n const contextualMessageMissing = context && !this.messages[context][id]\n const messageUnreachable = contextualMessageMissing || messageMissing\n\n // replace missing messages with custom message for debugging\n const missing = this._missing\n if (missing && messageUnreachable) {\n return isFunction(missing) ? missing(this._locale, id, context) : missing\n }\n\n if (messageUnreachable) {\n this.emit(\"missing\", { id, context, locale: this._locale })\n }\n\n let translation\n\n if (context && !contextualMessageMissing) {\n // context is like a subdirectory of other keys\n translation = this.messages[context][id] || message || id\n } else {\n translation = this.messages[id] || message || id\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n translation = isString(translation)\n ? compileMessage(translation)\n : translation\n }\n\n // hack for parsing unicode values inside a string to get parsed in react native environments\n if (isString(translation) && UNICODE_REGEX.test(translation))\n return JSON.parse(`\"${translation}\"`) as string\n if (isString(translation)) return translation\n\n return interpolate(\n translation,\n this._locale,\n this._locales,\n this.localeData\n )(values, formats)\n }\n\n date(value: string | Date, format?: Intl.DateTimeFormatOptions): string {\n return date(this._locales || this._locale, format)(value)\n }\n\n number(value: number, format?: Intl.NumberFormatOptions): string {\n return number(this._locales || this._locale, format)(value)\n }\n}\n\nfunction setupI18n(params: setupI18nProps = {}): I18n {\n return new I18n(params)\n}\n\nexport { setupI18n }\n","export {\n setupI18n,\n I18n,\n} from \"./i18n\"\n\nexport type {\n AllMessages,\n MessageDescriptor,\n Messages,\n AllLocaleData,\n LocaleData,\n Locale,\n Locales,\n} from \"./i18n\"\n\n// Default i18n object\nimport { setupI18n } from \"./i18n\"\nexport const i18n = setupI18n()\n\nimport * as formats from \"./formats\"\nexport { formats }\n"],"names":["isString","s","isFunction","f","numberFormats","Map","dateFormats","date","locales","format","memoize","value","Date","key","cacheKey","cachedFormatter","get","formatter","Intl","DateTimeFormat","set","number","NumberFormat","options","localeKey","Array","isArray","sort","join","JSON","stringify","UNICODE_REGEX","defaultFormats","locale","localeData","plurals","undefined","formats","style","replaceOctothorpe","message","ctx","msg","norm","numberFormat","Object","keys","length","valueStr","map","m","replace","console","error","plural","offset","rules","other","selectordinal","select","context","values","formatters","name","type","formatted","interpolate","translation","formatMessage","reduce","token","interpolatedFormat","forEach","result","test","parse","trim","EventEmitter","event","listener","_hasEvent","_events","push","removeListener","index","indexOf","splice","args","apply","I18n","params","_messages","_localeData","missing","_missing","messages","load","loadLocaleData","activate","assign","localeOrAllData","_loadLocaleData","emit","localeOrMessages","_load","process","env","NODE_ENV","warn","_locale","_locales","id","messageMissing","contextualMessageMissing","messageUnreachable","compileMessage","setupI18n","i18n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/essentials.ts","../../src/formats.ts","../../src/context.ts","../../src/eventEmitter.ts","../../src/i18n.ts","../../src/index.ts"],"sourcesContent":["export const isString = (s): s is string => typeof s === \"string\"\nexport const isFunction = (f): f is Function => typeof f === \"function\"\nexport function isEmpty(obj) {\n // null and undefined are \"empty\"\n if (obj === null || obj === undefined) return true\n\n if (obj.length > 0) return false\n if (obj.length === 0) return true\n\n return !Object.getOwnPropertyNames(obj).length\n}\n","import { isString } from \"./essentials\"\nimport { Locales } from \"./i18n\"\n\n/** Memoized cache */\nconst numberFormats = new Map<string, Intl.NumberFormat>()\nconst dateFormats = new Map<string, Intl.DateTimeFormat>()\n\nexport function date(\n locales: Locales,\n format: Intl.DateTimeFormatOptions = {},\n memoize: boolean = true\n): (value: string | Date) => string {\n return (value) => {\n if (isString(value)) value = new Date(value)\n if (memoize) {\n const key = cacheKey<Intl.DateTimeFormatOptions>(locales, format)\n const cachedFormatter = dateFormats.get(key)\n if (cachedFormatter) {\n return cachedFormatter.format(value)\n }\n\n const formatter = new Intl.DateTimeFormat(locales, format)\n dateFormats.set(key, formatter)\n return formatter.format(value)\n }\n\n const formatter = new Intl.DateTimeFormat(locales, format)\n return formatter.format(value)\n }\n}\n\nexport function number(\n locales: Locales,\n format: Intl.NumberFormatOptions = {},\n memoize: boolean = true\n): (value: number) => string {\n return (value) => {\n if (memoize) {\n const key = cacheKey<Intl.NumberFormatOptions>(locales, format)\n const cachedFormatter = numberFormats.get(key)\n if (cachedFormatter) {\n return cachedFormatter.format(value)\n }\n\n const formatter = new Intl.NumberFormat(locales, format)\n numberFormats.set(key, formatter)\n return formatter.format(value)\n }\n\n const formatter = new Intl.NumberFormat(locales, format)\n return formatter.format(value)\n }\n}\n\n/** Memoize helpers */\nfunction cacheKey<T>(locales?: string | string[], options: T = {} as T) {\n const localeKey = Array.isArray(locales) ? locales.sort().join(\"-\") : locales\n return `${localeKey}-${JSON.stringify(options)}`\n}\n","import { CompiledMessage, Formats, LocaleData, Locales, Values } from \"./i18n\"\nimport { date, number } from \"./formats\"\nimport { isString, isFunction } from \"./essentials\"\n\nexport const UNICODE_REGEX = /\\\\u[a-fA-F0-9]{4}|\\\\x[a-fA-F0-9]{2}/g\n\nconst defaultFormats = (\n locale: string,\n locales: Locales,\n localeData: LocaleData = { plurals: undefined },\n formats: Formats = {}\n) => {\n locales = locales || locale\n const { plurals } = localeData\n const style = <T>(format: string | T): T =>\n isString(format) ? formats[format] || { style: format } : (format as any)\n const replaceOctothorpe = (value: number, message) => {\n return (ctx) => {\n const msg = isFunction(message) ? message(ctx) : message\n const norm = Array.isArray(msg) ? msg : [msg]\n const numberFormat = Object.keys(formats).length ? style(\"number\") : {}\n const valueStr = number(locales, numberFormat)(value)\n return norm.map((m) => (isString(m) ? m.replace(\"#\", valueStr) : m))\n }\n }\n\n if (!plurals) {\n console.error(\n `Plurals for locale ${locale} aren't loaded. Use i18n.loadLocaleData method to load plurals for specific locale. Using other plural rule as a fallback.`\n )\n }\n\n return {\n plural: (value: number, { offset = 0, ...rules }) => {\n const message =\n rules[value] || rules[plurals?.(value - offset)] || rules.other\n\n return replaceOctothorpe(value - offset, message)\n },\n\n selectordinal: (value: number, { offset = 0, ...rules }) => {\n const message =\n rules[value] || rules[plurals?.(value - offset, true)] || rules.other\n return replaceOctothorpe(value - offset, message)\n },\n\n select: (value: string, rules) => rules[value] || rules.other,\n\n number: (value: number, format: string | Intl.NumberFormatOptions) =>\n number(locales, style(format))(value),\n\n date: (value: string, format: string | Intl.DateTimeFormatOptions) =>\n date(locales, style(format))(value),\n\n undefined: (value: unknown) => value,\n }\n}\n\n// Params -> CTX\n/**\n * Creates a context object, which formats ICU MessageFormat arguments based on\n * argument type.\n *\n * @param locale - Locale of message\n * @param locales - Locales to be used when formatting the numbers or dates\n * @param values - Parameters for variable interpolation\n * @param localeData - Locale data (e.g: plurals)\n * @param formats - Custom format styles\n * @returns {function(string, string, any)}\n */\nfunction context(\n locale: string,\n locales: Locales,\n values: Values,\n formats: Formats,\n localeData: LocaleData\n) {\n const formatters = defaultFormats(locale, locales, localeData, formats)\n\n const ctx = (name: string, type: string, format: any): string => {\n const value = values[name]\n const formatted = formatters[type](value, format)\n const message = isFunction(formatted) ? formatted(ctx) : formatted\n return Array.isArray(message) ? message.join(\"\") : message\n }\n\n return ctx\n}\n\nexport function interpolate(\n translation: CompiledMessage,\n locale: string,\n locales: Locales,\n localeData: LocaleData\n) {\n return (values: Values, formats: Formats = {}): string => {\n const ctx = context(locale, locales, values, formats, localeData)\n\n const formatMessage = (message: CompiledMessage): string => {\n if (!Array.isArray(message)) return message\n\n return message.reduce<string>((message, token) => {\n if (isString(token)) return message + token\n\n const [name, type, format] = token\n\n let interpolatedFormat = {}\n if (format != null && !isString(format)) {\n Object.keys(format).forEach((key) => {\n interpolatedFormat[key] = formatMessage(format[key])\n })\n } else {\n interpolatedFormat = format\n }\n\n const value = ctx(name, type, interpolatedFormat)\n if (value == null) return message\n\n return message + value\n }, \"\")\n }\n\n const result = formatMessage(translation)\n if (isString(result) && UNICODE_REGEX.test(result))\n return JSON.parse(`\"${result.trim()}\"`)\n if (isString(result)) return result.trim()\n return result\n }\n}\n","export class EventEmitter<\n Events extends { [name: string]: (...args: any[]) => any }\n> {\n private readonly _events: {\n [name in keyof Events]?: Array<Events[name]>\n } = {}\n\n on(event: keyof Events, listener: Events[typeof event]): () => void {\n if (!this._hasEvent(event)) this._events[event] = []\n\n this._events[event].push(listener)\n return () => this.removeListener(event, listener)\n }\n\n removeListener(event: keyof Events, listener: Events[typeof event]): void {\n if (!this._hasEvent(event)) return\n\n const index = this._events[event].indexOf(listener)\n if (~index) this._events[event].splice(index, 1)\n }\n\n emit(event: keyof Events, ...args: Parameters<Events[typeof event]>): void {\n if (!this._hasEvent(event)) return\n\n this._events[event].map((listener) => listener.apply(this, args))\n }\n\n private _hasEvent(event: keyof Events) {\n return Array.isArray(this._events[event])\n }\n}\n","import { interpolate, UNICODE_REGEX } from \"./context\"\nimport { isString, isFunction } from \"./essentials\"\nimport { date, number } from \"./formats\"\nimport { compileMessage } from \"@lingui/core/compile\"\nimport { EventEmitter } from \"./eventEmitter\"\nimport type { PluralCategory } from \"make-plural\"\n\nexport type MessageOptions = {\n message?: string\n context?: string\n formats?: Formats\n}\n\nexport type Locale = string\nexport type Locales = Locale | Locale[]\nexport type Formats = Record<\n string,\n Intl.DateTimeFormatOptions | Intl.NumberFormatOptions\n>\n\nexport type Values = Record<string, unknown>\n\nexport type LocaleData = {\n plurals?: (n: number, ordinal?: boolean) => PluralCategory\n}\n\nexport type AllLocaleData = Record<Locale, LocaleData>\n\nexport type CompiledIcuChoices = Record<string, CompiledMessage> & {\n offset: number\n}\nexport type CompiledMessageToken =\n | string\n | [name: string, type?: string, format?: null | string | CompiledIcuChoices]\n\nexport type CompiledMessage = string | CompiledMessageToken[]\n\nexport type Messages = Record<string, CompiledMessage>\n\nexport type AllMessages = Record<Locale, Messages>\n\nexport type MessageDescriptor = {\n id?: string\n comment?: string\n message?: string\n context?: string\n values?: Record<string, unknown>\n}\n\nexport type MissingMessageEvent = {\n locale: Locale\n id: string\n context?: string\n}\n\ntype MissingHandler =\n | string\n | ((locale: string, id: string, context: string) => string)\n\ntype setupI18nProps = {\n locale?: Locale\n locales?: Locales\n messages?: AllMessages\n localeData?: AllLocaleData\n missing?: MissingHandler\n}\n\ntype Events = {\n change: () => void\n missing: (event: MissingMessageEvent) => void\n}\n\nexport class I18n extends EventEmitter<Events> {\n private _locale: Locale\n private _locales: Locales\n private _localeData: AllLocaleData\n private _messages: AllMessages\n private _missing: MissingHandler\n\n constructor(params: setupI18nProps) {\n super()\n\n this._messages = {}\n this._localeData = {}\n\n if (params.missing != null) this._missing = params.missing\n if (params.messages != null) this.load(params.messages)\n if (params.localeData != null) this.loadLocaleData(params.localeData)\n if (params.locale != null || params.locales != null) {\n this.activate(params.locale, params.locales)\n }\n }\n\n get locale() {\n return this._locale\n }\n\n get locales() {\n return this._locales\n }\n\n get messages(): Messages {\n return this._messages[this._locale] ?? {}\n }\n\n get localeData(): LocaleData {\n return this._localeData[this._locale] ?? {}\n }\n\n private _loadLocaleData(locale: Locale, localeData: LocaleData) {\n if (this._localeData[locale] == null) {\n this._localeData[locale] = localeData\n } else {\n Object.assign(this._localeData[locale], localeData)\n }\n }\n\n public loadLocaleData(allLocaleData: AllLocaleData): void\n public loadLocaleData(locale: Locale, localeData: LocaleData): void\n\n loadLocaleData(localeOrAllData, localeData?) {\n if (localeData != null) {\n // loadLocaleData('en', enLocaleData)\n // Loading locale data for a single locale.\n this._loadLocaleData(localeOrAllData, localeData)\n } else {\n // loadLocaleData(allLocaleData)\n // Loading all locale data at once.\n Object.keys(localeOrAllData).forEach((locale) =>\n this._loadLocaleData(locale, localeOrAllData[locale])\n )\n }\n\n this.emit(\"change\")\n }\n\n private _load(locale: Locale, messages: Messages) {\n if (this._messages[locale] == null) {\n this._messages[locale] = messages\n } else {\n Object.assign(this._messages[locale], messages)\n }\n }\n\n public load(allMessages: AllMessages): void\n public load(locale: Locale, messages: Messages): void\n\n load(localeOrMessages, messages?) {\n if (messages != null) {\n // load('en', catalog)\n // Loading a catalog for a single locale.\n this._load(localeOrMessages, messages)\n } else {\n // load(catalogs)\n // Loading several locales at once.\n Object.keys(localeOrMessages).forEach((locale) =>\n this._load(locale, localeOrMessages[locale])\n )\n }\n\n this.emit(\"change\")\n }\n\n activate(locale: Locale, locales?: Locales) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!this._messages[locale]) {\n console.warn(`Messages for locale \"${locale}\" not loaded.`)\n }\n\n if (!this._localeData[locale]) {\n console.warn(\n `Locale data for locale \"${locale}\" not loaded. Plurals won't work correctly.`\n )\n }\n }\n\n this._locale = locale\n this._locales = locales\n this.emit(\"change\")\n }\n\n // method for translation and formatting\n _(\n id: MessageDescriptor | string,\n values: Values | undefined = {},\n { message, formats, context }: MessageOptions | undefined = {}\n ) {\n if (!isString(id)) {\n values = id.values || values\n message = id.message\n context = id.context\n id = id.id\n }\n\n const messageMissing = !context && !this.messages[id]\n const contextualMessageMissing = context && !this.messages[context][id]\n const messageUnreachable = contextualMessageMissing || messageMissing\n\n // replace missing messages with custom message for debugging\n const missing = this._missing\n if (missing && messageUnreachable) {\n return isFunction(missing) ? missing(this._locale, id, context) : missing\n }\n\n if (messageUnreachable) {\n this.emit(\"missing\", { id, context, locale: this._locale })\n }\n\n let translation\n\n if (context && !contextualMessageMissing) {\n // context is like a subdirectory of other keys\n translation = this.messages[context][id] || message || id\n } else {\n translation = this.messages[id] || message || id\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n translation = isString(translation)\n ? compileMessage(translation)\n : translation\n }\n\n // hack for parsing unicode values inside a string to get parsed in react native environments\n if (isString(translation) && UNICODE_REGEX.test(translation))\n return JSON.parse(`\"${translation}\"`) as string\n if (isString(translation)) return translation\n\n return interpolate(\n translation,\n this._locale,\n this._locales,\n this.localeData\n )(values, formats)\n }\n\n date(value: string | Date, format?: Intl.DateTimeFormatOptions): string {\n return date(this._locales || this._locale, format)(value)\n }\n\n number(value: number, format?: Intl.NumberFormatOptions): string {\n return number(this._locales || this._locale, format)(value)\n }\n}\n\nfunction setupI18n(params: setupI18nProps = {}): I18n {\n return new I18n(params)\n}\n\nexport { setupI18n }\n","export { setupI18n, I18n } from \"./i18n\"\n\nexport type {\n AllMessages,\n MessageDescriptor,\n Messages,\n AllLocaleData,\n LocaleData,\n Locale,\n Locales,\n} from \"./i18n\"\n\n// Default i18n object\nimport { setupI18n } from \"./i18n\"\nexport const i18n = setupI18n()\n\nimport * as formats from \"./formats\"\nexport { formats }\n"],"names":["isString","s","isFunction","f","numberFormats","Map","dateFormats","date","locales","format","memoize","value","Date","key","cacheKey","cachedFormatter","get","formatter","Intl","DateTimeFormat","set","number","NumberFormat","options","localeKey","Array","isArray","sort","join","JSON","stringify","UNICODE_REGEX","defaultFormats","locale","localeData","plurals","undefined","formats","style","replaceOctothorpe","message","ctx","msg","norm","numberFormat","Object","keys","length","valueStr","map","m","replace","console","error","plural","offset","rules","other","selectordinal","select","context","values","formatters","name","type","formatted","interpolate","translation","formatMessage","reduce","token","interpolatedFormat","forEach","result","test","parse","trim","EventEmitter","_events","on","event","listener","_hasEvent","push","removeListener","index","indexOf","splice","emit","args","apply","I18n","constructor","params","_messages","_localeData","missing","_missing","messages","load","loadLocaleData","activate","_locale","_locales","_loadLocaleData","assign","localeOrAllData","_load","localeOrMessages","process","env","NODE_ENV","warn","_","id","messageMissing","contextualMessageMissing","messageUnreachable","compileMessage","setupI18n","i18n"],"mappings":"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"}
|
package/build/esm/compile.js
CHANGED
|
@@ -1,63 +1,54 @@
|
|
|
1
|
-
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
1
|
import { parse } from '@messageformat/parser';
|
|
3
2
|
|
|
4
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
5
|
-
|
|
6
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
7
|
-
|
|
8
3
|
// [Tokens] -> (CTX -> String)
|
|
9
4
|
function processTokens(tokens, mapText) {
|
|
10
|
-
if (!tokens.filter(
|
|
11
|
-
return token
|
|
12
|
-
}).length) {
|
|
13
|
-
return tokens.map(function (token) {
|
|
14
|
-
return mapText(token.value);
|
|
15
|
-
}).join("");
|
|
5
|
+
if (!tokens.filter(token => token.type !== "content").length) {
|
|
6
|
+
return tokens.map(token => mapText(token.value)).join("");
|
|
16
7
|
}
|
|
8
|
+
return tokens.map(token => {
|
|
9
|
+
if (token.type === "content") {
|
|
10
|
+
return mapText(token.value);
|
|
17
11
|
|
|
18
|
-
|
|
19
|
-
if (token.type === 'content') {
|
|
20
|
-
return mapText(token.value); // # in plural case
|
|
12
|
+
// # in plural case
|
|
21
13
|
} else if (token.type === "octothorpe") {
|
|
22
|
-
return "#";
|
|
14
|
+
return "#";
|
|
15
|
+
|
|
16
|
+
// simple argument
|
|
23
17
|
} else if (token.type === "argument") {
|
|
24
|
-
return [token.arg];
|
|
18
|
+
return [token.arg];
|
|
19
|
+
|
|
20
|
+
// argument with custom format (date, number)
|
|
25
21
|
} else if (token.type === "function") {
|
|
26
22
|
var _token$param;
|
|
27
|
-
|
|
28
|
-
var _param = token === null || token === void 0 ? void 0 : (_token$param = token.param) === null || _token$param === void 0 ? void 0 : _token$param[0];
|
|
29
|
-
|
|
23
|
+
const _param = token === null || token === void 0 ? void 0 : (_token$param = token.param) === null || _token$param === void 0 ? void 0 : _token$param[0];
|
|
30
24
|
if (_param) {
|
|
31
25
|
return [token.arg, token.key, _param.value.trim()];
|
|
32
26
|
} else {
|
|
33
27
|
return [token.arg, token.key];
|
|
34
28
|
}
|
|
35
29
|
}
|
|
30
|
+
const offset = token.pluralOffset;
|
|
36
31
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
token.cases.forEach(function (item) {
|
|
32
|
+
// complex argument with cases
|
|
33
|
+
const formatProps = {};
|
|
34
|
+
token.cases.forEach(item => {
|
|
41
35
|
formatProps[item.key.replace(/^=(.)+/, "$1")] = processTokens(item.tokens, mapText);
|
|
42
36
|
});
|
|
43
|
-
return [token.arg, token.type,
|
|
44
|
-
offset
|
|
45
|
-
|
|
37
|
+
return [token.arg, token.type, {
|
|
38
|
+
offset,
|
|
39
|
+
...formatProps
|
|
40
|
+
}];
|
|
46
41
|
});
|
|
47
|
-
}
|
|
42
|
+
}
|
|
48
43
|
|
|
44
|
+
// Message -> (Params -> String)
|
|
49
45
|
/** @internal */
|
|
50
|
-
|
|
51
|
-
|
|
52
46
|
function compileMessage(message) {
|
|
53
|
-
|
|
54
|
-
return v;
|
|
55
|
-
};
|
|
56
|
-
|
|
47
|
+
let mapText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : v => v;
|
|
57
48
|
try {
|
|
58
49
|
return processTokens(parse(message), mapText);
|
|
59
50
|
} catch (e) {
|
|
60
|
-
console.error(
|
|
51
|
+
console.error(`${e.message} \n\nMessage: ${message}`);
|
|
61
52
|
return message;
|
|
62
53
|
}
|
|
63
54
|
}
|
package/build/esm/compile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.js","sources":["../../src/compile/compileMessage.ts"],"sourcesContent":["import {Content, parse, Token} from \"@messageformat/parser\"\nimport {CompiledMessage, CompiledMessageToken} from \"../i18n\"\n\ntype MapTextFn =
|
|
1
|
+
{"version":3,"file":"compile.js","sources":["../../src/compile/compileMessage.ts"],"sourcesContent":["import { Content, parse, Token } from \"@messageformat/parser\"\nimport { CompiledMessage, CompiledMessageToken } from \"../i18n\"\n\ntype MapTextFn = (value: string) => string\n\n// [Tokens] -> (CTX -> String)\nfunction processTokens(\n tokens: Array<Token>,\n mapText?: MapTextFn\n): CompiledMessage {\n if (!tokens.filter((token) => token.type !== \"content\").length) {\n return tokens.map((token) => mapText((token as Content).value)).join(\"\")\n }\n\n return tokens.map<CompiledMessageToken>((token) => {\n if (token.type === \"content\") {\n return mapText(token.value)\n\n // # in plural case\n } else if (token.type === \"octothorpe\") {\n return \"#\"\n\n // simple argument\n } else if (token.type === \"argument\") {\n return [token.arg]\n\n // argument with custom format (date, number)\n } else if (token.type === \"function\") {\n const _param = token?.param?.[0] as Content\n\n if (_param) {\n return [token.arg, token.key, _param.value.trim()]\n } else {\n return [token.arg, token.key]\n }\n }\n\n const offset = token.pluralOffset\n\n // complex argument with cases\n const formatProps = {}\n token.cases.forEach((item) => {\n formatProps[item.key.replace(/^=(.)+/, \"$1\")] = processTokens(\n item.tokens,\n mapText\n )\n })\n\n return [\n token.arg,\n token.type,\n {\n offset,\n ...formatProps,\n } as any,\n ] as CompiledMessageToken\n })\n}\n\n// Message -> (Params -> String)\n/** @internal */\nexport function compileMessage(\n message: string,\n mapText: MapTextFn = (v) => v\n): CompiledMessage {\n try {\n return processTokens(parse(message), mapText)\n } catch (e) {\n console.error(`${e.message} \\n\\nMessage: ${message}`)\n return message\n }\n}\n"],"names":["processTokens","tokens","mapText","filter","token","type","length","map","value","join","arg","_param","param","key","trim","offset","pluralOffset","formatProps","cases","forEach","item","replace","compileMessage","message","v","parse","e","console","error"],"mappings":"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"}
|