@taon-dev/i18n 0.0.1
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/VERIFIED-BUILD-DATA.jsonc +5 -0
- package/assets/shared/shared_folder_info.txt +7 -0
- package/bin/i18n +5 -0
- package/bin/i18n-debug +5 -0
- package/bin/i18n-debug-brk +4 -0
- package/bin/start.js +38 -0
- package/browser/README.md +24 -0
- package/browser/fesm2022/i18n-browser.mjs +521 -0
- package/browser/fesm2022/i18n-browser.mjs.map +1 -0
- package/browser/package.json +23 -0
- package/browser/types/i18n-browser.d.ts +353 -0
- package/browser-prod/README.md +24 -0
- package/browser-prod/fesm2022/i18n-browser-prod.mjs +521 -0
- package/browser-prod/fesm2022/i18n-browser-prod.mjs.map +1 -0
- package/browser-prod/package.json +23 -0
- package/browser-prod/types/i18n-browser-prod.d.ts +353 -0
- package/browser-prod.re-export.json +1 -0
- package/browser-prod.split-namespaces.json +4 -0
- package/cli.d.ts +1 -0
- package/cli.js +8 -0
- package/cli.js.map +1 -0
- package/html/assets/generated/pwa/html-pwa.html +60 -0
- package/html/imports.html +3 -0
- package/index.d.ts +3 -0
- package/index.js +20 -0
- package/index.js.map +1 -0
- package/lib/build-info._auto-generated_.d.ts +24 -0
- package/lib/build-info._auto-generated_.js +30 -0
- package/lib/build-info._auto-generated_.js.map +1 -0
- package/lib/env/env.angular-node-app.d.ts +67 -0
- package/lib/env/env.angular-node-app.js +141 -0
- package/lib/env/env.angular-node-app.js.map +1 -0
- package/lib/env/env.docs-webapp.d.ts +67 -0
- package/lib/env/env.docs-webapp.js +141 -0
- package/lib/env/env.docs-webapp.js.map +1 -0
- package/lib/env/env.electron-app.d.ts +67 -0
- package/lib/env/env.electron-app.js +141 -0
- package/lib/env/env.electron-app.js.map +1 -0
- package/lib/env/env.mobile-app.d.ts +67 -0
- package/lib/env/env.mobile-app.js +141 -0
- package/lib/env/env.mobile-app.js.map +1 -0
- package/lib/env/env.npm-lib-and-cli-tool.d.ts +67 -0
- package/lib/env/env.npm-lib-and-cli-tool.js +141 -0
- package/lib/env/env.npm-lib-and-cli-tool.js.map +1 -0
- package/lib/env/env.vscode-plugin.d.ts +67 -0
- package/lib/env/env.vscode-plugin.js +141 -0
- package/lib/env/env.vscode-plugin.js.map +1 -0
- package/lib/env/index.d.ts +6 -0
- package/lib/env/index.js +23 -0
- package/lib/env/index.js.map +1 -0
- package/lib/features/index.d.ts +4 -0
- package/lib/features/index.js +21 -0
- package/lib/features/index.js.map +1 -0
- package/lib/features/types.d.ts +4 -0
- package/lib/features/types.js +3 -0
- package/lib/features/types.js.map +1 -0
- package/lib/features/withLanguageLocalStorageSync.d.ts +9 -0
- package/lib/features/withLanguageLocalStorageSync.js +39 -0
- package/lib/features/withLanguageLocalStorageSync.js.map +1 -0
- package/lib/features/withNavigatorLanguage.d.ts +6 -0
- package/lib/features/withNavigatorLanguage.js +29 -0
- package/lib/features/withNavigatorLanguage.js.map +1 -0
- package/lib/features/withPreloadScopes.d.ts +8 -0
- package/lib/features/withPreloadScopes.js +25 -0
- package/lib/features/withPreloadScopes.js.map +1 -0
- package/lib/features/withServerSideLanguage.d.ts +6 -0
- package/lib/features/withServerSideLanguage.js +29 -0
- package/lib/features/withServerSideLanguage.js.map +1 -0
- package/lib/features/withTranslatedTitle.d.ts +34 -0
- package/lib/features/withTranslatedTitle.js +69 -0
- package/lib/features/withTranslatedTitle.js.map +1 -0
- package/lib/index._auto-generated_.d.ts +16 -0
- package/lib/index._auto-generated_.js +38 -0
- package/lib/index._auto-generated_.js.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.js +20 -0
- package/lib/index.js.map +1 -0
- package/lib/internals.d.ts +2 -0
- package/lib/internals.js +6 -0
- package/lib/internals.js.map +1 -0
- package/lib/package.json +4 -0
- package/lib/start-cli.d.ts +7 -0
- package/lib/start-cli.js +46 -0
- package/lib/start-cli.js.map +1 -0
- package/lib/transignal-config.d.ts +34 -0
- package/lib/transignal-config.js +42 -0
- package/lib/transignal-config.js.map +1 -0
- package/lib/transignal-param-handlers.d.ts +11 -0
- package/lib/transignal-param-handlers.js +31 -0
- package/lib/transignal-param-handlers.js.map +1 -0
- package/lib/transignal-service.d.ts +32 -0
- package/lib/transignal-service.js +206 -0
- package/lib/transignal-service.js.map +1 -0
- package/lib/transignal-testing.d.ts +8 -0
- package/lib/transignal-testing.js +14 -0
- package/lib/transignal-testing.js.map +1 -0
- package/lib/types.d.ts +124 -0
- package/lib/types.js +3 -0
- package/lib/types.js.map +1 -0
- package/lib/utility-types.d.ts +29 -0
- package/lib/utility-types.js +3 -0
- package/lib/utility-types.js.map +1 -0
- package/lib/utils.d.ts +15 -0
- package/lib/utils.js +20 -0
- package/lib/utils.js.map +1 -0
- package/lib-esm/app.d.ts +3 -0
- package/lib-esm/app.electron.d.ts +1 -0
- package/lib-esm/app.electron.js +2 -0
- package/lib-esm/app.electron.js.map +1 -0
- package/lib-esm/app.hosts.d.ts +95 -0
- package/lib-esm/app.hosts.js +157 -0
- package/lib-esm/app.hosts.js.map +1 -0
- package/lib-esm/app.js +460 -0
- package/lib-esm/app.js.map +1 -0
- package/lib-esm/app.vscode.d.ts +9 -0
- package/lib-esm/app.vscode.js +37 -0
- package/lib-esm/app.vscode.js.map +1 -0
- package/lib-esm/cli.d.ts +1 -0
- package/lib-esm/cli.js +4 -0
- package/lib-esm/cli.js.map +1 -0
- package/lib-esm/index.d.ts +3 -0
- package/lib-esm/index.js +4 -0
- package/lib-esm/index.js.map +1 -0
- package/lib-esm/lib/build-info._auto-generated_.d.ts +24 -0
- package/lib-esm/lib/build-info._auto-generated_.js +27 -0
- package/lib-esm/lib/build-info._auto-generated_.js.map +1 -0
- package/lib-esm/lib/env/env.angular-node-app.d.ts +67 -0
- package/lib-esm/lib/env/env.angular-node-app.js +137 -0
- package/lib-esm/lib/env/env.angular-node-app.js.map +1 -0
- package/lib-esm/lib/env/env.docs-webapp.d.ts +67 -0
- package/lib-esm/lib/env/env.docs-webapp.js +137 -0
- package/lib-esm/lib/env/env.docs-webapp.js.map +1 -0
- package/lib-esm/lib/env/env.electron-app.d.ts +67 -0
- package/lib-esm/lib/env/env.electron-app.js +137 -0
- package/lib-esm/lib/env/env.electron-app.js.map +1 -0
- package/lib-esm/lib/env/env.mobile-app.d.ts +67 -0
- package/lib-esm/lib/env/env.mobile-app.js +137 -0
- package/lib-esm/lib/env/env.mobile-app.js.map +1 -0
- package/lib-esm/lib/env/env.npm-lib-and-cli-tool.d.ts +67 -0
- package/lib-esm/lib/env/env.npm-lib-and-cli-tool.js +137 -0
- package/lib-esm/lib/env/env.npm-lib-and-cli-tool.js.map +1 -0
- package/lib-esm/lib/env/env.vscode-plugin.d.ts +67 -0
- package/lib-esm/lib/env/env.vscode-plugin.js +137 -0
- package/lib-esm/lib/env/env.vscode-plugin.js.map +1 -0
- package/lib-esm/lib/env/index.d.ts +6 -0
- package/lib-esm/lib/env/index.js +7 -0
- package/lib-esm/lib/env/index.js.map +1 -0
- package/lib-esm/lib/features/index.d.ts +4 -0
- package/lib-esm/lib/features/index.js +5 -0
- package/lib-esm/lib/features/index.js.map +1 -0
- package/lib-esm/lib/features/types.d.ts +4 -0
- package/lib-esm/lib/features/types.js +2 -0
- package/lib-esm/lib/features/types.js.map +1 -0
- package/lib-esm/lib/features/withLanguageLocalStorageSync.d.ts +9 -0
- package/lib-esm/lib/features/withLanguageLocalStorageSync.js +35 -0
- package/lib-esm/lib/features/withLanguageLocalStorageSync.js.map +1 -0
- package/lib-esm/lib/features/withNavigatorLanguage.d.ts +6 -0
- package/lib-esm/lib/features/withNavigatorLanguage.js +25 -0
- package/lib-esm/lib/features/withNavigatorLanguage.js.map +1 -0
- package/lib-esm/lib/features/withPreloadScopes.d.ts +8 -0
- package/lib-esm/lib/features/withPreloadScopes.js +21 -0
- package/lib-esm/lib/features/withPreloadScopes.js.map +1 -0
- package/lib-esm/lib/features/withServerSideLanguage.d.ts +6 -0
- package/lib-esm/lib/features/withServerSideLanguage.js +25 -0
- package/lib-esm/lib/features/withServerSideLanguage.js.map +1 -0
- package/lib-esm/lib/features/withTranslatedTitle.d.ts +34 -0
- package/lib-esm/lib/features/withTranslatedTitle.js +65 -0
- package/lib-esm/lib/features/withTranslatedTitle.js.map +1 -0
- package/lib-esm/lib/index._auto-generated_.d.ts +16 -0
- package/lib-esm/lib/index._auto-generated_.js +22 -0
- package/lib-esm/lib/index._auto-generated_.js.map +1 -0
- package/lib-esm/lib/index.d.ts +4 -0
- package/lib-esm/lib/index.js +4 -0
- package/lib-esm/lib/index.js.map +1 -0
- package/lib-esm/lib/internals.d.ts +2 -0
- package/lib-esm/lib/internals.js +3 -0
- package/lib-esm/lib/internals.js.map +1 -0
- package/lib-esm/lib/start-cli.d.ts +7 -0
- package/lib-esm/lib/start-cli.js +43 -0
- package/lib-esm/lib/start-cli.js.map +1 -0
- package/lib-esm/lib/transignal-config.d.ts +34 -0
- package/lib-esm/lib/transignal-config.js +36 -0
- package/lib-esm/lib/transignal-config.js.map +1 -0
- package/lib-esm/lib/transignal-param-handlers.d.ts +11 -0
- package/lib-esm/lib/transignal-param-handlers.js +25 -0
- package/lib-esm/lib/transignal-param-handlers.js.map +1 -0
- package/lib-esm/lib/transignal-service.d.ts +32 -0
- package/lib-esm/lib/transignal-service.js +197 -0
- package/lib-esm/lib/transignal-service.js.map +1 -0
- package/lib-esm/lib/transignal-testing.d.ts +8 -0
- package/lib-esm/lib/transignal-testing.js +10 -0
- package/lib-esm/lib/transignal-testing.js.map +1 -0
- package/lib-esm/lib/types.d.ts +124 -0
- package/lib-esm/lib/types.js +2 -0
- package/lib-esm/lib/types.js.map +1 -0
- package/lib-esm/lib/utility-types.d.ts +29 -0
- package/lib-esm/lib/utility-types.js +2 -0
- package/lib-esm/lib/utility-types.js.map +1 -0
- package/lib-esm/lib/utils.d.ts +15 -0
- package/lib-esm/lib/utils.js +15 -0
- package/lib-esm/lib/utils.js.map +1 -0
- package/lib-prod/build-info._auto-generated_.d.ts +24 -0
- package/lib-prod/build-info._auto-generated_.js +27 -0
- package/lib-prod/build-info._auto-generated_.js.map +1 -0
- package/lib-prod/env/env.angular-node-app.d.ts +67 -0
- package/lib-prod/env/env.angular-node-app.js +137 -0
- package/lib-prod/env/env.angular-node-app.js.map +1 -0
- package/lib-prod/env/env.docs-webapp.d.ts +67 -0
- package/lib-prod/env/env.docs-webapp.js +137 -0
- package/lib-prod/env/env.docs-webapp.js.map +1 -0
- package/lib-prod/env/env.electron-app.d.ts +67 -0
- package/lib-prod/env/env.electron-app.js +137 -0
- package/lib-prod/env/env.electron-app.js.map +1 -0
- package/lib-prod/env/env.mobile-app.d.ts +67 -0
- package/lib-prod/env/env.mobile-app.js +137 -0
- package/lib-prod/env/env.mobile-app.js.map +1 -0
- package/lib-prod/env/env.npm-lib-and-cli-tool.d.ts +67 -0
- package/lib-prod/env/env.npm-lib-and-cli-tool.js +137 -0
- package/lib-prod/env/env.npm-lib-and-cli-tool.js.map +1 -0
- package/lib-prod/env/env.vscode-plugin.d.ts +67 -0
- package/lib-prod/env/env.vscode-plugin.js +137 -0
- package/lib-prod/env/env.vscode-plugin.js.map +1 -0
- package/lib-prod/env/index.d.ts +6 -0
- package/lib-prod/env/index.js +7 -0
- package/lib-prod/env/index.js.map +1 -0
- package/lib-prod/features/index.d.ts +4 -0
- package/lib-prod/features/index.js +5 -0
- package/lib-prod/features/index.js.map +1 -0
- package/lib-prod/features/types.d.ts +4 -0
- package/lib-prod/features/types.js +2 -0
- package/lib-prod/features/types.js.map +1 -0
- package/lib-prod/features/withLanguageLocalStorageSync.d.ts +9 -0
- package/lib-prod/features/withLanguageLocalStorageSync.js +35 -0
- package/lib-prod/features/withLanguageLocalStorageSync.js.map +1 -0
- package/lib-prod/features/withNavigatorLanguage.d.ts +6 -0
- package/lib-prod/features/withNavigatorLanguage.js +25 -0
- package/lib-prod/features/withNavigatorLanguage.js.map +1 -0
- package/lib-prod/features/withPreloadScopes.d.ts +8 -0
- package/lib-prod/features/withPreloadScopes.js +21 -0
- package/lib-prod/features/withPreloadScopes.js.map +1 -0
- package/lib-prod/features/withServerSideLanguage.d.ts +6 -0
- package/lib-prod/features/withServerSideLanguage.js +25 -0
- package/lib-prod/features/withServerSideLanguage.js.map +1 -0
- package/lib-prod/features/withTranslatedTitle.d.ts +34 -0
- package/lib-prod/features/withTranslatedTitle.js +65 -0
- package/lib-prod/features/withTranslatedTitle.js.map +1 -0
- package/lib-prod/index._auto-generated_.d.ts +16 -0
- package/lib-prod/index._auto-generated_.js +22 -0
- package/lib-prod/index._auto-generated_.js.map +1 -0
- package/lib-prod/index.d.ts +4 -0
- package/lib-prod/index.js +4 -0
- package/lib-prod/index.js.map +1 -0
- package/lib-prod/internals.d.ts +2 -0
- package/lib-prod/internals.js +3 -0
- package/lib-prod/internals.js.map +1 -0
- package/lib-prod/package.json +4 -0
- package/lib-prod/start-cli.d.ts +7 -0
- package/lib-prod/start-cli.js +43 -0
- package/lib-prod/start-cli.js.map +1 -0
- package/lib-prod/transignal-config.d.ts +34 -0
- package/lib-prod/transignal-config.js +36 -0
- package/lib-prod/transignal-config.js.map +1 -0
- package/lib-prod/transignal-param-handlers.d.ts +11 -0
- package/lib-prod/transignal-param-handlers.js +25 -0
- package/lib-prod/transignal-param-handlers.js.map +1 -0
- package/lib-prod/transignal-service.d.ts +32 -0
- package/lib-prod/transignal-service.js +197 -0
- package/lib-prod/transignal-service.js.map +1 -0
- package/lib-prod/transignal-testing.d.ts +8 -0
- package/lib-prod/transignal-testing.js +10 -0
- package/lib-prod/transignal-testing.js.map +1 -0
- package/lib-prod/types.d.ts +124 -0
- package/lib-prod/types.js +2 -0
- package/lib-prod/types.js.map +1 -0
- package/lib-prod/utility-types.d.ts +29 -0
- package/lib-prod/utility-types.js +2 -0
- package/lib-prod/utility-types.js.map +1 -0
- package/lib-prod/utils.d.ts +15 -0
- package/lib-prod/utils.js +15 -0
- package/lib-prod/utils.js.map +1 -0
- package/lib-prod.re-export.json +1 -0
- package/lib-prod.split-namespaces.json +4 -0
- package/package.json +39 -0
- package/scss/global.scss +94 -0
- package/scss/index.scss +2 -0
- package/scss/lib/index.scss +2 -0
- package/scss/vars.scss +7 -0
- package/src.d.ts +6 -0
- package/src.js +4 -0
- package/websql/README.md +24 -0
- package/websql/fesm2022/i18n-websql.mjs +521 -0
- package/websql/fesm2022/i18n-websql.mjs.map +1 -0
- package/websql/package.json +23 -0
- package/websql/types/i18n-websql.d.ts +353 -0
- package/websql-prod/README.md +24 -0
- package/websql-prod/fesm2022/i18n-websql-prod.mjs +521 -0
- package/websql-prod/fesm2022/i18n-websql-prod.mjs.map +1 -0
- package/websql-prod/package.json +23 -0
- package/websql-prod/types/i18n-websql-prod.d.ts +353 -0
- package/websql-prod.re-export.json +1 -0
- package/websql-prod.split-namespaces.json +4 -0
|
@@ -0,0 +1,521 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, EnvironmentInjector, signal, computed, runInInjectionContext, untracked, resource, Injectable, InjectionToken, makeEnvironmentProviders, provideAppInitializer, PLATFORM_ID, effect, DOCUMENT } from '@angular/core';
|
|
3
|
+
import { isPlatformBrowser, isPlatformServer } from '@angular/common';
|
|
4
|
+
import { Title } from '@angular/platform-browser';
|
|
5
|
+
import { TitleStrategy, Router } from '@angular/router';
|
|
6
|
+
|
|
7
|
+
// THIS FILE IS GENERATED - DO NOT MODIFY
|
|
8
|
+
/**
|
|
9
|
+
* Autogenerated by current cli tool
|
|
10
|
+
*/
|
|
11
|
+
const BUILD_FRAMEWORK_CLI_NAME = 'tnp';
|
|
12
|
+
/**
|
|
13
|
+
* This value can be change in taon.jsonc (appId)
|
|
14
|
+
*/
|
|
15
|
+
const APP_ID = 'com.domain.example.i18n';
|
|
16
|
+
/**
|
|
17
|
+
* Autogenerated by current cli tool
|
|
18
|
+
*/
|
|
19
|
+
const BUILD_BASE_HREF = '';
|
|
20
|
+
/**
|
|
21
|
+
* This value can be change in taon.jsonc (overrideNpmName)
|
|
22
|
+
*/
|
|
23
|
+
const PROJECT_NPM_NAME = '@taon-dev/i18n';
|
|
24
|
+
/**
|
|
25
|
+
* Taon version from you project taon.json
|
|
26
|
+
*/
|
|
27
|
+
const CURRENT_PACKAGE_TAON_VERSION = 'v21';
|
|
28
|
+
/**
|
|
29
|
+
* Autogenerated by current cli tool. Use *tnp release* to bump version.
|
|
30
|
+
*/
|
|
31
|
+
const CURRENT_PACKAGE_VERSION = '0.0.1';
|
|
32
|
+
// THIS FILE IS GENERATED - DO NOT MODIFY
|
|
33
|
+
|
|
34
|
+
const INTERNAL_TRANSIGNAL_CONFIG = Symbol('INTERNAL_TRANSIGNAL_CONFIG');
|
|
35
|
+
const TREE_SHAKED_TRANSLATIONS = Symbol('TREE_SHAKED_TRANSLATIONS');
|
|
36
|
+
|
|
37
|
+
//#region tnp-helpers cli template
|
|
38
|
+
// import { Helpers, BaseCommandLineFeature } from 'tnp-helpers/src';
|
|
39
|
+
// import { BaseProject, BaseStartConfig } from 'tnp-helpers/src'; // @backend
|
|
40
|
+
// class $Version extends BaseCommandLineFeature<{}> {
|
|
41
|
+
// public _() {
|
|
42
|
+
// console.log(`Hello world from cli`);
|
|
43
|
+
// this._exit();
|
|
44
|
+
// }
|
|
45
|
+
// }
|
|
46
|
+
//#endregion
|
|
47
|
+
/**
|
|
48
|
+
*
|
|
49
|
+
* @param argsv process.argsv
|
|
50
|
+
* @param filename needed if you want ipc communicaiton
|
|
51
|
+
*/
|
|
52
|
+
async function startCli(argsv, filename) {
|
|
53
|
+
/* */
|
|
54
|
+
/* */
|
|
55
|
+
/* */
|
|
56
|
+
/* */
|
|
57
|
+
/* */
|
|
58
|
+
/* */
|
|
59
|
+
/* */
|
|
60
|
+
/* */
|
|
61
|
+
/* */
|
|
62
|
+
/* */
|
|
63
|
+
/* */
|
|
64
|
+
/* */
|
|
65
|
+
/* */
|
|
66
|
+
/* */
|
|
67
|
+
/* */
|
|
68
|
+
/* */
|
|
69
|
+
/* */
|
|
70
|
+
/* */
|
|
71
|
+
/* */
|
|
72
|
+
/* */
|
|
73
|
+
/* */
|
|
74
|
+
/* */
|
|
75
|
+
/* */
|
|
76
|
+
/* */
|
|
77
|
+
return (void 0);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Param handler which allows for specification of basic params: `{name}`
|
|
82
|
+
*
|
|
83
|
+
* @param translation Translated text
|
|
84
|
+
* @param params Params provided to translation function
|
|
85
|
+
*/
|
|
86
|
+
const simpleParamsHandler = (translation, params) => {
|
|
87
|
+
if (!params)
|
|
88
|
+
return translation;
|
|
89
|
+
for (const [key, value] of Object.entries(params)) {
|
|
90
|
+
translation = translation.replaceAll(`{${key}}`, simpleParamValueStringify(value));
|
|
91
|
+
}
|
|
92
|
+
return translation;
|
|
93
|
+
};
|
|
94
|
+
const noParamsHandler = translation => translation;
|
|
95
|
+
const simpleParamValueStringify = (paramValue) => {
|
|
96
|
+
if (typeof paramValue === 'string') {
|
|
97
|
+
return paramValue;
|
|
98
|
+
}
|
|
99
|
+
if (paramValue == null) {
|
|
100
|
+
return '';
|
|
101
|
+
}
|
|
102
|
+
return paramValue.toString();
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Main transignal service, used to process and cache translations
|
|
107
|
+
* Can be injected directly or with use of transignal object created with {@link prepareTransignal} function (recommended)
|
|
108
|
+
*/
|
|
109
|
+
class TransignalService {
|
|
110
|
+
constructor() {
|
|
111
|
+
this.injector = inject(EnvironmentInjector);
|
|
112
|
+
this.config = injectTransignalConfig();
|
|
113
|
+
this.paramsHandler = this.config.paramHandler ?? simpleParamsHandler;
|
|
114
|
+
this.loadingFn = this.config.loadingFn ?? (() => '...');
|
|
115
|
+
// eslint-disable-next-line no-console
|
|
116
|
+
this.errorHandler = this.config.errorHandler ?? console.error; // TODO maybe add a link to error page in docs
|
|
117
|
+
this.loadingCount = signal(0, ...(ngDevMode ? [{ debugName: "loadingCount" }] : []));
|
|
118
|
+
this.scopeMap = new Map();
|
|
119
|
+
this.languageMap = new Map();
|
|
120
|
+
/**
|
|
121
|
+
* Use to set or get active language
|
|
122
|
+
*/
|
|
123
|
+
this.activeLang = signal(this.config.defaultLang, ...(ngDevMode ? [{ debugName: "activeLang" }] : []));
|
|
124
|
+
/**
|
|
125
|
+
* Use to determine whether service is currently loading translation files
|
|
126
|
+
*/
|
|
127
|
+
this.isLoading = computed(() => this.loadingCount() > 0, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
|
|
128
|
+
}
|
|
129
|
+
t(scope) {
|
|
130
|
+
const existing = this.scopeMap.get(scope);
|
|
131
|
+
if (existing) {
|
|
132
|
+
return existing;
|
|
133
|
+
}
|
|
134
|
+
const scopeObj = this.initT(scope);
|
|
135
|
+
this.scopeMap.set(scope, scopeObj);
|
|
136
|
+
return scopeObj;
|
|
137
|
+
}
|
|
138
|
+
initT(scope) {
|
|
139
|
+
const cache = new Map();
|
|
140
|
+
const t = ((key, params) => {
|
|
141
|
+
const lang = this.activeLang();
|
|
142
|
+
const baseKey = `${lang}/${key}`;
|
|
143
|
+
const memoKey = params ? `${baseKey}_${JSON.stringify(params)}` : baseKey;
|
|
144
|
+
const alreadyComputed = cache.get(memoKey);
|
|
145
|
+
if (alreadyComputed) {
|
|
146
|
+
return alreadyComputed;
|
|
147
|
+
}
|
|
148
|
+
const { isLoading, error, value } = this.fetchLanguage(scope, lang);
|
|
149
|
+
if (isLoading()) {
|
|
150
|
+
return this.loadingFn?.(key);
|
|
151
|
+
}
|
|
152
|
+
if (error() || !value()) {
|
|
153
|
+
this.errorHandler('missing_file', error());
|
|
154
|
+
return '';
|
|
155
|
+
}
|
|
156
|
+
const result = this.replaceParams(this.resolveObjectPath(value(), key), params);
|
|
157
|
+
cache.set(memoKey, result);
|
|
158
|
+
return result;
|
|
159
|
+
}); // needed as other props are assigned below
|
|
160
|
+
t.arr = t;
|
|
161
|
+
t.obj = t;
|
|
162
|
+
t.prefix = this.preparePrefixFn(t, 1);
|
|
163
|
+
t.plural = this.preparePluralFn(t);
|
|
164
|
+
t.select = this.prepareSelectFn(t);
|
|
165
|
+
return t;
|
|
166
|
+
}
|
|
167
|
+
preparePrefixFn(t, depth) {
|
|
168
|
+
return (prefix) => {
|
|
169
|
+
const prefixedT = (key, params) => t(`${prefix}.${key}`, params);
|
|
170
|
+
prefixedT.arr = prefixedT;
|
|
171
|
+
prefixedT.obj = prefixedT;
|
|
172
|
+
prefixedT.plural = this.preparePluralFn(prefixedT);
|
|
173
|
+
prefixedT.select = this.prepareSelectFn(prefixedT);
|
|
174
|
+
prefixedT.prefix =
|
|
175
|
+
this.config.maxPrefixDepth || 3 >= depth
|
|
176
|
+
? this.preparePrefixFn(prefixedT, depth + 1)
|
|
177
|
+
: () => {
|
|
178
|
+
this.errorHandler('prefix_too_deep');
|
|
179
|
+
const t = () => '';
|
|
180
|
+
t.arr = () => [];
|
|
181
|
+
t.obj = () => ({});
|
|
182
|
+
t.plural = () => '';
|
|
183
|
+
return t;
|
|
184
|
+
};
|
|
185
|
+
return prefixedT;
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
preparePluralFn(t) {
|
|
189
|
+
return (key, count, params) => {
|
|
190
|
+
const plurals = t(key, { count, ...params });
|
|
191
|
+
if (typeof plurals === 'string') {
|
|
192
|
+
if (plurals === this.loadingFn(key)) {
|
|
193
|
+
return plurals;
|
|
194
|
+
}
|
|
195
|
+
this.errorHandler('invalid_plural', key, plurals);
|
|
196
|
+
return plurals;
|
|
197
|
+
}
|
|
198
|
+
if (plurals[count]) {
|
|
199
|
+
return plurals[count];
|
|
200
|
+
}
|
|
201
|
+
const valueLastDigit = +count.toFixed(0).at(-1);
|
|
202
|
+
if (plurals.one && valueLastDigit === 1) {
|
|
203
|
+
return plurals.one;
|
|
204
|
+
}
|
|
205
|
+
if (plurals.many && valueLastDigit >= 5) {
|
|
206
|
+
return plurals.many;
|
|
207
|
+
}
|
|
208
|
+
if (plurals.few && valueLastDigit > 1 && valueLastDigit < 5) {
|
|
209
|
+
return plurals.few;
|
|
210
|
+
}
|
|
211
|
+
if (plurals.other) {
|
|
212
|
+
return plurals.other;
|
|
213
|
+
}
|
|
214
|
+
this.errorHandler('missing_plural', key, plurals, count);
|
|
215
|
+
return '';
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
prepareSelectFn(t) {
|
|
219
|
+
return (key, value, params) => {
|
|
220
|
+
const selects = t(key, { value, ...params });
|
|
221
|
+
if (typeof selects === 'string') {
|
|
222
|
+
if (selects === this.loadingFn(key)) {
|
|
223
|
+
return selects;
|
|
224
|
+
}
|
|
225
|
+
this.errorHandler('invalid_select', key, selects);
|
|
226
|
+
return selects;
|
|
227
|
+
}
|
|
228
|
+
if (value !== null) {
|
|
229
|
+
if (selects[value]) {
|
|
230
|
+
return selects[value];
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
else if (selects['null']) {
|
|
234
|
+
return selects['null'];
|
|
235
|
+
}
|
|
236
|
+
this.errorHandler('missing_select', key, selects, value);
|
|
237
|
+
return '';
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
replaceParams(translation, params) {
|
|
241
|
+
if (!translation)
|
|
242
|
+
return translation;
|
|
243
|
+
if (typeof translation === 'string') {
|
|
244
|
+
return this.paramsHandler(translation, params);
|
|
245
|
+
}
|
|
246
|
+
if (Array.isArray(translation)) {
|
|
247
|
+
return translation.map(val => this.replaceParams(val, params));
|
|
248
|
+
}
|
|
249
|
+
if (typeof translation === 'object') {
|
|
250
|
+
return Object.entries(translation).reduce((prev, [objKey, objVal]) => {
|
|
251
|
+
prev[objKey] = this.replaceParams(objVal, params);
|
|
252
|
+
return prev;
|
|
253
|
+
}, {});
|
|
254
|
+
}
|
|
255
|
+
return translation;
|
|
256
|
+
}
|
|
257
|
+
fetchLanguage(scope, lang) {
|
|
258
|
+
const cacheKey = `${scope}/${lang}`;
|
|
259
|
+
const existing = this.languageMap.get(cacheKey);
|
|
260
|
+
if (existing)
|
|
261
|
+
return existing;
|
|
262
|
+
const { translations, loader } = this.config;
|
|
263
|
+
const translation = runInInjectionContext(this.injector, () => translations === TREE_SHAKED_TRANSLATIONS
|
|
264
|
+
? untracked(() => resource({
|
|
265
|
+
loader: async () => {
|
|
266
|
+
this.loadingCount.update(count => ++count);
|
|
267
|
+
const file = await runInInjectionContext(this.injector, () => loader(scope, lang));
|
|
268
|
+
this.loadingCount.update(count => --count);
|
|
269
|
+
return file;
|
|
270
|
+
},
|
|
271
|
+
}))
|
|
272
|
+
: {
|
|
273
|
+
value: signal(translations[scope]),
|
|
274
|
+
isLoading: signal(false),
|
|
275
|
+
error: signal(undefined),
|
|
276
|
+
});
|
|
277
|
+
this.languageMap.set(cacheKey, translation);
|
|
278
|
+
return translation;
|
|
279
|
+
}
|
|
280
|
+
resolveObjectPath(obj, path) {
|
|
281
|
+
const keys = path.split('.');
|
|
282
|
+
let current = obj;
|
|
283
|
+
for (const key of keys) {
|
|
284
|
+
if (current && typeof current === 'object') {
|
|
285
|
+
current = current[key];
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
this.errorHandler('missing_key', { obj, path });
|
|
289
|
+
return undefined;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return current;
|
|
293
|
+
}
|
|
294
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TransignalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
295
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TransignalService }); }
|
|
296
|
+
}
|
|
297
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TransignalService, decorators: [{
|
|
298
|
+
type: Injectable
|
|
299
|
+
}] });
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Utility function to define a type of translations for type inference
|
|
303
|
+
*/
|
|
304
|
+
const treeShakedTranslations = () => TREE_SHAKED_TRANSLATIONS;
|
|
305
|
+
const TRANSIGNAL_CONFIG = new InjectionToken('TRANSIGNAL_CONFIG');
|
|
306
|
+
/**
|
|
307
|
+
* Use to inject transignal config
|
|
308
|
+
*/
|
|
309
|
+
const injectTransignalConfig = () => inject(TRANSIGNAL_CONFIG);
|
|
310
|
+
/**
|
|
311
|
+
* Prepares type-safe transignal object
|
|
312
|
+
* @param config Transignal configruation {@link TransignalConfig}
|
|
313
|
+
* @param features Extra tree-shakeable features
|
|
314
|
+
* - {@link withPreloadScopes} - preloads selected scopes
|
|
315
|
+
* - {@link withServerSideLanguage} - sets language based on `document.lang` in SSR environment
|
|
316
|
+
* - {@link withNavigatorLanguage} - sets language based on `navigator.language` in browser environment
|
|
317
|
+
* - {@link withLanguageLocalStorageSync} - syncs language with localStorage
|
|
318
|
+
* - {@link withTranslatedTitle} - enables translation of page title
|
|
319
|
+
*/
|
|
320
|
+
const prepareTransignal = (config, ...features) => {
|
|
321
|
+
const service = () => inject(TransignalService);
|
|
322
|
+
return {
|
|
323
|
+
[INTERNAL_TRANSIGNAL_CONFIG]: { config, features },
|
|
324
|
+
provide: () => makeEnvironmentProviders([
|
|
325
|
+
{ provide: TRANSIGNAL_CONFIG, useValue: config },
|
|
326
|
+
TransignalService,
|
|
327
|
+
features.map(feature => feature.providers),
|
|
328
|
+
]),
|
|
329
|
+
service,
|
|
330
|
+
t: (scope) => service().t(scope),
|
|
331
|
+
};
|
|
332
|
+
};
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* Provides unit-test version of transignal that loads translation instantly without loading
|
|
336
|
+
*
|
|
337
|
+
* @param transignal existing transignal instance
|
|
338
|
+
* @param translations real translations in a selected language
|
|
339
|
+
*/
|
|
340
|
+
const provideTransignalTesting = (transignal, translations) => prepareTransignal({ ...transignal[INTERNAL_TRANSIGNAL_CONFIG].config, translations }, ...transignal[INTERNAL_TRANSIGNAL_CONFIG].features).provide();
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Utility to create a plural translation that can differ between languages and includes variants of translations for different plurals
|
|
344
|
+
* Can be used with {@link TranslateObj.plural}
|
|
345
|
+
* Translations may use automatic param: `{count}`
|
|
346
|
+
* @param translation plural translation object
|
|
347
|
+
*/
|
|
348
|
+
const plural = (translation) => translation;
|
|
349
|
+
/**
|
|
350
|
+
* Utility to create a select translation
|
|
351
|
+
* Can be used with {@link TranslateObj.select}
|
|
352
|
+
* Translations may use automatic param: `{value}`
|
|
353
|
+
* @param translation select translation object
|
|
354
|
+
*/
|
|
355
|
+
const select = (translation) => translation;
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* Saves user selected language in selected storage e.g. localStorage
|
|
359
|
+
* Works only in browser environment
|
|
360
|
+
*
|
|
361
|
+
* @param key Key under which it should save the language in storage
|
|
362
|
+
* @param storage Storage to be used e.g. localStorage or sessionStorage
|
|
363
|
+
*/
|
|
364
|
+
const withLanguageLocalStorageSync = (key = 'LANG', storage = 'localStorage') => {
|
|
365
|
+
return {
|
|
366
|
+
providers: [
|
|
367
|
+
provideAppInitializer(() => {
|
|
368
|
+
if (isPlatformBrowser(inject(PLATFORM_ID))) {
|
|
369
|
+
const transignalService = inject(TransignalService);
|
|
370
|
+
const store = window[storage];
|
|
371
|
+
const savedLanguage = store.getItem(key);
|
|
372
|
+
if (savedLanguage) {
|
|
373
|
+
const { availableLangs } = injectTransignalConfig();
|
|
374
|
+
if (availableLangs.includes(savedLanguage)) {
|
|
375
|
+
transignalService.activeLang.set(savedLanguage);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
effect(() => {
|
|
379
|
+
const updatedLang = transignalService.activeLang();
|
|
380
|
+
store.setItem(key, updatedLang);
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
}),
|
|
384
|
+
],
|
|
385
|
+
};
|
|
386
|
+
};
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* Sets active language depending on `navigator.language`, which represents user defined browser settings
|
|
390
|
+
* Works only in browser environment
|
|
391
|
+
*/
|
|
392
|
+
const withNavigatorLanguage = () => {
|
|
393
|
+
return {
|
|
394
|
+
providers: [
|
|
395
|
+
provideAppInitializer(() => {
|
|
396
|
+
if (isPlatformBrowser(inject(PLATFORM_ID))) {
|
|
397
|
+
const transignalService = inject(TransignalService);
|
|
398
|
+
const { availableLangs } = injectTransignalConfig();
|
|
399
|
+
const preferredLanguage = navigator.languages.map(language => language.split('-')[0].toLowerCase()).find(language => availableLangs.includes(language));
|
|
400
|
+
if (preferredLanguage) {
|
|
401
|
+
transignalService.activeLang.set(preferredLanguage);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}),
|
|
405
|
+
],
|
|
406
|
+
};
|
|
407
|
+
};
|
|
408
|
+
|
|
409
|
+
/**
|
|
410
|
+
* Preloads selected scopes in default language
|
|
411
|
+
* Use after language init by {@link withServerSideLanguage} or {@link withNavigatorLanguage}
|
|
412
|
+
* @param scopes Scopes which should be preloaded
|
|
413
|
+
*/
|
|
414
|
+
const withPreloadScopes = (scopes) => {
|
|
415
|
+
return {
|
|
416
|
+
providers: [
|
|
417
|
+
provideAppInitializer(() => {
|
|
418
|
+
const transignalService = inject(TransignalService);
|
|
419
|
+
effect(() => {
|
|
420
|
+
const _activeLang = transignalService.activeLang();
|
|
421
|
+
scopes.forEach(scope => transignalService.t(scope)(''));
|
|
422
|
+
});
|
|
423
|
+
}),
|
|
424
|
+
],
|
|
425
|
+
};
|
|
426
|
+
};
|
|
427
|
+
|
|
428
|
+
/**
|
|
429
|
+
* Sets active language depending on `document.lang` attribute which should be set by the server.ts depending on `Accept-language` header
|
|
430
|
+
* Works only in SSR environment
|
|
431
|
+
*/
|
|
432
|
+
const withServerSideLanguage = () => {
|
|
433
|
+
return {
|
|
434
|
+
providers: [
|
|
435
|
+
provideAppInitializer(() => {
|
|
436
|
+
if (isPlatformServer(inject(PLATFORM_ID))) {
|
|
437
|
+
const transignalService = inject(TransignalService);
|
|
438
|
+
const { documentElement } = inject(DOCUMENT);
|
|
439
|
+
const { availableLangs } = injectTransignalConfig();
|
|
440
|
+
if (availableLangs.includes(documentElement.lang)) {
|
|
441
|
+
transignalService.activeLang.set(documentElement.lang);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
}),
|
|
445
|
+
],
|
|
446
|
+
};
|
|
447
|
+
};
|
|
448
|
+
|
|
449
|
+
class TransignalTitleStrategy extends TitleStrategy {
|
|
450
|
+
constructor(t) {
|
|
451
|
+
super();
|
|
452
|
+
this.t = t;
|
|
453
|
+
this.title = inject(Title);
|
|
454
|
+
this.injector = inject(EnvironmentInjector);
|
|
455
|
+
}
|
|
456
|
+
updateTitle(routerState) {
|
|
457
|
+
this.effectRef?.destroy();
|
|
458
|
+
const router = this.injector.get(Router);
|
|
459
|
+
const title = this.buildTitle(routerState) || 'default';
|
|
460
|
+
const translation = computed(() => this.t(title, router.getCurrentNavigation()?.extras.state), ...(ngDevMode ? [{ debugName: "translation" }] : []));
|
|
461
|
+
this.effectRef = runInInjectionContext(this.injector, () => effect(() => this.title.setTitle(translation()), { manualCleanup: true }));
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Enables translation of title param in route definition with use of prepared {@link TitleStrategy}
|
|
466
|
+
* Automatically translates `title` param form route definition, sets website title and updates on language changes
|
|
467
|
+
* Also it is possible to use parameters from `navigation.extras.state`
|
|
468
|
+
*
|
|
469
|
+
* @example
|
|
470
|
+
* ```typescript
|
|
471
|
+
* // src/app/app.routes.ts
|
|
472
|
+
* export const routes = [
|
|
473
|
+
* { path: 'base', title: 'base', children: [
|
|
474
|
+
* { path: 'child', title: 'child' },
|
|
475
|
+
* ],
|
|
476
|
+
* { path: 'aux', outlet: 'popup', title: 'popupTitle' }
|
|
477
|
+
* ];
|
|
478
|
+
*
|
|
479
|
+
* // src/app/transignal.ts
|
|
480
|
+
* export const transignal = prepareTransignal(<config>, withTranslatedTitle('global'));
|
|
481
|
+
*
|
|
482
|
+
* // src/app/i18n/global/en.ts
|
|
483
|
+
* export default {
|
|
484
|
+
* title: {
|
|
485
|
+
* base: 'Base title',
|
|
486
|
+
* child: 'Child title'
|
|
487
|
+
* popupTitle: 'Popup title'
|
|
488
|
+
* }
|
|
489
|
+
* };
|
|
490
|
+
* ```
|
|
491
|
+
*
|
|
492
|
+
* @param scope scope under which there are title translations
|
|
493
|
+
* @param translationKey translation key under which there are translations, `title` by default
|
|
494
|
+
*/
|
|
495
|
+
const withTranslatedTitle = (scope, translationKey = 'title') => {
|
|
496
|
+
return {
|
|
497
|
+
providers: [
|
|
498
|
+
makeEnvironmentProviders([
|
|
499
|
+
{
|
|
500
|
+
provide: TitleStrategy,
|
|
501
|
+
useFactory: (service = inject(TransignalService)) => new TransignalTitleStrategy(service.t(scope).prefix(translationKey)),
|
|
502
|
+
},
|
|
503
|
+
]),
|
|
504
|
+
],
|
|
505
|
+
};
|
|
506
|
+
};
|
|
507
|
+
|
|
508
|
+
// @ts-nocheck
|
|
509
|
+
// This file is auto-generated during init process. Do not modify.
|
|
510
|
+
// This disable this auto generate file.
|
|
511
|
+
// set property "shouldGenerateAutogenIndexFile: false"
|
|
512
|
+
// in taon.jsonc of your project.
|
|
513
|
+
|
|
514
|
+
var index = {};
|
|
515
|
+
|
|
516
|
+
/**
|
|
517
|
+
* Generated bundle index. Do not edit.
|
|
518
|
+
*/
|
|
519
|
+
|
|
520
|
+
export { APP_ID, BUILD_BASE_HREF, BUILD_FRAMEWORK_CLI_NAME, CURRENT_PACKAGE_TAON_VERSION, CURRENT_PACKAGE_VERSION, INTERNAL_TRANSIGNAL_CONFIG, PROJECT_NPM_NAME, TRANSIGNAL_CONFIG, TREE_SHAKED_TRANSLATIONS, TransignalService, injectTransignalConfig, noParamsHandler, plural, prepareTransignal, provideTransignalTesting, select, simpleParamValueStringify, simpleParamsHandler, startCli, treeShakedTranslations, withLanguageLocalStorageSync, withNavigatorLanguage, withPreloadScopes, withServerSideLanguage, withTranslatedTitle };
|
|
521
|
+
//# sourceMappingURL=i18n-websql.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n-websql.mjs","sources":["../../../tmp-libs-for-dist-websql/i18n/projects/i18n/src/lib/build-info._auto-generated_.ts","../../../tmp-libs-for-dist-websql/i18n/projects/i18n/src/lib/internals.ts","../../../tmp-libs-for-dist-websql/i18n/projects/i18n/src/lib/start-cli.ts","../../../tmp-libs-for-dist-websql/i18n/projects/i18n/src/lib/transignal-param-handlers.ts","../../../tmp-libs-for-dist-websql/i18n/projects/i18n/src/lib/transignal-service.ts","../../../tmp-libs-for-dist-websql/i18n/projects/i18n/src/lib/transignal-config.ts","../../../tmp-libs-for-dist-websql/i18n/projects/i18n/src/lib/transignal-testing.ts","../../../tmp-libs-for-dist-websql/i18n/projects/i18n/src/lib/utils.ts","../../../tmp-libs-for-dist-websql/i18n/projects/i18n/src/lib/features/withLanguageLocalStorageSync.ts","../../../tmp-libs-for-dist-websql/i18n/projects/i18n/src/lib/features/withNavigatorLanguage.ts","../../../tmp-libs-for-dist-websql/i18n/projects/i18n/src/lib/features/withPreloadScopes.ts","../../../tmp-libs-for-dist-websql/i18n/projects/i18n/src/lib/features/withServerSideLanguage.ts","../../../tmp-libs-for-dist-websql/i18n/projects/i18n/src/lib/features/withTranslatedTitle.ts","../../../tmp-libs-for-dist-websql/i18n/projects/i18n/src/lib/index._auto-generated_.ts","../../../tmp-libs-for-dist-websql/i18n/projects/i18n/src/lib/index.ts","../../../tmp-libs-for-dist-websql/i18n/projects/i18n/src/i18n-websql.ts"],"sourcesContent":["// THIS FILE IS GENERATED - DO NOT MODIFY\n/**\n * Autogenerated by current cli tool\n */\nexport const BUILD_FRAMEWORK_CLI_NAME = 'tnp';\n/**\n * This value can be change in taon.jsonc (appId)\n */\nexport const APP_ID = 'com.domain.example.i18n';\n/**\n * Autogenerated by current cli tool\n */\nexport const BUILD_BASE_HREF = '';\n/**\n * This value can be change in taon.jsonc (overrideNpmName)\n */\nexport const PROJECT_NPM_NAME = '@taon-dev/i18n';\n/**\n * Taon version from you project taon.json\n */\nexport const CURRENT_PACKAGE_TAON_VERSION = 'v21';\n/**\n * Autogenerated by current cli tool. Use *tnp release* to bump version.\n */\nexport const CURRENT_PACKAGE_VERSION = '0.0.1';\n\n\n\n\n\n// THIS FILE IS GENERATED - DO NOT MODIFY\n ","export const INTERNAL_TRANSIGNAL_CONFIG = Symbol('INTERNAL_TRANSIGNAL_CONFIG');\nexport const TREE_SHAKED_TRANSLATIONS = Symbol('TREE_SHAKED_TRANSLATIONS');","//#region tnp-helpers cli template\n// import { Helpers, BaseCommandLineFeature } from 'tnp-helpers/src';\n// import { BaseProject, BaseStartConfig } from 'tnp-helpers/src'; // @backend\n\n// class $Version extends BaseCommandLineFeature<{}> {\n// public _() {\n// console.log(`Hello world from cli`);\n// this._exit();\n// }\n// }\n//#endregion\n\n/**\n *\n * @param argsv process.argsv\n * @param filename needed if you want ipc communicaiton\n */\nexport async function startCli(argsv: string[], filename: string): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n}\n\nexport default startCli;","import { TranslateParams } from './types';\n\nexport type ParamHandler = (translation: string, params?: TranslateParams) => string;\n\n/**\n * Param handler which allows for specification of basic params: `{name}`\n *\n * @param translation Translated text\n * @param params Params provided to translation function\n */\nexport const simpleParamsHandler: ParamHandler = (translation, params) => {\n if (!params) return translation;\n for (const [key, value] of Object.entries(params)) {\n translation = translation.replaceAll(`{${key}}`, simpleParamValueStringify(value));\n }\n return translation;\n};\n\nexport const noParamsHandler: ParamHandler = translation => translation;\n\nexport const simpleParamValueStringify = (paramValue: unknown) => {\n if (typeof paramValue === 'string') {\n return paramValue;\n }\n if (paramValue == null) {\n return '';\n }\n return (paramValue as any).toString();\n};","import {\n computed,\n EnvironmentInjector,\n inject,\n Injectable,\n resource,\n runInInjectionContext,\n signal,\n untracked,\n} from '@angular/core';\n\nimport { TREE_SHAKED_TRANSLATIONS } from './internals';\nimport { injectTransignalConfig } from './transignal-config';\nimport { simpleParamsHandler } from './transignal-param-handlers';\nimport {\n PluralTranslation,\n SelectTranslation,\n TranslateFn,\n TranslateObj,\n TranslateParams,\n TranslationFile,\n} from './types';\nimport { ResourceRefLike, StringKeys } from './utility-types';\n\n/**\n * Main transignal service, used to process and cache translations\n * Can be injected directly or with use of transignal object created with {@link prepareTransignal} function (recommended)\n */\n@Injectable()\nexport class TransignalService<\n Languages extends string,\n Translations extends Record<string, Record<string, any>>,\n Scopes extends StringKeys<Translations>,\n> {\n private readonly injector = inject(EnvironmentInjector);\n private readonly config = injectTransignalConfig<Languages, Translations>();\n private readonly paramsHandler = this.config.paramHandler ?? simpleParamsHandler;\n private readonly loadingFn = this.config.loadingFn ?? (() => '...');\n // eslint-disable-next-line no-console\n private readonly errorHandler = this.config.errorHandler ?? console.error; // TODO maybe add a link to error page in docs\n private readonly loadingCount = signal<number>(0);\n private readonly scopeMap = new Map<string, TranslateObj<Translations[Scopes]>>();\n private readonly languageMap = new Map<string, ResourceRefLike<TranslationFile | undefined>>();\n\n /**\n * Use to set or get active language\n */\n readonly activeLang = signal<Languages>(this.config.defaultLang);\n /**\n * Use to determine whether service is currently loading translation files\n */\n readonly isLoading = computed(() => this.loadingCount() > 0);\n\n t<Scope extends Scopes>(scope: Scope): TranslateObj<Translations[Scope]> {\n const existing = this.scopeMap.get(scope);\n if (existing) {\n return existing as unknown as TranslateObj<Translations[Scope]>;\n }\n const scopeObj = this.initT<Translations[Scope]>(scope);\n\n this.scopeMap.set(scope, scopeObj as unknown as TranslateObj<Translations[Scopes]>);\n return scopeObj;\n }\n\n private initT<Context extends Record<string, any>>(scope: Scopes): TranslateObj<Context> {\n const cache = new Map<string, unknown>();\n const t: TranslateObj<Context> = ((key, params) => {\n const lang = this.activeLang();\n const baseKey = `${lang}/${key as string}`;\n const memoKey = params ? `${baseKey}_${JSON.stringify(params)}` : baseKey;\n const alreadyComputed = cache.get(memoKey);\n if (alreadyComputed) {\n return alreadyComputed;\n }\n const { isLoading, error, value } = this.fetchLanguage(scope, lang);\n if (isLoading()) {\n return this.loadingFn?.(key);\n }\n if (error() || !value()) {\n this.errorHandler('missing_file', error());\n return '';\n }\n\n const result = this.replaceParams(this.resolveObjectPath(value(), key), params);\n cache.set(memoKey, result);\n return result;\n }) as TranslateObj<Context>; // needed as other props are assigned below\n\n t.arr = t as any;\n t.obj = t as any;\n t.prefix = this.preparePrefixFn(t, 1);\n t.plural = this.preparePluralFn(t);\n t.select = this.prepareSelectFn(t);\n return t;\n }\n\n private preparePrefixFn(t: TranslateFn<any, any>, depth: number) {\n return (prefix: string) => {\n const prefixedT = (key: string, params?: TranslateParams) => t(`${prefix}.${key}`, params);\n prefixedT.arr = prefixedT;\n prefixedT.obj = prefixedT;\n prefixedT.plural = this.preparePluralFn(prefixedT);\n prefixedT.select = this.prepareSelectFn(prefixedT);\n prefixedT.prefix =\n this.config.maxPrefixDepth || 3 >= depth\n ? this.preparePrefixFn(prefixedT, depth + 1)\n : () => {\n this.errorHandler('prefix_too_deep');\n const t = () => '';\n t.arr = () => [];\n t.obj = () => ({});\n t.plural = () => '';\n return t;\n };\n return prefixedT as any;\n };\n }\n\n private preparePluralFn(t: TranslateFn<any, any>) {\n return (key: string, count: number, params?: TranslateParams) => {\n const plurals = t(key, { count, ...params }) as PluralTranslation | string;\n if (typeof plurals === 'string') {\n if (plurals === this.loadingFn(key)) {\n return plurals;\n }\n this.errorHandler('invalid_plural', key, plurals);\n return plurals as string;\n }\n if (plurals[count]) {\n return plurals[count];\n }\n const valueLastDigit = +count.toFixed(0).at(-1)!;\n if (plurals.one && valueLastDigit === 1) {\n return plurals.one;\n }\n if (plurals.many && valueLastDigit >= 5) {\n return plurals.many;\n }\n if (plurals.few && valueLastDigit > 1 && valueLastDigit < 5) {\n return plurals.few;\n }\n if (plurals.other) {\n return plurals.other;\n }\n this.errorHandler('missing_plural', key, plurals, count);\n return '';\n };\n }\n\n private prepareSelectFn(t: TranslateFn<any, any>) {\n return (key: string, value: string | number | null, params?: TranslateParams) => {\n const selects = t(key, { value, ...params }) as SelectTranslation | string;\n if (typeof selects === 'string') {\n if (selects === this.loadingFn(key)) {\n return selects;\n }\n this.errorHandler('invalid_select', key, selects);\n return selects as string;\n }\n if (value !== null) {\n if (selects[value]) {\n return selects[value];\n }\n } else if (selects['null']) {\n return selects['null'];\n }\n this.errorHandler('missing_select', key, selects, value);\n return '';\n };\n }\n\n protected replaceParams<T>(translation: T, params?: TranslateParams): T {\n if (!translation) return translation;\n if (typeof translation === 'string') {\n return this.paramsHandler(translation, params) as T;\n }\n if (Array.isArray(translation)) {\n return translation.map(val => this.replaceParams(val as T, params)) as T;\n }\n if (typeof translation === 'object') {\n return Object.entries(translation).reduce(\n (prev, [objKey, objVal]) => {\n prev[objKey] = this.replaceParams(objVal, params);\n return prev;\n },\n {} as Record<string, unknown>\n ) as T;\n }\n return translation;\n }\n\n private fetchLanguage(\n scope: Scopes,\n lang: Languages\n ): ResourceRefLike<TranslationFile | undefined> {\n const cacheKey = `${scope}/${lang}`;\n const existing = this.languageMap.get(cacheKey);\n if (existing) return existing;\n const { translations, loader } = this.config;\n\n const translation = runInInjectionContext(this.injector, () =>\n (translations as Translations | typeof TREE_SHAKED_TRANSLATIONS) === TREE_SHAKED_TRANSLATIONS\n ? untracked(() =>\n resource({\n loader: async () => {\n this.loadingCount.update(count => ++count);\n const file = await runInInjectionContext(this.injector, () => loader(scope, lang));\n this.loadingCount.update(count => --count);\n return file;\n },\n })\n )\n : {\n value: signal(translations[scope]),\n isLoading: signal(false),\n error: signal(undefined),\n }\n );\n this.languageMap.set(cacheKey, translation);\n return translation;\n }\n\n private resolveObjectPath(obj: Record<string, any> | undefined, path: string): unknown {\n const keys = path.split('.');\n let current: unknown = obj;\n for (const key of keys) {\n if (current && typeof current === 'object') {\n current = (current as Record<string, unknown>)[key];\n } else {\n this.errorHandler('missing_key', { obj, path });\n return undefined;\n }\n }\n return current;\n }\n}","import { inject, InjectionToken, makeEnvironmentProviders } from '@angular/core';\n\nimport { TransignalFeature } from './features/types';\nimport { INTERNAL_TRANSIGNAL_CONFIG, TREE_SHAKED_TRANSLATIONS } from './internals';\nimport { TransignalService } from './transignal-service';\nimport { TransignalConfig } from './types';\nimport { StringKeys } from './utility-types';\n\n/**\n * Utility function to define a type of translations for type inference\n */\nexport const treeShakedTranslations = <\n Translations extends Record<string, Record<string, unknown>>,\n>() => TREE_SHAKED_TRANSLATIONS as unknown as Translations;\n\nexport const TRANSIGNAL_CONFIG = new InjectionToken('TRANSIGNAL_CONFIG');\n\n/**\n * Use to inject transignal config\n */\nexport const injectTransignalConfig = <\n Languages extends string,\n Translations extends Record<string, Record<string, unknown>>,\n>() => inject<TransignalConfig<Languages, Translations>>(TRANSIGNAL_CONFIG);\n\n/**\n * Prepares type-safe transignal object\n * @param config Transignal configruation {@link TransignalConfig}\n * @param features Extra tree-shakeable features\n * - {@link withPreloadScopes} - preloads selected scopes\n * - {@link withServerSideLanguage} - sets language based on `document.lang` in SSR environment\n * - {@link withNavigatorLanguage} - sets language based on `navigator.language` in browser environment\n * - {@link withLanguageLocalStorageSync} - syncs language with localStorage\n * - {@link withTranslatedTitle} - enables translation of page title\n */\nexport const prepareTransignal = <\n Languages extends string,\n Translations extends Record<string, Record<string, unknown>>,\n>(\n config: TransignalConfig<Languages, Translations>,\n ...features: NoInfer<TransignalFeature<Languages, Translations>[]>\n) => {\n const service = () =>\n inject<TransignalService<Languages, Translations, StringKeys<Translations>>>(TransignalService);\n return {\n [INTERNAL_TRANSIGNAL_CONFIG]: { config, features },\n provide: () =>\n makeEnvironmentProviders([\n { provide: TRANSIGNAL_CONFIG, useValue: config },\n TransignalService,\n features.map(feature => feature.providers),\n ]),\n service,\n t: <Scope extends StringKeys<Translations>>(scope: Scope) => service().t(scope),\n };\n};","import { INTERNAL_TRANSIGNAL_CONFIG } from './internals';\nimport { prepareTransignal } from './transignal-config';\n\n/**\n * Provides unit-test version of transignal that loads translation instantly without loading\n *\n * @param transignal existing transignal instance\n * @param translations real translations in a selected language\n */\nexport const provideTransignalTesting = <\n Languages extends string,\n Translations extends Record<string, Record<string, unknown>>,\n>(\n transignal: ReturnType<typeof prepareTransignal<Languages, Translations>>,\n translations: Translations\n) =>\n prepareTransignal(\n { ...transignal[INTERNAL_TRANSIGNAL_CONFIG].config, translations },\n ...transignal[INTERNAL_TRANSIGNAL_CONFIG].features\n ).provide();","import {\n BasePluralTranslation,\n BaseSelectTranslation,\n MarkedAsSelect,\n PluralTranslation,\n} from './types';\n\n/**\n * Utility to create a plural translation that can differ between languages and includes variants of translations for different plurals\n * Can be used with {@link TranslateObj.plural}\n * Translations may use automatic param: `{count}`\n * @param translation plural translation object\n */\nexport const plural = (translation: BasePluralTranslation): PluralTranslation =>\n translation as PluralTranslation;\n\n/**\n * Utility to create a select translation\n * Can be used with {@link TranslateObj.select}\n * Translations may use automatic param: `{value}`\n * @param translation select translation object\n */\nexport const select = <T extends BaseSelectTranslation>(translation: T) =>\n translation as MarkedAsSelect<T>;","import { isPlatformBrowser } from '@angular/common';\nimport { effect, inject, PLATFORM_ID, provideAppInitializer } from '@angular/core';\n\nimport { TransignalFeature } from './types';\nimport { injectTransignalConfig } from '../transignal-config';\nimport { TransignalService } from '../transignal-service';\n\n/**\n * Saves user selected language in selected storage e.g. localStorage\n * Works only in browser environment\n *\n * @param key Key under which it should save the language in storage\n * @param storage Storage to be used e.g. localStorage or sessionStorage\n */\nexport const withLanguageLocalStorageSync = <\n Languages extends string,\n Translations extends Record<string, Record<string, unknown>>,\n>(\n key: string = 'LANG',\n storage: 'localStorage' | 'sessionStorage' = 'localStorage'\n): TransignalFeature<Languages, Translations> => {\n return {\n providers: [\n provideAppInitializer(() => {\n if (isPlatformBrowser(inject(PLATFORM_ID))) {\n const transignalService = inject(TransignalService);\n const store = window[storage];\n\n const savedLanguage = store.getItem(key);\n if (savedLanguage) {\n const { availableLangs } = injectTransignalConfig();\n if (availableLangs.includes(savedLanguage)) {\n transignalService.activeLang.set(savedLanguage);\n }\n }\n effect(() => {\n const updatedLang = transignalService.activeLang();\n store.setItem(key, updatedLang);\n });\n }\n }),\n ],\n };\n};","import { isPlatformBrowser } from '@angular/common';\nimport { inject, PLATFORM_ID, provideAppInitializer } from '@angular/core';\n\nimport { TransignalFeature } from './types';\nimport { injectTransignalConfig } from '../transignal-config';\nimport { TransignalService } from '../transignal-service';\n\n/**\n * Sets active language depending on `navigator.language`, which represents user defined browser settings\n * Works only in browser environment\n */\nexport const withNavigatorLanguage = <\n Languages extends string,\n Translations extends Record<string, Record<string, unknown>>,\n>(): TransignalFeature<Languages, Translations> => {\n return {\n providers: [\n provideAppInitializer(() => {\n if (isPlatformBrowser(inject(PLATFORM_ID))) {\n const transignalService = inject(TransignalService);\n const { availableLangs } = injectTransignalConfig();\n const preferredLanguage = (\n navigator.languages.map(language => language.split('-')[0].toLowerCase()) as Languages[]\n ).find(language => availableLangs.includes(language));\n if (preferredLanguage) {\n transignalService.activeLang.set(preferredLanguage);\n }\n }\n }),\n ],\n };\n};","import { effect, inject, provideAppInitializer } from '@angular/core';\n\nimport { TransignalFeature } from './types';\nimport { TransignalService } from '../transignal-service';\nimport { StringKeys } from '../utility-types';\n\n/**\n * Preloads selected scopes in default language\n * Use after language init by {@link withServerSideLanguage} or {@link withNavigatorLanguage}\n * @param scopes Scopes which should be preloaded\n */\nexport const withPreloadScopes = <\n Languages extends string,\n Translations extends Record<string, Record<string, unknown>>,\n>(\n scopes: StringKeys<Translations>[]\n): TransignalFeature<Languages, Translations> => {\n return {\n providers: [\n provideAppInitializer(() => {\n const transignalService = inject(TransignalService);\n effect(() => {\n const _activeLang = transignalService.activeLang();\n scopes.forEach(scope => transignalService.t(scope)(''));\n });\n }),\n ],\n };\n};","import { isPlatformServer } from '@angular/common';\nimport { DOCUMENT, inject, PLATFORM_ID, provideAppInitializer } from '@angular/core';\n\nimport { TransignalFeature } from './types';\nimport { injectTransignalConfig } from '../transignal-config';\nimport { TransignalService } from '../transignal-service';\n\n/**\n * Sets active language depending on `document.lang` attribute which should be set by the server.ts depending on `Accept-language` header\n * Works only in SSR environment\n */\nexport const withServerSideLanguage = <\n Languages extends string,\n Translations extends Record<string, Record<string, unknown>>,\n>(): TransignalFeature<Languages, Translations> => {\n return {\n providers: [\n provideAppInitializer(() => {\n if (isPlatformServer(inject(PLATFORM_ID))) {\n const transignalService = inject(TransignalService);\n const { documentElement } = inject(DOCUMENT);\n const { availableLangs } = injectTransignalConfig();\n if (availableLangs.includes(documentElement.lang)) {\n transignalService.activeLang.set(documentElement.lang);\n }\n }\n }),\n ],\n };\n};","import {\n computed,\n effect,\n EffectRef,\n EnvironmentInjector,\n inject,\n makeEnvironmentProviders,\n runInInjectionContext,\n} from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { Router, RouterStateSnapshot, TitleStrategy } from '@angular/router';\n\nimport { TransignalFeature } from './types';\nimport { TransignalService } from '../transignal-service';\nimport { TranslateObj } from '../types';\nimport { StringKeys } from '../utility-types';\n\nclass TransignalTitleStrategy extends TitleStrategy {\n private readonly title = inject(Title);\n private readonly injector = inject(EnvironmentInjector);\n\n private effectRef: EffectRef | undefined;\n\n constructor(private readonly t: TranslateObj<Record<string, string>>) {\n super();\n }\n\n updateTitle(routerState: RouterStateSnapshot): void {\n this.effectRef?.destroy();\n const router = this.injector.get(Router);\n const title = this.buildTitle(routerState) || 'default';\n const translation = computed(() => this.t(title, router.getCurrentNavigation()?.extras.state));\n\n this.effectRef = runInInjectionContext(this.injector, () =>\n effect(() => this.title.setTitle(translation()), { manualCleanup: true })\n );\n }\n}\n\n/**\n * Enables translation of title param in route definition with use of prepared {@link TitleStrategy}\n * Automatically translates `title` param form route definition, sets website title and updates on language changes\n * Also it is possible to use parameters from `navigation.extras.state`\n *\n * @example\n * ```typescript\n * // src/app/app.routes.ts\n * export const routes = [\n * { path: 'base', title: 'base', children: [\n * { path: 'child', title: 'child' },\n * ],\n * { path: 'aux', outlet: 'popup', title: 'popupTitle' }\n * ];\n *\n * // src/app/transignal.ts\n * export const transignal = prepareTransignal(<config>, withTranslatedTitle('global'));\n *\n * // src/app/i18n/global/en.ts\n * export default {\n * title: {\n * base: 'Base title',\n * child: 'Child title'\n * popupTitle: 'Popup title'\n * }\n * };\n * ```\n *\n * @param scope scope under which there are title translations\n * @param translationKey translation key under which there are translations, `title` by default\n */\nexport const withTranslatedTitle = <\n Languages extends string,\n Translations extends Record<string, Record<string, unknown>>,\n>(\n scope: StringKeys<Translations>,\n translationKey = 'title'\n): TransignalFeature<Languages, Translations> => {\n return {\n providers: [\n makeEnvironmentProviders([\n {\n provide: TitleStrategy,\n useFactory: (service = inject(TransignalService)) =>\n new TransignalTitleStrategy(service.t(scope).prefix(translationKey)),\n },\n ]),\n ],\n };\n};","// @ts-nocheck\n// This file is auto-generated during init process. Do not modify.\n// This disable this auto generate file.\n// set property \"shouldGenerateAutogenIndexFile: false\" \n// in taon.jsonc of your project. \nexport * from './build-info._auto-generated_'; \nexport * from './internals'; \nexport * from './start-cli'; \nexport * from './transignal-config'; \nexport * from './transignal-param-handlers'; \nexport * from './transignal-service'; \nexport * from './transignal-testing'; \nexport * from './types'; \nexport * from './utility-types'; \nexport * from './utils'; \nexport * from './features/types'; \nexport * from './features/withLanguageLocalStorageSync'; \nexport * from './features/withNavigatorLanguage'; \nexport * from './features/withPreloadScopes'; \nexport * from './features/withServerSideLanguage'; \nexport * from './features/withTranslatedTitle'; ","export * from './index._auto-generated_';\nexport * from './start-cli';\nexport default {};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "i18n/websql",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"peerDependencies": {
|
|
5
|
+
"@angular/common": "^21.0.0",
|
|
6
|
+
"@angular/core": "^21.0.0"
|
|
7
|
+
},
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"tslib": "^2.3.0"
|
|
10
|
+
},
|
|
11
|
+
"sideEffects": false,
|
|
12
|
+
"module": "fesm2022/i18n-websql.mjs",
|
|
13
|
+
"typings": "types/i18n-websql.d.ts",
|
|
14
|
+
"exports": {
|
|
15
|
+
"./package.json": {
|
|
16
|
+
"default": "./package.json"
|
|
17
|
+
},
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./types/i18n-websql.d.ts",
|
|
20
|
+
"default": "./fesm2022/i18n-websql.mjs"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|