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> <key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string> <string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>1.3.0</string> <string>1.3.1</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>109</string> <string>113</string>
</dict> </dict>
</plist> </plist>

View File

@ -1,4 +1,4 @@
"16wxgf" = "النَشر على ماستودون"; "16wxgf" = "النَّشرُ عَلَى مَاستودُون";
"751xkl" = "محتوى نصي"; "751xkl" = "محتوى نصي";
@ -14,7 +14,7 @@
"RxSqsb" = "مَنشور"; "RxSqsb" = "مَنشور";
"WCIR3D" = "نَشر ${content} على ماستودون"; "WCIR3D" = "نَشرُ ${content} عَلَى مَاستودُون";
"ZKJSNu" = "مَنشور"; "ZKJSNu" = "مَنشور";
@ -32,9 +32,9 @@
"ayoYEb-ehFLjY" = "${content}، المُتابِعُون فقط"; "ayoYEb-ehFLjY" = "${content}، المُتابِعُون فقط";
"dUyuGg" = "النشر على ماستدون"; "dUyuGg" = "النَّشرُ عَلَى مَاستودُون";
"dYQ5NN" = "للعامة"; "dYQ5NN" = "لِلعَامَّة";
"ehFLjY" = "لمتابعيك فقط"; "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}"; "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"; "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> <key>There are ${count} options matching ${content}. - 2</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>There are %#@count_option@ matching ${content}.</string> <string>Ci sono %#@count_option@ corrispondenti a «${content}».</string>
<key>count_option</key> <key>count_option</key>
<dict> <dict>
<key>NSStringFormatSpecTypeKey</key> <key>NSStringFormatSpecTypeKey</key>
@ -13,15 +13,15 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>%ld</string> <string>%ld</string>
<key>one</key> <key>one</key>
<string>1 option</string> <string>1 opzione</string>
<key>other</key> <key>other</key>
<string>%ld options</string> <string>%ld opzioni</string>
</dict> </dict>
</dict> </dict>
<key>There are ${count} options matching ${visibility}.</key> <key>There are ${count} options matching ${visibility}.</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>There are %#@count_option@ matching ${visibility}.</string> <string>Ci sono %#@count_option@ corrispondenti a «${visibility}».</string>
<key>count_option</key> <key>count_option</key>
<dict> <dict>
<key>NSStringFormatSpecTypeKey</key> <key>NSStringFormatSpecTypeKey</key>
@ -29,9 +29,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>%ld</string> <string>%ld</string>
<key>one</key> <key>one</key>
<string>1 option</string> <string>1 opzione</string>
<key>other</key> <key>other</key>
<string>%ld options</string> <string>%ld opzioni</string>
</dict> </dict>
</dict> </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 "fr_FR": return "fr" // French
case "de_DE": return "de" // German case "de_DE": return "de" // German
case "ja_JP": return "ja" // Japanese case "ja_JP": return "ja" // Japanese
case "kab_KAB": return "kab" // Kabyle
case "kmr_TR": return "ku" // Kurmanji (Kurdish) case "kmr_TR": return "ku" // Kurmanji (Kurdish)
case "ru_RU": return "ru" // Russian case "ru_RU": return "ru" // Russian
case "gd_GB": return "gd-GB" // Scottish Gaelic 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 "es_AR": return "es-419" // Spanish, Argentina
case "sv_FI": return "sv_FI" // Swedish, Finland case "sv_FI": return "sv_FI" // Swedish, Finland
case "th_TH": return "th" // Thai case "th_TH": return "th" // Thai
case "vi_VN": return "vi" // Vietnamese
default: return nil default: return nil
} }
} }

View File

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

View File

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

View File

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

View File

@ -114,6 +114,22 @@
<string>%ld impulsos</string> <string>%ld impulsos</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

