@intlayer/docs 9.4.2 → 9.4.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/blog/ar/date_time_number_formatting_locales.md +216 -0
- package/blog/ar/detecting_missing_translations.md +202 -0
- package/blog/ar/i18n_in_ci_cd_pipelines.md +247 -0
- package/blog/ar/i18n_meaning.md +0 -2
- package/blog/ar/i18n_testing_strategies.md +179 -0
- package/blog/ar/intlayer_with_i18next.md +3 -3
- package/blog/ar/intlayer_with_next-i18next.md +3 -3
- package/blog/ar/intlayer_with_next-intl.md +3 -3
- package/blog/ar/intlayer_with_react-i18next.md +3 -3
- package/blog/ar/intlayer_with_react-intl.md +3 -3
- package/blog/ar/intlayer_with_vue-i18n.md +3 -3
- package/blog/ar/is_i18next_outdated.md +315 -0
- package/blog/ar/is_next-intl_outdated.md +363 -0
- package/blog/ar/is_vue-i18n_outdated.md +338 -0
- package/blog/ar/list_i18n_technologies/build-tools/vite.md +177 -0
- package/blog/ar/list_i18n_technologies/frameworks/angular.md +0 -2
- package/blog/ar/list_i18n_technologies/frameworks/react-native.md +0 -2
- package/blog/ar/list_i18n_technologies/frameworks/react.md +0 -2
- package/blog/ar/list_i18n_technologies/frameworks/svelte.md +0 -2
- package/blog/ar/list_i18n_technologies/frameworks/vue.md +0 -2
- package/blog/ar/what_is_internationalization.md +0 -2
- package/blog/de/date_time_number_formatting_locales.md +216 -0
- package/blog/de/detecting_missing_translations.md +202 -0
- package/blog/de/i18n_in_ci_cd_pipelines.md +247 -0
- package/blog/de/i18n_meaning.md +0 -2
- package/blog/de/i18n_testing_strategies.md +179 -0
- package/blog/de/intlayer_with_i18next.md +3 -3
- package/blog/de/intlayer_with_next-i18next.md +3 -3
- package/blog/de/intlayer_with_next-intl.md +3 -3
- package/blog/de/intlayer_with_react-i18next.md +3 -3
- package/blog/de/intlayer_with_react-intl.md +3 -3
- package/blog/de/intlayer_with_vue-i18n.md +3 -3
- package/blog/de/is_i18next_outdated.md +315 -0
- package/blog/de/is_next-intl_outdated.md +363 -0
- package/blog/de/is_vue-i18n_outdated.md +338 -0
- package/blog/de/list_i18n_technologies/build-tools/vite.md +179 -0
- package/blog/de/list_i18n_technologies/frameworks/angular.md +0 -2
- package/blog/de/list_i18n_technologies/frameworks/react-native.md +0 -2
- package/blog/de/list_i18n_technologies/frameworks/react.md +0 -2
- package/blog/de/list_i18n_technologies/frameworks/svelte.md +0 -2
- package/blog/de/list_i18n_technologies/frameworks/vue.md +0 -2
- package/blog/de/what_is_internationalization.md +0 -2
- package/blog/en/date_time_number_formatting_locales.md +216 -0
- package/blog/en/detecting_missing_translations.md +202 -0
- package/blog/en/i18n_in_ci_cd_pipelines.md +247 -0
- package/blog/en/i18n_meaning.md +0 -2
- package/blog/en/i18n_testing_strategies.md +179 -0
- package/blog/en/icu_message_format.md +288 -0
- package/blog/en/intlayer_with_i18next.md +3 -3
- package/blog/en/intlayer_with_next-i18next.md +3 -3
- package/blog/en/intlayer_with_next-intl.md +3 -3
- package/blog/en/intlayer_with_react-i18next.md +3 -3
- package/blog/en/intlayer_with_react-intl.md +3 -3
- package/blog/en/intlayer_with_vue-i18n.md +3 -3
- package/blog/en/is_i18next_outdated.md +315 -0
- package/blog/en/is_next-intl_outdated.md +363 -0
- package/blog/en/is_vue-i18n_outdated.md +338 -0
- package/blog/en/list_i18n_technologies/build-tools/vite.md +179 -0
- package/blog/en/list_i18n_technologies/frameworks/angular.md +184 -108
- package/blog/en/list_i18n_technologies/frameworks/astro.md +268 -0
- package/blog/en/list_i18n_technologies/frameworks/nextjs.md +196 -0
- package/blog/en/list_i18n_technologies/frameworks/nuxt.md +255 -0
- package/blog/en/list_i18n_technologies/frameworks/react-native.md +133 -154
- package/blog/en/list_i18n_technologies/frameworks/react-router.md +331 -0
- package/blog/en/list_i18n_technologies/frameworks/react.md +176 -96
- package/blog/en/list_i18n_technologies/frameworks/solid.md +268 -0
- package/blog/en/list_i18n_technologies/frameworks/svelte.md +156 -88
- package/blog/en/list_i18n_technologies/frameworks/sveltekit.md +235 -0
- package/blog/en/list_i18n_technologies/frameworks/tanstack-start.md +280 -0
- package/blog/en/list_i18n_technologies/frameworks/vue.md +167 -95
- package/blog/en/what_is_internationalization.md +0 -2
- package/blog/en-GB/date_time_number_formatting_locales.md +216 -0
- package/blog/en-GB/detecting_missing_translations.md +202 -0
- package/blog/en-GB/i18n_in_ci_cd_pipelines.md +247 -0
- package/blog/en-GB/i18n_meaning.md +0 -2
- package/blog/en-GB/i18n_testing_strategies.md +179 -0
- package/blog/en-GB/intlayer_with_i18next.md +3 -3
- package/blog/en-GB/intlayer_with_next-i18next.md +3 -3
- package/blog/en-GB/intlayer_with_next-intl.md +3 -3
- package/blog/en-GB/intlayer_with_react-i18next.md +3 -3
- package/blog/en-GB/intlayer_with_react-intl.md +3 -3
- package/blog/en-GB/intlayer_with_vue-i18n.md +3 -3
- package/blog/en-GB/is_i18next_outdated.md +315 -0
- package/blog/en-GB/is_next-intl_outdated.md +363 -0
- package/blog/en-GB/is_vue-i18n_outdated.md +338 -0
- package/blog/en-GB/list_i18n_technologies/build-tools/vite.md +179 -0
- package/blog/en-GB/list_i18n_technologies/frameworks/angular.md +0 -2
- package/blog/en-GB/list_i18n_technologies/frameworks/react-native.md +0 -2
- package/blog/en-GB/list_i18n_technologies/frameworks/react.md +0 -2
- package/blog/en-GB/list_i18n_technologies/frameworks/svelte.md +0 -2
- package/blog/en-GB/list_i18n_technologies/frameworks/vue.md +0 -2
- package/blog/en-GB/what_is_internationalization.md +0 -2
- package/blog/es/date_time_number_formatting_locales.md +216 -0
- package/blog/es/detecting_missing_translations.md +202 -0
- package/blog/es/i18n_in_ci_cd_pipelines.md +247 -0
- package/blog/es/i18n_meaning.md +0 -2
- package/blog/es/i18n_testing_strategies.md +179 -0
- package/blog/es/intlayer_with_i18next.md +3 -3
- package/blog/es/intlayer_with_next-i18next.md +3 -3
- package/blog/es/intlayer_with_next-intl.md +3 -3
- package/blog/es/intlayer_with_react-i18next.md +3 -3
- package/blog/es/intlayer_with_react-intl.md +3 -3
- package/blog/es/intlayer_with_vue-i18n.md +3 -3
- package/blog/es/is_i18next_outdated.md +315 -0
- package/blog/es/is_next-intl_outdated.md +363 -0
- package/blog/es/is_vue-i18n_outdated.md +338 -0
- package/blog/es/list_i18n_technologies/build-tools/vite.md +179 -0
- package/blog/es/list_i18n_technologies/frameworks/angular.md +0 -2
- package/blog/es/list_i18n_technologies/frameworks/react-native.md +0 -2
- package/blog/es/list_i18n_technologies/frameworks/react.md +0 -2
- package/blog/es/list_i18n_technologies/frameworks/svelte.md +0 -2
- package/blog/es/list_i18n_technologies/frameworks/vue.md +0 -2
- package/blog/es/what_is_internationalization.md +0 -2
- package/blog/fr/date_time_number_formatting_locales.md +216 -0
- package/blog/fr/detecting_missing_translations.md +202 -0
- package/blog/fr/i18n_in_ci_cd_pipelines.md +247 -0
- package/blog/fr/i18n_meaning.md +0 -2
- package/blog/fr/i18n_testing_strategies.md +179 -0
- package/blog/fr/intlayer_with_i18next.md +3 -3
- package/blog/fr/intlayer_with_next-i18next.md +3 -3
- package/blog/fr/intlayer_with_next-intl.md +3 -3
- package/blog/fr/intlayer_with_react-i18next.md +3 -3
- package/blog/fr/intlayer_with_react-intl.md +3 -3
- package/blog/fr/intlayer_with_vue-i18n.md +3 -3
- package/blog/fr/is_i18next_outdated.md +315 -0
- package/blog/fr/is_next-intl_outdated.md +363 -0
- package/blog/fr/is_vue-i18n_outdated.md +338 -0
- package/blog/fr/list_i18n_technologies/build-tools/vite.md +179 -0
- package/blog/fr/list_i18n_technologies/frameworks/angular.md +0 -2
- package/blog/fr/list_i18n_technologies/frameworks/react-native.md +0 -2
- package/blog/fr/list_i18n_technologies/frameworks/react.md +0 -2
- package/blog/fr/list_i18n_technologies/frameworks/svelte.md +0 -2
- package/blog/fr/list_i18n_technologies/frameworks/vue.md +0 -2
- package/blog/fr/what_is_internationalization.md +0 -2
- package/blog/hi/date_time_number_formatting_locales.md +216 -0
- package/blog/hi/detecting_missing_translations.md +202 -0
- package/blog/hi/i18n_in_ci_cd_pipelines.md +247 -0
- package/blog/hi/i18n_meaning.md +0 -2
- package/blog/hi/i18n_testing_strategies.md +179 -0
- package/blog/hi/intlayer_with_i18next.md +3 -3
- package/blog/hi/intlayer_with_next-i18next.md +3 -3
- package/blog/hi/intlayer_with_next-intl.md +3 -3
- package/blog/hi/intlayer_with_react-i18next.md +3 -3
- package/blog/hi/intlayer_with_react-intl.md +3 -3
- package/blog/hi/intlayer_with_vue-i18n.md +3 -3
- package/blog/hi/is_i18next_outdated.md +317 -0
- package/blog/hi/is_next-intl_outdated.md +363 -0
- package/blog/hi/is_vue-i18n_outdated.md +338 -0
- package/blog/hi/list_i18n_technologies/build-tools/vite.md +177 -0
- package/blog/hi/list_i18n_technologies/frameworks/angular.md +0 -2
- package/blog/hi/list_i18n_technologies/frameworks/react-native.md +0 -2
- package/blog/hi/list_i18n_technologies/frameworks/react.md +0 -2
- package/blog/hi/list_i18n_technologies/frameworks/svelte.md +0 -2
- package/blog/hi/list_i18n_technologies/frameworks/vue.md +0 -2
- package/blog/hi/what_is_internationalization.md +0 -2
- package/blog/id/date_time_number_formatting_locales.md +216 -0
- package/blog/id/detecting_missing_translations.md +202 -0
- package/blog/id/i18n_in_ci_cd_pipelines.md +247 -0
- package/blog/id/i18n_meaning.md +0 -2
- package/blog/id/i18n_testing_strategies.md +179 -0
- package/blog/id/intlayer_with_i18next.md +3 -3
- package/blog/id/intlayer_with_next-i18next.md +3 -3
- package/blog/id/intlayer_with_next-intl.md +3 -3
- package/blog/id/intlayer_with_react-i18next.md +3 -3
- package/blog/id/intlayer_with_react-intl.md +3 -3
- package/blog/id/intlayer_with_vue-i18n.md +3 -3
- package/blog/id/is_i18next_outdated.md +317 -0
- package/blog/id/is_next-intl_outdated.md +363 -0
- package/blog/id/is_vue-i18n_outdated.md +338 -0
- package/blog/id/list_i18n_technologies/build-tools/vite.md +177 -0
- package/blog/id/list_i18n_technologies/frameworks/angular.md +0 -2
- package/blog/id/list_i18n_technologies/frameworks/react-native.md +0 -2
- package/blog/id/list_i18n_technologies/frameworks/react.md +0 -2
- package/blog/id/list_i18n_technologies/frameworks/svelte.md +0 -2
- package/blog/id/list_i18n_technologies/frameworks/vue.md +0 -2
- package/blog/id/what_is_internationalization.md +0 -2
- package/blog/it/date_time_number_formatting_locales.md +216 -0
- package/blog/it/detecting_missing_translations.md +202 -0
- package/blog/it/i18n_in_ci_cd_pipelines.md +247 -0
- package/blog/it/i18n_meaning.md +0 -2
- package/blog/it/i18n_testing_strategies.md +179 -0
- package/blog/it/intlayer_with_i18next.md +3 -3
- package/blog/it/intlayer_with_next-i18next.md +3 -3
- package/blog/it/intlayer_with_next-intl.md +3 -3
- package/blog/it/intlayer_with_react-i18next.md +3 -3
- package/blog/it/intlayer_with_react-intl.md +3 -3
- package/blog/it/intlayer_with_vue-i18n.md +3 -3
- package/blog/it/is_i18next_outdated.md +315 -0
- package/blog/it/is_next-intl_outdated.md +363 -0
- package/blog/it/is_vue-i18n_outdated.md +338 -0
- package/blog/it/list_i18n_technologies/build-tools/vite.md +179 -0
- package/blog/it/list_i18n_technologies/frameworks/angular.md +0 -2
- package/blog/it/list_i18n_technologies/frameworks/react-native.md +0 -2
- package/blog/it/list_i18n_technologies/frameworks/react.md +0 -2
- package/blog/it/list_i18n_technologies/frameworks/svelte.md +0 -2
- package/blog/it/list_i18n_technologies/frameworks/vue.md +0 -2
- package/blog/it/what_is_internationalization.md +0 -2
- package/blog/ja/date_time_number_formatting_locales.md +216 -0
- package/blog/ja/detecting_missing_translations.md +202 -0
- package/blog/ja/i18n_in_ci_cd_pipelines.md +247 -0
- package/blog/ja/i18n_meaning.md +0 -2
- package/blog/ja/i18n_testing_strategies.md +179 -0
- package/blog/ja/intlayer_with_i18next.md +3 -3
- package/blog/ja/intlayer_with_next-i18next.md +3 -3
- package/blog/ja/intlayer_with_next-intl.md +3 -3
- package/blog/ja/intlayer_with_react-i18next.md +3 -3
- package/blog/ja/intlayer_with_react-intl.md +3 -3
- package/blog/ja/intlayer_with_vue-i18n.md +3 -3
- package/blog/ja/is_i18next_outdated.md +315 -0
- package/blog/ja/is_next-intl_outdated.md +363 -0
- package/blog/ja/is_vue-i18n_outdated.md +338 -0
- package/blog/ja/list_i18n_technologies/build-tools/vite.md +179 -0
- package/blog/ja/list_i18n_technologies/frameworks/angular.md +0 -2
- package/blog/ja/list_i18n_technologies/frameworks/react-native.md +0 -2
- package/blog/ja/list_i18n_technologies/frameworks/react.md +0 -2
- package/blog/ja/list_i18n_technologies/frameworks/svelte.md +0 -2
- package/blog/ja/list_i18n_technologies/frameworks/vue.md +0 -2
- package/blog/ja/what_is_internationalization.md +0 -2
- package/blog/ko/date_time_number_formatting_locales.md +216 -0
- package/blog/ko/detecting_missing_translations.md +202 -0
- package/blog/ko/i18n_in_ci_cd_pipelines.md +247 -0
- package/blog/ko/i18n_meaning.md +0 -2
- package/blog/ko/i18n_testing_strategies.md +179 -0
- package/blog/ko/intlayer_with_i18next.md +3 -3
- package/blog/ko/intlayer_with_next-i18next.md +3 -3
- package/blog/ko/intlayer_with_next-intl.md +3 -3
- package/blog/ko/intlayer_with_react-i18next.md +3 -3
- package/blog/ko/intlayer_with_react-intl.md +3 -3
- package/blog/ko/intlayer_with_vue-i18n.md +3 -3
- package/blog/ko/is_i18next_outdated.md +317 -0
- package/blog/ko/is_next-intl_outdated.md +363 -0
- package/blog/ko/is_vue-i18n_outdated.md +338 -0
- package/blog/ko/list_i18n_technologies/build-tools/vite.md +179 -0
- package/blog/ko/list_i18n_technologies/frameworks/angular.md +0 -2
- package/blog/ko/list_i18n_technologies/frameworks/react-native.md +0 -2
- package/blog/ko/list_i18n_technologies/frameworks/react.md +0 -2
- package/blog/ko/list_i18n_technologies/frameworks/svelte.md +0 -2
- package/blog/ko/list_i18n_technologies/frameworks/vue.md +0 -2
- package/blog/ko/what_is_internationalization.md +0 -2
- package/blog/pl/date_time_number_formatting_locales.md +216 -0
- package/blog/pl/detecting_missing_translations.md +202 -0
- package/blog/pl/i18n_in_ci_cd_pipelines.md +247 -0
- package/blog/pl/i18n_meaning.md +0 -2
- package/blog/pl/i18n_testing_strategies.md +179 -0
- package/blog/pl/intlayer_with_i18next.md +3 -3
- package/blog/pl/intlayer_with_next-i18next.md +3 -3
- package/blog/pl/intlayer_with_next-intl.md +3 -3
- package/blog/pl/intlayer_with_react-i18next.md +3 -3
- package/blog/pl/intlayer_with_react-intl.md +3 -3
- package/blog/pl/intlayer_with_vue-i18n.md +3 -3
- package/blog/pl/is_i18next_outdated.md +315 -0
- package/blog/pl/is_next-intl_outdated.md +363 -0
- package/blog/pl/is_vue-i18n_outdated.md +338 -0
- package/blog/pl/list_i18n_technologies/build-tools/vite.md +177 -0
- package/blog/pl/list_i18n_technologies/frameworks/angular.md +0 -2
- package/blog/pl/list_i18n_technologies/frameworks/react-native.md +0 -2
- package/blog/pl/list_i18n_technologies/frameworks/react.md +0 -2
- package/blog/pl/list_i18n_technologies/frameworks/svelte.md +0 -2
- package/blog/pl/list_i18n_technologies/frameworks/vue.md +0 -2
- package/blog/pl/what_is_internationalization.md +0 -2
- package/blog/pt/date_time_number_formatting_locales.md +216 -0
- package/blog/pt/detecting_missing_translations.md +202 -0
- package/blog/pt/i18n_in_ci_cd_pipelines.md +247 -0
- package/blog/pt/i18n_meaning.md +0 -2
- package/blog/pt/i18n_testing_strategies.md +179 -0
- package/blog/pt/intlayer_with_i18next.md +3 -3
- package/blog/pt/intlayer_with_next-i18next.md +3 -3
- package/blog/pt/intlayer_with_next-intl.md +3 -3
- package/blog/pt/intlayer_with_react-i18next.md +3 -3
- package/blog/pt/intlayer_with_react-intl.md +3 -3
- package/blog/pt/intlayer_with_vue-i18n.md +3 -3
- package/blog/pt/is_i18next_outdated.md +315 -0
- package/blog/pt/is_next-intl_outdated.md +363 -0
- package/blog/pt/is_vue-i18n_outdated.md +338 -0
- package/blog/pt/list_i18n_technologies/build-tools/vite.md +179 -0
- package/blog/pt/list_i18n_technologies/frameworks/angular.md +0 -2
- package/blog/pt/list_i18n_technologies/frameworks/react-native.md +0 -2
- package/blog/pt/list_i18n_technologies/frameworks/react.md +0 -2
- package/blog/pt/list_i18n_technologies/frameworks/svelte.md +0 -2
- package/blog/pt/list_i18n_technologies/frameworks/vue.md +0 -2
- package/blog/pt/what_is_internationalization.md +0 -2
- package/blog/ru/date_time_number_formatting_locales.md +216 -0
- package/blog/ru/detecting_missing_translations.md +202 -0
- package/blog/ru/i18n_in_ci_cd_pipelines.md +247 -0
- package/blog/ru/i18n_meaning.md +0 -2
- package/blog/ru/i18n_testing_strategies.md +179 -0
- package/blog/ru/intlayer_with_i18next.md +3 -3
- package/blog/ru/intlayer_with_next-i18next.md +3 -3
- package/blog/ru/intlayer_with_next-intl.md +3 -3
- package/blog/ru/intlayer_with_react-i18next.md +3 -3
- package/blog/ru/intlayer_with_react-intl.md +3 -3
- package/blog/ru/intlayer_with_vue-i18n.md +3 -3
- package/blog/ru/is_i18next_outdated.md +315 -0
- package/blog/ru/is_next-intl_outdated.md +363 -0
- package/blog/ru/is_vue-i18n_outdated.md +338 -0
- package/blog/ru/list_i18n_technologies/build-tools/vite.md +179 -0
- package/blog/ru/list_i18n_technologies/frameworks/angular.md +0 -2
- package/blog/ru/list_i18n_technologies/frameworks/react-native.md +0 -2
- package/blog/ru/list_i18n_technologies/frameworks/react.md +0 -2
- package/blog/ru/list_i18n_technologies/frameworks/svelte.md +0 -2
- package/blog/ru/list_i18n_technologies/frameworks/vue.md +0 -2
- package/blog/ru/what_is_internationalization.md +0 -2
- package/blog/tr/date_time_number_formatting_locales.md +216 -0
- package/blog/tr/detecting_missing_translations.md +202 -0
- package/blog/tr/i18n_in_ci_cd_pipelines.md +247 -0
- package/blog/tr/i18n_meaning.md +0 -2
- package/blog/tr/i18n_testing_strategies.md +179 -0
- package/blog/tr/intlayer_with_i18next.md +3 -3
- package/blog/tr/intlayer_with_next-i18next.md +3 -3
- package/blog/tr/intlayer_with_next-intl.md +3 -3
- package/blog/tr/intlayer_with_react-i18next.md +3 -3
- package/blog/tr/intlayer_with_react-intl.md +3 -3
- package/blog/tr/intlayer_with_vue-i18n.md +3 -3
- package/blog/tr/is_i18next_outdated.md +315 -0
- package/blog/tr/is_next-intl_outdated.md +363 -0
- package/blog/tr/is_vue-i18n_outdated.md +338 -0
- package/blog/tr/list_i18n_technologies/build-tools/vite.md +179 -0
- package/blog/tr/list_i18n_technologies/frameworks/angular.md +0 -2
- package/blog/tr/list_i18n_technologies/frameworks/react-native.md +0 -2
- package/blog/tr/list_i18n_technologies/frameworks/react.md +0 -2
- package/blog/tr/list_i18n_technologies/frameworks/svelte.md +0 -2
- package/blog/tr/list_i18n_technologies/frameworks/vue.md +0 -2
- package/blog/tr/what_is_internationalization.md +0 -2
- package/blog/uk/date_time_number_formatting_locales.md +216 -0
- package/blog/uk/detecting_missing_translations.md +202 -0
- package/blog/uk/i18n_in_ci_cd_pipelines.md +247 -0
- package/blog/uk/i18n_meaning.md +0 -2
- package/blog/uk/i18n_testing_strategies.md +179 -0
- package/blog/uk/intlayer_with_i18next.md +3 -3
- package/blog/uk/intlayer_with_next-i18next.md +3 -3
- package/blog/uk/intlayer_with_next-intl.md +3 -3
- package/blog/uk/intlayer_with_react-i18next.md +3 -3
- package/blog/uk/intlayer_with_react-intl.md +3 -3
- package/blog/uk/intlayer_with_vue-i18n.md +3 -3
- package/blog/uk/is_i18next_outdated.md +315 -0
- package/blog/uk/is_next-intl_outdated.md +363 -0
- package/blog/uk/is_vue-i18n_outdated.md +338 -0
- package/blog/uk/list_i18n_technologies/build-tools/vite.md +177 -0
- package/blog/uk/list_i18n_technologies/frameworks/angular.md +0 -2
- package/blog/uk/list_i18n_technologies/frameworks/react-native.md +0 -2
- package/blog/uk/list_i18n_technologies/frameworks/react.md +0 -2
- package/blog/uk/list_i18n_technologies/frameworks/svelte.md +0 -2
- package/blog/uk/list_i18n_technologies/frameworks/vue.md +0 -2
- package/blog/uk/what_is_internationalization.md +0 -2
- package/blog/vi/date_time_number_formatting_locales.md +216 -0
- package/blog/vi/detecting_missing_translations.md +202 -0
- package/blog/vi/i18n_in_ci_cd_pipelines.md +247 -0
- package/blog/vi/i18n_meaning.md +0 -2
- package/blog/vi/i18n_testing_strategies.md +179 -0
- package/blog/vi/intlayer_with_i18next.md +3 -3
- package/blog/vi/intlayer_with_next-i18next.md +3 -3
- package/blog/vi/intlayer_with_next-intl.md +3 -3
- package/blog/vi/intlayer_with_react-i18next.md +3 -3
- package/blog/vi/intlayer_with_react-intl.md +3 -3
- package/blog/vi/intlayer_with_vue-i18n.md +3 -3
- package/blog/vi/is_i18next_outdated.md +317 -0
- package/blog/vi/is_next-intl_outdated.md +363 -0
- package/blog/vi/is_vue-i18n_outdated.md +338 -0
- package/blog/vi/list_i18n_technologies/build-tools/vite.md +177 -0
- package/blog/vi/list_i18n_technologies/frameworks/angular.md +0 -2
- package/blog/vi/list_i18n_technologies/frameworks/react-native.md +0 -2
- package/blog/vi/list_i18n_technologies/frameworks/react.md +0 -2
- package/blog/vi/list_i18n_technologies/frameworks/svelte.md +0 -2
- package/blog/vi/list_i18n_technologies/frameworks/vue.md +0 -2
- package/blog/vi/what_is_internationalization.md +0 -2
- package/blog/zh/date_time_number_formatting_locales.md +216 -0
- package/blog/zh/detecting_missing_translations.md +202 -0
- package/blog/zh/i18n_in_ci_cd_pipelines.md +247 -0
- package/blog/zh/i18n_meaning.md +0 -2
- package/blog/zh/i18n_testing_strategies.md +179 -0
- package/blog/zh/intlayer_with_i18next.md +3 -3
- package/blog/zh/intlayer_with_next-i18next.md +3 -3
- package/blog/zh/intlayer_with_next-intl.md +3 -3
- package/blog/zh/intlayer_with_react-i18next.md +3 -3
- package/blog/zh/intlayer_with_react-intl.md +3 -3
- package/blog/zh/intlayer_with_vue-i18n.md +3 -3
- package/blog/zh/is_i18next_outdated.md +317 -0
- package/blog/zh/is_next-intl_outdated.md +363 -0
- package/blog/zh/is_vue-i18n_outdated.md +338 -0
- package/blog/zh/list_i18n_technologies/build-tools/vite.md +179 -0
- package/blog/zh/list_i18n_technologies/frameworks/angular.md +0 -2
- package/blog/zh/list_i18n_technologies/frameworks/react-native.md +0 -2
- package/blog/zh/list_i18n_technologies/frameworks/react.md +0 -2
- package/blog/zh/list_i18n_technologies/frameworks/svelte.md +0 -2
- package/blog/zh/list_i18n_technologies/frameworks/vue.md +0 -2
- package/blog/zh/what_is_internationalization.md +0 -2
- package/dist/cjs/generated/blog.entry.cjs +320 -0
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +320 -0
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/types/generated/blog.entry.d.ts +16 -0
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/docs/ar/bundle_optimization.md +186 -186
- package/docs/ar/intlayer_with_adonisjs.md +3 -3
- package/docs/ar/intlayer_with_analog.md +3 -3
- package/docs/ar/intlayer_with_angular_19.md +3 -3
- package/docs/ar/intlayer_with_angular_21.md +3 -3
- package/docs/ar/intlayer_with_astro.md +3 -3
- package/docs/ar/intlayer_with_astro_lit.md +3 -3
- package/docs/ar/intlayer_with_astro_preact.md +3 -3
- package/docs/ar/intlayer_with_astro_react.md +3 -3
- package/docs/ar/intlayer_with_astro_solid.md +3 -3
- package/docs/ar/intlayer_with_astro_svelte.md +3 -3
- package/docs/ar/intlayer_with_astro_vanilla.md +3 -3
- package/docs/ar/intlayer_with_astro_vue.md +3 -3
- package/docs/ar/intlayer_with_create_react_app.md +3 -3
- package/docs/ar/intlayer_with_elysia.md +4 -4
- package/docs/ar/intlayer_with_express.md +3 -3
- package/docs/ar/intlayer_with_fastify.md +4 -4
- package/docs/ar/intlayer_with_hono.md +3 -3
- package/docs/ar/intlayer_with_lynx+react.md +3 -3
- package/docs/ar/intlayer_with_nestjs.md +3 -3
- package/docs/ar/intlayer_with_next-i18next.md +3 -3
- package/docs/ar/intlayer_with_nextjs_14.md +3 -3
- package/docs/ar/intlayer_with_nextjs_15.md +3 -3
- package/docs/ar/intlayer_with_nextjs_16.md +3 -3
- package/docs/ar/intlayer_with_nextjs_compiler.md +3 -3
- package/docs/ar/intlayer_with_nextjs_no_locale_path.md +3 -3
- package/docs/ar/intlayer_with_nextjs_page_router.md +3 -3
- package/docs/ar/intlayer_with_nuxt.md +3 -3
- package/docs/ar/intlayer_with_react_native+expo.md +3 -3
- package/docs/ar/intlayer_with_react_router_v7.md +3 -3
- package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +3 -3
- package/docs/ar/intlayer_with_solid_start.md +3 -3
- package/docs/ar/intlayer_with_svelte_kit.md +3 -3
- package/docs/ar/intlayer_with_tanstack+solid.md +3 -3
- package/docs/ar/intlayer_with_tanstack.md +3 -3
- package/docs/ar/intlayer_with_vite+lit.md +3 -3
- package/docs/ar/intlayer_with_vite+preact.md +3 -3
- package/docs/ar/intlayer_with_vite+react.md +3 -3
- package/docs/ar/intlayer_with_vite+react_compiler.md +3 -3
- package/docs/ar/intlayer_with_vite+solid.md +3 -3
- package/docs/ar/intlayer_with_vite+svelte.md +4 -12
- package/docs/ar/intlayer_with_vite+vanilla.md +3 -3
- package/docs/ar/intlayer_with_vite+vue.md +3 -3
- package/docs/ar/migration_from_i18next_to_intlayer.md +3 -3
- package/docs/ar/migration_from_next-i18next_to_intlayer.md +3 -3
- package/docs/ar/migration_from_next-intl_to_intlayer.md +3 -3
- package/docs/ar/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
- package/docs/ar/migration_from_react-i18next_to_intlayer.md +3 -3
- package/docs/ar/migration_from_vue-i18n_to_intlayer.md +3 -3
- package/docs/bn/bundle_optimization.md +186 -186
- package/docs/bn/intlayer_with_angular_21.md +3 -3
- package/docs/bn/intlayer_with_fastify.md +4 -4
- package/docs/bn/intlayer_with_hono.md +3 -3
- package/docs/bn/intlayer_with_vite+lit.md +3 -3
- package/docs/bn/intlayer_with_vite+vanilla.md +3 -3
- package/docs/cs/bundle_optimization.md +186 -186
- package/docs/cs/intlayer_with_angular_21.md +3 -3
- package/docs/cs/intlayer_with_fastify.md +4 -4
- package/docs/cs/intlayer_with_hono.md +3 -3
- package/docs/cs/intlayer_with_vite+lit.md +3 -3
- package/docs/cs/intlayer_with_vite+vanilla.md +3 -3
- package/docs/de/bundle_optimization.md +186 -186
- package/docs/de/intlayer_with_adonisjs.md +3 -3
- package/docs/de/intlayer_with_analog.md +3 -3
- package/docs/de/intlayer_with_angular_19.md +3 -3
- package/docs/de/intlayer_with_angular_21.md +3 -3
- package/docs/de/intlayer_with_astro.md +3 -3
- package/docs/de/intlayer_with_astro_lit.md +3 -3
- package/docs/de/intlayer_with_astro_preact.md +3 -3
- package/docs/de/intlayer_with_astro_react.md +3 -3
- package/docs/de/intlayer_with_astro_solid.md +3 -3
- package/docs/de/intlayer_with_astro_svelte.md +3 -3
- package/docs/de/intlayer_with_astro_vanilla.md +3 -3
- package/docs/de/intlayer_with_astro_vue.md +3 -3
- package/docs/de/intlayer_with_create_react_app.md +3 -3
- package/docs/de/intlayer_with_elysia.md +4 -4
- package/docs/de/intlayer_with_express.md +3 -3
- package/docs/de/intlayer_with_fastify.md +4 -4
- package/docs/de/intlayer_with_hono.md +3 -3
- package/docs/de/intlayer_with_lynx+react.md +3 -3
- package/docs/de/intlayer_with_nestjs.md +3 -3
- package/docs/de/intlayer_with_next-i18next.md +3 -3
- package/docs/de/intlayer_with_nextjs_14.md +3 -3
- package/docs/de/intlayer_with_nextjs_15.md +3 -3
- package/docs/de/intlayer_with_nextjs_16.md +3 -3
- package/docs/de/intlayer_with_nextjs_compiler.md +3 -3
- package/docs/de/intlayer_with_nextjs_no_locale_path.md +3 -3
- package/docs/de/intlayer_with_nextjs_page_router.md +3 -3
- package/docs/de/intlayer_with_nuxt.md +3 -3
- package/docs/de/intlayer_with_react_native+expo.md +3 -3
- package/docs/de/intlayer_with_react_router_v7.md +3 -3
- package/docs/de/intlayer_with_solid_start.md +3 -3
- package/docs/de/intlayer_with_svelte_kit.md +3 -3
- package/docs/de/intlayer_with_tanstack+solid.md +3 -3
- package/docs/de/intlayer_with_tanstack.md +3 -3
- package/docs/de/intlayer_with_vite+lit.md +3 -3
- package/docs/de/intlayer_with_vite+preact.md +3 -3
- package/docs/de/intlayer_with_vite+react.md +3 -3
- package/docs/de/intlayer_with_vite+react_compiler.md +3 -3
- package/docs/de/intlayer_with_vite+solid.md +3 -3
- package/docs/de/intlayer_with_vite+svelte.md +4 -12
- package/docs/de/intlayer_with_vite+vanilla.md +3 -3
- package/docs/de/intlayer_with_vite+vue.md +3 -3
- package/docs/de/migration_from_i18next_to_intlayer.md +3 -3
- package/docs/de/migration_from_next-i18next_to_intlayer.md +3 -3
- package/docs/de/migration_from_next-intl_to_intlayer.md +3 -3
- package/docs/de/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
- package/docs/de/migration_from_react-i18next_to_intlayer.md +3 -3
- package/docs/de/migration_from_vue-i18n_to_intlayer.md +3 -3
- package/docs/en/bundle_optimization.md +186 -186
- package/docs/en/intlayer_with_adonisjs.md +3 -3
- package/docs/en/intlayer_with_analog.md +3 -3
- package/docs/en/intlayer_with_angular_19.md +3 -3
- package/docs/en/intlayer_with_angular_21.md +3 -3
- package/docs/en/intlayer_with_astro.md +3 -3
- package/docs/en/intlayer_with_astro_lit.md +3 -3
- package/docs/en/intlayer_with_astro_preact.md +3 -3
- package/docs/en/intlayer_with_astro_react.md +3 -3
- package/docs/en/intlayer_with_astro_solid.md +3 -3
- package/docs/en/intlayer_with_astro_svelte.md +3 -3
- package/docs/en/intlayer_with_astro_vanilla.md +3 -3
- package/docs/en/intlayer_with_astro_vue.md +3 -3
- package/docs/en/intlayer_with_create_react_app.md +3 -3
- package/docs/en/intlayer_with_elysia.md +4 -4
- package/docs/en/intlayer_with_express.md +3 -3
- package/docs/en/intlayer_with_fastify.md +4 -4
- package/docs/en/intlayer_with_hono.md +3 -3
- package/docs/en/intlayer_with_lynx+react.md +3 -3
- package/docs/en/intlayer_with_nestjs.md +3 -3
- package/docs/en/intlayer_with_next-i18next.md +3 -3
- package/docs/en/intlayer_with_nextjs_14.md +3 -3
- package/docs/en/intlayer_with_nextjs_15.md +3 -3
- package/docs/en/intlayer_with_nextjs_16.md +3 -3
- package/docs/en/intlayer_with_nextjs_compiler.md +3 -3
- package/docs/en/intlayer_with_nextjs_no_locale_path.md +3 -3
- package/docs/en/intlayer_with_nextjs_page_router.md +3 -3
- package/docs/en/intlayer_with_nuxt.md +3 -3
- package/docs/en/intlayer_with_react_native+expo.md +3 -3
- package/docs/en/intlayer_with_react_router_v7.md +3 -3
- package/docs/en/intlayer_with_solid_start.md +3 -3
- package/docs/en/intlayer_with_svelte_kit.md +3 -3
- package/docs/en/intlayer_with_tanstack+solid.md +3 -3
- package/docs/en/intlayer_with_tanstack.md +3 -3
- package/docs/en/intlayer_with_vite+lit.md +3 -3
- package/docs/en/intlayer_with_vite+preact.md +3 -3
- package/docs/en/intlayer_with_vite+react.md +3 -3
- package/docs/en/intlayer_with_vite+react_compiler.md +3 -3
- package/docs/en/intlayer_with_vite+solid.md +3 -3
- package/docs/en/intlayer_with_vite+svelte.md +4 -12
- package/docs/en/intlayer_with_vite+vanilla.md +3 -3
- package/docs/en/intlayer_with_vite+vue.md +3 -3
- package/docs/en/migration_from_i18next_to_intlayer.md +3 -3
- package/docs/en/migration_from_next-i18next_to_intlayer.md +3 -3
- package/docs/en/migration_from_next-intl_to_intlayer.md +3 -3
- package/docs/en/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
- package/docs/en/migration_from_react-i18next_to_intlayer.md +3 -3
- package/docs/en/migration_from_vue-i18n_to_intlayer.md +3 -3
- package/docs/en-GB/bundle_optimization.md +186 -186
- package/docs/en-GB/intlayer_with_adonisjs.md +3 -3
- package/docs/en-GB/intlayer_with_analog.md +3 -3
- package/docs/en-GB/intlayer_with_angular_19.md +3 -3
- package/docs/en-GB/intlayer_with_angular_21.md +3 -3
- package/docs/en-GB/intlayer_with_astro.md +3 -3
- package/docs/en-GB/intlayer_with_astro_lit.md +3 -3
- package/docs/en-GB/intlayer_with_astro_preact.md +3 -3
- package/docs/en-GB/intlayer_with_astro_react.md +3 -3
- package/docs/en-GB/intlayer_with_astro_solid.md +3 -3
- package/docs/en-GB/intlayer_with_astro_svelte.md +3 -3
- package/docs/en-GB/intlayer_with_astro_vanilla.md +3 -3
- package/docs/en-GB/intlayer_with_astro_vue.md +3 -3
- package/docs/en-GB/intlayer_with_create_react_app.md +3 -3
- package/docs/en-GB/intlayer_with_elysia.md +4 -4
- package/docs/en-GB/intlayer_with_express.md +3 -3
- package/docs/en-GB/intlayer_with_fastify.md +4 -4
- package/docs/en-GB/intlayer_with_hono.md +3 -3
- package/docs/en-GB/intlayer_with_lynx+react.md +3 -3
- package/docs/en-GB/intlayer_with_nestjs.md +3 -3
- package/docs/en-GB/intlayer_with_next-i18next.md +3 -3
- package/docs/en-GB/intlayer_with_nextjs_14.md +3 -3
- package/docs/en-GB/intlayer_with_nextjs_15.md +3 -3
- package/docs/en-GB/intlayer_with_nextjs_16.md +3 -3
- package/docs/en-GB/intlayer_with_nextjs_compiler.md +3 -3
- package/docs/en-GB/intlayer_with_nextjs_no_locale_path.md +3 -3
- package/docs/en-GB/intlayer_with_nextjs_page_router.md +3 -3
- package/docs/en-GB/intlayer_with_nuxt.md +3 -3
- package/docs/en-GB/intlayer_with_react_native+expo.md +3 -3
- package/docs/en-GB/intlayer_with_react_router_v7.md +3 -3
- package/docs/en-GB/intlayer_with_react_router_v7_fs_routes.md +3 -3
- package/docs/en-GB/intlayer_with_solid_start.md +3 -3
- package/docs/en-GB/intlayer_with_svelte_kit.md +3 -3
- package/docs/en-GB/intlayer_with_tanstack+solid.md +3 -3
- package/docs/en-GB/intlayer_with_tanstack.md +3 -3
- package/docs/en-GB/intlayer_with_vite+lit.md +3 -3
- package/docs/en-GB/intlayer_with_vite+preact.md +3 -3
- package/docs/en-GB/intlayer_with_vite+react.md +3 -3
- package/docs/en-GB/intlayer_with_vite+react_compiler.md +3 -3
- package/docs/en-GB/intlayer_with_vite+solid.md +3 -3
- package/docs/en-GB/intlayer_with_vite+svelte.md +4 -12
- package/docs/en-GB/intlayer_with_vite+vanilla.md +3 -3
- package/docs/en-GB/intlayer_with_vite+vue.md +3 -3
- package/docs/en-GB/migration_from_i18next_to_intlayer.md +3 -3
- package/docs/en-GB/migration_from_next-i18next_to_intlayer.md +3 -3
- package/docs/en-GB/migration_from_next-intl_to_intlayer.md +3 -3
- package/docs/en-GB/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
- package/docs/en-GB/migration_from_react-i18next_to_intlayer.md +3 -3
- package/docs/en-GB/migration_from_vue-i18n_to_intlayer.md +3 -3
- package/docs/es/bundle_optimization.md +186 -186
- package/docs/es/intlayer_with_adonisjs.md +3 -3
- package/docs/es/intlayer_with_analog.md +3 -3
- package/docs/es/intlayer_with_angular_19.md +3 -3
- package/docs/es/intlayer_with_angular_21.md +3 -3
- package/docs/es/intlayer_with_astro.md +3 -3
- package/docs/es/intlayer_with_astro_lit.md +3 -3
- package/docs/es/intlayer_with_astro_preact.md +3 -3
- package/docs/es/intlayer_with_astro_react.md +3 -3
- package/docs/es/intlayer_with_astro_solid.md +3 -3
- package/docs/es/intlayer_with_astro_svelte.md +3 -3
- package/docs/es/intlayer_with_astro_vanilla.md +3 -3
- package/docs/es/intlayer_with_astro_vue.md +3 -3
- package/docs/es/intlayer_with_create_react_app.md +3 -3
- package/docs/es/intlayer_with_elysia.md +4 -4
- package/docs/es/intlayer_with_express.md +3 -3
- package/docs/es/intlayer_with_fastify.md +4 -4
- package/docs/es/intlayer_with_hono.md +3 -3
- package/docs/es/intlayer_with_lynx+react.md +3 -3
- package/docs/es/intlayer_with_nestjs.md +3 -3
- package/docs/es/intlayer_with_next-i18next.md +3 -3
- package/docs/es/intlayer_with_nextjs_14.md +3 -3
- package/docs/es/intlayer_with_nextjs_15.md +3 -3
- package/docs/es/intlayer_with_nextjs_16.md +3 -3
- package/docs/es/intlayer_with_nextjs_compiler.md +3 -3
- package/docs/es/intlayer_with_nextjs_no_locale_path.md +3 -3
- package/docs/es/intlayer_with_nextjs_page_router.md +3 -3
- package/docs/es/intlayer_with_nuxt.md +3 -3
- package/docs/es/intlayer_with_react_native+expo.md +3 -3
- package/docs/es/intlayer_with_react_router_v7.md +3 -3
- package/docs/es/intlayer_with_solid_start.md +3 -3
- package/docs/es/intlayer_with_svelte_kit.md +3 -3
- package/docs/es/intlayer_with_tanstack+solid.md +3 -3
- package/docs/es/intlayer_with_tanstack.md +3 -3
- package/docs/es/intlayer_with_vite+lit.md +3 -3
- package/docs/es/intlayer_with_vite+preact.md +3 -3
- package/docs/es/intlayer_with_vite+react.md +3 -3
- package/docs/es/intlayer_with_vite+react_compiler.md +3 -3
- package/docs/es/intlayer_with_vite+solid.md +3 -3
- package/docs/es/intlayer_with_vite+svelte.md +4 -12
- package/docs/es/intlayer_with_vite+vanilla.md +3 -3
- package/docs/es/intlayer_with_vite+vue.md +3 -3
- package/docs/es/migration_from_i18next_to_intlayer.md +3 -3
- package/docs/es/migration_from_next-i18next_to_intlayer.md +3 -3
- package/docs/es/migration_from_next-intl_to_intlayer.md +3 -3
- package/docs/es/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
- package/docs/es/migration_from_react-i18next_to_intlayer.md +3 -3
- package/docs/es/migration_from_vue-i18n_to_intlayer.md +3 -3
- package/docs/fr/bundle_optimization.md +186 -186
- package/docs/fr/intlayer_with_adonisjs.md +3 -3
- package/docs/fr/intlayer_with_analog.md +3 -3
- package/docs/fr/intlayer_with_angular_19.md +3 -3
- package/docs/fr/intlayer_with_angular_21.md +3 -3
- package/docs/fr/intlayer_with_astro.md +3 -3
- package/docs/fr/intlayer_with_astro_lit.md +3 -3
- package/docs/fr/intlayer_with_astro_preact.md +3 -3
- package/docs/fr/intlayer_with_astro_react.md +3 -3
- package/docs/fr/intlayer_with_astro_solid.md +3 -3
- package/docs/fr/intlayer_with_astro_svelte.md +3 -3
- package/docs/fr/intlayer_with_astro_vanilla.md +3 -3
- package/docs/fr/intlayer_with_astro_vue.md +3 -3
- package/docs/fr/intlayer_with_create_react_app.md +3 -3
- package/docs/fr/intlayer_with_elysia.md +4 -4
- package/docs/fr/intlayer_with_express.md +3 -3
- package/docs/fr/intlayer_with_fastify.md +4 -4
- package/docs/fr/intlayer_with_hono.md +3 -3
- package/docs/fr/intlayer_with_lynx+react.md +3 -3
- package/docs/fr/intlayer_with_nestjs.md +3 -3
- package/docs/fr/intlayer_with_next-i18next.md +3 -3
- package/docs/fr/intlayer_with_nextjs_14.md +3 -3
- package/docs/fr/intlayer_with_nextjs_15.md +3 -3
- package/docs/fr/intlayer_with_nextjs_16.md +3 -3
- package/docs/fr/intlayer_with_nextjs_compiler.md +3 -3
- package/docs/fr/intlayer_with_nextjs_no_locale_path.md +3 -3
- package/docs/fr/intlayer_with_nextjs_page_router.md +3 -3
- package/docs/fr/intlayer_with_nuxt.md +3 -3
- package/docs/fr/intlayer_with_react_native+expo.md +3 -3
- package/docs/fr/intlayer_with_react_router_v7.md +3 -3
- package/docs/fr/intlayer_with_solid_start.md +3 -3
- package/docs/fr/intlayer_with_svelte_kit.md +3 -3
- package/docs/fr/intlayer_with_tanstack+solid.md +3 -3
- package/docs/fr/intlayer_with_tanstack.md +3 -3
- package/docs/fr/intlayer_with_vite+lit.md +3 -3
- package/docs/fr/intlayer_with_vite+preact.md +3 -3
- package/docs/fr/intlayer_with_vite+react.md +3 -3
- package/docs/fr/intlayer_with_vite+react_compiler.md +3 -3
- package/docs/fr/intlayer_with_vite+solid.md +3 -3
- package/docs/fr/intlayer_with_vite+svelte.md +4 -12
- package/docs/fr/intlayer_with_vite+vanilla.md +3 -3
- package/docs/fr/intlayer_with_vite+vue.md +3 -3
- package/docs/fr/migration_from_i18next_to_intlayer.md +3 -3
- package/docs/fr/migration_from_next-i18next_to_intlayer.md +3 -3
- package/docs/fr/migration_from_next-intl_to_intlayer.md +3 -3
- package/docs/fr/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
- package/docs/fr/migration_from_react-i18next_to_intlayer.md +3 -3
- package/docs/fr/migration_from_vue-i18n_to_intlayer.md +3 -3
- package/docs/hi/bundle_optimization.md +186 -186
- package/docs/hi/intlayer_with_adonisjs.md +3 -3
- package/docs/hi/intlayer_with_analog.md +3 -3
- package/docs/hi/intlayer_with_angular_19.md +3 -3
- package/docs/hi/intlayer_with_angular_21.md +3 -3
- package/docs/hi/intlayer_with_astro.md +3 -3
- package/docs/hi/intlayer_with_astro_lit.md +3 -3
- package/docs/hi/intlayer_with_astro_preact.md +3 -3
- package/docs/hi/intlayer_with_astro_react.md +3 -3
- package/docs/hi/intlayer_with_astro_solid.md +3 -3
- package/docs/hi/intlayer_with_astro_svelte.md +3 -3
- package/docs/hi/intlayer_with_astro_vanilla.md +3 -3
- package/docs/hi/intlayer_with_astro_vue.md +3 -3
- package/docs/hi/intlayer_with_create_react_app.md +3 -3
- package/docs/hi/intlayer_with_elysia.md +4 -4
- package/docs/hi/intlayer_with_express.md +3 -3
- package/docs/hi/intlayer_with_fastify.md +4 -4
- package/docs/hi/intlayer_with_hono.md +3 -3
- package/docs/hi/intlayer_with_lynx+react.md +3 -3
- package/docs/hi/intlayer_with_nestjs.md +3 -3
- package/docs/hi/intlayer_with_next-i18next.md +3 -3
- package/docs/hi/intlayer_with_nextjs_14.md +3 -3
- package/docs/hi/intlayer_with_nextjs_15.md +3 -3
- package/docs/hi/intlayer_with_nextjs_16.md +3 -3
- package/docs/hi/intlayer_with_nextjs_compiler.md +3 -3
- package/docs/hi/intlayer_with_nextjs_no_locale_path.md +3 -3
- package/docs/hi/intlayer_with_nextjs_page_router.md +3 -3
- package/docs/hi/intlayer_with_nuxt.md +3 -3
- package/docs/hi/intlayer_with_react_native+expo.md +3 -3
- package/docs/hi/intlayer_with_react_router_v7.md +3 -3
- package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +3 -3
- package/docs/hi/intlayer_with_solid_start.md +3 -3
- package/docs/hi/intlayer_with_svelte_kit.md +3 -3
- package/docs/hi/intlayer_with_tanstack+solid.md +3 -3
- package/docs/hi/intlayer_with_tanstack.md +3 -3
- package/docs/hi/intlayer_with_vite+lit.md +3 -3
- package/docs/hi/intlayer_with_vite+preact.md +3 -3
- package/docs/hi/intlayer_with_vite+react.md +3 -3
- package/docs/hi/intlayer_with_vite+react_compiler.md +3 -3
- package/docs/hi/intlayer_with_vite+solid.md +3 -3
- package/docs/hi/intlayer_with_vite+svelte.md +4 -12
- package/docs/hi/intlayer_with_vite+vanilla.md +3 -3
- package/docs/hi/intlayer_with_vite+vue.md +3 -3
- package/docs/hi/migration_from_i18next_to_intlayer.md +3 -3
- package/docs/hi/migration_from_next-i18next_to_intlayer.md +3 -3
- package/docs/hi/migration_from_next-intl_to_intlayer.md +3 -3
- package/docs/hi/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
- package/docs/hi/migration_from_react-i18next_to_intlayer.md +3 -3
- package/docs/hi/migration_from_vue-i18n_to_intlayer.md +3 -3
- package/docs/hi/packages/intlayer/index.md +3 -3
- package/docs/id/bundle_optimization.md +186 -186
- package/docs/id/intlayer_with_adonisjs.md +3 -3
- package/docs/id/intlayer_with_analog.md +3 -3
- package/docs/id/intlayer_with_angular_19.md +3 -3
- package/docs/id/intlayer_with_angular_21.md +3 -3
- package/docs/id/intlayer_with_astro.md +3 -3
- package/docs/id/intlayer_with_astro_lit.md +3 -3
- package/docs/id/intlayer_with_astro_preact.md +3 -3
- package/docs/id/intlayer_with_astro_react.md +3 -3
- package/docs/id/intlayer_with_astro_solid.md +3 -3
- package/docs/id/intlayer_with_astro_svelte.md +3 -3
- package/docs/id/intlayer_with_astro_vanilla.md +3 -3
- package/docs/id/intlayer_with_astro_vue.md +3 -3
- package/docs/id/intlayer_with_create_react_app.md +3 -3
- package/docs/id/intlayer_with_elysia.md +4 -4
- package/docs/id/intlayer_with_express.md +3 -3
- package/docs/id/intlayer_with_fastify.md +4 -4
- package/docs/id/intlayer_with_hono.md +3 -3
- package/docs/id/intlayer_with_lynx+react.md +3 -3
- package/docs/id/intlayer_with_nestjs.md +3 -3
- package/docs/id/intlayer_with_next-i18next.md +3 -3
- package/docs/id/intlayer_with_nextjs_14.md +3 -3
- package/docs/id/intlayer_with_nextjs_15.md +3 -3
- package/docs/id/intlayer_with_nextjs_16.md +3 -3
- package/docs/id/intlayer_with_nextjs_compiler.md +3 -3
- package/docs/id/intlayer_with_nextjs_no_locale_path.md +3 -3
- package/docs/id/intlayer_with_nextjs_page_router.md +3 -3
- package/docs/id/intlayer_with_nuxt.md +3 -3
- package/docs/id/intlayer_with_react_native+expo.md +3 -3
- package/docs/id/intlayer_with_react_router_v7.md +3 -3
- package/docs/id/intlayer_with_solid_start.md +3 -3
- package/docs/id/intlayer_with_svelte_kit.md +3 -3
- package/docs/id/intlayer_with_tanstack+solid.md +3 -3
- package/docs/id/intlayer_with_tanstack.md +3 -3
- package/docs/id/intlayer_with_vite+lit.md +3 -3
- package/docs/id/intlayer_with_vite+preact.md +3 -3
- package/docs/id/intlayer_with_vite+react.md +3 -3
- package/docs/id/intlayer_with_vite+react_compiler.md +3 -3
- package/docs/id/intlayer_with_vite+solid.md +3 -3
- package/docs/id/intlayer_with_vite+svelte.md +4 -12
- package/docs/id/intlayer_with_vite+vanilla.md +3 -3
- package/docs/id/intlayer_with_vite+vue.md +3 -3
- package/docs/id/migration_from_i18next_to_intlayer.md +3 -3
- package/docs/id/migration_from_next-i18next_to_intlayer.md +3 -3
- package/docs/id/migration_from_next-intl_to_intlayer.md +3 -3
- package/docs/id/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
- package/docs/id/migration_from_react-i18next_to_intlayer.md +3 -3
- package/docs/id/migration_from_vue-i18n_to_intlayer.md +3 -3
- package/docs/it/bundle_optimization.md +186 -186
- package/docs/it/intlayer_with_adonisjs.md +3 -3
- package/docs/it/intlayer_with_analog.md +3 -3
- package/docs/it/intlayer_with_angular_19.md +3 -3
- package/docs/it/intlayer_with_angular_21.md +3 -3
- package/docs/it/intlayer_with_astro.md +3 -3
- package/docs/it/intlayer_with_astro_lit.md +3 -3
- package/docs/it/intlayer_with_astro_preact.md +3 -3
- package/docs/it/intlayer_with_astro_react.md +3 -3
- package/docs/it/intlayer_with_astro_solid.md +3 -3
- package/docs/it/intlayer_with_astro_svelte.md +3 -3
- package/docs/it/intlayer_with_astro_vanilla.md +3 -3
- package/docs/it/intlayer_with_astro_vue.md +3 -3
- package/docs/it/intlayer_with_create_react_app.md +3 -3
- package/docs/it/intlayer_with_elysia.md +4 -4
- package/docs/it/intlayer_with_express.md +3 -3
- package/docs/it/intlayer_with_fastify.md +4 -4
- package/docs/it/intlayer_with_hono.md +3 -3
- package/docs/it/intlayer_with_lynx+react.md +3 -3
- package/docs/it/intlayer_with_nestjs.md +3 -3
- package/docs/it/intlayer_with_next-i18next.md +3 -3
- package/docs/it/intlayer_with_nextjs_14.md +3 -3
- package/docs/it/intlayer_with_nextjs_15.md +3 -3
- package/docs/it/intlayer_with_nextjs_16.md +3 -3
- package/docs/it/intlayer_with_nextjs_compiler.md +3 -3
- package/docs/it/intlayer_with_nextjs_no_locale_path.md +3 -3
- package/docs/it/intlayer_with_nextjs_page_router.md +3 -3
- package/docs/it/intlayer_with_nuxt.md +3 -3
- package/docs/it/intlayer_with_react_native+expo.md +3 -3
- package/docs/it/intlayer_with_react_router_v7.md +3 -3
- package/docs/it/intlayer_with_solid_start.md +3 -3
- package/docs/it/intlayer_with_svelte_kit.md +3 -3
- package/docs/it/intlayer_with_tanstack+solid.md +3 -3
- package/docs/it/intlayer_with_tanstack.md +3 -3
- package/docs/it/intlayer_with_vite+lit.md +3 -3
- package/docs/it/intlayer_with_vite+preact.md +3 -3
- package/docs/it/intlayer_with_vite+react.md +3 -3
- package/docs/it/intlayer_with_vite+react_compiler.md +3 -3
- package/docs/it/intlayer_with_vite+solid.md +3 -3
- package/docs/it/intlayer_with_vite+svelte.md +4 -12
- package/docs/it/intlayer_with_vite+vanilla.md +3 -3
- package/docs/it/intlayer_with_vite+vue.md +3 -3
- package/docs/it/migration_from_i18next_to_intlayer.md +3 -3
- package/docs/it/migration_from_next-i18next_to_intlayer.md +3 -3
- package/docs/it/migration_from_next-intl_to_intlayer.md +3 -3
- package/docs/it/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
- package/docs/it/migration_from_react-i18next_to_intlayer.md +3 -3
- package/docs/it/migration_from_vue-i18n_to_intlayer.md +3 -3
- package/docs/ja/bundle_optimization.md +186 -186
- package/docs/ja/intlayer_with_adonisjs.md +3 -3
- package/docs/ja/intlayer_with_analog.md +3 -3
- package/docs/ja/intlayer_with_angular_19.md +3 -3
- package/docs/ja/intlayer_with_angular_21.md +3 -3
- package/docs/ja/intlayer_with_astro.md +3 -3
- package/docs/ja/intlayer_with_astro_lit.md +3 -3
- package/docs/ja/intlayer_with_astro_preact.md +3 -3
- package/docs/ja/intlayer_with_astro_react.md +3 -3
- package/docs/ja/intlayer_with_astro_solid.md +3 -3
- package/docs/ja/intlayer_with_astro_svelte.md +3 -3
- package/docs/ja/intlayer_with_astro_vanilla.md +3 -3
- package/docs/ja/intlayer_with_astro_vue.md +3 -3
- package/docs/ja/intlayer_with_create_react_app.md +3 -3
- package/docs/ja/intlayer_with_elysia.md +4 -4
- package/docs/ja/intlayer_with_express.md +3 -3
- package/docs/ja/intlayer_with_fastify.md +4 -4
- package/docs/ja/intlayer_with_hono.md +3 -3
- package/docs/ja/intlayer_with_lynx+react.md +3 -3
- package/docs/ja/intlayer_with_nestjs.md +3 -3
- package/docs/ja/intlayer_with_next-i18next.md +3 -3
- package/docs/ja/intlayer_with_nextjs_14.md +3 -3
- package/docs/ja/intlayer_with_nextjs_15.md +3 -3
- package/docs/ja/intlayer_with_nextjs_16.md +3 -3
- package/docs/ja/intlayer_with_nextjs_compiler.md +3 -3
- package/docs/ja/intlayer_with_nextjs_no_locale_path.md +3 -3
- package/docs/ja/intlayer_with_nextjs_page_router.md +3 -3
- package/docs/ja/intlayer_with_nuxt.md +3 -3
- package/docs/ja/intlayer_with_react_native+expo.md +3 -3
- package/docs/ja/intlayer_with_react_router_v7.md +3 -3
- package/docs/ja/intlayer_with_solid_start.md +3 -3
- package/docs/ja/intlayer_with_svelte_kit.md +3 -3
- package/docs/ja/intlayer_with_tanstack+solid.md +3 -3
- package/docs/ja/intlayer_with_tanstack.md +3 -3
- package/docs/ja/intlayer_with_vite+lit.md +3 -3
- package/docs/ja/intlayer_with_vite+preact.md +3 -3
- package/docs/ja/intlayer_with_vite+react.md +3 -3
- package/docs/ja/intlayer_with_vite+react_compiler.md +3 -3
- package/docs/ja/intlayer_with_vite+solid.md +3 -3
- package/docs/ja/intlayer_with_vite+svelte.md +4 -12
- package/docs/ja/intlayer_with_vite+vanilla.md +3 -3
- package/docs/ja/intlayer_with_vite+vue.md +3 -3
- package/docs/ja/migration_from_i18next_to_intlayer.md +3 -3
- package/docs/ja/migration_from_next-i18next_to_intlayer.md +3 -3
- package/docs/ja/migration_from_next-intl_to_intlayer.md +3 -3
- package/docs/ja/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
- package/docs/ja/migration_from_react-i18next_to_intlayer.md +3 -3
- package/docs/ja/migration_from_vue-i18n_to_intlayer.md +3 -3
- package/docs/ko/bundle_optimization.md +186 -186
- package/docs/ko/intlayer_with_adonisjs.md +3 -3
- package/docs/ko/intlayer_with_analog.md +3 -3
- package/docs/ko/intlayer_with_angular_19.md +3 -3
- package/docs/ko/intlayer_with_angular_21.md +3 -3
- package/docs/ko/intlayer_with_astro.md +3 -3
- package/docs/ko/intlayer_with_astro_lit.md +3 -3
- package/docs/ko/intlayer_with_astro_preact.md +3 -3
- package/docs/ko/intlayer_with_astro_react.md +3 -3
- package/docs/ko/intlayer_with_astro_solid.md +3 -3
- package/docs/ko/intlayer_with_astro_svelte.md +3 -3
- package/docs/ko/intlayer_with_astro_vanilla.md +3 -3
- package/docs/ko/intlayer_with_astro_vue.md +3 -3
- package/docs/ko/intlayer_with_create_react_app.md +3 -3
- package/docs/ko/intlayer_with_elysia.md +4 -4
- package/docs/ko/intlayer_with_express.md +3 -3
- package/docs/ko/intlayer_with_fastify.md +4 -4
- package/docs/ko/intlayer_with_hono.md +3 -3
- package/docs/ko/intlayer_with_lynx+react.md +3 -3
- package/docs/ko/intlayer_with_nestjs.md +3 -3
- package/docs/ko/intlayer_with_next-i18next.md +3 -3
- package/docs/ko/intlayer_with_nextjs_14.md +3 -3
- package/docs/ko/intlayer_with_nextjs_15.md +3 -3
- package/docs/ko/intlayer_with_nextjs_16.md +3 -3
- package/docs/ko/intlayer_with_nextjs_compiler.md +3 -3
- package/docs/ko/intlayer_with_nextjs_no_locale_path.md +3 -3
- package/docs/ko/intlayer_with_nextjs_page_router.md +3 -3
- package/docs/ko/intlayer_with_nuxt.md +3 -3
- package/docs/ko/intlayer_with_react_native+expo.md +3 -3
- package/docs/ko/intlayer_with_react_router_v7.md +3 -3
- package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +3 -3
- package/docs/ko/intlayer_with_solid_start.md +3 -3
- package/docs/ko/intlayer_with_svelte_kit.md +3 -3
- package/docs/ko/intlayer_with_tanstack+solid.md +3 -3
- package/docs/ko/intlayer_with_tanstack.md +3 -3
- package/docs/ko/intlayer_with_vite+lit.md +3 -3
- package/docs/ko/intlayer_with_vite+preact.md +3 -3
- package/docs/ko/intlayer_with_vite+react.md +3 -3
- package/docs/ko/intlayer_with_vite+react_compiler.md +3 -3
- package/docs/ko/intlayer_with_vite+solid.md +3 -3
- package/docs/ko/intlayer_with_vite+svelte.md +4 -12
- package/docs/ko/intlayer_with_vite+vanilla.md +3 -3
- package/docs/ko/intlayer_with_vite+vue.md +3 -3
- package/docs/ko/migration_from_i18next_to_intlayer.md +3 -3
- package/docs/ko/migration_from_next-i18next_to_intlayer.md +3 -3
- package/docs/ko/migration_from_next-intl_to_intlayer.md +3 -3
- package/docs/ko/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
- package/docs/ko/migration_from_react-i18next_to_intlayer.md +3 -3
- package/docs/ko/migration_from_vue-i18n_to_intlayer.md +3 -3
- package/docs/nl/bundle_optimization.md +186 -186
- package/docs/nl/intlayer_with_angular_21.md +3 -3
- package/docs/nl/intlayer_with_fastify.md +4 -4
- package/docs/nl/intlayer_with_hono.md +3 -3
- package/docs/nl/intlayer_with_vite+lit.md +3 -3
- package/docs/nl/intlayer_with_vite+vanilla.md +3 -3
- package/docs/pl/bundle_optimization.md +186 -186
- package/docs/pl/intlayer_with_adonisjs.md +3 -3
- package/docs/pl/intlayer_with_analog.md +3 -3
- package/docs/pl/intlayer_with_angular_19.md +3 -3
- package/docs/pl/intlayer_with_angular_21.md +3 -3
- package/docs/pl/intlayer_with_astro.md +3 -3
- package/docs/pl/intlayer_with_astro_lit.md +3 -3
- package/docs/pl/intlayer_with_astro_preact.md +3 -3
- package/docs/pl/intlayer_with_astro_react.md +3 -3
- package/docs/pl/intlayer_with_astro_solid.md +3 -3
- package/docs/pl/intlayer_with_astro_svelte.md +3 -3
- package/docs/pl/intlayer_with_astro_vanilla.md +3 -3
- package/docs/pl/intlayer_with_astro_vue.md +3 -3
- package/docs/pl/intlayer_with_create_react_app.md +3 -3
- package/docs/pl/intlayer_with_elysia.md +4 -4
- package/docs/pl/intlayer_with_express.md +3 -3
- package/docs/pl/intlayer_with_fastify.md +4 -4
- package/docs/pl/intlayer_with_hono.md +3 -3
- package/docs/pl/intlayer_with_lynx+react.md +3 -3
- package/docs/pl/intlayer_with_nestjs.md +3 -3
- package/docs/pl/intlayer_with_next-i18next.md +3 -3
- package/docs/pl/intlayer_with_nextjs_14.md +3 -3
- package/docs/pl/intlayer_with_nextjs_15.md +3 -3
- package/docs/pl/intlayer_with_nextjs_16.md +3 -3
- package/docs/pl/intlayer_with_nextjs_compiler.md +3 -3
- package/docs/pl/intlayer_with_nextjs_no_locale_path.md +3 -3
- package/docs/pl/intlayer_with_nextjs_page_router.md +3 -3
- package/docs/pl/intlayer_with_nuxt.md +3 -3
- package/docs/pl/intlayer_with_react_native+expo.md +3 -3
- package/docs/pl/intlayer_with_react_router_v7.md +3 -3
- package/docs/pl/intlayer_with_solid_start.md +3 -3
- package/docs/pl/intlayer_with_svelte_kit.md +3 -3
- package/docs/pl/intlayer_with_tanstack+solid.md +3 -3
- package/docs/pl/intlayer_with_tanstack.md +3 -3
- package/docs/pl/intlayer_with_vite+lit.md +3 -3
- package/docs/pl/intlayer_with_vite+preact.md +3 -3
- package/docs/pl/intlayer_with_vite+react.md +3 -3
- package/docs/pl/intlayer_with_vite+react_compiler.md +3 -3
- package/docs/pl/intlayer_with_vite+solid.md +3 -3
- package/docs/pl/intlayer_with_vite+svelte.md +4 -12
- package/docs/pl/intlayer_with_vite+vanilla.md +3 -3
- package/docs/pl/intlayer_with_vite+vue.md +3 -3
- package/docs/pl/migration_from_i18next_to_intlayer.md +3 -3
- package/docs/pl/migration_from_next-i18next_to_intlayer.md +3 -3
- package/docs/pl/migration_from_next-intl_to_intlayer.md +3 -3
- package/docs/pl/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
- package/docs/pl/migration_from_react-i18next_to_intlayer.md +3 -3
- package/docs/pl/migration_from_vue-i18n_to_intlayer.md +3 -3
- package/docs/pt/bundle_optimization.md +186 -186
- package/docs/pt/intlayer_with_adonisjs.md +3 -3
- package/docs/pt/intlayer_with_analog.md +3 -3
- package/docs/pt/intlayer_with_angular_19.md +3 -3
- package/docs/pt/intlayer_with_angular_21.md +3 -3
- package/docs/pt/intlayer_with_astro.md +3 -3
- package/docs/pt/intlayer_with_astro_lit.md +3 -3
- package/docs/pt/intlayer_with_astro_preact.md +3 -3
- package/docs/pt/intlayer_with_astro_react.md +3 -3
- package/docs/pt/intlayer_with_astro_solid.md +3 -3
- package/docs/pt/intlayer_with_astro_svelte.md +3 -3
- package/docs/pt/intlayer_with_astro_vanilla.md +3 -3
- package/docs/pt/intlayer_with_astro_vue.md +3 -3
- package/docs/pt/intlayer_with_create_react_app.md +3 -3
- package/docs/pt/intlayer_with_elysia.md +4 -4
- package/docs/pt/intlayer_with_express.md +3 -3
- package/docs/pt/intlayer_with_fastify.md +4 -4
- package/docs/pt/intlayer_with_hono.md +3 -3
- package/docs/pt/intlayer_with_lynx+react.md +3 -3
- package/docs/pt/intlayer_with_nestjs.md +3 -3
- package/docs/pt/intlayer_with_next-i18next.md +3 -3
- package/docs/pt/intlayer_with_nextjs_14.md +3 -3
- package/docs/pt/intlayer_with_nextjs_15.md +3 -3
- package/docs/pt/intlayer_with_nextjs_16.md +3 -3
- package/docs/pt/intlayer_with_nextjs_compiler.md +3 -3
- package/docs/pt/intlayer_with_nextjs_no_locale_path.md +3 -3
- package/docs/pt/intlayer_with_nextjs_page_router.md +3 -3
- package/docs/pt/intlayer_with_nuxt.md +3 -3
- package/docs/pt/intlayer_with_react_native+expo.md +3 -3
- package/docs/pt/intlayer_with_react_router_v7.md +3 -3
- package/docs/pt/intlayer_with_solid_start.md +3 -3
- package/docs/pt/intlayer_with_svelte_kit.md +3 -3
- package/docs/pt/intlayer_with_tanstack+solid.md +3 -3
- package/docs/pt/intlayer_with_tanstack.md +3 -3
- package/docs/pt/intlayer_with_vite+lit.md +3 -3
- package/docs/pt/intlayer_with_vite+preact.md +3 -3
- package/docs/pt/intlayer_with_vite+react.md +3 -3
- package/docs/pt/intlayer_with_vite+react_compiler.md +3 -3
- package/docs/pt/intlayer_with_vite+solid.md +3 -3
- package/docs/pt/intlayer_with_vite+svelte.md +4 -12
- package/docs/pt/intlayer_with_vite+vanilla.md +3 -3
- package/docs/pt/intlayer_with_vite+vue.md +3 -3
- package/docs/pt/migration_from_i18next_to_intlayer.md +3 -3
- package/docs/pt/migration_from_next-i18next_to_intlayer.md +3 -3
- package/docs/pt/migration_from_next-intl_to_intlayer.md +3 -3
- package/docs/pt/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
- package/docs/pt/migration_from_react-i18next_to_intlayer.md +3 -3
- package/docs/pt/migration_from_vue-i18n_to_intlayer.md +3 -3
- package/docs/ru/bundle_optimization.md +186 -186
- package/docs/ru/intlayer_with_adonisjs.md +3 -3
- package/docs/ru/intlayer_with_analog.md +3 -3
- package/docs/ru/intlayer_with_angular_19.md +3 -3
- package/docs/ru/intlayer_with_angular_21.md +3 -3
- package/docs/ru/intlayer_with_astro.md +3 -3
- package/docs/ru/intlayer_with_astro_lit.md +3 -3
- package/docs/ru/intlayer_with_astro_preact.md +3 -3
- package/docs/ru/intlayer_with_astro_react.md +3 -3
- package/docs/ru/intlayer_with_astro_solid.md +3 -3
- package/docs/ru/intlayer_with_astro_svelte.md +3 -3
- package/docs/ru/intlayer_with_astro_vanilla.md +3 -3
- package/docs/ru/intlayer_with_astro_vue.md +3 -3
- package/docs/ru/intlayer_with_create_react_app.md +3 -3
- package/docs/ru/intlayer_with_elysia.md +4 -4
- package/docs/ru/intlayer_with_express.md +3 -3
- package/docs/ru/intlayer_with_fastify.md +4 -4
- package/docs/ru/intlayer_with_hono.md +3 -3
- package/docs/ru/intlayer_with_lynx+react.md +3 -3
- package/docs/ru/intlayer_with_nestjs.md +3 -3
- package/docs/ru/intlayer_with_next-i18next.md +3 -3
- package/docs/ru/intlayer_with_nextjs_14.md +3 -3
- package/docs/ru/intlayer_with_nextjs_15.md +3 -3
- package/docs/ru/intlayer_with_nextjs_16.md +3 -3
- package/docs/ru/intlayer_with_nextjs_compiler.md +3 -3
- package/docs/ru/intlayer_with_nextjs_no_locale_path.md +3 -3
- package/docs/ru/intlayer_with_nextjs_page_router.md +3 -3
- package/docs/ru/intlayer_with_nuxt.md +3 -3
- package/docs/ru/intlayer_with_react_native+expo.md +3 -3
- package/docs/ru/intlayer_with_react_router_v7.md +3 -3
- package/docs/ru/intlayer_with_solid_start.md +3 -3
- package/docs/ru/intlayer_with_svelte_kit.md +3 -3
- package/docs/ru/intlayer_with_tanstack+solid.md +3 -3
- package/docs/ru/intlayer_with_tanstack.md +3 -3
- package/docs/ru/intlayer_with_vite+lit.md +3 -3
- package/docs/ru/intlayer_with_vite+preact.md +3 -3
- package/docs/ru/intlayer_with_vite+react.md +3 -3
- package/docs/ru/intlayer_with_vite+react_compiler.md +3 -3
- package/docs/ru/intlayer_with_vite+solid.md +3 -3
- package/docs/ru/intlayer_with_vite+svelte.md +4 -12
- package/docs/ru/intlayer_with_vite+vanilla.md +3 -3
- package/docs/ru/intlayer_with_vite+vue.md +3 -3
- package/docs/ru/migration_from_i18next_to_intlayer.md +3 -3
- package/docs/ru/migration_from_next-i18next_to_intlayer.md +3 -3
- package/docs/ru/migration_from_next-intl_to_intlayer.md +3 -3
- package/docs/ru/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
- package/docs/ru/migration_from_react-i18next_to_intlayer.md +3 -3
- package/docs/ru/migration_from_vue-i18n_to_intlayer.md +3 -3
- package/docs/tr/bundle_optimization.md +186 -186
- package/docs/tr/intlayer_with_adonisjs.md +3 -3
- package/docs/tr/intlayer_with_analog.md +3 -3
- package/docs/tr/intlayer_with_angular_19.md +3 -3
- package/docs/tr/intlayer_with_angular_21.md +3 -3
- package/docs/tr/intlayer_with_astro.md +3 -3
- package/docs/tr/intlayer_with_astro_lit.md +3 -3
- package/docs/tr/intlayer_with_astro_preact.md +3 -3
- package/docs/tr/intlayer_with_astro_react.md +3 -3
- package/docs/tr/intlayer_with_astro_solid.md +3 -3
- package/docs/tr/intlayer_with_astro_svelte.md +3 -3
- package/docs/tr/intlayer_with_astro_vanilla.md +3 -3
- package/docs/tr/intlayer_with_astro_vue.md +3 -3
- package/docs/tr/intlayer_with_create_react_app.md +3 -3
- package/docs/tr/intlayer_with_elysia.md +4 -4
- package/docs/tr/intlayer_with_express.md +3 -3
- package/docs/tr/intlayer_with_fastify.md +4 -4
- package/docs/tr/intlayer_with_hono.md +3 -3
- package/docs/tr/intlayer_with_lynx+react.md +3 -3
- package/docs/tr/intlayer_with_nestjs.md +3 -3
- package/docs/tr/intlayer_with_next-i18next.md +3 -3
- package/docs/tr/intlayer_with_nextjs_14.md +3 -3
- package/docs/tr/intlayer_with_nextjs_15.md +3 -3
- package/docs/tr/intlayer_with_nextjs_16.md +3 -3
- package/docs/tr/intlayer_with_nextjs_compiler.md +3 -3
- package/docs/tr/intlayer_with_nextjs_no_locale_path.md +3 -3
- package/docs/tr/intlayer_with_nextjs_page_router.md +3 -3
- package/docs/tr/intlayer_with_nuxt.md +3 -3
- package/docs/tr/intlayer_with_react_native+expo.md +3 -3
- package/docs/tr/intlayer_with_react_router_v7.md +3 -3
- package/docs/tr/intlayer_with_solid_start.md +3 -3
- package/docs/tr/intlayer_with_svelte_kit.md +3 -3
- package/docs/tr/intlayer_with_tanstack+solid.md +3 -3
- package/docs/tr/intlayer_with_tanstack.md +3 -3
- package/docs/tr/intlayer_with_vite+lit.md +3 -3
- package/docs/tr/intlayer_with_vite+preact.md +3 -3
- package/docs/tr/intlayer_with_vite+react.md +3 -3
- package/docs/tr/intlayer_with_vite+react_compiler.md +3 -3
- package/docs/tr/intlayer_with_vite+solid.md +3 -3
- package/docs/tr/intlayer_with_vite+svelte.md +4 -12
- package/docs/tr/intlayer_with_vite+vanilla.md +3 -3
- package/docs/tr/intlayer_with_vite+vue.md +3 -3
- package/docs/tr/migration_from_i18next_to_intlayer.md +3 -3
- package/docs/tr/migration_from_next-i18next_to_intlayer.md +3 -3
- package/docs/tr/migration_from_next-intl_to_intlayer.md +3 -3
- package/docs/tr/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
- package/docs/tr/migration_from_react-i18next_to_intlayer.md +3 -3
- package/docs/tr/migration_from_vue-i18n_to_intlayer.md +3 -3
- package/docs/uk/bundle_optimization.md +186 -186
- package/docs/uk/intlayer_with_adonisjs.md +3 -3
- package/docs/uk/intlayer_with_analog.md +3 -3
- package/docs/uk/intlayer_with_angular_19.md +3 -3
- package/docs/uk/intlayer_with_angular_21.md +3 -3
- package/docs/uk/intlayer_with_astro.md +3 -3
- package/docs/uk/intlayer_with_astro_lit.md +3 -3
- package/docs/uk/intlayer_with_astro_preact.md +3 -3
- package/docs/uk/intlayer_with_astro_react.md +3 -3
- package/docs/uk/intlayer_with_astro_solid.md +3 -3
- package/docs/uk/intlayer_with_astro_svelte.md +3 -3
- package/docs/uk/intlayer_with_astro_vanilla.md +3 -3
- package/docs/uk/intlayer_with_astro_vue.md +3 -3
- package/docs/uk/intlayer_with_create_react_app.md +3 -3
- package/docs/uk/intlayer_with_elysia.md +4 -4
- package/docs/uk/intlayer_with_express.md +3 -3
- package/docs/uk/intlayer_with_fastify.md +4 -4
- package/docs/uk/intlayer_with_hono.md +3 -3
- package/docs/uk/intlayer_with_lynx+react.md +3 -3
- package/docs/uk/intlayer_with_nestjs.md +3 -3
- package/docs/uk/intlayer_with_next-i18next.md +3 -3
- package/docs/uk/intlayer_with_nextjs_14.md +3 -3
- package/docs/uk/intlayer_with_nextjs_15.md +3 -3
- package/docs/uk/intlayer_with_nextjs_16.md +3 -3
- package/docs/uk/intlayer_with_nextjs_compiler.md +3 -3
- package/docs/uk/intlayer_with_nextjs_no_locale_path.md +3 -3
- package/docs/uk/intlayer_with_nextjs_page_router.md +3 -3
- package/docs/uk/intlayer_with_nuxt.md +3 -3
- package/docs/uk/intlayer_with_react_native+expo.md +3 -3
- package/docs/uk/intlayer_with_react_router_v7.md +3 -3
- package/docs/uk/intlayer_with_solid_start.md +3 -3
- package/docs/uk/intlayer_with_svelte_kit.md +3 -3
- package/docs/uk/intlayer_with_tanstack+solid.md +3 -3
- package/docs/uk/intlayer_with_tanstack.md +3 -3
- package/docs/uk/intlayer_with_vite+lit.md +3 -3
- package/docs/uk/intlayer_with_vite+preact.md +3 -3
- package/docs/uk/intlayer_with_vite+react.md +3 -3
- package/docs/uk/intlayer_with_vite+react_compiler.md +3 -3
- package/docs/uk/intlayer_with_vite+solid.md +3 -3
- package/docs/uk/intlayer_with_vite+svelte.md +4 -12
- package/docs/uk/intlayer_with_vite+vanilla.md +3 -3
- package/docs/uk/intlayer_with_vite+vue.md +3 -3
- package/docs/uk/migration_from_i18next_to_intlayer.md +3 -3
- package/docs/uk/migration_from_next-i18next_to_intlayer.md +3 -3
- package/docs/uk/migration_from_next-intl_to_intlayer.md +3 -3
- package/docs/uk/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
- package/docs/uk/migration_from_react-i18next_to_intlayer.md +3 -3
- package/docs/uk/migration_from_vue-i18n_to_intlayer.md +3 -3
- package/docs/ur/bundle_optimization.md +186 -186
- package/docs/ur/intlayer_with_angular_21.md +3 -3
- package/docs/ur/intlayer_with_fastify.md +4 -4
- package/docs/ur/intlayer_with_hono.md +3 -3
- package/docs/ur/intlayer_with_vite+lit.md +3 -3
- package/docs/ur/intlayer_with_vite+vanilla.md +3 -3
- package/docs/vi/bundle_optimization.md +186 -186
- package/docs/vi/intlayer_with_adonisjs.md +3 -3
- package/docs/vi/intlayer_with_analog.md +3 -3
- package/docs/vi/intlayer_with_angular_19.md +3 -3
- package/docs/vi/intlayer_with_angular_21.md +3 -3
- package/docs/vi/intlayer_with_astro.md +3 -3
- package/docs/vi/intlayer_with_astro_lit.md +3 -3
- package/docs/vi/intlayer_with_astro_preact.md +3 -3
- package/docs/vi/intlayer_with_astro_react.md +3 -3
- package/docs/vi/intlayer_with_astro_solid.md +3 -3
- package/docs/vi/intlayer_with_astro_svelte.md +3 -3
- package/docs/vi/intlayer_with_astro_vanilla.md +3 -3
- package/docs/vi/intlayer_with_astro_vue.md +3 -3
- package/docs/vi/intlayer_with_create_react_app.md +3 -3
- package/docs/vi/intlayer_with_elysia.md +4 -4
- package/docs/vi/intlayer_with_express.md +3 -3
- package/docs/vi/intlayer_with_fastify.md +4 -4
- package/docs/vi/intlayer_with_hono.md +3 -3
- package/docs/vi/intlayer_with_lynx+react.md +3 -3
- package/docs/vi/intlayer_with_nestjs.md +3 -3
- package/docs/vi/intlayer_with_next-i18next.md +3 -3
- package/docs/vi/intlayer_with_nextjs_14.md +3 -3
- package/docs/vi/intlayer_with_nextjs_15.md +3 -3
- package/docs/vi/intlayer_with_nextjs_16.md +3 -3
- package/docs/vi/intlayer_with_nextjs_compiler.md +3 -3
- package/docs/vi/intlayer_with_nextjs_no_locale_path.md +3 -3
- package/docs/vi/intlayer_with_nextjs_page_router.md +3 -3
- package/docs/vi/intlayer_with_nuxt.md +3 -3
- package/docs/vi/intlayer_with_react_native+expo.md +3 -3
- package/docs/vi/intlayer_with_react_router_v7.md +3 -3
- package/docs/vi/intlayer_with_solid_start.md +3 -3
- package/docs/vi/intlayer_with_svelte_kit.md +3 -3
- package/docs/vi/intlayer_with_tanstack+solid.md +3 -3
- package/docs/vi/intlayer_with_tanstack.md +3 -3
- package/docs/vi/intlayer_with_vite+lit.md +3 -3
- package/docs/vi/intlayer_with_vite+preact.md +3 -3
- package/docs/vi/intlayer_with_vite+react.md +3 -3
- package/docs/vi/intlayer_with_vite+react_compiler.md +3 -3
- package/docs/vi/intlayer_with_vite+solid.md +3 -3
- package/docs/vi/intlayer_with_vite+svelte.md +4 -12
- package/docs/vi/intlayer_with_vite+vanilla.md +3 -3
- package/docs/vi/intlayer_with_vite+vue.md +3 -3
- package/docs/vi/migration_from_i18next_to_intlayer.md +3 -3
- package/docs/vi/migration_from_next-i18next_to_intlayer.md +3 -3
- package/docs/vi/migration_from_next-intl_to_intlayer.md +3 -3
- package/docs/vi/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
- package/docs/vi/migration_from_react-i18next_to_intlayer.md +3 -3
- package/docs/vi/migration_from_vue-i18n_to_intlayer.md +3 -3
- package/docs/zh/bundle_optimization.md +186 -186
- package/docs/zh/intlayer_with_adonisjs.md +3 -3
- package/docs/zh/intlayer_with_analog.md +3 -3
- package/docs/zh/intlayer_with_angular_19.md +3 -3
- package/docs/zh/intlayer_with_angular_21.md +3 -3
- package/docs/zh/intlayer_with_astro.md +3 -3
- package/docs/zh/intlayer_with_astro_lit.md +3 -3
- package/docs/zh/intlayer_with_astro_preact.md +3 -3
- package/docs/zh/intlayer_with_astro_react.md +3 -3
- package/docs/zh/intlayer_with_astro_solid.md +3 -3
- package/docs/zh/intlayer_with_astro_svelte.md +3 -3
- package/docs/zh/intlayer_with_astro_vanilla.md +3 -3
- package/docs/zh/intlayer_with_astro_vue.md +3 -3
- package/docs/zh/intlayer_with_create_react_app.md +3 -3
- package/docs/zh/intlayer_with_elysia.md +4 -4
- package/docs/zh/intlayer_with_express.md +3 -3
- package/docs/zh/intlayer_with_fastify.md +4 -4
- package/docs/zh/intlayer_with_hono.md +3 -3
- package/docs/zh/intlayer_with_lynx+react.md +3 -3
- package/docs/zh/intlayer_with_nestjs.md +3 -3
- package/docs/zh/intlayer_with_next-i18next.md +3 -3
- package/docs/zh/intlayer_with_nextjs_14.md +3 -3
- package/docs/zh/intlayer_with_nextjs_15.md +3 -3
- package/docs/zh/intlayer_with_nextjs_16.md +3 -3
- package/docs/zh/intlayer_with_nextjs_compiler.md +3 -3
- package/docs/zh/intlayer_with_nextjs_no_locale_path.md +3 -3
- package/docs/zh/intlayer_with_nextjs_page_router.md +3 -3
- package/docs/zh/intlayer_with_nuxt.md +3 -3
- package/docs/zh/intlayer_with_react_native+expo.md +3 -3
- package/docs/zh/intlayer_with_react_router_v7.md +3 -3
- package/docs/zh/intlayer_with_solid_start.md +3 -3
- package/docs/zh/intlayer_with_svelte_kit.md +3 -3
- package/docs/zh/intlayer_with_tanstack+solid.md +3 -3
- package/docs/zh/intlayer_with_tanstack.md +3 -3
- package/docs/zh/intlayer_with_vite+lit.md +3 -3
- package/docs/zh/intlayer_with_vite+preact.md +3 -3
- package/docs/zh/intlayer_with_vite+react.md +3 -3
- package/docs/zh/intlayer_with_vite+react_compiler.md +3 -3
- package/docs/zh/intlayer_with_vite+solid.md +3 -3
- package/docs/zh/intlayer_with_vite+svelte.md +4 -12
- package/docs/zh/intlayer_with_vite+vanilla.md +3 -3
- package/docs/zh/intlayer_with_vite+vue.md +3 -3
- package/docs/zh/migration_from_i18next_to_intlayer.md +3 -3
- package/docs/zh/migration_from_next-i18next_to_intlayer.md +3 -3
- package/docs/zh/migration_from_next-intl_to_intlayer.md +3 -3
- package/docs/zh/migration_from_nuxtjs_i18n_to_intlayer.md +3 -3
- package/docs/zh/migration_from_react-i18next_to_intlayer.md +3 -3
- package/docs/zh/migration_from_vue-i18n_to_intlayer.md +3 -3
- package/docs/zh-TW/bundle_optimization.md +186 -186
- package/docs/zh-TW/intlayer_with_angular_21.md +3 -3
- package/package.json +6 -6
- package/src/generated/blog.entry.ts +329 -0
package/blog/it/i18n_meaning.md
CHANGED
|
@@ -19,8 +19,6 @@ author: aymericzip
|
|
|
19
19
|
|
|
20
20
|
# Significato i18n: Cos'è l'Internazionalizzazione e perché è importante?
|
|
21
21
|
|
|
22
|
-

