@intlayer/docs 9.5.6 → 9.5.8
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/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/ar/i18next_vs_intlayer.md +130 -16
- package/blog/ar/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/ar/lingui_vs_intlayer.md +122 -15
- package/blog/ar/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/ar/next-intl_vs_intlayer.md +136 -20
- package/blog/ar/vue-i18n_vs_intlayer-vue-i18n.md +119 -17
- package/blog/ar/vue-i18n_vs_intlayer.md +193 -31
- package/blog/ar/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/de/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/de/i18next_vs_intlayer.md +128 -14
- package/blog/de/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/de/lingui_vs_intlayer.md +122 -15
- package/blog/de/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/de/next-intl_vs_intlayer.md +125 -15
- package/blog/de/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/de/vue-i18n_vs_intlayer.md +193 -31
- package/blog/en/i18next_vs_intlayer-i18next.md +121 -14
- package/blog/en/i18next_vs_intlayer.md +128 -14
- package/blog/en/is_intlayer_lighter_than_paraglide.md +288 -0
- package/blog/en/lingui_vs_intlayer.md +124 -15
- package/blog/en/next-intl_vs_intlayer-next-intl.md +123 -14
- package/blog/en/next-intl_vs_intlayer.md +125 -13
- package/blog/en/vue-i18n_vs_intlayer-vue-i18n.md +115 -15
- package/blog/en/vue-i18n_vs_intlayer.md +188 -27
- package/blog/en-GB/i18next_vs_intlayer-i18next.md +121 -14
- package/blog/en-GB/i18next_vs_intlayer.md +128 -14
- package/blog/en-GB/is_intlayer_lighter_than_paraglide.md +285 -0
- package/blog/en-GB/lingui_vs_intlayer.md +122 -15
- package/blog/en-GB/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/en-GB/next-intl_vs_intlayer.md +125 -15
- package/blog/en-GB/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/en-GB/vue-i18n_vs_intlayer.md +187 -25
- package/blog/en-GB/vue-i18n_vs_intlayer_benchmark.md +116 -0
- package/blog/es/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/es/i18next_vs_intlayer.md +128 -14
- package/blog/es/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/es/lingui_vs_intlayer.md +122 -15
- package/blog/es/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/es/next-intl_vs_intlayer.md +125 -15
- package/blog/es/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/es/vue-i18n_vs_intlayer.md +193 -31
- package/blog/fr/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/fr/i18next_vs_intlayer.md +128 -14
- package/blog/fr/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/fr/lingui_vs_intlayer.md +122 -15
- package/blog/fr/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/fr/next-intl_vs_intlayer.md +127 -15
- package/blog/fr/vue-i18n_vs_intlayer-vue-i18n.md +118 -17
- package/blog/fr/vue-i18n_vs_intlayer.md +192 -31
- package/blog/fr/vue-i18n_vs_intlayer_benchmark.md +329 -7
- package/blog/hi/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/hi/i18next_vs_intlayer.md +130 -16
- package/blog/hi/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/hi/lingui_vs_intlayer.md +122 -15
- package/blog/hi/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/hi/next-intl_vs_intlayer.md +135 -19
- package/blog/hi/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/hi/vue-i18n_vs_intlayer.md +193 -31
- package/blog/hi/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/id/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/id/i18next_vs_intlayer.md +128 -14
- package/blog/id/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/id/lingui_vs_intlayer.md +122 -15
- package/blog/id/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/id/next-intl_vs_intlayer.md +135 -19
- package/blog/id/vue-i18n_vs_intlayer-vue-i18n.md +354 -2
- package/blog/id/vue-i18n_vs_intlayer.md +188 -26
- package/blog/id/vue-i18n_vs_intlayer_benchmark.md +327 -7
- package/blog/it/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/it/i18next_vs_intlayer.md +128 -14
- package/blog/it/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/it/lingui_vs_intlayer.md +122 -15
- package/blog/it/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/it/next-intl_vs_intlayer.md +125 -15
- package/blog/it/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/it/vue-i18n_vs_intlayer.md +191 -31
- package/blog/it/vue-i18n_vs_intlayer_benchmark.md +332 -5
- package/blog/ja/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/ja/i18next_vs_intlayer.md +129 -17
- package/blog/ja/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/ja/lingui_vs_intlayer.md +122 -15
- package/blog/ja/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/ja/next-intl_vs_intlayer.md +124 -14
- package/blog/ja/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/ja/vue-i18n_vs_intlayer.md +193 -31
- package/blog/ja/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/ko/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/ko/i18next_vs_intlayer.md +129 -17
- package/blog/ko/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/ko/lingui_vs_intlayer.md +122 -15
- package/blog/ko/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/ko/next-intl_vs_intlayer.md +134 -18
- package/blog/ko/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/ko/vue-i18n_vs_intlayer.md +193 -31
- package/blog/pl/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/pl/i18next_vs_intlayer.md +128 -14
- package/blog/pl/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/pl/lingui_vs_intlayer.md +122 -15
- package/blog/pl/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/pl/next-intl_vs_intlayer.md +134 -18
- package/blog/pl/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/pl/vue-i18n_vs_intlayer.md +188 -26
- package/blog/pl/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/pt/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/pt/i18next_vs_intlayer.md +128 -14
- package/blog/pt/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/pt/lingui_vs_intlayer.md +122 -15
- package/blog/pt/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/pt/next-intl_vs_intlayer.md +131 -15
- package/blog/pt/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/pt/vue-i18n_vs_intlayer.md +193 -31
- package/blog/pt/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/ru/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/ru/i18next_vs_intlayer.md +130 -16
- package/blog/ru/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/ru/lingui_vs_intlayer.md +122 -15
- package/blog/ru/next-intl_vs_intlayer-next-intl.md +125 -16
- package/blog/ru/next-intl_vs_intlayer.md +123 -13
- package/blog/ru/vue-i18n_vs_intlayer-vue-i18n.md +127 -27
- package/blog/ru/vue-i18n_vs_intlayer.md +193 -31
- package/blog/ru/vue-i18n_vs_intlayer_benchmark.md +326 -19
- package/blog/tr/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/tr/i18next_vs_intlayer.md +128 -14
- package/blog/tr/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/tr/lingui_vs_intlayer.md +122 -15
- package/blog/tr/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/tr/next-intl_vs_intlayer.md +136 -20
- package/blog/tr/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/tr/vue-i18n_vs_intlayer.md +188 -26
- package/blog/tr/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/uk/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/uk/i18next_vs_intlayer.md +130 -16
- package/blog/uk/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/uk/lingui_vs_intlayer.md +122 -15
- package/blog/uk/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/uk/next-intl_vs_intlayer.md +135 -19
- package/blog/uk/vue-i18n_vs_intlayer-vue-i18n.md +135 -17
- package/blog/uk/vue-i18n_vs_intlayer.md +188 -27
- package/blog/uk/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/vi/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/vi/i18next_vs_intlayer.md +128 -14
- package/blog/vi/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/vi/lingui_vs_intlayer.md +122 -15
- package/blog/vi/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/vi/next-intl_vs_intlayer.md +135 -19
- package/blog/vi/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/vi/vue-i18n_vs_intlayer.md +188 -26
- package/blog/vi/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/zh/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/zh/i18next_vs_intlayer.md +128 -14
- package/blog/zh/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/zh/lingui_vs_intlayer.md +122 -15
- package/blog/zh/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/zh/next-intl_vs_intlayer.md +125 -15
- package/blog/zh/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/zh/vue-i18n_vs_intlayer.md +192 -31
- package/blog/zh/vue-i18n_vs_intlayer_benchmark.md +340 -9
- package/dist/cjs/generated/blog.entry.cjs +20 -0
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +60 -40
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +20 -0
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +60 -40
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/blog.entry.d.ts +1 -0
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +3 -2
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/benchmark/nextjs.md +19 -16
- package/docs/ar/benchmark/solid.md +26 -9
- package/docs/ar/benchmark/svelte.md +22 -7
- package/docs/ar/benchmark/tanstack.md +20 -16
- package/docs/ar/benchmark/vue.md +19 -10
- package/docs/ar/chrome_extension.md +130 -0
- package/docs/ar/cli/index.md +11 -1
- package/docs/ar/cli/infra.md +162 -0
- package/docs/ar/cli/init.md +24 -1
- package/docs/ar/cli/upgrade.md +125 -0
- package/docs/ar/dictionary/html.md +173 -5
- package/docs/ar/dictionary/markdown.md +263 -1
- package/docs/ar/intlayer_with_analog.md +23 -1
- package/docs/ar/intlayer_with_angular_19.md +24 -1
- package/docs/ar/intlayer_with_angular_21.md +24 -1
- package/docs/ar/intlayer_with_astro.md +24 -1
- package/docs/ar/intlayer_with_astro_lit.md +25 -1
- package/docs/ar/intlayer_with_astro_preact.md +26 -1
- package/docs/ar/intlayer_with_astro_react.md +26 -1
- package/docs/ar/intlayer_with_astro_solid.md +26 -1
- package/docs/ar/intlayer_with_astro_svelte.md +25 -1
- package/docs/ar/intlayer_with_astro_vue.md +25 -1
- package/docs/ar/intlayer_with_remix_3.md +22 -1
- package/docs/ar/self_hosting.md +406 -231
- package/docs/de/benchmark/nextjs.md +19 -16
- package/docs/de/benchmark/solid.md +26 -9
- package/docs/de/benchmark/svelte.md +22 -7
- package/docs/de/benchmark/tanstack.md +20 -16
- package/docs/de/benchmark/vue.md +19 -10
- package/docs/de/chrome_extension.md +130 -0
- package/docs/de/cli/index.md +11 -1
- package/docs/de/cli/infra.md +162 -0
- package/docs/de/cli/init.md +24 -1
- package/docs/de/cli/upgrade.md +125 -0
- package/docs/de/dictionary/html.md +173 -5
- package/docs/de/dictionary/markdown.md +263 -1
- package/docs/de/intlayer_with_analog.md +23 -1
- package/docs/de/intlayer_with_angular_19.md +24 -1
- package/docs/de/intlayer_with_angular_21.md +24 -1
- package/docs/de/intlayer_with_astro.md +24 -1
- package/docs/de/intlayer_with_astro_lit.md +25 -1
- package/docs/de/intlayer_with_astro_preact.md +26 -1
- package/docs/de/intlayer_with_astro_react.md +26 -1
- package/docs/de/intlayer_with_astro_solid.md +26 -1
- package/docs/de/intlayer_with_astro_svelte.md +25 -1
- package/docs/de/intlayer_with_astro_vue.md +25 -1
- package/docs/de/intlayer_with_remix_3.md +22 -1
- package/docs/de/self_hosting.md +404 -227
- package/docs/en/agent_skills.md +29 -1
- package/docs/en/benchmark/nextjs.md +19 -16
- package/docs/en/benchmark/solid.md +26 -9
- package/docs/en/benchmark/svelte.md +22 -7
- package/docs/en/benchmark/tanstack.md +21 -17
- package/docs/en/benchmark/vue.md +20 -11
- package/docs/en/chrome_extension.md +130 -0
- package/docs/en/cli/index.md +11 -1
- package/docs/en/cli/infra.md +175 -0
- package/docs/en/cli/init.md +25 -1
- package/docs/en/cli/upgrade.md +125 -0
- package/docs/en/dictionary/html.md +173 -5
- package/docs/en/dictionary/markdown.md +263 -1
- package/docs/en/intlayer_with_analog.md +23 -1
- package/docs/en/intlayer_with_angular_19.md +24 -1
- package/docs/en/intlayer_with_angular_21.md +24 -1
- package/docs/en/intlayer_with_astro.md +24 -1
- package/docs/en/intlayer_with_astro_lit.md +25 -1
- package/docs/en/intlayer_with_astro_preact.md +26 -1
- package/docs/en/intlayer_with_astro_react.md +26 -1
- package/docs/en/intlayer_with_astro_solid.md +26 -1
- package/docs/en/intlayer_with_astro_svelte.md +25 -1
- package/docs/en/intlayer_with_astro_vue.md +25 -1
- package/docs/en/intlayer_with_remix_3.md +22 -1
- package/docs/en/self_hosting.md +418 -176
- package/docs/en-GB/benchmark/nextjs.md +19 -16
- package/docs/en-GB/benchmark/solid.md +26 -9
- package/docs/en-GB/benchmark/svelte.md +22 -7
- package/docs/en-GB/benchmark/tanstack.md +20 -16
- package/docs/en-GB/benchmark/vue.md +20 -11
- package/docs/en-GB/chrome_extension.md +130 -0
- package/docs/en-GB/cli/index.md +11 -1
- package/docs/en-GB/cli/infra.md +162 -0
- package/docs/en-GB/cli/init.md +24 -1
- package/docs/en-GB/cli/upgrade.md +125 -0
- package/docs/en-GB/dictionary/html.md +173 -5
- package/docs/en-GB/dictionary/markdown.md +263 -1
- package/docs/en-GB/intlayer_with_analog.md +23 -1
- package/docs/en-GB/intlayer_with_angular_19.md +24 -1
- package/docs/en-GB/intlayer_with_angular_21.md +24 -1
- package/docs/en-GB/intlayer_with_astro.md +24 -1
- package/docs/en-GB/intlayer_with_astro_lit.md +25 -1
- package/docs/en-GB/intlayer_with_astro_preact.md +26 -1
- package/docs/en-GB/intlayer_with_astro_react.md +26 -1
- package/docs/en-GB/intlayer_with_astro_solid.md +26 -1
- package/docs/en-GB/intlayer_with_astro_svelte.md +25 -1
- package/docs/en-GB/intlayer_with_astro_vue.md +25 -1
- package/docs/en-GB/intlayer_with_remix_3.md +22 -1
- package/docs/en-GB/self_hosting.md +381 -206
- package/docs/es/benchmark/nextjs.md +19 -16
- package/docs/es/benchmark/solid.md +26 -9
- package/docs/es/benchmark/svelte.md +22 -7
- package/docs/es/benchmark/tanstack.md +20 -16
- package/docs/es/benchmark/vue.md +19 -10
- package/docs/es/chrome_extension.md +130 -0
- package/docs/es/cli/index.md +11 -1
- package/docs/es/cli/infra.md +162 -0
- package/docs/es/cli/init.md +24 -1
- package/docs/es/cli/upgrade.md +125 -0
- package/docs/es/dictionary/html.md +173 -5
- package/docs/es/dictionary/markdown.md +263 -1
- package/docs/es/intlayer_with_analog.md +23 -1
- package/docs/es/intlayer_with_angular_19.md +24 -1
- package/docs/es/intlayer_with_angular_21.md +24 -1
- package/docs/es/intlayer_with_astro.md +24 -1
- package/docs/es/intlayer_with_astro_lit.md +25 -1
- package/docs/es/intlayer_with_astro_preact.md +26 -1
- package/docs/es/intlayer_with_astro_react.md +26 -1
- package/docs/es/intlayer_with_astro_solid.md +26 -1
- package/docs/es/intlayer_with_astro_svelte.md +25 -1
- package/docs/es/intlayer_with_astro_vue.md +25 -1
- package/docs/es/intlayer_with_remix_3.md +22 -1
- package/docs/es/self_hosting.md +400 -223
- package/docs/fr/benchmark/nextjs.md +19 -16
- package/docs/fr/benchmark/solid.md +26 -9
- package/docs/fr/benchmark/svelte.md +22 -7
- package/docs/fr/benchmark/tanstack.md +20 -16
- package/docs/fr/benchmark/vue.md +20 -11
- package/docs/fr/chrome_extension.md +130 -0
- package/docs/fr/cli/index.md +11 -1
- package/docs/fr/cli/infra.md +162 -0
- package/docs/fr/cli/init.md +24 -1
- package/docs/fr/cli/upgrade.md +125 -0
- package/docs/fr/dictionary/html.md +173 -5
- package/docs/fr/dictionary/markdown.md +265 -4
- package/docs/fr/intlayer_with_analog.md +23 -1
- package/docs/fr/intlayer_with_angular_19.md +24 -1
- package/docs/fr/intlayer_with_angular_21.md +24 -1
- package/docs/fr/intlayer_with_astro.md +24 -1
- package/docs/fr/intlayer_with_astro_lit.md +25 -1
- package/docs/fr/intlayer_with_astro_preact.md +26 -1
- package/docs/fr/intlayer_with_astro_react.md +26 -1
- package/docs/fr/intlayer_with_astro_solid.md +26 -1
- package/docs/fr/intlayer_with_astro_svelte.md +25 -1
- package/docs/fr/intlayer_with_astro_vue.md +25 -1
- package/docs/fr/intlayer_with_remix_3.md +22 -1
- package/docs/fr/self_hosting.md +401 -224
- package/docs/hi/benchmark/nextjs.md +19 -16
- package/docs/hi/benchmark/solid.md +26 -9
- package/docs/hi/benchmark/svelte.md +22 -7
- package/docs/hi/benchmark/tanstack.md +20 -16
- package/docs/hi/benchmark/vue.md +20 -11
- package/docs/hi/chrome_extension.md +130 -0
- package/docs/hi/cli/index.md +11 -1
- package/docs/hi/cli/infra.md +162 -0
- package/docs/hi/cli/init.md +24 -1
- package/docs/hi/cli/upgrade.md +125 -0
- package/docs/hi/dictionary/html.md +173 -5
- package/docs/hi/dictionary/markdown.md +263 -1
- package/docs/hi/intlayer_with_analog.md +23 -1
- package/docs/hi/intlayer_with_angular_19.md +24 -1
- package/docs/hi/intlayer_with_angular_21.md +24 -1
- package/docs/hi/intlayer_with_astro.md +24 -1
- package/docs/hi/intlayer_with_astro_lit.md +25 -1
- package/docs/hi/intlayer_with_astro_preact.md +26 -1
- package/docs/hi/intlayer_with_astro_react.md +26 -1
- package/docs/hi/intlayer_with_astro_solid.md +26 -1
- package/docs/hi/intlayer_with_astro_svelte.md +25 -1
- package/docs/hi/intlayer_with_astro_vue.md +25 -1
- package/docs/hi/intlayer_with_remix_3.md +22 -1
- package/docs/hi/self_hosting.md +409 -235
- package/docs/id/benchmark/nextjs.md +19 -16
- package/docs/id/benchmark/solid.md +26 -9
- package/docs/id/benchmark/svelte.md +22 -7
- package/docs/id/benchmark/tanstack.md +20 -16
- package/docs/id/benchmark/vue.md +20 -11
- package/docs/id/chrome_extension.md +130 -0
- package/docs/id/cli/index.md +11 -1
- package/docs/id/cli/infra.md +162 -0
- package/docs/id/cli/init.md +24 -1
- package/docs/id/cli/upgrade.md +125 -0
- package/docs/id/dictionary/html.md +173 -5
- package/docs/id/dictionary/markdown.md +263 -1
- package/docs/id/intlayer_with_analog.md +23 -1
- package/docs/id/intlayer_with_angular_19.md +24 -1
- package/docs/id/intlayer_with_angular_21.md +24 -1
- package/docs/id/intlayer_with_astro.md +24 -1
- package/docs/id/intlayer_with_astro_lit.md +25 -1
- package/docs/id/intlayer_with_astro_preact.md +26 -1
- package/docs/id/intlayer_with_astro_react.md +26 -1
- package/docs/id/intlayer_with_astro_solid.md +26 -1
- package/docs/id/intlayer_with_astro_svelte.md +25 -1
- package/docs/id/intlayer_with_astro_vue.md +25 -1
- package/docs/id/intlayer_with_remix_3.md +22 -1
- package/docs/id/self_hosting.md +416 -243
- package/docs/it/benchmark/nextjs.md +19 -16
- package/docs/it/benchmark/solid.md +26 -9
- package/docs/it/benchmark/svelte.md +22 -7
- package/docs/it/benchmark/tanstack.md +20 -16
- package/docs/it/benchmark/vue.md +19 -10
- package/docs/it/chrome_extension.md +130 -0
- package/docs/it/cli/index.md +11 -1
- package/docs/it/cli/infra.md +162 -0
- package/docs/it/cli/init.md +24 -1
- package/docs/it/cli/upgrade.md +125 -0
- package/docs/it/dictionary/html.md +173 -5
- package/docs/it/dictionary/markdown.md +263 -1
- package/docs/it/intlayer_with_analog.md +23 -1
- package/docs/it/intlayer_with_angular_19.md +24 -1
- package/docs/it/intlayer_with_angular_21.md +24 -1
- package/docs/it/intlayer_with_astro.md +24 -1
- package/docs/it/intlayer_with_astro_lit.md +25 -1
- package/docs/it/intlayer_with_astro_preact.md +26 -1
- package/docs/it/intlayer_with_astro_react.md +26 -1
- package/docs/it/intlayer_with_astro_solid.md +26 -1
- package/docs/it/intlayer_with_astro_svelte.md +25 -1
- package/docs/it/intlayer_with_astro_vue.md +25 -1
- package/docs/it/intlayer_with_remix_3.md +22 -1
- package/docs/it/self_hosting.md +412 -237
- package/docs/ja/benchmark/nextjs.md +19 -16
- package/docs/ja/benchmark/solid.md +26 -9
- package/docs/ja/benchmark/svelte.md +22 -7
- package/docs/ja/benchmark/tanstack.md +18 -14
- package/docs/ja/benchmark/vue.md +19 -10
- package/docs/ja/chrome_extension.md +130 -0
- package/docs/ja/cli/index.md +11 -1
- package/docs/ja/cli/infra.md +162 -0
- package/docs/ja/cli/init.md +24 -1
- package/docs/ja/cli/upgrade.md +125 -0
- package/docs/ja/dictionary/html.md +173 -5
- package/docs/ja/dictionary/markdown.md +263 -1
- package/docs/ja/intlayer_with_analog.md +23 -1
- package/docs/ja/intlayer_with_angular_19.md +24 -1
- package/docs/ja/intlayer_with_angular_21.md +24 -1
- package/docs/ja/intlayer_with_astro.md +24 -1
- package/docs/ja/intlayer_with_astro_lit.md +25 -1
- package/docs/ja/intlayer_with_astro_preact.md +26 -1
- package/docs/ja/intlayer_with_astro_react.md +26 -1
- package/docs/ja/intlayer_with_astro_solid.md +26 -1
- package/docs/ja/intlayer_with_astro_svelte.md +25 -1
- package/docs/ja/intlayer_with_astro_vue.md +25 -1
- package/docs/ja/intlayer_with_remix_3.md +22 -1
- package/docs/ja/self_hosting.md +398 -223
- package/docs/ko/benchmark/nextjs.md +19 -16
- package/docs/ko/benchmark/solid.md +26 -9
- package/docs/ko/benchmark/svelte.md +22 -7
- package/docs/ko/benchmark/tanstack.md +20 -16
- package/docs/ko/benchmark/vue.md +20 -11
- package/docs/ko/chrome_extension.md +130 -0
- package/docs/ko/cli/index.md +11 -1
- package/docs/ko/cli/infra.md +162 -0
- package/docs/ko/cli/init.md +24 -1
- package/docs/ko/cli/upgrade.md +126 -0
- package/docs/ko/dictionary/html.md +173 -5
- package/docs/ko/dictionary/markdown.md +263 -1
- package/docs/ko/intlayer_with_analog.md +23 -1
- package/docs/ko/intlayer_with_angular_19.md +24 -1
- package/docs/ko/intlayer_with_angular_21.md +24 -1
- package/docs/ko/intlayer_with_astro.md +24 -1
- package/docs/ko/intlayer_with_astro_lit.md +25 -1
- package/docs/ko/intlayer_with_astro_preact.md +26 -1
- package/docs/ko/intlayer_with_astro_react.md +26 -1
- package/docs/ko/intlayer_with_astro_solid.md +26 -1
- package/docs/ko/intlayer_with_astro_svelte.md +25 -1
- package/docs/ko/intlayer_with_astro_vue.md +25 -1
- package/docs/ko/intlayer_with_remix_3.md +22 -1
- package/docs/ko/self_hosting.md +411 -238
- package/docs/pl/benchmark/nextjs.md +19 -16
- package/docs/pl/benchmark/solid.md +26 -9
- package/docs/pl/benchmark/svelte.md +22 -7
- package/docs/pl/benchmark/tanstack.md +20 -16
- package/docs/pl/benchmark/vue.md +20 -11
- package/docs/pl/chrome_extension.md +130 -0
- package/docs/pl/cli/index.md +11 -1
- package/docs/pl/cli/infra.md +162 -0
- package/docs/pl/cli/init.md +24 -1
- package/docs/pl/cli/upgrade.md +125 -0
- package/docs/pl/dictionary/html.md +173 -5
- package/docs/pl/dictionary/markdown.md +263 -1
- package/docs/pl/intlayer_with_analog.md +23 -1
- package/docs/pl/intlayer_with_angular_19.md +24 -1
- package/docs/pl/intlayer_with_angular_21.md +24 -1
- package/docs/pl/intlayer_with_astro.md +24 -1
- package/docs/pl/intlayer_with_astro_lit.md +25 -1
- package/docs/pl/intlayer_with_astro_preact.md +26 -1
- package/docs/pl/intlayer_with_astro_react.md +26 -1
- package/docs/pl/intlayer_with_astro_solid.md +26 -1
- package/docs/pl/intlayer_with_astro_svelte.md +25 -1
- package/docs/pl/intlayer_with_astro_vue.md +25 -1
- package/docs/pl/intlayer_with_remix_3.md +22 -1
- package/docs/pl/self_hosting.md +408 -233
- package/docs/pt/benchmark/nextjs.md +19 -16
- package/docs/pt/benchmark/solid.md +26 -9
- package/docs/pt/benchmark/svelte.md +22 -7
- package/docs/pt/benchmark/tanstack.md +20 -16
- package/docs/pt/benchmark/vue.md +19 -10
- package/docs/pt/chrome_extension.md +130 -0
- package/docs/pt/cli/index.md +11 -1
- package/docs/pt/cli/infra.md +162 -0
- package/docs/pt/cli/init.md +24 -1
- package/docs/pt/cli/upgrade.md +125 -0
- package/docs/pt/dictionary/html.md +173 -5
- package/docs/pt/dictionary/markdown.md +263 -1
- package/docs/pt/intlayer_with_analog.md +23 -1
- package/docs/pt/intlayer_with_angular_19.md +24 -1
- package/docs/pt/intlayer_with_angular_21.md +24 -1
- package/docs/pt/intlayer_with_astro.md +24 -1
- package/docs/pt/intlayer_with_astro_lit.md +25 -1
- package/docs/pt/intlayer_with_astro_preact.md +26 -1
- package/docs/pt/intlayer_with_astro_react.md +26 -1
- package/docs/pt/intlayer_with_astro_solid.md +26 -1
- package/docs/pt/intlayer_with_astro_svelte.md +25 -1
- package/docs/pt/intlayer_with_astro_vue.md +25 -1
- package/docs/pt/intlayer_with_remix_3.md +22 -1
- package/docs/pt/self_hosting.md +399 -224
- package/docs/ru/benchmark/nextjs.md +19 -16
- package/docs/ru/benchmark/solid.md +26 -9
- package/docs/ru/benchmark/svelte.md +22 -7
- package/docs/ru/benchmark/tanstack.md +20 -16
- package/docs/ru/benchmark/vue.md +20 -11
- package/docs/ru/chrome_extension.md +130 -0
- package/docs/ru/cli/index.md +11 -1
- package/docs/ru/cli/infra.md +162 -0
- package/docs/ru/cli/init.md +24 -1
- package/docs/ru/cli/upgrade.md +125 -0
- package/docs/ru/dictionary/html.md +173 -5
- package/docs/ru/dictionary/markdown.md +263 -1
- package/docs/ru/intlayer_with_analog.md +23 -1
- package/docs/ru/intlayer_with_angular_19.md +24 -1
- package/docs/ru/intlayer_with_angular_21.md +24 -1
- package/docs/ru/intlayer_with_astro.md +24 -1
- package/docs/ru/intlayer_with_astro_lit.md +25 -1
- package/docs/ru/intlayer_with_astro_preact.md +26 -1
- package/docs/ru/intlayer_with_astro_react.md +26 -1
- package/docs/ru/intlayer_with_astro_solid.md +26 -1
- package/docs/ru/intlayer_with_astro_svelte.md +25 -1
- package/docs/ru/intlayer_with_astro_vue.md +25 -1
- package/docs/ru/intlayer_with_remix_3.md +22 -1
- package/docs/ru/self_hosting.md +403 -228
- package/docs/tr/benchmark/nextjs.md +19 -16
- package/docs/tr/benchmark/solid.md +26 -9
- package/docs/tr/benchmark/svelte.md +22 -7
- package/docs/tr/benchmark/tanstack.md +20 -16
- package/docs/tr/benchmark/vue.md +20 -11
- package/docs/tr/chrome_extension.md +130 -0
- package/docs/tr/cli/index.md +11 -1
- package/docs/tr/cli/infra.md +162 -0
- package/docs/tr/cli/init.md +24 -1
- package/docs/tr/cli/upgrade.md +125 -0
- package/docs/tr/dictionary/html.md +173 -5
- package/docs/tr/dictionary/markdown.md +263 -1
- package/docs/tr/intlayer_with_analog.md +23 -1
- package/docs/tr/intlayer_with_angular_19.md +24 -1
- package/docs/tr/intlayer_with_angular_21.md +24 -1
- package/docs/tr/intlayer_with_astro.md +24 -1
- package/docs/tr/intlayer_with_astro_lit.md +25 -1
- package/docs/tr/intlayer_with_astro_preact.md +26 -1
- package/docs/tr/intlayer_with_astro_react.md +26 -1
- package/docs/tr/intlayer_with_astro_solid.md +26 -1
- package/docs/tr/intlayer_with_astro_svelte.md +25 -1
- package/docs/tr/intlayer_with_astro_vue.md +25 -1
- package/docs/tr/intlayer_with_remix_3.md +22 -1
- package/docs/tr/self_hosting.md +410 -234
- package/docs/uk/benchmark/nextjs.md +19 -16
- package/docs/uk/benchmark/solid.md +26 -9
- package/docs/uk/benchmark/svelte.md +22 -7
- package/docs/uk/benchmark/tanstack.md +20 -16
- package/docs/uk/benchmark/vue.md +20 -11
- package/docs/uk/chrome_extension.md +130 -0
- package/docs/uk/cli/index.md +11 -1
- package/docs/uk/cli/infra.md +162 -0
- package/docs/uk/cli/init.md +24 -1
- package/docs/uk/cli/upgrade.md +125 -0
- package/docs/uk/dictionary/html.md +173 -5
- package/docs/uk/dictionary/markdown.md +263 -1
- package/docs/uk/intlayer_with_analog.md +23 -1
- package/docs/uk/intlayer_with_angular_19.md +24 -1
- package/docs/uk/intlayer_with_angular_21.md +24 -1
- package/docs/uk/intlayer_with_astro.md +24 -1
- package/docs/uk/intlayer_with_astro_lit.md +25 -1
- package/docs/uk/intlayer_with_astro_preact.md +26 -1
- package/docs/uk/intlayer_with_astro_react.md +26 -1
- package/docs/uk/intlayer_with_astro_solid.md +26 -1
- package/docs/uk/intlayer_with_astro_svelte.md +25 -1
- package/docs/uk/intlayer_with_astro_vue.md +25 -1
- package/docs/uk/intlayer_with_remix_3.md +22 -1
- package/docs/uk/self_hosting.md +413 -238
- package/docs/vi/benchmark/nextjs.md +19 -16
- package/docs/vi/benchmark/solid.md +26 -9
- package/docs/vi/benchmark/svelte.md +22 -7
- package/docs/vi/benchmark/tanstack.md +20 -16
- package/docs/vi/benchmark/vue.md +20 -11
- package/docs/vi/chrome_extension.md +130 -0
- package/docs/vi/cli/index.md +11 -1
- package/docs/vi/cli/infra.md +162 -0
- package/docs/vi/cli/init.md +24 -1
- package/docs/vi/cli/upgrade.md +125 -0
- package/docs/vi/dictionary/html.md +173 -5
- package/docs/vi/dictionary/markdown.md +263 -1
- package/docs/vi/intlayer_with_analog.md +23 -1
- package/docs/vi/intlayer_with_angular_19.md +24 -1
- package/docs/vi/intlayer_with_angular_21.md +24 -1
- package/docs/vi/intlayer_with_astro.md +24 -1
- package/docs/vi/intlayer_with_astro_lit.md +25 -1
- package/docs/vi/intlayer_with_astro_preact.md +26 -1
- package/docs/vi/intlayer_with_astro_react.md +26 -1
- package/docs/vi/intlayer_with_astro_solid.md +26 -1
- package/docs/vi/intlayer_with_astro_svelte.md +25 -1
- package/docs/vi/intlayer_with_astro_vue.md +25 -1
- package/docs/vi/intlayer_with_remix_3.md +22 -1
- package/docs/vi/self_hosting.md +408 -234
- package/docs/zh/benchmark/nextjs.md +19 -16
- package/docs/zh/benchmark/solid.md +26 -9
- package/docs/zh/benchmark/svelte.md +22 -7
- package/docs/zh/benchmark/tanstack.md +19 -15
- package/docs/zh/benchmark/vue.md +20 -11
- package/docs/zh/chrome_extension.md +130 -0
- package/docs/zh/cli/index.md +11 -1
- package/docs/zh/cli/infra.md +162 -0
- package/docs/zh/cli/init.md +24 -1
- package/docs/zh/cli/upgrade.md +125 -0
- package/docs/zh/dictionary/html.md +172 -5
- package/docs/zh/dictionary/markdown.md +262 -1
- package/docs/zh/intlayer_with_analog.md +23 -1
- package/docs/zh/intlayer_with_angular_19.md +24 -1
- package/docs/zh/intlayer_with_angular_21.md +24 -1
- package/docs/zh/intlayer_with_astro.md +24 -1
- package/docs/zh/intlayer_with_astro_lit.md +25 -1
- package/docs/zh/intlayer_with_astro_preact.md +26 -1
- package/docs/zh/intlayer_with_astro_react.md +26 -1
- package/docs/zh/intlayer_with_astro_solid.md +26 -1
- package/docs/zh/intlayer_with_astro_svelte.md +25 -1
- package/docs/zh/intlayer_with_astro_vue.md +25 -1
- package/docs/zh/intlayer_with_remix_3.md +22 -1
- package/docs/zh/self_hosting.md +410 -237
- package/legal/ar/privacy_notice.md +9 -3
- package/legal/de/privacy_notice.md +9 -3
- package/legal/en/privacy_notice.md +10 -3
- package/legal/en-GB/privacy_notice.md +9 -3
- package/legal/es/privacy_notice.md +9 -3
- package/legal/fr/privacy_notice.md +9 -3
- package/legal/hi/privacy_notice.md +9 -3
- package/legal/id/privacy_notice.md +9 -3
- package/legal/it/privacy_notice.md +9 -3
- package/legal/ja/privacy_notice.md +9 -3
- package/legal/ko/privacy_notice.md +9 -3
- package/legal/pl/privacy_notice.md +9 -3
- package/legal/pt/privacy_notice.md +9 -3
- package/legal/ru/privacy_notice.md +9 -3
- package/legal/tr/privacy_notice.md +9 -3
- package/legal/uk/privacy_notice.md +9 -3
- package/legal/vi/privacy_notice.md +9 -3
- package/legal/zh/privacy_notice.md +9 -3
- package/package.json +6 -6
- package/src/generated/blog.entry.ts +20 -0
- package/src/generated/docs.entry.ts +60 -40
- package/docs/ar/roadmap.md +0 -321
- package/docs/de/roadmap.md +0 -322
- package/docs/en/intlayer_with_astro_vanilla.md +0 -713
- package/docs/en/roadmap.md +0 -325
- package/docs/en-GB/roadmap.md +0 -322
- package/docs/es/roadmap.md +0 -322
- package/docs/fr/roadmap.md +0 -322
- package/docs/hi/roadmap.md +0 -322
- package/docs/id/roadmap.md +0 -325
- package/docs/it/roadmap.md +0 -322
- package/docs/ja/roadmap.md +0 -322
- package/docs/ko/roadmap.md +0 -322
- package/docs/pl/roadmap.md +0 -325
- package/docs/pt/roadmap.md +0 -322
- package/docs/ru/roadmap.md +0 -322
- package/docs/tr/roadmap.md +0 -325
- package/docs/uk/roadmap.md +0 -325
- package/docs/vi/roadmap.md +0 -325
- package/docs/zh/roadmap.md +0 -322
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-09-13
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-22
|
|
4
4
|
title: "vue-i18n مقابل @intlayer/vue-i18n: نفس الواجهة البرمجية، حزمة مختلفة"
|
|
5
5
|
description: ما الذي يتغير عندما تحتفظ تطبيقات Vue 3 باستدعاءات vue-i18n الخاصة بها لكنها تخدمها من خلال محول التوافق @intlayer/vue-i18n. JavaScript لكل صفحة، حجم وقت التشغيل، حجم المكون والتسرب المقاس على نفس كود Vite + Vue، بالإضافة إلى ما يحتفظ به المحول وما يتجاهله وما لا يمكنه استبداله.
|
|
6
6
|
keywords:
|
|
@@ -25,6 +25,8 @@ author: aymericzip
|
|
|
25
25
|
|
|
26
26
|
# vue-i18n مقابل @intlayer/vue-i18n | نفس الواجهة البرمجية، حزمة مختلفة
|
|
27
27
|
|
|
28
|
+

