@intlify/core-base 9.4.1 → 9.6.0

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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * core-base v9.4.1
2
+ * core-base v9.6.0
3
3
  * (c) 2023 kazuya kawaguchi
4
4
  * Released under the MIT License.
5
5
  */
@@ -449,6 +449,22 @@ function getWarnMessage(code, ...args) {
449
449
  return shared.format(warnMessages[code], ...args);
450
450
  }
451
451
 
452
+ /** @internal */
453
+ function getLocale(context, options) {
454
+ return options.locale != null
455
+ ? resolveLocale(options.locale)
456
+ : resolveLocale(context.locale);
457
+ }
458
+ let _resolveLocale;
459
+ /** @internal */
460
+ function resolveLocale(locale) {
461
+ // prettier-ignore
462
+ return shared.isString(locale)
463
+ ? locale
464
+ : _resolveLocale != null && locale.resolvedOnce
465
+ ? _resolveLocale
466
+ : (_resolveLocale = locale());
467
+ }
452
468
  /**
453
469
  * Fallback with simple implemenation
454
470
  *
@@ -570,7 +586,7 @@ function appendItemToChain(chain, target, blocks) {
570
586
  * Intlify core-base version
571
587
  * @internal
572
588
  */
573
- const VERSION = '9.4.1';
589
+ const VERSION = '9.6.0';
574
590
  const NOT_REOSLVED = -1;
575
591
  const DEFAULT_LOCALE = 'en-US';
576
592
  const MISSING_RESOLVE_VALUE = '';