|
|
23
|
-
|
|
24
22
|
## Capire il "Significato i18n"
|
|
25
23
|
|
|
26
24
|
Se sei coinvolto nello sviluppo software, nel web design o nel marketing digitale, probabilmente ti sei imbattuto nel termine **i18n**. Il vero **significato di i18n** è semplicemente un numeronimo per **internationalization** (internazionalizzazione).
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-09-02
|
|
3
|
+
updatedAt: 2026-09-02
|
|
4
|
+
title: "Come testare le traduzioni senza scrivere test fragili"
|
|
5
|
+
description: Cosa vale la pena testare in un'applicazione i18n e cosa no. Test di rendering con provider, pseudolocalizzazione, copertura RTL e plurali, e la trappola degli snapshot.
|
|
6
|
+
keywords:
|
|
7
|
+
- testare traduzioni
|
|
8
|
+
- test i18n
|
|
9
|
+
- testing library i18n
|
|
10
|
+
- pseudolocalizzazione
|
|
11
|
+
- test provider locale
|
|
12
|
+
- snapshot test i18n
|
|
13
|
+
slugs:
|
|
14
|
+
- blog
|
|
15
|
+
- i18n-testing-strategies
|
|
16
|
+
author: aymericzip
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# Come testare le traduzioni senza scrivere test fragili
|
|
20
|
+
|
|
21
|
+
La maggior parte delle suite di test i18n fallisce per due motivi. O eseguono asserzioni sul testo letterale, per cui ogni minima modifica di copy rompe cinquanta test e il team finisce per cancellarli. Oppure renderizzano tutto nella lingua predefinita, non dimostrando nulla sulle altre diciassette. Entrambe le strade portano allo stesso risultato, una suite di cui nessuno si fida.
|
|
22
|
+
|
|
23
|
+
## Indice
|
|
24
|
+
|
|
25
|
+
<TOC/>
|
|
26
|
+
|
|
27
|
+
## I pattern sono indipendenti dalla libreria
|
|
28
|
+
|
|
29
|
+
Ciascun pattern mostrato di seguito funziona con qualsiasi stack i18n. Sostituisci il provider con `I18nextProvider`, `NextIntlClientProvider` o `IntlProvider` e i test rimangono identici, poiché verificano l'output renderizzato anziché una specifica API di libreria.
|
|
30
|
+
|
|
31
|
+
Anche gli strumenti di copertura si adattano facilmente: con il [plugin Sync JSON](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/plugins/sync-json.md) collegato ai tuoi cataloghi esistenti, o un [adattatore di compatibilità](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/compat/index.md) che crea alias sui tuoi import attuali, l'asserzione di copertura viene eseguita sul JSON che già possiedi.
|
|
32
|
+
|
|
33
|
+
## Decidere cosa stai realmente testando
|
|
34
|
+
|
|
35
|
+
La qualità della traduzione non è un test. Nessuna asserzione può dirti se il tedesco suoni naturale, e pretendere il contrario produce una suite piena di stringhe hardcodate.
|
|
36
|
+
|
|
37
|
+
Ciò che vale la pena testare è meccanico:
|
|
38
|
+
|
|
39
|
+
| Vale la pena testare | Non vale la pena testare |
|
|
40
|
+
| :------------------------------------------ | :-------------------------------------- |
|
|
41
|
+
| Ogni locale richiesta ha un valore | Se il testo è ben scritto |
|
|
42
|
+
| La locale corretta raggiunge il componente | La copia esatta di ogni etichetta |
|
|
43
|
+
| I plurali si risolvono per ogni categoria | Se il traduttore ha fatto il suo lavoro |
|
|
44
|
+
| I locali RTL impostano direzione e specchio | Ogni stringa in ogni lingua |
|
|
45
|
+
| Date e numeri formattati usano la locale | La correttezza interna di `Intl` |
|
|
46
|
+
|
|
47
|
+
La copertura appartiene a un unico test basato sui dati, non ai test dei singoli componenti. Questo argomento è approfondito in [individuare le traduzioni mancanti](https://github.com/aymericzip/intlayer/blob/main/docs/blog/it/detecting_missing_translations.md); questo articolo si concentra sul resto.
|
|
48
|
+
|
|
49
|
+
## Renderizzare sotto un provider e interrogare per ruolo
|
|
50
|
+
|
|
51
|
+
Il pattern fondamentale consiste nel montare il componente all'interno di un provider di locale e interrogare per ruolo o test id invece che per testo.
|
|
52
|
+
|
|
53
|
+
```tsx fileName="CartSummary.test.tsx"
|
|
54
|
+
import { render, screen } from "@testing-library/react";
|
|
55
|
+
import { IntlayerProvider } from "react-intlayer/client";
|
|
56
|
+
import { CartSummary } from "./CartSummary";
|
|
57
|
+
|
|
58
|
+
test("renderizza l'intestazione del riepilogo in francese", () => {
|
|
59
|
+
render(
|
|
60
|
+
<IntlayerProvider locale="fr-FR">
|
|
61
|
+
<CartSummary />
|
|
62
|
+
</IntlayerProvider>
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
expect(screen.getByRole("heading")).toBeInTheDocument();
|
|
66
|
+
});
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Interrogare `getByRole("heading")` sopravvive a un cambio di testo. `getByText("Récapitulatif")` fallisce al primo ritocco. Usa il testo letterale solo quando la stringa stessa è l'oggetto del test, il che è raro.
|
|
70
|
+
|
|
71
|
+
Per attributi come `aria-label` ti serve la stringa grezza piuttosto che un nodo renderizzabile. In React, le voci di `useIntlayer` espongono un campo `.value` a tale scopo.
|
|
72
|
+
|
|
73
|
+
## Parametrizzare i test tra le diverse lingue
|
|
74
|
+
|
|
75
|
+
Un unico blocco di test eseguito su tutte le lingue apporta molto più valore di un test separato per lingua.
|
|
76
|
+
|
|
77
|
+
```tsx fileName="direction.test.tsx"
|
|
78
|
+
import { getHTMLTextDir } from "intlayer";
|
|
79
|
+
import { render } from "@testing-library/react";
|
|
80
|
+
import { IntlayerProvider } from "react-intlayer/client";
|
|
81
|
+
|
|
82
|
+
describe.each(["en", "fr", "ja", "ar"])("locale %s", (locale) => {
|
|
83
|
+
it("renderizza senza ricorrere alla chiave grezza", () => {
|
|
84
|
+
const { container } = render(
|
|
85
|
+
<IntlayerProvider locale={locale}>
|
|
86
|
+
<CartSummary />
|
|
87
|
+
</IntlayerProvider>
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
// Una chiave renderizzata significa che la risoluzione è fallita.
|
|
91
|
+
expect(container.textContent).not.toMatch(/^[a-z]+(\.[a-z]+)+$/);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
it("imposta la corretta direzione del testo", () => {
|
|
95
|
+
expect(getHTMLTextDir(locale)).toBe(locale === "ar" ? "rtl" : "ltr");
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
La prima asserzione offre un vantaggio generico ed economico: se una ricerca fallisce e la libreria mostra la chiave, il DOM conterrà qualcosa come `cart.summary.title`. Questo intercetta un'intera classe di bug senza nominare una sola stringa.
|
|
101
|
+
|
|
102
|
+
## La pseudolocalizzazione rileva ciò che i cataloghi non vedono
|
|
103
|
+
|
|
104
|
+
Aggiungi una finta lingua che trasformi ogni stringa, ad esempio trasformando `Checkout` in `[!!! Çĥéçķöũţ !!!]`. Quindi renderizza la pagina in quella lingua.
|
|
105
|
+
|
|
106
|
+
Tutto ciò che rimane in inglese puro è scritto direttamente nel codice. Nessun controllo basato sui cataloghi può individuarlo, poiché per gli strumenti quella stringa semplicemente non esiste. Le parentesi svolgono un secondo compito: allungano il testo di circa il 30 percento, facendo emergere problemi di layout prima ancora di testare in tedesco.
|
|
107
|
+
|
|
108
|
+
È consigliabile eseguire questo passaggio come verifica visiva o end-to-end piuttosto che come unit test, poiché il difetto si nota visivamente.
|
|
109
|
+
|
|
110
|
+
## I plurali richiedono un test per categoria, non per lingua
|
|
111
|
+
|
|
112
|
+
I bug sui plurali rimangono nascosti perché l'inglese ha solo due forme e la maggior parte degli sviluppatori si limita a quelle. Il polacco ne ha quattro, l'arabo sei.
|
|
113
|
+
|
|
114
|
+
```ts fileName="plural.test.ts"
|
|
115
|
+
// L'arabo copre zero, one, two, few, many, other.
|
|
116
|
+
describe.each([0, 1, 2, 3, 11, 100])("conteggio %i", (count) => {
|
|
117
|
+
it("produce una stringa non vuota in arabo", () => {
|
|
118
|
+
expect(formatItems(count, "ar")).not.toBe("");
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Scegli valori numerici che coprano ciascuna categoria CLDR per la lingua più complessa anziché testare 1 e 2 ovunque. `Intl.PluralRules` ti indica in quale categoria rientra un numero, consentendoti di ricavare il campione di test senza tirare a indovinare. Maggiori dettagli nell'[articolo sul formato di messaggi ICU](https://github.com/aymericzip/intlayer/blob/main/docs/blog/it/icu_message_format.md).
|
|
124
|
+
|
|
125
|
+
## La trappola degli snapshot
|
|
126
|
+
|
|
127
|
+
Gli snapshot e l'i18n sono una combinazione pericolosa. Uno snapshot di un componente localizzato memorizza ogni stringa al suo interno: se un traduttore corregge un refuso in portoghese, una suite verde diventa rossa, su un file che nessun revisore è in grado di comprendere a fondo. Dopo la terza volta, qualcuno lancia `-u` senza leggere il diff, e gli snapshot perdono ogni significato.
|
|
128
|
+
|
|
129
|
+
Se vuoi usare gli snapshot, eseguili solo su una singola lingua e considerali come un controllo strutturale anziché sui contenuti. Tutto ciò che è specifico di una lingua appartiene ad asserzioni esplicite.
|
|
130
|
+
|
|
131
|
+
## Testare la negoziazione, non solo il rendering
|
|
132
|
+
|
|
133
|
+
Il bug i18n più comune in produzione non è una stringa mancante. È la selezione della lingua sbagliata: un URL indica `/fr/`, il client legge `navigator.language`, e i due valori sono in disaccordo.
|
|
134
|
+
|
|
135
|
+
Testa l'ordine di risoluzione direttamente, come funzione pura, separata da qualsiasi componente:
|
|
136
|
+
|
|
137
|
+
```ts fileName="locale-resolution.test.ts"
|
|
138
|
+
it("preferisce l'URL rispetto alla preferenza memorizzata", () => {
|
|
139
|
+
expect(resolveLocale({ url: "/fr/about", stored: "de", header: "ja" })).toBe(
|
|
140
|
+
"fr"
|
|
141
|
+
);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
it("ricorre all'header quando l'URL non ha prefisso", () => {
|
|
145
|
+
expect(resolveLocale({ url: "/about", stored: null, header: "ja" })).toBe(
|
|
146
|
+
"ja"
|
|
147
|
+
);
|
|
148
|
+
});
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Questo è il singolo test di i18n di maggior valore mancante nella maggior parte delle codebase, e non necessita del DOM.
|
|
152
|
+
|
|
153
|
+
## Cosa eseguire e dove
|
|
154
|
+
|
|
155
|
+
- **Unit**: negoziazione della lingua, formattatori, categorie di plurali. Rapido, senza DOM.
|
|
156
|
+
- **Componente**: un rendering con provider per lingua, verificando ruoli e assenza di chiavi grezze.
|
|
157
|
+
- **Copertura**: un test basato sui dati che certifichi l'assenza di lingue richieste mancanti.
|
|
158
|
+
- **Visivo o end-to-end**: passaggio di pseudolocalizzazione e una pagina RTL, poiché tali errori sono visivi.
|
|
159
|
+
|
|
160
|
+
Mantieni i primi tre nella pipeline a ogni commit. L'ultimo è economico da eseguire la notte e dispendioso su ogni push.
|
|
161
|
+
|
|
162
|
+
## Errori comuni
|
|
163
|
+
|
|
164
|
+
- **Verificare il testo esatto ovunque.** Porta all'abbandono e cancellazione della suite entro pochi mesi.
|
|
165
|
+
- **Snapshot di componenti localizzati.** I traduttori bloccano la build e i revisori approvano senza verificare.
|
|
166
|
+
- **Testare solo la lingua predefinita.** L'unica lingua che non può mai mancare.
|
|
167
|
+
- **Testare solo 1 e 2 per i plurali.** Salta tutte le categorie che l'inglese non possiede.
|
|
168
|
+
- **Mockare la libreria i18n.** In tal caso stai solo testando che il tuo mock restituisca stringhe.
|
|
169
|
+
- **Non testare mai la negoziazione.** Il guasto reale più comune e il più semplice da validare.
|
|
170
|
+
|
|
171
|
+
## Per approfondire
|
|
172
|
+
|
|
173
|
+
- [Testare i contenuti: audit CLI, API programmatica e asserzioni UI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/testing.md)
|
|
174
|
+
- [Plugin ESLint: rilevare stringhe hardcodate e contenuti inutilizzati](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/eslint.md)
|
|
175
|
+
- [Formattatori e utilità di lingua, compreso `getHTMLTextDir`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/formatters.md)
|
|
176
|
+
- [Report di benchmark tra diversi framework](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/benchmark/index.md)
|
|
177
|
+
- [Adattatore di compatibilità react-i18next](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/compat/react-i18next.md)
|
|
178
|
+
- [Come individuare le traduzioni mancanti](https://github.com/aymericzip/intlayer/blob/main/docs/blog/it/detecting_missing_translations.md)
|
|
179
|
+
- [Formato dei messaggi ICU: plurali, select e scheletri](https://github.com/aymericzip/intlayer/blob/main/docs/blog/it/icu_message_format.md)
|
|
@@ -74,15 +74,15 @@ npx intlayer init --interactive
|
|
|
74
74
|
```
|
|
75
75
|
|
|
76
76
|
```bash packageManager="pnpm"
|
|
77
|
-
pnpm dlx intlayer
|
|
77
|
+
pnpm dlx intlayer init --interactive
|
|
78
78
|
```
|
|
79
79
|
|
|
80
80
|
```bash packageManager="yarn"
|
|
81
|
-
yarn dlx intlayer
|
|
81
|
+
yarn dlx intlayer init --interactive
|
|
82
82
|
```
|
|
83
83
|
|
|
84
84
|
```bash packageManager="bun"
|
|
85
|
-
bunx intlayer
|
|
85
|
+
bunx intlayer init --interactive
|
|
86
86
|
```
|
|
87
87
|
|
|
88
88
|
> il flag `--interactive` è opzionale. Usa `intlayer-cli init` se sei un agente IA.
|
|
@@ -67,15 +67,15 @@ npx intlayer init --interactive
|
|
|
67
67
|
```
|
|
68
68
|
|
|
69
69
|
```bash packageManager="pnpm"
|
|
70
|
-
pnpm dlx intlayer
|
|
70
|
+
pnpm dlx intlayer init --interactive
|
|
71
71
|
```
|
|
72
72
|
|
|
73
73
|
```bash packageManager="yarn"
|
|
74
|
-
yarn dlx intlayer
|
|
74
|
+
yarn dlx intlayer init --interactive
|
|
75
75
|
```
|
|
76
76
|
|
|
77
77
|
```bash packageManager="bun"
|
|
78
|
-
bunx intlayer
|
|
78
|
+
bunx intlayer init --interactive
|
|
79
79
|
```
|
|
80
80
|
|
|
81
81
|
> il flag `--interactive` è opzionale. Usa `intlayer-cli init` se sei un agente IA.
|
|
@@ -68,15 +68,15 @@ npx intlayer init --interactive
|
|
|
68
68
|
```
|
|
69
69
|
|
|
70
70
|
```bash packageManager="pnpm"
|
|
71
|
-
pnpm dlx intlayer
|
|
71
|
+
pnpm dlx intlayer init --interactive
|
|
72
72
|
```
|
|
73
73
|
|
|
74
74
|
```bash packageManager="yarn"
|
|
75
|
-
yarn dlx intlayer
|
|
75
|
+
yarn dlx intlayer init --interactive
|
|
76
76
|
```
|
|
77
77
|
|
|
78
78
|
```bash packageManager="bun"
|
|
79
|
-
bunx intlayer
|
|
79
|
+
bunx intlayer init --interactive
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
> il flag `--interactive` è opzionale. Usa `intlayer-cli init` se sei un agente IA.
|
|
@@ -68,15 +68,15 @@ npx intlayer init --interactive
|
|
|
68
68
|
```
|
|
69
69
|
|
|
70
70
|
```bash packageManager="pnpm"
|
|
71
|
-
pnpm dlx intlayer
|
|
71
|
+
pnpm dlx intlayer init --interactive
|
|
72
72
|
```
|
|
73
73
|
|
|
74
74
|
```bash packageManager="yarn"
|
|
75
|
-
yarn dlx intlayer
|
|
75
|
+
yarn dlx intlayer init --interactive
|
|
76
76
|
```
|
|
77
77
|
|
|
78
78
|
```bash packageManager="bun"
|
|
79
|
-
bunx intlayer
|
|
79
|
+
bunx intlayer init --interactive
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
> il flag `--interactive` è opzionale. Usa `intlayer-cli init` se sei un agente IA.
|
|
@@ -66,15 +66,15 @@ npx intlayer init --interactive
|
|
|
66
66
|
```
|
|
67
67
|
|
|
68
68
|
```bash packageManager="pnpm"
|
|
69
|
-
pnpm dlx intlayer
|
|
69
|
+
pnpm dlx intlayer init --interactive
|
|
70
70
|
```
|
|
71
71
|
|
|
72
72
|
```bash packageManager="yarn"
|
|
73
|
-
yarn dlx intlayer
|
|
73
|
+
yarn dlx intlayer init --interactive
|
|
74
74
|
```
|
|
75
75
|
|
|
76
76
|
```bash packageManager="bun"
|
|
77
|
-
bunx intlayer
|
|
77
|
+
bunx intlayer init --interactive
|
|
78
78
|
```
|
|
79
79
|
|
|
80
80
|
> il flag `--interactive` è opzionale. Usa `intlayer-cli init` se sei un agente IA.
|
|
@@ -68,15 +68,15 @@ npx intlayer init --interactive
|
|
|
68
68
|
```
|
|
69
69
|
|
|
70
70
|
```bash packageManager="pnpm"
|
|
71
|
-
pnpm dlx intlayer
|
|
71
|
+
pnpm dlx intlayer init --interactive
|
|
72
72
|
```
|
|
73
73
|
|
|
74
74
|
```bash packageManager="yarn"
|
|
75
|
-
yarn dlx intlayer
|
|
75
|
+
yarn dlx intlayer init --interactive
|
|
76
76
|
```
|
|
77
77
|
|
|
78
78
|
```bash packageManager="bun"
|
|
79
|
-
bunx intlayer
|
|
79
|
+
bunx intlayer init --interactive
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
> il flag `--interactive` è opzionale. Usa `intlayer-cli init` se sei un agente IA.
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-09-02
|
|
3
|
+
updatedAt: 2026-09-02
|
|
4
|
+
title: i18next è obsoleto nel 2026?
|
|
5
|
+
description: i18next alimenta milioni di siti web, ma la sua architettura a runtime del 2011 mostra i segni del tempo. Un'analisi su bundle bloat, limiti di tree-shaking e innovazione ferma.
|
|
6
|
+
keywords:
|
|
7
|
+
- i18next
|
|
8
|
+
- react-i18next
|
|
9
|
+
- next-i18next
|
|
10
|
+
- Intlayer
|
|
11
|
+
- Internazionalizzazione
|
|
12
|
+
- i18n
|
|
13
|
+
- Dimensione bundle
|
|
14
|
+
- Blog
|
|
15
|
+
slugs:
|
|
16
|
+
- blog
|
|
17
|
+
- is-i18next-outdated
|
|
18
|
+
author: aymericzip
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# i18next è obsoleto nel 2026?
|
|
22
|
+
|
|
23
|
+
`i18next` è nato nel 2011, molto prima che i componenti React, il bundling con Webpack o TypeScript diventassero lo standard. Ha conquistato l'ecosistema grazie a flessibilità e capillarità, con plugin per ogni tecnologia e risposte su StackOverflow per qualsiasi dubbio.
|
|
24
|
+
|
|
25
|
+
Non è abbandonato, gli aggiornamenti escono regolarmente. Esiste però una differenza sostanziale tra mantenere attivo un motore collaudato ed evolversi con le moderne architetture frontend.
|
|
26
|
+
|
|
27
|
+
Negli ultimi anni, il mondo frontend si è spostato verso la compilazione in fase di build, i React Server Components (RSC), il tree-shaking aggressivo e i flussi guidati dall'IA. Il nucleo di i18next resta quello di dieci anni fa: un singleton a runtime che risolve chiavi di testo sul client.
|
|
28
|
+
|
|
29
|
+
<TOC/>
|
|
30
|
+
|
|
31
|
+
## Punti chiave
|
|
32
|
+
|
|
33
|
+
**Fase di manutenzione:**
|
|
34
|
+
|
|
35
|
+
Nell'ultimo anno, `next-i18next` ha registrato ~63 commit (circa uno a settimana) e `react-i18next` ~157, quasi tutti dedicati ad aggiornamenti di dipendenze e piccole correzioni.
|
|
36
|
+
|
|
37
|
+
**Impatto pesante sul runtime:**
|
|
38
|
+
|
|
39
|
+
`react-i18next` e `next-i18next` introducono ~17–18 KB gzipped (~60 KB minificati) prima ancora di renderizzare una sola parola, quasi il quadruplo di `next-intlayer` (~4.7 KB).
|
|
40
|
+
|
|
41
|
+
**Perdita consistente di dati (leakage):**
|
|
42
|
+
|
|
43
|
+
Nelle configurazioni statiche predefinite, fino al **89.8%** dei contenuti di localizzazione inviati a una pagina appartiene ad altre route o a lingue non consultate.
|
|
44
|
+
|
|
45
|
+
**Tree-shaking impossibile:**
|
|
46
|
+
|
|
47
|
+
Chiamate dinamiche come `t("home.hero.title")` non possono essere interpretate dai bundler, costringendo l'intero catalogo JSON nel chunk del client.
|
|
48
|
+
|
|
49
|
+
**Modello commerciale:**
|
|
50
|
+
|
|
51
|
+
I maintainer gestiscono Locize. Sviluppare una pipeline di traduzione IA locale e gratuita direttamente nella CLI entrerebbe in concorrenza diretta con la loro principale fonte di ricavi.
|
|
52
|
+
|
|
53
|
+
## Manutenzione vs. evoluzione attiva
|
|
54
|
+
|
|
55
|
+
Le stelle GitHub testimoniano l'adozione storica più che l'attuale dinamismo architetturale.
|
|
56
|
+
|
|
57
|
+
| Repository | Stelle | Commit totali | Commit / anno | Ultimo commit |
|
|
58
|
+
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
59
|
+
| `i18next/i18next` | [](https://github.com/i18next/i18next/stargazers) | [](https://github.com/i18next/i18next/commits) | [](https://github.com/i18next/i18next/commits) | [](https://github.com/i18next/i18next/commits) |
|
|
60
|
+
| `i18next/react-i18next` | [](https://github.com/i18next/react-i18next/stargazers) | [](https://github.com/i18next/react-i18next/commits) | [](https://github.com/i18next/react-i18next/commits) | [](https://github.com/i18next/react-i18next/commits) |
|
|
61
|
+
| `i18next/next-i18next` | [](https://github.com/i18next/next-i18next/stargazers) | [](https://github.com/i18next/next-i18next/commits) | [](https://github.com/i18next/next-i18next/commits) | [](https://github.com/i18next/next-i18next/commits) |
|
|
62
|
+
| `aymericzip/intlayer` | [](https://github.com/aymericzip/intlayer/stargazers) | [](https://github.com/aymericzip/intlayer/commits) | [](https://github.com/aymericzip/intlayer/commits) | [](https://github.com/aymericzip/intlayer/commits) |
|
|
63
|
+
|
|
64
|
+
Attività negli ultimi 12 mesi:
|
|
65
|
+
|
|
66
|
+
| Progetto | Commit storici | Ultimi 12 mesi | Priorità |
|
|
67
|
+
| --------------- | -------------- | -------------- | ------------------------------------ |
|
|
68
|
+
| `next-i18next` | 1.311 | **63** | Compatibilità Next.js e correzioni |
|
|
69
|
+
| `react-i18next` | 1.988 | **157** | Tipi e manutenzione |
|
|
70
|
+
| `i18next` core | 2.626 | **259** | Piccoli aggiornamenti |
|
|
71
|
+
| Intlayer | 7.156 | **4.343** | Compilatore, tooling IDE e motore IA |
|
|
72
|
+
|
|
73
|
+
[](https://www.star-history.com/#i18next/i18next&i18next/react-i18next&i18next/next-i18next&aymericzip/intlayer)
|
|
74
|
+
|
|
75
|
+
Una libreria snella può essere solida e affidabile. Ma gli strumenti di i18n progrediscono costantemente: i bundler odierni eliminano i testi inutilizzati durante il build, gli LLM traducono direttamente in CI e gli editor si affidano a server di linguaggio (LSP) e agenti IA. L'architettura puramente a runtime di i18next limita queste possibilità.
|
|
76
|
+
|
|
77
|
+
## Misurazione del costo sul bundle
|
|
78
|
+
|
|
79
|
+
<I18nBenchmark framework="tanstack" vertical/>
|
|
80
|
+
|
|
81
|
+
<ClickToOpenIframe
|
|
82
|
+
src="https://intlayer.org/markdown?url=https%3A%2F%2Fraw.githubusercontent.com%2Fintlayer-org%2Fbenchmark-i18n%2Fmain%2Freport%2Fscripts%2Fsummarize-tanstack.md"
|
|
83
|
+
width="100%"
|
|
84
|
+
height="600px"
|
|
85
|
+
style="border:none;"
|
|
86
|
+
/>
|
|
87
|
+
|
|
88
|
+
> Misurato su build di produzione con 10 route e 10 lingue, compressione gzip attiva. Maggiori dettagli nel [report del benchmark i18n](https://intlayer.org/it/doc/benchmark).
|
|
89
|
+
|
|
90
|
+
### Peso iniziale delle librerie
|
|
91
|
+
|
|
92
|
+
Impatto base prima dell'inserimento di qualsiasi testo tradotto:
|
|
93
|
+
|
|
94
|
+
| Libreria | Gzipped | Minificato |
|
|
95
|
+
| ---------------------- | ---------- | ----------- |
|
|
96
|
+
| `next-i18next@16.0.5` | 17.8 KB | 61.2 KB |
|
|
97
|
+
| `react-i18next@17.0.2` | 17.3 KB | 59.8 KB |
|
|
98
|
+
| `intlayer@8.7.12` | **4.7 KB** | **12.8 KB** |
|
|
99
|
+
|
|
100
|
+
### Peso della pagina e dispersione dei contenuti
|
|
101
|
+
|
|
102
|
+
Test eseguito con React / TanStack Start (strategia statica):
|
|
103
|
+
|
|
104
|
+
| Libreria | JS medio / pag (gz) | Dispersione lingue | Dispersione altre pag | Componente medio (gz) | Idratazione |
|
|
105
|
+
| --------------------- | ------------------- | ------------------ | --------------------- | --------------------- | ----------- |
|
|
106
|
+
| `react-i18next` | 180.3 KB | **50.0%** | **89.8%** | 24.3 KB | 85.1 ms |
|
|
107
|
+
| Intlayer | **127.8 KB** | 50.0% | **0.8%** | **7.1 KB** | **24.1 ms** |
|
|
108
|
+
| Intlayer (scoped dyn) | **118.1 KB** | **0.0%** | **0.8%** | **4.6 KB** | 23.7 ms |
|
|
109
|
+
|
|
110
|
+
Su Next.js:
|
|
111
|
+
|
|
112
|
+
| Libreria | JS medio / pag (gz) | Dispersione altre pag | Componente medio (gz) |
|
|
113
|
+
| --------------- | ------------------- | --------------------- | --------------------- |
|
|
114
|
+
| Base (no i18n) | 150.8 KB | 0.0% | 0.7 KB |
|
|
115
|
+
| `next-i18next` | **227.5 KB** | **89.8%** | 24.5 KB |
|
|
116
|
+
| `next-intlayer` | **152.1 KB** | **0.0%** | **7.2 KB** |
|
|
117
|
+
|
|
118
|
+
### Risultati principali
|
|
119
|
+
|
|
120
|
+
**Peso della pagina:**
|
|
121
|
+
|
|
122
|
+
Su Next.js, `next-i18next` introduce **76.7 KB gzipped** rispetto alla base (+50%). `next-intlayer` aggiunge appena 1.3 KB.
|
|
123
|
+
|
|
124
|
+
**Dispersione delle traduzioni:**
|
|
125
|
+
|
|
126
|
+
Di base, quasi il **90% dei testi caricati** su una route appartiene ad altre pagine del sito. La separazione manuale per namespace è onerosa e fonte di imprecisioni.
|
|
127
|
+
|
|
128
|
+
**Tempi di idratazione:**
|
|
129
|
+
|
|
130
|
+
I componenti con `react-i18next` hanno impiegato **85 ms** per idratarsi contro i **24 ms** di Intlayer. Inviare grandi alberi JSON ai componenti client rallenta l'interattività.
|
|
131
|
+
|
|
132
|
+
## Perché i18next è pesante?
|
|
133
|
+
|
|
134
|
+
### Funzionalità accumulate a runtime
|
|
135
|
+
|
|
136
|
+
Operare interamente nel browser impone di includere tutte le funzioni all'avvio: interpolazione, regole di plurale, contesti, formattatori ed event bus. Anche per mostrare un testo elementare viene caricato l'intero motore.
|
|
137
|
+
|
|
138
|
+
### Le chiavi dinamiche bloccano il tree-shaking
|
|
139
|
+
|
|
140
|
+
Poiché `"hero.title"` viene calcolata dinamicamente a runtime, i bundler non sanno quali chiavi vengano effettivamente lette. Le stringhe inutilizzate restano nel bundle.
|
|
141
|
+
|
|
142
|
+
<Tabs defaultTab="intlayer" group="techno">
|
|
143
|
+
<Tab label="i18next" value="i18next">
|
|
144
|
+
|
|
145
|
+
```tsx fileName="Component.tsx"
|
|
146
|
+
const { t } = useTranslation("home");
|
|
147
|
+
|
|
148
|
+
return <h1>{t("hero.title")}</h1>;
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
</Tab>
|
|
152
|
+
<Tab label="Intlayer" value="intlayer">
|
|
153
|
+
|
|
154
|
+
```tsx fileName="Hero.tsx"
|
|
155
|
+
const { title } = useIntlayer("hero");
|
|
156
|
+
|
|
157
|
+
return <h1>{title}</h1>;
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
</Tab>
|
|
161
|
+
</Tabs>
|
|
162
|
+
|
|
163
|
+
Il [compilatore Intlayer](https://intlayer.org/it/doc/compiler) esamina ciò che `Hero.tsx` richiama ed elimina i campi non utilizzati prima della generazione dei bundle. Consulta [ottimizzazione del bundle](https://intlayer.org/it/doc/concept/bundle-optimization) per i dettagli.
|
|
164
|
+
|
|
165
|
+
## Esperienza di sviluppo
|
|
166
|
+
|
|
167
|
+
### File JSON isolati vs. co-locazione
|
|
168
|
+
|
|
169
|
+
Con i18next i testi sono collocati in directory JSON distinte dal codice. Intlayer organizza i file di contenuto direttamente accanto ai componenti:
|
|
170
|
+
|
|
171
|
+
<Tabs defaultTab="intlayer" group="techno">
|
|
172
|
+
<Tab label="i18next" value="i18next">
|
|
173
|
+
|
|
174
|
+
```json fileName="locales/en/hero.json"
|
|
175
|
+
{
|
|
176
|
+
"title": "Ship in every language"
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
```json fileName="locales/it/hero.json"
|
|
181
|
+
{
|
|
182
|
+
"title": "Distribuisci in ogni lingua"
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
```tsx fileName="Hero.tsx"
|
|
187
|
+
import { useTranslation } from "react-i18next";
|
|
188
|
+
|
|
189
|
+
export const Hero = () => {
|
|
190
|
+
const { t } = useTranslation("hero");
|
|
191
|
+
return <h1>{t("title")}</h1>;
|
|
192
|
+
};
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
</Tab>
|
|
196
|
+
<Tab label="Intlayer" value="intlayer">
|
|
197
|
+
|
|
198
|
+
```ts fileName="hero.content.ts"
|
|
199
|
+
import { t, type Dictionary } from "intlayer";
|
|
200
|
+
|
|
201
|
+
export default {
|
|
202
|
+
key: "hero",
|
|
203
|
+
content: {
|
|
204
|
+
title: t({
|
|
205
|
+
en: "Ship in every language",
|
|
206
|
+
it: "Distribuisci in ogni lingua",
|
|
207
|
+
}),
|
|
208
|
+
},
|
|
209
|
+
} satisfies Dictionary;
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
```tsx fileName="Hero.tsx"
|
|
213
|
+
import { useIntlayer } from "react-intlayer";
|
|
214
|
+
|
|
215
|
+
export const Hero = () => {
|
|
216
|
+
const { title } = useIntlayer("hero");
|
|
217
|
+
return <h1>{title}</h1>;
|
|
218
|
+
};
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
</Tab>
|
|
222
|
+
</Tabs>
|
|
223
|
+
|
|
224
|
+
Spostando o cancellando `Hero.tsx`, anche i suoi testi vengono spostati o rimossi di pari passo.
|
|
225
|
+
|
|
226
|
+
### Autocompletamento vs. rigida sicurezza dei tipi
|
|
227
|
+
|
|
228
|
+
Estendere `CustomTypeOptions` fornisce autocompletamento nell'editor, ma non assicura la presenza effettiva delle traduzioni. Rimuovere una chiave da `it/home.json` non interrompe il build, genera solo un fallback a runtime.
|
|
229
|
+
|
|
230
|
+
Intlayer deduce i tipi direttamente dalle dichiarazioni di contenuto, e lo [`strictMode`](https://intlayer.org/it/doc/concept/configuration) trasforma le traduzioni mancanti in errori bloccanti al build.
|
|
231
|
+
|
|
232
|
+
### Confronto degli strumenti
|
|
233
|
+
|
|
234
|
+
| Funzionalità | Ecosistema i18next | Intlayer |
|
|
235
|
+
| ----------------------------- | -------------------- | ------------------------------------------------------------------------ |
|
|
236
|
+
| **Estensione VS Code** | Solo terze parti | ✅ [Estensione ufficiale](https://intlayer.org/it/doc/vs-code-extension) |
|
|
237
|
+
| **Language Server (LSP)** | ❌ Nessuno | ✅ [LSP dedicato](https://intlayer.org/it/doc/lsp) |
|
|
238
|
+
| **Server MCP (per IA)** | ❌ Nessuno | ✅ [Server MCP integrato](https://intlayer.org/it/doc/mcp-server) |
|
|
239
|
+
| **Competenze agente (Skill)** | ❌ Nessuna | ✅ [Skill pronte all'uso](https://intlayer.org/it/doc/agent_skills) |
|
|
240
|
+
| **CMS Visuale in contesto** | Locize (A pagamento) | ✅ [Gratuito & Open Source](https://intlayer.org/it/doc/concept/editor) |
|
|
241
|
+
|
|
242
|
+
## Traduzione e il modello di Locize
|
|
243
|
+
|
|
244
|
+
Locize è il servizio commerciale ufficiale creato dagli autori di i18next. Il sostegno all'open source è fondamentale, tuttavia questo modello genera un compromesso: un progetto monetizzato con una piattaforma SaaS di traduzione ha scarso incentivo a integrare gratuitamente nella CLI un comando di traduzione IA locale.
|
|
245
|
+
|
|
246
|
+
Intlayer sceglie una visione aperta:
|
|
247
|
+
|
|
248
|
+
- [`intlayer fill`](https://intlayer.org/it/doc/concept/auto-fill) completa le traduzioni mancanti nel terminale o in CI tramite chiavi API proprietarie (OpenAI, Anthropic, Mistral, Gemini).
|
|
249
|
+
- Il [CMS Intlayer](https://intlayer.org/it/doc/concept/cms) è open source e avviabile con Docker Compose.
|
|
250
|
+
- Compilatore, CLI, editor e CMS sono tutti con licenza Apache 2.0.
|
|
251
|
+
|
|
252
|
+
## In quali casi i18next è ancora adatto?
|
|
253
|
+
|
|
254
|
+
<AccordionGroup>
|
|
255
|
+
<Accordion header="Progetti esistenti stabili">
|
|
256
|
+
|
|
257
|
+
Se l'applicazione risponde perfettamente alle esigenze e la dimensione del bundle non è critica, riscrivere il codice non è prioritario.
|
|
258
|
+
|
|
259
|
+
</Accordion>
|
|
260
|
+
<Accordion header="Piattaforme dedicate">
|
|
261
|
+
|
|
262
|
+
L'ampia gamma di plugin di i18next supporta scenari specifici (Electron, applicazioni jQuery legacy, bridge nativi dedicati) che i compilatori attuali raramente considerano.
|
|
263
|
+
|
|
264
|
+
</Accordion>
|
|
265
|
+
<Accordion header="Ampio archivio di supporto">
|
|
266
|
+
|
|
267
|
+
Lo storico presente su StackOverflow e GitHub aiuta ad affrontare agilmente casi limite.
|
|
268
|
+
|
|
269
|
+
</Accordion>
|
|
270
|
+
</AccordionGroup>
|
|
271
|
+
|
|
272
|
+
## Come migliorare la mia configurazione i18next esistente?
|
|
273
|
+
|
|
274
|
+
Intlayer offre pacchetti di compatibilità pronti all'uso che replicano fedelmente le firme delle funzioni delle librerie i18next (`i18next`, `react-i18next` e `next-i18next`). Non è necessario riscrivere i componenti per beneficiare dei vantaggi di un'architettura guidata dal compilatore.
|
|
275
|
+
|
|
276
|
+
L'installazione si effettua con un solo comando:
|
|
277
|
+
|
|
278
|
+
```bash packageManager="npm"
|
|
279
|
+
npx intlayer init --interactive
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
```bash packageManager="pnpm"
|
|
283
|
+
pnpm dlx intlayer init --interactive
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
```bash packageManager="yarn"
|
|
287
|
+
yarn dlx intlayer init --interactive
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
```bash packageManager="bun"
|
|
291
|
+
bunx intlayer init --interactive
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
Questa CLI interattiva:
|
|
295
|
+
|
|
296
|
+
1. Installa il pacchetto di compatibilità `@intlayer/i18next`.
|
|
297
|
+
2. Configura gli alias del bundler affinché le importazioni abituali (`useTranslation`, `Trans`, `t`) puntino direttamente a Intlayer, consentendo di rimuovere la vecchia libreria da `package.json`.
|
|
298
|
+
3. Attiva all'istante il supporto del Language Server (LSP) nell'IDE, l'ottimizzazione del bundle in fase di compilazione (tree-shaking completo) e i flussi di traduzione IA locali.
|
|
299
|
+
|
|
300
|
+
Per istruzioni dettagliate, consulta le nostre guide dedicate:
|
|
301
|
+
|
|
302
|
+
- **Livelli di compatibilità:** Conserva il tuo codice esistente con gli adapter per [i18next](https://intlayer.org/it/doc/compatibility/i18next), [react-i18next](https://intlayer.org/it/doc/compatibility/react-i18next) e [next-i18next](https://intlayer.org/it/doc/compatibility/next-i18next).
|
|
303
|
+
- **Migrazione dei cataloghi:** Converti i file JSON in dizionari tipizzati con le nostre guide: [da i18next](https://intlayer.org/it/doc/migration/i18next), [da react-i18next](https://intlayer.org/it/doc/migration/react-i18next) o [da next-i18next](https://intlayer.org/it/doc/migration/next-i18next).
|
|
304
|
+
- **Setup ibrido:** Conserva il runtime di i18next mentre [utilizzi Intlayer con i18next](https://intlayer.org/it/blog/intlayer-with-i18next) per tipizzare e autotradurre i cataloghi.
|
|
305
|
+
|
|
306
|
+
Valuta la tua applicazione con l'[analizzatore SEO i18n gratuito](https://intlayer.org/i18n-seo-scanner):
|
|
307
|
+
|
|
308
|
+
<ClickToOpenIframe src="https://intlayer.org/i18n-seo-scanner" width="100%" height="600px" style="border:none;"/>
|
|
309
|
+
|
|
310
|
+
## Letture consigliate
|
|
311
|
+
|
|
312
|
+
- [Benchmark Next.js i18n: analisi completa delle performance](https://intlayer.org/it/doc/benchmark/nextjs)
|
|
313
|
+
- [react-i18next vs react-intl vs Intlayer](https://intlayer.org/it/blog/react-i18next-vs-react-intl-vs-intlayer)
|
|
314
|
+
- [next-intl è obsoleto nel 2026?](https://intlayer.org/it/blog/is-next-intl-outdated)
|
|
315
|
+
- [Architettura a compilazione vs i18n dichiarativa](https://intlayer.org/it/blog/compiler-vs-declarative-i18n)
|