|
|
29
|
+
|
|
28
30
|
`@intlayer/vue-i18n` هو محول توافقي: يعرّض واجهة برمجية (API) من `vue-i18n` (`createI18n`، `useI18n`، `t()`، `d()`، `n()`، `$t`، `v-t`، `i18n.global.locale`...) ويقدمها من القواميس المترجمة بواسطة Intlayer. ملفات `.vue` الخاصة بك لا تتغير. ما يرتبط به `t("footer.github")` هو ما يتغير.
|
|
29
31
|
|
|
30
32
|
تقيس هذه المقالة هذا التبديل على نفس تطبيق Vite + Vue 3، تم بناؤه مرة واحدة باستخدام `vue-i18n` ومرة أخرى باستخدام المحول. تأتي الأرقام من [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom). لمقارنة `vue-i18n` و Intlayer كمكتبات، اقرأ [vue-i18n vs Intlayer](https://intlayer.org/blog/vue-i18n-vs-intlayer) و[vue-i18n vs Intlayer benchmark](https://intlayer.org/blog/vue-i18n-vs-intlayer-benchmark). هذا يتعلق بما يغيره المحول عندما تحتفظ بمكوناتك كما هي.
|
|
@@ -105,6 +107,10 @@ const { t } = useI18n(_dicHash_footer);
|
|
|
105
107
|
|
|
106
108
|
### النتائج على Vite + Vue 3
|
|
107
109
|
|
|
110
|
+
اختر المقاييس والمكتبات التي تهمك:
|
|
111
|
+
|
|
112
|
+
<I18nBenchmark framework="vite-vue" vertical/>
|
|
113
|
+
|
|
108
114
|
| الإعداد | الإستراتيجية | حجم المكتبة (gz) | حجم المكتبة (min) | متوسط صفحة JS (gz) | تسرب Locale | تسرب الصفحة | متوسط المكون (gz) | استجابة E2E | تحميل الصفحة |
|
|
109
115
|
| ------------------------ | ------------ | ---------------: | ----------------: | -----------------: | ----------: | ----------: | ----------------: | ----------: | -----------: |
|
|
110
116
|
| **base** (no i18n) | - | 0.0 KB | 0.0 KB | 41.3 KB | 0.0% | - | 1.1 KB | 1.8 ms | 10.8 ms |
|
|
@@ -124,11 +130,24 @@ const { t } = useI18n(_dicHash_footer);
|
|
|
124
130
|
- **التفاعلية وتحميل الصفحة.** تبديل Locale رخيص لكليهما (1.5-2.8 ms)؛ نظام التفاعلية في Vue يجعل الأمر كذلك بمجرد أن تكون الرسائل في الذاكرة. يذهب تحميل الصفحة من 13.6 ms إلى **9.3 ms**، متماشياً مع 88 KB أقل من JavaScript للتحليل.
|
|
125
131
|
- **حول الصفوف الأصلية.** `vue-intlayer` في هذا التشغيل جمعت كل اللغة في وضع `static` وحققت 57.1 كيلوبايت مع وقت تشغيل 3.9 كيلوبايت؛ قاموس المحول المتزامن حمل سلاسل لغات أجنبية أقل، وبالتالي الرقم الأقل لكل صفحة. وقت التشغيل الأصلي يبقى الأخف من بين الثلاثة، وموديل `.content.ts` الخاص به هو حيث تجد كتل SFC `<i18n>` معادلتها.
|
|
126
132
|
|
|
133
|
+
<ClickToOpenIframe
|
|
134
|
+
src="https://intlayer.org/markdown?url=https%3A%2F%2Fraw.githubusercontent.com%2Fintlayer-org%2Fbenchmark-i18n%2Fmain%2Freport%2Fscripts%2Fsummarize-vite_vue.md"
|
|
135
|
+
width="100%"
|
|
136
|
+
height="600px"
|
|
137
|
+
style="border:none;"
|
|
138
|
+
/>
|
|
139
|
+
|
|
140
|
+
> الجدول الكامل، كل مكتبة وكل استراتيجية، في [تقرير قياس أداء Vue](https://intlayer.org/ar/doc/benchmark/vue).
|
|
141
|
+
|
|
127
142
|
## لماذا تتحرك الأرقام
|
|
128
143
|
|
|
144
|
+

|
|
145
|
+
|
|
129
146
|
لم يتغير شيء في `src/components/`، لذا الفوائد تأتي من ما ترتبط به `useI18n`.
|
|
130
147
|
|
|
131
|
-
**مع `vue-i18n`**, الربط هو المثيل العام. `createI18n({ messages: { en, fr, ... } })` هو استيراد واحد يحتوي على كل شيء؛ كل مكون يستدعي `useI18n()` يمكنه الوصول إلى كل شيء، لذلك لا يمكن للـ bundler أن ينقسم دون المثيل. التحسين يعني _أنت_ تقسم `en.json` حسب المسار، تستدعي `setLocaleMessage()` في حارس التوجيه، وتحافظ على خريطة المسار إلى الملف صحيحة عند تحرك المكونات.
|
|
148
|
+
**مع `vue-i18n`**, الربط هو المثيل العام. `createI18n({ messages: { en, fr, ... } })` هو استيراد واحد يحتوي على كل شيء؛ كل مكون يستدعي `useI18n()` يمكنه الوصول إلى كل شيء، لذلك لا يمكن للـ bundler أن ينقسم دون المثيل. التحسين يعني _أنت_ تقسم `en.json` حسب المسار، تستدعي `setLocaleMessage()` في حارس التوجيه، وتحافظ على خريطة المسار إلى الملف صحيحة عند تحرك المكونات. يتزايد الهدر على محورين في آن واحد، الصفحات واللغات:
|
|
149
|
+
|
|
150
|
+

|
|
132
151
|
|
|
133
152
|
```bash
|
|
134
153
|
.
|
|
@@ -214,6 +233,8 @@ export default config;
|
|
|
214
233
|
```
|
|
215
234
|
|
|
216
235
|
يبقى `locales/{locale}.json` في مكانه. كل مفتاح على المستوى الأعلى (`footer`, `hero`...) يصبح قاموس.
|
|
236
|
+
|
|
237
|
+
</Step>
|
|
217
238
|
<Step number={3} title="أضف الـ plugin وحذف استيراد الرسائل">
|
|
218
239
|
|
|
219
240
|
```ts fileName="vite.config.ts"
|
|
@@ -256,26 +277,107 @@ export const i18n = createI18n({ locale: "en" });
|
|
|
256
277
|
|
|
257
278
|
## الحدود التي يجب معرفتها قبل البدء
|
|
258
279
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
280
|
+
<AccordionGroup>
|
|
281
|
+
<Accordion header="لا تتم قراءة كتل SFC <i18n>">
|
|
282
|
+
|
|
283
|
+
إذا كانت رسائلك موجودة داخل المكونات، فيجب نقلها إلى ملفات اللغات، أو إلى ملف `.content.ts`، وهو نفس المفهوم مع أنواع محددة مسبقًا.
|
|
284
|
+
|
|
285
|
+
</Accordion>
|
|
286
|
+
<Accordion header="تمت إزالة تحميل الرسائل في وقت التشغيل">
|
|
287
|
+
|
|
288
|
+
`setLocaleMessage()` و `mergeLocaleMessage()` يقومان بإصدار تحذير والعودة. تتطلب الترجمات التي يتم جلبها من نظام إدارة المحتوى (CMS) في وقت التشغيل استخدام [Intlayer CMS](https://intlayer.org/ar/doc/concept/cms)، أو أوامر `intlayer pull` / `push`.
|
|
289
|
+
|
|
290
|
+
</Accordion>
|
|
291
|
+
<Accordion header="messages هو خيار احتياطي، وليس مجانيًا">
|
|
292
|
+
|
|
293
|
+
الحفاظ على استيراد JSON في `createI18n()` يبقي الـ 75 كيلوبايت في الحزمة. احذفها بمجرد اجتياز `intlayer test` بنجاح.
|
|
294
|
+
|
|
295
|
+
</Accordion>
|
|
296
|
+
<Accordion header="المحول ليس وقت التشغيل الأصلي">
|
|
297
|
+
|
|
298
|
+
7.9 كيلوبايت مقابل 3.9 كيلوبايت لـ `vue-intlayer`. بمجرد انتقال كل مكون إلى `useIntlayer`، قم بإزالته.
|
|
299
|
+
|
|
300
|
+
</Accordion>
|
|
301
|
+
</AccordionGroup>
|
|
263
302
|
|
|
264
303
|
## متى تستخدم أي منها؟
|
|
265
304
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
305
|
+
<AccordionGroup>
|
|
306
|
+
<Accordion header="البقاء على vue-i18n">
|
|
307
|
+
|
|
308
|
+
يعتمد تطبيقك على كتل SFC `<i18n>`، أو تدفقات `setLocaleMessage()` في وقت التشغيل، أو أن حجم 90 كيلوبايت لكل صفحة لا يمثل مصدر قلق لجمهورك.
|
|
309
|
+
|
|
310
|
+
</Accordion>
|
|
311
|
+
<Accordion header="استخدام @intlayer/vue-i18n">
|
|
312
|
+
|
|
313
|
+
أنت تستخدم `vue-i18n` وتريد توفير 88 كيلوبايت، ومكونات أصغر بـ 23 مرة، وتسرب صفحات بنسبة 0%، ومفاتيح مطبوعة وفحوصات CI دون تعديل أي ملف `.vue`. هذه هي نقطة الدخول لقاعدة كود `vue-i18n` الحالية.
|
|
314
|
+
|
|
315
|
+
</Accordion>
|
|
316
|
+
<Accordion header="الانتقال إلى الوضع الأصلي (vue-intlayer)">
|
|
317
|
+
|
|
318
|
+
للمشاريع الجديدة، أو بمجرد أن يؤدي المحول وظيفته. يتميز بأخف وقت تشغيل (3.9 كيلوبايت) ونموذج `.content.ts` لكل مكون يحل محل كتل `<i18n>` بمحتوى ذي أنواع محددة. ابدأ مع [Intlayer مع Vue](https://intlayer.org/ar/doc/environment/vite-and-vue) أو [مع Nuxt](https://intlayer.org/ar/doc/environment/nuxt-and-vue).
|
|
319
|
+
|
|
320
|
+
</Accordion>
|
|
321
|
+
</AccordionGroup>
|
|
322
|
+
|
|
323
|
+
## الأسئلة الشائعة
|
|
324
|
+
|
|
325
|
+
<FAQ>
|
|
326
|
+
|
|
327
|
+
<Question title="هل يتعين علي تعديل ملفات .vue الخاصة بي؟">
|
|
328
|
+
|
|
329
|
+
لا. أدى بناء الاختبار القياسي إلى تعديل `vite.config.ts` و `intlayer.config.ts` وسطر واحد فقط في `src/i18n.ts` وهو استيراد `messages`. ظل كل موضع استدعاء لـ `useI18n()` و `$t` و `v-t` و Options API كما كان تمامًا.
|
|
330
|
+
|
|
331
|
+
</Question>
|
|
332
|
+
|
|
333
|
+
<Question title="لماذا حجم المكون أصغر بـ 23 مرة؟">
|
|
334
|
+
|
|
335
|
+
لأن `useI18n()` يتوقف عن الوصول إلى النسخة العامة. يحتفظ `createI18n({ messages })` بجميع الرسائل لكل لغة، لذلك يسحب المكون المترجم بمفرده 196 كيلوبايت. مع المحول فإنه يصل فقط إلى قاموسه الخاص: 8.4 كيلوبايت.
|
|
336
|
+
|
|
337
|
+
</Question>
|
|
338
|
+
|
|
339
|
+
<Question title="ماذا عن تنسيق d() و n()؟">
|
|
340
|
+
|
|
341
|
+
تم الحفاظ عليه. يتم احترام إعدادات `datetimeFormats` و `numberFormats` التي تم تمريرها إلى `createI18n()`، وهي مدعومة بواسطة واجهة `Intl` الأصلية. راجع [تنسيق التاريخ والوقت والأرقام](https://intlayer.org/ar/blog/date-time-number-formatting-locales).
|
|
342
|
+
|
|
343
|
+
</Question>
|
|
344
|
+
|
|
345
|
+
<Question title="هل يعمل مع Nuxt؟">
|
|
346
|
+
|
|
347
|
+
`@intlayer/vue-i18n` يستهدف Vite + Vue. بالنسبة لـ `@nuxtjs/i18n`، استخدم [محول التوافق Nuxt i18n](https://intlayer.org/ar/doc/compatibility/nuxtjs-i18n)، وراجع [Intlayer مع Nuxt](https://intlayer.org/ar/doc/environment/nuxt-and-vue) للإعداد الأصلي.
|
|
348
|
+
|
|
349
|
+
</Question>
|
|
350
|
+
|
|
351
|
+
<Question title="هل يمكنني الترحيل مكونًا تلو الآخر؟">
|
|
352
|
+
|
|
353
|
+
نعم. يمكن لأي مكون التبديل من `useI18n()` إلى `useIntlayer("footer")` باستخدام ملف محتوى مجاور له. يتعايش قاموسا JSON و `.content.ts` ويتم دمجهما بسلاسة.
|
|
354
|
+
|
|
355
|
+
</Question>
|
|
356
|
+
|
|
357
|
+
</FAQ>
|
|
269
358
|
|
|
270
359
|
## المقارنات ذات الصلة
|
|
271
360
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
- [next-intl
|
|
275
|
-
- [i18next
|
|
276
|
-
- [Lingui
|
|
277
|
-
|
|
278
|
-
|
|
361
|
+
نفس سلسلة المحولات:
|
|
362
|
+
|
|
363
|
+
- [next-intl vs @intlayer/next-intl](https://intlayer.org/ar/blog/next-intl-vs-intlayer-next-intl)
|
|
364
|
+
- [i18next vs @intlayer/i18next](https://intlayer.org/ar/blog/i18next-vs-intlayer-i18next)
|
|
365
|
+
- [Lingui vs @intlayer/lingui](https://intlayer.org/ar/blog/lingui-vs-intlayer-lingui)
|
|
366
|
+
|
|
367
|
+
مقارنة المكتبات جنبًا إلى جنب:
|
|
368
|
+
|
|
369
|
+
- [vue-i18n vs Intlayer](https://intlayer.org/ar/blog/vue-i18n-vs-intlayer), features and DX
|
|
370
|
+
- [vue-i18n vs Intlayer benchmark](https://intlayer.org/ar/blog/vue-i18n-vs-intlayer-benchmark)
|
|
371
|
+
- [Is vue-i18n outdated?](https://intlayer.org/ar/blog/is-vue-i18n-outdated)
|
|
372
|
+
- [How to pick a Vue i18n library](https://intlayer.org/ar/blog/how-to-pick-vue-i18n-library)
|
|
373
|
+
|
|
374
|
+
وثائق مرجعية:
|
|
375
|
+
|
|
376
|
+
- [Compat adapter: vue-i18n](https://intlayer.org/ar/doc/compatibility/vue-i18n) and [Nuxt i18n](https://intlayer.org/ar/doc/compatibility/nuxtjs-i18n)
|
|
377
|
+
- [دليل الترحيل: من vue-i18n إلى Intlayer](https://intlayer.org/ar/doc/migration/vue-i18n)
|
|
378
|
+
- [تقرير قياس أداء Vue](https://intlayer.org/ar/doc/benchmark/vue)
|
|
379
|
+
- [تحسين الحزمة](https://intlayer.org/ar/doc/concept/bundle-optimization) و [مترجم Intlayer](https://intlayer.org/ar/doc/compiler)
|
|
380
|
+
- [المحرر المرئي](https://intlayer.org/ar/doc/concept/editor)، [نظام إدارة المحتوى (CMS)](https://intlayer.org/ar/doc/concept/cms) و [الترجمة بالذكاء الاصطناعي](https://intlayer.org/ar/doc/concept/auto-fill)
|
|
279
381
|
|
|
280
382
|
## الخلاصة
|
|
281
383
|
|
|
@@ -283,4 +385,4 @@ export const i18n = createI18n({ locale: "en" });
|
|
|
283
385
|
|
|
284
386
|
جميع البيانات الأولية وتطبيقات الاختبار والسكريبتات موجودة في [مستودع Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom). قم بتشغيلها بنفسك.
|
|
285
387
|
|
|
286
|
-
راجع وثيقة ['Why Intlayer?'](https://intlayer.org/doc/why) للحصول على مزيد من التفاصيل.
|
|
388
|
+
راجع وثيقة ['Why Intlayer?'](https://intlayer.org/ar/doc/why) للحصول على مزيد من التفاصيل.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-11
|
|
3
|
-
updatedAt:
|
|
3
|
+
updatedAt: 2026-09-22
|
|
4
4
|
title: vue-i18n مقابل Intlayer
|
|
5
5
|
description: مقارنة بين vue-i18n و Intlayer للتدويل (i18n) في تطبيقات Vue/Nuxt
|
|
6
6
|
keywords:
|
|
@@ -20,6 +20,8 @@ author: aymericzip
|
|
|
20
20
|
|
|
21
21
|
# vue-i18n مقابل Intlayer | التدويل في Vue (i18n)
|
|
22
22
|
|
|
23
|
+

|
|
24
|
+
|
|
23
25
|
تُقارن هذه الدليل بين خيارين شائعين للتدويل (i18n) لـ **Vue 3** (و **Nuxt**): **vue-i18n** و **Intlayer**.
|
|
24
26
|
نركز على أدوات Vue الحديثة (Vite، Composition API) ونقيّم:
|
|
25
27
|
|
|
@@ -31,6 +33,8 @@ author: aymericzip
|
|
|
31
33
|
6. **تجربة المطور (DX)، الأدوات والصيانة**
|
|
32
34
|
7. **تحسين محركات البحث (SEO) وقابلية التوسع في المشاريع الكبيرة**
|
|
33
35
|
|
|
36
|
+
<TOC/>
|
|
37
|
+
|
|
34
38
|
> **ملخص**: كلاهما يمكنه تعريب تطبيقات Vue. إذا كنت تريد **محتوى مخصص للمكونات**، **أنواع TypeScript صارمة**، **فحوصات مفاتيح مفقودة أثناء البناء**، **قواميس معزولة بشجرة الاهتزاز (tree-shaken)**، و**مساعدات مدمجة للتوجيه وSEO** بالإضافة إلى **محرر بصري وترجمات مدعومة بالذكاء الاصطناعي**، فإن **Intlayer** هو الخيار الأكثر تكاملاً وحداثة.
|
|
35
39
|
|
|
36
40
|
## التموقع على مستوى عالٍ
|
|
@@ -38,6 +42,30 @@ author: aymericzip
|
|
|
38
42
|
- **vue-i18n** - مكتبة التدويل الافتراضية لـ Vue. تنسيق رسائل مرن (نمط ICU)، كتل `<i18n>` في ملفات المكونات المفردة (SFC) للرسائل المحلية، ونظام بيئي كبير. الأمان والصيانة على نطاق واسع تقع بشكل رئيسي على عاتقك.
|
|
39
43
|
- **Intlayer** - نموذج محتوى يركز على المكونات لـ Vue/Vite/Nuxt مع **أنواع TypeScript صارمة**، **فحوصات أثناء وقت البناء**، **عزل القواميس بشجرة الاهتزاز (tree-shaking)**، **مساعدات التوجيه وSEO**، محرر بصري/نظام إدارة محتوى اختياري، وترجمات مدعومة بالذكاء الاصطناعي.
|
|
40
44
|
|
|
45
|
+
## ما هي التكلفة أثناء وقت البناء
|
|
46
|
+
|
|
47
|
+
قبل جداول الميزات، الجزء المقاس. يقوم [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom) ببناء نفس تطبيق Vite + Vue 3 (10 صفحات، 10 لغات) مع كل مكتبة ويسجل ما يقوم المتصفح بتنزيله:
|
|
48
|
+
|
|
49
|
+
<I18nBenchmark framework="vite-vue" vertical/>
|
|
50
|
+
|
|
51
|
+
| Setup | Lib size (gz) | Page JS avg (gz) | Page leak | Component avg (gz) |
|
|
52
|
+
| -------------------- | ------------: | ---------------: | --------: | -----------------: |
|
|
53
|
+
| **base** (no i18n) | 0.0 KB | 41.3 KB | - | 1.1 KB |
|
|
54
|
+
| `vue-i18n` | 24.3 KB | 134.9 KB | 90.0% | 196.0 KB |
|
|
55
|
+
| `@intlayer/vue-i18n` | 7.9 KB | 47.0 KB | 0.0% | 8.4 KB |
|
|
56
|
+
| **`vue-intlayer`** | **3.9 KB** | **57.1 KB** | **0.0%** | **7.7 KB** |
|
|
57
|
+
|
|
58
|
+
يزن وقت تشغيل `vue-i18n` بمفرده **6 أضعاف** Intlayer، وتحمل كل صفحة **90% من سلاسل الصفحات الأخرى**، والمكون المترجم بمعزل يسحب **196 كيلوبايت** لأن `useI18n()` يربطه بشجرة الرسائل العامة بأكملها. التقرير الكامل مع توقيتات التفاعل وتحميل الصفحة موجود في [مقارنة vue-i18n مقابل Intlayer](https://intlayer.org/ar/blog/vue-i18n-vs-intlayer-benchmark).
|
|
59
|
+
|
|
60
|
+
<ClickToOpenIframe
|
|
61
|
+
src="https://intlayer.org/markdown?url=https%3A%2F%2Fraw.githubusercontent.com%2Fintlayer-org%2Fbenchmark-i18n%2Fmain%2Freport%2Fscripts%2Fsummarize-vite_vue.md"
|
|
62
|
+
width="100%"
|
|
63
|
+
height="600px"
|
|
64
|
+
style="border:none;"
|
|
65
|
+
/>
|
|
66
|
+
|
|
67
|
+
> الجدول الكامل في [تقرير قياس أداء Vue](https://intlayer.org/ar/doc/benchmark/vue).
|
|
68
|
+
|
|
41
69
|
## مقارنة الميزات جنبًا إلى جنب (مركزة على Vue)
|
|
42
70
|
|
|
43
71
|
| الميزة | **Intlayer** | **vue-i18n** |
|
|
@@ -63,59 +91,74 @@ author: aymericzip
|
|
|
63
91
|
|
|
64
92
|
## مقارنة متعمقة
|
|
65
93
|
|
|
66
|
-
|
|
94
|
+
<AccordionGroup>
|
|
95
|
+
<Accordion header="1) البنية وقابلية التوسع">
|
|
67
96
|
|
|
68
|
-
- **vue-i18n**: الإعدادات الشائعة تستخدم **كتالوجات مركزية** لكل لغة (يمكن تقسيمها اختياريًا إلى ملفات/مساحات أسماء). كتل `<i18n>` في ملفات المكونات المفردة (SFC) تسمح برسائل محلية، لكن الفرق غالبًا ما تعود إلى الكتالوجات المشتركة مع نمو المشاريع.
|
|
97
|
+
- **vue-i18n**: الإعدادات الشائعة تستخدم **كتالوجات مركزية** لكل لغة (يمكن تقسيمها اختياريًا إلى ملفات/مساحات أسماء). كتل `<i18n>` في ملفات المكونات المفردة (SFC) تسمح برسائل محلية، لكن الفرق غالبًا ما تعود إلى الكتالوجات المشتركة مع نمو المشاريع. راجع [i18n لكل مكون مقابل المركزية](https://intlayer.org/ar/blog/per-component-vs-centralized-i18n).
|
|
69
98
|
- **Intlayer**: يشجع على **قواميس لكل مكون** مخزنة بجانب المكون الذي تخدمه. هذا يقلل من النزاعات بين الفرق، ويحافظ على اكتشاف المحتوى، ويحد بشكل طبيعي من الانحراف/المفاتيح غير المستخدمة.
|
|
70
99
|
|
|
71
100
|
**لماذا هذا مهم:** في تطبيقات Vue الكبيرة أو أنظمة التصميم، **المحتوى المعياري** يتوسع بشكل أفضل من الكتالوجات الأحادية.
|
|
72
101
|
|
|
73
|
-
|
|
102
|
+
</Accordion>
|
|
103
|
+
<Accordion header="2) TypeScript والأمان البرمجي">
|
|
74
104
|
|
|
75
105
|
- **vue-i18n**: دعم جيد لـ TS؛ **الكتابة الصارمة للمفاتيح** عادة ما تحتاج إلى مخططات/جنيريكس مخصصة واتفاقيات دقيقة.
|
|
76
106
|
- **Intlayer**: **ينشئ أنواعًا صارمة** من محتواك، مما يوفر **الإكمال التلقائي في بيئة التطوير (IDE)** و**أخطاء وقت الترجمة** للأخطاء الإملائية/المفاتيح المفقودة.
|
|
77
107
|
|
|
78
108
|
**لماذا هذا مهم:** الكتابة الصارمة تكتشف المشاكل **قبل** وقت التشغيل.
|
|
79
109
|
|
|
80
|
-
|
|
110
|
+
</Accordion>
|
|
111
|
+
<Accordion header="3) التعامل مع الترجمات المفقودة">
|
|
81
112
|
|
|
82
|
-
- **vue-i18n**: تحذيرات/استرجاعات **وقت التشغيل** (مثل الرجوع إلى لغة أو مفتاح بديل).
|
|
83
|
-
- **Intlayer**: كشف **وقت البناء** مع تحذيرات/أخطاء عبر اللغات
|
|
113
|
+
- **vue-i18n**: تحذيرات/استرجاعات **وقت التشغيل** (مثل الرجوع إلى لغة أو مفتاح بديل). راجع [اكتشاف الترجمات المفقودة](https://intlayer.org/ar/blog/detecting-missing-translations).
|
|
114
|
+
- **Intlayer**: كشف **وقت البناء** مع تحذيرات/أخطاء عبر اللغات والمفاتيح.، بالإضافة إلى `npx intlayer test` في CI.
|
|
84
115
|
|
|
85
116
|
**لماذا هذا مهم:** فرض القواعد وقت البناء يحافظ على واجهة المستخدم في الإنتاج نظيفة ومتسقة.
|
|
86
117
|
|
|
87
|
-
|
|
118
|
+
</Accordion>
|
|
119
|
+
<Accordion header="4) استراتيجية التوجيه وعناوين URL (Vue Router/Nuxt)">
|
|
88
120
|
|
|
89
|
-
- **كلاهما** يمكن أن يعمل مع مسارات محلية.
|
|
121
|
+
- **كلاهما** يمكن أن يعمل مع مسارات محلية. راجع [دليل hreflang](https://intlayer.org/ar/blog/hreflang-guide-multilingual-seo).
|
|
90
122
|
- **Intlayer** يوفر مساعدات لـ **إنشاء مسارات محلية**، و**إدارة بادئات اللغة**، وإصدار **`<link rel="alternate" hreflang>`** لتحسين محركات البحث (SEO). مع Nuxt، يكمل توجيه الإطار.
|
|
91
123
|
|
|
92
124
|
**لماذا هذا مهم:** تقليل طبقات الربط المخصصة و**تحسين SEO أنظف** عبر اللغات.
|
|
93
125
|
|
|
94
|
-
|
|
126
|
+
</Accordion>
|
|
127
|
+
<Accordion header="5) الأداء وسلوك التحميل">
|
|
95
128
|
|
|
96
|
-
- **vue-i18n**: يدعم رسائل اللغة غير المتزامنة؛ تجنب التجميع الزائد مسؤوليتك (قسّم الكتالوجات بعناية).
|
|
129
|
+
- **vue-i18n**: يدعم رسائل اللغة غير المتزامنة؛ تجنب التجميع الزائد مسؤوليتك (قسّم الكتالوجات بعناية). يوضح الاختبار القياسي أعلاه ذلك بالأرقام: 134.9 كيلوبايت مقابل 57.1 كيلوبايت لكل صفحة.
|
|
97
130
|
- **Intlayer**: يقوم بـ **تحليل الشجرة** أثناء البناء و**التحميل الكسول لكل قاموس/لغة**. المحتوى غير المستخدم لا يتم شحنه.
|
|
98
131
|
|
|
99
132
|
**لماذا هذا مهم:** حزم أصغر وتشغيل أسرع لتطبيقات Vue متعددة اللغات.
|
|
100
133
|
|
|
101
|
-
|
|
134
|
+
</Accordion>
|
|
135
|
+
<Accordion header="6) تجربة المطور والأدوات">
|
|
102
136
|
|
|
103
137
|
- **vue-i18n**: وثائق ومجتمع ناضج؛ ستعتمد عادةً على **منصات الترجمة الخارجية** لسير العمل التحريري.
|
|
104
|
-
- **Intlayer**: يوفر **محرر بصري مجاني**، و**نظام إدارة محتوى اختياري** (متوافق مع Git أو خارجي)، و**امتداد VSCode**، وأدوات **CLI/CI**، وترجمات **مدعومة بالذكاء الاصطناعي** باستخدام مفاتيح المزود الخاصة
|
|
138
|
+
- **Intlayer**: يوفر **محرر بصري مجاني**، و**نظام إدارة محتوى اختياري** (متوافق مع Git أو خارجي)، و**امتداد VSCode**، وأدوات **CLI/CI**، وترجمات **مدعومة بالذكاء الاصطناعي** باستخدام مفاتيح المزود الخاصة بك.، و**خادم MCP**
|
|
105
139
|
|
|
106
140
|
**لماذا هذا مهم:** تقليل تكلفة العمليات ودورة تطوير-محتوى أقصر.
|
|
107
141
|
|
|
108
|
-
|
|
142
|
+
</Accordion>
|
|
143
|
+
<Accordion header="7) تحسين محركات البحث (SEO)، SSR و SSG">
|
|
109
144
|
|
|
110
|
-
- **كلاهما** يعمل مع Vue SSR وNuxt.
|
|
145
|
+
- **كلاهما** يعمل مع Vue SSR وNuxt. راجع [التدويل وتحسين محركات البحث (SEO)](https://intlayer.org/ar/blog/SEO-and-i18n).
|
|
111
146
|
- **Intlayer**: يضيف **مساعدات SEO** (خرائط الموقع/البيانات الوصفية/`hreflang`) التي لا تعتمد على إطار عمل معين وتتوافق بشكل جيد مع بناء Vue/Nuxt.
|
|
112
147
|
|
|
113
148
|
**لماذا هذا مهم:** تحسين SEO دولي بدون تعقيدات خاصة.
|
|
114
149
|
|
|
150
|
+
</Accordion>
|
|
151
|
+
</AccordionGroup>
|
|
152
|
+
|
|
115
153
|
## لماذا Intlayer؟ (المشكلة والمنهجية)
|
|
116
154
|
|
|
155
|
+

|
|
156
|
+
|
|
117
157
|
تبدأ معظم حزم i18n (بما في ذلك **vue-i18n**) من **كتالوجات مركزية**:
|
|
118
158
|
|
|
159
|
+
<Tabs defaultTab="per-locale" group="catalog">
|
|
160
|
+
<Tab label="ملف واحد لكل لغة" value="per-locale">
|
|
161
|
+
|
|
119
162
|
```bash
|
|
120
163
|
.
|
|
121
164
|
├── locales
|
|
@@ -127,7 +170,8 @@ author: aymericzip
|
|
|
127
170
|
└── MyComponent.vue
|
|
128
171
|
```
|
|
129
172
|
|
|
130
|
-
|
|
173
|
+
</Tab>
|
|
174
|
+
<Tab label="مجلد واحد لكل لغة" value="per-folder">
|
|
131
175
|
|
|
132
176
|
```bash
|
|
133
177
|
.
|
|
@@ -146,6 +190,34 @@ author: aymericzip
|
|
|
146
190
|
└── MyComponent.vue
|
|
147
191
|
```
|
|
148
192
|
|
|
193
|
+
</Tab>
|
|
194
|
+
</Tabs>
|
|
195
|
+
|
|
196
|
+
يستمر هذا المجلد في التضخم، مساحة اسم واحدة لكل ميزة في كل لغة:
|
|
197
|
+
|
|
198
|
+
```txt
|
|
199
|
+
locales
|
|
200
|
+
├── EN
|
|
201
|
+
│ ├── blog.json
|
|
202
|
+
│ ├── about.json
|
|
203
|
+
│ ├── auth.json
|
|
204
|
+
│ ├── blog.json
|
|
205
|
+
│ ├── cart.json
|
|
206
|
+
│ ├── categories.json
|
|
207
|
+
│ ├── contact.json
|
|
208
|
+
│ ├── dashboard.json
|
|
209
|
+
│ ├── errors.json
|
|
210
|
+
│ ├── faq.json
|
|
211
|
+
│ ├── footer.json
|
|
212
|
+
│ ├── form.json
|
|
213
|
+
│ ├── home.json
|
|
214
|
+
│ ├── language.json
|
|
215
|
+
│ ├── navbar.json
|
|
216
|
+
│ ├── ... 65 files
|
|
217
|
+
│ └── validation.json
|
|
218
|
+
└── ES
|
|
219
|
+
```
|
|
220
|
+
|
|
149
221
|
غالبًا ما يبطئ هذا التطوير مع نمو التطبيقات:
|
|
150
222
|
|
|
151
223
|
1. **لمكون جديد** تقوم بإنشاء/تعديل الكتالوجات البعيدة، ربط مساحات الأسماء، والترجمة (غالبًا عبر النسخ/اللصق اليدوي من أدوات الذكاء الاصطناعي).
|
|
@@ -161,7 +233,33 @@ author: aymericzip
|
|
|
161
233
|
└── MyComponent.vue
|
|
162
234
|
```
|
|
163
235
|
|
|
164
|
-
|
|
236
|
+
<Tabs defaultTab="intlayer" group="techno">
|
|
237
|
+
<Tab label="vue-i18n" value="vue-i18n">
|
|
238
|
+
|
|
239
|
+
```json fileName="./locales/en.json"
|
|
240
|
+
{
|
|
241
|
+
"componentExample": {
|
|
242
|
+
"greeting": "Hello World"
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
```vue fileName="./components/MyComponent.vue"
|
|
248
|
+
<script setup lang="ts">
|
|
249
|
+
import { useI18n } from "vue-i18n";
|
|
250
|
+
|
|
251
|
+
const { t } = useI18n();
|
|
252
|
+
</script>
|
|
253
|
+
|
|
254
|
+
<template>
|
|
255
|
+
<span>{{ t("componentExample.greeting") }}</span>
|
|
256
|
+
</template>
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
يجب تعديل كل ملف لغة يدويًا، والمفتاح مجرد نص عادي: أي خطأ مطبعي يظهر كـ `componentExample.greting` في الإنتاج.
|
|
260
|
+
|
|
261
|
+
</Tab>
|
|
262
|
+
<Tab label="Intlayer" value="intlayer">
|
|
165
263
|
|
|
166
264
|
```ts fileName="./components/MyComponent/myComponent.content.ts"
|
|
167
265
|
import { t, type Dictionary } from "intlayer";
|
|
@@ -171,8 +269,8 @@ const componentExampleContent = {
|
|
|
171
269
|
content: {
|
|
172
270
|
greeting: t({
|
|
173
271
|
en: "Hello World",
|
|
174
|
-
es: "Hola Mundo",
|
|
175
272
|
fr: "Bonjour le monde",
|
|
273
|
+
es: "Hola Mundo",
|
|
176
274
|
}),
|
|
177
275
|
},
|
|
178
276
|
} satisfies Dictionary;
|
|
@@ -180,11 +278,10 @@ const componentExampleContent = {
|
|
|
180
278
|
export default componentExampleContent;
|
|
181
279
|
```
|
|
182
280
|
|
|
183
|
-
**الاستخدام في Vue** (واجهة التكوين Composition API):
|
|
184
|
-
|
|
185
281
|
```vue fileName="./components/MyComponent/MyComponent.vue"
|
|
186
282
|
<script setup lang="ts">
|
|
187
|
-
import { useIntlayer } from "vue-intlayer"; //
|
|
283
|
+
import { useIntlayer } from "vue-intlayer"; // Vue integration
|
|
284
|
+
|
|
188
285
|
const { greeting } = useIntlayer("component-example");
|
|
189
286
|
</script>
|
|
190
287
|
|
|
@@ -193,6 +290,11 @@ const { greeting } = useIntlayer("component-example");
|
|
|
193
290
|
</template>
|
|
194
291
|
```
|
|
195
292
|
|
|
293
|
+
توجد جميع اللغات في ملف واحد محدد الأنواع بجوار المكون.
|
|
294
|
+
|
|
295
|
+
</Tab>
|
|
296
|
+
</Tabs>
|
|
297
|
+
|
|
196
298
|
تتضمن هذه الطريقة:
|
|
197
299
|
|
|
198
300
|
- **تسريع التطوير** (الإعلان مرة واحدة؛ الإكمال التلقائي من IDE/AI).
|
|
@@ -220,22 +322,71 @@ const { greeting } = useIntlayer("component-example");
|
|
|
220
322
|
|
|
221
323
|
## متى تختار أيهما؟
|
|
222
324
|
|
|
223
|
-
|
|
224
|
-
|
|
325
|
+
<AccordionGroup>
|
|
326
|
+
<Accordion header="اختيار vue-i18n">
|
|
327
|
+
|
|
328
|
+
تريد **النهج القياسي لـ Vue**، وتشعر بالراحة في إدارة القواميس ومساحات الأسماء بنفسك، وتطبيقك **صغير إلى متوسط الحجم** (أو تعتمد بالفعل على Nuxt i18n). كتل SFC `<i18n>` و `setLocaleMessage()` في وقت التشغيل هي ميزات لا يحاكيها Intlayer عمدًا.
|
|
329
|
+
|
|
330
|
+
</Accordion>
|
|
331
|
+
<Accordion header="اختيار Intlayer">
|
|
332
|
+
|
|
333
|
+
تقدر **المحتوى المحدد بنطاق المكون**، و**TypeScript الصارم**، و**ضمانات وقت البناء**، و**tree-shaking**، وأدوات التوجيه ومحركات البحث والمحرر المدمجة، خاصة **لقواعد كود Vue/Nuxt المعيارية الكبيرة** وأنظمة التصميم. ابدأ مع [Intlayer مع Vue](https://intlayer.org/ar/doc/environment/vite-and-vue) أو [مع Nuxt](https://intlayer.org/ar/doc/environment/nuxt-and-vue).
|
|
334
|
+
|
|
335
|
+
</Accordion>
|
|
336
|
+
<Accordion header="اختيار @intlayer/vue-i18n">
|
|
337
|
+
|
|
338
|
+
تستخدم `vue-i18n` اليوم وتريد توفير حجم الحزمة دون تعديل ملفات `.vue`. يحافظ [محول التوافق](https://intlayer.org/ar/doc/compatibility/vue-i18n) على `createI18n` و `useI18n` و `t()` و `d()` و `n()` و `$t` و `v-t`، ويخدمها من قواميس مجمعة. تمت المقارنة جنبًا إلى جنب في [vue-i18n مقابل @intlayer/vue-i18n](https://intlayer.org/ar/blog/vue-i18n-vs-intlayer-vue-i18n).
|
|
339
|
+
|
|
340
|
+
</Accordion>
|
|
341
|
+
</AccordionGroup>
|
|
225
342
|
|
|
226
343
|
## التوافقية مع vue-i18n
|
|
227
344
|
|
|
228
345
|
يمكن لـ `intlayer` أيضًا أن يساعدك في إدارة مساحات أسماء `vue-i18n` الخاصة بك.
|
|
229
346
|
|
|
230
|
-
باستخدام `intlayer`، يمكنك التصريح عن محتواك بصيغة مكتبة i18n المفضلة لديك، وسيقوم intlayer بإنشاء مساحات الأسماء الخاصة بك في الموقع الذي تختاره (مثال: `/messages/{{locale}}/{{namespace}}.json`).
|
|
347
|
+
باستخدام `intlayer`، يمكنك التصريح عن محتواك بصيغة مكتبة i18n المفضلة لديك، وسيقوم intlayer بإنشاء مساحات الأسماء الخاصة بك في الموقع الذي تختاره (مثال: `/messages/{{locale}}/{{namespace}}.json`). راجع [وثائق توافق vue-i18n](https://intlayer.org/ar/doc/compatibility/vue-i18n) و [محول Nuxt i18n](https://intlayer.org/ar/doc/compatibility/nuxtjs-i18n).
|
|
348
|
+
|
|
349
|
+
## الأسئلة الشائعة
|
|
350
|
+
|
|
351
|
+
<FAQ>
|
|
352
|
+
|
|
353
|
+
<Question title="هل Intlayer بديل لـ vue-i18n أم طبقة فوقه؟">
|
|
354
|
+
|
|
355
|
+
كلاهما، اعتمادًا على كيفية اعتماده. `vue-intlayer` هو وقت تشغيل أصلي مع دالة `useIntlayer()` خاصة به. `@intlayer/vue-i18n` هو محول توافق يحافظ على واجهة برمجة تطبيقات `vue-i18n` ويستبدل ما ترتبط به، حتى تتمكن من الترحيل دون لمس المكونات ثم المضي قدمًا ملفًا تلو الآخر بعد ذلك.
|
|
356
|
+
|
|
357
|
+
</Question>
|
|
358
|
+
|
|
359
|
+
<Question title="ماذا يحدث لكتل SFC <i18n> الخاصة بي؟">
|
|
360
|
+
|
|
361
|
+
المحول لا يقرأها. انقل تلك الرسائل إلى ملف JSON الخاص باللغة، أو إلى ملف `.content.ts` بجوار المكون، وهو نفس المفهوم مع أنواع منشأة تلقائيًا. هذه هي ميزة `vue-i18n` الوحيدة التي لا يتم نقلها.
|
|
231
362
|
|
|
232
|
-
|
|
363
|
+
</Question>
|
|
233
364
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
-
|
|
237
|
-
|
|
238
|
-
|
|
365
|
+
<Question title="هل يعمل Intlayer مع Nuxt؟">
|
|
366
|
+
|
|
367
|
+
نعم. يغطي [Intlayer مع Nuxt](https://intlayer.org/ar/doc/environment/nuxt-and-vue) التوجيه متعدد اللغات والبرمجيات الوسيطة للكشف عن اللغة وإنشاء خريطة الموقع. إذا كنت تستخدم `@nuxtjs/i18n`، فإن [محول توافق Nuxt i18n](https://intlayer.org/ar/doc/compatibility/nuxtjs-i18n) هو مسار الترحيل.
|
|
368
|
+
|
|
369
|
+
</Question>
|
|
370
|
+
|
|
371
|
+
<Question title="هل يمكنني الاحتفاظ بـ locales/{locale}.json كمصدر وحيد للحقيقة؟">
|
|
372
|
+
|
|
373
|
+
نعم. يقرأها [ملحق مزامنة JSON](https://intlayer.org/ar/doc/compatibility/vue-i18n) بلهجة `vue-i18n` (`{name}`، `{0}`، وصيغ الجمع `"car | cars"`) ويكتب الترجمات مرة أخرى عندما يقوم CLI أو CMS بتحديثها.
|
|
374
|
+
|
|
375
|
+
</Question>
|
|
376
|
+
|
|
377
|
+
<Question title="هل يعمل ICU مع Intlayer على Vue؟">
|
|
378
|
+
|
|
379
|
+
دعم ICU الأصلي قيد التطوير. يتعامل محول `@intlayer/vue-i18n` مع بناء جملة الرسائل الخاصة بـ `vue-i18n`، بما في ذلك صيغ الجمع والاستيفاء المحدد والقوائم. للحصول على نموذج صيغ الجمع الخاص بـ Intlayer، راجع [محتوى التعداد](https://intlayer.org/ar/doc/concept/content/enumeration).
|
|
380
|
+
|
|
381
|
+
</Question>
|
|
382
|
+
|
|
383
|
+
</FAQ>
|
|
384
|
+
|
|
385
|
+
## GitHub STARs
|
|
386
|
+
|
|
387
|
+
تعد نجوم GitHub مؤشرًا قويًا على شعبية المشروع وثقة المجتمع وأهميته على المدى الطويل. على الرغم من أنها ليست مقياسًا مباشرًا للجودة التقنية، إلا أنها تعكس عدد المطورين الذين يجدون المشروع مفيدًا ويتابعون تقدمه ومن المرجح أن يتبنوه. لتقدير قيمة المشروع، تساعد النجوم في مقارنة الإقبال عبر البدائل وتوفر رؤى حول نمو النظام البيئي.
|
|
388
|
+
|
|
389
|
+
[](https://star-history.com/#intlify/vue-i18n&aymericzip/intlayer)
|
|
239
390
|
|
|
240
391
|
## الخلاصة
|
|
241
392
|
|
|
@@ -244,4 +395,15 @@ const { greeting } = useIntlayer("component-example");
|
|
|
244
395
|
- مع **Intlayer**، يأتي **المحتوى المعياري**، و**TypeScript الصارم**، و**السلامة أثناء وقت البناء**، و**حزم معزولة من الشجرة (tree-shaken)**، و**أدوات التوجيه/SEO/المحرر** **مضمنة بشكل افتراضي**.
|
|
245
396
|
- إذا كانت أولويات فريقك هي **قابلية الصيانة والسرعة** في تطبيق Vue/Nuxt متعدد اللغات وموجه بالمكونات، فإن Intlayer يقدم **التجربة الأكثر اكتمالًا** اليوم.
|
|
246
397
|
|
|
247
|
-
|
|
398
|
+
## قراءات إضافية
|
|
399
|
+
|
|
400
|
+
- [vue-i18n vs Intlayer benchmark](https://intlayer.org/ar/blog/vue-i18n-vs-intlayer-benchmark), the measured run behind the table above
|
|
401
|
+
- [vue-i18n vs @intlayer/vue-i18n](https://intlayer.org/ar/blog/vue-i18n-vs-intlayer-vue-i18n), the adapter on the same app
|
|
402
|
+
- [Is vue-i18n outdated?](https://intlayer.org/ar/blog/is-vue-i18n-outdated)
|
|
403
|
+
- [How to pick a Vue i18n library](https://intlayer.org/ar/blog/how-to-pick-vue-i18n-library)
|
|
404
|
+
- [Using Intlayer with vue-i18n](https://intlayer.org/ar/blog/intlayer-with-vue-i18n)
|
|
405
|
+
- [Vue benchmark report](https://intlayer.org/ar/doc/benchmark/vue)
|
|
406
|
+
- [Migration guide: vue-i18n to Intlayer](https://intlayer.org/ar/doc/migration/vue-i18n)
|
|
407
|
+
- [Bundle optimization](https://intlayer.org/ar/doc/concept/bundle-optimization) and [the Intlayer compiler](https://intlayer.org/ar/doc/compiler)
|
|
408
|
+
|
|
409
|
+
Refer to ['Why Intlayer?' doc](https://intlayer.org/ar/doc/why) for more details.
|