From edf906d187dea5e41e0c7d531ce60f4e81f92cb4 Mon Sep 17 00:00:00 2001 From: jmilo97 <65023906+jmilo97@users.noreply.github.com> Date: Mon, 1 Nov 2021 13:05:43 +0330 Subject: [PATCH 1/4] Create fa.jason --- src/scripts/i18n/fa.jason | 235 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 235 insertions(+) create mode 100644 src/scripts/i18n/fa.jason diff --git a/src/scripts/i18n/fa.jason b/src/scripts/i18n/fa.jason new file mode 100644 index 00000000..27af31c9 --- /dev/null +++ b/src/scripts/i18n/fa.jason @@ -0,0 +1,235 @@ +{ + "allArticles": "همهٔ نوشته‌ها", + "add": "افزودن", + "create": "ساختن", + "icon": "نماد", + "name": "نام", + "openExternal": "باز کردن خارجی", + "emptyName": "این فیلد نباید خالی باشد.", + "emptyField": "این فیلد نباید خالی باشد.", + "edit": "ویرایش", + "delete": "پاک کردن", + "followSystem": "طبق سیستم", + "more": "بیشتر", + "close": "بستن", + "search": "جستوجو", + "loadMore": "بارگذاری بقیه", + "dangerButton": "آیا {action} را تأیید می‌کنید؟", + "confirmMarkAll": "آیا واقعاً می‌خواهید تمام نوشته‌های انتخاب شده را به عنوان خوانده شده علامتگذاری کنید؟", + "confirm": "تأیید", + "cancel": "انصراف", + "time": { + "now": "اکنون", + "m": "دقیقه", + "h": "ساعت", + "d": "روز", + "minute": "{m, plural, =1 {# دقیقه} other {# دقیقه}}", + "hour": "{h, plural, =1 {# ساعت} other {# ساعت}}", + "day": "{d, plural, =1 {# روز} other {# روز}}" + }, + "log": { + "empty": "بدون اعلان", + "fetchFailure": "بارگیری \"{name}\" ناموفق بود.", + "fetchSuccess": "بارگیری {count, plural, =1 {# نوشته} other {# نوشته‌ها}} موفق بود.", + "networkError": "خطایی در اتصال رخ داد.", + "parseError": "خطایی در هنگام تجزیهٔ فید XML رخ داد.", + "syncFailure": "همگام‌سازی با سرویس ناموفق بود." + }, + "nav": { + "menu": "فهرست", + "refresh": "تازه‌سازی", + "markAllRead": "علامتگذاری همه به غنوان خوانده شده", + "notifications": "اعلان‌ها", + "view": "مشاهده", + "settings": "تنظیمات", + "minimize": "Minimize", + "maximize": "Maximize" + }, + "menu": { + "close": "Close menu", + "subscriptions": "Subscriptions" + }, + "article": { + "error": "Failed to load article.", + "reload": "Reload?", + "empty": "No articles", + "untitled": "(Untitled)", + "hide": "Hide article", + "unhide": "Unhide article", + "markRead": "Mark as read", + "markUnread": "Mark as unread", + "markAbove": "Mark above as read", + "markBelow": "Mark below as read", + "star": "Star", + "unstar": "Remove star", + "fontSize": "Font size", + "loadWebpage": "Load webpage", + "loadFull": "Load full content", + "notify": "Notify if fetched in background", + "dontNotify": "Don't notify" + }, + "context": { + "share": "Share", + "read": "Read", + "copyTitle": "Copy title", + "copyURL": "Copy link", + "copy": "Copy", + "search": "Search \"{text}\" on {engine}", + "view": "View", + "cardView": "Card view", + "listView": "List view", + "magazineView": "Magazine view", + "compactView": "Compact view", + "filter": "Filtering", + "unreadOnly": "Unread only", + "starredOnly": "Starred only", + "fullSearch": "Search in full text", + "showHidden": "Show hidden articles", + "manageSources": "Manage sources", + "saveImageAs": "Save image as …", + "copyImage": "Copy image", + "copyImageURL": "Copy image link", + "caseSensitive": "Case sensitive", + "showCover": "Show cover", + "showSnippet": "Show snippet", + "fadeRead": "Fade read articles" + }, + "searchEngine": { + "name": "Search engine", + "google": "Google", + "bing": "Bing", + "baidu": "Baidu", + "duckduckgo": "DuckDuckGo" + }, + "settings": { + "writeError": "An error has occurred while writing the file.", + "name": "Settings", + "fetching": "Updating sources, please wait …", + "exit": "Exit settings", + "sources": "Sources", + "grouping": "Groups", + "rules": "Rules", + "service": "Service", + "app": "Preferences", + "about": "About", + "version": "Version", + "shortcuts": "Shortcuts", + "openSource": "Open source", + "feedback": "Feedback" + }, + "sources": { + "serviceWarning": "Sources imported or added here will not be synced with your service.", + "serviceManaged": "This source is managed by your service.", + "untitled": "Source", + "errorAdd": "An error has occured when adding the source.", + "errorParse": "An error has occurred when parsing the OPML file.", + "errorParseHint": "Please ensure that the file isn't corrupted and is encoded with UTF-8.", + "errorImport": "Error importing {count, plural, =1 {# source} other {# sources}}.", + "exist": "This source already exists.", + "opmlFile": "OPML File", + "name": "Source name", + "editName": "Edit name", + "fetchFrequency": "Fetch frequency limit", + "unlimited": "Unlimited", + "openTarget": "Default open target for articles", + "delete": "Delete source", + "add": "Add source", + "import": "Import", + "export": "Export", + "rssText": "RSS full text", + "loadWebpage": "Load webpage", + "inputUrl": "Enter URL", + "badIcon": "Invalid icon", + "badUrl": "Invalid URL", + "deleteWarning": "The source and all saved articles will be removed.", + "selected": "Selected source", + "selectedMulti": "Selected multiple sources" + }, + "groups": { + "exist": "This group already exists.", + "type": "Type", + "group": "Group", + "source": "Source", + "capacity": "Capacity", + "exitGroup": "Back to groups", + "deleteSource": "Delete from group", + "sourceHint": "Drag and drop sources to reorder.", + "create": "Create group", + "selectedGroup": "Selected group", + "selectedSource": "Selected source", + "enterName": "Enter name", + "editName": "Edit name", + "deleteGroup": "Delete group", + "chooseGroup": "Select a group", + "addToGroup": "Add to ...", + "groupHint": "Double click on group to edit sources. Drag and drop to reorder." + }, + "rules": { + "intro": "Automatically mark articles or send notifications with regular expressions.", + "help": "Learn more", + "source": "Source", + "selectSource": "Select a source", + "new": "New Rule", + "if": "If", + "then": "Then", + "title": "Title", + "content": "Content", + "fullSearch": "Title or content", + "creator": "Author", + "match": "matches", + "notMatch": "doesn't match", + "regex": "Regular expression", + "badRegex": "Invalid regular expression.", + "action": "Actions", + "selectAction": "Select actions", + "hint": "Rules will be applied in order. Drag and drop to reorder.", + "test": "Test rules" + }, + "service": { + "intro": "Sync across devices with RSS services.", + "select": "Select a service", + "suggest": "Suggest a new service", + "overwriteWarning": "Local sources will be deleted if they exist in the service.", + "groupsWarning": "Groups aren't automatically synced with the service.", + "rateLimitWarning": "To avoid rate limiting, you need to create your own API Key.", + "removeAd": "Remove Ad", + "endpoint": "Endpoint", + "username": "Username", + "password": "Password", + "unchanged": "Unchanged", + "fetchLimit": "Sync limit", + "fetchLimitNum": "{count} latest articles", + "importGroups": "Import groups", + "failure": "Cannot connect to service", + "failureHint": "Please check the service configuration or network status.", + "fetchUnlimited": "Unlimited (not recommended)", + "exportToLite": "Export to Fluent Reader Lite" + }, + "app": { + "cleanup": "Clean up", + "cache": "Clear cache", + "cacheSize": "Cached {size} of data", + "deleteChoices": "Delete articles from ... days ago", + "confirmDelete": "Delete", + "daysAgo": "{days, plural, =1 {# day} other {# days}} ago", + "deleteAll": "Delete all articles", + "calculatingSize": "Calculating size...", + "itemSize": "Around {size} of local storage is occupied by articles", + "confirmImport": "Do you really want to import data from the backup file? All current data will be wiped.", + "data": "Application Data", + "backup": "Backup", + "restore": "Restore", + "frData": "Fluent Reader Data", + "language": "Display language", + "theme": "Theme", + "lightTheme": "Light mode", + "darkTheme": "Dark mode", + "enableProxy": "Enable Proxy", + "badUrl": "Invalid URL", + "pac": "PAC Address", + "setPac": "Set PAC", + "pacHint": "For Socks proxies, it is recommended for PAC to return \"SOCKS5\" for proxy-side DNS. Turning off proxy requires restart.", + "fetchInterval": "Automatic fetch interval", + "never": "Never" + } +} From c6f21900c65316c3abdafab422abb1b23fee2509 Mon Sep 17 00:00:00 2001 From: jmilo97 <65023906+jmilo97@users.noreply.github.com> Date: Mon, 1 Nov 2021 15:52:29 +0330 Subject: [PATCH 2/4] Persian is added --- src/scripts/i18n/fa.jason | 304 +++++++++++++++++++------------------- 1 file changed, 152 insertions(+), 152 deletions(-) diff --git a/src/scripts/i18n/fa.jason b/src/scripts/i18n/fa.jason index 27af31c9..7a09ecb5 100644 --- a/src/scripts/i18n/fa.jason +++ b/src/scripts/i18n/fa.jason @@ -42,192 +42,192 @@ "notifications": "اعلان‌ها", "view": "مشاهده", "settings": "تنظیمات", - "minimize": "Minimize", - "maximize": "Maximize" + "minimize": "کوچک کردن", + "maximize": "بزرگ کردن" }, "menu": { - "close": "Close menu", - "subscriptions": "Subscriptions" + "close": "بستن منو", + "subscriptions": "اشتراک‌ها" }, "article": { - "error": "Failed to load article.", - "reload": "Reload?", - "empty": "No articles", - "untitled": "(Untitled)", - "hide": "Hide article", - "unhide": "Unhide article", - "markRead": "Mark as read", - "markUnread": "Mark as unread", - "markAbove": "Mark above as read", - "markBelow": "Mark below as read", - "star": "Star", - "unstar": "Remove star", - "fontSize": "Font size", - "loadWebpage": "Load webpage", - "loadFull": "Load full content", - "notify": "Notify if fetched in background", - "dontNotify": "Don't notify" + "error": "بارگیری نوشته ناموفق بود.", + "reload": "دوباره بارگیری شود؟", + "empty": "هیچ نوشته‌ای نیست.", + "untitled": "(بدون عنوان)", + "hide": "پنهان کردن نوشته", + "unhide": "نشان دادن نوشته", + "markRead": "علامت‌گذاری به‌عنوان خوانده شده", + "markUnread": "علامت‌گذاری به‌عنوان خوانده نشده", + "markAbove": "علامت‌گذاری بالایی‌ها به عنوان خوانده شده", + "markBelow": "علامت‌گذاری پایینی‌ها به عنوان خوانده شده", + "star": "ستاره", + "unstar": "حذف ستاره", + "fontSize": "اندازهٔ متن", + "loadWebpage": "بارگیری صفحهٔ وب", + "loadFull": "بارگیری تمام محتوا", + "notify": "اگر در پس‌زمینه بارگیری شد اطلاع بده", + "dontNotify": "اعلان نده" }, "context": { - "share": "Share", - "read": "Read", - "copyTitle": "Copy title", - "copyURL": "Copy link", - "copy": "Copy", - "search": "Search \"{text}\" on {engine}", - "view": "View", - "cardView": "Card view", - "listView": "List view", - "magazineView": "Magazine view", - "compactView": "Compact view", - "filter": "Filtering", - "unreadOnly": "Unread only", - "starredOnly": "Starred only", - "fullSearch": "Search in full text", - "showHidden": "Show hidden articles", - "manageSources": "Manage sources", - "saveImageAs": "Save image as …", - "copyImage": "Copy image", - "copyImageURL": "Copy image link", + "share": "هم‌رسانی", + "read": "خواندن", + "copyTitle": "رونویسی عنوان", + "copyURL": "رونویسی پیوند", + "copy": "رونویسی", + "search": "جستوجوی \"{text}\" در {engine}", + "view": "مشاهده", + "cardView": "نمای کارت", + "listView": "نمای لیست", + "magazineView": "نمای مجله", + "compactView": "نمای جمع و جور", + "filter": "فیلتر کردن", + "unreadOnly": "تنها خوانده نشده‌ها", + "starredOnly": "تنها ستاره‌دارها", + "fullSearch": "جستوجو در تمام متن", + "showHidden": "نشان دادن نوشته‌های مخفی", + "manageSources": "مدیریت منابع", + "saveImageAs": "ذخیرهٔ تصویر به عنوان ...", + "copyImage": "رونویسی تصویر", + "copyImageURL": "رونویسی پیوند تصویر", "caseSensitive": "Case sensitive", - "showCover": "Show cover", - "showSnippet": "Show snippet", - "fadeRead": "Fade read articles" + "showCover": "نشان دادن جلد", + "showSnippet": "نشان دادن اسنیپت", + "fadeRead": "محو نوشته‌های خوانده شده" }, "searchEngine": { - "name": "Search engine", - "google": "Google", - "bing": "Bing", - "baidu": "Baidu", - "duckduckgo": "DuckDuckGo" + "name": "موتور جستوجو", + "google": "گوگل", + "bing": "بینگ", + "baidu": "بایدو", + "duckduckgo": "داک‌داک‌گو" }, "settings": { - "writeError": "An error has occurred while writing the file.", - "name": "Settings", - "fetching": "Updating sources, please wait …", - "exit": "Exit settings", - "sources": "Sources", - "grouping": "Groups", - "rules": "Rules", - "service": "Service", - "app": "Preferences", - "about": "About", - "version": "Version", - "shortcuts": "Shortcuts", - "openSource": "Open source", - "feedback": "Feedback" + "writeError": "خطایی در هنگام نوشتن فایل رخ داد.", + "name": "تنظیمات", + "fetching": "بروزرسانی منابع، لطفاً شکیبا باشید...", + "exit": "خروج از تنظیمات", + "sources": "منابع", + "grouping": "گروه‌ها", + "rules": "قوانین", + "service": "خدمات", + "app": "اولویت‌ها", + "about": "درباره", + "version": "نسخه", + "shortcuts": "میانبرها", + "openSource": "متن‌باز", + "feedback": "بازخورد" }, "sources": { - "serviceWarning": "Sources imported or added here will not be synced with your service.", - "serviceManaged": "This source is managed by your service.", - "untitled": "Source", - "errorAdd": "An error has occured when adding the source.", - "errorParse": "An error has occurred when parsing the OPML file.", - "errorParseHint": "Please ensure that the file isn't corrupted and is encoded with UTF-8.", - "errorImport": "Error importing {count, plural, =1 {# source} other {# sources}}.", - "exist": "This source already exists.", - "opmlFile": "OPML File", - "name": "Source name", - "editName": "Edit name", - "fetchFrequency": "Fetch frequency limit", - "unlimited": "Unlimited", + "serviceWarning": "منابعی که این‌جا افزوده می‌شود، با سرویس شما همگام‌سازی نمی‌شود.", + "serviceManaged": "این منبع با سرویس شما مدیریت می‌شود.", + "untitled": "منبع", + "errorAdd": "خطایی هنگام اضافه کردن منبع رخ داد.", + "errorParse": "خطایی هنگام تفسیر فایل OPML رخ داد.", + "errorParseHint": "لطفاً مطمئن شوید که خطایی در فایل نیست و یا فرمت متن فایل UTF-8 است.", + "errorImport": "خطا در وارد کردن {count, plural, =1 {# منبع} other {# منبع}}.", + "exist": "این منبع از قبل موجود بود.", + "opmlFile": "پروندهٔ OPML", + "name": "نام منبع", + "editName": "ویرایش نام", + "fetchFrequency": "واکشی حد فرکانس", + "unlimited": "نامحدود", "openTarget": "Default open target for articles", - "delete": "Delete source", - "add": "Add source", - "import": "Import", - "export": "Export", - "rssText": "RSS full text", - "loadWebpage": "Load webpage", - "inputUrl": "Enter URL", - "badIcon": "Invalid icon", - "badUrl": "Invalid URL", - "deleteWarning": "The source and all saved articles will be removed.", - "selected": "Selected source", - "selectedMulti": "Selected multiple sources" + "delete": "حدف منبع", + "add": "افزودن منبع", + "import": "وارد کردن", + "export": "خروجی گرفتن", + "rssText": "متن کامل RSS", + "loadWebpage": "بارگیری صفحهٔ وب", + "inputUrl": "URL را وارد کنید", + "badIcon": "نماد دنامعتبر", + "badUrl": "URL نامعتبر", + "deleteWarning": "این منبع و تمام نوشته‌هایش پاک خواهد شد!", + "selected": "منابع انتخاب شده", + "selectedMulti": "انتخاب چند منبع" }, "groups": { - "exist": "This group already exists.", - "type": "Type", - "group": "Group", - "source": "Source", - "capacity": "Capacity", - "exitGroup": "Back to groups", - "deleteSource": "Delete from group", - "sourceHint": "Drag and drop sources to reorder.", - "create": "Create group", - "selectedGroup": "Selected group", - "selectedSource": "Selected source", - "enterName": "Enter name", - "editName": "Edit name", - "deleteGroup": "Delete group", - "chooseGroup": "Select a group", - "addToGroup": "Add to ...", - "groupHint": "Double click on group to edit sources. Drag and drop to reorder." + "exist": "این گروه از پیش موجود است", + "type": "گونه", + "group": "گروه", + "source": "منبع", + "capacity": "ظرفیت", + "exitGroup": "بازگشت به گروه‌ها", + "deleteSource": "حذف از گروه", + "sourceHint": "برای مرتب کردن مجدد، منابع را بکشید و رها کنید.", + "create": "ایجاد گروه", + "selectedGroup": "گروه‌های انتخاب شده", + "selectedSource": "منابع انتخاب شده", + "enterName": "نام را وارد کنید", + "editName": "ویرایش نام", + "deleteGroup": "پاکسازی گروه", + "chooseGroup": "گزینش گروه", + "addToGroup": "افزودن به ...", + "groupHint": "دوبار کلیک بر روی منابع برای ویرایش و کشیدن و رها کردن برای مرتب‌سازی" }, "rules": { "intro": "Automatically mark articles or send notifications with regular expressions.", - "help": "Learn more", - "source": "Source", - "selectSource": "Select a source", - "new": "New Rule", - "if": "If", - "then": "Then", - "title": "Title", - "content": "Content", - "fullSearch": "Title or content", - "creator": "Author", - "match": "matches", - "notMatch": "doesn't match", - "regex": "Regular expression", - "badRegex": "Invalid regular expression.", - "action": "Actions", - "selectAction": "Select actions", + "help": "بیشتر بدانید", + "source": "منبع", + "selectSource": "یک منبع را بگزینید", + "new": "قاعدهٔ جدید", + "if": "اگر", + "then": "آنگاه", + "title": "عنوان", + "content": "محتوا", + "fullSearch": "عنوان یا محتوا", + "creator": "نگارنده", + "match": "تطابق", + "notMatch": "مطابقت ندارد", + "regex": "عبارت ریجکس", + "badRegex": "زیجکس نادرست", + "action": "فعالیت‌ها", + "selectAction": "گزینش فعالیت‌ها", "hint": "Rules will be applied in order. Drag and drop to reorder.", - "test": "Test rules" + "test": "آزمایش قواعد" }, "service": { - "intro": "Sync across devices with RSS services.", - "select": "Select a service", - "suggest": "Suggest a new service", + "intro": "همگام‌سازی وسایل با RSS", + "select": "سریسی گزینش کنید.", + "suggest": "سرویسی پیشنهاد کنید", "overwriteWarning": "Local sources will be deleted if they exist in the service.", "groupsWarning": "Groups aren't automatically synced with the service.", "rateLimitWarning": "To avoid rate limiting, you need to create your own API Key.", - "removeAd": "Remove Ad", + "removeAd": "حذف تبلیغات", "endpoint": "Endpoint", - "username": "Username", - "password": "Password", - "unchanged": "Unchanged", - "fetchLimit": "Sync limit", - "fetchLimitNum": "{count} latest articles", - "importGroups": "Import groups", + "username": "نام کاربری", + "password": "رمز", + "unchanged": "تغییر نیافته", + "fetchLimit": "حد همگام‌سازی", + "fetchLimitNum": "{count} نوشتهٔ جدید", + "importGroups": "وارد کردن گروه‌ها", "failure": "Cannot connect to service", "failureHint": "Please check the service configuration or network status.", "fetchUnlimited": "Unlimited (not recommended)", "exportToLite": "Export to Fluent Reader Lite" }, "app": { - "cleanup": "Clean up", - "cache": "Clear cache", - "cacheSize": "Cached {size} of data", - "deleteChoices": "Delete articles from ... days ago", - "confirmDelete": "Delete", - "daysAgo": "{days, plural, =1 {# day} other {# days}} ago", - "deleteAll": "Delete all articles", - "calculatingSize": "Calculating size...", - "itemSize": "Around {size} of local storage is occupied by articles", + "cleanup": "پاک کردن", + "cache": "پاک کردن کش", + "cacheSize": "{size} داده کش شد.", + "deleteChoices": "پاک کردن نوشته‌ها از ... روز پیش", + "confirmDelete": "پاکسازی", + "daysAgo": "{days, plural, =1 {# روز} other {# روز}} پیش", + "deleteAll": "پاکسازی همهٔ نوشته‌ها", + "calculatingSize": "محاسبهٔ اندازه...", + "itemSize": "حدود {size} از حافظه توسط نوشته‌ها پر شده است.", "confirmImport": "Do you really want to import data from the backup file? All current data will be wiped.", "data": "Application Data", - "backup": "Backup", - "restore": "Restore", - "frData": "Fluent Reader Data", - "language": "Display language", - "theme": "Theme", - "lightTheme": "Light mode", - "darkTheme": "Dark mode", - "enableProxy": "Enable Proxy", - "badUrl": "Invalid URL", - "pac": "PAC Address", - "setPac": "Set PAC", + "backup": "پشتیبان‌گیری", + "restore": "بازگردانی", + "frData": "داده‌های فلوئنت ریدر", + "language": "نمایش زبان‌ها", + "theme": "پوسته", + "lightTheme": "روشن", + "darkTheme": "تاریک", + "enableProxy": "فعالسازی پروکسی", + "badUrl": "URL نامعتبر", + "pac": "آدرس PAC", + "setPac": "تنظیم PAC", "pacHint": "For Socks proxies, it is recommended for PAC to return \"SOCKS5\" for proxy-side DNS. Turning off proxy requires restart.", "fetchInterval": "Automatic fetch interval", "never": "Never" From 0d1225e8d95928e6330f0d94b3ea2ede5a744356 Mon Sep 17 00:00:00 2001 From: jmilo97 <65023906+jmilo97@users.noreply.github.com> Date: Mon, 1 Nov 2021 15:53:54 +0330 Subject: [PATCH 3/4] Persian added to _locales.ts --- src/scripts/i18n/_locales.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/scripts/i18n/_locales.ts b/src/scripts/i18n/_locales.ts index 9aa9de00..b2131140 100644 --- a/src/scripts/i18n/_locales.ts +++ b/src/scripts/i18n/_locales.ts @@ -12,6 +12,7 @@ import it from "./it.json" import uk from "./uk.json" import pt_BR from "./pt-BR.json" import fi_FI from "./fi-FI.json" +import fa from "./fa.json" const locales = { "en-US": en_US, @@ -28,6 +29,7 @@ const locales = { "uk": uk, "pt-BR": pt_BR, "fi-FI": fi_FI, + "fa": fa } export default locales From 1fba1f9c13f7cf806672f1e609cc062e0231a790 Mon Sep 17 00:00:00 2001 From: jmilo97 <65023906+jmilo97@users.noreply.github.com> Date: Mon, 1 Nov 2021 15:55:50 +0330 Subject: [PATCH 4/4] Persian added --- src/scripts/i18n/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/scripts/i18n/README.md b/src/scripts/i18n/README.md index 97813add..57ff677c 100644 --- a/src/scripts/i18n/README.md +++ b/src/scripts/i18n/README.md @@ -6,6 +6,7 @@ Currently, Fluent Reader supports the following languages. | --- | --- | --- | | en-US | English | [@yang991178](https://github.com/yang991178) | | es | Español | [@kant](https://github.com/kant) | +| fa | فارسی | [@jmilo97](https://github.com/jmilo97) | | fr-FR | Français | [@Toinane](https://github.com/Toinane) | | fi-FI | Suomi | [@SUPERHAMSTERI](https://github.com/SUPERHAMSTERI) | | zh-CN | 中文(简体) | [@yang991178](https://github.com/yang991178) |