From 0511153bad5c0dd7c5fc13ae2bfdcd76c036e41b Mon Sep 17 00:00:00 2001 From: German Khokhlov Date: Thu, 29 Oct 2026 00:00:14 +0400 Subject: [PATCH] i18n(ar): apply review round 4 Co-Authored-By: Claude Opus 5.5 --- docs/translations/ar.md | 8 ++++++-- src/i18n/locales/ar.json | 30 +++++++++++++++--------------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/docs/translations/ar.md b/docs/translations/ar.md index b5ab5acdf..89265a4eb 100644 --- a/docs/translations/ar.md +++ b/docs/translations/ar.md @@ -8,11 +8,11 @@ Translation sources: abiyeenzo (#915). - Modern Standard Arabic, neutral across regions. Address the user with plain imperatives: «انقر»، «فعّل»، «أعد المحاولة». - Arabic has no letter case: an UPPERCASE English HUD label becomes the same short Arabic label. Keep labels as short as the English: «مباشر»، «متقادم»، «متوقف». -- Status words in progress use «جارٍ …» («جارٍ التحميل»، «جارٍ الضبط»، «… جارٍ تشغيل اللقطة»), so a status chip never reads as the command next to it («ضبط» is the TUNE button); finished actions use the passive («تم الحفظ»، «أُلغي التحميل»). Data that refreshes itself «يُحدَّث» (يتحدّث means "speaks"). A sentence about a `{placeholder}` whose gender and number vary stays impersonal: «{layers}: تم التفعيل للتو». +- Status words in progress use «جارٍ …» («جارٍ التحميل»، «جارٍ الضبط»، «… جارٍ تشغيل اللقطة»), so a status chip never reads as the command next to it («ضبط» is the TUNE button); finished actions use the passive («تم الحفظ»، «أُلغي التحميل»). Data that refreshes itself «يُحدَّث» (يتحدّث means "speaks"). A sentence about a `{placeholder}` whose gender and number vary (tool, layer and cohort names, call signs, vessel names) stays impersonal: «{layers}: تم التفعيل للتو»، ««{name}» قيد الاستخدام»، «{id}: لا بيانات واردة الآن»، «لم يعد {name} ضمن البيانات المحمّلة». - A label followed by its value takes a colon, so it does not read as a sentence: «الصوت: نشط»، «السياق: {value}»، «الاحتواء: {percent}%». A named mode or control quoted in a sentence takes «»: «يظهر في وضع «كثيف» فقط». - Arabic punctuation in Arabic text: ، ؛ ؟ and «» for quotes. Keep `·` as the HUD separator, `—` with spaces, and `…`. - Arrows that show a sequence point the way Arabic reads: «الإشارات ← الأخبار ← المحلي», «{origin} ← {destination}». -- Product names, provider names and codes stay in Latin letters: Google, Cesium ion, CelesTrak, NOAA, FIRMS, AIS, ADS-B, GNSS, CCTV, HUD, CRT, NVG, FLIR, WHOT/BHOT, Ironbow, Street View, Mapillary. Aviation and camera abbreviations stay Latin too: HDG, FOV, BRG, CRS, GS, TRK, V/S, SQUAWK. Local place names from the Bhote Koshi scene (Rasuwagadhi, Bidur, Timure…) stay Latin; well-known cities and countries are written in Arabic (أوستن، طوكيو، نيبال). +- Product names, provider names and codes stay in Latin letters: Google, Cesium ion, CelesTrak, NOAA, FIRMS, AIS, ADS-B, GNSS, CCTV, HUD, CRT, NVG, FLIR, WHOT/BHOT, Ironbow, Street View, Mapillary. Aviation and camera abbreviations stay Latin too: HDG, FOV, BRG, CRS, GS, TRK, V/S, SQUAWK. Local place names from the Bhote Koshi scene (Rasuwagadhi, Bidur, Timure…) stay Latin, and a site known by two names takes one Arabic noun in front: «جسر Mailung / Upper Trishuli»; well-known cities and countries are written in Arabic (أوستن، طوكيو، نيبال). - Months are the international names used across the Arab world: يناير، فبراير … أغسطس. ## Digits and direction @@ -84,6 +84,7 @@ Every form must keep `{count}`. For one and two, Arabic names the quantity with | Recent Imagery | الصور الحديثة | | Global Context / Context | السياق العالمي / السياق | | radio station / tuner / gain | محطة / موالف / الكسب | +| VOLUME (slider) / VOICE | مستوى الصوت / الصوت | | decoder (SDR) | مفكّك | | transit / bike share | النقل العام / الدراجات المشتركة | | Previous / Next | السابق / التالي | @@ -96,6 +97,9 @@ Every form must keep `{count}`. For one and two, Arabic names the quantity with | parameters / ellipsoid | المعلمات / المجسّم الإهليلجي | | scene cloud | غيوم المشهد | | box (Recent Imagery area) / pin | منطقة / تثبيت | +| width (box size) / view (current camera) | اتساع / العرض الحالي (عرض alone reads as display) | +| N/A | غير متاح (no abbreviation) | +| METRO (view band) / REGIONAL | حضري (not حاضرة) / إقليمي | | THIS (voice pointer) | هذا | | outline / mark (map annotation) | مخطط / علامة، تعليم | | share (a view or link) | مشاركة | diff --git a/src/i18n/locales/ar.json b/src/i18n/locales/ar.json index 6b310596f..792c066b4 100644 --- a/src/i18n/locales/ar.json +++ b/src/i18n/locales/ar.json @@ -326,7 +326,7 @@ "Play": "تشغيل", "Next filtered radio station": "محطة الراديو التالية في القائمة المصفّاة", "Next station": "المحطة التالية", - "VOLUME": "الصوت", + "VOLUME": "مستوى الصوت", "Compact Radio volume": "مستوى صوت الراديو المصغّر", "Cockpit display and Radio controls": "عناصر تحكم العرض والراديو في القمرة", "Expand Cockpit display options": "توسيع خيارات عرض القمرة", @@ -389,7 +389,7 @@ }, "AVAILABLE INPUTS CURRENT · NOT AN ALL-CLEAR": "المدخلات المتاحة محدّثة · لا يعني أن الوضع آمن", "{cohort} · {contact}": "{cohort} · {contact}", - "{cohort}, Unavailable": "{cohort}، غير متاح", + "{cohort}, Unavailable": "{cohort}: غير متاح", "BRG —": "BRG —", "AHEAD": "أمامك", "{side} {angle}": "{side} {angle}", @@ -960,12 +960,12 @@ "Gyirong border gate": "المعبر الحدودي في Gyirong", "Border gate": "المعبر الحدودي", "Timure evidence cluster": "مجموعة أدلة Timure", - "Mailung / Upper Trishuli bridge": "Mailung / جسر Upper Trishuli", + "Mailung / Upper Trishuli bridge": "جسر Mailung / Upper Trishuli", "Dandagaun viewpoint restaurant": "مطعم الإطلالة في Dandagaun", "Dandagaun viewpoint": "نقطة الإطلالة في Dandagaun", "Bidur - Trishuli bridge": "جسر Bidur - Trishuli", "Bidur bridge": "جسر Bidur", - "Devighat / Taadi Khola Bridge": "Devighat / جسر Taadi Khola", + "Devighat / Taadi Khola Bridge": "جسر Devighat / Taadi Khola", "Devighat bridge": "جسر Devighat", "Facebook player API did not initialize.": "لم تبدأ واجهة API لمشغّل Facebook.", "Facebook player API could not load.": "تعذّر تحميل واجهة API لمشغّل Facebook.", @@ -1171,10 +1171,10 @@ "{state} {layers}": "{state}: {layers}", "view band|STREET": "شارع", "view band|CITY": "مدينة", - "view band|METRO": "حاضرة", + "view band|METRO": "حضري", "view band|REGIONAL": "إقليمي", "view band|GLOBAL": "عالمي", - "N/A": "غ/م", + "N/A": "غير متاح", "{mode} {band} {locality} | {region} | ALT {alt} | WINDOW {window} | SUN {sun}° | ONA {ona}° | {zone}": "{mode} {band} {locality} | {region} | الارتفاع {alt} | النافذة {window} | الشمس {sun}° | ONA {ona}° | {zone}", "NEAR {poi} ({city}) {distance}": "قرب {poi} ({city}) {distance}", "SECTOR {lat} {lon}": "القطاع {lat} {lon}", @@ -1461,8 +1461,8 @@ "action|CLEAR": "مسح", "Remove the route and both markers": "إزالة المسار والعلامتين", "press Escape twice to leave Draw": "اضغط Esc مرتين للخروج من «الرسم»", - "{name} is active — turn {name} off, then set {endpoint}": "«{name}» نشط — أوقف «{name}»، ثم عيّن {endpoint}", - "{name} is active — {leave}, then set {endpoint}": "«{name}» نشط — {leave}، ثم عيّن {endpoint}", + "{name} is active — turn {name} off, then set {endpoint}": "«{name}» قيد الاستخدام — أوقف «{name}»، ثم عيّن {endpoint}", + "{name} is active — {leave}, then set {endpoint}": "«{name}» قيد الاستخدام — {leave}، ثم عيّن {endpoint}", "Only the first {count} turns of this route are shown": "لا يُعرض من هذا المسار سوى أول {count} من الانعطافات", "Turn-by-turn directions": "إرشادات خطوة بخطوة", "Another map tool is using clicks — close it, then SET A again": "أداة خريطة أخرى تستخدم النقرات — أغلقها، ثم اضغط «تعيين A» مجددًا", @@ -2133,7 +2133,7 @@ "SDR decoder worker failed": "فشل عامل مفكّك SDR", "SDR decoder did not start; receiver stopped": "لم يبدأ مفكّك SDR؛ توقف جهاز الاستقبال", "SDR decoder stopped responding; receiver stopped": "توقف مفكّك SDR عن الاستجابة؛ توقف جهاز الاستقبال", - "SDR decoder fell behind; receiver stopped": "تأخّر مفكّك SDR عن المواكبة؛ توقف جهاز الاستقبال", + "SDR decoder fell behind; receiver stopped": "عجز مفكّك SDR عن مواكبة تدفق البيانات؛ توقف جهاز الاستقبال", "WebUSB requires desktop Chrome or Edge": "يتطلب WebUSB متصفح Chrome أو Edge على سطح المكتب", "Waiting for an RTL-SDR device…": "بانتظار جهاز RTL-SDR…", "Browser audio is suspended; press Connect again to resume it": "صوت المتصفح معلّق؛ اضغط «اتصال» مجددًا لاستئنافه", @@ -2384,8 +2384,8 @@ "That point cannot anchor a box": "لا يمكن تثبيت منطقة على تلك النقطة", "Imagery stops at ±{limit}° latitude": "تتوقف الصور عند خط العرض ±{limit}°", "{owner} is using the pointer — close it first": "المؤشر مستخدم من قِبل «{owner}» — أغلقه أولًا", - "Box is {size} wide · limit {limit}": "عرض المنطقة {size} · الحد {limit}", - "View is {size} wide · limit {limit}": "عرض المنظر {size} · الحد {limit}", + "Box is {size} wide · limit {limit}": "اتساع المنطقة {size} · الحد {limit}", + "View is {size} wide · limit {limit}": "اتساع العرض الحالي {size} · الحد {limit}", "VS BASEMAP": "مقابل الخريطة", "A / B": "A / B", "Newest low-cloud day for this box · scene cloud, not box cloud": "أحدث يوم قليل الغيوم لهذه المنطقة · غيوم المشهد كله لا المنطقة", @@ -2510,8 +2510,8 @@ "Shared flight is unavailable": "الرحلة المشتركة غير متاحة", "Shared military flight is unavailable": "الرحلة العسكرية المشتركة غير متاحة", "Shared satellite is unavailable": "القمر الصناعي المشترك غير متاح", - "{id} isn't reporting now — showing where it was last seen": "{id} لا يرسل بيانات الآن — يُعرض آخر موضع شوهد فيه", - "{id} isn't reporting now — showing where it was at {time}": "{id} لا يرسل بيانات الآن — يُعرض موضعه عند {time}", + "{id} isn't reporting now — showing where it was last seen": "{id}: لا بيانات واردة الآن — يُعرض آخر موضع معروف", + "{id} isn't reporting now — showing where it was at {time}": "{id}: لا بيانات واردة الآن — يُعرض الموضع عند {time}", "This share link can't be opened": "لا يمكن فتح رابط المشاركة هذا", "Shared vessel is unavailable": "السفينة المشتركة غير متاحة", "subject": "الهدف", @@ -2920,7 +2920,7 @@ "At least {items}": "{items} على الأقل", "{items} {scope}": "{items} {scope}", "last 24 h": "آخر 24 س", - "past 30 d and upcoming": "آخر 30 يومًا والقادمة", + "past 30 d and upcoming": "آخر 30 يومًا والإطلاقات القادمة", "the flights layer loads by viewport": "طبقة الرحلات تُحمَّل حسب منفذ العرض", "distance is ground distance, not overhead": "المسافة أرضية حتى النقطة تحت القمر الصناعي، لا حتى القمر نفسه", "the count is a lower bound because at least one layer reached its retained limit.": "العدد حد أدنى لأن طبقة واحدة على الأقل بلغت حد السجلات المحفوظة.", @@ -2977,7 +2977,7 @@ "{layer} is enabled, but its destination refresh did not complete": "«{layer}» مفعّلة، لكن تحديثها عند الوجهة لم يكتمل", "{layer} is enabled, but {source} is unavailable": "«{layer}» مفعّلة، لكن {source} غير متاح", "Could not arrive at {place}": "تعذّر الوصول إلى {place}", - "{name} is no longer loaded": "{name} لم يعد محمَّلًا", + "{name} is no longer loaded": "لم يعد {name} ضمن البيانات المحمّلة", "Unknown target layer: {target}": "طبقة هدف غير معروفة: {target}", "nominal": "طبيعي", "{label} on": "{label}: مفعّل",