@intlayer/docs 8.12.5-canary.0 → 9.0.0-canary.2
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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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
|
@@ -105,6 +105,248 @@ Intlayer は単なる i18n ソリューションではなく、**自己ホスト
|
|
|
105
105
|
|
|
106
106
|
GitHubの[Application Template](https://github.com/aymericzip/intlayer-vite-react-template)を参照してください。
|
|
107
107
|
|
|
108
|
+
#### フックの実装
|
|
109
|
+
|
|
110
|
+
HTML属性を管理するためのカスタムフックを作成します。このフックはロケールの変更を監視し、それに応じて属性を更新します:
|
|
111
|
+
|
|
112
|
+
```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx" codeFormat={["typescript", "esm"]}
|
|
113
|
+
import { useEffect } from "react";
|
|
114
|
+
import { useLocale } from "react-intlayer";
|
|
115
|
+
import { getHTMLTextDir } from "intlayer";
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* 現在のロケールに基づいて、HTMLの <html> 要素の `lang` 属性と `dir` 属性を更新します。
|
|
119
|
+
* - `lang`: ブラウザや検索エンジンにページの言語を通知します。
|
|
120
|
+
* - `dir`: 正しい読み取り順序(例:英語の場合は 'ltr'、アラビア語の場合は 'rtl')を保証します。
|
|
121
|
+
*
|
|
122
|
+
* この動的な更新は、適切なテキストレンダリング、アクセシビリティ、およびSEOにとって不可欠です。
|
|
123
|
+
*/
|
|
124
|
+
export const useI18nHTMLAttributes = () => {
|
|
125
|
+
const { locale } = useLocale();
|
|
126
|
+
|
|
127
|
+
useEffect(() => {
|
|
128
|
+
// 言語属性を現在のロケールに更新します。
|
|
129
|
+
document.documentElement.lang = locale;
|
|
130
|
+
|
|
131
|
+
// 現在のロケールに基づいてテキストの方向を設定します。
|
|
132
|
+
document.documentElement.dir = getHTMLTextDir(locale);
|
|
133
|
+
}, [locale]);
|
|
134
|
+
};
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
#### アプリケーションでのフックの使用
|
|
138
|
+
|
|
139
|
+
ロケールが変更されるたびに HTML 属性が更新されるように、フックをメインコンポーネントに統合します:
|
|
140
|
+
|
|
141
|
+
```tsx fileName="src/App.tsx" codeFormat={["typescript", "esm"]}
|
|
142
|
+
import type { FC } from "react";
|
|
143
|
+
import { IntlayerProvider, useIntlayer } from "react-intlayer";
|
|
144
|
+
import { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes";
|
|
145
|
+
import "./App.css";
|
|
146
|
+
|
|
147
|
+
const AppContent: FC = () => {
|
|
148
|
+
// ロケールに基づいて <html> タグの lang および dir 属性を更新するためにフックを適用します。
|
|
149
|
+
useI18nHTMLAttributes();
|
|
150
|
+
|
|
151
|
+
// ... コンポーネントの残りの部分
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
const App: FC = () => (
|
|
155
|
+
<IntlayerProvider>
|
|
156
|
+
<AppContent />
|
|
157
|
+
</IntlayerProvider>
|
|
158
|
+
);
|
|
159
|
+
|
|
160
|
+
export default App;
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
これらの変更を適用することで、アプリケーションは以下のようになります:
|
|
164
|
+
|
|
165
|
+
- **言語** (`lang`) 属性が現在のロケールを正確に反映するようになり、これは SEO やブラウザの動作にとって重要です。
|
|
166
|
+
- ロケールに応じて**テキストの方向** (`dir`) を調整し、読み取り順序が異なる言語の可読性とユーザビリティを向上させます。
|
|
167
|
+
- 支援技術が最適に機能するためにこれらの属性に依存しているため、より**アクセシブル**な体験を提供します。
|
|
168
|
+
|
|
169
|
+
</Step>
|
|
170
|
+
|
|
171
|
+
<Step number={10} title="ローカライズされた Link コンポーネントの作成" isOptional={true}>
|
|
172
|
+
|
|
173
|
+
アプリケーションのナビゲーションが現在のロケールを尊重するように、カスタムの `Link` コンポーネントを作成できます。このコンポーネントは、内部 URL の先頭に現在の言語を自動的に付加します。例えば、フランス語を話すユーザーが「About」ページへのリンクをクリックすると、`/about` ではなく `/fr/about` にリダイレクトされます。
|
|
174
|
+
|
|
175
|
+
この動作は、いくつかの理由で有用です:
|
|
176
|
+
|
|
177
|
+
- **SEO とユーザーエクスペリエンス**: ローカライズされた URL は、検索エンジンが言語固有のページを正しくインデックスするのを助け、ユーザーに好みの言語でコンテンツを提供します。
|
|
178
|
+
- **一貫性**: アプリケーション全体でローカライズされたリンクを使用することで、ナビゲーションが現在のロケール内に留まることを保証し、予期しない言語の切り替えを防ぎます。
|
|
179
|
+
- **メンテナンス性**: ローカリゼーション ロジックを単一のコンポーネントに集約することで URL の管理が簡素化され、アプリケーションの成長に合わせて codebase のメンテナンスや拡張が容易になります。
|
|
180
|
+
|
|
181
|
+
以下は、TypeScript でのローカライズされた `Link` コンポーネントの実装です:
|
|
182
|
+
|
|
183
|
+
```tsx fileName="src/components/Link.tsx" codeFormat={["typescript", "esm"]}
|
|
184
|
+
import { getLocalizedUrl } from "intlayer";
|
|
185
|
+
import {
|
|
186
|
+
forwardRef,
|
|
187
|
+
type DetailedHTMLProps,
|
|
188
|
+
type AnchorHTMLAttributes,
|
|
189
|
+
} from "react";
|
|
190
|
+
import { useLocale } from "react-intlayer";
|
|
191
|
+
|
|
192
|
+
export interface LinkProps extends DetailedHTMLProps<
|
|
193
|
+
AnchorHTMLAttributes<HTMLAnchorElement>,
|
|
194
|
+
HTMLAnchorElement
|
|
195
|
+
> {}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* 与えられた URL が外部へのものかどうかを確認するユーティリティ関数。
|
|
199
|
+
* URL が http:// または https:// で始まる場合、外部と見なされます。
|
|
200
|
+
*/
|
|
201
|
+
export const checkIsExternalLink = (href?: string): boolean =>
|
|
202
|
+
/^https?:\/\//.test(href ?? "");
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* 現在のロケールに基づいて href 属性を適応させるカスタム Link コンポーネント。
|
|
206
|
+
* 内部リンクの場合、`getLocalizedUrl` を使用して URL にロケールを付加します(例: /fr/about)。
|
|
207
|
+
* これにより、ナビゲーションが同じロケール コンテキスト内に留まることが保証されます。
|
|
208
|
+
*/
|
|
209
|
+
export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
|
|
210
|
+
({ href, children, ...props }, ref) => {
|
|
211
|
+
const { locale } = useLocale();
|
|
212
|
+
const isExternalLink = checkIsExternalLink(href);
|
|
213
|
+
|
|
214
|
+
// リンクが内部向けであり、有効な href が提供されている場合、ローカライズされた URL を取得します。
|
|
215
|
+
const hrefI18n =
|
|
216
|
+
href && !isExternalLink ? getLocalizedUrl(href, locale) : href;
|
|
217
|
+
|
|
218
|
+
return (
|
|
219
|
+
<a href={hrefI18n} ref={ref} {...props}>
|
|
220
|
+
{children}
|
|
221
|
+
</a>
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
);
|
|
225
|
+
|
|
226
|
+
Link.displayName = "Link";
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
#### 仕組み
|
|
230
|
+
|
|
231
|
+
- **外部リンクの検出**:
|
|
232
|
+
ヘルパー関数 `checkIsExternalLink` は、URLが外部リンクであるかどうかを判断します。外部リンクはローカライズの必要がないため、そのままにされます。
|
|
233
|
+
|
|
234
|
+
- **現在のロケールの取得**:
|
|
235
|
+
`useLocale` フックは、現在のロケール(例:フランス語の場合は `fr`)を提供します。
|
|
236
|
+
|
|
237
|
+
- **URLのローカライズ**:
|
|
238
|
+
内部リンク(すなわち、外部ではないリンク)の場合、`getLocalizedUrl` を使用して自動的に現在のロケールをURLのプレフィックスとして付加します。これは、ユーザーがフランス語環境にいる場合、`href` として `/about` を渡すと `/fr/about` に変換されることを意味します。
|
|
239
|
+
|
|
240
|
+
- **リンクの返却**:
|
|
241
|
+
コンポーネントは、ローカライズされたURLを持つ `<a>` 要素を返し、ナビゲーションがロケールと一貫するようにします。
|
|
242
|
+
|
|
243
|
+
この `Link` コンポーネントをアプリケーション全体に統合することで、SEOとユーザビリティの向上というメリットを享受しながら、一貫性のある言語対応のユーザーエクスペリエンスを維持できます。
|
|
244
|
+
|
|
245
|
+
</Step>
|
|
246
|
+
|
|
247
|
+
<Step number={11} title="コンポーネントのコンテンツを抽出する" isOptional={true}>
|
|
248
|
+
|
|
249
|
+
既存のコードベースがある場合、数千ものファイルを変換するのは時間がかかる場合があります。
|
|
250
|
+
|
|
251
|
+
このプロセスを容易にするために、Intlayerはコンポーネントを変換し、コンテンツを抽出するための [コンパイラ](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/compiler.md) / [エクストラクター](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/cli/extract.md) を提供しています。
|
|
252
|
+
|
|
253
|
+
セットアップするには、`intlayer.config.ts` ファイルに `compiler` セクションを追加できます。
|
|
254
|
+
|
|
255
|
+
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
256
|
+
import { type IntlayerConfig } from "intlayer";
|
|
257
|
+
|
|
258
|
+
const config: IntlayerConfig = {
|
|
259
|
+
// ... その他の設定
|
|
260
|
+
compiler: {
|
|
261
|
+
/**
|
|
262
|
+
* コンパイラを有効にするかどうかを指定します。
|
|
263
|
+
*/
|
|
264
|
+
enabled: true,
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* 出力ファイルのパスを定義します
|
|
268
|
+
*/
|
|
269
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* 変換後にコンポーネントを保存するかどうかを指定します。
|
|
273
|
+
*
|
|
274
|
+
* - `true` の場合、コンパイラはディスク上のコンポーネントファイルを書き換えます。これにより変換は永続的になり、次回のプロセスでは変換をスキップします。その方法で、コンパイラがアプリを変換した後に、コンパイラを削除することができます。
|
|
275
|
+
*
|
|
276
|
+
* - `false` の場合、コンパイラはビルド出力のコードにのみ `useIntlayer()` 関数の呼び出しを注入し、元のコードベースはそのまま維持します。変換はメモリ内でのみ行われます。
|
|
277
|
+
*/
|
|
278
|
+
saveComponents: false,
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* 辞書キーのプレフィックス
|
|
282
|
+
*/
|
|
283
|
+
dictionaryKeyPrefix: "",
|
|
284
|
+
},
|
|
285
|
+
};
|
|
286
|
+
|
|
287
|
+
export default config;
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
<Tabs>
|
|
291
|
+
<Tab value='Extract command'>
|
|
292
|
+
|
|
293
|
+
エクストラクターを実行して、コンポーネントを変換しコンテンツを抽出します
|
|
294
|
+
|
|
295
|
+
```bash packageManager="npm"
|
|
296
|
+
npx intlayer extract
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
```bash packageManager="pnpm"
|
|
300
|
+
pnpm intlayer extract
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
```bash packageManager="yarn"
|
|
304
|
+
yarn intlayer extract
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
```bash packageManager="bun"
|
|
308
|
+
bun x intlayer extract
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
</Tab>
|
|
312
|
+
<Tab value='Babel compiler'>
|
|
313
|
+
|
|
314
|
+
`vite.config.ts` を更新して `intlayerCompiler` プラグインを含めます:
|
|
315
|
+
|
|
316
|
+
```ts fileName="vite.config.ts"
|
|
317
|
+
import { defineConfig } from "vite";
|
|
318
|
+
import { intlayer, intlayerCompiler } from "vite-intlayer";
|
|
319
|
+
|
|
320
|
+
export default defineConfig({
|
|
321
|
+
plugins: [
|
|
322
|
+
intlayer(),
|
|
323
|
+
intlayerCompiler(), // コンパイラプラグインを追加します
|
|
324
|
+
],
|
|
325
|
+
});
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
```bash packageManager="npm"
|
|
329
|
+
npm run build # または npm run dev
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
```bash packageManager="pnpm"
|
|
333
|
+
pnpm run build # または pnpm run dev
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
```bash packageManager="yarn"
|
|
337
|
+
yarn build # または yarn dev
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
```bash packageManager="bun"
|
|
341
|
+
bun run build # または bun run dev
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
</Tab>
|
|
345
|
+
</Tabs>
|
|
346
|
+
</Step>
|
|
347
|
+
|
|
348
|
+
</Steps>
|
|
349
|
+
|
|
108
350
|
### (任意)サイトマップと robots.txt(ビルド時生成)
|
|
109
351
|
|
|
110
352
|
Intlayer は `generateSitemap` と `getMultilingualUrls` により、クローラ向けに整形した多言語の `sitemap.xml` と `robots.txt` を `public/` に自動で書き出せます。通常は Vite より**前**に小さな Node スクリプトを走らせます(例: npm の `predev` / `prebuild`)。
|
|
@@ -179,6 +421,54 @@ console.log("SEO files generated successfully.");
|
|
|
179
421
|
|
|
180
422
|
pnpm や yarn を使う場合はコマンドを読み替えてください。CI から呼び出しても構いません。
|
|
181
423
|
|
|
424
|
+
### TypeScriptの設定
|
|
425
|
+
|
|
426
|
+
Intlayerはモジュール拡張(module augmentation)を使用してTypeScriptの利点を活用し、コードベースをより強固にします。
|
|
427
|
+
|
|
428
|
+

|
|
429
|
+
|
|
430
|
+

|
|
431
|
+
|
|
432
|
+
TypeScriptの設定に、自動生成された型が含まれていることを確認してください。
|
|
433
|
+
|
|
434
|
+
```json5 fileName="tsconfig.json"
|
|
435
|
+
{
|
|
436
|
+
// ... 既存のTypeScript設定
|
|
437
|
+
"include": [
|
|
438
|
+
// ... 既存のTypeScript設定
|
|
439
|
+
".intlayer/**/*.ts", // 自動生成された型を含める
|
|
440
|
+
],
|
|
441
|
+
}
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
### Gitの設定
|
|
445
|
+
|
|
446
|
+
Intlayerによって生成されたファイルを無視することをお勧めします。これにより、それらをGitリポジトリにコミットすることを避けることができます。
|
|
447
|
+
|
|
448
|
+
これを行うには、`.gitignore`ファイルに以下の指示を追加できます。
|
|
449
|
+
|
|
450
|
+
```plaintext fileName=".gitignore"
|
|
451
|
+
# Intlayerによって生成されたファイルを無視する
|
|
452
|
+
.intlayer
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
### VS Code 拡張機能
|
|
456
|
+
|
|
457
|
+
Intlayer での開発体験を向上させるために、公式の **Intlayer VS Code Extension** をインストールできます。
|
|
458
|
+
|
|
459
|
+
[VS Code Marketplace からインストール](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
460
|
+
|
|
461
|
+
この拡張機能は以下の機能を提供します:
|
|
462
|
+
|
|
463
|
+
- 翻訳キーの **オートコンプリート**。
|
|
464
|
+
- 不足している翻訳の **リアルタイムエラー検出**。
|
|
465
|
+
- 翻訳済みコンテンツの **インラインプレビュー**。
|
|
466
|
+
- 翻訳を簡単に作成・更新するための **クイックアクション**。
|
|
467
|
+
|
|
468
|
+
拡張機能の使用方法の詳細については、[Intlayer VS Code Extension ドキュメント](https://intlayer.org/ja/doc/vs-code-extension)を参照してください。
|
|
469
|
+
|
|
470
|
+
---
|
|
471
|
+
|
|
182
472
|
### さらに進むために
|
|
183
473
|
|
|
184
474
|
さらに進むには、[ビジュアルエディター](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/intlayer_visual_editor.md)を実装するか、[CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/intlayer_CMS.md)を使用してコンテンツを外部化することができます。
|
package/docs/ja/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:
|
|
@@ -199,7 +199,7 @@ v7 では、プロバイダーが定義されていない場合、Markdown ノ
|
|
|
199
199
|
|
|
200
200
|
**3. ユーティリティ関数の使用:**
|
|
201
201
|
|
|
202
|
-
```
|
|
202
|
+
```typescript
|
|
203
203
|
import { renderMarkdown } from "solid-intlayer/markdown";
|
|
204
204
|
|
|
205
205
|
return <div>{renderMarkdown("# My Title")}</div>;
|
|
@@ -334,7 +334,7 @@ v7 では、プロバイダーが定義されていない場合、Markdown ノ
|
|
|
334
334
|
|
|
335
335
|
**1. 直接の使用:**
|
|
336
336
|
|
|
337
|
-
Angular
|
|
337
|
+
Angular では、標準 of `[innerHTML]` バインディングを使用できます。
|
|
338
338
|
|
|
339
339
|
```html
|
|
340
340
|
<div [innerHTML]="'<p>Hello World</p>'"></div>
|
|
@@ -409,6 +409,16 @@ v7 では、プロバイダーが定義されていない場合、Markdown ノ
|
|
|
409
409
|
|
|
410
410
|
---
|
|
411
411
|
|
|
412
|
+
## YAML & Markdown コンテンツファイル (v8.10.0)
|
|
413
|
+
|
|
414
|
+
`.content.md` および `.content.yaml` ファイル拡張子を使用して、コンテンツを直接宣言できるようになりました。これは、長文のコンテンツ、ブログ、ドキュメント、プライバシーポリシーに最適です。
|
|
415
|
+
|
|
416
|
+
これらのファイルはビジュアルエディター(Visual Editor)から直接編集可能であり、非技術的なチームメンバーにとっても合理化されたワークフローを提供します。
|
|
417
|
+
|
|
418
|
+
詳細については、[YAML コンテンツファイルのドキュメント](https://intlayer.org/ja/doc/concept/content#yaml-content-file) および [Markdown コンテンツファイルのドキュメント](https://intlayer.org/ja/doc/concept/content/markdown) を参照してください。
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
412
422
|
## カスタム URL リライト
|
|
413
423
|
|
|
414
424
|
Intlayer v8 は **カスタム URL リライト** を導入し、標準の `/locale/path` 構造と異なるロケール固有のパスを定義できるようになります。これはローカルSEOの改善や、英語以外のユーザーにとってより自然なユーザーエクスペリエンスを提供するための強力な機能です。
|
|
@@ -753,6 +763,61 @@ export default {
|
|
|
753
763
|
</Tab>
|
|
754
764
|
</Tabs>
|
|
755
765
|
|
|
766
|
+
## Unicode CLDR 複数形ルール (v8.8.0)
|
|
767
|
+
|
|
768
|
+
Unicode CLDR プロジェクトで定義された複数形ルールに基づく新しい `plural` ノードヘルパーが導入され、複雑な言語のサポートが向上しました。
|
|
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
|
+
ja: plural({
|
|
778
|
+
other: "{{count}} 個の空き",
|
|
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
|
+
その後、フレームワークコンポーネント内で動的にカウントを渡すことができます:
|
|
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
|
+
{/* 英語の場合: */}
|
|
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
|
+
詳細については、[複数形化のドキュメント](https://intlayer.org/ja/doc/concept/content/plural) を参照してください。
|
|
818
|
+
|
|
819
|
+
---
|
|
820
|
+
|
|
756
821
|
## コンテンツスキーマ検証
|
|
757
822
|
|
|
758
823
|
Intlayer v8 では、辞書に対するスキーマ検証が導入されました。Zod を使って設定内に再利用可能なバリデーションスキーマを定義し、それをコンテンツファイルに適用できます。これにより、コンテンツが常に期待される構造に準拠していることが保証され、ビルド時にエラーを検出できます。
|
|
@@ -797,6 +862,34 @@ export default aboutPageMetaContent;
|
|
|
797
862
|
|
|
798
863
|
---
|
|
799
864
|
|
|
865
|
+
## TypeScript: IntlayerNode プリミティブアクセサー
|
|
866
|
+
|
|
867
|
+
`IntlayerNode` 型が更新され、コンテンツノード上で直接 JavaScript のプリミティブメソッドを呼び出せるようになりました。これにより、ローカライズされたコンテンツを、標準の文字列、数値、真偽値、または配列のプリミティブであるかのように直接操作できます。
|
|
868
|
+
|
|
869
|
+
React、Preact、Solid、Svelte、Vue、および Angular でサポートされています。
|
|
870
|
+
|
|
871
|
+
### 文字列の例
|
|
872
|
+
|
|
873
|
+
```typescript
|
|
874
|
+
content.placeholder; // IntlayerNode<string> を返す
|
|
875
|
+
content.placeholder.value; // string を返す
|
|
876
|
+
content.placeholder.toString(); // string を返す
|
|
877
|
+
content.placeholder.toLowerCase(); // string を返す
|
|
878
|
+
String(content.placeholder); // string を返す
|
|
879
|
+
content.placeholder.toUpperCase(); // 大文字に変換された string を返す
|
|
880
|
+
content.placeholder.replace("a", "b"); // 変更された string を返す
|
|
881
|
+
```
|
|
882
|
+
|
|
883
|
+
### 配列の例
|
|
884
|
+
|
|
885
|
+
```typescript
|
|
886
|
+
content.myArrayOfString // IntlayerNode<Array<string>> を返す
|
|
887
|
+
content.myArrayOfString.find(...) // 要素を返す
|
|
888
|
+
content.myArrayOfString.join(', ') // 結合された string を返す
|
|
889
|
+
```
|
|
890
|
+
|
|
891
|
+
---
|
|
892
|
+
|
|
800
893
|
### 強化された自動コンテンツ検出
|
|
801
894
|
|
|
802
895
|
v8 では、Intlayer がコンテンツ文字列内の Markdown 構文、HTML タグ、および変数挿入を自動的に検出します。これにより、`md()`、`html()`、`insert()` といったヘルパー関数を省略できることが多くなります。
|
|
@@ -1002,6 +1095,17 @@ Intlayer の VSCode 拡張機能は v8 で大幅なアップデートを受け
|
|
|
1002
1095
|
|
|
1003
1096
|
---
|
|
1004
1097
|
|
|
1098
|
+
## ツール: C++ ウォッチャー & OXC ベースの LSP (v8.12.0)
|
|
1099
|
+
|
|
1100
|
+
Intlayer v8.12.0 は、開発者体験に大きな改善をもたらします:
|
|
1101
|
+
|
|
1102
|
+
- **Parcel Watcher**: コンテンツウォッチャーが `chokidar` から `@parcel/watcher` に移行されました。ネイティブの C++ ファイル監視を活用することで、より高速なアップデートと大幅なメモリ消費の削減を実現します。
|
|
1103
|
+
- **新しい Language Server Protocol (LSP)**: まったく新しい LSP が利用可能になりました。OXC ベースのパースで構築されており、IDE や AI エージェントが `useIntlayer('my-key')` の呼び出しと対応する `.content` ファイルをシームレスにリンク(およびその逆)できるように支援します。
|
|
1104
|
+
|
|
1105
|
+
詳細については、[LSP のドキュメント](https://intlayer.org/ja/doc/lsp) を参照してください。
|
|
1106
|
+
|
|
1107
|
+
---
|
|
1108
|
+
|
|
1005
1109
|
## コンパイラの最適化
|
|
1006
1110
|
|
|
1007
1111
|
Intlayer v8 には Markdown と HTML コンパイラ向けの新しいキャッシング層が導入されました。これにより、同じ設定で同一のコンテンツ文字列は一度だけ解析されるため、再レンダリング時や複数箇所で同じコンテンツを使用する場合のオーバーヘッドが大幅に削減されます。
|
|
@@ -1057,6 +1161,48 @@ Intlayer v8 には Markdown と HTML コンパイラ向けの新しいキャッ
|
|
|
1057
1161
|
|
|
1058
1162
|
---
|
|
1059
1163
|
|
|
1164
|
+
## 実験的なビルド最適化: Minify & Purge (v8.7.0)
|
|
1165
|
+
|
|
1166
|
+
Intlayer v8.7.0 では、本番環境のバンドルを最適化するために設計された、`intlayer.config.ts` 内の新しい実験的なビルド機能が導入されました:
|
|
1167
|
+
|
|
1168
|
+
- **辞書のミニファイ (Minification)**: 辞書ファイルをミニファイしてサイズを削減します。
|
|
1169
|
+
- **未使用キーのパージ (Purging)**: 辞書から未使用の翻訳キーをスキャンして削除し、アクティブなキーを短い文字にリネームします(例: `"products" -> "a"`, `"pricing" -> "b"`)。これにより、バンドルサイズが最大 5% 削減されます。
|
|
1170
|
+
- **TypeScript チェックの無効化**: コンパイルステップ中の TypeScript 型チェックを無効にすることで、ビルドを高速化します。
|
|
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
|
+
* バンドルサイズを削減するために辞書をミニファイします。
|
|
1186
|
+
*/
|
|
1187
|
+
minify: true,
|
|
1188
|
+
|
|
1189
|
+
/**
|
|
1190
|
+
* 辞書内の未使用キーをパージします。
|
|
1191
|
+
*/
|
|
1192
|
+
purge: true,
|
|
1193
|
+
|
|
1194
|
+
/**
|
|
1195
|
+
* ビルド時に TypeScript の型チェックを行うかどうかを示します。
|
|
1196
|
+
*/
|
|
1197
|
+
checkTypes: false,
|
|
1198
|
+
},
|
|
1199
|
+
};
|
|
1200
|
+
|
|
1201
|
+
export default config;
|
|
1202
|
+
```
|
|
1203
|
+
|
|
1204
|
+
---
|
|
1205
|
+
|
|
1060
1206
|
## 柔軟性: 統一されたインポートモード
|
|
1061
1207
|
|
|
1062
1208
|
`live` ブールプロパティは、より包括的な `importMode` プロパティに置き換えられ、非推奨になりました。これにより、辞書をどのように読み込むか(静的、動的、またはライブ同期)を明示的に定義できるようになります。
|
|
@@ -1076,7 +1222,7 @@ Intlayer v8 には Markdown と HTML コンパイラ向けの新しいキャッ
|
|
|
1076
1222
|
|
|
1077
1223
|
注: Intlayer v8 では、`importMode` プロパティは `intlayer.config.ts` の `build` 設定から `dictionary` 設定へ移動しました。これにより、すべての辞書に対するデフォルトのインポートモードを定義しつつ、各辞書ごとに上書きできるようになります。
|
|
1078
1224
|
|
|
1079
|
-
|
|
1225
|
+
**グローバル設定 of 例:**
|
|
1080
1226
|
|
|
1081
1227
|
```typescript fileName="intlayer.config.ts"
|
|
1082
1228
|
export default {
|
|
@@ -1204,6 +1350,49 @@ Svelte 内の Markdown および HTML コンテンツは、文字列化(string
|
|
|
1204
1350
|
|
|
1205
1351
|
---
|
|
1206
1352
|
|
|
1353
|
+
## Angular サポート: Vite バンドラー (v8.11.0)
|
|
1354
|
+
|
|
1355
|
+
Angular ユーザー向けに、Intlayer は新しいカスタム esbuild プラグインを介して Vite バンドラーをネイティブにサポートするようになり、開発およびビルド時間が短縮されました。
|
|
1356
|
+
|
|
1357
|
+
設定の詳細については、[Angular 環境のドキュメント](https://intlayer.org/ja/doc/environment/angular) を参照してください。
|
|
1358
|
+
|
|
1359
|
+
---
|
|
1360
|
+
|
|
1361
|
+
## サイトマップ生成 (v8.6.0)
|
|
1362
|
+
|
|
1363
|
+
Intlayer は、ロケールとルーティングモードに基づいてサイトマップを自動的に生成するようになりました。これは、TanStack Router などのルーターアーキテクチャにおける SEO 最適化に特に役立ちます:
|
|
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
|
## v7 からの移行ノート
|
|
1208
1397
|
|
|
1209
1398
|
### 設定の変更
|