@vaadin/hilla-react-i18n 24.4.0-alpha13 → 24.4.0-alpha14
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/backend.d.ts +3 -3
- package/backend.d.ts.map +1 -1
- package/backend.js +10 -7
- package/backend.js.map +2 -2
- package/index.d.ts +1 -1
- package/index.d.ts.map +1 -1
- package/index.js +13 -10
- package/index.js.map +2 -2
- package/package.json +3 -3
- package/types.d.ts +4 -0
- package/types.d.ts.map +1 -1
package/backend.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { TranslationsResult } from './types.js';
|
|
2
2
|
export interface I18nBackend {
|
|
3
|
-
loadTranslations(language: string): Promise<
|
|
3
|
+
loadTranslations(language: string): Promise<TranslationsResult>;
|
|
4
4
|
}
|
|
5
5
|
export declare class DefaultBackend implements I18nBackend {
|
|
6
|
-
loadTranslations(language: string): Promise<
|
|
6
|
+
loadTranslations(language: string): Promise<TranslationsResult>;
|
|
7
7
|
}
|
|
8
8
|
//# sourceMappingURL=backend.d.ts.map
|
package/backend.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["src/backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["src/backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEnE,MAAM,WAAW,WAAW;IAC1B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACjE;AAED,qBAAa,cAAe,YAAW,WAAW;IAC1C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAYtE"}
|
package/backend.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
class DefaultBackend {
|
|
2
2
|
async loadTranslations(language) {
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
const response = await fetch(`./?v-r=i18n&langtag=${language}`);
|
|
4
|
+
if (!response.ok) {
|
|
5
|
+
throw new Error("Failed fetching translations.");
|
|
6
|
+
}
|
|
7
|
+
const retrievedLocale = response.headers.get("X-Vaadin-Retrieved-Locale");
|
|
8
|
+
const translations = await response.json();
|
|
9
|
+
return {
|
|
10
|
+
translations,
|
|
11
|
+
resolvedLanguage: retrievedLocale ?? void 0
|
|
12
|
+
};
|
|
10
13
|
}
|
|
11
14
|
}
|
|
12
15
|
export {
|
package/backend.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["src/backend.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Translations } from './types.js';\n\nexport interface I18nBackend {\n loadTranslations(language: string): Promise<
|
|
5
|
-
"mappings": "AAMO,MAAM,eAAsC;AAAA,EACjD,MAAM,iBAAiB,
|
|
4
|
+
"sourcesContent": ["import type { Translations, TranslationsResult } from './types.js';\n\nexport interface I18nBackend {\n loadTranslations(language: string): Promise<TranslationsResult>;\n}\n\nexport class DefaultBackend implements I18nBackend {\n async loadTranslations(language: string): Promise<TranslationsResult> {\n const response = await fetch(`./?v-r=i18n&langtag=${language}`);\n if (!response.ok) {\n throw new Error('Failed fetching translations.');\n }\n const retrievedLocale = response.headers.get('X-Vaadin-Retrieved-Locale');\n const translations: Translations = await response.json();\n return {\n translations,\n resolvedLanguage: retrievedLocale ?? undefined,\n };\n }\n}\n"],
|
|
5
|
+
"mappings": "AAMO,MAAM,eAAsC;AAAA,EACjD,MAAM,iBAAiB,UAA+C;AACpE,UAAM,WAAW,MAAM,MAAM,uBAAuB,QAAQ,EAAE;AAC9D,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,MAAM,+BAA+B;AAAA,IACjD;AACA,UAAM,kBAAkB,SAAS,QAAQ,IAAI,2BAA2B;AACxE,UAAM,eAA6B,MAAM,SAAS,KAAK;AACvD,WAAO;AAAA,MACL;AAAA,MACA,kBAAkB,mBAAmB;AAAA,IACvC;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/index.d.ts
CHANGED
|
@@ -3,10 +3,10 @@ import type { I18nOptions } from './types.js';
|
|
|
3
3
|
export declare class I18n {
|
|
4
4
|
#private;
|
|
5
5
|
get language(): Signal<string | undefined>;
|
|
6
|
+
get resolvedLanguage(): Signal<string | undefined>;
|
|
6
7
|
configure(options?: I18nOptions): Promise<void>;
|
|
7
8
|
setLanguage(newLanguage: string): Promise<void>;
|
|
8
9
|
private updateLanguage;
|
|
9
|
-
private loadTranslations;
|
|
10
10
|
translate(key: string): string;
|
|
11
11
|
}
|
|
12
12
|
export declare const i18n: I18n;
|
package/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAGzE,OAAO,KAAK,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAGzE,OAAO,KAAK,EAAE,WAAW,EAAoC,MAAM,YAAY,CAAC;AAgBhF,qBAAa,IAAI;;IAOf,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAEzC;IAED,IAAI,gBAAgB,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAEjD;IAEK,SAAS,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/C,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAIvC,cAAc;IA2B5B,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CAG/B;AAED,eAAO,MAAM,IAAI,MAAa,CAAC;AAE/B,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C"}
|
package/index.js
CHANGED
|
@@ -15,9 +15,13 @@ class I18n {
|
|
|
15
15
|
#backend = new DefaultBackend();
|
|
16
16
|
#language = signal(void 0);
|
|
17
17
|
#translations = signal({});
|
|
18
|
+
#resolvedLanguage = signal(void 0);
|
|
18
19
|
get language() {
|
|
19
20
|
return this.#language;
|
|
20
21
|
}
|
|
22
|
+
get resolvedLanguage() {
|
|
23
|
+
return this.#resolvedLanguage;
|
|
24
|
+
}
|
|
21
25
|
async configure(options) {
|
|
22
26
|
const initialLanguage = determineInitialLanguage(options);
|
|
23
27
|
await this.updateLanguage(initialLanguage);
|
|
@@ -29,10 +33,17 @@ class I18n {
|
|
|
29
33
|
if (this.#language.value === newLanguage) {
|
|
30
34
|
return;
|
|
31
35
|
}
|
|
32
|
-
|
|
36
|
+
let translationsResult;
|
|
37
|
+
try {
|
|
38
|
+
translationsResult = await this.#backend.loadTranslations(newLanguage);
|
|
39
|
+
} catch (e) {
|
|
40
|
+
console.error(`Failed to load translations for language: ${newLanguage}`, e);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
33
43
|
batch(() => {
|
|
34
|
-
this.#translations.value =
|
|
44
|
+
this.#translations.value = translationsResult.translations;
|
|
35
45
|
this.#language.value = newLanguage;
|
|
46
|
+
this.#resolvedLanguage.value = translationsResult.resolvedLanguage;
|
|
36
47
|
if (updateSettings) {
|
|
37
48
|
updateLanguageSettings({
|
|
38
49
|
language: newLanguage
|
|
@@ -40,14 +51,6 @@ class I18n {
|
|
|
40
51
|
}
|
|
41
52
|
});
|
|
42
53
|
}
|
|
43
|
-
async loadTranslations(newLanguage) {
|
|
44
|
-
try {
|
|
45
|
-
return await this.#backend.loadTranslations(newLanguage);
|
|
46
|
-
} catch (e) {
|
|
47
|
-
console.error(`Failed to load translations for language: ${newLanguage}`, e);
|
|
48
|
-
return {};
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
54
|
translate(key) {
|
|
52
55
|
return this.#translations.value[key] || key;
|
|
53
56
|
}
|
package/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["src/index.ts"],
|
|
4
|
-
"sourcesContent": ["import { batch, signal, type Signal } from '@vaadin/hilla-react-signals';\nimport { DefaultBackend, type I18nBackend } from './backend.js';\nimport { getLanguageSettings, updateLanguageSettings } from './settings.js';\nimport type { I18nOptions, Translations } from './types.js';\n\nfunction determineInitialLanguage(options?: I18nOptions): string {\n // Use explicitly configured language if defined\n if (options?.language) {\n return options.language;\n }\n // Use last used language as fallback\n const settings = getLanguageSettings();\n if (settings?.language) {\n return settings.language;\n }\n // Otherwise use browser language\n return navigator.language;\n}\n\nexport class I18n {\n readonly #backend: I18nBackend = new DefaultBackend();\n\n readonly #language: Signal<string | undefined> = signal(undefined);\n readonly #translations: Signal<Translations> = signal({});\n\n get language(): Signal<string | undefined> {\n return this.#language;\n }\n\n async configure(options?: I18nOptions): Promise<void> {\n const initialLanguage = determineInitialLanguage(options);\n await this.updateLanguage(initialLanguage);\n }\n\n async setLanguage(newLanguage: string): Promise<void> {\n await this.updateLanguage(newLanguage, true);\n }\n\n private async updateLanguage(newLanguage: string, updateSettings = false) {\n if (this.#language.value === newLanguage) {\n return;\n }\n\n
|
|
5
|
-
"mappings": "AAAA,SAAS,OAAO,cAA2B;AAC3C,SAAS,sBAAwC;AACjD,SAAS,qBAAqB,8BAA8B;AAG5D,SAAS,yBAAyB,SAA+B;AAE/D,MAAI,SAAS,UAAU;AACrB,WAAO,QAAQ;AAAA,EACjB;AAEA,QAAM,WAAW,oBAAoB;AACrC,MAAI,UAAU,UAAU;AACtB,WAAO,SAAS;AAAA,EAClB;AAEA,SAAO,UAAU;AACnB;AAEO,MAAM,KAAK;AAAA,EACP,WAAwB,IAAI,eAAe;AAAA,EAE3C,YAAwC,OAAO,MAAS;AAAA,EACxD,gBAAsC,OAAO,CAAC,CAAC;AAAA,
|
|
4
|
+
"sourcesContent": ["import { batch, signal, type Signal } from '@vaadin/hilla-react-signals';\nimport { DefaultBackend, type I18nBackend } from './backend.js';\nimport { getLanguageSettings, updateLanguageSettings } from './settings.js';\nimport type { I18nOptions, Translations, TranslationsResult } from './types.js';\n\nfunction determineInitialLanguage(options?: I18nOptions): string {\n // Use explicitly configured language if defined\n if (options?.language) {\n return options.language;\n }\n // Use last used language as fallback\n const settings = getLanguageSettings();\n if (settings?.language) {\n return settings.language;\n }\n // Otherwise use browser language\n return navigator.language;\n}\n\nexport class I18n {\n readonly #backend: I18nBackend = new DefaultBackend();\n\n readonly #language: Signal<string | undefined> = signal(undefined);\n readonly #translations: Signal<Translations> = signal({});\n readonly #resolvedLanguage: Signal<string | undefined> = signal(undefined);\n\n get language(): Signal<string | undefined> {\n return this.#language;\n }\n\n get resolvedLanguage(): Signal<string | undefined> {\n return this.#resolvedLanguage;\n }\n\n async configure(options?: I18nOptions): Promise<void> {\n const initialLanguage = determineInitialLanguage(options);\n await this.updateLanguage(initialLanguage);\n }\n\n async setLanguage(newLanguage: string): Promise<void> {\n await this.updateLanguage(newLanguage, true);\n }\n\n private async updateLanguage(newLanguage: string, updateSettings = false) {\n if (this.#language.value === newLanguage) {\n return;\n }\n\n let translationsResult: TranslationsResult;\n try {\n translationsResult = await this.#backend.loadTranslations(newLanguage);\n } catch (e) {\n console.error(`Failed to load translations for language: ${newLanguage}`, e);\n return;\n }\n\n // Update all signals together to avoid triggering side effects multiple times\n batch(() => {\n this.#translations.value = translationsResult.translations;\n this.#language.value = newLanguage;\n this.#resolvedLanguage.value = translationsResult.resolvedLanguage;\n\n if (updateSettings) {\n updateLanguageSettings({\n language: newLanguage,\n });\n }\n });\n }\n\n translate(key: string): string {\n return this.#translations.value[key] || key;\n }\n}\n\nexport const i18n = new I18n();\n\nexport function translate(key: string): string {\n return i18n.translate(key);\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,OAAO,cAA2B;AAC3C,SAAS,sBAAwC;AACjD,SAAS,qBAAqB,8BAA8B;AAG5D,SAAS,yBAAyB,SAA+B;AAE/D,MAAI,SAAS,UAAU;AACrB,WAAO,QAAQ;AAAA,EACjB;AAEA,QAAM,WAAW,oBAAoB;AACrC,MAAI,UAAU,UAAU;AACtB,WAAO,SAAS;AAAA,EAClB;AAEA,SAAO,UAAU;AACnB;AAEO,MAAM,KAAK;AAAA,EACP,WAAwB,IAAI,eAAe;AAAA,EAE3C,YAAwC,OAAO,MAAS;AAAA,EACxD,gBAAsC,OAAO,CAAC,CAAC;AAAA,EAC/C,oBAAgD,OAAO,MAAS;AAAA,EAEzE,IAAI,WAAuC;AACzC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,mBAA+C;AACjD,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,UAAU,SAAsC;AACpD,UAAM,kBAAkB,yBAAyB,OAAO;AACxD,UAAM,KAAK,eAAe,eAAe;AAAA,EAC3C;AAAA,EAEA,MAAM,YAAY,aAAoC;AACpD,UAAM,KAAK,eAAe,aAAa,IAAI;AAAA,EAC7C;AAAA,EAEA,MAAc,eAAe,aAAqB,iBAAiB,OAAO;AACxE,QAAI,KAAK,UAAU,UAAU,aAAa;AACxC;AAAA,IACF;AAEA,QAAI;AACJ,QAAI;AACF,2BAAqB,MAAM,KAAK,SAAS,iBAAiB,WAAW;AAAA,IACvE,SAAS,GAAG;AACV,cAAQ,MAAM,6CAA6C,WAAW,IAAI,CAAC;AAC3E;AAAA,IACF;AAGA,UAAM,MAAM;AACV,WAAK,cAAc,QAAQ,mBAAmB;AAC9C,WAAK,UAAU,QAAQ;AACvB,WAAK,kBAAkB,QAAQ,mBAAmB;AAElD,UAAI,gBAAgB;AAClB,+BAAuB;AAAA,UACrB,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,KAAqB;AAC7B,WAAO,KAAK,cAAc,MAAM,GAAG,KAAK;AAAA,EAC1C;AACF;AAEO,MAAM,OAAO,IAAI,KAAK;AAEtB,SAAS,UAAU,KAAqB;AAC7C,SAAO,KAAK,UAAU,GAAG;AAC3B;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vaadin/hilla-react-i18n",
|
|
3
|
-
"version": "24.4.0-
|
|
3
|
+
"version": "24.4.0-alpha14",
|
|
4
4
|
"description": "Hilla I18n utils for React",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"module": "index.js",
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
"access": "public"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@vaadin/hilla-frontend": "24.4.0-
|
|
50
|
-
"@vaadin/hilla-react-signals": "24.4.0-
|
|
49
|
+
"@vaadin/hilla-frontend": "24.4.0-alpha14",
|
|
50
|
+
"@vaadin/hilla-react-signals": "24.4.0-alpha14"
|
|
51
51
|
},
|
|
52
52
|
"peerDependencies": {
|
|
53
53
|
"react": "^18"
|
package/types.d.ts
CHANGED
package/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAElD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAElD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
|