@intlayer/docs 7.5.11 → 7.5.13
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/intlayer_with_i18next.md +0 -2
- package/blog/ar/intlayer_with_next-i18next.md +0 -2
- package/blog/ar/intlayer_with_react-i18next.md +0 -2
- package/blog/de/intlayer_with_i18next.md +0 -45
- package/blog/de/intlayer_with_next-i18next.md +0 -46
- package/blog/de/intlayer_with_react-i18next.md +0 -2
- package/blog/en/intlayer_with_i18next.md +0 -46
- package/blog/en/intlayer_with_next-i18next.md +0 -48
- package/blog/en/intlayer_with_next-intl.md +0 -44
- package/blog/en/intlayer_with_react-i18next.md +0 -44
- package/blog/en/intlayer_with_react-intl.md +0 -42
- package/blog/en/intlayer_with_vue-i18n.md +0 -44
- package/blog/en-GB/intlayer_with_i18next.md +0 -45
- package/blog/en-GB/intlayer_with_next-i18next.md +0 -47
- package/blog/en-GB/intlayer_with_next-intl.md +0 -42
- package/blog/en-GB/intlayer_with_react-i18next.md +0 -43
- package/blog/en-GB/intlayer_with_react-intl.md +0 -42
- package/blog/en-GB/intlayer_with_vue-i18n.md +0 -46
- package/blog/es/intlayer_with_i18next.md +0 -45
- package/blog/es/intlayer_with_next-i18next.md +0 -47
- package/blog/es/intlayer_with_next-intl.md +0 -42
- package/blog/es/intlayer_with_react-i18next.md +0 -43
- package/blog/es/intlayer_with_react-intl.md +0 -42
- package/blog/es/intlayer_with_vue-i18n.md +0 -46
- package/blog/fr/intlayer_with_i18next.md +0 -45
- package/blog/fr/intlayer_with_next-i18next.md +0 -47
- package/blog/fr/intlayer_with_next-intl.md +0 -42
- package/blog/fr/intlayer_with_react-i18next.md +0 -43
- package/blog/fr/intlayer_with_react-intl.md +0 -42
- package/blog/fr/intlayer_with_vue-i18n.md +0 -46
- package/blog/hi/intlayer_with_i18next.md +0 -2
- package/blog/hi/intlayer_with_next-i18next.md +0 -2
- package/blog/hi/intlayer_with_react-i18next.md +0 -2
- package/blog/id/intlayer_with_i18next.md +0 -2
- package/blog/id/intlayer_with_next-i18next.md +0 -2
- package/blog/id/intlayer_with_react-i18next.md +0 -2
- package/blog/it/intlayer_with_i18next.md +0 -2
- package/blog/it/intlayer_with_next-i18next.md +0 -2
- package/blog/it/intlayer_with_react-i18next.md +0 -2
- package/blog/ja/intlayer_with_i18next.md +0 -45
- package/blog/ja/intlayer_with_next-i18next.md +0 -46
- package/blog/ja/intlayer_with_next-intl.md +0 -42
- package/blog/ja/intlayer_with_react-i18next.md +0 -42
- package/blog/ja/intlayer_with_react-intl.md +0 -42
- package/blog/ja/intlayer_with_vue-i18n.md +0 -46
- package/blog/ko/intlayer_with_i18next.md +0 -2
- package/blog/ko/intlayer_with_next-i18next.md +0 -2
- package/blog/ko/intlayer_with_react-i18next.md +0 -1
- package/blog/pl/intlayer_with_i18next.md +0 -45
- package/blog/pl/intlayer_with_next-i18next.md +0 -46
- package/blog/pl/intlayer_with_next-intl.md +0 -42
- package/blog/pl/intlayer_with_react-i18next.md +0 -43
- package/blog/pl/intlayer_with_react-intl.md +0 -42
- package/blog/pl/intlayer_with_vue-i18n.md +0 -46
- package/blog/pt/intlayer_with_i18next.md +0 -2
- package/blog/pt/intlayer_with_next-i18next.md +0 -2
- package/blog/pt/intlayer_with_react-i18next.md +0 -2
- package/blog/ru/intlayer_with_i18next.md +0 -45
- package/blog/ru/intlayer_with_next-i18next.md +0 -47
- package/blog/ru/intlayer_with_next-intl.md +0 -42
- package/blog/ru/intlayer_with_react-i18next.md +0 -43
- package/blog/ru/intlayer_with_react-intl.md +0 -42
- package/blog/ru/intlayer_with_vue-i18n.md +0 -46
- package/blog/tr/intlayer_with_i18next.md +0 -2
- package/blog/tr/intlayer_with_next-i18next.md +0 -1
- package/blog/tr/intlayer_with_react-i18next.md +0 -2
- package/blog/uk/compiler_vs_declarative_i18n.md +224 -0
- package/blog/uk/i18n_using_next-i18next.md +1086 -0
- package/blog/uk/i18n_using_next-intl.md +760 -0
- package/blog/uk/index.md +69 -0
- package/blog/uk/internationalization_and_SEO.md +273 -0
- package/blog/uk/intlayer_with_i18next.md +211 -0
- package/blog/uk/intlayer_with_next-i18next.md +202 -0
- package/blog/uk/intlayer_with_next-intl.md +203 -0
- package/blog/uk/intlayer_with_react-i18next.md +200 -0
- package/blog/uk/intlayer_with_react-intl.md +202 -0
- package/blog/uk/intlayer_with_vue-i18n.md +206 -0
- package/blog/uk/l10n_platform_alternative/Lokalise.md +80 -0
- package/blog/uk/l10n_platform_alternative/crowdin.md +80 -0
- package/blog/uk/l10n_platform_alternative/phrase.md +78 -0
- package/blog/uk/list_i18n_technologies/CMS/drupal.md +143 -0
- package/blog/uk/list_i18n_technologies/CMS/wix.md +167 -0
- package/blog/uk/list_i18n_technologies/CMS/wordpress.md +189 -0
- package/blog/uk/list_i18n_technologies/frameworks/angular.md +125 -0
- package/blog/uk/list_i18n_technologies/frameworks/flutter.md +128 -0
- package/blog/uk/list_i18n_technologies/frameworks/react-native.md +217 -0
- package/blog/uk/list_i18n_technologies/frameworks/react.md +155 -0
- package/blog/uk/list_i18n_technologies/frameworks/svelte.md +145 -0
- package/blog/uk/list_i18n_technologies/frameworks/vue.md +144 -0
- package/blog/uk/next-i18next_vs_next-intl_vs_intlayer.md +1499 -0
- package/blog/uk/nextjs-multilingual-seo-comparison.md +360 -0
- package/blog/uk/rag_powered_documentation_assistant.md +288 -0
- package/blog/uk/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
- package/blog/uk/vue-i18n_vs_intlayer.md +279 -0
- package/blog/uk/what_is_internationalization.md +167 -0
- package/blog/vi/intlayer_with_i18next.md +0 -2
- package/blog/vi/intlayer_with_next-i18next.md +0 -2
- package/blog/vi/intlayer_with_react-i18next.md +0 -2
- package/blog/zh/intlayer_with_i18next.md +0 -2
- package/blog/zh/intlayer_with_next-i18next.md +0 -2
- package/blog/zh/intlayer_with_react-i18next.md +0 -2
- package/blog/zh/intlayer_with_vue-i18n.md +0 -46
- package/dist/cjs/generated/blog.entry.cjs +58 -29
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +218 -99
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +50 -15
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +4 -2
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +58 -29
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +218 -99
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +50 -15
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/esm/generated/legal.entry.mjs +4 -2
- package/dist/esm/generated/legal.entry.mjs.map +1 -1
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/dist/types/generated/frequentQuestions.entry.d.ts +1 -0
- package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
- package/dist/types/generated/legal.entry.d.ts.map +1 -1
- package/docs/ar/configuration.md +6 -1
- package/docs/ar/dictionary/content_file.md +6 -1
- package/docs/ar/intlayer_with_next-i18next.md +0 -1
- package/docs/ar/intlayer_with_nextjs_14.md +28 -0
- package/docs/ar/intlayer_with_nextjs_15.md +28 -0
- package/docs/ar/intlayer_with_nextjs_16.md +28 -0
- package/docs/ar/intlayer_with_nextjs_no_locale_path.md +1159 -0
- package/docs/ar/plugins/sync-json.md +6 -2
- package/docs/de/configuration.md +6 -1
- package/docs/de/dictionary/content_file.md +6 -1
- package/docs/de/intlayer_with_next-i18next.md +0 -1
- package/docs/de/intlayer_with_nextjs_14.md +28 -0
- package/docs/de/intlayer_with_nextjs_15.md +28 -0
- package/docs/de/intlayer_with_nextjs_16.md +28 -0
- package/docs/de/intlayer_with_nextjs_no_locale_path.md +1152 -0
- package/docs/de/plugins/sync-json.md +6 -2
- package/docs/en/configuration.md +6 -1
- package/docs/en/dictionary/content_file.md +6 -1
- package/docs/en/intlayer_with_next-i18next.md +0 -1
- package/docs/en/intlayer_with_nextjs_14.md +28 -0
- package/docs/en/intlayer_with_nextjs_15.md +28 -0
- package/docs/en/intlayer_with_nextjs_16.md +31 -1
- package/docs/en/intlayer_with_nextjs_no_locale_path.md +1132 -0
- package/docs/en/plugins/sync-json.md +6 -2
- package/docs/en-GB/configuration.md +6 -1
- package/docs/en-GB/dictionary/content_file.md +3 -1
- package/docs/en-GB/intlayer_with_next-i18next.md +0 -1
- package/docs/en-GB/intlayer_with_nextjs_14.md +28 -0
- package/docs/en-GB/intlayer_with_nextjs_15.md +28 -0
- package/docs/en-GB/intlayer_with_nextjs_16.md +28 -0
- package/docs/en-GB/intlayer_with_nextjs_no_locale_path.md +1154 -0
- package/docs/en-GB/plugins/sync-json.md +6 -2
- package/docs/es/configuration.md +6 -1
- package/docs/es/dictionary/content_file.md +6 -1
- package/docs/es/intlayer_with_next-i18next.md +0 -1
- package/docs/es/intlayer_with_nextjs_14.md +28 -0
- package/docs/es/intlayer_with_nextjs_15.md +28 -0
- package/docs/es/intlayer_with_nextjs_16.md +28 -0
- package/docs/es/intlayer_with_nextjs_no_locale_path.md +1143 -0
- package/docs/es/plugins/sync-json.md +6 -2
- package/docs/fr/configuration.md +6 -1
- package/docs/fr/dictionary/content_file.md +3 -1
- package/docs/fr/intlayer_with_next-i18next.md +0 -1
- package/docs/fr/intlayer_with_nextjs_14.md +28 -0
- package/docs/fr/intlayer_with_nextjs_15.md +28 -0
- package/docs/fr/intlayer_with_nextjs_16.md +28 -0
- package/docs/fr/intlayer_with_nextjs_no_locale_path.md +1174 -0
- package/docs/fr/plugins/sync-json.md +9 -5
- package/docs/hi/configuration.md +6 -1
- package/docs/hi/dictionary/content_file.md +3 -1
- package/docs/hi/intlayer_with_next-i18next.md +0 -1
- package/docs/hi/intlayer_with_nextjs_14.md +28 -0
- package/docs/hi/intlayer_with_nextjs_15.md +28 -0
- package/docs/hi/intlayer_with_nextjs_16.md +28 -0
- package/docs/hi/intlayer_with_nextjs_no_locale_path.md +1151 -0
- package/docs/hi/plugins/sync-json.md +6 -2
- package/docs/id/configuration.md +6 -1
- package/docs/id/dictionary/content_file.md +3 -1
- package/docs/id/intlayer_with_next-i18next.md +0 -1
- package/docs/id/intlayer_with_nextjs_14.md +28 -0
- package/docs/id/intlayer_with_nextjs_15.md +28 -0
- package/docs/id/intlayer_with_nextjs_16.md +28 -0
- package/docs/id/intlayer_with_nextjs_no_locale_path.md +1154 -0
- package/docs/id/plugins/sync-json.md +6 -2
- package/docs/it/configuration.md +6 -1
- package/docs/it/dictionary/content_file.md +3 -1
- package/docs/it/intlayer_with_next-i18next.md +0 -1
- package/docs/it/intlayer_with_nextjs_14.md +28 -0
- package/docs/it/intlayer_with_nextjs_15.md +28 -0
- package/docs/it/intlayer_with_nextjs_16.md +28 -0
- package/docs/it/intlayer_with_nextjs_no_locale_path.md +1148 -0
- package/docs/it/plugins/sync-json.md +6 -2
- package/docs/ja/configuration.md +6 -1
- package/docs/ja/dictionary/content_file.md +3 -1
- package/docs/ja/intlayer_with_next-i18next.md +0 -1
- package/docs/ja/intlayer_with_nextjs_14.md +28 -0
- package/docs/ja/intlayer_with_nextjs_15.md +28 -0
- package/docs/ja/intlayer_with_nextjs_16.md +28 -0
- package/docs/ja/intlayer_with_nextjs_no_locale_path.md +1222 -0
- package/docs/ja/plugins/sync-json.md +6 -2
- package/docs/ko/configuration.md +6 -1
- package/docs/ko/dictionary/content_file.md +3 -1
- package/docs/ko/intlayer_with_next-i18next.md +0 -1
- package/docs/ko/intlayer_with_nextjs_14.md +28 -0
- package/docs/ko/intlayer_with_nextjs_15.md +28 -0
- package/docs/ko/intlayer_with_nextjs_16.md +28 -0
- package/docs/ko/intlayer_with_nextjs_no_locale_path.md +1205 -0
- package/docs/ko/plugins/sync-json.md +6 -2
- package/docs/pl/configuration.md +3 -1
- package/docs/pl/dictionary/content_file.md +3 -1
- package/docs/pl/intlayer_with_next-i18next.md +0 -1
- package/docs/pl/intlayer_with_nextjs_14.md +28 -0
- package/docs/pl/intlayer_with_nextjs_15.md +28 -0
- package/docs/pl/intlayer_with_nextjs_16.md +28 -0
- package/docs/pl/intlayer_with_nextjs_no_locale_path.md +1149 -0
- package/docs/pl/plugins/sync-json.md +6 -2
- package/docs/pt/configuration.md +6 -1
- package/docs/pt/dictionary/content_file.md +3 -1
- package/docs/pt/intlayer_with_next-i18next.md +0 -1
- package/docs/pt/intlayer_with_nextjs_14.md +28 -0
- package/docs/pt/intlayer_with_nextjs_15.md +28 -0
- package/docs/pt/intlayer_with_nextjs_16.md +28 -0
- package/docs/pt/intlayer_with_nextjs_no_locale_path.md +1152 -0
- package/docs/pt/plugins/sync-json.md +6 -2
- package/docs/ru/configuration.md +6 -1
- package/docs/ru/dictionary/content_file.md +6 -1
- package/docs/ru/intlayer_with_next-i18next.md +0 -1
- package/docs/ru/intlayer_with_nextjs_14.md +28 -0
- package/docs/ru/intlayer_with_nextjs_15.md +28 -0
- package/docs/ru/intlayer_with_nextjs_16.md +28 -0
- package/docs/ru/intlayer_with_nextjs_no_locale_path.md +1204 -0
- package/docs/ru/plugins/sync-json.md +6 -2
- package/docs/tr/configuration.md +6 -1
- package/docs/tr/dictionary/content_file.md +3 -1
- package/docs/tr/intlayer_with_next-i18next.md +0 -1
- package/docs/tr/intlayer_with_nextjs_14.md +28 -0
- package/docs/tr/intlayer_with_nextjs_15.md +28 -0
- package/docs/tr/intlayer_with_nextjs_16.md +28 -0
- package/docs/tr/intlayer_with_nextjs_no_locale_path.md +1159 -0
- package/docs/tr/plugins/sync-json.md +6 -2
- package/docs/uk/CI_CD.md +198 -0
- package/docs/uk/autoFill.md +307 -0
- package/docs/uk/bundle_optimization.md +185 -0
- package/docs/uk/cli/build.md +64 -0
- package/docs/uk/cli/ci.md +137 -0
- package/docs/uk/cli/configuration.md +63 -0
- package/docs/uk/cli/debug.md +46 -0
- package/docs/uk/cli/doc-review.md +43 -0
- package/docs/uk/cli/doc-translate.md +132 -0
- package/docs/uk/cli/editor.md +28 -0
- package/docs/uk/cli/fill.md +130 -0
- package/docs/uk/cli/index.md +190 -0
- package/docs/uk/cli/init.md +84 -0
- package/docs/uk/cli/list.md +90 -0
- package/docs/uk/cli/list_projects.md +128 -0
- package/docs/uk/cli/live.md +41 -0
- package/docs/uk/cli/login.md +157 -0
- package/docs/uk/cli/pull.md +78 -0
- package/docs/uk/cli/push.md +98 -0
- package/docs/uk/cli/sdk.md +71 -0
- package/docs/uk/cli/test.md +76 -0
- package/docs/uk/cli/transform.md +65 -0
- package/docs/uk/cli/version.md +24 -0
- package/docs/uk/cli/watch.md +37 -0
- package/docs/uk/compiler.md +133 -0
- package/docs/uk/component_i18n.md +194 -0
- package/docs/uk/configuration.md +742 -0
- package/docs/uk/dictionary/condition.md +237 -0
- package/docs/uk/dictionary/content_file.md +1134 -0
- package/docs/uk/dictionary/enumeration.md +245 -0
- package/docs/uk/dictionary/file.md +232 -0
- package/docs/uk/dictionary/function_fetching.md +212 -0
- package/docs/uk/dictionary/gender.md +273 -0
- package/docs/uk/dictionary/insertion.md +187 -0
- package/docs/uk/dictionary/markdown.md +383 -0
- package/docs/uk/dictionary/nesting.md +273 -0
- package/docs/uk/dictionary/translation.md +332 -0
- package/docs/uk/formatters.md +595 -0
- package/docs/uk/how_works_intlayer.md +256 -0
- package/docs/uk/index.md +175 -0
- package/docs/uk/interest_of_intlayer.md +297 -0
- package/docs/uk/intlayer_CMS.md +569 -0
- package/docs/uk/intlayer_visual_editor.md +292 -0
- package/docs/uk/intlayer_with_angular.md +710 -0
- package/docs/uk/intlayer_with_astro.md +256 -0
- package/docs/uk/intlayer_with_create_react_app.md +1258 -0
- package/docs/uk/intlayer_with_express.md +429 -0
- package/docs/uk/intlayer_with_fastify.md +446 -0
- package/docs/uk/intlayer_with_lynx+react.md +548 -0
- package/docs/uk/intlayer_with_nestjs.md +283 -0
- package/docs/uk/intlayer_with_next-i18next.md +640 -0
- package/docs/uk/intlayer_with_next-intl.md +456 -0
- package/docs/uk/intlayer_with_nextjs_14.md +1646 -0
- package/docs/uk/intlayer_with_nextjs_15.md +1910 -0
- package/docs/uk/intlayer_with_nextjs_16.md +1763 -0
- package/docs/uk/intlayer_with_nextjs_no_locale_path.md +1159 -0
- package/docs/uk/intlayer_with_nextjs_page_router.md +1541 -0
- package/docs/uk/intlayer_with_nuxt.md +711 -0
- package/docs/uk/intlayer_with_react_native+expo.md +715 -0
- package/docs/uk/intlayer_with_react_router_v7.md +600 -0
- package/docs/uk/intlayer_with_react_router_v7_fs_routes.md +669 -0
- package/docs/uk/intlayer_with_svelte_kit.md +579 -0
- package/docs/uk/intlayer_with_tanstack.md +818 -0
- package/docs/uk/intlayer_with_vite+preact.md +1748 -0
- package/docs/uk/intlayer_with_vite+react.md +1449 -0
- package/docs/uk/intlayer_with_vite+solid.md +302 -0
- package/docs/uk/intlayer_with_vite+svelte.md +520 -0
- package/docs/uk/intlayer_with_vite+vue.md +1113 -0
- package/docs/uk/introduction.md +222 -0
- package/docs/uk/locale_mapper.md +242 -0
- package/docs/uk/mcp_server.md +211 -0
- package/docs/uk/packages/express-intlayer/t.md +465 -0
- package/docs/uk/packages/intlayer/getConfiguration.md +145 -0
- package/docs/uk/packages/intlayer/getEnumeration.md +159 -0
- package/docs/uk/packages/intlayer/getHTMLTextDir.md +121 -0
- package/docs/uk/packages/intlayer/getLocaleLang.md +81 -0
- package/docs/uk/packages/intlayer/getLocaleName.md +135 -0
- package/docs/uk/packages/intlayer/getLocalizedUrl.md +338 -0
- package/docs/uk/packages/intlayer/getMultilingualUrls.md +359 -0
- package/docs/uk/packages/intlayer/getPathWithoutLocale.md +75 -0
- package/docs/uk/packages/intlayer/getPrefix.md +213 -0
- package/docs/uk/packages/intlayer/getTranslation.md +190 -0
- package/docs/uk/packages/intlayer/getTranslationContent.md +189 -0
- package/docs/uk/packages/next-intlayer/t.md +365 -0
- package/docs/uk/packages/next-intlayer/useDictionary.md +276 -0
- package/docs/uk/packages/next-intlayer/useIntlayer.md +263 -0
- package/docs/uk/packages/next-intlayer/useLocale.md +166 -0
- package/docs/uk/packages/react-intlayer/t.md +311 -0
- package/docs/uk/packages/react-intlayer/useDictionary.md +295 -0
- package/docs/uk/packages/react-intlayer/useI18n.md +250 -0
- package/docs/uk/packages/react-intlayer/useIntlayer.md +251 -0
- package/docs/uk/packages/react-intlayer/useLocale.md +210 -0
- package/docs/uk/per_locale_file.md +345 -0
- package/docs/uk/plugins/sync-json.md +398 -0
- package/docs/uk/readme.md +265 -0
- package/docs/uk/releases/v6.md +305 -0
- package/docs/uk/releases/v7.md +624 -0
- package/docs/uk/roadmap.md +346 -0
- package/docs/uk/testing.md +204 -0
- package/docs/uk/vs_code_extension.md +133 -0
- package/docs/vi/configuration.md +6 -1
- package/docs/vi/dictionary/content_file.md +6 -1
- package/docs/vi/intlayer_with_next-i18next.md +0 -1
- package/docs/vi/intlayer_with_nextjs_14.md +28 -0
- package/docs/vi/intlayer_with_nextjs_15.md +28 -0
- package/docs/vi/intlayer_with_nextjs_16.md +28 -0
- package/docs/vi/intlayer_with_nextjs_no_locale_path.md +1151 -0
- package/docs/vi/plugins/sync-json.md +6 -2
- package/docs/zh/configuration.md +6 -1
- package/docs/zh/dictionary/content_file.md +6 -1
- package/docs/zh/intlayer_with_next-i18next.md +0 -1
- package/docs/zh/intlayer_with_nextjs_14.md +28 -0
- package/docs/zh/intlayer_with_nextjs_15.md +28 -0
- package/docs/zh/intlayer_with_nextjs_16.md +28 -0
- package/docs/zh/intlayer_with_nextjs_no_locale_path.md +1206 -0
- package/docs/zh/plugins/sync-json.md +9 -5
- package/frequent_questions/ar/SSR_Next_no_[locale].md +1 -1
- package/frequent_questions/ar/error-vite-env-only.md +77 -0
- package/frequent_questions/de/SSR_Next_no_[locale].md +1 -1
- package/frequent_questions/de/error-vite-env-only.md +77 -0
- package/frequent_questions/en/SSR_Next_no_[locale].md +1 -1
- package/frequent_questions/en/error-vite-env-only.md +77 -0
- package/frequent_questions/en-GB/SSR_Next_no_[locale].md +1 -1
- package/frequent_questions/en-GB/error-vite-env-only.md +77 -0
- package/frequent_questions/es/SSR_Next_no_[locale].md +1 -1
- package/frequent_questions/es/error-vite-env-only.md +76 -0
- package/frequent_questions/fr/SSR_Next_no_[locale].md +1 -1
- package/frequent_questions/fr/error-vite-env-only.md +77 -0
- package/frequent_questions/hi/SSR_Next_no_[locale].md +1 -1
- package/frequent_questions/hi/error-vite-env-only.md +77 -0
- package/frequent_questions/id/SSR_Next_no_[locale].md +1 -1
- package/frequent_questions/id/error-vite-env-only.md +77 -0
- package/frequent_questions/it/SSR_Next_no_[locale].md +1 -1
- package/frequent_questions/it/error-vite-env-only.md +77 -0
- package/frequent_questions/ja/SSR_Next_no_[locale].md +1 -1
- package/frequent_questions/ja/error-vite-env-only.md +77 -0
- package/frequent_questions/ko/SSR_Next_no_[locale].md +1 -1
- package/frequent_questions/ko/error-vite-env-only.md +77 -0
- package/frequent_questions/pl/SSR_Next_no_[locale].md +1 -1
- package/frequent_questions/pl/error-vite-env-only.md +77 -0
- package/frequent_questions/pt/SSR_Next_no_[locale].md +1 -1
- package/frequent_questions/pt/error-vite-env-only.md +77 -0
- package/frequent_questions/ru/SSR_Next_no_[locale].md +1 -1
- package/frequent_questions/ru/error-vite-env-only.md +77 -0
- package/frequent_questions/tr/SSR_Next_no_[locale].md +1 -1
- package/frequent_questions/tr/error-vite-env-only.md +77 -0
- package/frequent_questions/uk/SSR_Next_no_[locale].md +104 -0
- package/frequent_questions/uk/array_as_content_declaration.md +72 -0
- package/frequent_questions/uk/build_dictionaries.md +58 -0
- package/frequent_questions/uk/build_error_CI_CD.md +74 -0
- package/frequent_questions/uk/bun_set_up.md +53 -0
- package/frequent_questions/uk/customized_locale_list.md +64 -0
- package/frequent_questions/uk/domain_routing.md +113 -0
- package/frequent_questions/uk/error-vite-env-only.md +77 -0
- package/frequent_questions/uk/esbuild_error.md +29 -0
- package/frequent_questions/uk/get_locale_cookie.md +142 -0
- package/frequent_questions/uk/intlayer_command_undefined.md +155 -0
- package/frequent_questions/uk/locale_incorect_in_url.md +73 -0
- package/frequent_questions/uk/package_version_error.md +181 -0
- package/frequent_questions/uk/static_rendering.md +44 -0
- package/frequent_questions/uk/translated_path_url.md +55 -0
- package/frequent_questions/uk/unknown_command.md +97 -0
- package/frequent_questions/vi/SSR_Next_no_[locale].md +1 -1
- package/frequent_questions/vi/error-vite-env-only.md +77 -0
- package/frequent_questions/zh/SSR_Next_no_[locale].md +1 -1
- package/frequent_questions/zh/error-vite-env-only.md +77 -0
- package/legal/uk/privacy_notice.md +83 -0
- package/legal/uk/terms_of_service.md +55 -0
- package/package.json +6 -6
- package/src/generated/blog.entry.ts +29 -0
- package/src/generated/docs.entry.ts +119 -0
- package/src/generated/frequentQuestions.entry.ts +35 -0
- package/src/generated/legal.entry.ts +2 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-01-16
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: Що таке інтернаціоналізація (i18n)? Визначення та виклики
|
|
5
|
+
description: Дізнайтеся, чому інтернаціоналізація вашого сайту є важливою. Ознайомтесь з ключовими принципами для підвищення SEO, покращення досвіду користувачів та розширення глобального охоплення.
|
|
6
|
+
keywords:
|
|
7
|
+
- i18n
|
|
8
|
+
- багатомовний
|
|
9
|
+
- SEO
|
|
10
|
+
- Інтернаціоналізація
|
|
11
|
+
- Blog
|
|
12
|
+
- Next.js
|
|
13
|
+
- JavaScript
|
|
14
|
+
- React
|
|
15
|
+
slugs:
|
|
16
|
+
- blog
|
|
17
|
+
- what-is-internationalization
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Що таке інтернаціоналізація (i18n)? Визначення та виклики
|
|
21
|
+
|
|
22
|
+

