react-scoped-i18n 0.0.1 → 0.0.2

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.
Files changed (126) hide show
  1. package/package.json +28 -6
  2. package/dist/cjs/createI18nContext/api/createCommons.d.ts +0 -6
  3. package/dist/cjs/createI18nContext/api/createCommons.js +0 -30
  4. package/dist/cjs/createI18nContext/api/createCommons.test.d.ts +0 -1
  5. package/dist/cjs/createI18nContext/api/createCommons.test.js +0 -26
  6. package/dist/cjs/createI18nContext/api/createFormat.d.ts +0 -9
  7. package/dist/cjs/createI18nContext/api/createFormat.js +0 -54
  8. package/dist/cjs/createI18nContext/api/createFormat.test.d.ts +0 -1
  9. package/dist/cjs/createI18nContext/api/createFormat.test.js +0 -71
  10. package/dist/cjs/createI18nContext/api/createT.d.ts +0 -7
  11. package/dist/cjs/createI18nContext/api/createT.js +0 -15
  12. package/dist/cjs/createI18nContext/api/createT.test.d.ts +0 -1
  13. package/dist/cjs/createI18nContext/api/createT.test.js +0 -23
  14. package/dist/cjs/createI18nContext/api/createTGlobal.d.ts +0 -8
  15. package/dist/cjs/createI18nContext/api/createTGlobal.js +0 -31
  16. package/dist/cjs/createI18nContext/api/createTGlobal.test.d.ts +0 -1
  17. package/dist/cjs/createI18nContext/api/createTGlobal.test.js +0 -20
  18. package/dist/cjs/createI18nContext/api/createTPlural.d.ts +0 -5
  19. package/dist/cjs/createI18nContext/api/createTPlural.js +0 -19
  20. package/dist/cjs/createI18nContext/api/createTPlural.test.d.ts +0 -1
  21. package/dist/cjs/createI18nContext/api/createTPlural.test.js +0 -31
  22. package/dist/cjs/createI18nContext/api/createUseI18n.d.ts +0 -21
  23. package/dist/cjs/createI18nContext/api/createUseI18n.js +0 -52
  24. package/dist/cjs/createI18nContext/api/createUseI18n.test.d.ts +0 -1
  25. package/dist/cjs/createI18nContext/api/createUseI18n.test.js +0 -46
  26. package/dist/cjs/createI18nContext/const/index.d.ts +0 -1
  27. package/dist/cjs/createI18nContext/const/index.js +0 -4
  28. package/dist/cjs/createI18nContext/index.d.ts +0 -29
  29. package/dist/cjs/createI18nContext/index.integration.test.d.ts +0 -1
  30. package/dist/cjs/createI18nContext/index.integration.test.js +0 -41
  31. package/dist/cjs/createI18nContext/index.js +0 -45
  32. package/dist/cjs/createI18nContext/provider/createI18nProvider.d.ts +0 -15
  33. package/dist/cjs/createI18nContext/provider/createI18nProvider.js +0 -23
  34. package/dist/cjs/createI18nContext/type/index.d.ts +0 -19
  35. package/dist/cjs/createI18nContext/type/index.js +0 -7
  36. package/dist/cjs/createI18nContext/type/isLanguage.test.d.ts +0 -1
  37. package/dist/cjs/createI18nContext/type/isLanguage.test.js +0 -16
  38. package/dist/cjs/createI18nContext/util/getPluralTranslation.d.ts +0 -7
  39. package/dist/cjs/createI18nContext/util/getPluralTranslation.js +0 -48
  40. package/dist/cjs/createI18nContext/util/getPluralTranslation.test.d.ts +0 -1
  41. package/dist/cjs/createI18nContext/util/getPluralTranslation.test.js +0 -126
  42. package/dist/cjs/createI18nContext/util/getTranslation.d.ts +0 -7
  43. package/dist/cjs/createI18nContext/util/getTranslation.js +0 -32
  44. package/dist/cjs/createI18nContext/util/getTranslation.test.d.ts +0 -1
  45. package/dist/cjs/createI18nContext/util/getTranslation.test.js +0 -96
  46. package/dist/cjs/env.d.ts +0 -1
  47. package/dist/cjs/env.js +0 -9
  48. package/dist/cjs/index.d.ts +0 -1
  49. package/dist/cjs/index.js +0 -5
  50. package/dist/cjs/index.test.d.ts +0 -0
  51. package/dist/cjs/index.test.js +0 -40
  52. package/dist/esm/createI18nContext/api/createCommons.d.ts +0 -7
  53. package/dist/esm/createI18nContext/api/createCommons.d.ts.map +0 -1
  54. package/dist/esm/createI18nContext/api/createCommons.js +0 -26
  55. package/dist/esm/createI18nContext/api/createCommons.test.d.ts +0 -2
  56. package/dist/esm/createI18nContext/api/createCommons.test.d.ts.map +0 -1
  57. package/dist/esm/createI18nContext/api/createCommons.test.js +0 -24
  58. package/dist/esm/createI18nContext/api/createFormat.d.ts +0 -10
  59. package/dist/esm/createI18nContext/api/createFormat.d.ts.map +0 -1
  60. package/dist/esm/createI18nContext/api/createFormat.js +0 -50
  61. package/dist/esm/createI18nContext/api/createFormat.test.d.ts +0 -2
  62. package/dist/esm/createI18nContext/api/createFormat.test.d.ts.map +0 -1
  63. package/dist/esm/createI18nContext/api/createFormat.test.js +0 -69
  64. package/dist/esm/createI18nContext/api/createT.d.ts +0 -8
  65. package/dist/esm/createI18nContext/api/createT.d.ts.map +0 -1
  66. package/dist/esm/createI18nContext/api/createT.js +0 -11
  67. package/dist/esm/createI18nContext/api/createT.test.d.ts +0 -2
  68. package/dist/esm/createI18nContext/api/createT.test.d.ts.map +0 -1
  69. package/dist/esm/createI18nContext/api/createT.test.js +0 -21
  70. package/dist/esm/createI18nContext/api/createTGlobal.d.ts +0 -9
  71. package/dist/esm/createI18nContext/api/createTGlobal.d.ts.map +0 -1
  72. package/dist/esm/createI18nContext/api/createTGlobal.js +0 -27
  73. package/dist/esm/createI18nContext/api/createTGlobal.test.d.ts +0 -2
  74. package/dist/esm/createI18nContext/api/createTGlobal.test.d.ts.map +0 -1
  75. package/dist/esm/createI18nContext/api/createTGlobal.test.js +0 -18
  76. package/dist/esm/createI18nContext/api/createTPlural.d.ts +0 -6
  77. package/dist/esm/createI18nContext/api/createTPlural.d.ts.map +0 -1
  78. package/dist/esm/createI18nContext/api/createTPlural.js +0 -15
  79. package/dist/esm/createI18nContext/api/createTPlural.test.d.ts +0 -2
  80. package/dist/esm/createI18nContext/api/createTPlural.test.d.ts.map +0 -1
  81. package/dist/esm/createI18nContext/api/createTPlural.test.js +0 -29
  82. package/dist/esm/createI18nContext/api/createUseI18n.d.ts +0 -22
  83. package/dist/esm/createI18nContext/api/createUseI18n.d.ts.map +0 -1
  84. package/dist/esm/createI18nContext/api/createUseI18n.js +0 -48
  85. package/dist/esm/createI18nContext/api/createUseI18n.test.d.ts +0 -2
  86. package/dist/esm/createI18nContext/api/createUseI18n.test.d.ts.map +0 -1
  87. package/dist/esm/createI18nContext/api/createUseI18n.test.js +0 -44
  88. package/dist/esm/createI18nContext/const/index.d.ts +0 -2
  89. package/dist/esm/createI18nContext/const/index.d.ts.map +0 -1
  90. package/dist/esm/createI18nContext/const/index.js +0 -1
  91. package/dist/esm/createI18nContext/index.d.ts +0 -30
  92. package/dist/esm/createI18nContext/index.d.ts.map +0 -1
  93. package/dist/esm/createI18nContext/index.integration.test.d.ts +0 -2
  94. package/dist/esm/createI18nContext/index.integration.test.d.ts.map +0 -1
  95. package/dist/esm/createI18nContext/index.integration.test.js +0 -39
  96. package/dist/esm/createI18nContext/index.js +0 -42
  97. package/dist/esm/createI18nContext/provider/createI18nProvider.d.ts +0 -16
  98. package/dist/esm/createI18nContext/provider/createI18nProvider.d.ts.map +0 -1
  99. package/dist/esm/createI18nContext/provider/createI18nProvider.js +0 -19
  100. package/dist/esm/createI18nContext/type/index.d.ts +0 -20
  101. package/dist/esm/createI18nContext/type/index.d.ts.map +0 -1
  102. package/dist/esm/createI18nContext/type/index.js +0 -3
  103. package/dist/esm/createI18nContext/type/isLanguage.test.d.ts +0 -2
  104. package/dist/esm/createI18nContext/type/isLanguage.test.d.ts.map +0 -1
  105. package/dist/esm/createI18nContext/type/isLanguage.test.js +0 -14
  106. package/dist/esm/createI18nContext/util/getPluralTranslation.d.ts +0 -8
  107. package/dist/esm/createI18nContext/util/getPluralTranslation.d.ts.map +0 -1
  108. package/dist/esm/createI18nContext/util/getPluralTranslation.js +0 -44
  109. package/dist/esm/createI18nContext/util/getPluralTranslation.test.d.ts +0 -2
  110. package/dist/esm/createI18nContext/util/getPluralTranslation.test.d.ts.map +0 -1
  111. package/dist/esm/createI18nContext/util/getPluralTranslation.test.js +0 -124
  112. package/dist/esm/createI18nContext/util/getTranslation.d.ts +0 -8
  113. package/dist/esm/createI18nContext/util/getTranslation.d.ts.map +0 -1
  114. package/dist/esm/createI18nContext/util/getTranslation.js +0 -28
  115. package/dist/esm/createI18nContext/util/getTranslation.test.d.ts +0 -2
  116. package/dist/esm/createI18nContext/util/getTranslation.test.d.ts.map +0 -1
  117. package/dist/esm/createI18nContext/util/getTranslation.test.js +0 -94
  118. package/dist/esm/env.d.ts +0 -2
  119. package/dist/esm/env.d.ts.map +0 -1
  120. package/dist/esm/env.js +0 -6
  121. package/dist/esm/index.d.ts +0 -2
  122. package/dist/esm/index.d.ts.map +0 -1
  123. package/dist/esm/index.js +0 -1
  124. package/dist/esm/index.test.d.ts +0 -1
  125. package/dist/esm/index.test.d.ts.map +0 -1
  126. package/dist/esm/index.test.js +0 -7
