@intlayer/docs 5.5.11 → 5.5.12

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.
Files changed (313) hide show
  1. package/blog/ar/intlayer_with_next-intl.md +0 -1
  2. package/blog/ar/list_i18n_technologies/CMS/wordpress.md +1 -1
  3. package/blog/ar/list_i18n_technologies/frameworks/angular.md +1 -1
  4. package/blog/ar/list_i18n_technologies/frameworks/flutter.md +1 -1
  5. package/blog/ar/list_i18n_technologies/frameworks/react-native.md +1 -1
  6. package/blog/ar/list_i18n_technologies/frameworks/react.md +1 -1
  7. package/blog/ar/list_i18n_technologies/frameworks/svelte.md +1 -1
  8. package/blog/ar/list_i18n_technologies/frameworks/vue.md +1 -1
  9. package/blog/ar/what_is_internationalization.md +2 -2
  10. package/blog/de/intlayer_with_next-intl.md +0 -1
  11. package/blog/de/list_i18n_technologies/CMS/wordpress.md +1 -1
  12. package/blog/de/list_i18n_technologies/frameworks/angular.md +1 -1
  13. package/blog/de/list_i18n_technologies/frameworks/flutter.md +1 -1
  14. package/blog/de/list_i18n_technologies/frameworks/react-native.md +1 -1
  15. package/blog/de/list_i18n_technologies/frameworks/react.md +1 -1
  16. package/blog/de/list_i18n_technologies/frameworks/svelte.md +1 -1
  17. package/blog/de/list_i18n_technologies/frameworks/vue.md +1 -1
  18. package/blog/de/what_is_internationalization.md +2 -2
  19. package/blog/en/intlayer_with_next-intl.md +0 -1
  20. package/blog/en/list_i18n_technologies/CMS/wordpress.md +1 -1
  21. package/blog/en/list_i18n_technologies/frameworks/angular.md +1 -1
  22. package/blog/en/list_i18n_technologies/frameworks/flutter.md +1 -1
  23. package/blog/en/list_i18n_technologies/frameworks/react-native.md +1 -1
  24. package/blog/en/list_i18n_technologies/frameworks/react.md +1 -1
  25. package/blog/en/list_i18n_technologies/frameworks/svelte.md +1 -1
  26. package/blog/en/list_i18n_technologies/frameworks/vue.md +1 -1
  27. package/blog/en/what_is_internationalization.md +2 -2
  28. package/blog/en-GB/intlayer_with_next-intl.md +0 -1
  29. package/blog/en-GB/list_i18n_technologies/CMS/wordpress.md +1 -1
  30. package/blog/en-GB/list_i18n_technologies/frameworks/angular.md +1 -1
  31. package/blog/en-GB/list_i18n_technologies/frameworks/flutter.md +1 -1
  32. package/blog/en-GB/list_i18n_technologies/frameworks/react-native.md +1 -1
  33. package/blog/en-GB/list_i18n_technologies/frameworks/svelte.md +1 -1
  34. package/blog/en-GB/list_i18n_technologies/frameworks/vue.md +1 -1
  35. package/blog/en-GB/what_is_internationalization.md +2 -2
  36. package/blog/es/intlayer_with_next-intl.md +0 -1
  37. package/blog/es/list_i18n_technologies/CMS/wordpress.md +1 -1
  38. package/blog/es/list_i18n_technologies/frameworks/angular.md +1 -1
  39. package/blog/es/list_i18n_technologies/frameworks/flutter.md +1 -1
  40. package/blog/es/list_i18n_technologies/frameworks/react-native.md +1 -1
  41. package/blog/es/list_i18n_technologies/frameworks/react.md +1 -1
  42. package/blog/es/list_i18n_technologies/frameworks/svelte.md +1 -1
  43. package/blog/es/list_i18n_technologies/frameworks/vue.md +1 -1
  44. package/blog/es/what_is_internationalization.md +2 -2
  45. package/blog/fr/intlayer_with_next-intl.md +0 -1
  46. package/blog/fr/list_i18n_technologies/CMS/wordpress.md +1 -1
  47. package/blog/fr/list_i18n_technologies/frameworks/angular.md +1 -1
  48. package/blog/fr/list_i18n_technologies/frameworks/flutter.md +1 -1
  49. package/blog/fr/list_i18n_technologies/frameworks/react-native.md +1 -1
  50. package/blog/fr/list_i18n_technologies/frameworks/react.md +1 -1
  51. package/blog/fr/list_i18n_technologies/frameworks/svelte.md +1 -1
  52. package/blog/fr/list_i18n_technologies/frameworks/vue.md +1 -1
  53. package/blog/fr/what_is_internationalization.md +2 -2
  54. package/blog/hi/list_i18n_technologies/CMS/wordpress.md +1 -1
  55. package/blog/hi/list_i18n_technologies/frameworks/angular.md +1 -1
  56. package/blog/hi/list_i18n_technologies/frameworks/flutter.md +1 -1
  57. package/blog/hi/list_i18n_technologies/frameworks/react-native.md +1 -1
  58. package/blog/hi/list_i18n_technologies/frameworks/react.md +1 -1
  59. package/blog/hi/list_i18n_technologies/frameworks/svelte.md +1 -1
  60. package/blog/hi/list_i18n_technologies/frameworks/vue.md +1 -1
  61. package/blog/hi/what_is_internationalization.md +2 -2
  62. package/blog/it/intlayer_with_next-intl.md +0 -1
  63. package/blog/it/list_i18n_technologies/CMS/wordpress.md +1 -1
  64. package/blog/it/list_i18n_technologies/frameworks/angular.md +1 -1
  65. package/blog/it/list_i18n_technologies/frameworks/react-native.md +1 -1
  66. package/blog/it/list_i18n_technologies/frameworks/react.md +1 -1
  67. package/blog/it/list_i18n_technologies/frameworks/svelte.md +1 -1
  68. package/blog/it/list_i18n_technologies/frameworks/vue.md +1 -1
  69. package/blog/it/what_is_internationalization.md +2 -2
  70. package/blog/ja/intlayer_with_next-intl.md +0 -1
  71. package/blog/ja/list_i18n_technologies/CMS/wordpress.md +1 -1
  72. package/blog/ja/list_i18n_technologies/frameworks/angular.md +1 -1
  73. package/blog/ja/list_i18n_technologies/frameworks/flutter.md +1 -1
  74. package/blog/ja/list_i18n_technologies/frameworks/react-native.md +1 -1
  75. package/blog/ja/list_i18n_technologies/frameworks/react.md +1 -1
  76. package/blog/ja/list_i18n_technologies/frameworks/svelte.md +1 -1
  77. package/blog/ja/list_i18n_technologies/frameworks/vue.md +1 -1
  78. package/blog/ja/what_is_internationalization.md +2 -2
  79. package/blog/ko/intlayer_with_next-intl.md +0 -1
  80. package/blog/ko/list_i18n_technologies/CMS/wordpress.md +1 -1
  81. package/blog/ko/list_i18n_technologies/frameworks/angular.md +1 -1
  82. package/blog/ko/list_i18n_technologies/frameworks/react-native.md +1 -1
  83. package/blog/ko/list_i18n_technologies/frameworks/react.md +1 -1
  84. package/blog/ko/list_i18n_technologies/frameworks/vue.md +1 -1
  85. package/blog/pt/intlayer_with_next-intl.md +0 -1
  86. package/blog/pt/list_i18n_technologies/CMS/wordpress.md +1 -1
  87. package/blog/pt/list_i18n_technologies/frameworks/angular.md +1 -1
  88. package/blog/pt/list_i18n_technologies/frameworks/flutter.md +1 -1
  89. package/blog/pt/list_i18n_technologies/frameworks/react-native.md +1 -1
  90. package/blog/pt/list_i18n_technologies/frameworks/react.md +1 -1
  91. package/blog/pt/list_i18n_technologies/frameworks/svelte.md +1 -1
  92. package/blog/pt/list_i18n_technologies/frameworks/vue.md +1 -1
  93. package/blog/pt/what_is_internationalization.md +2 -2
  94. package/blog/ru/intlayer_with_next-intl.md +0 -1
  95. package/blog/ru/list_i18n_technologies/CMS/wordpress.md +1 -1
  96. package/blog/ru/list_i18n_technologies/frameworks/angular.md +1 -1
  97. package/blog/ru/list_i18n_technologies/frameworks/flutter.md +1 -1
  98. package/blog/ru/list_i18n_technologies/frameworks/react-native.md +1 -1
  99. package/blog/ru/list_i18n_technologies/frameworks/react.md +1 -1
  100. package/blog/ru/list_i18n_technologies/frameworks/svelte.md +1 -1
  101. package/blog/ru/list_i18n_technologies/frameworks/vue.md +1 -1
  102. package/blog/ru/what_is_internationalization.md +2 -2
  103. package/blog/zh/intlayer_with_next-intl.md +0 -1
  104. package/blog/zh/list_i18n_technologies/CMS/wordpress.md +1 -1
  105. package/blog/zh/list_i18n_technologies/frameworks/angular.md +1 -1
  106. package/blog/zh/list_i18n_technologies/frameworks/flutter.md +1 -1
  107. package/blog/zh/list_i18n_technologies/frameworks/react-native.md +1 -1
  108. package/blog/zh/list_i18n_technologies/frameworks/react.md +1 -1
  109. package/blog/zh/list_i18n_technologies/frameworks/svelte.md +1 -1
  110. package/blog/zh/list_i18n_technologies/frameworks/vue.md +1 -1
  111. package/blog/zh/what_is_internationalization.md +2 -2
  112. package/dist/cjs/blog.cjs +2 -2
  113. package/dist/cjs/blog.cjs.map +1 -1
  114. package/dist/cjs/common.cjs +17 -6
  115. package/dist/cjs/common.cjs.map +1 -1
  116. package/dist/cjs/doc.cjs +2 -2
  117. package/dist/cjs/doc.cjs.map +1 -1
  118. package/dist/cjs/frequentQuestions.cjs +2 -2
  119. package/dist/cjs/frequentQuestions.cjs.map +1 -1
  120. package/dist/cjs/generated/blog.entry.cjs +1152 -252
  121. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  122. package/dist/cjs/generated/docs.entry.cjs +3778 -1124
  123. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  124. package/dist/cjs/generated/frequentQuestions.entry.cjs +794 -161
  125. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  126. package/dist/cjs/generated/legal.entry.cjs +32 -31
  127. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  128. package/dist/cjs/legal.cjs +2 -2
  129. package/dist/cjs/legal.cjs.map +1 -1
  130. package/dist/esm/blog.mjs +2 -2
  131. package/dist/esm/blog.mjs.map +1 -1
  132. package/dist/esm/common.mjs +17 -6
  133. package/dist/esm/common.mjs.map +1 -1
  134. package/dist/esm/doc.mjs +2 -2
  135. package/dist/esm/doc.mjs.map +1 -1
  136. package/dist/esm/frequentQuestions.mjs +2 -2
  137. package/dist/esm/frequentQuestions.mjs.map +1 -1
  138. package/dist/esm/generated/blog.entry.mjs +1151 -252
  139. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  140. package/dist/esm/generated/docs.entry.mjs +3777 -1124
  141. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  142. package/dist/esm/generated/frequentQuestions.entry.mjs +793 -161
  143. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  144. package/dist/esm/generated/legal.entry.mjs +31 -31
  145. package/dist/esm/generated/legal.entry.mjs.map +1 -1
  146. package/dist/esm/legal.mjs +2 -2
  147. package/dist/esm/legal.mjs.map +1 -1
  148. package/dist/types/blog.d.ts +2 -2
  149. package/dist/types/blog.d.ts.map +1 -1
  150. package/dist/types/common.d.ts +3 -2
  151. package/dist/types/common.d.ts.map +1 -1
  152. package/dist/types/doc.d.ts +2 -2
  153. package/dist/types/doc.d.ts.map +1 -1
  154. package/dist/types/frequentQuestions.d.ts +2 -2
  155. package/dist/types/frequentQuestions.d.ts.map +1 -1
  156. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  157. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  158. package/dist/types/generated/frequentQuestions.entry.d.ts +1 -0
  159. package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
  160. package/dist/types/generated/legal.entry.d.ts.map +1 -1
  161. package/dist/types/legal.d.ts +2 -2
  162. package/dist/types/legal.d.ts.map +1 -1
  163. package/docs/ar/intlayer_with_vite+react.md +100 -108
  164. package/docs/de/intlayer_with_vite+react.md +121 -142
  165. package/docs/en/CI_CD.md +3 -1
  166. package/docs/en/autoFill.md +3 -1
  167. package/docs/en/configuration.md +4 -1
  168. package/docs/en/dictionary/condition.md +3 -1
  169. package/docs/en/dictionary/content_extention_customization.md +3 -1
  170. package/docs/en/dictionary/enumeration.md +3 -1
  171. package/docs/en/dictionary/file.md +3 -1
  172. package/docs/en/dictionary/function_fetching.md +3 -1
  173. package/docs/en/dictionary/get_started.md +3 -1
  174. package/docs/en/dictionary/insertion.md +3 -1
  175. package/docs/en/dictionary/markdown.md +3 -1
  176. package/docs/en/dictionary/nesting.md +3 -1
  177. package/docs/en/dictionary/translation.md +3 -1
  178. package/docs/en/how_works_intlayer.md +3 -1
  179. package/docs/en/index.md +3 -1
  180. package/docs/en/interest_of_intlayer.md +3 -1
  181. package/docs/en/intlayer_CMS.md +3 -1
  182. package/docs/en/intlayer_cli.md +3 -1
  183. package/docs/en/intlayer_visual_editor.md +3 -1
  184. package/docs/en/intlayer_with_angular.md +3 -1
  185. package/docs/en/intlayer_with_create_react_app.md +3 -1
  186. package/docs/en/intlayer_with_express.md +3 -1
  187. package/docs/en/intlayer_with_lynx+react.md +3 -1
  188. package/docs/en/intlayer_with_nextjs_14.md +6 -1
  189. package/docs/en/intlayer_with_nextjs_15.md +5 -1
  190. package/docs/en/intlayer_with_nextjs_page_router.md +5 -1
  191. package/docs/en/intlayer_with_nuxt.md +3 -1
  192. package/docs/en/intlayer_with_react_native+expo.md +3 -1
  193. package/docs/en/intlayer_with_vite+preact.md +3 -1
  194. package/docs/en/intlayer_with_vite+react.md +9 -7
  195. package/docs/en/intlayer_with_vite+solid.md +3 -1
  196. package/docs/en/intlayer_with_vite+svelte.md +3 -1
  197. package/docs/en/intlayer_with_vite+vue.md +3 -1
  198. package/docs/en/introduction.md +3 -1
  199. package/docs/en/mcp_server.md +42 -1
  200. package/docs/en/packages/@intlayer/api/index.md +3 -1
  201. package/docs/en/packages/@intlayer/chokidar/index.md +3 -1
  202. package/docs/en/packages/@intlayer/cli/index.md +3 -1
  203. package/docs/en/packages/@intlayer/config/index.md +3 -1
  204. package/docs/en/packages/@intlayer/core/index.md +3 -1
  205. package/docs/en/packages/@intlayer/design-system/index.md +3 -1
  206. package/docs/en/packages/@intlayer/dictionary-entry/index.md +3 -1
  207. package/docs/en/packages/@intlayer/editor/index.md +3 -1
  208. package/docs/en/packages/@intlayer/editor-react/index.md +3 -1
  209. package/docs/en/packages/@intlayer/webpack/index.md +3 -1
  210. package/docs/en/packages/angular-intlayer/index.md +3 -1
  211. package/docs/en/packages/express-intlayer/index.md +3 -1
  212. package/docs/en/packages/express-intlayer/t.md +3 -1
  213. package/docs/en/packages/intlayer/getConfiguration.md +3 -1
  214. package/docs/en/packages/intlayer/getEnumeration.md +3 -1
  215. package/docs/en/packages/intlayer/getHTMLTextDir.md +3 -1
  216. package/docs/en/packages/intlayer/getLocaleLang.md +3 -1
  217. package/docs/en/packages/intlayer/getLocaleName.md +3 -1
  218. package/docs/en/packages/intlayer/getLocalizedUrl.md +3 -1
  219. package/docs/en/packages/intlayer/getMultilingualUrls.md +3 -1
  220. package/docs/en/packages/intlayer/getPathWithoutLocale.md +3 -1
  221. package/docs/en/packages/intlayer/getTranslation.md +3 -1
  222. package/docs/en/packages/intlayer/getTranslationContent.md +3 -1
  223. package/docs/en/packages/intlayer/index.md +3 -1
  224. package/docs/en/packages/intlayer-cli/index.md +3 -1
  225. package/docs/en/packages/intlayer-editor/index.md +3 -1
  226. package/docs/en/packages/lynx-intlayer/index.md +3 -1
  227. package/docs/en/packages/next-intlayer/index.md +3 -1
  228. package/docs/en/packages/next-intlayer/t.md +3 -1
  229. package/docs/en/packages/next-intlayer/useDictionary.md +3 -1
  230. package/docs/en/packages/next-intlayer/useIntlayer.md +3 -1
  231. package/docs/en/packages/next-intlayer/useIntlayerAsync.md +3 -1
  232. package/docs/en/packages/next-intlayer/useLocale.md +3 -1
  233. package/docs/en/packages/nuxt-intlayer/index.md +3 -1
  234. package/docs/en/packages/preact-intlayer/index.md +3 -1
  235. package/docs/en/packages/react-intlayer/index.md +3 -1
  236. package/docs/en/packages/react-intlayer/t.md +3 -1
  237. package/docs/en/packages/react-intlayer/useDictionary.md +3 -1
  238. package/docs/en/packages/react-intlayer/useIntlayer.md +3 -1
  239. package/docs/en/packages/react-intlayer/useIntlayerAsync.md +3 -1
  240. package/docs/en/packages/react-intlayer/useLocale.md +3 -1
  241. package/docs/en/packages/react-native-intlayer/index.md +3 -1
  242. package/docs/en/packages/react-scripts-intlayer/index.md +3 -1
  243. package/docs/en/packages/solid-intlayer/index.md +3 -1
  244. package/docs/en/packages/svelte-intlayer/index.md +3 -1
  245. package/docs/en/packages/vite-intlayer/index.md +3 -1
  246. package/docs/en/packages/vue-intlayer/index.md +3 -1
  247. package/docs/en/per_locale_file.md +3 -1
  248. package/docs/en/roadmap.md +5 -2
  249. package/docs/en/vs_code_extension.md +3 -1
  250. package/docs/en-GB/intlayer_with_vite+react.md +64 -83
  251. package/docs/es/intlayer_with_vite+react.md +91 -94
  252. package/docs/fr/intlayer_with_vite+react.md +73 -65
  253. package/docs/hi/intlayer_with_vite+react.md +107 -107
  254. package/docs/it/intlayer_with_vite+react.md +156 -112
  255. package/docs/ja/intlayer_with_vite+react.md +153 -218
  256. package/docs/ko/intlayer_with_vite+react.md +116 -148
  257. package/docs/ko/packages/intlayer/getLocalizedUrl.md +1 -23
  258. package/docs/pt/intlayer_with_vite+react.md +110 -132
  259. package/docs/ru/intlayer_with_vite+react.md +98 -83
  260. package/docs/zh/intlayer_with_vite+react.md +147 -184
  261. package/docs/zh/packages/intlayer/getLocalizedUrl.md +1 -23
  262. package/frequent_questions/ar/build_error_CI_CD.md +75 -0
  263. package/frequent_questions/de/build_error_CI_CD.md +75 -0
  264. package/frequent_questions/en/build_error_CI_CD.md +75 -0
  265. package/frequent_questions/en-GB/build_error_CI_CD.md +75 -0
  266. package/frequent_questions/es/build_error_CI_CD.md +75 -0
  267. package/frequent_questions/fr/build_error_CI_CD.md +75 -0
  268. package/frequent_questions/hi/build_error_CI_CD.md +75 -0
  269. package/frequent_questions/it/build_error_CI_CD.md +75 -0
  270. package/frequent_questions/ja/build_error_CI_CD.md +75 -0
  271. package/frequent_questions/ja/intlayer_command_undefined.md +3 -3
  272. package/frequent_questions/ko/build_error_CI_CD.md +75 -0
  273. package/frequent_questions/ko/intlayer_command_undefined.md +3 -3
  274. package/frequent_questions/pt/build_error_CI_CD.md +75 -0
  275. package/frequent_questions/ru/build_error_CI_CD.md +75 -0
  276. package/frequent_questions/zh/build_error_CI_CD.md +75 -0
  277. package/frequent_questions/zh/intlayer_command_undefined.md +3 -3
  278. package/legal/ar/privacy_notice.md +83 -0
  279. package/legal/ar/terms_of_service.md +55 -0
  280. package/legal/de/privacy_notice.md +83 -0
  281. package/legal/de/terms_of_service.md +55 -0
  282. package/legal/en/privacy_notice.md +83 -0
  283. package/legal/en/terms_of_service.md +55 -0
  284. package/legal/en-GB/privacy_notice.md +83 -0
  285. package/legal/en-GB/terms_of_service.md +55 -0
  286. package/legal/es/privacy_notice.md +83 -0
  287. package/legal/es/terms_of_service.md +55 -0
  288. package/legal/fr/privacy_notice.md +83 -0
  289. package/legal/fr/terms_of_service.md +55 -0
  290. package/legal/hi/privacy_notice.md +83 -0
  291. package/legal/hi/terms_of_service.md +55 -0
  292. package/legal/it/privacy_notice.md +83 -0
  293. package/legal/it/terms_of_service.md +55 -0
  294. package/legal/ja/privacy_notice.md +83 -0
  295. package/legal/ja/terms_of_service.md +55 -0
  296. package/legal/ko/privacy_notice.md +83 -0
  297. package/legal/ko/terms_of_service.md +55 -0
  298. package/legal/pt/privacy_notice.md +83 -0
  299. package/legal/pt/terms_of_service.md +55 -0
  300. package/legal/ru/privacy_notice.md +83 -0
  301. package/legal/ru/terms_of_service.md +55 -0
  302. package/legal/zh/privacy_notice.md +83 -0
  303. package/legal/zh/terms_of_service.md +55 -0
  304. package/package.json +7 -6
  305. package/src/blog.ts +6 -4
  306. package/src/common.ts +23 -7
  307. package/src/doc.ts +6 -4
  308. package/src/frequentQuestions.ts +6 -4
  309. package/src/generated/blog.entry.ts +1177 -280
  310. package/src/generated/docs.entry.ts +3868 -1217
  311. package/src/generated/frequentQuestions.entry.ts +808 -178
  312. package/src/generated/legal.entry.ts +34 -36
  313. package/src/legal.ts +6 -4
