From 12a8348dc518f717ec2dbd64d345d1834edae60b Mon Sep 17 00:00:00 2001 From: daniyal Date: Tue, 29 Oct 2024 16:33:26 +0330 Subject: [PATCH] feat: add "fa" locale --- frontend/apps/remark42/app/locales/fa.json | 182 ++++++++++++++++++ .../apps/remark42/app/utils/loadLocale.ts | 7 +- .../apps/remark42/tasks/supportedLocales.json | 2 +- 3 files changed, 187 insertions(+), 4 deletions(-) create mode 100644 frontend/apps/remark42/app/locales/fa.json diff --git a/frontend/apps/remark42/app/locales/fa.json b/frontend/apps/remark42/app/locales/fa.json new file mode 100644 index 0000000000..24f8b29e53 --- /dev/null +++ b/frontend/apps/remark42/app/locales/fa.json @@ -0,0 +1,182 @@ +{ + "auth.back": "بازگشت", + "auth.email-address": "آدرس ایمیل", + "auth.loading": "در حال بارگذاری...", + "auth.oauth-button": "ورود با {provider}", + "auth.oauth-source": "استفاده از شبکه اجتماعی", + "auth.open-profile": "نمایش پروفایل من", + "auth.or": "یا", + "auth.signin": "ورود", + "auth.signout": "خروج", + "auth.submit": "ارسال", + "auth.symbols-restriction": "نام کاربری باید فقط شامل حروف، اعداد، زیرخط یا فضا باشد", + "auth.telegram-check": "بررسی", + "auth.telegram-link": "از طریق لینک", + "auth.telegram-message-1": "تلگرام را باز کنید", + "auth.telegram-message-2": "و در آنجا روی “شروع” کلیک کنید.", + "auth.telegram-message-3": "سپس، روی “بررسی” زیر کلیک کنید.", + "auth.telegram-optional-qr": "یا با اسکن کد QR", + "auth.telegram-qr": "کد QR تلگرام", + "auth.user-not-found": "هیچ کاربری پیدا نشد", + "auth.username": "نام کاربری", + "authPanel.disable-comments": "غیرفعال کردن نظرات", + "authPanel.disabled-cookies": "غیرفعال کردن مسدودسازی کوکی‌های شخص ثالث برای ورود یا باز کردن نظرات", + "authPanel.enable-comments": "فعال کردن نظرات", + "authPanel.enable-cookies": "اجازه دادن به کوکی‌ها برای ورود و نظر دادن", + "authPanel.hide-settings": "پنهان کردن تنظیمات", + "authPanel.new-page": "صفحه جدید", + "authPanel.read-only": "فقط خواندنی", + "authPanel.show-settings": "نمایش تنظیمات", + "blockingDuration.day": "برای یک روز", + "blockingDuration.month": "برای یک ماه", + "blockingDuration.permanently": "به طور دائمی", + "blockingDuration.week": "برای یک هفته", + "comment.block": "مسدود کردن", + "comment.block-user": "آیا می‌خواهید {userName} را {duration} مسدود کنید؟", + "comment.blocked-user": "مسدود شده", + "comment.blocking-period": "دوره مسدودسازی", + "comment.cancel": "لغو", + "comment.copied": "کپی شد!", + "comment.copy": "کپی", + "comment.delete": "حذف", + "comment.delete-message": "آیا می‌خواهید این نظر را حذف کنید؟", + "comment.deleted-comment": "این نظر حذف شد", + "comment.deleted-user": "حذف شده", + "comment.edit": "ویرایش", + "comment.edit-countdown": "ویرایش غیرفعال خواهد شد", + "comment.expired-time": "زمان ویرایش منقضی شده است.", + "comment.go-to-parent": "رفتن به نظر والد", + "comment.hide": "پنهان کردن", + "comment.hide-user-comment": "آیا می‌خواهید نظرات {userName} را پنهان کنید؟", + "comment.paid-patreon": "مشترک پرداختی پاترئون", + "comment.pin": "سنجاق کردن", + "comment.pin-comment": "آیا می‌خواهید این نظر را سنجاق کنید؟", + "comment.reply": "پاسخ", + "comment.time": "{day} در {time}", + "comment.toggle-verification": "تغییر وضعیت تأیید", + "comment.unblock": "رفع مسدودیت", + "comment.unblock-user": "آیا می‌خواهید این کاربر را رفع مسدود کنید؟", + "comment.unpin": "برداشتن سنجاق", + "comment.unpin-comment": "آیا می‌خواهید این نظر را از سنجاق بردارید؟", + "comment.unverified-user": "کاربر تأیید نشده", + "comment.unverify-user": "آیا می‌خواهید {userName} را تأیید نکنید؟", + "comment.verified-user": "کاربر تأیید شده", + "comment.verify-user": "آیا می‌خواهید {userName} را تأیید کنید؟", + "commentForm.anonymous-uploading-disabled": "بارگذاری تصویر برای کاربران ناشناس غیرفعال است. لطفاً به عنوان کاربر ناشناس وارد نشوید تا بتوانید تصاویر را پیوست کنید.", + "commentForm.exceeded-size": "{fileName} از حد مجاز اندازه {maxImageSize} فراتر رفته است", + "commentForm.input-placeholder": "نظر خود را وارد نمایید", + "commentForm.new-comment": "نظر جدید", + "commentForm.notice-about-styling": "استفاده از Markdown پشتیبانی می‌شود", + "commentForm.preview": "پیش‌نمایش", + "commentForm.reply": "پاسخ", + "commentForm.save": "ذخیره", + "commentForm.send": "ارسال", + "commentForm.subscribe-by": "مشترک شدن توسط", + "commentForm.subscribe-or": "یا", + "commentForm.unauthorized-uploading-disabled": "بارگذاری تصویر برای کاربران غیرمجاز غیرفعال است. شما باید قبل از بارگذاری وارد شوید.", + "commentForm.unexpected-error": "مشکلی پیش آمده است. لطفاً کمی بعد دوباره تلاش کنید.", + "commentForm.upload-file-fail": "{fileName} بارگذاری با خطای \"{errorMessage}\" ناموفق بود", + "commentForm.uploading": "در حال بارگذاری...", + "commentForm.uploading-file": "در حال بارگذاری {fileName}...", + "commentsSort.best": "بهترین", + "commentsSort.least-controversial": "کمترین جنجالی", + "commentsSort.least-recently-updated": "کمترین به‌روز شده", + "commentsSort.most-controversial": "بیشترین جنجالی", + "commentsSort.newest": "جدیدترین", + "commentsSort.oldest": "قدیمی‌ترین", + "commentsSort.recently-updated": "به تازگی به‌روز شده", + "commentsSort.worst": "بدترین", + "empty-state": "هنوز نظری وجود ندارد", + "errors.0": "مشکلی پیش آمده است. لطفاً کمی بعد دوباره تلاش کنید.", + "errors.1": "نظر پیدا نشد. لطفاً صفحه را تازه‌سازی کنید و دوباره تلاش کنید.", + "errors.10": "برای ویرایش نظر خیلی دیر شده است.", + "errors.11": "نظر قبلاً پاسخی دارد، ویرایش ممکن نیست.", + "errors.12": "نتیجه رأی‌گیری را نمی‌توان ذخیره کرد. لطفاً کمی بعد دوباره تلاش کنید.", + "errors.13": "شما نمی‌توانید برای نظر خود رأی دهید.", + "errors.14": "شما قبلاً برای این نظر رأی داده‌اید.", + "errors.15": "رأی‌های زیادی برای این نظر وجود دارد.", + "errors.16": "حداقل امتیاز برای نظر رسیده است.", + "errors.17": "عملیات رد شد. لطفاً کمی بعد دوباره تلاش کنید.", + "errors.18": "فایل درخواستی پیدا نشد.", + "errors.19": "نظر شامل کلمات ممنوعه است.", + "errors.2": "عدم موفقیت در تجزیه درخواست ورودی.", + "errors.20": "تصویر ارسال شده پیدا نشد. لطفاً دوباره آن را بارگذاری کنید.", + "errors.3": "شما اجازه انجام این عملیات را ندارید.", + "errors.4": "داده‌های نظر نامعتبر است.", + "errors.5": "نظر پیدا نشد. لطفاً صفحه را تازه‌سازی کنید و دوباره تلاش کنید.", + "errors.6": "سایت پیدا نشد. لطفاً صفحه را تازه‌سازی کنید و دوباره تلاش کنید.", + "errors.7": "کاربر مسدود شده است.", + "errors.8": "نمی‌توان نظرات را در این صفحه ارسال کرد. نظرات فقط خواندنی هستند.", + "errors.9": "تغییر نظر ناموفق بود. لطفاً کمی بعد دوباره تلاش کنید.", + "errors.conflict": "تعارض.", + "errors.failed-fetch": "عدم موفقیت در دریافت. لطفاً اتصال اینترنت خود را بررسی کنید یا کمی بعد دوباره تلاش کنید.", + "errors.forbidden": "ممنوع.", + "errors.not-authorized": "مجوز ندارید.", + "errors.to-many-request": "شما به حداکثر حد درخواست رسیده‌اید.", + "errors.unexpected-error": "مشکلی پیش آمده است.", + "profile.close": "بستن پروفایل", + "profile.request-to-delete-data": "درخواست حذف داده‌های من", + "retry": "دوباره تلاش کنید", + "root.pinned-comments": "نظرات سنجاق شده", + "root.powered-by": "توسعه داده شده توسط Remark42", + "root.show-more": "نمایش بیشتر", + "settings.block": "مسدود کردن", + "settings.block-time": "تا {day} در {time}", + "settings.block-user": "آیا می‌خواهید {userName} را مسدود کنید؟", + "settings.blocked-users-header": "کاربران مسدود شده:", + "settings.blocked-users-title": "کاربران مسدود شده", + "settings.hidden-user-header": "کاربران پنهان شده:", + "settings.hidden-users-title": "کاربران پنهان شده", + "settings.hide": "پنهان کردن", + "settings.no-blocked-users": "هیچ کاربر مسدود شده‌ای وجود ندارد.", + "settings.no-hidden-users": "هیچ کاربر پنهان شده‌ای وجود ندارد.", + "settings.permanently": "به طور دائمی", + "settings.show": "نمایش", + "settings.unblock": "رفع مسدودیت", + "settings.unblock-user": "آیا می‌خواهید {userName} را رفع مسدود کنید؟", + "settings.unknown": "ناشناس", + "sort-by": "مرتب‌سازی بر اساس", + "subscribeByEmail.back": "بازگشت", + "subscribeByEmail.close": "بستن", + "subscribeByEmail.email": "ایمیل", + "subscribeByEmail.have-been-subscribed": "شما به‌روزرسانی‌ها را از طریق ایمیل دریافت کرده‌اید", + "subscribeByEmail.have-been-unsubscribed": "شما از به‌روزرسانی‌های ایمیل حذف شده‌اید", + "subscribeByEmail.only-registered-users": "فقط برای کاربران ثبت‌نام شده در دسترس است", + "subscribeByEmail.submit": "ارسال", + "subscribeByEmail.subscribe": "مشترک شدن", + "subscribeByEmail.subscribe-by-email": "مشترک شدن از طریق ایمیل", + "subscribeByEmail.subscribe-to-replies": "مشترک شدن به پاسخ‌ها", + "subscribeByEmail.subscribed": "شما به‌روزرسانی‌ها را از طریق ایمیل دریافت کرده‌اید", + "subscribeByEmail.unsubscribe": "حذف اشتراک", + "subscribeByRSS.button-title": "مشترک شدن از طریق RSS", + "subscribeByRSS.replies": "پاسخ‌ها", + "subscribeByRSS.site": "سایت", + "subscribeByRSS.thread": "موضوع", + "subscribeByRSS.title": "RSS", + "subscribeByTelegram.have-been-subscribed": "شما به‌روزرسانی‌ها را از طریق تلگرام دریافت کرده‌اید", + "subscribeByTelegram.have-been-unsubscribed": "شما از به‌روزرسانی‌های تلگرام حذف شده‌اید", + "subscribeByTelegram.only-registered-users": "فقط برای کاربران ثبت‌نام شده در دسترس است", + "subscribeByTelegram.resubscribe": "دوباره مشترک شوید", + "subscribeByTelegram.subscribe-by-telegram": "مشترک شدن از طریق تلگرام", + "subscribeByTelegram.telegram": "تلگرام", + "subscribeByTelegram.unsubscribe": "حذف اشتراک", + "token": "توکن را از ایمیل کپی و پیست کنید", + "token.expired": "توکن منقضی شده است", + "token.invalid": "توکن نامعتبر است", + "toolbar.attach-image": "تصویر را پیوست کنید، بکشید و رها کنید یا از کلیپ بورد پیست کنید", + "toolbar.bold": "متن پررنگ را اضافه کنید {shortcut}", + "toolbar.code": "کد را وارد کنید", + "toolbar.header": "متن عنوان را اضافه کنید", + "toolbar.italic": "متن کج را اضافه کنید {shortcut}", + "toolbar.link": "لینک را اضافه کنید {shortcut}", + "toolbar.ordered-list": "لیست شماره‌دار را اضافه کنید", + "toolbar.quote": "نقل قول را وارد کنید", + "toolbar.unordered-list": "لیست گلوله‌دار را اضافه کنید", + "user.comments": "نظرات", + "user.load-more": "بیشتر بارگذاری کنید", + "user.my-comments": "نظرات من", + "vote.controversy": "جنجال: {value}", + "vote.downvote": "رأی منفی", + "vote.score": "امتیاز رأی‌ها", + "vote.upvote": "رأی مثبت" +} diff --git a/frontend/apps/remark42/app/utils/loadLocale.ts b/frontend/apps/remark42/app/utils/loadLocale.ts index 404b63a01c..585c41b0a1 100644 --- a/frontend/apps/remark42/app/utils/loadLocale.ts +++ b/frontend/apps/remark42/app/utils/loadLocale.ts @@ -55,9 +55,7 @@ export async function loadLocale(locale: string): Promise return import(/* webpackChunkName: "ar" */ '../locales/ar.json').then((res) => res.default).catch(() => enMessages); } if (locale === 'zh-tw') { - return import(/* webpackChunkName: "zh-tw" */ '../locales/zh-tw.json') - .then((res) => res.default) - .catch(() => enMessages); + return import(/* webpackChunkName: "zh-tw" */ '../locales/zh-tw.json').then((res) => res.default).catch(() => enMessages); } if (locale === 'th') { return import(/* webpackChunkName: "th" */ '../locales/th.json').then((res) => res.default).catch(() => enMessages); @@ -65,6 +63,9 @@ export async function loadLocale(locale: string): Promise if (locale === 'cs') { return import(/* webpackChunkName: "cs" */ '../locales/cs.json').then((res) => res.default).catch(() => enMessages); } + if (locale === 'fa') { + return import(/* webpackChunkName: "fa" */ '../locales/fa.json').then((res) => res.default).catch(() => enMessages); + } return enMessages; } diff --git a/frontend/apps/remark42/tasks/supportedLocales.json b/frontend/apps/remark42/tasks/supportedLocales.json index c57b8278d8..cd8284d232 100644 --- a/frontend/apps/remark42/tasks/supportedLocales.json +++ b/frontend/apps/remark42/tasks/supportedLocales.json @@ -1 +1 @@ -["en", "ru", "de", "fi", "es", "zh", "tr", "bg", "ua", "pl", "vi", "be", "fr", "ja", "ko", "bp", "it", "ar", "zh-tw", "th", "cs"] +["en", "ru", "de", "fi", "es", "zh", "tr", "bg", "ua", "pl", "vi", "be", "fr", "ja", "ko", "bp", "it", "ar", "zh-tw", "th", "cs", "fa"]