Compare commits

...

4 Commits

Author SHA1 Message Date
Chubby Granny Chaser
decacfa1d9 Merge branch 'main' into fix/using-python-http-server 2025-02-01 19:13:34 +00:00
Zamitto
7c7f621d95 Merge pull request #1432 from 7ROBE/patch-7
Update translation.json
2025-01-30 13:44:11 -03:00
7ROBE
032293b339 Update translation.json 2025-01-30 04:45:22 +03:00
Chubby Granny Chaser
954037b826 fix: using python http server 2025-01-18 01:58:42 +00:00
3 changed files with 536 additions and 508 deletions

View File

@@ -1,24 +1,24 @@
from flask import Flask, request, jsonify from http.server import BaseHTTPRequestHandler, HTTPServer
import sys, json, urllib.parse, psutil import json
import urllib.parse
import sys
import psutil
from torrent_downloader import TorrentDownloader from torrent_downloader import TorrentDownloader
from http_downloader import HttpDownloader from http_downloader import HttpDownloader
from profile_image_processor import ProfileImageProcessor from profile_image_processor import ProfileImageProcessor
import libtorrent as lt import libtorrent as lt
app = Flask(__name__)
# Retrieve command line arguments # Retrieve command line arguments
torrent_port = sys.argv[1] torrent_port = sys.argv[1]
http_port = sys.argv[2] http_port = int(sys.argv[2])
rpc_password = sys.argv[3] rpc_password = sys.argv[3]
start_download_payload = sys.argv[4] start_download_payload = sys.argv[4]
start_seeding_payload = sys.argv[5] start_seeding_payload = sys.argv[5]
downloads = {} downloads = {}
# This can be streamed down from Node
downloading_game_id = -1 downloading_game_id = -1
torrent_session = lt.session({'listen_interfaces': '0.0.0.0:{port}'.format(port=torrent_port)}) torrent_session = lt.session({'listen_interfaces': f'0.0.0.0:{torrent_port}'})
if start_download_payload: if start_download_payload:
initial_download = json.loads(urllib.parse.unquote(start_download_payload)) initial_download = json.loads(urllib.parse.unquote(start_download_payload))
@@ -49,33 +49,37 @@ if start_seeding_payload:
except Exception as e: except Exception as e:
print("Error starting seeding", e) print("Error starting seeding", e)
def validate_rpc_password(): class RequestHandler(BaseHTTPRequestHandler):
"""Middleware to validate RPC password.""" def validate_rpc_password(self):
header_password = request.headers.get('x-hydra-rpc-password') header_password = self.headers.get('x-hydra-rpc-password')
if header_password != rpc_password: if header_password != rpc_password:
return jsonify({"error": "Unauthorized"}), 401 self.send_response(401)
self.end_headers()
self.wfile.write(json.dumps({"error": "Unauthorized"}).encode('utf-8'))
return False
return True
@app.route("/status", methods=["GET"]) def do_GET(self):
def status(): if self.path == "/status":
auth_error = validate_rpc_password() if not self.validate_rpc_password():
if auth_error: return
return auth_error
downloader = downloads.get(downloading_game_id) downloader = downloads.get(downloading_game_id)
if downloader: if downloader:
status = downloads.get(downloading_game_id).get_download_status() status = downloader.get_download_status()
return jsonify(status), 200 self.send_response(200)
self.end_headers()
self.wfile.write(json.dumps(status).encode('utf-8'))
else: else:
return jsonify(None) self.send_response(200)
self.end_headers()
self.wfile.write(json.dumps(None).encode('utf-8'))
@app.route("/seed-status", methods=["GET"]) elif self.path == "/seed-status":
def seed_status(): if not self.validate_rpc_password():
auth_error = validate_rpc_password() return
if auth_error:
return auth_error
seed_status = [] seed_status = []
for game_id, downloader in downloads.items(): for game_id, downloader in downloads.items():
if not downloader: if not downloader:
continue continue
@@ -90,46 +94,45 @@ def seed_status():
**response, **response,
}) })
return jsonify(seed_status), 200 self.send_response(200)
self.end_headers()
self.wfile.write(json.dumps(seed_status).encode('utf-8'))
@app.route("/healthcheck", methods=["GET"]) elif self.path == "/healthcheck":
def healthcheck(): self.send_response(200)
return "", 200 self.end_headers()
@app.route("/process-list", methods=["GET"]) elif self.path == "/process-list":
def process_list(): if not self.validate_rpc_password():
auth_error = validate_rpc_password() return
if auth_error:
return auth_error
process_list = [proc.info for proc in psutil.process_iter(['exe', 'pid', 'name'])] process_list = [proc.info for proc in psutil.process_iter(['exe', 'pid', 'name'])]
return jsonify(process_list), 200 self.send_response(200)
self.end_headers()
self.wfile.write(json.dumps(process_list).encode('utf-8'))
@app.route("/profile-image", methods=["POST"]) def do_POST(self):
def profile_image(): if not self.validate_rpc_password():
auth_error = validate_rpc_password() return
if auth_error:
return auth_error
data = request.get_json() content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
data = json.loads(post_data.decode('utf-8'))
if self.path == "/profile-image":
image_path = data.get('image_path') image_path = data.get('image_path')
try: try:
processed_image_path, mime_type = ProfileImageProcessor.process_image(image_path) processed_image_path, mime_type = ProfileImageProcessor.process_image(image_path)
return jsonify({'imagePath': processed_image_path, 'mimeType': mime_type}), 200 self.send_response(200)
self.end_headers()
self.wfile.write(json.dumps({'imagePath': processed_image_path, 'mimeType': mime_type}).encode('utf-8'))
except Exception as e: except Exception as e:
return jsonify({"error": str(e)}), 400 self.send_response(400)
self.end_headers()
self.wfile.write(json.dumps({"error": str(e)}).encode('utf-8'))
@app.route("/action", methods=["POST"]) elif self.path == "/action":
def action():
global torrent_session
global downloading_game_id global downloading_game_id
auth_error = validate_rpc_password()
if auth_error:
return auth_error
data = request.get_json()
action = data.get('action') action = data.get('action')
game_id = data.get('game_id') game_id = data.get('game_id')
@@ -172,12 +175,16 @@ def action():
downloader = downloads.get(game_id) downloader = downloads.get(game_id)
if downloader: if downloader:
downloader.cancel_download() downloader.cancel_download()
else: else:
return jsonify({"error": "Invalid action"}), 400 self.send_response(400)
self.end_headers()
self.wfile.write(json.dumps({"error": "Invalid action"}).encode('utf-8'))
return
return "", 200 self.send_response(200)
self.end_headers()
if __name__ == "__main__": if __name__ == "__main__":
app.run(host="0.0.0.0", port=int(http_port)) server = HTTPServer(('0.0.0.0', http_port), RequestHandler)
print(f"Server running on port {http_port}")
server.serve_forever()

View File

@@ -4,5 +4,4 @@ cx_Logging; sys_platform == 'win32'
pywin32; sys_platform == 'win32' pywin32; sys_platform == 'win32'
psutil psutil
Pillow Pillow
flask
aria2p aria2p

View File