@ -41,11 +41,11 @@
"block_entire_domain": "Bloquejar Domini" "block_entire_domain": "Bloquejar Domini"
}, },
"save_photo_failure": { "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." "message": "Activa el permís d'accés a la biblioteca de fotos per desar-la."
}, },
"delete_post": { "delete_post": {
"title": "Estàs segur que vols suprimir aquesta publicació?", "title": "Esborrar Publicació",
"message": "Estàs segur que vols suprimir aquesta publicació?" "message": "Estàs segur que vols suprimir aquesta publicació?"
}, },
"clean_cache": { "clean_cache": {
@ -83,7 +83,7 @@
"share_post": "Compartir Publicació", "share_post": "Compartir Publicació",
"open_in_safari": "Obrir a Safari", "open_in_safari": "Obrir a Safari",
"open_in_browser": "Obre al navegador", "open_in_browser": "Obre al navegador",
"find_people": "Busca persones per seguir", "find_people": "Busca persones a seguir",
"manually_search": "Cerca manualment a canvi", "manually_search": "Cerca manualment a canvi",
"skip": "Omet", "skip": "Omet",
"reply": "Respon", "reply": "Respon",
@ -110,26 +110,27 @@
"previous_status": "Publicació anterior", "previous_status": "Publicació anterior",
"next_status": "Publicació següent", "next_status": "Publicació següent",
"open_status": "Obre la publicació", "open_status": "Obre la publicació",
"open_author_profile": "Obre el perfil de l'autor", "open_author_profile": "Obre el Perfil de l'Autor",
"open_reblogger_profile": "Obre el perfil del impulsor", "open_reblogger_profile": "Obre el Perfil del Impulsor",
"reply_status": "Respon a la publicació", "reply_status": "Respon a la Publicació",
"toggle_reblog": "Commuta l'impuls de la publicació", "toggle_reblog": "Commuta l'Impuls de la Publicació",
"toggle_favorite": "Commuta el Favorit de la publicació", "toggle_favorite": "Commuta el Favorit de la Publicació",
"toggle_content_warning": "Commuta l'Avís de Contingut", "toggle_content_warning": "Commuta l'Avís de Contingut",
"preview_image": "Vista prèvia de l'Imatge" "preview_image": "Vista prèvia de l'Imatge"
}, },
"segmented_control": { "segmented_control": {
"previous_section": "Secció anterior", "previous_section": "Secció Anterior",
"next_section": "Secció següent" "next_section": "Secció Següent"
} }
}, },
"status": { "status": {
"user_reblogged": "%s ha impulsat", "user_reblogged": "%s ha impulsat",
"user_replied_to": "Ha respòs a %s", "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", "show_user_profile": "Mostra el perfil de l'usuari",
"content_warning": "Advertència de Contingut", "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": { "poll": {
"vote": "Vota", "vote": "Vota",
"closed": "Finalitzada" "closed": "Finalitzada"
@ -141,7 +142,11 @@
"favorite": "Favorit", "favorite": "Favorit",
"unfavorite": "Desfer Favorit", "unfavorite": "Desfer Favorit",
"menu": "Menú", "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": { "tag": {
"url": "URL", "url": "URL",
@ -182,15 +187,15 @@
"now": "Ara" "now": "Ara"
}, },
"loader": { "loader": {
"load_missing_posts": "Carrega les publicacions que falten", "load_missing_posts": "Carrega les publicacions faltants",
"loading_missing_posts": "Carregant les publicacions que falten...", "loading_missing_posts": "Carregant les publicacions faltants...",
"show_more_replies": "Mostra més respostes" "show_more_replies": "Mostra més respostes"
}, },
"header": { "header": {
"no_status_found": "No s'ha trobat cap publicació", "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í.", "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í.", "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.", "user_blocked_warning": "No pots veure el perfil de %s\n fins que et desbloquegi.",
"suspended_warning": "Aquest usuari ha estat suspès.", "suspended_warning": "Aquest usuari ha estat suspès.",
"user_suspended_warning": "El compte de %s ha estat suspès." "user_suspended_warning": "El compte de %s ha estat suspès."
@ -205,7 +210,7 @@
"log_in": "Inicia sessió" "log_in": "Inicia sessió"
}, },
"server_picker": { "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": "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.", "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": { "button": {
@ -266,7 +271,7 @@
"checked": "verificat", "checked": "verificat",
"unchecked": "no 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": { "invite": {
"registration_user_invite_request": "Perquè vols unir-te?" "registration_user_invite_request": "Perquè vols unir-te?"
@ -294,7 +299,7 @@
"inclusion": "%s no és un valor suportat" "inclusion": "%s no és un valor suportat"
}, },
"special": { "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)", "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", "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)" "password_too_short": "La contrasenya és massa curta (ha de tenir 8 caràcters com a mínim)"
@ -313,7 +318,7 @@
}, },
"confirm_email": { "confirm_email": {
"title": "Una última cosa.", "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": { "button": {
"open_email_app": "Obre l'aplicació de correu", "open_email_app": "Obre l'aplicació de correu",
"resend": "Reenvia" "resend": "Reenvia"
@ -440,6 +445,12 @@
"title": "Desbloqueja el Compte", "title": "Desbloqueja el Compte",
"message": "Confirma per a desbloquejar %s" "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": { "follower": {
@ -481,6 +492,14 @@
"clear": "Neteja" "clear": "Neteja"
} }
}, },
"discovery": {
"tabs": {
"posts": "Publicacions",
"hashtags": "Etiquetes",
"news": "Notícies",
"for_you": "Per a tu"
}
},
"favorite": { "favorite": {
"title": "Els teus Favorits" "title": "Els teus Favorits"
}, },
@ -532,7 +551,7 @@
"anyone": "algú", "anyone": "algú",
"follower": "un seguidor", "follower": "un seguidor",
"follow": "a qualsevol que segueixi", "follow": "a qualsevol que segueixi",
"noone": "algú", "noone": "ningú",
"title": "Notifica'm quan" "title": "Notifica'm quan"
} }
}, },
@ -541,7 +560,8 @@
"true_black_dark_mode": "Mode negre fosc autèntic", "true_black_dark_mode": "Mode negre fosc autèntic",
"disable_avatar_animation": "Desactiva avatars animats", "disable_avatar_animation": "Desactiva avatars animats",
"disable_emoji_animation": "Desactiva emojis 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": { "boring_zone": {
"title": "La Zona Avorrida", "title": "La Zona Avorrida",

View File

@ -170,6 +170,30 @@
<string>%ld reblogs</string> <string>%ld reblogs</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Show user profile", "show_user_profile": "Show user profile",
"content_warning": "Content Warning", "content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal", "media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": { "poll": {
"vote": "Vote", "vote": "Vote",
"closed": "Closed" "closed": "Closed"
@ -141,7 +142,11 @@
"favorite": "Favorite", "favorite": "Favorite",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Menu", "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": { "tag": {
"url": "URL", "url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "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": { "follower": {
@ -481,6 +492,14 @@
"clear": "Clear" "clear": "Clear"
} }
}, },
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": { "favorite": {
"title": "Your Favorites" "title": "Your Favorites"
}, },
@ -541,7 +560,8 @@
"true_black_dark_mode": "True black dark mode", "true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars", "disable_avatar_animation": "Disable animated avatars",
"disable_emoji_animation": "Disable animated emojis", "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": { "boring_zone": {
"title": "The Boring Zone", "title": "The Boring Zone",

View File

@ -114,6 +114,22 @@
<string>%ld reblogs</string> <string>%ld reblogs</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Show user profile", "show_user_profile": "Show user profile",
"content_warning": "Content Warning", "content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal", "media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": { "poll": {
"vote": "Vote", "vote": "Vote",
"closed": "Closed" "closed": "Closed"
@ -141,7 +142,11 @@
"favorite": "Favorite", "favorite": "Favorite",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Menu", "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": { "tag": {
"url": "URL", "url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "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": { "follower": {
@ -481,6 +492,14 @@
"clear": "Clear" "clear": "Clear"
} }
}, },
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": { "favorite": {
"title": "Your Favorites" "title": "Your Favorites"
}, },
@ -541,7 +560,8 @@
"true_black_dark_mode": "True black dark mode", "true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars", "disable_avatar_animation": "Disable animated avatars",
"disable_emoji_animation": "Disable animated emojis", "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": { "boring_zone": {
"title": "The Boring Zone", "title": "The Boring Zone",

View File

@ -114,6 +114,22 @@
<string>%ld Reblogs</string> <string>%ld Reblogs</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Benutzerprofil anzeigen", "show_user_profile": "Benutzerprofil anzeigen",
"content_warning": "Inhaltswarnung", "content_warning": "Inhaltswarnung",
"media_content_warning": "Tippe irgendwo zum Anzeigen", "media_content_warning": "Tippe irgendwo zum Anzeigen",
"tap_to_reveal": "Zum Anzeigen tippen",
"poll": { "poll": {
"vote": "Abstimmen", "vote": "Abstimmen",
"closed": "Beendet" "closed": "Beendet"
@ -141,7 +142,11 @@
"favorite": "Favorit", "favorite": "Favorit",
"unfavorite": "Aus Favoriten entfernen", "unfavorite": "Aus Favoriten entfernen",
"menu": "Menü", "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": { "tag": {
"url": "URL", "url": "URL",
@ -440,6 +445,12 @@
"title": "Konto entsperren", "title": "Konto entsperren",
"message": "Bestätige %s zu 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": { "follower": {
@ -481,6 +492,14 @@
"clear": "Zurücksetzen" "clear": "Zurücksetzen"
} }
}, },
"discovery": {
"tabs": {
"posts": "Beiträge",
"hashtags": "Hashtags",
"news": "Nachrichten",
"for_you": "Für dich"
}
},
"favorite": { "favorite": {
"title": "Deine Favoriten" "title": "Deine Favoriten"
}, },
@ -541,7 +560,8 @@
"true_black_dark_mode": "Vollständig dunkler Dunkelmodus", "true_black_dark_mode": "Vollständig dunkler Dunkelmodus",
"disable_avatar_animation": "Animierte Profilbilder deaktivieren", "disable_avatar_animation": "Animierte Profilbilder deaktivieren",
"disable_emoji_animation": "Animierte Emojis 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": { "boring_zone": {
"title": "Der langweilige Bereich", "title": "Der langweilige Bereich",

View File

@ -114,6 +114,22 @@
<string>%ld reblogs</string> <string>%ld reblogs</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Show user profile", "show_user_profile": "Show user profile",
"content_warning": "Content Warning", "content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal", "media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": { "poll": {
"vote": "Vote", "vote": "Vote",
"closed": "Closed" "closed": "Closed"
@ -141,7 +142,11 @@
"favorite": "Favorite", "favorite": "Favorite",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Menu", "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": { "tag": {
"url": "URL", "url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "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": { "follower": {
@ -481,6 +492,14 @@
"clear": "Clear" "clear": "Clear"
} }
}, },
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": { "favorite": {
"title": "Your Favorites" "title": "Your Favorites"
}, },
@ -541,7 +560,8 @@
"true_black_dark_mode": "True black dark mode", "true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars", "disable_avatar_animation": "Disable animated avatars",
"disable_emoji_animation": "Disable animated emojis", "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": { "boring_zone": {
"title": "The Boring Zone", "title": "The Boring Zone",

View File

@ -114,6 +114,22 @@
<string>%ld adhesiones</string> <string>%ld adhesiones</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <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." "message": "Por favor, habilitá el permiso de acceso a la biblioteca de fotos para guardar la imagen."
}, },
"delete_post": { "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?" "message": "¿Estás seguro que querés eliminar este mensaje?"
}, },
"clean_cache": { "clean_cache": {
@ -130,6 +130,7 @@
"show_user_profile": "Mostrar perfil de usuario", "show_user_profile": "Mostrar perfil de usuario",
"content_warning": "Advertencia de contenido", "content_warning": "Advertencia de contenido",
"media_content_warning": "Toca en cualquier lugar para mostrar", "media_content_warning": "Toca en cualquier lugar para mostrar",
"tap_to_reveal": "Tocá para mostrar",
"poll": { "poll": {
"vote": "Votar", "vote": "Votar",
"closed": "Cerrada" "closed": "Cerrada"
@ -141,7 +142,11 @@
"favorite": "Marcar como favorito", "favorite": "Marcar como favorito",
"unfavorite": "Dejar de marcar como favorito", "unfavorite": "Dejar de marcar como favorito",
"menu": "Menú", "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": { "tag": {
"url": "Dirección web", "url": "Dirección web",
@ -440,6 +445,12 @@
"title": "Desbloquear cuenta", "title": "Desbloquear cuenta",
"message": "Confirmá para desbloquear a %s" "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": { "follower": {
@ -481,6 +492,14 @@
"clear": "Limpiar" "clear": "Limpiar"
} }
}, },
"discovery": {
"tabs": {
"posts": "Mensajes",
"hashtags": "Etiquetas",
"news": "Novedades",
"for_you": "Para vos"
}
},
"favorite": { "favorite": {
"title": "Tus favoritos" "title": "Tus favoritos"
}, },
@ -541,7 +560,8 @@
"true_black_dark_mode": "Modo negro oscuro real", "true_black_dark_mode": "Modo negro oscuro real",
"disable_avatar_animation": "Deshabilitar avatares animados", "disable_avatar_animation": "Deshabilitar avatares animados",
"disable_emoji_animation": "Deshabilitar emojis 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": { "boring_zone": {
"title": "La zona aburrida", "title": "La zona aburrida",

View File

@ -114,6 +114,22 @@
<string>%ld reblogueos</string> <string>%ld reblogueos</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Mostrar perfil del usuario", "show_user_profile": "Mostrar perfil del usuario",
"content_warning": "Advertencia de Contenido", "content_warning": "Advertencia de Contenido",
"media_content_warning": "Pulsa en cualquier sitio para mostrar", "media_content_warning": "Pulsa en cualquier sitio para mostrar",
"tap_to_reveal": "Tap to reveal",
"poll": { "poll": {
"vote": "Vota", "vote": "Vota",
"closed": "Cerrado" "closed": "Cerrado"
@ -141,7 +142,11 @@
"favorite": "Favorito", "favorite": "Favorito",
"unfavorite": "No favorito", "unfavorite": "No favorito",
"menu": "Menú", "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": { "tag": {
"url": "URL", "url": "URL",
@ -440,6 +445,12 @@
"title": "Desbloquear cuenta", "title": "Desbloquear cuenta",
"message": "Confirmar para desbloquear a %s" "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": { "follower": {
@ -481,6 +492,14 @@
"clear": "Borrar" "clear": "Borrar"
} }
}, },
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": { "favorite": {
"title": "Tus Favoritos" "title": "Tus Favoritos"
}, },
@ -541,7 +560,8 @@
"true_black_dark_mode": "Modo oscuro negro real", "true_black_dark_mode": "Modo oscuro negro real",
"disable_avatar_animation": "Deshabilitar avatares animados", "disable_avatar_animation": "Deshabilitar avatares animados",
"disable_emoji_animation": "Deshabilitar emojis 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": { "boring_zone": {
"title": "La Zona Aburrida", "title": "La Zona Aburrida",

View File

@ -114,6 +114,22 @@
<string>%ld bultzada</string> <string>%ld bultzada</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Erakutsi erabiltzailearen profila", "show_user_profile": "Erakutsi erabiltzailearen profila",
"content_warning": "Edukiaren abisua", "content_warning": "Edukiaren abisua",
"media_content_warning": "Ukitu edonon bistaratzeko", "media_content_warning": "Ukitu edonon bistaratzeko",
"tap_to_reveal": "Sakatu erakusteko",
"poll": { "poll": {
"vote": "Bozkatu", "vote": "Bozkatu",
"closed": "Itxita" "closed": "Itxita"
@ -141,7 +142,11 @@
"favorite": "Gogokoa", "favorite": "Gogokoa",
"unfavorite": "Kendu gogokoa", "unfavorite": "Kendu gogokoa",
"menu": "Menua", "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": { "tag": {
"url": "URLa", "url": "URLa",
@ -440,6 +445,12 @@
"title": "Desblokeatu kontua", "title": "Desblokeatu kontua",
"message": "Berretsi %s desblokeatzea" "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": { "follower": {
@ -481,6 +492,14 @@
"clear": "Garbitu" "clear": "Garbitu"
} }
}, },
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": { "favorite": {
"title": "Zure gogokoak" "title": "Zure gogokoak"
}, },
@ -491,8 +510,8 @@
}, },
"notification_description": { "notification_description": {
"followed_you": "zu jarraitzen hasi da", "followed_you": "zu jarraitzen hasi da",
"favorited_your_post": "erabiltzaileak zure bidalketa gogoko du", "favorited_your_post": "(e)k zure bidalketa gogoko du",
"reblogged_your_post": "erabiltzaileak bultzada eman dio zure bidalketari", "reblogged_your_post": "(e)k bultzada eman dio zure bidalketari",
"mentioned_you": "erabiltzaileak aipatu zaitu", "mentioned_you": "erabiltzaileak aipatu zaitu",
"request_to_follow_you": "erabiltzaileak zu jarraitzea eskatu du", "request_to_follow_you": "erabiltzaileak zu jarraitzea eskatu du",
"poll_has_ended": "inkesta amaitu da" "poll_has_ended": "inkesta amaitu da"
@ -541,7 +560,8 @@
"true_black_dark_mode": "Benetako modu beltz iluna", "true_black_dark_mode": "Benetako modu beltz iluna",
"disable_avatar_animation": "Desgaitu abatar animatuak", "disable_avatar_animation": "Desgaitu abatar animatuak",
"disable_emoji_animation": "Desgaitu emoji 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": { "boring_zone": {
"title": "Eremu aspergarria", "title": "Eremu aspergarria",

View File

@ -114,6 +114,22 @@
<string>%ld reblogs</string> <string>%ld reblogs</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Montrer le profil de lutilisateur·rice", "show_user_profile": "Montrer le profil de lutilisateur·rice",
"content_warning": "Avertissement de contenu", "content_warning": "Avertissement de contenu",
"media_content_warning": "Tapotez nimporte où pour révéler la publication", "media_content_warning": "Tapotez nimporte où pour révéler la publication",
"tap_to_reveal": "Appuyer pour afficher",
"poll": { "poll": {
"vote": "Voter", "vote": "Voter",
"closed": "Fermé" "closed": "Fermé"
@ -141,7 +142,11 @@
"favorite": "Favori", "favorite": "Favori",
"unfavorite": "Retirer des favoris", "unfavorite": "Retirer des favoris",
"menu": "Menu", "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": { "tag": {
"url": "URL", "url": "URL",
@ -440,6 +445,12 @@
"title": "Débloquer le compte", "title": "Débloquer le compte",
"message": "Confirmer le déblocage de %s" "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": { "follower": {
@ -481,6 +492,14 @@
"clear": "Effacer" "clear": "Effacer"
} }
}, },
"discovery": {
"tabs": {
"posts": "Messages",
"hashtags": "Hashtags",
"news": "Actualité",
"for_you": "Pour vous"
}
},
"favorite": { "favorite": {
"title": "Vos favoris" "title": "Vos favoris"
}, },
@ -541,7 +560,8 @@
"true_black_dark_mode": "Vrai mode sombre", "true_black_dark_mode": "Vrai mode sombre",
"disable_avatar_animation": "Désactiver les avatars animés", "disable_avatar_animation": "Désactiver les avatars animés",
"disable_emoji_animation": "Désactiver les émojis animées", "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": { "boring_zone": {
"title": "La zone ennuyante", "title": "La zone ennuyante",

View File

@ -142,6 +142,26 @@
<string>%ld brosnachadh</string> <string>%ld brosnachadh</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Seall pròifil a chleachdaiche", "show_user_profile": "Seall pròifil a chleachdaiche",
"content_warning": "Rabhadh susbainte", "content_warning": "Rabhadh susbainte",
"media_content_warning": "Thoir gnogag àite sam bith gus a nochdadh", "media_content_warning": "Thoir gnogag àite sam bith gus a nochdadh",
"tap_to_reveal": "Thoir gnogag gus a nochdadh",
"poll": { "poll": {
"vote": "Cuir bhòt", "vote": "Cuir bhòt",
"closed": "Dùinte" "closed": "Dùinte"
@ -141,7 +142,11 @@
"favorite": "Cuir ris na h-annsachdan", "favorite": "Cuir ris na h-annsachdan",
"unfavorite": "Thoir air falbh o na h-annsachdan", "unfavorite": "Thoir air falbh o na h-annsachdan",
"menu": "Clàr-taice", "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": { "tag": {
"url": "URL", "url": "URL",
@ -440,6 +445,12 @@
"title": "Dì-bhac an cunntas", "title": "Dì-bhac an cunntas",
"message": "Dearbh dì-bhacadh %s" "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": { "follower": {
@ -481,6 +492,14 @@
"clear": "Falamhaich" "clear": "Falamhaich"
} }
}, },
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": { "favorite": {
"title": "Na h-annsachdan agad" "title": "Na h-annsachdan agad"
}, },
@ -541,7 +560,8 @@
"true_black_dark_mode": "Modh dubh dorcha", "true_black_dark_mode": "Modh dubh dorcha",
"disable_avatar_animation": "Cuir beothachadh nan avataran à comas", "disable_avatar_animation": "Cuir beothachadh nan avataran à comas",
"disable_emoji_animation": "Cuir beothachadh nan Emojis à 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": { "boring_zone": {
"title": "An earrann ràsanach", "title": "An earrann ràsanach",

View File

@ -114,6 +114,22 @@
<string>%ld reblogs</string> <string>%ld reblogs</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

@ -2,8 +2,8 @@
"common": { "common": {
"alerts": { "alerts": {
"common": { "common": {
"please_try_again": "Please try again.", "please_try_again": "कृपया फिर से प्रयास करें।",
"please_try_again_later": "Please try again later." "please_try_again_later": "बाद में फिर से प्रयास करें।"
}, },
"sign_up_failure": { "sign_up_failure": {
"title": "Sign Up Failure" "title": "Sign Up Failure"
@ -45,7 +45,7 @@
"message": "Please enable the photo library access permission to save the photo." "message": "Please enable the photo library access permission to save the photo."
}, },
"delete_post": { "delete_post": {
"title": "Delete Post", "title": "पोस्ट को हटाएं",
"message": "Are you sure you want to delete this post?" "message": "Are you sure you want to delete this post?"
}, },
"clean_cache": { "clean_cache": {
@ -130,6 +130,7 @@
"show_user_profile": "Show user profile", "show_user_profile": "Show user profile",
"content_warning": "Content Warning", "content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal", "media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": { "poll": {
"vote": "Vote", "vote": "Vote",
"closed": "Closed" "closed": "Closed"
@ -141,7 +142,11 @@
"favorite": "Favorite", "favorite": "Favorite",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Menu", "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": { "tag": {
"url": "URL", "url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "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": { "follower": {
@ -481,6 +492,14 @@
"clear": "Clear" "clear": "Clear"
} }
}, },
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": { "favorite": {
"title": "Your Favorites" "title": "Your Favorites"
}, },
@ -541,7 +560,8 @@
"true_black_dark_mode": "True black dark mode", "true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars", "disable_avatar_animation": "Disable animated avatars",
"disable_emoji_animation": "Disable animated emojis", "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": { "boring_zone": {
"title": "The Boring Zone", "title": "The Boring Zone",

View File

@ -100,6 +100,20 @@
<string>%ld reblogs</string> <string>%ld reblogs</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Tampilkan Profil Pengguna", "show_user_profile": "Tampilkan Profil Pengguna",
"content_warning": "Peringatan Konten", "content_warning": "Peringatan Konten",
"media_content_warning": "Ketuk di mana saja untuk melihat", "media_content_warning": "Ketuk di mana saja untuk melihat",
"tap_to_reveal": "Tap to reveal",
"poll": { "poll": {
"vote": "Vote", "vote": "Vote",
"closed": "Ditutup" "closed": "Ditutup"
@ -141,7 +142,11 @@
"favorite": "Favorit", "favorite": "Favorit",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Menu", "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": { "tag": {
"url": "URL", "url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "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": { "follower": {
@ -481,6 +492,14 @@
"clear": "Hapus" "clear": "Hapus"
} }
}, },
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": { "favorite": {
"title": "Your Favorites" "title": "Your Favorites"
}, },
@ -541,7 +560,8 @@
"true_black_dark_mode": "True black dark mode", "true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars", "disable_avatar_animation": "Disable animated avatars",
"disable_emoji_animation": "Disable animated emojis", "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": { "boring_zone": {
"title": "Zona Membosankan", "title": "Zona Membosankan",

View File

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

View File

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

View File

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

View File

@ -100,6 +100,20 @@
<string>%ld ブースト</string> <string>%ld ブースト</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

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

View File

@ -114,6 +114,22 @@
<string>%ld n uɛiwed n usuffeɣ</string> <string>%ld n uɛiwed n usuffeɣ</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Ssken-d amaɣnu n useqdac", "show_user_profile": "Ssken-d amaɣnu n useqdac",
"content_warning": "Alɣu n ugbur", "content_warning": "Alɣu n ugbur",
"media_content_warning": "Sit anida tebɣiḍ i wakken ad twaliḍ", "media_content_warning": "Sit anida tebɣiḍ i wakken ad twaliḍ",
"tap_to_reveal": "Tap to reveal",
"poll": { "poll": {
"vote": "Dɣeṛ", "vote": "Dɣeṛ",
"closed": "Ifukk" "closed": "Ifukk"
@ -141,7 +142,11 @@
"favorite": "Anurif", "favorite": "Anurif",
"unfavorite": "Kkes seg yismenyifen", "unfavorite": "Kkes seg yismenyifen",
"menu": "Umuɣ", "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": { "tag": {
"url": "URL", "url": "URL",
@ -440,6 +445,12 @@
"title": "Kkes asewḥel i umiḍan", "title": "Kkes asewḥel i umiḍan",
"message": "Sentem tukksa n usgugem i %s" "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": { "follower": {
@ -481,6 +492,14 @@
"clear": "Sfeḍ" "clear": "Sfeḍ"
} }
}, },
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": { "favorite": {
"title": "Ismenyifen-ik·im" "title": "Ismenyifen-ik·im"
}, },
@ -541,7 +560,8 @@
"true_black_dark_mode": "Askar aberkan n tidet", "true_black_dark_mode": "Askar aberkan n tidet",
"disable_avatar_animation": "Sens ivaṭaren yettembiwilen", "disable_avatar_animation": "Sens ivaṭaren yettembiwilen",
"disable_emoji_animation": "Sens imujiten 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": { "boring_zone": {
"title": "Tamnaḍt yessefcalen", "title": "Tamnaḍt yessefcalen",

View File

@ -114,6 +114,22 @@
<string>%ld ji nû ve nivîsandin</string> <string>%ld ji nû ve nivîsandin</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Profîla bikarhêner nîşan bide", "show_user_profile": "Profîla bikarhêner nîşan bide",
"content_warning": "Hişyariya naverokê", "content_warning": "Hişyariya naverokê",
"media_content_warning": "Ji bo eşkerekirinê li derekî bitikîne", "media_content_warning": "Ji bo eşkerekirinê li derekî bitikîne",
"tap_to_reveal": "Ji bo dîtinê bitikîne",
"poll": { "poll": {
"vote": "Deng bide", "vote": "Deng bide",
"closed": "Girtî" "closed": "Girtî"
@ -141,7 +142,11 @@
"favorite": "Bijarte", "favorite": "Bijarte",
"unfavorite": "Nebijarte", "unfavorite": "Nebijarte",
"menu": "Kulîn", "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": { "tag": {
"url": "URL", "url": "URL",
@ -440,6 +445,12 @@
"title": "Astengiyê li ser ajimêr rake", "title": "Astengiyê li ser ajimêr rake",
"message": "Ji bo rakirina astengkirinê %s bipejirîne" "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": { "follower": {
@ -481,6 +492,14 @@
"clear": "Pak bike" "clear": "Pak bike"
} }
}, },
"discovery": {
"tabs": {
"posts": "Şandî",
"hashtags": "Hashtag",
"news": "Nûçe",
"for_you": "Ji bo te"
}
},
"favorite": { "favorite": {
"title": "Bijarteyên te" "title": "Bijarteyên te"
}, },
@ -541,7 +560,8 @@
"true_black_dark_mode": "Moda tarî ya reş a rastîn", "true_black_dark_mode": "Moda tarî ya reş a rastîn",
"disable_avatar_animation": "Avatarên anîmasyonî neçalak bike", "disable_avatar_animation": "Avatarên anîmasyonî neçalak bike",
"disable_emoji_animation": "Emojiyê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": { "boring_zone": {
"title": "Devera acizker", "title": "Devera acizker",

View File

@ -100,6 +100,20 @@
<string>%ld 개의 리블로그</string> <string>%ld 개의 리블로그</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <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", "media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": { "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": { "tag": {
"url": "URL", "url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "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": { "follower": {
@ -481,6 +492,14 @@
"clear": "Clear" "clear": "Clear"
} }
}, },
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": { "favorite": {
"title": "Your Favorites" "title": "Your Favorites"
}, },
@ -541,7 +560,8 @@
"true_black_dark_mode": "트루 블랙 어두운 모드", "true_black_dark_mode": "트루 블랙 어두운 모드",
"disable_avatar_animation": "움직이는 아바타 비활성화", "disable_avatar_animation": "움직이는 아바타 비활성화",
"disable_emoji_animation": "움직이는 에모지 비활성화", "disable_emoji_animation": "움직이는 에모지 비활성화",
"using_default_browser": "기본 브라우저로 링크 열기" "using_default_browser": "기본 브라우저로 링크 열기",
"open_links_in_mastodon": "Open links in Mastodon"
}, },
"boring_zone": { "boring_zone": {
"title": "지루한 영역", "title": "지루한 영역",

View File

@ -114,6 +114,22 @@
<string>%ld gedeelde berichten</string> <string>%ld gedeelde berichten</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Toon Gebruikersprofiel", "show_user_profile": "Toon Gebruikersprofiel",
"content_warning": "Inhoudswaarschuwing", "content_warning": "Inhoudswaarschuwing",
"media_content_warning": "Tap hier om te tonen", "media_content_warning": "Tap hier om te tonen",
"tap_to_reveal": "Tap to reveal",
"poll": { "poll": {
"vote": "Stemmen", "vote": "Stemmen",
"closed": "Gesloten" "closed": "Gesloten"
@ -141,7 +142,11 @@
"favorite": "Toevoegen aan Favorieten", "favorite": "Toevoegen aan Favorieten",
"unfavorite": "Verwijderen uit Favorieten", "unfavorite": "Verwijderen uit Favorieten",
"menu": "Menu", "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": { "tag": {
"url": "URL", "url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "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": { "follower": {
@ -481,6 +492,14 @@
"clear": "Wissen" "clear": "Wissen"
} }
}, },
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": { "favorite": {
"title": "Uw favorieten" "title": "Uw favorieten"
}, },
@ -541,7 +560,8 @@
"true_black_dark_mode": "Echt zwarte donker uiterlijk", "true_black_dark_mode": "Echt zwarte donker uiterlijk",
"disable_avatar_animation": "Geanimeerde avatars uitschakelen", "disable_avatar_animation": "Geanimeerde avatars uitschakelen",
"disable_emoji_animation": "Geanimeerde emojis 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": { "boring_zone": {
"title": "De Saaie Instellingen", "title": "De Saaie Instellingen",

View File

@ -114,6 +114,22 @@
<string>%ld reblogs</string> <string>%ld reblogs</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Show user profile", "show_user_profile": "Show user profile",
"content_warning": "Content Warning", "content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal", "media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": { "poll": {
"vote": "Vote", "vote": "Vote",
"closed": "Closed" "closed": "Closed"
@ -141,7 +142,11 @@
"favorite": "Favorite", "favorite": "Favorite",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Menu", "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": { "tag": {
"url": "URL", "url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "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": { "follower": {
@ -481,6 +492,14 @@
"clear": "Clear" "clear": "Clear"
} }
}, },
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": { "favorite": {
"title": "Your Favorites" "title": "Your Favorites"
}, },
@ -541,7 +560,8 @@
"true_black_dark_mode": "True black dark mode", "true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars", "disable_avatar_animation": "Disable animated avatars",
"disable_emoji_animation": "Disable animated emojis", "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": { "boring_zone": {
"title": "The Boring Zone", "title": "The Boring Zone",

View File

@ -114,6 +114,22 @@
<string>%ld reblogs</string> <string>%ld reblogs</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Show user profile", "show_user_profile": "Show user profile",
"content_warning": "Content Warning", "content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal", "media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": { "poll": {
"vote": "Vote", "vote": "Vote",
"closed": "Closed" "closed": "Closed"
@ -141,7 +142,11 @@
"favorite": "Favorite", "favorite": "Favorite",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Menu", "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": { "tag": {
"url": "URL", "url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "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": { "follower": {
@ -481,6 +492,14 @@
"clear": "Clear" "clear": "Clear"
} }
}, },
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": { "favorite": {
"title": "Your Favorites" "title": "Your Favorites"
}, },
@ -541,7 +560,8 @@
"true_black_dark_mode": "True black dark mode", "true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars", "disable_avatar_animation": "Disable animated avatars",
"disable_emoji_animation": "Disable animated emojis", "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": { "boring_zone": {
"title": "The Boring Zone", "title": "The Boring Zone",

View File

@ -128,6 +128,24 @@
<string>%ld reblogs</string> <string>%ld reblogs</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Show user profile", "show_user_profile": "Show user profile",
"content_warning": "Content Warning", "content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal", "media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": { "poll": {
"vote": "Vote", "vote": "Vote",
"closed": "Closed" "closed": "Closed"
@ -141,7 +142,11 @@
"favorite": "Favorite", "favorite": "Favorite",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Menu", "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": { "tag": {
"url": "URL", "url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "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": { "follower": {
@ -481,6 +492,14 @@
"clear": "Clear" "clear": "Clear"
} }
}, },
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": { "favorite": {
"title": "Your Favorites" "title": "Your Favorites"
}, },
@ -541,7 +560,8 @@
"true_black_dark_mode": "True black dark mode", "true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars", "disable_avatar_animation": "Disable animated avatars",
"disable_emoji_animation": "Disable animated emojis", "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": { "boring_zone": {
"title": "The Boring Zone", "title": "The Boring Zone",

View File

@ -142,6 +142,26 @@
<string>%ld продвинули</string> <string>%ld продвинули</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

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

View File

@ -114,6 +114,22 @@
<string>%ld edelleen jakoa</string> <string>%ld edelleen jakoa</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Näytä tili", "show_user_profile": "Näytä tili",
"content_warning": "Sisältövaroitus", "content_warning": "Sisältövaroitus",
"media_content_warning": "Napauta mistä tahansa paljastaaksesi", "media_content_warning": "Napauta mistä tahansa paljastaaksesi",
"tap_to_reveal": "Tap to reveal",
"poll": { "poll": {
"vote": "Vote", "vote": "Vote",
"closed": "Suljettu" "closed": "Suljettu"
@ -141,7 +142,11 @@
"favorite": "Favorite", "favorite": "Favorite",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Valikko", "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": { "tag": {
"url": "URL", "url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "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": { "follower": {
@ -481,6 +492,14 @@
"clear": "Tyhjennä" "clear": "Tyhjennä"
} }
}, },
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": { "favorite": {
"title": "Omat suosikit" "title": "Omat suosikit"
}, },
@ -541,7 +560,8 @@
"true_black_dark_mode": "Todellinen mustan tumma tila", "true_black_dark_mode": "Todellinen mustan tumma tila",
"disable_avatar_animation": "Poista käytöstä animoidut avatarit", "disable_avatar_animation": "Poista käytöstä animoidut avatarit",
"disable_emoji_animation": "Poista käytöstä animoidut emojit", "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": { "boring_zone": {
"title": "Tylsä alue", "title": "Tylsä alue",

View File

@ -114,6 +114,22 @@
<string>%ld reblogs</string> <string>%ld reblogs</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Show user profile", "show_user_profile": "Show user profile",
"content_warning": "Content Warning", "content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal", "media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": { "poll": {
"vote": "Vote", "vote": "Vote",
"closed": "Closed" "closed": "Closed"
@ -141,7 +142,11 @@
"favorite": "Favorite", "favorite": "Favorite",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Meny", "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": { "tag": {
"url": "URL", "url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "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": { "follower": {
@ -481,6 +492,14 @@
"clear": "Rensa" "clear": "Rensa"
} }
}, },
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": { "favorite": {
"title": "Your Favorites" "title": "Your Favorites"
}, },
@ -541,7 +560,8 @@
"true_black_dark_mode": "True black dark mode", "true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Inaktivera animerade avatarer", "disable_avatar_animation": "Inaktivera animerade avatarer",
"disable_emoji_animation": "Inaktivera animerade emojis", "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": { "boring_zone": {
"title": "The Boring Zone", "title": "The Boring Zone",

View File

@ -100,6 +100,20 @@
<string>%ld การดัน</string> <string>%ld การดัน</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

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

View File

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

View File

@ -100,6 +100,20 @@
<string>%ld reblogs</string> <string>%ld reblogs</string>
</dict> </dict>
</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> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

@ -130,6 +130,7 @@
"show_user_profile": "Show user profile", "show_user_profile": "Show user profile",
"content_warning": "Content Warning", "content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal", "media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": { "poll": {
"vote": "投票", "vote": "投票",
"closed": "Closed" "closed": "Closed"
@ -141,7 +142,11 @@
"favorite": "Favorite", "favorite": "Favorite",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Menu", "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": { "tag": {
"url": "URL", "url": "URL",
@ -440,6 +445,12 @@
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "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": { "follower": {
@ -481,6 +492,14 @@
"clear": "Clear" "clear": "Clear"
} }
}, },
"discovery": {
"tabs": {
"posts": "Posts",
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
}
},
"favorite": { "favorite": {
"title": "Your Favorites" "title": "Your Favorites"
}, },
@ -541,7 +560,8 @@
"true_black_dark_mode": "True black dark mode", "true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars", "disable_avatar_animation": "Disable animated avatars",
"disable_emoji_animation": "Disable animated emojis", "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": { "boring_zone": {
"title": "The Boring Zone", "title": "The Boring Zone",

View File

@ -129,6 +129,7 @@
"show_post": "Show Post", "show_post": "Show Post",
"show_user_profile": "Show user profile", "show_user_profile": "Show user profile",
"content_warning": "Content Warning", "content_warning": "Content Warning",
"sensitive_content": "Sensitive Content",
"media_content_warning": "Tap anywhere to reveal", "media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal", "tap_to_reveal": "Tap to reveal",
"poll": { "poll": {
@ -492,6 +493,15 @@
"clear": "Clear" "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": { "favorite": {
"title": "Your Favorites" "title": "Your Favorites"
}, },

View File

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

View File

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

View File

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

View File

@ -144,7 +144,7 @@ extension SceneCoordinator {
case popover(sourceView: UIView) case popover(sourceView: UIView)
case panModal case panModal
case custom(transitioningDelegate: UIViewControllerTransitioningDelegate) case custom(transitioningDelegate: UIViewControllerTransitioningDelegate)
case customPush case customPush(animated: Bool)
case safariPresent(animated: Bool, completion: (() -> Void)? = nil) case safariPresent(animated: Bool, completion: (() -> Void)? = nil)
case alertController(animated: Bool, completion: (() -> Void)? = nil) case alertController(animated: Bool, completion: (() -> Void)? = nil)
case activityViewControllerPresent(animated: Bool, completion: (() -> Void)? = nil) case activityViewControllerPresent(animated: Bool, completion: (() -> Void)? = nil)
@ -339,10 +339,10 @@ extension SceneCoordinator {
viewController.transitioningDelegate = transitioningDelegate viewController.transitioningDelegate = transitioningDelegate
(splitViewController ?? presentingViewController)?.present(viewController, animated: true, completion: nil) (splitViewController ?? presentingViewController)?.present(viewController, animated: true, completion: nil)
case .customPush: case .customPush(let animated):
// set delegate in view controller // set delegate in view controller
assert(sender?.navigationController?.delegate != nil) assert(sender?.navigationController?.delegate != nil)
sender?.navigationController?.pushViewController(viewController, animated: true) sender?.navigationController?.pushViewController(viewController, animated: animated)
case .safariPresent(let animated, let completion): case .safariPresent(let animated, let completion):
if UserDefaults.shared.preferredUsingDefaultBrowser, case let .safari(url) = scene { 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 let trendHeaderRegister = UICollectionView.SupplementaryRegistration<SearchHistorySectionHeaderCollectionReusableView>(elementKind: UICollectionView.elementKindSectionHeader) { [weak dataSource] supplementaryView, elementKind, indexPath in
supplementaryView.delegate = configuration.searchHistorySectionHeaderCollectionReusableViewDelegate supplementaryView.delegate = configuration.searchHistorySectionHeaderCollectionReusableViewDelegate
guard let dataSource = dataSource else { return } guard let _ = dataSource else { return }
let sections = dataSource.snapshot().sectionIdentifiers // let sections = dataSource.snapshot().sectionIdentifiers
guard indexPath.section < sections.count else { return } // guard indexPath.section < sections.count else { return }
let section = sections[indexPath.section] // let section = sections[indexPath.section]
} }
dataSource.supplementaryViewProvider = { (collectionView: UICollectionView, elementKind: String, indexPath: IndexPath) in dataSource.supplementaryViewProvider = { (collectionView: UICollectionView, elementKind: String, indexPath: IndexPath) in

View File

@ -21,26 +21,7 @@ extension SearchSection {
) -> UICollectionViewDiffableDataSource<SearchSection, SearchItem> { ) -> UICollectionViewDiffableDataSource<SearchSection, SearchItem> {
let trendCellRegister = UICollectionView.CellRegistration<TrendCollectionViewCell, Mastodon.Entity.Tag> { cell, indexPath, item in 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>( let dataSource = UICollectionViewDiffableDataSource<SearchSection, SearchItem>(

View File

@ -9,53 +9,6 @@ import Foundation
import CoreDataStack import CoreDataStack
import MastodonSDK 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 { extension MastodonUser {
public var profileURL: URL { 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 // Mastodon
// //
// Created by MainasuK Cirno on 2021-7-19. // Created by MainasuK on 2022-4-13.
// //
import UIKit import UIKit
import MastodonCommon
import MastodonUI
extension ThemeService { extension ThemeService {
func set(themeName: ThemeName) { 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> <key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string> <string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>1.3.0</string> <string>1.3.1</string>
<key>CFBundleURLTypes</key> <key>CFBundleURLTypes</key>
<array> <array>
<dict> <dict>
@ -43,7 +43,7 @@
</dict> </dict>
</array> </array>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>109</string> <string>113</string>
<key>ITSAppUsesNonExemptEncryption</key> <key>ITSAppUsesNonExemptEncryption</key>
<false/> <false/>
<key>LSApplicationQueriesSchemes</key> <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. // 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 meta: Meta
) async { ) async {
switch meta { switch meta {
// note:
// some server mark the normal url as "u-url" class. highlighted content is a URL
case .url(_, _, let url, _), case .url(_, _, let url, _),
.mention(_, let url, _) where url.lowercased().hasPrefix("http"): .mention(_, let url, _) where url.lowercased().hasPrefix("http"):
// note: // fix non-ascii character URL link can not open issue
// some server mark the normal url as "u-url" class. highlighted content is a URL guard let url = URL(string: url) ?? URL(string: url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? url) else {
guard let url = URL(string: url) else { return } assertionFailure()
return
}
if let domain = provider.context.authenticationService.activeMastodonAuthenticationBox.value?.domain, url.host == domain, if let domain = provider.context.authenticationService.activeMastodonAuthenticationBox.value?.domain, url.host == domain,
url.pathComponents.count >= 4, url.pathComponents.count >= 4,
url.pathComponents[0] == "/", url.pathComponents[0] == "/",

View File

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

View File

@ -286,24 +286,8 @@ extension DataSourceFacade {
try await dependency.context.managedObjectContext.perform { try await dependency.context.managedObjectContext.perform {
guard let _status = status.object(in: dependency.context.managedObjectContext) else { return } guard let _status = status.object(in: dependency.context.managedObjectContext) else { return }
let status = _status.reblog ?? _status let status = _status.reblog ?? _status
status.update(isSensitiveToggled: !status.isSensitiveToggled)
let allToggled = status.isContentSensitiveToggled && status.isMediaSensitiveToggled
status.update(isContentSensitiveToggled: !allToggled)
status.update(isMediaSensitiveToggled: !allToggled)
} }
} }
// 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 let status = _status.reblog ?? _status
return NotificationMediaTransitionContext( return NotificationMediaTransitionContext(
status: .init(objectID: status.objectID), 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 let status = _status.reblog ?? _status
return NotificationMediaTransitionContext( return NotificationMediaTransitionContext(
status: .init(objectID: status.objectID), 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 return
} }
let managedObjectContext = self.context.managedObjectContext let needsToggleMediaSensitive = await !statusView.viewModel.isMediaReveal
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
}
guard !needsToggleMediaSensitive else { guard !needsToggleMediaSensitive else {
try await DataSourceFacade.responseToToggleSensitiveAction( 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 Combine
import MastodonAsset import MastodonAsset
import MastodonLocalization import MastodonLocalization
import MastodonUI
protocol ComposeStatusPollOptionCollectionViewCellDelegate: AnyObject { protocol ComposeStatusPollOptionCollectionViewCellDelegate: AnyObject {
func composeStatusPollOptionCollectionViewCell(_ cell: ComposeStatusPollOptionCollectionViewCell, textFieldDidBeginEditing textField: UITextField) 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