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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
172 changes: 86 additions & 86 deletions ui/i18n/fa.json

Large diffs are not rendered by default.

22 changes: 21 additions & 1 deletion ui/test/i18n-coverage.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -139,19 +139,25 @@ const REJECTED = {
['سامانه', 'سیستم'],
['پیش‌تخته', 'داشبورد'],
['پساکند', 'ذخیره'],
['کاراکتر', 'نویسه'],
['نویسه', 'کاراکتر'],
['پورت', 'درگاه'],
['یکا', 'واحد'],
['جست‌وجو', 'جستجو'],
['حافظه‌شده', 'کش‌شده'],
['بارگیری', 'بارگذاری'],
['پالایش', 'فیلتر'],
['پالایه', 'فیلتر'],
['سربرگ', 'هدر'],
['پروکسی', 'پراکسی'],
['نمایه', 'پروفایل'],
/* Product names stay in Latin, as the English catalogue writes them. */
['ترونس', 'TrueNAS'],
['آنرید', 'Unraid'],
['جِلی‌فین', 'Jellyfin'],
['امبی', 'Emby'],
['آنسپلش', 'Unsplash'],
['گیت‌هاب', 'GitHub'],
['داکر', 'Docker'],
],
/* Abzeichen is a pinned badge or a medal. The reference locales use Badge 26
times and Abzeichen never. Bezeichnung is what the rest of the catalogue
Expand Down Expand Up @@ -195,6 +201,20 @@ for (const [file, pairs] of Object.entries(REJECTED)) {
});
}

/* Persian is written without Arabic marks or letters: no ezafe هٔ, tanvin,
short vowels, hamza on alef, or Arabic ي ك ة ى ؤ and digits. */
const ARABIC_MARKS = /[\u0654\u06C0\u064B-\u0652\u0670\u0623\u0625\u064A\u0643\u0629\u0649\u0624\u0660-\u0669]/u;

test('fa.json uses no Arabic marks or letters', () => {
const found = [];
for (const [name, catalogue] of [['fa.json', read('fa.json')], ...widgetCatalogues('fa.json')]) {
for (const [key, value] of flat(catalogue)) {
if (ARABIC_MARKS.test(String(value))) found.push(`${name} ${key}: ${value}`);
}
}
assert.deepEqual(found, [], `Arabic marks or letters in Persian text:\n ${found.join('\n ')}`);
});

/* ── English left inside a non-Latin catalogue ────────────────────────────── */

