ngwr 13.0.1 → 14.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/README.md +69 -13
- package/aurora/aurora.scss +1 -1
- package/aurora/styles/_dark.scss +21 -0
- package/aurora/styles/_index.scss +11 -30
- package/aurora/styles/_rules.scss +25 -0
- package/border-glow/styles/_dark.scss +46 -0
- package/border-glow/styles/_index.scss +5 -0
- package/border-glow/styles/_rules.scss +0 -31
- package/button/styles/_index.scss +16 -0
- package/color-picker/styles/_index.scss +43 -5
- package/event-calendar/styles/_index.scss +15 -0
- package/fesm2022/ngwr-action-sheet.mjs +3 -3
- package/fesm2022/ngwr-affix.mjs +3 -3
- package/fesm2022/ngwr-alert.mjs +7 -7
- package/fesm2022/ngwr-alert.mjs.map +1 -1
- package/fesm2022/ngwr-anchor.mjs +3 -3
- package/fesm2022/ngwr-aurora.mjs +4 -4
- package/fesm2022/ngwr-aurora.mjs.map +1 -1
- package/fesm2022/ngwr-avatar.mjs +3 -3
- package/fesm2022/ngwr-back-top.mjs +14 -4
- package/fesm2022/ngwr-back-top.mjs.map +1 -1
- package/fesm2022/ngwr-badge.mjs +6 -6
- package/fesm2022/ngwr-bar-chart.mjs +3 -3
- package/fesm2022/ngwr-blur-text.mjs +16 -5
- package/fesm2022/ngwr-blur-text.mjs.map +1 -1
- package/fesm2022/ngwr-border-glow.mjs +4 -4
- package/fesm2022/ngwr-border-glow.mjs.map +1 -1
- package/fesm2022/ngwr-breadcrumbs.mjs +7 -7
- package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
- package/fesm2022/ngwr-burger.mjs +3 -3
- package/fesm2022/ngwr-button.mjs +88 -10
- package/fesm2022/ngwr-button.mjs.map +1 -1
- package/fesm2022/ngwr-calendar-heatmap.mjs +3 -3
- package/fesm2022/ngwr-calendar-testing.mjs +15 -0
- package/fesm2022/ngwr-calendar-testing.mjs.map +1 -1
- package/fesm2022/ngwr-calendar.mjs +53 -7
- package/fesm2022/ngwr-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-card.mjs +9 -9
- package/fesm2022/ngwr-carousel.mjs +6 -6
- package/fesm2022/ngwr-cascader.mjs +4 -4
- package/fesm2022/ngwr-cascader.mjs.map +1 -1
- package/fesm2022/ngwr-checkbox.mjs +6 -6
- package/fesm2022/ngwr-circular-text.mjs +23 -4
- package/fesm2022/ngwr-circular-text.mjs.map +1 -1
- package/fesm2022/ngwr-click-spark.mjs +3 -3
- package/fesm2022/ngwr-clipboard.mjs +3 -3
- package/fesm2022/ngwr-collapse.mjs +9 -9
- package/fesm2022/ngwr-collapse.mjs.map +1 -1
- package/fesm2022/ngwr-color-picker-testing.mjs +23 -7
- package/fesm2022/ngwr-color-picker-testing.mjs.map +1 -1
- package/fesm2022/ngwr-color-picker.mjs +93 -14
- package/fesm2022/ngwr-color-picker.mjs.map +1 -1
- package/fesm2022/ngwr-command-palette.mjs +29 -5
- package/fesm2022/ngwr-command-palette.mjs.map +1 -1
- package/fesm2022/ngwr-compare.mjs +3 -3
- package/fesm2022/ngwr-confetti.mjs +3 -3
- package/fesm2022/ngwr-context-menu.mjs +18 -12
- package/fesm2022/ngwr-context-menu.mjs.map +1 -1
- package/fesm2022/ngwr-cookie.mjs +3 -3
- package/fesm2022/ngwr-counter.mjs +6 -6
- package/fesm2022/ngwr-date-adapters-fns.mjs +104 -36
- package/fesm2022/ngwr-date-adapters-fns.mjs.map +1 -1
- package/fesm2022/ngwr-date-adapters-luxon.mjs +3 -3
- package/fesm2022/ngwr-date-picker-testing.mjs +10 -2
- package/fesm2022/ngwr-date-picker-testing.mjs.map +1 -1
- package/fesm2022/ngwr-date-picker.mjs +118 -28
- package/fesm2022/ngwr-date-picker.mjs.map +1 -1
- package/fesm2022/ngwr-date.mjs +483 -82
- package/fesm2022/ngwr-date.mjs.map +1 -1
- package/fesm2022/ngwr-decrypt-text.mjs +3 -3
- package/fesm2022/ngwr-density.mjs +6 -6
- package/fesm2022/ngwr-descriptions.mjs +6 -6
- package/fesm2022/ngwr-dialog.mjs +15 -15
- package/fesm2022/ngwr-directives.mjs +12 -12
- package/fesm2022/ngwr-divider.mjs +3 -3
- package/fesm2022/ngwr-donut-chart.mjs +3 -3
- package/fesm2022/ngwr-drag-drop.mjs +37 -9
- package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
- package/fesm2022/ngwr-drawer.mjs +18 -18
- package/fesm2022/ngwr-dropdown.mjs +29 -12
- package/fesm2022/ngwr-dropdown.mjs.map +1 -1
- package/fesm2022/ngwr-empty.mjs +3 -3
- package/fesm2022/ngwr-event-calendar-testing.mjs.map +1 -1
- package/fesm2022/ngwr-event-calendar.mjs +6 -6
- package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-falling-text.mjs +3 -3
- package/fesm2022/ngwr-file-upload.mjs +55 -15
- package/fesm2022/ngwr-file-upload.mjs.map +1 -1
- package/fesm2022/ngwr-form-testing.mjs +13 -7
- package/fesm2022/ngwr-form-testing.mjs.map +1 -1
- package/fesm2022/ngwr-form.mjs +44 -25
- package/fesm2022/ngwr-form.mjs.map +1 -1
- package/fesm2022/ngwr-fuzzy-text.mjs +3 -3
- package/fesm2022/ngwr-gauge.mjs +3 -3
- package/fesm2022/ngwr-glitch-text.mjs +3 -3
- package/fesm2022/ngwr-gradient-text.mjs +3 -3
- package/fesm2022/ngwr-hotkey.mjs +6 -6
- package/fesm2022/ngwr-i18n-en.mjs +63 -1
- package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ru.mjs +28 -1
- package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
- package/fesm2022/ngwr-i18n.mjs +159 -31
- package/fesm2022/ngwr-i18n.mjs.map +1 -1
- package/fesm2022/ngwr-icon.mjs +6 -6
- package/fesm2022/ngwr-image-cropper.mjs +3 -3
- package/fesm2022/ngwr-input-number.mjs +5 -5
- package/fesm2022/ngwr-input-number.mjs.map +1 -1
- package/fesm2022/ngwr-input-otp.mjs +23 -5
- package/fesm2022/ngwr-input-otp.mjs.map +1 -1
- package/fesm2022/ngwr-input.mjs +37 -26
- package/fesm2022/ngwr-input.mjs.map +1 -1
- package/fesm2022/ngwr-keyboard.mjs +3 -3
- package/fesm2022/ngwr-knob-testing.mjs.map +1 -1
- package/fesm2022/ngwr-knob.mjs +22 -4
- package/fesm2022/ngwr-knob.mjs.map +1 -1
- package/fesm2022/ngwr-layout.mjs +15 -15
- package/fesm2022/ngwr-lightbox.mjs +4 -4
- package/fesm2022/ngwr-lightbox.mjs.map +1 -1
- package/fesm2022/ngwr-line-chart.mjs +3 -3
- package/fesm2022/ngwr-list.mjs +7 -7
- package/fesm2022/ngwr-list.mjs.map +1 -1
- package/fesm2022/ngwr-loading-bar-router.mjs +73 -0
- package/fesm2022/ngwr-loading-bar-router.mjs.map +1 -0
- package/fesm2022/ngwr-loading-bar.mjs +27 -38
- package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
- package/fesm2022/ngwr-markdown.mjs +6 -6
- package/fesm2022/ngwr-marquee.mjs +3 -3
- package/fesm2022/ngwr-media.mjs +3 -3
- package/fesm2022/ngwr-mention.mjs +109 -19
- package/fesm2022/ngwr-mention.mjs.map +1 -1
- package/fesm2022/ngwr-meta.mjs +6 -6
- package/fesm2022/ngwr-meter-group.mjs +3 -3
- package/fesm2022/ngwr-overlay.mjs +6 -6
- package/fesm2022/ngwr-page-header.mjs +3 -3
- package/fesm2022/ngwr-pagination-testing.mjs +11 -10
- package/fesm2022/ngwr-pagination-testing.mjs.map +1 -1
- package/fesm2022/ngwr-pagination.mjs +67 -32
- package/fesm2022/ngwr-pagination.mjs.map +1 -1
- package/fesm2022/ngwr-pipes.mjs +21 -21
- package/fesm2022/ngwr-platform.mjs +9 -9
- package/fesm2022/ngwr-popconfirm.mjs +7 -6
- package/fesm2022/ngwr-popconfirm.mjs.map +1 -1
- package/fesm2022/ngwr-popover.mjs +7 -6
- package/fesm2022/ngwr-popover.mjs.map +1 -1
- package/fesm2022/ngwr-progress.mjs +3 -3
- package/fesm2022/ngwr-pull-to-refresh.mjs +3 -3
- package/fesm2022/ngwr-qr.mjs +3 -3
- package/fesm2022/ngwr-radio.mjs +6 -6
- package/fesm2022/ngwr-rating.mjs +48 -22
- package/fesm2022/ngwr-rating.mjs.map +1 -1
- package/fesm2022/ngwr-result.mjs +12 -12
- package/fesm2022/ngwr-rotating-text.mjs +3 -3
- package/fesm2022/ngwr-scroll.mjs +3 -3
- package/fesm2022/ngwr-segmented.mjs +12 -8
- package/fesm2022/ngwr-segmented.mjs.map +1 -1
- package/fesm2022/ngwr-select.mjs +217 -59
- package/fesm2022/ngwr-select.mjs.map +1 -1
- package/fesm2022/ngwr-shiny-text.mjs +7 -7
- package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
- package/fesm2022/ngwr-sidebar.mjs +3 -3
- package/fesm2022/ngwr-skeleton.mjs +3 -3
- package/fesm2022/ngwr-slider.mjs +12 -8
- package/fesm2022/ngwr-slider.mjs.map +1 -1
- package/fesm2022/ngwr-sparkline.mjs +3 -3
- package/fesm2022/ngwr-speed-dial.mjs +3 -3
- package/fesm2022/ngwr-spinner.mjs +3 -3
- package/fesm2022/ngwr-splash-cursor.mjs +3 -3
- package/fesm2022/ngwr-split-text.mjs +3 -3
- package/fesm2022/ngwr-splitter-testing.mjs.map +1 -1
- package/fesm2022/ngwr-splitter.mjs +3 -3
- package/fesm2022/ngwr-spotlight-card.mjs +7 -7
- package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
- package/fesm2022/ngwr-squircle.mjs +7 -6
- package/fesm2022/ngwr-squircle.mjs.map +1 -1
- package/fesm2022/ngwr-star-border.mjs +4 -4
- package/fesm2022/ngwr-star-border.mjs.map +1 -1
- package/fesm2022/ngwr-statistic.mjs +44 -13
- package/fesm2022/ngwr-statistic.mjs.map +1 -1
- package/fesm2022/ngwr-stepper.mjs +6 -6
- package/fesm2022/ngwr-storage.mjs +11 -3
- package/fesm2022/ngwr-storage.mjs.map +1 -1
- package/fesm2022/ngwr-switch.mjs +3 -3
- package/fesm2022/ngwr-table.mjs +51 -28
- package/fesm2022/ngwr-table.mjs.map +1 -1
- package/fesm2022/ngwr-tabs-router.mjs +158 -0
- package/fesm2022/ngwr-tabs-router.mjs.map +1 -0
- package/fesm2022/ngwr-tabs-testing.mjs +13 -11
- package/fesm2022/ngwr-tabs-testing.mjs.map +1 -1
- package/fesm2022/ngwr-tabs.mjs +104 -16
- package/fesm2022/ngwr-tabs.mjs.map +1 -1
- package/fesm2022/ngwr-textarea.mjs +46 -6
- package/fesm2022/ngwr-textarea.mjs.map +1 -1
- package/fesm2022/ngwr-theme.mjs +90 -4
- package/fesm2022/ngwr-theme.mjs.map +1 -1
- package/fesm2022/ngwr-tilt-card.mjs +7 -7
- package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
- package/fesm2022/ngwr-timeline.mjs +6 -6
- package/fesm2022/ngwr-toast.mjs +116 -11
- package/fesm2022/ngwr-toast.mjs.map +1 -1
- package/fesm2022/ngwr-toolbar.mjs +3 -3
- package/fesm2022/ngwr-tour.mjs +6 -6
- package/fesm2022/ngwr-tour.mjs.map +1 -1
- package/fesm2022/ngwr-transfer.mjs +4 -4
- package/fesm2022/ngwr-transfer.mjs.map +1 -1
- package/fesm2022/ngwr-tree.mjs +35 -12
- package/fesm2022/ngwr-tree.mjs.map +1 -1
- package/fesm2022/ngwr-typewriter.mjs +3 -3
- package/fesm2022/ngwr-typography.mjs +3 -3
- package/fesm2022/ngwr-utils.mjs +37 -1
- package/fesm2022/ngwr-utils.mjs.map +1 -1
- package/fesm2022/ngwr-version.mjs +1 -1
- package/fesm2022/ngwr-version.mjs.map +1 -1
- package/fesm2022/ngwr-virtual-scroll.mjs +3 -3
- package/fesm2022/ngwr-waves.mjs +4 -4
- package/fesm2022/ngwr-waves.mjs.map +1 -1
- package/fesm2022/ngwr-window-testing.mjs +10 -2
- package/fesm2022/ngwr-window-testing.mjs.map +1 -1
- package/fesm2022/ngwr-window.mjs +15 -15
- package/fesm2022/ngwr-window.mjs.map +1 -1
- package/i18n/en.json +33 -6
- package/i18n/ru.json +33 -6
- package/llms-full.txt +29 -20
- package/llms.txt +127 -25
- package/mcp/catalog.js +3 -3
- package/mcp/providers.js +11 -0
- package/package.json +9 -1
- package/schematics/migrations/v13/index.js +101 -0
- package/schematics/migrations/v14/index.js +422 -0
- package/schematics/migrations.json +10 -0
- package/schematics/page/templates.js +1 -1
- package/schematics/use/symbol-map.json +1 -0
- package/shiny-text/styles/_dark.scss +20 -0
- package/shiny-text/styles/_index.scss +5 -0
- package/shiny-text/styles/_rules.scss +0 -4
- package/skills/ngwr/SKILL.md +4 -1
- package/skills/ngwr/references/catalog.md +2 -0
- package/skills/ngwr/references/setup.md +4 -0
- package/spotlight-card/styles/_dark.scss +21 -0
- package/spotlight-card/styles/_index.scss +5 -0
- package/spotlight-card/styles/_rules.scss +0 -6
- package/star-border/styles/_dark.scss +21 -0
- package/star-border/styles/_index.scss +5 -0
- package/star-border/styles/_rules.scss +0 -5
- package/stepper/styles/_index.scss +19 -1
- package/textarea/styles/_index.scss +14 -6
- package/theme/styles/_colors.scss +102 -0
- package/theme/styles/_focus.scss +31 -1
- package/tilt-card/styles/_dark.scss +21 -0
- package/tilt-card/styles/_index.scss +5 -0
- package/tilt-card/styles/_rules.scss +0 -5
- package/toast/styles/_index.scss +12 -4
- package/types/ngwr-alert.d.ts +3 -3
- package/types/ngwr-blur-text.d.ts +8 -0
- package/types/ngwr-button.d.ts +45 -2
- package/types/ngwr-calendar-testing.d.ts +21 -4
- package/types/ngwr-calendar.d.ts +37 -0
- package/types/ngwr-circular-text.d.ts +9 -0
- package/types/ngwr-collapse.d.ts +19 -15
- package/types/ngwr-color-picker-testing.d.ts +10 -4
- package/types/ngwr-color-picker.d.ts +70 -2
- package/types/ngwr-command-palette.d.ts +14 -0
- package/types/ngwr-context-menu.d.ts +1 -1
- package/types/ngwr-date-adapters-fns.d.ts +71 -29
- package/types/ngwr-date-picker-testing.d.ts +206 -185
- package/types/ngwr-date-picker.d.ts +7 -0
- package/types/ngwr-date.d.ts +143 -13
- package/types/ngwr-drag-drop.d.ts +19 -0
- package/types/ngwr-dropdown.d.ts +18 -2
- package/types/ngwr-event-calendar-testing.d.ts +12 -9
- package/types/ngwr-file-upload.d.ts +31 -3
- package/types/ngwr-form-testing.d.ts +13 -7
- package/types/ngwr-form.d.ts +47 -12
- package/types/ngwr-i18n.d.ts +89 -7
- package/types/ngwr-input-number.d.ts +1 -1
- package/types/ngwr-input-otp.d.ts +3 -0
- package/types/ngwr-input.d.ts +13 -5
- package/types/ngwr-knob-testing.d.ts +8 -4
- package/types/ngwr-knob.d.ts +18 -0
- package/types/ngwr-loading-bar-router.d.ts +35 -0
- package/types/ngwr-loading-bar.d.ts +19 -9
- package/types/ngwr-mention.d.ts +13 -0
- package/types/ngwr-pagination-testing.d.ts +11 -10
- package/types/ngwr-pagination.d.ts +39 -10
- package/types/ngwr-popconfirm.d.ts +1 -1
- package/types/ngwr-popover.d.ts +1 -1
- package/types/ngwr-rating.d.ts +25 -4
- package/types/ngwr-segmented.d.ts +1 -0
- package/types/ngwr-select.d.ts +110 -19
- package/types/ngwr-slider.d.ts +1 -0
- package/types/ngwr-splitter-testing.d.ts +9 -4
- package/types/ngwr-squircle.d.ts +1 -1
- package/types/ngwr-statistic.d.ts +22 -2
- package/types/ngwr-storage.d.ts +39 -1
- package/types/ngwr-table.d.ts +24 -5
- package/types/ngwr-tabs-router.d.ts +67 -0
- package/types/ngwr-tabs-testing.d.ts +12 -10
- package/types/ngwr-tabs.d.ts +103 -6
- package/types/ngwr-textarea.d.ts +29 -0
- package/types/ngwr-theme.d.ts +92 -2
- package/types/ngwr-toast.d.ts +53 -0
- package/types/ngwr-tree.d.ts +10 -2
- package/types/ngwr-utils.d.ts +33 -1
- package/types/ngwr-version.d.ts +1 -1
- package/types/ngwr-window-testing.d.ts +11 -3
- package/types/ngwr-window.d.ts +11 -4
- package/waves/styles/_dark.scss +19 -0
- package/waves/styles/_index.scss +5 -0
- package/waves/styles/_rules.scss +0 -3
- package/window/styles/_index.scss +1 -1
|
@@ -30,7 +30,8 @@ const wrRu = {
|
|
|
30
30
|
goToPage: 'Перейти на страницу {{page}}',
|
|
31
31
|
label: 'Пагинация',
|
|
32
32
|
pageOf: 'Страница {{current}} из {{total}}',
|
|
33
|
-
|
|
33
|
+
range: '{{from}}–{{to}} из {{total}}',
|
|
34
|
+
compact: '{{current}} / {{total}}',
|
|
34
35
|
},
|
|
35
36
|
table: {
|
|
36
37
|
empty: 'Нет данных',
|
|
@@ -124,11 +125,13 @@ const wrRu = {
|
|
|
124
125
|
placeholder: 'Выберите…',
|
|
125
126
|
clearSelection: 'Очистить выбор',
|
|
126
127
|
removeItem: 'Удалить {{label}}',
|
|
128
|
+
more: 'ещё {{count}}',
|
|
127
129
|
},
|
|
128
130
|
commandPalette: {
|
|
129
131
|
label: 'Палитра команд',
|
|
130
132
|
placeholder: 'Введите команду или поиск…',
|
|
131
133
|
noResults: 'Ничего не найдено',
|
|
134
|
+
escHint: 'esc',
|
|
132
135
|
},
|
|
133
136
|
empty: {
|
|
134
137
|
noData: 'Нет данных',
|
|
@@ -140,6 +143,12 @@ const wrRu = {
|
|
|
140
143
|
removeFile: 'Удалить файл',
|
|
141
144
|
invalid: 'Неподдерживаемый тип файла',
|
|
142
145
|
tooBig: 'Файл слишком большой',
|
|
146
|
+
size: '{{value}} {{unit}}',
|
|
147
|
+
unitByte: 'Б',
|
|
148
|
+
unitKb: 'КБ',
|
|
149
|
+
unitMb: 'МБ',
|
|
150
|
+
unitGb: 'ГБ',
|
|
151
|
+
unitTb: 'ТБ',
|
|
143
152
|
},
|
|
144
153
|
popconfirm: {
|
|
145
154
|
label: 'Подтверждение действия',
|
|
@@ -188,6 +197,9 @@ const wrRu = {
|
|
|
188
197
|
nextYear: 'Следующий год',
|
|
189
198
|
prevYears: 'Предыдущие 12 лет',
|
|
190
199
|
nextYears: 'Следующие 12 лет',
|
|
200
|
+
header: '{{month}} {{year}}',
|
|
201
|
+
yearRange: '{{from}} – {{to}}',
|
|
202
|
+
dayLabel: '{{weekday}}, {{date}}',
|
|
191
203
|
},
|
|
192
204
|
imageCropper: {
|
|
193
205
|
empty: 'Нет изображения',
|
|
@@ -207,6 +219,17 @@ const wrRu = {
|
|
|
207
219
|
area: 'Насыщенность и яркость, {{saturation}}% и {{brightness}}%',
|
|
208
220
|
hue: 'Оттенок',
|
|
209
221
|
alpha: 'Непрозрачность',
|
|
222
|
+
formatHex: 'HEX',
|
|
223
|
+
formatRgb: 'RGB',
|
|
224
|
+
formatHsl: 'HSL',
|
|
225
|
+
channelHex: 'HEX',
|
|
226
|
+
channelRed: 'R',
|
|
227
|
+
channelGreen: 'G',
|
|
228
|
+
channelBlue: 'B',
|
|
229
|
+
channelHue: 'H',
|
|
230
|
+
channelSaturation: 'S%',
|
|
231
|
+
channelLightness: 'L%',
|
|
232
|
+
channelAlpha: 'A%',
|
|
210
233
|
},
|
|
211
234
|
calendarHeatmap: {
|
|
212
235
|
label: 'Календарная тепловая карта',
|
|
@@ -342,6 +365,10 @@ const wrRu = {
|
|
|
342
365
|
speedDial: {
|
|
343
366
|
label: 'Действия',
|
|
344
367
|
},
|
|
368
|
+
statistic: {
|
|
369
|
+
delta: '{{value}}{{suffix}}',
|
|
370
|
+
deltaSuffix: '%',
|
|
371
|
+
},
|
|
345
372
|
result: {
|
|
346
373
|
notFound: 'Извините, страница не найдена.',
|
|
347
374
|
forbidden: 'Извините, доступ к этой странице ограничен.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngwr-i18n-ru.mjs","sources":["../../../projects/lib/i18n/ru/public-api.ts","../../../projects/lib/i18n/ru/ngwr-i18n-ru.ts"],"sourcesContent":["import { type WrI18nCatalog } from 'ngwr/i18n';\n\n/** Base Russian catalog for ngwr built-in component strings. */\nexport const wrRu: WrI18nCatalog = {\n common: {\n ok: 'OK',\n cancel: 'Отмена',\n close: 'Закрыть',\n confirm: 'Подтвердить',\n delete: 'Удалить',\n save: 'Сохранить',\n edit: 'Изменить',\n add: 'Добавить',\n remove: 'Удалить',\n clear: 'Очистить',\n search: 'Поиск',\n loading: 'Загрузка…',\n select: 'Выбрать',\n next: 'Далее',\n previous: 'Назад',\n back: 'Назад',\n today: 'Сегодня',\n yesterday: 'Вчера',\n tomorrow: 'Завтра',\n of: 'из',\n },\n pagination: {\n prev: 'Предыдущая страница',\n next: 'Следующая страница',\n itemsPerPage: 'Записей на страницу',\n perPage: '{{size}} / стр.',\n goToPage: 'Перейти на страницу {{page}}',\n label: 'Пагинация',\n pageOf: 'Страница {{current}} из {{total}}',\n of: 'из',\n },\n table: {\n empty: 'Нет данных',\n loading: 'Загрузка…',\n sort: 'Сортировать столбец',\n filter: 'Фильтр столбца',\n selectAll: 'Выбрать все строки',\n selectRow: 'Выбрать строку',\n expandRow: 'Показать детали строки',\n toggleRow: 'Показать вложенные строки',\n selectGroup: 'Выбрать группу',\n toggleGroup: 'Свернуть группу',\n noMatches: 'Ничего не найдено',\n search: 'Поиск',\n reset: 'Сбросить',\n },\n eventCalendar: {\n today: 'Сегодня',\n previous: 'Назад',\n next: 'Вперёд',\n month: 'Месяц',\n week: 'Неделя',\n day: 'День',\n time: 'Время',\n allDay: 'Весь день',\n label: 'Календарь',\n more: 'ещё {{count}}',\n },\n tour: {\n next: 'Далее',\n back: 'Назад',\n done: 'Готово',\n skip: 'Пропустить',\n progress: 'Шаг {{current}} из {{total}}',\n },\n splitter: {\n divider: 'Изменить размер областей',\n },\n stepper: {\n optional: 'необязательно',\n },\n transfer: {\n source: 'Доступно',\n target: 'Выбрано',\n search: 'Поиск',\n empty: 'Пусто',\n selectAll: 'Выбрать все',\n toTarget: 'Перенести в выбранные',\n toSource: 'Вернуть в доступные',\n count: '{{checked}} / {{total}}',\n },\n form: {\n optional: 'необязательно',\n },\n validation: {\n required: 'Обязательное поле.',\n requiredTrue: 'Нужно поставить отметку.',\n email: 'Введите корректный адрес почты.',\n minlength: 'Не короче {{requiredLength}} символов.',\n maxlength: 'Не длиннее {{requiredLength}} символов.',\n min: 'Не меньше {{min}}.',\n max: 'Не больше {{max}}.',\n pattern: 'Значение не соответствует формату.',\n noWhitespace: 'Значение не может содержать пробелы.',\n hexColor: 'Введите цвет в формате #1a2b3c.',\n url: 'Введите корректный адрес.',\n cardNumber: 'Введите корректный номер карты.',\n cvc: 'Введите {{length}}-значный код проверки.',\n iban: 'Введите корректный IBAN.',\n match: 'Значения не совпадают.',\n matchFields: 'Значения полей не совпадают.',\n oneOf: 'Выберите одно из допустимых значений.',\n minDate: 'Выберите более позднюю дату.',\n maxDate: 'Выберите более раннюю дату.',\n },\n select: {\n label: 'Выбрать',\n placeholder: 'Выберите…',\n empty: 'Нет вариантов',\n clearSelection: 'Очистить выбор',\n removeItem: 'Удалить {{label}}',\n noResults: 'Ничего не найдено',\n loading: 'Загрузка…',\n more: 'ещё {{count}}',\n },\n // `tree` covers both inline display and combobox-mode pickers\n // (replaces the dropped `treeSelect` namespace).\n tree: {\n expand: 'Развернуть',\n collapse: 'Свернуть',\n placeholder: 'Выберите…',\n clearSelection: 'Очистить выбор',\n removeItem: 'Удалить {{label}}',\n },\n commandPalette: {\n label: 'Палитра команд',\n placeholder: 'Введите команду или поиск…',\n noResults: 'Ничего не найдено',\n },\n empty: {\n noData: 'Нет данных',\n },\n fileUpload: {\n browse: 'Нажмите, чтобы выбрать',\n dropZone: 'или перетащите файлы сюда',\n dropZoneLabel: 'Зона загрузки файлов — нажмите или перетащите',\n removeFile: 'Удалить файл',\n invalid: 'Неподдерживаемый тип файла',\n tooBig: 'Файл слишком большой',\n },\n popconfirm: {\n label: 'Подтверждение действия',\n confirm: 'Подтвердить',\n cancel: 'Отмена',\n },\n toast: {\n region: 'Уведомления',\n close: 'Закрыть',\n copy: 'Копировать',\n copied: 'Скопировано',\n closeAll: 'Закрыть все',\n },\n input: {\n showPassword: 'Показать пароль',\n hidePassword: 'Скрыть пароль',\n },\n inputNumber: {\n increment: 'Увеличить',\n decrement: 'Уменьшить',\n },\n inputOtp: {\n label: 'Код подтверждения',\n digit: 'Цифра {{index}}',\n character: 'Символ {{index}}',\n },\n anchor: {\n label: 'Содержание',\n },\n avatar: {\n alt: 'Аватар',\n },\n backTop: {\n label: 'Наверх',\n },\n breadcrumbs: {\n label: 'Хлебные крошки',\n },\n burger: {\n label: 'Переключить меню',\n },\n calendar: {\n prevMonth: 'Предыдущий месяц',\n nextMonth: 'Следующий месяц',\n prevYear: 'Предыдущий год',\n nextYear: 'Следующий год',\n prevYears: 'Предыдущие 12 лет',\n nextYears: 'Следующие 12 лет',\n },\n imageCropper: {\n empty: 'Нет изображения',\n window: 'Область обрезки',\n keyHelp:\n 'Стрелки перемещают область обрезки. Alt со стрелкой изменяет её размер, Shift увеличивает шаг. ' +\n 'Область объявляется как отступ слева, отступ сверху, ширина и высота в пикселях изображения.',\n },\n sortableList: {\n keyHelp:\n 'Нажмите пробел, чтобы взять элемент, затем перемещайте его стрелками. ' +\n 'Пробел ещё раз — отпустить, Escape — вернуть на место.',\n grabbed: 'Взят. {{index}} из {{total}}.',\n moved: '{{index}} из {{total}}.',\n dropped: 'Отпущен. {{index}} из {{total}}.',\n cancelled: 'Перемещение отменено.',\n },\n colorPicker: {\n area: 'Насыщенность и яркость, {{saturation}}% и {{brightness}}%',\n hue: 'Оттенок',\n alpha: 'Непрозрачность',\n },\n calendarHeatmap: {\n label: 'Календарная тепловая карта',\n },\n lineChart: {\n label: 'Линейный график',\n },\n donutChart: {\n label: 'Круговая диаграмма',\n },\n compare: {\n label: 'Разделитель сравнения',\n },\n // Два `roledescription` произносятся ВМЕСТО названия роли, поэтому это строчные\n // существительные — «карусель», «слайд», — а не подписи с заглавной, как выше.\n carousel: {\n label: 'Карусель',\n goToSlide: 'Перейти к слайду {{index}}',\n prev: 'Предыдущий слайд',\n next: 'Следующий слайд',\n pagination: 'Пагинация карусели',\n roledescription: 'карусель',\n slideRoledescription: 'слайд',\n },\n actionSheet: {\n label: 'Действия',\n },\n alert: {\n close: 'Закрыть оповещение',\n },\n qr: {\n label: 'QR-код',\n },\n image: {\n viewer: 'Просмотр изображения',\n open: 'Открыть превью',\n close: 'Закрыть превью',\n },\n window: {\n close: 'Закрыть',\n minimize: 'Свернуть',\n maximize: 'Развернуть',\n restore: 'Восстановить',\n restoreDown: 'Восстановить размер',\n restoreWindow: 'Восстановить {{title}}',\n closeWindow: 'Закрыть окно',\n untitled: 'Без названия',\n taskbar: 'Свёрнутые окна',\n },\n dialog: {\n close: 'Закрыть диалог',\n },\n // Намеренно обобщённо: у панели поповера нет универсального имени, а\n // `role=\"dialog\"` без имени не озвучивается вовсе. Переопределяется на месте\n // через `[ariaLabel]`.\n popover: {\n label: 'Всплывающая панель',\n },\n markdown: {\n copy: 'Скопировать код',\n copied: 'Скопировано',\n taskDone: 'Сделано:',\n taskTodo: 'Не сделано:',\n },\n // Существительное впереди — «Вставлено: Ада», а не «Ада вставлена»: род имени\n // заранее неизвестен, а интерполятор согласовывать его не умеет. По той же\n // причине счётчик без склонения — форм множественного числа в нём нет.\n marquee: {\n label: 'Бегущая строка',\n link: 'ссылка',\n },\n mention: {\n listbox: 'Упоминания',\n available: 'Найдено совпадений: {{count}}',\n inserted: 'Вставлено: {{label}}',\n },\n drawer: {\n close: 'Закрыть панель',\n },\n datePicker: {\n open: 'Открыть календарь',\n openTime: 'Открыть выбор времени',\n openDateTime: 'Открыть выбор даты и времени',\n openRange: 'Открыть календарь периода',\n panel: 'Выбор даты',\n panelTime: 'Выбор времени',\n panelDateTime: 'Выбор даты и времени',\n panelRange: 'Выбор периода',\n panelRangeDateTime: 'Выбор периода и времени',\n rangeStart: 'Начало периода',\n rangeEnd: 'Конец периода',\n startTime: 'Время начала',\n endTime: 'Время окончания',\n hours: 'Часы',\n minutes: 'Минуты',\n seconds: 'Секунды',\n incrementHours: 'Увеличить часы',\n decrementHours: 'Уменьшить часы',\n incrementMinutes: 'Увеличить минуты',\n decrementMinutes: 'Уменьшить минуты',\n incrementSeconds: 'Увеличить секунды',\n decrementSeconds: 'Уменьшить секунды',\n toggleAmPm: 'Переключить ДП / ПП',\n am: 'ДП',\n pm: 'ПП',\n },\n sidebar: {\n label: 'Боковая панель',\n },\n spinner: {\n label: 'Загрузка',\n },\n rating: {\n label: 'Рейтинг',\n },\n gauge: {\n label: 'Индикатор',\n },\n progress: {\n label: 'Прогресс',\n },\n meterGroup: {\n label: 'Шкала',\n },\n knob: {\n label: 'Значение',\n },\n slider: {\n label: 'Значение',\n lower: 'Нижнее значение',\n upper: 'Верхнее значение',\n },\n speedDial: {\n label: 'Действия',\n },\n result: {\n notFound: 'Извините, страница не найдена.',\n forbidden: 'Извините, доступ к этой странице ограничен.',\n serverError: 'Извините, что-то пошло не так.',\n },\n date: {\n months: {\n jan: 'Январь',\n feb: 'Февраль',\n mar: 'Март',\n apr: 'Апрель',\n may: 'Май',\n jun: 'Июнь',\n jul: 'Июль',\n aug: 'Август',\n sep: 'Сентябрь',\n oct: 'Октябрь',\n nov: 'Ноябрь',\n dec: 'Декабрь',\n },\n },\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngwr-i18n-ru.mjs","sources":["../../../projects/lib/i18n/ru/public-api.ts","../../../projects/lib/i18n/ru/ngwr-i18n-ru.ts"],"sourcesContent":["import { type WrI18nCatalog } from 'ngwr/i18n';\n\n/** Base Russian catalog for ngwr built-in component strings. */\nexport const wrRu: WrI18nCatalog = {\n common: {\n ok: 'OK',\n cancel: 'Отмена',\n close: 'Закрыть',\n confirm: 'Подтвердить',\n delete: 'Удалить',\n save: 'Сохранить',\n edit: 'Изменить',\n add: 'Добавить',\n remove: 'Удалить',\n clear: 'Очистить',\n search: 'Поиск',\n loading: 'Загрузка…',\n select: 'Выбрать',\n next: 'Далее',\n previous: 'Назад',\n back: 'Назад',\n today: 'Сегодня',\n yesterday: 'Вчера',\n tomorrow: 'Завтра',\n of: 'из',\n },\n pagination: {\n prev: 'Предыдущая страница',\n next: 'Следующая страница',\n itemsPerPage: 'Записей на страницу',\n perPage: '{{size}} / стр.',\n goToPage: 'Перейти на страницу {{page}}',\n label: 'Пагинация',\n pageOf: 'Страница {{current}} из {{total}}',\n range: '{{from}}–{{to}} из {{total}}',\n compact: '{{current}} / {{total}}',\n },\n table: {\n empty: 'Нет данных',\n loading: 'Загрузка…',\n sort: 'Сортировать столбец',\n filter: 'Фильтр столбца',\n selectAll: 'Выбрать все строки',\n selectRow: 'Выбрать строку',\n expandRow: 'Показать детали строки',\n toggleRow: 'Показать вложенные строки',\n selectGroup: 'Выбрать группу',\n toggleGroup: 'Свернуть группу',\n noMatches: 'Ничего не найдено',\n search: 'Поиск',\n reset: 'Сбросить',\n },\n eventCalendar: {\n today: 'Сегодня',\n previous: 'Назад',\n next: 'Вперёд',\n month: 'Месяц',\n week: 'Неделя',\n day: 'День',\n time: 'Время',\n allDay: 'Весь день',\n label: 'Календарь',\n more: 'ещё {{count}}',\n },\n tour: {\n next: 'Далее',\n back: 'Назад',\n done: 'Готово',\n skip: 'Пропустить',\n progress: 'Шаг {{current}} из {{total}}',\n },\n splitter: {\n divider: 'Изменить размер областей',\n },\n stepper: {\n optional: 'необязательно',\n },\n transfer: {\n source: 'Доступно',\n target: 'Выбрано',\n search: 'Поиск',\n empty: 'Пусто',\n selectAll: 'Выбрать все',\n toTarget: 'Перенести в выбранные',\n toSource: 'Вернуть в доступные',\n count: '{{checked}} / {{total}}',\n },\n form: {\n optional: 'необязательно',\n },\n validation: {\n required: 'Обязательное поле.',\n requiredTrue: 'Нужно поставить отметку.',\n email: 'Введите корректный адрес почты.',\n minlength: 'Не короче {{requiredLength}} символов.',\n maxlength: 'Не длиннее {{requiredLength}} символов.',\n min: 'Не меньше {{min}}.',\n max: 'Не больше {{max}}.',\n pattern: 'Значение не соответствует формату.',\n noWhitespace: 'Значение не может содержать пробелы.',\n hexColor: 'Введите цвет в формате #1a2b3c.',\n url: 'Введите корректный адрес.',\n cardNumber: 'Введите корректный номер карты.',\n cvc: 'Введите {{length}}-значный код проверки.',\n iban: 'Введите корректный IBAN.',\n match: 'Значения не совпадают.',\n matchFields: 'Значения полей не совпадают.',\n oneOf: 'Выберите одно из допустимых значений.',\n minDate: 'Выберите более позднюю дату.',\n maxDate: 'Выберите более раннюю дату.',\n },\n select: {\n label: 'Выбрать',\n placeholder: 'Выберите…',\n empty: 'Нет вариантов',\n clearSelection: 'Очистить выбор',\n removeItem: 'Удалить {{label}}',\n noResults: 'Ничего не найдено',\n loading: 'Загрузка…',\n more: 'ещё {{count}}',\n },\n // `tree` covers both inline display and combobox-mode pickers\n // (replaces the dropped `treeSelect` namespace).\n tree: {\n expand: 'Развернуть',\n collapse: 'Свернуть',\n placeholder: 'Выберите…',\n clearSelection: 'Очистить выбор',\n removeItem: 'Удалить {{label}}',\n more: 'ещё {{count}}',\n },\n commandPalette: {\n label: 'Палитра команд',\n placeholder: 'Введите команду или поиск…',\n noResults: 'Ничего не найдено',\n escHint: 'esc',\n },\n empty: {\n noData: 'Нет данных',\n },\n fileUpload: {\n browse: 'Нажмите, чтобы выбрать',\n dropZone: 'или перетащите файлы сюда',\n dropZoneLabel: 'Зона загрузки файлов — нажмите или перетащите',\n removeFile: 'Удалить файл',\n invalid: 'Неподдерживаемый тип файла',\n tooBig: 'Файл слишком большой',\n size: '{{value}} {{unit}}',\n unitByte: 'Б',\n unitKb: 'КБ',\n unitMb: 'МБ',\n unitGb: 'ГБ',\n unitTb: 'ТБ',\n },\n popconfirm: {\n label: 'Подтверждение действия',\n confirm: 'Подтвердить',\n cancel: 'Отмена',\n },\n toast: {\n region: 'Уведомления',\n close: 'Закрыть',\n copy: 'Копировать',\n copied: 'Скопировано',\n closeAll: 'Закрыть все',\n },\n input: {\n showPassword: 'Показать пароль',\n hidePassword: 'Скрыть пароль',\n },\n inputNumber: {\n increment: 'Увеличить',\n decrement: 'Уменьшить',\n },\n inputOtp: {\n label: 'Код подтверждения',\n digit: 'Цифра {{index}}',\n character: 'Символ {{index}}',\n },\n anchor: {\n label: 'Содержание',\n },\n avatar: {\n alt: 'Аватар',\n },\n backTop: {\n label: 'Наверх',\n },\n breadcrumbs: {\n label: 'Хлебные крошки',\n },\n burger: {\n label: 'Переключить меню',\n },\n calendar: {\n prevMonth: 'Предыдущий месяц',\n nextMonth: 'Следующий месяц',\n prevYear: 'Предыдущий год',\n nextYear: 'Следующий год',\n prevYears: 'Предыдущие 12 лет',\n nextYears: 'Следующие 12 лет',\n header: '{{month}} {{year}}',\n yearRange: '{{from}} – {{to}}',\n dayLabel: '{{weekday}}, {{date}}',\n },\n imageCropper: {\n empty: 'Нет изображения',\n window: 'Область обрезки',\n keyHelp:\n 'Стрелки перемещают область обрезки. Alt со стрелкой изменяет её размер, Shift увеличивает шаг. ' +\n 'Область объявляется как отступ слева, отступ сверху, ширина и высота в пикселях изображения.',\n },\n sortableList: {\n keyHelp:\n 'Нажмите пробел, чтобы взять элемент, затем перемещайте его стрелками. ' +\n 'Пробел ещё раз — отпустить, Escape — вернуть на место.',\n grabbed: 'Взят. {{index}} из {{total}}.',\n moved: '{{index}} из {{total}}.',\n dropped: 'Отпущен. {{index}} из {{total}}.',\n cancelled: 'Перемещение отменено.',\n },\n colorPicker: {\n area: 'Насыщенность и яркость, {{saturation}}% и {{brightness}}%',\n hue: 'Оттенок',\n alpha: 'Непрозрачность',\n formatHex: 'HEX',\n formatRgb: 'RGB',\n formatHsl: 'HSL',\n channelHex: 'HEX',\n channelRed: 'R',\n channelGreen: 'G',\n channelBlue: 'B',\n channelHue: 'H',\n channelSaturation: 'S%',\n channelLightness: 'L%',\n channelAlpha: 'A%',\n },\n calendarHeatmap: {\n label: 'Календарная тепловая карта',\n },\n lineChart: {\n label: 'Линейный график',\n },\n donutChart: {\n label: 'Круговая диаграмма',\n },\n compare: {\n label: 'Разделитель сравнения',\n },\n // Два `roledescription` произносятся ВМЕСТО названия роли, поэтому это строчные\n // существительные — «карусель», «слайд», — а не подписи с заглавной, как выше.\n carousel: {\n label: 'Карусель',\n goToSlide: 'Перейти к слайду {{index}}',\n prev: 'Предыдущий слайд',\n next: 'Следующий слайд',\n pagination: 'Пагинация карусели',\n roledescription: 'карусель',\n slideRoledescription: 'слайд',\n },\n actionSheet: {\n label: 'Действия',\n },\n alert: {\n close: 'Закрыть оповещение',\n },\n qr: {\n label: 'QR-код',\n },\n image: {\n viewer: 'Просмотр изображения',\n open: 'Открыть превью',\n close: 'Закрыть превью',\n },\n window: {\n close: 'Закрыть',\n minimize: 'Свернуть',\n maximize: 'Развернуть',\n restore: 'Восстановить',\n restoreDown: 'Восстановить размер',\n restoreWindow: 'Восстановить {{title}}',\n closeWindow: 'Закрыть окно',\n untitled: 'Без названия',\n taskbar: 'Свёрнутые окна',\n },\n dialog: {\n close: 'Закрыть диалог',\n },\n // Намеренно обобщённо: у панели поповера нет универсального имени, а\n // `role=\"dialog\"` без имени не озвучивается вовсе. Переопределяется на месте\n // через `[ariaLabel]`.\n popover: {\n label: 'Всплывающая панель',\n },\n markdown: {\n copy: 'Скопировать код',\n copied: 'Скопировано',\n taskDone: 'Сделано:',\n taskTodo: 'Не сделано:',\n },\n // Существительное впереди — «Вставлено: Ада», а не «Ада вставлена»: род имени\n // заранее неизвестен, а интерполятор согласовывать его не умеет. По той же\n // причине счётчик без склонения — форм множественного числа в нём нет.\n marquee: {\n label: 'Бегущая строка',\n link: 'ссылка',\n },\n mention: {\n listbox: 'Упоминания',\n available: 'Найдено совпадений: {{count}}',\n inserted: 'Вставлено: {{label}}',\n },\n drawer: {\n close: 'Закрыть панель',\n },\n datePicker: {\n open: 'Открыть календарь',\n openTime: 'Открыть выбор времени',\n openDateTime: 'Открыть выбор даты и времени',\n openRange: 'Открыть календарь периода',\n panel: 'Выбор даты',\n panelTime: 'Выбор времени',\n panelDateTime: 'Выбор даты и времени',\n panelRange: 'Выбор периода',\n panelRangeDateTime: 'Выбор периода и времени',\n rangeStart: 'Начало периода',\n rangeEnd: 'Конец периода',\n startTime: 'Время начала',\n endTime: 'Время окончания',\n hours: 'Часы',\n minutes: 'Минуты',\n seconds: 'Секунды',\n incrementHours: 'Увеличить часы',\n decrementHours: 'Уменьшить часы',\n incrementMinutes: 'Увеличить минуты',\n decrementMinutes: 'Уменьшить минуты',\n incrementSeconds: 'Увеличить секунды',\n decrementSeconds: 'Уменьшить секунды',\n toggleAmPm: 'Переключить ДП / ПП',\n am: 'ДП',\n pm: 'ПП',\n },\n sidebar: {\n label: 'Боковая панель',\n },\n spinner: {\n label: 'Загрузка',\n },\n rating: {\n label: 'Рейтинг',\n },\n gauge: {\n label: 'Индикатор',\n },\n progress: {\n label: 'Прогресс',\n },\n meterGroup: {\n label: 'Шкала',\n },\n knob: {\n label: 'Значение',\n },\n slider: {\n label: 'Значение',\n lower: 'Нижнее значение',\n upper: 'Верхнее значение',\n },\n speedDial: {\n label: 'Действия',\n },\n statistic: {\n delta: '{{value}}{{suffix}}',\n deltaSuffix: '%',\n },\n result: {\n notFound: 'Извините, страница не найдена.',\n forbidden: 'Извините, доступ к этой странице ограничен.',\n serverError: 'Извините, что-то пошло не так.',\n },\n date: {\n months: {\n jan: 'Январь',\n feb: 'Февраль',\n mar: 'Март',\n apr: 'Апрель',\n may: 'Май',\n jun: 'Июнь',\n jul: 'Июль',\n aug: 'Август',\n sep: 'Сентябрь',\n oct: 'Октябрь',\n nov: 'Ноябрь',\n dec: 'Декабрь',\n },\n },\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/fesm2022/ngwr-i18n.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, inject, signal, effect, computed, Service, Pipe, input, ElementRef, Directive, makeEnvironmentProviders } from '@angular/core';
|
|
2
|
+
import { InjectionToken, inject, LOCALE_ID, signal, effect, isDevMode, computed, Service, Pipe, input, ElementRef, Directive, makeEnvironmentProviders } from '@angular/core';
|
|
3
3
|
import { of, firstValueFrom, catchError } from 'rxjs';
|
|
4
4
|
import { WrStorage } from 'ngwr/storage';
|
|
5
5
|
import { HttpClient } from '@angular/common/http';
|
|
@@ -36,14 +36,24 @@ const WR_I18N_BASE_CATALOGS = new InjectionToken('WR_I18N_BASE_CATALOGS');
|
|
|
36
36
|
* Use of this source code is governed by an MIT-style license that can be
|
|
37
37
|
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
38
38
|
*/
|
|
39
|
+
/**
|
|
40
|
+
* Everything but the locale, which cannot be a constant: it is resolved from
|
|
41
|
+
* `LOCALE_ID` in an injection context. @internal
|
|
42
|
+
*/
|
|
39
43
|
const DEFAULT_WR_I18N_CONFIG = {
|
|
40
|
-
defaultLocale: 'en',
|
|
41
|
-
availableLocales: ['en'],
|
|
42
44
|
storageKey: 'wr:i18n:locale',
|
|
43
45
|
missingHandler: key => key,
|
|
44
46
|
};
|
|
47
|
+
/**
|
|
48
|
+
* Resolve the locale half of the config. Callable only from an injection
|
|
49
|
+
* context, because the seed is `LOCALE_ID`. @internal
|
|
50
|
+
*/
|
|
51
|
+
function resolveWrI18nLocales(config) {
|
|
52
|
+
const defaultLocale = config.defaultLocale ?? inject(LOCALE_ID);
|
|
53
|
+
return { defaultLocale, availableLocales: config.availableLocales ?? [defaultLocale] };
|
|
54
|
+
}
|
|
45
55
|
const WR_I18N_CONFIG = new InjectionToken('WR_I18N_CONFIG', {
|
|
46
|
-
factory: () => DEFAULT_WR_I18N_CONFIG,
|
|
56
|
+
factory: () => ({ ...DEFAULT_WR_I18N_CONFIG, ...resolveWrI18nLocales({}) }),
|
|
47
57
|
});
|
|
48
58
|
|
|
49
59
|
/**
|
|
@@ -82,6 +92,22 @@ const WR_I18N_LOADER = new InjectionToken('WR_I18N_LOADER', {
|
|
|
82
92
|
function cacheKey(locale, scope) {
|
|
83
93
|
return `${locale}::${scope ?? ''}`;
|
|
84
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* A locale and the language under it: `'ru-RU'` gives `['ru-RU', 'ru']`.
|
|
97
|
+
*
|
|
98
|
+
* Every lookup and every load walks this, so a catalog registered as `ru`
|
|
99
|
+
* answers an app running `ru-RU`. Without it the two spellings are unrelated
|
|
100
|
+
* strings, and the miss is silent — `t()` returns the key, `useI18nText` reads
|
|
101
|
+
* that as "missing" and serves the English fallback, so a fully translated app
|
|
102
|
+
* renders English with nothing logged. It only ever truncates: an `en` lookup
|
|
103
|
+
* never reaches an `en-US` catalog, because a language is not a region.
|
|
104
|
+
*
|
|
105
|
+
* @internal
|
|
106
|
+
*/
|
|
107
|
+
function localeChain(locale) {
|
|
108
|
+
const dash = locale.indexOf('-');
|
|
109
|
+
return dash > 0 ? [locale, locale.slice(0, dash)] : [locale];
|
|
110
|
+
}
|
|
85
111
|
/** Walk a dotted path through a catalog tree. Returns string | null. @internal */
|
|
86
112
|
function walk(cat, key) {
|
|
87
113
|
if (!cat)
|
|
@@ -128,9 +154,39 @@ function wrInterpolate(template, params) {
|
|
|
128
154
|
* - a per-locale signal counter so every `translate()` reading the signal
|
|
129
155
|
* re-evaluates the moment a new catalog finishes loading
|
|
130
156
|
*
|
|
131
|
-
* Translations are looked up scope-first
|
|
132
|
-
*
|
|
133
|
-
* `
|
|
157
|
+
* Translations are looked up scope-first then root, per locale, and the locale
|
|
158
|
+
* itself is tried as the full tag before the bare language underneath it — so
|
|
159
|
+
* an app running `ru-RU` resolves against a catalog registered as `ru`, and a
|
|
160
|
+
* regional catalog is never shadowed by a scope in the base language. For an
|
|
161
|
+
* app that spells its locale one way, which is every app that existed before
|
|
162
|
+
* the chain, the order is exactly what it always was.
|
|
163
|
+
*
|
|
164
|
+
* ## Which locale wins
|
|
165
|
+
*
|
|
166
|
+
* ngwr has three locale inputs and they used to be three unrelated answers — an
|
|
167
|
+
* app that set `LOCALE_ID: 'ru-RU'` correctly still rendered an English
|
|
168
|
+
* calendar, because the date token defaulted to `navigator.language`. The
|
|
169
|
+
* precedence is now stated, highest first:
|
|
170
|
+
*
|
|
171
|
+
* 1. **A subsystem's own explicit option.** `provideWrDateAdapter({ locale })`
|
|
172
|
+
* pins dates; `provideWrI18n({ defaultLocale })` pins the catalog. The most
|
|
173
|
+
* specific statement wins, because it can only have been deliberate.
|
|
174
|
+
* 2. **`WrI18n.locale()` — the runtime value.** The only one of the three that
|
|
175
|
+
* can change without a reload, so it is what a language switcher writes.
|
|
176
|
+
* 3. **`LOCALE_ID`.** Angular's app-wide constant, and the seed for both of the
|
|
177
|
+
* above when neither was given. One statement, one answer.
|
|
178
|
+
* 4. `'en-US'`, which is what `LOCALE_ID` itself falls back to.
|
|
179
|
+
*
|
|
180
|
+
* `navigator.language` is deliberately NOT in that list. It is the browser's
|
|
181
|
+
* preference, not the application's, and reading it made prerendered output and
|
|
182
|
+
* the hydrated page disagree.
|
|
183
|
+
*
|
|
184
|
+
* **What a runtime switch reaches, and what it does not.** `use()` repaints
|
|
185
|
+
* every catalog string. It does not move `LOCALE_ID`, which is a constant, so
|
|
186
|
+
* anything keyed on it — `wrDate` / `wrNumber` / `wrPlural`, `wr-input-number`,
|
|
187
|
+
* `wr-statistic`, `wr-counter` — and anything keyed on `WR_DATE_LOCALE` — the
|
|
188
|
+
* date adapter, and so `wr-calendar` and `wr-date-picker` — stays where it was.
|
|
189
|
+
* `use()` says so once in dev mode rather than leaving it to be discovered.
|
|
134
190
|
*
|
|
135
191
|
* @example
|
|
136
192
|
* ```ts
|
|
@@ -148,6 +204,11 @@ class WrI18n {
|
|
|
148
204
|
config = inject(WR_I18N_CONFIG);
|
|
149
205
|
loader = inject(WR_I18N_LOADER);
|
|
150
206
|
storage = inject(WrStorage);
|
|
207
|
+
/**
|
|
208
|
+
* Angular's own locale. Read for the dev-mode drift warning only — the
|
|
209
|
+
* resolved default already folded it in through `WR_I18N_CONFIG`. @internal
|
|
210
|
+
*/
|
|
211
|
+
localeId = inject(LOCALE_ID);
|
|
151
212
|
/**
|
|
152
213
|
* Catalogs registered via `provideWrI18nBaseCatalogs()` — the floor under the
|
|
153
214
|
* loader's own catalogs, so ngwr's built-in strings survive an app that only
|
|
@@ -172,19 +233,29 @@ class WrI18n {
|
|
|
172
233
|
// current locale. Subsequent locale changes refire the same effect.
|
|
173
234
|
effect(() => {
|
|
174
235
|
const lc = this._locale();
|
|
175
|
-
void this.
|
|
236
|
+
void this.loadChain(lc, null);
|
|
176
237
|
for (const sc of this.scopes)
|
|
177
|
-
void this.
|
|
238
|
+
void this.loadChain(lc, sc);
|
|
178
239
|
});
|
|
179
240
|
}
|
|
180
241
|
// Locale
|
|
181
|
-
/**
|
|
242
|
+
/**
|
|
243
|
+
* Switch active locale. Ignored when not whitelisted.
|
|
244
|
+
*
|
|
245
|
+
* Text only — see the class docs for what a runtime switch cannot reach. The
|
|
246
|
+
* dev-mode warning below is the whole reporting of that limit; without it the
|
|
247
|
+
* failure is a screen showing German labels beside `3/15/2026`, with nothing
|
|
248
|
+
* anywhere saying why.
|
|
249
|
+
*/
|
|
182
250
|
use(locale) {
|
|
183
251
|
if (!this.config.availableLocales.includes(locale))
|
|
184
252
|
return;
|
|
253
|
+
const previous = this._locale();
|
|
185
254
|
this._locale.set(locale);
|
|
186
255
|
if (this.config.storageKey)
|
|
187
256
|
this.storage.set(this.config.storageKey, locale);
|
|
257
|
+
if (isDevMode() && previous !== locale)
|
|
258
|
+
this.warnOnLocaleIdDrift(locale);
|
|
188
259
|
}
|
|
189
260
|
/** Available locales — pass-through from config. */
|
|
190
261
|
available() {
|
|
@@ -198,7 +269,12 @@ class WrI18n {
|
|
|
198
269
|
*/
|
|
199
270
|
registerScope(scope) {
|
|
200
271
|
this.scopes.add(scope);
|
|
201
|
-
|
|
272
|
+
const lc = this._locale();
|
|
273
|
+
// Resolve on the exact tag: the promise is what a `canActivate` waits on,
|
|
274
|
+
// and the base-language catalog is only ever a fallback under it.
|
|
275
|
+
const exact = this.loadCatalog(lc, scope);
|
|
276
|
+
void this.loadChain(lc, scope);
|
|
277
|
+
return exact;
|
|
202
278
|
}
|
|
203
279
|
// Translate
|
|
204
280
|
/**
|
|
@@ -210,15 +286,22 @@ class WrI18n {
|
|
|
210
286
|
// Read revision so callers inside computed/effect re-run on updates.
|
|
211
287
|
this.revision();
|
|
212
288
|
const lc = this._locale();
|
|
213
|
-
|
|
214
|
-
hit
|
|
289
|
+
const chain = localeChain(lc);
|
|
290
|
+
let hit = null;
|
|
291
|
+
for (const candidate of chain) {
|
|
292
|
+
if (scope)
|
|
293
|
+
hit = walk(this.catalogs.get(cacheKey(candidate, scope)) ?? null, key);
|
|
294
|
+
hit ??= walk(this.catalogs.get(cacheKey(candidate, null)) ?? null, key);
|
|
295
|
+
if (hit !== null)
|
|
296
|
+
break;
|
|
297
|
+
}
|
|
215
298
|
// Base catalogs are the floor: consulted only once the loader's own catalogs
|
|
216
299
|
// have missed, so an app's keys always win, but ngwr's built-in strings are
|
|
217
300
|
// still there when the app's catalog doesn't carry them.
|
|
218
|
-
hit ??= this.walkBase(
|
|
301
|
+
hit ??= this.walkBase(chain, key);
|
|
219
302
|
if (hit === null) {
|
|
220
303
|
// Fire a background load so a future read can resolve it.
|
|
221
|
-
void this.
|
|
304
|
+
void this.loadChain(lc, scope ?? null);
|
|
222
305
|
return this.config.missingHandler(key, lc);
|
|
223
306
|
}
|
|
224
307
|
return wrInterpolate(hit, params);
|
|
@@ -232,11 +315,13 @@ class WrI18n {
|
|
|
232
315
|
* Look a key up in the registered base catalogs, later contributions first so
|
|
233
316
|
* a feature can shadow an earlier one.
|
|
234
317
|
*/
|
|
235
|
-
walkBase(
|
|
236
|
-
for (
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
318
|
+
walkBase(chain, key) {
|
|
319
|
+
for (const locale of chain) {
|
|
320
|
+
for (let i = this.baseCatalogs.length - 1; i >= 0; i--) {
|
|
321
|
+
const hit = walk(this.baseCatalogs[i][locale] ?? null, key);
|
|
322
|
+
if (hit !== null)
|
|
323
|
+
return hit;
|
|
324
|
+
}
|
|
240
325
|
}
|
|
241
326
|
return null;
|
|
242
327
|
}
|
|
@@ -248,6 +333,39 @@ class WrI18n {
|
|
|
248
333
|
}
|
|
249
334
|
return this.config.defaultLocale;
|
|
250
335
|
}
|
|
336
|
+
/**
|
|
337
|
+
* Load a `(locale, scope)` catalog and, when the locale carries a region, the
|
|
338
|
+
* bare-language one under it. Both go in the cache; `t()` reads them in that
|
|
339
|
+
* order.
|
|
340
|
+
*/
|
|
341
|
+
loadChain(locale, scope) {
|
|
342
|
+
return Promise.all(localeChain(locale).map(candidate => this.loadCatalog(candidate, scope)));
|
|
343
|
+
}
|
|
344
|
+
/** One warning per service, not one per switch. @internal */
|
|
345
|
+
warnedLocaleIdDrift = false;
|
|
346
|
+
/**
|
|
347
|
+
* Say once, in dev, that a runtime switch moved the text and nothing else.
|
|
348
|
+
*
|
|
349
|
+
* The mismatch is otherwise invisible in the way that costs the most time:
|
|
350
|
+
* the catalog strings all change, which reads as "the switch worked", and the
|
|
351
|
+
* dates and numbers beside them are still correct-looking output in the old
|
|
352
|
+
* locale. Silent when the new locale IS `LOCALE_ID`, because then nothing is
|
|
353
|
+
* out of step and a warning that fires when everything agrees is one people
|
|
354
|
+
* learn to ignore. Production builds drop the call entirely via `isDevMode()`
|
|
355
|
+
* tree-shaking.
|
|
356
|
+
*/
|
|
357
|
+
warnOnLocaleIdDrift(locale) {
|
|
358
|
+
if (this.warnedLocaleIdDrift || locale === this.localeId)
|
|
359
|
+
return;
|
|
360
|
+
this.warnedLocaleIdDrift = true;
|
|
361
|
+
// eslint-disable-next-line no-console -- dev-mode validation
|
|
362
|
+
console.warn(`[NGWR] WrI18n.use('${locale}') switched the catalog, but LOCALE_ID is still '${this.localeId}'. ` +
|
|
363
|
+
`LOCALE_ID is an Angular constant and WR_DATE_LOCALE resolves from it once at bootstrap, so ` +
|
|
364
|
+
`formatted dates and numbers do not follow the switch and stay on '${this.localeId}': the date ` +
|
|
365
|
+
`adapter (and so wr-calendar / wr-date-picker), the wrDate / wrNumber / wrPlural pipes, ` +
|
|
366
|
+
`wr-input-number, wr-statistic, wr-counter, wr-pagination's total and wr-file-upload's sizes. ` +
|
|
367
|
+
`Reload the app with the new LOCALE_ID to move those, or keep runtime switching to text.`);
|
|
368
|
+
}
|
|
251
369
|
loadCatalog(locale, scope) {
|
|
252
370
|
const ck = cacheKey(locale, scope);
|
|
253
371
|
const cached = this.catalogs.get(ck);
|
|
@@ -276,10 +394,10 @@ class WrI18n {
|
|
|
276
394
|
this.inflight.set(ck, promise);
|
|
277
395
|
return promise;
|
|
278
396
|
}
|
|
279
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.
|
|
280
|
-
static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.
|
|
397
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: WrI18n, deps: [], target: i0.ɵɵFactoryTarget.Service });
|
|
398
|
+
static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: WrI18n });
|
|
281
399
|
}
|
|
282
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.
|
|
400
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: WrI18n, decorators: [{
|
|
283
401
|
type: Service
|
|
284
402
|
}], ctorParameters: () => [] });
|
|
285
403
|
|
|
@@ -306,10 +424,10 @@ class WrTPipe {
|
|
|
306
424
|
transform(key, params, scope) {
|
|
307
425
|
return this.i18n.t(key, params ?? undefined, scope);
|
|
308
426
|
}
|
|
309
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.
|
|
310
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.1.
|
|
427
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: WrTPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
428
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.1.5", ngImport: i0, type: WrTPipe, isStandalone: true, name: "wrT", pure: false });
|
|
311
429
|
}
|
|
312
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.
|
|
430
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: WrTPipe, decorators: [{
|
|
313
431
|
type: Pipe,
|
|
314
432
|
args: [{ name: 'wrT', pure: false }]
|
|
315
433
|
}] });
|
|
@@ -350,10 +468,10 @@ class WrTDirective {
|
|
|
350
468
|
this.host.nativeElement.textContent = this.text();
|
|
351
469
|
});
|
|
352
470
|
}
|
|
353
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.
|
|
354
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.
|
|
471
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: WrTDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
472
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.5", type: WrTDirective, isStandalone: true, selector: "[wrT]", inputs: { wrT: { classPropertyName: "wrT", publicName: "wrT", isSignal: true, isRequired: true, transformFunction: null }, wrTParams: { classPropertyName: "wrTParams", publicName: "wrTParams", isSignal: true, isRequired: false, transformFunction: null }, wrTScope: { classPropertyName: "wrTScope", publicName: "wrTScope", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
|
|
355
473
|
}
|
|
356
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.
|
|
474
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: WrTDirective, decorators: [{
|
|
357
475
|
type: Directive,
|
|
358
476
|
args: [{
|
|
359
477
|
selector: '[wrT]',
|
|
@@ -422,8 +540,18 @@ class WrI18nHttpLoader {
|
|
|
422
540
|
*/
|
|
423
541
|
function provideWrI18n(options = {}) {
|
|
424
542
|
const { loader, ...config } = options;
|
|
425
|
-
const
|
|
426
|
-
|
|
543
|
+
const providers = [
|
|
544
|
+
{
|
|
545
|
+
provide: WR_I18N_CONFIG,
|
|
546
|
+
// A factory rather than a value: `defaultLocale` falls back to `LOCALE_ID`,
|
|
547
|
+
// which only an injection context can read.
|
|
548
|
+
useFactory: () => ({
|
|
549
|
+
...DEFAULT_WR_I18N_CONFIG,
|
|
550
|
+
...config,
|
|
551
|
+
...resolveWrI18nLocales(config),
|
|
552
|
+
}),
|
|
553
|
+
},
|
|
554
|
+
];
|
|
427
555
|
if (loader)
|
|
428
556
|
providers.push({ provide: WR_I18N_LOADER, useValue: loader });
|
|
429
557
|
return makeEnvironmentProviders(providers);
|