Skip to content
This repository was archived by the owner on Dec 31, 2024. It is now read-only.

Commit 8b71eda

Browse files
committed
⭐ new: add 'setLocaleMessage' API
1 parent e41f0c9 commit 8b71eda

3 files changed

Lines changed: 24 additions & 6 deletions

File tree

decls/i18n.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ declare interface I18n {
3333
set missing (handler: MissingHandler): void,
3434
get formatter (): Formatter,
3535
set formatter (formatter: Formatter): void,
36+
setLocaleMessage (locale: Locale, message: LocaleMessage): void,
3637
t (key: Path, ...args: any): TranslateResult,
3738
tc (key: Path, choice?: number, ...args: any): TranslateResult,
3839
te (key: Path, ...args: any): boolean,

src/index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,10 @@ export default class VueI18n {
216216
te (key: Path, ...args: any): boolean {
217217
return this._te(key, this.locale, this.messages, ...args)
218218
}
219+
220+
setLocaleMessage (locale: Locale, message: LocaleMessage): void {
221+
this._vm.messages[locale] = message
222+
}
219223
}
220224

221225
VueI18n.install = install

test/unit/hot.test.js

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,18 @@ import messages from './fixture/index'
33
describe('hot reloading', () => {
44
let el
55
let i18n
6-
let orgLocale
7-
const expectLocale = 'the world updated'
6+
let orgEnLocale
7+
let orgJaLocaleMessage
8+
const expectEnLocale = 'the world updated'
9+
const expectJaLocaleMessage = {
10+
message: {
11+
hello: 'ザ・世界 -> メイド・イン・ヘブン'
12+
}
13+
}
814

915
beforeEach(() => {
10-
orgLocale = messages.en.message.hello
16+
orgEnLocale = messages.en.message.hello
17+
orgJaLocaleMessage = messages.ja
1118
i18n = new VueI18n({
1219
locale: 'en',
1320
messages
@@ -18,7 +25,8 @@ describe('hot reloading', () => {
1825
})
1926

2027
afterEach(() => {
21-
messages.en.message.hello = orgLocale
28+
messages.en.message.hello = orgEnLocale
29+
messages.ja = orgJaLocaleMessage
2230
i18n.messages = messages
2331
})
2432

@@ -34,10 +42,15 @@ describe('hot reloading', () => {
3442
waitForUpdate(() => {
3543
assert.equal(text.textContent, messages.en.message.hello)
3644
// hot reload (set reactivity messages)
37-
messages.en.message.hello = expectLocale
45+
messages.en.message.hello = expectEnLocale
3846
i18n.messages = messages
3947
}).then(() => {
40-
assert.equal(text.textContent, expectLocale)
48+
assert.equal(text.textContent, expectEnLocale)
49+
// upade locale
50+
i18n.setLocaleMessage('ja', expectJaLocaleMessage)
51+
i18n.locale = 'ja'
52+
}).then(() => {
53+
assert.equal(text.textContent, expectJaLocaleMessage.message.hello)
4154
}).then(done)
4255
})
4356
})

0 commit comments

Comments
 (0)