@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: مكون مزامنة JSON
|
|
5
5
|
description: مزامنة قواميس Intlayer مع ملفات JSON الخاصة بالتدويل من طرف ثالث (i18next، next-intl، react-intl، vue-i18n، والمزيد). احتفظ بنظام التدويل الحالي لديك أثناء استخدام Intlayer لإدارة وترجمة واختبار رسائلك.
|
|
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: "إضافة خيار splitKeys (قاموس واحد لكل مفتاح مساحة اسم من المستوى الأعلى) لتخطيطات الملف الواحد في next-intl / react-intl"
|
|
27
30
|
- version: 7.5.0
|
|
28
31
|
date: 2025-12-13
|
|
29
32
|
changes: "إضافة دعم تنسيقات ICU و i18next"
|
|
@@ -62,7 +65,63 @@ pnpm add -D @intlayer/sync-json-plugin
|
|
|
62
65
|
npm i -D @intlayer/sync-json-plugin
|
|
63
66
|
```
|
|
64
67
|
|
|
65
|
-
##
|
|
68
|
+
## Plugins
|
|
69
|
+
|
|
70
|
+
توفر هذه الحزمة مكونين إضافيين:
|
|
71
|
+
|
|
72
|
+
- `loadJSON`: تحميل ملفات JSON إلى قواميس Intlayer.
|
|
73
|
+
- يستخدم هذا المكون الإضافي لتحميل ملفات JSON من مصدر وسيتم تحميلها في قواميس Intlayer. يمكنه مسح جميع قواعد التعليمات البرمجية والبحث عن ملفات JSON محددة.
|
|
74
|
+
يمكن استخدام هذا المكون الإضافي
|
|
75
|
+
- إذا كنت تستخدم مكتبة i18n تفرض موقعًا محددًا لملفات JSON الخاصة بك ليتم تحميلها (على سبيل المثال: `next-intl`، `i18next`، `react-intl`، `vue-i18n`، إلخ)، ولكنك تريد وضع إعلان المحتوى الخاص بك حيثما تريد في قاعدة التعليمات البرمجية الخاصة بك.
|
|
76
|
+
- يمكن استخدامه أيضًا إذا كنت ترغب في جلب رسائلك من مصدر بعيد (على سبيل المثال: نظام إدارة محتوى، واجهة برمجة تطبيقات، إلخ) وتخزين رسائلك في ملفات JSON.
|
|
77
|
+
|
|
78
|
+
> تحت الغطاء، سيقوم هذا المكون الإضافي بمسح جميع قواعد التعليمات البرمجية والبحث عن ملفات JSON محددة وتحميلها في قواميس Intlayer.
|
|
79
|
+
> لاحظ أن هذا المكون الإضافي لن يكتب المخرجات والترجمات مرة أخرى إلى ملفات JSON.
|
|
80
|
+
|
|
81
|
+
- `syncJSON`: مزامنة ملفات JSON مع قواميس Intlayer.
|
|
82
|
+
- يستخدم هذا المكون الإضافي لمزامنة ملفات JSON مع قواميس Intlayer. يمكنه مسح الموقع المحدد وتحميل ملفات JSON التي تتطابق مع النمط لملفات JSON محددة. هذا المكون الإضافي مفيد إذا كنت ترغب في الحصول على فوائد Intlayer أثناء استخدام مكتبة i18n أخرى.
|
|
83
|
+
|
|
84
|
+
## Using both plugins
|
|
85
|
+
|
|
86
|
+
```ts fileName="intlayer.config.ts"
|
|
87
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
88
|
+
import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
|
|
89
|
+
|
|
90
|
+
const config: IntlayerConfig = {
|
|
91
|
+
internationalization: {
|
|
92
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
93
|
+
defaultLocale: Locales.ENGLISH,
|
|
94
|
+
},
|
|
95
|
+
|
|
96
|
+
// Keep your current JSON files in sync with Intlayer dictionaries
|
|
97
|
+
plugins: [
|
|
98
|
+
/**
|
|
99
|
+
* Will load all the JSON files in the src that match the pattern {key}.i18n json
|
|
100
|
+
*/
|
|
101
|
+
loadJSON({
|
|
102
|
+
source: ({ key }) => `./src/**/${key}.i18n.json`,
|
|
103
|
+
locale: Locales.ENGLISH,
|
|
104
|
+
priority: 1, // Ensures these JSON files take precedence over files at `./locales/en/${key}.json`
|
|
105
|
+
format: "intlayer", // Format of the JSON content
|
|
106
|
+
}),
|
|
107
|
+
/**
|
|
108
|
+
* Will load, and write the output and translations back to the JSON files in the locales directory
|
|
109
|
+
*/
|
|
110
|
+
syncJSON({
|
|
111
|
+
format: "i18next",
|
|
112
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
113
|
+
priority: 0,
|
|
114
|
+
format: "i18next",
|
|
115
|
+
}),
|
|
116
|
+
],
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
export default config;
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## `syncJSON` plugin
|
|
123
|
+
|
|
124
|
+
### Quick start
|
|
66
125
|
|
|
67
126
|
أضف المكون الإضافي إلى ملف `intlayer.config.ts` وأشر إلى هيكل JSON الحالي الخاص بك.
|
|
68
127
|
|
|
@@ -81,6 +140,7 @@ const config: IntlayerConfig = {
|
|
|
81
140
|
syncJSON({
|
|
82
141
|
// تخطيط لكل لغة ولكل مساحة أسماء (مثل next-intl، i18next مع مساحات الأسماء)
|
|
83
142
|
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
143
|
+
format: "icu",
|
|
84
144
|
}),
|
|
85
145
|
],
|
|
86
146
|
};
|
|
@@ -91,14 +151,27 @@ export default config;
|
|
|
91
151
|
البديل: ملف واحد لكل لغة (شائع مع إعدادات i18next/react-intl):
|
|
92
152
|
|
|
93
153
|
```ts fileName="intlayer.config.ts"
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
154
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
155
|
+
import { syncJSON } from "@intlayer/sync-json-plugin";
|
|
156
|
+
|
|
157
|
+
const config: IntlayerConfig = {
|
|
158
|
+
internationalization: {
|
|
159
|
+
locales: [Locales.ENGLISH, Locales.FRENCH],
|
|
160
|
+
defaultLocale: Locales.ENGLISH,
|
|
161
|
+
},
|
|
162
|
+
plugins: [
|
|
163
|
+
syncJSON({
|
|
164
|
+
format: "i18next",
|
|
165
|
+
source: ({ locale }) => `./locales/${locale}.json`,
|
|
166
|
+
format: "i18next",
|
|
167
|
+
}),
|
|
168
|
+
],
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
export default config;
|
|
99
172
|
```
|
|
100
173
|
|
|
101
|
-
|
|
174
|
+
#### كيف يعمل
|
|
102
175
|
|
|
103
176
|
- القراءة: يكتشف المكون الإضافي ملفات JSON من منشئ `source` الخاص بك ويحمّلها كقواميس Intlayer.
|
|
104
177
|
- الكتابة: بعد عمليات البناء والملء، يكتب ملفات JSON المحلية مرة أخرى إلى نفس المسارات (مع سطر جديد نهائي لتجنب مشاكل التنسيق).
|
|
@@ -112,6 +185,7 @@ syncJSON({
|
|
|
112
185
|
location?: string, // تسمية اختيارية، الافتراضي: "plugin"
|
|
113
186
|
priority?: number, // أولوية اختيارية لحل التعارضات، الافتراضي: 0
|
|
114
187
|
format?: 'intlayer' | 'icu' | 'i18next', // مُنسق اختياري، يُستخدم للتوافق مع وقت تشغيل Intlayer
|
|
188
|
+
splitKeys?: boolean, // اختياري، يقسم ملفًا واحدًا إلى قاموس واحد لكل مفتاح مساحة اسم من المستوى الأعلى (يتم الكشف عنه تلقائيًا)
|
|
115
189
|
});
|
|
116
190
|
```
|
|
117
191
|
|
|
@@ -136,17 +210,49 @@ syncJSON({
|
|
|
136
210
|
}),
|
|
137
211
|
```
|
|
138
212
|
|
|
139
|
-
|
|
213
|
+
#### `splitKeys` (منطقية)
|
|
214
|
+
|
|
215
|
+
يتحكم هذا الخيار فيما إذا كان ملف JSON واحد، الذي تكون **مفاتيحه من المستوى الأول هي مساحات أسماء**، يجب أن يصبح قاموسًا واحدًا لكل مفتاح من المستوى الأعلى، بدلاً من قاموس واحد يحمل الملف بأكمله.
|
|
216
|
+
|
|
217
|
+
يتطابق هذا مع نموذج مساحة الأسماء للمكتبات مثل `next-intl` و `react-intl`، حيث يقوم ملف `messages/{locale}.json` واحد بتجميع عدة مساحات أسماء بواسطة مفاتيحه من المستوى الأول، ويتم التعامل مع كل منها بشكل مستقل (على سبيل المثال، `useTranslations('Hero')` يحل إلى قاموس `Hero`).
|
|
218
|
+
|
|
219
|
+
- `undefined` (افتراضي): **يتم الكشف عنه تلقائيًا** — يتم تقسيم الملف عندما لا يحتوي نمط `source` على جزء `{key}` (ملف واحد يحمل كل مساحة اسم)، ويتم الاحتفاظ به كقاموس واحد بخلاف ذلك (ملف واحد لكل مفتاح).
|
|
220
|
+
- `true`: دائمًا يقسم كل مفتاح من المستوى الأعلى إلى قاموس خاص به.
|
|
221
|
+
- `false`: لا يقسم أبدًا؛ يصبح الملف بأكمله قاموسًا واحدًا.
|
|
222
|
+
|
|
223
|
+
بالنظر إلى ملف `messages/{locale}.json` واحد:
|
|
224
|
+
|
|
225
|
+
```json fileName="messages/en.json"
|
|
226
|
+
{
|
|
227
|
+
"Hero": { "title": "Full-stack developer" },
|
|
228
|
+
"Nav": { "work": "Work", "about": "About" },
|
|
229
|
+
"About": { "lead": "I build apps end to end." }
|
|
230
|
+
}
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
```ts fileName="intlayer.config.ts"
|
|
234
|
+
syncJSON({
|
|
235
|
+
format: "icu",
|
|
236
|
+
source: ({ locale }) => `./messages/${locale}.json`,
|
|
237
|
+
// splitKeys: true, // ضمني لأن النمط لا يحتوي على جزء `{key}`
|
|
238
|
+
}),
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
ينتج عن هذا ثلاثة قواميس — `Hero` و `Nav` و `About` — بحيث يتم حل `useTranslations('Hero')` (next-intl) بشكل صحيح. عند إعادة الكتابة، يتم إعادة تجميع جميع مساحات الأسماء في نفس الملف لكل لغة.
|
|
242
|
+
|
|
243
|
+
> عندما تحتفظ بالجزء الصريح `{key}` في `source` الخاص بك (على سبيل المثال، `./locales/${locale}/${key}.json`)، يكون كل ملف بالفعل مساحة اسم واحدة، لذلك يتم تعطيل التقسيم افتراضيًا.
|
|
244
|
+
|
|
245
|
+
### Multiple JSON sources and priority
|
|
140
246
|
|
|
141
247
|
يمكنك إضافة عدة مكونات إضافية `syncJSON` لمزامنة مصادر JSON مختلفة. هذا مفيد عندما يكون لديك مكتبات i18n متعددة أو هياكل JSON مختلفة في مشروعك.
|
|
142
248
|
|
|
143
|
-
|
|
249
|
+
#### Priority system
|
|
144
250
|
|
|
145
251
|
عندما تستهدف عدة مكونات إضافية نفس مفتاح القاموس، يحدد معامل `priority` أي مكون إضافي له الأسبقية:
|
|
146
252
|
|
|
147
253
|
- الأرقام الأعلى في الأولوية تفوز على الأقل منها
|
|
148
254
|
- الأولوية الافتراضية لملفات `.content` هي `0`
|
|
149
|
-
- الأولوية الافتراضية لملفات محتوى المكونات الإضافية هي
|
|
255
|
+
- الأولوية الافتراضية لملفات محتوى المكونات الإضافية هي `0`
|
|
150
256
|
- تتم معالجة المكونات الإضافية التي لها نفس الأولوية بالترتيب الذي تظهر به في التكوين
|
|
151
257
|
|
|
152
258
|
```ts fileName="intlayer.config.ts"
|
|
@@ -189,73 +295,140 @@ const config: IntlayerConfig = {
|
|
|
189
295
|
export default config;
|
|
190
296
|
```
|
|
191
297
|
|
|
192
|
-
|
|
298
|
+
## Load JSON plugin
|
|
193
299
|
|
|
194
|
-
|
|
300
|
+
### Quick start
|
|
195
301
|
|
|
196
|
-
|
|
197
|
-
2. تُستخدم المصادر ذات الأولوية الأقل كاحتياطيات للمفاتيح المفقودة
|
|
198
|
-
3. يتيح لك هذا الحفاظ على الترجمات القديمة أثناء الترحيل التدريجي إلى الهياكل الجديدة
|
|
302
|
+
أضف المكون الإضافي إلى ملف `intlayer.config.ts` لاستيعاب ملفات JSON الموجودة كقواميس Intlayer. هذا المكون الإضافي للقراءة فقط (لا يكتب على القرص):
|
|
199
303
|
|
|
200
|
-
|
|
304
|
+
```ts fileName="intlayer.config.ts"
|
|
305
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
306
|
+
import { loadJSON } from "@intlayer/sync-json-plugin";
|
|
201
307
|
|
|
202
|
-
|
|
308
|
+
const config: IntlayerConfig = {
|
|
309
|
+
internationalization: {
|
|
310
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
311
|
+
defaultLocale: Locales.ENGLISH,
|
|
312
|
+
},
|
|
313
|
+
|
|
314
|
+
plugins: [
|
|
315
|
+
// Ingest JSON messages located anywhere in your source tree
|
|
316
|
+
loadJSON({
|
|
317
|
+
source: ({ key }) => `./src/**/${key}.i18n.json`,
|
|
318
|
+
// Load a single locale per plugin instance (defaults to the config defaultLocale)
|
|
319
|
+
locale: Locales.ENGLISH,
|
|
320
|
+
priority: 0,
|
|
321
|
+
}),
|
|
322
|
+
],
|
|
323
|
+
};
|
|
203
324
|
|
|
204
|
-
|
|
325
|
+
export default config;
|
|
326
|
+
```
|
|
205
327
|
|
|
206
|
-
تخطيط
|
|
328
|
+
البديل: تخطيط لكل لغة، لا يزال للقراءة فقط (يتم تحميل اللغة المحددة فقط):
|
|
207
329
|
|
|
208
330
|
```ts fileName="intlayer.config.ts"
|
|
209
|
-
import {
|
|
331
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
332
|
+
import { loadJSON } from "@intlayer/sync-json-plugin";
|
|
210
333
|
|
|
211
|
-
|
|
334
|
+
const config: IntlayerConfig = {
|
|
335
|
+
internationalization: {
|
|
336
|
+
locales: [Locales.ENGLISH, Locales.FRENCH],
|
|
337
|
+
defaultLocale: Locales.ENGLISH,
|
|
338
|
+
},
|
|
212
339
|
plugins: [
|
|
213
|
-
|
|
214
|
-
|
|
340
|
+
loadJSON({
|
|
341
|
+
// Only files for Locales.FRENCH will be loaded from this pattern
|
|
215
342
|
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
343
|
+
locale: Locales.FRENCH,
|
|
216
344
|
}),
|
|
217
345
|
],
|
|
218
346
|
};
|
|
347
|
+
|
|
348
|
+
export default config;
|
|
219
349
|
```
|
|
220
350
|
|
|
221
|
-
###
|
|
351
|
+
### How it works
|
|
222
352
|
|
|
223
|
-
|
|
353
|
+
- اكتشاف: يبني glob من منشئ `source` الخاص بك ويجمع ملفات JSON المطابقة.
|
|
354
|
+
- استيعاب: يحمل كل ملف JSON كقاموس Intlayer باللغة المقدمة `locale`.
|
|
355
|
+
- للقراءة فقط: لا يكتب أو ينسق ملفات الإخراج؛ استخدم `syncJSON` إذا كنت بحاجة إلى مزامنة ذهابًا وإيابًا.
|
|
356
|
+
- جاهز للملء التلقائي: يحدد نمط `fill` بحيث يمكن لـ `intlayer content fill` ملء المفاتيح المفقودة عبر CLI عندما تختار ذلك.
|
|
224
357
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
358
|
+
### API
|
|
359
|
+
|
|
360
|
+
```ts
|
|
361
|
+
loadJSON({
|
|
362
|
+
// Build paths to your JSON. `locale` is optional if your structure has no locale segment
|
|
363
|
+
source: ({ key, locale }) => string,
|
|
364
|
+
|
|
365
|
+
// Target locale for the dictionaries loaded by this plugin instance
|
|
366
|
+
// Defaults to configuration.internationalization.defaultLocale
|
|
367
|
+
locale?: Locale,
|
|
368
|
+
|
|
369
|
+
// Optional label to identify the source
|
|
370
|
+
location?: string, // default: "plugin"
|
|
371
|
+
|
|
372
|
+
// Priority used for conflict resolution against other sources
|
|
373
|
+
priority?: number, // default: 0
|
|
374
|
+
|
|
375
|
+
// Optional formatter for the JSON content
|
|
376
|
+
format?: 'intlayer' | 'icu' | 'i18next', // default: 'intlayer'
|
|
377
|
+
|
|
378
|
+
// Split a single file into one dictionary per top-level key (auto-detected)
|
|
379
|
+
splitKeys?: boolean,
|
|
380
|
+
});
|
|
231
381
|
```
|
|
232
382
|
|
|
233
|
-
|
|
383
|
+
#### `format` ('intlayer' | 'icu' | 'i18next')
|
|
234
384
|
|
|
235
|
-
|
|
385
|
+
يحدد المُنسق الذي سيتم استخدامه لمحتوى القاموس عند تحميل ملفات JSON. يسمح هذا باستخدام صيغ تنسيق رسائل مختلفة متوافقة مع مكتبات i18n المتنوعة.
|
|
236
386
|
|
|
237
|
-
|
|
387
|
+
- `'intlayer'`: مُنسق Intlayer الافتراضي (الافتراضي).
|
|
388
|
+
- `'icu'`: يستخدم تنسيق رسائل ICU (متوافق مع مكتبات مثل react-intl، vue-i18n).
|
|
389
|
+
- `'i18next'`: يستخدم تنسيق رسائل i18next (متوافق مع i18next، next-i18next، Solid-i18next).
|
|
238
390
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
})
|
|
244
|
-
|
|
391
|
+
**مثال:**
|
|
392
|
+
|
|
393
|
+
```ts
|
|
394
|
+
loadJSON({
|
|
395
|
+
source: ({ key }) => `./src/**/${key}.i18n.json`,
|
|
396
|
+
locale: Locales.ENGLISH,
|
|
397
|
+
format: "icu", // استخدام تنسيق ICU للتوافق
|
|
398
|
+
}),
|
|
245
399
|
```
|
|
246
400
|
|
|
247
|
-
|
|
401
|
+
#### `splitKeys` (منطقية)
|
|
248
402
|
|
|
249
|
-
|
|
403
|
+
نفس السلوك كما في [`syncJSON`](#splitkeys-boolean): عندما يجمع ملف JSON واحد عدة مساحات أسماء بواسطة مفاتيحه من المستوى الأول، يصبح كل مفتاح من المستوى الأعلى قاموسًا خاصًا به.
|
|
250
404
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
405
|
+
- `undefined` (افتراضي): **يتم الكشف عنه تلقائيًا** — يتم التقسيم عندما لا يحتوي نمط `source` على جزء `{key}`، أو قاموس واحد بخلاف ذلك.
|
|
406
|
+
- `true` / `false`: فرض أو تعطيل التقسيم.
|
|
407
|
+
|
|
408
|
+
```ts
|
|
409
|
+
loadJSON({
|
|
410
|
+
source: ({ locale }) => `./messages/${locale}.json`,
|
|
411
|
+
format: "icu",
|
|
412
|
+
// splitKeys auto-enabled: `Hero`, `Nav`, `About`, … each become a dictionary
|
|
413
|
+
}),
|
|
257
414
|
```
|
|
258
415
|
|
|
416
|
+
### Behavior and conventions
|
|
417
|
+
|
|
418
|
+
- إذا كان قناع `source` الخاص بك يتضمن عنصر نائب للغة، فسيتم استيعاب الملفات الخاصة باللغة `locale` المحددة فقط.
|
|
419
|
+
- إذا لم يكن هناك جزء `{key}` في القناع الخاص بك، يصبح كل مفتاح من المستوى الأعلى للملف قاموسًا خاصًا به افتراضيًا (انظر [`splitKeys`](#splitkeys-boolean)). قم بتعيين `splitKeys: false` لتحميل الملف بأكمله كقاموس `index` واحد بدلاً من ذلك.
|
|
420
|
+
- يتم اشتقاق المفاتيح من مسارات الملفات عن طريق استبدال العنصر النائب `{key}` في منشئ `source` الخاص بك.
|
|
421
|
+
- يستخدم المكون الإضافي الملفات المكتشفة فقط ولا يقوم بإنشاء لغات أو مفاتيح مفقودة.
|
|
422
|
+
- يتم استنتاج مسار `fill` من `source` الخاص بك ويستخدم لتحديث القيم المفقودة عبر CLI عندما تختار ذلك.
|
|
423
|
+
|
|
424
|
+
## Conflict resolution
|
|
425
|
+
|
|
426
|
+
عندما يوجد نفس مفتاح الترجمة في مصادر JSON متعددة:
|
|
427
|
+
|
|
428
|
+
1. يحدد المكون الإضافي ذو الأولوية الأعلى القيمة النهائية
|
|
429
|
+
2. تُستخدم المصادر ذات الأولوية الأقل كاحتياطيات للمفاتيح المفقودة
|
|
430
|
+
3. يتيح لك هذا الحفاظ على الترجمات القديمة أثناء الترحيل التدريجي إلى الهياكل الجديدة
|
|
431
|
+
|
|
259
432
|
## CLI
|
|
260
433
|
|
|
261
434
|
سيتم اعتبار ملفات JSON المتزامنة كملفات `.content` أخرى. هذا يعني أن جميع أوامر intlayer ستكون متاحة لملفات JSON المتزامنة. بما في ذلك:
|
package/docs/ar/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: "Intlayer v8 الجديد - ما الجديد؟"
|
|
5
5
|
description: "اكتشف ما الجديد في Intlayer v8. تحسينات كبيرة في تجربة المطور، والتحقق من صحة المحتوى بالمخططات، وإدارة القواميس."
|
|
6
6
|
keywords:
|
|
@@ -409,6 +409,16 @@ author: aymericzip
|
|
|
409
409
|
|
|
410
410
|
---
|
|
411
411
|
|
|
412
|
+
## ملفات محتوى YAML و Markdown (v8.10.0)
|
|
413
|
+
|
|
414
|
+
يمكنك الآن تعريف المحتوى مباشرة باستخدام امتدادات الملفات `.content.md` و `.content.yaml`. هذا مثالي للمحتوى الطويل، المدونات، التوثيقات، وسياسات الخصوصية.
|
|
415
|
+
|
|
416
|
+
هذه الملفات قابلة للتحرير بالكامل من المحرر المرئي، مما يوفر سير عمل مبسطًا لأعضاء الفريق غير التقنيين.
|
|
417
|
+
|
|
418
|
+
لمزيد من التفاصيل، راجع [توثيق ملفات محتوى YAML](https://intlayer.org/doc/concept/content#yaml-content-file) و [توثيق ملفات محتوى Markdown](https://intlayer.org/doc/concept/content/markdown).
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
412
422
|
## إعادة كتابة عناوين URL المخصصة
|
|
413
423
|
|
|
414
424
|
تقدّم Intlayer v8 دعمًا لـ **إعادة كتابة عناوين URL المخصصة**، مما يتيح لك تعريف مسارات خاصة بكل لغة تختلف عن البنية القياسية `/locale/path`. هذه ميزة قوية لتحسين الـ SEO المحلي وتوفير تجربة مستخدم أكثر طبيعية للمتحدثين بغير الإنجليزية.
|
|
@@ -753,6 +763,58 @@ export default {
|
|
|
753
763
|
</Tab>
|
|
754
764
|
</Tabs>
|
|
755
765
|
|
|
766
|
+
## قواعد الجمع في Unicode CLDR (v8.8.0)
|
|
767
|
+
|
|
768
|
+
تم تقديم مساعد عقدة `plural` جديد يعتمد على قواعد الجمع المحددة بواسطة مشروع Unicode CLDR، مما يحسن دعم اللغات المعقدة.
|
|
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
|
+
يمكنك بعد ذلك تمرير العدد ديناميكيًا في مكون إطار العمل الخاص بك:
|
|
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
|
+
{/* بالإنجليزية: */}
|
|
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
|
+
لمزيد من المعلومات، راجع [توثيق الجمع](https://intlayer.org/doc/concept/content/plural).
|
|
815
|
+
|
|
816
|
+
---
|
|
817
|
+
|
|
756
818
|
## التحقق من صحة مخطط المحتوى
|
|
757
819
|
|
|
758
820
|
تقدم Intlayer v8 التحقق من صحة المخططات للقواميس. يمكنك الآن تعريف مخططات تحقق قابلة لإعادة الاستخدام في إعداداتك باستخدام Zod وتطبيقها على ملفات المحتوى الخاصة بك. يضمن ذلك التزام محتواك دائمًا بالهيكل المتوقع واكتشاف الأخطاء أثناء وقت البناء.
|
|
@@ -797,6 +859,34 @@ export default aboutPageMetaContent;
|
|
|
797
859
|
|
|
798
860
|
---
|
|
799
861
|
|
|
862
|
+
## TypeScript: IntlayerNode Primitive Accessors
|
|
863
|
+
|
|
864
|
+
تم تحديث نوع `IntlayerNode` للسماح باستدعاء دوال JavaScript البدائية مباشرة على عقد المحتوى. هذا يجعل من الممكن التفاعل مع المحتوى المترجم الخاص بك مباشرة كما لو كان سلسلة نصية قياسية، رقم، قيمة منطقية، أو مصفوفة بدائية.
|
|
865
|
+
|
|
866
|
+
مدعوم عبر React، Preact، Solid، Svelte، Vue، و Angular.
|
|
867
|
+
|
|
868
|
+
### مثال على السلسلة النصية
|
|
869
|
+
|
|
870
|
+
```typescript
|
|
871
|
+
content.placeholder; // Returns IntlayerNode<string>
|
|
872
|
+
content.placeholder.value; // Returns string
|
|
873
|
+
content.placeholder.toString(); // Returns string
|
|
874
|
+
content.placeholder.toLowerCase(); // Returns string
|
|
875
|
+
String(content.placeholder); // Returns string
|
|
876
|
+
content.placeholder.toUpperCase(); // Returns uppercased string
|
|
877
|
+
content.placeholder.replace("a", "b"); // Returns modified string
|
|
878
|
+
```
|
|
879
|
+
|
|
880
|
+
### مثال على المصفوفة
|
|
881
|
+
|
|
882
|
+
```typescript
|
|
883
|
+
content.myArrayOfString // Returns IntlayerNode<Array<string>>
|
|
884
|
+
content.myArrayOfString.find(...) // Returns element
|
|
885
|
+
content.myArrayOfString.join(', ') // Returns joined string
|
|
886
|
+
```
|
|
887
|
+
|
|
888
|
+
---
|
|
889
|
+
|
|
800
890
|
### الكشف التلقائي المحسَّن للمحتوى
|
|
801
891
|
|
|
802
892
|
في الإصدار v8، يقوم Intlayer باكتشاف صيغة Markdown وعلامات HTML وإدراج المتغيرات داخل سلاسل المحتوى بذكاء. هذا يعني أنه يمكنك غالبًا الاستغناء عن دوال المساعدة مثل `md()`، `html()`، أو `insert()`.
|
|
@@ -1002,6 +1092,17 @@ export default {
|
|
|
1002
1092
|
|
|
1003
1093
|
---
|
|
1004
1094
|
|
|
1095
|
+
## الأدوات: مراقب C++ و LSP المعتمد على OXC (v8.12.0)
|
|
1096
|
+
|
|
1097
|
+
يجلب Intlayer v8.12.0 تحسينات كبيرة لتجربة المطور:
|
|
1098
|
+
|
|
1099
|
+
- **Parcel Watcher**: تم ترحيل مراقب المحتوى من `chokidar` إلى `@parcel/watcher`، مستفيدًا من مراقبة الملفات الأصلية بـ C++ لتوفير تحديثات أسرع واستهلاك أقل للذاكرة بشكل ملحوظ.
|
|
1100
|
+
- **بروتوكول خادم اللغة الجديد (LSP)**: يتوفر الآن LSP جديد تمامًا. تم بناؤه باستخدام تحليل يعتمد على OXC، ويساعد بيئة التطوير المتكاملة (IDE) ووكلاء الذكاء الاصطناعي على ربط استدعاءات `useIntlayer('my-key')` بملفات `.content` المقابلة لها بسلاسة، والعكس صحيح.
|
|
1101
|
+
|
|
1102
|
+
لمزيد من التفاصيل، راجع [توثيق LSP](https://intlayer.org/doc/lsp).
|
|
1103
|
+
|
|
1104
|
+
---
|
|
1105
|
+
|
|
1005
1106
|
## تحسينات المجمّع
|
|
1006
1107
|
|
|
1007
1108
|
يتضمن Intlayer الإصدار 8 طبقة تخزين مؤقت جديدة لمجمّع Markdown وHTML. هذا يضمن أن سلاسل المحتوى المتطابقة بنفس التهيئة يتم تحليلها مرة واحدة فقط، مما يقلل بشكل كبير من العبء أثناء إعادة العرض أو عند استخدام نفس المحتوى في أماكن متعددة.
|
|
@@ -1057,6 +1158,48 @@ export default {
|
|
|
1057
1158
|
|
|
1058
1159
|
---
|
|
1059
1160
|
|
|
1161
|
+
## تحسينات البناء التجريبية: التصغير والتطهير (Minify & Purge) (v8.7.0)
|
|
1162
|
+
|
|
1163
|
+
يقدم Intlayer v8.7.0 ميزات بناء تجريبية جديدة في ملف `intlayer.config.ts` الخاص بك، مصممة لتحسين حزمة الإنتاج الخاصة بك:
|
|
1164
|
+
|
|
1165
|
+
- **تصغير القواميس (Dictionary Minification)**: يقوم بتصغير ملفات القواميس لتقليل حجمها.
|
|
1166
|
+
- **تطهير المفاتيح غير المستخدمة (Unused Key Purging)**: يقوم بمسح وإزالة مفاتيح الترجمة غير المستخدمة من القواميس، وإعادة تسمية المفاتيح النشطة إلى أحرف قصيرة (مثل `"products" -> "a"`, `"pricing" -> "b"`). هذا يقلل من حجم الحزمة بنسبة تصل إلى 5%.
|
|
1167
|
+
- **تعطيل فحوصات TypeScript**: تسريع عمليات البناء عن طريق تعطيل فحص أنواع TypeScript أثناء خطوة التجميع.
|
|
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
|
+
* تصغير القواميس لتقليل حجم الحزمة.
|
|
1183
|
+
*/
|
|
1184
|
+
minify: true,
|
|
1185
|
+
|
|
1186
|
+
/**
|
|
1187
|
+
* تطهير المفاتيح غير المستخدمة في القواميس
|
|
1188
|
+
*/
|
|
1189
|
+
purge: true,
|
|
1190
|
+
|
|
1191
|
+
/**
|
|
1192
|
+
* يشير إلى ما إذا كان البناء يجب أن يتحقق من أنواع TypeScript
|
|
1193
|
+
*/
|
|
1194
|
+
checkTypes: false,
|
|
1195
|
+
},
|
|
1196
|
+
};
|
|
1197
|
+
|
|
1198
|
+
export default config;
|
|
1199
|
+
```
|
|
1200
|
+
|
|
1201
|
+
---
|
|
1202
|
+
|
|
1060
1203
|
## المرونة: وضع استيراد موحّد
|
|
1061
1204
|
|
|
1062
1205
|
تم إهمال الخاصية البوليانية `live` لصالح خاصية أكثر شمولاً تسمى `importMode`. تتيح هذه الخاصية تحديد صريح لكيفية تحميل القواميس: بشكل ثابت، أو ديناميكيًا، أو عبر مزامنة حية.
|
|
@@ -1204,6 +1347,49 @@ export default {
|
|
|
1204
1347
|
|
|
1205
1348
|
---
|
|
1206
1349
|
|
|
1350
|
+
## دعم Angular: مجمّع Vite (v8.11.0)
|
|
1351
|
+
|
|
1352
|
+
لمستخدمي Angular، يدعم Intlayer الآن مجمّع Vite بشكل أصلي من خلال مكون إضافي جديد مخصص لـ esbuild، مما يسرع أوقات التطوير والبناء.
|
|
1353
|
+
|
|
1354
|
+
للحصول على تفاصيل حول التكوين، راجع [توثيق بيئة Angular](https://intlayer.org/doc/environment/angular).
|
|
1355
|
+
|
|
1356
|
+
---
|
|
1357
|
+
|
|
1358
|
+
## إنشاء خريطة الموقع (Sitemap) (v8.6.0)
|
|
1359
|
+
|
|
1360
|
+
يقوم Intlayer الآن بإنشاء خرائط المواقع تلقائيًا بناءً على اللغات ووضع التوجيه الخاص بك. هذا مفيد بشكل خاص لتحسين محركات البحث (SEO) في معماريات الموجهات مثل 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
|
## ملاحظات الترحيل من الإصدار v7
|
|
1208
1394
|
|
|
1209
1395
|
### تغييرات التكوين
|