|
|
23
|
+
|
|
24
|
+
## Розуміння інтернаціоналізації (i18n)
|
|
25
|
+
|
|
26
|
+
**Інтернаціоналізація**, часто скорочено як **i18n**, — це процес проєктування та підготовки застосунку для підтримки кількох мов, культур і регіональних конвенцій **без** значних змін у кодовій базі. Назва i18n походить від того, що між буквами **i** та **n** у слові "internationalization" є 18 літер.
|
|
27
|
+
|
|
28
|
+
## Чому i18n важливий
|
|
29
|
+
|
|
30
|
+
### SEO
|
|
31
|
+
|
|
32
|
+
Інтернаціоналізація відіграє критичну роль у покращенні SEO вебсайту. Пошукові системи, такі як Google і Bing, аналізують мову та культурну релевантність вашого контенту для визначення його позицій у видачі. Налаштувавши сайт для підтримки кількох мов і регіональних форматів, ви можете значно підвищити його помітність у результатах пошуку. Це не лише залучає ширшу аудиторію, а й допомагає сайту займати вищі позиції, оскільки пошукові системи відзначають зусилля, спрямовані на обслуговування різноманітної бази користувачів.
|
|
33
|
+
|
|
34
|
+
### Глобальне охоплення
|
|
35
|
+
|
|
36
|
+
Не менш важливим є глобальне охоплення, яке забезпечує інтернаціоналізація. Коли ви усуваєте мовні бар'єри та проєктуєте ваш застосунок з підтримкою різних культурних норм, ви відкриваєте двері для мільйонів потенційних користувачів зі всього світу. Надання локалізованого контенту та користувацьких інтерфейсів вирізняє ваш продукт серед конкурентів, які можуть пропонувати підтримку лише обмеженої кількості мов. Такий інклюзивний підхід гарантує, що користувачі відчувають себе визнаними та цінними, незалежно від місця їхнього перебування, що в кінцевому підсумку розширює ринок вашого продукту та підвищує його конкурентоспроможність на глобальному рівні.
|
|
37
|
+
|
|
38
|
+
### Користувацький досвід
|
|
39
|
+
|
|
40
|
+
Ще однією важливою перевагою i18n є покращення досвіду користувача. Користувачі зазвичай почуваються більш комфортно та емоційно пов’язаними з програмним забезпеченням, яке спілкується їхньою рідною мовою та поважає локальні конвенції, такі як формати дат, валюти та одиниці вимірювання. Цей персоналізований досвід є ключем до створення довіри й задоволення, сприяючи довгостроковому утриманню користувачів. Коли користувачі можуть безперешкодно орієнтуватися та розуміти додаток, вони з більшою вірогідністю будуть активно ним користуватися, що відкриває шлях до позитивних відгуків, рекомендацій і сталого зростання.
|
|
41
|
+
|
|
42
|
+
## Інтернаціоналізація (i18n) vs. Локалізація (l10n)
|
|
43
|
+
|
|
44
|
+
**Інтернаціоналізація (i18n)** — це процес проєктування вашого продукту так, щоб він міг легко підтримувати кілька мов і регіональних відмінностей. Наприклад, якщо ви створюєте вебсайт з урахуванням інтернаціоналізації, ви забезпечуєте підтримку різних наборів символів у текстових полях, відображення дат відповідно до локальних форматів і адаптацію макетів для розширення тексту при перекладі на інші мови.
|
|
45
|
+
|
|
46
|
+
**Локалізація (l10n)** — це робота, яка виконується після інтернаціоналізації. Вона полягає у перекладі вмісту та налаштуванні культурних деталей для задоволення потреб конкретної аудиторії. Наприклад, коли вебсайт вже інтернаціоналізовано, ви можете локалізувати його для французьких користувачів, переклавши весь текст, змінивши формат дати на день/місяць/рік і навіть підкоригувавши зображення або іконки, щоб вони краще відповідали французьким культурним нормам.
|
|
47
|
+
|
|
48
|
+
Підсумовуючи, інтернаціоналізація готує ваш продукт до глобального використання, тоді як локалізація адаптує його для конкретного ринку.
|
|
49
|
+
|
|
50
|
+
## Що слід інтернаціоналізувати на вебсайті?
|
|
51
|
+
|
|
52
|
+
1. **Текстовий вміст:** Усі письмові елементи, такі як заголовки, основний текст і кнопки, потребують перекладу. Наприклад, заголовок на кшталт "Welcome to our website" має стати "Bienvenido a nuestro sitio web" для іспаномовної аудиторії.
|
|
53
|
+
|
|
54
|
+
2. **Повідомлення про помилки:** Чіткі та лаконічні повідомлення про помилки є критично важливими. Якщо помилка у формі повідомляє "Invalid email address", її слід відобразити французькою як "Adresse e-mail non valide", щоб допомогти користувачам зрозуміти проблему.
|
|
55
|
+
|
|
56
|
+
3. **Електронні листи та сповіщення:** Автоматизовані повідомлення, включно зі скиданням пароля або підтвердженням замовлення, мають бути локалізовані. Лист-підтвердження замовлення може звертатися до користувача як "Dear Customer" англійською і "Cher(e) client(e)" французькою для відповідної аудиторії.
|
|
57
|
+
|
|
58
|
+
4. **Мітки доступності:** Мітки та атрибути alt для зображень потрібно перекладати, щоб допоміжні технології працювали правильно. Зображення з alt-текстом «Smiling child playing» має бути адаптовано як «Enfant souriant qui joue» французькою.
|
|
59
|
+
|
|
60
|
+
5. **Формат чисел:** Різні регіони форматують числа по-різному. Хоча «1,000.50» підходить для англомовних локалей, багато європейських форматів вимагають «1.000,50», тому локалізація важлива.
|
|
61
|
+
|
|
62
|
+
6. **Валюта:** Відображайте ціни з використанням правильних символів і форматів для відповідної локалі. Наприклад, товар, ціна якого вказана як «$99.99» у Сполучених Штатах, має бути конвертований у «€97.10» при націлюванні на європейських клієнтів.
|
|
63
|
+
|
|
64
|
+
7. **Одиниці виміру:** Одиниці, такі як температура, відстань і об'єм, мають відображатися відповідно до локальних уподобань. Наприклад, погодний додаток може показувати **“68°F”** для американських користувачів, але **“20°C”** для інших.
|
|
65
|
+
|
|
66
|
+
8. **Напрямок тексту:** Порядок читання та макет мають бути налаштовані для мов із різним напрямком письма. Вебсайт англійською (зліва направо) повинен змінити своє вирівнювання при локалізації для арабської, яку читають справа наліво.
|
|
67
|
+
|
|
68
|
+
9. **Дата та час:** Формати відрізняються в різних регіонах. Подію, що відображається як **“12/25/2025 о 3:00 PM”** в США, може знадобитися показати як **“25/12/2025 о 15:00”** в інших місцях, щоб уникнути непорозумінь.
|
|
69
|
+
|
|
70
|
+
10. **Часовий пояс**: Налаштування під місцеві часові пояси забезпечує, що часочутливий контент, такий як **розклад подій, терміни доставки або години роботи служби підтримки**, відображається точно. Наприклад, онлайн-вебінар, запланований на **"3:00 PM EST"**, має бути конвертований у відповідний місцевий час, наприклад **"8:00 PM GMT"** для користувачів у Великій Британії.
|
|
71
|
+
|
|
72
|
+
Цей стислий огляд охоплює основні елементи, які слід інтернаціоналізувати, забезпечуючи, що контент є доступним, культурно доречним і легко зрозумілим для глобальної аудиторії.
|
|
73
|
+
|
|
74
|
+
## Поширені проблеми i18n
|
|
75
|
+
|
|
76
|
+

