@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
package/docs/vi/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. Có gì mới?
|
|
5
5
|
description: Khám phá những điểm mới trong Intlayer v8. Cải tiến chính về trải nghiệm nhà phát triển, xác thực theo schema và quản lý từ điển.
|
|
6
6
|
keywords:
|
|
@@ -409,6 +409,16 @@ Chúng tôi đã giới thiệu các hàm renderer và component độc lập m
|
|
|
409
409
|
|
|
410
410
|
---
|
|
411
411
|
|
|
412
|
+
## Tệp Nội dung YAML & Markdown (v8.10.0)
|
|
413
|
+
|
|
414
|
+
Giờ đây, bạn có thể khai báo nội dung trực tiếp bằng các phần mở rộng tệp `.content.md` và `.content.yaml`. Điều này hoàn hảo cho nội dung dạng dài, blog, tài liệu và chính sách bảo mật.
|
|
415
|
+
|
|
416
|
+
Các tệp này hoàn toàn có thể chỉnh sửa từ Visual Editor, mang lại quy trình làm việc hợp lý cho các thành viên không thuộc nhóm kỹ thuật.
|
|
417
|
+
|
|
418
|
+
Để biết thêm chi tiết, xem [Tài liệu Tệp Nội dung YAML](https://intlayer.org/doc/concept/content#yaml-content-file) và [Tài liệu Tệp Nội dung Markdown](https://intlayer.org/doc/concept/content/markdown).
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
412
422
|
## Viết lại URL tùy chỉnh
|
|
413
423
|
|
|
414
424
|
Intlayer v8 giới thiệu hỗ trợ cho **Viết lại URL tùy chỉnh**, cho phép bạn định nghĩa các đường dẫn theo ngôn ngữ (locale) khác với cấu trúc chuẩn `/locale/path`. Đây là một tính năng mạnh mẽ để cải thiện SEO địa phương và mang lại trải nghiệm người dùng tự nhiên hơn cho những người không nói tiếng Anh.
|
|
@@ -753,6 +763,61 @@ export default {
|
|
|
753
763
|
</Tab>
|
|
754
764
|
</Tabs>
|
|
755
765
|
|
|
766
|
+
## Quy tắc số nhiều Unicode CLDR (v8.8.0)
|
|
767
|
+
|
|
768
|
+
Một helper nút `plural` mới đã được giới thiệu dựa trên các quy tắc số nhiều được định nghĩa bởi Dự án Unicode CLDR, giúp cải thiện hỗ trợ cho các ngôn ngữ phức tạp.
|
|
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
|
+
vi: plural({
|
|
778
|
+
other: "{{count}} cơ hội",
|
|
779
|
+
}),
|
|
780
|
+
en: plural({
|
|
781
|
+
one: "{{count}} opening",
|
|
782
|
+
other: "{{count}} openings",
|
|
783
|
+
}),
|
|
784
|
+
fr: plural({
|
|
785
|
+
one: "{{count}} offre",
|
|
786
|
+
other: "{{count}} offres",
|
|
787
|
+
}),
|
|
788
|
+
}),
|
|
789
|
+
},
|
|
790
|
+
} satisfies Dictionary;
|
|
791
|
+
|
|
792
|
+
export default openingsContent;
|
|
793
|
+
```
|
|
794
|
+
|
|
795
|
+
Sau đó, bạn có thể truyền số lượng một cách động trong component framework của mình:
|
|
796
|
+
|
|
797
|
+
```tsx
|
|
798
|
+
import type { FC } from "react";
|
|
799
|
+
import { useIntlayer } from "react-intlayer";
|
|
800
|
+
|
|
801
|
+
const OpeningsComponent: FC<{ count: number }> = ({ count }) => {
|
|
802
|
+
const { totalOpenings } = useIntlayer("total_openings");
|
|
803
|
+
|
|
804
|
+
return (
|
|
805
|
+
<div>
|
|
806
|
+
{/* Trong tiếng Anh: */}
|
|
807
|
+
{/* count=0 → "0 openings" (other) */}
|
|
808
|
+
{/* count=1 → "1 opening" (one) */}
|
|
809
|
+
{/* count=2 → "2 openings" (other) */}
|
|
810
|
+
{/* count=21 → "21 openings" (other) */}
|
|
811
|
+
<p>{totalOpenings(count)}</p>
|
|
812
|
+
</div>
|
|
813
|
+
);
|
|
814
|
+
};
|
|
815
|
+
```
|
|
816
|
+
|
|
817
|
+
Để biết thêm thông tin, xem [Tài liệu Đa dạng hóa (Pluralization)](https://intlayer.org/doc/concept/content/plural).
|
|
818
|
+
|
|
819
|
+
---
|
|
820
|
+
|
|
756
821
|
## Xác thực Schema Nội dung
|
|
757
822
|
|
|
758
823
|
Intlayer v8 giới thiệu tính năng xác thực schema cho các dictionaries. Bây giờ bạn có thể định nghĩa các schema xác thực có thể tái sử dụng trong cấu hình của mình bằng Zod và áp dụng chúng cho các file nội dung. Điều này đảm bảo nội dung của bạn luôn tuân theo cấu trúc mong đợi, giúp phát hiện lỗi trong quá trình build.
|
|
@@ -797,6 +862,34 @@ Nếu nội dung không khớp với schema (ví dụ: title quá ngắn), quá
|
|
|
797
862
|
|
|
798
863
|
---
|
|
799
864
|
|
|
865
|
+
## TypeScript: Các bộ truy cập nguyên bản IntlayerNode
|
|
866
|
+
|
|
867
|
+
Kiểu `IntlayerNode` đã được cập nhật để cho phép gọi trực tiếp các phương thức JavaScript nguyên bản (primitive) trên các nút nội dung. Điều này giúp bạn có thể tương tác trực tiếp với nội dung đã được bản địa hóa của mình như thể nó là một chuỗi, số, boolean hoặc mảng nguyên bản tiêu chuẩn.
|
|
868
|
+
|
|
869
|
+
Được hỗ trợ trên React, Preact, Solid, Svelte, Vue và Angular.
|
|
870
|
+
|
|
871
|
+
### Ví dụ về Chuỗi (String)
|
|
872
|
+
|
|
873
|
+
```typescript
|
|
874
|
+
content.placeholder; // Trả về IntlayerNode<string>
|
|
875
|
+
content.placeholder.value; // Trả về string
|
|
876
|
+
content.placeholder.toString(); // Trả về string
|
|
877
|
+
content.placeholder.toLowerCase(); // Trả về string
|
|
878
|
+
String(content.placeholder); // Trả về string
|
|
879
|
+
content.placeholder.toUpperCase(); // Trả về chuỗi viết hoa
|
|
880
|
+
content.placeholder.replace("a", "b"); // Trả về chuỗi đã sửa đổi
|
|
881
|
+
```
|
|
882
|
+
|
|
883
|
+
### Ví dụ về Mảng (Array)
|
|
884
|
+
|
|
885
|
+
```typescript
|
|
886
|
+
content.myArrayOfString // Trả về IntlayerNode<Array<string>>
|
|
887
|
+
content.myArrayOfString.find(...) // Trả về phần tử
|
|
888
|
+
content.myArrayOfString.join(', ') // Trả về chuỗi được nối
|
|
889
|
+
```
|
|
890
|
+
|
|
891
|
+
---
|
|
892
|
+
|
|
800
893
|
### Phát hiện nội dung tự động nâng cao
|
|
801
894
|
|
|
802
895
|
Trong v8, Intlayer tự động nhận diện thông minh cú pháp Markdown, thẻ HTML và các chèn biến trong các chuỗi nội dung của bạn. Điều này có nghĩa là bạn thường có thể bỏ qua các hàm trợ giúp như `md()`, `html()` hoặc `insert()`.
|
|
@@ -1002,6 +1095,17 @@ Phần mở rộng Intlayer cho VSCode nhận được các cập nhật lớn t
|
|
|
1002
1095
|
|
|
1003
1096
|
---
|
|
1004
1097
|
|
|
1098
|
+
## Công cụ: C++ Watcher & OXC-based LSP (v8.12.0)
|
|
1099
|
+
|
|
1100
|
+
Intlayer v8.12.0 mang lại những cải tiến lớn cho trải nghiệm nhà phát triển:
|
|
1101
|
+
|
|
1102
|
+
- **Parcel Watcher**: Trình theo dõi nội dung (content watcher) đã được di chuyển từ `chokidar` sang `@parcel/watcher`, tận dụng tính năng theo dõi tệp C++ gốc để cung cấp các bản cập nhật nhanh hơn và giảm đáng kể mức tiêu thụ bộ nhớ.
|
|
1103
|
+
- **Language Server Protocol (LSP) mới**: Một LSP hoàn toàn mới hiện đã sẵn sàng. Được xây dựng với phân tích cú pháp dựa trên OXC, nó giúp IDE và các tác nhân AI của bạn liên kết liền mạch các lệnh gọi `useIntlayer('my-key')` với các tệp `.content` tương ứng của chúng và ngược lại.
|
|
1104
|
+
|
|
1105
|
+
Để biết thêm chi tiết, xem [Tài liệu LSP](https://intlayer.org/doc/lsp).
|
|
1106
|
+
|
|
1107
|
+
---
|
|
1108
|
+
|
|
1005
1109
|
## Tối ưu trình biên dịch
|
|
1006
1110
|
|
|
1007
1111
|
Intlayer v8 bao gồm một lớp cache mới cho trình biên dịch Markdown và HTML. Điều này đảm bảo rằng các chuỗi nội dung giống hệt với cùng cấu hình chỉ được phân tích một lần, giảm đáng kể chi phí khi tái kết xuất hoặc khi sử dụng cùng nội dung ở nhiều nơi.
|
|
@@ -1057,6 +1161,48 @@ Intlayer v8 bao gồm một lớp cache mới cho trình biên dịch Markdown v
|
|
|
1057
1161
|
|
|
1058
1162
|
---
|
|
1059
1163
|
|
|
1164
|
+
## Tối ưu hóa Build Thử nghiệm: Minify & Purge (v8.7.0)
|
|
1165
|
+
|
|
1166
|
+
Intlayer v8.7.0 giới thiệu các tính năng build thử nghiệm mới trong `intlayer.config.ts` của bạn được thiết kế để tối ưu hóa bundle production của bạn:
|
|
1167
|
+
|
|
1168
|
+
- **Thu nhỏ từ điển (Dictionary Minification)**: Thu nhỏ các tệp từ điển để giảm kích thước.
|
|
1169
|
+
- **Loại bỏ khóa không sử dụng (Unused Key Purging)**: Quét và loại bỏ các khóa dịch không sử dụng khỏi từ điển, đổi tên các khóa đang hoạt động thành các ký tự ngắn (ví dụ: `"products" -> "a"`, `"pricing" -> "b"`). Điều này giúp giảm kích thước bundle lên tới 5%.
|
|
1170
|
+
- **Vô hiệu hóa kiểm tra TypeScript**: Tăng tốc độ build bằng cách vô hiệu hóa kiểm tra kiểu dữ liệu (typechecking) TypeScript trong bước biên dịch.
|
|
1171
|
+
|
|
1172
|
+
```typescript fileName="intlayer.config.ts"
|
|
1173
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
1174
|
+
|
|
1175
|
+
const config: IntlayerConfig = {
|
|
1176
|
+
internationalization: {
|
|
1177
|
+
locales: [Locales.ENGLISH, Locales.FRENCH],
|
|
1178
|
+
defaultLocale: Locales.ENGLISH,
|
|
1179
|
+
},
|
|
1180
|
+
dictionary: {
|
|
1181
|
+
importMode: "dynamic",
|
|
1182
|
+
},
|
|
1183
|
+
build: {
|
|
1184
|
+
/**
|
|
1185
|
+
* Thu nhỏ các từ điển để giảm kích thước bundle.
|
|
1186
|
+
*/
|
|
1187
|
+
minify: true,
|
|
1188
|
+
|
|
1189
|
+
/**
|
|
1190
|
+
* Loại bỏ các khóa không sử dụng trong từ điển
|
|
1191
|
+
*/
|
|
1192
|
+
purge: true,
|
|
1193
|
+
|
|
1194
|
+
/**
|
|
1195
|
+
* Cho biết liệu quá trình build có nên kiểm tra các kiểu TypeScript hay không
|
|
1196
|
+
*/
|
|
1197
|
+
checkTypes: false,
|
|
1198
|
+
},
|
|
1199
|
+
};
|
|
1200
|
+
|
|
1201
|
+
export default config;
|
|
1202
|
+
```
|
|
1203
|
+
|
|
1204
|
+
---
|
|
1205
|
+
|
|
1060
1206
|
## Tính linh hoạt: Chế độ import hợp nhất
|
|
1061
1207
|
|
|
1062
1208
|
Thuộc tính boolean `live` đã bị đánh dấu là deprecated và được thay bằng thuộc tính `importMode` toàn diện hơn. Điều này cho phép xác định rõ ràng cách các dictionary nên được tải: theo kiểu tĩnh, động, hoặc qua đồng bộ trực tiếp.
|
|
@@ -1204,6 +1350,49 @@ Nội dung Markdown và HTML trong Svelte bây giờ tự động được phân
|
|
|
1204
1350
|
|
|
1205
1351
|
---
|
|
1206
1352
|
|
|
1353
|
+
## Hỗ trợ Angular: Vite Bundler (v8.11.0)
|
|
1354
|
+
|
|
1355
|
+
Đối với người dùng Angular, Intlayer hiện hỗ trợ nguyên bản trình đóng gói Vite thông qua một plugin esbuild tùy chỉnh mới, giúp tăng tốc thời gian phát triển và build.
|
|
1356
|
+
|
|
1357
|
+
Để biết chi tiết về cấu hình, xem [Tài liệu Môi trường Angular](https://intlayer.org/doc/environment/angular).
|
|
1358
|
+
|
|
1359
|
+
---
|
|
1360
|
+
|
|
1361
|
+
## Tạo Sitemap (v8.6.0)
|
|
1362
|
+
|
|
1363
|
+
Intlayer hiện tự động tạo sitemap dựa trên các locale và chế độ định tuyến (routing mode) của bạn. Điều này đặc biệt hữu ích cho việc tối ưu hóa SEO trong các kiến trúc router như TanStack Router:
|
|
1364
|
+
|
|
1365
|
+
```typescript fileName="src/routes/sitemap.xml.ts"
|
|
1366
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
1367
|
+
import { generateSitemap } from "intlayer";
|
|
1368
|
+
|
|
1369
|
+
const SITE_URL = (
|
|
1370
|
+
import.meta.env.VITE_SITE_URL ?? "http://localhost:3000"
|
|
1371
|
+
).replace(/\/$/, "");
|
|
1372
|
+
|
|
1373
|
+
export const Route = createFileRoute("/sitemap.xml")({
|
|
1374
|
+
server: {
|
|
1375
|
+
handlers: {
|
|
1376
|
+
GET: async () => {
|
|
1377
|
+
const sitemap = generateSitemap(
|
|
1378
|
+
[
|
|
1379
|
+
{ path: "/", changefreq: "daily", priority: 1.0 },
|
|
1380
|
+
{ path: "/about", changefreq: "monthly", priority: 0.8 },
|
|
1381
|
+
],
|
|
1382
|
+
{ siteUrl: SITE_URL }
|
|
1383
|
+
);
|
|
1384
|
+
|
|
1385
|
+
return new Response(sitemap, {
|
|
1386
|
+
headers: { "Content-Type": "application/xml" },
|
|
1387
|
+
});
|
|
1388
|
+
},
|
|
1389
|
+
},
|
|
1390
|
+
},
|
|
1391
|
+
});
|
|
1392
|
+
```
|
|
1393
|
+
|
|
1394
|
+
---
|
|
1395
|
+
|
|
1207
1396
|
## Ghi chú nâng cấp từ v7
|
|
1208
1397
|
|
|
1209
1398
|
### Thay đổi cấu hình
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-06-14
|
|
3
|
+
updatedAt: 2026-06-14
|
|
4
|
+
title: Intlayer v9 Mới - Có gì mới?
|
|
5
|
+
description: Khám phá các tính năng mới trong Intlayer v9. Giới thiệu các package tương thích drop-in cho các thư viện i18n phổ biến và hỗ trợ Collections, Variants, và Dynamic Records.
|
|
6
|
+
keywords:
|
|
7
|
+
- Intlayer
|
|
8
|
+
- Compatibility
|
|
9
|
+
- Migration
|
|
10
|
+
- Collections
|
|
11
|
+
- Variants
|
|
12
|
+
- Dynamic Records
|
|
13
|
+
- i18next
|
|
14
|
+
- next-intl
|
|
15
|
+
- vue-i18n
|
|
16
|
+
slugs:
|
|
17
|
+
- doc
|
|
18
|
+
- releases
|
|
19
|
+
- v9
|
|
20
|
+
author: aymericzip
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# Intlayer v9 Mới - Có gì mới?
|
|
24
|
+
|
|
25
|
+
Chào mừng bạn đến với Intlayer v9! Bản phát hành lớn này đánh dấu một cột mốc quan trọng trong việc đơn giản hóa lộ trình migration sang Intlayer với các **Compat Adapter Packages** dành cho các thư viện i18n phổ biến (`react-i18next`, `next-intl`, `vue-i18n`, v.v.) và bổ sung hỗ trợ cho các cấu trúc nội dung phong phú: **Collections**, **Variants**, và **Dynamic Records**.
|
|
26
|
+
|
|
27
|
+
## Mục lục
|
|
28
|
+
|
|
29
|
+
<TOC levels={[2]} maxDepth={1} />
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Compat Adapter Packages
|
|
34
|
+
|
|
35
|
+
Việc migration sang Intlayer từ các thư viện i18n phổ biến giờ đây dễ dàng hơn bao giờ hết. Chúng tôi đã tạo ra năm compat package cung cấp **chính xác các public API tương tự** như các thư viện i18n tiêu chuẩn nhưng ủy quyền toàn bộ việc xử lý translation cho Intlayer tại runtime.
|
|
36
|
+
|
|
37
|
+
### Cung cấp cùng một Public API với Strict Typing
|
|
38
|
+
|
|
39
|
+
Bằng cách thay thế các import, bạn sẽ nhận được tất cả các lợi ích của Intlayer (bao gồm cả compile-time type safety dựa trên các dictionary thực tế của bạn) với những thay đổi code tối thiểu:
|
|
40
|
+
|
|
41
|
+
- `@intlayer/i18next`
|
|
42
|
+
- `@intlayer/react-i18next`
|
|
43
|
+
- `@intlayer/next-intl`
|
|
44
|
+
- `@intlayer/next-i18next`
|
|
45
|
+
- `@intlayer/vue-i18n`
|
|
46
|
+
|
|
47
|
+
Ví dụ, chỉ cần thay đổi:
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
import { useTranslation } from "react-i18next";
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
thành:
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
import { useTranslation } from "@intlayer/react-i18next";
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Các key của bạn giờ đây sẽ được **strictly typed** dựa trên các Intlayer dictionary của bạn, mang lại khả năng auto-completion dot-path đầy đủ trong IDE của bạn!
|
|
60
|
+
|
|
61
|
+
### Bundler Alias Plugins (Vite, Next.js, Turbopack)
|
|
62
|
+
|
|
63
|
+
Để cho phép migration mà không cần phải viết lại tất cả các câu lệnh import một cách thủ công, mỗi compat adapter package đều đi kèm một **custom bundler plugin** (Vite hoặc Next.js) dưới subpath `/plugin`.
|
|
64
|
+
|
|
65
|
+
Các plugin này tự động rewrite các import hiện có (ví dụ: `react-i18next` hoặc `next-intl`) thành các package tương đương `@intlayer/*` tại build time.
|
|
66
|
+
|
|
67
|
+
#### Ví dụ Next.js (Webpack / Turbopack)
|
|
68
|
+
|
|
69
|
+
Thay vì `withIntlayer`, hãy bọc cấu hình Next.js của bạn bằng compat plugin:
|
|
70
|
+
|
|
71
|
+
```ts fileName="next.config.ts"
|
|
72
|
+
import { createNextI18nPlugin } from "@intlayer/next-i18next/plugin";
|
|
73
|
+
import type { NextConfig } from "next";
|
|
74
|
+
|
|
75
|
+
const withIntlayer = createNextI18nPlugin();
|
|
76
|
+
const nextConfig: NextConfig = {};
|
|
77
|
+
|
|
78
|
+
export default withIntlayer(nextConfig);
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
#### Ví dụ Vite (React, Vue, Solid, Svelte)
|
|
82
|
+
|
|
83
|
+
```ts fileName="vite.config.ts"
|
|
84
|
+
import vueI18nVitePlugin from "@intlayer/vue-i18n/plugin";
|
|
85
|
+
|
|
86
|
+
export default defineConfig({
|
|
87
|
+
plugins: [vueI18nVitePlugin()],
|
|
88
|
+
});
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Mutualized Runtime Resolver
|
|
94
|
+
|
|
95
|
+
Tất cả các compat adapter giờ đây đều định tuyến việc xử lý translation thông qua một runtime parser duy nhất và được tối ưu hóa cao: `@intlayer/core/messageFormat`.
|
|
96
|
+
|
|
97
|
+
- **Interpolate Message**: Xử lý các cú pháp tiêu chuẩn `{{var}}` (whitespace & dot-paths), các đối số định dạng ICU (`{v, number, percent}` v.v.), và các template `{var}` cơ bản.
|
|
98
|
+
- **Message Node Resolver**: Xử lý các node lồng nhau: `insert()`, `plural()` (quy tắc số nhiều CLDR), `enu()` (enumeration), `gender()`, các thẻ HTML, array, và các callable function node.
|
|
99
|
+
- **Tokenized Tag Parser**: Hỗ trợ các thẻ XML/HTML inline và các thẻ được đánh số (ví dụ: `<1>children</1>`) để hỗ trợ render rich-text một cách dễ dàng.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Chi tiết tính năng: Collections, Variants & Dynamic Records
|
|
104
|
+
|
|
105
|
+
Intlayer v9 mở rộng vượt ra ngoài các đối tượng key-value tĩnh, cho phép các dictionary khai báo các cấu trúc layout động được định kiểu đầy đủ (fully typed) từ đầu đến cuối.
|
|
106
|
+
|
|
107
|
+
### 1. Collections
|
|
108
|
+
|
|
109
|
+
Định nghĩa một danh sách các item có thứ tự do CMS quản lý (ví dụ: FAQ, sản phẩm, hoặc danh sách blog):
|
|
110
|
+
|
|
111
|
+
```ts fileName="faq.content.ts"
|
|
112
|
+
import { t, type Dictionary } from "intlayer";
|
|
113
|
+
|
|
114
|
+
export default {
|
|
115
|
+
key: "faq",
|
|
116
|
+
content: [
|
|
117
|
+
{
|
|
118
|
+
question: t({
|
|
119
|
+
vi: "Intlayer là gì?",
|
|
120
|
+
en: "What is Intlayer?",
|
|
121
|
+
fr: "Qu'est-ce qu'Intlayer ?",
|
|
122
|
+
}),
|
|
123
|
+
answer: t({
|
|
124
|
+
vi: "Một bộ công cụ i18n.",
|
|
125
|
+
en: "An i18n toolkit.",
|
|
126
|
+
fr: "Une boîte à outils i18n.",
|
|
127
|
+
}),
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
} satisfies Dictionary;
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
#### Cách sử dụng:
|
|
134
|
+
|
|
135
|
+
```ts
|
|
136
|
+
// Lấy tất cả các item
|
|
137
|
+
const allFaqs = useIntlayer("faq"); // -> { question: string, answer: string }[]
|
|
138
|
+
|
|
139
|
+
// Lấy một item duy nhất bằng index
|
|
140
|
+
const faq = useIntlayer("faq", { item: 1 }); // -> { question: string, answer: string }
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### 2. Variants
|
|
144
|
+
|
|
145
|
+
Cung cấp các bản thử nghiệm A/B, seasonal header, feature flag, hoặc các landing page tùy chỉnh:
|
|
146
|
+
|
|
147
|
+
```ts fileName="hero.content.ts"
|
|
148
|
+
import { t, type Dictionary } from "intlayer";
|
|
149
|
+
|
|
150
|
+
export default {
|
|
151
|
+
key: "hero-banner",
|
|
152
|
+
variant: "default",
|
|
153
|
+
content: {
|
|
154
|
+
control: t({ vi: "Chào mừng", en: "Welcome", fr: "Bienvenue" }),
|
|
155
|
+
black_friday: t({
|
|
156
|
+
vi: "Mua ngay",
|
|
157
|
+
en: "Shop now",
|
|
158
|
+
fr: "Acheter maintenant",
|
|
159
|
+
}),
|
|
160
|
+
},
|
|
161
|
+
} satisfies Dictionary;
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
#### Cách sử dụng:
|
|
165
|
+
|
|
166
|
+
```ts
|
|
167
|
+
const banner = useIntlayer("hero-banner", { variant: "black_friday" });
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### 3. Dynamic Records
|
|
171
|
+
|
|
172
|
+
Định nghĩa các dictionary có các mục nhập được tải động tại runtime thông qua các query ID:
|
|
173
|
+
|
|
174
|
+
```ts fileName="product.content.ts"
|
|
175
|
+
import { t, type Dictionary } from "intlayer";
|
|
176
|
+
|
|
177
|
+
export default {
|
|
178
|
+
key: "product-copy",
|
|
179
|
+
meta: {
|
|
180
|
+
id: "prod_123",
|
|
181
|
+
category: "books",
|
|
182
|
+
},
|
|
183
|
+
content: {
|
|
184
|
+
title: t({ vi: "Clean Code", en: "Clean Code", fr: "Code Propre" }),
|
|
185
|
+
},
|
|
186
|
+
} satisfies Dictionary;
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
#### Cách sử dụng:
|
|
190
|
+
|
|
191
|
+
```ts
|
|
192
|
+
// Chỉ tải động item được yêu cầu (yêu cầu Suspense)
|
|
193
|
+
const product = useIntlayer("product-copy", {
|
|
194
|
+
id: "prod_123",
|
|
195
|
+
category: "books",
|
|
196
|
+
});
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Tối ưu hóa Dynamic Loading & Bundle Size
|
|
202
|
+
|
|
203
|
+
Để giữ cho các bundle cực kỳ nhỏ gọn, Intlayer v9 hỗ trợ dynamic lazy loading.
|
|
204
|
+
|
|
205
|
+
Trong cấu hình của bạn, hãy đặt `importMode` thành `'dynamic'` hoặc `'fetch'`:
|
|
206
|
+
|
|
207
|
+
```ts fileName="intlayer.config.ts"
|
|
208
|
+
export default {
|
|
209
|
+
dictionary: {
|
|
210
|
+
importMode: "dynamic", // "static" | "dynamic" | "fetch"
|
|
211
|
+
},
|
|
212
|
+
};
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Tại build time, `@intlayer/swc` và `@intlayer/babel` sẽ quét các file của bạn và thay thế các lệnh gọi `useIntlayer` / `getIntlayer` bằng các wrapper có khả năng tree-shake (`useDictionary` / `useDictionaryDynamic`). Chỉ nội dung được yêu cầu cho collection item, variant, hoặc locale đã chọn mới được tải, giúp ngăn production bundle của bạn chứa các bản dịch không sử dụng.
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Lưu ý khi migration từ v8
|
|
220
|
+
|
|
221
|
+
Nếu bạn đang nâng cấp từ v8, lưu ý rằng v9 không bao gồm các breaking change. Tuy nhiên, dưới đây là các thay đổi chính:
|
|
222
|
+
|
|
223
|
+
- **Locales & Dialects**: Nếu sử dụng các dependency i18n bên ngoài, hãy thêm các compat adapter plugin tương ứng của chúng vào cấu hình hoặc thiết lập bundler của bạn để tự động rewrite các import.
|
|
224
|
+
- **Custom Selectors**: Khi gọi `useIntlayer`, tham số thứ hai giờ đây được dành riêng cho một đối tượng option chứa `{ locale, item, variant, id }`. Nếu trước đây bạn đã truyền trực tiếp một chuỗi locale, bạn vẫn có thể làm như vậy, nhưng việc sử dụng đối tượng options được khuyến nghị cho các lựa chọn nâng cao.
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Liên kết hữu ích
|
|
229
|
+
|
|
230
|
+
- [Hướng dẫn về Compat Adapter Packages](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/compat/index.md)
|
|
231
|
+
- [Dynamic Dictionaries - Collections, Variants & Dynamic Records](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dynamic_dictionaries/index.md)
|
|
232
|
+
- [Tài liệu tham khảo cấu hình](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/configuration.md)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-11
|
|
3
|
-
updatedAt:
|
|
3
|
+
updatedAt: 2026-06-17
|
|
4
4
|
title: 审核文档
|
|
5
5
|
description: 学习如何审核不同语言版本的文档文件,以确保质量、一致性和完整性。
|
|
6
6
|
keywords:
|
|
@@ -15,6 +15,10 @@ slugs:
|
|
|
15
15
|
- concept
|
|
16
16
|
- cli
|
|
17
17
|
- doc-review
|
|
18
|
+
history:
|
|
19
|
+
- version: 9.0.0
|
|
20
|
+
date: 2026-06-17
|
|
21
|
+
changes: "添加 --log 选项"
|
|
18
22
|
author: aymericzip
|
|
19
23
|
---
|
|
20
24
|
|
|
@@ -55,8 +59,110 @@ bun x intlayer doc review
|
|
|
55
59
|
|
|
56
60
|
## 参数:
|
|
57
61
|
|
|
58
|
-
|
|
62
|
+
**文件列表选项:**
|
|
59
63
|
|
|
60
|
-
|
|
64
|
+
- **`--doc-pattern [docPattern...]`**:匹配要审核的文档文件的全局模式。
|
|
61
65
|
|
|
62
|
-
|
|
66
|
+
> 示例:`npx intlayer doc review --doc-pattern "docs/**/*.md" "src/**/*.mdx"`
|
|
67
|
+
|
|
68
|
+
- **`--excluded-glob-pattern [excludedGlobPattern...]`**:排除不审核的文件的全局匹配模式。
|
|
69
|
+
|
|
70
|
+
> 示例:`npx intlayer doc review --excluded-glob-pattern "docs/internal/**"`
|
|
71
|
+
|
|
72
|
+
- **`--skip-if-modified-before [skipIfModifiedBefore]`**:如果文件在指定时间之前被修改,则跳过该文件。
|
|
73
|
+
- 可以是绝对时间,如 "2025-12-05"(字符串或 Date 类型)
|
|
74
|
+
- 可以是相对时间,单位为毫秒,如 `1 * 60 * 60 * 1000`(1 小时)
|
|
75
|
+
- 此选项通过 `fs.stat` 方法检查文件的更新时间,因此可能会受到 Git 或其他修改文件工具的影响。
|
|
76
|
+
|
|
77
|
+
> 示例:`npx intlayer doc review --skip-if-modified-before "2025-12-05"`
|
|
78
|
+
|
|
79
|
+
- **`--skip-if-modified-after [skipIfModifiedAfter]`**:如果文件在指定时间内被修改,则跳过该文件。
|
|
80
|
+
- 可以是绝对时间,如 "2025-12-05"(字符串或 Date 类型)
|
|
81
|
+
- 可以是相对时间,单位为毫秒,如 `1 * 60 * 60 * 1000`(1 小时)
|
|
82
|
+
- 此选项通过 `fs.stat` 方法检查文件的更新时间,因此可能会受到 Git 或其他修改文件工具的影响。
|
|
83
|
+
|
|
84
|
+
> 示例:`npx intlayer doc review --skip-if-modified-after "2025-12-05"`
|
|
85
|
+
|
|
86
|
+
- **`--skip-if-exists`**:如果文件已存在,则跳过该文件。
|
|
87
|
+
|
|
88
|
+
> 示例:`npx intlayer doc review --skip-if-exists`
|
|
89
|
+
|
|
90
|
+
**审核模式选项:**
|
|
91
|
+
|
|
92
|
+
- **`--log`**:仅记录模式。不使用 AI 进行翻译;而是记录需要关注的块(带有行号和内容),供基础语言环境和目标语言环境参考,以帮助另一个代理生成翻译。
|
|
93
|
+
|
|
94
|
+
> 示例:`npx intlayer doc review --log`
|
|
95
|
+
|
|
96
|
+
**入口输出选项:**
|
|
97
|
+
|
|
98
|
+
- **`--locales [locales...]`**:目标语言,用于审核文档。
|
|
99
|
+
|
|
100
|
+
> 示例:`npx intlayer doc review --locales fr es de`
|
|
101
|
+
|
|
102
|
+
- **`--base-locale [baseLocale]`**:源语言(基础文档),用于对比的起始语言。
|
|
103
|
+
|
|
104
|
+
> 示例:`npx intlayer doc review --base-locale en`
|
|
105
|
+
|
|
106
|
+
**文件处理选项:**
|
|
107
|
+
|
|
108
|
+
- **`--nb-simultaneous-file-processed [nbSimultaneousFileProcessed]`**:同时处理审核的文件数量。
|
|
109
|
+
|
|
110
|
+
> 示例:`npx intlayer doc review --nb-simultaneous-file-processed 5`
|
|
111
|
+
|
|
112
|
+
**AI 选项:**
|
|
113
|
+
|
|
114
|
+
- **`--model [model]`**:用于审核的 AI 模型(例如,`gpt-3.5-turbo`)。
|
|
115
|
+
- **`--provider [provider]`**:用于审核的 AI 提供商。
|
|
116
|
+
- **`--temperature [temperature]`**:AI 模型的温度设置。
|
|
117
|
+
- **`--api-key [apiKey]`**:为 AI 服务提供您自己的 API 密钥。
|
|
118
|
+
- **`--application-context [applicationContext]`**:为 AI 审核提供额外的上下文信息。
|
|
119
|
+
- **`--data-serialization [dataSerialization]`**:用于 Intlayer AI 功能的数据序列化格式。选项:`json`(标准、可靠),`toon`(更少 token,但一致性较低)。
|
|
120
|
+
- **`--custom-prompt [prompt]`**:自定义用于审核的基础提示。(注意:对于大多数用例,建议使用 `--custom-instructions` 选项,因为它能更好地控制审核行为。)
|
|
121
|
+
|
|
122
|
+
> 示例:`npx intlayer doc review --model deepseek-chat --provider deepseek --temperature 0.5 --api-key sk-1234567890 --application-context "My application is a cat store"`
|
|
123
|
+
|
|
124
|
+
**环境变量选项:**
|
|
125
|
+
|
|
126
|
+
- **`--env`**:指定环境(例如,`development`,`production`)。
|
|
127
|
+
- **`--env-file [envFile]`**:提供自定义环境文件以加载变量。
|
|
128
|
+
- **`--base-dir`**:指定项目的基础目录。
|
|
129
|
+
- **`--no-cache`**:禁用缓存。
|
|
130
|
+
|
|
131
|
+
> 示例: `npx intlayer doc review --base-dir ./docs --env-file .env.production.local`
|
|
132
|
+
|
|
133
|
+
**日志选项:**
|
|
134
|
+
|
|
135
|
+
- **`--verbose`**: 启用详细日志以便调试。(CLI 默认启用)
|
|
136
|
+
|
|
137
|
+
> 示例: `npx intlayer doc review --verbose`
|
|
138
|
+
|
|
139
|
+
**自定义指令选项:**
|
|
140
|
+
|
|
141
|
+
- **`--custom-instructions [customInstructions]`**: 添加到提示中的自定义指令。用于应用关于格式、URL 翻译等的特定规则。
|
|
142
|
+
|
|
143
|
+
> 示例: `npx intlayer doc review --custom-instructions "避免翻译网址,并保持 markdown 格式"`
|
|
144
|
+
|
|
145
|
+
> 示例: `npx intlayer doc review --custom-instructions "$(cat ./instructions.md)"`
|
|
146
|
+
|
|
147
|
+
**Git 选项:**
|
|
148
|
+
|
|
149
|
+
- **`--git-diff`**: 仅针对包含从基础分支(默认 `origin/main`)到当前分支(默认 `HEAD`)的更改的文件运行。
|
|
150
|
+
- **`--git-diff-base`**: 指定 git diff 的基础参考(默认 `origin/main`)。
|
|
151
|
+
- **`--git-diff-current`**: 指定 git diff 的当前参考(默认 `HEAD`)。
|
|
152
|
+
- **`--uncommitted`**: 包含未提交的更改。
|
|
153
|
+
- **`--unpushed`**: 包含未推送的更改。
|
|
154
|
+
- **`--untracked`**: 包含未跟踪的文件。
|
|
155
|
+
|
|
156
|
+
> 示例: `npx intlayer doc review --git-diff --git-diff-base origin/main --git-diff-current HEAD`
|
|
157
|
+
|
|
158
|
+
> 示例: `npx intlayer doc review --uncommitted --unpushed --untracked`
|
|
159
|
+
|
|
160
|
+
> 请注意,输出文件路径将通过替换以下模式来确定:
|
|
161
|
+
>
|
|
162
|
+
> - `/{{baseLocale}}/` 替换为 `/{{locale}}/`(Unix)
|
|
163
|
+
> - `\{{baseLocale}}\` 替换为 `\{{locale}}\`(Windows)
|
|
164
|
+
> - `_{{baseLocale}}.` 替换为 `_{{locale}}.`
|
|
165
|
+
> - `{{baseLocale}}_` 替换为 `{{locale}}_`
|
|
166
|
+
> - `.{{baseLocaleName}}.` 替换为 `.{{localeName}}.`
|
|
167
|
+
>
|
|
168
|
+
> 如果未找到上述模式,输出文件将在文件扩展名后添加 `.{{locale}}`。例如,`./my/file.md` 将被审核并为法语版本更新为 `./my/file.fr.md`。
|
package/docs/zh/cli/index.md
CHANGED