@@ -1,25 +1,25 @@
1
1
  ---
2
- createdAt: 2025-03-07
3
- updatedAt: 2025-06-29
4
- title: ترجمة تطبيق React Native و Expo المحمول الخاص بك (i18n)
5
- description: اكتشف كيفية جعل تطبيق React Native و Expo المحمول الخاص بك متعدد اللغات. اتبع الوثائق لتدويل (i18n) وترجمته.
2
+ createdAt: 2024-03-07
3
+ updatedAt: 2024-03-07
4
+ title: البدء مع Intlayer في Vite + React
5
+ description: تعلّم كيفية إضافة التدويل (i18n) إلى تطبيق Vite و React الخاص بك باستخدام Intlayer. اتبع هذا الدليل لجعل تطبيقك متعدد اللغات.
6
6
  keywords:
7
7
  - التدويل
8
- - الوثائق
8
+ - التوثيق
9
9
  - Intlayer
10
10
  - Vite
11
11
  - React
12
- - React Native
12
+ - i18n
13
13
  - جافا سكريبت
14
14
  slugs:
15
15
  - doc
16
16
  - environment
17
- - react-native-and-expo
17
+ - vite-and-react
18
18
  ---
19
19
 
20
20
  # البدء في التدويل (i18n) باستخدام Intlayer و Vite و React
