Skip to content

Commit 58c651e

Browse files
authored
fix: undefind setter using (#365)
1 parent f80bd1d commit 58c651e

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

packages/vue-i18n/src/composer.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ export const DatetimePartsSymbol = makeSymbol('__datetimeParts')
8484
export const NumberPartsSymbol = makeSymbol('__numberParts')
8585
export const EnableEmitter = makeSymbol('__enableEmitter')
8686
export const DisableEmitter = makeSymbol('__disableEmitter')
87+
export const SetPluralRulesSymbol = makeSymbol('__setPluralRules')
8788

8889
/** @VueI18nComposition */
8990
export type VueMessageType = string | VNode
@@ -910,6 +911,7 @@ export interface ComposerInternal {
910911
__datetimeParts(...args: unknown[]): string | Intl.DateTimeFormatPart[]
911912
__enableEmitter?: (emitter: DevToolsEmitter) => void
912913
__disableEmitter?: () => void
914+
__setPluralRules(rules: PluralizationRules): void
913915
}
914916

915917
type ComposerWarnType = 'translate' | 'number format' | 'datetime format'
@@ -1119,7 +1121,7 @@ export function createComposer<
11191121
: {} as LinkedModifiers<Message>
11201122

11211123
// pluralRules
1122-
const _pluralRules = options.pluralRules || (__root && __root.pluralRules)
1124+
let _pluralRules = options.pluralRules || (__root && __root.pluralRules)
11231125

11241126
// runtime context
11251127
// eslint-disable-next-line prefer-const
@@ -1385,6 +1387,11 @@ export function createComposer<
13851387
)
13861388
}
13871389

1390+
function __setPluralRules(rules: PluralizationRules): void {
1391+
_pluralRules = rules
1392+
_context.pluralRules = _pluralRules
1393+
}
1394+
13881395
// te
13891396
function te(key: Path, locale?: Locale): boolean {
13901397
const targetLocale = isString(locale) ? locale : _locale.value
@@ -1597,7 +1604,8 @@ export function createComposer<
15971604
setMissingHandler,
15981605
[TransrateVNodeSymbol]: __transrateVNode,
15991606
[NumberPartsSymbol]: __numberParts,
1600-
[DatetimePartsSymbol]: __datetimeParts
1607+
[DatetimePartsSymbol]: __datetimeParts,
1608+
[SetPluralRulesSymbol]: __setPluralRules
16011609
}
16021610

16031611
// for vue-devtools timeline event

packages/vue-i18n/src/mixin.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { getCurrentInstance } from 'vue'
2-
import { getLocaleMessages } from './composer'
2+
import { getLocaleMessages, SetPluralRulesSymbol } from './composer'
33
import { createVueI18n } from './legacy'
44
import { createI18nError, I18nErrorCodes } from './errors'
55
import { addTimelineEvent } from './devtools'
@@ -166,8 +166,10 @@ function mergeToRoot<Messages, DateTimeFormats, NumberFormats>(
166166
root.escapeParameterHtml =
167167
options.escapeParameterHtml || root.escapeParameterHtml
168168
root.sync = options.sync || root.sync
169-
root.pluralizationRules =
169+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
170+
;(root as any).__composer[SetPluralRulesSymbol](
170171
options.pluralizationRules || root.pluralizationRules
172+
)
171173
const messages = getLocaleMessages<VueMessageType>(root.locale, {
172174
messages: options.messages,
173175
__i18n: options.__i18n

0 commit comments

Comments
 (0)