@intlayer/docs 8.12.5-canary.0 → 9.0.0-canary.3
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/dist/cjs/generated/docs.entry.cjs +320 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +320 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +16 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/cli/doc-review.md +110 -4
- package/docs/ar/cli/index.md +1 -1
- package/docs/ar/cli/scan.md +1 -1
- package/docs/ar/configuration.md +36 -3
- package/docs/ar/dictionary/condition.md +167 -5
- package/docs/ar/dictionary/enumeration.md +540 -6
- package/docs/ar/dictionary/file.md +151 -1
- package/docs/ar/dictionary/gender.md +168 -7
- package/docs/ar/dictionary/nesting.md +173 -65
- package/docs/ar/dictionary/plurial.md +174 -5
- package/docs/ar/dictionary/translation.md +156 -2
- package/docs/ar/dynamic_dictionaries/collections.md +1 -1
- package/docs/ar/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/ar/dynamic_dictionaries/index.md +1 -1
- package/docs/ar/dynamic_dictionaries/variants.md +1 -1
- package/docs/ar/intlayer_with_vite+react.md +31 -31
- package/docs/ar/plugins/sync-json.md +222 -49
- package/docs/ar/releases/v8.md +187 -1
- package/docs/ar/releases/v9.md +232 -0
- package/docs/bn/cli/index.md +1 -1
- package/docs/bn/cli/scan.md +1 -1
- package/docs/bn/configuration.md +36 -3
- package/docs/cs/cli/index.md +1 -1
- package/docs/cs/cli/scan.md +1 -1
- package/docs/cs/configuration.md +35 -2
- package/docs/de/cli/doc-review.md +110 -4
- package/docs/de/cli/index.md +1 -1
- package/docs/de/cli/scan.md +1 -1
- package/docs/de/configuration.md +35 -2
- package/docs/de/dictionary/condition.md +167 -5
- package/docs/de/dictionary/enumeration.md +777 -7
- package/docs/de/dictionary/file.md +151 -1
- package/docs/de/dictionary/gender.md +168 -7
- package/docs/de/dictionary/nesting.md +173 -65
- package/docs/de/dictionary/plurial.md +347 -7
- package/docs/de/dictionary/translation.md +156 -2
- package/docs/de/dynamic_dictionaries/collections.md +1 -1
- package/docs/de/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/de/dynamic_dictionaries/index.md +1 -1
- package/docs/de/dynamic_dictionaries/variants.md +1 -1
- package/docs/de/intlayer_with_vite+react.md +48 -48
- package/docs/de/migration_from_i18next_to_intlayer.md +1 -1
- package/docs/de/migration_from_next-i18next_to_intlayer.md +1 -1
- package/docs/de/migration_from_next-intl_to_intlayer.md +1 -1
- package/docs/de/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
- package/docs/de/migration_from_react-i18next_to_intlayer.md +1 -1
- package/docs/de/migration_from_vue-i18n_to_intlayer.md +1 -1
- package/docs/de/plugins/sync-json.md +222 -49
- package/docs/de/releases/v8.md +197 -1
- package/docs/de/releases/v9.md +232 -0
- package/docs/en/CI_CD.md +7 -7
- package/docs/en/cli/ci.md +62 -8
- package/docs/en/cli/doc-review.md +110 -4
- package/docs/en/cli/index.md +1 -1
- package/docs/en/cli/scan.md +1 -1
- package/docs/en/compat/i18n-js.md +44 -0
- package/docs/en/compat/i18next.md +59 -0
- package/docs/en/compat/index.md +51 -0
- package/docs/en/compat/lingui.md +44 -0
- package/docs/en/compat/next-i18next.md +57 -0
- package/docs/en/compat/next-intl.md +59 -0
- package/docs/en/compat/next-translate.md +45 -0
- package/docs/en/compat/ngx-translate.md +45 -0
- package/docs/en/compat/nuxtjs-i18n.md +46 -0
- package/docs/en/compat/polyglot.md +45 -0
- package/docs/en/compat/react-i18next.md +58 -0
- package/docs/en/compat/react-intl.md +55 -0
- package/docs/en/compat/svelte-i18n.md +47 -0
- package/docs/en/compat/transloco.md +45 -0
- package/docs/en/compat/vue-i18n.md +58 -0
- package/docs/en/configuration.md +35 -2
- package/docs/en/dictionary/condition.md +163 -1
- package/docs/en/dictionary/enumeration.md +309 -7
- package/docs/en/dictionary/file.md +151 -1
- package/docs/en/dictionary/gender.md +162 -1
- package/docs/en/dictionary/nesting.md +173 -9
- package/docs/en/dictionary/plurial.md +155 -10
- package/docs/en/dictionary/translation.md +145 -52
- package/docs/en/dynamic_dictionaries/collections.md +1 -1
- package/docs/en/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/en/dynamic_dictionaries/index.md +1 -1
- package/docs/en/dynamic_dictionaries/variants.md +1 -1
- package/docs/en/migration_from_i18next_to_intlayer.md +1 -1
- package/docs/en/migration_from_next-i18next_to_intlayer.md +1 -1
- package/docs/en/migration_from_next-intl_to_intlayer.md +1 -1
- package/docs/en/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
- package/docs/en/migration_from_react-i18next_to_intlayer.md +1 -1
- package/docs/en/migration_from_vue-i18n_to_intlayer.md +1 -1
- package/docs/en/plugins/sync-json.md +56 -2
- package/docs/en/releases/v8.md +187 -1
- package/docs/en/releases/v9.md +220 -0
- package/docs/en-GB/cli/doc-review.md +110 -4
- package/docs/en-GB/cli/index.md +1 -1
- package/docs/en-GB/cli/scan.md +1 -1
- package/docs/en-GB/configuration.md +35 -2
- package/docs/en-GB/dictionary/condition.md +364 -1
- package/docs/en-GB/dictionary/enumeration.md +577 -5
- package/docs/en-GB/dictionary/file.md +317 -1
- package/docs/en-GB/dictionary/gender.md +375 -2
- package/docs/en-GB/dictionary/nesting.md +368 -71
- package/docs/en-GB/dictionary/plurial.md +347 -7
- package/docs/en-GB/dictionary/translation.md +320 -32
- package/docs/en-GB/dynamic_dictionaries/collections.md +1 -1
- package/docs/en-GB/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/en-GB/dynamic_dictionaries/index.md +1 -1
- package/docs/en-GB/dynamic_dictionaries/variants.md +1 -1
- package/docs/en-GB/plugins/sync-json.md +245 -13
- package/docs/en-GB/releases/v8.md +1 -1
- package/docs/en-GB/releases/v9.md +220 -0
- package/docs/es/cli/doc-review.md +110 -4
- package/docs/es/cli/index.md +1 -1
- package/docs/es/cli/scan.md +1 -1
- package/docs/es/configuration.md +36 -3
- package/docs/es/dictionary/condition.md +167 -5
- package/docs/es/dictionary/enumeration.md +537 -12
- package/docs/es/dictionary/file.md +151 -1
- package/docs/es/dictionary/gender.md +168 -7
- package/docs/es/dictionary/nesting.md +173 -65
- package/docs/es/dictionary/plurial.md +347 -7
- package/docs/es/dictionary/translation.md +156 -2
- package/docs/es/dynamic_dictionaries/collections.md +1 -1
- package/docs/es/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/es/dynamic_dictionaries/index.md +1 -1
- package/docs/es/dynamic_dictionaries/variants.md +1 -1
- package/docs/es/migration_from_i18next_to_intlayer.md +1 -1
- package/docs/es/migration_from_next-i18next_to_intlayer.md +1 -1
- package/docs/es/migration_from_next-intl_to_intlayer.md +1 -1
- package/docs/es/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
- package/docs/es/migration_from_react-i18next_to_intlayer.md +1 -1
- package/docs/es/migration_from_vue-i18n_to_intlayer.md +1 -1
- package/docs/es/plugins/sync-json.md +222 -49
- package/docs/es/releases/v8.md +187 -1
- package/docs/es/releases/v9.md +228 -0
- package/docs/fr/cli/doc-review.md +110 -4
- package/docs/fr/cli/index.md +1 -1
- package/docs/fr/cli/scan.md +1 -1
- package/docs/fr/configuration.md +49 -16
- package/docs/fr/dictionary/condition.md +369 -6
- package/docs/fr/dictionary/enumeration.md +540 -6
- package/docs/fr/dictionary/file.md +151 -1
- package/docs/fr/dictionary/gender.md +168 -7
- package/docs/fr/dictionary/nesting.md +357 -86
- package/docs/fr/dictionary/plurial.md +174 -5
- package/docs/fr/dictionary/translation.md +156 -2
- package/docs/fr/dynamic_dictionaries/collections.md +1 -1
- package/docs/fr/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/fr/dynamic_dictionaries/index.md +1 -1
- package/docs/fr/dynamic_dictionaries/variants.md +1 -1
- package/docs/fr/migration_from_i18next_to_intlayer.md +1 -1
- package/docs/fr/migration_from_next-i18next_to_intlayer.md +1 -1
- package/docs/fr/migration_from_next-intl_to_intlayer.md +1 -1
- package/docs/fr/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
- package/docs/fr/migration_from_react-i18next_to_intlayer.md +1 -1
- package/docs/fr/migration_from_vue-i18n_to_intlayer.md +1 -1
- package/docs/fr/plugins/sync-json.md +244 -12
- package/docs/fr/releases/v8.md +187 -1
- package/docs/fr/releases/v9.md +220 -0
- package/docs/hi/cli/doc-review.md +110 -4
- package/docs/hi/cli/index.md +1 -1
- package/docs/hi/cli/scan.md +1 -1
- package/docs/hi/configuration.md +49 -16
- package/docs/hi/dictionary/condition.md +167 -5
- package/docs/hi/dictionary/enumeration.md +540 -6
- package/docs/hi/dictionary/file.md +151 -1
- package/docs/hi/dictionary/gender.md +168 -7
- package/docs/hi/dictionary/nesting.md +173 -65
- package/docs/hi/dictionary/plurial.md +174 -5
- package/docs/hi/dictionary/translation.md +155 -5
- package/docs/hi/dynamic_dictionaries/collections.md +1 -1
- package/docs/hi/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/hi/dynamic_dictionaries/index.md +1 -1
- package/docs/hi/dynamic_dictionaries/variants.md +1 -1
- package/docs/hi/plugins/sync-json.md +221 -48
- package/docs/hi/releases/v8.md +188 -2
- package/docs/hi/releases/v9.md +232 -0
- package/docs/id/cli/doc-review.md +110 -4
- package/docs/id/cli/index.md +1 -1
- package/docs/id/cli/scan.md +1 -1
- package/docs/id/configuration.md +35 -2
- package/docs/id/dictionary/condition.md +167 -5
- package/docs/id/dictionary/enumeration.md +540 -6
- package/docs/id/dictionary/file.md +318 -2
- package/docs/id/dictionary/gender.md +381 -8
- package/docs/id/dictionary/nesting.md +357 -86
- package/docs/id/dictionary/plurial.md +174 -5
- package/docs/id/dictionary/translation.md +156 -2
- package/docs/id/dynamic_dictionaries/collections.md +1 -1
- package/docs/id/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/id/dynamic_dictionaries/index.md +1 -1
- package/docs/id/dynamic_dictionaries/variants.md +1 -1
- package/docs/id/plugins/sync-json.md +222 -49
- package/docs/id/releases/v8.md +191 -2
- package/docs/id/releases/v9.md +232 -0
- package/docs/it/cli/doc-review.md +110 -4
- package/docs/it/cli/index.md +1 -1
- package/docs/it/cli/scan.md +1 -1
- package/docs/it/configuration.md +49 -16
- package/docs/it/dictionary/condition.md +167 -5
- package/docs/it/dictionary/enumeration.md +540 -6
- package/docs/it/dictionary/file.md +318 -2
- package/docs/it/dictionary/gender.md +168 -7
- package/docs/it/dictionary/nesting.md +173 -65
- package/docs/it/dictionary/plurial.md +347 -7
- package/docs/it/dictionary/translation.md +156 -2
- package/docs/it/dynamic_dictionaries/collections.md +1 -1
- package/docs/it/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/it/dynamic_dictionaries/index.md +1 -1
- package/docs/it/dynamic_dictionaries/variants.md +1 -1
- package/docs/it/intlayer_with_vite+react.md +0 -48
- package/docs/it/migration_from_i18next_to_intlayer.md +1 -1
- package/docs/it/migration_from_next-i18next_to_intlayer.md +1 -1
- package/docs/it/migration_from_next-intl_to_intlayer.md +1 -1
- package/docs/it/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
- package/docs/it/migration_from_react-i18next_to_intlayer.md +1 -1
- package/docs/it/migration_from_vue-i18n_to_intlayer.md +1 -1
- package/docs/it/plugins/sync-json.md +224 -51
- package/docs/it/releases/v8.md +200 -2
- package/docs/it/releases/v9.md +232 -0
- package/docs/ja/cli/doc-review.md +110 -4
- package/docs/ja/cli/index.md +1 -1
- package/docs/ja/cli/scan.md +1 -1
- package/docs/ja/configuration.md +50 -17
- package/docs/ja/dictionary/condition.md +167 -5
- package/docs/ja/dictionary/enumeration.md +540 -6
- package/docs/ja/dictionary/file.md +151 -1
- package/docs/ja/dictionary/gender.md +168 -7
- package/docs/ja/dictionary/nesting.md +173 -65
- package/docs/ja/dictionary/plurial.md +174 -5
- package/docs/ja/dictionary/translation.md +169 -8
- package/docs/ja/dynamic_dictionaries/collections.md +1 -1
- package/docs/ja/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/ja/dynamic_dictionaries/index.md +1 -1
- package/docs/ja/dynamic_dictionaries/variants.md +1 -1
- package/docs/ja/intlayer_with_vite+react.md +290 -0
- package/docs/ja/migration_from_i18next_to_intlayer.md +1 -1
- package/docs/ja/migration_from_next-i18next_to_intlayer.md +1 -1
- package/docs/ja/migration_from_next-intl_to_intlayer.md +1 -1
- package/docs/ja/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
- package/docs/ja/migration_from_react-i18next_to_intlayer.md +1 -1
- package/docs/ja/migration_from_vue-i18n_to_intlayer.md +1 -1
- package/docs/ja/plugins/sync-json.md +222 -49
- package/docs/ja/releases/v8.md +193 -4
- package/docs/ja/releases/v9.md +232 -0
- package/docs/ko/cli/doc-review.md +110 -4
- package/docs/ko/cli/index.md +1 -1
- package/docs/ko/cli/scan.md +1 -1
- package/docs/ko/configuration.md +49 -16
- package/docs/ko/dictionary/condition.md +167 -5
- package/docs/ko/dictionary/enumeration.md +540 -6
- package/docs/ko/dictionary/file.md +151 -1
- package/docs/ko/dictionary/gender.md +168 -7
- package/docs/ko/dictionary/nesting.md +173 -65
- package/docs/ko/dictionary/plurial.md +174 -5
- package/docs/ko/dictionary/translation.md +169 -8
- package/docs/ko/dynamic_dictionaries/collections.md +1 -1
- package/docs/ko/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/ko/dynamic_dictionaries/index.md +1 -1
- package/docs/ko/dynamic_dictionaries/variants.md +1 -1
- package/docs/ko/intlayer_with_vite+react.md +48 -490
- package/docs/ko/migration_from_i18next_to_intlayer.md +1 -1
- package/docs/ko/migration_from_next-i18next_to_intlayer.md +1 -1
- package/docs/ko/migration_from_next-intl_to_intlayer.md +1 -1
- package/docs/ko/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
- package/docs/ko/migration_from_react-i18next_to_intlayer.md +1 -1
- package/docs/ko/migration_from_vue-i18n_to_intlayer.md +1 -1
- package/docs/ko/plugins/sync-json.md +223 -50
- package/docs/ko/releases/v8.md +192 -1
- package/docs/ko/releases/v9.md +232 -0
- package/docs/nl/cli/index.md +1 -1
- package/docs/nl/cli/scan.md +1 -1
- package/docs/nl/configuration.md +36 -3
- package/docs/pl/cli/doc-review.md +110 -4
- package/docs/pl/cli/index.md +1 -1
- package/docs/pl/cli/scan.md +1 -1
- package/docs/pl/configuration.md +35 -2
- package/docs/pl/dictionary/condition.md +167 -5
- package/docs/pl/dictionary/enumeration.md +540 -6
- package/docs/pl/dictionary/file.md +318 -2
- package/docs/pl/dictionary/gender.md +168 -7
- package/docs/pl/dictionary/nesting.md +173 -65
- package/docs/pl/dictionary/plurial.md +174 -5
- package/docs/pl/dictionary/translation.md +156 -2
- package/docs/pl/dynamic_dictionaries/collections.md +1 -1
- package/docs/pl/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/pl/dynamic_dictionaries/index.md +1 -1
- package/docs/pl/dynamic_dictionaries/variants.md +1 -1
- package/docs/pl/plugins/sync-json.md +246 -14
- package/docs/pl/releases/v8.md +188 -2
- package/docs/pl/releases/v9.md +232 -0
- package/docs/pt/cli/doc-review.md +110 -4
- package/docs/pt/cli/index.md +1 -1
- package/docs/pt/cli/scan.md +1 -1
- package/docs/pt/configuration.md +49 -16
- package/docs/pt/dictionary/condition.md +167 -5
- package/docs/pt/dictionary/enumeration.md +540 -6
- package/docs/pt/dictionary/file.md +151 -1
- package/docs/pt/dictionary/gender.md +168 -7
- package/docs/pt/dictionary/nesting.md +173 -65
- package/docs/pt/dictionary/plurial.md +347 -7
- package/docs/pt/dictionary/translation.md +156 -2
- package/docs/pt/dynamic_dictionaries/collections.md +1 -1
- package/docs/pt/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/pt/dynamic_dictionaries/index.md +1 -1
- package/docs/pt/dynamic_dictionaries/variants.md +1 -1
- package/docs/pt/migration_from_i18next_to_intlayer.md +1 -1
- package/docs/pt/migration_from_next-i18next_to_intlayer.md +1 -1
- package/docs/pt/migration_from_next-intl_to_intlayer.md +1 -1
- package/docs/pt/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
- package/docs/pt/migration_from_react-i18next_to_intlayer.md +1 -1
- package/docs/pt/migration_from_vue-i18n_to_intlayer.md +1 -1
- package/docs/pt/plugins/sync-json.md +222 -49
- package/docs/pt/releases/v8.md +187 -1
- package/docs/pt/releases/v9.md +232 -0
- package/docs/ru/cli/doc-review.md +110 -4
- package/docs/ru/cli/index.md +1 -1
- package/docs/ru/cli/scan.md +1 -1
- package/docs/ru/configuration.md +35 -2
- package/docs/ru/dictionary/condition.md +366 -39
- package/docs/ru/dictionary/enumeration.md +777 -7
- package/docs/ru/dictionary/file.md +318 -2
- package/docs/ru/dictionary/gender.md +168 -7
- package/docs/ru/dictionary/nesting.md +368 -71
- package/docs/ru/dictionary/plurial.md +347 -7
- package/docs/ru/dictionary/translation.md +321 -33
- package/docs/ru/dynamic_dictionaries/collections.md +1 -1
- package/docs/ru/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/ru/dynamic_dictionaries/index.md +1 -1
- package/docs/ru/dynamic_dictionaries/variants.md +1 -1
- package/docs/ru/intlayer_with_vite+react.md +48 -47
- package/docs/ru/migration_from_i18next_to_intlayer.md +1 -1
- package/docs/ru/migration_from_next-i18next_to_intlayer.md +1 -1
- package/docs/ru/migration_from_next-intl_to_intlayer.md +1 -1
- package/docs/ru/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
- package/docs/ru/migration_from_react-i18next_to_intlayer.md +1 -1
- package/docs/ru/migration_from_vue-i18n_to_intlayer.md +1 -1
- package/docs/ru/plugins/sync-json.md +269 -95
- package/docs/ru/releases/v8.md +194 -2
- package/docs/ru/releases/v9.md +232 -0
- package/docs/tr/cli/doc-review.md +110 -4
- package/docs/tr/cli/index.md +1 -1
- package/docs/tr/cli/scan.md +1 -1
- package/docs/tr/configuration.md +35 -2
- package/docs/tr/dictionary/condition.md +167 -5
- package/docs/tr/dictionary/enumeration.md +540 -6
- package/docs/tr/dictionary/file.md +151 -1
- package/docs/tr/dictionary/gender.md +168 -7
- package/docs/tr/dictionary/nesting.md +173 -65
- package/docs/tr/dictionary/plurial.md +174 -5
- package/docs/tr/dictionary/translation.md +156 -2
- package/docs/tr/dynamic_dictionaries/collections.md +1 -1
- package/docs/tr/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/tr/dynamic_dictionaries/index.md +1 -1
- package/docs/tr/dynamic_dictionaries/variants.md +1 -1
- package/docs/tr/migration_from_i18next_to_intlayer.md +1 -1
- package/docs/tr/migration_from_next-i18next_to_intlayer.md +1 -1
- package/docs/tr/migration_from_next-intl_to_intlayer.md +1 -1
- package/docs/tr/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
- package/docs/tr/migration_from_react-i18next_to_intlayer.md +1 -1
- package/docs/tr/migration_from_vue-i18n_to_intlayer.md +1 -1
- package/docs/tr/plugins/sync-json.md +222 -50
- package/docs/tr/releases/v8.md +187 -1
- package/docs/tr/releases/v9.md +232 -0
- package/docs/uk/cli/doc-review.md +110 -4
- package/docs/uk/cli/index.md +1 -1
- package/docs/uk/cli/scan.md +1 -1
- package/docs/uk/configuration.md +35 -2
- package/docs/uk/dictionary/condition.md +167 -5
- package/docs/uk/dictionary/enumeration.md +540 -6
- package/docs/uk/dictionary/file.md +318 -2
- package/docs/uk/dictionary/gender.md +381 -8
- package/docs/uk/dictionary/nesting.md +173 -65
- package/docs/uk/dictionary/plurial.md +174 -5
- package/docs/uk/dictionary/translation.md +156 -2
- package/docs/uk/dynamic_dictionaries/collections.md +1 -1
- package/docs/uk/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/uk/dynamic_dictionaries/index.md +1 -1
- package/docs/uk/dynamic_dictionaries/variants.md +1 -1
- package/docs/uk/plugins/sync-json.md +56 -2
- package/docs/uk/releases/v8.md +191 -3
- package/docs/uk/releases/v9.md +232 -0
- package/docs/ur/cli/index.md +1 -1
- package/docs/ur/cli/scan.md +1 -1
- package/docs/ur/configuration.md +36 -3
- package/docs/vi/cli/doc-review.md +110 -4
- package/docs/vi/cli/index.md +1 -1
- package/docs/vi/cli/scan.md +1 -1
- package/docs/vi/configuration.md +50 -17
- package/docs/vi/dictionary/condition.md +167 -5
- package/docs/vi/dictionary/enumeration.md +591 -14
- package/docs/vi/dictionary/file.md +318 -2
- package/docs/vi/dictionary/gender.md +168 -7
- package/docs/vi/dictionary/nesting.md +357 -86
- package/docs/vi/dictionary/plurial.md +174 -5
- package/docs/vi/dictionary/translation.md +156 -2
- package/docs/vi/dynamic_dictionaries/collections.md +1 -1
- package/docs/vi/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/vi/dynamic_dictionaries/index.md +1 -1
- package/docs/vi/dynamic_dictionaries/variants.md +1 -1
- package/docs/vi/plugins/sync-json.md +230 -57
- package/docs/vi/releases/v8.md +190 -1
- package/docs/vi/releases/v9.md +232 -0
- package/docs/zh/cli/doc-review.md +110 -4
- package/docs/zh/cli/index.md +1 -1
- package/docs/zh/cli/scan.md +1 -1
- package/docs/zh/configuration.md +49 -16
- package/docs/zh/dictionary/condition.md +167 -5
- package/docs/zh/dictionary/enumeration.md +540 -6
- package/docs/zh/dictionary/file.md +151 -1
- package/docs/zh/dictionary/gender.md +168 -7
- package/docs/zh/dictionary/nesting.md +173 -65
- package/docs/zh/dictionary/plurial.md +174 -5
- package/docs/zh/dictionary/translation.md +169 -8
- package/docs/zh/dynamic_dictionaries/collections.md +1 -1
- package/docs/zh/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/zh/dynamic_dictionaries/index.md +1 -1
- package/docs/zh/dynamic_dictionaries/variants.md +1 -1
- package/docs/zh/intlayer_with_vite+react.md +48 -288
- package/docs/zh/plugins/sync-json.md +223 -50
- package/docs/zh/releases/v8.md +1 -1
- package/docs/zh/releases/v9.md +220 -0
- package/package.json +7 -7
- package/src/generated/docs.entry.ts +320 -0
- package/dist/esm/_virtual/_rolldown/runtime.mjs +0 -8
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-03-13
|
|
3
|
-
updatedAt:
|
|
3
|
+
updatedAt: 2026-06-21
|
|
4
4
|
title: Wtyczka Sync JSON
|
|
5
5
|
description: Synchronizuj słowniki Intlayer z zewnętrznymi plikami JSON i18n (i18next, next-intl, react-intl, vue-i18n i inne). Zachowaj istniejące i18n, korzystając z Intlayer do zarządzania, tłumaczenia i testowania swoich komunikatów.
|
|
6
6
|
keywords:
|
|
@@ -24,6 +24,9 @@ slugs:
|
|
|
24
24
|
- sync-json
|
|
25
25
|
youtubeVideo: https://www.youtube.com/watch?v=MpGMxniDHNg
|
|
26
26
|
history:
|
|
27
|
+
- version: 9.0.0
|
|
28
|
+
date: 2026-06-21
|
|
29
|
+
changes: "Dodano opcję splitKeys (jeden słownik na klucz przestrzeni nazw najwyższego poziomu) dla układów jednoplikowych next-intl / react-intl"
|
|
27
30
|
- version: 6.1.6
|
|
28
31
|
date: 2025-10-05
|
|
29
32
|
changes: "Pierwsza dokumentacja wtyczki Sync JSON"
|
|
@@ -59,9 +62,65 @@ pnpm add -D @intlayer/sync-json-plugin
|
|
|
59
62
|
npm i -D @intlayer/sync-json-plugin
|
|
60
63
|
```
|
|
61
64
|
|
|
62
|
-
##
|
|
65
|
+
## Plugins
|
|
63
66
|
|
|
64
|
-
|
|
67
|
+
This package provides two plugins:
|
|
68
|
+
|
|
69
|
+
- `loadJSON`: Load JSON files into Intlayer dictionaries.
|
|
70
|
+
- This plugin is used to load JSON files from a source and will be loaded into Intlayer dictionaries. It can scan all the codebase and search for specific JSON files.
|
|
71
|
+
This plugin can be used
|
|
72
|
+
- if you use an i18n library that impose a specific location for your JSON to be loaded (ex: `next-intl`, `i18next`, `react-intl`, `vue-i18n`, etc.), but you want to place your content declaration where you want in your code base.
|
|
73
|
+
- It can also be used if you want to fetch your messages from a remote source (ex: a CMS, a API, etc.) and store your messages in JSON files.
|
|
74
|
+
|
|
75
|
+
> Under the hood, this plugin will scan all the codebase and search for specific JSON files and load them into Intlayer dictionaries.
|
|
76
|
+
> Note that this plugin will not write the output and translations back to the JSON files.
|
|
77
|
+
|
|
78
|
+
- `syncJSON`: Synchronize JSON files with Intlayer dictionaries.
|
|
79
|
+
- This plugin is used to synchronize JSON files with Intlayer dictionaries. It can scan the given location and load the JSON that match the pattern for specific JSON files. This plugin is useful if you want to get the benefits of Intlayer while using another i18n library.
|
|
80
|
+
|
|
81
|
+
## Using both plugins
|
|
82
|
+
|
|
83
|
+
```ts fileName="intlayer.config.ts"
|
|
84
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
85
|
+
import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
|
|
86
|
+
|
|
87
|
+
const config: IntlayerConfig = {
|
|
88
|
+
internationalization: {
|
|
89
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
90
|
+
defaultLocale: Locales.ENGLISH,
|
|
91
|
+
},
|
|
92
|
+
|
|
93
|
+
// Keep your current JSON files in sync with Intlayer dictionaries
|
|
94
|
+
plugins: [
|
|
95
|
+
/**
|
|
96
|
+
* Will load all the JSON files in the src that match the pattern {key}.i18n json
|
|
97
|
+
*/
|
|
98
|
+
loadJSON({
|
|
99
|
+
source: ({ key }) => `./src/**/${key}.i18n.json`,
|
|
100
|
+
locale: Locales.ENGLISH,
|
|
101
|
+
priority: 1, // Ensures these JSON files take precedence over files at `./locales/en/${key}.json`
|
|
102
|
+
format: "intlayer", // Format of the JSON content
|
|
103
|
+
}),
|
|
104
|
+
/**
|
|
105
|
+
* Will load, and write the output and translations back to the JSON files in the locales directory
|
|
106
|
+
*/
|
|
107
|
+
syncJSON({
|
|
108
|
+
format: "i18next",
|
|
109
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
110
|
+
priority: 0,
|
|
111
|
+
format: "i18next",
|
|
112
|
+
}),
|
|
113
|
+
],
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
export default config;
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## `syncJSON` plugin
|
|
120
|
+
|
|
121
|
+
### Quick start
|
|
122
|
+
|
|
123
|
+
Add the plugin to your `intlayer.config.ts` and point it at your existing JSON structure.
|
|
65
124
|
|
|
66
125
|
```ts fileName="intlayer.config.ts"
|
|
67
126
|
import { Locales, type IntlayerConfig } from "intlayer";
|
|
@@ -78,6 +137,7 @@ const config: IntlayerConfig = {
|
|
|
78
137
|
syncJSON({
|
|
79
138
|
// Układ per-locale, per-namespace (np. next-intl, i18next z przestrzeniami nazw)
|
|
80
139
|
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
140
|
+
format: "icu",
|
|
81
141
|
}),
|
|
82
142
|
],
|
|
83
143
|
};
|
|
@@ -88,14 +148,27 @@ export default config;
|
|
|
88
148
|
Alternatywa: pojedynczy plik na locale (częste w konfiguracjach i18next/react-intl):
|
|
89
149
|
|
|
90
150
|
```ts fileName="intlayer.config.ts"
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
151
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
152
|
+
import { syncJSON } from "@intlayer/sync-json-plugin";
|
|
153
|
+
|
|
154
|
+
const config: IntlayerConfig = {
|
|
155
|
+
internationalization: {
|
|
156
|
+
locales: [Locales.ENGLISH, Locales.FRENCH],
|
|
157
|
+
defaultLocale: Locales.ENGLISH,
|
|
158
|
+
},
|
|
159
|
+
plugins: [
|
|
160
|
+
syncJSON({
|
|
161
|
+
format: "i18next",
|
|
162
|
+
source: ({ locale }) => `./locales/${locale}.json`,
|
|
163
|
+
format: "i18next",
|
|
164
|
+
}),
|
|
165
|
+
],
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
export default config;
|
|
96
169
|
```
|
|
97
170
|
|
|
98
|
-
|
|
171
|
+
#### How it works
|
|
99
172
|
|
|
100
173
|
- Odczyt: wtyczka wykrywa pliki JSON zdefiniowane przez twój builder `source` i ładuje je jako słowniki Intlayer.
|
|
101
174
|
- Zapis: po budowaniu i wypełnianiu, zapisuje zlokalizowane pliki JSON z powrotem pod te same ścieżki (z końcowym znakiem nowej linii, aby uniknąć problemów z formatowaniem).
|
|
@@ -109,6 +182,7 @@ syncJSON({
|
|
|
109
182
|
location?: string, // opcjonalna etykieta, domyślnie: "plugin"
|
|
110
183
|
priority?: number, // opcjonalny priorytet do rozstrzygania konfliktów, domyślnie: 0
|
|
111
184
|
format?: 'intlayer' | 'icu' | 'i18next', // opcjonalny formatator, używany dla kompatybilności z runtime Intlayer
|
|
185
|
+
splitKeys?: boolean, // opcjonalnie, dzieli pojedynczy plik na jeden słownik na klucz przestrzeni nazw najwyższego poziomu (automatycznie wykrywane)
|
|
112
186
|
});
|
|
113
187
|
```
|
|
114
188
|
|
|
@@ -133,11 +207,43 @@ syncJSON({
|
|
|
133
207
|
}),
|
|
134
208
|
```
|
|
135
209
|
|
|
136
|
-
|
|
210
|
+
#### `splitKeys` (boolean)
|
|
137
211
|
|
|
138
|
-
|
|
212
|
+
Kontroluje, czy pojedynczy plik JSON, którego **klucze pierwszego poziomu są przestrzeniami nazw**, powinien stać się jednym słownikiem na klucz najwyższego poziomu, zamiast pojedynczego słownika zawierającego cały plik.
|
|
139
213
|
|
|
140
|
-
|
|
214
|
+
Odpowiada to modelowi przestrzeni nazw bibliotek takich jak `next-intl` i `react-intl`, gdzie jeden plik `messages/{locale}.json` grupuje kilka przestrzeni nazw według kluczy pierwszego poziomu, z których każda jest adresowana niezależnie (np. `useTranslations('Hero')` rozwiązuje się do słownika `Hero`).
|
|
215
|
+
|
|
216
|
+
- `undefined` (domyślnie): **automatycznie wykrywane** — plik jest dzielony, gdy wzorzec `source` nie zawiera segmentu `{key}` (jeden plik zawiera każdą przestrzeń nazw), i zachowywany jako pojedynczy słownik w przeciwnym razie (jeden plik na klucz).
|
|
217
|
+
- `true`: zawsze dzieli każdy klucz najwyższego poziomu na własny słownik.
|
|
218
|
+
- `false`: nigdy nie dzieli; cały plik staje się pojedynczym słownikiem.
|
|
219
|
+
|
|
220
|
+
Biorąc pod uwagę pojedynczy plik `messages/{locale}.json`:
|
|
221
|
+
|
|
222
|
+
```json fileName="messages/en.json"
|
|
223
|
+
{
|
|
224
|
+
"Hero": { "title": "Full-stack developer" },
|
|
225
|
+
"Nav": { "work": "Work", "about": "About" },
|
|
226
|
+
"About": { "lead": "I build apps end to end." }
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
```ts fileName="intlayer.config.ts"
|
|
231
|
+
syncJSON({
|
|
232
|
+
format: "icu",
|
|
233
|
+
source: ({ locale }) => `./messages/${locale}.json`,
|
|
234
|
+
// splitKeys: true, // domyślne, ponieważ wzorzec nie zawiera segmentu `{key}`
|
|
235
|
+
}),
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
Tworzy to trzy słowniki — `Hero`, `Nav` i `About` — dzięki czemu `useTranslations('Hero')` (next-intl) rozwiązuje się poprawnie. Podczas zapisu zwrotnego wszystkie przestrzenie nazw są ponownie składane w ten sam plik dla danej lokalizacji.
|
|
239
|
+
|
|
240
|
+
> Kiedy zachowujesz jawny segment `{key}` w swoim `source` (np. `./locales/${locale}/${key}.json`), każdy plik jest już jedną przestrzenią nazw, więc dzielenie jest domyślnie wyłączone.
|
|
241
|
+
|
|
242
|
+
### Multiple JSON sources and priority
|
|
243
|
+
|
|
244
|
+
You can add multiple `syncJSON` plugins to synchronize different JSON sources. This is useful when you have multiple i18n libraries or different JSON structures in your project.
|
|
245
|
+
|
|
246
|
+
#### System priorytetów
|
|
141
247
|
|
|
142
248
|
Gdy wiele wtyczek celuje w ten sam klucz słownika, parametr `priority` decyduje, która wtyczka ma pierwszeństwo:
|
|
143
249
|
|
|
@@ -186,9 +292,135 @@ const config: IntlayerConfig = {
|
|
|
186
292
|
export default config;
|
|
187
293
|
```
|
|
188
294
|
|
|
189
|
-
|
|
295
|
+
## Load JSON plugin
|
|
296
|
+
|
|
297
|
+
### Quick start
|
|
298
|
+
|
|
299
|
+
Add the plugin to your `intlayer.config.ts` to ingest existing JSON files as Intlayer dictionaries. This plugin is read‑only (no writes to disk):
|
|
300
|
+
|
|
301
|
+
```ts fileName="intlayer.config.ts"
|
|
302
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
303
|
+
import { loadJSON } from "@intlayer/sync-json-plugin";
|
|
304
|
+
|
|
305
|
+
const config: IntlayerConfig = {
|
|
306
|
+
internationalization: {
|
|
307
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
308
|
+
defaultLocale: Locales.ENGLISH,
|
|
309
|
+
},
|
|
310
|
+
|
|
311
|
+
plugins: [
|
|
312
|
+
// Ingest JSON messages located anywhere in your source tree
|
|
313
|
+
loadJSON({
|
|
314
|
+
source: ({ key }) => `./src/**/${key}.i18n.json`,
|
|
315
|
+
// Load a single locale per plugin instance (defaults to the config defaultLocale)
|
|
316
|
+
locale: Locales.ENGLISH,
|
|
317
|
+
priority: 0,
|
|
318
|
+
}),
|
|
319
|
+
],
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
export default config;
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
Alternative: per‑locale layout, still read‑only (only the selected locale is loaded):
|
|
326
|
+
|
|
327
|
+
```ts fileName="intlayer.config.ts"
|
|
328
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
329
|
+
import { loadJSON } from "@intlayer/sync-json-plugin";
|
|
330
|
+
|
|
331
|
+
const config: IntlayerConfig = {
|
|
332
|
+
internationalization: {
|
|
333
|
+
locales: [Locales.ENGLISH, Locales.FRENCH],
|
|
334
|
+
defaultLocale: Locales.ENGLISH,
|
|
335
|
+
},
|
|
336
|
+
plugins: [
|
|
337
|
+
loadJSON({
|
|
338
|
+
// Only files for Locales.FRENCH will be loaded from this pattern
|
|
339
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
340
|
+
locale: Locales.FRENCH,
|
|
341
|
+
}),
|
|
342
|
+
],
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
export default config;
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
### How it works
|
|
349
|
+
|
|
350
|
+
- Discover: builds a glob from your `source` builder and collects matching JSON files.
|
|
351
|
+
- Ingest: loads each JSON file as an Intlayer dictionary with the provided `locale`.
|
|
352
|
+
- Read‑only: does not write or format output files; use `syncJSON` if you need round‑trip sync.
|
|
353
|
+
- Auto‑fill ready: defines a `fill` pattern so `intlayer content fill` can populate missing keys.
|
|
354
|
+
|
|
355
|
+
### API
|
|
356
|
+
|
|
357
|
+
```ts
|
|
358
|
+
loadJSON({
|
|
359
|
+
// Build paths to your JSON. `locale` is optional if your structure has no locale segment
|
|
360
|
+
source: ({ key, locale }) => string,
|
|
361
|
+
|
|
362
|
+
// Target locale for the dictionaries loaded by this plugin instance
|
|
363
|
+
// Defaults to configuration.internationalization.defaultLocale
|
|
364
|
+
locale?: Locale,
|
|
365
|
+
|
|
366
|
+
// Optional label to identify the source
|
|
367
|
+
location?: string, // default: "plugin"
|
|
368
|
+
|
|
369
|
+
// Priority used for conflict resolution against other sources
|
|
370
|
+
priority?: number, // default: 0
|
|
371
|
+
|
|
372
|
+
// Optional formatter for the JSON content
|
|
373
|
+
format?: 'intlayer' | 'icu' | 'i18next', // default: 'intlayer'
|
|
374
|
+
|
|
375
|
+
// Split a single file into one dictionary per top-level key (auto-detected)
|
|
376
|
+
splitKeys?: boolean,
|
|
377
|
+
});
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
#### `format` ('intlayer' | 'icu' | 'i18next')
|
|
381
|
+
|
|
382
|
+
Specifies the formatter to use for the dictionary content when loading JSON files. This allows using different message formatting syntaxes compatible with various i18n libraries.
|
|
383
|
+
|
|
384
|
+
- `'intlayer'`: The default Intlayer formatter (default).
|
|
385
|
+
- `'icu'`: Uses ICU message formatting (compatible with libraries like react-intl, vue-i18n).
|
|
386
|
+
- `'i18next'`: Uses i18next message formatting (compatible with i18next, next-i18next, Solid-i18next).
|
|
387
|
+
|
|
388
|
+
**Example:**
|
|
389
|
+
|
|
390
|
+
```ts
|
|
391
|
+
loadJSON({
|
|
392
|
+
source: ({ key }) => `./src/**/${key}.i18n.json`,
|
|
393
|
+
locale: Locales.ENGLISH,
|
|
394
|
+
format: "icu", // Use ICU formatting for compatibility
|
|
395
|
+
}),
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
#### `splitKeys` (boolean)
|
|
399
|
+
|
|
400
|
+
Takie samo zachowanie jak w [`syncJSON`](#splitkeys-boolean): gdy pojedynczy plik JSON grupuje kilka przestrzeni nazw według kluczy pierwszego poziomu, każdy klucz najwyższego poziomu staje się własnym słownikiem.
|
|
401
|
+
|
|
402
|
+
- `undefined` (domyślnie): **automatycznie wykrywane** — dzieli, gdy wzorzec `source` nie zawiera segmentu `{key}`, w przeciwnym razie pojedynczy słownik.
|
|
403
|
+
- `true` / `false`: wymusza lub wyłącza dzielenie.
|
|
404
|
+
|
|
405
|
+
```ts
|
|
406
|
+
loadJSON({
|
|
407
|
+
source: ({ locale }) => `./messages/${locale}.json`,
|
|
408
|
+
format: "icu",
|
|
409
|
+
// splitKeys auto-enabled: `Hero`, `Nav`, `About`, … each become a dictionary
|
|
410
|
+
}),
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
### Behavior and conventions
|
|
414
|
+
|
|
415
|
+
- If your `source` mask includes a locale placeholder, only files for the selected `locale` are ingested.
|
|
416
|
+
- Jeśli w masce nie ma segmentu `{key}`, każdy klucz najwyższego poziomu pliku staje się domyślnie własnym słownikiem (zobacz [`splitKeys`](#splitkeys-boolean)). Ustaw `splitKeys: false`, aby zamiast tego załadować cały plik jako pojedynczy słownik indeksowy.
|
|
417
|
+
- Keys are derived from file paths by substituting the `{key}` placeholder in your `source` builder.
|
|
418
|
+
- The plugin only uses discovered files and does not fabricate missing locales or keys.
|
|
419
|
+
- The `fill` path is inferred from your `source` and used to update missing values via CLI when you opt‑in.
|
|
420
|
+
|
|
421
|
+
## Conflict resolution
|
|
190
422
|
|
|
191
|
-
|
|
423
|
+
When the same translation key exists in multiple JSON sources:
|
|
192
424
|
|
|
193
425
|
1. Wtyczka o najwyższym priorytecie decyduje o ostatecznej wartości
|
|
194
426
|
2. Źródła o niższym priorytecie są używane jako zapasowe dla brakujących kluczy
|
package/docs/pl/releases/v8.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-09-22
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-06-14
|
|
4
4
|
title: Nowy Intlayer v8. Co nowego?
|
|
5
5
|
description: Odkryj, co nowego w Intlayer v8. Znaczące ulepszenia w doświadczeniu deweloperskim, walidacji treści i zarządzaniu słownikami.
|
|
6
6
|
keywords:
|
|
@@ -409,6 +409,16 @@ Więcej informacji znajdziesz w [Dokumentacji treści HTML](https://github.com/a
|
|
|
409
409
|
|
|
410
410
|
---
|
|
411
411
|
|
|
412
|
+
## Pliki zawartości YAML i Markdown (v8.10.0)
|
|
413
|
+
|
|
414
|
+
Możesz teraz deklarować zawartość bezpośrednio przy użyciu rozszerzeń plików `.content.md` i `.content.yaml`. Jest to idealne rozwiązanie dla długich treści, blogów, dokumentacji i polityk prywatności.
|
|
415
|
+
|
|
416
|
+
Pliki te są w pełni edytowalne z poziomu Edytora Wizualnego (Visual Editor), co zapewnia usprawniony przepływ pracy dla nietechnicznych członków zespołu.
|
|
417
|
+
|
|
418
|
+
Więcej szczegółów znajdziesz w [Dokumentacji plików zawartości YAML](https://intlayer.org/doc/concept/content#yaml-content-file) oraz [Dokumentacji plików zawartości Markdown](https://intlayer.org/doc/concept/content/markdown).
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
412
422
|
## Niestandardowe przepisywanie URL
|
|
413
423
|
|
|
414
424
|
Intlayer v8 wprowadza obsługę **niestandardowego przepisywania URL**, co pozwala definiować ścieżki specyficzne dla lokalizacji, różne od standardowej struktury `/locale/path`. To potężna funkcja poprawiająca lokalne SEO i zapewniająca bardziej naturalne doświadczenie użytkownika dla osób nieposługujących się angielskim.
|
|
@@ -753,6 +763,58 @@ export default {
|
|
|
753
763
|
</Tab>
|
|
754
764
|
</Tabs>
|
|
755
765
|
|
|
766
|
+
## Reguły liczby mnogiej Unicode CLDR (v8.8.0)
|
|
767
|
+
|
|
768
|
+
Wprowadzono nowy helper węzła `plural` oparty na regułach liczby mnogiej zdefiniowanych przez projekt Unicode CLDR, co poprawia obsługę złożonych języków.
|
|
769
|
+
|
|
770
|
+
```typescript fileName="src/openings.content.ts"
|
|
771
|
+
import { plural, t, type Dictionary } from "intlayer";
|
|
772
|
+
|
|
773
|
+
const openingsContent = {
|
|
774
|
+
key: "total_openings",
|
|
775
|
+
content: {
|
|
776
|
+
totalOpenings: t({
|
|
777
|
+
en: plural({
|
|
778
|
+
one: "{{count}} opening",
|
|
779
|
+
other: "{{count}} openings",
|
|
780
|
+
}),
|
|
781
|
+
fr: plural({
|
|
782
|
+
one: "{{count}} offre",
|
|
783
|
+
other: "{{count}} offres",
|
|
784
|
+
}),
|
|
785
|
+
}),
|
|
786
|
+
},
|
|
787
|
+
} satisfies Dictionary;
|
|
788
|
+
|
|
789
|
+
export default openingsContent;
|
|
790
|
+
```
|
|
791
|
+
|
|
792
|
+
Możesz następnie przekazać liczbę dynamicznie w komponencie swojego frameworka:
|
|
793
|
+
|
|
794
|
+
```tsx
|
|
795
|
+
import type { FC } from "react";
|
|
796
|
+
import { useIntlayer } from "react-intlayer";
|
|
797
|
+
|
|
798
|
+
const OpeningsComponent: FC<{ count: number }> = ({ count }) => {
|
|
799
|
+
const { totalOpenings } = useIntlayer("total_openings");
|
|
800
|
+
|
|
801
|
+
return (
|
|
802
|
+
<div>
|
|
803
|
+
{/* Po angielsku: */}
|
|
804
|
+
{/* count=0 → "0 openings" (other) */}
|
|
805
|
+
{/* count=1 → "1 opening" (one) */}
|
|
806
|
+
{/* count=2 → "2 openings" (other) */}
|
|
807
|
+
{/* count=21 → "21 openings" (other) */}
|
|
808
|
+
<p>{totalOpenings(count)}</p>
|
|
809
|
+
</div>
|
|
810
|
+
);
|
|
811
|
+
};
|
|
812
|
+
```
|
|
813
|
+
|
|
814
|
+
Więcej informacji znajdziesz w [Dokumentacji pluralizacji](https://intlayer.org/doc/concept/content/plural).
|
|
815
|
+
|
|
816
|
+
---
|
|
817
|
+
|
|
756
818
|
## Walidacja schematów treści
|
|
757
819
|
|
|
758
820
|
W Intlayer v8 wprowadzono walidację schematów dla słowników. Teraz możesz definiować wielokrotnego użytku schematy walidacji w konfiguracji przy użyciu Zod i stosować je w plikach z zawartością. Dzięki temu Twoja zawartość zawsze będzie zgodna z oczekiwaną strukturą, a błędy zostaną wykryte podczas budowania (build time).
|
|
@@ -797,6 +859,34 @@ Jeżeli zawartość nie spełnia schematu (np. tytuł jest zbyt krótki), proces
|
|
|
797
859
|
|
|
798
860
|
---
|
|
799
861
|
|
|
862
|
+
## TypeScript: Akcesory prymitywów IntlayerNode
|
|
863
|
+
|
|
864
|
+
Typ `IntlayerNode` został zaktualizowany, aby umożliwić wywoływanie prymitywnych metod JavaScript bezpośrednio na węzłach zawartości. Umożliwia to interakcję ze zlokalizowaną zawartością bezpośrednio tak, jakby była standardowym typem prymitywnym string, number, boolean lub array.
|
|
865
|
+
|
|
866
|
+
Wspierane w React, Preact, Solid, Svelte, Vue i Angular.
|
|
867
|
+
|
|
868
|
+
### Przykład dla String
|
|
869
|
+
|
|
870
|
+
```typescript
|
|
871
|
+
content.placeholder; // Zwraca IntlayerNode<string>
|
|
872
|
+
content.placeholder.value; // Zwraca string
|
|
873
|
+
content.placeholder.toString(); // Zwraca string
|
|
874
|
+
content.placeholder.toLowerCase(); // Zwraca string
|
|
875
|
+
String(content.placeholder); // Zwraca string
|
|
876
|
+
content.placeholder.toUpperCase(); // Zwraca string z wielkimi literami
|
|
877
|
+
content.placeholder.replace("a", "b"); // Zwraca zmodyfikowany string
|
|
878
|
+
```
|
|
879
|
+
|
|
880
|
+
### Przykład dla Array
|
|
881
|
+
|
|
882
|
+
```typescript
|
|
883
|
+
content.myArrayOfString // Zwraca IntlayerNode<Array<string>>
|
|
884
|
+
content.myArrayOfString.find(...) // Zwraca element
|
|
885
|
+
content.myArrayOfString.join(', ') // Zwraca połączony string
|
|
886
|
+
```
|
|
887
|
+
|
|
888
|
+
---
|
|
889
|
+
|
|
800
890
|
### Ulepszone automatyczne wykrywanie zawartości
|
|
801
891
|
|
|
802
892
|
W wersji v8 Intlayer inteligentnie wykrywa składnię Markdown, tagi HTML oraz wstawienia zmiennych w ciągach treści. Oznacza to, że często możesz pominąć pomocnicze funkcje takie jak `md()`, `html()` czy `insert()`.
|
|
@@ -1002,6 +1092,17 @@ Rozszerzenie Intlayer dla VSCode otrzymuje znaczące aktualizacje w wersji v8, a
|
|
|
1002
1092
|
|
|
1003
1093
|
---
|
|
1004
1094
|
|
|
1095
|
+
## Narzędzia: Watcher C++ i LSP oparty na OXC (v8.12.0)
|
|
1096
|
+
|
|
1097
|
+
Intlayer v8.12.0 przynosi znaczące ulepszenia w doświadczeniu deweloperskim:
|
|
1098
|
+
|
|
1099
|
+
- **Parcel Watcher**: Watcher zawartości został zmigrowany z `chokidar` do `@parcel/watcher`, wykorzystując natywne śledzenie plików w C++, aby zapewnić szybsze aktualizacje i znacznie niższe zużycie pamięci.
|
|
1100
|
+
- **Nowy Language Server Protocol (LSP)**: Dostępny jest teraz zupełnie nowy LSP. Zbudowany w oparciu o parsowanie OXC, pomaga Twojemu IDE i agentom AI bezproblemowo łączyć wywołania `useIntlayer('my-key')` z odpowiadającymi im plikami `.content` i odwrotnie.
|
|
1101
|
+
|
|
1102
|
+
Więcej szczegółów znajdziesz w [Dokumentacji LSP](https://intlayer.org/doc/lsp).
|
|
1103
|
+
|
|
1104
|
+
---
|
|
1105
|
+
|
|
1005
1106
|
## Optymalizacje kompilatora
|
|
1006
1107
|
|
|
1007
1108
|
Intlayer v8 zawiera nową warstwę cache'owania dla kompilatora Markdown i HTML. Zapewnia to, że identyczne ciągi treści z tą samą konfiguracją są parsowane tylko raz, co znacząco zmniejsza narzut podczas ponownych renderów lub przy użyciu tej samej treści w wielu miejscach.
|
|
@@ -1057,6 +1158,48 @@ Intlayer v8 zawiera nową warstwę cache'owania dla kompilatora Markdown i HTML.
|
|
|
1057
1158
|
|
|
1058
1159
|
---
|
|
1059
1160
|
|
|
1161
|
+
## Eksperymentalne optymalizacje budowania: Minify i Purge (v8.7.0)
|
|
1162
|
+
|
|
1163
|
+
Intlayer v8.7.0 wprowadza nowe eksperymentalne funkcje budowania w Twoim `intlayer.config.ts`, zaprojektowane w celu optymalizacji produkcyjnego bundle'a:
|
|
1164
|
+
|
|
1165
|
+
- **Minifikacja słowników (Dictionary Minification)**: Minifikuje pliki słowników w celu zmniejszenia ich rozmiaru.
|
|
1166
|
+
- **Usuwanie nieużywanych kluczy (Unused Key Purging)**: Skanuje i usuwa nieużywane klucze tłumaczeń ze słowników, zmieniając nazwy aktywnych kluczy na krótkie znaki (np. `"products" -> "a"`, `"pricing" -> "b"`). Zmniejsza to rozmiar bundle'a nawet o 5%.
|
|
1167
|
+
- **Wyłączenie sprawdzania TypeScript**: Przyspiesza budowanie poprzez wyłączenie sprawdzania typów TypeScript podczas etapu kompilacji.
|
|
1168
|
+
|
|
1169
|
+
```typescript fileName="intlayer.config.ts"
|
|
1170
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
1171
|
+
|
|
1172
|
+
const config: IntlayerConfig = {
|
|
1173
|
+
internationalization: {
|
|
1174
|
+
locales: [Locales.ENGLISH, Locales.FRENCH],
|
|
1175
|
+
defaultLocale: Locales.ENGLISH,
|
|
1176
|
+
},
|
|
1177
|
+
dictionary: {
|
|
1178
|
+
importMode: "dynamic",
|
|
1179
|
+
},
|
|
1180
|
+
build: {
|
|
1181
|
+
/**
|
|
1182
|
+
* Minifikuj słowniki, aby zmniejszyć rozmiar bundle'a.
|
|
1183
|
+
*/
|
|
1184
|
+
minify: true,
|
|
1185
|
+
|
|
1186
|
+
/**
|
|
1187
|
+
* Usuń nieużywane klucze w słownikach
|
|
1188
|
+
*/
|
|
1189
|
+
purge: true,
|
|
1190
|
+
|
|
1191
|
+
/**
|
|
1192
|
+
* Wskazuje, czy proces budowania powinien sprawdzać typy TypeScript
|
|
1193
|
+
*/
|
|
1194
|
+
checkTypes: false,
|
|
1195
|
+
},
|
|
1196
|
+
};
|
|
1197
|
+
|
|
1198
|
+
export default config;
|
|
1199
|
+
```
|
|
1200
|
+
|
|
1201
|
+
---
|
|
1202
|
+
|
|
1060
1203
|
## Elastyczność: Ujednolicony tryb importu
|
|
1061
1204
|
|
|
1062
1205
|
Właściwość boolean `live` została oznaczona jako przestarzała na rzecz bardziej wszechstronnej właściwości `importMode`. Pozwala to na jednoznaczne określenie, w jaki sposób słowniki powinny być ładowane: statycznie, dynamicznie lub poprzez synchronizację w czasie rzeczywistym.
|
|
@@ -1173,7 +1316,7 @@ Wcześniej `contentDir` było używane zarówno do obserwowania plików `.conten
|
|
|
1173
1316
|
|
|
1174
1317
|
**Migracja:**
|
|
1175
1318
|
|
|
1176
|
-
Jeśli wcześniej ustawiłeś `contentDir`, Intlayer v8 użyje go również jako domyślnego dla `codeDir`, ale zaloguje ostrzeżenie.
|
|
1319
|
+
Jeśli wcześniej ustawiłeś `contentDir`, Intlayer v8 użyje go również jako domyślnego dla `codeDir`, ale zaloguje ostrzeżenie. Powiniensy jawnie zdefiniować `codeDir` w swojej konfiguracji.
|
|
1177
1320
|
|
|
1178
1321
|
**Zachowanie w v7:**
|
|
1179
1322
|
|
|
@@ -1204,6 +1347,49 @@ Treści Markdown i HTML w Svelte są teraz automatycznie parsowane do HTML podcz
|
|
|
1204
1347
|
|
|
1205
1348
|
---
|
|
1206
1349
|
|
|
1350
|
+
## Wsparcie dla Angulara: Vite Bundler (v8.11.0)
|
|
1351
|
+
|
|
1352
|
+
Dla użytkowników Angulara, Intlayer wspiera teraz natywnie bundler Vite poprzez nowy, niestandardowy plugin esbuild, co przyspiesza czas programowania i budowania.
|
|
1353
|
+
|
|
1354
|
+
Szczegóły dotyczące konfiguracji znajdziesz w [Dokumentacji środowiska Angular](https://intlayer.org/doc/environment/angular).
|
|
1355
|
+
|
|
1356
|
+
---
|
|
1357
|
+
|
|
1358
|
+
## Generowanie mapy strony - Sitemap (v8.6.0)
|
|
1359
|
+
|
|
1360
|
+
Intlayer generuje teraz automatycznie mapy stron (sitemaps) na podstawie Twoich lokalizacji (locales) i trybu routingu. Jest to szczególnie przydatne do optymalizacji SEO w architekturach routerów takich jak TanStack Router:
|
|
1361
|
+
|
|
1362
|
+
```typescript fileName="src/routes/sitemap.xml.ts"
|
|
1363
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
1364
|
+
import { generateSitemap } from "intlayer";
|
|
1365
|
+
|
|
1366
|
+
const SITE_URL = (
|
|
1367
|
+
import.meta.env.VITE_SITE_URL ?? "http://localhost:3000"
|
|
1368
|
+
).replace(/\/$/, "");
|
|
1369
|
+
|
|
1370
|
+
export const Route = createFileRoute("/sitemap.xml")({
|
|
1371
|
+
server: {
|
|
1372
|
+
handlers: {
|
|
1373
|
+
GET: async () => {
|
|
1374
|
+
const sitemap = generateSitemap(
|
|
1375
|
+
[
|
|
1376
|
+
{ path: "/", changefreq: "daily", priority: 1.0 },
|
|
1377
|
+
{ path: "/about", changefreq: "monthly", priority: 0.8 },
|
|
1378
|
+
],
|
|
1379
|
+
{ siteUrl: SITE_URL }
|
|
1380
|
+
);
|
|
1381
|
+
|
|
1382
|
+
return new Response(sitemap, {
|
|
1383
|
+
headers: { "Content-Type": "application/xml" },
|
|
1384
|
+
});
|
|
1385
|
+
},
|
|
1386
|
+
},
|
|
1387
|
+
},
|
|
1388
|
+
});
|
|
1389
|
+
```
|
|
1390
|
+
|
|
1391
|
+
---
|
|
1392
|
+
|
|
1207
1393
|
## Notatki migracyjne z v7
|
|
1208
1394
|
|
|
1209
1395
|
### Zmiany w konfiguracji
|