@taon-dev/i18n 0.0.1 → 21.0.7

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 (279) hide show
  1. package/VERIFIED-BUILD-DATA.jsonc +3 -3
  2. package/bin/start.js +1 -1
  3. package/browser/fesm2022/i18n-browser.mjs +1441 -406
  4. package/browser/fesm2022/i18n-browser.mjs.map +1 -1
  5. package/browser/package.json +1 -1
  6. package/browser/types/i18n-browser.d.ts +146 -305
  7. package/browser-prod/fesm2022/i18n-browser-prod.mjs +1429 -405
  8. package/browser-prod/fesm2022/i18n-browser-prod.mjs.map +1 -1
  9. package/browser-prod/package.json +1 -1
  10. package/browser-prod/types/i18n-browser-prod.d.ts +140 -305
  11. package/browser-prod.split-namespaces.json +26 -2
  12. package/html/app/main-page/main-page.container.html +4 -0
  13. package/html/assets/generated/pwa/html-pwa.html +53 -53
  14. package/lib/build-info._auto-generated_.d.ts +1 -1
  15. package/lib/build-info._auto-generated_.js +1 -1
  16. package/lib/build-info._auto-generated_.js.map +1 -1
  17. package/lib/index._auto-generated_.d.ts +9 -14
  18. package/lib/index._auto-generated_.js +9 -14
  19. package/lib/index._auto-generated_.js.map +1 -1
  20. package/lib/package.json +1 -1
  21. package/lib/start-cli.js +6 -4
  22. package/lib/start-cli.js.map +1 -1
  23. package/lib/translate.directive.d.ts +15 -0
  24. package/lib/translate.pipe.d.ts +10 -0
  25. package/lib/translate.service.d.ts +13 -0
  26. package/lib/translation-manager.d.ts +33 -0
  27. package/lib/translation-manager.js +119 -0
  28. package/lib/translation-manager.js.map +1 -0
  29. package/lib/translation.d.ts +44 -0
  30. package/lib/translation.js +253 -0
  31. package/lib/translation.js.map +1 -0
  32. package/lib/translation.models.d.ts +25 -0
  33. package/lib/{features/types.js → translation.models.js} +1 -1
  34. package/lib/translation.models.js.map +1 -0
  35. package/lib/utils-i18n-extract-gettext-translate-from-html.d.ts +4 -0
  36. package/lib/utils-i18n-extract-gettext-translate-from-html.js +465 -0
  37. package/lib/utils-i18n-extract-gettext-translate-from-html.js.map +1 -0
  38. package/lib/utils-i18n-extract-gettext-translate-from-html.test.d.ts +1 -0
  39. package/lib/utils-i18n-extract-gettext-translate-from-html.test.js +282 -0
  40. package/lib/utils-i18n-extract-gettext-translate-from-html.test.js.map +1 -0
  41. package/lib/utils-i18n-html.d.ts +5 -0
  42. package/lib/utils-i18n-html.js +120 -0
  43. package/lib/utils-i18n-html.js.map +1 -0
  44. package/lib/utils-i18n-html.test.d.ts +1 -0
  45. package/lib/utils-i18n-html.test.js +82 -0
  46. package/lib/utils-i18n-html.test.js.map +1 -0
  47. package/lib/utils-po-file.d.ts +8 -0
  48. package/lib/utils-po-file.js +245 -0
  49. package/lib/utils-po-file.js.map +1 -0
  50. package/lib/utils-po-file.test.d.ts +1 -0
  51. package/lib/utils-po-file.test.js +239 -0
  52. package/lib/utils-po-file.test.js.map +1 -0
  53. package/lib-esm/app/main-page/main-page.active.context.d.ts +19 -0
  54. package/lib-esm/app/main-page/main-page.active.context.js +19 -0
  55. package/lib-esm/app/main-page/main-page.active.context.js.map +1 -0
  56. package/lib-esm/app.electron.d.ts +1 -1
  57. package/lib-esm/app.electron.js +1 -1
  58. package/lib-esm/app.hosts.d.ts +54 -2
  59. package/lib-esm/app.hosts.js +64 -4
  60. package/lib-esm/app.hosts.js.map +1 -1
  61. package/lib-esm/app.js +9 -9
  62. package/lib-esm/app.js.map +1 -1
  63. package/lib-esm/lib/build-info._auto-generated_.d.ts +1 -1
  64. package/lib-esm/lib/build-info._auto-generated_.js +1 -1
  65. package/lib-esm/lib/build-info._auto-generated_.js.map +1 -1
  66. package/lib-esm/lib/index._auto-generated_.d.ts +6 -14
  67. package/lib-esm/lib/index._auto-generated_.js +9 -14
  68. package/lib-esm/lib/index._auto-generated_.js.map +1 -1
  69. package/lib-esm/lib/start-cli.js +6 -4
  70. package/lib-esm/lib/start-cli.js.map +1 -1
  71. package/lib-esm/lib/translation-manager.d.ts +33 -0
  72. package/lib-esm/lib/translation-manager.js +115 -0
  73. package/lib-esm/lib/translation-manager.js.map +1 -0
  74. package/lib-esm/lib/translation.d.ts +43 -0
  75. package/lib-esm/lib/translation.js +249 -0
  76. package/lib-esm/lib/translation.js.map +1 -0
  77. package/lib-esm/lib/translation.models.d.ts +25 -0
  78. package/lib-esm/lib/translation.models.js +2 -0
  79. package/lib-esm/lib/translation.models.js.map +1 -0
  80. package/lib-esm/lib/utils-i18n-extract-gettext-translate-from-html.d.ts +4 -0
  81. package/lib-esm/lib/utils-i18n-extract-gettext-translate-from-html.js +462 -0
  82. package/lib-esm/lib/utils-i18n-extract-gettext-translate-from-html.js.map +1 -0
  83. package/lib-esm/lib/utils-i18n-extract-gettext-translate-from-html.test.d.ts +1 -0
  84. package/lib-esm/lib/utils-i18n-extract-gettext-translate-from-html.test.js +280 -0
  85. package/lib-esm/lib/utils-i18n-extract-gettext-translate-from-html.test.js.map +1 -0
  86. package/lib-esm/lib/utils-i18n-html.d.ts +5 -0
  87. package/lib-esm/lib/utils-i18n-html.js +117 -0
  88. package/lib-esm/lib/utils-i18n-html.js.map +1 -0
  89. package/lib-esm/lib/utils-i18n-html.test.d.ts +1 -0
  90. package/lib-esm/lib/utils-i18n-html.test.js +80 -0
  91. package/lib-esm/lib/utils-i18n-html.test.js.map +1 -0
  92. package/lib-esm/lib/utils-po-file.d.ts +8 -0
  93. package/lib-esm/lib/utils-po-file.js +242 -0
  94. package/lib-esm/lib/utils-po-file.js.map +1 -0
  95. package/lib-esm/lib/utils-po-file.test.d.ts +1 -0
  96. package/lib-esm/lib/utils-po-file.test.js +237 -0
  97. package/lib-esm/lib/utils-po-file.test.js.map +1 -0
  98. package/lib-prod/build-info._auto-generated_.d.ts +1 -1
  99. package/lib-prod/build-info._auto-generated_.js +1 -1
  100. package/lib-prod/build-info._auto-generated_.js.map +1 -1
  101. package/lib-prod/index._auto-generated_.d.ts +6 -14
  102. package/lib-prod/index._auto-generated_.js +9 -14
  103. package/lib-prod/index._auto-generated_.js.map +1 -1
  104. package/lib-prod/package.json +1 -1
  105. package/lib-prod/start-cli.js +6 -4
  106. package/lib-prod/start-cli.js.map +1 -1
  107. package/lib-prod/translation-manager.d.ts +33 -0
  108. package/lib-prod/translation-manager.js +115 -0
  109. package/lib-prod/translation-manager.js.map +1 -0
  110. package/lib-prod/translation.d.ts +43 -0
  111. package/lib-prod/translation.js +249 -0
  112. package/lib-prod/translation.js.map +1 -0
  113. package/lib-prod/translation.models.d.ts +25 -0
  114. package/lib-prod/translation.models.js +2 -0
  115. package/lib-prod/translation.models.js.map +1 -0
  116. package/lib-prod/utils-i18n-extract-gettext-translate-from-html.d.ts +2 -0
  117. package/lib-prod/utils-i18n-extract-gettext-translate-from-html.js +460 -0
  118. package/lib-prod/utils-i18n-extract-gettext-translate-from-html.js.map +1 -0
  119. package/lib-prod/utils-i18n-extract-gettext-translate-from-html.test.d.ts +1 -0
  120. package/lib-prod/utils-i18n-extract-gettext-translate-from-html.test.js +280 -0
  121. package/lib-prod/utils-i18n-extract-gettext-translate-from-html.test.js.map +1 -0
  122. package/lib-prod/utils-i18n-html.d.ts +3 -0
  123. package/lib-prod/utils-i18n-html.js +114 -0
  124. package/lib-prod/utils-i18n-html.js.map +1 -0
  125. package/lib-prod/utils-i18n-html.test.d.ts +1 -0
  126. package/lib-prod/utils-i18n-html.test.js +80 -0
  127. package/lib-prod/utils-i18n-html.test.js.map +1 -0
  128. package/lib-prod/utils-po-file.d.ts +6 -0
  129. package/lib-prod/utils-po-file.js +236 -0
  130. package/lib-prod/utils-po-file.js.map +1 -0
  131. package/lib-prod/utils-po-file.test.d.ts +1 -0
  132. package/lib-prod/utils-po-file.test.js +237 -0
  133. package/lib-prod/utils-po-file.test.js.map +1 -0
  134. package/lib-prod.split-namespaces.json +26 -2
  135. package/package.json +4 -2
  136. package/scss/app/main-page/main-page.container.scss +3 -0
  137. package/websql/fesm2022/i18n-websql.mjs +1441 -406
  138. package/websql/fesm2022/i18n-websql.mjs.map +1 -1
  139. package/websql/package.json +1 -1
  140. package/websql/types/i18n-websql.d.ts +146 -305
  141. package/websql-prod/fesm2022/i18n-websql-prod.mjs +1429 -405
  142. package/websql-prod/fesm2022/i18n-websql-prod.mjs.map +1 -1
  143. package/websql-prod/package.json +1 -1
  144. package/websql-prod/types/i18n-websql-prod.d.ts +140 -305
  145. package/websql-prod.split-namespaces.json +26 -2
  146. package/lib/features/index.d.ts +0 -4
  147. package/lib/features/index.js +0 -21
  148. package/lib/features/index.js.map +0 -1
  149. package/lib/features/types.d.ts +0 -4
  150. package/lib/features/types.js.map +0 -1
  151. package/lib/features/withLanguageLocalStorageSync.d.ts +0 -9
  152. package/lib/features/withLanguageLocalStorageSync.js +0 -39
  153. package/lib/features/withLanguageLocalStorageSync.js.map +0 -1
  154. package/lib/features/withNavigatorLanguage.d.ts +0 -6
  155. package/lib/features/withNavigatorLanguage.js +0 -29
  156. package/lib/features/withNavigatorLanguage.js.map +0 -1
  157. package/lib/features/withPreloadScopes.d.ts +0 -8
  158. package/lib/features/withPreloadScopes.js +0 -25
  159. package/lib/features/withPreloadScopes.js.map +0 -1
  160. package/lib/features/withServerSideLanguage.d.ts +0 -6
  161. package/lib/features/withServerSideLanguage.js +0 -29
  162. package/lib/features/withServerSideLanguage.js.map +0 -1
  163. package/lib/features/withTranslatedTitle.d.ts +0 -34
  164. package/lib/features/withTranslatedTitle.js +0 -69
  165. package/lib/features/withTranslatedTitle.js.map +0 -1
  166. package/lib/internals.d.ts +0 -2
  167. package/lib/internals.js +0 -6
  168. package/lib/internals.js.map +0 -1
  169. package/lib/transignal-config.d.ts +0 -34
  170. package/lib/transignal-config.js +0 -42
  171. package/lib/transignal-config.js.map +0 -1
  172. package/lib/transignal-param-handlers.d.ts +0 -11
  173. package/lib/transignal-param-handlers.js +0 -31
  174. package/lib/transignal-param-handlers.js.map +0 -1
  175. package/lib/transignal-service.d.ts +0 -32
  176. package/lib/transignal-service.js +0 -206
  177. package/lib/transignal-service.js.map +0 -1
  178. package/lib/transignal-testing.d.ts +0 -8
  179. package/lib/transignal-testing.js +0 -14
  180. package/lib/transignal-testing.js.map +0 -1
  181. package/lib/types.d.ts +0 -124
  182. package/lib/types.js +0 -3
  183. package/lib/types.js.map +0 -1
  184. package/lib/utility-types.d.ts +0 -29
  185. package/lib/utility-types.js +0 -3
  186. package/lib/utility-types.js.map +0 -1
  187. package/lib/utils.d.ts +0 -15
  188. package/lib/utils.js +0 -20
  189. package/lib/utils.js.map +0 -1
  190. package/lib-esm/lib/features/index.d.ts +0 -4
  191. package/lib-esm/lib/features/index.js +0 -5
  192. package/lib-esm/lib/features/index.js.map +0 -1
  193. package/lib-esm/lib/features/types.d.ts +0 -4
  194. package/lib-esm/lib/features/types.js +0 -2
  195. package/lib-esm/lib/features/types.js.map +0 -1
  196. package/lib-esm/lib/features/withLanguageLocalStorageSync.d.ts +0 -9
  197. package/lib-esm/lib/features/withLanguageLocalStorageSync.js +0 -35
  198. package/lib-esm/lib/features/withLanguageLocalStorageSync.js.map +0 -1
  199. package/lib-esm/lib/features/withNavigatorLanguage.d.ts +0 -6
  200. package/lib-esm/lib/features/withNavigatorLanguage.js +0 -25
  201. package/lib-esm/lib/features/withNavigatorLanguage.js.map +0 -1
  202. package/lib-esm/lib/features/withPreloadScopes.d.ts +0 -8
  203. package/lib-esm/lib/features/withPreloadScopes.js +0 -21
  204. package/lib-esm/lib/features/withPreloadScopes.js.map +0 -1
  205. package/lib-esm/lib/features/withServerSideLanguage.d.ts +0 -6
  206. package/lib-esm/lib/features/withServerSideLanguage.js +0 -25
  207. package/lib-esm/lib/features/withServerSideLanguage.js.map +0 -1
  208. package/lib-esm/lib/features/withTranslatedTitle.d.ts +0 -34
  209. package/lib-esm/lib/features/withTranslatedTitle.js +0 -65
  210. package/lib-esm/lib/features/withTranslatedTitle.js.map +0 -1
  211. package/lib-esm/lib/internals.d.ts +0 -2
  212. package/lib-esm/lib/internals.js +0 -3
  213. package/lib-esm/lib/internals.js.map +0 -1
  214. package/lib-esm/lib/transignal-config.d.ts +0 -34
  215. package/lib-esm/lib/transignal-config.js +0 -36
  216. package/lib-esm/lib/transignal-config.js.map +0 -1
  217. package/lib-esm/lib/transignal-param-handlers.d.ts +0 -11
  218. package/lib-esm/lib/transignal-param-handlers.js +0 -25
  219. package/lib-esm/lib/transignal-param-handlers.js.map +0 -1
  220. package/lib-esm/lib/transignal-service.d.ts +0 -32
  221. package/lib-esm/lib/transignal-service.js +0 -197
  222. package/lib-esm/lib/transignal-service.js.map +0 -1
  223. package/lib-esm/lib/transignal-testing.d.ts +0 -8
  224. package/lib-esm/lib/transignal-testing.js +0 -10
  225. package/lib-esm/lib/transignal-testing.js.map +0 -1
  226. package/lib-esm/lib/types.d.ts +0 -124
  227. package/lib-esm/lib/types.js +0 -2
  228. package/lib-esm/lib/types.js.map +0 -1
  229. package/lib-esm/lib/utility-types.d.ts +0 -29
  230. package/lib-esm/lib/utility-types.js +0 -2
  231. package/lib-esm/lib/utility-types.js.map +0 -1
  232. package/lib-esm/lib/utils.d.ts +0 -15
  233. package/lib-esm/lib/utils.js +0 -15
  234. package/lib-esm/lib/utils.js.map +0 -1
  235. package/lib-prod/features/index.d.ts +0 -4
  236. package/lib-prod/features/index.js +0 -5
  237. package/lib-prod/features/index.js.map +0 -1
  238. package/lib-prod/features/types.d.ts +0 -4
  239. package/lib-prod/features/types.js +0 -2
  240. package/lib-prod/features/types.js.map +0 -1
  241. package/lib-prod/features/withLanguageLocalStorageSync.d.ts +0 -9
  242. package/lib-prod/features/withLanguageLocalStorageSync.js +0 -35
  243. package/lib-prod/features/withLanguageLocalStorageSync.js.map +0 -1
  244. package/lib-prod/features/withNavigatorLanguage.d.ts +0 -6
  245. package/lib-prod/features/withNavigatorLanguage.js +0 -25
  246. package/lib-prod/features/withNavigatorLanguage.js.map +0 -1
  247. package/lib-prod/features/withPreloadScopes.d.ts +0 -8
  248. package/lib-prod/features/withPreloadScopes.js +0 -21
  249. package/lib-prod/features/withPreloadScopes.js.map +0 -1
  250. package/lib-prod/features/withServerSideLanguage.d.ts +0 -6
  251. package/lib-prod/features/withServerSideLanguage.js +0 -25
  252. package/lib-prod/features/withServerSideLanguage.js.map +0 -1
  253. package/lib-prod/features/withTranslatedTitle.d.ts +0 -34
  254. package/lib-prod/features/withTranslatedTitle.js +0 -65
  255. package/lib-prod/features/withTranslatedTitle.js.map +0 -1
  256. package/lib-prod/internals.d.ts +0 -2
  257. package/lib-prod/internals.js +0 -3
  258. package/lib-prod/internals.js.map +0 -1
  259. package/lib-prod/transignal-config.d.ts +0 -34
  260. package/lib-prod/transignal-config.js +0 -36
  261. package/lib-prod/transignal-config.js.map +0 -1
  262. package/lib-prod/transignal-param-handlers.d.ts +0 -11
  263. package/lib-prod/transignal-param-handlers.js +0 -25
  264. package/lib-prod/transignal-param-handlers.js.map +0 -1
  265. package/lib-prod/transignal-service.d.ts +0 -32
  266. package/lib-prod/transignal-service.js +0 -197
  267. package/lib-prod/transignal-service.js.map +0 -1
  268. package/lib-prod/transignal-testing.d.ts +0 -8
  269. package/lib-prod/transignal-testing.js +0 -10
  270. package/lib-prod/transignal-testing.js.map +0 -1
  271. package/lib-prod/types.d.ts +0 -124
  272. package/lib-prod/types.js +0 -2
  273. package/lib-prod/types.js.map +0 -1
  274. package/lib-prod/utility-types.d.ts +0 -29
  275. package/lib-prod/utility-types.js +0 -2
  276. package/lib-prod/utility-types.js.map +0 -1
  277. package/lib-prod/utils.d.ts +0 -15
  278. package/lib-prod/utils.js +0 -15
  279. package/lib-prod/utils.js.map +0 -1
