Skip to content
Open
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
5 changes: 3 additions & 2 deletions src/components/settings/app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -129,18 +129,19 @@ class AppTab extends React.Component<AppTabProps, AppTabState> {

languageOptions = (): IDropdownOption[] => [
{ key: "default", text: intl.get("followSystem") },
{ key: "ar", text: "العَرَبِيَّة" },
{ key: "de", text: "Deutsch" },
{ key: "en-US", text: "English" },
{ key: "es", text: "Español" },
{ key: "fi-FI", text: "Suomi" },
{ key: "fr-FR", text: "Français" },
{ key: "it", text: "Italiano" },
{ key: "ja", text: "日本語" },
{ key: "nl", text: "Nederlands" },
{ key: "pt-BR", text: "Português do Brasil" },
{ key: "fi-FI", text: "Suomi" },
{ key: "sv", text: "Svenska" },
{ key: "tr", text: "Türkçe" },
{ key: "uk", text: "Українська" },
{ key: "ja", text: "日本語" },
{ key: "zh-CN", text: "中文(简体)" },
{ key: "zh-TW", text: "中文(繁體)" },
]
Expand Down
15 changes: 8 additions & 7 deletions src/scripts/i18n/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,20 @@ Currently, Fluent Reader supports the following languages.

| Locale | Language | Credit |
| --- | --- | --- |
| ar | Arabic | [@zer0-x](https://github.com/ZER0-X) |
| de | Deutsch | [@NoNamePro0](https://github.com/NoNamePro0) |
| en-US | English | [@yang991178](https://github.com/yang991178) |
| es | Español | [@kant](https://github.com/kant) |
| fr-FR | Français | [@Toinane](https://github.com/Toinane) |
| fi-FI | Suomi | [@SUPERHAMSTERI](https://github.com/SUPERHAMSTERI) |
| zh-CN | 中文(简体) | [@yang991178](https://github.com/yang991178) |
| zh-TW | 中文(繁體) | [@jerryc127](https://github.com/jerryc127) |
| fr-FR | Français | [@Toinane](https://github.com/Toinane) |
| it | Italiano | [@andrewasd](https://github.com/andrewasd) |
| ja | 日本語 | [@tiancheng2000](https://github.com/tiancheng2000) |
| de | Deutsch | [@NoNamePro0](https://github.com/NoNamePro0) |
| nl | Nederlands | [@Vistaus](https://github.com/Vistaus) |
| pt-BR | Português do Brasil | [@fabianski7](https://github.com/fabianski7) |
| sv | Svenska | [@eson57](https://github.com/eson57) |
| tr | Türkçe | [@mustafagenc](https://github.com/mustafagenc) |
| uk | Ukrainian | [@thevllad](https://github.com/thevllad) |
| nl | Nederlands | [@Vistaus](https://github.com/Vistaus) |
| it | Italiano | [@andrewasd](https://github.com/andrewasd) |
| pt-BR | Português do Brasil | [@fabianski7](https://github.com/fabianski7) |
| zh-CN | 中文(简体) | [@yang991178](https://github.com/yang991178) |
| zh-TW | 中文(繁體) | [@jerryc127](https://github.com/jerryc127) |

Refer to the repo of [react-intl-universal](https://github.com/alibaba/react-intl-universal) to get started on internationalization.
34 changes: 18 additions & 16 deletions src/scripts/i18n/_locales.ts
Original file line number Diff line number Diff line change
@@ -1,33 +1,35 @@
import ar from "./ar.json"
import de from "./de.json"
import en_US from "./en-US.json"
import zh_CN from "./zh-CN.json"
import zh_TW from "./zh-TW.json"
import ja from "./ja.json"
import es from "./es.json"
import fi_FI from "./fi-FI.json"
import fr_FR from "./fr-FR.json"
import de from "./de.json"
import it from "./it.json"
import ja from "./ja.json"
import nl from "./nl.json"
import es from "./es.json"
import pt_BR from "./pt-BR.json"
import sv from "./sv.json"
import tr from "./tr.json"
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 zh_CN from "./zh-CN.json"
import zh_TW from "./zh-TW.json"

const locales = {
"ar": ar,
"de": de,
"en-US": en_US,
"zh-CN": zh_CN,
"zh-TW": zh_TW,
"ja": ja,
"es": es,
"fi-FI": fi_FI,
"fr-FR": fr_FR,
"de": de,
"it": it,
"ja": ja,
"nl": nl,
"es": es,
"pt-BR": pt_BR,
"sv": sv,
"tr": tr,
"it": it,
"uk": uk,
"pt-BR": pt_BR,
"fi-FI": fi_FI,
"zh-CN": zh_CN,
"zh-TW": zh_TW,
}

export default locales
235 changes: 235 additions & 0 deletions src/scripts/i18n/ar.json
Original file line number Diff line number Diff line change
@@ -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 {دَقيقَةٌ وَاحِدة} =2 {دَقيقَتان} =3 {# دَقائِق} =4 {# دَقيقَتًا} other {# دَقيقَة}}",
"hour": "{h, plural, =1 {ساعَةٌ وَاحِدة} =2 {ساعَتان} =3 {# ساعات} =4 {# ساعَتًا} other {# ساعَة}}",
"day": "{d, plural, =1 {يَومٌ وَاحِد} =2 {يَومَان} =3 {# أيَّام} =4 {# يومًا} other {# يَوم}}"
},
"log": {
"empty": "لَا إشعَارَات",
"fetchFailure": "فَشَلَ تَحميلُ المَصدَر \"{name}\".",
"fetchSuccess": "تَمَّ جَلبُ {count, plural, =1 {مَقالٍ وَاحِدٍ} =2 {مَقالانِ} =3 {# مَقالاتٍ} =4 {# مَقالاً} other {# مَقالٍ}} بِنجاح.",
"networkError": "طَرَأ خَطأٌ فِي الشَّبَكَة.",
"parseError": "طَرَأ خَطَأٌ عِندَ تَحلِيلِ تَغذِيَةِ XML.",
"syncFailure": "فَشَلٌ فِي المُزامَنَةِ مَعَ الخِدمَة"
},
"nav": {
"menu": "القائِمَة",
"refresh": "تَحديث",
"markAllRead": "تَعليمُ الكٌلِّ كَمَقرُوء",
"notifications": "الإشعَارَات",
"view": "المُعايَنَة",
"settings": "الإعدَادَات",
"minimize": "التَّقليص",
"maximize": "التَّكبير"
},
"menu": {
"close": "إغلاقُ القائِمَة",
"subscriptions": "الاِشتِراكات"
},
"article": {
"error": "فَشَلَ تَحميلُ المَقال.",
"reload": "إعادَةُ التَّحميل؟",
"empty": "لَا مَقالَات",
"untitled": "(بِلَا عُنوَان)",
"hide": "إخفاءُ المَقال",
"unhide": "إظهارُ المَقال",
"markRead": "التَّعليمُ كَمَقرُوء",
"markUnread": "التَّعليمُ كَغيرِ مَقرُوء",
"markAbove": "تَعليمُ الأعلَى كَمَقرُوء",
"markBelow": "تَعليمُ الأدْنى كَمَقرُوء",
"star": "نَجمَة",
"unstar": "إزالَةُ النَّجمَة",
"fontSize": "حَجْمُ الخَطّ",
"loadWebpage": "تَحميلُ صَفحَةِ الويب",
"loadFull": "تَحميلُ كامِلِ المُحتَوى",
"notify": "الإخطارُ عِندَ الجَّلبِ في الخَلفيَّة",
"dontNotify": "عَدَمُ الإخطَار"
},
"context": {
"share": "المُشارَكَة",
"read": "القِراءة",
"copyTitle": "نَسخُ العُنوان",
"copyURL": "نَسخُ الرَّابِط",
"copy": "نَسخ",
"search": "البَحثُ عَن \"{text}\" عَلَى {engine}",
"view": "المُعايَنَة",
"cardView": "مَظهَرُ البِطاقات",
"listView": "مَظهَرُ القَائمَة",
"magazineView": "مَظهَرُ المِجَلَّة",
"compactView": "المَظهَرُ المَضغوط",
"filter": "التَصفِيَة",
"unreadOnly": "غَيرَ المَقروءةِ فَقَط",
"starredOnly": "المُعلَّمَةُ بالنَّجمَةِ فَقَط",
"fullSearch": "البَحثُ فِي النَصِّ الكامِل",
"showHidden": "إظهارُ المَقالاتِ المَخفيَّة",
"manageSources": "إدارَةُ المَصادِر",
"saveImageAs": "حِفظُ الصّورَةِ كَـ ...",
"copyImage": "نَسخُ الصّورَة",
"copyImageURL": "نَسخُ رابِطِ الصّورَة",
"caseSensitive": "حَساسيَّةُ حَالَةِ الأحرُف",
"showCover": "عَرضُ الغِلاف",
"showSnippet": "عَرضُ مُقتَطَف",
"fadeRead": "تلاشي قراءة المقالات"
},
"searchEngine": {
"name": "مُحَرِّكُ البَحث",
"google": "جوجل",
"bing": "بينغ",
"baidu": "بايدو",
"duckduckgo": "دك دك جو"
},
"settings": {
"writeError": "طرأ خطأ أثناء كتابة الملف.",
"name": "الإعدَادَات",
"fetching": "يَجري تَحدِيثُ المَصَادِر، يُرجَى الاِنتِظار ...",
"exit": "الخُرورجُ مِنَ الإعدَادَات",
"sources": "المَصادِر",
"grouping": "المَجمُوعات",
"rules": "القَوانين",
"service": "الخَدمات",
"app": "التَّفضيلات",
"about": "حَول",
"version": "الإصدار",
"shortcuts": "الاِختِصارات",
"openSource": "المَصدَرُ المَفتُوح",
"feedback": "التَّغذِيَةُ الرَاجِعَة"
},
"sources": {
"serviceWarning": "لَن تُزامَن المَصادِرِ المُستورَدَةِ أو المُضافَةِ هُنا مَعَ خِدمَتك.",
"serviceManaged": "يُدَارُ هَذَا المَصدَرُ مِن قِبَلِ خدمَتك.",
"untitled": "مَصدَر",
"errorAdd": "طرأ خطأ عند إضافة المصدر.",
"errorParse": "طرأ خطأ عند تحليل ملف OPML.",
"errorParseHint": "يرجى التأكد من أن الملف ليس تالفًا ويتم ترميزه باستخدام UTF-8.",
"errorImport": "خطأ في إستيراد {count, plural, =1 {مصدر واحد} =2 {مصدران} =3 {# مصادر} =4 {# مصدرًا} other {# مصدر}}.",
"exist": "هذا المصدر موجود بالفعل.",
"opmlFile": "مِلف OPML",
"name": "اِسمُ المَصدَر",
"editName": "تَحريرُ الاِسم",
"fetchFrequency": "حدُّ تردد الجلب",
"unlimited": "بِلا حُدود",
"openTarget": "هدف الفتح الافتراضي للمقالات",
"delete": "حَذفُ المَصدَر",
"add": "إضافَةُ مَصدَر",
"import": "إستِيراد",
"export": "تَصدير",
"rssText": "نَصُّ RSS الكامِل",
"loadWebpage": "تَحميلُ صفحَةِ الويب",
"inputUrl": "إدخالُ عٌنوانِ URL",
"badIcon": "أيقونَةٌ غَيرُ صَالِحَة",
"badUrl": "عُنوانُ URL غَيرُ صَالِح",
"deleteWarning": "سوف يُزالُ المَصدَر وجَميع المقالات المحفوظة.",
"selected": "المَصدَر المُحَدَّد",
"selectedMulti": "عَدَدٌ مِنَ المَصادِرِ المُحُدَّدَة"
},
"groups": {
"exist": "هذه المجموعة موجودة بالفعل.",
"type": "النوع",
"group": "المجموعة",
"source": "المصدر",
"capacity": "السِّعَة",
"exitGroup": "العودة إلى المجموعات",
"deleteSource": "الحذف من المجموعة",
"sourceHint": "اسحب وارمِ المصادر لإعادة الترتيب.",
"create": "إنشاء مجموعة",
"selectedGroup": "المجموعة المُحَدَّدَة",
"selectedSource": "المصدر المُحَدَّدَ",
"enterName": "أدخل اسم",
"editName": "تحرير الاِسم",
"deleteGroup": "حذف المجموعة",
"chooseGroup": "حَدِّد مجموعة",
"addToGroup": "إضافة إلى ...",
"groupHint": "انقر نقرًا مزدوجًا على المجموعة لتحرير المصادر. اسحب وارمِ لإعادة الترتيب."
},
"rules": {
"intro": "التَّعلِيم تلقائيًا أو إرسال الإشعارات عن طريق تعبيرات نمطيَّة.",
"help": "تعلم المزيد",
"source": "المصدر",
"selectSource": "حدد مصدر",
"new": "قاعدة جديدة",
"if": "إذا كانَ",
"then": "حينئذٍ",
"title": "العنوان",
"content": "المحتوى",
"fullSearch": "عنوان المحتوى",
"creator": "الكاتب",
"match": "يتطابق مع",
"notMatch": "لا يتطابق مع",
"regex": "تعبير نمطي",
"badRegex": "تعبير نمطي غير صالح.",
"action": "إلاجراءات",
"selectAction": "تحديد إجراء",
"hint": "تُطَبَّق القواعد بالترتيب. اسحب وارمِ لإعادة التريب.",
"test": "اختبار القاعدة"
},
"service": {
"intro": "المزامنة عبر الأجهزة بواسطة خدمات RSS.",
"select": "اِختر خدمة",
"suggest": "إقتراح خدمة جديدة",
"overwriteWarning": "سيتم حذف المصادر المحلية إذا كانت موجودة في الخدمة.",
"groupsWarning": "لا تتم مزامنة المجموعات تلقائيا مع الخدمة.",
"rateLimitWarning": "لتجنب معدل الحد، تحتاج إلى إنشاء مفتاح API الخاص بك.",
"removeAd": "إزالة الإعلانات",
"endpoint": "نقطة النهاية",
"username": "اسم المستخدم",
"password": "كلمة المرور",
"unchanged": "دون تغيير",
"fetchLimit": "حدّ المزامنة",
"fetchLimitNum": "آخر {count} مقال",
"importGroups": "استيراد مجموعات",
"failure": "يتعذَّر الاتصال بالخدمة",
"failureHint": "يرجى التحقق من تكوين الخدمة أو حالة الشبكة.",
"fetchUnlimited": "غير محدود (غير موصى به)",
"exportToLite": "التصدير إلى قارئ فلُوينت لايت"
},
"app": {
"cleanup": "التنظيف",
"cache": "محو ذاكرة التخزين المؤقتة",
"cacheSize": "مُخزَّن {size} مِنَ البيانات المؤقتة.",
"deleteChoices": "حذف المقالات منذ ... يوم",
"confirmDelete": "حذف",
"daysAgo": "قبلَ {days, plural, =1 {يَومٍ وَاحِد} =2 {يَومَان} =3 {# أيَّام} =4 {# يومًا} other {# يَوم}}",
"deleteAll": "حذف كافَّة المقالات",
"calculatingSize": "يجري حساب الحجم...",
"itemSize": "حول {حجم} من المخزن المحلي محتلة من قبل المقالات",
"confirmImport": "هل تريد حقا استيراد البيانات من ملف نسخة احتياطية؟ سيتم مسح جميع البيانات الحالية.",
"data": "بيانات التطبيق",
"backup": "نُشخة احتياطية",
"restore": "استرجاع",
"frData": "بيانات قارئ فلُوينت",
"language": "لُغةُ العرض",
"theme": "السِّمَة",
"lightTheme": "النمط المضيء",
"darkTheme": "النمط المظلم",
"enableProxy": "تمكين وكيل",
"badUrl": "عنوان URL غشر صالح",
"pac": "عنوان PAC",
"setPac": "تعيين PAC",
"pacHint": "بالنسبة لوكلاء Socks، يوصى لِـPAK بإرجاع \"SOCKS5\" لِـDNS طرف الوكيل. تعطيل الوكيل يتطلب إعادة التشغيل.",
"fetchInterval": "فترات الجلب التلقائي",
"never": "أبدًا"
}
}