@@ -1,417 +1,439 @@
{ {
"language_name": "اَلْعَرَبِيَّةُ", "language_name": "العربية",
"app": { "app": {
"successfully_signed_in": "تم تسجيل الدخول بنجاح" "successfully_signed_in": "تم تسجيل الدخول بنجاح"
}, },
"home": { "home": {
"featured": ُتَمَيِّز", "featured": ميز",
"surprise_me": "فَاجِئْنِي", "surprise_me": "مفاجئني",
"no_results": َمْ يُعْثَرْ عَلَى نَتائِج", "no_results": م يتم العثور على نتائج",
"start_typing": "اِبْدَأْ بِالْكِتَابَةِ لِلْبَحْثِ...", "start_typing": "ابدأ الكتابة للبحث...",
"hot": "اَلْأَكْثَرُ شُيُوعًا الْآن", "hot": "الأكثر شيوعًا الآن",
"weekly": "📅 أَفْضَلُ أَلْعَابِ الْأُسْبُوعِ", "weekly": "📅 أفضل ألعاب الأسبوع",
"achievements": "🏆 أَلْعَابٌ لِلتَّغَلُّبِ عَلَيْهَا" "achievements": "🏆 ألعاب للتغلب عليها"
}, },
"sidebar": { "sidebar": {
"catalogue": "الْفِهْرِسُ", "catalogue": "الكـتالوج",
"downloads": "التَّنْزِيلَاتُ", "downloads": "التنزيلات",
"settings": "الإعْدَادَاتُ", "settings": "الإعدادات",
"my_library": َكْتَبَتِي", "my_library": كتبتي",
"downloading_metadata": "{{title}} (جَارٍ تَنْزِيلُ الْبَيَانَاتِ الْوَصْفِيَّةِ...)", "downloading_metadata": "{{title}} (جارٍ تنزيل البيانات الوصفية...)",
"paused": "{{title}} (مُوْقَفٌ)", "paused": "{{title}} (معلّق)",
"downloading": "{{title}} ({{percentage}} - جَارٍ التَّنْزِيلُ...)", "downloading": "{{title}} ({{percentage}} - جاري التنزيل...)",
"filter": َصْفِيَةُ الْمَكْتَبَةِ", "filter": صفية المكتبة",
"home": "الرَّئِيسِيَّةُ", "home": "الرئيسية",
"queued": "{{title}} (فِي الْانْتِظَارِ)", "queued": "{{title}} (في قائمة الانتظار)",
"game_has_no_executable": "اللُّعْبَةُ لَيْسَ لَدَيْهَا مِلَفٌّ تَنْفِيذِيٌّ مُحَدَّدٌ", "game_has_no_executable": "اللعبة لا تحتوي على ملف تشغيل",
"sign_in": َسْجِيلُ الدُّخُولِ", "sign_in": سجيل الدخول",
"friends": "الْأَصْدِقَاءُ", "friends": "الأصدقاء",
"need_help": "هَلْ تَحْتَاجُ إِلَى مُسَاعَدَةٍ؟" "need_help": "تحتاج مساعدة؟"
}, },
"header": { "header": {
"search": "بَحْثُ الْأَلْعَابِ", "search": "ابحث عن الألعاب",
"home": "الرَّئِيسِيَّةُ", "home": "الرئيسية",
"catalogue": "الْفِهْرِسُ", "catalogue": "الكـتالوج",
"downloads": "التَّنْزِيلَاتُ", "downloads": "التنزيلات",
"search_results": َتائِجُ الْبَحْثِ", "search_results": "نتائج البحث",
"settings": "الإعْدَادَاتُ", "settings": "الإعدادات",
"version_available_install": "الْإِصْدَارُ {{version}} مَتَوَفِّرٌ. انْقُرْ هُنَا لِإِعَادَةِ التَّشْغِيلِ وَالتَّثْبِيتِ.", "version_available_install": "الإصدار {{version}} متوفر. انقر هنا لإعادة التشغيل والتثبيت.",
"version_available_download": "الْإِصْدَارُ {{version}} مَتَوَفِّرٌ. انْقُرْ هُنَا لِلتَّنْزِيلِ." "version_available_download": "الإصدار {{version}} متوفر. انقر هنا للتنزيل."
}, },
"bottom_panel": { "bottom_panel": {
"no_downloads_in_progress": َا تَوْجَدُ تَنْزِيلَاتٌ جَارِيَةٌ", "no_downloads_in_progress": "لا توجد تنزيلات قيد التقدم",
"downloading_metadata": َارٍ تَنْزِيلُ الْبَيَانَاتِ الْوَصْفِيَّةِ لِـ {{title}}...", "downloading_metadata": "جارٍ تنزيل البيانات الوصفية لـ {{title}}...",
"downloading": َارٍ تَنْزِيلُ {{title}}... ({{percentage}} مَكْتُومٌ) - الِاكْتِمَالُ {{eta}} - {{speed}}", "downloading": "جارٍ تنزيل {{title}}... ({{percentage}} اكتمال) - الوقت المتبقي {{eta}} - السرعة {{speed}}",
"calculating_eta": َارٍ تَنْزِيلُ {{title}}... ({{percentage}} مَكْتُومٌ) - جَارٍ حِسَابُ الْوَقْتِ الْمُتَبَقِّي...", "calculating_eta": "جارٍ تنزيل {{title}}... ({{percentage}} اكتمال) - جاري حساب الوقت المتبقي...",
"checking_files": َارٍ التَّحَقُّقُ مِنْ مَلَفَّاتِ {{title}}... ({{percentage}} مَكْتُومٌ)" "checking_files": "جارٍ فحص ملفات {{title}}... ({{percentage}} اكتمال)"
}, },
"catalogue": { "catalogue": {
"search": َصْفِيَةٌ...", "search": صفية...",
"developers": "الْمُطَوِّرُونَ", "developers": "المطورون",
"genres": "الْأَنْوَاعُ", "genres": "الأنواع",
"tags": "الْعَلَامَاتُ", "tags": "العلامات",
"publishers": "النَّاشِرُونَ", "publishers": "الناشرون",
"download_sources": َصَادِرُ التَّنْزِيلِ", "download_sources": صادر التنزيل",
"result_count": "{{resultCount}} نَتائِجُ", "result_count": "{{resultCount}} نتيجة",
"filter_count": "{{filterCount}} مَتَوَفِّرٌ", "filter_count": "{{filterCount}} متاح",
"clear_filters": َسْحُ {{filterCount}} الْمُخْتَارَةِ" "clear_filters": سح {{filterCount}} المحددة"
}, },
"game_details": { "game_details": {
"open_download_options": َتْحُ خِيَارَاتِ التَّنْزِيلِ", "open_download_options": تح خيارات التنزيل",
"download_options_zero": َا تَوْجَدُ خِيَارَاتُ تَنْزِيلٍ", "download_options_zero": "لا توجد خيارات تنزيل",
"download_options_one": "{{count}} خِيَارُ تَنْزِيلٍ", "download_options_one": "خيار تنزيل واحد",
"download_options_other": "{{count}} خِيَارَاتُ تَنْزِيلٍ", "download_options_other": "{{count}} خيارات تنزيل",
"updated_at": َمَّ التَّحْدِيثُ فِي {{updated_at}}", "updated_at": م التحديث في {{updated_at}}",
"install": َثْبِيتٌ", "install": ثبيت",
"resume": "اسْتِئْنَافٌ", "resume": "استئناف",
"pause": ِيقَافٌ", "pause": "إيقاف مؤقت",
"cancel": ِلْغَاءٌ", "cancel": لغاء",
"remove": ِزَالَةٌ", "remove": زالة",
"space_left_on_disk": "{{space}} مُتَبَقٍّ عَلَى الْقُرْصِ", "space_left_on_disk": "{{space}} متبقي على القرص",
"eta": "الِاكْتِمَالُ {{eta}}", "eta": "الانتهاء {{eta}}",
"calculating_eta": َارٍ حِسَابُ الْوَقْتِ الْمُتَبَقِّي...", "calculating_eta": "جارٍ حساب الوقت المتبقي...",
"downloading_metadata": َارٍ تَنْزِيلُ الْبَيَانَاتِ الْوَصْفِيَّةِ...", "downloading_metadata": "جارٍ تنزيل البيانات الوصفية...",
"filter": َصْفِيَةُ الْإِصْدَارَاتِ الْمُعَادِ تَغْلِيفُهَا", "filter": صفية الحزم المعاد تعبئتها",
"requirements": ُتَطَلَّبَاتُ النِّظَامِ", "requirements": تطلبات النظام",
"minimum": "الْأَدْنَى", "minimum": "الحد الأدنى",
"recommended": "الْمُوَصَّى بِهِ", "recommended": "مُوصى به",
"paused": ُوْقَفٌ", "paused": علّق",
"release_date": َمَّ الْإِصْدَارُ فِي {{date}}", "release_date": اريخ الإصدار {{date}}",
"publisher": ُشِرَ بِوَاسِطَةِ {{publisher}}", "publisher": شر بواسطة {{publisher}}",
"hours": َاعَاتٌ", "hours": "ساعات",
"minutes": َقَائِقُ", "minutes": قائق",
"amount_hours": "{{amount}} سَاعَاتٌ", "amount_hours": "{{amount}} ساعات",
"amount_minutes": "{{amount}} دَقَائِقُ", "amount_minutes": "{{amount}} دقائق",
"accuracy": ِقَّةٌ {{accuracy}}%", "accuracy": قة {{accuracy}}%",
"add_to_library": ِضَافَةٌ إِلَى الْمَكْتَبَةِ", "add_to_library": ضافة إلى المكتبة",
"remove_from_library": ِزَالَةٌ مِنَ الْمَكْتَبَةِ", "remove_from_library": زالة من المكتبة",
"no_downloads": َا تَوْجَدُ تَنْزِيلَاتٌ مَتَوَفِّرَةٌ", "no_downloads": "لا توجد تنزيلات متاحة",
"play_time": ُعِبَ لِمُدَّةِ {{amount}}", "play_time": عب لمدة {{amount}}",
"last_time_played": "آخِرُ مَرَّةٍ لُعِبَتْ {{period}}", "last_time_played": "آخر تشغيل {{period}}",
"not_played_yet": َمْ تَلْعَبْ {{title}} بَعْدُ", "not_played_yet": م تلعب {{title}} بعد",
"next_suggestion": "الِاقْتِرَاحُ التَّالِي", "next_suggestion": "الاقتراح التالي",
"play": "لَعِبٌ", "play": "تشغيل",
"deleting": َارٍ حَذْفُ الْمُثَبِّتِ...", "deleting": "جارٍ حذف المثبت...",
"close": ِغْلَاقٌ", "close": غلاق",
"playing_now": "جَارِي اللَّعِبُ الْآن", "playing_now": "يتم التشغيل الآن",
"change": َغْيِيرٌ", "change": غيير",
"repacks_modal_description": "اخْتَرِ الْإِصْدَارَ الْمُعَادَ تَغْلِيفُهُ الَّذِي تُرِيدُ تَنْزِيلَهُ", "repacks_modal_description": "اختر الحزمة المعاد تعبئتها التي تريد تنزيلها",
"select_folder_hint": ِتَغْيِيرِ الْمَجَلَّدِ الافْتِرَاضِيِّ، اذْهَبْ إِلَى <0>الإعْدَادَاتِ</0>", "select_folder_hint": تغيير المجلد الافتراضي، انتقل إلى <0>الإعدادات</0>",
"download_now": َنْزِيلٌ الْآن", "download_now": نزيل الآن",
"no_shop_details": "لَمْ يَتَمَكَّنْ مِنْ اسْتِرْدَادِ تَفَاصِيلِ الْمَتْجَرِ.", "no_shop_details": "تعذر الحصول على تفاصيل المتجر.",
"download_options": ِيَارَاتُ التَّنْزِيلِ", "download_options": يارات التنزيل",
"download_path": َسَارُ التَّنْزِيلِ", "download_path": سار التنزيل",
"previous_screenshot": َقْطَةُ الشَّاشَةِ السَّابِقَةُ", "previous_screenshot": قطة الشاشة السابقة",
"next_screenshot": َقْطَةُ الشَّاشَةِ التَّالِيَةُ", "next_screenshot": قطة الشاشة التالية",
"screenshot": َقْطَةُ الشَّاشَةِ {{number}}", "screenshot": قطة الشاشة {{number}}",
"open_screenshot": َتْحُ لَقْطَةِ الشَّاشَةِ {{number}}", "open_screenshot": تح لقطة الشاشة {{number}}",
"download_settings": "إعْدَادَاتُ التَّنْزِيلِ", "download_settings": "إعدادات التنزيل",
"downloader": "الْمُنَزِّلُ", "downloader": "أداة التنزيل",
"select_executable": َحْدِيدٌ", "select_executable": حديد",
"no_executable_selected": َمْ يُحَدَّدْ مِلَفٌّ تَنْفِيذِيٌّ", "no_executable_selected": م يتم تحديد ملف تشغيل",
"open_folder": َتْحُ الْمَجَلَّدِ", "open_folder": تح المجلد",
"open_download_location": "مُشَاهَدَةُ الْمَلَفَّاتِ الْمُنَزَّلَةِ", "open_download_location": "عرض الملفات المحملة",
"create_shortcut": ِنْشَاءُ طَرِيقٍ مُخْتَصَرٍ عَلَى سَطْحِ الْمَكْتَبِ", "create_shortcut": نشاء اختصار على سطح المكتب",
"clear": َسْحٌ", "clear": سح",
"remove_files": ِزَالَةُ الْمَلَفَّاتِ", "remove_files": زالة الملفات",
"remove_from_library_title": "هَلْ أَنْتَ مُتَأَكِّدٌ؟", "remove_from_library_title": "هل أنت متأكد؟",
"remove_from_library_description": َيُؤَدِّي هَذَا إِلَى إِزَالَةِ {{game}} مِنْ مَكْتَبَتِكَ", "remove_from_library_description": يؤدي هذا إلى إزالة {{game}} من مكتبتك",
"options": ِيَارَاتٌ", "options": يارات",
"executable_section_title": "الْمِلَفُّ التَّنْفِيذِيُّ", "executable_section_title": "ملف التشغيل",
"executable_section_description": َسَارُ الْمِلَفِّ الَّذِي سَيَتِمُّ تَنْفِيذُهُ عِنْدَ النَّقْرِ عَلَى \"لَعِبٌ\"", "executable_section_description": سار الملف الذي سيتم تشغيله عند النقر على \"تشغيل\"",
"downloads_secion_title": "التَّنْزِيلَاتُ", "downloads_secion_title": "التنزيلات",
"downloads_section_description": َحَقَّقْ مِنَ التَّحْدِيثَاتِ أَوِ الْإِصْدَارَاتِ الْأُخْرَى لِهَذِهِ اللُّعْبَةِ", "downloads_section_description": حقق من التحديثات أو الإصدارات الأخرى لهذه اللعبة",
"danger_zone_section_title": ِنْطَقَةُ الْخَطَرِ", "danger_zone_section_title": نطقة الخطر",
"danger_zone_section_description": ِزَالَةُ هَذِهِ اللُّعْبَةِ مِنْ مَكْتَبَتِكَ أَوِ الْمَلَفَّاتِ الْمُنَزَّلَةِ بِوَاسِطَةِ Hydra", "danger_zone_section_description": زالة هذه اللعبة من مكتبتك أو الملفات التي تم تنزيلها بواسطة Hydra",
"download_in_progress": "جَارٍ التَّنْزِيلُ", "download_in_progress": "تنزيل قيد التقدم",
"download_paused": "التَّنْزِيلُ مُوْقَفٌ", "download_paused": "التنزيل معلق",
"last_downloaded_option": ِيَارُ التَّنْزِيلِ الْأَخِيرُ", "last_downloaded_option": يار التنزيل الأخير",
"create_shortcut_success": َمَّ إِنْشَاءُ الطَّرِيقِ الْمُخْتَصَرِ بِنَجَاحٍ", "create_shortcut_success": م إنشاء الاختصار بنجاح",
"create_shortcut_error": َطَأٌ فِي إِنْشَاءِ الطَّرِيقِ الْمُخْتَصَرِ", "create_shortcut_error": طأ في إنشاء الاختصار",
"nsfw_content_title": "هَذِهِ اللُّعْبَةُ تَحْتَوِي عَلَى مُحْتَوًى غَيْرِ لَائِقٍ", "nsfw_content_title": "هذه اللعبة تحتوي على محتوى غير لائق",
"nsfw_content_description": "{{title}} تَحْتَوِي عَلَى مُحْتَوًى قَدْ لَا يَكُونُ مُنَاسِبًا لِجَمِيعِ الْأَعْمَارِ. هَلْ أَنْتَ مُتَأَكِّدٌ مِنْ أَنَّكَ تُرِيدُ الْمُتَابَعَةَ؟", "nsfw_content_description": "{{title}} يحتوي على محتوى قد لا يناسب جميع الأعمار. هل تريد المتابعة؟",
"allow_nsfw_content": "الْمُتَابَعَةُ", "allow_nsfw_content": "متابعة",
"refuse_nsfw_content": "الرُّجُوعُ", "refuse_nsfw_content": "رجوع",
"stats": "الإحْصَائِيَّاتُ", "stats": "الإحصائيات",
"download_count": "التَّنْزِيلَاتُ", "download_count": "مرات التنزيل",
"player_count": "اللَّاعِبُونَ النَّشِطُونَ", "player_count": "اللاعبون النشطون",
"download_error": "هَذَا خِيَارُ التَّنْزِيلِ غَيْرُ مَتَوَفِّرٍ", "download_error": "خيار التنزيل هذا غير متاح",
"download": َنْزِيلٌ", "download": نزيل",
"executable_path_in_use": "الْمِلَفُّ التَّنْفِيذِيُّ مُسْتَخْدَمٌ بِوَاسِطَةِ \"{{game}}\"", "executable_path_in_use": "مسار التشغيل مستخدم بالفعل بواسطة \"{{game}}\"",
"warning": َنْبِيهٌ:", "warning": حذير:",
"hydra_needs_to_remain_open": ِهَذَا التَّنْزِيلِ، يَجِبُ أَنْ يَبْقَى Hydra مَفْتُوحًا حَتَّى يَتِمَّ الِاكْتِمَالُ. إِذَا أُغْلِقَ Hydra قَبْلَ الِاكْتِمَالِ، سَتَفْقِدُ تَقَدُّمَكَ.", "hydra_needs_to_remain_open": هذا التنزيل، يجب أن يبقى Hydra مفتوحًا حتى اكتماله. إذا أغلق Hydra قبل الاكتمال، ستفقد تقدمك.",
"achievements": "الإِنْجَازَاتُ", "achievements": "الإنجازات",
"achievements_count": "الإِنْجَازَاتُ {{unlockedCount}}/{{achievementsCount}}", "achievements_count": "الإنجازات {{unlockedCount}}/{{achievementsCount}}",
"cloud_save": ِفْظٌ سَحَابِيٌّ", "cloud_save": فظ سحابي",
"cloud_save_description": "احْفَظْ تَقَدُّمَكَ فِي السَّحَابَةِ وَاسْتَمِرَّ فِي اللَّعِبِ عَلَى أَيِّ جِهَازٍ", "cloud_save_description": "احفظ تقدمك على السحابة واستمر في اللعب من أي جهاز",
"backups": "الْنُسَخُ الِاحْتِيَاطِيَّةُ", "backups": "النسخ الاحتياطية",
"install_backup": َثْبِيتٌ", "install_backup": ثبيت",
"delete_backup": َذْفٌ", "delete_backup": ذف",
"create_backup": ُسْخَةٌ احْتِيَاطِيَّةٌ جَدِيدَةٌ", "create_backup": سخة احتياطية جديدة",
"last_backup_date": "آخِرُ نُسْخَةٍ احْتِيَاطِيَّةٍ فِي {{date}}", "last_backup_date": "آخر نسخة احتياطية في {{date}}",
"no_backup_preview": َمْ يُعْثَرْ عَلَى أَيِّ أَلْعَابٍ مَحْفُوظَةٍ لِهَذَا الْعُنْوَانِ", "no_backup_preview": م يتم العثور على حفظات لهذا العنوان",
"restoring_backup": َارٍ اسْتِعَادَةُ النُّسْخَةِ الِاحْتِيَاطِيَّةِ ({{progress}} مَكْتُومٌ)...", "restoring_backup": "جارٍ استعادة النسخة الاحتياطية ({{progress}} اكتمال)...",
"uploading_backup": َارٍ رَفْعُ النُّسْخَةِ الِاحْتِيَاطِيَّةِ...", "uploading_backup": "جارٍ رفع النسخة الاحتياطية...",
"no_backups": َمْ تَقُمْ بِإِنْشَاءِ أَيِّ نُسَخٍ احْتِيَاطِيَّةٍ لِهَذِهِ اللُّعْبَةِ بَعْدُ", "no_backups": م تقم بإنشاء أي نسخ احتياطية لهذه اللعبة بعد",
"backup_uploaded": َمَّ رَفْعُ النُّسْخَةِ الِاحْتِيَاطِيَّةِ", "backup_uploaded": م رفع النسخة الاحتياطية",
"backup_deleted": َمَّ حَذْفُ النُّسْخَةِ الِاحْتِيَاطِيَّةِ", "backup_deleted": م حذف النسخة الاحتياطية",
"backup_restored": َمَّ اسْتِعَادَةُ النُّسْخَةِ الِاحْتِيَاطِيَّةِ", "backup_restored": م استعادة النسخة الاحتياطية",
"see_all_achievements": َرْضُ جَمِيعِ الإِنْجَازَاتِ", "see_all_achievements": رض جميع الإنجازات",
"sign_in_to_see_achievements": َجِّلِ الدُّخُولَ لِعَرْضِ الإِنْجَازَاتِ", "sign_in_to_see_achievements": جل الدخول لعرض الإنجازات",
"mapping_method_automatic": "آلِيٌّ", "mapping_method_automatic": "تلقائي",
"mapping_method_manual": َدَوِيٌّ", "mapping_method_manual": دوي",
"mapping_method_label": َرِيقَةُ التَّحْدِيدِ", "mapping_method_label": ريقة التعيين",
"files_automatically_mapped": َمَّ تَحْدِيدُ الْمَلَفَّاتِ تِلْقَائِيًّا", "files_automatically_mapped": م تعيين الملفات تلقائيًا",
"no_backups_created": َمْ تُنْشَأْ أَيُّ نُسَخٍ احْتِيَاطِيَّةٍ لِهَذِهِ اللُّعْبَةِ", "no_backups_created": م يتم إنشاء نسخ احتياطية لهذه اللعبة",
"manage_files": ِدَارَةُ الْمَلَفَّاتِ", "manage_files": دارة الملفات",
"loading_save_preview": َارٍ الْبَحْثُ عَنْ أَلْعَابٍ مَحْفُوظَةٍ...", "loading_save_preview": "جارٍ البحث عن حفظات الألعاب...",
"wine_prefix": َادِئَةُ Wine", "wine_prefix": "بادئة Wine",
"wine_prefix_description": َادِئَةُ Wine الْمُسْتَخْدَمَةُ لِتَشْغِيلِ هَذِهِ اللُّعْبَةِ", "wine_prefix_description": "بادئة Wine المستخدمة لتشغيل هذه اللعبة",
"launch_options": ِيَارَاتُ الْإِطْلَاقِ", "launch_options": يارات التشغيل",
"launch_options_description": ُمْكِنُ لِلْمُسْتَخْدِمِينَ الْمُتَقَدِّمِينَ إِدْخَالُ تَعْدِيلَاتٍ عَلَى خِيَارَاتِ الْإِطْلَاقِ", "launch_options_description": مكن للمستخدمين المتقدمين إدخال تعديلات على خيارات التشغيل (ميزة تجريبية)",
"launch_options_placeholder": َمْ يُحَدَّدْ أَيُّ مُعَامِلٍ", "launch_options_placeholder": م يتم تحديد أي معاملات",
"no_download_option_info": َا تَوْجَدُ مَعْلُومَاتٌ مَتَوَفِّرَةٌ", "no_download_option_info": "لا توجد معلومات متاحة",
"backup_deletion_failed": َشَلَ فِي حَذْفِ النُّسْخَةِ الِاحْتِيَاطِيَّةِ", "backup_deletion_failed": شل حذف النسخة الاحتياطية",
"max_number_of_artifacts_reached": َمَّ بَلُوغُ الْعَدَدِ الْأَقْصَى لِلنُّسَخِ الِاحْتِيَاطِيَّةِ لِهَذِهِ اللُّعْبَةِ", "max_number_of_artifacts_reached": م الوصول إلى الحد الأقصى لعدد النسخ الاحتياطية لهذه اللعبة",
"achievements_not_sync": َعَرَّفْ عَلَى كَيْفِيَّةِ مَزْجِ إِنْجَازَاتِكَ", "achievements_not_sync": عرف على كيفية مزامنة إنجازاتك",
"manage_files_description": ِدَارَةُ الْمَلَفَّاتِ الَّتِي سَيَتِمُّ نَسْخُهَا احْتِيَاطِيًّا وَاسْتِعَادَتُهَا", "manage_files_description": دارة الملفات التي سيتم نسخها احتياطيًا واستعادتها",
"select_folder": "تَحْدِيدُ الْمَجَلَّدِ", "select_folder": "حدد المجلد",
"backup_from": ُسْخَةٌ احْتِيَاطِيَّةٌ مِنْ {{date}}", "backup_from": سخة احتياطية من {{date}}",
"custom_backup_location_set": َمَّ تَحْدِيدُ مَوْقِعِ النُّسْخَةِ الِاحْتِيَاطِيَّةِ الْمُخَصَّصِ", "custom_backup_location_set": م تعيين موقع نسخ احتياطي مخصص",
"no_directory_selected": َمْ يُحَدَّدْ أَيُّ دَلِيلٍ" "no_directory_selected": م يتم تحديد مجلد",
"no_write_permission": "لا يمكن التنزيل إلى هذا المجلد. انقر هنا لمعرفة المزيد.",
"reset_achievements": "إعادة تعيين الإنجازات",
"reset_achievements_description": "سيؤدي هذا إلى إعادة تعيين جميع إنجازات {{game}}",
"reset_achievements_title": "هل أنت متأكد؟",
"reset_achievements_success": "تم إعادة تعيين الإنجازات بنجاح",
"reset_achievements_error": "فشل إعادة تعيين الإنجازات"
}, },
"activation": { "activation": {
"title": َفْعِيلُ Hydra", "title": فعيل Hydra",
"installation_id": ُعَرِّفُ التَّثْبِيتِ:", "installation_id": عرف التثبيت:",
"enter_activation_code": َدْخِلْ رَمْزَ التَّفْعِيلِ", "enter_activation_code": دخل رمز التفعيل الخاص بك",
"message": ِذَا كُنْتَ لَا تَعْرِفُ أَيْنَ تَطْلُبُ هَذَا، فَلا يَجِبُ أَنْ تَكُونَ لَدَيْكَ.", "message": ذا كنت لا تعرف أين تطلب هذا، فلا يجب أن يكون لديك هذا.",
"activate": َفْعِيلٌ", "activate": فعيل",
"loading": َارٍ التَّحْمِيلُ..." "loading": "جارٍ التحميل..."
}, },
"downloads": { "downloads": {
"resume": "اسْتِئْنَافٌ", "resume": "استئناف",
"pause": ِيقَافٌ", "pause": "إيقاف مؤقت",
"eta": "الِاكْتِمَالُ {{eta}}", "eta": "الانتهاء {{eta}}",
"paused": ُوْقَفٌ", "paused": علّق",
"verifying": َارٍ التَّحَقُّقُ...", "verifying": "جارٍ التحقق...",
"completed": َكْتُومٌ", "completed": كتمل",
"removed": "لَمْ يُنَزَّلْ", "removed": "غير محمل",
"cancel": ِلْغَاءٌ", "cancel": لغاء",
"filter": َصْفِيَةُ الْأَلْعَابِ الْمُنَزَّلَةِ", "filter": صفية الألعاب المحملة",
"remove": ِزَالَةٌ", "remove": زالة",
"downloading_metadata": َارٍ تَنْزِيلُ الْبَيَانَاتِ الْوَصْفِيَّةِ...", "downloading_metadata": "جارٍ تنزيل البيانات الوصفية...",
"deleting": َارٍ حَذْفُ الْمُثَبِّتِ...", "deleting": "جارٍ حذف المثبت...",
"delete": "حَذْفُ الْمُثَبِّتِ", "delete": "إزالة المثبت",
"delete_modal_title": "هَلْ أَنْتَ مُتَأَكِّدٌ؟", "delete_modal_title": "هل أنت متأكد؟",
"delete_modal_description": َيُؤَدِّي هَذَا إِلَى إِزَالَةِ جَمِيعِ مَلَفَّاتِ التَّثْبِيتِ مِنْ حَاسُوبِكَ", "delete_modal_description": يؤدي هذا إلى إزالة جميع ملفات التثبيت من جهازك",
"install": َثْبِيتٌ", "install": ثبيت",
"download_in_progress": "جَارٍ التَّنْفِيذُ", "download_in_progress": "قيد التقدم",
"queued_downloads": "التَّنْزِيلَاتُ فِي الْانْتِظَارِ", "queued_downloads": "التنزيلات في قائمة الانتظار",
"downloads_completed": َكْتُومٌ", "downloads_completed": كتمل",
"queued": ِي الْانْتِظَارِ", "queued": "في قائمة الانتظار",
"no_downloads_title": َرَاغٌ تَامٌ", "no_downloads_title": ارغ جدًا",
"no_downloads_description": َمْ تَقُمْ بِتَنْزِيلِ أَيِّ شَيْءٍ بِاسْتِخْدَامِ Hydra بَعْدُ، لَكِنَّهُ لَيْسَ مُتَأَخِّرًا لِلْبَدْءِ.", "no_downloads_description": م تقم بتنزيل أي شيء باستخدام Hydra بعد، ولكن لم يفت الأوان للبدء.",
"checking_files": َارٍ التَّحَقُّقُ مِنَ الْمَلَفَّاتِ...", "checking_files": "جارٍ فحص الملفات...",
"seeding": "الْبَذْرُ", "seeding": "التوزيع",
"stop_seeding": ِيقَافُ الْبَذْرِ", "stop_seeding": "إيقاف التوزيع",
"resume_seeding": "اسْتِئْنَافُ الْبَذْرِ", "resume_seeding": "استئناف التوزيع",
"options": ِدَارَةٌ" "options": دارة"
}, },
"settings": { "settings": {
"downloads_path": َسَارُ التَّنْزِيلَاتِ", "downloads_path": سار التنزيلات",
"change": َحْدِيثٌ", "change": حديث",
"notifications": "الإِشْعَارَاتُ", "notifications": "الإشعارات",
"enable_download_notifications": ِنْدَ اكْتِمَالِ التَّنْزِيلِ", "enable_download_notifications": ند اكتمال التنزيل",
"enable_repack_list_notifications": ِنْدَ إِضَافَةِ إِصْدَارٍ مُعَادٍ تَغْلِيفِهِ جَدِيدٍ", "enable_repack_list_notifications": ند إضافة حزمة معاد تعبئتها جديدة",
"real_debrid_api_token_label": َمْزُ واجهة برمجة التطبيقات Real-Debrid", "real_debrid_api_token_label": مز واجهة برمجة تطبيقات Real-Debrid",
"quit_app_instead_hiding": "لا تُخْفِ Hydra عِنْدَ الإِغْلَاقِ", "quit_app_instead_hiding": "لا تخفي Hydra عند الإغلاق",
"launch_with_system": َشْغِيلُ Hydra عِنْدَ بَدْءِ النِّظَامِ", "launch_with_system": شغيل Hydra مع بدء النظام",
"general": َامٌ", "general": "عام",
"behavior": "سُلُوكٌ", "behavior": "السلوك",
"download_sources": َصَادِرُ التَّنْزِيلِ", "download_sources": صادر التنزيل",
"language": "اللُّغَةُ", "language": "اللغة",
"real_debrid_api_token": َمْزُ واجهة برمجة التطبيقات", "real_debrid_api_token": مز API",
"enable_real_debrid": َمْكِينُ Real-Debrid", "enable_real_debrid": فعيل Real-Debrid",
"real_debrid_description": "Real-Debrid هُوَ مُنَزِّلٌ غَيْرُ مَقْيُودٍ يَتِيحُ لَكَ تَنْزِيلَ الْمَلَفَّاتِ بِسُرْعَةٍ، مَحْدُودٌ فَقَطْ بِسُرْعَةِ الْإِنْتَرْنِتِ لَدَيْكَ.", "real_debrid_description": "Real-Debrid هو أداة تنزيل غير مقيدة تتيح لك تنزيل الملفات بسرعة، مقيدة فقط بسرعة الإنترنت لديك.",
"real_debrid_invalid_token": َمْزُ واجهة برمجة التطبيقات غَيْرُ صَالِحٍ", "real_debrid_invalid_token": مز API غير صالح",
"real_debrid_api_token_hint": ُمْكِنُكَ الْحُصُولُ عَلَى رَمْزِ واجهة برمجة التطبيقات <0>هُنَا</0>", "real_debrid_api_token_hint": مكنك الحصول على رمز API الخاص بك <0>هنا</0>",
"real_debrid_free_account_error": "الْحِسَابُ \"{{username}}\" هُوَ حِسَابٌ مَجَّانِيٌّ. يَرْجَى الِاشْتِرَاكُ فِي Real-Debrid", "real_debrid_free_account_error": "الحساب \"{{username}}\" هو حساب مجاني. يرجى الاشتراك في Real-Debrid",
"real_debrid_linked_message": َمَّ رَبْطُ الْحِسَابِ \"{{username}}\"", "real_debrid_linked_message": م ربط الحساب \"{{username}}\"",
"save_changes": ِفْظُ التَّغْيِيرَاتِ", "save_changes": فظ التغييرات",
"changes_saved": َمَّ حِفْظُ التَّغْيِيرَاتِ بِنَجَاحٍ", "changes_saved": م حفظ التغييرات بنجاح",
"download_sources_description": َتَقُومُ Hydra بِجَلْبِ رَوَابِطِ التَّنْزِيلِ مِنْ هَذِهِ الْمَصَادِرِ. يَجِبُ أَنْ يَكُونَ عُنْوَانُ URL لِلْمَصْدَرِ رَابِطًا مُبَاشِرًا إِلَى مِلَفٍّ .json يَحْتَوِي عَلَى رَوَابِطِ التَّنْزِيلِ.", "download_sources_description": يقوم Hydra بجلب روابط التنزيل من هذه المصادر. يجب أن يكون عنوان URL المصدر رابطًا مباشرًا لملف .json يحتوي على روابط التنزيل.",
"validate_download_source": َصْدِيقٌ", "validate_download_source": حقق",
"remove_download_source": ِزَالَةٌ", "remove_download_source": زالة",
"add_download_source": ِضَافَةُ مَصْدَرٍ", "add_download_source": ضافة مصدر",
"download_count_zero": َا تَوْجَدُ خِيَارَاتُ تَنْزِيلٍ", "download_count_zero": "لا توجد خيارات تنزيل",
"download_count_one": "{{countFormatted}} خِيَارُ تَنْزِيلٍ", "download_count_one": "{{countFormatted}} خيار تنزيل",
"download_count_other": "{{countFormatted}} خِيَارَاتُ تَنْزِيلٍ", "download_count_other": "{{countFormatted}} خيارات تنزيل",
"download_source_url": ُنْوَانُ مَصْدَرِ التَّنْزِيلِ", "download_source_url": نوان URL لمصدر التنزيل",
"add_download_source_description": َدْخِلْ عُنْوَانَ URL لِمِلَفٍّ .json", "add_download_source_description": دخل عنوان URL لملف .json",
"download_source_up_to_date": ُحَدَّثٌ", "download_source_up_to_date": حدث",
"download_source_errored": َطَأٌ", "download_source_errored": طأ",
"sync_download_sources": َزْجُ الْمَصَادِرِ", "sync_download_sources": زامنة المصادر",
"removed_download_source": َمَّ إِزَالَةُ مَصْدَرِ التَّنْزِيلِ", "removed_download_source": مت إزالة مصدر التنزيل",
"added_download_source": َمَّتْ إِضَافَةُ مَصْدَرِ التَّنْزِيلِ", "added_download_source": مت إضافة مصدر التنزيل",
"download_sources_synced": َمَّ مَزْجُ جَمِيعِ مَصَادِرِ التَّنْزِيلِ", "download_sources_synced": مت مزامنة جميع مصادر التنزيل",
"insert_valid_json_url": َدْخِلْ عُنْوَانَ JSON صَالِحًا", "insert_valid_json_url": دخل عنوان JSON صالح",
"found_download_option_zero": َمْ يُعْثَرْ عَلَى خِيَارِ تَنْزِيلٍ", "found_download_option_zero": م يتم العثور على خيارات تنزيل",
"found_download_option_one": "عُثِرَ عَلَى {{countFormatted}} خِيَارِ تَنْزِيلٍ", "found_download_option_one": "تم العثور على {{countFormatted}} خيار تنزيل",
"found_download_option_other": "عُثِرَ عَلَى {{countFormatted}} خِيَارَاتِ تَنْزِيلٍ", "found_download_option_other": "تم العثور على {{countFormatted}} خيارات تنزيل",
"import": "اسْتِيرَادٌ", "import": "استيراد",
"public": َامٌ", "public": "عام",
"private": َاصٌ", "private": "خاص",
"friends_only": "الْأَصْدِقَاءُ فَقَطْ", "friends_only": "الأصدقاء فقط",
"privacy": "الْخُصُوصِيَّةُ", "privacy": "الخصوصية",
"profile_visibility": ُؤْيَةُ الْمَلَفِّ الشَّخْصِيِّ", "profile_visibility": ؤية الملف الشخصي",
"profile_visibility_description": "اخْتَرْ مَنْ يُمْكِنُهُ رُؤْيَةُ مَلَفِّكَ الشَّخْصِيِّ وَمَكْتَبَتِكَ", "profile_visibility_description": "اختر من يمكنه رؤية ملفك الشخصي ومكتبتك",
"required_field": "هَذَا الْحَقْلُ مَطْلُوبٌ", "required_field": "هذا الحقل مطلوب",
"source_already_exists": َمَّتْ إِضَافَةُ هَذَا الْمَصْدَرِ مِنْ قَبْلُ", "source_already_exists": مت إضافة هذا المصدر مسبقًا",
"must_be_valid_url": َجِبُ أَنْ يَكُونَ الْمَصْدَرُ عُنْوَانَ URL صَالِحًا", "must_be_valid_url": جب أن يكون المصدر عنوان URL صالحًا",
"blocked_users": "الْمُسْتَخْدِمُونَ الْمَحْظُورُونَ", "blocked_users": "المستخدمون المحظورون",
"user_unblocked": َمَّ إِزَالَةُ حَظْرِ الْمُسْتَخْدِمِ", "user_unblocked": م إلغاء حظر المستخدم",
"enable_achievement_notifications": ِنْدَ فَتْحِ إِنْجَازٍ", "enable_achievement_notifications": ند فتح إنجاز",
"launch_minimized": َشْغِيلُ Hydra مُصَغَّرًا", "launch_minimized": شغيل Hydra مصغرًا",
"disable_nsfw_alert": َعْطِيلُ تَنْبِيهِ الْمُحْتَوَى غَيْرِ اللَّائِقِ", "disable_nsfw_alert": عطيل تنبيه المحتوى غير اللائق",
"seed_after_download_complete": "الْبَذْرُ بَعْدَ اكْتِمَالِ التَّنْزِيلِ", "seed_after_download_complete": "التوزيع بعد اكتمال التنزيل",
"show_hidden_achievement_description": "إِظْهَارُ وَصْفِ الإِنْجَازَاتِ الْمَخْفِيَّةِ قَبْلَ فَتْحِهَا" "show_hidden_achievement_description": "عرض وصف الإنجازات المخفية قبل فتحها",
"account": "الحساب",
"no_users_blocked": "لا يوجد مستخدمون محظورون",
"subscription_active_until": "اشتراك Hydra Cloud نشط حتى {{date}}",
"manage_subscription": "إدارة الاشتراك",
"update_email": "تحديث البريد الإلكتروني",
"update_password": "تحديث كلمة المرور",
"current_email": "البريد الإلكتروني الحالي:",
"no_email_account": "لم تقم بتعيين بريد إلكتروني بعد",
"account_data_updated_successfully": "تم تحديث بيانات الحساب بنجاح",
"renew_subscription": "تجديد اشتراك Hydra Cloud",
"subscription_expired_at": "انتهى اشتراكك في {{date}}",
"no_subscription": "استمتع بـ Hydra بأفضل طريقة ممكنة",
"become_subscriber": "كن مشتركًا في Hydra Cloud",
"subscription_renew_cancelled": "تم تعطيل التجديد التلقائي",
"subscription_renews_on": "سيتم تجديد اشتراكك في {{date}}",
"bill_sent_until": "سيتم إرسال فاتورتك التالية حتى هذا اليوم"
}, },
"notifications": { "notifications": {
"download_complete": "اكْتِمَالُ التَّنْزِيلِ", "download_complete": "اكتمل التنزيل",
"game_ready_to_install": "{{title}} جَاهِزٌ لِلتَّثْبِيتِ", "game_ready_to_install": "{{title}} جاهز للتثبيت",
"repack_list_updated": َمَّ تَحْدِيثُ قَائِمَةِ الإِصْدَارَاتِ الْمُعَادَةِ تَغْلِيفُهَا", "repack_list_updated": م تحديث قائمة الحزم المعاد تعبئتها",
"repack_count_one": "{{count}} إِصْدَارٌ مُعَادٌ تَغْلِيفُهُ أُضِيفَ", "repack_count_one": "تمت إضافة {{count}} حزمة معاد تعبئتها",
"repack_count_other": "{{count}} إِصْدَارَاتٌ مُعَادَةٌ تَغْلِيفُهَا أُضِيفَتْ", "repack_count_other": "تمت إضافة {{count}} حزم معاد تعبئتها",
"new_update_available": "الْإِصْدَارُ {{version}} مَتَوَفِّرٌ", "new_update_available": "الإصدار {{version}} متوفر",
"restart_to_install_update": َعِدْ تَشْغِيلَ Hydra لِتَثْبِيتِ التَّحْدِيثِ", "restart_to_install_update": عد تشغيل Hydra لتثبيت التحديث",
"notification_achievement_unlocked_title": َمَّ فَتْحُ إِنْجَازٍ لِـ {{game}}", "notification_achievement_unlocked_title": م فتح إنجاز لـ {{game}}",
"notification_achievement_unlocked_body": "{{achievement}} وَ{{count}} أُخْرَى تَمَّ فَتْحُهَا" "notification_achievement_unlocked_body": "{{achievement}} و {{count}} آخرين تم فتحهم"
}, },
"system_tray": { "system_tray": {
"open": َتْحُ Hydra", "open": تح Hydra",
"quit": "الْخُرُوجُ" "quit": "خروج"
}, },
"game_card": { "game_card": {
"no_downloads": َا تَوْجَدُ تَنْزِيلَاتٌ مَتَوَفِّرَةٌ" "no_downloads": "لا توجد تنزيلات متاحة"
}, },
"binary_not_found_modal": { "binary_not_found_modal": {
"title": "الْبَرَامِجُ غَيْرُ مُثَبَّتَةٍ", "title": "البرامج غير مثبتة",
"description": َمْ يُعْثَرْ عَلَى مَلَفَّاتٍ تَنْفِيذِيَّةٍ لِـ Wine أَوْ Lutris عَلَى نِظَامِكَ", "description": م يتم العثور على ملفات تشغيل Wine أو Lutris على نظامك",
"instructions": َحَقَّقْ مِنَ الطَّرِيقَةِ الصَّحِيحَةِ لِتَثْبِيتِ أَيٍّ مِنْهُمَا عَلَى تَوْزِيعَةِ Linux لَدَيْكَ لِتَعْمَلَ اللُّعْبَةُ بِشَكْلٍ طَبِيعِيٍّ" "instructions": حقق من الطريقة الصحيحة لتثبيت أي منها على توزيعة لينكس الخاصة بك حتى تعمل اللعبة بشكل طبيعي"
}, },
"modal": { "modal": {
"close": ِرُّ الإِغْلَاقِ" "close": ر الإغلاق"
}, },
"forms": { "forms": {
"toggle_password_visibility": َبْدِيلُ رُؤْيَةِ كَلِمَةِ الْمَرُورِ" "toggle_password_visibility": بديل رؤية كلمة المرور"
}, },
"user_profile": { "user_profile": {
"amount_hours": "{{amount}} سَاعَاتٌ", "amount_hours": "{{amount}} ساعات",
"amount_minutes": "{{amount}} دَقَائِقُ", "amount_minutes": "{{amount}} دقائق",
"last_time_played": "آخِرُ مَرَّةٍ لُعِبَتْ {{period}}", "last_time_played": "آخر تشغيل {{period}}",
"activity": "النَّشَاطُ الْأَخِيرُ", "activity": "النشاط الأخير",
"library": "الْمَكْتَبَةُ", "library": "المكتبة",
"total_play_time": ِجْمَالِيُّ وَقْتِ اللَّعِبِ", "total_play_time": جمالي وقت اللعب",
"no_recent_activity_title": "هَمَمْ... لَا شَيْءَ هُنَا", "no_recent_activity_title": "همم... لا شيء هنا",
"no_recent_activity_description": َمْ تَلْعَبْ أَيَّ أَلْعَابٍ مُؤَخَّرًا. حَانَ الْوَقْتُ لِتَغْيِيرِ ذَلِكَ!", "no_recent_activity_description": م تلعب أي ألعاب مؤخرًا. حان الوقت لتغيير ذلك!",
"display_name": "اسْمُ الْعَرْضِ", "display_name": "اسم العرض",
"saving": َارٍ الْحِفْظُ", "saving": "جارٍ الحفظ",
"save": ِفْظٌ", "save": فظ",
"edit_profile": َحْرِيرُ الْمَلَفِّ الشَّخْصِيِّ", "edit_profile": عديل الملف الشخصي",
"saved_successfully": َمَّ الْحِفْظُ بِنَجَاحٍ", "saved_successfully": م الحفظ بنجاح",
"try_again": "الرَّجَاءُ الْمُحَاوَلَةُ مَرَّةً أُخْرَى", "try_again": "يرجى المحاولة مرة أخرى",
"sign_out_modal_title": "هَلْ أَنْتَ مُتَأَكِّدٌ؟", "sign_out_modal_title": "هل أنت متأكد؟",
"cancel": ِلْغَاءٌ", "cancel": لغاء",
"successfully_signed_out": َمَّ تَسْجِيلُ الْخُرُوجِ بِنَجَاحٍ", "successfully_signed_out": م تسجيل الخروج بنجاح",
"sign_out": َسْجِيلُ الْخُرُوجِ", "sign_out": سجيل الخروج",
"playing_for": "جَارِي اللَّعِبُ لِمُدَّةِ {{amount}}", "playing_for": "يلعب لمدة {{amount}}",
"sign_out_modal_text": َكْتَبَتُكَ مُرْتَبِطَةٌ بِحِسَابِكَ الْحَالِيِّ. عِنْدَ تَسْجِيلِ الْخُرُوجِ، لَنْ تَكُونَ مَكْتَبَتُكَ مَرْئِيَّةً بَعْدَ الْآنِ، وَلَنْ يَتِمَّ حِفْظُ أَيِّ تَقَدُّمٍ. هَلْ تُرِيدُ الْمُتَابَعَةَ مَعَ تَسْجِيلِ الْخُرُوجِ؟", "sign_out_modal_text": كتبتك مرتبطة بحسابك الحالي. عند تسجيل الخروج، لن تكون مكتبتك مرئية بعد الآن، ولن يتم حفظ أي تقدم. هل تتابع تسجيل الخروج؟",
"add_friends": ِضَافَةُ الْأَصْدِقَاءِ", "add_friends": ضافة أصدقاء",
"add": ِضَافَةٌ", "add": ضافة",
"friend_code": َمْزُ الصَّدِيقِ", "friend_code": مز الصديق",
"see_profile": "رُؤْيَةُ الْمَلَفِّ الشَّخْصِيِّ", "see_profile": "عرض الملف الشخصي",
"sending": َارٍ الْإِرْسَالُ", "sending": "جارٍ الإرسال",
"friend_request_sent": َمَّ إِرْسَالُ طَلَبِ الصَّدَاقَةِ", "friend_request_sent": م إرسال طلب الصداقة",
"friends": "الْأَصْدِقَاءُ", "friends": "الأصدقاء",
"friends_list": َائِمَةُ الْأَصْدِقَاءِ", "friends_list": "قائمة الأصدقاء",
"user_not_found": "الْمُسْتَخْدِمُ غَيْرُ مَوْجُودٍ", "user_not_found": "المستخدم غير موجود",
"block_user": َظْرُ الْمُسْتَخْدِمِ", "block_user": ظر المستخدم",
"add_friend": ِضَافَةُ صَدِيقٍ", "add_friend": ضافة صديق",
"request_sent": َمَّ إِرْسَالُ الطَّلَبِ", "request_sent": م إرسال الطلب",
"request_received": َمَّ اسْتِقْبَالُ الطَّلَبِ", "request_received": م استلام الطلب",
"accept_request": َبُولُ الطَّلَبِ", "accept_request": بول الطلب",
"ignore_request": َجَاهُلُ الطَّلَبِ", "ignore_request": جاهل الطلب",
"cancel_request": ِلْغَاءُ الطَّلَبِ", "cancel_request": لغاء الطلب",
"undo_friendship": ِلْغَاءُ الصَّدَاقَةِ", "undo_friendship": لغاء الصداقة",
"request_accepted": َمَّ قَبُولُ الطَّلَبِ", "request_accepted": م قبول الطلب",
"user_blocked_successfully": َمَّ حَظْرُ الْمُسْتَخْدِمِ بِنَجَاحٍ", "user_blocked_successfully": م حظر المستخدم بنجاح",
"user_block_modal_text": َيُؤَدِّي هَذَا إِلَى حَظْرِ {{displayName}}", "user_block_modal_text": يؤدي هذا إلى حظر {{displayName}}",
"blocked_users": "الْمُسْتَخْدِمُونَ الْمَحْظُورُونَ", "blocked_users": "المستخدمون المحظورون",
"unblock": ِزَالَةُ الْحَظْرِ", "unblock": لغاء الحظر",
"no_friends_added": َيْسَ لَدَيْكَ أَصْدِقَاءٌ مُضَافُونَ", "no_friends_added": يس لديك أصدقاء مضافون",
"pending": َيْدُ الْانْتِظَارِ", "pending": يد الانتظار",
"no_pending_invites": َيْسَ لَدَيْكَ دَعَوَاتٌ قَيْدُ الْانْتِظَارِ", "no_pending_invites": يس لديك دعوات معلقة",
"no_blocked_users": َيْسَ لَدَيْكَ مُسْتَخْدِمُونَ مَحْظُورُونَ", "no_blocked_users": يس لديك مستخدمون محظورون",
"friend_code_copied": َمَّ نَسْخُ رَمْزِ الصَّدِيقِ", "friend_code_copied": م نسخ رمز الصديق",
"undo_friendship_modal_text": َيُؤَدِّي هَذَا إِلَى إِلْغَاءِ صَدَاقَتِكَ مَعَ {{displayName}}", "undo_friendship_modal_text": يؤدي هذا إلى إلغاء صداقتك مع {{displayName}}",
"privacy_hint": ِتَعْدِيلِ مَنْ يُمْكِنُهُ رُؤْيَةُ هَذَا، اذْهَبْ إِلَى <0>الإعْدَادَاتِ</0>", "privacy_hint": ضبط من يمكنه رؤية هذا، انتقل إلى <0>الإعدادات</0>",
"locked_profile": "هَذَا الْمَلَفُّ الشَّخْصِيُّ خَاصٌّ", "locked_profile": "هذا الملف الشخصي خاص",
"image_process_failure": َشَلَ أَثْنَاءَ مُعَالَجَةِ الصُّورَةِ", "image_process_failure": شل معالجة الصورة",
"required_field": "هَذَا الْحَقْلُ مَطْلُوبٌ", "required_field": "هذا الحقل مطلوب",
"displayname_min_length": َجِبُ أَنْ يَكُونَ اسْمُ الْعَرْضِ عَلَى الْأَقَلِّ 3 أَحْرُفٍ", "displayname_min_length": جب أن يكون اسم العرض على الأقل 3 أحرف",
"displayname_max_length": َجِبُ أَنْ يَكُونَ اسْمُ الْعَرْضِ عَلَى الْأَكْثَرِ 50 حَرْفًا", "displayname_max_length": جب ألا يتجاوز اسم العرض 50 حرفًا",
"report_profile": "تَقْرِيرٌ عَنْ هَذَا الْمَلَفِّ الشَّخْصِيِّ", "report_profile": "الإبلاغ عن هذا الملف الشخصي",
"report_reason": ِمَاذَا تُقَدِّمُ تَقْرِيرًا عَنْ هَذَا الْمَلَفِّ الشَّخْصِيِّ؟", "report_reason": ماذا تقوم بالإبلاغ عن هذا الملف الشخصي؟",
"report_description": َعْلُومَاتٌ إِضَافِيَّةٌ", "report_description": علومات إضافية",
"report_description_placeholder": َعْلُومَاتٌ إِضَافِيَّةٌ", "report_description_placeholder": علومات إضافية",
"report": "تَقْرِيرٌ", "report": "الإبلاغ",
"report_reason_hate": ِطَابُ الْكُرْهِ", "report_reason_hate": طاب كراهية",
"report_reason_sexual_content": ُحْتَوًى جِنْسِيٌّ", "report_reason_sexual_content": حتوى جنسي",
"report_reason_violence": ُنْفٌ", "report_reason_violence": نف",
"report_reason_spam": "رَاسِلَةٌ عَشْوَائِيَّةٌ", "report_reason_spam": "بريد عشوائي",
"report_reason_other": "آخَرُ", "report_reason_other": "أخرى",
"profile_reported": َمَّ تَقْرِيرُ الْمَلَفِّ الشَّخْصِيِّ", "profile_reported": م الإبلاغ عن الملف الشخصي",
"your_friend_code": َمْزُ صَدِيقِكَ:", "your_friend_code": مز صديقك:",
"upload_banner": "رَفْعُ لَافِتَةٍ", "upload_banner": "تحميل بانر",
"uploading_banner": َارٍ رَفْعُ اللَّافِتَةِ...", "uploading_banner": "جارٍ تحميل البانر...",
"background_image_updated": َمَّ تَحْدِيثُ صُورَةِ الْخَلْفِيَّةِ", "background_image_updated": م تحديث صورة الخلفية",
"stats": "الإحْصَائِيَّاتُ", "stats": "الإحصائيات",
"achievements": "الإِنْجَازَاتُ", "achievements": "إنجازات",
"games": "الْأَلْعَابُ", "games": "الألعاب",
"top_percentile": "الْأَفْضَلُ {{percentile}}%", "top_percentile": "ال{{percentile}}% الأعلى",
"ranking_updated_weekly": "التَّرْتِيبُ يُحَدَّثُ أُسْبُوعِيًّا", "ranking_updated_weekly": "يتم تحديث التصنيف أسبوعيًا",
"playing": "جَارِي اللَّعِبُ {{game}}", "playing": "يلعب {{game}}",
"achievements_unlocked": "الإِنْجَازَاتُ الْمَفْتُوحَةُ", "achievements_unlocked": "الإنجازات المفتوحة",
"earned_points": "النَّقَاطُ الْمَكْسُوبَةُ", "earned_points": "النقاط المكتسبة",
"show_achievements_on_profile": َرْضُ إِنْجَازَاتِكَ عَلَى مَلَفِّكَ الشَّخْصِيِّ", "show_achievements_on_profile": رض إنجازاتك على ملفك الشخصي",
"show_points_on_profile": َرْضُ النَّقَاطِ الْمَكْسُوبَةِ عَلَى مَلَفِّكَ الشَّخْصِيِّ" "show_points_on_profile": رض نقاطك المكتسبة على ملفك الشخصي"
}, },
"achievement": { "achievement": {
"achievement_unlocked": "إِنْجَازٌ مَفْتُوحٌ", "achievement_unlocked": "تم فتح الإنجاز",
"user_achievements": ِنْجَازَاتُ {{displayName}}", "user_achievements": نجازات {{displayName}}",
"your_achievements": ِنْجَازَاتُكَ", "your_achievements": نجازاتك",
"unlocked_at": َمَّ الْفَتْحُ فِي: {{date}}", "unlocked_at": م الفتح في: {{date}}",
"subscription_needed": َحْتَاجُ اشْتِرَاكُ Hydra Cloud لِرُؤْيَةِ هَذَا الْمُحْتَوَى", "subscription_needed": حتاج إلى اشتراك Hydra Cloud لرؤية هذا المحتوى",
"new_achievements_unlocked": َمَّ فَتْحُ {{achievementCount}} إِنْجَازَاتٍ جَدِيدَةٍ مِنْ {{gameCount}} أَلْعَابٍ", "new_achievements_unlocked": م فتح {{achievementCount}} إنجازات جديدة من {{gameCount}} ألعاب",
"achievement_progress": "{{unlockedCount}}/{{totalCount}} إِنْجَازَاتٍ", "achievement_progress": "{{unlockedCount}}/{{totalCount}} إنجازات",
"achievements_unlocked_for_game": َمَّ فَتْحُ {{achievementCount}} إِنْجَازَاتٍ جَدِيدَةٍ لِـ {{gameTitle}}", "achievements_unlocked_for_game": م فتح {{achievementCount}} إنجازات جديدة لـ {{gameTitle}}",
"hidden_achievement_tooltip": "هَذَا إِنْجَازٌ مَخْفِيٌّ", "hidden_achievement_tooltip": "هذا إنجاز مخفي",
"achievement_earn_points": "اكْسِبْ {{points}} نَقَاطًا بِهَذَا الإِنْجَازِ", "achievement_earn_points": "اكسب {{points}} نقطة مع هذا الإنجاز",
"earned_points": "النَّقَاطُ الْمَكْسُوبَةُ:", "earned_points": "النقاط المكتسبة:",
"available_points": "النَّقَاطُ الْمُتَوَفِّرَةُ:", "available_points": "النقاط المتاحة:",
"how_to_earn_achievements_points": َيْفَ تَكْسِبُ نَقَاطَ الإِنْجَازَاتِ؟" "how_to_earn_achievements_points": يفية كسب نقاط الإنجازات؟"
}, },
"hydra_cloud": { "hydra_cloud": {
"subscription_tour_title": "اشْتِرَاكُ Hydra Cloud", "subscription_tour_title": "اشتراك Hydra Cloud",
"subscribe_now": "اشْتَرِكِ الْآنَ", "subscribe_now": "اشترك الآن",
"cloud_saving": ِفْظٌ سَحَابِيٌّ", "cloud_saving": فظ سحابي",
"cloud_achievements": "حِفْظُ إِنْجَازَاتِكَ فِي السَّحَابَةِ", "cloud_achievements": "احفظ إنجازاتك على السحابة",
"animated_profile_picture": ُورُ الْمَلَفِّ الشَّخْصِيِّ الْمُتَحَرِّكَةِ", "animated_profile_picture": "صورة ملف شخصي متحركة",
"premium_support": "الدَّعْمُ الْمُتَقَدِّمُ", "premium_support": "دعم ممتاز",
"show_and_compare_achievements": "عَرْضٌ وَمُقَارَنَةُ إِنْجَازَاتِكَ مَعَ مُسْتَخْدِمِينَ آخَرِينَ", "show_and_compare_achievements": "اعرض وقارن إنجازاتك مع المستخدمين الآخرين",
"animated_profile_banner": "لَافِتَةُ الْمَلَفِّ الشَّخْصِيِّ الْمُتَحَرِّكَةِ", "animated_profile_banner": "بانر ملف شخصي متحرك",
"hydra_cloud": "Hydra Cloud", "hydra_cloud": "Hydra Cloud",
"hydra_cloud_feature_found": َقَدْ اكْتَشَفْتَ مِيزَةً مِنْ Hydra Cloud!", "hydra_cloud_feature_found": قد اكتشفت ميزة Hydra Cloud!",
"learn_more": "تَعَلَّمْ أَكْثَرَ" "learn_more": "معرفة المزيد"
} }
} }