@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/id/i18n_meaning.md
CHANGED
|
@@ -19,8 +19,6 @@ author: aymericzip
|
|
|
19
19
|
|
|
20
20
|
# Arti i18n: Apa itu Internasionalisasi dan Mengapa Itu Penting?
|
|
21
21
|
|
|
22
|
-

|
|
23
|
-
|
|
24
22
|
## Memahami "Arti i18n"
|
|
25
23
|
|
|
26
24
|
Jika Anda terlibat dalam pengembangan perangkat lunak, desain web, atau pemasaran digital, Anda kemungkinan besar pernah menjumpai istilah **i18n**. **Arti i18n** yang sebenarnya hanyalah sebuah numeronim untuk **internationalization** (internasionalisasi).
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-09-02
|
|
3
|
+
updatedAt: 2026-09-02
|
|
4
|
+
title: "Cara Menguji Terjemahan Tanpa Menulis Tes yang Rapuh"
|
|
5
|
+
description: Apa yang layak diuji dalam aplikasi i18n dan apa yang tidak. Pengujian rendering berbasis provider, pseudolokalisasi, cakupan RTL dan bentuk jamak, serta jebakan snapshot.
|
|
6
|
+
keywords:
|
|
7
|
+
- uji terjemahan
|
|
8
|
+
- pengujian i18n
|
|
9
|
+
- testing library i18n
|
|
10
|
+
- pseudolokalisasi
|
|
11
|
+
- uji provider locale
|
|
12
|
+
- snapshot test i18n
|
|
13
|
+
slugs:
|
|
14
|
+
- blog
|
|
15
|
+
- i18n-testing-strategies
|
|
16
|
+
author: aymericzip
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# Cara Menguji Terjemahan Tanpa Menulis Tes yang Rapuh
|
|
20
|
+
|
|
21
|
+
Sebagian besar suite pengujian i18n gagal karena salah satu dari dua alasan. Entah mereka menegaskan teks literal, sehingga setiap perubahan kata merusak lima puluh tes dan tim akhirnya menghapusnya. Atau mereka merender semuanya hanya dalam locale default, sehingga tidak membuktikan apa pun tentang tujuh belas locale lainnya. Keduanya berakhir di tempat yang sama: suite yang tidak dipercaya siapa pun.
|
|
22
|
+
|
|
23
|
+
## Daftar Isi
|
|
24
|
+
|
|
25
|
+
<TOC/>
|
|
26
|
+
|
|
27
|
+
## Pola ini tidak bergantung pada library tertentu
|
|
28
|
+
|
|
29
|
+
Setiap pola di bawah ini berfungsi pada stack i18n mana pun. Ganti provider dengan `I18nextProvider`, `NextIntlClientProvider`, atau `IntlProvider` dan pengujian tetap identik, karena mereka memvalidasi output render alih-alih API library tertentu.
|
|
30
|
+
|
|
31
|
+
Perangkat pengujian cakupan juga dapat dipindahkan: dengan [plugin Sync JSON](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/plugins/sync-json.md) yang diarahkan ke katalog yang ada, atau [adapter kompatibilitas](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/compat/index.md) yang membuat alias pada import saat ini, asersi cakupan berjalan langsung terhadap file JSON yang sudah Anda miliki.
|
|
32
|
+
|
|
33
|
+
## Tentukan apa yang sebenarnya Anda uji
|
|
34
|
+
|
|
35
|
+
Kualitas terjemahan bukan sesuatu yang bisa diuji dengan kode. Tidak ada assertion yang dapat memberi tahu apakah bahasa Jerman terdengar alami, dan mencoba melakukannya hanya akan memenuhi suite Anda dengan string hardcoded.
|
|
36
|
+
|
|
37
|
+
Hal-hal mekanis yang layak diuji meliputi:
|
|
38
|
+
|
|
39
|
+
| Layak diuji | Tidak layak diuji |
|
|
40
|
+
| :-------------------------------------------- | :------------------------------------- |
|
|
41
|
+
| Setiap locale wajib memiliki nilai | Apakah susunan katanya indah |
|
|
42
|
+
| Locale yang tepat mencapai komponen | Teks persis dari setiap label |
|
|
43
|
+
| Bentuk jamak diselesaikan untuk tiap kategori | Apakah penerjemah bekerja teliti |
|
|
44
|
+
| Locale RTL mengatur arah dan pencerminan | Setiap string di setiap locale |
|
|
45
|
+
| Tanggal dan angka yang diformat sesuai locale | Kebenaran implementasi internal `Intl` |
|
|
46
|
+
|
|
47
|
+
Pengujian cakupan harus dilakukan dalam satu tes berbasis data, bukan dalam tes komponen individual. Hal ini dibahas secara rinci di [menemukan terjemahan yang hilang](https://github.com/aymericzip/intlayer/blob/main/docs/blog/id/detecting_missing_translations.md); artikel ini berfokus pada aspek lainnya.
|
|
48
|
+
|
|
49
|
+
## Render di bawah provider dan periksa berdasarkan peran (Role)
|
|
50
|
+
|
|
51
|
+
Pola utamanya adalah memasang komponen di dalam provider locale dan mencari elemen berdasarkan role atau test id daripada teks literal.
|
|
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("merender judul ringkasan dalam bahasa Prancis", () => {
|
|
59
|
+
render(
|
|
60
|
+
<IntlayerProvider locale="fr-FR">
|
|
61
|
+
<CartSummary />
|
|
62
|
+
</IntlayerProvider>
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
expect(screen.getByRole("heading")).toBeInTheDocument();
|
|
66
|
+
});
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Mencari dengan `getByRole("heading")` tetap bertahan saat kata-kata berubah. Sebaliknya `getByText("Récapitulatif")` langsung gagal saat ada penyesuaian teks. Gunakan teks literal hanya jika string itu sendiri yang menjadi objek pengujian, yang sebenarnya sangat jarang.
|
|
70
|
+
|
|
71
|
+
Untuk atribut seperti `aria-label`, Anda memerlukan string mentah daripada node yang dapat dirender. Di React, entri `useIntlayer` menyediakan field `.value` untuk kebutuhan ini.
|
|
72
|
+
|
|
73
|
+
## Parameterisasi pengujian di seluruh locale
|
|
74
|
+
|
|
75
|
+
Satu logika tes yang dijalankan pada setiap locale jauh lebih bernilai daripada menulis tes terpisah untuk masing-masing bahasa.
|
|
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("merender tanpa fallback ke nama key", () => {
|
|
84
|
+
const { container } = render(
|
|
85
|
+
<IntlayerProvider locale={locale}>
|
|
86
|
+
<CartSummary />
|
|
87
|
+
</IntlayerProvider>
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
// Key yang ter-render berarti pencarian gagal.
|
|
91
|
+
expect(container.textContent).not.toMatch(/^[a-z]+(\.[a-z]+)+$/);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
it("menetapkan arah teks yang benar", () => {
|
|
95
|
+
expect(getHTMLTextDir(locale)).toBe(locale === "ar" ? "rtl" : "ltr");
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Assertion pertama adalah keuntungan generik yang murah: jika pencarian gagal dan library menampilkan key, DOM akan memuat pola seperti `cart.summary.title`. Ini menangkap seluruh kelas bug tanpa perlu memeriksa string tertentu satu per satu.
|
|
101
|
+
|
|
102
|
+
## Pseudolokalisasi menemukan apa yang terlewat oleh katalog
|
|
103
|
+
|
|
104
|
+
Tambahkan locale tiruan yang mengubah setiap string, misalnya mengubah `Checkout` menjadi `[!!! Çĥéçķöũţ !!!]`. Kemudian render halaman dalam bahasa tersebut.
|
|
105
|
+
|
|
106
|
+
Apa pun yang masih muncul dalam bahasa Inggris standar berarti di-hardcode dalam kode sumber. Audit berbasis katalog tidak akan pernah menemukannya karena dari sudut pandang alat, string tersebut belum ada. Tanda kurung siku memiliki fungsi kedua: memperpanjang teks sekitar 30 persen, memperlihatkan tata letak yang rusak sebelum benar-benar diuji dalam bahasa Jerman.
|
|
107
|
+
|
|
108
|
+
Sebaiknya jalankan ini sebagai pemeriksaan visual atau end-to-end daripada unit test, karena kesalahan ini dapat dilihat secara visual.
|
|
109
|
+
|
|
110
|
+
## Bentuk jamak membutuhkan pengujian per kategori, bukan per bahasa
|
|
111
|
+
|
|
112
|
+
Bug bentuk jamak sering luput karena bahasa Inggris hanya memiliki dua bentuk dan sebagian besar pengembang hanya menguji bentuk tersebut. Bahasa Polandia memiliki empat, dan bahasa Arab memiliki enam kategori bentuk jamak.
|
|
113
|
+
|
|
114
|
+
```ts fileName="plural.test.ts"
|
|
115
|
+
// Bahasa Arab menguji zero, one, two, few, many, other.
|
|
116
|
+
describe.each([0, 1, 2, 3, 11, 100])("jumlah %i", (count) => {
|
|
117
|
+
it("menghasilkan string tidak kosong dalam bahasa Arab", () => {
|
|
118
|
+
expect(formatItems(count, "ar")).not.toBe("");
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Pilihlah angka yang mencakup setiap kategori CLDR untuk bahasa paling kompleks alih-alih menguji 1 dan 2 di semua tempat. `Intl.PluralRules` memberi tahu kategori dari suatu angka, sehingga Anda dapat menentukan sampel pengujian tanpa menebak-nebak. Selengkapnya mengenai kategori ini dalam [artikel format pesan ICU](https://github.com/aymericzip/intlayer/blob/main/docs/blog/id/icu_message_format.md).
|
|
124
|
+
|
|
125
|
+
## Jebakan snapshot
|
|
126
|
+
|
|
127
|
+
Snapshot dan i18n adalah paduan yang buruk. Snapshot dari komponen yang dilokalkan mencatat setiap string di dalamnya: ketika seorang penerjemah memperbaiki kesalahan ketik dalam bahasa Portugis, tes yang sebelumnya hijau berubah merah, dalam file yang tidak dapat dinilai oleh reviewer. Setelah ketiga kalinya, seseorang akan menjalankan `-u` tanpa membaca diff, dan snapshot kehilangan maknanya.
|
|
128
|
+
|
|
129
|
+
Jika Anda ingin menggunakan snapshot, lakukan hanya dalam satu locale dan perlakukan sebagai pemeriksaan struktural daripada pemeriksaan konten. Semua yang spesifik untuk locale harus diuji dengan assertion eksplisit.
|
|
130
|
+
|
|
131
|
+
## Uji negosiasi locale, bukan hanya proses rendering
|
|
132
|
+
|
|
133
|
+
Bug i18n paling umum di produksi bukanlah teks yang hilang. Melainkan terpilihnya locale yang salah: URL menunjukkan `/fr/`, klien membaca `navigator.language`, dan keduanya tidak cocok.
|
|
134
|
+
|
|
135
|
+
Uji urutan penyelesaian locale secara langsung sebagai fungsi murni, terpisah dari komponen:
|
|
136
|
+
|
|
137
|
+
```ts fileName="locale-resolution.test.ts"
|
|
138
|
+
it("memprioritaskan URL daripada preferensi yang tersimpan", () => {
|
|
139
|
+
expect(resolveLocale({ url: "/fr/about", stored: "de", header: "ja" })).toBe(
|
|
140
|
+
"fr"
|
|
141
|
+
);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
it("jatuh kembali ke header ketika URL tidak memiliki prefix", () => {
|
|
145
|
+
expect(resolveLocale({ url: "/about", stored: null, header: "ja" })).toBe(
|
|
146
|
+
"ja"
|
|
147
|
+
);
|
|
148
|
+
});
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Ini adalah tes i18n paling bernilai tinggi yang paling sering hilang dalam codebase, dan tes ini sama sekali tidak memerlukan DOM.
|
|
152
|
+
|
|
153
|
+
## Apa yang harus dijalankan dan di mana
|
|
154
|
+
|
|
155
|
+
- **Unit**: Negosiasi locale, formatter, kategori bentuk jamak. Cepat, tanpa DOM.
|
|
156
|
+
- **Komponen**: Satu render berbasis provider per locale, memvalidasi role dan ketiadaan key mentah.
|
|
157
|
+
- **Cakupan**: Satu tes berbasis data yang memastikan tidak ada locale wajib yang hilang.
|
|
158
|
+
- **Visual atau E2E**: Pemeriksaan pseudolokalisasi dan satu halaman RTL, karena masalah tersebut bersifat visual.
|
|
159
|
+
|
|
160
|
+
Pertahankan tiga yang pertama di pipeline CI pada setiap commit. Yang terakhir hemat dijalankan pada build malam hari dan mahal jika dijalankan di setiap push.
|
|
161
|
+
|
|
162
|
+
## Kesalahan umum
|
|
163
|
+
|
|
164
|
+
- **Menegaskan teks literal di mana-mana.** Memastikan suite pengujian dihapus dalam beberapa bulan.
|
|
165
|
+
- **Mengambil snapshot komponen yang dilokalkan.** Penerjemah merusak build dan reviewer menyetujui tanpa membaca.
|
|
166
|
+
- **Hanya menguji locale default.** Satu-satunya locale yang mustahil hilang.
|
|
167
|
+
- **Hanya menguji 1 dan 2 untuk bentuk jamak.** Melewatkan kategori yang tidak ada dalam bahasa Inggris.
|
|
168
|
+
- **Membuat mock dari library i18n.** Anda hanya menguji bahwa mock Anda mengembalikan string.
|
|
169
|
+
- **Tidak pernah menguji logika negosiasi locale.** Masalah paling umum di dunia nyata dan paling mudah diuji.
|
|
170
|
+
|
|
171
|
+
## Pelajari lebih lanjut
|
|
172
|
+
|
|
173
|
+
- [Menguji konten Anda: audit CLI, API programatik, dan asersi UI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/testing.md)
|
|
174
|
+
- [Plugin ESLint: mendeteksi string hardcoded dan konten yang tidak terpakai](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/eslint.md)
|
|
175
|
+
- [Formatter dan utilitas locale, termasuk `getHTMLTextDir`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/formatters.md)
|
|
176
|
+
- [Laporan benchmark antar berbagai framework](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/benchmark/index.md)
|
|
177
|
+
- [Adapter kompatibilitas react-i18next](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/compat/react-i18next.md)
|
|
178
|
+
- [Cara mendeteksi terjemahan yang hilang](https://github.com/aymericzip/intlayer/blob/main/docs/blog/id/detecting_missing_translations.md)
|
|
179
|
+
- [Format pesan ICU: bentuk jamak, select, dan skeleton](https://github.com/aymericzip/intlayer/blob/main/docs/blog/id/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
|
> flag `--interactive` bersifat opsional. Gunakan `intlayer-cli init` jika Anda adalah agen AI.
|
|
@@ -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
|
> flag `--interactive` bersifat opsional. Gunakan `intlayer-cli init` jika Anda adalah agen AI.
|
|
@@ -69,15 +69,15 @@ npx intlayer init --interactive
|
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
```bash packageManager="pnpm"
|
|
72
|
-
pnpm dlx intlayer
|
|
72
|
+
pnpm dlx intlayer init --interactive
|
|
73
73
|
```
|
|
74
74
|
|
|
75
75
|
```bash packageManager="yarn"
|
|
76
|
-
yarn dlx intlayer
|
|
76
|
+
yarn dlx intlayer init --interactive
|
|
77
77
|
```
|
|
78
78
|
|
|
79
79
|
```bash packageManager="bun"
|
|
80
|
-
bunx intlayer
|
|
80
|
+
bunx intlayer init --interactive
|
|
81
81
|
```
|
|
82
82
|
|
|
83
83
|
> flag `--interactive` bersifat opsional. Gunakan `intlayer-cli init` jika Anda adalah agen AI.
|
|
@@ -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
|
> flag `--interactive` bersifat opsional. Gunakan `intlayer-cli init` jika Anda adalah agen AI.
|
|
@@ -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
|
> flag `--interactive` bersifat opsional. Gunakan `intlayer-cli init` jika Anda adalah agen AI.
|
|
@@ -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
|
> flag `--interactive` bersifat opsional. Gunakan `intlayer-cli init` jika Anda adalah agen AI.
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-09-02
|
|
3
|
+
updatedAt: 2026-09-02
|
|
4
|
+
title: Apakah i18next Sudah Ketinggalan Zaman di Tahun 2026?
|
|
5
|
+
description: i18next memberdayakan jutaan situs web, tetapi arsitektur runtime buatan 2011 mulai menunjukkan usianya. Analisis ukuran bundle, batas tree-shaking, dan laju inovasi.
|
|
6
|
+
keywords:
|
|
7
|
+
- i18next
|
|
8
|
+
- react-i18next
|
|
9
|
+
- next-i18next
|
|
10
|
+
- Intlayer
|
|
11
|
+
- Internasionalisasi
|
|
12
|
+
- i18n
|
|
13
|
+
- Ukuran bundle
|
|
14
|
+
- Blog
|
|
15
|
+
slugs:
|
|
16
|
+
- blog
|
|
17
|
+
- is-i18next-outdated
|
|
18
|
+
author: aymericzip
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# Apakah i18next Sudah Ketinggalan Zaman di Tahun 2026?
|
|
22
|
+
|
|
23
|
+
`i18next` diluncurkan pada tahun 2011, jauh sebelum komponen React, bundling Webpack, atau TypeScript menjadi standar umum. Pustaka ini mendominasi ekosistem karena fleksibilitas dan jangkauannya yang luas, memiliki plugin untuk hampir setiap tech stack, dan solusi StackOverflow untuk setiap kendala.
|
|
24
|
+
|
|
25
|
+
Proyek ini tidak ditinggalkan, patch perbaikan masih rutin dirilis. Namun, ada perbedaan besar antara menjaga mesin lawas tetap berjalan dengan berkembang aktif mengikuti arsitektur frontend modern.
|
|
26
|
+
|
|
27
|
+
Dalam beberapa tahun terakhir, ekosistem frontend telah beralih ke kompilasi saat build time, React Server Components (RSC), tree-shaking agresif, dan alur kerja berbasis AI. Sementara itu, inti dari i18next tetap sama seperti satu dekade lalu: sebuah runtime singleton yang mencocokkan string key di sisi klien.
|
|
28
|
+
|
|
29
|
+
<TOC/>
|
|
30
|
+
|
|
31
|
+
## Poin Utama
|
|
32
|
+
|
|
33
|
+
**Mode pemeliharaan:**
|
|
34
|
+
|
|
35
|
+
Sepanjang 12 bulan terakhir, `next-i18next` mencatatkan ~63 commit (sekitar satu per minggu) dan `react-i18next` ~157 commit, yang sebagian besar hanya berupa pembaruan dependensi dan perbaikan kecil.
|
|
36
|
+
|
|
37
|
+
**Beban runtime yang berat:**
|
|
38
|
+
|
|
39
|
+
`react-i18next` dan `next-i18next` menambahkan ~17–18 KB gzipped (~60 KB minified) sebelum merender satu kata terjemahan pun, hampir 4 kali lipat lebih besar dibanding `next-intlayer` (~4.7 KB).
|
|
40
|
+
|
|
41
|
+
**Kebocoran konten terjemahan:**
|
|
42
|
+
|
|
43
|
+
Pada konfigurasi statis bawaan, hingga **89.8%** data lokalisasi yang dikirimkan ke suatu halaman sebenarnya milik rute lain atau bahasa yang sedang tidak aktif.
|
|
44
|
+
|
|
45
|
+
**Tree-shaking mustahil dilakukan:**
|
|
46
|
+
|
|
47
|
+
Pemanggilan string dinamis seperti `t("home.hero.title")` tidak dapat dianalisis secara statis oleh bundler, sehingga file JSON utuh terpaksa dimasukkan ke bundle klien.
|
|
48
|
+
|
|
49
|
+
**Model bisnis:**
|
|
50
|
+
|
|
51
|
+
Pengelola menjalankan platform komersial Locize. Mengintegrasikan alur terjemahan AI lokal gratis langsung ke dalam CLI akan berbenturan langsung dengan sumber pendapatan utama mereka.
|
|
52
|
+
|
|
53
|
+
## Pemeliharaan vs. Evolusi Aktif
|
|
54
|
+
|
|
55
|
+
Bintang di GitHub mencerminkan popularitas historis, bukan dinamika arsitektural saat ini.
|
|
56
|
+
|
|
57
|
+
| Repositori | Bintang | Total commit | Commit / tahun | Commit terakhir |
|
|
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
|
+
Aktivitas pengembangan selama 12 bulan terakhir:
|
|
65
|
+
|
|
66
|
+
| Proyek | Total commit | 12 bulan terakhir | Fokus utama |
|
|
67
|
+
| --------------- | ------------ | ----------------- | ------------------------------------ |
|
|
68
|
+
| `next-i18next` | 1.311 | **63** | Kompatibilitas Next.js dan bug fix |
|
|
69
|
+
| `react-i18next` | 1.988 | **157** | Definisi tipe dan pemeliharaan |
|
|
70
|
+
| `i18next` core | 2.626 | **259** | Patch minor |
|
|
71
|
+
| Intlayer | 7.156 | **4.343** | Kompiler, perkakas IDE, dan mesin AI |
|
|
72
|
+
|
|
73
|
+
[](https://www.star-history.com/#i18next/i18next&i18next/react-i18next&i18next/next-i18next&aymericzip/intlayer)
|
|
74
|
+
|
|
75
|
+
Pustaka yang matang memang menawarkan stabilitas. Namun standar perkakas i18n telah berubah: bundler modern memangkas teks tak terpakai saat build, model bahasa (LLM) menerjemahkan langsung di pipeline CI, dan editor terintegrasi dengan Language Server (LSP) serta AI agent. Arsitektur i18next yang murni mengandalkan runtime kesulitan mengadopsi kemajuan ini.
|
|
76
|
+
|
|
77
|
+
## Mengukur Beban pada 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
|
+
> Diuji pada build produksi dengan 10 rute dan 10 bahasa menggunakan kompresi gzip. Rincian lengkap ada di [laporan benchmark i18n](https://intlayer.org/id/doc/benchmark).
|
|
89
|
+
|
|
90
|
+
### Beban Dasar Pustaka
|
|
91
|
+
|
|
92
|
+
Ukuran awal sebelum menambahkan konten terjemahan apa pun:
|
|
93
|
+
|
|
94
|
+
| Pustaka | Gzipped | Minified |
|
|
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
|
+
### Bobot Halaman dan Kebocoran Data
|
|
101
|
+
|
|
102
|
+
Pengujian di lingkungan React / TanStack Start (strategi statis):
|
|
103
|
+
|
|
104
|
+
| Pustaka | Rata-rata JS/hlm (gz) | Kebocoran bahasa | Kebocoran hlm lain | Rata-rata komponen (gz) | Hidrasi |
|
|
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
|
+
Pada Next.js:
|
|
111
|
+
|
|
112
|
+
| Pustaka | Rata-rata JS/hlm (gz) | Kebocoran hlm lain | Rata-rata komponen (gz) |
|
|
113
|
+
| ------------------ | --------------------- | ------------------ | ----------------------- |
|
|
114
|
+
| Dasar (tanpa 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
|
+
### Temuan Utama
|
|
119
|
+
|
|
120
|
+
**Beban halaman:**
|
|
121
|
+
|
|
122
|
+
Di Next.js, `next-i18next` menambahkan **76.7 KB gzipped** dibanding aplikasi dasar (+50%). Sedangkan `next-intlayer` hanya menambah 1.3 KB.
|
|
123
|
+
|
|
124
|
+
**Kebocoran konten:**
|
|
125
|
+
|
|
126
|
+
Secara default, sekitar **90% teks terjemahan** yang dikirim ke suatu rute sebenarnya adalah milik halaman lain. Membagi namespace secara manual memakan waktu dan rawan kelalaian.
|
|
127
|
+
|
|
128
|
+
**Waktu hidrasi:**
|
|
129
|
+
|
|
130
|
+
Komponen dengan `react-i18next` membutuhkan waktu **85 ms** untuk hidrasi, berbanding **24 ms** pada Intlayer. Mengirimkan struktur JSON besar ke komponen klien memperlambat interaktivitas awal.
|
|
131
|
+
|
|
132
|
+
## Mengapa i18next Berat?
|
|
133
|
+
|
|
134
|
+
### Fitur Runtime yang Menumpuk
|
|
135
|
+
|
|
136
|
+
Bekerja seutuhnya di browser mengharuskan pemuatan semua mekanisme sejak awal: interpolasi, aturan jamak, penanganan konteks, formatter, dan event bus. Bahkan teks paling sederhana sekalipun menanggung biaya sistem secara penuh.
|
|
137
|
+
|
|
138
|
+
### String Key Dinamis Menghalangi Tree-Shaking
|
|
139
|
+
|
|
140
|
+
Karena key seperti `"hero.title"` dievaluasi pada saat runtime, bundler tidak dapat mendeteksi teks mana yang benar-benar digunakan. String yang tidak terpakai pun tetap berada di dalam 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
|
+
[Kompiler Intlayer](https://intlayer.org/id/doc/compiler) memeriksa bagian mana dari `Hero.tsx` yang benar-benar dipanggil dan membuang konten yang tidak terpakai sebelum bundle klien dibuat. Pelajari lebih lanjut di [optimasi bundle](https://intlayer.org/id/doc/concept/bundle-optimization).
|
|
164
|
+
|
|
165
|
+
## Pengalaman Pengembang (DX)
|
|
166
|
+
|
|
167
|
+
### JSON Terpisah vs. Ko-Lokasi
|
|
168
|
+
|
|
169
|
+
Pada i18next, terjemahan diletakkan di direktori JSON yang terpisah jauh dari kode. Intlayer memungkinkan penempatan file deklarasi konten berdampingan langsung dengan komponen:
|
|
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/id/hero.json"
|
|
181
|
+
{
|
|
182
|
+
"title": "Rilis dalam setiap bahasa"
|
|
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
|
+
id: "Rilis dalam setiap bahasa",
|
|
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
|
+
Jika Anda memindahkan atau menghapus `Hero.tsx`, file kontennya akan ikut berpindah atau terhapus secara bersamaan.
|
|
225
|
+
|
|
226
|
+
### Autocomplete vs. Keamanan Tipe Ketat
|
|
227
|
+
|
|
228
|
+
Mendeklarasikan `CustomTypeOptions` memberi saran kode di editor, tetapi tidak memverifikasi kelengkapan terjemahan. Menghapus key dari `id/hero.json` tidak akan membatalkan build, melainkan hanya menampilkan fallback saat runtime.
|
|
229
|
+
|
|
230
|
+
Intlayer menghasilkan tipe data langsung dari deklarasi konten, dan mode [`strictMode`](https://intlayer.org/id/doc/concept/configuration) akan langsung menghentikan build jika ada terjemahan yang hilang pada bahasa apa pun.
|
|
231
|
+
|
|
232
|
+
### Ekosistem Alat Bantu
|
|
233
|
+
|
|
234
|
+
| Fitur | Ekosistem i18next | Intlayer |
|
|
235
|
+
| ------------------------- | ---------------------- | --------------------------------------------------------------------- |
|
|
236
|
+
| **Ekstensi VS Code** | Hanya pihak ketiga | ✅ [Ekstensi resmi](https://intlayer.org/id/doc/vs-code-extension) |
|
|
237
|
+
| **Language Server (LSP)** | ❌ Tidak ada | ✅ [LSP khusus](https://intlayer.org/id/doc/lsp) |
|
|
238
|
+
| **Server MCP (untuk AI)** | ❌ Tidak ada | ✅ [Server MCP bawaan](https://intlayer.org/id/doc/mcp-server) |
|
|
239
|
+
| **Skill Agen AI** | ❌ Tidak ada | ✅ [Skill siap pakai](https://intlayer.org/id/doc/agent_skills) |
|
|
240
|
+
| **CMS Visual in-context** | Locize (SaaS berbayar) | ✅ [Gratis & Open Source](https://intlayer.org/id/doc/concept/editor) |
|
|
241
|
+
|
|
242
|
+
Keberadaan server LSP dan MCP membuat AI coding assistant memahami struktur terjemahan proyek secara menyeluruh.
|
|
243
|
+
|
|
244
|
+
## Alur Terjemahan dan Model Locize
|
|
245
|
+
|
|
246
|
+
Locize adalah layanan komersial yang dikelola oleh pembuat i18next. Keberlanjutan open source itu penting, tetapi struktur ini memicu benturan kepentingan: sebuah pustaka yang pendapatannya bergantung pada platform terjemahan berbayar tidak memiliki dorongan kuat untuk merilis perkakas terjemahan AI lokal gratis langsung di dalam CLI.
|
|
247
|
+
|
|
248
|
+
Intlayer memilih pendekatan terbuka:
|
|
249
|
+
|
|
250
|
+
- Perintah [`intlayer fill`](https://intlayer.org/id/doc/concept/auto-fill) melengkapi terjemahan yang hilang di terminal atau CI memakai API key OpenAI, Anthropic, Mistral, atau Gemini milik Anda sendiri.
|
|
251
|
+
- [Intlayer CMS](https://intlayer.org/id/doc/concept/cms) bersifat open source dan dapat di-hosting mandiri melalui Docker Compose.
|
|
252
|
+
- Kompiler, CLI, editor, dan CMS dirilis di bawah lisensi Apache 2.0.
|
|
253
|
+
|
|
254
|
+
## Kapan i18next Masih Menjadi Pilihan Tepat?
|
|
255
|
+
|
|
256
|
+
<AccordionGroup>
|
|
257
|
+
<Accordion header="Proyek lawas yang stabil">
|
|
258
|
+
|
|
259
|
+
Jika aplikasi saat ini berjalan baik dan ukuran bundle bukan menjadi penghambat, migrasi tidak perlu dilakukan terburu-buru.
|
|
260
|
+
|
|
261
|
+
</Accordion>
|
|
262
|
+
<Accordion header="Platform khusus">
|
|
263
|
+
|
|
264
|
+
Koleksi plugin i18next yang masif mendukung platform unik (Electron, aplikasi lawas jQuery, bridge native khusus) yang belum tentu didukung langsung oleh kompiler modern.
|
|
265
|
+
|
|
266
|
+
</Accordion>
|
|
267
|
+
<Accordion header="Basis komunitas yang luas">
|
|
268
|
+
|
|
269
|
+
Dokumentasi tanya-jawab bertahun-tahun di StackOverflow dan GitHub memudahkan penyelesaian kasus-kasus langka.
|
|
270
|
+
|
|
271
|
+
</Accordion>
|
|
272
|
+
</AccordionGroup>
|
|
273
|
+
|
|
274
|
+
## Bagaimana Meningkatkan Konfigurasi i18next yang Sudah Ada?
|
|
275
|
+
|
|
276
|
+
Intlayer menyediakan paket kompatibilitas drop-in yang secara akurat mereplikasi tanda tangan fungsi pustaka i18next (`i18next`, `react-i18next`, dan `next-i18next`). Anda tidak perlu menulis ulang komponen untuk mendapatkan efisiensi dari arsitektur berbasis kompiler modern.
|
|
277
|
+
|
|
278
|
+
Pemasangan dilakukan hanya dengan satu baris perintah:
|
|
279
|
+
|
|
280
|
+
```bash packageManager="npm"
|
|
281
|
+
npx intlayer init --interactive
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
```bash packageManager="pnpm"
|
|
285
|
+
pnpm dlx intlayer init --interactive
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
```bash packageManager="yarn"
|
|
289
|
+
yarn dlx intlayer init --interactive
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
```bash packageManager="bun"
|
|
293
|
+
bunx intlayer init --interactive
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
CLI interaktif ini secara otomatis:
|
|
297
|
+
|
|
298
|
+
1. Memasang paket kompatibilitas `@intlayer/i18next`.
|
|
299
|
+
2. Mengonfigurasi alias bundler sehingga impor yang sudah ada (`useTranslation`, `Trans`, `t`) secara mulus dialihkan ke Intlayer, sehingga pustaka lama dapat dihapus dari `package.json`.
|
|
300
|
+
3. Mengaktifkan diagnostik Language Server (LSP) di editor, pemangkasan bundle saat build (tree-shaking penuh), serta alur kerja terjemahan AI lokal tanpa perlu perombakan besar.
|
|
301
|
+
|
|
302
|
+
Untuk panduan langkah demi langkah yang lebih mendalam, simak referensi kami:
|
|
303
|
+
|
|
304
|
+
- **Lapisan Kompatibilitas:** Pertahankan kode lama Anda dengan adaptor untuk [i18next](https://intlayer.org/id/doc/compatibility/i18next), [react-i18next](https://intlayer.org/id/doc/compatibility/react-i18next), dan [next-i18next](https://intlayer.org/id/doc/compatibility/next-i18next).
|
|
305
|
+
- **Panduan Migrasi Kamus:** Konversikan file JSON lama menjadi kamus bertipe: [dari i18next](https://intlayer.org/id/doc/migration/i18next), [dari react-i18next](https://intlayer.org/id/doc/migration/react-i18next), atau [dari next-i18next](https://intlayer.org/id/doc/migration/next-i18next).
|
|
306
|
+
- **Pola Hibrida:** Pertahankan runtime i18next sembari [menggunakan Intlayer bersama i18next](https://intlayer.org/id/blog/intlayer-with-i18next) untuk mendapatkan validasi tipe dan terjemahan AI lokal.
|
|
307
|
+
|
|
308
|
+
Periksa ukuran bundle dan kebocoran konten situs Anda dengan [Pemindai SEO i18n gratis](https://intlayer.org/i18n-seo-scanner):
|
|
309
|
+
|
|
310
|
+
<ClickToOpenIframe src="https://intlayer.org/i18n-seo-scanner" width="100%" height="600px" style="border:none;"/>
|
|
311
|
+
|
|
312
|
+
## Artikel Terkait
|
|
313
|
+
|
|
314
|
+
- [Benchmark Next.js i18n: Analisis Performa Mendalam](https://intlayer.org/id/doc/benchmark/nextjs)
|
|
315
|
+
- [react-i18next vs react-intl vs Intlayer](https://intlayer.org/id/blog/react-i18next-vs-react-intl-vs-intlayer)
|
|
316
|
+
- [Apakah next-intl Sudah Ketinggalan Zaman di Tahun 2026?](https://intlayer.org/id/blog/is-next-intl-outdated)
|
|
317
|
+
- [Internasionalisasi Berbasis Kompiler vs Deklaratif](https://intlayer.org/id/blog/compiler-vs-declarative-i18n)
|