intl-template 0.0.2 → 0.0.4

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/dist/intl.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export function setTransition(locale: any, transition: any): {};
2
2
  export function translate(locale: any, strings: any, ...parts: any[]): any;
3
+ export const l10n: (strings?: any, ...parts: any[]) => any;
package/dist/intl.js CHANGED
@@ -1,3 +1,4 @@
1
+ var _a;
1
2
  var TRANSLATIONS = {};
2
3
  export function setTransition(locale, transition) {
3
4
  return TRANSLATIONS[locale] = Object.entries(transition).reduce(function (obj, _a) {
@@ -27,19 +28,20 @@ export function setTransition(locale, transition) {
27
28
  }, {});
28
29
  }
29
30
  export function translate(locale, strings) {
31
+ var _a, _b;
30
32
  var parts = [];
31
33
  for (var _i = 2; _i < arguments.length; _i++) {
32
34
  parts[_i - 2] = arguments[_i];
33
35
  }
34
36
  var key = strings.join("{}");
35
37
  var translation = TRANSLATIONS === null || TRANSLATIONS === void 0 ? void 0 : TRANSLATIONS[locale];
36
- var _a = (translation === null || translation === void 0 ? void 0 : translation[key]) || {}, template = _a.template, order = _a.order;
37
- if (!template) {
38
+ var _c = (translation === null || translation === void 0 ? void 0 : translation[key]) || {}, template = _c.template, order = _c.order;
39
+ if (!template && ((_b = (_a = import.meta) === null || _a === void 0 ? void 0 : _a.env) === null || _b === void 0 ? void 0 : _b.MODE) === "development") {
38
40
  console.warn("not match translate key, ".concat(key), { translation: translation, locale: locale, strings: strings, parts: parts });
39
41
  template = strings.slice();
40
42
  order = parts.map(function (_, i) { return i; });
41
43
  }
42
- if (template.length !== strings.length) {
44
+ if (parts.length > 0 && template.length - 1 !== parts.length) {
43
45
  throw new Error("translate template parts length not match. locale: ".concat(locale, ", key: ").concat(key));
44
46
  }
45
47
  var ret = template.reduce(function (ret, template, idx) {
@@ -65,4 +67,5 @@ export function translate(locale, strings) {
65
67
  });
66
68
  return ret;
67
69
  }
70
+ export var l10n = translate.bind(null, (_a = globalThis === null || globalThis === void 0 ? void 0 : globalThis.navigator) === null || _a === void 0 ? void 0 : _a.language);
68
71
  //# sourceMappingURL=intl.js.map
package/dist/intl.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"intl.js","sourceRoot":"","sources":["../src/intl.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"intl.js","sourceRoot":"","sources":["../src/intl.js"],"names":[],"mappings":"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"}
package/dist/intl.test.js CHANGED
@@ -2,77 +2,43 @@ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cook
2
2
  if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
3
3
  return cooked;
4
4
  };
5
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7
- return new (P || (P = Promise))(function (resolve, reject) {
8
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
9
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
10
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
11
- step((generator = generator.apply(thisArg, _arguments || [])).next());
12
- });
13
- };
14
- var __generator = (this && this.__generator) || function (thisArg, body) {
15
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
16
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
17
- function verb(n) { return function (v) { return step([n, v]); }; }
18
- function step(op) {
19
- if (f) throw new TypeError("Generator is already executing.");
20
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
21
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
22
- if (y = 0, t) op = [op[0] & 2, t.value];
23
- switch (op[0]) {
24
- case 0: case 1: t = op; break;
25
- case 4: _.label++; return { value: op[1], done: false };
26
- case 5: _.label++; y = op[1]; op = [0]; continue;
27
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
28
- default:
29
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
30
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
31
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
32
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
33
- if (t[2]) _.ops.pop();
34
- _.trys.pop(); continue;
35
- }
36
- op = body.call(thisArg, _);
37
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
38
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
39
- }
40
- };
41
5
  import assert from 'node:assert';
42
6
  import test from 'node:test';
43
7
  import { translate, setTransition } from './intl.js';
44
- test('apply template', function (t) { return __awaiter(void 0, void 0, void 0, function () {
45
- var l10n;
46
- return __generator(this, function (_a) {
47
- setTransition('zh-CN', {
48
- 'abc {} def {}': '甲乙丙 {} {} 丁戊卯',
49
- });
50
- l10n = translate.bind(null, 'zh-CN');
51
- assert.deepEqual(l10n(templateObject_1 || (templateObject_1 = __makeTemplateObject(["abc ", " def ", ""], ["abc ", " def ", ""])), 123, 345), ['甲乙丙 ', 123, ' ', 345, ' 丁戊卯']);
52
- return [2 /*return*/];
8
+ test('apply template', function (t) {
9
+ setTransition('zh-CN', {
10
+ 'abc {} def {}': '甲乙丙 {} {} 丁戊卯',
53
11
  });
54
- }); });
55
- test('change slot order', function (t) { return __awaiter(void 0, void 0, void 0, function () {
56
- var l10n;
57
- return __generator(this, function (_a) {
58
- setTransition('zh-CN', {
59
- 'abc {} def {}': '甲乙丙 {1} {0} 丁戊卯',
60
- });
61
- l10n = translate.bind(null, 'zh-CN');
62
- assert.equal(l10n(templateObject_2 || (templateObject_2 = __makeTemplateObject(["abc ", " def ", ""], ["abc ", " def ", ""])), 123, 345).toString(), '甲乙丙 345 123 丁戊卯');
63
- return [2 /*return*/];
12
+ var l10n = translate.bind(null, 'zh-CN');
13
+ assert.deepEqual(l10n(templateObject_1 || (templateObject_1 = __makeTemplateObject(["abc ", " def ", ""], ["abc ", " def ", ""])), 123, 345), ['甲乙丙 ', 123, ' ', 345, ' 丁戊卯']);
14
+ });
15
+ test('change slot order', function (t) {
16
+ setTransition('zh-CN', {
17
+ 'abc {} def {}': '甲乙丙 {1} {0} 丁戊卯',
64
18
  });
65
- }); });
66
- test('slot function', function (t) { return __awaiter(void 0, void 0, void 0, function () {
67
- var l10n;
68
- return __generator(this, function (_a) {
69
- setTransition('zh-CN', {
70
- '{} def {}': '{1} {0} 丁戊卯',
71
- });
72
- l10n = translate.bind(null, 'zh-CN');
73
- assert.equal(l10n(templateObject_3 || (templateObject_3 = __makeTemplateObject(["", " def ", ""], ["", " def ", ""])), function (locale) { return locale; }, 345).toString(), '345 zh-CN 丁戊卯');
74
- return [2 /*return*/];
19
+ var l10n = translate.bind(null, 'zh-CN');
20
+ assert.equal(l10n(templateObject_2 || (templateObject_2 = __makeTemplateObject(["abc ", " def ", ""], ["abc ", " def ", ""])), 123, 345).toString(), '甲乙丙 345 123 丁戊卯');
21
+ });
22
+ test('slot function', function (t) {
23
+ setTransition('zh-CN', {
24
+ '{} def {}': '{1} {0} 丁戊卯',
75
25
  });
76
- }); });
77
- var templateObject_1, templateObject_2, templateObject_3;
26
+ var l10n = translate.bind(null, 'zh-CN');
27
+ assert.equal(l10n(templateObject_3 || (templateObject_3 = __makeTemplateObject(["", " def ", ""], ["", " def ", ""])), function (locale) { return locale; }, 345).toString(), '345 zh-CN 丁戊卯');
28
+ });
29
+ test('slot count match', function (t) {
30
+ setTransition('zh-CN', {
31
+ '{} def {}': '{} 丁戊卯',
32
+ '{}matched{}': '{}{}丁戊卯',
33
+ });
34
+ var l10n = translate.bind(null, 'zh-CN');
35
+ try {
36
+ l10n(templateObject_4 || (templateObject_4 = __makeTemplateObject(["", " def ", ""], ["", " def ", ""])), function (locale) { return locale; }, 345);
37
+ }
38
+ catch (err) {
39
+ assert.equal(err.message, "translate template parts length not match. locale: zh-CN, key: {} def {}");
40
+ }
41
+ assert.equal(l10n(templateObject_5 || (templateObject_5 = __makeTemplateObject(["", "matched", ""], ["", "matched", ""])), function (locale) { return locale; }, 345).toString(), "zh-CN345\u4E01\u620A\u536F");
42
+ });
43
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5;
78
44
  //# sourceMappingURL=intl.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"intl.test.js","sourceRoot":"","sources":["../src/intl.test.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAGrD,IAAI,CAAC,gBAAgB,EAAE,UAAO,CAAC;;;QAC9B,aAAa,CAAC,OAAO,EAAE;YACtB,eAAe,EAAE,eAAe;SAChC,CAAC,CAAA;QACI,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC1C,MAAM,CAAC,SAAS,CAAC,IAAI,sFAAA,MAAO,EAAG,OAAQ,EAAG,EAAE,KAAhB,GAAG,EAAQ,GAAG,GAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAA;;;KAC9E,CAAC,CAAC;AAEH,IAAI,CAAC,mBAAmB,EAAE,UAAO,CAAC;;;QACjC,aAAa,CAAC,OAAO,EAAE;YACtB,eAAe,EAAE,iBAAiB;SAClC,CAAC,CAAA;QACI,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC1C,MAAM,CAAC,KAAK,CAAC,IAAI,sFAAA,MAAO,EAAG,OAAQ,EAAG,EAAE,KAAhB,GAAG,EAAQ,GAAG,EAAG,QAAQ,EAAE,EAAE,iBAAiB,CAAC,CAAA;;;KACvE,CAAC,CAAC;AAEH,IAAI,CAAC,eAAe,EAAE,UAAO,CAAC;;;QAC7B,aAAa,CAAC,OAAO,EAAE;YACtB,WAAW,EAAE,aAAa;SAC1B,CAAC,CAAA;QACI,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC1C,MAAM,CAAC,KAAK,CAAC,IAAI,kFAAA,EAAG,EAAgB,OAAQ,EAAG,EAAE,KAA7B,UAAA,MAAM,IAAI,OAAA,MAAM,EAAN,CAAM,EAAQ,GAAG,EAAG,QAAQ,EAAE,EAAE,eAAe,CAAC,CAAA;;;KAC9E,CAAC,CAAC"}
1
+ {"version":3,"file":"intl.test.js","sourceRoot":"","sources":["../src/intl.test.js"],"names":[],"mappings":";;;;AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAGrD,IAAI,CAAC,gBAAgB,EAAE,UAAC,CAAC;IACxB,aAAa,CAAC,OAAO,EAAE;QACtB,eAAe,EAAE,eAAe;KAChC,CAAC,CAAA;IACF,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC1C,MAAM,CAAC,SAAS,CAAC,IAAI,sFAAA,MAAO,EAAG,OAAQ,EAAG,EAAE,KAAhB,GAAG,EAAQ,GAAG,GAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAA;AAC/E,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mBAAmB,EAAE,UAAC,CAAC;IAC3B,aAAa,CAAC,OAAO,EAAE;QACtB,eAAe,EAAE,iBAAiB;KAClC,CAAC,CAAA;IACF,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC1C,MAAM,CAAC,KAAK,CAAC,IAAI,sFAAA,MAAO,EAAG,OAAQ,EAAG,EAAE,KAAhB,GAAG,EAAQ,GAAG,EAAG,QAAQ,EAAE,EAAE,iBAAiB,CAAC,CAAA;AACxE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,eAAe,EAAE,UAAC,CAAC;IACvB,aAAa,CAAC,OAAO,EAAE;QACtB,WAAW,EAAE,aAAa;KAC1B,CAAC,CAAA;IACF,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC1C,MAAM,CAAC,KAAK,CAAC,IAAI,kFAAA,EAAG,EAAgB,OAAQ,EAAG,EAAE,KAA7B,UAAA,MAAM,IAAI,OAAA,MAAM,EAAN,CAAM,EAAQ,GAAG,EAAG,QAAQ,EAAE,EAAE,eAAe,CAAC,CAAA;AAC/E,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kBAAkB,EAAE,UAAC,CAAC;IAC1B,aAAa,CAAC,OAAO,EAAE;QACtB,WAAW,EAAE,QAAQ;QACrB,aAAa,EAAE,SAAS;KACxB,CAAC,CAAA;IACF,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC1C,IAAI,CAAC;QACJ,IAAI,kFAAA,EAAG,EAAgB,OAAQ,EAAG,EAAE,KAA7B,UAAA,MAAM,IAAI,OAAA,MAAM,EAAN,CAAM,EAAQ,GAAG,EAAE;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,KAAK,CACX,GAAG,CAAC,OAAO,EACX,0EAA0E,CAC1E,CAAA;IACF,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,oFAAA,EAAG,EAAgB,SAAU,EAAG,EAAE,KAA/B,UAAA,MAAM,IAAI,OAAA,MAAM,EAAN,CAAM,EAAU,GAAG,EAAG,QAAQ,EAAE,EAAE,4BAAa,CAAC,CAAA;AAC/E,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "intl-template",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "l10n tagged template literals",
5
5
  "type": "module",
6
6
  "main": "dist/intl.js",
package/src/intl.js CHANGED
@@ -35,12 +35,14 @@ export function translate(locale, strings, ...parts) {
35
35
  const translation = TRANSLATIONS?.[locale]
36
36
  let { template, order } = translation?.[key] || {}
37
37
  if (!template) {
38
- console.warn(`not match translate key, ${key}`, { translation, locale, strings, parts })
38
+ if (import.meta?.env?.MODE === "development") {
39
+ console.warn(`not match translate key, ${key}`, { translation, locale, strings, parts })
40
+ }
39
41
  template = strings.slice()
40
42
  order = parts.map((_, i) => i)
41
43
  }
42
44
 
43
- if (template.length !== strings.length) {
45
+ if (parts.length > 0 && template.length - 1 !== parts.length) {
44
46
  throw new Error(`translate template parts length not match. locale: ${locale}, key: ${key}`)
45
47
  }
46
48
 
@@ -68,3 +70,5 @@ export function translate(locale, strings, ...parts) {
68
70
 
69
71
  return ret
70
72
  }
73
+
74
+ export const l10n = translate.bind(null, globalThis?.navigator?.language)
package/src/intl.test.js CHANGED
@@ -3,7 +3,7 @@ import test from 'node:test';
3
3
  import { translate, setTransition } from './intl.js';
4
4
 
5
5
 
6
- test('apply template', async (t) => {
6
+ test('apply template', (t) => {
7
7
  setTransition('zh-CN', {
8
8
  'abc {} def {}': '甲乙丙 {} {} 丁戊卯',
9
9
  })
@@ -11,7 +11,7 @@ test('apply template', async (t) => {
11
11
  assert.deepEqual(l10n`abc ${123} def ${345}`, ['甲乙丙 ', 123, ' ', 345, ' 丁戊卯'])
12
12
  });
13
13
 
14
- test('change slot order', async (t) => {
14
+ test('change slot order', (t) => {
15
15
  setTransition('zh-CN', {
16
16
  'abc {} def {}': '甲乙丙 {1} {0} 丁戊卯',
17
17
  })
@@ -19,10 +19,28 @@ test('change slot order', async (t) => {
19
19
  assert.equal(l10n`abc ${123} def ${345}`.toString(), '甲乙丙 345 123 丁戊卯')
20
20
  });
21
21
 
22
- test('slot function', async (t) => {
22
+ test('slot function', (t) => {
23
23
  setTransition('zh-CN', {
24
24
  '{} def {}': '{1} {0} 丁戊卯',
25
25
  })
26
26
  const l10n = translate.bind(null, 'zh-CN')
27
27
  assert.equal(l10n`${locale => locale} def ${345}`.toString(), '345 zh-CN 丁戊卯')
28
28
  });
29
+
30
+ test('slot count match', (t) => {
31
+ setTransition('zh-CN', {
32
+ '{} def {}': '{} 丁戊卯',
33
+ '{}matched{}': '{}{}丁戊卯',
34
+ })
35
+ const l10n = translate.bind(null, 'zh-CN')
36
+ try {
37
+ l10n`${locale => locale} def ${345}`
38
+ } catch (err) {
39
+ assert.equal(
40
+ err.message,
41
+ `translate template parts length not match. locale: zh-CN, key: {} def {}`
42
+ )
43
+ }
44
+
45
+ assert.equal(l10n`${locale => locale}matched${345}`.toString(), `zh-CN345丁戊卯`)
46
+ });