@@ -646,23 +662,26 @@ function createCoreContext(options = {}) {
646
662
  // setup options
647
663
  const onWarn = shared.isFunction(options.onWarn) ? options.onWarn : shared.warn;
648
664
  const version = shared.isString(options.version) ? options.version : VERSION;
649
- const locale = shared.isString(options.locale) ? options.locale : DEFAULT_LOCALE;
665
+ const locale = shared.isString(options.locale) || shared.isFunction(options.locale)
666
+ ? options.locale
667
+ : DEFAULT_LOCALE;
668
+ const _locale = shared.isFunction(locale) ? DEFAULT_LOCALE : locale;
650
669
  const fallbackLocale = shared.isArray(options.fallbackLocale) ||
651
670
  shared.isPlainObject(options.fallbackLocale) ||
652
671
  shared.isString(options.fallbackLocale) ||
653
672
  options.fallbackLocale === false
654
673
  ? options.fallbackLocale
655
- : locale;
674
+ : _locale;
656
675
  const messages = shared.isPlainObject(options.messages)
657
676
  ? options.messages
658
- : { [locale]: {} };
677
+ : { [_locale]: {} };
659
678
  const datetimeFormats = shared.isPlainObject(options.datetimeFormats)
660
679
  ? options.datetimeFormats
661
- : { [locale]: {} }
680
+ : { [_locale]: {} }
662
681
  ;
663
682
  const numberFormats = shared.isPlainObject(options.numberFormats)
664
683
  ? options.numberFormats
665
- : { [locale]: {} }
684
+ : { [_locale]: {} }
666
685
  ;
667
686
  const modifiers = shared.assign({}, options.modifiers || {}, getDefaultLinkedModifiers());
668
687
  const pluralRules = options.pluralRules || {};
@@ -839,7 +858,7 @@ function formatMessagePart(ctx, node) {
839
858
  return ctx.interpolate(ctx.named(named.k || named.key));
840
859
  case 5 /* NodeTypes.List */:
841
860
  const list = node;
842
- return ctx.interpolate(ctx.list(list.i || list.index));
861
+ return ctx.interpolate(ctx.list(list.i != null ? list.i : list.index));
843
862
  case 6 /* NodeTypes.Linked */:
844
863
  const linked = node;
845
864
  const modifier = linked.m || linked.modifier;
@@ -1002,7 +1021,7 @@ function translate(context, ...args) {
1002
1021
  ? (!messageCompiler ? () => key : key)
1003
1022
  : '';
1004
1023
  const enableDefaultMsg = fallbackFormat || defaultMsgOrKey !== '';
1005
- const locale = shared.isString(options.locale) ? options.locale : context.locale;
1024
+ const locale = getLocale(context, options);
1006
1025
  // escape params
1007
1026
  escapeParameter && escapeParams(options);
1008
1027
  // resolve message format
@@ -1406,7 +1425,7 @@ function datetime(context, ...args) {
1406
1425
  ? options.fallbackWarn
1407
1426
  : context.fallbackWarn;
1408
1427
  const part = !!options.part;
1409
- const locale = shared.isString(options.locale) ? options.locale : context.locale;
1428
+ const locale = getLocale(context, options);
1410
1429
  const locales = localeFallbacker(context, // eslint-disable-line @typescript-eslint/no-explicit-any
1411
1430
  fallbackLocale, locale);
1412
1431
  if (!shared.isString(key) || key === '') {
@@ -1580,7 +1599,7 @@ function number(context, ...args) {
1580
1599
  ? options.fallbackWarn
1581
1600
  : context.fallbackWarn;
1582
1601
  const part = !!options.part;
1583
- const locale = shared.isString(options.locale) ? options.locale : context.locale;
1602
+ const locale = getLocale(context, options);
1584
1603
  const locales = localeFallbacker(context, // eslint-disable-line @typescript-eslint/no-explicit-any
1585
1604
  fallbackLocale, locale);
1586
1605
  if (!shared.isString(key) || key === '') {
@@ -1731,6 +1750,7 @@ exports.fallbackWithSimple = fallbackWithSimple;
1731
1750
  exports.getAdditionalMeta = getAdditionalMeta;
1732
1751
  exports.getDevToolsHook = getDevToolsHook;
1733
1752
  exports.getFallbackContext = getFallbackContext;
1753
+ exports.getLocale = getLocale;
1734
1754
  exports.getWarnMessage = getWarnMessage;
1735
1755
  exports.handleMissing = handleMissing;
1736
1756
  exports.initI18nDevTools = initI18nDevTools;
@@ -1746,6 +1766,7 @@ exports.parseTranslateArgs = parseTranslateArgs;
1746
1766
  exports.registerLocaleFallbacker = registerLocaleFallbacker;
1747
1767
  exports.registerMessageCompiler = registerMessageCompiler;
1748
1768
  exports.registerMessageResolver = registerMessageResolver;
1769
+ exports.resolveLocale = resolveLocale;
1749
1770
  exports.resolveValue = resolveValue;
1750
1771
  exports.resolveWithKeyValue = resolveWithKeyValue;
1751
1772
  exports.setAdditionalMeta = setAdditionalMeta;
@@ -36,7 +36,7 @@ export declare interface CoreCommonContext<Message = string, Locales = 'en-US'>
36
36
  cid: number;
37
37
  version: string;
38
38
  locale: Locales;
39
- fallbackLocale: FallbackLocales<Locales>;
39
+ fallbackLocale: FallbackLocales<Exclude<Locales, LocaleDetector>>;
40
40
  missing: CoreMissingHandler<Message> | null;
41
41
  missingWarn: boolean | RegExp;
42
42
  fallbackWarn: boolean | RegExp;
@@ -46,8 +46,8 @@ export declare interface CoreCommonContext<Message = string, Locales = 'en-US'>
46
46
  onWarn(msg: string, err?: Error): void;
47
47
  }
48
48
 
49
- export declare type CoreContext<Message = string, Messages = {}, DateTimeFormats = {}, NumberFormats = {}, ResourceLocales = PickupLocales<NonNullable<Messages>> | PickupLocales<NonNullable<DateTimeFormats>> | PickupLocales<NonNullable<NumberFormats>>, Locales = [ResourceLocales] extends [never] ? Locale : ResourceLocales> = CoreCommonContext<Message, Locales> & CoreTranslationContext<NonNullable<Messages>, Message> & CoreDateTimeContext<NonNullable<DateTimeFormats>> & CoreNumberContext<NonNullable<NumberFormats>> & {
50
- fallbackContext?: CoreContext<Message, Messages, DateTimeFormats, NumberFormats, ResourceLocales, Locales>;
49
+ export declare type CoreContext<Message = string, Messages = {}, DateTimeFormats = {}, NumberFormats = {}, LocaleType = Locale, ResourceLocales = PickupLocales<NonNullable<Messages>> | PickupLocales<NonNullable<DateTimeFormats>> | PickupLocales<NonNullable<NumberFormats>>, Locales = IsNever<ResourceLocales> extends true ? LocaleType extends LocaleDetector | Locale ? LocaleType : Locale : ResourceLocales> = CoreCommonContext<Message, Locales> & CoreTranslationContext<NonNullable<Messages>, Message> & CoreDateTimeContext<NonNullable<DateTimeFormats>> & CoreNumberContext<NonNullable<NumberFormats>> & {
50
+ fallbackContext?: CoreContext<Message, Messages, DateTimeFormats, NumberFormats, LocaleType, ResourceLocales, Locales>;
51
51
  };
52
52
 
53
53
  export declare interface CoreDateTimeContext<DateTimeFormats = {}> {
@@ -99,7 +99,7 @@ export declare interface CoreOptions<Message = string, Schema extends {
99
99
  datetime?: unknown;
100
100
  number?: unknown;
101
101
  } = {
102
- message: LocaleMessage<Message>;
102
+ message: DefaultCoreLocaleMessageSchema;
103
103
  datetime: DateTimeFormat;
104
104
  number: NumberFormat;
105
105
  }, Locales extends {
@@ -114,13 +114,13 @@ export declare interface CoreOptions<Message = string, Schema extends {
114
114
  numberFormats: infer N;
115
115
  } ? N : Locales extends string ? Locales : Locale, MessageSchema = Schema extends {
116
116
  message: infer M;
117
- } ? M : LocaleMessage<Message>, DateTimeSchema = Schema extends {
117
+ } ? M : DefaultCoreLocaleMessageSchema, DateTimeSchema = Schema extends {
118
118
  datetime: infer D;
119
119
  } ? D : DateTimeFormat, NumberSchema = Schema extends {
120
120
  number: infer N;
121
121
  } ? N : NumberFormat, _Messages extends LocaleMessages<MessageSchema, MessagesLocales, Message> = LocaleMessages<MessageSchema, MessagesLocales, Message>, _DateTimeFormats extends DateTimeFormats<DateTimeSchema, DateTimeFormatsLocales> = DateTimeFormats<DateTimeSchema, DateTimeFormatsLocales>, _NumberFormats extends NumberFormats<NumberSchema, NumberFormatsLocales> = NumberFormats<NumberSchema, NumberFormatsLocales>> {
122
122
  version?: string;
123
- locale?: Locale;
123
+ locale?: Locale | LocaleDetector;
124
124
  fallbackLocale?: FallbackLocale;
125
125
  messages?: {
126
126
  [K in keyof _Messages]: MessageSchema;
@@ -177,9 +177,9 @@ export declare const CoreWarnCodes: {
177
177
  export declare type CoreWarnCodes = (typeof CoreWarnCodes)[keyof typeof CoreWarnCodes];
178
178
  export { createCompileError }
179
179
 
180
- export declare function createCoreContext<Message = string, Options extends CoreOptions<Message> = CoreOptions<Message>, Messages extends Record<string, any> = Options['messages'] extends Record<string, any> ? Options['messages'] : {}, DateTimeFormats extends Record<string, any> = Options['datetimeFormats'] extends Record<string, any> ? Options['datetimeFormats'] : {}, NumberFormats extends Record<string, any> = Options['numberFormats'] extends Record<string, any> ? Options['numberFormats'] : {}>(options: Options): CoreContext<Message, Messages, DateTimeFormats, NumberFormats>;
180
+ export declare function createCoreContext<Message = string, Options extends CoreOptions<Message> = CoreOptions<Message>, Messages extends Record<string, any> = Options['messages'] extends Record<string, any> ? Options['messages'] : {}, DateTimeFormats extends Record<string, any> = Options['datetimeFormats'] extends Record<string, any> ? Options['datetimeFormats'] : {}, NumberFormats extends Record<string, any> = Options['numberFormats'] extends Record<string, any> ? Options['numberFormats'] : {}, LocaleType = Locale | LocaleDetector>(options: Options): CoreContext<Message, Messages, DateTimeFormats, NumberFormats, LocaleType>;
181
181
 
182
- export declare function createCoreContext<Schema = LocaleMessage, Locales = 'en-US', Message = string, Options extends CoreOptions<Message, SchemaParams<Schema, Message>, LocaleParams<Locales>> = CoreOptions<Message, SchemaParams<Schema, Message>, LocaleParams<Locales>>, Messages extends Record<string, any> = NonNullable<Options['messages']> extends Record<string, any> ? NonNullable<Options['messages']> : {}, DateTimeFormats extends Record<string, any> = NonNullable<Options['datetimeFormats']> extends Record<string, any> ? NonNullable<Options['datetimeFormats']> : {}, NumberFormats extends Record<string, any> = NonNullable<Options['numberFormats']> extends Record<string, any> ? NonNullable<Options['numberFormats']> : {}>(options: Options): CoreContext<Message, Messages, DateTimeFormats, NumberFormats>;
182
+ export declare function createCoreContext<Schema = LocaleMessage, Locales = 'en-US', Message = string, Options extends CoreOptions<Message, SchemaParams<Schema, Message>, LocaleParams<Locales>> = CoreOptions<Message, SchemaParams<Schema, Message>, LocaleParams<Locales>>, Messages extends Record<string, any> = NonNullable<Options['messages']> extends Record<string, any> ? NonNullable<Options['messages']> : {}, DateTimeFormats extends Record<string, any> = NonNullable<Options['datetimeFormats']> extends Record<string, any> ? NonNullable<Options['datetimeFormats']> : {}, NumberFormats extends Record<string, any> = NonNullable<Options['numberFormats']> extends Record<string, any> ? NonNullable<Options['numberFormats']> : {}, LocaleType = Locale | LocaleDetector>(options: Options): CoreContext<Message, Messages, DateTimeFormats, NumberFormats, LocaleType>;
183
183
 
184
184
  export declare function createCoreError(code: CoreErrorCodes): CoreError;
185
185
 
@@ -275,17 +275,12 @@ export declare type DateTimeHumanReadable = 'long' | 'short' | 'narrow';
275
275
  *
276
276
  * @VueI18nGeneral
277
277
  */
278
- export declare interface DateTimeOptions<Key = string, Locales = Locale> extends Intl.DateTimeFormatOptions {
278
+ export declare interface DateTimeOptions<Key = string, Locales = Locale> extends Intl.DateTimeFormatOptions, LocaleOptions<Locales> {
279
279
  /**
280
280
  * @remarks
281
281
  * The target format key
282
282
  */
283
283
  key?: Key;
284
- /**
285
- * @remarks
286
- * The locale of localization
287
- */
288
- locale?: Locales;
289
284
  /**
290
285
  * @remarks
291
286
  * Whether suppress warnings outputted when localization fails
@@ -307,6 +302,36 @@ export declare const DEFAULT_LOCALE = "en-US";
307
302
 
308
303
  export declare const DEFAULT_MESSAGE_DATA_TYPE = "text";
309
304
 
305
+ export declare type DefaultCoreLocaleMessageSchema<Schema = RemoveIndexSignature<{
306
+ [K in keyof DefineCoreLocaleMessage]: DefineCoreLocaleMessage[K];
307
+ }>> = IsEmptyObject<Schema> extends true ? LocaleMessage<string> : Schema;
308
+
309
+ /**
310
+ * The type definition of Locale Message for `@intlify/core-base` package
311
+ *
312
+ * @remarks
313
+ * The typealias is used to strictly define the type of the Locale message.
314
+ *
315
+ * @example
316
+ * ```ts
317
+ * // type.d.ts (`.d.ts` file at your app)
318
+ * import { DefineCoreLocaleMessage } from '@intlify/core-base'
319
+ *
320
+ * declare module '@intlify/core-base' {
321
+ * export interface DefineCoreLocaleMessage {
322
+ * title: string
323
+ * menu: {
324
+ * login: string
325
+ * }
326
+ * }
327
+ * }
328
+ * ```
329
+ *
330
+ * @VueI18nGeneral
331
+ */
332
+ export declare interface DefineCoreLocaleMessage extends LocaleMessage<string> {
333
+ }
334
+
310
335
  declare type ExtractToStringFunction<T> = T[ExtractToStringKey<T>];
311
336
 
312
337
  declare type ExtractToStringKey<T> = Extract<keyof T, 'toString'>;
@@ -373,6 +398,8 @@ export declare function getDevToolsHook(): IntlifyDevToolsEmitter | null;
373
398
 
374
399
  export declare const getFallbackContext: () => CoreContext | null;
375
400
 
401
+ /* Excluded from this release type: getLocale */
402
+
376
403
  export declare function getWarnMessage(code: CoreWarnCodes, ...args: unknown[]): string;
377
404
 
378
405
  /* Excluded from this release type: handleMissing */
@@ -406,7 +433,7 @@ declare const enum IntlifyDevToolsHooks {
406
433
  FunctionTranslate = "function:translate"
407
434
  }
408
435
 
409
- export declare type IsEmptyObject<T> = [keyof T] extends [never] ? true : false;
436
+ export declare type IsEmptyObject<T> = IsNever<keyof T> extends true ? true : false;
410
437
 
411
438
  export declare const isMessageAST: (val: unknown) => val is ResourceNode;
412
439
 
@@ -443,6 +470,12 @@ export declare interface LinkedOptions {
443
470
  /** @VueI18nGeneral */
444
471
  export declare type Locale = string;
445
472
 
473
+ /** @VueI18nGeneral */
474
+ export declare interface LocaleDetector<Args extends any[] = any[]> {
475
+ (...args: Args): Locale;
476
+ resolvedOnce?: boolean;
477
+ }
478
+
446
479
  /**
447
480
  * The locale fallbacker
448
481
  *
@@ -471,6 +504,15 @@ export declare type LocaleMessageType<T, Message = string> = T extends string ?
471
504
  /** @VueI18nGeneral */
472
505
  export declare type LocaleMessageValue<Message = string> = LocaleMessageDictionary<any, Message> | string;
473
506
 
507
+ /** @VueI18nGeneral */
508
+ export declare interface LocaleOptions<Locales = Locale> {
509
+ /**
510
+ * @remarks
511
+ * The locale of localization
512
+ */
513
+ locale?: Locales | LocaleDetector;
514
+ }
515
+
474
516
  export declare type LocaleParams<T, Default = 'en-US'> = T extends IsUnion<T> ? {
475
517
  messages: T;
476
518
  datetimeFormats: T;
@@ -793,17 +835,12 @@ export declare type NumberFormatToPartsResult = {
793
835
  *
794
836
  * @VueI18nGeneral
795
837
  */
796
- export declare interface NumberOptions<Key = string, Locales = Locale> extends Intl.NumberFormatOptions {
838
+ export declare interface NumberOptions<Key = string, Locales = Locale> extends Intl.NumberFormatOptions, LocaleOptions<Locales> {
797
839
  /**
798
840
  * @remarks
799
841
  * The target format key
800
842
  */
801
843
  key?: Key;
802
- /**
803
- * @remarks
804
- * The locale of localization
805
- */
806
- locale?: Locales;
807
844
  /**
808
845
  * @remarks
809
846
  * Whether suppress warnings outputted when localization fails
@@ -887,10 +924,16 @@ export declare function registerMessageCompiler<Message>(compiler: MessageCompil
887
924
  */
888
925
  export declare function registerMessageResolver(resolver: MessageResolver): void;
889
926
 
927
+ export declare type RemovedIndexResources<T> = RemoveIndexSignature<{
928
+ [K in keyof T]: T[K];
929
+ }>;
930
+
890
931
  export declare type RemoveIndexSignature<T> = {
891
932
  [K in keyof T as string extends K ? never : number extends K ? never : K]: T[K];
892
933
  };
893
934
 
935
+ /* Excluded from this release type: resolveLocale */
936
+
894
937
  /**
895
938
  * message resolver
896
939
  *
@@ -980,34 +1023,69 @@ export declare interface SpecificNumberFormatOptions extends Intl.NumberFormatOp
980
1023
 
981
1024
  declare type StringConvertable<T> = ExtractToStringKey<T> extends never ? unknown : ExtractToStringFunction<T> extends (...args: any) => string ? T : unknown;
982
1025
 
1026
+ /**
1027
+ * TODO:
1028
+ * this type should be used (refactored) at `translate` type definition
1029
+ * (Unfortunately, using this type will result in key completion failure due to type mismatch...)
1030
+ */
983
1031
  /**
984
1032
  * `translate` function overloads
985
1033
  */
986
- export declare function translate<Context extends CoreContext<Message>, Key extends string = string, ResourceKeys extends PickupKeys<Context['messages']> = PickupKeys<Context['messages']>, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>): MessageFunctionReturn<Message> | number;
1034
+ export declare function translate<Context extends CoreContext<Message>, Key extends string = string, DefinedLocaleMessage extends RemovedIndexResources<DefineCoreLocaleMessage> = RemovedIndexResources<DefineCoreLocaleMessage>, CoreMessages = IsEmptyObject<DefinedLocaleMessage> extends false ? PickupPaths<{
1035
+ [K in keyof DefinedLocaleMessage]: DefinedLocaleMessage[K];
1036
+ }> : never, ContextMessages = IsEmptyObject<Context['messages']> extends false ? PickupKeys<Context['messages']> : never, ResourceKeys extends CoreMessages | ContextMessages = IsNever<CoreMessages> extends false ? IsNever<ContextMessages> extends false ? CoreMessages | ContextMessages : CoreMessages : IsNever<ContextMessages> extends false ? ContextMessages : never, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, plural: number): MessageFunctionReturn<Message> | number;
1037
+
1038
+ export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, DefinedLocaleMessage extends RemovedIndexResources<DefineCoreLocaleMessage> = RemovedIndexResources<DefineCoreLocaleMessage>, CoreMessages = IsEmptyObject<DefinedLocaleMessage> extends false ? PickupPaths<{
1039
+ [K in keyof DefinedLocaleMessage]: DefinedLocaleMessage[K];
1040
+ }> : never, ContextMessages = IsEmptyObject<Context['messages']> extends false ? PickupKeys<Context['messages']> : never, ResourceKeys extends CoreMessages | ContextMessages = IsNever<CoreMessages> extends false ? IsNever<ContextMessages> extends false ? CoreMessages | ContextMessages : CoreMessages : IsNever<ContextMessages> extends false ? ContextMessages : never, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>): MessageFunctionReturn<Message> | number;
987
1041
 
988
- export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, ResourceKeys extends PickupKeys<Context['messages']> = PickupKeys<Context['messages']>, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, plural: number): MessageFunctionReturn<Message> | number;
1042
+ export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, DefinedLocaleMessage extends RemovedIndexResources<DefineCoreLocaleMessage> = RemovedIndexResources<DefineCoreLocaleMessage>, CoreMessages = IsEmptyObject<DefinedLocaleMessage> extends false ? PickupPaths<{
1043
+ [K in keyof DefinedLocaleMessage]: DefinedLocaleMessage[K];
1044
+ }> : never, ContextMessages = IsEmptyObject<Context['messages']> extends false ? PickupKeys<Context['messages']> : never, ResourceKeys extends CoreMessages | ContextMessages = IsNever<CoreMessages> extends false ? IsNever<ContextMessages> extends false ? CoreMessages | ContextMessages : CoreMessages : IsNever<ContextMessages> extends false ? ContextMessages : never, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, plural: number): MessageFunctionReturn<Message> | number;
989
1045
 
990
- export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, ResourceKeys extends PickupKeys<Context['messages']> = PickupKeys<Context['messages']>, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, plural: number, options: TranslateOptions<Context['locale']>): MessageFunctionReturn<Message> | number;
1046
+ export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, DefinedLocaleMessage extends RemovedIndexResources<DefineCoreLocaleMessage> = RemovedIndexResources<DefineCoreLocaleMessage>, CoreMessages = IsEmptyObject<DefinedLocaleMessage> extends false ? PickupPaths<{
1047
+ [K in keyof DefinedLocaleMessage]: DefinedLocaleMessage[K];
1048
+ }> : never, ContextMessages = IsEmptyObject<Context['messages']> extends false ? PickupKeys<Context['messages']> : never, ResourceKeys extends CoreMessages | ContextMessages = IsNever<CoreMessages> extends false ? IsNever<ContextMessages> extends false ? CoreMessages | ContextMessages : CoreMessages : IsNever<ContextMessages> extends false ? ContextMessages : never, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, plural: number, options: TranslateOptions<Context['locale']>): MessageFunctionReturn<Message> | number;
991
1049
 
992
- export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, ResourceKeys extends PickupKeys<Context['messages']> = PickupKeys<Context['messages']>, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, defaultMsg: string): MessageFunctionReturn<Message> | number;
1050
+ export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, DefinedLocaleMessage extends RemovedIndexResources<DefineCoreLocaleMessage> = RemovedIndexResources<DefineCoreLocaleMessage>, CoreMessages = IsEmptyObject<DefinedLocaleMessage> extends false ? PickupPaths<{
1051
+ [K in keyof DefinedLocaleMessage]: DefinedLocaleMessage[K];
1052
+ }> : never, ContextMessages = IsEmptyObject<Context['messages']> extends false ? PickupKeys<Context['messages']> : never, ResourceKeys extends CoreMessages | ContextMessages = IsNever<CoreMessages> extends false ? IsNever<ContextMessages> extends false ? CoreMessages | ContextMessages : CoreMessages : IsNever<ContextMessages> extends false ? ContextMessages : never, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, defaultMsg: string): MessageFunctionReturn<Message> | number;
993
1053
 
994
- export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, ResourceKeys extends PickupKeys<Context['messages']> = PickupKeys<Context['messages']>, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, defaultMsg: string, options: TranslateOptions<Context['locale']>): MessageFunctionReturn<Message> | number;
1054
+ export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, DefinedLocaleMessage extends RemovedIndexResources<DefineCoreLocaleMessage> = RemovedIndexResources<DefineCoreLocaleMessage>, CoreMessages = IsEmptyObject<DefinedLocaleMessage> extends false ? PickupPaths<{
1055
+ [K in keyof DefinedLocaleMessage]: DefinedLocaleMessage[K];
1056
+ }> : never, ContextMessages = IsEmptyObject<Context['messages']> extends false ? PickupKeys<Context['messages']> : never, ResourceKeys extends CoreMessages | ContextMessages = IsNever<CoreMessages> extends false ? IsNever<ContextMessages> extends false ? CoreMessages | ContextMessages : CoreMessages : IsNever<ContextMessages> extends false ? ContextMessages : never, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, defaultMsg: string, options: TranslateOptions<Context['locale']>): MessageFunctionReturn<Message> | number;
995
1057
 
996
- export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, ResourceKeys extends PickupKeys<Context['messages']> = PickupKeys<Context['messages']>, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, list: unknown[]): MessageFunctionReturn<Message> | number;
1058
+ export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, DefinedLocaleMessage extends RemovedIndexResources<DefineCoreLocaleMessage> = RemovedIndexResources<DefineCoreLocaleMessage>, CoreMessages = IsEmptyObject<DefinedLocaleMessage> extends false ? PickupPaths<{
1059
+ [K in keyof DefinedLocaleMessage]: DefinedLocaleMessage[K];
1060
+ }> : never, ContextMessages = IsEmptyObject<Context['messages']> extends false ? PickupKeys<Context['messages']> : never, ResourceKeys extends CoreMessages | ContextMessages = IsNever<CoreMessages> extends false ? IsNever<ContextMessages> extends false ? CoreMessages | ContextMessages : CoreMessages : IsNever<ContextMessages> extends false ? ContextMessages : never, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, list: unknown[]): MessageFunctionReturn<Message> | number;
997
1061
 
998
- export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, ResourceKeys extends PickupKeys<Context['messages']> = PickupKeys<Context['messages']>, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, list: unknown[], plural: number): MessageFunctionReturn<Message> | number;
1062
+ export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, DefinedLocaleMessage extends RemovedIndexResources<DefineCoreLocaleMessage> = RemovedIndexResources<DefineCoreLocaleMessage>, CoreMessages = IsEmptyObject<DefinedLocaleMessage> extends false ? PickupPaths<{
1063
+ [K in keyof DefinedLocaleMessage]: DefinedLocaleMessage[K];
1064
+ }> : never, ContextMessages = IsEmptyObject<Context['messages']> extends false ? PickupKeys<Context['messages']> : never, ResourceKeys extends CoreMessages | ContextMessages = IsNever<CoreMessages> extends false ? IsNever<ContextMessages> extends false ? CoreMessages | ContextMessages : CoreMessages : IsNever<ContextMessages> extends false ? ContextMessages : never, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, list: unknown[], plural: number): MessageFunctionReturn<Message> | number;
999
1065
 
1000
- export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, ResourceKeys extends PickupKeys<Context['messages']> = PickupKeys<Context['messages']>, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, list: unknown[], defaultMsg: string): MessageFunctionReturn<Message> | number;
1066
+ export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, DefinedLocaleMessage extends RemovedIndexResources<DefineCoreLocaleMessage> = RemovedIndexResources<DefineCoreLocaleMessage>, CoreMessages = IsEmptyObject<DefinedLocaleMessage> extends false ? PickupPaths<{
1067
+ [K in keyof DefinedLocaleMessage]: DefinedLocaleMessage[K];
1068
+ }> : never, ContextMessages = IsEmptyObject<Context['messages']> extends false ? PickupKeys<Context['messages']> : never, ResourceKeys extends CoreMessages | ContextMessages = IsNever<CoreMessages> extends false ? IsNever<ContextMessages> extends false ? CoreMessages | ContextMessages : CoreMessages : IsNever<ContextMessages> extends false ? ContextMessages : never, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, list: unknown[], defaultMsg: string): MessageFunctionReturn<Message> | number;
1001
1069
 
1002
- export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, ResourceKeys extends PickupKeys<Context['messages']> = PickupKeys<Context['messages']>, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, list: unknown[], options: TranslateOptions<Context['locale']>): MessageFunctionReturn<Message> | number;
1070
+ export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, DefinedLocaleMessage extends RemovedIndexResources<DefineCoreLocaleMessage> = RemovedIndexResources<DefineCoreLocaleMessage>, CoreMessages = IsEmptyObject<DefinedLocaleMessage> extends false ? PickupPaths<{
1071
+ [K in keyof DefinedLocaleMessage]: DefinedLocaleMessage[K];
1072
+ }> : never, ContextMessages = IsEmptyObject<Context['messages']> extends false ? PickupKeys<Context['messages']> : never, ResourceKeys extends CoreMessages | ContextMessages = IsNever<CoreMessages> extends false ? IsNever<ContextMessages> extends false ? CoreMessages | ContextMessages : CoreMessages : IsNever<ContextMessages> extends false ? ContextMessages : never, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, list: unknown[], options: TranslateOptions<Context['locale']>): MessageFunctionReturn<Message> | number;
1003
1073
 