|
|
77
|
+
|
|
78
|
+
- **підтримуваність**
|
|
79
|
+
|
|
80
|
+
Кожне оновлення вебсайту має бути відображене у всіх мовних версіях, що вимагає ефективних робочих процесів і ретельної координації для забезпечення узгодженості між усіма версіями.
|
|
81
|
+
|
|
82
|
+
- **Конкатенація рядків**
|
|
83
|
+
Уникайте побудови повідомлень типу ` "Hello, " + username + "!"` оскільки порядок слів може відрізнятися в різних мовах; натомість використовуйте заповнювачі, наприклад `Hello, {username}!`, щоб врахувати мовні варіації.
|
|
84
|
+
|
|
85
|
+
- **Плюралізація**
|
|
86
|
+
У різних мов є різні правила множини, іноді з кількома формами. Використання бібліотек на кшталт ICU MessageFormat може спростити обробку цих складнощів.
|
|
87
|
+
|
|
88
|
+
- **UI та довжина тексту**
|
|
89
|
+
Деякі мови, наприклад німецька, зазвичай мають довші тексти, ніж англійська. Це може порушити макети, якщо дизайн не є гнучким, тому адаптивний (responsive) дизайн є ключовим.
|
|
90
|
+
|
|
91
|
+
- **Кодування символів**
|
|
92
|
+
Використання коректного кодування символів (наприклад UTF-8) має вирішальне значення для правильного відображення різноманітних алфавітів і символів, запобігаючи неправильному інтерпретуванню або пошкодженому тексту.
|
|
93
|
+
|
|
94
|
+
- **Жорстко задані макети**
|
|
95
|
+
UI-компоненти фіксованого розміру можуть неправильно підлаштовуватися під довші переклади, що призводить до перетікання тексту. Гнучкий, адаптивний макет допомагає зменшити цю проблему.
|
|
96
|
+
|
|
97
|
+
- **Динамічна зміна мови**
|
|
98
|
+
Користувачі очікують можливості змінювати мову без перезапуску застосунку або повторної автентифікації. Ця функція потребує безшовної, ретельно спланованої реалізації в архітектурі.
|
|
99
|
+
|
|
100
|
+
- **Підтримка напрямку письма**
|
|
101
|
+
Ігнорування підтримки мов із письмом справа-наліво (RTL) може створити значні проблеми з редизайном пізніше. Краще планувати сумісність з RTL з самого початку.
|
|
102
|
+
|
|
103
|
+
- **Культурні чутливості**
|
|
104
|
+
Іконки, кольори та символи можуть мати різне значення в різних культурах. Важливо адаптувати візуальний і текстовий контент з урахуванням локальних культурних нюансів.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Найкращі практики для впровадження i18n
|
|
109
|
+
|
|
110
|
+
- **Плануйте заздалегідь**
|
|
111
|
+
Інтегруйте internationalization з самого початку вашого проєкту. Вирішення питань i18n на ранніх стадіях дешевше й простіше, ніж додавання їх пізніше, що забезпечує більш плавний процес розробки з самого початку.
|
|
112
|
+
|
|
113
|
+
- **Автоматизуйте управління перекладами**
|
|
114
|
+
Використовуйте сервіси перекладу на основі AI, такі як ті, що надає Intlayer, для ефективного управління перекладами. Завдяки автоматизації, коли ви публікуєте нову статтю, всі переклади створюються автоматично, що економить час і зменшує кількість ручних помилок.
|
|
115
|
+
|
|
116
|
+
- **Використання візуального редактора**
|
|
117
|
+
Реалізуйте візуальний редактор, щоб допомогти перекладачам бачити контент у його фактичному UI-контексті. Інструменти, такі як візуальний редактор Intlayer, мінімізують помилки та непорозуміння, забезпечуючи точність перекладів і їх відповідність остаточному дизайну.
|
|
118
|
+
|
|
119
|
+
- **Повторне використання перекладів**
|
|
120
|
+
Організуйте файли перекладів так, щоб їх можна було повторно використовувати в різних вебсайтах або застосунках. Наприклад, якщо у вас є багатомовний футер або хедер, створіть окремі файли перекладу, щоб спільні елементи можна було легко застосовувати в усіх проєктах.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Словник локалі проти екстерналізації контенту в CMS
|
|
125
|
+
|
|
126
|
+
Під час створення вебсайту **система керування контентом (CMS), така як WordPress, Wix або Drupal, зазвичай забезпечує кращу підтримуваність**. Це особливо актуально для блогів або лендінгів, завдяки їхній інтегрованій підтримці i18n.
|
|
127
|
+
|
|
128
|
+
Однак для застосунків зі складною функціональністю або бізнес‑логікою **CMS може виявитися надто негнучкою, і вам доведеться розглянути можливість використання i18n‑бібліотеки**.
|
|
129
|
+
|
|
130
|
+
**Проблема багатьох i18n‑бібліотек у тому, що вони часто вимагають, щоб переклади були жорстко вбудовані в codebase**. Це означає, що якщо контент‑менеджеру потрібно оновити переклад, йому доводиться змінювати код і перезбирати застосунок. Щоб пом’якшити цю проблему, з’явилися інструменти типу «Git‑based CMS» або «i18n CMS», які допомагають контент‑менеджерам. Однак навіть **ці рішення зазвичай вимагають оновлення codebase і перезбирання при внесенні змін у контент**.
|
|
131
|
+
|
|
132
|
+
Ураховуючи ці виклики, часто обирають headless CMS, щоб винести контент і спростити керування перекладами. Однак при використанні CMS для i18n є помітні недоліки:
|
|
133
|
+
|
|
134
|
+
- **Не всі CMS пропонують функції i18n:** Деякі популярні платформи CMS позбавлені повноцінних можливостей інтернаціоналізації, через що доводиться шукати додаткові плагіни або обхідні шляхи.
|
|
135
|
+
- **Подвійна конфігурація:** Керування перекладами часто вимагає налаштування як CMS, так і коду додатка, що призводить до дублювання зусиль і потенційних невідповідностей.
|
|
136
|
+
- **Складно підтримувати:** Коли переклади розкидані між CMS і кодом, з часом підтримувати послідовну та вільну від помилок систему стає складно.
|
|
137
|
+
- **Вартість ліцензій:** Преміум CMS-платформи або додаткові інструменти для i18n можуть створювати додаткові витрати на ліцензії, які можуть бути не по кишені для кожного проєкту.
|
|
138
|
+
|
|
139
|
+
Важливо вибрати правильний інструмент відповідно до ваших потреб і планувати стратегію інтернаціоналізації з самого початку. **Intlayer пропонує переконливе рішення, поєднуючи декларацію локалізованого контенту з тісно інтегрованим headless CMS, що забезпечує найкраще з обох підходів.**
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
### Перелік i18n бібліотек та інструментів за технологією
|
|
144
|
+
|
|
145
|
+
Якщо ви шукаєте перелік i18n бібліотек та інструментів для конкретних технологій, перегляньте наведені ресурси:
|
|
146
|
+
|
|
147
|
+
### Для систем управління контентом (CMS)
|
|
148
|
+
|
|
149
|
+
- WordPress: [Див. список i18n бібліотек та інструментів](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/list_i18n_technologies/CMS/wordpress.md)
|
|
150
|
+
- Wix: [Див. список i18n бібліотек та інструментів](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/list_i18n_technologies/CMS/wix.md)
|
|
151
|
+
- Drupal: [Див. список i18n бібліотек та інструментів](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/list_i18n_technologies/CMS/drupal.md)
|
|
152
|
+
|
|
153
|
+
### Для JavaScript-додатків (Frontend)
|
|
154
|
+
|
|
155
|
+
- React: [Див. список i18n бібліотек та інструментів](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/list_i18n_technologies/frameworks/react.md)
|
|
156
|
+
- Angular: [Див. список i18n бібліотек та інструментів](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/list_i18n_technologies/frameworks/angular.md)
|
|
157
|
+
- Vue: [Див. перелік бібліотек та інструментів i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/list_i18n_technologies/frameworks/vue.md)
|
|
158
|
+
- Svelte: [Див. перелік бібліотек та інструментів i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/list_i18n_technologies/frameworks/svelte.md)
|
|
159
|
+
- React Native : [Див. перелік бібліотек та інструментів i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/list_i18n_technologies/frameworks/react-native.md)
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Висновок
|
|
164
|
+
|
|
165
|
+
Інтернаціоналізація (i18n) — це більше, ніж просто технічне завдання; це **стратегічна інвестиція**, яка дозволяє вашому програмному забезпеченню буквально говорити мовою ваших користувачів. Абстрагуючи локально-залежні елементи, враховуючи мовні та культурні відмінності та плануючи майбутнє розширення, ви надаєте своєму продукту змогу процвітати на глобальному ринку.
|
|
166
|
+
|
|
167
|
+
Чи ви створюєте мобільний застосунок, SaaS-платформу або корпоративний інструмент, **i18n гарантує, що ваш продукт зможе адаптуватиись і приваблювати користувачів із усього світу**, без потреби постійно переписувати код. Використовуючи best practices, надійні frameworks і continuous localization strategies, розробники та продуктові команди можуть доставляти **істинно глобальний** користувацький досвід програмного забезпечення.
|
|
@@ -104,7 +104,6 @@ const config: IntlayerConfig = {
|
|
|
104
104
|
},
|
|
105
105
|
plugins: [
|
|
106
106
|
syncJSON({
|
|
107
|
-
format: "i18next",
|
|
108
107
|
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
109
108
|
}),
|
|
110
109
|
],
|
|
@@ -154,7 +153,6 @@ const config: IntlayerConfig = {
|
|
|
154
153
|
* Sẽ tải, và ghi đầu ra cùng các bản dịch trở lại các tệp JSON trong thư mục locales
|
|
155
154
|
*/
|
|
156
155
|
syncJSON({
|
|
157
|
-
format: "i18next",
|
|
158
156
|
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
159
157
|
priority: 0,
|
|
160
158
|
}),
|
|
@@ -112,7 +112,6 @@ const config: IntlayerConfig = {
|
|
|
112
112
|
},
|
|
113
113
|
plugins: [
|
|
114
114
|
syncJSON({
|
|
115
|
-
format: "i18next",
|
|
116
115
|
source: ({ key, locale }) => `./public/locales/${locale}/${key}.json`,
|
|
117
116
|
}),
|
|
118
117
|
],
|
|
@@ -164,7 +163,6 @@ const config: IntlayerConfig = {
|
|
|
164
163
|
* Sẽ tải và ghi lại đầu ra cùng các bản dịch trở lại các file JSON trong thư mục locales
|
|
165
164
|
*/
|
|
166
165
|
syncJSON({
|
|
167
|
-
format: "i18next",
|
|
168
166
|
source: ({ key, locale }) => `./public/locales/${locale}/${key}.json`,
|
|
169
167
|
priority: 0,
|
|
170
168
|
}),
|
|
@@ -102,7 +102,6 @@ const config: IntlayerConfig = {
|
|
|
102
102
|
},
|
|
103
103
|
plugins: [
|
|
104
104
|
syncJSON({
|
|
105
|
-
format: "i18next",
|
|
106
105
|
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
107
106
|
}),
|
|
108
107
|
],
|
|
@@ -152,7 +151,6 @@ const config: IntlayerConfig = {
|
|
|
152
151
|
* Sẽ tải và ghi đầu ra cùng các bản dịch trở lại các tệp JSON trong thư mục locales
|
|
153
152
|
*/
|
|
154
153
|
syncJSON({
|
|
155
|
-
format: "i18next",
|
|
156
154
|
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
157
155
|
priority: 0,
|
|
158
156
|
}),
|
|
@@ -104,7 +104,6 @@ const config: IntlayerConfig = {
|
|
|
104
104
|
},
|
|
105
105
|
plugins: [
|
|
106
106
|
syncJSON({
|
|
107
|
-
format: "i18next",
|
|
108
107
|
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
109
108
|
}),
|
|
110
109
|
],
|
|
@@ -154,7 +153,6 @@ const config: IntlayerConfig = {
|
|
|
154
153
|
* 将加载并将输出和翻译写回到 locales 目录中的 JSON 文件
|
|
155
154
|
*/
|
|
156
155
|
syncJSON({
|
|
157
|
-
format: "i18next",
|
|
158
156
|
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
159
157
|
priority: 0,
|
|
160
158
|
}),
|
|
@@ -112,7 +112,6 @@ const config: IntlayerConfig = {
|
|
|
112
112
|
},
|
|
113
113
|
plugins: [
|
|
114
114
|
syncJSON({
|
|
115
|
-
format: "i18next",
|
|
116
115
|
source: ({ key, locale }) => `./public/locales/${locale}/${key}.json`,
|
|
117
116
|
}),
|
|
118
117
|
],
|
|
@@ -164,7 +163,6 @@ const config: IntlayerConfig = {
|
|
|
164
163
|
* 将输出和翻译写回到 locales 目录中的 JSON 文件
|
|
165
164
|
*/
|
|
166
165
|
syncJSON({
|
|
167
|
-
format: "i18next",
|
|
168
166
|
source: ({ key, locale }) => `./public/locales/${locale}/${key}.json`,
|
|
169
167
|
priority: 0,
|
|
170
168
|
}),
|
|
@@ -102,7 +102,6 @@ const config: IntlayerConfig = {
|
|
|
102
102
|
},
|
|
103
103
|
plugins: [
|
|
104
104
|
syncJSON({
|
|
105
|
-
format: "i18next",
|
|
106
105
|
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
107
106
|
}),
|
|
108
107
|
],
|
|
@@ -152,7 +151,6 @@ const config: IntlayerConfig = {
|
|
|
152
151
|
* 将加载并将输出和翻译写回到 locales 目录中的 JSON 文件
|
|
153
152
|
*/
|
|
154
153
|
syncJSON({
|
|
155
|
-
format: "i18next",
|
|
156
154
|
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
157
155
|
priority: 0,
|
|
158
156
|
}),
|
|
@@ -122,52 +122,6 @@ export default config;
|
|
|
122
122
|
|
|
123
123
|
要查看更多关于 `syncJSON` 插件的详细信息,请参阅 [syncJSON 插件文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/plugins/sync-json.md)。
|
|
124
124
|
|
|
125
|
-
---
|
|
126
|
-
|
|
127
|
-
### (可选)步骤3:实现按组件的 JSON 翻译
|
|
128
|
-
|
|
129
|
-
默认情况下,Intlayer 会加载、合并并同步 JSON 和内容声明文件。更多详情请参阅 [内容声明文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/content_file.md)。但如果你愿意,也可以使用 Intlayer 插件,在代码库中的任意位置实现按组件管理本地化的 JSON。
|
|
130
|
-
|
|
131
|
-
为此,你可以使用 `loadJSON` 插件。
|
|
132
|
-
|
|
133
|
-
```ts fileName="intlayer.config.ts"
|
|
134
|
-
import { Locales, type IntlayerConfig } from "intlayer";
|
|
135
|
-
import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
|
|
136
|
-
|
|
137
|
-
const config: IntlayerConfig = {
|
|
138
|
-
internationalization: {
|
|
139
|
-
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
140
|
-
defaultLocale: Locales.ENGLISH,
|
|
141
|
-
},
|
|
142
|
-
|
|
143
|
-
// 保持您当前的 JSON 文件与 Intlayer 词典同步
|
|
144
|
-
plugins: [
|
|
145
|
-
/**
|
|
146
|
-
* 将加载 src 目录中所有匹配模式 {key}.i18n.json 的 JSON 文件
|
|
147
|
-
*/
|
|
148
|
-
loadJSON({
|
|
149
|
-
source: ({ key }) => `./src/**/${key}.i18n.json`,
|
|
150
|
-
locale: Locales.ENGLISH,
|
|
151
|
-
priority: 1, // 确保这些 JSON 文件优先于 `./locales/en/${key}.json` 中的文件
|
|
152
|
-
}),
|
|
153
|
-
/**
|
|
154
|
-
* 将加载并将输出和翻译写回到 locales 目录中的 JSON 文件
|
|
155
|
-
*/
|
|
156
|
-
syncJSON({
|
|
157
|
-
format: "vue-i18n",
|
|
158
|
-
source: ({ key, locale }) => `./src/locales/${locale}/${key}.json`,
|
|
159
|
-
priority: 0,
|
|
160
|
-
}),
|
|
161
|
-
],
|
|
162
|
-
};
|
|
163
|
-
|
|
164
|
-
export default config;
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
这将加载 `src` 目录中所有匹配 `{key}.i18n.json` 模式的 JSON 文件,并将它们作为 Intlayer 字典加载。
|
|
168
|
-
|
|
169
|
-
---
|
|
170
|
-
|
|
171
125
|
## Git 配置
|
|
172
126
|
|
|
173
127
|
将生成的文件排除在版本控制之外:
|
|
@@ -41,7 +41,8 @@ const blogEntry = {
|
|
|
41
41
|
tr: readLocale("compiler_vs_declarative_i18n.md", "tr"),
|
|
42
42
|
pl: readLocale("compiler_vs_declarative_i18n.md", "pl"),
|
|
43
43
|
id: readLocale("compiler_vs_declarative_i18n.md", "id"),
|
|
44
|
-
vi: readLocale("compiler_vs_declarative_i18n.md", "vi")
|
|
44
|
+
vi: readLocale("compiler_vs_declarative_i18n.md", "vi"),
|
|
45
|
+
uk: readLocale("compiler_vs_declarative_i18n.md", "uk")
|
|
45
46
|
},
|
|
46
47
|
"./blog/en/i18n_using_next-i18next.md": {
|
|
47
48
|
en: readLocale("i18n_using_next-i18next.md", "en"),
|
|
@@ -60,7 +61,8 @@ const blogEntry = {
|
|
|
60
61
|
tr: readLocale("i18n_using_next-i18next.md", "tr"),
|
|
61
62
|
pl: readLocale("i18n_using_next-i18next.md", "pl"),
|
|
62
63
|
id: readLocale("i18n_using_next-i18next.md", "id"),
|
|
63
|
-
vi: readLocale("i18n_using_next-i18next.md", "vi")
|
|
64
|
+
vi: readLocale("i18n_using_next-i18next.md", "vi"),
|
|
65
|
+
uk: readLocale("i18n_using_next-i18next.md", "uk")
|
|
64
66
|
},
|
|
65
67
|
"./blog/en/i18n_using_next-intl.md": {
|
|
66
68
|
en: readLocale("i18n_using_next-intl.md", "en"),
|
|
@@ -79,7 +81,8 @@ const blogEntry = {
|
|
|
79
81
|
tr: readLocale("i18n_using_next-intl.md", "tr"),
|
|
80
82
|
pl: readLocale("i18n_using_next-intl.md", "pl"),
|
|
81
83
|
id: readLocale("i18n_using_next-intl.md", "id"),
|
|
82
|
-
vi: readLocale("i18n_using_next-intl.md", "vi")
|
|
84
|
+
vi: readLocale("i18n_using_next-intl.md", "vi"),
|
|
85
|
+
uk: readLocale("i18n_using_next-intl.md", "uk")
|
|
83
86
|
},
|
|
84
87
|
"./blog/en/index.md": {
|
|
85
88
|
en: readLocale("index.md", "en"),
|
|
@@ -98,7 +101,8 @@ const blogEntry = {
|
|
|
98
101
|
tr: readLocale("index.md", "tr"),
|
|
99
102
|
pl: readLocale("index.md", "pl"),
|
|
100
103
|
id: readLocale("index.md", "id"),
|
|
101
|
-
vi: readLocale("index.md", "vi")
|
|
104
|
+
vi: readLocale("index.md", "vi"),
|
|
105
|
+
uk: readLocale("index.md", "uk")
|
|
102
106
|
},
|
|
103
107
|
"./blog/en/internationalization_and_SEO.md": {
|
|
104
108
|
en: readLocale("internationalization_and_SEO.md", "en"),
|
|
@@ -117,7 +121,8 @@ const blogEntry = {
|
|
|
117
121
|
tr: readLocale("internationalization_and_SEO.md", "tr"),
|
|
118
122
|
pl: readLocale("internationalization_and_SEO.md", "pl"),
|
|
119
123
|
id: readLocale("internationalization_and_SEO.md", "id"),
|
|
120
|
-
vi: readLocale("internationalization_and_SEO.md", "vi")
|
|
124
|
+
vi: readLocale("internationalization_and_SEO.md", "vi"),
|
|
125
|
+
uk: readLocale("internationalization_and_SEO.md", "uk")
|
|
121
126
|
},
|
|
122
127
|
"./blog/en/intlayer_with_i18next.md": {
|
|
123
128
|
en: readLocale("intlayer_with_i18next.md", "en"),
|
|
@@ -136,7 +141,8 @@ const blogEntry = {
|
|
|
136
141
|
tr: readLocale("intlayer_with_i18next.md", "tr"),
|
|
137
142
|
pl: readLocale("intlayer_with_i18next.md", "pl"),
|
|
138
143
|
id: readLocale("intlayer_with_i18next.md", "id"),
|
|
139
|
-
vi: readLocale("intlayer_with_i18next.md", "vi")
|
|
144
|
+
vi: readLocale("intlayer_with_i18next.md", "vi"),
|
|
145
|
+
uk: readLocale("intlayer_with_i18next.md", "uk")
|
|
140
146
|
},
|
|
141
147
|
"./blog/en/intlayer_with_next-i18next.md": {
|
|
142
148
|
en: readLocale("intlayer_with_next-i18next.md", "en"),
|
|
@@ -155,7 +161,8 @@ const blogEntry = {
|
|
|
155
161
|
tr: readLocale("intlayer_with_next-i18next.md", "tr"),
|
|
156
162
|
pl: readLocale("intlayer_with_next-i18next.md", "pl"),
|
|
157
163
|
id: readLocale("intlayer_with_next-i18next.md", "id"),
|
|
158
|
-
vi: readLocale("intlayer_with_next-i18next.md", "vi")
|
|
164
|
+
vi: readLocale("intlayer_with_next-i18next.md", "vi"),
|
|
165
|
+
uk: readLocale("intlayer_with_next-i18next.md", "uk")
|
|
159
166
|
},
|
|
160
167
|
"./blog/en/intlayer_with_next-intl.md": {
|
|
161
168
|
en: readLocale("intlayer_with_next-intl.md", "en"),
|
|
@@ -174,7 +181,8 @@ const blogEntry = {
|
|
|
174
181
|
tr: readLocale("intlayer_with_next-intl.md", "tr"),
|
|
175
182
|
pl: readLocale("intlayer_with_next-intl.md", "pl"),
|
|
176
183
|
id: readLocale("intlayer_with_next-intl.md", "id"),
|
|
177
|
-
vi: readLocale("intlayer_with_next-intl.md", "vi")
|
|
184
|
+
vi: readLocale("intlayer_with_next-intl.md", "vi"),
|
|
185
|
+
uk: readLocale("intlayer_with_next-intl.md", "uk")
|
|
178
186
|
},
|
|
179
187
|
"./blog/en/intlayer_with_react-i18next.md": {
|
|
180
188
|
en: readLocale("intlayer_with_react-i18next.md", "en"),
|
|
@@ -193,7 +201,8 @@ const blogEntry = {
|
|
|
193
201
|
tr: readLocale("intlayer_with_react-i18next.md", "tr"),
|
|
194
202
|
pl: readLocale("intlayer_with_react-i18next.md", "pl"),
|
|
195
203
|
id: readLocale("intlayer_with_react-i18next.md", "id"),
|
|
196
|
-
vi: readLocale("intlayer_with_react-i18next.md", "vi")
|
|
204
|
+
vi: readLocale("intlayer_with_react-i18next.md", "vi"),
|
|
205
|
+
uk: readLocale("intlayer_with_react-i18next.md", "uk")
|
|
197
206
|
},
|
|
198
207
|
"./blog/en/intlayer_with_react-intl.md": {
|
|
199
208
|
en: readLocale("intlayer_with_react-intl.md", "en"),
|
|
@@ -212,7 +221,8 @@ const blogEntry = {
|
|
|
212
221
|
tr: readLocale("intlayer_with_react-intl.md", "tr"),
|
|
213
222
|
pl: readLocale("intlayer_with_react-intl.md", "pl"),
|
|
214
223
|
id: readLocale("intlayer_with_react-intl.md", "id"),
|
|
215
|
-
vi: readLocale("intlayer_with_react-intl.md", "vi")
|
|
224
|
+
vi: readLocale("intlayer_with_react-intl.md", "vi"),
|
|
225
|
+
uk: readLocale("intlayer_with_react-intl.md", "uk")
|
|
216
226
|
},
|
|
217
227
|
"./blog/en/intlayer_with_vue-i18n.md": {
|
|
218
228
|
en: readLocale("intlayer_with_vue-i18n.md", "en"),
|
|
@@ -231,7 +241,8 @@ const blogEntry = {
|
|
|
231
241
|
tr: readLocale("intlayer_with_vue-i18n.md", "tr"),
|
|
232
242
|
pl: readLocale("intlayer_with_vue-i18n.md", "pl"),
|
|
233
243
|
id: readLocale("intlayer_with_vue-i18n.md", "id"),
|
|
234
|
-
vi: readLocale("intlayer_with_vue-i18n.md", "vi")
|
|
244
|
+
vi: readLocale("intlayer_with_vue-i18n.md", "vi"),
|
|
245
|
+
uk: readLocale("intlayer_with_vue-i18n.md", "uk")
|
|
235
246
|
},
|
|
236
247
|
"./blog/en/l10n_platform_alternative/Lokalise.md": {
|
|
237
248
|
en: readLocale("l10n_platform_alternative/Lokalise.md", "en"),
|
|
@@ -250,7 +261,8 @@ const blogEntry = {
|
|
|
250
261
|
tr: readLocale("l10n_platform_alternative/Lokalise.md", "tr"),
|
|
251
262
|
pl: readLocale("l10n_platform_alternative/Lokalise.md", "pl"),
|
|
252
263
|
id: readLocale("l10n_platform_alternative/Lokalise.md", "id"),
|
|
253
|
-
vi: readLocale("l10n_platform_alternative/Lokalise.md", "vi")
|
|
264
|
+
vi: readLocale("l10n_platform_alternative/Lokalise.md", "vi"),
|
|
265
|
+
uk: readLocale("l10n_platform_alternative/Lokalise.md", "uk")
|
|
254
266
|
},
|
|
255
267
|
"./blog/en/l10n_platform_alternative/crowdin.md": {
|
|
256
268
|
en: readLocale("l10n_platform_alternative/crowdin.md", "en"),
|
|
@@ -269,7 +281,8 @@ const blogEntry = {
|
|
|
269
281
|
tr: readLocale("l10n_platform_alternative/crowdin.md", "tr"),
|
|
270
282
|
pl: readLocale("l10n_platform_alternative/crowdin.md", "pl"),
|
|
271
283
|
id: readLocale("l10n_platform_alternative/crowdin.md", "id"),
|
|
272
|
-
vi: readLocale("l10n_platform_alternative/crowdin.md", "vi")
|
|
284
|
+
vi: readLocale("l10n_platform_alternative/crowdin.md", "vi"),
|
|
285
|
+
uk: readLocale("l10n_platform_alternative/crowdin.md", "uk")
|
|
273
286
|
},
|
|
274
287
|
"./blog/en/l10n_platform_alternative/phrase.md": {
|
|
275
288
|
en: readLocale("l10n_platform_alternative/phrase.md", "en"),
|
|
@@ -288,7 +301,8 @@ const blogEntry = {
|
|
|
288
301
|
tr: readLocale("l10n_platform_alternative/phrase.md", "tr"),
|
|
289
302
|
pl: readLocale("l10n_platform_alternative/phrase.md", "pl"),
|
|
290
303
|
id: readLocale("l10n_platform_alternative/phrase.md", "id"),
|
|
291
|
-
vi: readLocale("l10n_platform_alternative/phrase.md", "vi")
|
|
304
|
+
vi: readLocale("l10n_platform_alternative/phrase.md", "vi"),
|
|
305
|
+
uk: readLocale("l10n_platform_alternative/phrase.md", "uk")
|
|
292
306
|
},
|
|
293
307
|
"./blog/en/list_i18n_technologies/CMS/drupal.md": {
|
|
294
308
|
en: readLocale("list_i18n_technologies/CMS/drupal.md", "en"),
|
|
@@ -307,7 +321,8 @@ const blogEntry = {
|
|
|
307
321
|
tr: readLocale("list_i18n_technologies/CMS/drupal.md", "tr"),
|
|
308
322
|
pl: readLocale("list_i18n_technologies/CMS/drupal.md", "pl"),
|
|
309
323
|
id: readLocale("list_i18n_technologies/CMS/drupal.md", "id"),
|
|
310
|
-
vi: readLocale("list_i18n_technologies/CMS/drupal.md", "vi")
|
|
324
|
+
vi: readLocale("list_i18n_technologies/CMS/drupal.md", "vi"),
|
|
325
|
+
uk: readLocale("list_i18n_technologies/CMS/drupal.md", "uk")
|
|
311
326
|
},
|
|
312
327
|
"./blog/en/list_i18n_technologies/CMS/wix.md": {
|
|
313
328
|
en: readLocale("list_i18n_technologies/CMS/wix.md", "en"),
|
|
@@ -326,7 +341,8 @@ const blogEntry = {
|
|
|
326
341
|
tr: readLocale("list_i18n_technologies/CMS/wix.md", "tr"),
|
|
327
342
|
pl: readLocale("list_i18n_technologies/CMS/wix.md", "pl"),
|
|
328
343
|
id: readLocale("list_i18n_technologies/CMS/wix.md", "id"),
|
|
329
|
-
vi: readLocale("list_i18n_technologies/CMS/wix.md", "vi")
|
|
344
|
+
vi: readLocale("list_i18n_technologies/CMS/wix.md", "vi"),
|
|
345
|
+
uk: readLocale("list_i18n_technologies/CMS/wix.md", "uk")
|
|
330
346
|
},
|
|
331
347
|
"./blog/en/list_i18n_technologies/CMS/wordpress.md": {
|
|
332
348
|
en: readLocale("list_i18n_technologies/CMS/wordpress.md", "en"),
|
|
@@ -345,7 +361,8 @@ const blogEntry = {
|
|
|
345
361
|
tr: readLocale("list_i18n_technologies/CMS/wordpress.md", "tr"),
|
|
346
362
|
pl: readLocale("list_i18n_technologies/CMS/wordpress.md", "pl"),
|
|
347
363
|
id: readLocale("list_i18n_technologies/CMS/wordpress.md", "id"),
|
|
348
|
-
vi: readLocale("list_i18n_technologies/CMS/wordpress.md", "vi")
|
|
364
|
+
vi: readLocale("list_i18n_technologies/CMS/wordpress.md", "vi"),
|
|
365
|
+
uk: readLocale("list_i18n_technologies/CMS/wordpress.md", "uk")
|
|
349
366
|
},
|
|
350
367
|
"./blog/en/list_i18n_technologies/frameworks/angular.md": {
|
|
351
368
|
en: readLocale("list_i18n_technologies/frameworks/angular.md", "en"),
|
|
@@ -364,7 +381,8 @@ const blogEntry = {
|
|
|
364
381
|
tr: readLocale("list_i18n_technologies/frameworks/angular.md", "tr"),
|
|
365
382
|
pl: readLocale("list_i18n_technologies/frameworks/angular.md", "pl"),
|
|
366
383
|
id: readLocale("list_i18n_technologies/frameworks/angular.md", "id"),
|
|
367
|
-
vi: readLocale("list_i18n_technologies/frameworks/angular.md", "vi")
|
|
384
|
+
vi: readLocale("list_i18n_technologies/frameworks/angular.md", "vi"),
|
|
385
|
+
uk: readLocale("list_i18n_technologies/frameworks/angular.md", "uk")
|
|
368
386
|
},
|
|
369
387
|
"./blog/en/list_i18n_technologies/frameworks/flutter.md": {
|
|
370
388
|
en: readLocale("list_i18n_technologies/frameworks/flutter.md", "en"),
|
|
@@ -383,7 +401,8 @@ const blogEntry = {
|
|
|
383
401
|
tr: readLocale("list_i18n_technologies/frameworks/flutter.md", "tr"),
|
|
384
402
|
pl: readLocale("list_i18n_technologies/frameworks/flutter.md", "pl"),
|
|
385
403
|
id: readLocale("list_i18n_technologies/frameworks/flutter.md", "id"),
|
|
386
|
-
vi: readLocale("list_i18n_technologies/frameworks/flutter.md", "vi")
|
|
404
|
+
vi: readLocale("list_i18n_technologies/frameworks/flutter.md", "vi"),
|
|
405
|
+
uk: readLocale("list_i18n_technologies/frameworks/flutter.md", "uk")
|
|
387
406
|
},
|
|
388
407
|
"./blog/en/list_i18n_technologies/frameworks/react-native.md": {
|
|
389
408
|
en: readLocale("list_i18n_technologies/frameworks/react-native.md", "en"),
|
|
@@ -402,7 +421,8 @@ const blogEntry = {
|
|
|
402
421
|
tr: readLocale("list_i18n_technologies/frameworks/react-native.md", "tr"),
|
|
403
422
|
pl: readLocale("list_i18n_technologies/frameworks/react-native.md", "pl"),
|
|
404
423
|
id: readLocale("list_i18n_technologies/frameworks/react-native.md", "id"),
|
|
405
|
-
vi: readLocale("list_i18n_technologies/frameworks/react-native.md", "vi")
|
|
424
|
+
vi: readLocale("list_i18n_technologies/frameworks/react-native.md", "vi"),
|
|
425
|
+
uk: readLocale("list_i18n_technologies/frameworks/react-native.md", "uk")
|
|
406
426
|
},
|
|
407
427
|
"./blog/en/list_i18n_technologies/frameworks/react.md": {
|
|
408
428
|
en: readLocale("list_i18n_technologies/frameworks/react.md", "en"),
|
|
@@ -421,7 +441,8 @@ const blogEntry = {
|
|
|
421
441
|
tr: readLocale("list_i18n_technologies/frameworks/react.md", "tr"),
|
|
422
442
|
pl: readLocale("list_i18n_technologies/frameworks/react.md", "pl"),
|
|
423
443
|
id: readLocale("list_i18n_technologies/frameworks/react.md", "id"),
|
|
424
|
-
vi: readLocale("list_i18n_technologies/frameworks/react.md", "vi")
|
|
444
|
+
vi: readLocale("list_i18n_technologies/frameworks/react.md", "vi"),
|
|
445
|
+
uk: readLocale("list_i18n_technologies/frameworks/react.md", "uk")
|
|
425
446
|
},
|
|
426
447
|
"./blog/en/list_i18n_technologies/frameworks/svelte.md": {
|
|
427
448
|
en: readLocale("list_i18n_technologies/frameworks/svelte.md", "en"),
|
|
@@ -440,7 +461,8 @@ const blogEntry = {
|
|
|
440
461
|
tr: readLocale("list_i18n_technologies/frameworks/svelte.md", "tr"),
|
|
441
462
|
pl: readLocale("list_i18n_technologies/frameworks/svelte.md", "pl"),
|
|
442
463
|
id: readLocale("list_i18n_technologies/frameworks/svelte.md", "id"),
|
|
443
|
-
vi: readLocale("list_i18n_technologies/frameworks/svelte.md", "vi")
|
|
464
|
+
vi: readLocale("list_i18n_technologies/frameworks/svelte.md", "vi"),
|
|
465
|
+
uk: readLocale("list_i18n_technologies/frameworks/svelte.md", "uk")
|
|
444
466
|
},
|
|
445
467
|
"./blog/en/list_i18n_technologies/frameworks/vue.md": {
|
|
446
468
|
en: readLocale("list_i18n_technologies/frameworks/vue.md", "en"),
|
|
@@ -459,7 +481,8 @@ const blogEntry = {
|
|
|
459
481
|
tr: readLocale("list_i18n_technologies/frameworks/vue.md", "tr"),
|
|
460
482
|
pl: readLocale("list_i18n_technologies/frameworks/vue.md", "pl"),
|
|
461
483
|
id: readLocale("list_i18n_technologies/frameworks/vue.md", "id"),
|
|
462
|
-
vi: readLocale("list_i18n_technologies/frameworks/vue.md", "vi")
|
|
484
|
+
vi: readLocale("list_i18n_technologies/frameworks/vue.md", "vi"),
|
|
485
|
+
uk: readLocale("list_i18n_technologies/frameworks/vue.md", "uk")
|
|
463
486
|
},
|
|
464
487
|
"./blog/en/next-i18next_vs_next-intl_vs_intlayer.md": {
|
|
465
488
|
en: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "en"),
|
|
@@ -478,7 +501,8 @@ const blogEntry = {
|
|
|
478
501
|
tr: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "tr"),
|
|
479
502
|
pl: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "pl"),
|
|
480
503
|
id: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "id"),
|
|
481
|
-
vi: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "vi")
|
|
504
|
+
vi: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "vi"),
|
|
505
|
+
uk: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "uk")
|
|
482
506
|
},
|
|
483
507
|
"./blog/en/nextjs-multilingual-seo-comparison.md": {
|
|
484
508
|
en: readLocale("nextjs-multilingual-seo-comparison.md", "en"),
|
|
@@ -497,7 +521,8 @@ const blogEntry = {
|
|
|
497
521
|
tr: readLocale("nextjs-multilingual-seo-comparison.md", "tr"),
|
|
498
522
|
pl: readLocale("nextjs-multilingual-seo-comparison.md", "pl"),
|
|
499
523
|
id: readLocale("nextjs-multilingual-seo-comparison.md", "id"),
|
|
500
|
-
vi: readLocale("nextjs-multilingual-seo-comparison.md", "vi")
|
|
524
|
+
vi: readLocale("nextjs-multilingual-seo-comparison.md", "vi"),
|
|
525
|
+
uk: readLocale("nextjs-multilingual-seo-comparison.md", "uk")
|
|
501
526
|
},
|
|
502
527
|
"./blog/en/rag_powered_documentation_assistant.md": {
|
|
503
528
|
en: readLocale("rag_powered_documentation_assistant.md", "en"),
|
|
@@ -516,7 +541,8 @@ const blogEntry = {
|
|
|
516
541
|
tr: readLocale("rag_powered_documentation_assistant.md", "tr"),
|
|
517
542
|
pl: readLocale("rag_powered_documentation_assistant.md", "pl"),
|
|
518
543
|
id: readLocale("rag_powered_documentation_assistant.md", "id"),
|
|
519
|
-
vi: readLocale("rag_powered_documentation_assistant.md", "vi")
|
|
544
|
+
vi: readLocale("rag_powered_documentation_assistant.md", "vi"),
|
|
545
|
+
uk: readLocale("rag_powered_documentation_assistant.md", "uk")
|
|
520
546
|
},
|
|
521
547
|
"./blog/en/react-i18next_vs_react-intl_vs_intlayer.md": {
|
|
522
548
|
en: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "en"),
|
|
@@ -535,7 +561,8 @@ const blogEntry = {
|
|
|
535
561
|
tr: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "tr"),
|
|
536
562
|
pl: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "pl"),
|
|
537
563
|
id: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "id"),
|
|
538
|
-
vi: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "vi")
|
|
564
|
+
vi: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "vi"),
|
|
565
|
+
uk: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "uk")
|
|
539
566
|
},
|
|
540
567
|
"./blog/en/vue-i18n_vs_intlayer.md": {
|
|
541
568
|
en: readLocale("vue-i18n_vs_intlayer.md", "en"),
|
|
@@ -554,7 +581,8 @@ const blogEntry = {
|
|
|
554
581
|
tr: readLocale("vue-i18n_vs_intlayer.md", "tr"),
|
|
555
582
|
pl: readLocale("vue-i18n_vs_intlayer.md", "pl"),
|
|
556
583
|
id: readLocale("vue-i18n_vs_intlayer.md", "id"),
|
|
557
|
-
vi: readLocale("vue-i18n_vs_intlayer.md", "vi")
|
|
584
|
+
vi: readLocale("vue-i18n_vs_intlayer.md", "vi"),
|
|
585
|
+
uk: readLocale("vue-i18n_vs_intlayer.md", "uk")
|
|
558
586
|
},
|
|
559
587
|
"./blog/en/what_is_internationalization.md": {
|
|
560
588
|
en: readLocale("what_is_internationalization.md", "en"),
|
|
@@ -573,7 +601,8 @@ const blogEntry = {
|
|
|
573
601
|
tr: readLocale("what_is_internationalization.md", "tr"),
|
|
574
602
|
pl: readLocale("what_is_internationalization.md", "pl"),
|
|
575
603
|
id: readLocale("what_is_internationalization.md", "id"),
|
|
576
|
-
vi: readLocale("what_is_internationalization.md", "vi")
|
|
604
|
+
vi: readLocale("what_is_internationalization.md", "vi"),
|
|
605
|
+
uk: readLocale("what_is_internationalization.md", "uk")
|
|
577
606
|
}
|
|
578
607
|
};
|
|
579
608
|
|