/* A machine translation that skips a word leaves it in English, which a scan
Expand Down
12 changes: 6 additions & 6 deletions ui/widgets/backup/i18n/fa.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,23 @@
"slots.dupPass.label": "رمز عبور",
"slots.jobId.label": "کار",
"slots.jobId.hint": "آدرس و رمز عبور را بالا وارد کنید، سپس کارها را بارگذاری کنید.",
"slots.dupHref.label": "آدرس کلیک",
"slots.dupHref.label": "آدرس پیوند",
"slots.dupHref.placeholder": "http://duplicati:8200",
"slots.dupHref.hint": "آدرسی که مرورگرتان برای این سرویس به کار می‌برد. خالی بگذارید تا آدرس بالا به کار رود، اگر مرورگرتان به آن دسترسی دارد.",
"slots.dupPollSec.label": "فاصلهٔ بررسی (ثانیه)",
"slots.dupHref.hint": "آدرسی که مرورگرتان برای این سرویس استفاده می‌کند. اگر مرورگرتان به آدرس بالا دسترسی دارد، خالی بگذارید.",
"slots.dupPollSec.label": "فاصله بررسی (ثانیه)",
"slots.kopiaUrl.label": "آدرس",
"slots.kopiaUrl.placeholder": "http://kopia:51515",
"slots.kopiaUser.label": "نام کاربری",
"slots.kopiaUser.placeholder": "admin",
"slots.kopiaPass.label": "رمز عبور",
"slots.jobId.label.kopia": "منبع",
"slots.jobId.hint.kopia": "آدرس و اطلاعات ورود را بالا وارد کنید، سپس منابع را بارگذاری کنید.",
"slots.kopiaHref.label": "آدرس کلیک",
"slots.kopiaHref.label": "آدرس پیوند",
"slots.kopiaHref.placeholder": "http://kopia:51515",
"slots.kopiaHref.hint": "آدرسی که مرورگرتان برای این سرویس به کار می‌برد. خالی بگذارید تا آدرس بالا به کار رود، اگر مرورگرتان به آن دسترسی دارد.",
"slots.kopiaHref.hint": "آدرسی که مرورگرتان برای این سرویس استفاده می‌کند. اگر مرورگرتان به آدرس بالا دسترسی دارد، خالی بگذارید.",
"slots.customName.label": "نام نمایشی",
"slots.customName.placeholder": "روی کارت نمایش داده می‌شود",
"ui.haikus": "اعتماد کن،|اما راستی‌آزمایی.\nپشتیبان بگیر|یا پشیمان شو.\nهیچ چیز|همیشگی نیست.\nاجرای شبانه.|آرامش صبح.|داده زنده است.\nاول پشتیبان.|بعد حذف.|بهتر بخواب.\nگزارش‌ها سبز.|قهوه گرم.|همه‌چیز خوب.\nامید|راهبرد نیست.\nامنش نگه دار.\nمنتظر|ناگهانی باش.\nنگرانی کاری نمی‌کند.|پشتیبان خوب|می‌کند.\nزود آماده شو.|کم هراسان شو.|لبخند بزن.",
"ui.haikus": "اعتماد کن،|اما بررسی هم بکن.\nپشتیبان بگیر|یا پشیمان شو.\nهیچ‌چیز|همیشگی نیست.\nاجرای شبانه.|آرامش صبح.|داده زنده است.\nاول پشتیبان.|بعد حذف.|بهتر بخواب.\nگزارش‌ها سبز.|قهوه گرم.|همه‌چیز خوب.\nامید|راهبرد نیست.\nامنش نگه دار.\nمنتظر|غیرمنتظره‌ها باش.\nنگرانی کاری نمی‌کند.|پشتیبان خوب|می‌کند.\nزود آماده شو.|کمتر بترس.|لبخند بزن.",
"ui.backupStatus": "وضعیت پشتیبان‌گیری",
"ui.running": "در حال اجرا",
"ui.unknown": "نامشخص",
Expand Down
6 changes: 3 additions & 3 deletions ui/widgets/books/i18n/fa.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"absUrl.label": "آدرس Audiobookshelf",
"absUrl.placeholder": "http://host:13378",
"absKey.label": "کلید API",
"absKey.hint": "Settings → API Keys (نسخهٔ 2.26 به بعد)، یا توکن حساب شما.",
"absKey.hint": "Settings → API Keys (نسخه 2.26 به بعد)، یا توکن حساب شما.",
"komgaUrl.label": "آدرس Komga",
"komgaUrl.placeholder": "http://host:25600",
"komgaKey.label": "کلید API",
Expand All @@ -27,9 +27,9 @@
"source.opt.list": "فهرست سفارشی",
"listId.label": "فهرست",
"listId.hint": "آدرس و کلید را بالا وارد کنید، سپس دریافت را بزنید تا مجموعه‌ها و فهرست‌های خواندن بارگذاری شوند.",
"href.label": "آدرس کلیک (اختیاری)",
"href.label": "آدرس پیوند (اختیاری)",
"href.placeholder": "https://…",
"href.hint": "آدرسی که مرورگرتان برای این سرویس به کار می‌برد. خالی بگذارید تا آدرس بالا به کار رود، اگر مرورگرتان به آن دسترسی دارد.",
"href.hint": "آدرسی که مرورگرتان برای این سرویس استفاده می‌کند. اگر مرورگرتان به آدرس بالا دسترسی دارد، خالی بگذارید.",
"ui.reading": "در حال خواندن",
"ui.srcRecently": "به‌تازگی افزوده‌شده",
"ui.srcUnread": "در دست خواندن",
Expand Down
8 changes: 4 additions & 4 deletions ui/widgets/clock/i18n/fa.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
{
"widget.label": "ساعت",
"widget.description": "ساعت و تاریخ را در هر منطقهٔ زمانی نمایش دهید.",
"widget.description": "ساعت و تاریخ را در هر منطقه زمانی نمایش دهید.",
"view.digital.label": "دیجیتال",
"view.analog.label": "عقربه‌ای",
"clockStyle.label": "سبک",
"clockStyle.opt.digital": "دیجیتال",
"clockStyle.opt.analog": "عقربه‌ای",
"clockTimezone.label": "منطقهٔ زمانی",
"clockTimezone.label": "منطقه زمانی",
"clockTimezone.placeholder": "Asia/Tehran",
"clockTimezone.hint": "نام منطقهٔ زمانی IANA. برای زمان محلی مرورگر خالی بگذارید.",
"clockTimezone.hint": "نام منطقه زمانی IANA. برای زمان محلی مرورگر خالی بگذارید.",
"clockShowDate.label": "نمایش تاریخ",
"ui.unknownZone": "منطقهٔ زمانی ناشناخته"
"ui.unknownZone": "منطقه زمانی ناشناخته"
}
18 changes: 9 additions & 9 deletions ui/widgets/connections/i18n/fa.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
"vpn.href.label": "آدرس کلیک",
"vpn.href.placeholder": "http://your-server:8000",
"vpn.showIp.label": "نمایش آدرس IP",
"vpn.showIp.hint": "برای هر کسی که داشبورد را می‌بیند نمایان است. وقتی تونل قطع است، این آدرس خانهٔ شماست.",
"vpn.showIp.hint": "برای هر کسی که داشبورد را می‌بیند نمایان است. وقتی تونل قطع است، این آدرس خانه شماست.",
"vpn.color.label": "رنگ نقطه",
"services.label": "سرویس",
"services.type.label": "سرویس",
Expand All @@ -34,7 +34,7 @@
"services.name.placeholder": "نام",
"services.url.label": "آدرس سرور کنترل",
"services.url.placeholder": "gluetun:8000",
"services.url.label.conduit": "آدرس سنجه‌ها",
"services.url.label.conduit": "آدرس متریک‌ها",
"services.url.placeholder.conduit": "conduit:9090",
"services.url.label.netbird": "آدرس API مدیریت",
"services.url.placeholder.netbird": "netbird:33073",
Expand All @@ -44,20 +44,20 @@
"services.url.placeholder.umami": "umami:3000",
"services.token.label": "توکن دسترسی",
"services.token.placeholder": "NetBird PAT",
"services.siteId.label": "شناسهٔ سایت (دامنه)",
"services.siteId.label": "شناسه سایت (دامنه)",
"services.siteId.placeholder": "example.com",
"services.apiKey.label": "کلید API آمار",
"services.apiKey.label.umami": "کلید API",
"services.apiKey.hint.umami": "از Umami نسخه ۳.۴.۰ به بعد. برای ورود با نام کاربری و رمز عبور، خالی بگذارید.",
"services.websiteId.label": "شناسهٔ وب‌سایت",
"services.apiKey.hint.umami": "از Umami نسخه 3.4.0 به بعد. برای ورود با نام کاربری و رمز عبور، خالی بگذارید.",
"services.websiteId.label": "شناسه وب‌سایت",
"services.websiteId.placeholder": "8dc7… (UUID)",
"services.username.label": "نام کاربری",
"services.username.placeholder": "admin",
"services.password.label": "رمز عبور",
"services.adminUrl.label": "آدرس پنل مدیریت",
"services.adminUrl.placeholder": "http://your-server:3002",
"services.color.label": "رنگ نقطه",
"href.label": "آدرس کلیک",
"href.label": "آدرس پیوند",
"href.placeholder": "https://…",
"showLegend.label": "نمایش راهنما",
"showLegend.hint": "کلید سرویس‌ها در پایین نقشه.",
Expand All @@ -76,11 +76,11 @@
"ui.peersOnline_other": "{count} آنلاین",
"ui.peersLabel": "همتایان",
"ui.online": "آنلاین",
"ui.mesh": "شبکهٔ مش",
"ui.mesh": "شبکه مش",
"ui.noData": "داده‌ای نیست",
"ui.worldMap": "نقشهٔ جهانی اتصال‌ها",
"ui.worldMap": "نقشه جهانی اتصال‌ها",
"ui.service": "سرویس",
"ui.users": "کاربران",
"ui.openAdmin": "باز کردن مدیریت",
"ui.openAdmin": "بازکردن مدیریت",
"ui.more": "+{n} مورد دیگر"
}
10 changes: 5 additions & 5 deletions ui/widgets/dashboard-switch/i18n/fa.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
"keychains.label": "جاکلیدی",
"keychains.hint": "رنگ آویز را روی خودکار بگذارید تا از آدرس داشبورد گرفته شود.",
"keychains.name.label": "نام",
"keychains.name.placeholder": "مثلاً اتاق نشیمن",
"keychains.name.placeholder": "مثلا اتاق نشیمن",
"keychains.url.label": "آدرس داشبورد",
"keychains.url.placeholder": "http://host:port",
"keychains.color.label": "رنگ آویز",
"keychains.color.opt.default": "خودکار",
"keychains.color.opt.teal": "فیروزه‌ای",
"keychains.color.opt.cyan": "آبی روشن",
"keychains.color.opt.teal": "سبزآبی",
"keychains.color.opt.cyan": "فیروزه‌ای",
"keychains.color.opt.orange": "نارنجی",
"keychains.color.opt.pink": "صورتی",
"keychains.color.opt.purple": "بنفش",
Expand All @@ -19,8 +19,8 @@
"keychains.color.opt.blue": "آبی",
"openIn.label": "باز شود در",
"openIn.opt.same": "همین زبانه",
"openIn.opt.new": "زبانهٔ جدید",
"ui.switcher": "تعویض‌کنندهٔ داشبورد",
"openIn.opt.new": "زبانه جدید",
"ui.switcher": "تعویض‌کننده داشبورد",
"ui.empty": "در تنظیمات یک داشبورد اضافه کنید",
"ui.switchTo": "رفتن به {name}"
}
14 changes: 7 additions & 7 deletions ui/widgets/disk-health/i18n/fa.json
Original file line number Diff line number Diff line change
@@ -1,32 +1,32 @@
{
"widget.label": "سلامت دیسک",
"widget.description": "سلامت همهٔ دیسک‌های سرورتان را بررسی کنید.",
"widget.description": "سلامت همه دیسک‌های سرورتان را بررسی کنید.",
"diskProvider.label": "منبع",
"diskProvider.opt.scrutiny": "Scrutiny",
"diskProvider.opt.truenas": "TrueNAS",
"scrutinyUrl.label": "آدرس Scrutiny",
"scrutinyUrl.placeholder": "scrutiny:8080",
"scrutinyHref.label": "آدرس کلیک",
"scrutinyHref.label": "آدرس پیوند",
"scrutinyHref.placeholder": "http://your-server:8080",
"scrutinyHref.hint": "آدرسی که مرورگرتان برای این سرویس به کار می‌برد. خالی بگذارید تا آدرس بالا به کار رود، اگر مرورگرتان به آن دسترسی دارد.",
"scrutinyHref.hint": "آدرسی که مرورگرتان برای این سرویس استفاده می‌کند. اگر مرورگرتان به آدرس بالا دسترسی دارد، خالی بگذارید.",
"truenasUrl.label": "آدرس TrueNAS",
"truenasUrl.placeholder": "truenas.local",
"truenasKey.label": "کلید API TrueNAS",
"truenasHref.label": "آدرس کلیک",
"truenasHref.label": "آدرس پیوند",
"truenasHref.placeholder": "http://truenas.local",
"truenasHref.hint": "آدرسی که مرورگرتان برای این سرویس به کار می‌برد. خالی بگذارید تا آدرس بالا به کار رود، اگر مرورگرتان به آن دسترسی دارد.",
"truenasHref.hint": "آدرسی که مرورگرتان برای این سرویس استفاده می‌کند. اگر مرورگرتان به آدرس بالا دسترسی دارد، خالی بگذارید.",
"bays.label": "محفظه‌ها",
"bays.rowLabel": "محفظه",
"bays.fetchLabel": "دریافت دیسک‌ها",
"bays.hint": "آدرس را بالا وارد کنید، سپس فهرست را بارگذاری کرده و هر محفظه را تخصیص دهید.",
"ui.diskHealth": "سلامت دیسک",
"ui.noSmart": "دادهٔ SMART نیست",
"ui.noSmart": "داده SMART نیست",
"ui.healthy": "سالم",
"ui.failed": "خراب",
"ui.bay": "محفظه {n}",
"ui.bayEmpty": "محفظه {n}: خالی",
"ui.baysFailed_one": "محفظه {list} خراب است",
"ui.baysFailed_other": "محفظه‌های {list} خراب‌اند",
"ui.noDrives": "هیچ درایوی گزارش نشد",
"ui.noDrives": "هیچ دیسکی گزارش نشد",
"ui.notReporting": "گزارش نمی‌دهد"
}
10 changes: 5 additions & 5 deletions ui/widgets/dns/i18n/fa.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
"dnsUrl.label": "آدرس سرور",
"dnsUrl.placeholder": "dns-host:80",
"dnsUrl.hint": "نام کانتینر و درگاه، یا یک آدرس کامل.",
"dnsHref.label": "آدرس کلیک",
"dnsHref.hint": "آدرسی که مرورگرتان برای این سرویس به کار می‌برد. خالی بگذارید تا آدرس بالا به کار رود، اگر مرورگرتان به آن دسترسی دارد.",
"dnsHref.label": "آدرس پیوند",
"dnsHref.hint": "آدرسی که مرورگرتان برای این سرویس استفاده می‌کند. اگر مرورگرتان به آدرس بالا دسترسی دارد، خالی بگذارید.",
"dnsUser.label": "نام کاربری",
"dnsPass.label": "رمز عبور",
"dnsPiholePassword.label": "رمز عبور Pi-hole",
Expand All @@ -15,11 +15,11 @@
"dnsTechnitiumToken.hint": "توکن API مربوط به Technitium (Administration → Sessions → Create Token).",
"dnsNextdnsApiKey.label": "کلید API",
"dnsNextdnsApiKey.hint": "از my.nextdns.io → Account → API.",
"dnsNextdnsProfile.label": "شناسهٔ پروفایل",
"dnsNextdnsProfile.label": "شناسه پروفایل",
"dnsNextdnsProfile.placeholder": "abc123",
"dnsNextdnsProfile.hint": "شناسهٔ پروفایل یا پیکربندی (همان شناسهٔ کوتاه در تنظیمات NextDNS شما).",
"dnsNextdnsProfile.hint": "شناسه پروفایل یا پیکربندی (همان شناسه کوتاه در تنظیمات NextDNS شما).",
"ui.queriesBlocked": "درخواست‌های مسدودشده",
"ui.aria": "پالایش DNS",
"ui.aria": "فیلتر DNS",
"ui.allowed": "مجاز",
"ui.cached": "کش‌شده",
"ui.blocked": "مسدود",
Expand Down
18 changes: 9 additions & 9 deletions ui/widgets/github/i18n/fa.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,19 @@
"githubUser.label": "نام کاربری GitHub",
"githubUser.placeholder": "octocat",
"githubToken.label": "توکن دسترسی شخصی",
"githubToken.hint": "توکن کلاسیک با دسترسی repo و read:user (یا توکن دقیق با همان سطح خواندن). فقط همین ویجت از آن استفاده می‌کند.",
"githubHref.label": "آدرس کلیک",
"githubHref.hint": "جایی که با کلیک روی ویجت باز می‌شود. برای باز شدن نمایهٔ GitHub خالی بگذارید.",
"githubPrFilters.label": "پالایه‌های درخواست ادغام",
"githubPrFilters.hint": "کدام درخواست‌های باز نمایش داده شوند. چند پالایه با هم ترکیب می‌شوند.",
"githubToken.hint": "توکن کلاسیک با دسترسی repo و read:user (یا توکن fine-grained با همان دسترسی خواندن). فقط همین ویجت از آن استفاده می‌کند.",
"githubHref.label": "آدرس پیوند",
"githubHref.hint": "جایی که با کلیک روی ویجت باز می‌شود. برای بازشدن پروفایل GitHub خالی بگذارید.",
"githubPrFilters.label": "فیلترهای درخواست ادغام",
"githubPrFilters.hint": "کدام درخواست‌های ادغام باز نمایش داده شوند. چند فیلتر با هم ترکیب می‌شوند.",
"githubPrFilters.opt.created": "ساخته‌شده",
"githubPrFilters.opt.assigned": "واگذارشده",
"githubPrFilters.opt.mentioned": "نام‌برده‌شده",
"githubPrFilters.opt.mentioned": "منشن‌شده",
"githubPrFilters.opt.review-requested": "درخواست بازبینی",
"ui.prAria": "درخواست‌های ادغام GitHub",
"ui.pullRequests": "درخواست‌های ادغام",
"ui.lastYear": "سال گذشته",
"ui.lastYear": "یک سال اخیر",
"ui.noPrs": "درخواست ادغام بازی نیست",
"ui.contributionsAria": "مشارکت‌های GitHub: {total} در سال گذشته",
"ui.viewAll": "مشاهدهٔ همه"
"ui.contributionsAria": "مشارکت‌های GitHub: {total} در یک سال اخیر",
"ui.viewAll": "مشاهده همه"
}
Loading
Loading