1004
- export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, ResourceKeys extends PickupKeys<Context['messages']> = PickupKeys<Context['messages']>, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, named: NamedValue): MessageFunctionReturn<Message> | number;
1074
+ export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, DefinedLocaleMessage extends RemovedIndexResources<DefineCoreLocaleMessage> = RemovedIndexResources<DefineCoreLocaleMessage>, CoreMessages = IsEmptyObject<DefinedLocaleMessage> extends false ? PickupPaths<{
1075
+ [K in keyof DefinedLocaleMessage]: DefinedLocaleMessage[K];
1076
+ }> : never, ContextMessages = IsEmptyObject<Context['messages']> extends false ? PickupKeys<Context['messages']> : never, ResourceKeys extends CoreMessages | ContextMessages = IsNever<CoreMessages> extends false ? IsNever<ContextMessages> extends false ? CoreMessages | ContextMessages : CoreMessages : IsNever<ContextMessages> extends false ? ContextMessages : never, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, named: NamedValue): MessageFunctionReturn<Message> | number;
1005
1077
 
1006
- export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, ResourceKeys extends PickupKeys<Context['messages']> = PickupKeys<Context['messages']>, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, named: NamedValue, plural: number): MessageFunctionReturn<Message> | number;
1078
+ export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, DefinedLocaleMessage extends RemovedIndexResources<DefineCoreLocaleMessage> = RemovedIndexResources<DefineCoreLocaleMessage>, CoreMessages = IsEmptyObject<DefinedLocaleMessage> extends false ? PickupPaths<{
1079
+ [K in keyof DefinedLocaleMessage]: DefinedLocaleMessage[K];
1080
+ }> : never, ContextMessages = IsEmptyObject<Context['messages']> extends false ? PickupKeys<Context['messages']> : never, ResourceKeys extends CoreMessages | ContextMessages = IsNever<CoreMessages> extends false ? IsNever<ContextMessages> extends false ? CoreMessages | ContextMessages : CoreMessages : IsNever<ContextMessages> extends false ? ContextMessages : never, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, named: NamedValue, plural: number): MessageFunctionReturn<Message> | number;
1007
1081
 
