Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit6574854

Browse files
committed
fix(i18n): normalize identifier for lang with subtag
1 parent9171ea7 commit6574854

File tree

7 files changed

+72
-22
lines changed

7 files changed

+72
-22
lines changed

‎.changeset/shaggy-streets-pick.md‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltevietnam/i18n':patch
3+
---
4+
5+
normalize lang identifier (support lang with subtag, e.g. de-AT)

‎packages/i18n/src/builder/build/__snapshots__/common/messages/index.js‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ import * as en from "./en.js";
77
import*asvifrom"./vi.js";
88

99
const_greeting=/*@__PURE__*/createMessageWithParams("greeting",{
10-
en:en["greeting"],
11-
vi:vi["greeting"]
10+
"en":en["greeting"],
11+
"vi":vi["greeting"]
1212
})
1313
const_goodbye=/*@__PURE__*/createMessageSimple("goodbye",{
14-
en:en["goodbye"],
15-
vi:vi["goodbye"]
14+
"en":en["goodbye"],
15+
"vi":vi["goodbye"]
1616
})
1717
const_component_welcome=/*@__PURE__*/createMessageWithParams("component.welcome",{
18-
en:en["component.welcome"],
19-
vi:vi["component.welcome"]
18+
"en":en["component.welcome"],
19+
"vi":vi["component.welcome"]
2020
})
2121
export{_greetingas"greeting",_goodbyeas"goodbye",_component_welcomeas"component.welcome"};

‎packages/i18n/src/compiler/generate-message-module/generate-message-module.js‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
importFactories,
88
newline,
99
getSourceMessageType,
10+
normalizeLangIdentifier,
1011
}from'../utils.js';
1112

1213
// ===========
@@ -57,7 +58,7 @@ export function generateMessageModule(messages, langs) {
5758
factory.createImportClause(
5859
undefined,
5960
undefined,
60-
factory.createNamespaceImport(factory.createIdentifier(lang)),
61+
factory.createNamespaceImport(factory.createIdentifier(normalizeLangIdentifier(lang))),
6162
),
6263
factory.createStringLiteral(`./${lang}.js`),
6364
undefined,

‎packages/i18n/src/compiler/generate-message-module/generate-message-module.test.ts‎

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ test('can generate module with only simple message', () => {
2525
import * as vi from "./vi.js";
2626
2727
const _greeting = /*@__PURE__*/ createMessageSimple("greeting", {
28-
en: en["greeting"],
29-
vi: vi["greeting"]
28+
"en": en["greeting"],
29+
"vi": vi["greeting"]
3030
})
3131
export { _greeting as "greeting" };\n
3232
`);
@@ -45,8 +45,8 @@ test('can generate module with only with-params message', () => {
4545
import * as vi from "./vi.js";
4646
4747
const _farewell = /*@__PURE__*/ createMessageWithParams("farewell", {
48-
en: en["farewell"],
49-
vi: vi["farewell"]
48+
"en": en["farewell"],
49+
"vi": vi["farewell"]
5050
})
5151
export { _farewell as "farewell" };\n
5252
`);
@@ -68,13 +68,35 @@ test('can generate module with all types of message', () => {
6868
import * as vi from "./vi.js";
6969
7070
const _greeting = /*@__PURE__*/ createMessageSimple("greeting", {
71-
en: en["greeting"],
72-
vi: vi["greeting"]
71+
"en": en["greeting"],
72+
"vi": vi["greeting"]
7373
})
7474
const _farewell = /*@__PURE__*/ createMessageWithParams("farewell", {
75-
en: en["farewell"],
76-
vi: vi["farewell"]
75+
"en": en["farewell"],
76+
"vi": vi["farewell"]
7777
})
7878
export { _greeting as "greeting", _farewell as "farewell" };\n
7979
`);
8080
});
81+
82+
test('can generate module for lang with subtag',()=>{
83+
constmessages=[createSourceMessage('greeting','Hello, world!')];
84+
constmod=generateMessageModule(messages,['en-US','en-GB','vi']);
85+
expect(mod).toEqual(js`
86+
/**
87+
* DO NOT EDIT! This file is generated by @sveltevietnam/i18n */
88+
89+
import { createMessageSimple } from "@sveltevietnam/i18n/factory";
90+
91+
import * as en_GB from "./en-GB.js";
92+
import * as en_US from "./en-US.js";
93+
import * as vi from "./vi.js";
94+
95+
const _greeting = /*@__PURE__*/ createMessageSimple("greeting", {
96+
"en-GB": en_GB["greeting"],
97+
"en-US": en_US["greeting"],
98+
"vi": vi["greeting"]
99+
})
100+
export { _greeting as "greeting" };\n
101+
`);
102+
});

‎packages/i18n/src/compiler/generate-message/generate-message.js‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
importts,{factory}from'typescript';
22

3-
import{getIdFromMessageKey,getSourceMessageType}from'../utils.js';
3+
import{getIdFromMessageKey,getSourceMessageType,normalizeLangIdentifier}from'../utils.js';
44

55
// ===========
66
// Public API
@@ -30,9 +30,9 @@ export function generateMessage(message, langs) {
3030
.toSorted()
3131
.map((lang)=>
3232
factory.createPropertyAssignment(
33-
factory.createIdentifier(lang),
33+
factory.createStringLiteral(lang),
3434
factory.createElementAccessExpression(
35-
factory.createIdentifier(lang),
35+
factory.createIdentifier(normalizeLangIdentifier(lang)),
3636
factory.createStringLiteral(key),
3737
),
3838
),

‎packages/i18n/src/compiler/generate-message/generate-message.test.ts‎

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ test('can generate for simple message', () => {
1616
constcode=print(nodes,false);
1717
expect(code).toEqual(js`
1818
const _greeting = /*@__PURE__*/ createMessageSimple("greeting", {
19-
en: en["greeting"],
20-
vi: vi["greeting"]
19+
"en": en["greeting"],
20+
"vi": vi["greeting"]
2121
})\n
2222
`);
2323
});
@@ -28,8 +28,21 @@ test('can generate for with-params message', () => {
2828
constcode=print(nodes,false);
2929
expect(code).toEqual(js`
3030
const _farewell = /*@__PURE__*/ createMessageWithParams("farewell", {
31-
en: en["farewell"],
32-
vi: vi["farewell"]
31+
"en": en["farewell"],
32+
"vi": vi["farewell"]
33+
})\n
34+
`);
35+
});
36+
37+
test('can generate for lang with subtag',()=>{
38+
constmessage=createSourceMessage('greeting','Hello, world!');
39+
const{ nodes}=generateMessage(message,['en-US','en-GB','vi']);
40+
constcode=print(nodes,false);
41+
expect(code).toEqual(js`
42+
const _greeting = /*@__PURE__*/ createMessageSimple("greeting", {
43+
"en-GB": en_GB["greeting"],
44+
"en-US": en_US["greeting"],
45+
"vi": vi["greeting"]
3346
})\n
3447
`);
3548
});

‎packages/i18n/src/compiler/utils.js‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,15 @@ export function getIdFromMessageKey(key) {
3030
);
3131
}
3232

33+
/**
34+
* replace any non-alphanumeric character with underscore
35+
*@param {string} lang
36+
*@returns {string}
37+
*/
38+
exportfunctionnormalizeLangIdentifier(lang){
39+
returnlang.replace(/[^a-zA-Z0-9]/g,'_');
40+
}
41+
3342
exportconstnewline=()=>factory.createIdentifier('\n');
3443

3544
/**

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp