Merge pull request #376 from mastodon/release-1.3.1

Release v1.3.1
This commit is contained in:
CMK 2022-04-22 17:48:43 +08:00 committed by GitHub
commit 6b5328946d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
242 changed files with 9770 additions and 1718 deletions

View File

@ -15,8 +15,8 @@
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>1.3.0</string>
<string>1.3.1</string>
<key>CFBundleVersion</key>
<string>109</string>
<string>113</string>
</dict>
</plist>

View File

@ -1,4 +1,4 @@
"16wxgf" = "النَشر على ماستودون";
"16wxgf" = "النَّشرُ عَلَى مَاستودُون";
"751xkl" = "محتوى نصي";
@ -14,7 +14,7 @@
"RxSqsb" = "مَنشور";
"WCIR3D" = "نَشر ${content} على ماستودون";
"WCIR3D" = "نَشرُ ${content} عَلَى مَاستودُون";
"ZKJSNu" = "مَنشور";
@ -32,9 +32,9 @@
"ayoYEb-ehFLjY" = "${content}، المُتابِعُون فقط";
"dUyuGg" = "النشر على ماستدون";
"dUyuGg" = "النَّشرُ عَلَى مَاستودُون";
"dYQ5NN" = "للعامة";
"dYQ5NN" = "لِلعَامَّة";
"ehFLjY" = "لمتابعيك فقط";

View File

@ -1,51 +1,51 @@
"16wxgf" = "Post on Mastodon";
"16wxgf" = "Pubblica su Mastodon";
"751xkl" = "Text Content";
"751xkl" = "Contenuto testuale";
"CsR7G2" = "Post on Mastodon";
"CsR7G2" = "Pubblica su Mastodon";
"HZSGTr" = "What content to post?";
"HZSGTr" = "Quale contenuto postare?";
"HdGikU" = "Posting failed";
"HdGikU" = "Pubblicazione non riuscita";
"KDNTJ4" = "Failure Reason";
"KDNTJ4" = "Motivo del fallimento";
"RHxKOw" = "Send Post with text content";
"RHxKOw" = "Invia post con contenuto testuale";
"RxSqsb" = "Post";
"RxSqsb" = "Pubblica";
"WCIR3D" = "Post ${content} on Mastodon";
"WCIR3D" = "Pubblica ${content} su Mastodon";
"ZKJSNu" = "Post";
"ZKJSNu" = "Pubblica";
"ZS1XaK" = "${content}";
"ZbSjzC" = "Visibility";
"ZbSjzC" = "Visibilità";
"Zo4jgJ" = "Post Visibility";
"Zo4jgJ" = "Visibilità del post";
"apSxMG-dYQ5NN" = "There are ${count} options matching Public.";
"apSxMG-dYQ5NN" = "Ci sono ${count} opzioni corrispondenti a 'Pubblico'.";
"apSxMG-ehFLjY" = "There are ${count} options matching Followers Only.";
"apSxMG-ehFLjY" = "Ci sono ${count} opzioni corrispondenti a Solo Seguaci.";
"ayoYEb-dYQ5NN" = "${content}, Public";
"ayoYEb-dYQ5NN" = "${content}, Pubblico";
"ayoYEb-ehFLjY" = "${content}, Followers Only";
"ayoYEb-ehFLjY" = "${content}, Solo seguaci";
"dUyuGg" = "Post on Mastodon";
"dUyuGg" = "Pubblica su Mastodon";
"dYQ5NN" = "Public";
"dYQ5NN" = "Pubblico";
"ehFLjY" = "Followers Only";
"ehFLjY" = "Solo i seguaci";
"gfePDu" = "Posting failed. ${failureReason}";
"gfePDu" = "Pubblicazione fallita. ${failureReason}";
"k7dbKQ" = "Post was sent successfully.";
"k7dbKQ" = "Post inviato con successo.";
"oGiqmY-dYQ5NN" = "Just to confirm, you wanted Public?";
"oGiqmY-dYQ5NN" = "Solo per confermare, volevi Pubblico?";
"oGiqmY-ehFLjY" = "Just to confirm, you wanted Followers Only?";
"oGiqmY-ehFLjY" = "Solo per confermare, volevi 'Solo seguaci'?";
"rM6dvp" = "URL";
"ryJLwG" = "Post was sent successfully. ";
"ryJLwG" = "Post inviato con successo. ";

View File

@ -5,7 +5,7 @@
<key>There are ${count} options matching ${content}. - 2</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>There are %#@count_option@ matching ${content}.</string>
<string>Ci sono %#@count_option@ corrispondenti a «${content}».</string>
<key>count_option</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
@ -13,15 +13,15 @@
<key>NSStringFormatValueTypeKey</key>
<string>%ld</string>
<key>one</key>
<string>1 option</string>
<string>1 opzione</string>
<key>other</key>
<string>%ld options</string>
<string>%ld opzioni</string>
</dict>
</dict>
<key>There are ${count} options matching ${visibility}.</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>There are %#@count_option@ matching ${visibility}.</string>
<string>Ci sono %#@count_option@ corrispondenti a «${visibility}».</string>
<key>count_option</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
@ -29,9 +29,9 @@
<key>NSStringFormatValueTypeKey</key>
<string>%ld</string>
<key>one</key>
<string>1 option</string>
<string>1 opzione</string>
<key>other</key>
<string>%ld options</string>
<string>%ld opzioni</string>
</dict>
</dict>
</dict>

View File

@ -0,0 +1,51 @@
"16wxgf" = "Đăng lên Mastodon";
"751xkl" = "Nội dung văn bản";
"CsR7G2" = "Đăng lên Mastodon";
"HZSGTr" = "Đăng loại nội dung nào?";
"HdGikU" = "Không thể đăng";
"KDNTJ4" = "Lý do không thể đăng";
"RHxKOw" = "Gửi tút với nội dung là chữ";
"RxSqsb" = "Tút";
"WCIR3D" = "Đăng ${content} lên Mastodon";
"ZKJSNu" = "Tút";
"ZS1XaK" = "${content}";
"ZbSjzC" = "Hiển thị";
"Zo4jgJ" = "Thay đổi quyền riêng tư";
"apSxMG-dYQ5NN" = "Có ${count} lựa chọn khớp với Công khai.";
"apSxMG-ehFLjY" = "Có ${count} lựa chọn khớp với Riêng tư.";
"ayoYEb-dYQ5NN" = "${content}, Công khai";
"ayoYEb-ehFLjY" = "${content}, Riêng tư";
"dUyuGg" = "Đăng lên Mastodon";
"dYQ5NN" = "Công khai";
"ehFLjY" = "Riêng tư";
"gfePDu" = "Không thể đăng. ${failureReason}";
"k7dbKQ" = "Đã đăng tút thành công.";
"oGiqmY-dYQ5NN" = "Xin xác nhận, bạn muốn Công khai?";
"oGiqmY-ehFLjY" = "Xin xác nhận, bạn muốn Riêng tư?";
"rM6dvp" = "URL";
"ryJLwG" = "Đã đăng tút thành công. ";

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>There are ${count} options matching ${content}. - 2</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>Có %#@count_option@ khớp với ${content}.</string>
<key>count_option</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>%ld</string>
<key>other</key>
<string>%ld lựa chọn</string>
</dict>
</dict>
<key>There are ${count} options matching ${visibility}.</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>Có %#@count_option@ khớp với ${visibility}.</string>
<key>count_option</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>%ld</string>
<key>other</key>
<string>%ld lựa chọn</string>
</dict>
</dict>
</dict>
</plist>

View File

@ -56,6 +56,7 @@ private func map(language: String) -> String? {
case "fr_FR": return "fr" // French
case "de_DE": return "de" // German
case "ja_JP": return "ja" // Japanese
case "kab_KAB": return "kab" // Kabyle
case "kmr_TR": return "ku" // Kurmanji (Kurdish)
case "ru_RU": return "ru" // Russian
case "gd_GB": return "gd-GB" // Scottish Gaelic
@ -63,6 +64,7 @@ private func map(language: String) -> String? {
case "es_AR": return "es-419" // Spanish, Argentina
case "sv_FI": return "sv_FI" // Swedish, Finland
case "th_TH": return "th" // Thai
case "vi_VN": return "vi" // Vietnamese
default: return nil
}
}

View File

@ -170,6 +170,30 @@
<string>%ld إعادة تدوين</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>zero</key>
<string>لا رَدّ</string>
<key>one</key>
<string>رَدٌّ واحِد</string>
<key>two</key>
<string>رَدَّانِ اِثنان</string>
<key>few</key>
<string>%ld رُدُود</string>
<key>many</key>
<string>%ld رَدًّا</string>
<key>other</key>
<string>%ld رَدّ</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
@ -447,15 +471,15 @@
<key>zero</key>
<string>مُنذُ لَحظة</string>
<key>one</key>
<string>مُنذُ سنة</string>
<string>مُنذُ %ldع</string>
<key>two</key>
<string>مُنذُ سنتين</string>
<string>مُنذُ %ldع</string>
<key>few</key>
<string>مُنذُ %ld سنين</string>
<string>مُنذُ %ldع</string>
<key>many</key>
<string>مُنذُ %ld سنةً</string>
<string>مُنذُ %ldع</string>
<key>other</key>
<string>مُنذُ %ld سنة</string>
<string>مُنذُ %ldع</string>
</dict>
</dict>
<key>date.month.ago.abbr</key>
@ -471,15 +495,15 @@
<key>zero</key>
<string>مُنذُ لَحظة</string>
<key>one</key>
<string>مُنذُ شهر</string>
<string>مُنذُ %ldش</string>
<key>two</key>
<string>مُنذُ شهرين</string>
<string>مُنذُ %ldش</string>
<key>few</key>
<string>مُنذُ %ld أشهُر</string>
<string>مُنذُ %ldش</string>
<key>many</key>
<string>مُنذُ %ld شهرًا</string>
<string>مُنذُ %ldش</string>
<key>other</key>
<string>مُنذُ %ld شهر</string>
<string>مُنذُ %ldش</string>
</dict>
</dict>
<key>date.day.ago.abbr</key>
@ -495,15 +519,15 @@
<key>zero</key>
<string>مُنذُ لَحظة</string>
<key>one</key>
<string>مُنذُ يوم</string>
<string>مُنذُ %ldي</string>
<key>two</key>
<string>مُنذُ يومين</string>
<string>مُنذُ %ldي</string>
<key>few</key>
<string>مُنذُ %ld أيام</string>
<string>مُنذُ %ldي</string>
<key>many</key>
<string>مُنذُ %ld يومًا</string>
<string>مُنذُ %ldي</string>
<key>other</key>
<string>مُنذُ %ld يوم</string>
<string>مُنذُ %ldي</string>
</dict>
</dict>
<key>date.hour.ago.abbr</key>
@ -519,15 +543,15 @@
<key>zero</key>
<string>مُنذُ لَحظة</string>
<key>one</key>
<string>مُنذُ ساعة</string>
<string>مُنذُ %ldس</string>
<key>two</key>
<string>مُنذُ ساعتين</string>
<string>مُنذُ %ldس</string>
<key>few</key>
<string>مُنذُ %ld ساعات</string>
<string>مُنذُ %ldس</string>
<key>many</key>
<string>مُنذُ %ld ساعةًَ</string>
<string>مُنذُ %ldس</string>
<key>other</key>
<string>مُنذُ %ld ساعة</string>
<string>مُنذُ %ldس</string>
</dict>
</dict>
<key>date.minute.ago.abbr</key>
@ -543,15 +567,15 @@
<key>zero</key>
<string>مُنذُ لَحظة</string>
<key>one</key>
<string>مُنذُ دقيقة</string>
<string>مُنذُ %ldد</string>
<key>two</key>
<string>مُنذُ دقيقتان</string>
<string>مُنذُ %ldد</string>
<key>few</key>
<string>مُنذُ %ld دقائق</string>
<string>مُنذُ %ldد</string>
<key>many</key>
<string>مُنذُ %ld دقيقةً</string>
<string>مُنذُ %ldد</string>
<key>other</key>
<string>مُنذُ %ld دقيقة</string>
<string>مُنذُ %ldد</string>
</dict>
</dict>
<key>date.second.ago.abbr</key>
@ -567,15 +591,15 @@
<key>zero</key>
<string>مُنذُ لَحظة</string>
<key>one</key>
<string>مُنذُ ثانية</string>
<string>مُنذُ %ldث</string>
<key>two</key>
<string>مُنذُ ثانيتين</string>
<string>مُنذُ %ldث</string>
<key>few</key>
<string>مُنذُ %ld ثوان</string>
<string>مُنذُ %ldث</string>
<key>many</key>
<string>مُنذُ %ld ثانية</string>
<string>مُنذُ %ldث</string>
<key>other</key>
<string>مُنذُ %ld ثانية</string>
<string>مُنذُ %ldث</string>
</dict>
</dict>
</dict>

View File

@ -32,9 +32,9 @@
"message": "يتعذَّر تعديل الملف التعريفي. يُرجى المُحاولة مرة أُخرى."
},
"sign_out": {
"title": سجيل الخروج",
"title": َسجيلُ الخُروج",
"message": "هل أنت متأكد من رغبتك في تسجيل الخُروج؟",
"confirm": سجيل الخروج"
"confirm": َسجيلُ الخُروج"
},
"block_domain": {
"title": "هل أنتَ مُتأكِّدٌ حقًا مِن رغبتك في حظر %s بالكامل؟ في معظم الحالات، يكون مِنَ الكافي والمُفَضَّل استهداف عدد محدود للحظر أو الكتم. لن ترى محتوى من هذا النطاق وسوف يُزال جميع متابعيك المتواجدين فيه.",
@ -49,8 +49,8 @@
"message": "هَل أنتَ مُتأكِدٌ مِن رَغبتِكَ فِي حَذفِ هَذَا المَنشُور؟"
},
"clean_cache": {
"title": "مَحو ذاكرة التخزين المؤقت",
"message": "تمَّ مَحو %s مِن ذاكرة التخزين المؤقت بنجاح."
"title": "مَحوُ ذاكِرَةِ التَّخزينِ المُؤقَّت",
"message": "مُحِيَ ما مَساحَتُهُ %s مِن ذاكِرَةِ التَّخزينِ المُؤقَّت بِنجاح."
}
},
"controls": {
@ -61,7 +61,7 @@
"open": "فتح",
"add": "إضافة",
"remove": "حذف",
"edit": حرير",
"edit": َحرير",
"save": "حفظ",
"ok": "حسنًا",
"done": "تمّ",
@ -79,7 +79,7 @@
"see_more": "عرض المزيد",
"preview": "مُعاينة",
"share": "المُشارك",
"share_user": "مُشاركة %s",
"share_user": "مُشارَكَةُ %s",
"share_post": "مشارك المنشور",
"open_in_safari": "الفَتحُ في Safari",
"open_in_browser": "الفَتحُ في المُتَصَفِّح",
@ -87,7 +87,7 @@
"manually_search": "البحث يدويًا بدلًا من ذلك",
"skip": "تخطي",
"reply": "الرَّد",
"report_user": "الإبلاغ عن %s",
"report_user": "الإبلاغُ عَن %s",
"block_domain": "حظر %s",
"unblock_domain": "رفع الحظر عن %s",
"settings": "الإعدادات",
@ -103,7 +103,7 @@
"common": {
"switch_to_tab": "التبديل إلى %s",
"compose_new_post": "تأليف منشور جديد",
"show_favorites": "إظهار المُفضَّلة",
"show_favorites": "أظْهِر المُفضَّلة",
"open_settings": "فَتحُ الإعدادات"
},
"timeline": {
@ -124,12 +124,13 @@
}
},
"status": {
"user_reblogged": "أعادَ %s تدوينها",
"user_reblogged": "أعادَ %s تَدوينَها",
"user_replied_to": "رَدًا على %s",
"show_post": "إظهار منشور",
"show_user_profile": "إظهار الملف التعريفي للمُستخدِم",
"show_post": "أظْهِر مَنشور",
"show_user_profile": "أظْهِر المِلَفَّ التَّعريفِيَّ لِلمُستَخدِم",
"content_warning": "تحذير المُحتوى",
"media_content_warning": "انقر للكشف",
"media_content_warning": "اُنقُر لِلكَشف",
"tap_to_reveal": "اُنقُر لِلكَشف",
"poll": {
"vote": "صَوِّت",
"closed": "انتهى"
@ -141,14 +142,18 @@
"favorite": "التفضيل",
"unfavorite": "إزالة التفضيل",
"menu": "القائمة",
"hide": "إخفاء"
"hide": "إخفاء",
"show_image": "أظْهِرِ الصُّورَة",
"show_gif": "أظْهِر GIF",
"show_video_player": "أظْهِر مُشَغِّلَ المَقاطِعِ المَرئِيَّة",
"tap_then_hold_to_show_menu": "اُنقُر مُطَوَّلًا لِإظْهَارِ القائِمَة"
},
"tag": {
"url": "عنوان URL",
"mention": "إشارة",
"link": "رابط",
"hashtag": "وسم",
"email": ريد إلكتروني",
"email": َريدٌ إلِكتُرُونِيّ",
"emoji": "رمز تعبيري"
},
"visibility": {
@ -164,17 +169,17 @@
"request": "إرسال طَلَب",
"pending": "قيد المُراجعة",
"block": "حظر",
"block_user": ظر %s",
"block_user": َظرُ %s",
"block_domain": "حظر %s",
"unblock": "رفع الحَظر",
"unblock_user": "رفع الحَظر عن %s",
"blocked": "محظور",
"mute": "كَتم",
"mute_user": "كَتم %s",
"mute_user": "كَتمُ %s",
"unmute": "رفع الكتم",
"unmute_user": "رفع الكتم عن %s",
"muted": "مكتوم",
"edit_info": عديل المعلومات"
"edit_info": َحريرُ المَعلُومات"
},
"timeline": {
"filtered": "مُصفَّى",
@ -184,7 +189,7 @@
"loader": {
"load_missing_posts": "تحميل المَنشورات المَفقودَة",
"loading_missing_posts": "يَجري تحميل المَنشورات المَفقودَة...",
"show_more_replies": "إظهار مَزيد مِنَ الرُّدود"
"show_more_replies": "أظْهِر مَزيدًا مِنَ الرُّدود"
},
"header": {
"no_status_found": "لَم يُعْثَر على مَنشورات",
@ -249,14 +254,14 @@
"delete": "حذف"
},
"username": {
"placeholder": "اِسم مُستَخدِم",
"placeholder": "اِسمُ مُستَخدِم",
"duplicate_prompt": "اِسم المُستَخدِم هذا مأخوذٌ بالفعل."
},
"display_name": {
"placeholder": "اِسم العَرض"
"placeholder": "اِسمُ عَرض"
},
"email": {
"placeholder": ريد إلكتروني"
"placeholder": َريدٌ إلِكتُرُونِيّ"
},
"password": {
"placeholder": "رمز سري",
@ -266,7 +271,7 @@
"checked": "مُتَحَققٌ مِنه",
"unchecked": "غيرُ مُتَحَققٍ مِنه"
},
"hint": جب أن يكون رمزك السري مكوَّن من ثمان خانات على الأقل"
"hint": َجِبُ أن يَحتَوي رَمزُكَ السِرِّيَ علَى ثَمانِ خاناتٍ أقلًا"
},
"invite": {
"registration_user_invite_request": "لماذا ترغب في الانضمام؟"
@ -274,7 +279,7 @@
},
"error": {
"item": {
"username": "اِسم المُستَخدِم",
"username": "اِسمُ المُستَخدِم",
"email": "البريد الإلكتروني",
"password": "الرمز السري",
"agreement": "الاِتِّفاقيَّة",
@ -345,7 +350,7 @@
},
"compose": {
"title": {
"new_post": نشور جديد",
"new_post": َنشُورٌ جَديد",
"new_reply": "رَدٌّ جديد"
},
"media_selection": {
@ -377,10 +382,10 @@
"placeholder": "اكتب تَحذيرًا دَقيقًا هُنا..."
},
"visibility": {
"public": لعامة",
"public": ِلعَامَّة",
"unlisted": "غير مُدرَج",
"private": "للمُتابِعينَ فقط",
"direct": لأشخاص المُشار إليهم فقط"
"direct": ِمَن أشرتُ إليهِم فَقَط"
},
"auto_complete": {
"space_to_add": "انقر على مساحة لإضافتِها"
@ -407,7 +412,7 @@
"dashboard": {
"posts": "مَنشورات",
"following": "مُتابَع",
"followers": تابِع"
"followers": ُتابِع"
},
"fields": {
"add_row": "إضافة صف",
@ -419,7 +424,7 @@
"segmented_control": {
"posts": "مَنشورات",
"replies": "رُدُود",
"posts_and_replies": "المَنشوراتُ وَالرُدود",
"posts_and_replies": "مَنشُوراتٌ وَرُدُود",
"media": "وَسائِط",
"about": "حَول"
},
@ -440,6 +445,12 @@
"title": "رَفعُ الحَظرِ عَنِ الحِساب",
"message": "تأكيدُ رَفع الحَظرِ عَن %s"
}
},
"accessibility": {
"show_avatar_image": "أظْهِر الصُّورَةَ الرَّمزِيَّة",
"edit_avatar_image": "تَحريرُ الصُّورَةِ الرَّمزِيَّة",
"show_banner_image": "أظْهِر صُورَةَ الرَّايَة",
"double_tap_to_open_the_list": "اُنقُر نَقرًا مُزدَوَجًا لِفَتحِ القائِمَة"
}
},
"follower": {
@ -449,15 +460,15 @@
"footer": "لا يُمكِن عَرض المُتابَعات مِنَ الخوادم الأُخرى."
},
"search": {
"title": "البحث",
"title": "البَحث",
"search_bar": {
"placeholder": "البحث عن وسوم أو مستخدمين",
"placeholder": "اِبحَث عَن وُسُومٍ أو مُستَخدِمين",
"cancel": "إلغاء"
},
"recommend": {
"button_text": "إظهار الكُل",
"hash_tag": {
"title": "ذُو شعبيَّة على ماستودون",
"title": "ذُو شَعبِيَّةٍ عَلَى مَاستودُون",
"description": "الوُسُومُ الَّتي تَحظى بقدرٍ كبيرٍ مِنَ الاِهتمام",
"people_talking": "%s أشخاص يتحدَّثوا"
},
@ -470,9 +481,9 @@
"searching": {
"segment": {
"all": "الكُل",
"people": "الأشخاص",
"hashtags": "الوُسُوم",
"posts": "المَنشورات"
"people": "أشخاص",
"hashtags": "وُسُوم",
"posts": "مَنشُورات"
},
"empty_state": {
"no_results": "لا تُوجَدُ نتائِج"
@ -481,6 +492,14 @@
"clear": "مَحو"
}
},
"discovery": {
"tabs": {
"posts": "المنشورات",
"hashtags": "الوسوم",
"news": "الأخبار",
"for_you": "For You"
}
},
"favorite": {
"title": "مُفضَّلَتُك"
},
@ -498,8 +517,8 @@
"poll_has_ended": "انتهى استطلاعُ الرأي"
},
"keyobard": {
"show_everything": "إظهار كل شيء",
"show_mentions": "إظهار الإشارات"
"show_everything": "أظْهِر كُلَّ شَيء",
"show_mentions": "أظْهِر الإشارَات"
}
},
"thread": {
@ -541,7 +560,8 @@
"true_black_dark_mode": "النَّمَطُ الأسوَدُ الداكِنُ الحَقيقي",
"disable_avatar_animation": "تَعطيلُ الصوَرِ الرمزيَّةِ المُتحرِّكَة",
"disable_emoji_animation": "تَعطيلُ الرُموزِ التَّعبيريَّةِ المُتحرِّكَة",
"using_default_browser": "اِستِخدامُ المُتصفِّحِ الاِفتراضي لِفتحِ الرَّوابِط"
"using_default_browser": "اِستِخدامُ المُتصفِّحِ الاِفتراضي لِفتحِ الرَّوابِط",
"open_links_in_mastodon": "فَتحُ الرَّوابِطِ فِي مَاستودُون"
},
"boring_zone": {
"title": "المنطِقَةُ المُملَّة",
@ -551,7 +571,7 @@
},
"spicy_zone": {
"title": "المنطِقَةُ اللَّاذِعَة",
"clear": "مَحوُ ذاكِرَةُ التَّخزينِ المُؤقت لِلوسائِط",
"clear": "مَحوُ ذاكِرَةِ التَّخزينِ المُؤقَّتِ لِلوسائِط",
"signout": "تَسجيلُ الخُروج"
}
},
@ -578,12 +598,12 @@
"preview": {
"keyboard": {
"close_preview": "إغلاق المُعايَنَة",
"show_next": "إظهار التالي",
"show_previous": "إظهار السابق"
"show_next": "أظْهِر التَّالي",
"show_previous": "أظْهِر السَّابِق"
}
},
"account_list": {
"tab_bar_hint": "المِلف المُحدَّد حاليًا: %s. انقر نقرًا مزدوجًا مع الاستمرار لإظهار مُبدِّل الحِساب",
"tab_bar_hint": "المِلَفُّ المُحدَّدُ حالِيًّا: %s. اُنقُر نَقرًا مُزدَوَجًا مَعَ الاِستِمرارِ لِإظهارِ مُبدِّلِ الحِساب",
"dismiss_account_switcher": "تجاهُل مبدِّل الحِساب",
"add_account": "إضافَةُ حِساب"
},

View File

@ -1,6 +1,6 @@
{
"NSCameraUsageDescription": "يُستخدم لالتقاط الصورة عِندَ نشر الحالات",
"NSPhotoLibraryAddUsageDescription": "يُستخدم لحِفظ الصورة في مكتبة الصور",
"NewPostShortcutItemTitle": نشور جديد",
"NewPostShortcutItemTitle": َنشُورٌ جَديد",
"SearchShortcutItemTitle": "البحث"
}

View File

@ -114,6 +114,22 @@
<string>%ld impulsos</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 Resposta</string>
<key>other</key>
<string>%ld respostes</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -41,11 +41,11 @@
"block_entire_domain": "Bloquejar Domini"
},
"save_photo_failure": {
"title": "Desa l'Error de la Foto",
"title": "Error al Desar la Foto",
"message": "Activa el permís d'accés a la biblioteca de fotos per desar-la."
},
"delete_post": {
"title": "Estàs segur que vols suprimir aquesta publicació?",
"title": "Esborrar Publicació",
"message": "Estàs segur que vols suprimir aquesta publicació?"
},
"clean_cache": {
@ -83,7 +83,7 @@
"share_post": "Compartir Publicació",
"open_in_safari": "Obrir a Safari",
"open_in_browser": "Obre al navegador",
"find_people": "Busca persones per seguir",
"find_people": "Busca persones a seguir",
"manually_search": "Cerca manualment a canvi",
"skip": "Omet",
"reply": "Respon",
@ -110,26 +110,27 @@
"previous_status": "Publicació anterior",
"next_status": "Publicació següent",
"open_status": "Obre la publicació",
"open_author_profile": "Obre el perfil de l'autor",
"open_reblogger_profile": "Obre el perfil del impulsor",
"reply_status": "Respon a la publicació",
"toggle_reblog": "Commuta l'impuls de la publicació",
"toggle_favorite": "Commuta el Favorit de la publicació",
"open_author_profile": "Obre el Perfil de l'Autor",
"open_reblogger_profile": "Obre el Perfil del Impulsor",
"reply_status": "Respon a la Publicació",
"toggle_reblog": "Commuta l'Impuls de la Publicació",
"toggle_favorite": "Commuta el Favorit de la Publicació",
"toggle_content_warning": "Commuta l'Avís de Contingut",
"preview_image": "Vista prèvia de l'Imatge"
},
"segmented_control": {
"previous_section": "Secció anterior",
"next_section": "Secció següent"
"previous_section": "Secció Anterior",
"next_section": "Secció Següent"
}
},
"status": {
"user_reblogged": "%s ha impulsat",
"user_replied_to": "Ha respòs a %s",
"show_post": "Mostra la publicació",
"show_post": "Mostra la Publicació",
"show_user_profile": "Mostra el perfil de l'usuari",
"content_warning": "Advertència de Contingut",
"media_content_warning": "Toca qualsevol lloc per mostrar",
"media_content_warning": "Toca qualsevol lloc per a mostrar",
"tap_to_reveal": "Toca per a mostrar",
"poll": {
"vote": "Vota",
"closed": "Finalitzada"
@ -141,7 +142,11 @@
"favorite": "Favorit",
"unfavorite": "Desfer Favorit",
"menu": "Menú",
"hide": "Amaga"
"hide": "Amaga",
"show_image": "Mostra la imatge",
"show_gif": "Mostra el GIF",
"show_video_player": "Mostra el reproductor de vídeo",
"tap_then_hold_to_show_menu": "Toca i manté per a veure el menú"
},
"tag": {
"url": "URL",
@ -182,15 +187,15 @@
"now": "Ara"
},
"loader": {
"load_missing_posts": "Carrega les publicacions que falten",
"loading_missing_posts": "Carregant les publicacions que falten...",
"load_missing_posts": "Carrega les publicacions faltants",
"loading_missing_posts": "Carregant les publicacions faltants...",
"show_more_replies": "Mostra més respostes"
},
"header": {
"no_status_found": "No s'ha trobat cap publicació",
"blocking_warning": "No pots veure el perfil d'aquest usuari\n fins que el desbloquegis.\nEl teu perfil els sembla així.",
"user_blocking_warning": "No pots veure el perfil de %s\n fins que el desbloquegis.\nEl teu perfil els sembla així.",
"blocked_warning": "No pots veure el perfil d'aquest usuari\n fins que et desbloquegi.",
"blocked_warning": "No pots veure el perfil d'aquest usuari\nfins que et desbloquegi.",
"user_blocked_warning": "No pots veure el perfil de %s\n fins que et desbloquegi.",
"suspended_warning": "Aquest usuari ha estat suspès.",
"user_suspended_warning": "El compte de %s ha estat suspès."
@ -205,7 +210,7 @@
"log_in": "Inicia sessió"
},
"server_picker": {
"title": "Tria un servidor,\nqualsevol servidor.",
"title": "Mastodon està fet d'usuaris en diferents comunitats.",
"subtitle": "Tria una comunitat segons els teus interessos, regió o una de propòsit general.",
"subtitle_extend": "Tria una comunitat segons els teus interessos, regió o una de propòsit general. Cada comunitat és operada per una organització totalment independent o individualment.",
"button": {
@ -266,7 +271,7 @@
"checked": "verificat",
"unchecked": "no verificat"
},
"hint": "La teva contrasenya ha de tenir com a mínim buit caràcters"
"hint": "La teva contrasenya ha de tenir com a mínim vuit caràcters"
},
"invite": {
"registration_user_invite_request": "Perquè vols unir-te?"
@ -294,7 +299,7 @@
"inclusion": "%s no és un valor suportat"
},
"special": {
"username_invalid": "El nom d'usuari només ha de contenir caràcters alfanumèrics i guions baixos",
"username_invalid": "El nom d'usuari ha de contenir només caràcters alfanumèrics i guions baixos",
"username_too_long": "El nom d'usuari és massa llarg (no pot ser més llarg de 30 caràcters)",
"email_invalid": "Aquesta no és una adreça de correu electrònic vàlida",
"password_too_short": "La contrasenya és massa curta (ha de tenir 8 caràcters com a mínim)"
@ -313,7 +318,7 @@
},
"confirm_email": {
"title": "Una última cosa.",
"subtitle": "Acabem d'enviar un correu electrònic a %s,\ntoca l'enllaç per a confirmar el teu compte.",
"subtitle": "Toca l'enllaç del correu electrònic que t'hem enviat per a confirmar el teu compte.",
"button": {
"open_email_app": "Obre l'aplicació de correu",
"resend": "Reenvia"
@ -440,6 +445,12 @@
"title": "Desbloqueja el Compte",
"message": "Confirma per a desbloquejar %s"
}
},
"accessibility": {
"show_avatar_image": "Mostra l'imatge del avatar",
"edit_avatar_image": "Edita l'imatge del avatar",
"show_banner_image": "Mostra l'imatge del bàner",
"double_tap_to_open_the_list": "Doble toc per a veure la llista"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Neteja"
}
},
"discovery": {
"tabs": {
"posts": "Publicacions",
"hashtags": "Etiquetes",
"news": "Notícies",
"for_you": "Per a tu"
}
},
"favorite": {
"title": "Els teus Favorits"
},
@ -532,7 +551,7 @@
"anyone": "algú",
"follower": "un seguidor",
"follow": "a qualsevol que segueixi",
"noone": "algú",
"noone": "ningú",
"title": "Notifica'm quan"
}
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "Mode negre fosc autèntic",
"disable_avatar_animation": "Desactiva avatars animats",
"disable_emoji_animation": "Desactiva emojis animats",
"using_default_browser": "Utilitza el navegador predeterminat per a obrir enllaços"
"using_default_browser": "Utilitza el navegador predeterminat per a obrir enllaços",
"open_links_in_mastodon": "Obre enllaços a Mastodon"
},
"boring_zone": {
"title": "La Zona Avorrida",

View File

@ -170,6 +170,30 @@
<string>%ld reblogs</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>zero</key>
<string>%ld replies</string>
<key>one</key>
<string>1 reply</string>
<key>two</key>
<string>%ld replies</string>
<key>few</key>
<string>%ld replies</string>
<key>many</key>
<string>%ld replies</string>
<key>other</key>
<string>%ld replies</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Show user profile",
"content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": {
"vote": "Vote",
"closed": "Closed"
@ -141,7 +142,11 @@
"favorite": "Favorite",
"unfavorite": "Unfavorite",
"menu": "Menu",
"hide": "Hide"
"hide": "Hide",
"show_image": "Show image",
"show_gif": "Show GIF",
"show_video_player": "Show video player",
"tap_then_hold_to_show_menu": "Tap then hold to show menu"
},
"tag": {
"url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
},
"accessibility": {
"show_avatar_image": "Show avatar image",
"edit_avatar_image": "Edit avatar image",
"show_banner_image": "Show banner image",
"double_tap_to_open_the_list": "Double tap to open the list"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Clear"
}
},
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": {
"title": "Your Favorites"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars",
"disable_emoji_animation": "Disable animated emojis",
"using_default_browser": "Use default browser to open links"
"using_default_browser": "Use default browser to open links",
"open_links_in_mastodon": "Open links in Mastodon"
},
"boring_zone": {
"title": "The Boring Zone",

View File

@ -114,6 +114,22 @@
<string>%ld reblogs</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 reply</string>
<key>other</key>
<string>%ld replies</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Show user profile",
"content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": {
"vote": "Vote",
"closed": "Closed"
@ -141,7 +142,11 @@
"favorite": "Favorite",
"unfavorite": "Unfavorite",
"menu": "Menu",
"hide": "Hide"
"hide": "Hide",
"show_image": "Show image",
"show_gif": "Show GIF",
"show_video_player": "Show video player",
"tap_then_hold_to_show_menu": "Tap then hold to show menu"
},
"tag": {
"url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
},
"accessibility": {
"show_avatar_image": "Show avatar image",
"edit_avatar_image": "Edit avatar image",
"show_banner_image": "Show banner image",
"double_tap_to_open_the_list": "Double tap to open the list"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Clear"
}
},
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": {
"title": "Your Favorites"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars",
"disable_emoji_animation": "Disable animated emojis",
"using_default_browser": "Use default browser to open links"
"using_default_browser": "Use default browser to open links",
"open_links_in_mastodon": "Open links in Mastodon"
},
"boring_zone": {
"title": "The Boring Zone",

View File

@ -114,6 +114,22 @@
<string>%ld Reblogs</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 Antwort</string>
<key>other</key>
<string>%ld Antworten</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Benutzerprofil anzeigen",
"content_warning": "Inhaltswarnung",
"media_content_warning": "Tippe irgendwo zum Anzeigen",
"tap_to_reveal": "Zum Anzeigen tippen",
"poll": {
"vote": "Abstimmen",
"closed": "Beendet"
@ -141,7 +142,11 @@
"favorite": "Favorit",
"unfavorite": "Aus Favoriten entfernen",
"menu": "Menü",
"hide": "Verstecken"
"hide": "Verstecken",
"show_image": "Bild anzeigen",
"show_gif": "GIF anzeigen",
"show_video_player": "Zeige Video-Player",
"tap_then_hold_to_show_menu": "Halte gedrückt um das Menü anzuzeigen"
},
"tag": {
"url": "URL",
@ -440,6 +445,12 @@
"title": "Konto entsperren",
"message": "Bestätige %s zu entsperren"
}
},
"accessibility": {
"show_avatar_image": "Profilbild anzeigen",
"edit_avatar_image": "Profilbild bearbeiten",
"show_banner_image": "Bannerbild anzeigen",
"double_tap_to_open_the_list": "Doppeltippen, um die Liste zu öffnen"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Zurücksetzen"
}
},
"discovery": {
"tabs": {
"posts": "Beiträge",
"hashtags": "Hashtags",
"news": "Nachrichten",
"for_you": "Für dich"
}
},
"favorite": {
"title": "Deine Favoriten"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "Vollständig dunkler Dunkelmodus",
"disable_avatar_animation": "Animierte Profilbilder deaktivieren",
"disable_emoji_animation": "Animierte Emojis deaktivieren",
"using_default_browser": "Standardbrowser zum Öffnen von Links verwenden"
"using_default_browser": "Standardbrowser zum Öffnen von Links verwenden",
"open_links_in_mastodon": "Links in Mastodon öffnen"
},
"boring_zone": {
"title": "Der langweilige Bereich",

View File

@ -114,6 +114,22 @@
<string>%ld reblogs</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 reply</string>
<key>other</key>
<string>%ld replies</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Show user profile",
"content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": {
"vote": "Vote",
"closed": "Closed"
@ -141,7 +142,11 @@
"favorite": "Favorite",
"unfavorite": "Unfavorite",
"menu": "Menu",
"hide": "Hide"
"hide": "Hide",
"show_image": "Show image",
"show_gif": "Show GIF",
"show_video_player": "Show video player",
"tap_then_hold_to_show_menu": "Tap then hold to show menu"
},
"tag": {
"url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
},
"accessibility": {
"show_avatar_image": "Show avatar image",
"edit_avatar_image": "Edit avatar image",
"show_banner_image": "Show banner image",
"double_tap_to_open_the_list": "Double tap to open the list"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Clear"
}
},
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": {
"title": "Your Favorites"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars",
"disable_emoji_animation": "Disable animated emojis",
"using_default_browser": "Use default browser to open links"
"using_default_browser": "Use default browser to open links",
"open_links_in_mastodon": "Open links in Mastodon"
},
"boring_zone": {
"title": "The Boring Zone",

View File

@ -114,6 +114,22 @@
<string>%ld adhesiones</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 respuesta</string>
<key>other</key>
<string>%ld respuestas</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -45,7 +45,7 @@
"message": "Por favor, habilitá el permiso de acceso a la biblioteca de fotos para guardar la imagen."
},
"delete_post": {
"title": "¿Estás seguro que querés eliminar este mensaje?",
"title": "Eliminar mensaje",
"message": "¿Estás seguro que querés eliminar este mensaje?"
},
"clean_cache": {
@ -130,6 +130,7 @@
"show_user_profile": "Mostrar perfil de usuario",
"content_warning": "Advertencia de contenido",
"media_content_warning": "Toca en cualquier lugar para mostrar",
"tap_to_reveal": "Tocá para mostrar",
"poll": {
"vote": "Votar",
"closed": "Cerrada"
@ -141,7 +142,11 @@
"favorite": "Marcar como favorito",
"unfavorite": "Dejar de marcar como favorito",
"menu": "Menú",
"hide": "Ocultar"
"hide": "Ocultar",
"show_image": "Mostrar imagen",
"show_gif": "Mostrar GIF",
"show_video_player": "Mostrar reproductor de video",
"tap_then_hold_to_show_menu": "Tocá y mantené presionado para mostrar el menú"
},
"tag": {
"url": "Dirección web",
@ -440,6 +445,12 @@
"title": "Desbloquear cuenta",
"message": "Confirmá para desbloquear a %s"
}
},
"accessibility": {
"show_avatar_image": "Mostrar imagen de avatar",
"edit_avatar_image": "Editar imagen de avatar",
"show_banner_image": "Mostrar imagen de banner",
"double_tap_to_open_the_list": "Tocá dos veces para abrir la lista"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Limpiar"
}
},
"discovery": {
"tabs": {
"posts": "Mensajes",
"hashtags": "Etiquetas",
"news": "Novedades",
"for_you": "Para vos"
}
},
"favorite": {
"title": "Tus favoritos"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "Modo negro oscuro real",
"disable_avatar_animation": "Deshabilitar avatares animados",
"disable_emoji_animation": "Deshabilitar emojis animados",
"using_default_browser": "Usar navegador web predeterminado para abrir enlaces"
"using_default_browser": "Usar navegador web predeterminado para abrir enlaces",
"open_links_in_mastodon": "Abrir enlaces en Mastodon"
},
"boring_zone": {
"title": "La zona aburrida",

View File

@ -114,6 +114,22 @@
<string>%ld reblogueos</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 reply</string>
<key>other</key>
<string>%ld replies</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Mostrar perfil del usuario",
"content_warning": "Advertencia de Contenido",
"media_content_warning": "Pulsa en cualquier sitio para mostrar",
"tap_to_reveal": "Tap to reveal",
"poll": {
"vote": "Vota",
"closed": "Cerrado"
@ -141,7 +142,11 @@
"favorite": "Favorito",
"unfavorite": "No favorito",
"menu": "Menú",
"hide": "Ocultar"
"hide": "Ocultar",
"show_image": "Show image",
"show_gif": "Show GIF",
"show_video_player": "Show video player",
"tap_then_hold_to_show_menu": "Tap then hold to show menu"
},
"tag": {
"url": "URL",
@ -440,6 +445,12 @@
"title": "Desbloquear cuenta",
"message": "Confirmar para desbloquear a %s"
}
},
"accessibility": {
"show_avatar_image": "Show avatar image",
"edit_avatar_image": "Edit avatar image",
"show_banner_image": "Show banner image",
"double_tap_to_open_the_list": "Double tap to open the list"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Borrar"
}
},
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": {
"title": "Tus Favoritos"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "Modo oscuro negro real",
"disable_avatar_animation": "Deshabilitar avatares animados",
"disable_emoji_animation": "Deshabilitar emojis animados",
"using_default_browser": "Usar navegador predeterminado para abrir los enlaces"
"using_default_browser": "Usar navegador predeterminado para abrir los enlaces",
"open_links_in_mastodon": "Open links in Mastodon"
},
"boring_zone": {
"title": "La Zona Aburrida",

View File

@ -114,6 +114,22 @@
<string>%ld bultzada</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>Erantzun bat</string>
<key>other</key>
<string>%ld erantzun</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Erakutsi erabiltzailearen profila",
"content_warning": "Edukiaren abisua",
"media_content_warning": "Ukitu edonon bistaratzeko",
"tap_to_reveal": "Sakatu erakusteko",
"poll": {
"vote": "Bozkatu",
"closed": "Itxita"
@ -141,7 +142,11 @@
"favorite": "Gogokoa",
"unfavorite": "Kendu gogokoa",
"menu": "Menua",
"hide": "Ezkutatu"
"hide": "Ezkutatu",
"show_image": "Erakutsi irudia",
"show_gif": "Erakutsi GIFa",
"show_video_player": "Erakutsi bideo-erreproduzigailua",
"tap_then_hold_to_show_menu": "Sakatu eta eutsi menua erakusteko"
},
"tag": {
"url": "URLa",
@ -440,6 +445,12 @@
"title": "Desblokeatu kontua",
"message": "Berretsi %s desblokeatzea"
}
},
"accessibility": {
"show_avatar_image": "Erakutsi abatarra",
"edit_avatar_image": "Editatu abatarra",
"show_banner_image": "Erakutsi banner irudia",
"double_tap_to_open_the_list": "Sakatu birritan zerrenda irekitzeko"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Garbitu"
}
},
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": {
"title": "Zure gogokoak"
},
@ -491,8 +510,8 @@
},
"notification_description": {
"followed_you": "zu jarraitzen hasi da",
"favorited_your_post": "erabiltzaileak zure bidalketa gogoko du",
"reblogged_your_post": "erabiltzaileak bultzada eman dio zure bidalketari",
"favorited_your_post": "(e)k zure bidalketa gogoko du",
"reblogged_your_post": "(e)k bultzada eman dio zure bidalketari",
"mentioned_you": "erabiltzaileak aipatu zaitu",
"request_to_follow_you": "erabiltzaileak zu jarraitzea eskatu du",
"poll_has_ended": "inkesta amaitu da"
@ -541,7 +560,8 @@
"true_black_dark_mode": "Benetako modu beltz iluna",
"disable_avatar_animation": "Desgaitu abatar animatuak",
"disable_emoji_animation": "Desgaitu emoji animatuak",
"using_default_browser": "Erabili nabigatzaile lehenetsia estekak irekitzeko"
"using_default_browser": "Erabili nabigatzaile lehenetsia estekak irekitzeko",
"open_links_in_mastodon": "Ireki estekak Mastodonen"
},
"boring_zone": {
"title": "Eremu aspergarria",

View File

@ -114,6 +114,22 @@
<string>%ld reblogs</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 réponse</string>
<key>other</key>
<string>%ld réponses</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Montrer le profil de lutilisateur·rice",
"content_warning": "Avertissement de contenu",
"media_content_warning": "Tapotez nimporte où pour révéler la publication",
"tap_to_reveal": "Appuyer pour afficher",
"poll": {
"vote": "Voter",
"closed": "Fermé"
@ -141,7 +142,11 @@
"favorite": "Favori",
"unfavorite": "Retirer des favoris",
"menu": "Menu",
"hide": "Cacher"
"hide": "Cacher",
"show_image": "Afficher limage",
"show_gif": "Afficher le GIF",
"show_video_player": "Afficher le lecteur vidéo",
"tap_then_hold_to_show_menu": "Tap then hold to show menu"
},
"tag": {
"url": "URL",
@ -440,6 +445,12 @@
"title": "Débloquer le compte",
"message": "Confirmer le déblocage de %s"
}
},
"accessibility": {
"show_avatar_image": "Afficher lavatar",
"edit_avatar_image": "Modifier lavatar",
"show_banner_image": "Afficher limage de la bannière",
"double_tap_to_open_the_list": "Appuyer deux fois pour ouvrir la liste"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Effacer"
}
},
"discovery": {
"tabs": {
"posts": "Messages",
"hashtags": "Hashtags",
"news": "Actualité",
"for_you": "Pour vous"
}
},
"favorite": {
"title": "Vos favoris"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "Vrai mode sombre",
"disable_avatar_animation": "Désactiver les avatars animés",
"disable_emoji_animation": "Désactiver les émojis animées",
"using_default_browser": "Utiliser le navigateur par défaut pour ouvrir les liens"
"using_default_browser": "Utiliser le navigateur par défaut pour ouvrir les liens",
"open_links_in_mastodon": "Ouvrir les liens dans Mastodon"
},
"boring_zone": {
"title": "La zone ennuyante",

View File

@ -142,6 +142,26 @@
<string>%ld brosnachadh</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>%ld fhreagairt</string>
<key>two</key>
<string>%ld fhreagairt</string>
<key>few</key>
<string>%ld freagairtean</string>
<key>other</key>
<string>%ld freagairt</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Seall pròifil a chleachdaiche",
"content_warning": "Rabhadh susbainte",
"media_content_warning": "Thoir gnogag àite sam bith gus a nochdadh",
"tap_to_reveal": "Thoir gnogag gus a nochdadh",
"poll": {
"vote": "Cuir bhòt",
"closed": "Dùinte"
@ -141,7 +142,11 @@
"favorite": "Cuir ris na h-annsachdan",
"unfavorite": "Thoir air falbh o na h-annsachdan",
"menu": "Clàr-taice",
"hide": "Falaich"
"hide": "Falaich",
"show_image": "Seall an dealbh",
"show_gif": "Seall an GIF",
"show_video_player": "Seall cluicheadair video",
"tap_then_hold_to_show_menu": "Thoir gnogag s cùm sìos a shealltainn a chlàir-thaice"
},
"tag": {
"url": "URL",
@ -440,6 +445,12 @@
"title": "Dì-bhac an cunntas",
"message": "Dearbh dì-bhacadh %s"
}
},
"accessibility": {
"show_avatar_image": "Seall dealbh an avatar",
"edit_avatar_image": "Deasaich dealbh an avatar",
"show_banner_image": "Seall dealbh brataich",
"double_tap_to_open_the_list": "Thoir gnogag dhùbailte a dhfhosgladh na liosta"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Falamhaich"
}
},
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": {
"title": "Na h-annsachdan agad"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "Modh dubh dorcha",
"disable_avatar_animation": "Cuir beothachadh nan avataran à comas",
"disable_emoji_animation": "Cuir beothachadh nan Emojis à comas",
"using_default_browser": "Cleachd am brabhsair bunaiteach airson ceanglaichean fhosgladh"
"using_default_browser": "Cleachd am brabhsair bunaiteach airson ceanglaichean fhosgladh",
"open_links_in_mastodon": "Fosgail ceanglaichean ann am Mastodon"
},
"boring_zone": {
"title": "An earrann ràsanach",

View File

@ -114,6 +114,22 @@
<string>%ld reblogs</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 reply</string>
<key>other</key>
<string>%ld replies</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -2,8 +2,8 @@
"common": {
"alerts": {
"common": {
"please_try_again": "Please try again.",
"please_try_again_later": "Please try again later."
"please_try_again": "कृपया फिर से प्रयास करें।",
"please_try_again_later": "बाद में फिर से प्रयास करें।"
},
"sign_up_failure": {
"title": "Sign Up Failure"
@ -45,7 +45,7 @@
"message": "Please enable the photo library access permission to save the photo."
},
"delete_post": {
"title": "Delete Post",
"title": "पोस्ट को हटाएं",
"message": "Are you sure you want to delete this post?"
},
"clean_cache": {
@ -130,6 +130,7 @@
"show_user_profile": "Show user profile",
"content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": {
"vote": "Vote",
"closed": "Closed"
@ -141,7 +142,11 @@
"favorite": "Favorite",
"unfavorite": "Unfavorite",
"menu": "Menu",
"hide": "Hide"
"hide": "Hide",
"show_image": "Show image",
"show_gif": "Show GIF",
"show_video_player": "Show video player",
"tap_then_hold_to_show_menu": "Tap then hold to show menu"
},
"tag": {
"url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
},
"accessibility": {
"show_avatar_image": "Show avatar image",
"edit_avatar_image": "Edit avatar image",
"show_banner_image": "Show banner image",
"double_tap_to_open_the_list": "Double tap to open the list"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Clear"
}
},
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": {
"title": "Your Favorites"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars",
"disable_emoji_animation": "Disable animated emojis",
"using_default_browser": "Use default browser to open links"
"using_default_browser": "Use default browser to open links",
"open_links_in_mastodon": "Open links in Mastodon"
},
"boring_zone": {
"title": "The Boring Zone",

View File

@ -100,6 +100,20 @@
<string>%ld reblogs</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld replies</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Tampilkan Profil Pengguna",
"content_warning": "Peringatan Konten",
"media_content_warning": "Ketuk di mana saja untuk melihat",
"tap_to_reveal": "Tap to reveal",
"poll": {
"vote": "Vote",
"closed": "Ditutup"
@ -141,7 +142,11 @@
"favorite": "Favorit",
"unfavorite": "Unfavorite",
"menu": "Menu",
"hide": "Hide"
"hide": "Hide",
"show_image": "Show image",
"show_gif": "Show GIF",
"show_video_player": "Show video player",
"tap_then_hold_to_show_menu": "Tap then hold to show menu"
},
"tag": {
"url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
},
"accessibility": {
"show_avatar_image": "Show avatar image",
"edit_avatar_image": "Edit avatar image",
"show_banner_image": "Show banner image",
"double_tap_to_open_the_list": "Double tap to open the list"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Hapus"
}
},
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": {
"title": "Your Favorites"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars",
"disable_emoji_animation": "Disable animated emojis",
"using_default_browser": "Use default browser to open links"
"using_default_browser": "Use default browser to open links",
"open_links_in_mastodon": "Open links in Mastodon"
},
"boring_zone": {
"title": "Zona Membosankan",

View File

@ -13,15 +13,15 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 unread notification</string>
<string>1 notifica non letta</string>
<key>other</key>
<string>%ld unread notification</string>
<string>%ld notifiche non lette</string>
</dict>
</dict>
<key>a11y.plural.count.input_limit_exceeds</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>Input limit exceeds %#@character_count@</string>
<string>Il limite di input supera %#@character_count@</string>
<key>character_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
@ -29,15 +29,15 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 character</string>
<string>1 carattere</string>
<key>other</key>
<string>%ld characters</string>
<string>%ld caratteri</string>
</dict>
</dict>
<key>a11y.plural.count.input_limit_remains</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>Input limit remains %#@character_count@</string>
<string>Il limite di input rimane %#@character_count@</string>
<key>character_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
@ -45,9 +45,9 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 character</string>
<string>1 carattere</string>
<key>other</key>
<string>%ld characters</string>
<string>%ld caratteri</string>
</dict>
</dict>
<key>plural.count.metric_formatted.post</key>
@ -63,7 +63,7 @@
<key>one</key>
<string>post</string>
<key>other</key>
<string>posts</string>
<string>post</string>
</dict>
</dict>
<key>plural.count.post</key>
@ -79,7 +79,7 @@
<key>one</key>
<string>1 post</string>
<key>other</key>
<string>%ld posts</string>
<string>%ld post</string>
</dict>
</dict>
<key>plural.count.favorite</key>
@ -93,9 +93,9 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 favorite</string>
<string>1 preferito</string>
<key>other</key>
<string>%ld favorites</string>
<string>%ld preferiti</string>
</dict>
</dict>
<key>plural.count.reblog</key>
@ -109,9 +109,25 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 reblog</string>
<string>1 condivisione</string>
<key>other</key>
<string>%ld reblogs</string>
<string>%ld condivisioni</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 risposta</string>
<key>other</key>
<string>%ld risposte</string>
</dict>
</dict>
<key>plural.count.vote</key>
@ -125,9 +141,9 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 vote</string>
<string>1 voto</string>
<key>other</key>
<string>%ld votes</string>
<string>%ld voti</string>
</dict>
</dict>
<key>plural.count.voter</key>
@ -141,9 +157,9 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 voter</string>
<string>1 votante</string>
<key>other</key>
<string>%ld voters</string>
<string>%ld votanti</string>
</dict>
</dict>
<key>plural.people_talking</key>
@ -157,9 +173,9 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 people talking</string>
<string>1 persona ne parla</string>
<key>other</key>
<string>%ld people talking</string>
<string>%ld persone ne parlano</string>
</dict>
</dict>
<key>plural.count.following</key>
@ -175,7 +191,7 @@
<key>one</key>
<string>1 following</string>
<key>other</key>
<string>%ld following</string>
<string>%ld stanno seguendo</string>
</dict>
</dict>
<key>plural.count.follower</key>
@ -189,9 +205,9 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 follower</string>
<string>1 seguace</string>
<key>other</key>
<string>%ld followers</string>
<string>%ld seguaci</string>
</dict>
</dict>
<key>date.year.left</key>
@ -205,9 +221,9 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 year left</string>
<string>1 anno rimasto</string>
<key>other</key>
<string>%ld years left</string>
<string>%ld anni rimasti</string>
</dict>
</dict>
<key>date.month.left</key>
@ -221,9 +237,9 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 months left</string>
<string>1 mese rimasto</string>
<key>other</key>
<string>%ld months left</string>
<string>%ld mesi rimasti</string>
</dict>
</dict>
<key>date.day.left</key>
@ -237,9 +253,9 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 day left</string>
<string>1 giorno rimasto</string>
<key>other</key>
<string>%ld days left</string>
<string>%ld giorni rimasti</string>
</dict>
</dict>
<key>date.hour.left</key>
@ -253,9 +269,9 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 hour left</string>
<string>1 ora rimasta</string>
<key>other</key>
<string>%ld hours left</string>
<string>%ld ore rimaste</string>
</dict>
</dict>
<key>date.minute.left</key>
@ -269,9 +285,9 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 minute left</string>
<string>1 minuto rimasto</string>
<key>other</key>
<string>%ld minutes left</string>
<string>%ld minuti rimasti</string>
</dict>
</dict>
<key>date.second.left</key>
@ -285,9 +301,9 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 second left</string>
<string>1 secondo rimasto</string>
<key>other</key>
<string>%ld seconds left</string>
<string>%ld secondi rimasti</string>
</dict>
</dict>
<key>date.year.ago.abbr</key>
@ -301,9 +317,9 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1y ago</string>
<string>1 anno fa</string>
<key>other</key>
<string>%ldy ago</string>
<string>%ld anni fa</string>
</dict>
</dict>
<key>date.month.ago.abbr</key>
@ -317,9 +333,9 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1M ago</string>
<string>1 mese fa</string>
<key>other</key>
<string>%ldM ago</string>
<string>%ld mesi fa</string>
</dict>
</dict>
<key>date.day.ago.abbr</key>
@ -333,9 +349,9 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1d ago</string>
<string>1 giorno fa</string>
<key>other</key>
<string>%ldd ago</string>
<string>%ld giorni fa</string>
</dict>
</dict>
<key>date.hour.ago.abbr</key>
@ -349,9 +365,9 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1h ago</string>
<string>1 ora fa</string>
<key>other</key>
<string>%ldh ago</string>
<string>%ld ore fa</string>
</dict>
</dict>
<key>date.minute.ago.abbr</key>
@ -365,9 +381,9 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1m ago</string>
<string>1 minuto fa</string>
<key>other</key>
<string>%ldm ago</string>
<string>%ld minuti fa</string>
</dict>
</dict>
<key>date.second.ago.abbr</key>
@ -381,9 +397,9 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1s ago</string>
<string>1 secondo fa</string>
<key>other</key>
<string>%lds ago</string>
<string>%ld secondi fa</string>
</dict>
</dict>
</dict>

View File

@ -2,595 +2,615 @@
"common": {
"alerts": {
"common": {
"please_try_again": "Please try again.",
"please_try_again_later": "Please try again later."
"please_try_again": "Per favore riprova.",
"please_try_again_later": "Per favore, riprova più tardi."
},
"sign_up_failure": {
"title": "Sign Up Failure"
"title": "Iscrizione fallita"
},
"server_error": {
"title": "Server Error"
"title": "Errore del server"
},
"vote_failure": {
"title": "Vote Failure",
"poll_ended": "The poll has ended"
"title": "Voto fallito",
"poll_ended": "Il sondaggio è terminato"
},
"discard_post_content": {
"title": "Discard Draft",
"message": "Confirm to discard composed post content."
"title": "Elimina bozza",
"message": "Confermare di scartare il contenuto del post composto."
},
"publish_post_failure": {
"title": "Publish Failure",
"message": "Failed to publish the post.\nPlease check your internet connection.",
"title": "Pubblicazione fallita",
"message": "Pubblicazione del post fallita.\nPer favore verifica la tua connessione internet.",
"attachments_message": {
"video_attach_with_photo": "Cannot attach a video to a post that already contains images.",
"more_than_one_video": "Cannot attach more than one video."
"video_attach_with_photo": "Impossibile allegare un filmato a un post che contiene già immagini.",
"more_than_one_video": "Impossibile allegare più di un filmato."
}
},
"edit_profile_failure": {
"title": "Edit Profile Error",
"message": "Cannot edit profile. Please try again."
"title": "Errore nella modifica del profilo",
"message": "Impossibile modificare il profilo. Per favore, riprova."
},
"sign_out": {
"title": "Sign Out",
"message": "Are you sure you want to sign out?",
"confirm": "Sign Out"
"title": "Esci",
"message": "Vuoi davvero scollegarti?",
"confirm": "Esci"
},
"block_domain": {
"title": "Are you really, really sure you want to block the entire %s? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain and any of your followers from that domain will be removed.",
"block_entire_domain": "Block Domain"
"title": "Vuoi davvero bloccare %s completamente? Nella maggioranza dei casi, è preferibile e sufficiente bloccare o silenziare pochi account in modo mirato. Non vedrai i contenuti di quel dominio e tutti i tuoi follower da quel dominio verranno rimossi.",
"block_entire_domain": "Blocca il dominio"
},
"save_photo_failure": {
"title": "Save Photo Failure",
"message": "Please enable the photo library access permission to save the photo."
"title": "Salvataggio foto fallito",
"message": "Si prega di abilitare l'autorizzazione di accesso alla galleria immagini per salvare la foto."
},
"delete_post": {
"title": "Delete Post",
"message": "Are you sure you want to delete this post?"
"title": "Cancella il post",
"message": "Vuoi veramente eliminare questo post?"
},
"clean_cache": {
"title": "Clean Cache",
"message": "Successfully cleaned %s cache."
"title": "Pulisci la cache",
"message": "Cache %s pulita con successo."
}
},
"controls": {
"actions": {
"back": "Back",
"next": "Next",
"previous": "Previous",
"open": "Open",
"add": "Add",
"remove": "Remove",
"edit": "Edit",
"save": "Save",
"back": "Indietro",
"next": "Avanti",
"previous": "Precedente",
"open": "Apri",
"add": "Aggiungi",
"remove": "Rimuovi",
"edit": "Modifica",
"save": "Salva",
"ok": "OK",
"done": "Done",
"confirm": "Confirm",
"continue": "Continue",
"compose": "Compose",
"cancel": "Cancel",
"discard": "Discard",
"try_again": "Try Again",
"take_photo": "Take Photo",
"save_photo": "Save Photo",
"copy_photo": "Copy Photo",
"sign_in": "Sign In",
"sign_up": "Sign Up",
"see_more": "See More",
"preview": "Preview",
"share": "Share",
"share_user": "Share %s",
"share_post": "Share Post",
"open_in_safari": "Open in Safari",
"open_in_browser": "Open in Browser",
"find_people": "Find people to follow",
"manually_search": "Manually search instead",
"skip": "Skip",
"reply": "Reply",
"report_user": "Report %s",
"block_domain": "Block %s",
"unblock_domain": "Unblock %s",
"settings": "Settings",
"delete": "Delete"
"done": "Fatto",
"confirm": "Conferma",
"continue": "Continua",
"compose": "Scrivi",
"cancel": "Annulla",
"discard": "Abbandona",
"try_again": "Riprova",
"take_photo": "Scatta foto",
"save_photo": "Salva foto",
"copy_photo": "Copia foto",
"sign_in": "Accedi",
"sign_up": "Registrati",
"see_more": "Visualizza altro",
"preview": "Anteprima",
"share": "Condividi",
"share_user": "Condividi %s",
"share_post": "Condividi il post",
"open_in_safari": "Apri su Safari",
"open_in_browser": "Apri nel browser",
"find_people": "Trova persone da seguire",
"manually_search": "Cerca manualmente invece",
"skip": "Salta",
"reply": "Rispondi",
"report_user": "Segnala %s",
"block_domain": "Blocca %s",
"unblock_domain": "Sblocca %s",
"settings": "Impostazioni",
"delete": "Elimina"
},
"tabs": {
"home": "Home",
"search": "Search",
"notification": "Notification",
"profile": "Profile"
"home": "Inizio",
"search": "Cerca",
"notification": "Notifiche",
"profile": "Profilo"
},
"keyboard": {
"common": {
"switch_to_tab": "Switch to %s",
"compose_new_post": "Compose New Post",
"show_favorites": "Show Favorites",
"open_settings": "Open Settings"
"switch_to_tab": "Passa a %s",
"compose_new_post": "Componi un nuovo post",
"show_favorites": "Mostra preferiti",
"open_settings": "Apri Impostazioni"
},
"timeline": {
"previous_status": "Previous Post",
"next_status": "Next Post",
"open_status": "Open Post",
"open_author_profile": "Open Author's Profile",
"open_reblogger_profile": "Open Reblogger's Profile",
"reply_status": "Reply to Post",
"toggle_reblog": "Toggle Reblog on Post",
"toggle_favorite": "Toggle Favorite on Post",
"toggle_content_warning": "Toggle Content Warning",
"preview_image": "Preview Image"
"previous_status": "Post precedente",
"next_status": "Post successivo",
"open_status": "Apri il post",
"open_author_profile": "Apri il profilo dell'autore",
"open_reblogger_profile": "Apri il profilo di chi ha condiviso",
"reply_status": "Rispondi al post",
"toggle_reblog": "Attiva/Disattiva condivisione sul post",
"toggle_favorite": "Attiva/Disattiva preferito nel post",
"toggle_content_warning": "Attiva/Disattiva avvertimento contenuti",
"preview_image": "Anteprima immagine"
},
"segmented_control": {
"previous_section": "Previous Section",
"next_section": "Next Section"
"previous_section": "Sezione precedente",
"next_section": "Sezione successiva"
}
},
"status": {
"user_reblogged": "%s reblogged",
"user_replied_to": "Replied to %s",
"show_post": "Show Post",
"show_user_profile": "Show user profile",
"content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal",
"user_reblogged": "%s hanno condiviso",
"user_replied_to": "Rispondi a %s",
"show_post": "Mostra il post",
"show_user_profile": "Mostra il profilo dell'utente",
"content_warning": "Avviso sul contenuto",
"media_content_warning": "Tocca ovunque per rivelare",
"tap_to_reveal": "Tocca per rivelare",
"poll": {
"vote": "Vote",
"closed": "Closed"
"vote": "Vota",
"closed": "Chiuso"
},
"actions": {
"reply": "Reply",
"reblog": "Reblog",
"unreblog": "Undo reblog",
"favorite": "Favorite",
"unfavorite": "Unfavorite",
"menu": "Menu",
"hide": "Hide"
"reply": "Rispondi",
"reblog": "Condivisione",
"unreblog": "Annulla condivisione",
"favorite": "Preferito",
"unfavorite": "Non preferito",
"menu": "Menù",
"hide": "Nascondi",
"show_image": "Mostra immagine",
"show_gif": "Mostra GIF",
"show_video_player": "Mostra lettore video",
"tap_then_hold_to_show_menu": "Tocca quindi tieni premuto per mostrare il menu"
},
"tag": {
"url": "URL",
"mention": "Mention",
"link": "Link",
"hashtag": "Hashtag",
"mention": "Menzione",
"link": "Collegamento",
"hashtag": "Etichetta",
"email": "Email",
"emoji": "Emoji"
},
"visibility": {
"unlisted": "Everyone can see this post but not display in the public timeline.",
"private": "Only their followers can see this post.",
"private_from_me": "Only my followers can see this post.",
"direct": "Only mentioned user can see this post."
"unlisted": "Tutti possono vedere questo post ma non mostrare nella cronologia pubblica.",
"private": "Solo i loro seguaci possono vedere questo post.",
"private_from_me": "Solo i miei seguaci possono vedere questo post.",
"direct": "Solo l'utente menzionato può vedere questo post."
}
},
"friendship": {
"follow": "Follow",
"following": "Following",
"request": "Request",
"pending": "Pending",
"block": "Block",
"block_user": "Block %s",
"block_domain": "Block %s",
"unblock": "Unblock",
"unblock_user": "Unblock %s",
"blocked": "Blocked",
"mute": "Mute",
"mute_user": "Mute %s",
"unmute": "Unmute",
"unmute_user": "Unmute %s",
"muted": "Muted",
"edit_info": "Edit Info"
"follow": "Segui",
"following": "Stai seguendo",
"request": "Richiesta",
"pending": "In attesa",
"block": "Blocca",
"block_user": "Blocca %s",
"block_domain": "Blocca %s",
"unblock": "Sblocca",
"unblock_user": "Sblocca %s",
"blocked": "Bloccato",
"mute": "Silenzia",
"mute_user": "Silenzia %s",
"unmute": "Riattiva",
"unmute_user": "Riattiva %s",
"muted": "Silenziato",
"edit_info": "Modifica info"
},
"timeline": {
"filtered": "Filtered",
"filtered": "Filtrato",
"timestamp": {
"now": "Now"
"now": "Ora"
},
"loader": {
"load_missing_posts": "Load missing posts",
"loading_missing_posts": "Loading missing posts...",
"show_more_replies": "Show more replies"
"load_missing_posts": "Carica i post mancanti",
"loading_missing_posts": "Caricamento post mancanti...",
"show_more_replies": "Mostra più risposte"
},
"header": {
"no_status_found": "No Post Found",
"blocking_warning": "You cant view this user's profile\nuntil you unblock them.\nYour profile looks like this to them.",
"user_blocking_warning": "You cant view %ss profile\nuntil you unblock them.\nYour profile looks like this to them.",
"blocked_warning": "You cant view this users profile\nuntil they unblock you.",
"user_blocked_warning": "You cant view %ss profile\nuntil they unblock you.",
"suspended_warning": "This user has been suspended.",
"user_suspended_warning": "%ss account has been suspended."
"no_status_found": "Nessun post trovato",
"blocking_warning": "Non puoi visualizzare il profilo di questo utente\nfinché non li sblocchi.\nIl tuo profilo sembra questo per loro.",
"user_blocking_warning": "Non puoi visualizzare il profilo di %s\nfinché non li sblocchi.\nIl tuo profilo sembra questo per loro.",
"blocked_warning": "Non puoi visualizzare il profilo di questo utente\nfino a quando non ti sbloccano.",
"user_blocked_warning": "Non puoi visualizzare il profilo di %s\nfino a quando non ti sbloccano.",
"suspended_warning": "Questo utente è stato sospeso.",
"user_suspended_warning": "L'account di %s è stato sospeso."
}
}
}
},
"scene": {
"welcome": {
"slogan": "Social networking\nback in your hands.",
"get_started": "Get Started",
"log_in": "Log In"
"slogan": "Il social network, di nuovo nelle tue mani.",
"get_started": "Inizia",
"log_in": "Accedi"
},
"server_picker": {
"title": "Mastodon is made of users in different communities.",
"subtitle": "Pick a community based on your interests, region, or a general purpose one.",
"subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"title": "Mastodon è fatto di utenti in diverse comunità.",
"subtitle": "Scegli una comunità basata sui tuoi interessi, regione o uno scopo generale.",
"subtitle_extend": "Scegli una comunità basata sui tuoi interessi, regione o uno scopo generale. Ogni comunità è gestita da un'organizzazione completamente indipendente o individuale.",
"button": {
"category": {
"all": "All",
"all_accessiblity_description": "Category: All",
"academia": "academia",
"activism": "activism",
"food": "food",
"furry": "furry",
"games": "games",
"general": "general",
"journalism": "journalism",
"all": "Tutti",
"all_accessiblity_description": "Categoria: Tutti",
"academia": "accademia",
"activism": "attivismo",
"food": "cibo",
"furry": "peloso",
"games": "giochi",
"general": "generale",
"journalism": "giornalismo",
"lgbt": "lgbt",
"regional": "regional",
"art": "art",
"music": "music",
"tech": "tech"
"regional": "locale",
"art": "arte",
"music": "musica",
"tech": "tecnologia"
},
"see_less": "See Less",
"see_more": "See More"
"see_less": "Vedi meno",
"see_more": "Vedi di più"
},
"label": {
"language": "LANGUAGE",
"users": "USERS",
"category": "CATEGORY"
"language": "LINGUA",
"users": "UTENTI",
"category": "CATEGORIA"
},
"input": {
"placeholder": "Search communities"
"placeholder": "Cerca comunità"
},
"empty_state": {
"finding_servers": "Finding available servers...",
"bad_network": "Something went wrong while loading the data. Check your internet connection.",
"no_results": "No results"
"finding_servers": "Ricerca server disponibili...",
"bad_network": "Qualcosa è andato storto durante il caricamento dei dati. Controlla la tua connessione internet.",
"no_results": "Nessun risultato"
}
},
"register": {
"title": "Lets get you set up on %s",
"title": "Facciamo in modo che sia configurato il %s",
"input": {
"avatar": {
"delete": "Delete"
"delete": "Elimina"
},
"username": {
"placeholder": "username",
"duplicate_prompt": "This username is taken."
"placeholder": "nome utente",
"duplicate_prompt": "Questo nome utente è già stato preso."
},
"display_name": {
"placeholder": "display name"
"placeholder": "visualizza nome"
},
"email": {
"placeholder": "email"
},
"password": {
"placeholder": "password",
"require": "Your password needs at least:",
"character_limit": "8 characters",
"require": "La tua password ha bisogno di almeno:",
"character_limit": "8 caratteri",
"accessibility": {
"checked": "checked",
"unchecked": "unchecked"
"checked": "verificato",
"unchecked": "non verificato"
},
"hint": "Your password needs at least eight characters"
"hint": "La tua password deve essere di almeno 8 caratteri"
},
"invite": {
"registration_user_invite_request": "Why do you want to join?"
"registration_user_invite_request": "Perché vuoi unirti?"
}
},
"error": {
"item": {
"username": "Username",
"username": "Nome utente",
"email": "Email",
"password": "Password",
"agreement": "Agreement",
"agreement": "Accordo",
"locale": "Locale",
"reason": "Reason"
"reason": "Motivo"
},
"reason": {
"blocked": "%s contains a disallowed email provider",
"unreachable": "%s does not seem to exist",
"taken": "%s is already in use",
"reserved": "%s is a reserved keyword",
"accepted": "%s must be accepted",
"blank": "%s is required",
"invalid": "%s is invalid",
"too_long": "%s is too long",
"too_short": "%s is too short",
"inclusion": "%s is not a supported value"
"blocked": "%s contiene un provider email non consentito",
"unreachable": "%s non sembra esistere",
"taken": "%s è già in uso",
"reserved": "%s è una parola chiave riservata",
"accepted": "%s deve essere accettato",
"blank": "%s è richiesto",
"invalid": "%s non è valido",
"too_long": "%s è troppo lungo",
"too_short": "%s è troppo corto",
"inclusion": "%s non è un valore supportato"
},
"special": {
"username_invalid": "Username must only contain alphanumeric characters and underscores",
"username_too_long": "Username is too long (cant be longer than 30 characters)",
"email_invalid": "This is not a valid email address",
"password_too_short": "Password is too short (must be at least 8 characters)"
"username_invalid": "Il nome utente deve contenere solo caratteri alfanumerici e trattini bassi",
"username_too_long": "Il nome utente è troppo lungo (non può essere più lungo di 30 caratteri)",
"email_invalid": "Questo non è un indirizzo email valido",
"password_too_short": "La password è troppo corta (deve contenere almeno 8 caratteri)"
}
}
},
"server_rules": {
"title": "Some ground rules.",
"subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service",
"title": "Alcune regole di base.",
"subtitle": "Questi sono impostati e applicati dai moderatori %s.",
"prompt": "Continuando, sei soggetto alle condizioni di servizio e all'informativa sulla privacy per %s.",
"terms_of_service": "condizioni del servizio",
"privacy_policy": "privacy policy",
"button": {
"confirm": "I Agree"
"confirm": "Accetto"
}
},
"confirm_email": {
"title": "One last thing.",
"subtitle": "Tap the link we emailed to you to verify your account.",
"title": "Un'ultima cosa.",
"subtitle": "Tocca il link che ti abbiamo inviato per verificare il tuo account.",
"button": {
"open_email_app": "Open Email App",
"resend": "Resend"
"open_email_app": "Apri l'app Email",
"resend": "Invia di nuovo"
},
"dont_receive_email": {
"title": "Check your email",
"description": "Check if your email address is correct as well as your junk folder if you havent.",
"resend_email": "Resend Email"
"title": "Controlla la tua e-mail",
"description": "Controlla se il tuo indirizzo email sia corretto, così come la tua cartella spazzatura se non ce l'hai.",
"resend_email": "Invia e-mail di nuovo"
},
"open_email_app": {
"title": "Check your inbox.",
"description": "We just sent you an email. Check your junk folder if you havent.",
"mail": "Mail",
"open_email_client": "Open Email Client"
"title": "Controlla la tua posta in arrivo.",
"description": "Ti abbiamo appena inviato un'email. Controlla la tua cartella spazzatura se non ce l'hai.",
"mail": "Posta",
"open_email_client": "Apri client Email"
}
},
"home_timeline": {
"title": "Home",
"title": "Inizio",
"navigation_bar_state": {
"offline": "Offline",
"new_posts": "See new posts",
"published": "Published!",
"Publishing": "Publishing post..."
"offline": "Non in linea",
"new_posts": "Vedi nuovi post",
"published": "Pubblicato!",
"Publishing": "Pubblicazione post..."
}
},
"suggestion_account": {
"title": "Find People to Follow",
"follow_explain": "When you follow someone, youll see their posts in your home feed."
"title": "Trova alcune persone da seguire",
"follow_explain": "Quando segui qualcuno, vedrai i loro post nella tua home feed."
},
"compose": {
"title": {
"new_post": "New Post",
"new_reply": "New Reply"
"new_post": "Nuovo post",
"new_reply": "Nuova risposta"
},
"media_selection": {
"camera": "Take Photo",
"photo_library": "Photo Library",
"browse": "Browse"
"camera": "Scatta foto",
"photo_library": "Libreria foto",
"browse": "Sfoglia"
},
"content_input_placeholder": "Type or paste whats on your mind",
"compose_action": "Publish",
"replying_to_user": "replying to %s",
"content_input_placeholder": "Digita o incolla quello che hai in mente",
"compose_action": "Pubblica",
"replying_to_user": "rispondendo a %s",
"attachment": {
"photo": "photo",
"video": "video",
"attachment_broken": "This %s is broken and cant be\nuploaded to Mastodon.",
"description_photo": "Describe the photo for the visually-impaired...",
"description_video": "Describe the video for the visually-impaired..."
"photo": "foto",
"video": "filmato",
"attachment_broken": "Questo %s è rotto e non può essere\ncaricato su Mastodon.",
"description_photo": "Descrivi la foto per gli utenti ipovedenti...",
"description_video": "Descrivi il filmato per gli utenti ipovedenti..."
},
"poll": {
"duration_time": "Duration: %s",
"thirty_minutes": "30 minutes",
"one_hour": "1 Hour",
"six_hours": "6 Hours",
"one_day": "1 Day",
"three_days": "3 Days",
"seven_days": "7 Days",
"option_number": "Option %ld"
"duration_time": "Durata: %s",
"thirty_minutes": "30 minuti",
"one_hour": "1 ora",
"six_hours": "6 ore",
"one_day": "1 giorno",
"three_days": "3 giorni",
"seven_days": "7 giorni",
"option_number": "Opzione %ld"
},
"content_warning": {
"placeholder": "Write an accurate warning here..."
"placeholder": "Scrivi un avviso accurato qui..."
},
"visibility": {
"public": "Public",
"unlisted": "Unlisted",
"private": "Followers only",
"direct": "Only people I mention"
"public": "Pubblico",
"unlisted": "Non elencato",
"private": "Solo i seguaci",
"direct": "Solo le persone che menziono"
},
"auto_complete": {
"space_to_add": "Space to add"
"space_to_add": "Spazio da aggiungere"
},
"accessibility": {
"append_attachment": "Add Attachment",
"append_poll": "Add Poll",
"remove_poll": "Remove Poll",
"custom_emoji_picker": "Custom Emoji Picker",
"enable_content_warning": "Enable Content Warning",
"disable_content_warning": "Disable Content Warning",
"post_visibility_menu": "Post Visibility Menu"
"append_attachment": "Aggiungi allegato",
"append_poll": "Aggiungi sondaggio",
"remove_poll": "Elimina sondaggio",
"custom_emoji_picker": "Selettore Emoji personalizzato",
"enable_content_warning": "Abilita avvertimento contenuti",
"disable_content_warning": "Disabilita avviso di contenuti",
"post_visibility_menu": "Menu di visibilità del post"
},
"keyboard": {
"discard_post": "Discard Post",
"publish_post": "Publish Post",
"toggle_poll": "Toggle Poll",
"toggle_content_warning": "Toggle Content Warning",
"append_attachment_entry": "Add Attachment - %s",
"select_visibility_entry": "Select Visibility - %s"
"discard_post": "Scarta post",
"publish_post": "Pubblica il post",
"toggle_poll": "Attiva/Disattiva Sondaggio",
"toggle_content_warning": "Attiva/Disattiva avviso contenuti",
"append_attachment_entry": "Aggiungi allegato - %s",
"select_visibility_entry": "Seleziona visibilità - %s"
}
},
"profile": {
"dashboard": {
"posts": "posts",
"following": "following",
"followers": "followers"
"posts": "post",
"following": "seguendo",
"followers": "seguaci"
},
"fields": {
"add_row": "Add Row",
"add_row": "Aggiungi riga",
"placeholder": {
"label": "Label",
"content": "Content"
"label": "Etichetta",
"content": "Contenuto"
}
},
"segmented_control": {
"posts": "Posts",
"replies": "Replies",
"posts_and_replies": "Posts and Replies",
"posts": "Post",
"replies": "Risposte",
"posts_and_replies": "Post e risposte",
"media": "Media",
"about": "About"
"about": "Info su"
},
"relationship_action_alert": {
"confirm_mute_user": {
"title": "Mute Account",
"message": "Confirm to mute %s"
"title": "Silenzia account",
"message": "Confermi di silenziare %s"
},
"confirm_unmute_user": {
"title": "Unmute Account",
"message": "Confirm to unmute %s"
"title": "Riattiva account",
"message": "Confermi di riattivare %s"
},
"confirm_block_user": {
"title": "Block Account",
"message": "Confirm to block %s"
"title": "Blocca account",
"message": "Confermi di bloccare %s"
},
"confirm_unblock_user": {
"title": "Unblock Account",
"message": "Confirm to unblock %s"
"title": "Sblocca account",
"message": "Conferma per sbloccare %s"
}
},
"accessibility": {
"show_avatar_image": "Mostra immagine avatar",
"edit_avatar_image": "Modifica immagine avatar",
"show_banner_image": "Mostra immagine banner",
"double_tap_to_open_the_list": "Doppio tocco per aprire la lista"
}
},
"follower": {
"footer": "Followers from other servers are not displayed."
"footer": "I seguaci da altri server non vengono visualizzati."
},
"following": {
"footer": "Follows from other servers are not displayed."
"footer": "I follow da altri server non vengono visualizzati."
},
"search": {
"title": "Search",
"title": "Cerca",
"search_bar": {
"placeholder": "Search hashtags and users",
"cancel": "Cancel"
"placeholder": "Cerca hashtag e utenti",
"cancel": "Annulla"
},
"recommend": {
"button_text": "See All",
"button_text": "Vedi tutto",
"hash_tag": {
"title": "Trending on Mastodon",
"description": "Hashtags that are getting quite a bit of attention",
"people_talking": "%s people are talking"
"title": "Di tendenza su Mastodon",
"description": "Hashtag che stanno ottenendo un bel po' di attenzione",
"people_talking": "%s persone ne parlano"
},
"accounts": {
"title": "Accounts you might like",
"description": "You may like to follow these accounts",
"follow": "Follow"
"title": "Account che potrebbero piacerti",
"description": "Potresti voler seguire questi account",
"follow": "Segui"
}
},
"searching": {
"segment": {
"all": "All",
"people": "People",
"all": "Tutto",
"people": "Persone",
"hashtags": "Hashtags",
"posts": "Posts"
"posts": "Post"
},
"empty_state": {
"no_results": "No results"
"no_results": "Nessun risultato"
},
"recent_search": "Recent searches",
"clear": "Clear"
"recent_search": "Ricerche recenti",
"clear": "Cancella"
}
},
"discovery": {
"tabs": {
"posts": "Post",
"hashtags": "Hashtag",
"news": "Notizie",
"for_you": "Per Te"
}
},
"favorite": {
"title": "Your Favorites"
"title": "I tuoi preferiti"
},
"notification": {
"title": {
"Everything": "Everything",
"Mentions": "Mentions"
"Everything": "Tutto",
"Mentions": "Menzioni"
},
"notification_description": {
"followed_you": "followed you",
"favorited_your_post": "favorited your post",
"reblogged_your_post": "reblogged your post",
"mentioned_you": "mentioned you",
"request_to_follow_you": "request to follow you",
"poll_has_ended": "poll has ended"
"followed_you": "ti ha seguito",
"favorited_your_post": "ha apprezzato il tuo post",
"reblogged_your_post": "ha ripostato il tuo post",
"mentioned_you": "ti ha menzionato",
"request_to_follow_you": "richiesta di seguirti",
"poll_has_ended": "sondaggio terminato"
},
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
"show_everything": "Mostra Tutto",
"show_mentions": "Mostra Menzioni"
}
},
"thread": {
"back_title": "Post",
"title": "Post from %s"
"title": "Post da %s"
},
"settings": {
"title": "Settings",
"title": "Impostazioni",
"section": {
"appearance": {
"title": "Appearance",
"automatic": "Automatic",
"light": "Always Light",
"dark": "Always Dark"
"title": "Aspetto",
"automatic": "Automatico",
"light": "Sempre chiaro",
"dark": "Sempre scuro"
},
"look_and_feel": {
"title": "Look and Feel",
"use_system": "Use System",
"really_dark": "Really Dark",
"sorta_dark": "Sorta Dark",
"light": "Light"
"use_system": "Predefinito di sistema",
"really_dark": "Davvero scuro",
"sorta_dark": "Un po' scuro",
"light": "Chiaro"
},
"notifications": {
"title": "Notifications",
"favorites": "Favorites my post",
"follows": "Follows me",
"boosts": "Reblogs my post",
"mentions": "Mentions me",
"title": "Notifiche",
"favorites": "Apprezza i miei post",
"follows": "Mi segue",
"boosts": "Condivide i miei post",
"mentions": "Mi menziona",
"trigger": {
"anyone": "anyone",
"follower": "a follower",
"follow": "anyone I follow",
"noone": "no one",
"title": "Notify me when"
"anyone": "chiunque",
"follower": "un seguace",
"follow": "chiunque io segua",
"noone": "nessuno",
"title": "Avvisami quando"
}
},
"preference": {
"title": "Preferences",
"true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars",
"disable_emoji_animation": "Disable animated emojis",
"using_default_browser": "Use default browser to open links"
"title": "Preferenze",
"true_black_dark_mode": "Modalità molto scura",
"disable_avatar_animation": "Disabilita avatar animati",
"disable_emoji_animation": "Disabilita emoji animate",
"using_default_browser": "Usa browser predefinito per aprire i collegamenti",
"open_links_in_mastodon": "Apri i link in Mastodon"
},
"boring_zone": {
"title": "The Boring Zone",
"account_settings": "Account Settings",
"terms": "Terms of Service",
"privacy": "Privacy Policy"
"title": "La zona boring",
"account_settings": "Impostazioni account",
"terms": "Termini di servizio",
"privacy": "Politica sulla Privacy"
},
"spicy_zone": {
"title": "The Spicy Zone",
"clear": "Clear Media Cache",
"signout": "Sign Out"
"title": "La zona piccante",
"clear": "Cancella la cache multimediale",
"signout": "Esci"
}
},
"footer": {
"mastodon_description": "Mastodon is open source software. You can report issues on GitHub at %s (%s)"
"mastodon_description": "Mastodon è un software open source. Puoi segnalare problemi su GitHub a %s (%s)"
},
"keyboard": {
"close_settings_window": "Close Settings Window"
"close_settings_window": "Chiudi la finestra Impostazioni"
}
},
"report": {
"title_report": "Report",
"title": "Report %s",
"step1": "Step 1 of 2",
"step2": "Step 2 of 2",
"content1": "Are there any other posts youd like to add to the report?",
"content2": "Is there anything the moderators should know about this report?",
"report_sent_title": "Thanks for reporting, well look into this.",
"send": "Send Report",
"skip_to_send": "Send without comment",
"text_placeholder": "Type or paste additional comments",
"reported": "REPORTED"
"title_report": "Segnala",
"title": "Segnala %s",
"step1": "Fase 1 di 2",
"step2": "Fase 2 di 2",
"content1": "Ci sono altri post che vorresti aggiungere alla segnalazione?",
"content2": "C'è qualcosa che i moderatori dovrebbero sapere su questa segnalazione?",
"report_sent_title": "Grazie per la segnalazione, esamineremo questo aspetto.",
"send": "Invia segnalazione",
"skip_to_send": "Invia senza commento",
"text_placeholder": "Digita o incolla commenti aggiuntivi",
"reported": "SEGNALATO"
},
"preview": {
"keyboard": {
"close_preview": "Close Preview",
"show_next": "Show Next",
"show_previous": "Show Previous"
"close_preview": "Chiudi anteprima",
"show_next": "Mostra successivo",
"show_previous": "Mostra precedente"
}
},
"account_list": {
"tab_bar_hint": "Current selected profile: %s. Double tap then hold to show account switcher",
"dismiss_account_switcher": "Dismiss Account Switcher",
"add_account": "Add Account"
"tab_bar_hint": "Profilo corrente selezionato: %s. Doppio tocco e tieni premuto per mostrare il cambio account",
"dismiss_account_switcher": "Ignora il cambio account",
"add_account": "Aggiungi account"
},
"wizard": {
"new_in_mastodon": "New in Mastodon",
"multiple_account_switch_intro_description": "Switch between multiple accounts by holding the profile button.",
"accessibility_hint": "Double tap to dismiss this wizard"
"new_in_mastodon": "Nuovo su Mastodon",
"multiple_account_switch_intro_description": "Passa tra più account tenendo premuto il pulsante del profilo.",
"accessibility_hint": "Doppio tocco per eliminare questa procedura guidata"
}
}
}

View File

@ -1,6 +1,6 @@
{
"NSCameraUsageDescription": "Used to take photo for post status",
"NSPhotoLibraryAddUsageDescription": "Used to save photo into the Photo Library",
"NewPostShortcutItemTitle": "New Post",
"SearchShortcutItemTitle": "Search"
"NSCameraUsageDescription": "Usato per scattare foto per lo stato del post",
"NSPhotoLibraryAddUsageDescription": "Utilizzato per salvare la foto nella galleria immagini",
"NewPostShortcutItemTitle": "Nuovo post",
"SearchShortcutItemTitle": "Cerca"
}

View File

@ -100,6 +100,20 @@
<string>%ld ブースト</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld replies</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "プロフィールを見る",
"content_warning": "コンテンツ警告",
"media_content_warning": "どこかをタップして表示",
"tap_to_reveal": "Tap to reveal",
"poll": {
"vote": "投票",
"closed": "クローズド"
@ -141,7 +142,11 @@
"favorite": "お気に入り",
"unfavorite": "お気に入り登録を取り消す",
"menu": "メニュー",
"hide": "非表示"
"hide": "非表示",
"show_image": "Show image",
"show_gif": "Show GIF",
"show_video_player": "Show video player",
"tap_then_hold_to_show_menu": "Tap then hold to show menu"
},
"tag": {
"url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
},
"accessibility": {
"show_avatar_image": "Show avatar image",
"edit_avatar_image": "Edit avatar image",
"show_banner_image": "Show banner image",
"double_tap_to_open_the_list": "Double tap to open the list"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "クリア"
}
},
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": {
"title": "お気に入り"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "真っ黒なダークテーマを使用する",
"disable_avatar_animation": "アバターのアニメーションを無効化する",
"disable_emoji_animation": "絵文字のアニメーションを無効化する",
"using_default_browser": "既定のブラウザでリンクを開く"
"using_default_browser": "既定のブラウザでリンクを開く",
"open_links_in_mastodon": "Open links in Mastodon"
},
"boring_zone": {
"title": "アプリについて",

View File

@ -114,6 +114,22 @@
<string>%ld n uɛiwed n usuffeɣ</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 reply</string>
<key>other</key>
<string>%ld replies</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Ssken-d amaɣnu n useqdac",
"content_warning": "Alɣu n ugbur",
"media_content_warning": "Sit anida tebɣiḍ i wakken ad twaliḍ",
"tap_to_reveal": "Tap to reveal",
"poll": {
"vote": "Dɣeṛ",
"closed": "Ifukk"
@ -141,7 +142,11 @@
"favorite": "Anurif",
"unfavorite": "Kkes seg yismenyifen",
"menu": "Umuɣ",
"hide": "Ffer"
"hide": "Ffer",
"show_image": "Show image",
"show_gif": "Show GIF",
"show_video_player": "Show video player",
"tap_then_hold_to_show_menu": "Tap then hold to show menu"
},
"tag": {
"url": "URL",
@ -440,6 +445,12 @@
"title": "Kkes asewḥel i umiḍan",
"message": "Sentem tukksa n usgugem i %s"
}
},
"accessibility": {
"show_avatar_image": "Show avatar image",
"edit_avatar_image": "Edit avatar image",
"show_banner_image": "Show banner image",
"double_tap_to_open_the_list": "Double tap to open the list"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Sfeḍ"
}
},
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": {
"title": "Ismenyifen-ik·im"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "Askar aberkan n tidet",
"disable_avatar_animation": "Sens ivaṭaren yettembiwilen",
"disable_emoji_animation": "Sens imujiten yettembiwilen",
"using_default_browser": "Seqdec iminig amezwer i twaledyawt n yiseɣwan"
"using_default_browser": "Seqdec iminig amezwer i twaledyawt n yiseɣwan",
"open_links_in_mastodon": "Open links in Mastodon"
},
"boring_zone": {
"title": "Tamnaḍt yessefcalen",

View File

@ -114,6 +114,22 @@
<string>%ld ji nû ve nivîsandin</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 bersiv</string>
<key>other</key>
<string>%ld bersiv</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Profîla bikarhêner nîşan bide",
"content_warning": "Hişyariya naverokê",
"media_content_warning": "Ji bo eşkerekirinê li derekî bitikîne",
"tap_to_reveal": "Ji bo dîtinê bitikîne",
"poll": {
"vote": "Deng bide",
"closed": "Girtî"
@ -141,7 +142,11 @@
"favorite": "Bijarte",
"unfavorite": "Nebijarte",
"menu": "Kulîn",
"hide": "Veşêre"
"hide": "Veşêre",
"show_image": "Wêneyê nîşan bide",
"show_gif": "GIF nîşan bide",
"show_video_player": "Lêdera vîdyoyê nîşan bide",
"tap_then_hold_to_show_menu": "Ji bo nîşandana menuyê dirêj bitikîne"
},
"tag": {
"url": "URL",
@ -440,6 +445,12 @@
"title": "Astengiyê li ser ajimêr rake",
"message": "Ji bo rakirina astengkirinê %s bipejirîne"
}
},
"accessibility": {
"show_avatar_image": "Wêneya avatar nîşan bide",
"edit_avatar_image": "Wêneya avatar serrast bike",
"show_banner_image": "Wêneya paşrûyê nîşan bide",
"double_tap_to_open_the_list": "Ducaran bitikîne bo vekirina listeyê"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Pak bike"
}
},
"discovery": {
"tabs": {
"posts": "Şandî",
"hashtags": "Hashtag",
"news": "Nûçe",
"for_you": "Ji bo te"
}
},
"favorite": {
"title": "Bijarteyên te"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "Moda tarî ya reş a rastîn",
"disable_avatar_animation": "Avatarên anîmasyonî neçalak bike",
"disable_emoji_animation": "Emojiyên anîmasyonî neçalak bike",
"using_default_browser": "Ji bo vekirina girêdanan geroka berdest bi kar bîne"
"using_default_browser": "Ji bo vekirina girêdanan geroka berdest bi kar bîne",
"open_links_in_mastodon": "Girêdanan di Mastodon de veke"
},
"boring_zone": {
"title": "Devera acizker",

View File

@ -100,6 +100,20 @@
<string>%ld 개의 리블로그</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld replies</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "사용자 프로필 보기",
"content_warning": "열람 주의",
"media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": {
"vote": "투표",
"closed": "마감"
@ -141,7 +142,11 @@
"favorite": "즐겨찾기",
"unfavorite": "즐겨찾기 해제",
"menu": "메뉴",
"hide": "Hide"
"hide": "Hide",
"show_image": "Show image",
"show_gif": "Show GIF",
"show_video_player": "Show video player",
"tap_then_hold_to_show_menu": "Tap then hold to show menu"
},
"tag": {
"url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
},
"accessibility": {
"show_avatar_image": "Show avatar image",
"edit_avatar_image": "Edit avatar image",
"show_banner_image": "Show banner image",
"double_tap_to_open_the_list": "Double tap to open the list"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Clear"
}
},
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": {
"title": "Your Favorites"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "트루 블랙 어두운 모드",
"disable_avatar_animation": "움직이는 아바타 비활성화",
"disable_emoji_animation": "움직이는 에모지 비활성화",
"using_default_browser": "기본 브라우저로 링크 열기"
"using_default_browser": "기본 브라우저로 링크 열기",
"open_links_in_mastodon": "Open links in Mastodon"
},
"boring_zone": {
"title": "지루한 영역",

View File

@ -114,6 +114,22 @@
<string>%ld gedeelde berichten</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 reply</string>
<key>other</key>
<string>%ld replies</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Toon Gebruikersprofiel",
"content_warning": "Inhoudswaarschuwing",
"media_content_warning": "Tap hier om te tonen",
"tap_to_reveal": "Tap to reveal",
"poll": {
"vote": "Stemmen",
"closed": "Gesloten"
@ -141,7 +142,11 @@
"favorite": "Toevoegen aan Favorieten",
"unfavorite": "Verwijderen uit Favorieten",
"menu": "Menu",
"hide": "Hide"
"hide": "Hide",
"show_image": "Show image",
"show_gif": "Show GIF",
"show_video_player": "Show video player",
"tap_then_hold_to_show_menu": "Tap then hold to show menu"
},
"tag": {
"url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
},
"accessibility": {
"show_avatar_image": "Show avatar image",
"edit_avatar_image": "Edit avatar image",
"show_banner_image": "Show banner image",
"double_tap_to_open_the_list": "Double tap to open the list"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Wissen"
}
},
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": {
"title": "Uw favorieten"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "Echt zwarte donker uiterlijk",
"disable_avatar_animation": "Geanimeerde avatars uitschakelen",
"disable_emoji_animation": "Geanimeerde emojis uitschakelen",
"using_default_browser": "Gebruik de standaard browser om links te openen"
"using_default_browser": "Gebruik de standaard browser om links te openen",
"open_links_in_mastodon": "Open links in Mastodon"
},
"boring_zone": {
"title": "De Saaie Instellingen",

View File

@ -114,6 +114,22 @@
<string>%ld reblogs</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 reply</string>
<key>other</key>
<string>%ld replies</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Show user profile",
"content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": {
"vote": "Vote",
"closed": "Closed"
@ -141,7 +142,11 @@
"favorite": "Favorite",
"unfavorite": "Unfavorite",
"menu": "Menu",
"hide": "Hide"
"hide": "Hide",
"show_image": "Show image",
"show_gif": "Show GIF",
"show_video_player": "Show video player",
"tap_then_hold_to_show_menu": "Tap then hold to show menu"
},
"tag": {
"url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
},
"accessibility": {
"show_avatar_image": "Show avatar image",
"edit_avatar_image": "Edit avatar image",
"show_banner_image": "Show banner image",
"double_tap_to_open_the_list": "Double tap to open the list"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Clear"
}
},
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": {
"title": "Your Favorites"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars",
"disable_emoji_animation": "Disable animated emojis",
"using_default_browser": "Use default browser to open links"
"using_default_browser": "Use default browser to open links",
"open_links_in_mastodon": "Open links in Mastodon"
},
"boring_zone": {
"title": "The Boring Zone",

View File

@ -114,6 +114,22 @@
<string>%ld reblogs</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 reply</string>
<key>other</key>
<string>%ld replies</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Show user profile",
"content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": {
"vote": "Vote",
"closed": "Closed"
@ -141,7 +142,11 @@
"favorite": "Favorite",
"unfavorite": "Unfavorite",
"menu": "Menu",
"hide": "Hide"
"hide": "Hide",
"show_image": "Show image",
"show_gif": "Show GIF",
"show_video_player": "Show video player",
"tap_then_hold_to_show_menu": "Tap then hold to show menu"
},
"tag": {
"url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
},
"accessibility": {
"show_avatar_image": "Show avatar image",
"edit_avatar_image": "Edit avatar image",
"show_banner_image": "Show banner image",
"double_tap_to_open_the_list": "Double tap to open the list"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Clear"
}
},
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": {
"title": "Your Favorites"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars",
"disable_emoji_animation": "Disable animated emojis",
"using_default_browser": "Use default browser to open links"
"using_default_browser": "Use default browser to open links",
"open_links_in_mastodon": "Open links in Mastodon"
},
"boring_zone": {
"title": "The Boring Zone",

View File

@ -128,6 +128,24 @@
<string>%ld reblogs</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 reply</string>
<key>few</key>
<string>%ld replies</string>
<key>other</key>
<string>%ld replies</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Show user profile",
"content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": {
"vote": "Vote",
"closed": "Closed"
@ -141,7 +142,11 @@
"favorite": "Favorite",
"unfavorite": "Unfavorite",
"menu": "Menu",
"hide": "Hide"
"hide": "Hide",
"show_image": "Show image",
"show_gif": "Show GIF",
"show_video_player": "Show video player",
"tap_then_hold_to_show_menu": "Tap then hold to show menu"
},
"tag": {
"url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
},
"accessibility": {
"show_avatar_image": "Show avatar image",
"edit_avatar_image": "Edit avatar image",
"show_banner_image": "Show banner image",
"double_tap_to_open_the_list": "Double tap to open the list"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Clear"
}
},
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": {
"title": "Your Favorites"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars",
"disable_emoji_animation": "Disable animated emojis",
"using_default_browser": "Use default browser to open links"
"using_default_browser": "Use default browser to open links",
"open_links_in_mastodon": "Open links in Mastodon"
},
"boring_zone": {
"title": "The Boring Zone",

View File

@ -142,6 +142,26 @@
<string>%ld продвинули</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 reply</string>
<key>few</key>
<string>%ld replies</string>
<key>many</key>
<string>%ld replies</string>
<key>other</key>
<string>%ld replies</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -46,7 +46,7 @@
},
"delete_post": {
"title": "Вы уверены, что хотите удалить этот пост?",
"message": "Are you sure you want to delete this post?"
"message": "Вы уверены, что хотите удалить этот пост?"
},
"clean_cache": {
"title": "Очистка кэша",
@ -130,6 +130,7 @@
"show_user_profile": "Показать профиль пользователя",
"content_warning": "Предупреждение о содержании",
"media_content_warning": "Нажмите в любом месте, чтобы показать",
"tap_to_reveal": "Нажмите, чтобы показать",
"poll": {
"vote": "Проголосовать",
"closed": "Завершён"
@ -141,7 +142,11 @@
"favorite": "Добавить в избранное",
"unfavorite": "Убрать из избранного",
"menu": "Меню",
"hide": "Hide"
"hide": "Скрыть",
"show_image": "Показать изображение",
"show_gif": "Показать GIF",
"show_video_player": "Показать видеопроигрыватель",
"tap_then_hold_to_show_menu": "Нажмите и удерживайте, чтобы показать меню"
},
"tag": {
"url": "Ссылка",
@ -170,7 +175,7 @@
"unblock_user": "Разблокировать %s",
"blocked": "В заблокированных",
"mute": "Игнорировать",
"mute_user": "Добавить %s в игнорируемые",
"mute_user": "Игнорировать %s",
"unmute": "Убрать из игнорируемых",
"unmute_user": "Убрать %s из игнорируемых",
"muted": "В игнорируемых",
@ -201,7 +206,7 @@
"scene": {
"welcome": {
"slogan": "Социальная сеть\nпод вашим контролем.",
"get_started": "Get Started",
"get_started": "Присоединиться",
"log_in": "Вход"
},
"server_picker": {
@ -316,7 +321,7 @@
"subtitle": "Мы только что отправили письмо на\n%s.\nНажмите на ссылку в нём, чтобы\nподтвердить свою учётную запись.",
"button": {
"open_email_app": "Открыть приложение почты",
"resend": "Resend"
"resend": "Отправить заново"
},
"dont_receive_email": {
"title": "Проверьте свой e-mail адрес",
@ -419,7 +424,7 @@
"segmented_control": {
"posts": "Посты",
"replies": "Ответы",
"posts_and_replies": "Posts and Replies",
"posts_and_replies": "Посты и ответы",
"media": "Медиа",
"about": "About"
},
@ -440,6 +445,12 @@
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
},
"accessibility": {
"show_avatar_image": "Show avatar image",
"edit_avatar_image": "Edit avatar image",
"show_banner_image": "Show banner image",
"double_tap_to_open_the_list": "Double tap to open the list"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Очистить"
}
},
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": {
"title": "Ваше избранное"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "Полноценно чёрный режим",
"disable_avatar_animation": "Отключить анимацию аватарок",
"disable_emoji_animation": "Отключить анимацию эмодзи",
"using_default_browser": "Использовать браузер по умолчанию для открытия ссылок"
"using_default_browser": "Использовать браузер по умолчанию для открытия ссылок",
"open_links_in_mastodon": "Открывать ссылки в Мастодоне"
},
"boring_zone": {
"title": "Зона скукотищи",
@ -563,7 +583,7 @@
}
},
"report": {
"title_report": "Report",
"title_report": "Жалоба",
"title": "Пожаловаться на %s",
"step1": "Шаг 1 из 2",
"step2": "Шаг 2 из 2",
@ -588,7 +608,7 @@
"add_account": "Add Account"
},
"wizard": {
"new_in_mastodon": "New in Mastodon",
"new_in_mastodon": "Новое в Мастодоне",
"multiple_account_switch_intro_description": "Switch between multiple accounts by holding the profile button.",
"accessibility_hint": "Double tap to dismiss this wizard"
}

View File

@ -114,6 +114,22 @@
<string>%ld edelleen jakoa</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 reply</string>
<key>other</key>
<string>%ld replies</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Näytä tili",
"content_warning": "Sisältövaroitus",
"media_content_warning": "Napauta mistä tahansa paljastaaksesi",
"tap_to_reveal": "Tap to reveal",
"poll": {
"vote": "Vote",
"closed": "Suljettu"
@ -141,7 +142,11 @@
"favorite": "Favorite",
"unfavorite": "Unfavorite",
"menu": "Valikko",
"hide": "Dölj"
"hide": "Dölj",
"show_image": "Show image",
"show_gif": "Show GIF",
"show_video_player": "Show video player",
"tap_then_hold_to_show_menu": "Tap then hold to show menu"
},
"tag": {
"url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
},
"accessibility": {
"show_avatar_image": "Show avatar image",
"edit_avatar_image": "Edit avatar image",
"show_banner_image": "Show banner image",
"double_tap_to_open_the_list": "Double tap to open the list"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Tyhjennä"
}
},
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": {
"title": "Omat suosikit"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "Todellinen mustan tumma tila",
"disable_avatar_animation": "Poista käytöstä animoidut avatarit",
"disable_emoji_animation": "Poista käytöstä animoidut emojit",
"using_default_browser": "Käytä oletusselainta linkkien avaamiseen"
"using_default_browser": "Käytä oletusselainta linkkien avaamiseen",
"open_links_in_mastodon": "Open links in Mastodon"
},
"boring_zone": {
"title": "Tylsä alue",

View File

@ -114,6 +114,22 @@
<string>%ld reblogs</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 reply</string>
<key>other</key>
<string>%ld replies</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Show user profile",
"content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": {
"vote": "Vote",
"closed": "Closed"
@ -141,7 +142,11 @@
"favorite": "Favorite",
"unfavorite": "Unfavorite",
"menu": "Meny",
"hide": "Dölj"
"hide": "Dölj",
"show_image": "Show image",
"show_gif": "Show GIF",
"show_video_player": "Show video player",
"tap_then_hold_to_show_menu": "Tap then hold to show menu"
},
"tag": {
"url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
},
"accessibility": {
"show_avatar_image": "Show avatar image",
"edit_avatar_image": "Edit avatar image",
"show_banner_image": "Show banner image",
"double_tap_to_open_the_list": "Double tap to open the list"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Rensa"
}
},
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": {
"title": "Your Favorites"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Inaktivera animerade avatarer",
"disable_emoji_animation": "Inaktivera animerade emojis",
"using_default_browser": "Use default browser to open links"
"using_default_browser": "Use default browser to open links",
"open_links_in_mastodon": "Open links in Mastodon"
},
"boring_zone": {
"title": "The Boring Zone",

View File

@ -100,6 +100,20 @@
<string>%ld การดัน</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld การตอบกลับ</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "แสดงโปรไฟล์ผู้ใช้",
"content_warning": "คำเตือนเนื้อหา",
"media_content_warning": "แตะที่ใดก็ตามเพื่อเปิดเผย",
"tap_to_reveal": "แตะเพื่อเปิดเผย",
"poll": {
"vote": "ลงคะแนน",
"closed": "ปิดแล้ว"
@ -141,7 +142,11 @@
"favorite": "ชื่นชอบ",
"unfavorite": "เลิกชื่นชอบ",
"menu": "เมนู",
"hide": "ซ่อน"
"hide": "ซ่อน",
"show_image": "แสดงภาพ",
"show_gif": "แสดง GIF",
"show_video_player": "แสดงตัวเล่นวิดีโอ",
"tap_then_hold_to_show_menu": "แตะค้างไว้เพื่อแสดงเมนู"
},
"tag": {
"url": "URL",
@ -440,6 +445,12 @@
"title": "เลิกปิดกั้นบัญชี",
"message": "ยืนยันเพื่อเลิกปิดกั้น %s"
}
},
"accessibility": {
"show_avatar_image": "แสดงภาพประจำตัว",
"edit_avatar_image": "แก้ไขภาพประจำตัว",
"show_banner_image": "แสดงภาพแบนเนอร์",
"double_tap_to_open_the_list": "แตะสองครั้งเพื่อเปิดรายการ"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "ล้าง"
}
},
"discovery": {
"tabs": {
"posts": "โพสต์",
"hashtags": "แฮชแท็ก",
"news": "ข่าว",
"for_you": "สำหรับคุณ"
}
},
"favorite": {
"title": "รายการโปรดของคุณ"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "โหมดมืดดำสนิท",
"disable_avatar_animation": "ปิดใช้งานภาพประจำตัวแบบเคลื่อนไหว",
"disable_emoji_animation": "ปิดใช้งานอีโมจิแบบเคลื่อนไหว",
"using_default_browser": "ใช้เบราว์เซอร์เริ่มต้นเพื่อเปิดลิงก์"
"using_default_browser": "ใช้เบราว์เซอร์เริ่มต้นเพื่อเปิดลิงก์",
"open_links_in_mastodon": "เปิดลิงก์ใน Mastodon"
},
"boring_zone": {
"title": "โซนน่าเบื่อ",

View File

@ -0,0 +1,356 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>a11y.plural.count.unread.notification</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@notification_count_unread_notification@</string>
<key>notification_count_unread_notification</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld thông báo chưa đọc</string>
</dict>
</dict>
<key>a11y.plural.count.input_limit_exceeds</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>Giới hạn nhập tối đa %#@character_count@</string>
<key>character_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld ký tự</string>
</dict>
</dict>
<key>a11y.plural.count.input_limit_remains</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>Giới hạn nhập còn lại %#@character_count@</string>
<key>character_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld ký tự</string>
</dict>
</dict>
<key>plural.count.metric_formatted.post</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%@ %#@post_count@</string>
<key>post_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>tút</string>
</dict>
</dict>
<key>plural.count.post</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@post_count@</string>
<key>post_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld tút</string>
</dict>
</dict>
<key>plural.count.favorite</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@favorite_count@</string>
<key>favorite_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld lượt thích</string>
</dict>
</dict>
<key>plural.count.reblog</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reblog_count@</string>
<key>reblog_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld đăng lại</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld trả lời</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@vote_count@</string>
<key>vote_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld bình chọn</string>
</dict>
</dict>
<key>plural.count.voter</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@voter_count@</string>
<key>voter_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld người bình chọn</string>
</dict>
</dict>
<key>plural.people_talking</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count_people_talking@</string>
<key>count_people_talking</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld người đang thảo luận</string>
</dict>
</dict>
<key>plural.count.following</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count_following@</string>
<key>count_following</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld đang theo dõi</string>
</dict>
</dict>
<key>plural.count.follower</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count_follower@</string>
<key>count_follower</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld người theo dõi</string>
</dict>
</dict>
<key>date.year.left</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count_year_left@</string>
<key>count_year_left</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld năm còn lại</string>
</dict>
</dict>
<key>date.month.left</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count_month_left@</string>
<key>count_month_left</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld tháng còn lại</string>
</dict>
</dict>
<key>date.day.left</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count_day_left@</string>
<key>count_day_left</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld ngày còn lại</string>
</dict>
</dict>
<key>date.hour.left</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count_hour_left@</string>
<key>count_hour_left</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld giờ còn lại</string>
</dict>
</dict>
<key>date.minute.left</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count_minute_left@</string>
<key>count_minute_left</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld phút còn lại</string>
</dict>
</dict>
<key>date.second.left</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count_second_left@</string>
<key>count_second_left</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld giây còn lại</string>
</dict>
</dict>
<key>date.year.ago.abbr</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count_year_ago_abbr@</string>
<key>count_year_ago_abbr</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld năm trước</string>
</dict>
</dict>
<key>date.month.ago.abbr</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count_month_ago_abbr@</string>
<key>count_month_ago_abbr</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld tháng trước</string>
</dict>
</dict>
<key>date.day.ago.abbr</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count_day_ago_abbr@</string>
<key>count_day_ago_abbr</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld ngày trước</string>
</dict>
</dict>
<key>date.hour.ago.abbr</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count_hour_ago_abbr@</string>
<key>count_hour_ago_abbr</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ldh</string>
</dict>
</dict>
<key>date.minute.ago.abbr</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count_minute_ago_abbr@</string>
<key>count_minute_ago_abbr</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ldm</string>
</dict>
</dict>
<key>date.second.ago.abbr</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count_second_ago_abbr@</string>
<key>count_second_ago_abbr</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%lds</string>
</dict>
</dict>
</dict>
</plist>

View File

@ -0,0 +1,616 @@
{
"common": {
"alerts": {
"common": {
"please_try_again": "Vui lòng thử lại.",
"please_try_again_later": "Vui lòng thử lại sau."
},
"sign_up_failure": {
"title": "Đăng ký không thành công"
},
"server_error": {
"title": "Lỗi máy chủ"
},
"vote_failure": {
"title": "Bình chọn không thành công",
"poll_ended": "Cuộc bình chọn đã kết thúc"
},
"discard_post_content": {
"title": "Hủy bản nháp",
"message": "Xác nhận bỏ qua nội dung tút đã viết."
},
"publish_post_failure": {
"title": "Đăng tút không thành công",
"message": "Không thể đăng tút.\nVui lòng kiểm tra kết nối mạng.",
"attachments_message": {
"video_attach_with_photo": "Không thể đính kèm video cùng với hình ảnh.",
"more_than_one_video": "Không thể đính kèm nhiều video."
}
},
"edit_profile_failure": {
"title": "Lỗi chỉnh sửa hồ sơ",
"message": "Không thể chỉnh sửa hồ sơ. Vui lòng thử lại."
},
"sign_out": {
"title": "Đăng xuất",
"message": "Bạn có chắc muốn đăng xuất không?",
"confirm": "Đăng xuất"
},
"block_domain": {
"title": "Bạn thật sự muốn ẩn toàn bộ nội dung từ %s? Sẽ hợp lý hơn nếu bạn chỉ chặn hoặc ẩn một vài tài khoản cụ thể. Ẩn toàn bộ nội dung từ máy chủ sẽ khiến bạn không còn thấy nội dung từ máy chủ đó ở bất kỳ nơi nào, kể cả thông báo. Người theo dõi bạn từ máy chủ đó cũng sẽ bị xóa luôn.",
"block_entire_domain": "Chặn máy chủ"
},
"save_photo_failure": {
"title": "Lưu hình ảnh không thành công",
"message": "Vui lòng cho phép quyền truy cập thư viện hình ảnh để lưu hình ảnh về máy."
},
"delete_post": {
"title": "Xóa tút",
"message": "Bạn có chắc muốn xóa tút này không?"
},
"clean_cache": {
"title": "Xóa bộ nhớ đệm",
"message": "Đã xóa %s bộ nhớ đệm."
}
},
"controls": {
"actions": {
"back": "Quay lại",
"next": "Kế tiếp",
"previous": "Trước đó",
"open": "Mở",
"add": "Thêm",
"remove": "Xóa",
"edit": "Sửa",
"save": "Lưu",
"ok": "OK",
"done": "Xong",
"confirm": "Xác nhận",
"continue": "Tiếp tục",
"compose": "Viết tút",
"cancel": "Hủy bỏ",
"discard": "Bỏ qua",
"try_again": "Thử lại",
"take_photo": "Chụp ảnh",
"save_photo": "Lưu ảnh",
"copy_photo": "Sao chép ảnh",
"sign_in": "Đăng nhập",
"sign_up": "Đăng ký",
"see_more": "Xem thêm",
"preview": "Xem trước",
"share": "Chia sẻ",
"share_user": "Chia sẻ %s",
"share_post": "Chia sẻ tút",
"open_in_safari": "Mở bằng Safari",
"open_in_browser": "Mở trong trình duyệt",
"find_people": "Đề xuất theo dõi",
"manually_search": "Tự tìm kiếm thủ công",
"skip": "Bỏ qua",
"reply": "Trả lời",
"report_user": "Báo cáo %s",
"block_domain": "Chặn %s",
"unblock_domain": "Bỏ chặn %s",
"settings": "Cài đặt",
"delete": "Xóa"
},
"tabs": {
"home": "Bảng tin",
"search": "Tìm kiếm",
"notification": "Thông báo",
"profile": "Trang hồ sơ"
},
"keyboard": {
"common": {
"switch_to_tab": "Chuyển thành %s",
"compose_new_post": "Viết tút mới",
"show_favorites": "Hiện lượt thích",
"open_settings": "Mở cài đặt"
},
"timeline": {
"previous_status": "Tút trước",
"next_status": "Tút sau",
"open_status": "Mở tút",
"open_author_profile": "Mở trang người viết tút",
"open_reblogger_profile": "Mở trang người đăng lại tút",
"reply_status": "Trả lời tút",
"toggle_reblog": "Chọn đăng lại tút",
"toggle_favorite": "Chọn thích tút",
"toggle_content_warning": "Chọn nội dung ẩn",
"preview_image": "Xem trước hình ảnh"
},
"segmented_control": {
"previous_section": "Tới phần trước",
"next_section": "Tới phần tiếp theo"
}
},
"status": {
"user_reblogged": "%s đăng lại",
"user_replied_to": "Trả lời %s",
"show_post": "Xem tút",
"show_user_profile": "Xem trang hồ sơ",
"content_warning": "Nội dung ẩn",
"media_content_warning": "Nhấn để hiển thị",
"tap_to_reveal": "Nhấn để hiển thị",
"poll": {
"vote": "Bình chọn",
"closed": "Kết thúc"
},
"actions": {
"reply": "Trả lời",
"reblog": "Đăng lại",
"unreblog": "Hủy đăng lại",
"favorite": "Thích",
"unfavorite": "Bỏ thích",
"menu": "Menu",
"hide": "Ẩn",
"show_image": "Hiển thị hình ảnh",
"show_gif": "Hiển thị GIF",
"show_video_player": "Hiện trình phát video",
"tap_then_hold_to_show_menu": "Nhấn giữ để hiện menu"
},
"tag": {
"url": "URL",
"mention": "Nhắc đến",
"link": "Liên kết",
"hashtag": "Hashtag",
"email": "Email",
"emoji": "Emoji"
},
"visibility": {
"unlisted": "Ai cũng thấy tút này nhưng không hiện trên bảng tin máy chủ.",
"private": "Chỉ người theo dõi của họ có thể thấy tút này.",
"private_from_me": "Chỉ người theo dõi tôi có thể thấy tút này.",
"direct": "Chỉ người được nhắc đến có thể thấy tút."
}
},
"friendship": {
"follow": "Theo dõi",
"following": "Đang theo dõi",
"request": "Yêu cầu",
"pending": "Đang chờ",
"block": "Chặn",
"block_user": "Chặn %s",
"block_domain": "Chặn %s",
"unblock": "Bỏ chặn",
"unblock_user": "Bỏ chặn %s",
"blocked": "Đã chặn",
"mute": "Ẩn",
"mute_user": "Ẩn %s",
"unmute": "Bỏ ẩn",
"unmute_user": "Bỏ ẩn %s",
"muted": "Đã ẩn",
"edit_info": "Chỉnh sửa"
},
"timeline": {
"filtered": "Bộ lọc",
"timestamp": {
"now": "Vừa xong"
},
"loader": {
"load_missing_posts": "Tải tút chưa đọc",
"loading_missing_posts": "Đang tải tút chưa đọc...",
"show_more_replies": "Xem lượt trả lời"
},
"header": {
"no_status_found": "Không tìm thấy tút",
"blocking_warning": "Bạn không thể xem trang người này\ncho tới khi bạn bỏ chặn họ.\nHọ sẽ thấy trang của bạn như thế này.",
"user_blocking_warning": "Bạn không thể xem trang %s\ncho tới khi bạn bỏ chặn họ.\nHọ sẽ thấy trang của bạn như thế này.",
"blocked_warning": "Bạn không thể xem trang người này\ncho tới khi họ bỏ chặn bạn.",
"user_blocked_warning": "Bạn không thể xem trang %s\ncho tới khi họ bỏ chặn bạn.",
"suspended_warning": "Người dùng đã bị vô hiệu hóa.",
"user_suspended_warning": "%s đã bị vô hiệu hóa."
}
}
}
},
"scene": {
"welcome": {
"slogan": "Mạng xã hội\ndo bạn kiểm soát.",
"get_started": "Bắt đầu",
"log_in": "Đăng nhập"
},
"server_picker": {
"title": "Mastodon gồm nhiều cộng đồng với nhiều thành viên khác nhau.",
"subtitle": "Chọn một cộng đồng dựa theo sở thích, tôn giáo, hoặc ý muốn của bạn.",
"subtitle_extend": "Chọn một cộng đồng dựa theo sở thích, tôn giáo, hoặc ý muốn của bạn. Mỗi cộng đồng có thể được vận hành bởi một tổ chức độc lập hoặc một cá nhân.",
"button": {
"category": {
"all": "Toàn bộ",
"all_accessiblity_description": "Phân loại: Toàn bộ",
"academia": "học thuật",
"activism": "hoạt động xã hội",
"food": "ăn uống",
"furry": "furry",
"games": "trò chơi",
"general": "chung",
"journalism": "tin tức",
"lgbt": "lgbt",
"regional": "khu vực",
"art": "nghệ thuật",
"music": "âm nhạc",
"tech": "công nghệ"
},
"see_less": "Ẩn bớt",
"see_more": "Nhiều hơn"
},
"label": {
"language": "NGÔN NGỮ",
"users": "NGƯỜI DÙNG",
"category": "PHÂN LOẠI"
},
"input": {
"placeholder": "Tìm cộng đồng"
},
"empty_state": {
"finding_servers": "Đang tìm máy chủ hoạt động...",
"bad_network": "Đã xảy ra lỗi. Hãy thử lại hoặc kiểm tra kết nối internet của bạn.",
"no_results": "Không có kết quả"
}
},
"register": {
"title": "Hãy để tôi đăng ký trên %s",
"input": {
"avatar": {
"delete": "Xóa"
},
"username": {
"placeholder": "tên người dùng",
"duplicate_prompt": "Tên người dùng đã tồn tại."
},
"display_name": {
"placeholder": "tên hiển thị"
},
"email": {
"placeholder": "email"
},
"password": {
"placeholder": "mật khẩu",
"require": "Mật khẩu phải tối thiểu:",
"character_limit": "8 ký tự",
"accessibility": {
"checked": "đã ổn",
"unchecked": "chưa ổn"
},
"hint": "Mật khẩu của bạn phải dài tối thiểu 8 ký tự"
},
"invite": {
"registration_user_invite_request": "Vì sao bạn muốn tham gia?"
}
},
"error": {
"item": {
"username": "Tên người dùng",
"email": "Email",
"password": "Mật khẩu",
"agreement": "Thoả thuận",
"locale": "Cục bộ",
"reason": "Lý do"
},
"reason": {
"blocked": "%s dùng dịch vụ email bị cấm",
"unreachable": "%s không tồn tại",
"taken": "%s đã tồn tại",
"reserved": "%s là một từ khóa hạn chế",
"accepted": "%s phải được đồng ý",
"blank": "%s là bắt buộc",
"invalid": "%s không hợp lệ",
"too_long": "%s quá dài",
"too_short": "%s quá ngắn",
"inclusion": "%s chứa ký tự không được hỗ trợ"
},
"special": {
"username_invalid": "Tên người dùng chỉ có thể chứa các ký tự chữ và số và dấu gạch dưới",
"username_too_long": "Tên người dùng không thể dài hơn 30 ký tự",
"email_invalid": "Đây không phải là một địa chỉ email khả dụng",
"password_too_short": "Mật khẩu của bạn quá ngắn, phải có ít nhất 8 ký tự"
}
}
},
"server_rules": {
"title": "Quy tắc máy chủ.",
"subtitle": "Được ban hành và áp dụng bởi quản trị viên %s",
"prompt": "Tiếp tục nghĩa là bạn đồng ý điều khoản dịch vụ và chính sách bảo mật của %s.",
"terms_of_service": "điều khoản dịch vụ",
"privacy_policy": "chính sách bảo mật",
"button": {
"confirm": "Tôi đồng ý"
}
},
"confirm_email": {
"title": "Còn điều này nữa.",
"subtitle": "Nhấn vào liên kết chúng tôi gửi qua email để xác thực tài khoản.",
"button": {
"open_email_app": "Mở ứng dụng email",
"resend": "Gửi lại"
},
"dont_receive_email": {
"title": "Kiểm tra email",
"description": "Kiểm tra địa chỉ email của bạn đúng chưa hoặc có bị chuyển vào thư rác.",
"resend_email": "Gửi lại email"
},
"open_email_app": {
"title": "Kiểm tra hộp thư của bạn.",
"description": "Chúng tôi vừa gửi email cho bạn. Kiểm tra thư rác nếu bạn không thấy.",
"mail": "Email",
"open_email_client": "Mở ứng dụng email"
}
},
"home_timeline": {
"title": "Bảng tin",
"navigation_bar_state": {
"offline": "Ngoại tuyến",
"new_posts": "Đọc những tút mới",
"published": "Đã đăng!",
"Publishing": "Đang đăng tút..."
}
},
"suggestion_account": {
"title": "Đề xuất theo dõi",
"follow_explain": "Khi theo dõi ai đó, bạn sẽ thấy tút của họ trong bảng tin."
},
"compose": {
"title": {
"new_post": "Viết tút",
"new_reply": "Viết trả lời"
},
"media_selection": {
"camera": "Chụp ảnh",
"photo_library": "Thư viện hình ảnh",
"browse": "Chọn"
},
"content_input_placeholder": "Cho thế giới biết bạn đang nghĩ gì",
"compose_action": "Đăng",
"replying_to_user": "trả lời đến %s",
"attachment": {
"photo": "ảnh",
"video": "video",
"attachment_broken": "%s này bị lỗi và không thể\ntải lên Mastodon.",
"description_photo": "Mô tả hình ảnh cho người khiếm thị...",
"description_video": "Mô tả video cho người khiếm thị..."
},
"poll": {
"duration_time": "Thời gian: %s",
"thirty_minutes": "30 phút",
"one_hour": "1 giờ",
"six_hours": "6 giờ",
"one_day": "1 ngày",
"three_days": "3 ngày",
"seven_days": "7 ngày",
"option_number": "Lựa chọn %ld"
},
"content_warning": {
"placeholder": "Viết nội dung ẩn của bạn ở đây..."
},
"visibility": {
"public": "Công khai",
"unlisted": "Hạn chế",
"private": "Riêng tư",
"direct": "Chỉ người được nhắc đến"
},
"auto_complete": {
"space_to_add": "Khoảng cách để thêm"
},
"accessibility": {
"append_attachment": "Thêm media",
"append_poll": "Tạo bình chọn",
"remove_poll": "Xóa bình chọn",
"custom_emoji_picker": "Chọn emoji",
"enable_content_warning": "Bật nội dung ẩn",
"disable_content_warning": "Tắt nội dung ẩn",
"post_visibility_menu": "Menu hiển thị tút"
},
"keyboard": {
"discard_post": "Hủy đăng tút",
"publish_post": "Đăng tút",
"toggle_poll": "Mở bình chọn",
"toggle_content_warning": "Mở nội dung ẩn",
"append_attachment_entry": "Thêm media - %s",
"select_visibility_entry": "Thay đổi quyền riêng tư - %s"
}
},
"profile": {
"dashboard": {
"posts": "tút",
"following": "theo dõi",
"followers": "người theo dõi"
},
"fields": {
"add_row": "Thêm hàng",
"placeholder": {
"label": "Nhãn",
"content": "Nội dung"
}
},
"segmented_control": {
"posts": "Tút",
"replies": "Trả lời",
"posts_and_replies": "Tút và trả lời",
"media": "Media",
"about": "Giới thiệu"
},
"relationship_action_alert": {
"confirm_mute_user": {
"title": "Ẩn người dùng",
"message": "Xác nhận ẩn %s"
},
"confirm_unmute_user": {
"title": "Bỏ ẩn người dùng",
"message": "Xác nhận bỏ ẩn %s"
},
"confirm_block_user": {
"title": "Chặn người dùng",
"message": "Xác nhận chặn %s"
},
"confirm_unblock_user": {
"title": "Bỏ chặn người dùng",
"message": "Xác nhận bỏ chặn %s"
}
},
"accessibility": {
"show_avatar_image": "Hiển thị ảnh đại diện",
"edit_avatar_image": "Sửa ảnh đại diện",
"show_banner_image": "Hiển thị ảnh bìa",
"double_tap_to_open_the_list": "Nhấn hai lần để mở danh sách"
}
},
"follower": {
"footer": "Không hiển thị người theo dõi từ máy chủ khác."
},
"following": {
"footer": "Không hiển thị người bạn theo dõi từ máy chủ khác."
},
"search": {
"title": "Tìm kiếm",
"search_bar": {
"placeholder": "Tìm hashtag và người dùng",
"cancel": "Hủy bỏ"
},
"recommend": {
"button_text": "Xem tất cả",
"hash_tag": {
"title": "Xu hướng trên Mastodon",
"description": "Những hashtag đang được sử dụng nhiều nhất",
"people_talking": "%s người đang thảo luận"
},
"accounts": {
"title": "Những người bạn có thể thích",
"description": "Bạn có thể muốn theo dõi những người này",
"follow": "Theo dõi"
}
},
"searching": {
"segment": {
"all": "Tất cả",
"people": "Người dùng",
"hashtags": "Hashtag",
"posts": "Tút"
},
"empty_state": {
"no_results": "Không có kết quả"
},
"recent_search": "Tìm kiếm gần đây",
"clear": "Xóa"
}
},
"discovery": {
"tabs": {
"posts": "Tút",
"hashtags": "Hashtag",
"news": "Tin tức",
"for_you": "Dành cho bạn"
}
},
"favorite": {
"title": "Lượt thích"
},
"notification": {
"title": {
"Everything": "Mọi thứ",
"Mentions": "Lượt nhắc đến"
},
"notification_description": {
"followed_you": "đã theo dõi bạn",
"favorited_your_post": "thích tút của bạn",
"reblogged_your_post": "đăng lại tút của bạn",
"mentioned_you": "nhắc đến bạn",
"request_to_follow_you": "yêu cầu theo dõi bạn",
"poll_has_ended": "cuộc bình chọn đã kết thúc"
},
"keyobard": {
"show_everything": "Hiện mọi thứ",
"show_mentions": "Hiện lượt nhắc"
}
},
"thread": {
"back_title": "Tút",
"title": "Tút của %s"
},
"settings": {
"title": "Cài đặt",
"section": {
"appearance": {
"title": "Giao diện",
"automatic": "Tự động",
"light": "Sáng",
"dark": "Tối"
},
"look_and_feel": {
"title": "Giao diện",
"use_system": "Mặc định hệ thống",
"really_dark": "Tối Mạnh",
"sorta_dark": "Tối Nhẹ",
"light": "Sáng"
},
"notifications": {
"title": "Thông báo",
"favorites": "Thích tút của tôi",
"follows": "Theo dõi tôi",
"boosts": "Đăng lại tút của tôi",
"mentions": "Nhắc đến tôi",
"trigger": {
"anyone": "ai đó",
"follower": "người theo dõi",
"follow": "người tôi theo dõi",
"noone": "không một ai",
"title": "Thông báo khi"
}
},
"preference": {
"title": "Chung",
"true_black_dark_mode": "Chế độ tối chân thật",
"disable_avatar_animation": "Tắt ảnh đại diện GIF",
"disable_emoji_animation": "Tắt emoji dạng GIF",
"using_default_browser": "Dùng trình duyệt mặc định",
"open_links_in_mastodon": "Mở liên kết trong Mastodon"
},
"boring_zone": {
"title": "Nhàm chán",
"account_settings": "Cài đặt tài khoản",
"terms": "Điều khoản dịch vụ",
"privacy": "Chính sách bảo mật"
},
"spicy_zone": {
"title": "Thú vị",
"clear": "Xóa bộ nhớ đệm",
"signout": "Đăng xuất"
}
},
"footer": {
"mastodon_description": "Mastodon là phần mềm mã nguồn mở. Bạn có thể báo lỗi trên GitHub tại %s (%s)"
},
"keyboard": {
"close_settings_window": "Đóng cửa sổ cài đặt"
}
},
"report": {
"title_report": "Báo cáo",
"title": "Báo cáo %s",
"step1": "Bước 1 trong 2",
"step2": "Bước 2 trong 2",
"content1": "Bạn muốn thêm tút nào vào báo cáo nữa không?",
"content2": "Kiểm duyệt viên cần biết gì về báo cáo này?",
"report_sent_title": "Cảm ơn đã báo cáo, chúng tôi sẽ xem xét kỹ.",
"send": "Gửi báo cáo",
"skip_to_send": "Gửi không ghi chú",
"text_placeholder": "Nhập hoặc bổ sung chú thích",
"reported": "ĐÃ BÁO CÁO"
},
"preview": {
"keyboard": {
"close_preview": "Đóng xem trước",
"show_next": "Hiện kế tiếp",
"show_previous": "Hiện trước đó"
}
},
"account_list": {
"tab_bar_hint": "Đang dùng tài khoản: %s. Nhấn hai lần và giữ để đổi sang tài khoản khác",
"dismiss_account_switcher": "Bỏ qua chuyển đổi tài khoản",
"add_account": "Thêm tài khoản"
},
"wizard": {
"new_in_mastodon": "Mới trên Mastodon",
"multiple_account_switch_intro_description": "Chuyển đổi giữa nhiều tài khoản bằng cách đè giữ nút tài khoản.",
"accessibility_hint": "Nhấn hai lần để bỏ qua"
}
}
}

View File

@ -0,0 +1,6 @@
{
"NSCameraUsageDescription": "Được sử dụng để chụp ảnh cho tút",
"NSPhotoLibraryAddUsageDescription": "Được sử dụng để lưu ảnh vào Thư viện ảnh",
"NewPostShortcutItemTitle": "Viết tút",
"SearchShortcutItemTitle": "Tìm kiếm"
}

View File

@ -100,6 +100,20 @@
<string>%ld 条转发</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld 条回复</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "查看用户个人资料",
"content_warning": "内容警告",
"media_content_warning": "点击任意位置显示",
"tap_to_reveal": "点击以显示",
"poll": {
"vote": "投票",
"closed": "已关闭"
@ -141,7 +142,11 @@
"favorite": "喜欢",
"unfavorite": "取消喜欢",
"menu": "菜单",
"hide": "隐藏"
"hide": "隐藏",
"show_image": "显示图片",
"show_gif": "显示 GIF",
"show_video_player": "显示视频播放器",
"tap_then_hold_to_show_menu": "长按以显示菜单"
},
"tag": {
"url": "URL",
@ -440,6 +445,12 @@
"title": "解除屏蔽帐户",
"message": "确认取消屏蔽 %s"
}
},
"accessibility": {
"show_avatar_image": "显示头像",
"edit_avatar_image": "编辑头像",
"show_banner_image": "显示顶部横幅图片",
"double_tap_to_open_the_list": "双击打开列表"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "清除"
}
},
"discovery": {
"tabs": {
"posts": "帖子",
"hashtags": "话题",
"news": "新闻",
"for_you": "为你推荐"
}
},
"favorite": {
"title": "你的喜欢"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "纯黑模式",
"disable_avatar_animation": "禁用动画头像",
"disable_emoji_animation": "禁用动画表情",
"using_default_browser": "使用默认浏览器打开链接"
"using_default_browser": "使用默认浏览器打开链接",
"open_links_in_mastodon": "在 Mastodon 中打开链接"
},
"boring_zone": {
"title": "The Boring Zone",

View File

@ -100,6 +100,20 @@
<string>%ld reblogs</string>
</dict>
</dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld replies</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Show user profile",
"content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": {
"vote": "投票",
"closed": "Closed"
@ -141,7 +142,11 @@
"favorite": "Favorite",
"unfavorite": "Unfavorite",
"menu": "Menu",
"hide": "Hide"
"hide": "Hide",
"show_image": "Show image",
"show_gif": "Show GIF",
"show_video_player": "Show video player",
"tap_then_hold_to_show_menu": "Tap then hold to show menu"
},
"tag": {
"url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
},
"accessibility": {
"show_avatar_image": "Show avatar image",
"edit_avatar_image": "Edit avatar image",
"show_banner_image": "Show banner image",
"double_tap_to_open_the_list": "Double tap to open the list"
}
},
"follower": {
@ -481,6 +492,14 @@
"clear": "Clear"
}
},
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": {
"title": "Your Favorites"
},
@ -541,7 +560,8 @@
"true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars",
"disable_emoji_animation": "Disable animated emojis",
"using_default_browser": "Use default browser to open links"
"using_default_browser": "Use default browser to open links",
"open_links_in_mastodon": "Open links in Mastodon"
},
"boring_zone": {
"title": "The Boring Zone",

View File

@ -129,6 +129,7 @@
"show_post": "Show Post",
"show_user_profile": "Show user profile",
"content_warning": "Content Warning",
"sensitive_content": "Sensitive Content",
"media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": {
@ -492,6 +493,15 @@
"clear": "Clear"
}
},
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
},
"intro": "These are the posts gaining traction in your corner of Mastodon."
},
"favorite": {
"title": "Your Favorites"
},

View File

@ -31,7 +31,6 @@
2D206B9225F60EA700143C56 /* UIControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D206B9125F60EA700143C56 /* UIControl.swift */; };
2D24E1232626ED9D00A59D4F /* UIView+Gesture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D24E1222626ED9D00A59D4F /* UIView+Gesture.swift */; };
2D32EAAC25CB96DC00C9ED86 /* TimelineMiddleLoaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D32EAAB25CB96DC00C9ED86 /* TimelineMiddleLoaderTableViewCell.swift */; };
2D32EABA25CB9B0500C9ED86 /* UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D32EAB925CB9B0500C9ED86 /* UIView.swift */; };
2D34D9D126148D9E0081BFC0 /* APIService+Recommend.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D34D9D026148D9E0081BFC0 /* APIService+Recommend.swift */; };
2D34D9DB261494120081BFC0 /* APIService+Search.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D34D9DA261494120081BFC0 /* APIService+Search.swift */; };
2D35237A26256D920031AF25 /* NotificationSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D35237926256D920031AF25 /* NotificationSection.swift */; };
@ -116,9 +115,7 @@
DB0009A626AEE5DC009B9D2D /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = DB0009A926AEE5DC009B9D2D /* Intents.intentdefinition */; settings = {ATTRIBUTES = (no_codegen, ); }; };
DB0009A726AEE5DC009B9D2D /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = DB0009A926AEE5DC009B9D2D /* Intents.intentdefinition */; };
DB00CA972632DDB600A54956 /* CommonOSLog in Frameworks */ = {isa = PBXBuildFile; productRef = DB00CA962632DDB600A54956 /* CommonOSLog */; };
DB0140BD25C40D7500F9F3CF /* CommonOSLog in Frameworks */ = {isa = PBXBuildFile; productRef = DB0140BC25C40D7500F9F3CF /* CommonOSLog */; };
DB0140CF25C42AEE00F9F3CF /* OSLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0140CE25C42AEE00F9F3CF /* OSLog.swift */; };
DB01E23326A98F0900C3965B /* MastodonMeta in Frameworks */ = {isa = PBXBuildFile; productRef = DB01E23226A98F0900C3965B /* MastodonMeta */; };
DB01E23526A98F0900C3965B /* MetaTextKit in Frameworks */ = {isa = PBXBuildFile; productRef = DB01E23426A98F0900C3965B /* MetaTextKit */; };
DB023D26279FFB0A005AC798 /* ShareActivityProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB023D25279FFB0A005AC798 /* ShareActivityProvider.swift */; };
DB023D2827A0FABD005AC798 /* NotificationTableViewCellDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB023D2727A0FABD005AC798 /* NotificationTableViewCellDelegate.swift */; };
@ -131,6 +128,8 @@
DB029E95266A20430062874E /* MastodonAuthenticationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB029E94266A20430062874E /* MastodonAuthenticationController.swift */; };
DB02CDAB26256A9500D0A2AF /* ThreadReplyLoaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB02CDAA26256A9500D0A2AF /* ThreadReplyLoaderTableViewCell.swift */; };
DB02CDBF2625AE5000D0A2AF /* AdaptiveUserInterfaceStyleBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB02CDBE2625AE5000D0A2AF /* AdaptiveUserInterfaceStyleBarButtonItem.swift */; };
DB02EA0B280D180D00E751C5 /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = DB02EA0A280D180D00E751C5 /* KeychainAccess */; };
DB02EA0D280D184B00E751C5 /* CommonOSLog in Frameworks */ = {isa = PBXBuildFile; productRef = DB02EA0C280D184B00E751C5 /* CommonOSLog */; };
DB03A793272A7E5700EE37C5 /* SidebarListHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB03A792272A7E5700EE37C5 /* SidebarListHeaderView.swift */; };
DB03A795272A981400EE37C5 /* ContentSplitViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB03A794272A981400EE37C5 /* ContentSplitViewController.swift */; };
DB03F7F32689AEA3007B274C /* ComposeRepliedToStatusContentTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB03F7F22689AEA3007B274C /* ComposeRepliedToStatusContentTableViewCell.swift */; };
@ -149,6 +148,7 @@
DB0618072785A8880030EE79 /* MastodonRegisterViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0618062785A8880030EE79 /* MastodonRegisterViewModel+Diffable.swift */; };
DB06180A2785B2AB0030EE79 /* MastodonRegisterAvatarTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0618092785B2AB0030EE79 /* MastodonRegisterAvatarTableViewCell.swift */; };
DB084B5725CBC56C00F898ED /* Status.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB084B5625CBC56C00F898ED /* Status.swift */; };
DB0A322E280EE9FD001729D2 /* DiscoveryIntroBannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0A322D280EE9FD001729D2 /* DiscoveryIntroBannerView.swift */; };
DB0AC6FC25CD02E600D75117 /* APIService+Instance.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0AC6FB25CD02E600D75117 /* APIService+Instance.swift */; };
DB0C946526A6FD4D0088FB11 /* AlamofireImage in Frameworks */ = {isa = PBXBuildFile; productRef = DB0C946426A6FD4D0088FB11 /* AlamofireImage */; };
DB0C947726A7FE840088FB11 /* NotificationAvatarButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0C947626A7FE840088FB11 /* NotificationAvatarButton.swift */; };
@ -215,7 +215,6 @@
DB336F3F278E668C0031E64B /* StatusTableViewCell+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB336F3E278E668C0031E64B /* StatusTableViewCell+ViewModel.swift */; };
DB336F41278E68480031E64B /* StatusView+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB336F40278E68480031E64B /* StatusView+Configuration.swift */; };
DB336F43278EB1690031E64B /* MediaView+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB336F42278EB1680031E64B /* MediaView+Configuration.swift */; };
DB35FC1F2612F1D9006193C9 /* ProfileRelationshipActionButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB35FC1E2612F1D9006193C9 /* ProfileRelationshipActionButton.swift */; };
DB36679D268AB91B0027D07F /* ComposeStatusAttachmentTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB36679C268AB91B0027D07F /* ComposeStatusAttachmentTableViewCell.swift */; };
DB36679F268ABAF20027D07F /* ComposeStatusAttachmentSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB36679E268ABAF20027D07F /* ComposeStatusAttachmentSection.swift */; };
DB3667A1268ABB2E0027D07F /* ComposeStatusAttachmentItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB3667A0268ABB2E0027D07F /* ComposeStatusAttachmentItem.swift */; };
@ -223,6 +222,19 @@
DB3667A6268AE2620027D07F /* ComposeStatusPollSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB3667A5268AE2620027D07F /* ComposeStatusPollSection.swift */; };
DB3667A8268AE2900027D07F /* ComposeStatusPollItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB3667A7268AE2900027D07F /* ComposeStatusPollItem.swift */; };
DB3D0FF325BAA61700EAA174 /* AlamofireImage in Frameworks */ = {isa = PBXBuildFile; productRef = DB3D0FF225BAA61700EAA174 /* AlamofireImage */; };
DB3E6FDD2806A40F00B035AE /* DiscoveryHashtagsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB3E6FDC2806A40F00B035AE /* DiscoveryHashtagsViewController.swift */; };
DB3E6FE02806A4ED00B035AE /* DiscoveryHashtagsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB3E6FDF2806A4ED00B035AE /* DiscoveryHashtagsViewModel.swift */; };
DB3E6FE22806A50100B035AE /* DiscoveryHashtagsViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB3E6FE12806A50100B035AE /* DiscoveryHashtagsViewModel+Diffable.swift */; };
DB3E6FE42806A5B800B035AE /* DiscoverySection.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB3E6FE32806A5B800B035AE /* DiscoverySection.swift */; };
DB3E6FE72806A7A200B035AE /* DiscoveryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB3E6FE62806A7A200B035AE /* DiscoveryItem.swift */; };
DB3E6FE92806BD2200B035AE /* ThemeService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB3E6FE82806BD2200B035AE /* ThemeService.swift */; };
DB3E6FEC2806D7F100B035AE /* DiscoveryNewsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB3E6FEB2806D7F100B035AE /* DiscoveryNewsViewController.swift */; };
DB3E6FEF2806D82600B035AE /* DiscoveryNewsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB3E6FEE2806D82600B035AE /* DiscoveryNewsViewModel.swift */; };
DB3E6FF12806D96900B035AE /* DiscoveryNewsViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB3E6FF02806D96900B035AE /* DiscoveryNewsViewModel+Diffable.swift */; };
DB3E6FF32806D97400B035AE /* DiscoveryNewsViewModel+State.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB3E6FF22806D97400B035AE /* DiscoveryNewsViewModel+State.swift */; };
DB3E6FF52807C40300B035AE /* DiscoveryForYouViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB3E6FF42807C40300B035AE /* DiscoveryForYouViewController.swift */; };
DB3E6FF82807C45300B035AE /* DiscoveryForYouViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB3E6FF72807C45300B035AE /* DiscoveryForYouViewModel.swift */; };
DB3E6FFA2807C47900B035AE /* DiscoveryForYouViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB3E6FF92807C47900B035AE /* DiscoveryForYouViewModel+Diffable.swift */; };
DB427DD625BAA00100D1B89D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB427DD525BAA00100D1B89D /* AppDelegate.swift */; };
DB427DD825BAA00100D1B89D /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB427DD725BAA00100D1B89D /* SceneDelegate.swift */; };
DB427DDD25BAA00100D1B89D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DB427DDB25BAA00100D1B89D /* Main.storyboard */; };
@ -336,7 +348,6 @@
DB6804872637CD4C00430867 /* AppShared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DB68047F2637CD4C00430867 /* AppShared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
DB6804D12637CE4700430867 /* UserDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6804D02637CE4700430867 /* UserDefaults.swift */; };
DB6804FD2637CFEC00430867 /* AppSecret.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6804FC2637CFEC00430867 /* AppSecret.swift */; };
DB6805102637D0F800430867 /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = DB68050F2637D0F800430867 /* KeychainAccess */; };
DB68586425E619B700F0A850 /* NSKeyValueObservation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB68586325E619B700F0A850 /* NSKeyValueObservation.swift */; };
DB68A04A25E9027700CFDF14 /* AdaptiveStatusBarStyleNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB68A04925E9027700CFDF14 /* AdaptiveStatusBarStyleNavigationController.swift */; };
DB68A05D25E9055900CFDF14 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = DB68A05C25E9055900CFDF14 /* Settings.bundle */; };
@ -361,7 +372,6 @@
DB6B7500272FF73800C70B6E /* UserTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B74FF272FF73800C70B6E /* UserTableViewCell.swift */; };
DB6B750427300B4000C70B6E /* TimelineFooterTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B750327300B4000C70B6E /* TimelineFooterTableViewCell.swift */; };
DB6C8C0F25F0A6AE00AAA452 /* Mastodon+Entity+Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6C8C0E25F0A6AE00AAA452 /* Mastodon+Entity+Error.swift */; };
DB6D1B3D2636857500ACB481 /* AppearancePreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6D1B3C2636857500ACB481 /* AppearancePreference.swift */; };
DB6D1B44263691CF00ACB481 /* Mastodon+API+Subscriptions+Policy.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6D1B43263691CF00ACB481 /* Mastodon+API+Subscriptions+Policy.swift */; };
DB6D9F3526351B7A008423CD /* NotificationService+Decrypt.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6D9F3426351B7A008423CD /* NotificationService+Decrypt.swift */; };
DB6D9F42263527CE008423CD /* AlamofireImage in Frameworks */ = {isa = PBXBuildFile; productRef = DB6D9F41263527CE008423CD /* AlamofireImage */; };
@ -376,8 +386,6 @@
DB6D9F9726367249008423CD /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6D9F9626367249008423CD /* SettingsViewController.swift */; };
DB6F5E35264E78E7009108F4 /* AutoCompleteViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6F5E34264E78E7009108F4 /* AutoCompleteViewController.swift */; };
DB6F5E38264E994A009108F4 /* AutoCompleteTopChevronView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6F5E37264E994A009108F4 /* AutoCompleteTopChevronView.swift */; };
DB71C7CB271D5A0300BE3819 /* LineChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB71C7CA271D5A0300BE3819 /* LineChartView.swift */; };
DB71C7CD271D7F4300BE3819 /* CurveAlgorithm.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB71C7CC271D7F4300BE3819 /* CurveAlgorithm.swift */; };
DB71FD5225F8CCAA00512AE1 /* APIService+Status.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB71FD5125F8CCAA00512AE1 /* APIService+Status.swift */; };
DB72601C25E36A2100235243 /* MastodonServerRulesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB72601B25E36A2100235243 /* MastodonServerRulesViewController.swift */; };
DB72602725E36A6F00235243 /* MastodonServerRulesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB72602625E36A6F00235243 /* MastodonServerRulesViewModel.swift */; };
@ -495,8 +503,6 @@
DBB525562611EDCA002F1F29 /* UserTimelineViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB525552611EDCA002F1F29 /* UserTimelineViewModel.swift */; };
DBB5255E2611F07A002F1F29 /* ProfileViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB5255D2611F07A002F1F29 /* ProfileViewModel.swift */; };
DBB525642612C988002F1F29 /* MeProfileViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB525632612C988002F1F29 /* MeProfileViewModel.swift */; };
DBB5256E2612D5A1002F1F29 /* ProfileStatusDashboardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB5256D2612D5A1002F1F29 /* ProfileStatusDashboardView.swift */; };
DBB525852612D6DD002F1F29 /* ProfileStatusDashboardMeterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB525842612D6DD002F1F29 /* ProfileStatusDashboardMeterView.swift */; };
DBB8AB4626AECDE200F6D281 /* SendPostIntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB8AB4526AECDE200F6D281 /* SendPostIntentHandler.swift */; };
DBB8AB4826AED09C00F6D281 /* MastodonSDK in Frameworks */ = {isa = PBXBuildFile; productRef = DBB8AB4726AED09C00F6D281 /* MastodonSDK */; };
DBB8AB4A26AED0B500F6D281 /* APIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB8AB4926AED0B500F6D281 /* APIService.swift */; };
@ -508,19 +514,9 @@
DBBC24AA26A5301B00398BB9 /* MastodonSDK in Frameworks */ = {isa = PBXBuildFile; productRef = DBBC24A926A5301B00398BB9 /* MastodonSDK */; };
DBBC24AC26A53D9300398BB9 /* ComposeStatusContentTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24AB26A53D9300398BB9 /* ComposeStatusContentTableViewCell.swift */; };
DBBC24B826A5421800398BB9 /* CommonOSLog in Frameworks */ = {isa = PBXBuildFile; productRef = DBBC24B726A5421800398BB9 /* CommonOSLog */; };
DBBC24BC26A542F500398BB9 /* ThemeService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24BB26A542F500398BB9 /* ThemeService.swift */; };
DBBC24C026A5443100398BB9 /* MastodonTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24BE26A5443100398BB9 /* MastodonTheme.swift */; };
DBBC24C126A5443100398BB9 /* SystemTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24BF26A5443100398BB9 /* SystemTheme.swift */; };
DBBC24C426A544B900398BB9 /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24C326A544B900398BB9 /* Theme.swift */; };
DBBC24C626A5456000398BB9 /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24C326A544B900398BB9 /* Theme.swift */; };
DBBC24C726A5456400398BB9 /* SystemTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24BF26A5443100398BB9 /* SystemTheme.swift */; };
DBBC24C826A5456400398BB9 /* ThemeService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24BB26A542F500398BB9 /* ThemeService.swift */; };
DBBC24C926A5456400398BB9 /* MastodonTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24BE26A5443100398BB9 /* MastodonTheme.swift */; };
DBBC24CB26A546C000398BB9 /* ThemePreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD376AB2692ECDB007FEC24 /* ThemePreference.swift */; };
DBBC24CF26A547AE00398BB9 /* ThemeService+Appearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24CE26A547AE00398BB9 /* ThemeService+Appearance.swift */; };
DBBC24D126A5484F00398BB9 /* UITextView+Placeholder in Frameworks */ = {isa = PBXBuildFile; productRef = DBBC24D026A5484F00398BB9 /* UITextView+Placeholder */; };
DBBC24DC26A54BCB00398BB9 /* MastodonRegex.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24D626A54BCB00398BB9 /* MastodonRegex.swift */; };
DBBC24DE26A54BCB00398BB9 /* MastodonMetricFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24D826A54BCB00398BB9 /* MastodonMetricFormatter.swift */; };
DBBE1B4525F3474B0081417A /* MastodonPickServerAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBE1B4425F3474B0081417A /* MastodonPickServerAppearance.swift */; };
DBBF1DBF2652401B00E5B703 /* AutoCompleteViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBF1DBE2652401B00E5B703 /* AutoCompleteViewModel.swift */; };
DBBF1DC226524D2900E5B703 /* AutoCompleteTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBF1DC126524D2900E5B703 /* AutoCompleteTableViewCell.swift */; };
@ -550,6 +546,13 @@
DBD5B1F827BCFD9D00BD6B38 /* DataSourceProvider+TableViewControllerNavigateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD5B1F727BCFD9D00BD6B38 /* DataSourceProvider+TableViewControllerNavigateable.swift */; };
DBD5B1FA27BD013700BD6B38 /* DataSourceProvider+StatusTableViewControllerNavigateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD5B1F927BD013700BD6B38 /* DataSourceProvider+StatusTableViewControllerNavigateable.swift */; };
DBD9149025DF6D8D00903DFD /* APIService+Onboarding.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD9148F25DF6D8D00903DFD /* APIService+Onboarding.swift */; };
DBDFF1902805543100557A48 /* DiscoveryPostsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBDFF18F2805543100557A48 /* DiscoveryPostsViewController.swift */; };
DBDFF1932805554900557A48 /* DiscoveryPostsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBDFF1922805554900557A48 /* DiscoveryPostsViewModel.swift */; };
DBDFF1952805561700557A48 /* DiscoveryPostsViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBDFF1942805561700557A48 /* DiscoveryPostsViewModel+Diffable.swift */; };
DBDFF197280556D900557A48 /* DiscoveryPostsViewModel+State.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBDFF196280556D900557A48 /* DiscoveryPostsViewModel+State.swift */; };
DBDFF19A28055A1400557A48 /* DiscoveryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBDFF19928055A1400557A48 /* DiscoveryViewController.swift */; };
DBDFF19C28055BD600557A48 /* DiscoveryViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBDFF19B28055BD600557A48 /* DiscoveryViewModel.swift */; };
DBDFF19E2805703700557A48 /* DiscoveryPostsViewController+DataSourceProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBDFF19D2805703700557A48 /* DiscoveryPostsViewController+DataSourceProvider.swift */; };
DBE0821525CD382600FD6BBD /* MastodonRegisterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE0821425CD382600FD6BBD /* MastodonRegisterViewController.swift */; };
DBE0822425CD3F1E00FD6BBD /* MastodonRegisterViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE0822325CD3F1E00FD6BBD /* MastodonRegisterViewModel.swift */; };
DBE3CA6827A39CAB00AFE27B /* AppShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB68047F2637CD4C00430867 /* AppShared.framework */; };
@ -589,7 +592,6 @@
DBFEF05F26A57715006D7ED1 /* StatusAuthorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFEF05926A576EE006D7ED1 /* StatusAuthorView.swift */; };
DBFEF06026A57715006D7ED1 /* StatusAttachmentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFEF05A26A576EE006D7ED1 /* StatusAttachmentView.swift */; };
DBFEF06326A577F2006D7ED1 /* StatusAttachmentViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFEF06226A577F2006D7ED1 /* StatusAttachmentViewModel.swift */; };
DBFEF06926A67E45006D7ED1 /* AppearancePreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6D1B3C2636857500ACB481 /* AppearancePreference.swift */; };
DBFEF06D26A67FB7006D7ED1 /* StatusAttachmentViewModel+UploadState.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFEF06C26A67FB7006D7ED1 /* StatusAttachmentViewModel+UploadState.swift */; };
DBFEF06F26A690C4006D7ED1 /* APIService+APIError.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98337E25C9452D00AD9700 /* APIService+APIError.swift */; };
DBFEF07326A6913D006D7ED1 /* APIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFEF07226A6913D006D7ED1 /* APIService.swift */; };
@ -728,7 +730,6 @@
2D206B9125F60EA700143C56 /* UIControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIControl.swift; sourceTree = "<group>"; };
2D24E1222626ED9D00A59D4F /* UIView+Gesture.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+Gesture.swift"; sourceTree = "<group>"; };
2D32EAAB25CB96DC00C9ED86 /* TimelineMiddleLoaderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineMiddleLoaderTableViewCell.swift; sourceTree = "<group>"; };
2D32EAB925CB9B0500C9ED86 /* UIView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIView.swift; sourceTree = "<group>"; };
2D34D9D026148D9E0081BFC0 /* APIService+Recommend.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Recommend.swift"; sourceTree = "<group>"; };
2D34D9DA261494120081BFC0 /* APIService+Search.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Search.swift"; sourceTree = "<group>"; };
2D35237926256D920031AF25 /* NotificationSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationSection.swift; sourceTree = "<group>"; };
@ -870,6 +871,7 @@
DB0618062785A8880030EE79 /* MastodonRegisterViewModel+Diffable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MastodonRegisterViewModel+Diffable.swift"; sourceTree = "<group>"; };
DB0618092785B2AB0030EE79 /* MastodonRegisterAvatarTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonRegisterAvatarTableViewCell.swift; sourceTree = "<group>"; };
DB084B5625CBC56C00F898ED /* Status.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Status.swift; sourceTree = "<group>"; };
DB0A322D280EE9FD001729D2 /* DiscoveryIntroBannerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoveryIntroBannerView.swift; sourceTree = "<group>"; };
DB0AC6FB25CD02E600D75117 /* APIService+Instance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Instance.swift"; sourceTree = "<group>"; };
DB0C947626A7FE840088FB11 /* NotificationAvatarButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationAvatarButton.swift; sourceTree = "<group>"; };
DB0EF72A26FDB1D200347686 /* SidebarListCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarListCollectionViewCell.swift; sourceTree = "<group>"; };
@ -941,7 +943,6 @@
DB336F3E278E668C0031E64B /* StatusTableViewCell+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "StatusTableViewCell+ViewModel.swift"; sourceTree = "<group>"; };
DB336F40278E68480031E64B /* StatusView+Configuration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "StatusView+Configuration.swift"; sourceTree = "<group>"; };
DB336F42278EB1680031E64B /* MediaView+Configuration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MediaView+Configuration.swift"; sourceTree = "<group>"; };
DB35FC1E2612F1D9006193C9 /* ProfileRelationshipActionButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileRelationshipActionButton.swift; sourceTree = "<group>"; };
DB36679C268AB91B0027D07F /* ComposeStatusAttachmentTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeStatusAttachmentTableViewCell.swift; sourceTree = "<group>"; };
DB36679E268ABAF20027D07F /* ComposeStatusAttachmentSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeStatusAttachmentSection.swift; sourceTree = "<group>"; };
DB3667A0268ABB2E0027D07F /* ComposeStatusAttachmentItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeStatusAttachmentItem.swift; sourceTree = "<group>"; };
@ -949,6 +950,19 @@
DB3667A5268AE2620027D07F /* ComposeStatusPollSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeStatusPollSection.swift; sourceTree = "<group>"; };
DB3667A7268AE2900027D07F /* ComposeStatusPollItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeStatusPollItem.swift; sourceTree = "<group>"; };
DB3D0FED25BAA42200EAA174 /* MastodonSDK */ = {isa = PBXFileReference; lastKnownFileType = folder; path = MastodonSDK; sourceTree = "<group>"; };
DB3E6FDC2806A40F00B035AE /* DiscoveryHashtagsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoveryHashtagsViewController.swift; sourceTree = "<group>"; };
DB3E6FDF2806A4ED00B035AE /* DiscoveryHashtagsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoveryHashtagsViewModel.swift; sourceTree = "<group>"; };
DB3E6FE12806A50100B035AE /* DiscoveryHashtagsViewModel+Diffable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DiscoveryHashtagsViewModel+Diffable.swift"; sourceTree = "<group>"; };
DB3E6FE32806A5B800B035AE /* DiscoverySection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoverySection.swift; sourceTree = "<group>"; };
DB3E6FE62806A7A200B035AE /* DiscoveryItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoveryItem.swift; sourceTree = "<group>"; };
DB3E6FE82806BD2200B035AE /* ThemeService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeService.swift; sourceTree = "<group>"; };
DB3E6FEB2806D7F100B035AE /* DiscoveryNewsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoveryNewsViewController.swift; sourceTree = "<group>"; };
DB3E6FEE2806D82600B035AE /* DiscoveryNewsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoveryNewsViewModel.swift; sourceTree = "<group>"; };
DB3E6FF02806D96900B035AE /* DiscoveryNewsViewModel+Diffable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DiscoveryNewsViewModel+Diffable.swift"; sourceTree = "<group>"; };
DB3E6FF22806D97400B035AE /* DiscoveryNewsViewModel+State.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DiscoveryNewsViewModel+State.swift"; sourceTree = "<group>"; };
DB3E6FF42807C40300B035AE /* DiscoveryForYouViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoveryForYouViewController.swift; sourceTree = "<group>"; };
DB3E6FF72807C45300B035AE /* DiscoveryForYouViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoveryForYouViewModel.swift; sourceTree = "<group>"; };
DB3E6FF92807C47900B035AE /* DiscoveryForYouViewModel+Diffable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DiscoveryForYouViewModel+Diffable.swift"; sourceTree = "<group>"; };
DB427DD225BAA00100D1B89D /* Mastodon.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Mastodon.app; sourceTree = BUILT_PRODUCTS_DIR; };
DB427DD525BAA00100D1B89D /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
DB427DD725BAA00100D1B89D /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
@ -1105,7 +1119,6 @@
DB6B74FF272FF73800C70B6E /* UserTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserTableViewCell.swift; sourceTree = "<group>"; };
DB6B750327300B4000C70B6E /* TimelineFooterTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineFooterTableViewCell.swift; sourceTree = "<group>"; };
DB6C8C0E25F0A6AE00AAA452 /* Mastodon+Entity+Error.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Mastodon+Entity+Error.swift"; sourceTree = "<group>"; };
DB6D1B3C2636857500ACB481 /* AppearancePreference.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppearancePreference.swift; sourceTree = "<group>"; };
DB6D1B43263691CF00ACB481 /* Mastodon+API+Subscriptions+Policy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Mastodon+API+Subscriptions+Policy.swift"; sourceTree = "<group>"; };
DB6D9F3426351B7A008423CD /* NotificationService+Decrypt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NotificationService+Decrypt.swift"; sourceTree = "<group>"; };
DB6D9F4826353FD6008423CD /* Subscription.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Subscription.swift; sourceTree = "<group>"; };
@ -1119,8 +1132,6 @@
DB6D9F9626367249008423CD /* SettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = "<group>"; };
DB6F5E34264E78E7009108F4 /* AutoCompleteViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoCompleteViewController.swift; sourceTree = "<group>"; };
DB6F5E37264E994A009108F4 /* AutoCompleteTopChevronView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoCompleteTopChevronView.swift; sourceTree = "<group>"; };
DB71C7CA271D5A0300BE3819 /* LineChartView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LineChartView.swift; sourceTree = "<group>"; };
DB71C7CC271D7F4300BE3819 /* CurveAlgorithm.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurveAlgorithm.swift; sourceTree = "<group>"; };
DB71FD5125F8CCAA00512AE1 /* APIService+Status.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Status.swift"; sourceTree = "<group>"; };
DB72601B25E36A2100235243 /* MastodonServerRulesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonServerRulesViewController.swift; sourceTree = "<group>"; };
DB72602625E36A6F00235243 /* MastodonServerRulesViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonServerRulesViewModel.swift; sourceTree = "<group>"; };
@ -1249,20 +1260,12 @@
DBB525552611EDCA002F1F29 /* UserTimelineViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserTimelineViewModel.swift; sourceTree = "<group>"; };
DBB5255D2611F07A002F1F29 /* ProfileViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileViewModel.swift; sourceTree = "<group>"; };
DBB525632612C988002F1F29 /* MeProfileViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeProfileViewModel.swift; sourceTree = "<group>"; };
DBB5256D2612D5A1002F1F29 /* ProfileStatusDashboardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileStatusDashboardView.swift; sourceTree = "<group>"; };
DBB525842612D6DD002F1F29 /* ProfileStatusDashboardMeterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileStatusDashboardMeterView.swift; sourceTree = "<group>"; };
DBB8AB4526AECDE200F6D281 /* SendPostIntentHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendPostIntentHandler.swift; sourceTree = "<group>"; };
DBB8AB4926AED0B500F6D281 /* APIService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIService.swift; sourceTree = "<group>"; };
DBB9759B262462E1004620BD /* ThreadMetaView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThreadMetaView.swift; sourceTree = "<group>"; };
DBBC24A726A52F9000398BB9 /* ComposeToolbarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeToolbarView.swift; sourceTree = "<group>"; };
DBBC24AB26A53D9300398BB9 /* ComposeStatusContentTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeStatusContentTableViewCell.swift; sourceTree = "<group>"; };
DBBC24BB26A542F500398BB9 /* ThemeService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeService.swift; sourceTree = "<group>"; };
DBBC24BE26A5443100398BB9 /* MastodonTheme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonTheme.swift; sourceTree = "<group>"; };
DBBC24BF26A5443100398BB9 /* SystemTheme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemTheme.swift; sourceTree = "<group>"; };
DBBC24C326A544B900398BB9 /* Theme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Theme.swift; sourceTree = "<group>"; };
DBBC24CE26A547AE00398BB9 /* ThemeService+Appearance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ThemeService+Appearance.swift"; sourceTree = "<group>"; };
DBBC24D626A54BCB00398BB9 /* MastodonRegex.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MastodonRegex.swift; sourceTree = "<group>"; };
DBBC24D826A54BCB00398BB9 /* MastodonMetricFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MastodonMetricFormatter.swift; sourceTree = "<group>"; };
DBBC50C0278ED49200AF0CC6 /* MastodonAuthenticationBox.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonAuthenticationBox.swift; sourceTree = "<group>"; };
DBBE1B4425F3474B0081417A /* MastodonPickServerAppearance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonPickServerAppearance.swift; sourceTree = "<group>"; };
DBBF1DBE2652401B00E5B703 /* AutoCompleteViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoCompleteViewModel.swift; sourceTree = "<group>"; };
@ -1293,6 +1296,13 @@
DBD5B1F727BCFD9D00BD6B38 /* DataSourceProvider+TableViewControllerNavigateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DataSourceProvider+TableViewControllerNavigateable.swift"; sourceTree = "<group>"; };
DBD5B1F927BD013700BD6B38 /* DataSourceProvider+StatusTableViewControllerNavigateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DataSourceProvider+StatusTableViewControllerNavigateable.swift"; sourceTree = "<group>"; };
DBD9148F25DF6D8D00903DFD /* APIService+Onboarding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Onboarding.swift"; sourceTree = "<group>"; };
DBDFF18F2805543100557A48 /* DiscoveryPostsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoveryPostsViewController.swift; sourceTree = "<group>"; };
DBDFF1922805554900557A48 /* DiscoveryPostsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoveryPostsViewModel.swift; sourceTree = "<group>"; };
DBDFF1942805561700557A48 /* DiscoveryPostsViewModel+Diffable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DiscoveryPostsViewModel+Diffable.swift"; sourceTree = "<group>"; };
DBDFF196280556D900557A48 /* DiscoveryPostsViewModel+State.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DiscoveryPostsViewModel+State.swift"; sourceTree = "<group>"; };
DBDFF19928055A1400557A48 /* DiscoveryViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoveryViewController.swift; sourceTree = "<group>"; };
DBDFF19B28055BD600557A48 /* DiscoveryViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoveryViewModel.swift; sourceTree = "<group>"; };
DBDFF19D2805703700557A48 /* DiscoveryPostsViewController+DataSourceProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DiscoveryPostsViewController+DataSourceProvider.swift"; sourceTree = "<group>"; };
DBE0821425CD382600FD6BBD /* MastodonRegisterViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonRegisterViewController.swift; sourceTree = "<group>"; };
DBE0822325CD3F1E00FD6BBD /* MastodonRegisterViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonRegisterViewModel.swift; sourceTree = "<group>"; };
DBE3CDBA261C427900430CC6 /* TimelineHeaderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineHeaderTableViewCell.swift; sourceTree = "<group>"; };
@ -1317,6 +1327,12 @@
DBF3B7402733EB9400E21627 /* MastodonLocalCode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonLocalCode.swift; sourceTree = "<group>"; };
DBF53F5F25C14E88008AAC7B /* Mastodon.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; name = Mastodon.xctestplan; path = Mastodon/Mastodon.xctestplan; sourceTree = "<group>"; };
DBF53F6025C14E9D008AAC7B /* MastodonSDK.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = MastodonSDK.xctestplan; sourceTree = "<group>"; };
DBF81C7427F68F5A00004A56 /* kab */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = kab; path = kab.lproj/Intents.strings; sourceTree = "<group>"; };
DBF81C7527F68F5A00004A56 /* kab */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = kab; path = kab.lproj/InfoPlist.strings; sourceTree = "<group>"; };
DBF81C7627F68F5A00004A56 /* kab */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = kab; path = kab.lproj/Intents.stringsdict; sourceTree = "<group>"; };
DBF81C7727F6913300004A56 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Intents.strings; sourceTree = "<group>"; };
DBF81C7827F6913300004A56 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/InfoPlist.strings; sourceTree = "<group>"; };
DBF81C7927F6913300004A56 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = vi; path = vi.lproj/Intents.stringsdict; sourceTree = "<group>"; };
DBF8AE13263293E400C9C23C /* NotificationService.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = NotificationService.appex; sourceTree = BUILT_PRODUCTS_DIR; };
DBF8AE15263293E400C9C23C /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = "<group>"; };
DBF8AE17263293E400C9C23C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@ -1357,7 +1373,6 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
DB0140BD25C40D7500F9F3CF /* CommonOSLog in Frameworks */,
DB9A487E2603456B008B817C /* UITextView+Placeholder in Frameworks */,
2D939AC825EE14620076FA61 /* CropViewController in Frameworks */,
DBB525082611EAC0002F1F29 /* Tabman in Frameworks */,
@ -1367,10 +1382,10 @@
DBAC6483267D0B21007FE9FD /* DifferenceKit in Frameworks */,
DB552D4F26BBD10C00E481F6 /* OrderedCollections in Frameworks */,
2D61336925C18A4F00CAE157 /* AlamofireNetworkActivityIndicator in Frameworks */,
DB01E23326A98F0900C3965B /* MastodonMeta in Frameworks */,
DBAC64A1267E6D02007FE9FD /* Fuzi in Frameworks */,
DB3D0FF325BAA61700EAA174 /* AlamofireImage in Frameworks */,
DBAC649E267DFE43007FE9FD /* DiffableDataSources in Frameworks */,
DB02EA0D280D184B00E751C5 /* CommonOSLog in Frameworks */,
2D5981BA25E4D7F8000FB903 /* ThirdPartyMailer in Frameworks */,
87FFDA5D898A5C42ADCB35E7 /* Pods_Mastodon.framework in Frameworks */,
DBF7A0FC26830C33004176A2 /* FPSIndicator in Frameworks */,
@ -1400,7 +1415,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
DB6805102637D0F800430867 /* KeychainAccess in Frameworks */,
DB02EA0B280D180D00E751C5 /* KeychainAccess in Frameworks */,
EE93E8E8F9E0C39EAAEBD92F /* Pods_AppShared.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -1648,7 +1663,6 @@
2D5A3D0125CF8640002347D6 /* Vender */ = {
isa = PBXGroup;
children = (
DB71C7CC271D7F4300BE3819 /* CurveAlgorithm.swift */,
2D5A3D0225CF8742002347D6 /* ControlContainableScrollViews.swift */,
DB51D170262832380062B7A1 /* BlurHashDecode.swift */,
DB51D171262832380062B7A1 /* BlurHashEncode.swift */,
@ -1667,7 +1681,6 @@
DB45FB0425CA87B4005A8AC7 /* APIService */,
DB49A61925FF327D00B98345 /* EmojiService */,
DB9A489B26036E19008B817C /* MastodonAttachmentService */,
DBBC24BD26A5441A00398BB9 /* ThemeService */,
DB45FB0E25CA87D0005A8AC7 /* AuthenticationService.swift */,
2DA6054625F716A2006356F9 /* PlaybackState.swift */,
DBC7A67B260DFADE00E57475 /* StatusPublishService.swift */,
@ -1711,6 +1724,7 @@
DB4F097626A0398000D62E92 /* Compose */,
DB0617F727855B010030EE79 /* Notification */,
DB4F097726A039A200D62E92 /* Search */,
DB3E6FE52806A5BA00B035AE /* Discovery */,
DB0617FA27855B660030EE79 /* Settings */,
DBCBED2226132E1D00B49291 /* FetchedResultsController */,
);
@ -1797,7 +1811,6 @@
isa = PBXGroup;
children = (
2DCB73FC2615C13900EC03D4 /* SearchRecommendCollectionHeader.swift */,
DB71C7CA271D5A0300BE3819 /* LineChartView.swift */,
);
path = View;
sourceTree = "<group>";
@ -2012,6 +2025,14 @@
path = CoreDataStack;
sourceTree = "<group>";
};
DB0A322F280EEA00001729D2 /* View */ = {
isa = PBXGroup;
children = (
DB0A322D280EE9FD001729D2 /* DiscoveryIntroBannerView.swift */,
);
path = View;
sourceTree = "<group>";
};
DB0C947826A7FE950088FB11 /* Button */ = {
isa = PBXGroup;
children = (
@ -2091,6 +2112,54 @@
path = Resources;
sourceTree = "<group>";
};
DB3E6FDE2806A41200B035AE /* Hashtags */ = {
isa = PBXGroup;
children = (
DB3E6FDC2806A40F00B035AE /* DiscoveryHashtagsViewController.swift */,
DB3E6FDF2806A4ED00B035AE /* DiscoveryHashtagsViewModel.swift */,
DB3E6FE12806A50100B035AE /* DiscoveryHashtagsViewModel+Diffable.swift */,
);
path = Hashtags;
sourceTree = "<group>";
};
DB3E6FE52806A5BA00B035AE /* Discovery */ = {
isa = PBXGroup;
children = (
DB3E6FE32806A5B800B035AE /* DiscoverySection.swift */,
DB3E6FE62806A7A200B035AE /* DiscoveryItem.swift */,
);
path = Discovery;
sourceTree = "<group>";
};
DB3E6FEA2806BD2500B035AE /* MastodonUI */ = {
isa = PBXGroup;
children = (
DB3E6FE82806BD2200B035AE /* ThemeService.swift */,
);
path = MastodonUI;
sourceTree = "<group>";
};
DB3E6FED2806D7FC00B035AE /* News */ = {
isa = PBXGroup;
children = (
DB3E6FEB2806D7F100B035AE /* DiscoveryNewsViewController.swift */,
DB3E6FEE2806D82600B035AE /* DiscoveryNewsViewModel.swift */,
DB3E6FF02806D96900B035AE /* DiscoveryNewsViewModel+Diffable.swift */,
DB3E6FF22806D97400B035AE /* DiscoveryNewsViewModel+State.swift */,
);
path = News;
sourceTree = "<group>";
};
DB3E6FF62807C40500B035AE /* ForYou */ = {
isa = PBXGroup;
children = (
DB3E6FF42807C40300B035AE /* DiscoveryForYouViewController.swift */,
DB3E6FF72807C45300B035AE /* DiscoveryForYouViewModel.swift */,
DB3E6FF92807C47900B035AE /* DiscoveryForYouViewModel+Diffable.swift */,
);
path = ForYou;
sourceTree = "<group>";
};
DB427DC925BAA00100D1B89D = {
isa = PBXGroup;
children = (
@ -2322,7 +2391,6 @@
children = (
DBA465942696E387002B41DB /* AppPreference.swift */,
DB647C5826F1EA2700F7F82C /* WizardPreference.swift */,
DB6D1B3C2636857500ACB481 /* AppearancePreference.swift */,
DBE54AC52636C89F004E7C0B /* NotificationPreference.swift */,
DB1D842F26566512000346B3 /* KeyboardPreference.swift */,
DBCBCC0C2680B908000F5B51 /* HomeTimelinePreference.swift */,
@ -2676,6 +2744,7 @@
2DAC9E36262FC20B0062E1A6 /* SuggestionAccount */,
DB9D6C0825E4F5A60051B173 /* Profile */,
DB9D6BEE25E4F5370051B173 /* Search */,
DBDFF1912805544800557A48 /* Discovery */,
5B90C455262599800002E742 /* Settings */,
);
path = Scene;
@ -2685,6 +2754,7 @@
isa = PBXGroup;
children = (
DB084B5125CBC56300F898ED /* CoreDataStack */,
DB3E6FEA2806BD2500B035AE /* MastodonUI */,
DB6C8C0525F0921200AAA452 /* MastodonSDK */,
2DF123A625C3B0210020F248 /* ActiveLabel.swift */,
5DF1056325F887CB00D6C0D4 /* AVPlayer.swift */,
@ -2702,7 +2772,6 @@
DBD376B1269302A4007FEC24 /* UITableViewCell.swift */,
0FAA101B25E10E760017CCDE /* UIFont.swift */,
2D206B9125F60EA700143C56 /* UIControl.swift */,
2D32EAB925CB9B0500C9ED86 /* UIView.swift */,
5DA732CB2629CEF500A92342 /* UIView+Remove.swift */,
2D24E1222626ED9D00A59D4F /* UIView+Gesture.swift */,
DB8AF55C25C138B7002E6C99 /* UIViewController.swift */,
@ -2983,9 +3052,6 @@
isa = PBXGroup;
children = (
DBB5254F2611ED6D002F1F29 /* ProfileHeaderView.swift */,
DBB5256D2612D5A1002F1F29 /* ProfileStatusDashboardView.swift */,
DBB525842612D6DD002F1F29 /* ProfileStatusDashboardMeterView.swift */,
DB35FC1E2612F1D9006193C9 /* ProfileRelationshipActionButton.swift */,
DBF98149265E24F500E4BA07 /* ProfileFieldCollectionViewHeaderFooterView.swift */,
);
path = View;
@ -2999,24 +3065,11 @@
path = Service;
sourceTree = "<group>";
};
DBBC24BD26A5441A00398BB9 /* ThemeService */ = {
isa = PBXGroup;
children = (
DBBC24C326A544B900398BB9 /* Theme.swift */,
DBBC24BE26A5443100398BB9 /* MastodonTheme.swift */,
DBBC24BF26A5443100398BB9 /* SystemTheme.swift */,
DBBC24BB26A542F500398BB9 /* ThemeService.swift */,
DBBC24CE26A547AE00398BB9 /* ThemeService+Appearance.swift */,
);
path = ThemeService;
sourceTree = "<group>";
};
DBBC24D526A54BCB00398BB9 /* Helper */ = {
isa = PBXGroup;
children = (
DBBC24D626A54BCB00398BB9 /* MastodonRegex.swift */,
DBBC50C0278ED49200AF0CC6 /* MastodonAuthenticationBox.swift */,
DBBC24D826A54BCB00398BB9 /* MastodonMetricFormatter.swift */,
DBF3B7402733EB9400E21627 /* MastodonLocalCode.swift */,
);
path = Helper;
@ -3062,6 +3115,32 @@
path = FetchedResultsController;
sourceTree = "<group>";
};
DBDFF1912805544800557A48 /* Discovery */ = {
isa = PBXGroup;
children = (
DB0A322F280EEA00001729D2 /* View */,
DBDFF19828055A0900557A48 /* Posts */,
DB3E6FDE2806A41200B035AE /* Hashtags */,
DB3E6FED2806D7FC00B035AE /* News */,
DB3E6FF62807C40500B035AE /* ForYou */,
DBDFF19928055A1400557A48 /* DiscoveryViewController.swift */,
DBDFF19B28055BD600557A48 /* DiscoveryViewModel.swift */,
);
path = Discovery;
sourceTree = "<group>";
};
DBDFF19828055A0900557A48 /* Posts */ = {
isa = PBXGroup;
children = (
DBDFF18F2805543100557A48 /* DiscoveryPostsViewController.swift */,
DBDFF19D2805703700557A48 /* DiscoveryPostsViewController+DataSourceProvider.swift */,
DBDFF1922805554900557A48 /* DiscoveryPostsViewModel.swift */,
DBDFF1942805561700557A48 /* DiscoveryPostsViewModel+Diffable.swift */,
DBDFF196280556D900557A48 /* DiscoveryPostsViewModel+State.swift */,
);
path = Posts;
sourceTree = "<group>";
};
DBE0821A25CD382900FD6BBD /* Register */ = {
isa = PBXGroup;
children = (
@ -3233,7 +3312,6 @@
DB3D0FF225BAA61700EAA174 /* AlamofireImage */,
5D526FE125BE9AC400460CB9 /* MastodonSDK */,
2D61336825C18A4F00CAE157 /* AlamofireNetworkActivityIndicator */,
DB0140BC25C40D7500F9F3CF /* CommonOSLog */,
2D5981B925E4D7F8000FB903 /* ThirdPartyMailer */,
2D939AC725EE14620076FA61 /* CropViewController */,
DB9A487D2603456B008B817C /* UITextView+Placeholder */,
@ -3242,10 +3320,10 @@
DBAC649D267DFE43007FE9FD /* DiffableDataSources */,
DBAC64A0267E6D02007FE9FD /* Fuzi */,
DBF7A0FB26830C33004176A2 /* FPSIndicator */,
DB01E23226A98F0900C3965B /* MastodonMeta */,
DB01E23426A98F0900C3965B /* MetaTextKit */,
DB552D4E26BBD10C00E481F6 /* OrderedCollections */,
DBA5A52E26F07ED800CACBAA /* PanModal */,
DB02EA0C280D184B00E751C5 /* CommonOSLog */,
);
productName = Mastodon;
productReference = DB427DD225BAA00100D1B89D /* Mastodon.app */;
@ -3306,7 +3384,7 @@
);
name = AppShared;
packageProductDependencies = (
DB68050F2637D0F800430867 /* KeychainAccess */,
DB02EA0A280D180D00E751C5 /* KeychainAccess */,
);
productName = AppShared;
productReference = DB68047F2637CD4C00430867 /* AppShared.framework */;
@ -3441,6 +3519,8 @@
"eu-ES",
"sv-FI",
ku,
kab,
vi,
);
mainGroup = DB427DC925BAA00100D1B89D;
packageReferences = (
@ -3789,6 +3869,7 @@
buildActionMask = 2147483647;
files = (
DBB525212611EBD6002F1F29 /* ProfilePagingViewController.swift in Sources */,
DBDFF19E2805703700557A48 /* DiscoveryPostsViewController+DataSourceProvider.swift in Sources */,
DB6180EB26391C140018D199 /* MediaPreviewTransitionItem.swift in Sources */,
DB63F74727990B0600455B82 /* DataSourceFacade+Hashtag.swift in Sources */,
DB98337125C9443200AD9700 /* APIService+Authentication.swift in Sources */,
@ -3815,6 +3896,7 @@
DB336F43278EB1690031E64B /* MediaView+Configuration.swift in Sources */,
DB66729625F9F91600D60309 /* ComposeStatusSection.swift in Sources */,
DB482A3F261331E8008AE74C /* UserTimelineViewModel+State.swift in Sources */,
DB3E6FE02806A4ED00B035AE /* DiscoveryHashtagsViewModel.swift in Sources */,
2D38F1F725CD47AC00561493 /* HomeTimelineViewModel+LoadOldestState.swift in Sources */,
DB447681260B3ED600B66B82 /* CustomEmojiPickerSection.swift in Sources */,
DB0FCB7427956939006C02E2 /* DataSourceFacade+Status.swift in Sources */,
@ -3850,6 +3932,7 @@
DB697DD6278F4C29004EF2F7 /* DataSourceProvider.swift in Sources */,
DB0FCB8E2796C0B7006C02E2 /* TrendCollectionViewCell.swift in Sources */,
0F1E2D0B2615C39400C38565 /* DoubleTitleLabelNavigationBarTitleView.swift in Sources */,
DBDFF1902805543100557A48 /* DiscoveryPostsViewController.swift in Sources */,
DB697DD9278F4CED004EF2F7 /* HomeTimelineViewController+DataSourceProvider.swift in Sources */,
DB9A488A26034D40008B817C /* ComposeViewModel+PublishState.swift in Sources */,
DB45FAD725CA6C76005A8AC7 /* UIBarButtonItem.swift in Sources */,
@ -3870,11 +3953,13 @@
DB297B1B2679FAE200704C90 /* PlaceholderImageCacheService.swift in Sources */,
DB0FCB8C2796BF8D006C02E2 /* SearchViewModel+Diffable.swift in Sources */,
2D8FCA082637EABB00137F46 /* APIService+FollowRequest.swift in Sources */,
DBDFF1952805561700557A48 /* DiscoveryPostsViewModel+Diffable.swift in Sources */,
DB03A795272A981400EE37C5 /* ContentSplitViewController.swift in Sources */,
DBBC24DE26A54BCB00398BB9 /* MastodonMetricFormatter.swift in Sources */,
DBDFF19C28055BD600557A48 /* DiscoveryViewModel.swift in Sources */,
DB06180A2785B2AB0030EE79 /* MastodonRegisterAvatarTableViewCell.swift in Sources */,
DBB45B6227B51112002DC5A7 /* SuggestionAccountViewModel+Diffable.swift in Sources */,
DBB3BA2A26A81C020004F2D4 /* FLAnimatedImageView.swift in Sources */,
DB3E6FF32806D97400B035AE /* DiscoveryNewsViewModel+State.swift in Sources */,
DB6746ED278F45F0008A6B94 /* AutoGenerateProtocolRelayDelegate.swift in Sources */,
DB0618032785A7100030EE79 /* RegisterSection.swift in Sources */,
DB63F76B279A5ED300455B82 /* NotificationTimelineViewModel+LoadOldestState.swift in Sources */,
@ -3897,12 +3982,12 @@
DBE3CE07261D6A0E00430CC6 /* FavoriteViewModel+Diffable.swift in Sources */,
2D34D9DB261494120081BFC0 /* APIService+Search.swift in Sources */,
5B90C48B26259C120002E742 /* APIService+CoreData+Subscriptions.swift in Sources */,
DBB5256E2612D5A1002F1F29 /* ProfileStatusDashboardView.swift in Sources */,
DBA9443E265CFA6400C537E1 /* ProfileFieldCollectionViewCell.swift in Sources */,
DB025B93278D6501002F581E /* Persistence.swift in Sources */,
2D24E1232626ED9D00A59D4F /* UIView+Gesture.swift in Sources */,
DBFEEC9D279C12C1004F81DD /* ProfileFieldEditCollectionViewCell.swift in Sources */,
DB45FAE325CA7181005A8AC7 /* MastodonUser.swift in Sources */,
DB3E6FEC2806D7F100B035AE /* DiscoveryNewsViewController.swift in Sources */,
DBA088DF26958164003EB4B2 /* UserFetchedResultsController.swift in Sources */,
DB2FF510260B113300ADA9FE /* ComposeStatusPollExpiresOptionCollectionViewCell.swift in Sources */,
0F202213261351F5000C64BF /* APIService+HashtagTimeline.swift in Sources */,
@ -3944,7 +4029,6 @@
2D4AD8A826316D3500613EFC /* SelectedAccountItem.swift in Sources */,
DBE3CDFB261C6CA500430CC6 /* FavoriteViewModel.swift in Sources */,
DB8AF52F25C13561002E6C99 /* DocumentStore.swift in Sources */,
DBBC24C126A5443100398BB9 /* SystemTheme.swift in Sources */,
DBE3CE01261D623D00430CC6 /* FavoriteViewModel+State.swift in Sources */,
2D82BA0525E7897700E36F0F /* MastodonResendEmailViewModelNavigationDelegateShim.swift in Sources */,
2D38F1EB25CD477000561493 /* HomeTimelineViewModel+LoadLatestState.swift in Sources */,
@ -3971,6 +4055,7 @@
DB63F76227996B6600455B82 /* SearchHistoryViewController+DataSourceProvider.swift in Sources */,
DB73BF4927140BA300781945 /* UICollectionViewDiffableDataSource.swift in Sources */,
DBA5E7AB263BD3F5004598BB /* TimelineTableViewCellContextMenuConfiguration.swift in Sources */,
DB3E6FE92806BD2200B035AE /* ThemeService.swift in Sources */,
DB73B490261F030A002E9E9F /* SafariActivity.swift in Sources */,
DB63F7492799126300455B82 /* FollowerListViewController+DataSourceProvider.swift in Sources */,
DB6D1B44263691CF00ACB481 /* Mastodon+API+Subscriptions+Policy.swift in Sources */,
@ -3988,11 +4073,11 @@
DB697DD4278F4927004EF2F7 /* StatusTableViewCellDelegate.swift in Sources */,
DB0FCB902796C5EB006C02E2 /* APIService+Trend.swift in Sources */,
DBA5E7A5263BD28C004598BB /* ContextMenuImagePreviewViewModel.swift in Sources */,
DB3E6FF52807C40300B035AE /* DiscoveryForYouViewController.swift in Sources */,
DB9D7C21269824B80054B3DF /* APIService+Filter.swift in Sources */,
2D38F1E525CD46C100561493 /* HomeTimelineViewModel.swift in Sources */,
DB0FCB842796B2A2006C02E2 /* FavoriteViewController+DataSourceProvider.swift in Sources */,
DBCC3B36261440BA0045B23D /* UINavigationController.swift in Sources */,
DBB525852612D6DD002F1F29 /* ProfileStatusDashboardMeterView.swift in Sources */,
DB0FCB68279507EF006C02E2 /* DataSourceFacade+Meta.swift in Sources */,
DB63F75C279956D000455B82 /* Persistence+Tag.swift in Sources */,
2D84350525FF858100EECE90 /* UIScrollView.swift in Sources */,
@ -4004,11 +4089,14 @@
DB1D843026566512000346B3 /* KeyboardPreference.swift in Sources */,
DB852D1926FAEB6B00FC9D81 /* SidebarViewController.swift in Sources */,
2D206B9225F60EA700143C56 /* UIControl.swift in Sources */,
DBDFF1932805554900557A48 /* DiscoveryPostsViewModel.swift in Sources */,
2D9DB96B263A91D1007C1D71 /* APIService+DomainBlock.swift in Sources */,
DBBF1DC92652538500E5B703 /* AutoCompleteSection.swift in Sources */,
DB3E6FE72806A7A200B035AE /* DiscoveryItem.swift in Sources */,
DB8AF55D25C138B7002E6C99 /* UIViewController.swift in Sources */,
DB7F48452620241000796008 /* ProfileHeaderViewModel.swift in Sources */,
DB647C5926F1EA2700F7F82C /* WizardPreference.swift in Sources */,
DB0A322E280EE9FD001729D2 /* DiscoveryIntroBannerView.swift in Sources */,
2D3F9E0425DFA133004262D9 /* UITapGestureRecognizer.swift in Sources */,
5DDDF1992617447F00311060 /* Mastodon+Entity+Tag.swift in Sources */,
5B90C45F262599800002E742 /* SettingsToggleTableViewCell.swift in Sources */,
@ -4028,10 +4116,10 @@
5B90C462262599800002E742 /* SettingsSectionHeader.swift in Sources */,
DB44768B260B3F2100B66B82 /* CustomEmojiPickerItem.swift in Sources */,
5DF1056425F887CB00D6C0D4 /* AVPlayer.swift in Sources */,
DB3E6FEF2806D82600B035AE /* DiscoveryNewsViewModel.swift in Sources */,
DBBF1DCB2652539E00E5B703 /* AutoCompleteItem.swift in Sources */,
DB84811727883C2600BBEABA /* MastodonRegisterPasswordHintTableViewCell.swift in Sources */,
2DA6054725F716A2006356F9 /* PlaybackState.swift in Sources */,
DB35FC1F2612F1D9006193C9 /* ProfileRelationshipActionButton.swift in Sources */,
DB98EB6727B216560082E365 /* ReportResultViewModel+Diffable.swift in Sources */,
DBC7A672260C897100E57475 /* StatusContentWarningEditorView.swift in Sources */,
DB025B95278D6530002F581E /* Persistence+MastodonUser.swift in Sources */,
@ -4061,6 +4149,7 @@
2D5981A125E4A593000FB903 /* MastodonConfirmEmailViewModel.swift in Sources */,
DB6B74F6272FBCDB00C70B6E /* FollowerListViewModel+State.swift in Sources */,
DB87D4452609BE0500D12C0D /* ComposeStatusPollOptionCollectionViewCell.swift in Sources */,
DBDFF197280556D900557A48 /* DiscoveryPostsViewModel+State.swift in Sources */,
DB336F2C278D6FC30031E64B /* Persistence+Status.swift in Sources */,
DB336F2A278D6F2B0031E64B /* MastodonField.swift in Sources */,
DB0FCB7A279576A2006C02E2 /* DataSourceFacade+Thread.swift in Sources */,
@ -4088,7 +4177,7 @@
DB4AA6B327BA34B6009EC082 /* CellFrameCacheContainer.swift in Sources */,
DB0FCB942797E2B0006C02E2 /* SearchResultViewModel+Diffable.swift in Sources */,
DB63F752279944AA00455B82 /* SearchHistorySectionHeaderCollectionReusableView.swift in Sources */,
DBBC24C426A544B900398BB9 /* Theme.swift in Sources */,
DB3E6FDD2806A40F00B035AE /* DiscoveryHashtagsViewController.swift in Sources */,
DB938EED2623F79B00E5B6C1 /* ThreadViewModel.swift in Sources */,
DBBC24AC26A53D9300398BB9 /* ComposeStatusContentTableViewCell.swift in Sources */,
DBC7A67C260DFADE00E57475 /* StatusPublishService.swift in Sources */,
@ -4096,6 +4185,7 @@
DB852D1C26FB021500FC9D81 /* RootSplitViewController.swift in Sources */,
DB697DD1278F4871004EF2F7 /* AutoGenerateTableViewDelegate.swift in Sources */,
DB02CDBF2625AE5000D0A2AF /* AdaptiveUserInterfaceStyleBarButtonItem.swift in Sources */,
DB3E6FFA2807C47900B035AE /* DiscoveryForYouViewModel+Diffable.swift in Sources */,
DB1FD44425F26CCC004CFCFC /* PickServerSection.swift in Sources */,
DBB45B6027B50A4F002DC5A7 /* RecommendAccountItem.swift in Sources */,
0FB3D30F25E525CD00AAD544 /* PickServerCategoryView.swift in Sources */,
@ -4107,7 +4197,6 @@
DBBF1DC5265251C300E5B703 /* AutoCompleteViewModel+Diffable.swift in Sources */,
DB603111279EB38500A935FE /* DataSourceFacade+Mute.swift in Sources */,
DB68A04A25E9027700CFDF14 /* AdaptiveStatusBarStyleNavigationController.swift in Sources */,
DBBC24BC26A542F500398BB9 /* ThemeService.swift in Sources */,
DB336F38278D7AAF0031E64B /* Poll+Property.swift in Sources */,
0FB3D33825E6401400AAD544 /* PickServerCell.swift in Sources */,
DB6D9F8426358EEC008423CD /* SettingsItem.swift in Sources */,
@ -4120,7 +4209,6 @@
DB4FFC2C269EC39600D62E92 /* SearchTransitionController.swift in Sources */,
DBA5E7A9263BD3A4004598BB /* ContextMenuImagePreviewViewController.swift in Sources */,
DBF156E22702DA6900EC00B7 /* UIStatusBarManager+HandleTapAction.m in Sources */,
2D32EABA25CB9B0500C9ED86 /* UIView.swift in Sources */,
2D38F20825CD491300561493 /* DisposeBagCollectable.swift in Sources */,
DB6F5E35264E78E7009108F4 /* AutoCompleteViewController.swift in Sources */,
DB697DE1278F5296004EF2F7 /* DataSourceFacade+Model.swift in Sources */,
@ -4128,7 +4216,6 @@
DB4F097526A037F500D62E92 /* SearchHistoryViewModel.swift in Sources */,
DB6180F826391D660018D199 /* MediaPreviewingViewController.swift in Sources */,
DB0140CF25C42AEE00F9F3CF /* OSLog.swift in Sources */,
DB71C7CB271D5A0300BE3819 /* LineChartView.swift in Sources */,
DB98EB5627B0FF1B0082E365 /* ReportViewControllerAppearance.swift in Sources */,
DB938F1526241FDF00E5B6C1 /* APIService+Thread.swift in Sources */,
2D206B8625F5FB0900143C56 /* Double.swift in Sources */,
@ -4150,6 +4237,7 @@
DBD376AC2692ECDB007FEC24 /* ThemePreference.swift in Sources */,
DB4F097D26A03A5B00D62E92 /* SearchHistoryItem.swift in Sources */,
DBD5B1FA27BD013700BD6B38 /* DataSourceProvider+StatusTableViewControllerNavigateable.swift in Sources */,
DB3E6FE22806A50100B035AE /* DiscoveryHashtagsViewModel+Diffable.swift in Sources */,
DB68046C2636DC9E00430867 /* MastodonNotification.swift in Sources */,
DBAE3F9E2616E308004B8251 /* APIService+Mute.swift in Sources */,
DB427DD625BAA00100D1B89D /* AppDelegate.swift in Sources */,
@ -4196,7 +4284,6 @@
DB8AF52E25C13561002E6C99 /* ViewStateStore.swift in Sources */,
DB1D61CF26F1B33600DA8662 /* WelcomeViewModel.swift in Sources */,
2DA7D04A25CA52CB00804E11 /* TimelineBottomLoaderTableViewCell.swift in Sources */,
DB71C7CD271D7F4300BE3819 /* CurveAlgorithm.swift in Sources */,
DBD376B2269302A4007FEC24 /* UITableViewCell.swift in Sources */,
DB4F0966269ED52200D62E92 /* SearchResultViewModel.swift in Sources */,
DBBF1DBF2652401B00E5B703 /* AutoCompleteViewModel.swift in Sources */,
@ -4213,31 +4300,33 @@
0F2021FB2613262F000C64BF /* HashtagTimelineViewController.swift in Sources */,
DB697DDD278F521D004EF2F7 /* DataSourceFacade.swift in Sources */,
DBCC3B30261440A50045B23D /* UITabBarController.swift in Sources */,
DB3E6FE42806A5B800B035AE /* DiscoverySection.swift in Sources */,
DB8190C62601FF0400020C08 /* AttachmentContainerView.swift in Sources */,
DB697DDB278F4DE3004EF2F7 /* DataSourceProvider+StatusTableViewCellDelegate.swift in Sources */,
DB51D173262832380062B7A1 /* BlurHashEncode.swift in Sources */,
2D32EAAC25CB96DC00C9ED86 /* TimelineMiddleLoaderTableViewCell.swift in Sources */,
DB87D4512609CF1E00D12C0D /* ComposeStatusPollOptionAppendEntryCollectionViewCell.swift in Sources */,
DBB45B5627B39FC9002DC5A7 /* MediaPreviewVideoViewController.swift in Sources */,
DBBC24C026A5443100398BB9 /* MastodonTheme.swift in Sources */,
DB0FCB8027968F70006C02E2 /* MastodonStatusThreadViewModel.swift in Sources */,
DB0FCB6E27950E6B006C02E2 /* MastodonMention.swift in Sources */,
DB67D08627312E67006A36CF /* WizardViewController.swift in Sources */,
DB6746EB278ED8B0008A6B94 /* PollOptionView+Configuration.swift in Sources */,
DB9A489026035963008B817C /* APIService+Media.swift in Sources */,
DBFEEC99279BDCDE004F81DD /* ProfileAboutViewModel.swift in Sources */,
DBBC24CF26A547AE00398BB9 /* ThemeService+Appearance.swift in Sources */,
2D198649261C0B8500F0B013 /* SearchResultSection.swift in Sources */,
DB4F097B26A039FF00D62E92 /* SearchHistorySection.swift in Sources */,
DBB525302611EBF3002F1F29 /* ProfilePagingViewModel.swift in Sources */,
DB9F58EC26EF435000E7BBE9 /* AccountViewController.swift in Sources */,
2D5A3D6225CFD9CB002347D6 /* HomeTimelineViewController+DebugAction.swift in Sources */,
DB3E6FF12806D96900B035AE /* DiscoveryNewsViewModel+Diffable.swift in Sources */,
DB3E6FF82807C45300B035AE /* DiscoveryForYouViewModel.swift in Sources */,
DB49A62525FF334C00B98345 /* EmojiService+CustomEmojiViewModel+LoadState.swift in Sources */,
DB4924E226312AB200E9DB22 /* NotificationService.swift in Sources */,
DB6D9F6F2635807F008423CD /* Setting.swift in Sources */,
DB6F5E38264E994A009108F4 /* AutoCompleteTopChevronView.swift in Sources */,
DB6746F0278F463B008A6B94 /* AutoGenerateProtocolDelegate.swift in Sources */,
DBB525412611ED54002F1F29 /* ProfileHeaderViewController.swift in Sources */,
DBDFF19A28055A1400557A48 /* DiscoveryViewController.swift in Sources */,
DB9D6BFF25E4F5940051B173 /* ProfileViewController.swift in Sources */,
DB63F756279949BD00455B82 /* Persistence+SearchHistory.swift in Sources */,
2D4AD8A226316CD200613EFC /* SelectedAccountSection.swift in Sources */,
@ -4247,7 +4336,6 @@
DB789A1225F9F2CC0071ACA0 /* ComposeViewModel.swift in Sources */,
DB63F74B279914A000455B82 /* FollowingListViewController+DataSourceProvider.swift in Sources */,
DBB525362611ECEB002F1F29 /* UserTimelineViewController.swift in Sources */,
DB6D1B3D2636857500ACB481 /* AppearancePreference.swift in Sources */,
DB938F3326243D6200E5B6C1 /* TimelineTopLoaderTableViewCell.swift in Sources */,
DB98EB4927B0F0CD0082E365 /* ReportStatusTableViewCell.swift in Sources */,
DB3667A4268AE2370027D07F /* ComposeStatusPollTableViewCell.swift in Sources */,
@ -4338,17 +4426,12 @@
DBFEF07526A69192006D7ED1 /* APIService+Media.swift in Sources */,
DBFEF06F26A690C4006D7ED1 /* APIService+APIError.swift in Sources */,
DBFEF05C26A57715006D7ED1 /* StatusEditorView.swift in Sources */,
DBBC24C726A5456400398BB9 /* SystemTheme.swift in Sources */,
DBBC24C826A5456400398BB9 /* ThemeService.swift in Sources */,
DBBC24C926A5456400398BB9 /* MastodonTheme.swift in Sources */,
DBFEF07C26A6BD0A006D7ED1 /* APIService+Status+Publish.swift in Sources */,
DBB3BA2B26A81D060004F2D4 /* FLAnimatedImageView.swift in Sources */,
DB6746E8278ED639008A6B94 /* MastodonAuthenticationBox.swift in Sources */,
DBBC24A826A52F9000398BB9 /* ComposeToolbarView.swift in Sources */,
DBFEF05B26A57715006D7ED1 /* ComposeViewModel.swift in Sources */,
DBBC24C626A5456000398BB9 /* Theme.swift in Sources */,
DBFEF06326A577F2006D7ED1 /* StatusAttachmentViewModel.swift in Sources */,
DBFEF06926A67E45006D7ED1 /* AppearancePreference.swift in Sources */,
DBC6461526A170AB00B0E31B /* ShareViewController.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -4442,6 +4525,8 @@
DB126A4C278C063F005726EE /* eu-ES */,
DB126A56278C088D005726EE /* sv-FI */,
DBEB19E927E4F37B00B0E80E /* ku */,
DBF81C7427F68F5A00004A56 /* kab */,
DBF81C7727F6913300004A56 /* vi */,
);
name = Intents.intentdefinition;
sourceTree = "<group>";
@ -4465,6 +4550,8 @@
DB126A4F278C063F005726EE /* eu-ES */,
DB126A59278C088D005726EE /* sv-FI */,
DBEB19EA27E4F37B00B0E80E /* ku */,
DBF81C7527F68F5A00004A56 /* kab */,
DBF81C7827F6913300004A56 /* vi */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
@ -4504,6 +4591,8 @@
DB126A50278C063F005726EE /* eu-ES */,
DB126A5A278C088D005726EE /* sv-FI */,
DBEB19EB27E4F37B00B0E80E /* ku */,
DBF81C7627F68F5A00004A56 /* kab */,
DBF81C7927F6913300004A56 /* vi */,
);
name = Intents.stringsdict;
sourceTree = "<group>";
@ -4648,7 +4737,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 109;
CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = Mastodon/Info.plist;
@ -4677,7 +4766,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 109;
CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = Mastodon/Info.plist;
@ -4785,11 +4874,11 @@
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 109;
CURRENT_PROJECT_VERSION = 113;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 109;
DYLIB_CURRENT_VERSION = 113;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = AppShared/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@ -4816,11 +4905,11 @@
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 109;
CURRENT_PROJECT_VERSION = 113;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 109;
DYLIB_CURRENT_VERSION = 113;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = AppShared/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@ -4845,7 +4934,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 109;
CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = MastodonIntent/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -4870,7 +4959,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 109;
CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = MastodonIntent/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -4895,7 +4984,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 109;
CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = ShareActionExtension/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -4920,7 +5009,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 109;
CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = ShareActionExtension/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -5006,7 +5095,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 109;
CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = Mastodon/Info.plist;
@ -5073,11 +5162,11 @@
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 109;
CURRENT_PROJECT_VERSION = 113;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 109;
DYLIB_CURRENT_VERSION = 113;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = AppShared/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@ -5102,7 +5191,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 109;
CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = NotificationService/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -5126,7 +5215,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 109;
CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = ShareActionExtension/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -5151,7 +5240,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 109;
CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = MastodonIntent/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -5176,7 +5265,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 109;
CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = NotificationService/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -5200,7 +5289,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 109;
CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = NotificationService/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -5341,7 +5430,7 @@
repositoryURL = "https://github.com/TwidereProject/MetaTextKit.git";
requirement = {
kind = exactVersion;
version = 2.2.1;
version = 2.2.2;
};
};
DB0E2D2C26833FF600865C3C /* XCRemoteSwiftPackageReference "Nuke-FLAnimatedImage-Plugin" */ = {
@ -5459,21 +5548,21 @@
package = DB0140BB25C40D7500F9F3CF /* XCRemoteSwiftPackageReference "CommonOSLog" */;
productName = CommonOSLog;
};
DB0140BC25C40D7500F9F3CF /* CommonOSLog */ = {
isa = XCSwiftPackageProductDependency;
package = DB0140BB25C40D7500F9F3CF /* XCRemoteSwiftPackageReference "CommonOSLog" */;
productName = CommonOSLog;
};
DB01E23226A98F0900C3965B /* MastodonMeta */ = {
isa = XCSwiftPackageProductDependency;
package = DB01E23126A98F0900C3965B /* XCRemoteSwiftPackageReference "MetaTextKit" */;
productName = MastodonMeta;
};
DB01E23426A98F0900C3965B /* MetaTextKit */ = {
isa = XCSwiftPackageProductDependency;
package = DB01E23126A98F0900C3965B /* XCRemoteSwiftPackageReference "MetaTextKit" */;
productName = MetaTextKit;
};
DB02EA0A280D180D00E751C5 /* KeychainAccess */ = {
isa = XCSwiftPackageProductDependency;
package = DB6804722637CC1200430867 /* XCRemoteSwiftPackageReference "KeychainAccess" */;
productName = KeychainAccess;
};
DB02EA0C280D184B00E751C5 /* CommonOSLog */ = {
isa = XCSwiftPackageProductDependency;
package = DB0140BB25C40D7500F9F3CF /* XCRemoteSwiftPackageReference "CommonOSLog" */;
productName = CommonOSLog;
};
DB0C946426A6FD4D0088FB11 /* AlamofireImage */ = {
isa = XCSwiftPackageProductDependency;
package = DB3D0FF125BAA61700EAA174 /* XCRemoteSwiftPackageReference "AlamofireImage" */;
@ -5493,11 +5582,6 @@
package = DB552D4D26BBD10C00E481F6 /* XCRemoteSwiftPackageReference "swift-collections" */;
productName = OrderedCollections;
};
DB68050F2637D0F800430867 /* KeychainAccess */ = {
isa = XCSwiftPackageProductDependency;
package = DB6804722637CC1200430867 /* XCRemoteSwiftPackageReference "KeychainAccess" */;
productName = KeychainAccess;
};
DB6D9F41263527CE008423CD /* AlamofireImage */ = {
isa = XCSwiftPackageProductDependency;
package = DB3D0FF125BAA61700EAA174 /* XCRemoteSwiftPackageReference "AlamofireImage" */;

View File

@ -9,7 +9,7 @@
<key>isShown</key>
<true/>
<key>orderHint</key>
<integer>3</integer>
<integer>4</integer>
</dict>
<key>CoreDataStack.xcscheme_^#shared#^_</key>
<dict>
@ -19,7 +19,7 @@
<key>Mastodon - RTL.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>18</integer>
<integer>19</integer>
</dict>
<key>Mastodon - Release.xcscheme_^#shared#^_</key>
<dict>
@ -31,6 +31,11 @@
<key>orderHint</key>
<integer>2</integer>
</dict>
<key>Mastodon - ar.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>3</integer>
</dict>
<key>Mastodon - ar.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
@ -104,7 +109,7 @@
<key>MastodonIntent.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>49</integer>
<integer>30</integer>
</dict>
<key>MastodonIntents.xcscheme_^#shared#^_</key>
<dict>
@ -119,12 +124,12 @@
<key>NotificationService.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>51</integer>
<integer>31</integer>
</dict>
<key>ShareActionExtension.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>50</integer>
<integer>23</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>

View File

@ -6,8 +6,8 @@
"repositoryURL": "https://github.com/Alamofire/Alamofire.git",
"state": {
"branch": null,
"revision": "f82c23a8a7ef8dc1a49a8bfc6a96883e79121864",
"version": "5.5.0"
"revision": "354dda32d89fc8cd4f5c46487f64957d355f53d8",
"version": "5.6.1"
}
},
{
@ -55,6 +55,15 @@
"version": "1.2.0"
}
},
{
"package": "FaviconFinder",
"repositoryURL": "https://github.com/will-lumley/FaviconFinder.git",
"state": {
"branch": null,
"revision": "1f74844f77f79b95c0bb0130b3a87d4f340e6d3a",
"version": "3.3.0"
}
},
{
"package": "FLAnimatedImage",
"repositoryURL": "https://github.com/Flipboard/FLAnimatedImage.git",
@ -96,8 +105,8 @@
"repositoryURL": "https://github.com/TwidereProject/MetaTextKit.git",
"state": {
"branch": null,
"revision": "3ea336d3de7938dc112084c596a646e697b0feee",
"version": "2.2.1"
"revision": "8074400b3819ef0395550082e6e8e960ef22e1f3",
"version": "2.2.2"
}
},
{
@ -105,8 +114,8 @@
"repositoryURL": "https://github.com/kean/Nuke.git",
"state": {
"branch": null,
"revision": "0db18dd34998cca18e9a28bcee136f84518007a0",
"version": "10.4.1"
"revision": "78fa963b8491fc520791d8c2a509f1b8593d8aae",
"version": "10.7.1"
}
},
{
@ -141,8 +150,8 @@
"repositoryURL": "https://github.com/SDWebImage/SDWebImage.git",
"state": {
"branch": null,
"revision": "2c53f531f1bedd253f55d85105409c28ed4a922c",
"version": "5.12.3"
"revision": "2e63d0061da449ad0ed130768d05dceb1496de44",
"version": "5.12.5"
}
},
{
@ -172,13 +181,22 @@
"version": "1.0.0"
}
},
{
"package": "SwiftSoup",
"repositoryURL": "https://github.com/scinfu/SwiftSoup.git",
"state": {
"branch": null,
"revision": "41e7c263fb8c277e980ebcb9b0b5f6031d3d4886",
"version": "2.4.2"
}
},
{
"package": "Introspect",
"repositoryURL": "https://github.com/siteline/SwiftUI-Introspect.git",
"state": {
"branch": null,
"revision": "2e09be8af614401bc9f87d40093ec19ce56ccaf2",
"version": "0.1.3"
"revision": "f2616860a41f9d9932da412a8978fec79c06fe24",
"version": "0.1.4"
}
},
{

View File

@ -144,7 +144,7 @@ extension SceneCoordinator {
case popover(sourceView: UIView)
case panModal
case custom(transitioningDelegate: UIViewControllerTransitioningDelegate)
case customPush
case customPush(animated: Bool)
case safariPresent(animated: Bool, completion: (() -> Void)? = nil)
case alertController(animated: Bool, completion: (() -> Void)? = nil)
case activityViewControllerPresent(animated: Bool, completion: (() -> Void)? = nil)
@ -339,10 +339,10 @@ extension SceneCoordinator {
viewController.transitioningDelegate = transitioningDelegate
(splitViewController ?? presentingViewController)?.present(viewController, animated: true, completion: nil)
case .customPush:
case .customPush(let animated):
// set delegate in view controller
assert(sender?.navigationController?.delegate != nil)
sender?.navigationController?.pushViewController(viewController, animated: true)
sender?.navigationController?.pushViewController(viewController, animated: animated)
case .safariPresent(let animated, let completion):
if UserDefaults.shared.preferredUsingDefaultBrowser, case let .safari(url) = scene {

View File

@ -0,0 +1,17 @@
//
// DiscoveryItem.swift
// Mastodon
//
// Created by MainasuK on 2022-4-13.
//
import Foundation
import MastodonSDK
import CoreDataStack
enum DiscoveryItem: Hashable {
case hashtag(Mastodon.Entity.Tag)
case link(Mastodon.Entity.Link)
case user(ManagedObjectRecord<MastodonUser>)
case bottomLoader
}

View File

@ -0,0 +1,74 @@
//
// DiscoverySection.swift
// Mastodon
//
// Created by MainasuK on 2022-4-13.
//
import os.log
import UIKit
import MastodonUI
enum DiscoverySection: CaseIterable {
// case posts
case hashtags
case news
case forYou
}
extension DiscoverySection {
static let logger = Logger(subsystem: "DiscoverySection", category: "logic")
class Configuration {
weak var profileCardTableViewCellDelegate: ProfileCardTableViewCellDelegate?
public init(profileCardTableViewCellDelegate: ProfileCardTableViewCellDelegate? = nil) {
self.profileCardTableViewCellDelegate = profileCardTableViewCellDelegate
}
}
static func diffableDataSource(
tableView: UITableView,
context: AppContext,
configuration: Configuration
) -> UITableViewDiffableDataSource<DiscoverySection, DiscoveryItem> {
tableView.register(TrendTableViewCell.self, forCellReuseIdentifier: String(describing: TrendTableViewCell.self))
tableView.register(NewsTableViewCell.self, forCellReuseIdentifier: String(describing: NewsTableViewCell.self))
tableView.register(ProfileCardTableViewCell.self, forCellReuseIdentifier: String(describing: ProfileCardTableViewCell.self))
tableView.register(TimelineBottomLoaderTableViewCell.self, forCellReuseIdentifier: String(describing: TimelineBottomLoaderTableViewCell.self))
return UITableViewDiffableDataSource(tableView: tableView) { tableView, indexPath, item in
switch item {
case .hashtag(let tag):
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: TrendTableViewCell.self), for: indexPath) as! TrendTableViewCell
cell.trendView.configure(tag: tag)
return cell
case .link(let link):
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: NewsTableViewCell.self), for: indexPath) as! NewsTableViewCell
cell.newsView.configure(link: link)
return cell
case .user(let record):
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: ProfileCardTableViewCell.self), for: indexPath) as! ProfileCardTableViewCell
context.managedObjectContext.performAndWait {
guard let user = record.object(in: context.managedObjectContext) else { return }
cell.configure(
tableView: tableView,
user: user,
profileCardTableViewCellDelegate: configuration.profileCardTableViewCellDelegate
)
}
context.authenticationService.activeMastodonAuthentication
.map { $0?.user }
.assign(to: \.me, on: cell.profileCardView.viewModel.relationshipViewModel)
.store(in: &cell.disposeBag)
return cell
case .bottomLoader:
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: TimelineBottomLoaderTableViewCell.self), for: indexPath) as! TimelineBottomLoaderTableViewCell
cell.activityIndicatorView.startAnimating()
return cell
}
}
}
}

View File

@ -69,10 +69,10 @@ extension SearchHistorySection {
let trendHeaderRegister = UICollectionView.SupplementaryRegistration<SearchHistorySectionHeaderCollectionReusableView>(elementKind: UICollectionView.elementKindSectionHeader) { [weak dataSource] supplementaryView, elementKind, indexPath in
supplementaryView.delegate = configuration.searchHistorySectionHeaderCollectionReusableViewDelegate
guard let dataSource = dataSource else { return }
let sections = dataSource.snapshot().sectionIdentifiers
guard indexPath.section < sections.count else { return }
let section = sections[indexPath.section]
guard let _ = dataSource else { return }
// let sections = dataSource.snapshot().sectionIdentifiers
// guard indexPath.section < sections.count else { return }
// let section = sections[indexPath.section]
}
dataSource.supplementaryViewProvider = { (collectionView: UICollectionView, elementKind: String, indexPath: IndexPath) in

View File

@ -21,26 +21,7 @@ extension SearchSection {
) -> UICollectionViewDiffableDataSource<SearchSection, SearchItem> {
let trendCellRegister = UICollectionView.CellRegistration<TrendCollectionViewCell, Mastodon.Entity.Tag> { cell, indexPath, item in
let primaryLabelText = "#" + item.name
let secondaryLabelText = L10n.Scene.Search.Recommend.HashTag.peopleTalking(item.talkingPeopleCount ?? 0)
cell.primaryLabel.text = primaryLabelText
cell.secondaryLabel.text = secondaryLabelText
cell.lineChartView.data = (item.history ?? [])
.sorted(by: { $0.day < $1.day }) // latest last
.map { entry in
guard let point = Int(entry.accounts) else {
return .zero
}
return CGFloat(point)
}
cell.isAccessibilityElement = true
cell.accessibilityLabel = [
primaryLabelText,
secondaryLabelText
].joined(separator: ", ")
}
let dataSource = UICollectionViewDiffableDataSource<SearchSection, SearchItem>(

View File

@ -9,53 +9,6 @@ import Foundation
import CoreDataStack
import MastodonSDK
extension MastodonUser {
public var displayNameWithFallback: String {
return !displayName.isEmpty ? displayName : username
}
public var acctWithDomain: String {
if !acct.contains("@") {
// Safe concat due to username cannot contains "@"
return username + "@" + domain
} else {
return acct
}
}
public var domainFromAcct: String {
if !acct.contains("@") {
return domain
} else {
let domain = acct.split(separator: "@").last
return String(domain!)
}
}
}
extension MastodonUser {
public func headerImageURL() -> URL? {
return URL(string: header)
}
public func headerImageURLWithFallback(domain: String) -> URL {
return URL(string: header) ?? URL(string: "https://\(domain)/headers/original/missing.png")!
}
public func avatarImageURL() -> URL? {
let string = UserDefaults.shared.preferredStaticAvatar ? avatarStatic ?? avatar : avatar
return URL(string: string)
}
public func avatarImageURLWithFallback(domain: String) -> URL {
return avatarImageURL() ?? URL(string: "https://\(domain)/avatars/original/missing.png")!
}
}
extension MastodonUser {
public var profileURL: URL {

View File

@ -17,14 +17,3 @@ extension Mastodon.Entity.Tag: Hashable {
}
}
extension Mastodon.Entity.Tag {
/// the sum of recent 2 days
public var talkingPeopleCount: Int? {
return history?
.prefix(2)
.compactMap { Int($0.accounts) }
.reduce(0, +)
}
}

View File

@ -1,11 +1,13 @@
//
// ThemeService+Appearance.swift
// ThemeService.swift
// Mastodon
//
// Created by MainasuK Cirno on 2021-7-19.
// Created by MainasuK on 2022-4-13.
//
import UIKit
import MastodonCommon
import MastodonUI
extension ThemeService {
func set(themeName: ThemeName) {

View File

@ -1,70 +0,0 @@
//
// UIView.swift
// Mastodon
//
// Created by sxiaojian on 2021/2/4.
//
import UIKit
// MARK: - Convenience view creation method
extension UIView {
static let separatorColor: UIColor = {
UIColor(dynamicProvider: { collection in
switch collection.userInterfaceStyle {
case .dark:
return ThemeService.shared.currentTheme.value.separator
default:
return .separator
}
})
}()
static var separatorLine: UIView {
let line = UIView()
line.backgroundColor = UIView.separatorColor
return line
}
static func separatorLineHeight(of view: UIView) -> CGFloat {
return 1.0 / view.traitCollection.displayScale
}
}
// MARK: - Convenience view appearance modification method
extension UIView {
@discardableResult
func applyCornerRadius(radius: CGFloat) -> Self {
layer.masksToBounds = true
layer.cornerRadius = radius
layer.cornerCurve = .continuous
return self
}
@discardableResult
func applyShadow(
color: UIColor,
alpha: Float,
x: CGFloat,
y: CGFloat,
blur: CGFloat,
spread: CGFloat = 0) -> Self
{
layer.masksToBounds = false
layer.shadowColor = color.cgColor
layer.shadowOpacity = alpha
layer.shadowOffset = CGSize(width: x, height: y)
layer.shadowRadius = blur / 2.0
if spread == 0 {
layer.shadowPath = nil
} else {
let dx = -spread
let rect = bounds.insetBy(dx: dx, dy: dx)
layer.shadowPath = UIBezierPath(rect: rect).cgPath
}
return self
}
}

View File

@ -30,7 +30,7 @@
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>1.3.0</string>
<string>1.3.1</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
@ -43,7 +43,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
<string>109</string>
<string>113</string>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>LSApplicationQueriesSchemes</key>

View File

@ -22,13 +22,3 @@ extension MastodonEmoji {
)
}
}
extension Collection where Element == MastodonEmoji {
public var asDictionary: MastodonContent.Emojis {
var dictionary: MastodonContent.Emojis = [:]
for emoji in self {
dictionary[emoji.code] = emoji.url
}
return dictionary
}
}

View File

@ -5,17 +5,3 @@
// Created by MainasuK Cirno on 2021-7-5.
//
import UIKit
import MastodonExtension
extension UserDefaults {
@objc dynamic var currentThemeNameRawValue: String {
get {
register(defaults: [#function: ThemeName.mastodon.rawValue])
return string(forKey: #function) ?? ThemeName.mastodon.rawValue
}
set { self[#function] = newValue }
}
}

View File

@ -38,11 +38,15 @@ extension DataSourceFacade {
meta: Meta
) async {
switch meta {
// note:
// some server mark the normal url as "u-url" class. highlighted content is a URL
case .url(_, _, let url, _),
.mention(_, let url, _) where url.lowercased().hasPrefix("http"):
// note:
// some server mark the normal url as "u-url" class. highlighted content is a URL
guard let url = URL(string: url) else { return }
// fix non-ascii character URL link can not open issue
guard let url = URL(string: url) ?? URL(string: url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? url) else {
assertionFailure()
return
}
if let domain = provider.context.authenticationService.activeMastodonAuthenticationBox.value?.domain, url.host == domain,
url.pathComponents.count >= 4,
url.pathComponents[0] == "/",

View File

@ -122,12 +122,12 @@ extension DataSourceFacade {
let barButtonItem: UIBarButtonItem?
}
@MainActor
static func createProfileActionMenu(
dependency: NeedsDependency,
user: ManagedObjectRecord<MastodonUser>
) -> UIMenu {
var children: [UIMenuElement] = []
// @MainActor
// static func createProfileActionMenu(
// dependency: NeedsDependency,
// user: ManagedObjectRecord<MastodonUser>
// ) -> UIMenu {
// var children: [UIMenuElement] = []
// let name = mastodonUser.displayNameWithFallback
//
// if let shareUser = shareUser {
@ -339,9 +339,9 @@ extension DataSourceFacade {
// }
// children.append(deleteAction)
// }
return UIMenu(title: "", options: [], children: children)
}
//
// return UIMenu(title: "", options: [], children: children)
// }
static func createActivityViewController(
dependency: NeedsDependency,

View File

@ -286,24 +286,8 @@ extension DataSourceFacade {
try await dependency.context.managedObjectContext.perform {
guard let _status = status.object(in: dependency.context.managedObjectContext) else { return }
let status = _status.reblog ?? _status
let allToggled = status.isContentSensitiveToggled && status.isMediaSensitiveToggled
status.update(isContentSensitiveToggled: !allToggled)
status.update(isMediaSensitiveToggled: !allToggled)
status.update(isSensitiveToggled: !status.isSensitiveToggled)
}
}
// static func responseToToggleMediaSensitiveAction(
// dependency: NeedsDependency,
// status: ManagedObjectRecord<Status>
// ) async throws {
// try await dependency.context.managedObjectContext.perform {
// guard let _status = status.object(in: dependency.context.managedObjectContext) else { return }
// let status = _status.reblog ?? _status
//
// status.update(isMediaSensitiveToggled: !status.isMediaSensitiveToggled)
// }
// }
}

View File

@ -135,7 +135,7 @@ extension NotificationTableViewCellDelegate where Self: DataSourceProvider & Med
let status = _status.reblog ?? _status
return NotificationMediaTransitionContext(
status: .init(objectID: status.objectID),
needsToggleMediaSensitive: status.isMediaSensitiveToggled ? !status.sensitive : status.sensitive
needsToggleMediaSensitive: status.isSensitiveToggled ? !status.sensitive : status.sensitive
)
}
@ -187,7 +187,7 @@ extension NotificationTableViewCellDelegate where Self: DataSourceProvider & Med
let status = _status.reblog ?? _status
return NotificationMediaTransitionContext(
status: .init(objectID: status.objectID),
needsToggleMediaSensitive: status.isMediaSensitiveToggled ? !status.sensitive : status.sensitive
needsToggleMediaSensitive: status.isMediaSensitive ? !status.isSensitiveToggled : false
)
}

View File

@ -143,12 +143,7 @@ extension StatusTableViewCellDelegate where Self: DataSourceProvider & MediaPrev
return
}
let managedObjectContext = self.context.managedObjectContext
let needsToggleMediaSensitive: Bool = try await managedObjectContext.perform {
guard let _status = status.object(in: managedObjectContext) else { return false }
let status = _status.reblog ?? _status
return status.isMediaSensitiveToggled ? !status.sensitive : status.sensitive
}
let needsToggleMediaSensitive = await !statusView.viewModel.isMediaReveal
guard !needsToggleMediaSensitive else {
try await DataSourceFacade.responseToToggleSensitiveAction(

View File

@ -0,0 +1,4 @@
"NSCameraUsageDescription" = "Used to take photo for post status";
"NSPhotoLibraryAddUsageDescription" = "Used to save photo into the Photo Library";
"NewPostShortcutItemTitle" = "New Post";
"SearchShortcutItemTitle" = "Search";

View File

@ -0,0 +1,4 @@
"NSCameraUsageDescription" = "Used to take photo for post status";
"NSPhotoLibraryAddUsageDescription" = "Used to save photo into the Photo Library";
"NewPostShortcutItemTitle" = "New Post";
"SearchShortcutItemTitle" = "Search";

View File

@ -10,6 +10,7 @@ import UIKit
import Combine
import MastodonAsset
import MastodonLocalization
import MastodonUI
protocol ComposeStatusPollOptionCollectionViewCellDelegate: AnyObject {
func composeStatusPollOptionCollectionViewCell(_ cell: ComposeStatusPollOptionCollectionViewCell, textFieldDidBeginEditing textField: UITextField)

View File

@ -0,0 +1,128 @@
//
// DiscoveryViewController.swift
// Mastodon
//
// Created by MainasuK on 2022-4-12.
//
import os.log
import UIKit
import Combine
import Tabman
import MastodonAsset
import MastodonUI
public class DiscoveryViewController: TabmanViewController, NeedsDependency {
public static let containerViewMarginForRegularHorizontalSizeClass: CGFloat = 64
public static let containerViewMarginForCompactHorizontalSizeClass: CGFloat = 16
var disposeBag = Set<AnyCancellable>()
let logger = Logger(subsystem: "DiscoveryViewController", category: "ViewController")
weak var context: AppContext! { willSet { precondition(!isViewLoaded) } }
weak var coordinator: SceneCoordinator! { willSet { precondition(!isViewLoaded) } }
private(set) lazy var viewModel = DiscoveryViewModel(
context: context,
coordinator: coordinator
)
private(set) lazy var buttonBar: TMBar.ButtonBar = {
let buttonBar = TMBar.ButtonBar()
buttonBar.backgroundView.style = .custom(view: buttonBarBackgroundView)
buttonBar.layout.interButtonSpacing = 0
buttonBar.layout.contentInset = .zero
buttonBar.indicator.backgroundColor = Asset.Colors.Label.primary.color
buttonBar.indicator.weight = .custom(value: 2)
return buttonBar
}()
let buttonBarBackgroundView: UIView = {
let view = UIView()
let barBottomLine = UIView.separatorLine
barBottomLine.backgroundColor = Asset.Colors.Label.secondary.color.withAlphaComponent(0.5)
barBottomLine.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(barBottomLine)
NSLayoutConstraint.activate([
barBottomLine.leadingAnchor.constraint(equalTo: view.leadingAnchor),
barBottomLine.trailingAnchor.constraint(equalTo: view.trailingAnchor),
barBottomLine.bottomAnchor.constraint(equalTo: view.bottomAnchor),
barBottomLine.heightAnchor.constraint(equalToConstant: 2).priority(.required - 1),
])
return view
}()
func customizeButtonBarAppearance() {
// The implmention use CATextlayer. Adapt for Dark Mode without dynamic colors
// Needs trigger update when `userInterfaceStyle` chagnes
let userInterfaceStyle = traitCollection.userInterfaceStyle
buttonBar.buttons.customize { button in
switch userInterfaceStyle {
case .dark:
// Asset.Colors.Label.primary.color
button.selectedTintColor = UIColor(red: 238.0/255.0, green: 238.0/255.0, blue: 238.0/255.0, alpha: 1.0)
// Asset.Colors.Label.secondary.color
button.tintColor = UIColor(red: 151.0/255.0, green: 157.0/255.0, blue: 173.0/255.0, alpha: 1.0)
default:
// Asset.Colors.Label.primary.color
button.selectedTintColor = UIColor(red: 40.0/255.0, green: 44.0/255.0, blue: 55.0/255.0, alpha: 1.0)
// Asset.Colors.Label.secondary.color
button.tintColor = UIColor(red: 60.0/255.0, green: 60.0/255.0, blue: 67.0/255.0, alpha: 0.6)
}
button.backgroundColor = .clear
button.contentInset = UIEdgeInsets(top: 12, left: 26, bottom: 12, right: 26)
}
}
}
extension DiscoveryViewController {
public override func viewDidLoad() {
super.viewDidLoad()
setupAppearance(theme: ThemeService.shared.currentTheme.value)
ThemeService.shared.currentTheme
.receive(on: DispatchQueue.main)
.sink { [weak self] theme in
guard let self = self else { return }
self.setupAppearance(theme: theme)
}
.store(in: &disposeBag)
dataSource = viewModel
addBar(
buttonBar,
dataSource: viewModel,
at: .top
)
customizeButtonBarAppearance()
viewModel.$viewControllers
.receive(on: DispatchQueue.main)
.sink { [weak self] _ in
guard let self = self else { return }
self.reloadData()
}
.store(in: &disposeBag)
}
public override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
customizeButtonBarAppearance()
}
}
extension DiscoveryViewController {
private func setupAppearance(theme: Theme) {
view.backgroundColor = theme.secondarySystemBackgroundColor
buttonBarBackgroundView.backgroundColor = theme.systemBackgroundColor
}
}

View File

@ -0,0 +1,156 @@
//
// DiscoveryViewModel.swift
// Mastodon
//
// Created by MainasuK on 2022-4-12.
//
import UIKit
import Combine
import Tabman
import Pageboy
final class DiscoveryViewModel {
var disposeBag = Set<AnyCancellable>()
// input
let context: AppContext
let discoveryPostsViewController: DiscoveryPostsViewController
let discoveryHashtagsViewController: DiscoveryHashtagsViewController
let discoveryNewsViewController: DiscoveryNewsViewController
let discoveryForYouViewController: DiscoveryForYouViewController
@Published var viewControllers: [ScrollViewContainer & PageViewController]
init(context: AppContext, coordinator: SceneCoordinator) {
func setupDependency(_ needsDependency: NeedsDependency) {
needsDependency.context = context
needsDependency.coordinator = coordinator
}
self.context = context
discoveryPostsViewController = {
let viewController = DiscoveryPostsViewController()
setupDependency(viewController)
viewController.viewModel = DiscoveryPostsViewModel(context: context)
return viewController
}()
discoveryHashtagsViewController = {
let viewController = DiscoveryHashtagsViewController()
setupDependency(viewController)
viewController.viewModel = DiscoveryHashtagsViewModel(context: context)
return viewController
}()
discoveryNewsViewController = {
let viewController = DiscoveryNewsViewController()
setupDependency(viewController)
viewController.viewModel = DiscoveryNewsViewModel(context: context)
return viewController
}()
discoveryForYouViewController = {
let viewController = DiscoveryForYouViewController()
setupDependency(viewController)
viewController.viewModel = DiscoveryForYouViewModel(context: context)
return viewController
}()
self.viewControllers = [
discoveryPostsViewController,
discoveryHashtagsViewController,
discoveryNewsViewController,
discoveryForYouViewController,
]
// end init
discoveryPostsViewController.viewModel.$isServerSupportEndpoint
.receive(on: DispatchQueue.main)
.sink { [weak self] isServerSupportEndpoint in
guard let self = self else { return }
if !isServerSupportEndpoint {
self.viewControllers.removeAll(where: {
$0 === self.discoveryPostsViewController || $0 === self.discoveryPostsViewController
})
}
}
.store(in: &disposeBag)
discoveryNewsViewController.viewModel.$isServerSupportEndpoint
.receive(on: DispatchQueue.main)
.sink { [weak self] isServerSupportEndpoint in
guard let self = self else { return }
if !isServerSupportEndpoint {
self.viewControllers.removeAll(where: { $0 === self.discoveryNewsViewController })
}
}
.store(in: &disposeBag)
}
}
// MARK: - PageboyViewControllerDataSource
extension DiscoveryViewModel: PageboyViewControllerDataSource {
func numberOfViewControllers(in pageboyViewController: PageboyViewController) -> Int {
return viewControllers.count
}
func viewController(for pageboyViewController: PageboyViewController, at index: PageboyViewController.PageIndex) -> UIViewController? {
return viewControllers[index]
}
func defaultPage(for pageboyViewController: PageboyViewController) -> PageboyViewController.Page? {
return .first
}
}
// MARK: - TMBarDataSource
extension DiscoveryViewModel: TMBarDataSource {
func barItem(for bar: TMBar, at index: Int) -> TMBarItemable {
guard !viewControllers.isEmpty, index < viewControllers.count else {
assertionFailure()
return TMBarItem(title: "")
}
return viewControllers[index].tabItem
}
}
protocol PageViewController: UIViewController {
var tabItemTitle: String { get }
var tabItem: TMBarItemable { get }
}
// MARK: - PageViewController
extension DiscoveryPostsViewController: PageViewController {
var tabItemTitle: String { "Posts" }
var tabItem: TMBarItemable {
return TMBarItem(title: tabItemTitle)
}
}
// MARK: - PageViewController
extension DiscoveryHashtagsViewController: PageViewController {
var tabItemTitle: String { "Hashtags" }
var tabItem: TMBarItemable {
return TMBarItem(title: tabItemTitle)
}
}
// MARK: - PageViewController
extension DiscoveryNewsViewController: PageViewController {
var tabItemTitle: String { "News" }
var tabItem: TMBarItemable {
return TMBarItem(title: tabItemTitle)
}
}
// MARK: - PageViewController
extension DiscoveryForYouViewController: PageViewController {
var tabItemTitle: String { "For You" }
var tabItem: TMBarItemable {
return TMBarItem(title: tabItemTitle)
}
}

View File

@ -0,0 +1,146 @@
//
// DiscoveryForYouViewController.swift
// Mastodon
//
// Created by MainasuK on 2022-4-14.
//
import os.log
import UIKit
import Combine
import MastodonUI
final class DiscoveryForYouViewController: UIViewController, NeedsDependency, MediaPreviewableViewController {
let logger = Logger(subsystem: "DiscoveryForYouViewController", category: "ViewController")
weak var context: AppContext! { willSet { precondition(!isViewLoaded) } }
weak var coordinator: SceneCoordinator! { willSet { precondition(!isViewLoaded) } }
var disposeBag = Set<AnyCancellable>()
var viewModel: DiscoveryForYouViewModel!
let mediaPreviewTransitionController = MediaPreviewTransitionController()
lazy var tableView: UITableView = {
let tableView = UITableView()
tableView.rowHeight = UITableView.automaticDimension
tableView.estimatedRowHeight = 100
tableView.separatorStyle = .none
tableView.backgroundColor = .clear
return tableView
}()
let refreshControl = UIRefreshControl()
deinit {
os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s", ((#file as NSString).lastPathComponent), #line, #function)
}
}
extension DiscoveryForYouViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = ThemeService.shared.currentTheme.value.secondarySystemBackgroundColor
ThemeService.shared.currentTheme
.receive(on: DispatchQueue.main)
.sink { [weak self] theme in
guard let self = self else { return }
self.view.backgroundColor = theme.secondarySystemBackgroundColor
}
.store(in: &disposeBag)
tableView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(tableView)
NSLayoutConstraint.activate([
tableView.topAnchor.constraint(equalTo: view.topAnchor),
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
])
tableView.delegate = self
viewModel.setupDiffableDataSource(
tableView: tableView,
profileCardTableViewCellDelegate: self
)
tableView.refreshControl = refreshControl
refreshControl.addTarget(self, action: #selector(DiscoveryForYouViewController.refreshControlValueChanged(_:)), for: .valueChanged)
viewModel.$isFetching
.receive(on: DispatchQueue.main)
.sink { [weak self] isFetching in
guard let self = self else { return }
if !isFetching {
self.refreshControl.endRefreshing()
}
}
.store(in: &disposeBag)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
refreshControl.endRefreshing()
tableView.deselectRow(with: transitionCoordinator, animated: animated)
}
}
extension DiscoveryForYouViewController {
@objc private func refreshControlValueChanged(_ sender: UIRefreshControl) {
Task {
try await viewModel.fetch()
}
}
}
// MARK: - UITableViewDelegate
extension DiscoveryForYouViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): \(indexPath)")
guard case let .user(record) = viewModel.diffableDataSource?.itemIdentifier(for: indexPath) else { return }
guard let user = record.object(in: context.managedObjectContext) else { return }
let profileViewModel = CachedProfileViewModel(
context: context,
mastodonUser: user
)
coordinator.present(
scene: .profile(viewModel: profileViewModel),
from: self,
transition: .show
)
}
}
// MARK: - ProfileCardTableViewCellDelegate
extension DiscoveryForYouViewController: ProfileCardTableViewCellDelegate {
func profileCardTableViewCell(_ cell: ProfileCardTableViewCell, profileCardView: ProfileCardView, relationshipButtonDidPressed button: ProfileRelationshipActionButton) {
guard let authenticationBox = viewModel.context.authenticationService.activeMastodonAuthenticationBox.value else { return }
guard let indexPath = tableView.indexPath(for: cell) else { return }
guard case let .user(record) = viewModel.diffableDataSource?.itemIdentifier(for: indexPath) else { return }
Task {
try await DataSourceFacade.responseToUserFollowAction(
dependency: self,
user: record,
authenticationBox: authenticationBox
)
} // end Task
}
}
// MARK: ScrollViewContainer
extension DiscoveryForYouViewController: ScrollViewContainer {
var scrollView: UIScrollView? {
tableView
}
}

View File

@ -0,0 +1,47 @@
//
// DiscoveryForYouViewModel+Diffable.swift
// Mastodon
//
// Created by MainasuK on 2022-4-14.
//
import UIKit
import Combine
import MastodonUI
extension DiscoveryForYouViewModel {
func setupDiffableDataSource(
tableView: UITableView,
profileCardTableViewCellDelegate: ProfileCardTableViewCellDelegate
) {
diffableDataSource = DiscoverySection.diffableDataSource(
tableView: tableView,
context: context,
configuration: DiscoverySection.Configuration(
profileCardTableViewCellDelegate: profileCardTableViewCellDelegate
)
)
Task {
try await fetch()
}
userFetchedResultsController.$records
.receive(on: DispatchQueue.main)
.sink { [weak self] records in
guard let self = self else { return }
guard let diffableDataSource = self.diffableDataSource else { return }
var snapshot = NSDiffableDataSourceSnapshot<DiscoverySection, DiscoveryItem>()
snapshot.appendSections([.forYou])
let items = records.map { DiscoveryItem.user($0) }
snapshot.appendItems(items, toSection: .forYou)
diffableDataSource.applySnapshot(snapshot, animated: false)
}
.store(in: &disposeBag)
}
}

View File

@ -0,0 +1,75 @@
//
// DiscoveryForYouViewModel.swift
// Mastodon
//
// Created by MainasuK on 2022-4-14.
//
import os.log
import UIKit
import Combine
import GameplayKit
import CoreData
import CoreDataStack
import MastodonSDK
final class DiscoveryForYouViewModel {
var disposeBag = Set<AnyCancellable>()
// input
let context: AppContext
let userFetchedResultsController: UserFetchedResultsController
@Published var isFetching = false
// output
var diffableDataSource: UITableViewDiffableDataSource<DiscoverySection, DiscoveryItem>?
let didLoadLatest = PassthroughSubject<Void, Never>()
init(context: AppContext) {
self.context = context
self.userFetchedResultsController = UserFetchedResultsController(
managedObjectContext: context.managedObjectContext,
domain: nil,
additionalPredicate: nil
)
// end init
context.authenticationService.activeMastodonAuthenticationBox
.map { $0?.domain }
.assign(to: \.domain, on: userFetchedResultsController)
.store(in: &disposeBag)
}
deinit {
os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s", ((#file as NSString).lastPathComponent), #line, #function)
}
}
extension DiscoveryForYouViewModel {
func fetch() async throws {
guard !isFetching else { return }
isFetching = true
defer { isFetching = false }
guard let authenticationBox = context.authenticationService.activeMastodonAuthenticationBox.value else { return }
do {
let response = try await context.apiService.suggestionAccountV2(
query: nil,
authenticationBox: authenticationBox
)
let userIDs = response.value.map { $0.account.id }
userFetchedResultsController.userIDs = userIDs
} catch {
// fallback V1
let response2 = try await context.apiService.suggestionAccount(
query: nil,
authenticationBox: authenticationBox
)
let userIDs = response2.value.map { $0.id }
userFetchedResultsController.userIDs = userIDs
}
}
}

View File

@ -0,0 +1,133 @@
//
// DiscoveryHashtagsViewController.swift
// Mastodon
//
// Created by MainasuK on 2022-4-13.
//
import os.log
import UIKit
import Combine
import MastodonUI
final class DiscoveryHashtagsViewController: UIViewController, NeedsDependency, MediaPreviewableViewController {
let logger = Logger(subsystem: "TrendPostsViewController", category: "ViewController")
weak var context: AppContext! { willSet { precondition(!isViewLoaded) } }
weak var coordinator: SceneCoordinator! { willSet { precondition(!isViewLoaded) } }
var disposeBag = Set<AnyCancellable>()
var viewModel: DiscoveryHashtagsViewModel!
let mediaPreviewTransitionController = MediaPreviewTransitionController()
lazy var tableView: UITableView = {
let tableView = UITableView()
tableView.rowHeight = UITableView.automaticDimension
tableView.estimatedRowHeight = 100
tableView.separatorStyle = .none
tableView.backgroundColor = .clear
return tableView
}()
let refreshControl = UIRefreshControl()
deinit {
os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s", ((#file as NSString).lastPathComponent), #line, #function)
}
}
extension DiscoveryHashtagsViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = ThemeService.shared.currentTheme.value.secondarySystemBackgroundColor
ThemeService.shared.currentTheme
.receive(on: DispatchQueue.main)
.sink { [weak self] theme in
guard let self = self else { return }
self.view.backgroundColor = theme.secondarySystemBackgroundColor
}
.store(in: &disposeBag)
tableView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(tableView)
NSLayoutConstraint.activate([
tableView.topAnchor.constraint(equalTo: view.topAnchor),
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
])
tableView.refreshControl = refreshControl
refreshControl.addTarget(self, action: #selector(DiscoveryHashtagsViewController.refreshControlValueChanged(_:)), for: .valueChanged)
tableView.delegate = self
viewModel.setupDiffableDataSource(
tableView: tableView
)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
tableView.deselectRow(with: transitionCoordinator, animated: animated)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
viewModel.viewDidAppeared.send()
}
}
extension DiscoveryHashtagsViewController {
@objc private func refreshControlValueChanged(_ sender: UIRefreshControl) {
Task { @MainActor in
do {
try await viewModel.fetch()
} catch {
// do nothing
}
sender.endRefreshing()
} // end Task
}
}
// MARK: - UITableViewDelegate
extension DiscoveryHashtagsViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): \(indexPath)")
guard case let .hashtag(tag) = viewModel.diffableDataSource?.itemIdentifier(for: indexPath) else { return }
let hashtagTimelineViewModel = HashtagTimelineViewModel(context: context, hashtag: tag.name)
coordinator.present(
scene: .hashtagTimeline(viewModel: hashtagTimelineViewModel),
from: self,
transition: .show
)
}
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
guard let cell = cell as? TrendTableViewCell else { return }
guard let diffableDataSource = viewModel.diffableDataSource else { return }
guard let item = diffableDataSource.itemIdentifier(for: indexPath) else { return }
if let lastItem = diffableDataSource.snapshot().itemIdentifiers.last, item == lastItem {
cell.configureSeparator(style: .edge)
}
}
}
// MARK: ScrollViewContainer
extension DiscoveryHashtagsViewController: ScrollViewContainer {
var scrollView: UIScrollView? {
tableView
}
}

View File

@ -0,0 +1,42 @@
//
// DiscoveryHashtagsViewModel+Diffable.swift
// Mastodon
//
// Created by MainasuK on 2022-4-13.
//
import UIKit
extension DiscoveryHashtagsViewModel {
func setupDiffableDataSource(
tableView: UITableView
) {
diffableDataSource = DiscoverySection.diffableDataSource(
tableView: tableView,
context: context,
configuration: DiscoverySection.Configuration()
)
var snapshot = NSDiffableDataSourceSnapshot<DiscoverySection, DiscoveryItem>()
snapshot.appendSections([.hashtags])
diffableDataSource?.apply(snapshot)
$hashtags
.receive(on: DispatchQueue.main)
.sink { [weak self] hashtags in
guard let self = self else { return }
guard let diffableDataSource = self.diffableDataSource else { return }
var snapshot = NSDiffableDataSourceSnapshot<DiscoverySection, DiscoveryItem>()
snapshot.appendSections([.hashtags])
let items = hashtags.map { DiscoveryItem.hashtag($0) }
snapshot.appendItems(items, toSection: .hashtags)
diffableDataSource.apply(snapshot)
}
.store(in: &disposeBag)
}
}

View File

@ -0,0 +1,76 @@
//
// DiscoveryHashtagsViewModel.swift
// Mastodon
//
// Created by MainasuK on 2022-4-13.
//
import os.log
import UIKit
import Combine
import GameplayKit
import CoreData
import CoreDataStack
import MastodonSDK
final class DiscoveryHashtagsViewModel {
let logger = Logger(subsystem: "DiscoveryHashtagsViewModel", category: "ViewModel")
var disposeBag = Set<AnyCancellable>()
// input
let context: AppContext
let viewDidAppeared = PassthroughSubject<Void, Never>()
// output
var diffableDataSource: UITableViewDiffableDataSource<DiscoverySection, DiscoveryItem>?
@Published var hashtags: [Mastodon.Entity.Tag] = []
init(context: AppContext) {
self.context = context
// end init
Publishers.CombineLatest(
context.authenticationService.activeMastodonAuthenticationBox,
viewDidAppeared
)
.compactMap { authenticationBox, _ -> MastodonAuthenticationBox? in
return authenticationBox
}
.throttle(for: 3, scheduler: DispatchQueue.main, latest: true)
.asyncMap { authenticationBox in
try await context.apiService.trendHashtags(domain: authenticationBox.domain, query: nil)
}
.retry(3)
.map { response in Result<Mastodon.Response.Content<[Mastodon.Entity.Tag]>, Error> { response } }
.catch { error in Just(Result<Mastodon.Response.Content<[Mastodon.Entity.Tag]>, Error> { throw error }) }
.receive(on: DispatchQueue.main)
.sink { [weak self] result in
guard let self = self else { return }
switch result {
case .success(let response):
self.hashtags = response.value.filter { !$0.name.isEmpty }
case .failure:
break
}
}
.store(in: &disposeBag)
}
deinit {
os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s", ((#file as NSString).lastPathComponent), #line, #function)
}
}
extension DiscoveryHashtagsViewModel {
@MainActor
func fetch() async throws {
guard let authenticationBox = context.authenticationService.activeMastodonAuthenticationBox.value else { return }
let response = try await context.apiService.trendHashtags(domain: authenticationBox.domain, query: nil)
hashtags = response.value.filter { !$0.name.isEmpty }
logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): fetch tags: \(response.value.count)")
}
}

Some files were not shown because too many files have changed in this diff Show More