1008
- export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, ResourceKeys extends PickupKeys<Context['messages']> = PickupKeys<Context['messages']>, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, named: NamedValue, defaultMsg: string): MessageFunctionReturn<Message> | number;
1082
+ export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, DefinedLocaleMessage extends RemovedIndexResources<DefineCoreLocaleMessage> = RemovedIndexResources<DefineCoreLocaleMessage>, CoreMessages = IsEmptyObject<DefinedLocaleMessage> extends false ? PickupPaths<{
1083
+ [K in keyof DefinedLocaleMessage]: DefinedLocaleMessage[K];
1084
+ }> : never, ContextMessages = IsEmptyObject<Context['messages']> extends false ? PickupKeys<Context['messages']> : never, ResourceKeys extends CoreMessages | ContextMessages = IsNever<CoreMessages> extends false ? IsNever<ContextMessages> extends false ? CoreMessages | ContextMessages : CoreMessages : IsNever<ContextMessages> extends false ? ContextMessages : never, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, named: NamedValue, defaultMsg: string): MessageFunctionReturn<Message> | number;
1009
1085
 
1010
- export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, ResourceKeys extends PickupKeys<Context['messages']> = PickupKeys<Context['messages']>, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, named: NamedValue, options: TranslateOptions<Context['locale']>): MessageFunctionReturn<Message> | number;
1086
+ export declare function translate<Context extends CoreContext<Message, {}, {}, {}>, Key extends string = string, DefinedLocaleMessage extends RemovedIndexResources<DefineCoreLocaleMessage> = RemovedIndexResources<DefineCoreLocaleMessage>, CoreMessages = IsEmptyObject<DefinedLocaleMessage> extends false ? PickupPaths<{
1087
+ [K in keyof DefinedLocaleMessage]: DefinedLocaleMessage[K];
1088
+ }> : never, ContextMessages = IsEmptyObject<Context['messages']> extends false ? PickupKeys<Context['messages']> : never, ResourceKeys extends CoreMessages | ContextMessages = IsNever<CoreMessages> extends false ? IsNever<ContextMessages> extends false ? CoreMessages | ContextMessages : CoreMessages : IsNever<ContextMessages> extends false ? ContextMessages : never, Message = string>(context: Context, key: Key | ResourceKeys | number | MessageFunction<Message>, named: NamedValue, options: TranslateOptions<Context['locale']>): MessageFunctionReturn<Message> | number;
1011
1089
 