package/package.json CHANGED
@@ -1,10 +1,29 @@
1
1
  {
2
2
  "name": "react-scoped-i18n",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "description": "A scoped internationalization (i18n) library for React applications",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",
7
7
  "types": "./dist/esm/index.d.ts",
8
+ "license": "MIT",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/akocan98/react-scoped-i18n"
12
+ },
13
+ "bugs": "https://github.com/akocan98/react-scoped-i18n/issues",
14
+ "keywords": [
15
+ "react",
16
+ "i18n",
17
+ "internationalization",
18
+ "localization",
19
+ "react-native",
20
+ "expo",
21
+ "typescript",
22
+ "number formatting",
23
+ "date formatting",
24
+ "currency formatting",
25
+ "translations"
26
+ ],
8
27
  "exports": {
9
28
  ".": {
10
29
  "import": "./dist/esm/index.js",
@@ -15,20 +34,23 @@
15
34
  "files": [
16
35
  "dist"
17
36
  ],
37
+ "engines": {
38
+ "node": ">=18"
39
+ },
40
+ "sideEffects": false,
18
41
  "scripts": {
19
42
  "build": "npm run build:esm && npm run build:cjs",
20
43
  "build:esm": "tsc -p tsconfig.esm.json",
21
44
  "build:cjs": "tsc -p tsconfig.cjs.json",
22
- "prepare": "husky",
23
45
  "lint": "eslint 'src/**/*.{ts,tsx}'",
24
46
  "prettier": "prettier --write 'src/**/*.{ts,tsx,js,jsx,json,css,md}'",
25
- "test": "jest --silent",
26
- "test:coverage": "jest --coverage --silent",
47
+ "test": "jest",
48
+ "test:coverage": "jest --coverage",
27
49
  "tsc": "tsc --noEmit"
28
50
  },
29
51
  "peerDependencies": {
30
- "react": ">=19",
31
- "react-dom": ">=19"
52
+ "react": ">=18",
53
+ "react-dom": ">=18"
32
54
  },
33
55
  "devDependencies": {
34
56
  "@testing-library/react": "^16.3.1",
@@ -1,6 +0,0 @@
1
- import { TranslationMap } from "../type";
2
- export declare const createCommons: <const Languages extends readonly string[], const Commons extends Record<string, TranslationMap<Languages[number], string>>>({ commons, currentLanguage, fallbackLanguage, }: {
3
- commons: Commons;
4
- currentLanguage: Languages[number];
5
- fallbackLanguage: Languages[number];
6
- }) => { [K in keyof Commons]?: string | undefined; };
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createCommons = void 0;
4
- const env_1 = require("../../env");
5
- const const_1 = require("../const");
6
- const createCommons = ({ commons, currentLanguage, fallbackLanguage, }) => {
7
- const result = {};
8
- for (const key in commons) {
9
- const translationMap = commons[key];
10
- const targetTranslation = translationMap[currentLanguage];
11
- if (targetTranslation) {
12
- result[key] = targetTranslation;
13
- continue;
14
- }
15
- const fallbackTranslation = translationMap[fallbackLanguage];
16
- if (fallbackTranslation) {
17
- if (env_1.IS_DEV) {
18
- console.warn(`[i18n] Missing translation for key "${key}" in current language "${currentLanguage}" in "commons". Defaulting to fallback language "${fallbackLanguage}".`);
19
- }
20
- result[key] = fallbackTranslation;
21
- continue;
22
- }
23
- if (env_1.IS_DEV) {
24
- console.warn(`[i18n] Missing translation for key "${key}" in both current language "${currentLanguage}" and fallback language "${fallbackLanguage}" in "commons".`);
25
- }
26
- result[key] = const_1.MISSING_TRANSLATION;
27
- }
28
- return result;
29
- };
30
- exports.createCommons = createCommons;
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const createCommons_1 = require("./createCommons");
4
- describe(`createCommons`, () => {
5
- it(`returns the correct common translations based on current language and fallback`, () => {
6
- const result = (0, createCommons_1.createCommons)({
7
- commons: {
8
- welcome: {
9
- en: `Welcome`,
10
- es: `Bienvenido`,
11
- fr: `Bienvenue`,
12
- },
13
- goodbye: {
14
- en: `Goodbye`,
15
- es: `Adiós`,
16
- },
17
- },
18
- currentLanguage: `fr`,
19
- fallbackLanguage: `en`,
20
- });
21
- expect(result).toEqual({
22
- welcome: `Bienvenue`,
23
- goodbye: `Goodbye`,
24
- });
25
- });
26
- });
@@ -1,9 +0,0 @@
1
- export declare const createFormat: <const Languages extends readonly string[]>({ currentLanguage, }: {
2
- currentLanguage: Languages[number];
3
- }) => {
4
- number: (value: number, options?: Intl.NumberFormatOptions) => string;
5
- date: (value: Date | number, options?: Intl.DateTimeFormatOptions) => string;
6
- time: (value: Date | number, options?: Intl.DateTimeFormatOptions) => string;
7
- currency: (value: number, currency: string, options?: Omit<Intl.NumberFormatOptions, `style` | `currency`>) => string;
8
- percentage: (value: number, options?: Omit<Intl.NumberFormatOptions, `style`>) => string;
9
- };
@@ -1,54 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createFormat = void 0;
4
- const createFormat = ({ currentLanguage, }) => {
5
- const defaultNumberFormatter = new Intl.NumberFormat(currentLanguage);
6
- const defaultDateFormatter = new Intl.DateTimeFormat(currentLanguage);
7
- const defaultTimeFormatter = new Intl.DateTimeFormat(currentLanguage, {
8
- hour: `numeric`,
9
- minute: `numeric`,
10
- second: `numeric`,
11
- });
12
- const defaultPercentageFormatter = new Intl.NumberFormat(currentLanguage, {
13
- style: `percent`,
14
- });
15
- return {
16
- number: (value, options) => {
17
- if (options) {
18
- return new Intl.NumberFormat(currentLanguage, options).format(value);
19
- }
20
- return defaultNumberFormatter.format(value);
21
- },
22
- date: (value, options) => {
23
- if (options) {
24
- return new Intl.DateTimeFormat(currentLanguage, options).format(value);
25
- }
26
- return defaultDateFormatter.format(value);
27
- },
28
- time: (value, options) => {
29
- if (options) {
30
- return new Intl.DateTimeFormat(currentLanguage, {
31
- ...options,
32
- }).format(value);
33
- }
34
- return defaultTimeFormatter.format(value);
35
- },
36
- currency: (value, currency, options) => {
37
- return new Intl.NumberFormat(currentLanguage, {
38
- style: `currency`,
39
- currency,
40
- ...options,
41
- }).format(value);
42
- },
43
- percentage: (value, options) => {
44
- if (options) {
45
- return new Intl.NumberFormat(currentLanguage, {
46
- style: `percent`,
47
- ...options,
48
- }).format(value);
49
- }
50
- return defaultPercentageFormatter.format(value);
51
- },
52
- };
53
- };
54
- exports.createFormat = createFormat;
@@ -1 +0,0 @@
1
- export {};
@@ -1,71 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const createFormat_1 = require("./createFormat");
4
- describe(`createFormat`, () => {
5
- const format = (0, createFormat_1.createFormat)({
6
- currentLanguage: `en-US`,
7
- });
8
- it(`number formatter returns a formatted value`, () => {
9
- const formattedNumber = format.number(1234567.89);
10
- expect(formattedNumber).toBe(`1,234,567.89`);
11
- });
12
- it(`number formatter returns a formatted value with options`, () => {
13
- const formattedNumber = format.number(0.1234, {
14
- style: `percent`,
15
- minimumFractionDigits: 2,
16
- });
17
- expect(formattedNumber).toBe(`12.34%`);
18
- });
19
- it(`date formatter returns a formatted value`, () => {
20
- const date = new Date(`2024-01-01T12:00:00Z`);
21
- const formattedDate = format.date(date);
22
- expect(formattedDate).toBe(`1/1/2024`);
23
- });
24
- it(`date formatter returns a formatted value with options`, () => {
25
- const date = new Date(`1999-01-01T12:00:00Z`);
26
- const formattedDate = format.date(date, {
27
- year: `numeric`,
28
- month: `long`,
29
- day: `numeric`,
30
- });
31
- expect(formattedDate).toBe(`January 1, 1999`);
32
- });
33
- it(`time formatter returns a formatted value`, () => {
34
- const date = new Date(`1912-06-23T02:15:00`);
35
- const formattedTime = format.time(date);
36
- expect(formattedTime).toBe(`2:15:00 AM`);
37
- });
38
- it(`time formatter returns a formatted value with options`, () => {
39
- const date = new Date(`2000-12-31T23:45:30`);
40
- const formattedTime = format.time(date, {
41
- hour12: false,
42
- hour: `2-digit`,
43
- minute: `2-digit`,
44
- });
45
- expect(formattedTime).toBe(`23:45`);
46
- });
47
- it(`currency formatter returns a formatted value`, () => {
48
- const formattedCurrency = format.currency(1234.567, `USD`);
49
- expect(formattedCurrency).toBe(`$1,234.57`);
50
- });
51
- it(`currency formatter returns a formatted value with options`, () => {
52
- const formattedCurrency = format.currency(1234.567, `EUR`, {
53
- maximumFractionDigits: 1,
54
- });
55
- expect(formattedCurrency).toBe(`€1,234.6`);
56
- });
57
- it(`percentage formatter returns a formatted value`, () => {
58
- const formattedPercentage = format.percentage(0.1234);
59
- expect(formattedPercentage).toBe(`12%`);
60
- });
61
- it(`percentage formatter returns a formatted value `, () => {
62
- const formattedPercentage = format.percentage(0.1234);
63
- expect(formattedPercentage).toBe(`12%`);
64
- });
65
- it(`percentage formatter returns a formatted value with options`, () => {
66
- const formattedPercentage = format.percentage(0.1234, {
67
- minimumFractionDigits: 2,
68
- });
69
- expect(formattedPercentage).toBe(`12.34%`);
70
- });
71
- });
@@ -1,7 +0,0 @@
1
- import { TranslationMap, TranslationValue } from "../type";
2
- import { ReactNode } from "react";
3
- export declare const createT: <const Languages extends readonly string[]>({ currentLanguage, fallbackLanguage, languages, }: {
4
- currentLanguage: Languages[number];
5
- fallbackLanguage: Languages[number];
6
- languages: Readonly<Languages>;
7
- }) => <Value extends TranslationValue = ReactNode>(translation: TranslationMap<Languages[number], Value>) => Value;
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createT = void 0;
4
- const getTranslation_1 = require("../util/getTranslation");
5
- const createT = ({ currentLanguage, fallbackLanguage, languages, }) => {
6
- return (translation) => {
7
- return (0, getTranslation_1.getTranslation)({
8
- translation,
9
- language: currentLanguage,
10
- languages,
11
- fallbackLanguage,
12
- });
13
- };
14
- };
15
- exports.createT = createT;
@@ -1 +0,0 @@
1
- export {};
@@ -1,23 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const jsx_runtime_1 = require("react/jsx-runtime");
4
- const createT_1 = require("./createT");
5
- describe(`createT`, () => {
6
- const t = (0, createT_1.createT)({
7
- currentLanguage: `fr`,
8
- fallbackLanguage: `en`,
9
- languages: [`en`, `es`, `fr`],
10
- });
11
- it(`t helper returns a translation`, () => {
12
- expect(t({
13
- en: `Hello`,
14
- es: `Hola`,
15
- fr: `Bonjour`,
16
- })).toBe(`Bonjour`);
17
- expect(t({
18
- en: (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {}),
19
- es: `Hola`,
20
- fr: `Bonjour`,
21
- })).toBe(`Bonjour`);
22
- });
23
- });
@@ -1,8 +0,0 @@
1
- import { TranslationMap } from "../type";
2
- export declare const createTGlobal: <const Language extends string>({ currentLanguage, languages, fallbackLanguage, }: {
3
- currentLanguage: {
4
- current: Language;
5
- };
6
- languages: readonly Language[];
7
- fallbackLanguage: Language;
8
- }) => (translation: TranslationMap<Language>) => import("../type").TranslationValue;
@@ -1,31 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createTGlobal = void 0;
4
- const type_1 = require("../type");
5
- const getTranslation_1 = require("../util/getTranslation");
6
- const env_1 = require("../../env");
7
- const createTGlobal = ({ currentLanguage, languages, fallbackLanguage, }) => {
8
- /**
9
- * Module-scoped translation function, to be used outside React components.
10
- * Do not use inside React components, use `useI18n` hook instead.
11
- */
12
- return (translation) => {
13
- if (!(0, type_1.isLanguage)(currentLanguage.current, languages)) {
14
- throw new Error(`tGlobal cannot be invoked before <I18nProvider> is mounted`);
15
- }
16
- const isValidLanguage = (0, type_1.isLanguage)(currentLanguage.current, languages);
17
- if (!isValidLanguage) {
18
- throw new Error(`Invalid current language "${currentLanguage}"`);
19
- }
20
- if (env_1.IS_DEV) {
21
- console.info(`[i18n] Friendly reminder: Make sure you are not using "tGlobal" inside React components. Use "useI18n" hook instead. `);
22
- }
23
- return (0, getTranslation_1.getTranslation)({
24
- translation: translation,
25
- language: currentLanguage.current,
26
- languages,
27
- fallbackLanguage: fallbackLanguage,
28
- });
29
- };
30
- };
31
- exports.createTGlobal = createTGlobal;
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const createTGlobal_1 = require("./createTGlobal");
4
- describe(`createTGlobal`, () => {
5
- const fakeCurrentLanguageRef = { current: `de` };
6
- const tGlobal = (0, createTGlobal_1.createTGlobal)({
7
- currentLanguage: fakeCurrentLanguageRef,
8
- fallbackLanguage: `en`,
9
- languages: [`en`, `es`, `fr`, `de`],
10
- });
11
- it(`tGlobal helper returns a translation`, () => {
12
- const translation = {
13
- en: `Goodbye`,
14
- es: `Adiós`,
15
- fr: `Au revoir`,
16
- de: `Auf Wiedersehen`,
17
- };
18
- expect(tGlobal(translation)).toBe(`Auf Wiedersehen`);
19
- });
20
- });
@@ -1,5 +0,0 @@
1
- import { PluralTranslationMap } from "../type";
2
- export declare const createTPlural: <const Languages extends readonly string[]>({ currentLanguage, fallbackLanguage, }: {
3
- currentLanguage: Languages[number];
4
- fallbackLanguage: Languages[number];
5
- }) => (count: number, translations: PluralTranslationMap<Languages[number]>) => string | number | bigint | true | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<import("react").ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<import("react").ReactNode> | null | undefined>;
@@ -1,19 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createTPlural = void 0;
4
- const getPluralTranslation_1 = require("../util/getPluralTranslation");
5
- const createTPlural = ({ currentLanguage, fallbackLanguage, }) => {
6
- /**
7
- * Pluralization helper function.
8
- * Selects the appropriate translation based on the count provided.
9
- */
10
- return (count, translations) => {
11
- return (0, getPluralTranslation_1.getPluralTranslation)({
12
- currentLanguage,
13
- fallbackLanguage: fallbackLanguage,
14
- count,
15
- translations,
16
- });
17
- };
18
- };
19
- exports.createTPlural = createTPlural;
@@ -1,31 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const createTPlural_1 = require("./createTPlural");
4
- describe(`createTPlural`, () => {
5
- const tPlural = (0, createTPlural_1.createTPlural)({
6
- currentLanguage: `en`,
7
- fallbackLanguage: `en`,
8
- });
9
- it(`tPlural helper returns a translation for specific number`, () => {
10
- const count = 2;
11
- const translation = tPlural(count, {
12
- en: {
13
- 0: `You have no messages`,
14
- one: `You have 1 message`,
15
- many: `You have ${count} messages`,
16
- },
17
- sl: {
18
- 0: `Nimate sporočil`,
19
- one: `Imate 1 sporočilo`,
20
- two: `Imate 2 sporočili`,
21
- many: `Imate ${count} sporočil`,
22
- },
23
- pt: {
24
- 0: `Você não tem mensagens`,
25
- one: `Você tem 1 mensagem`,
26
- many: `Você tem ${count} mensagens`,
27
- },
28
- });
29
- expect(translation).toBe(`You have 2 messages`);
30
- });
31
- });
@@ -1,21 +0,0 @@
1
- import { I18nContextType, TranslationMap } from "../type";
2
- import { Context } from "react";
3
- export declare const createUseI18n: <const Languages extends readonly string[], const Commons extends Record<string, TranslationMap<Languages[number], string>>>({ I18nContext, languages, fallbackLanguage, commons, }: {
4
- I18nContext: Context<I18nContextType<Languages[number]> | null>;
5
- languages: Readonly<Languages>;
6
- fallbackLanguage: Languages[number];
7
- commons?: Commons;
8
- }) => () => {
9
- t: <Value extends import("../type").TranslationValue = import("react").ReactNode>(translation: TranslationMap<Languages[number], Value>) => Value;
10
- tPlural: (count: number, translations: import("../type").PluralTranslationMap<Languages[number]>) => string | number | bigint | true | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<import("react").ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<import("react").ReactNode> | null | undefined>;
11
- setCurrentLanguage: import("react").Dispatch<import("react").SetStateAction<Languages[number]>>;
12
- currentLanguage: Languages[number];
13
- format: {
14
- number: (value: number, options?: Intl.NumberFormatOptions) => string;
15
- date: (value: Date | number, options?: Intl.DateTimeFormatOptions) => string;
16
- time: (value: Date | number, options?: Intl.DateTimeFormatOptions) => string;
17
- currency: (value: number, currency: string, options?: Omit<Intl.NumberFormatOptions, `style` | `currency`>) => string;
18
- percentage: (value: number, options?: Omit<Intl.NumberFormatOptions, `style`>) => string;
19
- };
20
- commons: { [K in keyof Commons]?: string | undefined; };
21
- };
@@ -1,52 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createUseI18n = void 0;
4
- const react_1 = require("react");
5
- const createT_1 = require("./createT");
6
- const createTPlural_1 = require("./createTPlural");
7
- const createFormat_1 = require("./createFormat");
8
- const createCommons_1 = require("./createCommons");
9
- const createUseI18n = ({ I18nContext, languages, fallbackLanguage, commons, }) => {
10
- /**
11
- * Hook to access i18n functions and current language.
12
- */
13
- return () => {
14
- const context = (0, react_1.useContext)(I18nContext);
15
- if (!context) {
16
- throw new Error(`useI18n must be used inside <Provider>`);
17
- }
18
- const { currentLanguage, setCurrentLanguage } = context;
19
- const t = (0, react_1.useMemo)(() => {
20
- return (0, createT_1.createT)({
21
- currentLanguage,
22
- languages,
23
- fallbackLanguage: fallbackLanguage,
24
- });
25
- }, [currentLanguage]);
26
- const tPlural = (0, react_1.useMemo)(() => {
27
- return (0, createTPlural_1.createTPlural)({
28
- currentLanguage,
29
- fallbackLanguage: fallbackLanguage,
30
- });
31
- }, [currentLanguage]);
32
- const format = (0, react_1.useMemo)(() => {
33
- return (0, createFormat_1.createFormat)({ currentLanguage });
34
- }, [currentLanguage]);
35
- const _commons = (0, react_1.useMemo)(() => {
36
- return (0, createCommons_1.createCommons)({
37
- commons: commons || {},
38
- currentLanguage,
39
- fallbackLanguage,
40
- });
41
- }, [currentLanguage]);
42
- return {
43
- t,
44
- tPlural,
45
- setCurrentLanguage,
46
- currentLanguage,
47
- format,
48
- commons: _commons,
49
- };
50
- };
51
- };
52
- exports.createUseI18n = createUseI18n;
@@ -1,46 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const createUseI18n_1 = require("./createUseI18n");
4
- describe(`createUseI18n`, () => {
5
- const mockedI18nContext = {};
6
- it(`prints console.error if used outside of a provider`, () => {
7
- const useI18n = (0, createUseI18n_1.createUseI18n)({
8
- languages: [`en`, `es`],
9
- fallbackLanguage: `en`,
10
- commons: undefined,
11
- I18nContext: mockedI18nContext,
12
- });
13
- // expect console.error to be called
14
- const consoleErrorSpy = jest
15
- .spyOn(console, `error`)
16
- .mockImplementation(() => { });
17
- try {
18
- useI18n();
19
- }
20
- catch (e) {
21
- expect(consoleErrorSpy).toHaveBeenCalled(); // eslint-disable-line unused-imports/no-unused-vars
22
- }
23
- consoleErrorSpy.mockRestore();
24
- });
25
- it(`can be initialised with only required parameters`, () => {
26
- expect(() => (0, createUseI18n_1.createUseI18n)({
27
- languages: [`en`, `es`],
28
- fallbackLanguage: `en`,
29
- commons: undefined,
30
- I18nContext: mockedI18nContext,
31
- })).toBeDefined();
32
- });
33
- it(`should be initialised with all parameters`, () => {
34
- expect(() => (0, createUseI18n_1.createUseI18n)({
35
- languages: [`en`, `es`],
36
- fallbackLanguage: `es`,
37
- commons: {
38
- accept: {
39
- en: `Accept`,
40
- es: `Aceptar`,
41
- },
42
- },
43
- I18nContext: mockedI18nContext,
44
- })).toBeDefined();
45
- });
46
- });
@@ -1 +0,0 @@
1
- export declare const MISSING_TRANSLATION = "[MISSING TRANSLATION]";
@@ -1,4 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MISSING_TRANSLATION = void 0;
4
- exports.MISSING_TRANSLATION = `[MISSING TRANSLATION]`;
@@ -1,29 +0,0 @@
1
- import { TranslationMap } from "./type";
2
- export declare function createI18nContext<Languages extends readonly string[], Commons extends Record<string, TranslationMap<Languages[number], string>>>({ languages, fallbackLanguage, commons, }: {
3
- languages: Readonly<Languages>;
4
- fallbackLanguage: Languages[number];
5
- commons?: Readonly<Commons>;
6
- }): {
7
- I18nProvider: {
8
- ({ children, initialLanguage, }: {
9
- children: import("react").ReactNode;
10
- initialLanguage: Languages[number];
11
- }): import("react/jsx-runtime").JSX.Element;
12
- displayName: string;
13
- };
14
- useI18n: () => {
15
- t: <Value extends import("./type").TranslationValue = import("react").ReactNode>(translation: TranslationMap<Languages[number], Value>) => Value;
16
- tPlural: (count: number, translations: import("./type").PluralTranslationMap<Languages[number]>) => string | number | bigint | true | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<import("react").ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<import("react").ReactNode> | null | undefined>;
17
- setCurrentLanguage: import("react").Dispatch<import("react").SetStateAction<Languages[number]>>;
18
- currentLanguage: Languages[number];
19
- format: {
20
- number: (value: number, options?: Intl.NumberFormatOptions) => string;
21
- date: (value: Date | number, options?: Intl.DateTimeFormatOptions) => string;
22
- time: (value: Date | number, options?: Intl.DateTimeFormatOptions) => string;
23
- currency: (value: number, currency: string, options?: Omit<Intl.NumberFormatOptions, `style` | `currency`>) => string;
24
- percentage: (value: number, options?: Omit<Intl.NumberFormatOptions, `style`>) => string;
25
- };
26
- commons: { [K in keyof Readonly<Commons>]?: string | undefined; };
27
- };
28
- tGlobal: (translation: TranslationMap<string>) => import("./type").TranslationValue;
29
- };