Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions frontend/docusaurus.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { themes as prismThemes } from "prism-react-renderer";
const currentYear = new Date().getFullYear();

const copyrightByLocale: Record<string, string> = {
ar: `حقوق النشر © ${currentYear} open.mp. بُني الموقع باستخدام Docusaurus.`,
en: `Copyright © ${currentYear} open.mp. Built with Docusaurus.`,
uk: `Copyright © ${currentYear} open.mp. Створено на Docusaurus.`,
"pt-BR": `Copyright © ${currentYear} open.mp. Feito com Docusaurus.`,
Expand Down Expand Up @@ -94,6 +95,10 @@ const config: Config = {
"zh-TW",
],
localeConfigs: {
ar: {
label: "العربية",
direction: "rtl",
},
"zh-CN": {
label: "简体中文",
},
Expand Down
70 changes: 70 additions & 0 deletions frontend/i18n/ar/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# Arabic documentation translation

This is an ongoing translation, not complete Arabic coverage. The goal is to translate all English docs and correct the existing Arabic pages in one growing draft PR.

## Current coverage

Source baseline: `4014a3952e3ae9556440446c32c2b1b8ae7f2f30` (upstream master).

**25 of 1,247 documentation pages** have Arabic content in this batch. All nine previously existing Arabic pages have been rewritten against this baseline. Pages without an Arabic file still fall back to English through Docusaurus; that fallback does not count as a translation.

| Section | Arabic pages |
| --- | ---: |
| `.` | 1 |
| `client` | 2 |
| `meta` | 1 |
| `scripting/callbacks` | 14 |
| `scripting/functions` | 5 |
| `scripting/resources` | 2 |

Navigation, sidebar categories, shared version/NPC notices, and documentation accessibility labels are localized separately from page coverage. Arabic inline code is isolated left-to-right so commands such as `/quit` and paths keep their original order.

## Writing conventions

- Write clear Modern Standard Arabic. Explain the meaning in context rather than copying English sentence structure or transliterating every term.
- Keep API names, identifiers, commands, paths, model names, numeric values, and runnable examples intact. Game-client text remains in English in code examples; do not assume Arabic text works in the client.
- Translate front matter descriptions as well as prose, tables, warnings, and related-link explanations. Preserve the English heading IDs explicitly so inbound fragment links keep working.
- Use **معرّف** for ID, **الخادم** for server, **برنامج اللعبة** for client, **نمط اللعب (gamemode)** and **السكربتات الجانبية (filterscripts)** on first use. Use **مركبة** rather than assuming every vehicle is a car.
- Explain streaming as entering or leaving **نطاق العرض** for a particular player. Distinguish vehicle paint colours (**ألوان المركبة**) from paintjobs (**تصاميم الطلاء**).
- Translate callbacks as **دوال الاستدعاء**; explain them with **يستدعي الخادم هذه الدالة عندما…**. Preserve callback order, return-value polarity and the difference between previewing and buying.
- Use Docusaurus locale-level RTL rather than per-page wrapper divs. Keep code left-to-right and check mixed Arabic/API tables in a browser.
- Compare each translation to its English source, including notes and related links. Do not treat file presence or a successful build as proof of translation quality.

## Remaining work

- [ ] Remaining client guides.
- [ ] Server installation, configuration, administration and troubleshooting.
- [ ] Remaining scripting callbacks.
- [ ] Remaining scripting functions.
- [ ] Remaining scripting resources and reference tables.
- [ ] Pawn language documentation and language reference.
- [ ] Tutorials, changelog, awesome list and remaining meta pages.
- [ ] Independent Arabic language review and final full-coverage audit.

## Pages in this batch

- [client/ClientCommands.md](docusaurus-plugin-content-docs/current/client/ClientCommands.md)
- [client/sa-mp.cfg.md](docusaurus-plugin-content-docs/current/client/sa-mp.cfg.md)
- [index.md](docusaurus-plugin-content-docs/current/index.md)
- [meta/Contributing.md](docusaurus-plugin-content-docs/current/meta/Contributing.md)
- [scripting/callbacks/OnActorStreamIn.md](docusaurus-plugin-content-docs/current/scripting/callbacks/OnActorStreamIn.md)
- [scripting/callbacks/OnActorStreamOut.md](docusaurus-plugin-content-docs/current/scripting/callbacks/OnActorStreamOut.md)
- [scripting/callbacks/OnEnterExitModShop.md](docusaurus-plugin-content-docs/current/scripting/callbacks/OnEnterExitModShop.md)
- [scripting/callbacks/OnPlayerSpawn.md](docusaurus-plugin-content-docs/current/scripting/callbacks/OnPlayerSpawn.md)
- [scripting/callbacks/OnPlayerStreamIn.md](docusaurus-plugin-content-docs/current/scripting/callbacks/OnPlayerStreamIn.md)
- [scripting/callbacks/OnPlayerStreamOut.md](docusaurus-plugin-content-docs/current/scripting/callbacks/OnPlayerStreamOut.md)
- [scripting/callbacks/OnVehicleDeath.md](docusaurus-plugin-content-docs/current/scripting/callbacks/OnVehicleDeath.md)
- [scripting/callbacks/OnVehicleMod.md](docusaurus-plugin-content-docs/current/scripting/callbacks/OnVehicleMod.md)
- [scripting/callbacks/OnVehiclePaintjob.md](docusaurus-plugin-content-docs/current/scripting/callbacks/OnVehiclePaintjob.md)
- [scripting/callbacks/OnVehicleRespray.md](docusaurus-plugin-content-docs/current/scripting/callbacks/OnVehicleRespray.md)
- [scripting/callbacks/OnVehicleSirenStateChange.md](docusaurus-plugin-content-docs/current/scripting/callbacks/OnVehicleSirenStateChange.md)
- [scripting/callbacks/OnVehicleSpawn.md](docusaurus-plugin-content-docs/current/scripting/callbacks/OnVehicleSpawn.md)
- [scripting/callbacks/OnVehicleStreamIn.md](docusaurus-plugin-content-docs/current/scripting/callbacks/OnVehicleStreamIn.md)
- [scripting/callbacks/OnVehicleStreamOut.md](docusaurus-plugin-content-docs/current/scripting/callbacks/OnVehicleStreamOut.md)
- [scripting/functions/ChangeVehicleColor.md](docusaurus-plugin-content-docs/current/scripting/functions/ChangeVehicleColor.md)
- [scripting/functions/ChangeVehiclePaintjob.md](docusaurus-plugin-content-docs/current/scripting/functions/ChangeVehiclePaintjob.md)
- [scripting/functions/GetVehicleParamsSirenState.md](docusaurus-plugin-content-docs/current/scripting/functions/GetVehicleParamsSirenState.md)
- [scripting/functions/SetVehicleHealth.md](docusaurus-plugin-content-docs/current/scripting/functions/SetVehicleHealth.md)
- [scripting/functions/SetVehicleToRespawn.md](docusaurus-plugin-content-docs/current/scripting/functions/SetVehicleToRespawn.md)
- [scripting/resources/paintjobs.md](docusaurus-plugin-content-docs/current/scripting/resources/paintjobs.md)
- [scripting/resources/vehiclehealth.md](docusaurus-plugin-content-docs/current/scripting/resources/vehiclehealth.md)
92 changes: 92 additions & 0 deletions frontend/i18n/ar/code.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
{
"npcCallbacksNote.message": {
"message": "قد تُستدعى هذه الدالة أيضًا لشخصية يتحكم بها الحاسوب (NPC)."
},
"versionWarn.name.function": {
"message": "الدالة"
},
"versionWarn.name.callback": {
"message": "دالة الاستدعاء"
},
"versionWarn.message": {
"message": "أُضيفت {name} في الإصدار {version}، ولن تعمل في الإصدارات الأقدم."
},
"notFound.title": {
"message": "الصفحة غير موجودة"
},
"notFound.imageAlt": {
"message": "لقطة من مهمة القطار في GTA"
},
"notFound.home": {
"message": "الرئيسية"
},
"notFound.docs": {
"message": "التوثيق"
},
"notFound.servers": {
"message": "الخوادم"
},
"theme.admonition.warning": {
"message": "تحذير"
},
"theme.admonition.caution": {
"message": "تنبيه"
},
"theme.admonition.tip": {
"message": "نصيحة"
},
"theme.CodeBlock.copyButtonAriaLabel": {
"message": "نسخ الشيفرة إلى الحافظة"
},
"theme.CodeBlock.wordWrapToggle": {
"message": "تفعيل التفاف الأسطر أو إيقافه"
},
"theme.docs.sidebar.navAriaLabel": {
"message": "فهرس التوثيق"
},
"theme.docs.sidebar.closeSidebarButtonAriaLabel": {
"message": "إغلاق قائمة التنقل"
},
"theme.docs.sidebar.toggleSidebarButtonAriaLabel": {
"message": "فتح قائمة التنقل أو إغلاقها"
},
"theme.DocSidebarItem.expandCategoryAriaLabel": {
"message": "توسيع قسم «{label}» في الفهرس"
},
"theme.DocSidebarItem.collapseCategoryAriaLabel": {
"message": "طيّ قسم «{label}» في الفهرس"
},
"theme.IconExternalLink.ariaLabel": {
"message": "(يفتح في علامة تبويب جديدة)"
},
"theme.NavBar.navAriaLabel": {
"message": "التنقل الرئيسي"
},
"theme.navbar.mobileDropdown.collapseButton.expandAriaLabel": {
"message": "فتح القائمة المنسدلة"
},
"theme.navbar.mobileDropdown.collapseButton.collapseAriaLabel": {
"message": "إغلاق القائمة المنسدلة"
},
"theme.colorToggle.ariaLabel.mode.system": {
"message": "مظهر النظام"
},
"theme.common.skipToMainContent": {
"message": "الانتقال إلى المحتوى الرئيسي"
},
"theme.common.headingLinkTitle": {
"message": "رابط مباشر إلى العنوان {heading}"
},
"theme.BackToTopButton.buttonAriaLabel": {
"message": "العودة إلى أعلى الصفحة"
},
"theme.TOCCollapsible.toggleButtonLabel": {
"message": "في هذه الصفحة"
},
"theme.docs.paginator.navAriaLabel": {
"message": "التنقل بين صفحات التوثيق"
},
"theme.docs.versions.latestVersionLinkLabel": {
"message": "أحدث إصدار"
}
}
34 changes: 24 additions & 10 deletions frontend/i18n/ar/docusaurus-plugin-content-docs/current.json
Original file line number Diff line number Diff line change
@@ -1,32 +1,46 @@
{
"sidebar.docsSidebar.category.Scripting": {
"message": "البرمجة النصية"
"message": "البرمجة",
"description": "The label for category 'Scripting' in sidebar 'docsSidebar'"
},
"sidebar.docsSidebar.category.Callbacks": {
"message": "وظائف الاستدعاء"
"message": "دوال الاستدعاء",
"description": "The label for category 'Callbacks' in sidebar 'docsSidebar'"
},
"sidebar.docsSidebar.category.Functions": {
"message": "الدوال"
"message": "الدوال",
"description": "The label for category 'Functions' in sidebar 'docsSidebar'"
},
"sidebar.docsSidebar.category.Language": {
"message": "اللغة"
"message": "لغة Pawn",
"description": "The label for category 'Language' in sidebar 'docsSidebar'"
},
"sidebar.docsSidebar.category.Reference": {
"message": "المراجع"
"message": "مرجع اللغة",
"description": "The label for category 'Reference' in sidebar 'docsSidebar'"
},
"sidebar.docsSidebar.category.Resources": {
"message": "الموارد"
"message": "الجداول والمراجع",
"description": "The label for category 'Resources' in sidebar 'docsSidebar'"
},
"sidebar.docsSidebar.category.Server": {
"message": "الخادم"
"message": "الخادم",
"description": "The label for category 'Server' in sidebar 'docsSidebar'"
},
"sidebar.docsSidebar.category.Client": {
"message": "العميل"
"message": "برنامج اللعبة",
"description": "The label for category 'Client' in sidebar 'docsSidebar'"
},
"sidebar.docsSidebar.category.Tutorials": {
"message": "الدروس التعليمية"
"message": "دروس تطبيقية",
"description": "The label for category 'Tutorials' in sidebar 'docsSidebar'"
},
"sidebar.docsSidebar.category.Meta": {
"message": "ميتا"
"message": "عن التوثيق",
"description": "The label for category 'Meta' in sidebar 'docsSidebar'"
},
"version.label": {
"message": "الإصدار الحالي",
"description": "The label for version current"
}
}
Loading
Loading