Browse Source

feat: add Arabic language (#2880)

* translation: add Arabic support into language manager

* translation: add Arabic language support

* translation: add Arabic language support in README files
kmoshax 6 days ago
parent
commit
d956f78347
8 changed files with 1256 additions and 5 deletions
  1. 569 0
      README.ar_EG.md
  2. 2 1
      README.es_ES.md
  3. 1 1
      README.fa_IR.md
  4. 2 1
      README.md
  5. 2 1
      README.ru_RU.md
  6. 2 1
      README.zh_CN.md
  7. 5 0
      web/assets/js/util/index.js
  8. 673 0
      web/translation/translate.ar_EG.toml

+ 569 - 0
README.ar_EG.md

@@ -0,0 +1,569 @@
+[English](/README.md) | [فارسی](/README.fa_IR.md) | [العربية](/README.ar_EG.md) |  [中文](/README.zh_CN.md) | [Español](/README.es_ES.md) | [Русский](/README.ru_RU.md)
+
+<p align="center">
+  <picture>
+    <source media="(prefers-color-scheme: dark)" srcset="./media/3x-ui-dark.png">
+    <img alt="3x-ui" src="./media/3x-ui-light.png">
+  </picture>
+</p>
+
+**لوحة تحكم ويب متقدمة • مبنية على Xray Core**
+
+[![](https://img.shields.io/github/v/release/mhsanaei/3x-ui.svg)](https://github.com/MHSanaei/3x-ui/releases)
+[![](https://img.shields.io/github/actions/workflow/status/mhsanaei/3x-ui/release.yml.svg)](#)
+[![GO Version](https://img.shields.io/github/go-mod/go-version/mhsanaei/3x-ui.svg)](#)
+[![Downloads](https://img.shields.io/github/downloads/mhsanaei/3x-ui/total.svg)](#)
+[![License](https://img.shields.io/badge/license-GPL%20V3-blue.svg?longCache=true)](https://www.gnu.org/licenses/gpl-3.0.en.html)
+
+> **تنبيه:** المشروع ده للتعلم الشخصي والتواصل فقط. رجاءً استخدمه بشكل قانوني.
+
+**لو المشروع عجبك وساعدك، ممكن تدعمنا بعمل** :star2:
+
+<p align="left">
+  <a href="https://buymeacoffee.com/mhsanaei" target="_blank">
+    <img src="./media/buymeacoffe.png" alt="Image">
+  </a>
+</p>
+
+- USDT (TRC20): `TXncxkvhkDWGts487Pjqq1qT9JmwRUz8CC`
+- MATIC (polygon): `0x41C9548675D044c6Bfb425786C765bc37427256A`
+- LTC (Litecoin): `ltc1q2ach7x6d2zq0n4l0t4zl7d7xe2s6fs7a3vspwv`
+
+## التثبيت والتحديث
+
+لتثبيت المشروع أو تحديثه، نفذ الأمر ده:
+```bash
+bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
+```
+
+## تثبيت النسخة القديمة (مش موصى بيها)
+
+لو عايز تثبت نسخة معينة، استخدم الأمر ده، مثلاً نسخة `v1.7.9`:
+```bash
+VERSION=v1.7.9 && bash <(curl -Ls "https://raw.githubusercontent.com/mhsanaei/3x-ui/$VERSION/install.sh") $VERSION
+```
+
+## شهادة SSL
+
+<details>
+  <summary>اضغط لعرض تفاصيل شهادة SSL</summary>
+
+### ACME
+
+عشان تدير شهادات SSL باستخدام ACME:
+
+1. تأكد إن الدومين بتاعك متربط صح بالسيرفر.
+2. شغّل أمر `x-ui` في الترمينال واختار خيار "إدارة شهادات SSL".
+3. هتلاقي الخيارات دي:
+   - **Get SSL:** الحصول على شهادة SSL.
+   - **Revoke:** إلغاء شهادة SSL موجودة.
+   - **Force Renew:** تجديد شهادة SSL بالقوة.
+   - **Show Existing Domains:** عرض كل شهادات الدومين المتوفرة على السيرفر.
+   - **Set Certificate Paths for the Panel:** تعيين مسارات الشهادة عشان البانل يستخدمها.
+
+### Certbot
+
+لتثبيت واستخدام Certbot:
+```sh
+apt-get install certbot -y
+certbot certonly --standalone --agree-tos --register-unsafely-without-email -d yourdomain.com
+certbot renew --dry-run
+```
+
+### Cloudflare
+
+السكريبت بتاع الإدارة فيه آلية مدمجة للتقديم على شهادة SSL من خلال Cloudflare. عشان تستخدمها، هتحتاج:
+- بريد إلكتروني مسجل على Cloudflare.
+- الـ Global API Key بتاع Cloudflare.
+- الدومين لازم يكون مربوط للسيرفر الحالي عن طريق Cloudflare.
+
+**كيفية الحصول على Global API Key من Cloudflare:**
+
+1. شغّل أمر `x-ui` في الترمينال واختار "Cloudflare SSL Certificate".
+2. ادخل على [Cloudflare API Tokens](https://dash.cloudflare.com/profile/api-tokens).
+3. دوس على "View Global API Key" (شوف الصورة التوضيحية):
+   ![](media/APIKey1.PNG)
+4. يمكن تحتاج تعيد تسجيل الدخول، وبعدها هتظهر الـ API Key (شوف الصورة التوضيحية):
+   ![](media/APIKey2.png)
+
+عند الاستخدام، ادخل اسم الدومين، البريد الإلكتروني، وAPI Key. المخطط كالتالي:
+   ![](media/DetailEnter.png)
+
+</details>
+
+## التثبيت والتحديث يدويًا
+
+<details>
+  <summary>اضغط لعرض تفاصيل التثبيت اليدوي</summary>
+
+#### الاستخدام
+
+1. لتحميل أحدث نسخة من الباكدج المظغوطة مباشرة على السيرفر، نفذ الأمر التالي:
+```sh
+ARCH=$(uname -m)
+case "${ARCH}" in
+  x86_64 | x64 | amd64) XUI_ARCH="amd64" ;;
+  i*86 | x86) XUI_ARCH="386" ;;
+  armv8* | armv8 | arm64 | aarch64) XUI_ARCH="arm64" ;;
+  armv7* | armv7) XUI_ARCH="armv7" ;;
+  armv6* | armv6) XUI_ARCH="armv6" ;;
+  armv5* | armv5) XUI_ARCH="armv5" ;;
+  s390x) echo 's390x' ;;
+  *) XUI_ARCH="amd64" ;;
+esac
+
+wget https://github.com/MHSanaei/3x-ui/releases/latest/download/x-ui-linux-${XUI_ARCH}.tar.gz
+```
+
+2. بعد تحميل الباكدج، نفذ الأوامر دي للتثبيت أو التحديث:
+```sh
+ARCH=$(uname -m)
+case "${ARCH}" in
+  x86_64 | x64 | amd64) XUI_ARCH="amd64" ;;
+  i*86 | x86) XUI_ARCH="386" ;;
+  armv8* | armv8 | arm64 | aarch64) XUI_ARCH="arm64" ;;
+  armv7* | armv7) XUI_ARCH="armv7" ;;
+  armv6* | armv6) XUI_ARCH="armv6" ;;
+  armv5* | armv5) XUI_ARCH="armv5" ;;
+  s390x) echo 's390x' ;;
+  *) XUI_ARCH="amd64" ;;
+esac
+
+cd /root/
+rm -rf x-ui/ /usr/local/x-ui/ /usr/bin/x-ui
+tar zxvf x-ui-linux-${XUI_ARCH}.tar.gz
+chmod +x x-ui/x-ui x-ui/bin/xray-linux-* x-ui/x-ui.sh
+cp x-ui/x-ui.sh /usr/bin/x-ui
+cp -f x-ui/x-ui.service /etc/systemd/system/
+mv x-ui/ /usr/local/
+systemctl daemon-reload
+systemctl enable x-ui
+systemctl restart x-ui
+```
+
+</details>
+
+## التثبيت باستخدام Docker
+
+<details>
+  <summary>اضغط لعرض تفاصيل Docker</summary>
+
+#### الاستخدام
+
+1. **تثبيت Docker:**
+   ```sh
+   bash <(curl -sSL https://get.docker.com)
+   ```
+
+2. **نسخ مستودع المشروع:**
+   ```sh
+   git clone https://github.com/MHSanaei/3x-ui.git
+   cd 3x-ui
+   ```
+
+3. **تشغيل الخدمة:**
+   ```sh
+   docker compose up -d
+   ```
+   ممكن تضيف الخيار ```--pull always``` عشان Docker يسحب أحدث صورة لو موجودة. (راجع [مستندات Docker](https://docs.docker.com/reference/cli/docker/container/run/#pull) للمزيد من التفاصيل).
+
+   **أو**
+   ```sh
+   docker run -itd \
+      -e XRAY_VMESS_AEAD_FORCED=false \
+      -v $PWD/db/:/etc/x-ui/ \
+      -v $PWD/cert/:/root/cert/ \
+      --network=host \
+      --restart=unless-stopped \
+      --name 3x-ui \
+      ghcr.io/mhsanaei/3x-ui:latest
+   ```
+
+4. **التحديث إلى أحدث نسخة:**
+   ```sh
+   cd 3x-ui
+   docker compose down
+   docker compose pull 3x-ui
+   docker compose up -d
+   ```
+
+5. **إزالة 3x-ui من Docker:**
+   ```sh
+   docker stop 3x-ui
+   docker rm 3x-ui
+   cd --
+   rm -r 3x-ui
+   ```
+
+</details>
+
+## إعدادات Nginx
+
+<details>
+  <summary>اضغط لعرض إعدادات البروكسي العكسي (Reverse Proxy)</summary>
+
+#### Reverse Proxy باستخدام Nginx
+```nginx
+location / {
+    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+    proxy_set_header X-Forwarded-Proto $scheme;
+    proxy_set_header Host $http_host;
+    proxy_set_header X-Real-IP $remote_addr;
+    proxy_set_header Range $http_range;
+    proxy_set_header If-Range $http_if_range; 
+    proxy_redirect off;
+    proxy_pass http://127.0.0.1:2053;
+}
+```
+
+#### استخدام Nginx مع sub-path
+- تأكد إن "URI Path" في إعدادات `/sub` للبانل متطابق.
+- لازم يكون رابط `url` في إعدادات البانل منتهي بـ `/`.
+
+```nginx
+location /sub {
+    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+    proxy_set_header X-Forwarded-Proto $scheme;
+    proxy_set_header Host $http_host;
+    proxy_set_header X-Real-IP $remote_addr;
+    proxy_set_header Range $http_range;
+    proxy_set_header If-Range $http_if_range; 
+    proxy_redirect off;
+    proxy_pass http://127.0.0.1:2053;
+}
+```
+</details>
+
+## نظام التشغيل الموصى به
+
+- Ubuntu 22.04+
+- Debian 12+
+- CentOS 8+
+- OpenEuler 22.03+
+- Fedora 36+
+- Arch Linux
+- Parch Linux
+- Manjaro
+- Armbian
+- AlmaLinux 9.5+
+- Rocky Linux 9.5+
+- Oracle Linux 8+
+- OpenSUSE Tubleweed
+- Amazon Linux 2023
+- Virtuozzo Linux 8+
+- Windows x64
+
+## المعماريات والأجهزة المدعومة
+
+<details>
+  <summary>اضغط لعرض تفاصيل المعماريات والأجهزة المدعومة</summary>
+
+منصتنا بتدعم مجموعة متنوعة من المعماريات والأجهزة عشان تناسب بيئات مختلفة. أبرز المعماريات هي:
+
+- **amd64:** المعمارية القياسية للكمبيوترات الشخصية والسيرفرات.
+- **x86 / i386:** مستخدمة على نطاق واسع في أجهزة الديسكتوب واللاب توب.
+- **armv8 / arm64 / aarch64:** موجهة للأجهزة المحمولة والمضمنة زي Raspberry Pi 4, Raspberry Pi 3, Raspberry Pi Zero 2/Zero 2 W, Orange Pi 3 LTS، وغيرها.
+- **armv7 / arm / arm32:** للأجهزة المحمولة والأجهزة المضمنة القديمة، مثل Orange Pi Zero LTS, Orange Pi PC Plus, Raspberry Pi 2.
+- **armv6 / arm / arm32:** للأجهزة المضمنة القديمة جداً، زي Raspberry Pi 1, Raspberry Pi Zero/Zero W.
+- **armv5 / arm / arm32:** معمارية أقدم مرتبطة بالأنظمة المضمنة القديمة.
+- **s390x:** مستخدمة في الحواسيب الرئيسية من IBM وتوفر أداء عالي واعتمادية للمشاريع الكبيرة.
+</details>
+
+## اللغات
+
+- English (إنجليزي)  
+- Persian (فارسي)  
+- Traditional Chinese (الصيني التقليدي)  
+- Simplified Chinese (الصيني المبسط)  
+- Japanese (ياباني)  
+- Russian (روسي)  
+- Vietnamese (فيتنامي)  
+- Spanish (إسباني)  
+- Indonesian (إندونيسي)  
+- Ukrainian (أوكراني)  
+- Turkish (تركي)  
+- Português (Brazil) (برتغالي - البرازيل)
+
+## الميزات
+
+- مراقبة حالة النظام
+- البحث داخل كل الإدخالات والعملاء
+- ثيم داكن وفاتح
+- دعم تعدد المستخدمين والبروتوكولات
+- دعم بروتوكولات زي VMESS، VLESS، Trojan، Shadowsocks، Dokodemo-door، Socks، HTTP، wireguard
+- دعم بروتوكولات XTLS الأصلية مثل RPRX-Direct، Vision، REALITY
+- إحصائيات الترافيك، تحديد حد للترافيك، وتحديد فترة انتهاء الصلاحية
+- قوالب إعدادات Xray قابلة للتخصيص
+- دعم لوحة تحكم عبر HTTPS (بإستخدام الدومين الخاص وشهادة SSL)
+- دعم التقديم على شهادات SSL بلمسة واحدة والتجديد التلقائي
+- لمزيد من إعدادات التخصيص المتقدمة، راجع إعدادات البانل
+- إصلاح مسارات الـ API (سيتم إنشاء إعدادات للمستخدم مع الـ API)
+- دعم تغيير الإعدادات من خلال الخيارات المتوفرة في البانل
+- دعم تصدير/استيراد قاعدة البيانات من خلال البانل
+
+## إعدادات البانل الافتراضية
+
+<details>
+  <summary>اضغط لعرض تفاصيل الإعدادات الافتراضية</summary>
+
+### اسم المستخدم، الباسورد، البورت ومسار الويب الأساسي
+
+لو مش هتعدل الإعدادات دي، هتتولد تلقائياً (ده مش بينطبق على Docker).
+
+**الإعدادات الافتراضية لـ Docker:**
+- **اسم المستخدم:** admin
+- **الباسورد:** admin
+- **البورت:** 2053
+
+### إدارة قاعدة البيانات:
+
+ممكن تعمل نسخ احتياطية واسترجاع لقاعدة البيانات مباشرة من البانل.
+
+- **مسار قاعدة البيانات:**
+  - `/etc/x-ui/x-ui.db`
+
+### المسار الأساسي للويب
+
+1. **إعادة تعيين المسار الأساسي:**
+   - افتح الترمينال.
+   - نفذ أمر `x-ui`.
+   - اختار خيار "إعادة تعيين المسار الأساسي للويب".
+
+2. **توليد أو تخصيص المسار:**
+   - المسار هيتولد تلقائياً، أو ممكن تدخل مسار مخصص.
+
+3. **عرض الإعدادات الحالية:**
+   - لمشاهدة الإعدادات الحالية، نفذ أمر `x-ui settings` في الترمينال أو استخدم خيار "عرض الإعدادات الحالية" في البانل.
+
+### توصية الأمان:
+- لتحسين الأمان، استخدم كلمة طويلة وعشوائية في مسار URL الخاص بالبانل.
+
+**مثال:**
+- `http://ip:port/*webbasepath*/panel`
+- `http://domain:port/*webbasepath*/panel`
+
+</details>
+
+## إعداد WARP
+
+<details>
+  <summary>اضغط لعرض تفاصيل إعداد WARP</summary>
+
+#### الاستخدام
+
+**لإصدارات `v2.1.0` وما بعدها:**
+
+WARP مدمج ومش محتاج تثبيت إضافي. فعل الإعدادات المطلوبة من خلال البانل.
+
+</details>
+
+## تحديد IP
+
+<details>
+  <summary>اضغط لعرض تفاصيل تحديد IP</summary>
+
+#### الاستخدام
+
+**ملحوظة:** تحديد IP ممكن مايشتغلش صح مع IP Tunnel.
+
+- **للإصدارات حتى `v1.6.1`:**
+  - تحديد IP مدمج في البانل.
+
+**للإصدارات `v1.7.0` وما بعدها:**
+
+لتفعيل وظيفة تحديد IP، هتحتاج تثبيت `fail2ban` والملفات المطلوبة من خلال الخطوات دي:
+
+1. شغل أمر `x-ui` في الترمينال واختار "إدارة تحديد IP".
+2. هتلاقي الخيارات التالية:
+   - **تغيير مدة الحظر:** لتعديل مدة الحظر.
+   - **رفع الحظر عن الجميع:** لإلغاء كل الحظر الحالي.
+   - **عرض السجلات:** لمراجعة السجلات.
+   - **حالة Fail2ban:** لمراجعة حالة fail2ban.
+   - **إعادة تشغيل Fail2ban:** لإعادة تشغيل خدمة fail2ban.
+   - **إلغاء تثبيت Fail2ban:** لإلغاء تثبيت fail2ban مع إعداداته.
+
+3. حدد مسار سجل الوصول على البانل من خلال ضبط `Xray Configs/log/Access log` على `./access.log` ثم احفظ وأعد تشغيل x-ui.
+
+- **للإصدارات قبل `v2.1.3`:**
+  - هتحتاج تضبط مسار سجل الوصول يدويًا في إعدادات Xray:
+    ```sh
+    "log": {
+      "access": "./access.log",
+      "dnsLog": false,
+      "loglevel": "warning"
+    },
+    ```
+
+- **للإصدارات `v2.1.3` وما بعدها:**
+  - في خيار لضبط `access.log` مباشرة من البانل.
+
+</details>
+
+## بوت Telegram
+
+<details>
+  <summary>اضغط لعرض تفاصيل بوت Telegram</summary>
+
+#### الاستخدام
+
+تدعم لوحة التحكم إشعارات بترافيك يومي، تسجيل الدخول للبانل، نسخ احتياطية للقاعدة، حالة النظام، معلومات العملاء، وغيرها من الوظائف عن طريق بوت Telegram. عشان تستخدم البوت، لازم تضبط معلمات البوت في البانل، ومن ضمنهم:
+- توكن Telegram
+- ID شات الأدمن (يمكن إدخال أكثر من واحد بفواصل)
+- وقت الإشعار (باستخدام صيغة cron)
+- إشعار بتاريخ انتهاء الصلاحية
+- إشعار حد الترافيك
+- نسخ احتياطية للقاعدة
+- إشعار حمل المعالج
+
+**صيغة مرجعية:**
+
+- `30 * * * * *` - إشعار عند الـ 30 ثانية من كل دقيقة.
+- `0 */10 * * * *` - إشعار عند أول ثانية من كل 10 دقايق.
+- `@hourly` - إشعار كل ساعة.
+- `@daily` - إشعار يومي (في تمام منتصف الليل).
+- `@weekly` - إشعار أسبوعي.
+- `@every 8h` - إشعار كل 8 ساعات.
+
+### ميزات بوت Telegram
+
+- تقارير دورية.
+- إشعارات عند تسجيل الدخول.
+- إشعار عند تجاوز حمل المعالج.
+- تنبيهات قبل انتهاء الصلاحية أو وصول حد الترافيك.
+- دعم قوائم تقارير العملاء لو تم إضافة اسم مستخدم Telegram للمستخدم في الإعدادات.
+- إمكانية البحث عن تقرير الترافيك باستخدام UUID (VMESS/VLESS) أو الباسورد (TROJAN) بشكل مجهول.
+- بوت يعتمد على القوائم.
+- البحث عن العملاء بالإيميل (للأدمن فقط).
+- استعراض كافة الإدخالات.
+- عرض حالة السيرفر.
+- استعراض العملاء المستنفدين.
+- استقبال النسخ الاحتياطية عند الطلب وفي التقارير الدورية.
+- بوت متعدد اللغات.
+
+### إعداد بوت Telegram
+
+- ابدأ [Botfather](https://t.me/BotFather) في حساب Telegram بتاعك:
+    ![Botfather](./media/botfather.png)
+
+- أنشئ بوت جديد باستخدام أمر /newbot: هيسألك سؤالين، اسم للبوت واسم مستخدم (لازم ينتهي بكلمة "bot").
+    ![Create new bot](./media/newbot.png)
+
+- شغل البوت اللي أنشأته. هتلاقي رابط البوت بعد كده.
+    ![token](./media/token.png)
+
+- ادخل على البانل واضبط إعدادات بوت Telegram زي ما هو موضح:
+![Panel Config](./media/panel-bot-config.png)
+
+ادخل توكن البوت في الحقل رقم 3.
+ادخل ID المستخدم في الحقل رقم 4. الحسابات اللي بالـ ID ده هيبقى ليها صلاحية الأدمن. (يمكن إدخال أكثر من واحد بفواصل)
+
+- كيفية الحصول على ID حساب Telegram؟ استخدم [هذا البوت](https://t.me/useridinfobot). شغله وهيدي الـ ID بتاعك.
+![User ID](./media/user-id.png)
+
+</details>
+
+## مسارات API
+
+<details>
+  <summary>اضغط لعرض تفاصيل مسارات API</summary>
+
+#### الاستخدام
+
+- [توثيق الـ API](https://www.postman.com/hsanaei/3x-ui/collection/q1l5l0u/3x-ui)
+- `/login` مع بيانات المستخدم باستخدام `POST`: `{username: '', password: ''}` لتسجيل الدخول.
+- المسار الأساسي لـ `/panel/api/inbounds` للعمليات التالية:
+
+| الطريقة | المسار                               | الفعل                                      |
+| :-----: | ------------------------------------ | ------------------------------------------ |
+| `GET`   | `"/list"`                           | استرجاع كل الإدخالات                      |
+| `GET`   | `"/get/:id"`                        | استرجاع إدخال بالـ id                       |
+| `GET`   | `"/getClientTraffics/:email"`       | استرجاع ترافيك عميل بالإيميل                |
+| `GET`   | `"/getClientTrafficsById/:id"`      | استرجاع ترافيك عميل بالـ id                 |
+| `GET`   | `"/createbackup"`                   | البوت بيرسل نسخة احتياطية للأدمن            |
+| `POST`  | `"/add"`                            | إضافة إدخال                               |
+| `POST`  | `"/del/:id"`                        | حذف إدخال                                 |
+| `POST`  | `"/update/:id"`                     | تحديث إدخال                               |
+| `POST`  | `"/clientIps/:email"`               | استرجاع عنوان IP للعميل                    |
+| `POST`  | `"/clearClientIps/:email"`          | مسح عنوان IP للعميل                        |
+| `POST`  | `"/addClient"`                      | إضافة عميل للإدخال                        |
+| `POST`  | `"/:id/delClient/:clientId"`        | حذف عميل باستخدام clientId\*              |
+| `POST`  | `"/updateClient/:clientId"`         | تحديث بيانات عميل باستخدام clientId\*      |
+| `POST`  | `"/:id/resetClientTraffic/:email"`   | إعادة ضبط ترافيك عميل                       |
+| `POST`  | `"/resetAllTraffics"`               | إعادة ضبط الترافيك لكل الإدخالات           |
+| `POST`  | `"/resetAllClientTraffics/:id"`     | إعادة ضبط ترافيك كل العملاء في إدخال معين    |
+| `POST`  | `"/delDepletedClients/:id"`         | حذف العملاء المستنفدين في الإدخال (-1: الكل)  |
+| `POST`  | `"/onlines"`                        | استرجاع قائمة العملاء الأونلاين (الإيميلات)   |
+
+\*- بالنسبة لحقل `clientId`:
+- استخدم `client.id` لـ VMESS و VLESS.
+- استخدم `client.password` لـ TROJAN.
+- استخدم `client.email` لـ Shadowsocks.
+
+- [![Run In Postman](https://run.pstmn.io/button.svg)](https://app.getpostman.com/run-collection/5146551-dda3cab3-0e33-485f-96f9-d4262f437ac5?action=collection%2Ffork&source=rip_markdown&collection-url=entityId%3D5146551-dda3cab3-0e33-485f-96f9-d4262f437ac5%26entityType%3Dcollection%26workspaceId%3Dd64f609f-485a-4951-9b8f-876b3f917124)
+</details>
+
+## المتغيرات البيئية
+
+<details>
+  <summary>اضغط لعرض تفاصيل المتغيرات البيئية</summary>
+
+#### الاستخدام
+
+| المتغير          |                    النوع                      | القيمة الافتراضية   |
+| ---------------- | :--------------------------------------------: | ------------------: |
+| XUI_LOG_LEVEL    | `"debug"` \| `"info"` \| `"warn"` \| `"error"` | `"info"`           |
+| XUI_DEBUG        |                   `boolean`                    | `false`            |
+| XUI_BIN_FOLDER   |                    `string`                    | `"bin"`            |
+| XUI_DB_FOLDER    |                    `string`                    | `"/etc/x-ui"`      |
+| XUI_LOG_FOLDER   |                    `string`                    | `"/var/log"`       |
+
+مثال:
+```sh
+XUI_BIN_FOLDER="bin" XUI_DB_FOLDER="/etc/x-ui" go build main.go
+```
+
+</details>
+
+## المعاينة
+
+<picture>
+  <source media="(prefers-color-scheme: dark)" srcset="./media/01-overview-dark.png">
+  <img alt="3x-ui" src="./media/01-overview-light.png">
+</picture>
+<picture>
+  <source media="(prefers-color-scheme: dark)" srcset="./media/02-inbounds-dark.png">
+  <img alt="3x-ui" src="./media/02-inbounds-light.png">
+</picture>
+<picture>
+  <source media="(prefers-color-scheme: dark)" srcset="./media/03-add-inbound-dark.png">
+  <img alt="3x-ui" src="./media/03-add-inbound-light.png">
+</picture>
+<picture>
+  <source media="(prefers-color-scheme: dark)" srcset="./media/04-add-client-dark.png">
+  <img alt="3x-ui" src="./media/04-add-client-light.png">
+</picture>
+<picture>
+  <source media="(prefers-color-scheme: dark)" srcset="./media/05-settings-dark.png">
+  <img alt="3x-ui" src="./media/05-settings-light.png">
+</picture>
+<picture>
+  <source media="(prefers-color-scheme: dark)" srcset="./media/06-configs-dark.png">
+  <img alt="3x-ui" src="./media/06-configs-light.png">
+</picture>
+<picture>
+  <source media="(prefers-color-scheme: dark)" srcset="./media/07-bot-dark.png">
+  <img alt="3x-ui" src="./media/07-bot-light.png">
+</picture>
+
+## شكر خاص لـ
+
+- [alireza0](https://github.com/alireza0/)
+
+## التحيات
+
+- [Iran v2ray rules](https://github.com/chocolate4u/Iran-v2ray-rules) (الرخصة: **GPL-3.0**): _قواعد محدثة لتوجيهات v2ray/xray مع تضمين دومينات إيرانية وتركيز على الأمان وحجب الإعلانات._
+- [Russia v2ray rules](https://github.com/runetfreedom/russia-v2ray-rules-dat) (الرخصة: **GPL-3.0**): _المستودع ده بيحتوي على قواعد توجيه v2ray/xray محدثة تلقائيًا بناءً على بيانات الدومينات والعناوين المحظورة في روسيا._
+
+## عدد النجوم مع مرور الوقت
+
+[![Stargazers over time](https://starchart.cc/MHSanaei/3x-ui.svg?variant=adaptive)](https://starchart.cc/MHSanaei/3x-ui)

+ 2 - 1
README.es_ES.md

@@ -1,4 +1,4 @@
-[English](/README.md) | [فارسی](/README.fa_IR.md) | [中文](/README.zh_CN.md) | [Español](/README.es_ES.md) | [Русский](/README.ru_RU.md)
+[English](/README.md) | [فارسی](/README.fa_IR.md) | [العربية](/README.ar_EG.md) |  [中文](/README.zh_CN.md) | [Español](/README.es_ES.md) | [Русский](/README.ru_RU.md)
 
 <p align="center">
   <picture>
@@ -283,6 +283,7 @@ Nuestra plataforma ofrece compatibilidad con una amplia gama de arquitecturas y
 
 ## Idiomas
 
+- Arabic (Árabe)
 - English (inglés)  
 - Persian (persa)  
 - Traditional Chinese (chino tradicional)  

+ 1 - 1
README.fa_IR.md

@@ -1,4 +1,4 @@
-[English](/README.md) | [فارسی](/README.fa_IR.md) | [中文](/README.zh_CN.md) | [Español](/README.es_ES.md) | [Русский](/README.ru_RU.md)
+[English](/README.md) | [فارسی](/README.fa_IR.md) | [العربية](/README.ar_EG.md) |  [中文](/README.zh_CN.md) | [Español](/README.es_ES.md) | [Русский](/README.ru_RU.md)
 
 <p align="center">
   <picture>

+ 2 - 1
README.md

@@ -1,4 +1,4 @@
-[English](/README.md) | [فارسی](/README.fa_IR.md) | [中文](/README.zh_CN.md) | [Español](/README.es_ES.md) | [Русский](/README.ru_RU.md)
+[English](/README.md) | [فارسی](/README.fa_IR.md) | [العربية](/README.ar_EG.md) |  [中文](/README.zh_CN.md) | [Español](/README.es_ES.md) | [Русский](/README.ru_RU.md) 
 
 <p align="center">
   <picture>
@@ -290,6 +290,7 @@ Our platform offers compatibility with a diverse range of architectures and devi
 
 ## Languages
 
+- Arabic
 - English
 - Persian
 - Traditional Chinese

+ 2 - 1
README.ru_RU.md

@@ -1,4 +1,4 @@
-[English](/README.md) | [فارسی](/README.fa_IR.md) | [中文](/README.zh_CN.md) | [Español](/README.es_ES.md) | [Русский](/README.ru_RU.md)
+[English](/README.md) | [فارسی](/README.fa_IR.md) | [العربية](/README.ar_EG.md) |  [中文](/README.zh_CN.md) | [Español](/README.es_ES.md) | [Русский](/README.ru_RU.md)
 
 <p align="center">
   <picture>
@@ -289,6 +289,7 @@ location /sub {
 
 ## Языки
 
+- Arabic (арабский)
 - English (английский)  
 - Persian (персидский)  
 - Traditional Chinese (традиционный китайский)  

+ 2 - 1
README.zh_CN.md

@@ -1,4 +1,4 @@
-[English](/README.md) | [فارسی](/README.fa_IR.md) | [中文](/README.zh_CN.md) | [Español](/README.es_ES.md) | [Русский](/README.ru_RU.md)
+[English](/README.md) | [فارسی](/README.fa_IR.md) | [العربية](/README.ar_EG.md) |  [中文](/README.zh_CN.md) | [Español](/README.es_ES.md) | [Русский](/README.ru_RU.md)
 
 <p align="center">
   <picture>
@@ -283,6 +283,7 @@ location /sub {
 
 ## Languages
 
+- Arabic (阿拉伯)
 - English(英语)  
 - Persian(波斯语)  
 - Traditional Chinese(繁体中文)  

+ 5 - 0
web/assets/js/util/index.js

@@ -680,6 +680,11 @@ class URLBuilder {
 
 class LanguageManager {
     static supportedLanguages = [
+        {
+            name: "العربية",
+            value: "ar-EG",
+            icon: "🇪🇬",
+        },
         {
             name: "English",
             value: "en-US",

+ 673 - 0
web/translation/translate.ar_EG.toml

@@ -0,0 +1,673 @@
+"username" = "اسم المستخدم"
+"password" = "الباسورد"
+"login" = "تسجيل الدخول"
+"confirm" = "تأكيد"
+"cancel" = "إلغاء"
+"close" = "إغلاق"
+"copy" = "نسخ"
+"copied" = "اتنسخ"
+"download" = "تحميل"
+"remark" = "ملاحظة"
+"enable" = "مفعل"
+"protocol" = "بروتوكول"
+"search" = "بحث"
+"filter" = "فلترة"
+"loading" = "جاري التحميل..."
+"second" = "ثانية"
+"minute" = "دقيقة"
+"hour" = "ساعة"
+"day" = "يوم"
+"check" = "شيك"
+"indefinite" = "غير محدد"
+"unlimited" = "غير محدود"
+"none" = "مفيش"
+"qrCode" = "كود QR"
+"info" = "معلومات أكتر"
+"edit" = "تعديل"
+"delete" = "مسح"
+"reset" = "إعادة ضبط"
+"copySuccess" = "اتنسخ بنجاح"
+"sure" = "متأكد؟"
+"encryption" = "تشفير"
+"transmission" = "نقل"
+"host" = "المستضيف"
+"path" = "مسار"
+"camouflage" = "تمويه"
+"status" = "الحالة"
+"enabled" = "مفعل"
+"disabled" = "معطل"
+"depleted" = "خلص"
+"depletingSoon" = "هينتهي قريب"
+"offline" = "أوفلاين"
+"online" = "أونلاين"
+"domainName" = "اسم الدومين"
+"monitor" = "المسمع IP"
+"certificate" = "شهادة رقمية"
+"fail" = "فشل"
+"comment" = "تعليق"
+"success" = "تم بنجاح"
+"getVersion" = "جيب النسخة"
+"install" = "تثبيت"
+"clients" = "عملاء"
+"usage" = "استخدام"
+"secretToken" = "توكن سري"
+"remained" = "المتبقي"
+"security" = "أمان"
+"secAlertTitle" = "تنبيه أمني"
+"secAlertSsl" = "الاتصال ده مش آمن. ابعد عن إدخال معلومات حساسة لغاية ما تشغل TLS لحماية البيانات."
+"secAlertConf" = "بعض الإعدادات معرضة لهجمات. ينصح بتعزيز بروتوكولات الأمان عشان تمنع الاختراقات المحتملة."
+"secAlertSSL" = "البانل مش مؤمن. حمّل شهادة TLS لحماية البيانات."
+"secAlertPanelPort" = "بورت البانل الافتراضي معرض للخطر. ياريت تغير لبورت عشوائي أو محدد."
+"secAlertPanelURI" = "مسار URI الافتراضي للبانل مش آمن. ياريت تضبط مسار URI معقد."
+"secAlertSubURI" = "مسار URI الافتراضي للاشتراك مش آمن. ياريت تضبط مسار URI معقد."
+"secAlertSubJsonURI" = "مسار URI الافتراضي لاشتراك JSON مش آمن. ياريت تضبط مسار URI معقد."
+"emptyDnsDesc" = "مفيش سيرفر DNS مضاف."
+"emptyFakeDnsDesc" = "مفيش سيرفر Fake DNS مضاف."
+"emptyBalancersDesc" = "مفيش موازن تحميل مضاف."
+"emptyReverseDesc" = "مفيش بروكسي عكسي مضاف."
+
+[menu]
+"theme" = "الثيم"
+"dark" = "داكن"
+"ultraDark" = "داكن جدًا"
+"dashboard" = "نظرة عامة"
+"inbounds" = "الإدخالات"
+"settings" = "إعدادات البانل"
+"xray" = "إعدادات Xray"
+"logout" = "تسجيل خروج"
+"link" = "إدارة"
+
+[pages.login]
+"hello" = "أهلا"
+"title" = "أهلاً وسهلاً"
+"loginAgain" = "انتهت صلاحية الجلسة، سجل دخول تاني"
+
+[pages.login.toasts]
+"invalidFormData" = "تنسيق البيانات المدخلة مش صحيح."
+"emptyUsername" = "اسم المستخدم مطلوب"
+"emptyPassword" = "الباسورد مطلوب"
+"wrongUsernameOrPassword" = "اسم المستخدم أو الباسورد أو السر مش صحيح."
+"successLogin" = "تسجيل دخول ناجح"
+
+[pages.index]
+"title" = "نظرة عامة"
+"cpu" = "المعالج"
+"logicalProcessors" = "المعالجات المنطقية"
+"frequency" = "التردد"
+"swap" = "Swap"
+"storage" = "تخزين"
+"memory" = "رام"
+"threads" = "خيوط المعالجة"
+"xrayStatus" = "Xray"
+"stopXray" = "إيقاف"
+"restartXray" = "إعادة تشغيل"
+"xraySwitch" = "النسخة"
+"xraySwitchClick" = "اختار النسخة اللي عايز تتحول لها."
+"xraySwitchClickDesk" = "اختار بحذر، النسخ القديمة ممكن ما تتوافقش مع الإعدادات الحالية."
+"xrayStatusUnknown" = "مش معروف"
+"xrayStatusRunning" = "شغالة"
+"xrayStatusStop" = "متوقفة"
+"xrayStatusError" = "فيها غلطة"
+"xrayErrorPopoverTitle" = "حصل خطأ أثناء تشغيل Xray"
+"operationHours" = "مدة التشغيل"
+"systemLoad" = "تحميل النظام"
+"systemLoadDesc" = "متوسط تحميل النظام في الدقائق 1, 5, و15"
+"connectionCount" = "إحصائيات الاتصال"
+"ipAddresses" = "عناوين IP"
+"toggleIpVisibility" = "بدل إظهار IP"
+"overallSpeed" = "السرعة الكلية"
+"upload" = "رفع"
+"download" = "تنزيل"
+"totalData" = "إجمالي البيانات"
+"sent" = "مرسل"
+"received" = "مستقبل"
+"xraySwitchVersionDialog" = "تغيير نسخة Xray"
+"xraySwitchVersionDialogDesc" = "متأكد إنك عايز تغير نسخة Xray لـ"
+"dontRefresh" = "التثبيت شغال، متعملش Refresh للصفحة"
+"logs" = "السجلات"
+"config" = "الإعدادات"
+"backup" = "نسخة احتياطية"
+"backupTitle" = "نسخة احتياطية واسترجاع قاعدة البيانات"
+"exportDatabase" = "اخزن نسخة"
+"exportDatabaseDesc" = "اضغط عشان تحمل ملف .db يحتوي على نسخة احتياطية لقاعدة البيانات الحالية على جهازك."
+"importDatabase" = "استرجاع"
+"importDatabaseDesc" = "اضغط عشان تختار وتحمل ملف .db من جهازك لاسترجاع قاعدة البيانات من نسخة احتياطية."
+
+[pages.inbounds]
+"title" = "الإدخالات"
+"totalDownUp" = "إجمالي المرسل/المستقبل"
+"totalUsage" = "إجمالي الاستخدام"
+"inboundCount" = "عدد الإدخالات"
+"operate" = "القائمة"
+"enable" = "مفعل"
+"remark" = "ملاحظة"
+"protocol" = "بروتوكول"
+"port" = "بورت"
+"traffic" = "الترافيك"
+"details" = "تفاصيل"
+"transportConfig" = "نقل"
+"expireDate" = "المدة"
+"resetTraffic" = "إعادة ضبط الترافيك"
+"addInbound" = "أضف إدخال"
+"generalActions" = "إجراءات عامة"
+"autoRefresh" = "تحديث تلقائي"
+"autoRefreshInterval" = "الفاصل"
+"create" = "إنشاء"
+"update" = "تحديث"
+"modifyInbound" = "تعديل الإدخال"
+"deleteInbound" = "حذف الإدخال"
+"deleteInboundContent" = "متأكد إنك عايز تحذف الإدخال؟"
+"deleteClient" = "حذف العميل"
+"deleteClientContent" = "متأكد إنك عايز تحذف العميل؟"
+"resetTrafficContent" = "متأكد إنك عايز تعيد ضبط الترافيك؟"
+"copyLink" = "انسخ الرابط"
+"address" = "العنوان"
+"network" = "الشبكة"
+"destinationPort" = "بورت الوجهة"
+"targetAddress" = "عنوان الهدف"
+"monitorDesc" = "سيبها فاضية لو عايز تستمع على كل الـ IPs"
+"meansNoLimit" = "= غير محدود. (الوحدة: جيجابايت)"
+"totalFlow" = "إجمالي التدفق"
+"leaveBlankToNeverExpire" = "سيبها فاضية عشان ماتنتهيش"
+"noRecommendKeepDefault" = "ننصح باستخدام الافتراضي"
+"certificatePath" = "مسار الملف"
+"certificateContent" = "محتوى الملف"
+"publicKey" = "المفتاح العام"
+"privatekey" = "المفتاح الخاص"
+"clickOnQRcode" = "اضغط على كود QR للنسخ"
+"client" = "عميل"
+"export" = "تصدير كل الروابط"
+"clone" = "استنساخ"
+"cloneInbound" = "استنساخ الإدخال"
+"cloneInboundContent" = "كل إعدادات الإدخال ده، غير البورت، IP الاستماع، والعملاء، هتتطبق على الاستنساخ."
+"cloneInboundOk" = "استنساخ"
+"resetAllTraffic" = "إعادة ضبط ترافيك كل الإدخالات"
+"resetAllTrafficTitle" = "إعادة ضبط ترافيك كل الإدخالات"
+"resetAllTrafficContent" = "متأكد إنك عايز تعيد ضبط الترافيك لكل الإدخالات؟"
+"resetInboundClientTraffics" = "إعادة ضبط ترافيك العملاء"
+"resetInboundClientTrafficTitle" = "إعادة ضبط ترافيك العملاء"
+"resetInboundClientTrafficContent" = "متأكد إنك عايز تعيد ضبط ترافيك عملاء الإدخال ده؟"
+"resetAllClientTraffics" = "إعادة ضبط ترافيك كل العملاء"
+"resetAllClientTrafficTitle" = "إعادة ضبط ترافيك كل العملاء"
+"resetAllClientTrafficContent" = "متأكد إنك عايز تعيد ضبط ترافيك كل العملاء؟"
+"delDepletedClients" = "حذف العملاء اللي خلصت"
+"delDepletedClientsTitle" = "حذف العملاء اللي خلصت"
+"delDepletedClientsContent" = "متأكد إنك عايز تحذف كل العملاء اللي خلصت؟"
+"email" = "الإيميل"
+"emailDesc" = "ادخل إيميل فريد."
+"IPLimit" = "تحديد IP"
+"IPLimitDesc" = "بيعطل الإدخال لو العدد زاد عن القيمة المحددة. (0 = تعطيل)"
+"IPLimitlog" = "سجل IP"
+"IPLimitlogDesc" = "سجل تاريخ الـ IPs. (عشان تفعل الإدخال بعد التعطيل، امسح السجل)"
+"IPLimitlogclear" = "امسح السجل"
+"setDefaultCert" = "استخدم شهادة البانل"
+"telegramDesc" = "ادخل ID شات Telegram. (استخدم '/id' في البوت) أو (@userinfobot)"
+"subscriptionDesc" = "عشان تلاقي رابط الاشتراك، ادخل على 'التفاصيل'. وكمان ممكن تستخدم نفس الاسم لعدة عملاء."
+"info" = "معلومات"
+"same" = "نفسه"
+"inboundData" = "بيانات الإدخال"
+"exportInbound" = "تصدير الإدخال"
+"import" = "استيراد"
+"importInbound" = "استيراد إدخال"
+
+[pages.client]
+"add" = "أضف عميل"
+"edit" = "تعديل عميل"
+"submitAdd" = "أضف العميل"
+"submitEdit" = "احفظ التعديلات"
+"clientCount" = "عدد العملاء"
+"bulk" = "إضافة بالجملة"
+"method" = "طريقة"
+"first" = "أول واحد"
+"last" = "آخر واحد"
+"prefix" = "بادئة"
+"postfix" = "لاحقة"
+"delayedStart" = "ابدأ بعد أول استخدام"
+"expireDays" = "المدة"
+"days" = "يوم/أيام"
+"renew" = "تجديد تلقائي"
+"renewDesc" = "تجديد تلقائي بعد انتهاء الصلاحية. (0 = تعطيل)(الوحدة: يوم)"
+
+[pages.inbounds.toasts]
+"obtain" = "تم الحصول عليه"
+
+[pages.inbounds.stream.general]
+"request" = "طلب"
+"response" = "رد"
+"name" = "اسم"
+"value" = "قيمة"
+
+[pages.inbounds.stream.tcp]
+"version" = "نسخة"
+"method" = "طريقة"
+"path" = "مسار"
+"status" = "الحالة"
+"statusDescription" = "وصف الحالة"
+"requestHeader" = "رأس الطلب"
+"responseHeader" = "رأس الرد"
+
+[pages.settings]
+"title" = "إعدادات البانل"
+"save" = "حفظ"
+"infoDesc" = "كل تغيير هتعمله هنا لازم يتخزن. ياريت تعيد تشغيل البانل عشان التعديلات تتفعل."
+"restartPanel" = "إعادة تشغيل البانل"
+"restartPanelDesc" = "متأكد إنك عايز تعيد تشغيل البانل؟ لو ماقدرتش تدخل بعد إعادة التشغيل، شوف سجل البانل على السيرفر."
+"actions" = "إجراءات"
+"resetDefaultConfig" = "استرجاع الافتراضي"
+"panelSettings" = "عام"
+"securitySettings" = "المصادقة"
+"TGBotSettings" = "بوت Telegram"
+"panelListeningIP" = "IP الاستماع"
+"panelListeningIPDesc" = "عنوان IP للبانل. (سيبه فاضي عشان يستمع على كل الـ IPs)"
+"panelListeningDomain" = "دومين الاستماع"
+"panelListeningDomainDesc" = "اسم الدومين للبانل. (سيبه فاضي عشان يستمع على كل الدومينات والـ IPs)"
+"panelPort" = "بورت الاستماع"
+"panelPortDesc" = "رقم البورت للبانل. (لازم يكون بورت فاضي)"
+"publicKeyPath" = "مسار المفتاح العام"
+"publicKeyPathDesc" = "مسار ملف المفتاح العام للبانل. (يبدأ بـ '/')"
+"privateKeyPath" = "مسار المفتاح الخاص"
+"privateKeyPathDesc" = "مسار ملف المفتاح الخاص للبانل. (يبدأ بـ '/')"
+"panelUrlPath" = "مسار URI"
+"panelUrlPathDesc" = "مسار URI للبانل. (يبدأ بـ '/' وبينتهي بـ '/')"
+"pageSize" = "حجم الصفحة"
+"pageSizeDesc" = "حدد حجم الصفحة لجدول الإدخالات. (0 = تعطيل)"
+"remarkModel" = "نموذج الملاحظة وحرف الفصل"
+"datepicker" = "نوع التقويم"
+"datepickerPlaceholder" = "اختار التاريخ"
+"datepickerDescription" = "المهام المجدولة هتشتغل بناءً على التقويم ده."
+"sampleRemark" = "مثال للملاحظة"
+"oldUsername" = "اسم المستخدم الحالي"
+"currentPassword" = "الباسورد الحالي"
+"newUsername" = "اسم المستخدم الجديد"
+"newPassword" = "الباسورد الجديد"
+"telegramBotEnable" = "تفعيل بوت Telegram"
+"telegramBotEnableDesc" = "يفعل بوت Telegram."
+"telegramToken" = "توكن Telegram"
+"telegramTokenDesc" = "توكن البوت اللي جبت من '@BotFather'."
+"telegramProxy" = "بروكسي SOCKS"
+"telegramProxyDesc" = "يفعل بروكسي SOCKS5 للاتصال بـ Telegram. (اضبط الإعدادات حسب الدليل)"
+"telegramAPIServer" = "سيرفر Telegram API"
+"telegramAPIServerDesc" = "سيرفر Telegram API المستخدم. سيبه فاضي لاستخدام الافتراضي."
+"telegramChatId" = "ID شات الأدمن"
+"telegramChatIdDesc" = "ID شات الأدمن في Telegram. (مفصول بفواصل)(تقدر تجيبه من @userinfobot) أو (استخدم '/id' في البوت)"
+"telegramNotifyTime" = "وقت الإشعار"
+"telegramNotifyTimeDesc" = "وقت إشعار البوت للتقارير الدورية. (استخدم صيغة وقت crontab)"
+"tgNotifyBackup" = "نسخة احتياطية لقاعدة البيانات"
+"tgNotifyBackupDesc" = "ابعت ملف النسخة الاحتياطية لقاعدة البيانات مع التقرير."
+"tgNotifyLogin" = "إشعار بتسجيل الدخول"
+"tgNotifyLoginDesc" = "استقبل إشعار بكل محاولة تسجيل دخول للبانل مع اسم المستخدم، الـ IP، والوقت."
+"sessionMaxAge" = "مدة الجلسة"
+"sessionMaxAgeDesc" = "المدة اللي تفضل فيها مسجل دخول. (الوحدة: دقيقة)"
+"expireTimeDiff" = "تنبيه بتاريخ الانتهاء"
+"expireTimeDiffDesc" = "استقبل تنبيه قبل ما توصل لتاريخ الانتهاء بالمدة المحددة. (الوحدة: يوم)"
+"trafficDiff" = "تنبيه حد الترافيك"
+"trafficDiffDesc" = "استقبل تنبيه عند وصول الترافيك للحد المحدد. (الوحدة: جيجابايت)"
+"tgNotifyCpu" = "تنبيه حمل المعالج"
+"tgNotifyCpuDesc" = "استقبل تنبيه لو حمل المعالج عدى الحد المحدد. (الوحدة: %)"
+"timeZone" = "المنطقة الزمنية"
+"timeZoneDesc" = "المهام المجدولة هتشتغل بناءً على المنطقة الزمنية دي."
+"subSettings" = "الاشتراك"
+"subEnable" = "تفعيل خدمة الاشتراك"
+"subEnableDesc" = "يفعل خدمة الاشتراك."
+"subTitle" = "عنوان الاشتراك"
+"subTitleDesc" = "العنوان اللي هيظهر في عميل VPN"
+"subListen" = "IP الاستماع"
+"subListenDesc" = "عنوان IP لخدمة الاشتراك. (سيبه فاضي عشان يستمع على كل الـ IPs)"
+"subPort" = "بورت الاستماع"
+"subPortDesc" = "رقم البورت لخدمة الاشتراك. (لازم يكون بورت فاضي)"
+"subCertPath" = "مسار المفتاح العام"
+"subCertPathDesc" = "مسار ملف المفتاح العام لخدمة الاشتراك. (يبدأ بـ '/')"
+"subKeyPath" = "مسار المفتاح الخاص"
+"subKeyPathDesc" = "مسار ملف المفتاح الخاص لخدمة الاشتراك. (يبدأ بـ '/')"
+"subPath" = "مسار URI"
+"subPathDesc" = "مسار URI لخدمة الاشتراك. (يبدأ بـ '/' وبينتهي بـ '/')"
+"subDomain" = "دومين الاستماع"
+"subDomainDesc" = "اسم الدومين لخدمة الاشتراك. (سيبه فاضي عشان يستمع على كل الدومينات والـ IPs)"
+"subUpdates" = "فترات التحديث"
+"subUpdatesDesc" = "فترات تحديث رابط الاشتراك في تطبيقات العملاء. (الوحدة: ساعة)"
+"subEncrypt" = "تشفير"
+"subEncryptDesc" = "المحتوى اللي هيترجع من خدمة الاشتراك هيكون مشفر بـ Base64."
+"subShowInfo" = "اظهر معلومات الاستخدام"
+"subShowInfoDesc" = "هيظهر الترافيك المتبقي والتاريخ في تطبيقات العملاء."
+"subURI" = "مسار البروكسي العكسي"
+"subURIDesc" = "مسار URI لرابط الاشتراك عشان تستخدمه ورا البروكسي."
+"externalTrafficInformEnable" = "تنبيه الترافيك الخارجي"
+"externalTrafficInformEnableDesc" = "يبعت تنبيه لـ API خارجي مع كل تحديث للترافيك."
+"externalTrafficInformURI" = "مسار تنبيه الترافيك الخارجي"
+"externalTrafficInformURIDesc" = "تحديثات الترافيك هتتبعت للمسار ده."
+"fragment" = "تجزئة"
+"fragmentDesc" = "يفعل تجزئة لحزمة TLS hello."
+"fragmentSett" = "إعدادات التجزئة"
+"noisesDesc" = "يفعل التشويش."
+"noisesSett" = "إعدادات التشويش"
+"mux" = "MUX"
+"muxDesc" = "ينقل أكثر من تيار بيانات مستقل خلال تيار بيانات واحد قائم."
+"muxSett" = "إعدادات MUX"
+"direct" = "اتصال مباشر"
+"directDesc" = "ينشئ اتصال مباشر مع الدومينات أو نطاقات IP لدولة معينة."
+"notifications" = "الإشعارات"
+"certs" = "الشهادات"
+"externalTraffic" = "الترافيك الخارجي"
+"dateAndTime" = "التاريخ والوقت"
+"proxyAndServer" = "البروكسي والسيرفر"
+"intervals" = "الفترات"
+"information" = "المعلومات"
+"language" = "اللغة"
+"telegramBotLanguage" = "لغة بوت Telegram"
+
+[pages.xray]
+"title" = "إعدادات Xray"
+"save" = "احفظ"
+"restart" = "أعد تشغيل Xray"
+"basicTemplate" = "أساسي"
+"advancedTemplate" = "متقدم"
+"generalConfigs" = "إعدادات عامة"
+"generalConfigsDesc" = "الخيارات دي هتحدد التعديلات العامة."
+"logConfigs" = "السجلات"
+"logConfigsDesc" = "السجلات ممكن تأثر على كفاءة السيرفر. ننصح بتفعيلها بحكمة لما تكون محتاجها."
+"blockConfigs" = "درع الحماية"
+"blockConfigsDesc" = "الخيارات دي هتحجب الترافيك بناءً على بروتوكولات ومواقع محددة."
+"basicRouting" = "توجيه أساسي"
+"blockConnectionsConfigsDesc" = "الخيارات دي هتحجب الترافيك بناءً على الدولة المطلوبة."
+"directConnectionsConfigsDesc" = "الاتصال المباشر بيضمن إن الترافيك المعين مايمرش من سيرفر تاني."
+"blockips" = "حظر IPs"
+"blockdomains" = "حظر دومينات"
+"directips" = "اتصالات مباشرة لـ IPs"
+"directdomains" = "اتصالات مباشرة للدومينات"
+"ipv4Routing" = "توجيه IPv4"
+"ipv4RoutingDesc" = "الخيارات دي هتوجه الترافيك بناءً على وجهة معينة عبر IPv4."
+"warpRouting" = "توجيه WARP"
+"warpRoutingDesc" = "الخيارات دي هتوجه الترافيك بناءً على وجهة معينة عبر WARP."
+"Template" = "قالب إعدادات Xray المتقدم"
+"TemplateDesc" = "ملف إعدادات Xray النهائي هيتولد بناءً على القالب ده."
+"FreedomStrategy" = "استراتيجية بروتوكول الحرية"
+"FreedomStrategyDesc" = "اختار استراتيجية المخرجات للشبكة في بروتوكول الحرية."
+"RoutingStrategy" = "استراتيجية التوجيه العامة"
+"RoutingStrategyDesc" = "حدد استراتيجية التوجيه الإجمالية لحل كل الطلبات."
+"Torrent" = "حظر بروتوكول التورنت"
+"TorrentDesc" = "بيحجب بروتوكول التورنت."
+"Family" = "حماية العيلة"
+"FamilyDesc" = "بيحجب المحتويات الكبار وعناوين المواقع الضارة."
+"Inbounds" = "الإدخالات"
+"InboundsDesc" = "قبول العملاء المعينين."
+"Outbounds" = "المخرجات"
+"Balancers" = "موازنات التحميل"
+"OutboundsDesc" = "حدد مسار الترافيك الصادر."
+"Routings" = "قواعد التوجيه"
+"RoutingsDesc" = "أولوية كل قاعدة مهمة جداً!"
+"completeTemplate" = "الكل"
+"logLevel" = "مستوى السجلات"
+"logLevelDesc" = "مستوى السجل الخاص بالأخطاء، اللي بيوضح المعلومات المطلوبة للتسجيل."
+"accessLog" = "سجل الوصول"
+"accessLogDesc" = "مسار ملف سجل الوصول. القيمة الخاصة 'none' بتعطل سجل الوصول."
+"errorLog" = "سجل الأخطاء"
+"errorLogDesc" = "مسار ملف سجل الأخطاء. القيمة الخاصة 'none' بتعطل سجل الأخطاء."
+"dnsLog" = "سجل DNS"
+"dnsLogDesc" = "لو هتسجل استعلامات DNS."
+"maskAddress" = "إخفاء العنوان"
+"maskAddressDesc" = "إخفاء عنوان الـ IP؛ لو مفعل، هيستبدل تلقائياً عنوان IP اللي بيظهر في السجل."
+"statistics" = "إحصائيات"
+"statsInboundUplink" = "إحصائيات رفع الإدخال"
+"statsInboundUplinkDesc" = "تفعيل جمع الإحصائيات لترافيك الرفع لكل بروكسي من الإدخالات."
+"statsInboundDownlink" = "إحصائيات تنزيل الإدخال"
+"statsInboundDownlinkDesc" = "تفعيل جمع الإحصائيات لترافيك التنزيل لكل بروكسي من الإدخالات."
+"statsOutboundUplink" = "إحصائيات رفع المخرجات"
+"statsOutboundUplinkDesc" = "تفعيل جمع الإحصائيات لترافيك الرفع لكل بروكسي من المخرجات."
+"statsOutboundDownlink" = "إحصائيات تنزيل المخرجات"
+"statsOutboundDownlinkDesc" = "تفعيل جمع الإحصائيات لترافيك التنزيل لكل بروكسي من المخرجات."
+
+[pages.xray.rules]
+"first" = "أول"
+"last" = "آخر"
+"up" = "فوق"
+"down" = "تحت"
+"source" = "المصدر"
+"dest" = "الوجهة"
+"inbound" = "إدخال"
+"outbound" = "مخرج"
+"balancer" = "موازن"
+"info" = "معلومات"
+"add" = "أضف قاعدة"
+"edit" = "عدل القاعدة"
+"useComma" = "عناصر مفصولة بفواصل"
+
+[pages.xray.outbound]
+"addOutbound" = "أضف مخرج"
+"addReverse" = "أضف عكسي"
+"editOutbound" = "عدل المخرج"
+"editReverse" = "عدل العكسي"
+"tag" = "تاج"
+"tagDesc" = "تاج فريد"
+"address" = "العنوان"
+"reverse" = "عكسي"
+"domain" = "دومين"
+"type" = "النوع"
+"bridge" = "جسر"
+"portal" = "بوابة"
+"link" = "رابط"
+"intercon" = "تواصل"
+"settings" = "إعدادات"
+"accountInfo" = "معلومات الحساب"
+"outboundStatus" = "حالة المخرج"
+"sendThrough" = "أرسل من خلال"
+
+[pages.xray.balancer]
+"addBalancer" = "أضف موازن تحميل"
+"editBalancer" = "عدل موازن التحميل"
+"balancerStrategy" = "استراتيجية الموازن"
+"balancerSelectors" = "المحددات"
+"tag" = "تاج"
+"tagDesc" = "تاج فريد"
+"balancerDesc" = "ماينفعش تستخدم balancerTag و outboundTag مع بعض. لو اتستخدموا مع بعض، outboundTag هو اللي هيشتغل."
+
+[pages.xray.wireguard]
+"secretKey" = "المفتاح السري"
+"publicKey" = "المفتاح العام"
+"allowedIPs" = "عناوين IP المسموح بها"
+"endpoint" = "النهاية"
+"psk" = "المفتاح المشترك"
+"domainStrategy" = "استراتيجية الدومين"
+
+[pages.xray.dns]
+"enable" = "فعل DNS"
+"enableDesc" = "فعل سيرفر DNS المدمج"
+"tag" = "تاج إدخال DNS"
+"tagDesc" = "التاج ده هيبقى متاح كإدخال في قواعد التوجيه."
+"clientIp" = "IP العميل"
+"clientIpDesc" = "بيحدد موقع العميل خلال استعلامات DNS"
+"disableCache" = "تعطيل الكاش"
+"disableCacheDesc" = "بيعطل تخزين نتائج DNS مؤقتاً"
+"disableFallback" = "تعطيل النسخ الاحتياطي"
+"disableFallbackDesc" = "بيعطل استعلامات DNS الاحتياطية"
+"disableFallbackIfMatch" = "تعطيل النسخ الاحتياطي عند التطابق"
+"disableFallbackIfMatchDesc" = "بيعطل استعلامات DNS الاحتياطية لما يتحقق تطابق مع قائمة الدومينات"
+"strategy" = "استراتيجية الاستعلام"
+"strategyDesc" = "الاستراتيجية العامة لحل أسماء الدومين"
+"add" = "أضف سيرفر"
+"edit" = "عدل السيرفر"
+"domains" = "الدومينات"
+"expectIPs" = "العناوين المتوقعة"
+
+[pages.xray.fakedns]
+"add" = "أضف Fake DNS"
+"edit" = "عدل Fake DNS"
+"ipPool" = "نطاق IP Pool"
+"poolSize" = "حجم المجموعة"
+
+[pages.settings.security]
+"admin" = "بيانات الأدمن"
+"secret" = "توكن سري"
+"loginSecurity" = "أمان تسجيل الدخول"
+"loginSecurityDesc" = "بيضيف طبقة مصادقة إضافية لزيادة الأمان."
+"secretToken" = "توكن سري"
+"secretTokenDesc" = "احتفظ بالتوكن ده في مكان آمن. التوكن ده مطلوب لتسجيل الدخول ومش ممكن تسترجعه لو ضاع."
+
+[pages.settings.toasts]
+"modifySettings" = "تعديل الإعدادات"
+"getSettings" = "جلب الإعدادات"
+"modifyUser" = "تعديل الأدمن"
+"originalUserPassIncorrect" = "اسم المستخدم أو الباسورد الحالي غير صحيح"
+"userPassMustBeNotEmpty" = "اسم المستخدم والباسورد الجديدين فاضيين"
+
+[tgbot]
+"keyboardClosed" = "❌ الكيبورد المخصص اتقفلت!"
+"noResult" = "❗ مفيش نتيجة!"
+"noQuery" = "❌ مش لاقي السؤال! استخدم الأمر تاني!"
+"wentWrong" = "❌ حصل خطأ!"
+"noIpRecord" = "❗ مفيش سجل IP!"
+"noInbounds" = "❗ مفيش إدخال متواجد!"
+"unlimited" = "♾ غير محدود (إعادة ضبط)"
+"add" = "أضف"
+"month" = "شهر"
+"months" = "شهور"
+"day" = "يوم"
+"days" = "أيام"
+"hours" = "ساعات"
+"unknown" = "مش معروف"
+"inbounds" = "الإدخالات"
+"clients" = "العملاء"
+"offline" = "🔴 أوفلاين"
+"online" = "🟢 أونلاين"
+
+[tgbot.commands]
+"unknown" = "❗ أمر مش معروف."
+"pleaseChoose" = "👇 من فضلك اختار:\r\n"
+"help" = "🤖 أهلا بيك في البوت! البوت ده معمول عشان يديك بيانات معينة من البانل ويسمحلك بالتعديلات."
+"start" = "👋 أهلا <i>{{ .Firstname }}</i>.\r\n"
+"welcome" = "🤖 أهلا بيك في بوت إدارة <b>{{ .Hostname }}</b>.\r\n"
+"status" = "✅ البوت شغال!"
+"usage" = "❗ من فضلك ادخل نص للتبحث عنه!"
+"getID" = "🆔 الـ ID بتاعك: <code>{{ .ID }}</code>"
+"helpAdminCommands" = "عشان تعيد تشغيل Xray Core:\r\n<code>/restart</code>\r\n\r\nعشان تدور على إيميل عميل:\r\n<code>/usage [Email]</code>\r\n\r\nعشان تدور على إدخالات (مع إحصائيات العملاء):\r\n<code>/inbound [Remark]</code>\r\n\r\nID شات Telegram:\r\n<code>/id</code>"
+"helpClientCommands" = "عشان تدور على الإحصائيات، استخدم الأمر ده:\r\n\r\n<code>/usage [Email]</code>\r\n\r\nID شات Telegram:\r\n<code>/id</code>"
+"restartUsage" = "\r\n\r\n<code>/restart</code>"
+"restartSuccess" = "✅ العملية نجحت!"
+"restartFailed" = "❗ حصل خطأ في العملية.\r\n\r\n<code>Error: {{ .Error }}</code>."
+"xrayNotRunning" = "❗ Xray Core مش شغال."
+
+[tgbot.messages]
+"cpuThreshold" = "🔴 حمل المعالج {{ .Percent }}% عدى الحد المسموح ({{ .Threshold }}%)"
+"selectUserFailed" = "❌ حصل خطأ في اختيار المستخدم!"
+"userSaved" = "✅ حفظت بيانات مستخدم Telegram."
+"loginSuccess" = "✅ تسجيل الدخول للبانل تم بنجاح.\r\n"
+"loginFailed" = "❗️فشل محاولة تسجيل الدخول للبانل.\r\n"
+"report" = "🕰 التقارير المجدولة: {{ .RunTime }}\r\n"
+"datetime" = "⏰ التاريخ والوقت: {{ .DateTime }}\r\n"
+"hostname" = "💻 السيرفر: {{ .Hostname }}\r\n"
+"version" = "🚀 نسخة 3X-UI: {{ .Version }}\r\n"
+"xrayVersion" = "📡 نسخة Xray: {{ .XrayVersion }}\r\n"
+"ipv6" = "🌐 IPv6: {{ .IPv6 }}\r\n"
+"ipv4" = "🌐 IPv4: {{ .IPv4 }}\r\n"
+"ip" = "🌐 IP: {{ .IP }}\r\n"
+"ips" = "🔢 عناوين IP:\r\n{{ .IPs }}\r\n"
+"serverUpTime" = "⏳ وقت التشغيل: {{ .UpTime }} {{ .Unit }}\r\n"
+"serverLoad" = "📈 تحميل النظام: {{ .Load1 }}, {{ .Load2 }}, {{ .Load3 }}\r\n"
+"serverMemory" = "📋 الرام: {{ .Current }}/{{ .Total }}\r\n"
+"tcpCount" = "🔹 TCP: {{ .Count }}\r\n"
+"udpCount" = "🔸 UDP: {{ .Count }}\r\n"
+"traffic" = "🚦 الترافيك: {{ .Total }} (↑{{ .Upload }},↓{{ .Download }})\r\n"
+"xrayStatus" = "ℹ️ الحالة: {{ .State }}\r\n"
+"username" = "👤 اسم المستخدم: {{ .Username }}\r\n"
+"password" = "👤 الباسورد: {{ .Password }}\r\n"
+"time" = "⏰ الوقت: {{ .Time }}\r\n"
+"inbound" = "📍 الإدخال: {{ .Remark }}\r\n"
+"port" = "🔌 البورت: {{ .Port }}\r\n"
+"expire" = "📅 تاريخ الانتهاء: {{ .Time }}\r\n"
+"expireIn" = "📅 هيخلص بعد: {{ .Time }}\r\n"
+"active" = "💡 مفعل: {{ .Enable }}\r\n"
+"enabled" = "🚨 مفعل: {{ .Enable }}\r\n"
+"online" = "🌐 حالة الاتصال: {{ .Status }}\r\n"
+"email" = "📧 الإيميل: {{ .Email }}\r\n"
+"upload" = "🔼 رفع: ↑{{ .Upload }}\r\n"
+"download" = "🔽 تنزيل: ↓{{ .Download }}\r\n"
+"total" = "📊 الإجمالي: ↑↓{{ .UpDown }} / {{ .Total }}\r\n"
+"TGUser" = "👤 مستخدم Telegram: {{ .TelegramID }}\r\n"
+"exhaustedMsg" = "🚨 نفذ {{ .Type }}:\r\n"
+"exhaustedCount" = "🚨 عدد النفاذ لـ {{ .Type }}:\r\n"
+"onlinesCount" = "🌐 العملاء الأونلاين: {{ .Count }}\r\n"
+"disabled" = "🛑 معطل: {{ .Disabled }}\r\n"
+"depleteSoon" = "🔜 هينتهي قريب: {{ .Deplete }}\r\n\r\n"
+"backupTime" = "🗄 وقت النسخة الاحتياطية: {{ .Time }}\r\n"
+"refreshedOn" = "\r\n📋🔄 اتحدّث في: {{ .Time }}\r\n\r\n"
+"yes" = "✅ أيوه"
+"no" = "❌ لأ"
+
+"received_id" = "🔑📥 الـ ID اتحدث."
+"received_password" = "🔑📥 الباسورد اتحدث."
+"received_email" = "📧📥 الإيميل اتحدث."
+"received_comment" = "💬📥 التعليق اتحدث."
+"id_prompt" = "🔑 الـ ID الافتراضي: {{ .ClientId }}\n\nادخل الـ ID بتاعك."
+"pass_prompt" = "🔑 الباسورد الافتراضي: {{ .ClientPassword }}\n\nادخل الباسورد بتاعك."
+"email_prompt" = "📧 الإيميل الافتراضي: {{ .ClientEmail }}\n\nادخل الإيميل بتاعك."
+"comment_prompt" = "💬 التعليق الافتراضي: {{ .ClientComment }}\n\nادخل تعليقك."
+"inbound_client_data_id" = "🔄 للإدخال: {{ .InboundRemark }}\n\n🔑 الـ ID: {{ .ClientId }}\n📧 الإيميل: {{ .ClientEmail }}\n📊 الترافيك: {{ .ClientTraffic }}\n📅 تاريخ الانتهاء: {{ .ClientExp }}\n💬 التعليق: {{ .ClientComment }}\n\nممكن تضيف العميل للإدخال دلوقتي!"
+"inbound_client_data_pass" = "🔄 للإدخال: {{ .InboundRemark }}\n\n🔑 الباسورد: {{ .ClientPass }}\n📧 الإيميل: {{ .ClientEmail }}\n📊 الترافيك: {{ .ClientTraffic }}\n📅 تاريخ الانتهاء: {{ .ClientExp }}\n💬 التعليق: {{ .ClientComment }}\n\nممكن تضيف العميل للإدخال دلوقتي!"
+"cancel" = "❌ العملية اتلغت! \n\nممكن تبدأ من /start في أي وقت. 🔄"
+"error_add_client" = "⚠️ حصل خطأ:\n\n {{ .error }}"
+"using_default_value" = "تمام، هشيل على القيمة الافتراضية. 😊"
+"incorrect_input" = "المدخلات مش صحيحة.\nالكلمات لازم تكون متصلة من غير فراغات.\nمثال صحيح: aaaaaa\nمثال غلط: aaa aaa 🚫"
+
+[tgbot.buttons]
+"closeKeyboard" = "❌ اقفل الكيبورد"
+"cancel" = "❌ إلغاء"
+"cancelReset" = "❌ إلغاء إعادة الضبط"
+"cancelIpLimit" = "❌ إلغاء حد الـ IP"
+"confirmResetTraffic" = "✅ تأكيد إعادة ضبط الترافيك؟"
+"confirmClearIps" = "✅ تأكيد مسح الـ IPs؟"
+"confirmRemoveTGUser" = "✅ تأكيد حذف مستخدم Telegram؟"
+"confirmToggle" = "✅ تأكيد تفعيل/تعطيل المستخدم؟"
+"dbBackup" = "احصل على نسخة DB"
+"serverUsage" = "استخدام السيرفر"
+"getInbounds" = "احصل على الإدخالات"
+"depleteSoon" = "هينتهي قريب"
+"clientUsage" = "استخدام العميل"
+"onlines" = "العملاء الأونلاين"
+"commands" = "الأوامر"
+"refresh" = "🔄 تجديد"
+"clearIPs" = "❌ مسح الـ IPs"
+"removeTGUser" = "❌ حذف مستخدم Telegram"
+"selectTGUser" = "👤 اختار مستخدم Telegram"
+"selectOneTGUser" = "👤 اختار مستخدم Telegram:"
+"resetTraffic" = "📈 إعادة ضبط الترافيك"
+"resetExpire" = "📅 تغيير تاريخ الانتهاء"
+"ipLog" = "🔢 سجل الـ IP"
+"ipLimit" = "🔢 حد الـ IP"
+"setTGUser" = "👤 ضبط مستخدم Telegram"
+"toggle" = "🔘 تفعيل / تعطيل"
+"custom" = "🔢 مخصص"
+"confirmNumber" = "✅ تأكيد: {{ .Num }}"
+"confirmNumberAdd" = "✅ تأكيد إضافة: {{ .Num }}"
+"limitTraffic" = "🚧 حد الترافيك"
+"getBanLogs" = "احصل على سجلات الحظر"
+"allClients" = "كل العملاء"
+
+"addClient" = "أضف عميل"
+"submitDisable" = "اعتمد على إنه معطل ✅"
+"use_default" = "🏷️ استخدم الافتراضي"
+"change_id" = "⚙️🔑 تغيير الـ ID"
+"change_password" = "⚙️🔑 تغيير الباسورد"
+"change_email" = "⚙️📧 تغيير الإيميل"
+"change_comment" = "⚙️💬 تغيير التعليق"
+
+[tgbot.answers]
+"successfulOperation" = "✅ العملية نجحت!"
+"errorOperation" = "❗ حصل خطأ في العملية."
+"getInboundsFailed" = "❌ فشل الحصول على الإدخالات."
+"getClientsFailed" = "❌ فشل الحصول على العملاء."
+"canceled" = "❌ {{ .Email }}: العملية اتلغت."
+"clientRefreshSuccess" = "✅ {{ .Email }}: العميل اتحدث بنجاح."
+"IpRefreshSuccess" = "✅ {{ .Email }}: الـ IPs اتحدثت بنجاح."
+"TGIdRefreshSuccess" = "✅ {{ .Email }}: مستخدم Telegram اتحدث بنجاح."
+"resetTrafficSuccess" = "✅ {{ .Email }}: الترافيك اتظبط بنجاح."
+"setTrafficLimitSuccess" = "✅ {{ .Email }}: حد الترافيك اتسجل بنجاح."
+"expireResetSuccess" = "✅ {{ .Email }}: أيام الانتهاء اتظبطت بنجاح."
+"resetIpSuccess" = "✅ {{ .Email }}: حد الـ IP ({{ .Count }}) اتسجل بنجاح."
+"clearIpSuccess" = "✅ {{ .Email }}: الـ IPs اتمسحت بنجاح."
+"getIpLog" = "✅ {{ .Email }}: سجل الـ IP اتجاب."
+"getUserInfo" = "✅ {{ .Email }}: بيانات مستخدم Telegram اتجاب."
+"removedTGUserSuccess" = "✅ {{ .Email }}: مستخدم Telegram اتحذف بنجاح."
+"enableSuccess" = "✅ {{ .Email }}: اتفعل بنجاح."
+"disableSuccess" = "✅ {{ .Email }}: اتعطل بنجاح."
+"askToAddUserId" = "مافيش إعدادات ليك!\r\nاطلب من الأدمن يضيف الـ Telegram ChatID الخاص بيك في إعداداتك.\r\n\r\nالـ ChatID بتاعك: <code>{{ .TgUserID }}</code>"
+"chooseClient" = "اختار عميل للإدخال {{ .Inbound }}"
+"chooseInbound" = "اختار الإدخال"