@@ -0,0 +1,280 @@
1
+ import { UtilsI18nHtml__NS__extractGettextTranslateFromHtml } from './utils-i18n-html';
2
+ describe('UtilsI18nHtml.extractFromHtml', () => {
3
+ it('extracts element with translate attribute', () => {
4
+ const html = `
5
+ <span translate>
6
+ You have errors in this form. Please click 'Edit incorrect data' to jump to the section and input correct data.
7
+ </span>
8
+ `;
9
+ expect(UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html)).toEqual([
10
+ {
11
+ lineNumber: 2,
12
+ gettextString: "You have errors in this form. Please click 'Edit incorrect data' to jump to the section and input correct data.",
13
+ // params: null,
14
+ context: undefined,
15
+ },
16
+ ]);
17
+ });
18
+ it('extracts translate attribute with translate params', () => {
19
+ const html = `
20
+ <p
21
+ *ngSwitchDefault
22
+ translate
23
+ [translate-params]="{
24
+ size: dialogData.applicationsOidsToRemove.length
25
+ }"
26
+ >
27
+ Do you want to remove [[ size ]] applications?
28
+ </p>
29
+ `;
30
+ expect(UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html)).toEqual([
31
+ {
32
+ lineNumber: 2,
33
+ gettextString: 'Do you want to remove [[ size ]] applications?',
34
+ // params: {
35
+ // size: 'dialogData.applicationsOidsToRemove.length',
36
+ // },
37
+ context: undefined,
38
+ },
39
+ ]);
40
+ });
41
+ it('extracts static strings from conditional translate pipe', () => {
42
+ const html = `
43
+ <span>{{ row.cutOffAtDaymax ? 'Yes' : 'No' | translate }}</span>
44
+ `;
45
+ expect(UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html).map(m => m.gettextString)).toEqual(['No']);
46
+ });
47
+ it('extracts both strings when translate pipe wraps conditional expression', () => {
48
+ const html = `
49
+ <span>{{ (row.cutOffAtDaymax ? 'Yes' : 'No') | translate }}</span>
50
+ `;
51
+ expect(UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html).map(m => m.gettextString)).toEqual(['Yes', 'No']);
52
+ });
53
+ it('skips variable-only translate pipe', () => {
54
+ const html = `
55
+ <input placeholder="{{ repsTextFilterPlaceholder | translate }}">
56
+ `;
57
+ expect(UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html)).toEqual([]);
58
+ });
59
+ it('extracts static string translate pipe', () => {
60
+ const html = `
61
+ <span>{{ 'something to tranlaste ' | translate }}</span>
62
+ `;
63
+ expect(UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html)).toEqual([
64
+ {
65
+ lineNumber: 2,
66
+ gettextString: 'something to tranlaste',
67
+ // params: null,
68
+ context: undefined,
69
+ },
70
+ ]);
71
+ });
72
+ });
73
+ describe('UtilsI18nHtml__NS__extractGettextTranslateFromHtml - t.gettext()', () => {
74
+ it('extracts simple t.gettext from interpolation', () => {
75
+ const html = `
76
+ <span>{{ t.gettext('translation-app works!') }}</span>
77
+ `;
78
+ expect(UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html)).toEqual([
79
+ {
80
+ lineNumber: 2,
81
+ gettextString: 'translation-app works!',
82
+ // params: null,
83
+ context: undefined,
84
+ },
85
+ ]);
86
+ });
87
+ it('extracts t.gettext with null params and context', () => {
88
+ const html = `
89
+ <span>{{ t.gettext('translation-app works!', null, 'context jakis') }}</span>
90
+ `;
91
+ expect(UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html)).toEqual([
92
+ {
93
+ lineNumber: 2,
94
+ gettextString: 'translation-app works!',
95
+ // params: null,
96
+ context: 'context jakis',
97
+ },
98
+ ]);
99
+ });
100
+ it('extracts t.gettext with params and context', () => {
101
+ const html = `
102
+ <span>{{ t.gettext('heloo [[ aa ]]!', { aa: somethingFromComponent }, 'context jakis') }}</span>
103
+ `;
104
+ expect(UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html)).toEqual([
105
+ {
106
+ lineNumber: 2,
107
+ gettextString: 'heloo [[ aa ]]!',
108
+ // params: null,
109
+ context: 'context jakis',
110
+ },
111
+ ]);
112
+ });
113
+ it('extracts multiple gettext calls from one interpolation', () => {
114
+ const html = `
115
+ <span>{{ t.gettext('Yes') + ' / ' + t.gettext('No') }}</span>
116
+ `;
117
+ expect(UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html).map(x => x.gettextString)).toEqual(['Yes', 'No']);
118
+ });
119
+ it('extracts nested property chain ending with gettext', () => {
120
+ const html = `
121
+ <span>{{ something.deep.t.gettext('Deep hello') }}</span>
122
+ `;
123
+ expect(UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html)).toEqual([
124
+ {
125
+ lineNumber: 2,
126
+ gettextString: 'Deep hello',
127
+ // params: null,
128
+ context: undefined,
129
+ },
130
+ ]);
131
+ });
132
+ it('skips dynamic gettext string', () => {
133
+ const html = `
134
+ <span>{{ t.gettext(dynamicLabel) }}</span>
135
+ `;
136
+ expect(UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html)).toEqual([]);
137
+ });
138
+ it('extracts gettext with double quotes', () => {
139
+ const html = `
140
+ <span>{{ t.gettext("Double quote text") }}</span>
141
+ `;
142
+ expect(UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html)).toEqual([
143
+ {
144
+ lineNumber: 2,
145
+ gettextString: 'Double quote text',
146
+ // params: null,
147
+ context: undefined,
148
+ },
149
+ ]);
150
+ });
151
+ it('extracts gettext with backticks without interpolation', () => {
152
+ const html = `
153
+ <span>{{ t.gettext(\`Backtick text\`) }}</span>
154
+ `;
155
+ expect(UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html)).toEqual([
156
+ {
157
+ lineNumber: 2,
158
+ gettextString: 'Backtick text',
159
+ // params: null,
160
+ context: undefined,
161
+ },
162
+ ]);
163
+ });
164
+ it('should extract select lang', () => {
165
+ const html = `<span>{{ t.gettext('Select Language') }}</span>`;
166
+ expect(UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html)).toEqual([
167
+ {
168
+ lineNumber: 1,
169
+ gettextString: 'Select Language',
170
+ // params: null,
171
+ context: undefined,
172
+ },
173
+ ]);
174
+ });
175
+ it('should extract trasnlated please wait', () => {
176
+ const html = `
177
+ <div class="p-4">
178
+ <h3 class="w-full" translate>Please wait...</h3>
179
+ <mat-progress-bar mode="indeterminate" />
180
+ </div>
181
+ `;
182
+ expect(UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html)).toEqual([
183
+ {
184
+ lineNumber: 3,
185
+ gettextString: 'Please wait...',
186
+ // params: null,
187
+ context: undefined,
188
+ },
189
+ ]);
190
+ });
191
+ it('should extract file with angular syntax', () => {
192
+ const html = `
193
+
194
+
195
+ @if (stateService.isLoadingVideos$ | async) {
196
+ <div class="p-4">
197
+ <h3 class="w-full" translate >Please wait...</h3>
198
+ <mat-progress-bar mode="indeterminate" />
199
+ </div>
200
+ }
201
+
202
+ `;
203
+ expect(UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html).length).be.above(0);
204
+ });
205
+ it('should extract file with angular block syntax', () => {
206
+ const html = `
207
+ @if (stateService.isLoadingVideos$ | async) {
208
+ <div class="p-4">
209
+ <h3 class="w-full" translate>Please wait...</h3>
210
+ <mat-progress-bar mode="indeterminate" />
211
+ </div>
212
+ }
213
+ `;
214
+ expect(UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html)).toEqual([
215
+ {
216
+ lineNumber: 4,
217
+ gettextString: 'Please wait...',
218
+ context: undefined,
219
+ },
220
+ ]);
221
+ });
222
+ it('should extract when new angula syntax', () => {
223
+ const html = `
224
+ @for (vid of section.children; track vid.productId) {
225
+ @let isLoggedIn = session.isLoggedIn$ | async;
226
+ @let isProcessing =
227
+ processingPaymentInProgressForProductId.includes(vid.parentId);
228
+ @let isAuthorized = authorizedSectionsId.includes(vid.parentId);
229
+ @let title =
230
+ isProcessing
231
+ ? t.gettext('Processing Payment. Please wait.')
232
+ : vid.productTitle;
233
+
234
+ <div class="col-span-12 p-2 md:col-span-6 lg:col-span-4">
235
+ <h4 class="mt-0 md:hidden">
236
+ {{ title }}
237
+ </h4>
238
+
239
+ <h4
240
+ class="mt-0 hidden w-full min-w-0 overflow-hidden text-ellipsis whitespace-nowrap md:block">
241
+ {{ title }}
242
+ </h4>
243
+
244
+ <taon-youtube-video
245
+ [videoId]="vid.productId"
246
+ [matTooltip]="vid.productTitle"
247
+ height="222px"
248
+ [state]="
249
+ isLoggedIn && isAuthorized
250
+ ? 'video-preview-private'
251
+ : 'preview-picture-locked'
252
+ "
253
+ (paddlockClicked)="isLoggedIn ? confirmBuy(vid) : paddlockClicked()">
254
+ </taon-youtube-video>
255
+
256
+ <br /><br />
257
+ </div>
258
+ }
259
+ `;
260
+ expect(UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html).length).to.be.above(0);
261
+ });
262
+ it('should not extract when translate inside class name', () => {
263
+ const html = `
264
+ <button
265
+ mat-icon-button
266
+ class="absolute right-4 top-1/2 z-20 -translate-y-1/2 text-white"
267
+ (click)="next()">
268
+ <mat-icon>chevron_right</mat-icon>
269
+ </button>
270
+ `;
271
+ expect(UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html).length).to.be.eq(0);
272
+ });
273
+ // it('skips gettext with template interpolation', () => {
274
+ // const html = `
275
+ // <span>{{ t.gettext(\`Hello \${name}\`) }}</span>
276
+ // `;
277
+ // expect(UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html)).toEqual([]);
278
+ // });
279
+ });
280
+ //# sourceMappingURL=utils-i18n-extract-gettext-translate-from-html.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-i18n-extract-gettext-translate-from-html.test.js","sourceRoot":"","sources":[""],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { UtilsI18n__NS__GettextExtracted } from 'tnp-core/lib-prod';
2
+ export declare function UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html: string, fileName?: string): UtilsI18n__NS__GettextExtracted[];
3
+ export declare function UtilsI18nHtml__NS__replaceTranslatePipieDirectiveTContext(html: string): string;
@@ -0,0 +1,114 @@
1
+ //#region imports
2
+ import { parseTemplate, } from '@angular/compiler';
3
+ import { UtilsI18nExtractGettextTranslateFromHtml__NS__extractGettextTranslateFromHtml } from './utils-i18n-extract-gettext-translate-from-html';
4
+ //#endregion
5
+ //namespace UtilsI18nHtml
6
+ export function UtilsI18nHtml__NS__extractGettextTranslateFromHtml(html, fileName = 'template.html') {
7
+ return UtilsI18nExtractGettextTranslateFromHtml__NS__extractGettextTranslateFromHtml(html, fileName);
8
+ }
9
+ export function UtilsI18nHtml__NS__replaceTranslatePipieDirectiveTContext(html) {
10
+ //#region @backendFunc
11
+ const edits = [];
12
+ let parsedSuccessfully = false;
13
+ try {
14
+ const parsed = parseTemplate(html, 'template.html', {
15
+ preserveWhitespaces: true,
16
+ });
17
+ parsedSuccessfully = true;
18
+ const visit = (node) => {
19
+ if (hasTranslateDirective(node) && !hasTranslateTInput(node)) {
20
+ const opening = node.startSourceSpan?.toString?.();
21
+ if (opening) {
22
+ const start = node.startSourceSpan.start.offset;
23
+ const insertAt = findOpenTagInsertPosition(html, start, opening.length);
24
+ if (insertAt !== -1) {
25
+ edits.push({
26
+ index: insertAt,
27
+ text: ` [translate-t]="t"`,
28
+ });
29
+ }
30
+ }
31
+ }
32
+ for (const child of node.children ?? []) {
33
+ visit(child);
34
+ }
35
+ };
36
+ for (const node of parsed.nodes) {
37
+ visit(node);
38
+ }
39
+ }
40
+ catch {
41
+ // fallback below
42
+ }
43
+ if (!parsedSuccessfully) {
44
+ edits.push(...findTranslateDirectiveEditsFromSource(html));
45
+ }
46
+ let result = applyEdits(html, edits);
47
+ result = result.replace(/\|\s*translate(?!\s*:)(?=[\s)}\]"';<]|$)/g, '| translate:t');
48
+ return result;
49
+ //#endregion
50
+ }
51
+ function findTranslateDirectiveEditsFromSource(html) {
52
+ //#region @backendFunc
53
+ const edits = [];
54
+ const tagRegex = /<([a-zA-Z0-9-]+)\b(?=[^>]*(?:\s|^|<)translate(?:\s|=|>|\/))[^>]*>/g;
55
+ for (const match of html.matchAll(tagRegex)) {
56
+ const tag = match[0];
57
+ const start = match.index ?? 0;
58
+ if (/\[translate-t\]\s*=/.test(tag) || /\btranslateT\b/.test(tag)) {
59
+ continue;
60
+ }
61
+ const closeIndex = tag.lastIndexOf('>');
62
+ if (closeIndex === -1)
63
+ continue;
64
+ const beforeClose = tag.slice(0, closeIndex);
65
+ const insertAt = beforeClose.trimEnd().endsWith('/')
66
+ ? start + beforeClose.lastIndexOf('/')
67
+ : start + closeIndex;
68
+ edits.push({
69
+ index: insertAt,
70
+ text: ` [translate-t]="t"`,
71
+ });
72
+ }
73
+ return edits;
74
+ //#endregion
75
+ }
76
+ function hasTranslateDirective(node) {
77
+ //#region @backendFunc
78
+ return [...(node.attributes ?? []), ...(node.templateAttrs ?? [])].some((attr) => attr.name === 'translate');
79
+ //#endregion
80
+ }
81
+ function hasTranslateTInput(node) {
82
+ //#region @backendFunc
83
+ return [
84
+ ...(node.inputs ?? []),
85
+ ...(node.templateAttrs ?? []),
86
+ ...(node.attributes ?? []),
87
+ ].some((attr) => attr.name === 'translate-t' || attr.name === 'translateT');
88
+ //#endregion
89
+ }
90
+ function findOpenTagInsertPosition(html, start, length) {
91
+ //#region @backendFunc
92
+ const end = start + length;
93
+ const openingTag = html.slice(start, end);
94
+ const closeIndex = openingTag.lastIndexOf('>');
95
+ if (closeIndex === -1)
96
+ return -1;
97
+ const beforeClose = openingTag.slice(0, closeIndex);
98
+ if (beforeClose.trimEnd().endsWith('/')) {
99
+ return start + beforeClose.lastIndexOf('/');
100
+ }
101
+ return start + closeIndex;
102
+ //#endregion
103
+ }
104
+ function applyEdits(input, edits) {
105
+ //#region @backendFunc
106
+ return [...edits]
107
+ .sort((a, b) => b.index - a.index)
108
+ .reduce((acc, edit) => {
109
+ return acc.slice(0, edit.index) + edit.text + acc.slice(edit.index);
110
+ }, input);
111
+ //#endregion
112
+ }
113
+ //end of namespace UtilsI18nHtml
114
+ //# sourceMappingURL=utils-i18n-html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-i18n-html.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,iBAAiB;AACjB,OAAO,EAOL,aAAa,GAOd,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,6EAA6E,EAAE,MAAM,kDAAkD,CAAC;AACjJ,YAAY;AAEZ,yBAAyB;AAEvB,MAAM,UAAU,kDAAkD,CAChE,IAAY,EACZ,QAAQ,GAAG,eAAe;IAE1B,OAAO,6EAA6E,CAClF,IAAI,EACJ,QAAQ,CACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yDAAyD,CAAC,IAAY;IACpF,sBAAsB;IACtB,MAAM,KAAK,GAA2C,EAAE,CAAC;IACzD,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAE/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,eAAe,EAAE;YAClD,mBAAmB,EAAE,IAAI;SAC1B,CAAC,CAAC;QAEH,kBAAkB,GAAG,IAAI,CAAC;QAE1B,MAAM,KAAK,GAAG,CAAC,IAAS,EAAQ,EAAE;YAChC,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,EAAE,CAAC;gBAEnD,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC;oBAChD,MAAM,QAAQ,GAAG,yBAAyB,CACxC,IAAI,EACJ,KAAK,EACL,OAAO,CAAC,MAAM,CACf,CAAC;oBAEF,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;wBACpB,KAAK,CAAC,IAAI,CAAC;4BACT,KAAK,EAAE,QAAQ;4BACf,IAAI,EAAE,oBAAoB;yBAC3B,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;YAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;gBACxC,KAAK,CAAC,KAAK,CAAC,CAAC;YACf,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,CAAC;QACd,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB;IACnB,CAAC;IAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,GAAG,qCAAqC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAErC,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,2CAA2C,EAC3C,eAAe,CAChB,CAAC;IAEF,OAAO,MAAM,CAAC;IACd,YAAY;AACd,CAAC;AAED,SAAS,qCAAqC,CAC5C,IAAY;IAEZ,sBAAsB;IACtB,MAAM,KAAK,GAA2C,EAAE,CAAC;IAEzD,MAAM,QAAQ,GACZ,oEAAoE,CAAC;IAEvE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;QAE/B,IAAI,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAClE,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,UAAU,KAAK,CAAC,CAAC;YAAE,SAAS;QAEhC,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;YAClD,CAAC,CAAC,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC;YACtC,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC;QAEvB,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,oBAAoB;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;IACb,YAAY;AACd,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAS;IACtC,sBAAsB;IACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CACrE,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,CACzC,CAAC;IACF,YAAY;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAS;IACnC,sBAAsB;IACtB,OAAO;QACL,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QACtB,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC;QAC7B,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;KAC3B,CAAC,IAAI,CACJ,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,CACzE,CAAC;IACF,YAAY;AACd,CAAC;AAED,SAAS,yBAAyB,CAChC,IAAY,EACZ,KAAa,EACb,MAAc;IAEd,sBAAsB;IACtB,MAAM,GAAG,GAAG,KAAK,GAAG,MAAM,CAAC;IAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE1C,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,UAAU,KAAK,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IAEjC,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAEpD,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,OAAO,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,KAAK,GAAG,UAAU,CAAC;IAC1B,YAAY;AACd,CAAC;AAED,SAAS,UAAU,CACjB,KAAa,EACb,KAA6C;IAE7C,sBAAsB;IACtB,OAAO,CAAC,GAAG,KAAK,CAAC;SACd,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACjC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACpB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,YAAY;AACd,CAAC;AAEH,gCAAgC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,80 @@
1
+ import { UtilsI18nHtml__NS__replaceTranslatePipieDirectiveTContext } from './utils-i18n-html';
2
+ describe('UtilsI18nHtml__NS__replaceTranslatePipieDirectiveTContext', () => {
3
+ it('adds translate-t to translate directive', () => {
4
+ const html = `
5
+ <p translate>
6
+ translation-app works!
7
+ </p>
8
+ `;
9
+ expect(UtilsI18nHtml__NS__replaceTranslatePipieDirectiveTContext(html)).toContain(`<p translate [translate-t]="t">`);
10
+ });
11
+ it('does not duplicate translate-t', () => {
12
+ const html = `
13
+ <p translate [translate-t]="t">
14
+ translation-app works!
15
+ </p>
16
+ `;
17
+ expect(UtilsI18nHtml__NS__replaceTranslatePipieDirectiveTContext(html)).toBe(html);
18
+ });
19
+ it('adds t to translate pipe', () => {
20
+ const html = `
21
+ {{ 'translation-app works!' | translate }}
22
+ `;
23
+ expect(UtilsI18nHtml__NS__replaceTranslatePipieDirectiveTContext(html)).toContain(`{{ 'translation-app works!' | translate:t }}`);
24
+ });
25
+ it('does not modify translate pipe with existing args', () => {
26
+ const html = `
27
+ {{ 'translation-app works!' | translate:t }}
28
+ {{ 'hello' | translate:t:{ a: 1 } }}
29
+ `;
30
+ expect(UtilsI18nHtml__NS__replaceTranslatePipieDirectiveTContext(html)).toBe(html);
31
+ });
32
+ it('handles directive and pipe together', () => {
33
+ const html = `
34
+ <code>
35
+ <p
36
+ translate>
37
+ translation-app works!
38
+ </p>
39
+ </code>
40
+ TRANSLATE PIPIE<br />
41
+ <code> {{ 'translation-app works!' | translate }} </code>
42
+ `;
43
+ const result = UtilsI18nHtml__NS__replaceTranslatePipieDirectiveTContext(html);
44
+ expect(result).toContain(`translate [translate-t]="t">`);
45
+ expect(result).toContain(`| translate:t`);
46
+ });
47
+ it('handles self closing tags', () => {
48
+ const html = `<input translate />`;
49
+ expect(UtilsI18nHtml__NS__replaceTranslatePipieDirectiveTContext(html)).toBe(`<input translate [translate-t]="t"/>`);
50
+ });
51
+ it('Should handle angular stuff', () => {
52
+ const html = `
53
+
54
+ <ng-template #loadingVideos>
55
+ @if (stateService.isLoadingVideos$ | async) {
56
+ <div class="p-4">
57
+ <h3
58
+ class="w-full"
59
+ translate>
60
+ Please wait...
61
+ </h3>
62
+ <mat-progress-bar mode="indeterminate" />
63
+ </div>
64
+ }
65
+ </ng-template>
66
+
67
+ `;
68
+ expect(UtilsI18nHtml__NS__replaceTranslatePipieDirectiveTContext(html)).to.includes(`[translate-t]="t"`);
69
+ });
70
+ it('Should not replace when in class', () => {
71
+ const html = ` <button
72
+ mat-icon-button
73
+ class="absolute right-4 top-1/2 z-20 -translate-y-1/2 text-white"
74
+ (click)="next()">
75
+ <mat-icon>chevron_right</mat-icon>
76
+ </button>`;
77
+ expect(UtilsI18nHtml__NS__replaceTranslatePipieDirectiveTContext(html)).to.be.eq(html);
78
+ });
79
+ });
80
+ //# sourceMappingURL=utils-i18n-html.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-i18n-html.test.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,OAAO,EAAsD,yDAAyD,EAAE,MAAM,mBAAmB,CAAC;AAElJ,QAAQ,CAAC,2DAA2D,EAAE,GAAG,EAAE;IACzE,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,IAAI,GAAG;;;;CAIhB,CAAC;QAEE,MAAM,CACJ,yDAAyD,CAAC,IAAI,CAAC,CAChE,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,IAAI,GAAG;;;;CAIhB,CAAC;QAEE,MAAM,CAAC,yDAAyD,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC1E,IAAI,CACL,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,IAAI,GAAG;;CAEhB,CAAC;QAEE,MAAM,CACJ,yDAAyD,CAAC,IAAI,CAAC,CAChE,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,IAAI,GAAG;;;CAGhB,CAAC;QAEE,MAAM,CAAC,yDAAyD,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC1E,IAAI,CACL,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,IAAI,GAAG;;;;;;;;;CAShB,CAAC;QAEE,MAAM,MAAM,GAAG,yDAAyD,CAAC,IAAI,CAAC,CAAC;QAE/E,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,IAAI,GAAG,qBAAqB,CAAC;QAEnC,MAAM,CAAC,yDAAyD,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC1E,uCAAuC,CACxC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;KAeZ,CAAC;QAEF,MAAM,CACJ,yDAAyD,CAAC,IAAI,CAAC,CAChE,CAAC,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,IAAI,GAAG;;;;;YAKL,CAAC;QAET,MAAM,CAAC,yDAAyD,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAC9E,IAAI,CACL,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { UtilsI18n__NS__CommonLocaleCode, UtilsI18n__NS__GettextFile } from 'tnp-core/lib-prod';
2
+ export declare function UtilsPoFile__NS__generatePoFiles(files: UtilsI18n__NS__GettextFile[], locales: UtilsI18n__NS__CommonLocaleCode[], destinationAbsFolderPath: string): void;
3
+ export declare function UtilsPoFile__NS__generatePoFileContent(files: UtilsI18n__NS__GettextFile[], locale: UtilsI18n__NS__CommonLocaleCode): string;
4
+ export declare function UtilsPoFile__NS__extractPoToJson(poFileContent: string): UtilsI18n__NS__GettextFile[];
5
+ export declare function UtilsPoFile__NS__generateTranslationOverrideInterface(file: UtilsI18n__NS__GettextFile, interfaceName: string, locale: UtilsI18n__NS__CommonLocaleCode): string;
6
+ export declare function UtilsPoFile__NS__mergeGettextFile(jsonContent1FromTsHtml: UtilsI18n__NS__GettextFile, json2ContentFromPoFileModifedByUser?: UtilsI18n__NS__GettextFile | null): UtilsI18n__NS__GettextFile;