feat(i18n): complete message parity across all 25 locales
Gitea Actions Runner Test / test-job (push) Successful in 1s
CI / check (push) Successful in 37s
CI / tests-unit (push) Successful in 1m49s
CI / tests-integration (push) Successful in 1m50s
CI / tests-ui (push) Successful in 2m29s
CI / preflight (push) Skipped
CI / deploy (push) Failing after 1m37s
Gitea Actions Runner Test / test-job (push) Successful in 1s
CI / check (push) Successful in 37s
CI / tests-unit (push) Successful in 1m49s
CI / tests-integration (push) Successful in 1m50s
CI / tests-ui (push) Successful in 2m29s
CI / preflight (push) Skipped
CI / deploy (push) Failing after 1m37s
The admin.studio.nitroCleanup section (102 keys) only existed in en and nl, so 23 locales fell back to English for the entire Nitro Cleanup panel. The referrals and dailyRewards keys were missing from the same 23 locales, and en itself was missing 6 keys that nl had. Add the missing keys to every locale with translations, so all 25 locales now carry the same 6063 keys.
This commit is contained in:
1 parent
944527e078
commit
bc00ecf08c
24 files changed
+4483
-182
No files matched your search
+199
-7
@@ -175,7 +175,9 @@
|
||||
"cmsErrors": "CMS errors",
|
||||
"themeBuilder": "Theme builder",
|
||||
"openSidebar": "Open menu",
|
||||
"closeSidebar": "Close menu"
|
||||
"closeSidebar": "Close menu",
|
||||
"referrals": "الإحالات",
|
||||
"dailyRewards": "المكافآت اليومية"
|
||||
},
|
||||
"logs": {
|
||||
"audit": {
|
||||
@@ -1806,7 +1808,8 @@
|
||||
"saving": "Saving…",
|
||||
"deleteAd": "Delete ad",
|
||||
"cancel": "Cancel"
|
||||
}
|
||||
},
|
||||
"colId": "المعرف"
|
||||
},
|
||||
"writeableBoxes": {
|
||||
"title": "Writeable Boxes",
|
||||
@@ -3361,7 +3364,9 @@
|
||||
"errors": "Errors",
|
||||
"alerts": "Alerts",
|
||||
"toolsGroup": "Tools",
|
||||
"cmsErrors": "CMS errors"
|
||||
"cmsErrors": "CMS errors",
|
||||
"referrals": "الإحالات",
|
||||
"dailyRewards": "المكافآت اليومية"
|
||||
},
|
||||
"events": "Events",
|
||||
"eventsSubtitle": "Hotel events and event types",
|
||||
@@ -4969,6 +4974,64 @@
|
||||
"NoscopescreatedyetAddonebelow": "No scopes created yet. Add one below.",
|
||||
"Rename": "Rename"
|
||||
}
|
||||
},
|
||||
"referrals": {
|
||||
"title": "الإحالات",
|
||||
"subtitle": "نظام الدعوات",
|
||||
"referralsToday": "إحالات اليوم",
|
||||
"referralsTotal": "إجمالي الإحالات",
|
||||
"invitedTotal": "الدعوات المحتسبة",
|
||||
"claims": "المكافآت المطالبة بها",
|
||||
"settings": "إعدادات المكافأة",
|
||||
"needed": "الإحالات المطلوبة",
|
||||
"rewardAmount": "مبلغ المكافأة",
|
||||
"rewardCurrency": "عملة المكافأة",
|
||||
"blockSameIp": "رفض الإحالات التي تشترك في عنوان IP الحالي للداعي",
|
||||
"save": "حفظ الإعدادات",
|
||||
"saving": "جارٍ الحفظ…",
|
||||
"saved": "تم حفظ إعدادات الإحالة.",
|
||||
"saveError": "تعذر حفظ إعدادات الإحالة.",
|
||||
"recent": "الإحالات الأخيرة",
|
||||
"unavailable": "بيانات الإحالة غير متاحة مؤقتًا.",
|
||||
"empty": "لا توجد إحالات بعد.",
|
||||
"inviter": "الداعي",
|
||||
"invitee": "المستخدم المدعو",
|
||||
"ip": "عنوان IP",
|
||||
"date": "التاريخ"
|
||||
},
|
||||
"dailyRewards": {
|
||||
"title": "مكافآت تسجيل الدخول اليومية",
|
||||
"subtitle": "جدول مكافآت تسجيل الدخول اليومية",
|
||||
"enabled": "حالة الميزة",
|
||||
"yes": "مُفعّلة",
|
||||
"no": "مُعطّلة",
|
||||
"scheduleDays": "أيام الجدول",
|
||||
"claimsToday": "المطالبات اليوم",
|
||||
"claimsTotal": "إجمالي المطالبات",
|
||||
"status": "حالة الميزة",
|
||||
"statusHint": "عند التعطيل، تُخفى بطاقة المكافأة وتُرفض المطالبات الجديدة.",
|
||||
"disable": "تعطيل",
|
||||
"enable": "تفعيل",
|
||||
"schedule": "جدول المكافآت",
|
||||
"day": "اليوم {day}",
|
||||
"reward": "المكافأة",
|
||||
"amount": "المبلغ",
|
||||
"actions": "إجراءات",
|
||||
"addDay": "اليوم",
|
||||
"add": "إضافة يوم",
|
||||
"save": "حفظ",
|
||||
"saving": "جارٍ الحفظ…",
|
||||
"saved": "تم حفظ جدول المكافآت.",
|
||||
"cancel": "إلغاء",
|
||||
"edit": "تعديل",
|
||||
"delete": "حذف",
|
||||
"created": "تمت إضافة يوم المكافأة.",
|
||||
"updated": "تم تحديث يوم المكافأة.",
|
||||
"deleted": "تمت إزالة يوم المكافأة.",
|
||||
"saveError": "تعذر حفظ يوم المكافأة.",
|
||||
"deleteError": "تعذر إزالة يوم المكافأة.",
|
||||
"confirmDeleteTitle": "إزالة يوم المكافأة",
|
||||
"confirmDeleteBody": "لن يتم منح يوم المكافأة هذا بعد الآن. تبقى المطالبات السابقة مسجلة."
|
||||
}
|
||||
},
|
||||
"myDashboard": {
|
||||
@@ -5049,8 +5112,27 @@
|
||||
"empty": "You're all caught up. No actions waiting.",
|
||||
"unavailable": "Some actions could not be checked. Available actions are shown above.",
|
||||
"retry": "Try again",
|
||||
"rewardUnavailable": "Referral progress is temporarily unavailable. Please try again."
|
||||
}
|
||||
"rewardUnavailable": "Referral progress is temporarily unavailable. Please try again.",
|
||||
"dailyReward": "مكافأتك اليومية جاهزة للمطالبة"
|
||||
},
|
||||
"dailyClaimed": "تم المطالبة بالمكافأة اليومية — أراك غدًا!",
|
||||
"dailyErrors": {
|
||||
"already_claimed": "لقد طالبت بالفعل بالمكافأة اليومية اليوم.",
|
||||
"disabled": "المكافآت اليومية معطلة حاليًا.",
|
||||
"bad_config": "جدول المكافأة اليومية غير مهيأ بشكل صحيح. اتصل بالطاقم.",
|
||||
"ratelimit": "محاولات كثيرة جدًا. انتظر لحظة وحاول مرة أخرى.",
|
||||
"error": "تعذر المطالبة بالمكافأة اليومية. يرجى المحاولة مرة أخرى."
|
||||
},
|
||||
"dailyRewardTitle": "المكافآت اليومية",
|
||||
"dailyRewardHint": "سجل الدخول كل يوم وطالب بمكافأتك — تنمو السلاسل حتى الأيام الكبيرة.",
|
||||
"dailyRewardDay": "اليوم {day}",
|
||||
"dailyRewardStreak": "{count, plural, one {السلسلة: # يوم} other {السلسلة: # أيام}}",
|
||||
"dailyRewardNextClaim": "المطالبة التالية: {amount} {currency}",
|
||||
"dailyRewardTomorrow": "غدًا: {amount} {currency}",
|
||||
"dailyRewardClaim": "المطالبة بالمكافأة اليومية",
|
||||
"dailyRewardClaimedToday": "تمت المطالبة اليوم — عد غدًا للمكافأة التالية.",
|
||||
"dailyRewardDisabled": "المكافآت اليومية معطلة حاليًا. يمكنك استكشاف الفندق.",
|
||||
"dailyRewardUnavailable": "تعذر تحميل جدول المكافأة اليومية. يرجى المحاولة مرة أخرى."
|
||||
},
|
||||
"error": {
|
||||
"code": "Error",
|
||||
@@ -6045,7 +6127,9 @@
|
||||
"emailRequired": "Email is required.",
|
||||
"passwordRequired": "Password is required.",
|
||||
"passwordsDontMatch": "Passwords do not match.",
|
||||
"newestCitizens": "Newest citizens"
|
||||
"newestCitizens": "Newest citizens",
|
||||
"ageVerified": "أبلغ 18+ وأوافق على شرط العمر.",
|
||||
"invitedBy": "بدعوة من {username}"
|
||||
},
|
||||
"forgot": {
|
||||
"title": "Reset password",
|
||||
@@ -6479,7 +6563,11 @@
|
||||
"sprite": "· sprite",
|
||||
"Git": "Git:"
|
||||
}
|
||||
}
|
||||
},
|
||||
"title": "الحسابات المرتبطة",
|
||||
"subtitle": "اربط حسابًا اجتماعيًا لتسجيل الدخول بنقرة واحدة",
|
||||
"connected": "مرتبط",
|
||||
"unavailable": "غير متاح"
|
||||
},
|
||||
"toolbar": {
|
||||
"home": "الرئيسية",
|
||||
@@ -6497,6 +6585,110 @@
|
||||
},
|
||||
"admin": {
|
||||
"studio": {
|
||||
"nitroCleanup": {
|
||||
"alreadyRunning": "هناك مسح قيد التشغيل بالفعل — تم الاتصال به.",
|
||||
"ageUnknown": "العمر غير معروف",
|
||||
"ageBelow": "< يوم",
|
||||
"scanButton": "مسح أصول الأثاث",
|
||||
"scanningAssets": "جارٍ مسح الأصول…",
|
||||
"cancelButton": "إلغاء",
|
||||
"deleteSelected": "حذف المحدد ({count})",
|
||||
"deleting": "جارٍ الحذف…",
|
||||
"redownloadBroken": "إعادة تنزيل التالفة",
|
||||
"redownloading": "جارٍ إعادة التنزيل…",
|
||||
"autoClean": "تنظيف تلقائي للوهمية القديمة",
|
||||
"cleaning": "جارٍ التنظيف…",
|
||||
"exportManifest": "تصدير البيان",
|
||||
"exporting": "جارٍ التصدير…",
|
||||
"phaseStems": "جارٍ تحميل سيقان الأثاث…",
|
||||
"phaseReaddir": "جارٍ قراءة دلائل الأصول…",
|
||||
"phaseValidate": "جارٍ التحقق من حزم .nitro…",
|
||||
"phaseScanning": "جارٍ المسح…",
|
||||
"scanProgressFiles": "{count} ملف",
|
||||
"repairProgress": "ناجح {ok}، فشل {failed}",
|
||||
"attachedNotice": "يستمر المسح في الخلفية — ستظهر النتائج عند انتهائه.",
|
||||
"sessionCancelled": "تم إلغاء المسح.",
|
||||
"onlyOldLabel": "عرض الملفات الأقدم من فقط",
|
||||
"onlyOldAgeLabel": "الحد الأدنى للعمر بالأيام للعرض",
|
||||
"onlyOldToggle": "إخفاء الملفات الحديثة",
|
||||
"daysLabel": "أيام",
|
||||
"autoAgeLabel": "الحد الأدنى للعمر بالأيام للتنظيف التلقائي",
|
||||
"loadingResult": "جارٍ تحميل نتيجة المسح…",
|
||||
"scannedStat": "ملف أصول تم مسحه",
|
||||
"cachedNotice": "(مخزن مؤقتًا — الدلائل لم تتغير)",
|
||||
"fakeStat": "nitros وهمية (لا يوجد عنصر مطابق)",
|
||||
"brokenStat": "nitros تالفة (لا يمكن تحليلها)",
|
||||
"groupEmpty": "لم يتم العثور على شيء",
|
||||
"selectedCount": "{count} محدد",
|
||||
"copiesBadge": "{count} نسخ",
|
||||
"groupFakeLabel": "nitros وهمية",
|
||||
"groupFakeDescription": "هذه الملفات لا تطابق أي عنصر في items_base — بقايا أثاث محذوف أو معاد تسميته.",
|
||||
"groupBrokenLabel": "nitros تالفة",
|
||||
"groupBrokenDescription": "هذه الملفات تنتمي إلى عنصر ولكن لا يمكن تحليلها كحزمة Nitro صالحة.",
|
||||
"groupSwfLabel": "ملفات SWF يتيمة",
|
||||
"groupSwfDescription": "ملفات .swf لا تطابق أي عنصر في items_base.",
|
||||
"groupIconLabel": "أيقونات يتيمة",
|
||||
"groupIconDescription": "ملفات أيقونات لا تطابق أي عنصر في items_base.",
|
||||
"warningText": "حذف .nitro التالفة يترك عنصره في قاعدة البيانات بدون حزمة — يُفضّل إعادة تنزيله، أو ترك تدقيق الكتالوج يحصل عليه لاحقًا. لا تتم إزالة صفوف قاعدة البيانات أبدًا بواسطة هذه الأداة.",
|
||||
"onlyAssetsTouched": "يتم لمس ملفات الأصول فقط — يبقى FurnitureData.json وصفوف قاعدة البيانات كما هي.",
|
||||
"emptyHint": "امسح كل دليل أصول الأثاث للعثور على حزم nitro الوهمية والتالفة بالإضافة إلى ملفات SWF والأيقونات اليتيمة. احذفها، أعد تنزيل التالفة، أو نظّف المخلفات القديمة تلقائيًا.",
|
||||
"noResult": "لا توجد نتيجة مسح بعد — قم بتشغيل مسح أصول الأثاث أولاً.",
|
||||
"scanFailed": "فشل المسح.",
|
||||
"confirmDeleteTitle": "حذف {count} ملف (ملفات)؟",
|
||||
"confirmDeleteDescription": "ستتم إزالة الملفات من كل الدلائل (public + gamedata المعكوسة). لا يتم لمس صفوف قاعدة البيانات أبدًا.",
|
||||
"confirmDeleteLabel": "حذف",
|
||||
"confirmRepairTitle": "إعادة تنزيل {count} حزمة .nitro تالفة؟",
|
||||
"confirmRepairDescription": "سيتم جلب الحزم مرة أخرى من مصادر nitro المهيأة وكتابتها فوق كل الدلائل (public + gamedata المعكوسة).",
|
||||
"confirmRepairLabel": "إعادة التنزيل",
|
||||
"confirmAutoCleanTitle": "تنظيف nitros الوهمية الأقدم من {days} يوم (أيام) تلقائيًا؟",
|
||||
"confirmAutoCleanDescription": "تتم إزالة ملفات .nitro الوهمية فقط (لا يوجد عنصر مطابق) الأقدم من الحد. لا يتم لمس الحزم التالفة والملفات الحديثة أبدًا.",
|
||||
"confirmAutoCleanLabel": "تنظيف تلقائي",
|
||||
"toastDeletePartial": "تم حذف {copies} نسخة، ولكن تعذر إزالة بعض الملفات",
|
||||
"toastDeleteDone": "تم حذف {copies} نسخة ملف ({deleted} ملف)",
|
||||
"toastRepairDone": "تم إصلاح {count} حزمة .nitro",
|
||||
"toastRepairFailed": "تعذر الحصول على أي حزمة ({failed} فشل)",
|
||||
"toastRepairCancelled": "تم إلغاء الإصلاح",
|
||||
"toastAutoCleanDone": "تم تنظيف {deleted} ملف .nitro وهمي قديم ({copies} نسخ). تم تخطي {recent} حديثة + {broken} تالفة.",
|
||||
"toastAutoCleanNothing": "لا شيء قديم بما يكفي للإزالة (تم تخطي {recent} حديثة، {broken} تالفة)",
|
||||
"toastManifestDownload": "تم تنزيل بيان المسح",
|
||||
"gamedataTitle": "تنظيف بيانات اللعبة",
|
||||
"gamedataHint": "عاين أولاً: هذا يعيد كتابة FurnitureData.json وFigureMap.json وFigureData.json. على عكس أدوات الأصول أعلاه، يزيل الصفوف التي لا تشير إلى أي شيء — راجع الأعداد قبل تشغيله.",
|
||||
"gamedataScan": "معاينة بيانات اللعبة",
|
||||
"gamedataScanning": "جارٍ المسح…",
|
||||
"gamedataRun": "تشغيل المحدد",
|
||||
"gamedataRunning": "جارٍ التنظيف…",
|
||||
"gamedataNoResult": "لا توجد معاينة بعد — امسح ملفات JSON لبيانات اللعبة أولاً.",
|
||||
"gamedataCount_duplicates": "FurnitureData مكرر",
|
||||
"gamedataCount_orphans": "FurnitureData يتيمة",
|
||||
"gamedataCount_figureMap": "مشاكل FigureMap",
|
||||
"gamedataCount_figureData": "FigureData غير مستخدم",
|
||||
"gamedataPass_dedupeFurnitureData": "إزالة تكرار FurnitureData",
|
||||
"gamedataPassDesc_dedupeFurnitureData": "يزيل أسماء الفئات المكررة داخل قسم واحد، مع الاحتفاظ بالإدخال ذو أعلى مراجعة.",
|
||||
"gamedataPass_cleanFurnitureData": "تنظيف FurnitureData",
|
||||
"gamedataPassDesc_cleanFurnitureData": "يزيل الإدخالات التي لا يوجد لها حزمة .nitro في أي دليل.",
|
||||
"gamedataPass_cleanFigureMap": "تنظيف FigureMap",
|
||||
"gamedataPassDesc_cleanFigureMap": "يزيل الأجزاء التي تشير إلى مجموعة مفقودة من FigureData، بالإضافة إلى الأجزاء المكررة تمامًا.",
|
||||
"gamedataPass_cleanFigureData": "تنظيف FigureData",
|
||||
"gamedataPassDesc_cleanFigureData": "يزيل المجموعات التي لا يشير إليها أي جزء في FigureMap، ثم اللوحات التي لا يستخدمها أي نوع مجموعة. يجب أن يعمل بعد تنظيف FigureMap.",
|
||||
"gamedataNothingSelected": "اختر خطوة تنظيف واحدة على الأقل",
|
||||
"gamedataConfirmTitle": "إعادة كتابة ملفات JSON لبيانات اللعبة؟",
|
||||
"gamedataConfirmDescription": "ستعمل {passes} خطوة (خطوات) على {duplicates} مجموعة مكررة، {orphans} صف يتيم، {figureMap} مشكلة FigureMap و{figureData} إدخال FigureData غير مستخدم. تتم إزالة الصفوف بدون نسخة احتياطية — لا يمكن التراجع عن هذا.",
|
||||
"gamedataConfirmLabel": "إعادة كتابة الملفات",
|
||||
"gamedataDifferingWarning": "يوجد تكرار واحد على الأقل ليس نسخة مطابقة للإدخال الذي سيتم الاحتفاظ به، لذا فإن الصف المحذوف كان يحتوي على بيانات لا يمتلكها الناجي.",
|
||||
"gamedataCrossSectionNote": "{count} اسم فئة (أسماء فئات) موجود في كل من roomitemtypes وwallitemtypes. يتم الإبلاغ عن هذه فقط — إزالة واحد سيغير نوع العنصر.",
|
||||
"gamedataToastDone": "أزال تنظيف بيانات اللعبة {removed} صفًا",
|
||||
"gamedataToastNothing": "بيانات اللعبة كانت نظيفة بالفعل",
|
||||
"gamedataMaxRemovalsLabel": "أقصى عدد صفوف لكل خطوة",
|
||||
"gamedataMaxRemovalsHint": "0 يستخدم الافتراضي 500. الخطوة التي ستزيل أكثر تتوقف وتطلب بدلاً من الكتابة.",
|
||||
"gamedataLimitTitle": "{pass} سيزيل {wouldRemove} صفًا، فوق حد {maxRemovals}.",
|
||||
"gamedataLimitDescription": "لم تكتب تلك الخطوة شيئًا، لذا الملفات دون تغيير. تحقق من مسارات الأصول أولاً — الدليل الخاطئ يجعل كل صف يبدو يتيمًا. رفع الحد هو تشغيل منفصل ومتعمد.",
|
||||
"gamedataLimitOverride": "إزالة {wouldRemove} صفًا على أي حال",
|
||||
"historyTitle": "سجل التنظيف التلقائي",
|
||||
"historyScheduled": "مجدول",
|
||||
"historyManual": "يدوي",
|
||||
"historyEntry": "تمت إزالة {deleted} ({copies} نسخ)؛ تم تخطي {recent} حديثة و{broken} تالفة",
|
||||
"historyErrors": "{count} أخطاء"
|
||||
},
|
||||
"importDiagnostics": {
|
||||
"attempts": "تشخيص الملفات",
|
||||
"preliminary": "فحص أولي للعناوين؛ سيتم التحقق من المحتوى عند الاستيراد.",
|
||||
|
||||
Reference in new issue
Block a user