1012
1090
  export declare const translateDevTools: (payloads: IntlifyDevToolsHookPayloads[IntlifyDevToolsHooks]) => void | null;
1013
1091
 
@@ -1062,7 +1140,7 @@ export declare const translateDevTools: (payloads: IntlifyDevToolsHookPayloads[I
1062
1140
  *
1063
1141
  * @VueI18nGeneral
1064
1142
  */
1065
- export declare interface TranslateOptions<Locales = Locale> {
1143
+ export declare interface TranslateOptions<Locales = Locale> extends LocaleOptions<Locales> {
1066
1144
  /**
1067
1145
  * @remarks
1068
1146
  * List interpolation
@@ -1083,11 +1161,6 @@ export declare interface TranslateOptions<Locales = Locale> {
1083
1161
  * Default message when is occurred translation missing
1084
1162
  */
1085
1163
  default?: string | boolean;
1086
- /**
1087
- * @remarks
1088
- * The locale of localization
1089
- */
1090
- locale?: Locales;
1091
1164
  /**
1092
1165
  * @remarks
1093
1166
  * Whether suppress warnings outputted when localization fails
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * core-base v9.4.1
2
+ * core-base v9.6.0
3
3
  * (c) 2023 kazuya kawaguchi
4
4
  * Released under the MIT License.
5
5
  */
@@ -2102,6 +2102,22 @@ function getWarnMessage(code, ...args) {
2102
2102
  return format$1(warnMessages[code], ...args);
2103
2103
  }
2104
2104
 
2105
+ /** @internal */
2106
+ function getLocale(context, options) {
2107
+ return options.locale != null
2108
+ ? resolveLocale(options.locale)
2109
+ : resolveLocale(context.locale);
2110
+ }
2111
+ let _resolveLocale;
2112
+ /** @internal */
2113
+ function resolveLocale(locale) {
2114
+ // prettier-ignore
2115
+ return isString(locale)
2116
+ ? locale
2117
+ : _resolveLocale != null && locale.resolvedOnce
2118
+ ? _resolveLocale
2119
+ : (_resolveLocale = locale());
2120
+ }
2105
2121
  /**
2106
2122
  * Fallback with simple implemenation
2107
2123
  *
@@ -2223,7 +2239,7 @@ function appendItemToChain(chain, target, blocks) {
2223
2239
  * Intlify core-base version
2224
2240
  * @internal
2225
2241
  */
2226
- const VERSION = '9.4.1';
2242
+ const VERSION = '9.6.0';
2227
2243
  const NOT_REOSLVED = -1;
2228
2244
  const DEFAULT_LOCALE = 'en-US';
2229
2245
  const MISSING_RESOLVE_VALUE = '';
@@ -2299,23 +2315,26 @@ function createCoreContext(options = {}) {
2299
2315
  // setup options
2300
2316
  const onWarn = isFunction(options.onWarn) ? options.onWarn : warn;
2301
2317
  const version = isString(options.version) ? options.version : VERSION;
2302
- const locale = isString(options.locale) ? options.locale : DEFAULT_LOCALE;
2318
+ const locale = isString(options.locale) || isFunction(options.locale)
2319
+ ? options.locale
2320
+ : DEFAULT_LOCALE;
2321
+ const _locale = isFunction(locale) ? DEFAULT_LOCALE : locale;
2303
2322
  const fallbackLocale = isArray(options.fallbackLocale) ||
2304
2323
  isPlainObject(options.fallbackLocale) ||
2305
2324
  isString(options.fallbackLocale) ||
2306
2325
  options.fallbackLocale === false
2307
2326
  ? options.fallbackLocale
2308
- : locale;
2327
+ : _locale;
2309
2328
  const messages = isPlainObject(options.messages)
2310
2329
  ? options.messages
2311
- : { [locale]: {} };
2330
+ : { [_locale]: {} };
2312
2331
  const datetimeFormats = isPlainObject(options.datetimeFormats)
2313
2332
  ? options.datetimeFormats
2314
- : { [locale]: {} }
2333
+ : { [_locale]: {} }
2315
2334
  ;
2316
2335
  const numberFormats = isPlainObject(options.numberFormats)
2317
2336
  ? options.numberFormats
2318
- : { [locale]: {} }
2337
+ : { [_locale]: {} }
2319
2338
  ;
2320
2339
  const modifiers = assign({}, options.modifiers || {}, getDefaultLinkedModifiers());
2321
2340
  const pluralRules = options.pluralRules || {};
@@ -2492,7 +2511,7 @@ function formatMessagePart(ctx, node) {
2492
2511
  return ctx.interpolate(ctx.named(named.k || named.key));
2493
2512
  case 5 /* NodeTypes.List */:
2494
2513
  const list = node;
2495
- return ctx.interpolate(ctx.list(list.i || list.index));
2514
+ return ctx.interpolate(ctx.list(list.i != null ? list.i : list.index));
2496
2515
  case 6 /* NodeTypes.Linked */:
2497
2516
  const linked = node;
2498
2517
  const modifier = linked.m || linked.modifier;
@@ -2655,7 +2674,7 @@ function translate(context, ...args) {
2655
2674
  ? (!messageCompiler ? () => key : key)
2656
2675
  : '';
2657
2676
  const enableDefaultMsg = fallbackFormat || defaultMsgOrKey !== '';
2658
- const locale = isString(options.locale) ? options.locale : context.locale;
2677
+ const locale = getLocale(context, options);
2659
2678
  // escape params
2660
2679
  escapeParameter && escapeParams(options);
2661
2680
  // resolve message format
@@ -3059,7 +3078,7 @@ function datetime(context, ...args) {
3059
3078
  ? options.fallbackWarn
3060
3079
  : context.fallbackWarn;
3061
3080
  const part = !!options.part;
3062
- const locale = isString(options.locale) ? options.locale : context.locale;
3081
+ const locale = getLocale(context, options);
3063
3082
  const locales = localeFallbacker(context, // eslint-disable-line @typescript-eslint/no-explicit-any
3064
3083
  fallbackLocale, locale);
3065
3084
  if (!isString(key) || key === '') {
@@ -3233,7 +3252,7 @@ function number(context, ...args) {
3233
3252
  ? options.fallbackWarn
3234
3253
  : context.fallbackWarn;
3235
3254
  const part = !!options.part;
3236
- const locale = isString(options.locale) ? options.locale : context.locale;
3255
+ const locale = getLocale(context, options);
3237
3256
  const locales = localeFallbacker(context, // eslint-disable-line @typescript-eslint/no-explicit-any
3238
3257
  fallbackLocale, locale);
3239
3258
  if (!isString(key) || key === '') {
@@ -3359,4 +3378,4 @@ function clearNumberFormat(ctx, locale, format) {
3359
3378
  }
3360
3379
  }
3361
3380
 
3362
- export { CompileErrorCodes, CoreErrorCodes, CoreWarnCodes, DATETIME_FORMAT_OPTIONS_KEYS, DEFAULT_LOCALE, DEFAULT_MESSAGE_DATA_TYPE, MISSING_RESOLVE_VALUE, NOT_REOSLVED, NUMBER_FORMAT_OPTIONS_KEYS, VERSION, clearCompileCache, clearDateTimeFormat, clearNumberFormat, compile, compileToFunction, createCompileError, createCoreContext, createCoreError, createMessageContext, datetime, fallbackWithLocaleChain, fallbackWithSimple, getAdditionalMeta, getDevToolsHook, getFallbackContext, getWarnMessage, handleMissing, initI18nDevTools, isMessageAST, isMessageFunction, isTranslateFallbackWarn, isTranslateMissingWarn, number, parse, parseDateTimeArgs, parseNumberArgs, parseTranslateArgs, registerLocaleFallbacker, registerMessageCompiler, registerMessageResolver, resolveValue, resolveWithKeyValue, setAdditionalMeta, setDevToolsHook, setFallbackContext, translate, translateDevTools, updateFallbackLocale };
3381
+ export { CompileErrorCodes, CoreErrorCodes, CoreWarnCodes, DATETIME_FORMAT_OPTIONS_KEYS, DEFAULT_LOCALE, DEFAULT_MESSAGE_DATA_TYPE, MISSING_RESOLVE_VALUE, NOT_REOSLVED, NUMBER_FORMAT_OPTIONS_KEYS, VERSION, clearCompileCache, clearDateTimeFormat, clearNumberFormat, compile, compileToFunction, createCompileError, createCoreContext, createCoreError, createMessageContext, datetime, fallbackWithLocaleChain, fallbackWithSimple, getAdditionalMeta, getDevToolsHook, getFallbackContext, getLocale, getWarnMessage, handleMissing, initI18nDevTools, isMessageAST, isMessageFunction, isTranslateFallbackWarn, isTranslateMissingWarn, number, parse, parseDateTimeArgs, parseNumberArgs, parseTranslateArgs, registerLocaleFallbacker, registerMessageCompiler, registerMessageResolver, resolveLocale, resolveValue, resolveWithKeyValue, setAdditionalMeta, setDevToolsHook, setFallbackContext, translate, translateDevTools, updateFallbackLocale };