21
21
 
22
- راجع [قالب التطبيق](https://github.com/aymericzip/intlayer-vite-react-template) على GitHub.
22
+ راجع [نموذج التطبيق](https://github.com/aymericzip/intlayer-vite-react-template) على GitHub.
23
23
 
24
24
  ## ما هو Intlayer؟
25
25
 
@@ -28,8 +28,8 @@ slugs:
28
28
  مع Intlayer، يمكنك:
29
29
 
30
30
  - **إدارة الترجمات بسهولة** باستخدام القواميس التصريحية على مستوى المكونات.
31
- - **توطين البيانات الوصفية والمسارات والمحتوى بشكل ديناميكي**.
32
- - **ضمان دعم TypeScript** من خلال الأنواع المولدة تلقائيًا، مما يحسن الإكمال التلقائي واكتشاف الأخطاء.
31
+ - **توطين البيانات الوصفية والمسارات والمحتوى ديناميكيًا**.
32
+ - **ضمان دعم TypeScript** مع الأنواع التي يتم إنشاؤها تلقائيًا، مما يحسن الإكمال التلقائي واكتشاف الأخطاء.
33
33
  - **الاستفادة من الميزات المتقدمة**، مثل الكشف الديناميكي عن اللغة وتبديلها.
34
34
 
35
35
  ---
@@ -60,14 +60,14 @@ yarn add --save-dev vite-intlayer
60
60
  الحزمة الأساسية التي توفر أدوات التدويل لإدارة التكوين، والترجمة، و[إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/get_started.md)، والترجمة البرمجية، و[أوامر CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/intlayer_cli.md).
61
61
 
62
62
  - **react-intlayer**
63
- الحزمة التي تدمج Intlayer مع تطبيق React. توفر موفري السياق والهوكات لتدويل React.
63
+ الحزمة التي تدمج Intlayer مع تطبيق React. توفر مزودي السياق (context providers) وخطافات (hooks) لتدويل React.
64
64
 
65
65
  - **vite-intlayer**
66
- تتضمن إضافة Vite لدمج Intlayer مع [مجمّع Vite](https://vite.dev/guide/why.html#why-bundle-for-production)، بالإضافة إلى وسيط برمجي لاكتشاف اللغة المفضلة للمستخدم، وإدارة الكوكيز، والتعامل مع إعادة توجيه عناوين URL.
66
+ تتضمن إضافة Vite لدمج Intlayer مع [مجمّع Vite](https://vite.dev/guide/why.html#why-bundle-for-production)، بالإضافة إلى وسيط (middleware) لاكتشاف اللغة المفضلة للمستخدم، وإدارة الكوكيز، والتعامل مع إعادة توجيه URL.
67
67
 
68
68
  ### الخطوة 2: تكوين مشروعك
69
69
 
70
- أنشئ ملف تكوين لتحديد لغات تطبيقك:
70
+ قم بإنشاء ملف تكوين لتحديد لغات تطبيقك:
71
71
 
72
72
  ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
73
73
  import { Locales, type IntlayerConfig } from "intlayer";
@@ -78,7 +78,7 @@ const config: IntlayerConfig = {
78
78
  Locales.ENGLISH,
79
79
  Locales.FRENCH,
80
80
  Locales.SPANISH,
81
- // لغات أخرى خاصة بك
81
+ // لغاتك الأخرى
82
82
  ],
83
83
  defaultLocale: Locales.ENGLISH,
84
84
  },
@@ -91,14 +91,13 @@ export default config;
91
91
  import { Locales } from "intlayer";
92
92
 
93
93
  /** @type {import('intlayer').IntlayerConfig} */
94
- // تكوين إعدادات التدويل
95
94
  const config = {
96
95
  internationalization: {
97
96
  locales: [
98
97
  Locales.ENGLISH,
99
98
  Locales.FRENCH,
100
99
  Locales.SPANISH,
101
- // لغات أخرى خاصة بك
100
+ // لغاتك الأخرى
102
101
  ],
103
102
  defaultLocale: Locales.ENGLISH,
104
103
  },
@@ -111,14 +110,13 @@ export default config;
111
110
  const { Locales } = require("intlayer");
112
111
 
113
112
  /** @type {import('intlayer').IntlayerConfig} */
114
- // تكوين إعدادات التدويل
115
113
  const config = {
116
114
  internationalization: {
117
115
  locales: [
118
116
  Locales.ENGLISH,
119
117
  Locales.FRENCH,
120
118
  Locales.SPANISH,
121
- // لغات أخرى خاصة بك
119
+ // لغاتك الأخرى
122
120
  ],
123
121
  defaultLocale: Locales.ENGLISH,
124
122
  },
@@ -127,11 +125,11 @@ const config = {
127
125
  module.exports = config;
128
126
  ```
129
127
 
130
- > من خلال ملف التكوين هذا، يمكنك إعداد عناوين URL محلية، إعادة توجيه الوسيط، أسماء ملفات تعريف الارتباط، موقع وامتداد إعلانات المحتوى الخاصة بك، تعطيل سجلات Intlayer في وحدة التحكم، والمزيد. للحصول على قائمة كاملة بالمعلمات المتاحة، راجع [وثائق التكوين](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md).
128
+ > من خلال ملف التهيئة هذا، يمكنك إعداد عناوين URL محلية، وإعادة توجيه الوسيط، وأسماء ملفات تعريف الارتباط، وموقع وامتداد إعلانات المحتوى الخاصة بك، وتعطيل سجلات Intlayer في وحدة التحكم، والمزيد. للحصول على قائمة كاملة بالمعلمات المتاحة، راجع [توثيق التهيئة](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md).
131
129
 
132
- ### الخطوة 3: دمج Intlayer في تكوين Vite الخاص بك
130
+ ### الخطوة 3: دمج Intlayer في تهيئة Vite الخاصة بك
133
131
 
134
- أضف مكون intlayer الإضافي إلى تكوينك.
132
+ أضف مكون intlayer الإضافي إلى تهيئتك.
135
133
 
136
134
  ```typescript fileName="vite.config.ts" codeFormat="typescript"
137
135
  import { defineConfig } from "vite";
@@ -166,9 +164,9 @@ module.exports = defineConfig({
166
164
  });
167
165
  ```
168
166
 
169
- > يتم استخدام مكون Vite الإضافي `intlayerPlugin()` لدمج Intlayer مع Vite. يضمن بناء ملفات إعلان المحتوى ويراقبها في وضع التطوير. كما يحدد متغيرات بيئة Intlayer داخل تطبيق Vite. بالإضافة إلى ذلك، يوفر أسماء مستعارة لتحسين الأداء.
167
+ > يتم استخدام مكون Vite الإضافي `intlayerPlugin()` لدمج Intlayer مع Vite. يضمن بناء ملفات إعلان المحتوى ويراقبها في وضع التطوير. كما يعرّف متغيرات بيئة Intlayer داخل تطبيق Vite. بالإضافة إلى ذلك، يوفر أسماء مستعارة لتحسين الأداء.
170
168
 
171
- ### الخطوة 4: أعلن عن محتواك
169
+ ### الخطوة 4: إعلان المحتوى الخاص بك
172
170
 
173
171
  قم بإنشاء وإدارة إعلانات المحتوى الخاصة بك لتخزين الترجمات:
174
172
 
@@ -187,13 +185,13 @@ const appContent = {
187
185
  reactLogo: t({
188
186
  en: "React logo",
189
187
  fr: "Logo React",
190
- es: "شعار React",
188
+ es: "Logo React",
191
189
  }),
192
190
 
193
191
  title: "Vite + React",
194
192
 
195
193
  count: t({
196
- en: "العدد هو ",
194
+ en: "count is ",
197
195
  fr: "le compte est ",
198
196
  es: "el recuento es ",
199
197
  }),
@@ -235,12 +233,12 @@ const appContent = {
235
233
  key: "app",
236
234
  content: {
237
235
  viteLogo: t({
238
- en: "شعار Vite",
236
+ en: "Vite logo",
239
237
  fr: "Logo Vite",
240
238
  es: "Logo Vite",
241
239
  }),
242
240
  reactLogo: t({
243
- en: "شعار React",
241
+ en: "React logo",
244
242
  fr: "Logo React",
245
243
  es: "Logo React",
246
244
  }),
@@ -248,7 +246,7 @@ const appContent = {
248
246
  title: "Vite + React",
249
247
 
250
248
  count: t({
251
- en: "العدد هو ",
249
+ en: "count is ",
252
250
  fr: "le compte est ",
253
251
  es: "el recuento es ",
254
252
  }),
@@ -257,7 +255,7 @@ const appContent = {
257
255
  t <
258
256
  ReactNode >
259
257
  {
260
- // لا تنسَ استيراد React إذا كنت تستخدم عقدة React في المحتوى الخاص بك
258
+ // لا تنس استيراد React إذا كنت تستخدم عقدة React في المحتوى الخاص بك
261
259
  en: (
262
260
  <>
263
261
  Edit <code>src/App.tsx</code> and save to test HMR
@@ -270,13 +268,13 @@ const appContent = {
270
268
  ),
271
269
  es: (
272
270
  <>
273
- حرر <code>src/App.tsx</code> واحفظ لاختبار HMR
271
+ Edita <code>src/App.tsx</code> y guarda para probar HMR
274
272
  </>
275
273
  ),
276
274
  },
277
275
 
278
276
  readTheDocs: t({
279
- en: "Click on the Vite and React logos to learn more",
277
+ en: "انقر على شعارات Vite و React لمعرفة المزيد",
280
278
  fr: "Cliquez sur les logos Vite et React pour en savoir plus",
281
279
  es: "Haga clic en los logotipos de Vite y React para obtener más información",
282
280
  }),
@@ -297,13 +295,11 @@ const appContent = {
297
295
  en: "Vite logo",
298
296
  fr: "Logo Vite",
299
297
  es: "Logo Vite",
300
- ar: "شعار Vite",
301
298
  }),
302
299
  reactLogo: t({
303
300
  en: "React logo",
304
301
  fr: "Logo React",
305
302
  es: "Logo React",
306
- ar: "شعار React",
307
303
  }),
308
304
 
309
305
  title: "Vite + React",
@@ -312,7 +308,6 @@ const appContent = {
312
308
  en: "count is ",
313
309
  fr: "le compte est ",
314
310
  es: "el recuento es ",
315
- ar: "العدد هو ",
316
311
  }),
317
312
 
318
313
  edit:
@@ -332,16 +327,15 @@ const appContent = {
332
327
  ),
333
328
  es: (
334
329
  <>
335
- Edita <code>src/App.tsx</code> y guarda para probar HMR
330
+ Edita <code>src/App.tsx</code> و احفظ لتجربة HMR
336
331
  </>
337
332
  ),
338
333
  },
339
334
 
340
335
  readTheDocs: t({
341
- en: "Click on the Vite and React logos to learn more",
336
+ en: "انقر على شعارات Vite و React لمعرفة المزيد",
342
337
  fr: "Cliquez sur les logos Vite et React pour en savoir plus",
343
338
  es: "Haga clic en los logotipos de Vite y React para obtener más información",
344
- ar: "انقر على شعارات Vite و React لمعرفة المزيد",
345
339
  }),
346
340
  },
347
341
  };
@@ -359,8 +353,7 @@ module.exports = appContent;
359
353
  "translation": {
360
354
  "en": "Vite logo",
361
355
  "fr": "Logo Vite",
362
- "es": "Logo Vite",
363
- "ar": "شعار Vite"
356
+ "es": "Logo Vite"
364
357
  }
365
358
  },
366
359
  "reactLogo": {
@@ -412,13 +405,13 @@ module.exports = appContent;
412
405
  }
413
406
  ```
414
407
 
415
- > يمكن تعريف إعلانات المحتوى الخاصة بك في أي مكان في تطبيقك بمجرد تضمينها في دليل `contentDir` (افتراضيًا، `./src`). ويجب أن تتطابق مع امتداد ملف إعلان المحتوى (افتراضيًا، `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
408
+ > يمكن تعريف إعلانات المحتوى الخاصة بك في أي مكان في تطبيقك بمجرد تضمينها في دليل `contentDir` (افتراضيًا، `./src`). ويجب أن تطابق امتداد ملف إعلان المحتوى (افتراضيًا، `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
416
409
 
417
410
  > لمزيد من التفاصيل، راجع [توثيق إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/get_started.md).
418
411
 
419
- > إذا كان ملف المحتوى الخاص بك يتضمن كود TSX، فيجب أن تفكر في استيراد `import React from "react";` في ملف المحتوى الخاص بك.
412
+ > إذا كان ملف المحتوى الخاص بك يتضمن كود TSX، يجب أن تفكر في استيراد `import React from "react";` في ملف المحتوى الخاص بك.
420
413
 
421
- ### الخطوة 5: استخدام Intlayer في كودك
414
+ ### الخطوة 5: استخدام Intlayer في الكود الخاص بك
422
415
 
423
416
  قم بالوصول إلى قواميس المحتوى الخاصة بك في جميع أنحاء تطبيقك:
424
417
 
@@ -563,7 +556,7 @@ const App = () => (
563
556
  module.exports = App;
564
557
  ```
565
558
 
566
- > إذا كنت تريد استخدام المحتوى الخاص بك في خاصية من نوع `string`، مثل `alt`، `title`، `href`، `aria-label`، إلخ، يجب عليك استدعاء قيمة الدالة، مثل:
559
+ > إذا كنت ترغب في استخدام المحتوى الخاص بك في خاصية من نوع `string`، مثل `alt`، `title`، `href`، `aria-label`، إلخ، يجب عليك استدعاء قيمة الدالة، مثل:
567
560
 
568
561
  > ```jsx
569
562
  > <img src={content.image.src.value} alt={content.image.value} />
@@ -634,30 +627,30 @@ const LocaleSwitcher = () => {
634
627
  - https://example.com/fr/about
635
628
  ```
636
629
 
637
- > بشكل افتراضي، لا يتم إضافة بادئة للمسارات للغة الافتراضية. إذا كنت ترغب في إضافة بادئة للغة الافتراضية، يمكنك تعيين الخيار `middleware.prefixDefault` إلى `true` في تكوينك. راجع [توثيق التكوين](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md) لمزيد من المعلومات.
630
+ > بشكل افتراضي، لا يتم إضافة بادئة للمسارات للغة الافتراضية. إذا كنت ترغب في إضافة بادئة للغة الافتراضية، يمكنك تعيين الخيار `middleware.prefixDefault` إلى `true` في إعداداتك. راجع [توثيق الإعدادات](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md) لمزيد من المعلومات.
638
631
 
639
- لإضافة التوجيه المحلي إلى تطبيقك، يمكنك إنشاء مكون `LocaleRouter` الذي يلف مسارات تطبيقك ويتعامل مع التوجيه بناءً على اللغة. إليك مثال باستخدام [React Router](https://reactrouter.com/home):
632
+ لإضافة التوجيه المحلي إلى تطبيقك، يمكنك إنشاء مكون `LocaleRouter` الذي يلف مسارات تطبيقك ويتعامل مع التوجيه بناءً على اللغة. إليك مثالًا باستخدام [React Router](https://reactrouter.com/home):
640
633
 
641
634
  ```tsx fileName="src/components/LocaleRouter.tsx" codeFormat="typescript"
642
635
  // استيراد التبعيات والوظائف اللازمة
643
636
  import { type Locales, configuration, getPathWithoutLocale } from "intlayer"; // دوال مساعدة وأنواع من 'intlayer'
644
637
  import type { FC, PropsWithChildren } from "react"; // أنواع React للمكونات الوظيفية والخصائص
645
- import { IntlayerProvider } from "react-intlayer"; // موفر سياق التدويل
638
+ import { IntlayerProvider } from "react-intlayer"; // مزود سياق التدويل
646
639
  import {
647
640
  BrowserRouter,
648
641
  Routes,
649
642
  Route,
650
643
  Navigate,
651
644
  useLocation,
652
- } from "react-router-dom"; // مكونات الراوتر لإدارة التنقل
645
+ } from "react-router-dom"; // مكونات الموجه لإدارة التنقل
653
646
 
654
- // تفكيك التهيئة من Intlayer
647
+ // تفكيك التكوين من Intlayer
655
648
  const { internationalization, middleware } = configuration;
656
649
  const { locales, defaultLocale } = internationalization;
657
650
 
658
651
  /**
659
652
  * مكون يتعامل مع التدويل ويغلف الأطفال بسياق اللغة المناسب.
660
- * يدير اكتشاف اللغة بناءً على عنوان URL والتحقق من صحتها.
653
+ * يدير اكتشاف اللغة بناءً على عنوان URL والتحقق منها.
661
654
  */
662
655
  const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
663
656
  children,
@@ -688,7 +681,7 @@ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
688
681
  );
689
682
  }
690
683
 
691
- // تغليف العناصر الفرعية بمزود Intlayer وتعيين اللغة الحالية
684
+ // تغليف العناصر الفرعية بـ IntlayerProvider وتعيين اللغة الحالية
692
685
  return (
693
686
  <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
694
687
  );
@@ -737,7 +730,7 @@ export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
737
730
  ))}
738
731
 
739
732
  {
740
- // إذا كان تعطيل إضافة بادئة اللغة الافتراضية، يتم عرض الأطفال مباشرة في المسار الجذري
733
+ // إذا كان تعطيل بادئة اللغة الافتراضية، يتم عرض الأطفال مباشرة في المسار الجذري
741
734
  !middleware.prefixDefault && (
742
735
  <Route
743
736
  path="*"
@@ -754,8 +747,8 @@ export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
754
747
 
755
748
  ```jsx fileName="src/components/LocaleRouter.mjx" codeFormat="esm"
756
749
  // استيراد التبعيات والوظائف اللازمة
757
- import { configuration, getPathWithoutLocale } from "intlayer"; // وظائف مساعدة وأنواع من 'intlayer'
758
- // وظائف مساعدة وأنواع من 'intlayer'
750
+ import { configuration, getPathWithoutLocale } from "intlayer"; // وظائف وأصناف مساعدة من 'intlayer'
751
+ // وظائف وأصناف مساعدة من 'intlayer'
759
752
  import { IntlayerProvider } from "react-intlayer"; // مزود لسياق التدويل
760
753
  import {
761
754
  BrowserRouter,
@@ -763,7 +756,7 @@ import {
763
756
  Route,
764
757
  Navigate,
765
758
  useLocation,
766
- } from "react-router-dom"; // مكونات الراوتر لإدارة التنقل
759
+ } from "react-router-dom"; // مكونات الموجه لإدارة التنقل
767
760
 
768
761
  // تفكيك التكوين من Intlayer
769
762
  const { internationalization, middleware } = configuration;
@@ -771,8 +764,7 @@ const { locales, defaultLocale } = internationalization;
771
764
 
772
765
  /**
773
766
  * مكون يتعامل مع التدويل ويغلف الأطفال بسياق اللغة المناسب.
774
- /**
775
- * يدير الكشف عن اللغة بناءً على عنوان URL والتحقق من صحتها.
767
+ * يدير اكتشاف اللغة بناءً على عنوان URL والتحقق من صحتها.
776
768
  */
777
769
  const AppLocalized = ({ children, locale }) => {
778
770
  const { pathname, search } = useLocation(); // الحصول على مسار URL الحالي
@@ -780,7 +772,7 @@ const AppLocalized = ({ children, locale }) => {
780
772
  // تحديد اللغة الحالية، والرجوع إلى اللغة الافتراضية إذا لم يتم توفيرها
781
773
  const currentLocale = locale ?? defaultLocale;
782
774
 
783
- // إزالة بادئة اللغة من المسار لإنشاء مسار أساسي
775
+ // إزالة بادئة اللغة من المسار لبناء مسار أساسي
784
776
  const pathWithoutLocale = getPathWithoutLocale(
785
777
  pathname // مسار URL الحالي
786
778
  );
@@ -795,7 +787,7 @@ const AppLocalized = ({ children, locale }) => {
795
787
  return (
796
788
  <Navigate
797
789
  to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
798
- replace // استبدال الإدخال الحالي في السجل بالإدخال الجديد
790
+ replace // استبدال إدخال السجل الحالي بالإدخال الجديد
799
791
  />
800
792
  );
801
793
  }
@@ -807,7 +799,7 @@ const AppLocalized = ({ children, locale }) => {
807
799
  } else {
808
800
  /**
809
801
  * عندما تكون middleware.prefixDefault خاطئة، لا يتم إضافة بادئة للغة الافتراضية.
810
- * التأكد من أن اللغة الحالية صالحة وليست اللغة الافتراضية.
802
+ * تأكد من أن اللغة الحالية صالحة وليست اللغة الافتراضية.
811
803
  */
812
804
  if (
813
805
  currentLocale.toString() !== defaultLocale.toString() &&
@@ -830,7 +822,7 @@ const AppLocalized = ({ children, locale }) => {
830
822
 
831
823
  /**
832
824
  * مكون راوتر يقوم بإعداد مسارات خاصة بكل لغة.
833
- * يستخدم React Router لإدارة التنقل وعرض المكونات المترجمة.
825
+ * يستخدم React Router لإدارة التنقل وعرض المكونات المحلية.
834
826
  */
835
827
  export const LocaleRouter = ({ children }) => (
836
828
  <BrowserRouter>
@@ -841,7 +833,7 @@ export const LocaleRouter = ({ children }) => (
841
833
  )
842
834
  .map((locale) => (
843
835
  <Route
844
- // نمط المسار لالتقاط اللغة (مثل /en/، /fr/) ومطابقة جميع المسارات اللاحقة
836
+ // نمط المسار لالتقاط اللغة (مثل /en/، /fr/) ومطابقة جميع المسارات التالية
845
837
  path={`/${locale}/*`}
846
838
  key={locale}
847
839
  element={<AppLocalized locale={locale}>{children}</AppLocalized>} // يلف الأطفال بإدارة اللغة
@@ -866,8 +858,8 @@ export const LocaleRouter = ({ children }) => (
866
858
 
867
859
  ```jsx fileName="src/components/LocaleRouter.cjx" codeFormat="commonjs"
868
860
  // استيراد التبعيات والوظائف اللازمة
869
- const { configuration, getPathWithoutLocale } = require("intlayer"); // وظائف وأدوات مساعدة من 'intlayer'
870
- const { IntlayerProvider, useLocale } = require("react-intlayer"); // مزود سياق التدويل
861
+ const { configuration, getPathWithoutLocale } = require("intlayer"); // وظائف مساعدة وأنواع من 'intlayer'
862
+ const { IntlayerProvider, useLocale } = require("react-intlayer"); // موفر لسياق التدويل
871
863
  const {
872
864
  BrowserRouter,
873
865
  Routes,
@@ -882,7 +874,7 @@ const { locales, defaultLocale } = internationalization;
882
874
 
883
875
  /**
884
876
  * مكون يتعامل مع التدويل ويغلف الأطفال بسياق اللغة المناسب.
885
- * يدير اكتشاف اللغة عبر عنوان URL والتحقق من صحتها.
877
+ * يدير اكتشاف اللغة بناءً على عنوان URL والتحقق منها.
886
878
  */
887
879
  const AppLocalized = ({ children, locale }) => {
888
880
  const { pathname, search } = useLocation(); // الحصول على مسار URL الحالي
@@ -910,13 +902,13 @@ const AppLocalized = ({ children, locale }) => {
910
902
  );
911
903
  }
912
904
 
913
- // لف العناصر الفرعية بمزود Intlayer وتعيين اللغة الحالية
905
+ // تغليف العناصر الفرعية بمزود Intlayer وتعيين اللغة الحالية
914
906
  return (
915
907
  <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
916
908
  );
917
909
  } else {
918
910
  /**
919
- * عندما تكون middleware.prefixDefault خاطئة، لا يتم إضافة بادئة اللغة الافتراضية.
911
+ * عندما تكون middleware.prefixDefault خاطئة، لا يتم إضافة بادئة للغة الافتراضية.
920
912
  * تأكد من أن اللغة الحالية صالحة وليست اللغة الافتراضية.
921
913
  */
922
914
  if (
@@ -940,7 +932,7 @@ const AppLocalized = ({ children, locale }) => {
940
932
 
941
933
  /**
942
934
  * مكون راوتر يقوم بإعداد مسارات خاصة بكل لغة.
943
- * يستخدم React Router لإدارة التنقل وعرض المكونات المحلية.
935
+ * يستخدم React Router لإدارة التنقل وعرض المكونات المترجمة.
944
936
  */
945
937
  const LocaleRouter = ({ children }) => (
946
938
  <BrowserRouter>
@@ -959,7 +951,7 @@ const LocaleRouter = ({ children }) => (
959
951
  ))}
960
952
 
961
953
  {
962
- // إذا تم تعطيل إضافة بادئة اللغة الافتراضية، قم بعرض الأطفال مباشرة في المسار الجذري
954
+ // إذا تم تعطيل إضافة بادئة اللغة الافتراضية، يتم عرض الأطفال مباشرة في المسار الجذري
963
955
  !middleware.prefixDefault && (
964
956
  <Route
965
957
  path="*"
@@ -1013,7 +1005,7 @@ const App = () => (
1013
1005
  );
1014
1006
  ```
1015
1007
 
1016
- بالتوازي، يمكنك أيضًا استخدام `intLayerMiddlewarePlugin` لإضافة التوجيه من جانب الخادم إلى تطبيقك. سيقوم هذا المكون الإضافي تلقائيًا بالكشف عن اللغة الحالية بناءً على عنوان URL وتعيين ملف تعريف الارتباط المناسب للغة. إذا لم يتم تحديد لغة، سيحدد المكون الإضافي اللغة الأنسب بناءً على تفضيلات لغة متصفح المستخدم. إذا لم يتم الكشف عن أي لغة، فسيتم إعادة التوجيه إلى اللغة الافتراضية.
1008
+ بالتوازي، يمكنك أيضًا استخدام `intLayerMiddlewarePlugin` لإضافة التوجيه من جانب الخادم إلى تطبيقك. سيقوم هذا المكون الإضافي بالكشف تلقائيًا عن اللغة الحالية بناءً على عنوان URL وتعيين ملف تعريف الارتباط المناسب للغة. إذا لم يتم تحديد لغة، فسيحدد المكون الإضافي اللغة الأنسب بناءً على تفضيلات لغة متصفح المستخدم. إذا لم يتم الكشف عن أي لغة، فسيتم إعادة التوجيه إلى اللغة الافتراضية.
1017
1009
 
1018
1010
  ```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
1019
1011
  import { defineConfig } from "vite";
@@ -1050,7 +1042,7 @@ module.exports = defineConfig({
1050
1042
 
1051
1043
  ### (اختياري) الخطوة 8: تغيير عنوان URL عند تغيير اللغة
1052
1044
 
1053
- لتغيير عنوان URL عند تغيير اللغة، يمكنك استخدام الخاصية `onLocaleChange` المقدمة من الخطاف `useLocale`. بالتوازي، يمكنك استخدام الخطافين `useLocation` و `useNavigate` من مكتبة `react-router-dom` لتحديث مسار عنوان URL.
1045
+ لتغيير عنوان URL عند تغيير اللغة، يمكنك استخدام الخاصية `onLocaleChange` المقدمة من الخطاف `useLocale`. وبالتوازي، يمكنك استخدام الخطافين `useLocation` و `useNavigate` من مكتبة `react-router-dom` لتحديث مسار عنوان URL.
1054
1046
 
1055
1047
  ```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
1056
1048
  import { useLocation, useNavigate } from "react-router-dom";
@@ -1094,15 +1086,15 @@ const LocaleSwitcher: FC = () => {
1094
1086
  key={localeItem}
1095
1087
  >
1096
1088
  <span>
1097
- {/* اللغة المحلية - مثلاً FR */}
1089
+ {/* اللغة - مثلاً FR */}
1098
1090
  {localeItem}
1099
1091
  </span>
1100
1092
  <span>
1101
- {/* اللغة بلغتها المحلية - مثلاً Français */}
1093
+ {/* اللغة بلغتها الأصلية - مثلاً Français */}
1102
1094
  {getLocaleName(localeItem, locale)}
1103
1095
  </span>
1104
1096
  <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
1105
- {/* اللغة باللغة المحلية الحالية - مثلاً Francés مع تعيين اللغة الحالية إلى Locales.SPANISH */}
1097
+ {/* اللغة باللغة الحالية - مثلاً Francés مع تعيين اللغة الحالية إلى Locales.SPANISH */}
1106
1098
  {getLocaleName(localeItem)}
1107
1099
  </span>
1108
1100
  <span dir="ltr" lang={Locales.ENGLISH}>
@@ -1222,19 +1214,19 @@ const LocaleSwitcher = () => {
1222
1214
  key={localeItem}
1223
1215
  >
1224
1216
  <span>
1225
- {/* اللغة المحلية - على سبيل المثال FR */}
1217
+ {/* اللغة المحلية - مثل FR */}
1226
1218
  {localeItem}
1227
1219
  </span>
1228
1220
  <span>
1229
- {/* اللغة بلغتها المحلية - على سبيل المثال Français */}
1221
+ {/* اللغة بلغتها المحلية - مثل Français */}
1230
1222
  {getLocaleName(localeItem, locale)}
1231
1223
  </span>
1232
1224
  <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
1233
- {/* اللغة في اللغة الحالية - على سبيل المثال Francés مع تعيين اللغة الحالية إلى Locales.SPANISH */}
1225
+ {/* اللغة باللغة المحلية الحالية - مثل Francés مع تعيين اللغة الحالية إلى Locales.SPANISH */}
1234
1226
  {getLocaleName(localeItem)}
1235
1227
  </span>
1236
1228
  <span dir="ltr" lang={Locales.ENGLISH}>
1237
- {/* اللغة بالإنجليزية - على سبيل المثال French */}
1229
+ {/* اللغة بالإنجليزية - على سبيل المثال الفرنسية */}
1238
1230
  {getLocaleName(localeItem, Locales.ENGLISH)}
1239
1231
  </span>
1240
1232
  </a>
@@ -1256,7 +1248,7 @@ const LocaleSwitcher = () => {
1256
1248
  > - [`dir` attribute`](https://developer.mozilla.org/ar/docs/Web/HTML/Global_attributes/dir)
1257
1249
  > - [`aria-current` attribute`](https://developer.mozilla.org/ar/docs/Web/Accessibility/ARIA/Attributes/aria-current)
1258
1250
 
1259
- فيما يلي الخطوة التاسعة المحدثة مع شروحات إضافية وأمثلة كود محسنة:
1251
+ فيما يلي الخطوة التاسعة المحدثة مع توضيحات إضافية وأمثلة كود محسنة:
1260
1252
 
1261
1253
  ---
1262
1254
 
@@ -1264,7 +1256,7 @@ const LocaleSwitcher = () => {
1264
1256
 
1265
1257
  عندما يدعم تطبيقك لغات متعددة، من الضروري تحديث سمات `lang` و `dir` في وسم `<html>` لتتوافق مع اللغة الحالية. يضمن ذلك:
1266
1258
 
1267
- - **إمكانية الوصول**: تعتمد برامج قراءة الشاشة وتقنيات المساعدة على سمة `lang` الصحيحة لنطق وتفسير المحتوى بدقة.
1259
+ - **سهولة الوصول**: تعتمد برامج قراءة الشاشة وتقنيات المساعدة على سمة `lang` الصحيحة لنطق المحتوى وتفسيره بدقة.
1268
1260
  - **عرض النص**: تضمن سمة `dir` (الاتجاه) عرض النص بالترتيب الصحيح (مثلًا من اليسار إلى اليمين للإنجليزية، ومن اليمين إلى اليسار للعربية أو العبرية)، وهو أمر أساسي لسهولة القراءة.
1269
1261
  - **تحسين محركات البحث (SEO)**: تستخدم محركات البحث سمة `lang` لتحديد لغة الصفحة، مما يساعد في تقديم المحتوى المحلي المناسب في نتائج البحث.
1270
1262
 
@@ -1272,7 +1264,7 @@ const LocaleSwitcher = () => {
1272
1264
 
1273
1265
  #### تنفيذ الـ Hook
1274
1266
 
1275
- قم بإنشاء hook مخصص لإدارة سمات HTML. يستمع الـ hook لتغييرات اللغة ويقوم بتحديث السمات وفقًا لذلك:
1267
+ قم بإنشاء hook مخصص لإدارة سمات HTML. يستمع الـ hook لتغييرات اللغة ويحدث السمات وفقًا لذلك:
1276
1268
 
1277
1269
  ```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx" codeFormat="typescript"
1278
1270
  import { useEffect } from "react";
@@ -1284,7 +1276,7 @@ import { getHTMLTextDir } from "intlayer";
1284
1276
  * - `lang`: يُعلم المتصفحات ومحركات البحث بلغة الصفحة.
1285
1277
  * - `dir`: يضمن ترتيب القراءة الصحيح (مثل 'ltr' للإنجليزية، 'rtl' للعربية).
1286
1278
  *
1287
- * هذا التحديث الديناميكي ضروري لعرض النص بشكل صحيح، وللوصولية، وتحسين محركات البحث (SEO).
1279
+ * هذا التحديث الديناميكي ضروري لعرض النص بشكل صحيح، وللوصولية، وتحسين محركات البحث.
1288
1280
  */
1289
1281
  export const useI18nHTMLAttributes = () => {
1290
1282
  const { locale } = useLocale();
@@ -1307,7 +1299,7 @@ import { getHTMLTextDir } from "intlayer";
1307
1299
  /**
1308
1300
  * يقوم بتحديث خصائص `lang` و `dir` لعنصر HTML <html> بناءً على اللغة الحالية.
1309
1301
  * - `lang`: يُعلم المتصفحات ومحركات البحث بلغة الصفحة.
1310
- * - `dir`: يضمن ترتيب القراءة الصحيح (مثل 'ltr' للإنجليزية، 'rtl' للعربية).
1302
+ * - `dir`: يضمن ترتيب القراءة الصحيح (مثل 'ltr' للإنجليزية، و 'rtl' للعربية).
1311
1303
  *
1312
1304
  * هذا التحديث الديناميكي ضروري لعرض النص بشكل صحيح، وللوصولية، وتحسين محركات البحث.
1313
1305
  */
@@ -1332,7 +1324,7 @@ const { getHTMLTextDir } = require("intlayer");
1332
1324
  /**
1333
1325
  * يقوم بتحديث خصائص `lang` و `dir` لعنصر HTML <html> بناءً على اللغة الحالية.
1334
1326
  * - `lang`: يُعلم المتصفحات ومحركات البحث بلغة الصفحة.
1335
- * - `dir`: يضمن ترتيب القراءة الصحيح (مثلاً، 'ltr' للإنجليزية، 'rtl' للعربية).
1327
+ * - `dir`: يضمن ترتيب القراءة الصحيح (مثل 'ltr' للإنجليزية، 'rtl' للعربية).
1336
1328
  *
1337
1329
  * هذا التحديث الديناميكي ضروري لعرض النص بشكل صحيح، وتحسين إمكانية الوصول، وتحسين محركات البحث.
1338
1330
  */
@@ -1353,7 +1345,7 @@ module.exports = { useI18nHTMLAttributes };
1353
1345
 
1354
1346
  #### استخدام الـ Hook في تطبيقك
1355
1347
 
1356
- قم بدمج الـ hook في المكون الرئيسي الخاص بك بحيث يتم تحديث خصائص HTML كلما تغيرت اللغة:
1348
+ قم بدمج الـ hook في المكون الرئيسي الخاص بك بحيث يتم تحديث خصائص HTML في كل مرة يتغير فيها اللغة:
1357
1349
 
1358
1350
  ```tsx fileName="src/App.tsx" codeFormat="typescript"
1359
1351
  import type { FC } from "react";
@@ -1383,7 +1375,7 @@ import { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes";
1383
1375
  import "./App.css";
1384
1376
 
1385
1377
  const AppContent = () => {
1386
- // تطبيق الـ hook لتحديث خصائص lang و dir في وسم <html> بناءً على اللغة الحالية.
1378
+ // تطبيق الـ hook لتحديث خصائص lang و dir لعلامة <html> بناءً على اللغة الحالية.
1387
1379
  useI18nHTMLAttributes();
1388
1380
 
1389
1381
  // ... بقية مكوناتك
@@ -1405,7 +1397,7 @@ const { useI18nHTMLAttributes } = require("./hooks/useI18nHTMLAttributes");
1405
1397
  require("./App.css");
1406
1398
 
1407
1399
  const AppContent = () => {
1408
- // تطبيق الخطاف لتحديث خصائص lang و dir لعلامة <html> بناءً على اللغة المحلية.
1400
+ // تطبيق الخطاف لتحديث خصائص lang و dir في وسم <html> بناءً على اللغة المحلية.
1409
1401
  useI18nHTMLAttributes();
1410
1402
 
1411
1403
  // ... بقية مكوناتك
@@ -1420,23 +1412,23 @@ const App = () => (
1420
1412
  module.exports = App;
1421
1413
  ```
1422
1414
 
1423
- من خلال تطبيق هذه التغييرات، سيقوم تطبيقك بـ:
1415
+ بتطبيق هذه التغييرات، سيقوم تطبيقك بـ:
1424
1416
 
1425
1417
  - ضمان أن خاصية **اللغة** (`lang`) تعكس اللغة المحلية الحالية بشكل صحيح، وهو أمر مهم لتحسين محركات البحث وسلوك المتصفح.
1426
1418
  - ضبط **اتجاه النص** (`dir`) وفقًا للغة المحلية، مما يعزز من قابلية القراءة وسهولة الاستخدام للغات ذات اتجاهات قراءة مختلفة.
1427
- - توفير تجربة أكثر **سهولة في الوصول**، حيث تعتمد تقنيات المساعدة على هذه الخصائص لتعمل بشكل أمثل.
1419
+ - توفير تجربة أكثر **سهولة في الوصول**، حيث تعتمد تقنيات المساعدة على هذه الخصائص لتعمل بشكل مثالي.
1428
1420
 
1429
- ### (اختياري) الخطوة 10: إنشاء مكون رابط محلي اللغة
1421
+ ### (اختياري) الخطوة 10: إنشاء مكون رابط محلي
1430
1422
 
1431
1423
  لضمان أن تحترم تنقلات تطبيقك اللغة الحالية، يمكنك إنشاء مكون `Link` مخصص. يقوم هذا المكون تلقائيًا بإضافة بادئة اللغة الحالية إلى عناوين URL الداخلية، بحيث عند نقر مستخدم يتحدث الفرنسية على رابط لصفحة "حول"، يتم توجيهه إلى `/fr/about` بدلاً من `/about`.
1432
1424
 
1433
1425
  هذا السلوك مفيد لعدة أسباب:
1434
1426
 
1435
- - **تحسين محركات البحث وتجربة المستخدم**: تساعد عناوين URL المحلية محركات البحث على فهرسة الصفحات الخاصة بكل لغة بشكل صحيح وتوفر للمستخدمين محتوى بلغتهم المفضلة.
1436
- - **الاتساق**: باستخدام رابط محلي في جميع أنحاء تطبيقك، تضمن أن التنقل يبقى ضمن اللغة الحالية، مما يمنع التبديلات غير المتوقعة في اللغة.
1437
- - **قابلية الصيانة**: تركيز منطق التوطين في مكون واحد يبسط إدارة عناوين URL، مما يجعل قاعدة الشيفرة الخاصة بك أسهل في الصيانة والتوسيع مع نمو تطبيقك.
1427
+ - **تحسين محركات البحث وتجربة المستخدم**: تساعد عناوين URL المترجمة محركات البحث على فهرسة الصفحات الخاصة بكل لغة بشكل صحيح وتوفر للمستخدمين محتوى بلغتهم المفضلة.
1428
+ - **الاتساق**: باستخدام رابط مترجم في جميع أنحاء تطبيقك، تضمن أن التنقل يبقى ضمن اللغة الحالية، مما يمنع التبديلات غير المتوقعة في اللغة.
1429
+ - **قابلية الصيانة**: توحيد منطق التوطين في مكون واحد يبسط إدارة عناوين URL، مما يجعل قاعدة الكود الخاصة بك أسهل في الصيانة والتطوير مع نمو تطبيقك.
1438
1430
 
1439
- فيما يلي تنفيذ لمكون `Link` مخصص للتوطين بلغة TypeScript:
1431
+ فيما يلي تنفيذ لمكون `Link` مخصص يدعم التوطين باستخدام TypeScript:
1440
1432
 
1441
1433
  ```tsx fileName="src/components/Link.tsx" codeFormat="typescript"
1442
1434
  import { getLocalizedUrl } from "intlayer";
@@ -1455,13 +1447,13 @@ export interface LinkProps
1455
1447
 
1456
1448
  /**
1457
1449
  * دالة مساعدة للتحقق مما إذا كان عنوان URL معين خارجيًا.
1458
- * إذا بدأ عنوان URL بـ http:// أو https://، فإنه يعتبر خارجيًا.
1450
+ * إذا بدأ عنوان URL بـ http:// أو https://، يعتبر خارجيًا.
1459
1451
  */
1460
1452
  export const checkIsExternalLink = (href?: string): boolean =>
1461
1453
  /^https?:\/\//.test(href ?? "");
1462
1454
 
1463
1455
  /**
1464
- * مكون Link مخصص يقوم بتعديل خاصية href بناءً على اللغة الحالية.
1456
+ * مكون رابط مخصص يقوم بتعديل خاصية href بناءً على اللغة الحالية.
1465
1457
  * بالنسبة للروابط الداخلية، يستخدم `getLocalizedUrl` لإضافة بادئة اللغة إلى الرابط (مثل /fr/about).
1466
1458
  * هذا يضمن أن التنقل يبقى ضمن نفس سياق اللغة.
1467
1459
  */
@@ -1470,7 +1462,7 @@ export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
1470
1462
  const { locale } = useLocale();
1471
1463
  const isExternalLink = checkIsExternalLink(href);
1472
1464
 
1473
- // إذا كانت الرابط داخلي وتم توفير href صالح، احصل على الرابط المترجم.
1465
+ // إذا كان الرابط داخليًا وتم توفير href صالح، احصل على الرابط المحلي.
1474
1466
  const hrefI18n =
1475
1467
  href && !isExternalLink ? getLocalizedUrl(href, locale) : href;
1476
1468
 
@@ -1491,22 +1483,22 @@ import { useLocale } from "react-intlayer";
1491
1483
  import { forwardRef } from "react";
1492
1484
 
1493
1485
  /**
1494
- * دالة مساعدة للتحقق مما إذا كان عنوان URL معين خارجيًا.
1495
- * إذا بدأ عنوان URL بـ http:// أو https://، فيُعتبر خارجيًا.
1486
+ * دالة مساعدة للتحقق مما إذا كان الرابط المعطى خارجيًا.
1487
+ * إذا بدأ الرابط بـ http:// أو https://، فإنه يعتبر خارجيًا.
1496
1488
  */
1497
1489
  export const checkIsExternalLink = (href?: string): boolean =>
1498
1490
  /^https?:\/\//.test(href ?? "");
1499
1491
 
1500
1492
  /**
1501
1493
  * مكون رابط مخصص يقوم بتكييف خاصية href بناءً على اللغة الحالية.
1502
- * بالنسبة للروابط الداخلية، يستخدم `getLocalizedUrl` لإضافة بادئة اللغة إلى عنوان URL (مثل /fr/about).
1494
+ * بالنسبة للروابط الداخلية، يستخدم `getLocalizedUrl` لإضافة بادئة اللغة إلى الرابط (مثلاً /fr/about).
1503
1495
  * هذا يضمن أن التنقل يبقى ضمن نفس سياق اللغة.
1504
1496
  */
1505
1497
  export const Link = forwardRef(({ href, children, ...props }, ref) => {
1506
1498
  const { locale } = useLocale();
1507
1499
  const isExternalLink = checkIsExternalLink(href);
1508
1500
 
1509
- // إذا كان الرابط داخليًا وتم توفير href صالح، احصل على عنوان URL المحلي.
1501
+ // إذا كان الرابط داخليًا وتم توفير href صالح، احصل على الرابط المحلي.
1510
1502
  const hrefI18n =
1511
1503
  href && !isExternalLink ? getLocalizedUrl(href, locale) : href;
1512
1504
 
@@ -1527,7 +1519,7 @@ const { forwardRef } = require("react");
1527
1519
 
1528
1520
  /**
1529
1521
  * دالة مساعدة للتحقق مما إذا كان عنوان URL معين خارجيًا.
1530
- * إذا بدأ عنوان URL بـ http:// أو https://، يعتبر خارجيًا.
1522
+ * إذا بدأ عنوان URL بـ http:// أو https://، يُعتبر خارجيًا.
1531
1523
  */
1532
1524
  const checkIsExternalLink = (href) => /^https?:\/\//.test(href ?? "");
1533
1525
 
@@ -1561,18 +1553,18 @@ Link.displayName = "Link";
1561
1553
  #### كيف يعمل
1562
1554
 
1563
1555
  - **كشف الروابط الخارجية**:
1564
- تقوم الدالة المساعدة `checkIsExternalLink` بتحديد ما إذا كان الرابط خارجيًا. تُترك الروابط الخارجية كما هي لأنها لا تحتاج إلى تعريب.
1556
+ تقوم الدالة المساعدة `checkIsExternalLink` بتحديد ما إذا كان الرابط URL خارجيًا. يتم ترك الروابط الخارجية كما هي لأنها لا تحتاج إلى تعريب.
1565
1557
 
1566
1558
  - **استرجاع اللغة الحالية**:
1567
1559
  يوفر الخطاف `useLocale` اللغة الحالية (مثلًا `fr` للفرنسية).
1568
1560
 
1569
1561
  - **تعريب الرابط**:
1570
- بالنسبة للروابط الداخلية (أي غير الخارجية)، يتم استخدام `getLocalizedUrl` لإضافة بادئة اللغة تلقائيًا إلى الرابط. هذا يعني أنه إذا كان المستخدم يتصفح باللغة الفرنسية، فإن تمرير `/about` كـ `href` سيُحوَّل إلى `/fr/about`.
1562
+ بالنسبة للروابط الداخلية (أي غير الخارجية)، يتم استخدام `getLocalizedUrl` لإضافة بادئة اللغة الحالية تلقائيًا إلى الرابط. هذا يعني أنه إذا كان المستخدم يتصفح باللغة الفرنسية، فإن تمرير `/about` كـ `href` سيُحوَّل إلى `/fr/about`.
1571
1563
 
1572
1564
  - **إرجاع الرابط**:
1573
1565
  يعيد المكون عنصر `<a>` مع عنوان URL المحلي، مما يضمن أن التنقل متسق مع اللغة المختارة.
1574
1566
 
1575
- من خلال دمج هذا المكون `Link` في تطبيقك، تحافظ على تجربة مستخدم متماسكة وواعية باللغة، بالإضافة إلى الاستفادة من تحسين محركات البحث وسهولة الاستخدام.
1567
+ من خلال دمج هذا المكون `Link` عبر تطبيقك، تحافظ على تجربة مستخدم متماسكة وواعية باللغة، مع الاستفادة أيضًا من تحسين محركات البحث وسهولة الاستخدام.
1576
1568
 
1577
1569
  ### تكوين TypeScript
1578
1570
 
@@ -1605,16 +1597,16 @@ Link.displayName = "Link";
1605
1597
  .intlayer
1606
1598
  ```
1607
1599
 
1608
- ### امتداد VS Code
1600
+ ### إضافة VS Code
1609
1601
 
1610
- لتحسين تجربة التطوير الخاصة بك مع Intlayer، يمكنك تثبيت **امتداد Intlayer الرسمي لـ VS Code**.
1602
+ لتحسين تجربة التطوير الخاصة بك مع Intlayer، يمكنك تثبيت **إضافة Intlayer الرسمية لـ VS Code**.
1611
1603
 
1612
1604
  [التثبيت من سوق VS Code](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
1613
1605
 
1614
- يوفر هذا الامتداد:
1606
+ تقدم هذه الإضافة:
1615
1607
 
1616
1608
  - **الإكمال التلقائي** لمفاتيح الترجمة.
1617
- - **الكشف الفوري عن الأخطاء** للترجمات المفقودة.
1609
+ - **الكشف عن الأخطاء في الوقت الحقيقي** للترجمات المفقودة.
1618
1610
  - **معاينات داخلية** للمحتوى المترجم.
1619
1611
  - **إجراءات سريعة** لإنشاء الترجمات وتحديثها بسهولة.
1620
1612