Merge branch 'develop' into Issue_732
This commit is contained in:
commit
61465a8f9f
|
@ -0,0 +1,48 @@
|
|||
---
|
||||
name: 🛠️ Feature Request
|
||||
description: Suggest an idea to help us improve
|
||||
title: "[Feature]: "
|
||||
labels:
|
||||
- "feature_request"
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
**Thanks :heart: for taking the time to fill out this feature request report!**
|
||||
We kindly ask that you search to see if an issue [already exists](https://github.com/mastodon/mastodon-ios/issues?q=is%3Aissue+sort%3Acreated-desc+) for your feature.
|
||||
|
||||
We are also happy to accept contributions from our users. For more details see [here](https://github.com/mastodon/mastodon-ios/blob/develop/Documentation/CONTRIBUTING.md).
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Description
|
||||
description: |
|
||||
A clear and concise description of the feature you're interested in.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Suggested Solution
|
||||
description: |
|
||||
Describe the solution you'd like. A clear and concise description of what you want to happen.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Alternatives
|
||||
description: |
|
||||
Describe alternatives you've considered.
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Additional Context
|
||||
description: |
|
||||
Add any other context about the problem here.
|
||||
validations:
|
||||
required: false
|
|
@ -125,4 +125,9 @@ Localization/StringsConvertor/output
|
|||
.DS_Store
|
||||
|
||||
env/**/**
|
||||
!env/.env
|
||||
!env/.env
|
||||
|
||||
|
||||
## Ruby ###
|
||||
vendor/
|
||||
.bundle/
|
||||
|
|
|
@ -14,7 +14,7 @@ GEM
|
|||
algoliasearch (1.27.5)
|
||||
httpclient (~> 2.8, >= 2.8.3)
|
||||
json (>= 1.5.1)
|
||||
arkana (1.2.0)
|
||||
arkana (1.3.0)
|
||||
colorize (~> 0.8)
|
||||
dotenv (~> 2.7)
|
||||
yaml (~> 0.2)
|
||||
|
@ -63,7 +63,7 @@ GEM
|
|||
concurrent-ruby (1.1.10)
|
||||
dotenv (2.8.1)
|
||||
escape (0.0.4)
|
||||
ethon (0.15.0)
|
||||
ethon (0.16.0)
|
||||
ffi (>= 1.15.0)
|
||||
ffi (1.15.5)
|
||||
fourflusher (2.3.1)
|
||||
|
@ -96,7 +96,7 @@ GEM
|
|||
xcpretty (0.3.0)
|
||||
rouge (~> 2.0.7)
|
||||
yaml (0.2.0)
|
||||
zeitwerk (2.6.3)
|
||||
zeitwerk (2.6.6)
|
||||
|
||||
PLATFORMS
|
||||
arm64-darwin-21
|
||||
|
@ -111,4 +111,4 @@ DEPENDENCIES
|
|||
xcpretty
|
||||
|
||||
BUNDLED WITH
|
||||
2.3.17
|
||||
2.3.26
|
||||
|
|
|
@ -71,7 +71,7 @@
|
|||
<key>a11y.plural.count.characters_left</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>%#@character_count@ left</string>
|
||||
<string>%#@character_count@</string>
|
||||
<key>character_count</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
|
@ -79,15 +79,15 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>no characters</string>
|
||||
<string>no characters left</string>
|
||||
<key>one</key>
|
||||
<string>1 character</string>
|
||||
<string>1 character left</string>
|
||||
<key>few</key>
|
||||
<string>%ld characters</string>
|
||||
<string>%ld characters left</string>
|
||||
<key>many</key>
|
||||
<string>%ld characters</string>
|
||||
<string>%ld characters left</string>
|
||||
<key>other</key>
|
||||
<string>%ld characters</string>
|
||||
<string>%ld characters left</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.followed_by_and_mutual</key>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<key>There are ${count} options matching ‘${visibility}’.</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>There are %#@count_option@ matching ‘${visibility}’.</string>
|
||||
<string>Existuje %#@count_option@ odpovídající „${visibility}“.</string>
|
||||
<key>count_option</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
|
|
|
@ -1,51 +1,51 @@
|
|||
"16wxgf" = "Post on Mastodon";
|
||||
"16wxgf" = "Publicē Mastodon";
|
||||
|
||||
"751xkl" = "Text Content";
|
||||
"751xkl" = "Teksta Saturu";
|
||||
|
||||
"CsR7G2" = "Post on Mastodon";
|
||||
"CsR7G2" = "Publicē Mastodon";
|
||||
|
||||
"HZSGTr" = "What content to post?";
|
||||
"HZSGTr" = "Kādu saturu publicēt?";
|
||||
|
||||
"HdGikU" = "Posting failed";
|
||||
"HdGikU" = "Publicēšana neizdevās";
|
||||
|
||||
"KDNTJ4" = "Failure Reason";
|
||||
"KDNTJ4" = "Neizdošanās Iemesls";
|
||||
|
||||
"RHxKOw" = "Send Post with text content";
|
||||
"RHxKOw" = "Sūtīt Ziņu ar teksta saturu";
|
||||
|
||||
"RxSqsb" = "Ziņa";
|
||||
|
||||
"WCIR3D" = "Post ${content} on Mastodon";
|
||||
"WCIR3D" = "Publicēt ${content} Mastodon";
|
||||
|
||||
"ZKJSNu" = "Post";
|
||||
"ZKJSNu" = "Ziņa";
|
||||
|
||||
"ZS1XaK" = "${content}";
|
||||
|
||||
"ZbSjzC" = "Visibility";
|
||||
"ZbSjzC" = "Redzamība";
|
||||
|
||||
"Zo4jgJ" = "Post Visibility";
|
||||
"Zo4jgJ" = "Ziņu Redzamība";
|
||||
|
||||
"apSxMG-dYQ5NN" = "There are ${count} options matching ‘Public’.";
|
||||
"apSxMG-dYQ5NN" = "Ir ${count} opcijas, kas atbilst “Publisks”.";
|
||||
|
||||
"apSxMG-ehFLjY" = "There are ${count} options matching ‘Followers Only’.";
|
||||
"apSxMG-ehFLjY" = "Ir ${count} opcijas, kas atbilst “Tikai Sekotājiem”.";
|
||||
|
||||
"ayoYEb-dYQ5NN" = "${content}, Public";
|
||||
"ayoYEb-dYQ5NN" = "${content}, Publisks";
|
||||
|
||||
"ayoYEb-ehFLjY" = "${content}, Followers Only";
|
||||
"ayoYEb-ehFLjY" = "${content}, Tikai Sekotājiem";
|
||||
|
||||
"dUyuGg" = "Post on Mastodon";
|
||||
"dUyuGg" = "Publicē Mastodon";
|
||||
|
||||
"dYQ5NN" = "Publisks";
|
||||
|
||||
"ehFLjY" = "Tikai sekotājiem";
|
||||
|
||||
"gfePDu" = "Posting failed. ${failureReason}";
|
||||
"gfePDu" = "Publicēšana neizdevās. ${failureReason}";
|
||||
|
||||
"k7dbKQ" = "Post was sent successfully.";
|
||||
"k7dbKQ" = "Ziņa tika veiksmīgi nosūtīta.";
|
||||
|
||||
"oGiqmY-dYQ5NN" = "Just to confirm, you wanted ‘Public’?";
|
||||
"oGiqmY-dYQ5NN" = "Tikai apstiprinājumam, tu vēlējies \"Publisks\"?";
|
||||
|
||||
"oGiqmY-ehFLjY" = "Just to confirm, you wanted ‘Followers Only’?";
|
||||
"oGiqmY-ehFLjY" = "Tikai apstiprinājumam, tu vēlējies \"Tikai Sekotājiem\"?";
|
||||
|
||||
"rM6dvp" = "URL";
|
||||
|
||||
"ryJLwG" = "Post was sent successfully. ";
|
||||
"ryJLwG" = "Ziņa tika veiksmīgi nosūtīta. ";
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<key>There are ${count} options matching ‘${content}’. - 2</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>There are %#@count_option@ matching ‘${content}’.</string>
|
||||
<string>Ir %#@count_option@, kas atbilst “${content}”.</string>
|
||||
<key>count_option</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
|
@ -13,17 +13,17 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>%ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld options</string>
|
||||
<string>%ld opciju</string>
|
||||
<key>one</key>
|
||||
<string>1 option</string>
|
||||
<string>1 opcija</string>
|
||||
<key>other</key>
|
||||
<string>%ld options</string>
|
||||
<string>%ld opcijas</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>There are ${count} options matching ‘${visibility}’.</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>There are %#@count_option@ matching ‘${visibility}’.</string>
|
||||
<string>Ir %#@count_option@, kas atbilst “${visibility}”.</string>
|
||||
<key>count_option</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
|
@ -31,11 +31,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>%ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld options</string>
|
||||
<string>%ld izvēles</string>
|
||||
<key>one</key>
|
||||
<string>1 option</string>
|
||||
<string>1 izvēle</string>
|
||||
<key>other</key>
|
||||
<string>%ld options</string>
|
||||
<string>%ld izvēles</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
|
|
|
@ -71,7 +71,7 @@
|
|||
<key>a11y.plural.count.characters_left</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>%#@character_count@ left</string>
|
||||
<string>%#@character_count@</string>
|
||||
<key>character_count</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
|
@ -79,15 +79,15 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>no characters</string>
|
||||
<string>no characters left</string>
|
||||
<key>one</key>
|
||||
<string>1 character</string>
|
||||
<string>1 character left</string>
|
||||
<key>few</key>
|
||||
<string>%ld characters</string>
|
||||
<string>%ld characters left</string>
|
||||
<key>many</key>
|
||||
<string>%ld characters</string>
|
||||
<string>%ld characters left</string>
|
||||
<key>other</key>
|
||||
<string>%ld characters</string>
|
||||
<string>%ld characters left</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.followed_by_and_mutual</key>
|
||||
|
|
|
@ -187,6 +187,12 @@
|
|||
"unknown_language": "Unknown",
|
||||
"unknown_provider": "Unknown",
|
||||
"show_original": "Shown Original"
|
||||
},
|
||||
"media": {
|
||||
"accessibility_label": "%s, attachment %d of %d",
|
||||
"expand_image_hint": "Expands the image. Double-tap and hold to show actions",
|
||||
"expand_gif_hint": "Expands the GIF. Double-tap and hold to show actions",
|
||||
"expand_video_hint": "Shows the video player. Double-tap and hold to show actions"
|
||||
}
|
||||
},
|
||||
"friendship": {
|
||||
|
@ -379,7 +385,7 @@
|
|||
"published": "Published!",
|
||||
"Publishing": "Publishing post...",
|
||||
"accessibility": {
|
||||
"logo_label": "Logo Button",
|
||||
"logo_label": "Mastodon",
|
||||
"logo_hint": "Tap to scroll to top and tap again to previous location"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Te sigue"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "publicacions",
|
||||
"following": "seguindo",
|
||||
"followers": "seguidores"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
|
|
|
@ -99,8 +99,8 @@
|
|||
"settings": "الإعدادات",
|
||||
"delete": "حذف",
|
||||
"translate_post": {
|
||||
"title": "Translate from %s",
|
||||
"unknown_language": "Unknown"
|
||||
"title": "الترجَمَة مِن %s",
|
||||
"unknown_language": "غير مَعرُوفة"
|
||||
}
|
||||
},
|
||||
"tabs": {
|
||||
|
@ -142,7 +142,7 @@
|
|||
"sensitive_content": "مُحتَوى حَسَّاس",
|
||||
"media_content_warning": "اُنقُر لِلكَشف",
|
||||
"tap_to_reveal": "اُنقُر لِلكَشف",
|
||||
"load_embed": "Load Embed",
|
||||
"load_embed": "تحميل المُضمَن",
|
||||
"link_via_user": "%s via %s",
|
||||
"poll": {
|
||||
"vote": "صَوِّت",
|
||||
|
@ -165,7 +165,7 @@
|
|||
"show_image": "أظْهِرِ الصُّورَة",
|
||||
"show_gif": "أظْهِر GIF",
|
||||
"show_video_player": "أظْهِر مُشَغِّلَ المَقاطِعِ المَرئِيَّة",
|
||||
"share_link_in_post": "Share Link in Post",
|
||||
"share_link_in_post": "مُشارَكَة الرابِط فِي مَنشور",
|
||||
"tap_then_hold_to_show_menu": "اُنقُر مُطَوَّلًا لِإظْهَارِ القائِمَة"
|
||||
},
|
||||
"tag": {
|
||||
|
@ -183,9 +183,9 @@
|
|||
"direct": "المُستخدمِونَ المُشارِ إليهم فَقَطْ مَن يُمكِنُهُم رُؤيَةُ هَذَا المَنشُور."
|
||||
},
|
||||
"translation": {
|
||||
"translated_from": "Translated from %s using %s",
|
||||
"unknown_language": "Unknown",
|
||||
"unknown_provider": "Unknown",
|
||||
"translated_from": "الترجَمَة مِن %s بِاستِخدَام %s",
|
||||
"unknown_language": "غير مَعرُوفة",
|
||||
"unknown_provider": "غير مَعرُوف",
|
||||
"show_original": "Shown Original"
|
||||
}
|
||||
},
|
||||
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "يُتابِعُك"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "مَنشورات",
|
||||
"following": "مُتابَع",
|
||||
"followers": "مُتابِع"
|
||||
"my_posts": "مَنشورات",
|
||||
"my_following": "مُتابَعُون",
|
||||
"my_followers": "مُتابِعُون",
|
||||
"other_posts": "مَنشورات",
|
||||
"other_following": "مُتابَعُون",
|
||||
"other_followers": "مُتابِعُون"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
|
|
|
@ -183,9 +183,9 @@
|
|||
"direct": "Només l'usuari mencionat pot veure aquesta publicació."
|
||||
},
|
||||
"translation": {
|
||||
"translated_from": "Translated from %s using %s",
|
||||
"translated_from": "Traduït del %s fent servir %s",
|
||||
"unknown_language": "Desconegut",
|
||||
"unknown_provider": "Unknown",
|
||||
"unknown_provider": "Desconegut",
|
||||
"show_original": "Mostra l'original"
|
||||
}
|
||||
},
|
||||
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Et segueix"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "tuts",
|
||||
"following": "seguint",
|
||||
"followers": "seguidors"
|
||||
"my_posts": "tuts",
|
||||
"my_following": "seguint",
|
||||
"my_followers": "seguidors",
|
||||
"other_posts": "tuts",
|
||||
"other_following": "seguint",
|
||||
"other_followers": "seguidors"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "S'hi va unir",
|
||||
|
|
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Follows You"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "پۆستەکان",
|
||||
"following": "شوێنکەوتن",
|
||||
"followers": "شوێنکەوتوو"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
|
|
|
@ -65,7 +65,7 @@
|
|||
<key>a11y.plural.count.characters_left</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>%#@character_count@ left</string>
|
||||
<string>%#@character_count@ zbývá</string>
|
||||
<key>character_count</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
|
|
|
@ -53,8 +53,8 @@
|
|||
"message": "Úspěšně vyčištěno %s mezipaměti."
|
||||
},
|
||||
"translation_failed": {
|
||||
"title": "Note",
|
||||
"message": "Translation failed. Maybe the administrator has not enabled translations on this server or this server is running an older version of Mastodon where translations are not yet supported.",
|
||||
"title": "Poznámka",
|
||||
"message": "Překlad se nezdařil. Správce možná nepovolil překlad na tomto serveru nebo tento server používá starší verzi Mastodonu, kde překlady ještě nejsou podporovány.",
|
||||
"button": "OK"
|
||||
}
|
||||
},
|
||||
|
@ -83,7 +83,7 @@
|
|||
"sign_up": "Vytvořit účet",
|
||||
"see_more": "Zobrazit více",
|
||||
"preview": "Náhled",
|
||||
"copy": "Copy",
|
||||
"copy": "Kopírovat",
|
||||
"share": "Sdílet",
|
||||
"share_user": "Sdílet %s",
|
||||
"share_post": "Sdílet příspěvek",
|
||||
|
@ -99,13 +99,13 @@
|
|||
"settings": "Nastavení",
|
||||
"delete": "Smazat",
|
||||
"translate_post": {
|
||||
"title": "Translate from %s",
|
||||
"unknown_language": "Unknown"
|
||||
"title": "Přeložit z %s",
|
||||
"unknown_language": "Neznámý"
|
||||
}
|
||||
},
|
||||
"tabs": {
|
||||
"home": "Domů",
|
||||
"search_and_explore": "Search and Explore",
|
||||
"search_and_explore": "Hledat a zkoumat",
|
||||
"notifications": "Oznámení",
|
||||
"profile": "Profil"
|
||||
},
|
||||
|
@ -124,7 +124,7 @@
|
|||
"open_reblogger_profile": "Otevřít rebloggerův profil",
|
||||
"reply_status": "Odpovědět na příspěvek",
|
||||
"toggle_reblog": "Přepnout Reblog na příspěvku",
|
||||
"toggle_favorite": "Toggle Favorite on Post",
|
||||
"toggle_favorite": "Přepnout Oblíbené na příspěvku",
|
||||
"toggle_content_warning": "Přepnout varování obsahu",
|
||||
"preview_image": "Náhled obrázku"
|
||||
},
|
||||
|
@ -142,8 +142,8 @@
|
|||
"sensitive_content": "Citlivý obsah",
|
||||
"media_content_warning": "Klepnutím kdekoli zobrazíte",
|
||||
"tap_to_reveal": "Klepnutím zobrazit",
|
||||
"load_embed": "Load Embed",
|
||||
"link_via_user": "%s via %s",
|
||||
"load_embed": "Načíst vložené",
|
||||
"link_via_user": "%s přes %s",
|
||||
"poll": {
|
||||
"vote": "Hlasovat",
|
||||
"closed": "Uzavřeno"
|
||||
|
@ -165,7 +165,7 @@
|
|||
"show_image": "Zobrazit obrázek",
|
||||
"show_gif": "Zobrazit GIF",
|
||||
"show_video_player": "Zobrazit video přehrávač",
|
||||
"share_link_in_post": "Share Link in Post",
|
||||
"share_link_in_post": "Sdílet odkaz v příspěvku",
|
||||
"tap_then_hold_to_show_menu": "Klepnutím podržte pro zobrazení nabídky"
|
||||
},
|
||||
"tag": {
|
||||
|
@ -183,10 +183,10 @@
|
|||
"direct": "Pouze zmíněný uživatel může vidět tento příspěvek."
|
||||
},
|
||||
"translation": {
|
||||
"translated_from": "Translated from %s using %s",
|
||||
"unknown_language": "Unknown",
|
||||
"unknown_provider": "Unknown",
|
||||
"show_original": "Shown Original"
|
||||
"translated_from": "Přeloženo z %s pomocí %s",
|
||||
"unknown_language": "Neznámý",
|
||||
"unknown_provider": "Neznámý",
|
||||
"show_original": "Zobrazit originál"
|
||||
}
|
||||
},
|
||||
"friendship": {
|
||||
|
@ -463,12 +463,15 @@
|
|||
"follows_you": "Sleduje vás"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "příspěvky",
|
||||
"following": "sledování",
|
||||
"followers": "sledující"
|
||||
"my_posts": "příspěvky",
|
||||
"my_following": "sledování",
|
||||
"my_followers": "sledující",
|
||||
"other_posts": "příspěvky",
|
||||
"other_following": "sledování",
|
||||
"other_followers": "sledující"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
"joined": "Připojen/a",
|
||||
"add_row": "Přidat řádek",
|
||||
"placeholder": {
|
||||
"label": "Označení",
|
||||
|
|
|
@ -53,9 +53,9 @@
|
|||
"message": "Cliriwyd storfa %s yn llwyddiannus."
|
||||
},
|
||||
"translation_failed": {
|
||||
"title": "Note",
|
||||
"message": "Translation failed. Maybe the administrator has not enabled translations on this server or this server is running an older version of Mastodon where translations are not yet supported.",
|
||||
"button": "OK"
|
||||
"title": "Nodyn",
|
||||
"message": "Methwyd cyfieithu. Efallai nad yw'r gweinyddwr wedi galluogi cyfieithiadau ar y gweinydd hwn neu mae'r gweinydd hwn yn rhedeg fersiwn hŷn o Mastodon lle nad yw cyfieithiadau ar gael eto.",
|
||||
"button": "Iawn"
|
||||
}
|
||||
},
|
||||
"controls": {
|
||||
|
@ -83,7 +83,7 @@
|
|||
"sign_up": "Creu cyfrif",
|
||||
"see_more": "Gweld Mwy",
|
||||
"preview": "Rhagolwg",
|
||||
"copy": "Copy",
|
||||
"copy": "Copïo",
|
||||
"share": "Rhannu",
|
||||
"share_user": "Rhannu %s",
|
||||
"share_post": "Rhannu Tŵt",
|
||||
|
@ -99,8 +99,8 @@
|
|||
"settings": "Gosodiadau",
|
||||
"delete": "Dileu",
|
||||
"translate_post": {
|
||||
"title": "Translate from %s",
|
||||
"unknown_language": "Unknown"
|
||||
"title": "Cyfieithu o %s",
|
||||
"unknown_language": "Anhysbys"
|
||||
}
|
||||
},
|
||||
"tabs": {
|
||||
|
@ -142,8 +142,8 @@
|
|||
"sensitive_content": "Cynnwys Sensitif",
|
||||
"media_content_warning": "Tapiwch unrhywle i weld",
|
||||
"tap_to_reveal": "Tapiwch i weld",
|
||||
"load_embed": "Load Embed",
|
||||
"link_via_user": "%s via %s",
|
||||
"load_embed": "Llwytho Planiad",
|
||||
"link_via_user": "%s trwy %s",
|
||||
"poll": {
|
||||
"vote": "Pleidleisio",
|
||||
"closed": "Wedi cau"
|
||||
|
@ -165,7 +165,7 @@
|
|||
"show_image": "Dangos llun",
|
||||
"show_gif": "Dangos GIF",
|
||||
"show_video_player": "Dangos chwaraewr fideo",
|
||||
"share_link_in_post": "Share Link in Post",
|
||||
"share_link_in_post": "Rhannu'r Ddolen yn y Postiad",
|
||||
"tap_then_hold_to_show_menu": "Tapiwch a gwasgu i gael y ddewislen"
|
||||
},
|
||||
"tag": {
|
||||
|
@ -183,10 +183,10 @@
|
|||
"direct": "Dim ond y ddefnyddiwr â soniwyd sy'n gallu gweld y post hwn."
|
||||
},
|
||||
"translation": {
|
||||
"translated_from": "Translated from %s using %s",
|
||||
"unknown_language": "Unknown",
|
||||
"unknown_provider": "Unknown",
|
||||
"show_original": "Shown Original"
|
||||
"translated_from": "Cyfieithwyd o %s gan ddefnyddio %s",
|
||||
"unknown_language": "Anhysbys",
|
||||
"unknown_provider": "Anhysbys",
|
||||
"show_original": "Dangos y Gwreiddiol"
|
||||
}
|
||||
},
|
||||
"friendship": {
|
||||
|
@ -463,12 +463,15 @@
|
|||
"follows_you": "Yn eich dilyn"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "postiadau",
|
||||
"following": "yn dilyn",
|
||||
"followers": "dilynwyr"
|
||||
"my_posts": "postiadu",
|
||||
"my_following": "yn dilyn",
|
||||
"my_followers": "dilynwyr",
|
||||
"other_posts": "postiadu",
|
||||
"other_following": "yn dilyn",
|
||||
"other_followers": "dilynwyr"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
"joined": "Ymunwyd",
|
||||
"add_row": "Ychwanegu Rhes",
|
||||
"placeholder": {
|
||||
"label": "Label",
|
||||
|
|
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Follows You"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "posts",
|
||||
"following": "following",
|
||||
"followers": "followers"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
|
|
|
@ -183,9 +183,9 @@
|
|||
"direct": "Nur erwähnte Benutzer können diesen Beitrag sehen."
|
||||
},
|
||||
"translation": {
|
||||
"translated_from": "Translated from %s using %s",
|
||||
"translated_from": "Übersetzt von %s mit %s",
|
||||
"unknown_language": "Unbekannt",
|
||||
"unknown_provider": "Unknown",
|
||||
"unknown_provider": "Unbekannt",
|
||||
"show_original": "Original anzeigen"
|
||||
}
|
||||
},
|
||||
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Folgt dir"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "Beiträge",
|
||||
"following": "Gefolgte",
|
||||
"followers": "Folgende"
|
||||
"my_posts": "Beiträge",
|
||||
"my_following": "folge ich",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "Beiträge",
|
||||
"other_following": "folge ich",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Beigetreten",
|
||||
|
|
|
@ -463,12 +463,15 @@
|
|||
"follows_you": "Follows You"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "posts",
|
||||
"following": "following",
|
||||
"followers": "followers"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Liitytty",
|
||||
"joined": "Joined",
|
||||
"add_row": "Add Row",
|
||||
"placeholder": {
|
||||
"label": "Label",
|
||||
|
|
|
@ -463,12 +463,15 @@
|
|||
"follows_you": "Follows You"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "posts",
|
||||
"following": "following",
|
||||
"followers": "followers"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Liitytty",
|
||||
"joined": "Joined",
|
||||
"add_row": "Add Row",
|
||||
"placeholder": {
|
||||
"label": "Label",
|
||||
|
|
|
@ -183,9 +183,9 @@
|
|||
"direct": "Sólo el usuario mencionado puede ver este mensaje."
|
||||
},
|
||||
"translation": {
|
||||
"translated_from": "Translated from %s using %s",
|
||||
"translated_from": "Traducido desde el %s vía %s",
|
||||
"unknown_language": "Desconocido",
|
||||
"unknown_provider": "Unknown",
|
||||
"unknown_provider": "Desconocido",
|
||||
"show_original": "Mostrar original"
|
||||
}
|
||||
},
|
||||
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Te sigue"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "mensajes",
|
||||
"following": "siguiendo",
|
||||
"followers": "seguidores"
|
||||
"my_posts": "mensajes",
|
||||
"my_following": "siguiendo",
|
||||
"my_followers": "seguidores",
|
||||
"other_posts": "mensajes",
|
||||
"other_following": "siguiendo",
|
||||
"other_followers": "seguidores"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "En este servidor desde",
|
||||
|
|
|
@ -183,9 +183,9 @@
|
|||
"direct": "Sólo el usuario mencionado puede ver este mensaje."
|
||||
},
|
||||
"translation": {
|
||||
"translated_from": "Translated from %s using %s",
|
||||
"translated_from": "Traducido desde %s usando %s",
|
||||
"unknown_language": "Desconocido",
|
||||
"unknown_provider": "Unknown",
|
||||
"unknown_provider": "Desconocido",
|
||||
"show_original": "Mostrar Original"
|
||||
}
|
||||
},
|
||||
|
@ -463,12 +463,15 @@
|
|||
"follows_you": "Te sigue"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "publicaciones",
|
||||
"following": "siguiendo",
|
||||
"followers": "seguidores"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
"joined": "Se unió",
|
||||
"add_row": "Añadir Fila",
|
||||
"placeholder": {
|
||||
"label": "Nombre para el campo",
|
||||
|
|
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Jarraitzen zaitu"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "bidalketa",
|
||||
"following": "jarraitzen",
|
||||
"followers": "jarraitzaile"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
|
|
|
@ -183,9 +183,9 @@
|
|||
"direct": "Only mentioned user can see this post."
|
||||
},
|
||||
"translation": {
|
||||
"translated_from": "Translated from %s using %s",
|
||||
"translated_from": "Käännetty kielestä %s palvelulla %s",
|
||||
"unknown_language": "Unknown",
|
||||
"unknown_provider": "Unknown",
|
||||
"unknown_provider": "Tuntematon",
|
||||
"show_original": "Shown Original"
|
||||
}
|
||||
},
|
||||
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Follows You"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "julkaisut",
|
||||
"following": "seurataan",
|
||||
"followers": "seuraajat"
|
||||
"my_posts": "julkaisut",
|
||||
"my_following": "seurattavat",
|
||||
"my_followers": "seuraajat",
|
||||
"other_posts": "julkaisut",
|
||||
"other_following": "seurattavat",
|
||||
"other_followers": "seuraajat"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
|
|
|
@ -183,9 +183,9 @@
|
|||
"direct": "Seul·e l’utilisateur·rice mentionnée peut voir ce message."
|
||||
},
|
||||
"translation": {
|
||||
"translated_from": "Translated from %s using %s",
|
||||
"translated_from": "Traduit de %s en utilisant %s",
|
||||
"unknown_language": "Inconnu",
|
||||
"unknown_provider": "Unknown",
|
||||
"unknown_provider": "Inconnu",
|
||||
"show_original": "Afficher l’original"
|
||||
}
|
||||
},
|
||||
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Vous suit"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "publications",
|
||||
"following": "abonnements",
|
||||
"followers": "abonnés"
|
||||
"my_posts": "messages",
|
||||
"my_following": "abonnement",
|
||||
"my_followers": "abonnés",
|
||||
"other_posts": "publications",
|
||||
"other_following": "abonnement",
|
||||
"other_followers": "abonnés"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Ici depuis",
|
||||
|
|
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "’Gad leantainn"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "postaichean",
|
||||
"following": "a’ leantainn",
|
||||
"followers": "luchd-leantainn"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
|
|
|
@ -183,9 +183,9 @@
|
|||
"direct": "Só a usuaria mencionada pode ver a publicación."
|
||||
},
|
||||
"translation": {
|
||||
"translated_from": "Translated from %s using %s",
|
||||
"translated_from": "Traducido do %s usando %s",
|
||||
"unknown_language": "Descoñecido",
|
||||
"unknown_provider": "Unknown",
|
||||
"unknown_provider": "Descoñecido",
|
||||
"show_original": "Mostrar o orixinal"
|
||||
}
|
||||
},
|
||||
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Séguete"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "publicacións",
|
||||
"following": "seguindo",
|
||||
"followers": "seguidoras"
|
||||
"my_posts": "publicacións",
|
||||
"my_following": "seguindo",
|
||||
"my_followers": "seguidoras",
|
||||
"other_posts": "publicacións",
|
||||
"other_following": "seguindo",
|
||||
"other_followers": "seguidoras"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Uniuse",
|
||||
|
|
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Follows You"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "posts",
|
||||
"following": "following",
|
||||
"followers": "followers"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
|
|
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Follows You"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "posts",
|
||||
"following": "following",
|
||||
"followers": "followers"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
|
|
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Mengikutimu"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "postingan",
|
||||
"following": "mengikuti",
|
||||
"followers": "pengikut"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Bergabung",
|
||||
|
|
|
@ -142,7 +142,7 @@
|
|||
"sensitive_content": "Viðkvæmt efni",
|
||||
"media_content_warning": "Ýttu hvar sem er til að birta",
|
||||
"tap_to_reveal": "Ýttu til að birta",
|
||||
"load_embed": "Load Embed",
|
||||
"load_embed": "Hlaða inn ívöfnu",
|
||||
"link_via_user": "%s með %s",
|
||||
"poll": {
|
||||
"vote": "Greiða atkvæði",
|
||||
|
@ -183,9 +183,9 @@
|
|||
"direct": "Einungis notendur sem minnst er á geta séð þessa færslu."
|
||||
},
|
||||
"translation": {
|
||||
"translated_from": "Translated from %s using %s",
|
||||
"translated_from": "Þýtt úr %s með %s",
|
||||
"unknown_language": "Óþekkt",
|
||||
"unknown_provider": "Unknown",
|
||||
"unknown_provider": "Óþekkt",
|
||||
"show_original": "Birta upprunalegt"
|
||||
}
|
||||
},
|
||||
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Fylgist með þér"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "færslur",
|
||||
"following": "fylgist með",
|
||||
"followers": "fylgjendur"
|
||||
"my_posts": "færslur",
|
||||
"my_following": "er fylgst með",
|
||||
"my_followers": "fylgjendur",
|
||||
"other_posts": "færslur",
|
||||
"other_following": "er fylgst með",
|
||||
"other_followers": "fylgjendur"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Gerðist þátttakandi",
|
||||
|
|
|
@ -183,9 +183,9 @@
|
|||
"direct": "Solo l'utente menzionato può vedere questo post."
|
||||
},
|
||||
"translation": {
|
||||
"translated_from": "Translated from %s using %s",
|
||||
"translated_from": "Tradotto da %s utilizzando %s",
|
||||
"unknown_language": "Sconosciuto",
|
||||
"unknown_provider": "Unknown",
|
||||
"unknown_provider": "Sconosciuto",
|
||||
"show_original": "Mostra l'originale"
|
||||
}
|
||||
},
|
||||
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Ti segue"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "post",
|
||||
"following": "seguendo",
|
||||
"followers": "seguaci"
|
||||
"my_posts": "post",
|
||||
"my_following": "seguendo",
|
||||
"my_followers": "seguaci",
|
||||
"other_posts": "post",
|
||||
"other_following": "seguendo",
|
||||
"other_followers": "seguaci"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Profilo iscritto",
|
||||
|
|
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "フォローされています"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "投稿",
|
||||
"following": "フォロー",
|
||||
"followers": "フォロワー"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
|
|
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Yeṭṭafaṛ-ik•im"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "tisuffaɣ",
|
||||
"following": "iṭafaṛ",
|
||||
"followers": "imeḍfaren"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
|
|
|
@ -83,7 +83,7 @@
|
|||
"sign_up": "Ajimêr biafirîne",
|
||||
"see_more": "Bêtir bibîne",
|
||||
"preview": "Pêşdîtin",
|
||||
"copy": "Copy",
|
||||
"copy": "Jê bigire",
|
||||
"share": "Parve bike",
|
||||
"share_user": "%s parve bike",
|
||||
"share_post": "Şandiyê parve bike",
|
||||
|
@ -99,7 +99,7 @@
|
|||
"settings": "Sazkarî",
|
||||
"delete": "Jê bibe",
|
||||
"translate_post": {
|
||||
"title": "Ji %s hate wergerandin",
|
||||
"title": "Ji %s wergerîne",
|
||||
"unknown_language": "Nenas"
|
||||
}
|
||||
},
|
||||
|
@ -143,7 +143,7 @@
|
|||
"media_content_warning": "Ji bo eşkerekirinê li derekî bitikîne",
|
||||
"tap_to_reveal": "Ji bo dîtinê bitikîne",
|
||||
"load_embed": "Load Embed",
|
||||
"link_via_user": "%s via %s",
|
||||
"link_via_user": "%s bi riya %s",
|
||||
"poll": {
|
||||
"vote": "Deng bide",
|
||||
"closed": "Girtî"
|
||||
|
@ -165,7 +165,7 @@
|
|||
"show_image": "Wêneyê nîşan bide",
|
||||
"show_gif": "GIF nîşan bide",
|
||||
"show_video_player": "Lêdera vîdyoyê nîşan bide",
|
||||
"share_link_in_post": "Share Link in Post",
|
||||
"share_link_in_post": "Girêdanê di şandiyê de parve bike",
|
||||
"tap_then_hold_to_show_menu": "Ji bo nîşandana menuyê dirêj bitikîne"
|
||||
},
|
||||
"tag": {
|
||||
|
@ -183,9 +183,9 @@
|
|||
"direct": "Tenê bikarhênerê qalkirî dikare vê şandiyê bibîne."
|
||||
},
|
||||
"translation": {
|
||||
"translated_from": "Translated from %s using %s",
|
||||
"translated_from": "Hate wergerandin ji %s bi riya %s",
|
||||
"unknown_language": "Nenas",
|
||||
"unknown_provider": "Unknown",
|
||||
"unknown_provider": "Nenas",
|
||||
"show_original": "A resen nîşan bide"
|
||||
}
|
||||
},
|
||||
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Te dişopîne"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "şandî",
|
||||
"following": "dişopîne",
|
||||
"followers": "şopîner"
|
||||
"my_posts": "şandî",
|
||||
"my_following": "dişopîne",
|
||||
"my_followers": "şopîner",
|
||||
"other_posts": "şandî",
|
||||
"other_following": "dişopîne",
|
||||
"other_followers": "şopîner"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Dîroka tevlîbûnê",
|
||||
|
|
|
@ -183,9 +183,9 @@
|
|||
"direct": "Only mentioned user can see this post."
|
||||
},
|
||||
"translation": {
|
||||
"translated_from": "Translated from %s using %s",
|
||||
"translated_from": "%s에서 %s를 사용해 번역됨",
|
||||
"unknown_language": "알 수 없음",
|
||||
"unknown_provider": "Unknown",
|
||||
"unknown_provider": "알 수 없음",
|
||||
"show_original": "원본 보기"
|
||||
}
|
||||
},
|
||||
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Follows You"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "게시물",
|
||||
"following": "팔로잉",
|
||||
"followers": "팔로워"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "가입일",
|
||||
|
|
|
@ -13,17 +13,17 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld unread notifications</string>
|
||||
<string>%ld nelasītu paziņojumu</string>
|
||||
<key>one</key>
|
||||
<string>1 unread notification</string>
|
||||
<string>1 nelasīts paziņojums</string>
|
||||
<key>other</key>
|
||||
<string>%ld unread notifications</string>
|
||||
<string>%ld nelasīti paziņojumi</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>a11y.plural.count.input_limit_exceeds</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>Input limit exceeds %#@character_count@</string>
|
||||
<string>Ievades ierobežojums pārsniedz %#@character_count@</string>
|
||||
<key>character_count</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
|
@ -31,17 +31,17 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld characters</string>
|
||||
<string>%ld rakstzīmju</string>
|
||||
<key>one</key>
|
||||
<string>1 character</string>
|
||||
<string>1 rakstzīme</string>
|
||||
<key>other</key>
|
||||
<string>%ld characters</string>
|
||||
<string>%ld rakstzīmes</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>a11y.plural.count.input_limit_remains</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>Input limit remains %#@character_count@</string>
|
||||
<string>Ievades ierobežojums paliek %#@character_count@</string>
|
||||
<key>character_count</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
|
@ -49,17 +49,17 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld characters</string>
|
||||
<string>%ld rakstzīmju</string>
|
||||
<key>one</key>
|
||||
<string>1 character</string>
|
||||
<string>1 rakstzīme</string>
|
||||
<key>other</key>
|
||||
<string>%ld characters</string>
|
||||
<string>%ld rakstzīmes</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>a11y.plural.count.characters_left</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>%#@character_count@ left</string>
|
||||
<string>%#@character_count@ palikušas</string>
|
||||
<key>character_count</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
|
@ -67,11 +67,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld characters</string>
|
||||
<string>%ld rakstzīmju</string>
|
||||
<key>one</key>
|
||||
<string>1 character</string>
|
||||
<string>1 rakstzīme</string>
|
||||
<key>other</key>
|
||||
<string>%ld characters</string>
|
||||
<string>%ld rakstzīmes</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.followed_by_and_mutual</key>
|
||||
|
@ -98,11 +98,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>Followed by %1$@, and %ld mutuals</string>
|
||||
<string>Seko %1$@ un %ld kopīgi</string>
|
||||
<key>one</key>
|
||||
<string>Followed by %1$@, and another mutual</string>
|
||||
<string>Seko %1$@ un vēl viens kopīgs</string>
|
||||
<key>other</key>
|
||||
<string>Followed by %1$@, and %ld mutuals</string>
|
||||
<string>Seko %1$@ un %ld kopīgi</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.metric_formatted.post</key>
|
||||
|
@ -116,11 +116,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>posts</string>
|
||||
<string>ziņu</string>
|
||||
<key>one</key>
|
||||
<string>post</string>
|
||||
<string>ziņa</string>
|
||||
<key>other</key>
|
||||
<string>posts</string>
|
||||
<string>ziņas</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.media</key>
|
||||
|
@ -134,11 +134,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld media</string>
|
||||
<string>%ld multivide</string>
|
||||
<key>one</key>
|
||||
<string>1 media</string>
|
||||
<string>1 multivide</string>
|
||||
<key>other</key>
|
||||
<string>%ld media</string>
|
||||
<string>%ld multivide</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.post</key>
|
||||
|
@ -152,11 +152,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld posts</string>
|
||||
<string>%ld ziņu</string>
|
||||
<key>one</key>
|
||||
<string>1 post</string>
|
||||
<string>1 ziņa</string>
|
||||
<key>other</key>
|
||||
<string>%ld posts</string>
|
||||
<string>%ld ziņas</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.favorite</key>
|
||||
|
@ -170,11 +170,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld favorites</string>
|
||||
<string>%ld iecienītu</string>
|
||||
<key>one</key>
|
||||
<string>1 favorite</string>
|
||||
<string>1 iecienīts</string>
|
||||
<key>other</key>
|
||||
<string>%ld favorites</string>
|
||||
<string>%ld iecienīti</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.reblog</key>
|
||||
|
@ -188,11 +188,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld reblogs</string>
|
||||
<string>%ld reblogu</string>
|
||||
<key>one</key>
|
||||
<string>1 reblog</string>
|
||||
<string>1 reblogs</string>
|
||||
<key>other</key>
|
||||
<string>%ld reblogs</string>
|
||||
<string>%ld reblogi</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.reply</key>
|
||||
|
@ -206,11 +206,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld replies</string>
|
||||
<string>%ld atbilžu</string>
|
||||
<key>one</key>
|
||||
<string>1 reply</string>
|
||||
<string>1 atbilde</string>
|
||||
<key>other</key>
|
||||
<string>%ld replies</string>
|
||||
<string>%ld atbildes</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.vote</key>
|
||||
|
@ -224,11 +224,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld votes</string>
|
||||
<string>%ld balsu</string>
|
||||
<key>one</key>
|
||||
<string>1 vote</string>
|
||||
<string>1 balss</string>
|
||||
<key>other</key>
|
||||
<string>%ld votes</string>
|
||||
<string>%ld balsis</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.voter</key>
|
||||
|
@ -242,11 +242,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld voters</string>
|
||||
<string>%ld balsotāju</string>
|
||||
<key>one</key>
|
||||
<string>1 voter</string>
|
||||
<string>1 balsotājs</string>
|
||||
<key>other</key>
|
||||
<string>%ld voters</string>
|
||||
<string>%ld balsotāji</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.people_talking</key>
|
||||
|
@ -260,11 +260,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld people talking</string>
|
||||
<string>%ld cilvēku apspriež</string>
|
||||
<key>one</key>
|
||||
<string>1 people talking</string>
|
||||
<string>1 cilvēks apspriež</string>
|
||||
<key>other</key>
|
||||
<string>%ld people talking</string>
|
||||
<string>%ld cilvēki apspriež</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.following</key>
|
||||
|
@ -278,11 +278,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld following</string>
|
||||
<string>%ld sekotāju</string>
|
||||
<key>one</key>
|
||||
<string>1 following</string>
|
||||
<string>1 sekotājs</string>
|
||||
<key>other</key>
|
||||
<string>%ld following</string>
|
||||
<string>%ld sekotāji</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.follower</key>
|
||||
|
@ -296,11 +296,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld followers</string>
|
||||
<string>%ld sekotāju</string>
|
||||
<key>one</key>
|
||||
<string>1 follower</string>
|
||||
<string>1 sekotājs</string>
|
||||
<key>other</key>
|
||||
<string>%ld followers</string>
|
||||
<string>%ld sekotāji</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.year.left</key>
|
||||
|
@ -314,11 +314,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld years left</string>
|
||||
<string>palicis %ld gadu</string>
|
||||
<key>one</key>
|
||||
<string>1 year left</string>
|
||||
<string>palicis 1 gads</string>
|
||||
<key>other</key>
|
||||
<string>%ld years left</string>
|
||||
<string>palikuši %ld gadi</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.month.left</key>
|
||||
|
@ -332,11 +332,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld months left</string>
|
||||
<string>palicis %ld mēnešu</string>
|
||||
<key>one</key>
|
||||
<string>1 months left</string>
|
||||
<string>palicis 1 mēnesis</string>
|
||||
<key>other</key>
|
||||
<string>%ld months left</string>
|
||||
<string>palikuši %ld mēneši</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.day.left</key>
|
||||
|
@ -350,11 +350,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld days left</string>
|
||||
<string>palikušas %ld dienas</string>
|
||||
<key>one</key>
|
||||
<string>1 day left</string>
|
||||
<string>palikusi 1 diena</string>
|
||||
<key>other</key>
|
||||
<string>%ld days left</string>
|
||||
<string>palikušas %ld dienas</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.hour.left</key>
|
||||
|
@ -368,11 +368,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld hours left</string>
|
||||
<string>atlikušas %ld stundas</string>
|
||||
<key>one</key>
|
||||
<string>1 hour left</string>
|
||||
<string>atlikusi 1 stunda</string>
|
||||
<key>other</key>
|
||||
<string>%ld hours left</string>
|
||||
<string>atlikušas %ld stundas</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.minute.left</key>
|
||||
|
@ -386,11 +386,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld minutes left</string>
|
||||
<string>atlikušas %ld minūtes</string>
|
||||
<key>one</key>
|
||||
<string>1 minute left</string>
|
||||
<string>atlikusi 1 minūte</string>
|
||||
<key>other</key>
|
||||
<string>%ld minutes left</string>
|
||||
<string>atlikušas %ld minūtes</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.second.left</key>
|
||||
|
@ -404,11 +404,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld seconds left</string>
|
||||
<string>atlikušas %ld sekundes</string>
|
||||
<key>one</key>
|
||||
<string>1 second left</string>
|
||||
<string>atlikusi 1 sekunde</string>
|
||||
<key>other</key>
|
||||
<string>%ld seconds left</string>
|
||||
<string>atlikušas %ld sekundes</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.year.ago.abbr</key>
|
||||
|
@ -422,11 +422,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ldy ago</string>
|
||||
<string>pirms %ld g.</string>
|
||||
<key>one</key>
|
||||
<string>1y ago</string>
|
||||
<string>pirms 1 g.</string>
|
||||
<key>other</key>
|
||||
<string>%ldy ago</string>
|
||||
<string>pirms %ld g.</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.month.ago.abbr</key>
|
||||
|
@ -440,11 +440,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ldM ago</string>
|
||||
<string>pirms %ld M.</string>
|
||||
<key>one</key>
|
||||
<string>1M ago</string>
|
||||
<string>pirms 1 M.</string>
|
||||
<key>other</key>
|
||||
<string>%ldM ago</string>
|
||||
<string>pirms %ld M.</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.day.ago.abbr</key>
|
||||
|
@ -458,11 +458,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ldd ago</string>
|
||||
<string>pirms %ld d.</string>
|
||||
<key>one</key>
|
||||
<string>1d ago</string>
|
||||
<string>pirms 1 d.</string>
|
||||
<key>other</key>
|
||||
<string>%ldd ago</string>
|
||||
<string>pirms %ld d.</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.hour.ago.abbr</key>
|
||||
|
@ -476,11 +476,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ldh ago</string>
|
||||
<string>pirms %ld st.</string>
|
||||
<key>one</key>
|
||||
<string>1h ago</string>
|
||||
<string>pirms 1 st.</string>
|
||||
<key>other</key>
|
||||
<string>%ldh ago</string>
|
||||
<string>pirms %ld st.</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.minute.ago.abbr</key>
|
||||
|
@ -494,11 +494,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ldm ago</string>
|
||||
<string>pirms %ld m.</string>
|
||||
<key>one</key>
|
||||
<string>1m ago</string>
|
||||
<string>pirms 1 m.</string>
|
||||
<key>other</key>
|
||||
<string>%ldm ago</string>
|
||||
<string>pirms %ld m.</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.second.ago.abbr</key>
|
||||
|
@ -512,11 +512,11 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>%lds ago</string>
|
||||
<string>pirms %ld s.</string>
|
||||
<key>one</key>
|
||||
<string>1s ago</string>
|
||||
<string>pirms 1 s.</string>
|
||||
<key>other</key>
|
||||
<string>%lds ago</string>
|
||||
<string>pirms %ld s.</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
|
|
|
@ -121,9 +121,9 @@
|
|||
"next_status": "Nākamā Ziņa",
|
||||
"open_status": "Atvērt Ziņu",
|
||||
"open_author_profile": "Atvērt Autora Profilu",
|
||||
"open_reblogger_profile": "Atvērt Pārpublicētāja Profilu",
|
||||
"open_reblogger_profile": "Atvērt Reblogotāja Profilu",
|
||||
"reply_status": "Atbildēt uz Ziņu",
|
||||
"toggle_reblog": "Pārslēgt Atbilde uz Ziņu",
|
||||
"toggle_reblog": "Pārslēgt Reblogs uz Ziņu",
|
||||
"toggle_favorite": "Pārslēgt Izlasi uz Ziņas",
|
||||
"toggle_content_warning": "Pārslēgt Satura Brīdinājumu",
|
||||
"preview_image": "Priekšskata attēls"
|
||||
|
@ -134,7 +134,7 @@
|
|||
}
|
||||
},
|
||||
"status": {
|
||||
"user_reblogged": "%s pārpublicēja",
|
||||
"user_reblogged": "%s reblogoja",
|
||||
"user_replied_to": "Atbildēja %s",
|
||||
"show_post": "Parādīt Ziņu",
|
||||
"show_user_profile": "Parādīt lietotāja profilu",
|
||||
|
@ -157,36 +157,36 @@
|
|||
"actions": {
|
||||
"reply": "Atbildēt",
|
||||
"reblog": "Reblogot",
|
||||
"unreblog": "Atsaukt pārpublicēšanu",
|
||||
"unreblog": "Atsaukt reblogu",
|
||||
"favorite": "Izlase",
|
||||
"unfavorite": "Izņemt no izlases",
|
||||
"menu": "Izvēlne",
|
||||
"hide": "Slēpt",
|
||||
"show_image": "Rādīt attēlu",
|
||||
"show_gif": "Rādīt GIF",
|
||||
"show_video_player": "Show video player",
|
||||
"share_link_in_post": "Share Link in Post",
|
||||
"tap_then_hold_to_show_menu": "Tap then hold to show menu"
|
||||
"show_video_player": "Rādīt video atskaņotāju",
|
||||
"share_link_in_post": "Kopīgot Saiti Ziņā",
|
||||
"tap_then_hold_to_show_menu": "Pieskaries un turi, lai parādītu izvēlni"
|
||||
},
|
||||
"tag": {
|
||||
"url": "URL",
|
||||
"mention": "Pieminēt",
|
||||
"link": "Saite",
|
||||
"hashtag": "Hashtag",
|
||||
"hashtag": "Tēmturis",
|
||||
"email": "E-pasts",
|
||||
"emoji": "Emocijzīmes"
|
||||
},
|
||||
"visibility": {
|
||||
"unlisted": "Everyone can see this post but not display in the public timeline.",
|
||||
"private": "Only their followers can see this post.",
|
||||
"private_from_me": "Only my followers can see this post.",
|
||||
"direct": "Only mentioned user can see this post."
|
||||
"unlisted": "Ikviens var redzēt šo ziņu, bet to nevar parādīt publiskajā laikrindā.",
|
||||
"private": "Šo ziņu var redzēt tikai viņu sekotāji.",
|
||||
"private_from_me": "Šo ziņu var redzēt tikai mani sekotāji.",
|
||||
"direct": "Šo ziņu var redzēt tikai minētais lietotājs."
|
||||
},
|
||||
"translation": {
|
||||
"translated_from": "Translated from %s using %s",
|
||||
"unknown_language": "Unknown",
|
||||
"unknown_provider": "Unknown",
|
||||
"show_original": "Shown Original"
|
||||
"translated_from": "Tulkots no %s, izmantojot %s",
|
||||
"unknown_language": "Nezināms",
|
||||
"unknown_provider": "Nezināms",
|
||||
"show_original": "Parādīts Oriģināls"
|
||||
}
|
||||
},
|
||||
"friendship": {
|
||||
|
@ -205,9 +205,9 @@
|
|||
"unmute": "Noņemt apklusinājumu",
|
||||
"unmute_user": "Noņemt apklusinājumu @%s",
|
||||
"muted": "Apklusināts",
|
||||
"edit_info": "Edit Info",
|
||||
"show_reblogs": "Show Reblogs",
|
||||
"hide_reblogs": "Hide Reblogs"
|
||||
"edit_info": "Rediģēt",
|
||||
"show_reblogs": "Rādīt Reblogus",
|
||||
"hide_reblogs": "Paslēpt Reblogus"
|
||||
},
|
||||
"timeline": {
|
||||
"filtered": "Filtrēts",
|
||||
|
@ -215,48 +215,48 @@
|
|||
"now": "Tagad"
|
||||
},
|
||||
"loader": {
|
||||
"load_missing_posts": "Load missing posts",
|
||||
"loading_missing_posts": "Loading missing posts...",
|
||||
"load_missing_posts": "Ielādēt trūkstošās ziņas",
|
||||
"loading_missing_posts": "Ielādē trūkstošās ziņas...",
|
||||
"show_more_replies": "Rādīt vairāk atbildes"
|
||||
},
|
||||
"header": {
|
||||
"no_status_found": "No Post Found",
|
||||
"blocking_warning": "You can’t view this user's profile\nuntil you unblock them.\nYour profile looks like this to them.",
|
||||
"user_blocking_warning": "You can’t view %s’s profile\nuntil you unblock them.\nYour profile looks like this to them.",
|
||||
"blocked_warning": "You can’t view this user’s profile\nuntil they unblock you.",
|
||||
"user_blocked_warning": "You can’t view %s’s profile\nuntil they unblock you.",
|
||||
"suspended_warning": "This user has been suspended.",
|
||||
"user_suspended_warning": "%s’s account has been suspended."
|
||||
"no_status_found": "Nav Atrastu Ziņu",
|
||||
"blocking_warning": "Tu nevari skatīt šī lietotāja profilu,\nlīdz tu tos atbloķē.\nTavs profils viņiem izskatās šādi.",
|
||||
"user_blocking_warning": "Tu nevari skatīt %s profilu,\nlīdz tu tos atbloķē.\nTavs profils viņiem izskatās šādi.",
|
||||
"blocked_warning": "Tu nevari skatīt šī lietotāja profilu\nlīdz tie tevi atbloķē.",
|
||||
"user_blocked_warning": "Tu nevari skatīt %s profilu,\nlīdz tie tevi atbloķē.",
|
||||
"suspended_warning": "Šī lietotāja darbība ir apturēta.",
|
||||
"user_suspended_warning": "%s konta darbība ir apturēta."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"scene": {
|
||||
"welcome": {
|
||||
"slogan": "Social networking\nback in your hands.",
|
||||
"get_started": "Get Started",
|
||||
"slogan": "Sociālie tīkli\natpakaļ tavās rokās.",
|
||||
"get_started": "Sāc",
|
||||
"log_in": "Pieteikties"
|
||||
},
|
||||
"login": {
|
||||
"title": "Welcome back",
|
||||
"subtitle": "Log you in on the server you created your account on.",
|
||||
"title": "Laipni lūdzam atpakaļ",
|
||||
"subtitle": "Piesakies serverī, kurā izveidoji savu kontu.",
|
||||
"server_search_field": {
|
||||
"placeholder": "Enter URL or search for your server"
|
||||
"placeholder": "Ievadi URL vai meklē savu serveri"
|
||||
}
|
||||
},
|
||||
"server_picker": {
|
||||
"title": "Mastodon is made of users in different servers.",
|
||||
"subtitle": "Pick a server based on your region, interests, or a general purpose one. You can still chat with anyone on Mastodon, regardless of your servers.",
|
||||
"title": "Mastodon veido lietotāji dažādos serveros.",
|
||||
"subtitle": "Izvēlieties serveri, pamatojoties uz savu reģionu, interesēm vai vispārīgu mērķi. Tu joprojām vari tērzēt ar jebkuru Mastodon lietotāju neatkarīgi no taviem serveriem.",
|
||||
"button": {
|
||||
"category": {
|
||||
"all": "Visi",
|
||||
"all_accessiblity_description": "Katekorija: Visi",
|
||||
"academia": "academia",
|
||||
"activism": "activism",
|
||||
"academia": "akadēmija",
|
||||
"activism": "aktīvisms",
|
||||
"food": "ēdiens",
|
||||
"furry": "furry",
|
||||
"furry": "pūkains",
|
||||
"games": "spēles",
|
||||
"general": "general",
|
||||
"general": "galvenais",
|
||||
"journalism": "žurnālisms",
|
||||
"lgbt": "lgbt",
|
||||
"regional": "regionāli",
|
||||
|
@ -273,17 +273,17 @@
|
|||
"category": "KATEGORIJA"
|
||||
},
|
||||
"input": {
|
||||
"search_servers_or_enter_url": "Search communities or enter URL"
|
||||
"search_servers_or_enter_url": "Meklēt kopienas vai ievadīt URL"
|
||||
},
|
||||
"empty_state": {
|
||||
"finding_servers": "Finding available servers...",
|
||||
"bad_network": "Something went wrong while loading the data. Check your internet connection.",
|
||||
"finding_servers": "Meklē piejamos serverus...",
|
||||
"bad_network": "Ielādējot datus, radās problēma. Pārbaudi interneta savienojumu.",
|
||||
"no_results": "Nav rezultātu"
|
||||
}
|
||||
},
|
||||
"register": {
|
||||
"title": "Let’s get you set up on %s",
|
||||
"lets_get_you_set_up_on_domain": "Let’s get you set up on %s",
|
||||
"title": "Ļauj tevi iestatīt %s",
|
||||
"lets_get_you_set_up_on_domain": "Ļauj tevi iestatīt %s",
|
||||
"input": {
|
||||
"avatar": {
|
||||
"delete": "Dzēst"
|
||||
|
@ -300,7 +300,7 @@
|
|||
},
|
||||
"password": {
|
||||
"placeholder": "parole",
|
||||
"require": "Your password needs at least:",
|
||||
"require": "Tavai parolei ir nepieciešams vismaz:",
|
||||
"character_limit": "8 rakstzīmes",
|
||||
"accessibility": {
|
||||
"checked": "atzīmēts",
|
||||
|
@ -322,29 +322,29 @@
|
|||
"reason": "Iemesls"
|
||||
},
|
||||
"reason": {
|
||||
"blocked": "%s contains a disallowed email provider",
|
||||
"blocked": "%s satur neatļautu e-pasta pakalpojumu sniedzēju",
|
||||
"unreachable": "%s šķiet, ka neeksistē",
|
||||
"taken": "%s jau tiek izmantots",
|
||||
"reserved": "%s is a reserved keyword",
|
||||
"accepted": "%s must be accepted",
|
||||
"reserved": "%s ir rezervēts atslēgvārds",
|
||||
"accepted": "%s jābūt apstiprinātām",
|
||||
"blank": "%s ir obligāts",
|
||||
"invalid": "%s ir nederīgs",
|
||||
"too_long": "%s ir pārāk garaš",
|
||||
"too_short": "%s ir pārāk īs",
|
||||
"inclusion": "%s is not a supported value"
|
||||
"inclusion": "%s nav atbalstīta vērtība"
|
||||
},
|
||||
"special": {
|
||||
"username_invalid": "Username must only contain alphanumeric characters and underscores",
|
||||
"username_too_long": "Username is too long (can’t be longer than 30 characters)",
|
||||
"email_invalid": "This is not a valid email address",
|
||||
"password_too_short": "Password is too short (must be at least 8 characters)"
|
||||
"username_invalid": "Lietotājvārdā drīkst būt tikai burtciparu rakstzīmes un zemsvītras",
|
||||
"username_too_long": "Lietotājvārds ir par garu (nedrīkst būt garāks par 30 rakstzīmēm)",
|
||||
"email_invalid": "Šī nav derīga e-pasta adrese",
|
||||
"password_too_short": "Parole ir pārāk īsa (jābūt vismaz 8 rakstzīmēm)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"server_rules": {
|
||||
"title": "Some ground rules.",
|
||||
"subtitle": "These are set and enforced by the %s moderators.",
|
||||
"prompt": "By continuing, you’re subject to the terms of service and privacy policy for %s.",
|
||||
"title": "Daži pamatnoteikumi.",
|
||||
"subtitle": "Tos iestata un ievieš %s moderatori.",
|
||||
"prompt": "Turpinot, uz tevi attiecas %s pakalpojumu sniegšanas noteikumi un konfidencialitātes politika.",
|
||||
"terms_of_service": "pakalpojuma noteikumi",
|
||||
"privacy_policy": "privātuma nosacījumi",
|
||||
"button": {
|
||||
|
@ -352,45 +352,45 @@
|
|||
}
|
||||
},
|
||||
"confirm_email": {
|
||||
"title": "One last thing.",
|
||||
"subtitle": "Tap the link we emailed to you to verify your account.",
|
||||
"tap_the_link_we_emailed_to_you_to_verify_your_account": "Tap the link we emailed to you to verify your account",
|
||||
"title": "Pēdējā lieta.",
|
||||
"subtitle": "Pieskaries saitei, ko nosūtījām tev pa e-pastu, lai verificētu savu kontu.",
|
||||
"tap_the_link_we_emailed_to_you_to_verify_your_account": "Pieskaries saitei, ko nosūtījām tev pa e-pastu, lai verificētu savu kontu",
|
||||
"button": {
|
||||
"open_email_app": "Open Email App",
|
||||
"open_email_app": "Atvērt E-pasta Lietotni",
|
||||
"resend": "Nosūtīt atkārtoti"
|
||||
},
|
||||
"dont_receive_email": {
|
||||
"title": "Pārbaudi savu e-pastu",
|
||||
"description": "Check if your email address is correct as well as your junk folder if you haven’t.",
|
||||
"description": "Pārbaudi, vai tava e-pasta adrese ir pareiza, kā arī savu mēstuļu mapi, ja tā nav.",
|
||||
"resend_email": "Atkārtoti nosūtīt e-pastu"
|
||||
},
|
||||
"open_email_app": {
|
||||
"title": "Check your inbox.",
|
||||
"description": "We just sent you an email. Check your junk folder if you haven’t.",
|
||||
"mail": "Mail",
|
||||
"open_email_client": "Open Email Client"
|
||||
"title": "Pārbaudi savu iesūtni.",
|
||||
"description": "Mēs tikko nosūtījām tev e-pastu. Pārbaudi savu mēstuļu mapi, ja neesi to saņēmis.",
|
||||
"mail": "Pasts",
|
||||
"open_email_client": "Atvērt E-pasta Klientu"
|
||||
}
|
||||
},
|
||||
"home_timeline": {
|
||||
"title": "Home",
|
||||
"title": "Sākums",
|
||||
"navigation_bar_state": {
|
||||
"offline": "Offline",
|
||||
"new_posts": "See new posts",
|
||||
"published": "Published!",
|
||||
"Publishing": "Publishing post...",
|
||||
"offline": "Bezsaistē",
|
||||
"new_posts": "Skatīt jaunās ziņas",
|
||||
"published": "Publicēts!",
|
||||
"Publishing": "Publicē ziņu...",
|
||||
"accessibility": {
|
||||
"logo_label": "Logo Button",
|
||||
"logo_hint": "Tap to scroll to top and tap again to previous location"
|
||||
"logo_label": "Logotipa Poga",
|
||||
"logo_hint": "Pieskaries, lai ritinātu uz augšu, un vēlreiz pieskaries iepriekšējai atrašanās vietai"
|
||||
}
|
||||
}
|
||||
},
|
||||
"suggestion_account": {
|
||||
"title": "Find People to Follow",
|
||||
"follow_explain": "When you follow someone, you’ll see their posts in your home feed."
|
||||
"title": "Atrodi Cilvēkus kam Sekot",
|
||||
"follow_explain": "Kad seko kādam, tu redzēsi viņu ziņas savā mājas plūsmā."
|
||||
},
|
||||
"compose": {
|
||||
"title": {
|
||||
"new_post": "New Post",
|
||||
"new_post": "Jauna Ziņa",
|
||||
"new_reply": "Jauna atbilde"
|
||||
},
|
||||
"media_selection": {
|
||||
|
@ -398,36 +398,36 @@
|
|||
"photo_library": "Attēlu krātuve",
|
||||
"browse": "Pārlūkot"
|
||||
},
|
||||
"content_input_placeholder": "Type or paste what’s on your mind",
|
||||
"content_input_placeholder": "Ieraksti vai ielīmē to, ko domā",
|
||||
"compose_action": "Publicēt",
|
||||
"replying_to_user": "replying to %s",
|
||||
"replying_to_user": "atbildot uz %s",
|
||||
"attachment": {
|
||||
"photo": "attēls",
|
||||
"video": "video",
|
||||
"attachment_broken": "This %s is broken and can’t be\nuploaded to Mastodon.",
|
||||
"description_photo": "Describe the photo for the visually-impaired...",
|
||||
"description_video": "Describe the video for the visually-impaired...",
|
||||
"load_failed": "Load Failed",
|
||||
"upload_failed": "Upload Failed",
|
||||
"can_not_recognize_this_media_attachment": "Can not recognize this media attachment",
|
||||
"attachment_too_large": "Attachment too large",
|
||||
"compressing_state": "Compressing...",
|
||||
"server_processing_state": "Server Processing..."
|
||||
"attachment_broken": "Šis %s ir salauzts un nevar tikt augšuplādēts Mastodon.",
|
||||
"description_photo": "Apraksti fotoattēlu vājredzīgajiem...",
|
||||
"description_video": "Apraksti video vājredzīgajiem...",
|
||||
"load_failed": "Ielāde Neizdevās",
|
||||
"upload_failed": "Augšupielāde Neizdevās",
|
||||
"can_not_recognize_this_media_attachment": "Nevar atpazīt šo multivides pielikumu",
|
||||
"attachment_too_large": "Pārāk liels pielikums",
|
||||
"compressing_state": "Saspiež...",
|
||||
"server_processing_state": "Notiek servera apstrāde..."
|
||||
},
|
||||
"poll": {
|
||||
"duration_time": "Duration: %s",
|
||||
"duration_time": "Ilgums: %s",
|
||||
"thirty_minutes": "30 minūtes",
|
||||
"one_hour": "1 Stunda",
|
||||
"six_hours": "6 stundas",
|
||||
"one_day": "1 Diena",
|
||||
"three_days": "3 Dienas",
|
||||
"seven_days": "7 Dienas",
|
||||
"option_number": "Option %ld",
|
||||
"the_poll_is_invalid": "The poll is invalid",
|
||||
"the_poll_has_empty_option": "The poll has empty option"
|
||||
"option_number": "Izvēle %ld",
|
||||
"the_poll_is_invalid": "Aptauja nav derīga",
|
||||
"the_poll_has_empty_option": "Aptaujai ir tukša opcija"
|
||||
},
|
||||
"content_warning": {
|
||||
"placeholder": "Write an accurate warning here..."
|
||||
"placeholder": "Uzraksti šeit precīzu brīdinājumu..."
|
||||
},
|
||||
"visibility": {
|
||||
"public": "Publisks",
|
||||
|
@ -436,26 +436,26 @@
|
|||
"direct": "Tikai cilvēki, kurus es pieminu"
|
||||
},
|
||||
"auto_complete": {
|
||||
"space_to_add": "Space to add"
|
||||
"space_to_add": "Vieta, ko pievienot"
|
||||
},
|
||||
"accessibility": {
|
||||
"append_attachment": "Pievienot pielikumu",
|
||||
"append_poll": "Pievienot aptauju",
|
||||
"remove_poll": "Noņemt aptauju",
|
||||
"custom_emoji_picker": "Custom Emoji Picker",
|
||||
"enable_content_warning": "Enable Content Warning",
|
||||
"disable_content_warning": "Disable Content Warning",
|
||||
"post_visibility_menu": "Post Visibility Menu",
|
||||
"post_options": "Post Options",
|
||||
"posting_as": "Posting as %s"
|
||||
"custom_emoji_picker": "Pielāgoto Emocijzīmju Atlasītājs",
|
||||
"enable_content_warning": "Iespējot Satura Brīdinājumu",
|
||||
"disable_content_warning": "Atspējot Satura Brīdinājumu",
|
||||
"post_visibility_menu": "Ziņu Redzamības Izvēlne",
|
||||
"post_options": "Ziņas Iespējas",
|
||||
"posting_as": "Publicēt kā %s"
|
||||
},
|
||||
"keyboard": {
|
||||
"discard_post": "Discard Post",
|
||||
"publish_post": "Publish Post",
|
||||
"toggle_poll": "Toggle Poll",
|
||||
"toggle_content_warning": "Toggle Content Warning",
|
||||
"discard_post": "Izmest Ziņu",
|
||||
"publish_post": "Publicēt Ziņu",
|
||||
"toggle_poll": "Pārslēgt Aptauju",
|
||||
"toggle_content_warning": "Pārslēgt Satura Brīdinājumu",
|
||||
"append_attachment_entry": "Pievienot pielikumu - %s",
|
||||
"select_visibility_entry": "Select Visibility - %s"
|
||||
"select_visibility_entry": "Atlasīt Redzamību — %s"
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
|
@ -463,24 +463,27 @@
|
|||
"follows_you": "Seko tev"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "posts",
|
||||
"following": "seko",
|
||||
"followers": "sekottāji"
|
||||
"my_posts": "ziņas",
|
||||
"my_following": "seko",
|
||||
"my_followers": "sekotāji",
|
||||
"other_posts": "ziņas",
|
||||
"other_following": "seko",
|
||||
"other_followers": "sekotāji"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
"joined": "Pievienojās",
|
||||
"add_row": "Pievienot rindu",
|
||||
"placeholder": {
|
||||
"label": "Label",
|
||||
"label": "Marķējums",
|
||||
"content": "Saturs"
|
||||
},
|
||||
"verified": {
|
||||
"short": "Verified on %s",
|
||||
"long": "Ownership of this link was checked on %s"
|
||||
"short": "Pārbaudīts %s",
|
||||
"long": "Šīs saites piederība tika pārbaudīta %s"
|
||||
}
|
||||
},
|
||||
"segmented_control": {
|
||||
"posts": "Posts",
|
||||
"posts": "Ziņas",
|
||||
"replies": "Atbildes",
|
||||
"posts_and_replies": "Ziņas un atbildes",
|
||||
"media": "Multivide",
|
||||
|
@ -488,97 +491,97 @@
|
|||
},
|
||||
"relationship_action_alert": {
|
||||
"confirm_mute_user": {
|
||||
"title": "Mute Account",
|
||||
"message": "Confirm to mute %s"
|
||||
"title": "Izslēgt Kontu",
|
||||
"message": "Apstiprināt, lai izslēgtu %s skaņu"
|
||||
},
|
||||
"confirm_unmute_user": {
|
||||
"title": "Unmute Account",
|
||||
"message": "Confirm to unmute %s"
|
||||
"title": "Ieslēgt Kontu",
|
||||
"message": "Apstiprināt, lai ieslēgtu %s skaņu"
|
||||
},
|
||||
"confirm_block_user": {
|
||||
"title": "Bloķēts kontu",
|
||||
"message": "Confirm to block %s"
|
||||
"message": "Apstiprināt, lai bloķētu %s"
|
||||
},
|
||||
"confirm_unblock_user": {
|
||||
"title": "Atbloķēt kontu",
|
||||
"message": "Apstiprini lai atbloķētu %s"
|
||||
},
|
||||
"confirm_show_reblogs": {
|
||||
"title": "Show Reblogs",
|
||||
"message": "Confirm to show reblogs"
|
||||
"title": "Rādīt Reblogus",
|
||||
"message": "Apstiprināt, lai rādītu reblogus"
|
||||
},
|
||||
"confirm_hide_reblogs": {
|
||||
"title": "Hide Reblogs",
|
||||
"message": "Confirm to hide reblogs"
|
||||
"title": "Paslēpt Reblogus",
|
||||
"message": "Apstiprināt, lai slēptu reblogus"
|
||||
}
|
||||
},
|
||||
"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"
|
||||
"show_avatar_image": "Rādīt avatara attēlu",
|
||||
"edit_avatar_image": "Rediģēt avatara attēlu",
|
||||
"show_banner_image": "Rādīt bannera attēlu",
|
||||
"double_tap_to_open_the_list": "Dubultskāriens, lai atvērtu sarakstu"
|
||||
}
|
||||
},
|
||||
"follower": {
|
||||
"title": "sekottājs",
|
||||
"footer": "Followers from other servers are not displayed."
|
||||
"footer": "Sekotāji no citiem serveriem netiek rādīti."
|
||||
},
|
||||
"following": {
|
||||
"title": "seko",
|
||||
"footer": "Follows from other servers are not displayed."
|
||||
"footer": "Sekojumi no citiem serveriem netiek rādīti."
|
||||
},
|
||||
"familiarFollowers": {
|
||||
"title": "Followers you familiar",
|
||||
"followed_by_names": "Followed by %s"
|
||||
"title": "Tev pazīstamie sekotāji",
|
||||
"followed_by_names": "Seko %s"
|
||||
},
|
||||
"favorited_by": {
|
||||
"title": "Favorited By"
|
||||
"title": "Pievienoja izlasei"
|
||||
},
|
||||
"reblogged_by": {
|
||||
"title": "Reblogged By"
|
||||
"title": "Reblogoja"
|
||||
},
|
||||
"search": {
|
||||
"title": "Meklēt",
|
||||
"search_bar": {
|
||||
"placeholder": "Search hashtags and users",
|
||||
"placeholder": "Meklēt tēmturus un lietotājus",
|
||||
"cancel": "Atcelt"
|
||||
},
|
||||
"recommend": {
|
||||
"button_text": "Skatīt visu",
|
||||
"hash_tag": {
|
||||
"title": "Trending on Mastodon",
|
||||
"description": "Hashtags that are getting quite a bit of attention",
|
||||
"people_talking": "%s people are talking"
|
||||
"title": "Tendences vietnē Mastodon",
|
||||
"description": "Tēmturi, kuriem tiek pievērsta diezgan liela uzmanība",
|
||||
"people_talking": "%s cilvēki apspriež"
|
||||
},
|
||||
"accounts": {
|
||||
"title": "Accounts you might like",
|
||||
"description": "You may like to follow these accounts",
|
||||
"follow": "Follow"
|
||||
"title": "Konti, kuri tev varētu patikt",
|
||||
"description": "Iespējams, tu vēlēsies sekot šiem kontiem",
|
||||
"follow": "Sekot"
|
||||
}
|
||||
},
|
||||
"searching": {
|
||||
"segment": {
|
||||
"all": "All",
|
||||
"people": "People",
|
||||
"hashtags": "Hashtags",
|
||||
"posts": "Posts"
|
||||
"all": "Visi",
|
||||
"people": "Cilvēki",
|
||||
"hashtags": "Tēmturi",
|
||||
"posts": "Ziņas"
|
||||
},
|
||||
"empty_state": {
|
||||
"no_results": "No results"
|
||||
"no_results": "Nav rezultātu"
|
||||
},
|
||||
"recent_search": "Recent searches",
|
||||
"clear": "Clear"
|
||||
"recent_search": "Nesen meklētais",
|
||||
"clear": "Notīrīt"
|
||||
}
|
||||
},
|
||||
"discovery": {
|
||||
"tabs": {
|
||||
"posts": "Ziņas",
|
||||
"hashtags": "Hashtags",
|
||||
"hashtags": "Tēmturi",
|
||||
"news": "Ziņas",
|
||||
"community": "Community",
|
||||
"community": "Kopiena",
|
||||
"for_you": "Priekš tevis"
|
||||
},
|
||||
"intro": "These are the posts gaining traction in your corner of Mastodon."
|
||||
"intro": "Šīs ir ziņas, kas iekaro tavu Mastodon stūrīti."
|
||||
},
|
||||
"favorite": {
|
||||
"title": "Tava izlase"
|
||||
|
@ -589,16 +592,16 @@
|
|||
"Mentions": "Pieminējumi"
|
||||
},
|
||||
"notification_description": {
|
||||
"followed_you": "followed you",
|
||||
"favorited_your_post": "favorited your post",
|
||||
"reblogged_your_post": "reblogged your post",
|
||||
"followed_you": "tev sekoja",
|
||||
"favorited_your_post": "izcēla tavu ziņu",
|
||||
"reblogged_your_post": "reblogoja tavu ziņu",
|
||||
"mentioned_you": "pieminēja tevi",
|
||||
"request_to_follow_you": "request to follow you",
|
||||
"request_to_follow_you": "lūgums tev sekot",
|
||||
"poll_has_ended": "balsošana beidzās"
|
||||
},
|
||||
"keyobard": {
|
||||
"show_everything": "Parādīt man visu",
|
||||
"show_mentions": "Show Mentions"
|
||||
"show_mentions": "Rādīt Pieminējumus"
|
||||
},
|
||||
"follow_request": {
|
||||
"accept": "Pieņemt",
|
||||
|
@ -609,7 +612,7 @@
|
|||
},
|
||||
"thread": {
|
||||
"back_title": "Ziņa",
|
||||
"title": "Post from %s"
|
||||
"title": "Ziņa no %s"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Iestatījumi",
|
||||
|
@ -622,42 +625,42 @@
|
|||
},
|
||||
"look_and_feel": {
|
||||
"title": "Izskats",
|
||||
"use_system": "Use System",
|
||||
"use_system": "Lietot Sistēmas",
|
||||
"really_dark": "Ļoti tumšs",
|
||||
"sorta_dark": "Itkā tumšs",
|
||||
"light": "Gaišs"
|
||||
},
|
||||
"notifications": {
|
||||
"title": "Paziņojumi",
|
||||
"favorites": "Favorites my post",
|
||||
"favorites": "Izceļ manu ziņu",
|
||||
"follows": "Seko man",
|
||||
"boosts": "Reblogs my post",
|
||||
"boosts": "Reblogo manu ziņu",
|
||||
"mentions": "Pieminējumi",
|
||||
"trigger": {
|
||||
"anyone": "jebkurš",
|
||||
"follower": "sekottājs",
|
||||
"follow": "anyone I follow",
|
||||
"follow": "jebkurš, kam sekoju",
|
||||
"noone": "neviens",
|
||||
"title": "Notify me when"
|
||||
"title": "Paziņot man, kad"
|
||||
}
|
||||
},
|
||||
"preference": {
|
||||
"title": "Uzstādījumi",
|
||||
"true_black_dark_mode": "True black dark mode",
|
||||
"disable_avatar_animation": "Disable animated avatars",
|
||||
"disable_emoji_animation": "Disable animated emojis",
|
||||
"using_default_browser": "Use default browser to open links",
|
||||
"open_links_in_mastodon": "Open links in Mastodon"
|
||||
"true_black_dark_mode": "Īsti melns tumšais režīms",
|
||||
"disable_avatar_animation": "Atspējot animētos avatarus",
|
||||
"disable_emoji_animation": "Atspējot animētās emocijzīmes",
|
||||
"using_default_browser": "Saišu atvēršana noklusētajā pārlūkā",
|
||||
"open_links_in_mastodon": "Atvērt saites Mastodon"
|
||||
},
|
||||
"boring_zone": {
|
||||
"title": "The Boring Zone",
|
||||
"title": "Garlaicīgā zona",
|
||||
"account_settings": "Konta iestatījumi",
|
||||
"terms": "Pakalpojuma noteikumi",
|
||||
"privacy": "Privātuma politika"
|
||||
},
|
||||
"spicy_zone": {
|
||||
"title": "The Spicy Zone",
|
||||
"clear": "Clear Media Cache",
|
||||
"title": "Pikantā zona",
|
||||
"clear": "Notīrīt Multivides Kešatmiņu",
|
||||
"signout": "Iziet"
|
||||
}
|
||||
},
|
||||
|
@ -665,7 +668,7 @@
|
|||
"mastodon_description": "Mastodon ir atvērtā koda programmatūra. Tu vari ziņot par problēmām GitHub %s (%s)"
|
||||
},
|
||||
"keyboard": {
|
||||
"close_settings_window": "Close Settings Window"
|
||||
"close_settings_window": "Aizvērt Iestatījumu Logu"
|
||||
}
|
||||
},
|
||||
"report": {
|
||||
|
@ -673,24 +676,24 @@
|
|||
"title": "Ziņot %s",
|
||||
"step1": "1. solis no 2",
|
||||
"step2": "2. solis no 2",
|
||||
"content1": "Are there any other posts you’d like to add to the report?",
|
||||
"content2": "Is there anything the moderators should know about this report?",
|
||||
"report_sent_title": "Thanks for reporting, we’ll look into this.",
|
||||
"content1": "Vai ir vēl kādas ziņas, kuras vēlies pievienot pārskatam?",
|
||||
"content2": "Vai moderatoriem ir kaut kas jāzina par šo ziņojumu?",
|
||||
"report_sent_title": "Paldies, ka ziņoji, mēs to izskatīsim.",
|
||||
"send": "Nosūtīt Sūdzību",
|
||||
"skip_to_send": "Sūtīt bez komentāra",
|
||||
"text_placeholder": "Type or paste additional comments",
|
||||
"reported": "REPORTED",
|
||||
"text_placeholder": "Ieraksti vai ielīmē papildu komentārus",
|
||||
"reported": "ZIŅOTS",
|
||||
"step_one": {
|
||||
"step_1_of_4": "1. solis no 4",
|
||||
"whats_wrong_with_this_post": "What's wrong with this post?",
|
||||
"whats_wrong_with_this_account": "What's wrong with this account?",
|
||||
"whats_wrong_with_this_username": "What's wrong with %s?",
|
||||
"whats_wrong_with_this_post": "Kas vainas šim ierakstam?",
|
||||
"whats_wrong_with_this_account": "Kas vainas šim kontam?",
|
||||
"whats_wrong_with_this_username": "Kas vainas %s?",
|
||||
"select_the_best_match": "Izvēlieties labāko atbilstību",
|
||||
"i_dont_like_it": "Man tas nepatīk",
|
||||
"it_is_not_something_you_want_to_see": "Tas nav kaut kas, ko tu vēlies redzēt",
|
||||
"its_spam": "Tas ir spams",
|
||||
"malicious_links_fake_engagement_or_repetetive_replies": "Malicious links, fake engagement, or repetetive replies",
|
||||
"it_violates_server_rules": "It violates server rules",
|
||||
"malicious_links_fake_engagement_or_repetetive_replies": "Ļaunprātīgas saites, viltus iesaistīšana vai atkārtotas atbildes",
|
||||
"it_violates_server_rules": "Tas pārkāpj servera noteikumus",
|
||||
"you_are_aware_that_it_breaks_specific_rules": "Tu zini, ka tas pārkāpj īpašus noteikumus",
|
||||
"its_something_else": "Tas ir kaut kas cits",
|
||||
"the_issue_does_not_fit_into_other_categories": "Šis jautājums neietilpst citās kategorijās"
|
||||
|
@ -699,7 +702,7 @@
|
|||
"step_2_of_4": "2. solis no 4",
|
||||
"which_rules_are_being_violated": "Kuri noteikumi tiek pārkāpti?",
|
||||
"select_all_that_apply": "Atlasi visus atbilstošos",
|
||||
"i_just_don’t_like_it": "I just don’t like it"
|
||||
"i_just_don’t_like_it": "Man vienkārši tas nepatīk"
|
||||
},
|
||||
"step_three": {
|
||||
"step_3_of_4": "3. solis no 4",
|
||||
|
@ -712,47 +715,47 @@
|
|||
},
|
||||
"step_final": {
|
||||
"dont_want_to_see_this": "Vai nevēlies to redzēt?",
|
||||
"when_you_see_something_you_dont_like_on_mastodon_you_can_remove_the_person_from_your_experience.": "When you see something you don’t like on Mastodon, you can remove the person from your experience.",
|
||||
"when_you_see_something_you_dont_like_on_mastodon_you_can_remove_the_person_from_your_experience.": "Kad pakalpojumā Mastodon redzi kaut ko, kas tev nepatīk, tu vari noņemt šo personu no savas pieredzes.",
|
||||
"unfollow": "Atsekot",
|
||||
"unfollowed": "Atsekoja",
|
||||
"unfollow_user": "Atsekot %s",
|
||||
"mute_user": "Apklusināt %s",
|
||||
"you_wont_see_their_posts_or_reblogs_in_your_home_feed_they_wont_know_they_ve_been_muted": "You won’t see their posts or reblogs in your home feed. They won’t know they’ve been muted.",
|
||||
"you_wont_see_their_posts_or_reblogs_in_your_home_feed_they_wont_know_they_ve_been_muted": "Tu neredzēsi viņu ziņas vai reblogus savā mājas plūsmā. Viņi nezinās, ka ir izslēgti.",
|
||||
"block_user": "Bloķēt %s",
|
||||
"they_will_no_longer_be_able_to_follow_or_see_your_posts_but_they_can_see_if_theyve_been_blocked": "They will no longer be able to follow or see your posts, but they can see if they’ve been blocked.",
|
||||
"they_will_no_longer_be_able_to_follow_or_see_your_posts_but_they_can_see_if_theyve_been_blocked": "Viņi vairs nevarēs sekot tavām ziņām vai redzēt tās, taču varēs redzēt, vai viņi ir bloķēti.",
|
||||
"while_we_review_this_you_can_take_action_against_user": "Kamēr mēs to izskatām, tu vari veikt darbības pret @%s"
|
||||
}
|
||||
},
|
||||
"preview": {
|
||||
"keyboard": {
|
||||
"close_preview": "Close Preview",
|
||||
"show_next": "Show Next",
|
||||
"show_previous": "Show Previous"
|
||||
"close_preview": "Aizvērt Priekšskatījumu",
|
||||
"show_next": "Rādīt Nākamo",
|
||||
"show_previous": "Rādīt Iepriekšējo"
|
||||
}
|
||||
},
|
||||
"account_list": {
|
||||
"tab_bar_hint": "Current selected profile: %s. Double tap then hold to show account switcher",
|
||||
"dismiss_account_switcher": "Dismiss Account Switcher",
|
||||
"tab_bar_hint": "Pašreizējais atlasītais profils: %s. Veic dubultskārienu un pēc tam turi, lai parādītu konta pārslēdzēju",
|
||||
"dismiss_account_switcher": "Noraidīt Konta Pārslēdzēju",
|
||||
"add_account": "Pievienot kontu"
|
||||
},
|
||||
"wizard": {
|
||||
"new_in_mastodon": "New in Mastodon",
|
||||
"multiple_account_switch_intro_description": "Switch between multiple accounts by holding the profile button.",
|
||||
"accessibility_hint": "Double tap to dismiss this wizard"
|
||||
"new_in_mastodon": "Jaunums Mastodonā",
|
||||
"multiple_account_switch_intro_description": "Pārslēdzies starp vairākiem kontiem, turot nospiestu profila pogu.",
|
||||
"accessibility_hint": "Veic dubultskārienu, lai noraidītu šo vedni"
|
||||
},
|
||||
"bookmark": {
|
||||
"title": "Bookmarks"
|
||||
"title": "Grāmatzīmes"
|
||||
},
|
||||
"followed_tags": {
|
||||
"title": "Followed Tags",
|
||||
"title": "Sekotie Tēmturi",
|
||||
"header": {
|
||||
"posts": "posts",
|
||||
"participants": "participants",
|
||||
"posts_today": "posts today"
|
||||
"posts": "ziņas",
|
||||
"participants": "dalībnieki",
|
||||
"posts_today": "ziņas šodien"
|
||||
},
|
||||
"actions": {
|
||||
"follow": "Follow",
|
||||
"unfollow": "Unfollow"
|
||||
"follow": "Sekot",
|
||||
"unfollow": "Atsekot"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"NSCameraUsageDescription": "Used to take photo for post status",
|
||||
"NSPhotoLibraryAddUsageDescription": "Used to save photo into the Photo Library",
|
||||
"NewPostShortcutItemTitle": "New Post",
|
||||
"SearchShortcutItemTitle": "Search"
|
||||
"NSCameraUsageDescription": "Izmanto, lai fotografētu ziņas statusu",
|
||||
"NSPhotoLibraryAddUsageDescription": "Izmanto, lai saglabātu fotoattēlu Photo Library",
|
||||
"NewPostShortcutItemTitle": "Jauna Ziņa",
|
||||
"SearchShortcutItemTitle": "Meklēt"
|
||||
}
|
||||
|
|
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Follows You"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "posts",
|
||||
"following": "following",
|
||||
"followers": "followers"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
|
|
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Volgt jou"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "berichten",
|
||||
"following": "volgend",
|
||||
"followers": "volgers"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
|
|
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Segue você"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "toots",
|
||||
"following": "seguindo",
|
||||
"followers": "seguidores"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
|
|
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Follows You"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "posts",
|
||||
"following": "following",
|
||||
"followers": "followers"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
|
|
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Follows You"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "posts",
|
||||
"following": "following",
|
||||
"followers": "followers"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
|
|
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Подписан(а) на вас"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "посты",
|
||||
"following": "подписки",
|
||||
"followers": "подписчики"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
|
|
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Follows You"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "posts",
|
||||
"following": "following",
|
||||
"followers": "followers"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
|
|
|
@ -183,9 +183,9 @@
|
|||
"direct": "Samo omenjeni uporabnik lahko vidi to objavo."
|
||||
},
|
||||
"translation": {
|
||||
"translated_from": "Translated from %s using %s",
|
||||
"translated_from": "Prevedeno iz %s s pomočjo %s",
|
||||
"unknown_language": "Neznano",
|
||||
"unknown_provider": "Unknown",
|
||||
"unknown_provider": "Neznano",
|
||||
"show_original": "Pokaži izvirnik"
|
||||
}
|
||||
},
|
||||
|
@ -463,12 +463,15 @@
|
|||
"follows_you": "Vam sledi"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "Objave",
|
||||
"following": "sledi",
|
||||
"followers": "sledilcev"
|
||||
"my_posts": "objav",
|
||||
"my_following": "sledi",
|
||||
"my_followers": "sledilcev",
|
||||
"other_posts": "objav",
|
||||
"other_following": "sledi",
|
||||
"other_followers": "sledilcev"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
"joined": "Pridružen_a",
|
||||
"add_row": "Dodaj vrstico",
|
||||
"placeholder": {
|
||||
"label": "Oznaka",
|
||||
|
|
|
@ -183,9 +183,9 @@
|
|||
"direct": "Endast omnämnda användare kan se detta inlägg."
|
||||
},
|
||||
"translation": {
|
||||
"translated_from": "Translated from %s using %s",
|
||||
"translated_from": "Översatt från %s med %s",
|
||||
"unknown_language": "Okänt",
|
||||
"unknown_provider": "Unknown",
|
||||
"unknown_provider": "Okänd",
|
||||
"show_original": "Visa original"
|
||||
}
|
||||
},
|
||||
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Följer dig"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "inlägg",
|
||||
"following": "följer",
|
||||
"followers": "följare"
|
||||
"my_posts": "inlägg",
|
||||
"my_following": "följer",
|
||||
"my_followers": "följare",
|
||||
"other_posts": "inlägg",
|
||||
"other_following": "följer",
|
||||
"other_followers": "följare"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Gick med",
|
||||
|
|
|
@ -183,9 +183,9 @@
|
|||
"direct": "เฉพาะผู้ใช้ที่กล่าวถึงเท่านั้นที่สามารถเห็นโพสต์นี้"
|
||||
},
|
||||
"translation": {
|
||||
"translated_from": "Translated from %s using %s",
|
||||
"translated_from": "แปลจาก %s โดยใช้ %s",
|
||||
"unknown_language": "ไม่รู้จัก",
|
||||
"unknown_provider": "Unknown",
|
||||
"unknown_provider": "ไม่รู้จัก",
|
||||
"show_original": "แสดงดั้งเดิมอยู่"
|
||||
}
|
||||
},
|
||||
|
@ -463,12 +463,15 @@
|
|||
"follows_you": "ติดตามคุณ"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "โพสต์",
|
||||
"following": "กำลังติดตาม",
|
||||
"followers": "ผู้ติดตาม"
|
||||
"my_posts": "โพสต์",
|
||||
"my_following": "กำลังติดตาม",
|
||||
"my_followers": "ผู้ติดตาม",
|
||||
"other_posts": "โพสต์",
|
||||
"other_following": "กำลังติดตาม",
|
||||
"other_followers": "ผู้ติดตาม"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
"joined": "เข้าร่วมเมื่อ",
|
||||
"add_row": "เพิ่มแถว",
|
||||
"placeholder": {
|
||||
"label": "ป้ายชื่อ",
|
||||
|
|
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Seni takip ediyor"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "gönderiler",
|
||||
"following": "takip ediliyor",
|
||||
"followers": "takipçi"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
|
|
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Підписаний(-на) на вас"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "дописів",
|
||||
"following": "підписаний",
|
||||
"followers": "підписників"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
|
|
|
@ -183,9 +183,9 @@
|
|||
"direct": "Chỉ người được nhắc đến có thể thấy tút."
|
||||
},
|
||||
"translation": {
|
||||
"translated_from": "Translated from %s using %s",
|
||||
"translated_from": "Dịch từ %s bằng %s",
|
||||
"unknown_language": "Không xác định",
|
||||
"unknown_provider": "Unknown",
|
||||
"unknown_provider": "Không biết",
|
||||
"show_original": "Bản gốc"
|
||||
}
|
||||
},
|
||||
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "Đang theo dõi bạn"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "tút",
|
||||
"following": "theo dõi",
|
||||
"followers": "người theo dõi"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Đã tham gia",
|
||||
|
|
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "关注了你"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "帖子",
|
||||
"following": "正在关注",
|
||||
"followers": "关注者"
|
||||
"my_posts": "posts",
|
||||
"my_following": "following",
|
||||
"my_followers": "followers",
|
||||
"other_posts": "posts",
|
||||
"other_following": "following",
|
||||
"other_followers": "followers"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "Joined",
|
||||
|
|
|
@ -183,9 +183,9 @@
|
|||
"direct": "只有被提及的使用者能看到此嘟文。"
|
||||
},
|
||||
"translation": {
|
||||
"translated_from": "Translated from %s using %s",
|
||||
"translated_from": "透過 %s 翻譯 %s",
|
||||
"unknown_language": "未知",
|
||||
"unknown_provider": "Unknown",
|
||||
"unknown_provider": "未知",
|
||||
"show_original": "顯示原文"
|
||||
}
|
||||
},
|
||||
|
@ -463,9 +463,12 @@
|
|||
"follows_you": "跟隨了您"
|
||||
},
|
||||
"dashboard": {
|
||||
"posts": "嘟文",
|
||||
"following": "跟隨中",
|
||||
"followers": "跟隨者"
|
||||
"my_posts": "嘟文",
|
||||
"my_following": "正在跟隨",
|
||||
"my_followers": "跟隨者",
|
||||
"other_posts": "嘟文",
|
||||
"other_following": "正在跟隨",
|
||||
"other_followers": "跟隨者"
|
||||
},
|
||||
"fields": {
|
||||
"joined": "加入時間",
|
||||
|
|
|
@ -187,6 +187,12 @@
|
|||
"unknown_language": "Unknown",
|
||||
"unknown_provider": "Unknown",
|
||||
"show_original": "Shown Original"
|
||||
},
|
||||
"media": {
|
||||
"accessibility_label": "%s, attachment %d of %d",
|
||||
"expand_image_hint": "Expands the image. Double-tap and hold to show actions",
|
||||
"expand_gif_hint": "Expands the GIF. Double-tap and hold to show actions",
|
||||
"expand_video_hint": "Shows the video player. Double-tap and hold to show actions"
|
||||
}
|
||||
},
|
||||
"friendship": {
|
||||
|
@ -379,7 +385,7 @@
|
|||
"published": "Published!",
|
||||
"Publishing": "Publishing post...",
|
||||
"accessibility": {
|
||||
"logo_label": "Logo Button",
|
||||
"logo_label": "Mastodon",
|
||||
"logo_hint": "Tap to scroll to top and tap again to previous location"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -75,6 +75,11 @@
|
|||
2DAC9E46262FC9FD0062E1A6 /* SuggestionAccountTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DAC9E45262FC9FD0062E1A6 /* SuggestionAccountTableViewCell.swift */; };
|
||||
2DCB73FD2615C13900EC03D4 /* SearchRecommendCollectionHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DCB73FC2615C13900EC03D4 /* SearchRecommendCollectionHeader.swift */; };
|
||||
2DE0FACE2615F7AD00CDF649 /* RecommendAccountSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DE0FACD2615F7AD00CDF649 /* RecommendAccountSection.swift */; };
|
||||
357FEEAF29523D470021C9DC /* MastodonSDKDynamic in Frameworks */ = {isa = PBXBuildFile; productRef = 357FEEAE29523D470021C9DC /* MastodonSDKDynamic */; };
|
||||
357FEEB029523D470021C9DC /* MastodonSDKDynamic in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 357FEEAE29523D470021C9DC /* MastodonSDKDynamic */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||
357FEEB229523D510021C9DC /* MastodonSDKDynamic in Frameworks */ = {isa = PBXBuildFile; productRef = 357FEEB129523D510021C9DC /* MastodonSDKDynamic */; };
|
||||
357FEEB629523D5C0021C9DC /* MastodonSDKDynamic in Frameworks */ = {isa = PBXBuildFile; productRef = 357FEEB529523D5C0021C9DC /* MastodonSDKDynamic */; };
|
||||
357FEEBA29523D660021C9DC /* MastodonSDKDynamic in Frameworks */ = {isa = PBXBuildFile; productRef = 357FEEB929523D660021C9DC /* MastodonSDKDynamic */; };
|
||||
5B24BBDA262DB14800A9381B /* ReportViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B24BBD7262DB14800A9381B /* ReportViewModel.swift */; };
|
||||
5B24BBDB262DB14800A9381B /* ReportStatusViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B24BBD8262DB14800A9381B /* ReportStatusViewModel+Diffable.swift */; };
|
||||
5B90C45E262599800002E742 /* SettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B90C456262599800002E742 /* SettingsViewModel.swift */; };
|
||||
|
@ -96,9 +101,14 @@
|
|||
62FD27D12893707600B205C5 /* BookmarkViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62FD27D02893707600B205C5 /* BookmarkViewController.swift */; };
|
||||
62FD27D32893707B00B205C5 /* BookmarkViewController+DataSourceProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62FD27D22893707B00B205C5 /* BookmarkViewController+DataSourceProvider.swift */; };
|
||||
62FD27D52893708A00B205C5 /* BookmarkViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62FD27D42893708A00B205C5 /* BookmarkViewModel+Diffable.swift */; };
|
||||
855149C8295F1C5F00943D96 /* UIInterfaceOrientationMask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 855149C7295F1C5F00943D96 /* UIInterfaceOrientationMask.swift */; };
|
||||
855149CA29606D6400943D96 /* PortraitAlertController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 855149C929606D6400943D96 /* PortraitAlertController.swift */; };
|
||||
85904C02293BC0EB0011C817 /* ImageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85904C01293BC0EB0011C817 /* ImageProvider.swift */; };
|
||||
85904C04293BC1940011C817 /* URLActivityItemWithMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85904C03293BC1940011C817 /* URLActivityItemWithMetadata.swift */; };
|
||||
85BC11B32932414900E191CD /* AltViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85BC11B22932414900E191CD /* AltViewController.swift */; };
|
||||
87FFDA5D898A5C42ADCB35E7 /* Pods_Mastodon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A4ABE34829701A4496C5BB64 /* Pods_Mastodon.framework */; };
|
||||
9E44C7202967AD17004B2A72 /* MastodonSDKDynamic in Frameworks */ = {isa = PBXBuildFile; productRef = 9E44C71F2967AD17004B2A72 /* MastodonSDKDynamic */; };
|
||||
9E44C7222967AD17004B2A72 /* MastodonSDKDynamic in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 9E44C71F2967AD17004B2A72 /* MastodonSDKDynamic */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||
C24C97032922F30500BAE8CB /* RefreshControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = C24C97022922F30500BAE8CB /* RefreshControl.swift */; };
|
||||
D87BFC8B291D5C6B00FEE264 /* MastodonLoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D87BFC8A291D5C6B00FEE264 /* MastodonLoginView.swift */; };
|
||||
D87BFC8D291EB81200FEE264 /* MastodonLoginViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D87BFC8C291EB81200FEE264 /* MastodonLoginViewModel.swift */; };
|
||||
|
@ -129,7 +139,6 @@
|
|||
DB0618032785A7100030EE79 /* RegisterSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0618022785A7100030EE79 /* RegisterSection.swift */; };
|
||||
DB0618052785A73D0030EE79 /* RegisterItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0618042785A73D0030EE79 /* RegisterItem.swift */; };
|
||||
DB0A322E280EE9FD001729D2 /* DiscoveryIntroBannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0A322D280EE9FD001729D2 /* DiscoveryIntroBannerView.swift */; };
|
||||
DB0C947726A7FE840088FB11 /* NotificationAvatarButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0C947626A7FE840088FB11 /* NotificationAvatarButton.swift */; };
|
||||
DB0EF72B26FDB1D200347686 /* SidebarListCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0EF72A26FDB1D200347686 /* SidebarListCollectionViewCell.swift */; };
|
||||
DB0EF72E26FDB24F00347686 /* SidebarListContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0EF72D26FDB24F00347686 /* SidebarListContentView.swift */; };
|
||||
DB0F8150264D1E2500F2A12B /* PickServerLoaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0F814F264D1E2500F2A12B /* PickServerLoaderTableViewCell.swift */; };
|
||||
|
@ -169,10 +178,6 @@
|
|||
DB1FD44425F26CCC004CFCFC /* PickServerSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB1FD44325F26CCC004CFCFC /* PickServerSection.swift */; };
|
||||
DB1FD45025F26FA1004CFCFC /* MastodonPickServerViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB1FD44F25F26FA1004CFCFC /* MastodonPickServerViewModel+Diffable.swift */; };
|
||||
DB1FD45A25F27898004CFCFC /* CategoryPickerItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB1FD45925F27898004CFCFC /* CategoryPickerItem.swift */; };
|
||||
DB22C92228E700A10082A9E9 /* MastodonSDK in Frameworks */ = {isa = PBXBuildFile; productRef = DB22C92128E700A10082A9E9 /* MastodonSDK */; };
|
||||
DB22C92428E700A80082A9E9 /* MastodonSDK in Frameworks */ = {isa = PBXBuildFile; productRef = DB22C92328E700A80082A9E9 /* MastodonSDK */; };
|
||||
DB22C92628E700AF0082A9E9 /* MastodonSDK in Frameworks */ = {isa = PBXBuildFile; productRef = DB22C92528E700AF0082A9E9 /* MastodonSDK */; };
|
||||
DB22C92828E700B70082A9E9 /* MastodonSDK in Frameworks */ = {isa = PBXBuildFile; productRef = DB22C92728E700B70082A9E9 /* MastodonSDK */; };
|
||||
DB2B3ABC25E37E15007045F9 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = DB2B3ABE25E37E15007045F9 /* InfoPlist.strings */; };
|
||||
DB2F073525E8ECF000957B2D /* AuthenticationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB2F073325E8ECF000957B2D /* AuthenticationViewModel.swift */; };
|
||||
DB2FF510260B113300ADA9FE /* ComposeStatusPollExpiresOptionCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB2FF50F260B113300ADA9FE /* ComposeStatusPollExpiresOptionCollectionViewCell.swift */; };
|
||||
|
@ -306,8 +311,6 @@
|
|||
DB72602725E36A6F00235243 /* MastodonServerRulesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB72602625E36A6F00235243 /* MastodonServerRulesViewModel.swift */; };
|
||||
DB7274F4273BB9B200577D95 /* ListBatchFetchViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB7274F3273BB9B200577D95 /* ListBatchFetchViewModel.swift */; };
|
||||
DB73B490261F030A002E9E9F /* SafariActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB73B48F261F030A002E9E9F /* SafariActivity.swift */; };
|
||||
DB73BF4927140BA300781945 /* UICollectionViewDiffableDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB73BF4827140BA300781945 /* UICollectionViewDiffableDataSource.swift */; };
|
||||
DB73BF4B27140C0800781945 /* UITableViewDiffableDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB73BF4A27140C0800781945 /* UITableViewDiffableDataSource.swift */; };
|
||||
DB75BF1E263C1C1B00EDBF1F /* CustomScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB75BF1D263C1C1B00EDBF1F /* CustomScheduler.swift */; };
|
||||
DB789A0B25F9F2950071ACA0 /* ComposeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB789A0A25F9F2950071ACA0 /* ComposeViewController.swift */; };
|
||||
DB789A1225F9F2CC0071ACA0 /* ComposeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB789A1125F9F2CC0071ACA0 /* ComposeViewModel.swift */; };
|
||||
|
@ -486,12 +489,24 @@
|
|||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
9E44C7212967AD17004B2A72 /* Embed Frameworks */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = "";
|
||||
dstSubfolderSpec = 10;
|
||||
files = (
|
||||
9E44C7222967AD17004B2A72 /* MastodonSDKDynamic in Embed Frameworks */,
|
||||
);
|
||||
name = "Embed Frameworks";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
DB89BA0825C10FD0008580ED /* Embed Frameworks */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = "";
|
||||
dstSubfolderSpec = 10;
|
||||
files = (
|
||||
357FEEB029523D470021C9DC /* MastodonSDKDynamic in Embed Frameworks */,
|
||||
);
|
||||
name = "Embed Frameworks";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
|
@ -618,8 +633,11 @@
|
|||
7CB58D292DA7ACEF179A9050 /* Pods-Mastodon.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mastodon.profile.xcconfig"; path = "Target Support Files/Pods-Mastodon/Pods-Mastodon.profile.xcconfig"; sourceTree = "<group>"; };
|
||||
7CEFFAE9AF9284B13C0A758D /* Pods-MastodonTests.asdk - debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MastodonTests.asdk - debug.xcconfig"; path = "Target Support Files/Pods-MastodonTests/Pods-MastodonTests.asdk - debug.xcconfig"; sourceTree = "<group>"; };
|
||||
819CEC9DCAD8E8E7BD85A7BB /* Pods-Mastodon.asdk.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mastodon.asdk.xcconfig"; path = "Target Support Files/Pods-Mastodon/Pods-Mastodon.asdk.xcconfig"; sourceTree = "<group>"; };
|
||||
855149C7295F1C5F00943D96 /* UIInterfaceOrientationMask.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIInterfaceOrientationMask.swift; sourceTree = "<group>"; };
|
||||
855149C929606D6400943D96 /* PortraitAlertController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PortraitAlertController.swift; sourceTree = "<group>"; };
|
||||
85904C01293BC0EB0011C817 /* ImageProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageProvider.swift; sourceTree = "<group>"; };
|
||||
85904C03293BC1940011C817 /* URLActivityItemWithMetadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLActivityItemWithMetadata.swift; sourceTree = "<group>"; };
|
||||
85BC11B22932414900E191CD /* AltViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AltViewController.swift; sourceTree = "<group>"; };
|
||||
8850E70A1D5FF51432E43653 /* Pods-Mastodon-MastodonUITests.asdk - release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mastodon-MastodonUITests.asdk - release.xcconfig"; path = "Target Support Files/Pods-Mastodon-MastodonUITests/Pods-Mastodon-MastodonUITests.asdk - release.xcconfig"; sourceTree = "<group>"; };
|
||||
8E79CCBE51FBC3F7FE8CF49F /* Pods-MastodonTests.release snapshot.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MastodonTests.release snapshot.xcconfig"; path = "Target Support Files/Pods-MastodonTests/Pods-MastodonTests.release snapshot.xcconfig"; sourceTree = "<group>"; };
|
||||
8ED8C4B1F1BA2DCFF2926BB1 /* Pods-Mastodon-NotificationService.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mastodon-NotificationService.debug.xcconfig"; path = "Target Support Files/Pods-Mastodon-NotificationService/Pods-Mastodon-NotificationService.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
|
@ -667,7 +685,6 @@
|
|||
DB0618042785A73D0030EE79 /* RegisterItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegisterItem.swift; sourceTree = "<group>"; };
|
||||
DB0618062785A8880030EE79 /* MastodonRegisterViewModel+Diffable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MastodonRegisterViewModel+Diffable.swift"; sourceTree = "<group>"; };
|
||||
DB0A322D280EE9FD001729D2 /* DiscoveryIntroBannerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoveryIntroBannerView.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>"; };
|
||||
DB0EF72D26FDB24F00347686 /* SidebarListContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarListContentView.swift; sourceTree = "<group>"; };
|
||||
DB0F814E264CFFD300F2A12B /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
|
@ -879,8 +896,6 @@
|
|||
DB72602625E36A6F00235243 /* MastodonServerRulesViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonServerRulesViewModel.swift; sourceTree = "<group>"; };
|
||||
DB7274F3273BB9B200577D95 /* ListBatchFetchViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListBatchFetchViewModel.swift; sourceTree = "<group>"; };
|
||||
DB73B48F261F030A002E9E9F /* SafariActivity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SafariActivity.swift; sourceTree = "<group>"; };
|
||||
DB73BF4827140BA300781945 /* UICollectionViewDiffableDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UICollectionViewDiffableDataSource.swift; sourceTree = "<group>"; };
|
||||
DB73BF4A27140C0800781945 /* UITableViewDiffableDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UITableViewDiffableDataSource.swift; sourceTree = "<group>"; };
|
||||
DB75BF1D263C1C1B00EDBF1F /* CustomScheduler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomScheduler.swift; sourceTree = "<group>"; };
|
||||
DB789A0A25F9F2950071ACA0 /* ComposeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeViewController.swift; sourceTree = "<group>"; };
|
||||
DB789A1125F9F2CC0071ACA0 /* ComposeViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeViewModel.swift; sourceTree = "<group>"; };
|
||||
|
@ -1085,7 +1100,7 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
DB22C92428E700A80082A9E9 /* MastodonSDK in Frameworks */,
|
||||
357FEEAF29523D470021C9DC /* MastodonSDKDynamic in Frameworks */,
|
||||
DBF96326262EC0A6001D8D25 /* AuthenticationServices.framework in Frameworks */,
|
||||
87FFDA5D898A5C42ADCB35E7 /* Pods_Mastodon.framework in Frameworks */,
|
||||
);
|
||||
|
@ -1095,6 +1110,7 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
9E44C7202967AD17004B2A72 /* MastodonSDKDynamic in Frameworks */,
|
||||
5E44BF88AD33646E64727BCF /* Pods_MastodonTests.framework in Frameworks */,
|
||||
5E0DEC05797A7E6933788DDB /* Pods_MastodonTests.framework in Frameworks */,
|
||||
);
|
||||
|
@ -1112,7 +1128,7 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
DB22C92828E700B70082A9E9 /* MastodonSDK in Frameworks */,
|
||||
357FEEBA29523D660021C9DC /* MastodonSDKDynamic in Frameworks */,
|
||||
DB8FABC726AEC7B2008E5AF4 /* Intents.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
|
@ -1121,7 +1137,7 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
DB22C92628E700AF0082A9E9 /* MastodonSDK in Frameworks */,
|
||||
357FEEB629523D5C0021C9DC /* MastodonSDKDynamic in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -1129,7 +1145,7 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
DB22C92228E700A10082A9E9 /* MastodonSDK in Frameworks */,
|
||||
357FEEB229523D510021C9DC /* MastodonSDKDynamic in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -1635,14 +1651,6 @@
|
|||
path = View;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
DB0C947826A7FE950088FB11 /* Button */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
DB0C947626A7FE840088FB11 /* NotificationAvatarButton.swift */,
|
||||
);
|
||||
path = Button;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
DB0EF72C26FDB1D600347686 /* View */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -1975,6 +1983,7 @@
|
|||
DB6180F026391CAB0018D199 /* Image */,
|
||||
DB6180E1263919780018D199 /* Paging */,
|
||||
DB6180DC263918E30018D199 /* MediaPreviewViewController.swift */,
|
||||
85BC11B22932414900E191CD /* AltViewController.swift */,
|
||||
DB6180F926391F2E0018D199 /* MediaPreviewViewModel.swift */,
|
||||
);
|
||||
path = MediaPreview;
|
||||
|
@ -2282,9 +2291,8 @@
|
|||
DB9E0D6E25EE008500CFDD76 /* UIInterpolatingMotionEffect.swift */,
|
||||
2AE244472927831100BDBF7C /* UIImage+SFSymbols.swift */,
|
||||
DBCC3B2F261440A50045B23D /* UITabBarController.swift */,
|
||||
DB73BF4827140BA300781945 /* UICollectionViewDiffableDataSource.swift */,
|
||||
DB73BF4A27140C0800781945 /* UITableViewDiffableDataSource.swift */,
|
||||
2A1FE47D2938C11200784BF1 /* Collection+IsNotEmpty.swift */,
|
||||
855149C7295F1C5F00943D96 /* UIInterfaceOrientationMask.swift */,
|
||||
);
|
||||
path = Extension;
|
||||
sourceTree = "<group>";
|
||||
|
@ -2393,7 +2401,6 @@
|
|||
isa = PBXGroup;
|
||||
children = (
|
||||
DB63F765279A5E5600455B82 /* NotificationTimeline */,
|
||||
DB0C947826A7FE950088FB11 /* Button */,
|
||||
2D35237F26256F470031AF25 /* Cell */,
|
||||
DB9D6BF725E4F5690051B173 /* NotificationViewController.swift */,
|
||||
2D607AD726242FC500B70763 /* NotificationViewModel.swift */,
|
||||
|
@ -2555,6 +2562,7 @@
|
|||
DBF3B7402733EB9400E21627 /* MastodonLocalCode.swift */,
|
||||
85904C01293BC0EB0011C817 /* ImageProvider.swift */,
|
||||
85904C03293BC1940011C817 /* URLActivityItemWithMetadata.swift */,
|
||||
855149C929606D6400943D96 /* PortraitAlertController.swift */,
|
||||
);
|
||||
path = Helper;
|
||||
sourceTree = "<group>";
|
||||
|
@ -2755,7 +2763,7 @@
|
|||
);
|
||||
name = Mastodon;
|
||||
packageProductDependencies = (
|
||||
DB22C92328E700A80082A9E9 /* MastodonSDK */,
|
||||
357FEEAE29523D470021C9DC /* MastodonSDKDynamic */,
|
||||
);
|
||||
productName = Mastodon;
|
||||
productReference = DB427DD225BAA00100D1B89D /* Mastodon.app */;
|
||||
|
@ -2769,6 +2777,7 @@
|
|||
DB427DE425BAA00100D1B89D /* Sources */,
|
||||
DB427DE525BAA00100D1B89D /* Frameworks */,
|
||||
DB427DE625BAA00100D1B89D /* Resources */,
|
||||
9E44C7212967AD17004B2A72 /* Embed Frameworks */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
|
@ -2776,6 +2785,9 @@
|
|||
DB427DEA25BAA00100D1B89D /* PBXTargetDependency */,
|
||||
);
|
||||
name = MastodonTests;
|
||||
packageProductDependencies = (
|
||||
9E44C71F2967AD17004B2A72 /* MastodonSDKDynamic */,
|
||||
);
|
||||
productName = MastodonTests;
|
||||
productReference = DB427DE825BAA00100D1B89D /* MastodonTests.xctest */;
|
||||
productType = "com.apple.product-type.bundle.unit-test";
|
||||
|
@ -2814,7 +2826,7 @@
|
|||
);
|
||||
name = MastodonIntent;
|
||||
packageProductDependencies = (
|
||||
DB22C92728E700B70082A9E9 /* MastodonSDK */,
|
||||
357FEEB929523D660021C9DC /* MastodonSDKDynamic */,
|
||||
);
|
||||
productName = MastodonIntent;
|
||||
productReference = DB8FABC626AEC7B2008E5AF4 /* MastodonIntent.appex */;
|
||||
|
@ -2834,7 +2846,7 @@
|
|||
);
|
||||
name = ShareActionExtension;
|
||||
packageProductDependencies = (
|
||||
DB22C92528E700AF0082A9E9 /* MastodonSDK */,
|
||||
357FEEB529523D5C0021C9DC /* MastodonSDKDynamic */,
|
||||
);
|
||||
productName = ShareActionExtension;
|
||||
productReference = DBC6461226A170AB00B0E31B /* ShareActionExtension.appex */;
|
||||
|
@ -2854,7 +2866,7 @@
|
|||
);
|
||||
name = NotificationService;
|
||||
packageProductDependencies = (
|
||||
DB22C92128E700A10082A9E9 /* MastodonSDK */,
|
||||
357FEEB129523D510021C9DC /* MastodonSDKDynamic */,
|
||||
);
|
||||
productName = NotificationService;
|
||||
productReference = DBF8AE13263293E400C9C23C /* NotificationService.appex */;
|
||||
|
@ -3197,6 +3209,7 @@
|
|||
DB1E347825F519300079D7DF /* PickServerItem.swift in Sources */,
|
||||
DB336F3F278E668C0031E64B /* StatusTableViewCell+ViewModel.swift in Sources */,
|
||||
DB63F764279A5E3C00455B82 /* NotificationTimelineViewController.swift in Sources */,
|
||||
855149C8295F1C5F00943D96 /* UIInterfaceOrientationMask.swift in Sources */,
|
||||
DBA5A53126F08EF000CACBAA /* DragIndicatorView.swift in Sources */,
|
||||
DB1FD45A25F27898004CFCFC /* CategoryPickerItem.swift in Sources */,
|
||||
DB6180F626391D580018D199 /* MediaPreviewableViewController.swift in Sources */,
|
||||
|
@ -3274,7 +3287,6 @@
|
|||
DB603113279EBEBA00A935FE /* DataSourceFacade+Block.swift in Sources */,
|
||||
DB63F777279A9A2A00455B82 /* NotificationView+Configuration.swift in Sources */,
|
||||
DB029E95266A20430062874E /* MastodonAuthenticationController.swift in Sources */,
|
||||
DB0C947726A7FE840088FB11 /* NotificationAvatarButton.swift in Sources */,
|
||||
5B90C461262599800002E742 /* SettingsLinkTableViewCell.swift in Sources */,
|
||||
DB6180DD263918E30018D199 /* MediaPreviewViewController.swift in Sources */,
|
||||
DBE3CDEC261C6B2900430CC6 /* FavoriteViewController.swift in Sources */,
|
||||
|
@ -3316,7 +3328,6 @@
|
|||
DB5B729E273113F300081888 /* FollowingListViewModel+State.swift in Sources */,
|
||||
DBF9814C265E339500E4BA07 /* ProfileFieldAddEntryCollectionViewCell.swift in Sources */,
|
||||
DB63F76227996B6600455B82 /* SearchHistoryViewController+DataSourceProvider.swift in Sources */,
|
||||
DB73BF4927140BA300781945 /* UICollectionViewDiffableDataSource.swift in Sources */,
|
||||
DBA5E7AB263BD3F5004598BB /* TimelineTableViewCellContextMenuConfiguration.swift in Sources */,
|
||||
DB73B490261F030A002E9E9F /* SafariActivity.swift in Sources */,
|
||||
2AE244482927831100BDBF7C /* UIImage+SFSymbols.swift in Sources */,
|
||||
|
@ -3406,7 +3417,6 @@
|
|||
DB1E346825F518E20079D7DF /* CategoryPickerSection.swift in Sources */,
|
||||
DB7274F4273BB9B200577D95 /* ListBatchFetchViewModel.swift in Sources */,
|
||||
DB0618052785A73D0030EE79 /* RegisterItem.swift in Sources */,
|
||||
DB73BF4B27140C0800781945 /* UITableViewDiffableDataSource.swift in Sources */,
|
||||
DBB525642612C988002F1F29 /* MeProfileViewModel.swift in Sources */,
|
||||
DB3EA8EF281B837000598866 /* DiscoveryCommunityViewController+DataSourceProvider.swift in Sources */,
|
||||
DB6B74EF272FB55000C70B6E /* FollowerListViewController.swift in Sources */,
|
||||
|
@ -3535,6 +3545,7 @@
|
|||
DB9D6BFF25E4F5940051B173 /* ProfileViewController.swift in Sources */,
|
||||
2D4AD8A226316CD200613EFC /* SelectedAccountSection.swift in Sources */,
|
||||
DB3EA8F1281B9EF600598866 /* DiscoveryCommunityViewModel+Diffable.swift in Sources */,
|
||||
85BC11B32932414900E191CD /* AltViewController.swift in Sources */,
|
||||
DB63F775279A997D00455B82 /* NotificationTableViewCell+ViewModel.swift in Sources */,
|
||||
DB98EB5927B109890082E365 /* ReportSupplementaryViewController.swift in Sources */,
|
||||
DB0617EB277EF3820030EE79 /* GradientBorderView.swift in Sources */,
|
||||
|
@ -3543,6 +3554,7 @@
|
|||
DBEFCD7D282A2A3B00C0ABEA /* ReportServerRulesViewController.swift in Sources */,
|
||||
DBB525362611ECEB002F1F29 /* UserTimelineViewController.swift in Sources */,
|
||||
DB98EB4927B0F0CD0082E365 /* ReportStatusTableViewCell.swift in Sources */,
|
||||
855149CA29606D6400943D96 /* PortraitAlertController.swift in Sources */,
|
||||
DBF3B7412733EB9400E21627 /* MastodonLocalCode.swift in Sources */,
|
||||
DB98EB6527B216500082E365 /* ReportResultViewModel.swift in Sources */,
|
||||
DB4F096A269EDAD200D62E92 /* SearchResultViewModel+State.swift in Sources */,
|
||||
|
@ -3827,7 +3839,7 @@
|
|||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
INTENTS_CODEGEN_LANGUAGE = Swift;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
|
@ -3885,7 +3897,7 @@
|
|||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
INTENTS_CODEGEN_LANGUAGE = Swift;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
|
@ -3908,6 +3920,7 @@
|
|||
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
|
||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||
INFOPLIST_FILE = Mastodon/Info.plist;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
|
@ -3936,7 +3949,9 @@
|
|||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
|
||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||
EXCLUDED_SOURCE_FILE_NAMES = "Mastodon/Resources/Preview\\ Assets.xcassets";
|
||||
INFOPLIST_FILE = Mastodon/Info.plist;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
|
@ -3967,6 +3982,9 @@
|
|||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.MastodonTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Mastodon.app/Mastodon";
|
||||
|
@ -3988,6 +4006,9 @@
|
|||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.MastodonTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Mastodon.app/Mastodon";
|
||||
|
@ -4008,6 +4029,9 @@
|
|||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.MastodonUITests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
TEST_TARGET_NAME = Mastodon;
|
||||
|
@ -4028,6 +4052,9 @@
|
|||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.MastodonUITests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
TEST_TARGET_NAME = Mastodon;
|
||||
|
@ -4087,7 +4114,7 @@
|
|||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
INTENTS_CODEGEN_LANGUAGE = Swift;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
|
@ -4110,6 +4137,7 @@
|
|||
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
|
||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||
INFOPLIST_FILE = Mastodon/Info.plist;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
|
@ -4141,6 +4169,9 @@
|
|||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.MastodonTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Mastodon.app/Mastodon";
|
||||
|
@ -4161,6 +4192,9 @@
|
|||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.MastodonUITests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
TEST_TARGET_NAME = Mastodon;
|
||||
|
@ -4369,7 +4403,7 @@
|
|||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
INTENTS_CODEGEN_LANGUAGE = Swift;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
|
@ -4393,6 +4427,7 @@
|
|||
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
|
||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||
INFOPLIST_FILE = Mastodon/Info.plist;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
|
@ -4423,6 +4458,9 @@
|
|||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.MastodonTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Mastodon.app/Mastodon";
|
||||
|
@ -4443,6 +4481,9 @@
|
|||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.MastodonUITests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
TEST_TARGET_NAME = Mastodon;
|
||||
|
@ -4642,21 +4683,25 @@
|
|||
/* End XCConfigurationList section */
|
||||
|
||||
/* Begin XCSwiftPackageProductDependency section */
|
||||
DB22C92128E700A10082A9E9 /* MastodonSDK */ = {
|
||||
357FEEAE29523D470021C9DC /* MastodonSDKDynamic */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
productName = MastodonSDK;
|
||||
productName = MastodonSDKDynamic;
|
||||
};
|
||||
DB22C92328E700A80082A9E9 /* MastodonSDK */ = {
|
||||
357FEEB129523D510021C9DC /* MastodonSDKDynamic */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
productName = MastodonSDK;
|
||||
productName = MastodonSDKDynamic;
|
||||
};
|
||||
DB22C92528E700AF0082A9E9 /* MastodonSDK */ = {
|
||||
357FEEB529523D5C0021C9DC /* MastodonSDKDynamic */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
productName = MastodonSDK;
|
||||
productName = MastodonSDKDynamic;
|
||||
};
|
||||
DB22C92728E700B70082A9E9 /* MastodonSDK */ = {
|
||||
357FEEB929523D660021C9DC /* MastodonSDKDynamic */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
productName = MastodonSDK;
|
||||
productName = MastodonSDKDynamic;
|
||||
};
|
||||
9E44C71F2967AD17004B2A72 /* MastodonSDKDynamic */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
productName = MastodonSDKDynamic;
|
||||
};
|
||||
/* End XCSwiftPackageProductDependency section */
|
||||
};
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/Alamofire/Alamofire.git",
|
||||
"state" : {
|
||||
"revision" : "354dda32d89fc8cd4f5c46487f64957d355f53d8",
|
||||
"version" : "5.6.1"
|
||||
"revision" : "8dd85aee02e39dd280c75eef88ffdb86eed4b07b",
|
||||
"version" : "5.6.2"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -41,8 +41,8 @@
|
|||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/Flipboard/FLAnimatedImage.git",
|
||||
"state" : {
|
||||
"revision" : "e7f9fd4681ae41bf6f3056db08af4f401d61da52",
|
||||
"version" : "1.0.16"
|
||||
"revision" : "d4f07b6f164d53c1212c3e54d6460738b1981e9f",
|
||||
"version" : "1.0.17"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -104,8 +104,8 @@
|
|||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/kean/Nuke.git",
|
||||
"state" : {
|
||||
"revision" : "0ea7545b5c918285aacc044dc75048625c8257cc",
|
||||
"version" : "10.8.0"
|
||||
"revision" : "a002b7fd786f2df2ed4333fe73a9727499fd9d97",
|
||||
"version" : "10.11.2"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -122,8 +122,8 @@
|
|||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/uias/Pageboy",
|
||||
"state" : {
|
||||
"revision" : "34ecb6e7c4e0e07494960ab2f7cc9a02293915a6",
|
||||
"version" : "3.6.2"
|
||||
"revision" : "af8fa81788b893205e1ff42ddd88c5b0b315d7c5",
|
||||
"version" : "3.7.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -140,8 +140,8 @@
|
|||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/SDWebImage/SDWebImage.git",
|
||||
"state" : {
|
||||
"revision" : "2e63d0061da449ad0ed130768d05dceb1496de44",
|
||||
"version" : "5.12.5"
|
||||
"revision" : "3312bf5e67b52fbce7c3caf431b0cda721a9f7bb",
|
||||
"version" : "5.14.2"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -185,8 +185,8 @@
|
|||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/scinfu/SwiftSoup.git",
|
||||
"state" : {
|
||||
"revision" : "41e7c263fb8c277e980ebcb9b0b5f6031d3d4886",
|
||||
"version" : "2.4.2"
|
||||
"revision" : "6778575285177365cbad3e5b8a72f2a20583cfec",
|
||||
"version" : "2.4.3"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
|
@ -77,7 +77,7 @@ extension PickServerSection {
|
|||
let paragraphStyle = NSMutableParagraphStyle()
|
||||
paragraphStyle.lineHeightMultiple = 1.12
|
||||
let valueAttributedString = NSAttributedString(
|
||||
string: parseUsersCount(server.totalUsers),
|
||||
string: server.totalUsers.asAbbreviatedCountString(),
|
||||
attributes: [
|
||||
.paragraphStyle: paragraphStyle
|
||||
]
|
||||
|
@ -125,17 +125,6 @@ extension PickServerSection {
|
|||
}
|
||||
.store(in: &cell.disposeBag)
|
||||
}
|
||||
|
||||
private static func parseUsersCount(_ usersCount: Int) -> String {
|
||||
switch usersCount {
|
||||
case 0..<1000:
|
||||
return "\(usersCount)"
|
||||
default:
|
||||
let usersCountInThousand = Float(usersCount) / 1000.0
|
||||
return String(format: "%.1fK", usersCountInThousand)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension PickServerSection {
|
||||
|
|
|
@ -228,11 +228,7 @@ extension StatusSection {
|
|||
}
|
||||
var _snapshot = NSDiffableDataSourceSnapshot<PollSection, PollItem>()
|
||||
_snapshot.appendSections([.main])
|
||||
if #available(iOS 15.0, *) {
|
||||
statusView.pollTableViewDiffableDataSource?.applySnapshotUsingReloadData(_snapshot)
|
||||
} else {
|
||||
statusView.pollTableViewDiffableDataSource?.apply(_snapshot, animatingDifferences: false)
|
||||
}
|
||||
statusView.pollTableViewDiffableDataSource?.applySnapshotUsingReloadData(_snapshot)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,40 +0,0 @@
|
|||
//
|
||||
// UICollectionViewDiffableDataSource.swift
|
||||
// Mastodon
|
||||
//
|
||||
// Created by Cirno MainasuK on 2021-10-11.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
// ref: https://www.jessesquires.com/blog/2021/07/08/diffable-data-source-behavior-changes-and-reconfiguring-cells-in-ios-15/
|
||||
extension UICollectionViewDiffableDataSource {
|
||||
func reloadData(
|
||||
snapshot: NSDiffableDataSourceSnapshot<SectionIdentifierType, ItemIdentifierType>,
|
||||
completion: (() -> Void)? = nil
|
||||
) {
|
||||
if #available(iOS 15.0, *) {
|
||||
self.applySnapshotUsingReloadData(snapshot, completion: completion)
|
||||
} else {
|
||||
self.apply(snapshot, animatingDifferences: false, completion: completion)
|
||||
}
|
||||
}
|
||||
|
||||
func applySnapshot(
|
||||
_ snapshot: NSDiffableDataSourceSnapshot<SectionIdentifierType, ItemIdentifierType>,
|
||||
animated: Bool,
|
||||
completion: (() -> Void)? = nil) {
|
||||
|
||||
if #available(iOS 15.0, *) {
|
||||
self.apply(snapshot, animatingDifferences: animated, completion: completion)
|
||||
} else {
|
||||
if animated {
|
||||
self.apply(snapshot, animatingDifferences: true, completion: completion)
|
||||
} else {
|
||||
UIView.performWithoutAnimation {
|
||||
self.apply(snapshot, animatingDifferences: true, completion: completion)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
//
|
||||
// UIInterfaceOrientationMask.swift
|
||||
// Mastodon
|
||||
//
|
||||
// Created by Jed Fox on 2022-12-30.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
extension UIInterfaceOrientationMask {
|
||||
public static var portraitOnPhone: Self {
|
||||
return UIDevice.current.userInterfaceIdiom == .phone ? .portrait : .all
|
||||
}
|
||||
}
|
|
@ -1,40 +0,0 @@
|
|||
//
|
||||
// UITableViewDiffableDataSource.swift
|
||||
// Mastodon
|
||||
//
|
||||
// Created by Cirno MainasuK on 2021-10-11.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
// ref: https://www.jessesquires.com/blog/2021/07/08/diffable-data-source-behavior-changes-and-reconfiguring-cells-in-ios-15/
|
||||
extension UITableViewDiffableDataSource {
|
||||
func reloadData(
|
||||
snapshot: NSDiffableDataSourceSnapshot<SectionIdentifierType, ItemIdentifierType>,
|
||||
completion: (() -> Void)? = nil
|
||||
) {
|
||||
if #available(iOS 15.0, *) {
|
||||
self.applySnapshotUsingReloadData(snapshot, completion: completion)
|
||||
} else {
|
||||
self.apply(snapshot, animatingDifferences: false, completion: completion)
|
||||
}
|
||||
}
|
||||
|
||||
func applySnapshot(
|
||||
_ snapshot: NSDiffableDataSourceSnapshot<SectionIdentifierType, ItemIdentifierType>,
|
||||
animated: Bool,
|
||||
completion: (() -> Void)? = nil) {
|
||||
|
||||
if #available(iOS 15.0, *) {
|
||||
self.apply(snapshot, animatingDifferences: animated, completion: completion)
|
||||
} else {
|
||||
if animated {
|
||||
self.apply(snapshot, animatingDifferences: true, completion: completion)
|
||||
} else {
|
||||
UIView.performWithoutAnimation {
|
||||
self.apply(snapshot, animatingDifferences: true, completion: completion)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
// Generated using Sourcery 1.6.1 — https://github.com/krzysztofzablocki/Sourcery
|
||||
// Generated using Sourcery 1.9.0 — https://github.com/krzysztofzablocki/Sourcery
|
||||
// DO NOT EDIT
|
||||
|
||||
// sourcery:inline:DiscoveryCommunityViewController.AutoGenerateTableViewDelegate
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
//
|
||||
// PortraitAlertController.swift
|
||||
// Mastodon
|
||||
//
|
||||
// Created by Jed Fox on 2022-12-31.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class PortraitAlertController: UIAlertController {
|
||||
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
|
||||
.portraitOnPhone
|
||||
}
|
||||
}
|
|
@ -49,6 +49,9 @@ final class AccountListViewController: UIViewController, NeedsDependency {
|
|||
return tableView
|
||||
}()
|
||||
|
||||
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
|
||||
.portraitOnPhone
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - PanModalPresentable
|
||||
|
|
|
@ -129,7 +129,7 @@ extension ComposeViewController {
|
|||
extension ComposeViewController {
|
||||
|
||||
private func showDismissConfirmAlertController() {
|
||||
let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
|
||||
let alertController = PortraitAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
|
||||
let discardAction = UIAlertAction(title: L10n.Common.Controls.Actions.discard, style: .destructive) { [weak self] _ in
|
||||
guard let self = self else { return }
|
||||
self.dismiss(animated: true, completion: nil)
|
||||
|
|
|
@ -59,7 +59,7 @@ extension DiscoveryCommunityViewModel {
|
|||
}
|
||||
}
|
||||
|
||||
diffableDataSource.applySnapshot(snapshot, animated: false)
|
||||
diffableDataSource.apply(snapshot, animatingDifferences: false)
|
||||
}
|
||||
.store(in: &disposeBag)
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ extension DiscoveryForYouViewModel {
|
|||
let items = records.map { DiscoveryItem.user($0) }
|
||||
snapshot.appendItems(items, toSection: .forYou)
|
||||
|
||||
diffableDataSource.applySnapshot(snapshot, animated: false)
|
||||
diffableDataSource.apply(snapshot, animatingDifferences: false)
|
||||
}
|
||||
.store(in: &disposeBag)
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@ extension DiscoveryNewsViewModel {
|
|||
}
|
||||
}
|
||||
|
||||
diffableDataSource.applySnapshot(snapshot, animated: false)
|
||||
diffableDataSource.apply(snapshot, animatingDifferences: false)
|
||||
}
|
||||
.store(in: &disposeBag)
|
||||
}
|
||||
|
|
|
@ -59,7 +59,7 @@ extension DiscoveryPostsViewModel {
|
|||
}
|
||||
}
|
||||
|
||||
diffableDataSource.applySnapshot(snapshot, animated: false)
|
||||
diffableDataSource.apply(snapshot, animatingDifferences: false)
|
||||
}
|
||||
.store(in: &disposeBag)
|
||||
}
|
||||
|
|
|
@ -131,17 +131,13 @@ extension HomeTimelineViewModel {
|
|||
snapshot: NSDiffableDataSourceSnapshot<StatusSection, StatusItem>,
|
||||
animatingDifferences: Bool
|
||||
) async {
|
||||
diffableDataSource?.apply(snapshot, animatingDifferences: animatingDifferences)
|
||||
await diffableDataSource?.apply(snapshot, animatingDifferences: animatingDifferences)
|
||||
}
|
||||
|
||||
@MainActor func updateSnapshotUsingReloadData(
|
||||
snapshot: NSDiffableDataSourceSnapshot<StatusSection, StatusItem>
|
||||
) {
|
||||
if #available(iOS 15.0, *) {
|
||||
self.diffableDataSource?.applySnapshotUsingReloadData(snapshot)
|
||||
} else {
|
||||
diffableDataSource?.applySnapshot(snapshot, animated: false, completion: nil)
|
||||
}
|
||||
self.diffableDataSource?.applySnapshotUsingReloadData(snapshot)
|
||||
}
|
||||
|
||||
struct Difference<T> {
|
||||
|
|
|
@ -14,7 +14,6 @@ import CoreData
|
|||
import CoreDataStack
|
||||
import GameplayKit
|
||||
import AlamofireImage
|
||||
import DateToolsSwift
|
||||
import MastodonCore
|
||||
import MastodonUI
|
||||
|
||||
|
@ -149,12 +148,7 @@ extension HomeTimelineViewModel {
|
|||
}
|
||||
|
||||
// reconfigure item
|
||||
if #available(iOS 15.0, *) {
|
||||
snapshot.reconfigureItems([item])
|
||||
} else {
|
||||
// Fallback on earlier versions
|
||||
snapshot.reloadItems([item])
|
||||
}
|
||||
snapshot.reconfigureItems([item])
|
||||
await updateSnapshotUsingReloadData(snapshot: snapshot)
|
||||
|
||||
// fetch data
|
||||
|
@ -177,15 +171,10 @@ extension HomeTimelineViewModel {
|
|||
}
|
||||
|
||||
// reconfigure item again
|
||||
if #available(iOS 15.0, *) {
|
||||
snapshot.reconfigureItems([item])
|
||||
} else {
|
||||
// Fallback on earlier versions
|
||||
snapshot.reloadItems([item])
|
||||
}
|
||||
snapshot.reconfigureItems([item])
|
||||
await updateSnapshotUsingReloadData(snapshot: snapshot)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// MARK: - SuggestionAccountViewModelDelegate
|
||||
|
|
|
@ -103,8 +103,8 @@ extension HomeTimelineNavigationBarTitleView {
|
|||
logoButton.setImage(Asset.Asset.mastodonTextLogo.image.withRenderingMode(.alwaysTemplate), for: .normal)
|
||||
logoButton.contentMode = .center
|
||||
logoButton.isHidden = false
|
||||
logoButton.accessibilityLabel = "Logo Button" // TODO :i18n
|
||||
logoButton.accessibilityHint = "Tap to scroll to top and tap again to previous location"
|
||||
logoButton.accessibilityLabel = L10n.Scene.HomeTimeline.NavigationBarState.Accessibility.logoLabel // TODO :i18n
|
||||
logoButton.accessibilityHint = L10n.Scene.HomeTimeline.NavigationBarState.Accessibility.logoHint
|
||||
case .newPostButton:
|
||||
configureButton(
|
||||
title: L10n.Scene.HomeTimeline.NavigationBarState.newPosts,
|
||||
|
|
|
@ -0,0 +1,92 @@
|
|||
//
|
||||
// AltViewController.swift
|
||||
// Mastodon
|
||||
//
|
||||
// Created by Jed Fox on 2022-11-26.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
class AltViewController: UIViewController {
|
||||
let textView = {
|
||||
let textView: UITextView
|
||||
|
||||
if #available(iOS 16, *) {
|
||||
// TODO: update code below to use TextKit 2 when dropping iOS 15 support
|
||||
textView = UITextView(usingTextLayoutManager: false)
|
||||
} else {
|
||||
textView = UITextView()
|
||||
}
|
||||
|
||||
textView.textContainer.maximumNumberOfLines = 0
|
||||
textView.textContainer.lineBreakMode = .byWordWrapping
|
||||
textView.font = .preferredFont(forTextStyle: .callout)
|
||||
textView.isScrollEnabled = true
|
||||
textView.backgroundColor = .clear
|
||||
textView.isOpaque = false
|
||||
textView.isEditable = false
|
||||
textView.tintColor = .white
|
||||
textView.textContainerInset = UIEdgeInsets(top: 12, left: 8, bottom: 8, right: 8)
|
||||
textView.contentInsetAdjustmentBehavior = .always
|
||||
textView.verticalScrollIndicatorInsets.bottom = 4
|
||||
|
||||
return textView
|
||||
}()
|
||||
|
||||
init(alt: String, sourceView: UIView?) {
|
||||
textView.text = alt
|
||||
super.init(nibName: nil, bundle: nil)
|
||||
self.modalPresentationStyle = .popover
|
||||
self.popoverPresentationController?.delegate = self
|
||||
self.popoverPresentationController?.permittedArrowDirections = .up
|
||||
self.popoverPresentationController?.sourceView = sourceView
|
||||
self.overrideUserInterfaceStyle = .dark
|
||||
}
|
||||
|
||||
@MainActor required dynamic init?(coder aDecoder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
override func loadView() {
|
||||
super.loadView()
|
||||
view.translatesAutoresizingMaskIntoConstraints = false
|
||||
}
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
textView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.backgroundColor = .systemBackground
|
||||
view.addSubview(textView)
|
||||
|
||||
textView.pinToParent()
|
||||
NSLayoutConstraint.activate([
|
||||
textView.widthAnchor.constraint(lessThanOrEqualToConstant: 400),
|
||||
])
|
||||
}
|
||||
|
||||
override func viewDidLayoutSubviews() {
|
||||
super.viewDidLayoutSubviews()
|
||||
UIView.performWithoutAnimation {
|
||||
|
||||
let size = textView.layoutManager.boundingRect(forGlyphRange: NSMakeRange(0, (textView.textStorage.string as NSString).length), in: textView.textContainer).size
|
||||
|
||||
preferredContentSize = CGSize(
|
||||
width: size.width + (8 + textView.textContainer.lineFragmentPadding) * 2,
|
||||
height: size.height + 12 + (textView.textContainer.lineFragmentPadding) * 2
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
|
||||
super.traitCollectionDidChange(previousTraitCollection)
|
||||
textView.font = .preferredFont(forTextStyle: .callout)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: UIPopoverPresentationControllerDelegate
|
||||
extension AltViewController: UIPopoverPresentationControllerDelegate {
|
||||
func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
|
||||
.none
|
||||
}
|
||||
}
|
|
@ -68,30 +68,21 @@ extension MediaPreviewImageViewController {
|
|||
let previewImageViewContextMenuInteraction = UIContextMenuInteraction(delegate: self)
|
||||
previewImageView.addInteraction(previewImageViewContextMenuInteraction)
|
||||
|
||||
switch viewModel.item {
|
||||
case .remote(let imageContext):
|
||||
previewImageView.imageView.accessibilityLabel = imageContext.altText
|
||||
|
||||
if let thumbnail = imageContext.thumbnail {
|
||||
previewImageView.imageView.image = thumbnail
|
||||
previewImageView.setup(image: thumbnail, container: self.previewImageView, forceUpdate: true)
|
||||
}
|
||||
|
||||
previewImageView.imageView.setImage(
|
||||
url: imageContext.assetURL,
|
||||
placeholder: imageContext.thumbnail,
|
||||
scaleToSize: nil
|
||||
) { [weak self] image in
|
||||
guard let self = self else { return }
|
||||
guard let image = image else { return }
|
||||
self.previewImageView.setup(image: image, container: self.previewImageView, forceUpdate: true)
|
||||
}
|
||||
|
||||
case .local(let imageContext):
|
||||
let image = imageContext.image
|
||||
previewImageView.imageView.image = image
|
||||
previewImageView.setup(image: image, container: previewImageView, forceUpdate: true)
|
||||
|
||||
previewImageView.imageView.accessibilityLabel = viewModel.item.altText
|
||||
|
||||
if let thumbnail = viewModel.item.thumbnail {
|
||||
previewImageView.imageView.image = thumbnail
|
||||
previewImageView.setup(image: thumbnail, container: self.previewImageView, forceUpdate: true)
|
||||
}
|
||||
|
||||
previewImageView.imageView.setImage(
|
||||
url: viewModel.item.assetURL,
|
||||
placeholder: viewModel.item.thumbnail,
|
||||
scaleToSize: nil
|
||||
) { [weak self] image in
|
||||
guard let self = self else { return }
|
||||
guard let image = image else { return }
|
||||
self.previewImageView.setup(image: image, container: self.previewImageView, forceUpdate: true)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -30,19 +30,10 @@ class MediaPreviewImageViewModel {
|
|||
|
||||
extension MediaPreviewImageViewModel {
|
||||
|
||||
public enum ImagePreviewItem {
|
||||
case remote(RemoteImageContext)
|
||||
case local(LocalImageContext)
|
||||
}
|
||||
|
||||
public struct RemoteImageContext {
|
||||
public struct ImagePreviewItem {
|
||||
let assetURL: URL?
|
||||
let thumbnail: UIImage?
|
||||
let altText: String?
|
||||
}
|
||||
|
||||
public struct LocalImageContext {
|
||||
let image: UIImage
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -16,8 +16,6 @@ import MastodonLocalization
|
|||
|
||||
final class MediaPreviewViewController: UIViewController, NeedsDependency {
|
||||
|
||||
static let closeButtonSize = CGSize(width: 30, height: 30)
|
||||
|
||||
weak var context: AppContext! { willSet { precondition(!isViewLoaded) } }
|
||||
weak var coordinator: SceneCoordinator! { willSet { precondition(!isViewLoaded) } }
|
||||
|
||||
|
@ -26,24 +24,23 @@ final class MediaPreviewViewController: UIViewController, NeedsDependency {
|
|||
|
||||
let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .systemMaterial))
|
||||
let pagingViewController = MediaPreviewPagingViewController()
|
||||
|
||||
let closeButtonBackground: UIVisualEffectView = {
|
||||
let backgroundView = UIVisualEffectView(effect: UIBlurEffect(style: .systemUltraThinMaterial))
|
||||
backgroundView.alpha = 0.9
|
||||
backgroundView.layer.masksToBounds = true
|
||||
backgroundView.layer.cornerRadius = MediaPreviewViewController.closeButtonSize.width * 0.5
|
||||
return backgroundView
|
||||
|
||||
let topToolbar: UIStackView = {
|
||||
let stackView = TouchTransparentStackView()
|
||||
stackView.axis = .horizontal
|
||||
stackView.distribution = .equalSpacing
|
||||
stackView.alignment = .fill
|
||||
stackView.translatesAutoresizingMaskIntoConstraints = false
|
||||
return stackView
|
||||
}()
|
||||
|
||||
let closeButtonBackgroundVisualEffectView = UIVisualEffectView(effect: UIVibrancyEffect(blurEffect: UIBlurEffect(style: .systemUltraThinMaterial)))
|
||||
|
||||
let closeButton: UIButton = {
|
||||
let button = HighlightDimmableButton()
|
||||
button.expandEdgeInsets = UIEdgeInsets(top: -10, left: -10, bottom: -10, right: -10)
|
||||
button.imageView?.tintColor = .label
|
||||
|
||||
let closeButton = HUDButton { button in
|
||||
button.setImage(UIImage(systemName: "xmark", withConfiguration: UIImage.SymbolConfiguration(pointSize: 16, weight: .bold))!, for: .normal)
|
||||
return button
|
||||
}()
|
||||
}
|
||||
|
||||
let altButton = HUDButton { button in
|
||||
button.setTitle("ALT", for: .normal)
|
||||
}
|
||||
|
||||
deinit {
|
||||
os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s", ((#file as NSString).lastPathComponent), #line, #function)
|
||||
|
@ -67,35 +64,30 @@ extension MediaPreviewViewController {
|
|||
visualEffectView.contentView.addSubview(pagingViewController.view)
|
||||
visualEffectView.pinTo(to: pagingViewController.view)
|
||||
pagingViewController.didMove(toParent: self)
|
||||
|
||||
closeButtonBackground.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(closeButtonBackground)
|
||||
NSLayoutConstraint.activate([
|
||||
closeButtonBackground.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor, constant: 12),
|
||||
closeButtonBackground.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor)
|
||||
])
|
||||
closeButtonBackgroundVisualEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
|
||||
closeButtonBackground.contentView.addSubview(closeButtonBackgroundVisualEffectView)
|
||||
|
||||
closeButton.translatesAutoresizingMaskIntoConstraints = false
|
||||
closeButtonBackgroundVisualEffectView.contentView.addSubview(closeButton)
|
||||
view.addSubview(topToolbar)
|
||||
NSLayoutConstraint.activate([
|
||||
closeButton.topAnchor.constraint(equalTo: closeButtonBackgroundVisualEffectView.topAnchor),
|
||||
closeButton.leadingAnchor.constraint(equalTo: closeButtonBackgroundVisualEffectView.leadingAnchor),
|
||||
closeButtonBackgroundVisualEffectView.trailingAnchor.constraint(equalTo: closeButton.trailingAnchor),
|
||||
closeButtonBackgroundVisualEffectView.bottomAnchor.constraint(equalTo: closeButton.bottomAnchor),
|
||||
closeButton.heightAnchor.constraint(equalToConstant: MediaPreviewViewController.closeButtonSize.height).priority(.defaultHigh),
|
||||
closeButton.widthAnchor.constraint(equalToConstant: MediaPreviewViewController.closeButtonSize.width).priority(.defaultHigh),
|
||||
topToolbar.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor, constant: 12),
|
||||
topToolbar.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor),
|
||||
topToolbar.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor),
|
||||
])
|
||||
|
||||
|
||||
topToolbar.addArrangedSubview(closeButton)
|
||||
NSLayoutConstraint.activate([
|
||||
closeButton.widthAnchor.constraint(equalToConstant: HUDButton.height).priority(.defaultHigh),
|
||||
])
|
||||
|
||||
topToolbar.addArrangedSubview(altButton)
|
||||
|
||||
viewModel.mediaPreviewImageViewControllerDelegate = self
|
||||
|
||||
pagingViewController.interPageSpacing = 10
|
||||
pagingViewController.delegate = self
|
||||
pagingViewController.dataSource = viewModel
|
||||
|
||||
closeButton.addTarget(self, action: #selector(MediaPreviewViewController.closeButtonPressed(_:)), for: .touchUpInside)
|
||||
|
||||
closeButton.button.addTarget(self, action: #selector(MediaPreviewViewController.closeButtonPressed(_:)), for: .touchUpInside)
|
||||
altButton.button.addTarget(self, action: #selector(MediaPreviewViewController.altButtonPressed(_:)), for: .touchUpInside)
|
||||
|
||||
// bind view model
|
||||
viewModel.$currentPage
|
||||
.receive(on: DispatchQueue.main)
|
||||
|
@ -126,20 +118,34 @@ extension MediaPreviewViewController {
|
|||
let attachment = previewContext.attachments[index]
|
||||
return attachment.kind == .video // not hide buttno for audio
|
||||
}()
|
||||
self.closeButtonBackground.isHidden = needsHideCloseButton
|
||||
self.closeButton.isHidden = needsHideCloseButton
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
.store(in: &disposeBag)
|
||||
|
||||
viewModel.$altText
|
||||
.receive(on: DispatchQueue.main)
|
||||
.sink { [weak self] altText in
|
||||
guard let self else { return }
|
||||
UIView.animate(withDuration: 0.3) {
|
||||
if altText == nil {
|
||||
self.altButton.alpha = 0
|
||||
} else {
|
||||
self.altButton.alpha = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
.store(in: &disposeBag)
|
||||
|
||||
viewModel.$showingChrome
|
||||
.receive(on: DispatchQueue.main)
|
||||
.removeDuplicates()
|
||||
.sink { [weak self] showingChrome in
|
||||
UIView.animate(withDuration: 0.3) {
|
||||
self?.setNeedsStatusBarAppearanceUpdate()
|
||||
self?.closeButtonBackground.alpha = showingChrome ? 1 : 0
|
||||
self?.topToolbar.alpha = showingChrome ? 1 : 0
|
||||
}
|
||||
}
|
||||
.store(in: &disposeBag)
|
||||
|
@ -165,15 +171,23 @@ extension MediaPreviewViewController {
|
|||
!viewModel.showingChrome
|
||||
}
|
||||
|
||||
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
|
||||
.all
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension MediaPreviewViewController {
|
||||
|
||||
@objc private func closeButtonPressed(_ sender: UIButton) {
|
||||
os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s", ((#file as NSString).lastPathComponent), #line, #function)
|
||||
dismiss(animated: true, completion: nil)
|
||||
}
|
||||
|
||||
|
||||
@objc private func altButtonPressed(_ sender: UIButton) {
|
||||
guard let alt = viewModel.altText else { return }
|
||||
|
||||
present(AltViewController(alt: alt, sourceView: sender), animated: true)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - MediaPreviewingViewController
|
||||
|
@ -270,19 +284,8 @@ extension MediaPreviewViewController: MediaPreviewImageViewControllerDelegate {
|
|||
) {
|
||||
switch action {
|
||||
case .savePhoto:
|
||||
let _savePublisher: AnyPublisher<Void, Error>? = {
|
||||
switch viewController.viewModel.item {
|
||||
case .remote(let previewContext):
|
||||
guard let assetURL = previewContext.assetURL else { return nil }
|
||||
return context.photoLibraryService.save(imageSource: .url(assetURL))
|
||||
case .local(let previewContext):
|
||||
return context.photoLibraryService.save(imageSource: .image(previewContext.image))
|
||||
}
|
||||
}()
|
||||
guard let savePublisher = _savePublisher else {
|
||||
return
|
||||
}
|
||||
savePublisher
|
||||
guard let assetURL = viewController.viewModel.item.assetURL else { return }
|
||||
context.photoLibraryService.save(imageSource: .url(assetURL))
|
||||
.sink { [weak self] completion in
|
||||
guard let self = self else { return }
|
||||
switch completion {
|
||||
|
@ -306,20 +309,9 @@ extension MediaPreviewViewController: MediaPreviewImageViewControllerDelegate {
|
|||
}
|
||||
.store(in: &context.disposeBag)
|
||||
case .copyPhoto:
|
||||
let _copyPublisher: AnyPublisher<Void, Error>? = {
|
||||
switch viewController.viewModel.item {
|
||||
case .remote(let previewContext):
|
||||
guard let assetURL = previewContext.assetURL else { return nil }
|
||||
return context.photoLibraryService.copy(imageSource: .url(assetURL))
|
||||
case .local(let previewContext):
|
||||
return context.photoLibraryService.copy(imageSource: .image(previewContext.image))
|
||||
}
|
||||
}()
|
||||
guard let copyPublisher = _copyPublisher else {
|
||||
return
|
||||
}
|
||||
guard let assetURL = viewController.viewModel.item.assetURL else { return }
|
||||
|
||||
copyPublisher
|
||||
context.photoLibraryService.copy(imageSource: .url(assetURL))
|
||||
.sink { completion in
|
||||
switch completion {
|
||||
case .failure(let error):
|
||||
|
@ -338,13 +330,8 @@ extension MediaPreviewViewController: MediaPreviewImageViewControllerDelegate {
|
|||
let activityViewController = UIActivityViewController(
|
||||
activityItems: {
|
||||
var activityItems: [Any] = []
|
||||
switch viewController.viewModel.item {
|
||||
case .remote(let previewContext):
|
||||
if let assetURL = previewContext.assetURL {
|
||||
activityItems.append(assetURL)
|
||||
}
|
||||
case .local(let previewContext):
|
||||
activityItems.append(previewContext.image)
|
||||
if let assetURL = viewController.viewModel.item.assetURL {
|
||||
activityItems.append(assetURL)
|
||||
}
|
||||
return activityItems
|
||||
}(),
|
||||
|
@ -359,12 +346,12 @@ extension MediaPreviewViewController: MediaPreviewImageViewControllerDelegate {
|
|||
|
||||
extension MediaPreviewViewController {
|
||||
|
||||
var closeKeyCommand: UIKeyCommand {
|
||||
func closeKeyCommand(input: String) -> UIKeyCommand {
|
||||
UIKeyCommand(
|
||||
title: L10n.Scene.Preview.Keyboard.closePreview,
|
||||
image: nil,
|
||||
action: #selector(MediaPreviewViewController.closePreviewKeyCommandHandler(_:)),
|
||||
input: "i",
|
||||
input: input,
|
||||
modifierFlags: [],
|
||||
propertyList: nil,
|
||||
alternates: [],
|
||||
|
@ -408,7 +395,8 @@ extension MediaPreviewViewController {
|
|||
|
||||
override var keyCommands: [UIKeyCommand] {
|
||||
return [
|
||||
closeKeyCommand,
|
||||
closeKeyCommand(input: UIKeyCommand.inputEscape),
|
||||
closeKeyCommand(input: "i"),
|
||||
showNextKeyCommand,
|
||||
showPreviousKeyCommand,
|
||||
]
|
||||
|
|
|
@ -27,9 +27,10 @@ final class MediaPreviewViewModel: NSObject {
|
|||
|
||||
@Published var currentPage: Int
|
||||
@Published var showingChrome = true
|
||||
|
||||
@Published var altText: String?
|
||||
|
||||
// output
|
||||
let viewControllers: [UIViewController]
|
||||
let viewControllers: [MediaPreviewPage]
|
||||
|
||||
private var disposeBag: Set<AnyCancellable> = []
|
||||
|
||||
|
@ -42,8 +43,11 @@ final class MediaPreviewViewModel: NSObject {
|
|||
self.item = item
|
||||
var currentPage = 0
|
||||
var viewControllers: [MediaPreviewPage] = []
|
||||
var getAltText = { (page: Int) -> String? in nil }
|
||||
switch item {
|
||||
case .attachment(let previewContext):
|
||||
getAltText = { previewContext.attachments[$0].altDescription }
|
||||
|
||||
currentPage = previewContext.initialIndex
|
||||
for (i, attachment) in previewContext.attachments.enumerated() {
|
||||
switch attachment.kind {
|
||||
|
@ -51,11 +55,11 @@ final class MediaPreviewViewModel: NSObject {
|
|||
let viewController = MediaPreviewImageViewController()
|
||||
let viewModel = MediaPreviewImageViewModel(
|
||||
context: context,
|
||||
item: .remote(.init(
|
||||
item: .init(
|
||||
assetURL: attachment.assetURL.flatMap { URL(string: $0) },
|
||||
thumbnail: previewContext.thumbnail(at: i),
|
||||
altText: attachment.altDescription
|
||||
))
|
||||
)
|
||||
)
|
||||
viewController.viewModel = viewModel
|
||||
viewControllers.append(viewController)
|
||||
|
@ -65,7 +69,8 @@ final class MediaPreviewViewModel: NSObject {
|
|||
context: context,
|
||||
item: .gif(.init(
|
||||
assetURL: attachment.assetURL.flatMap { URL(string: $0) },
|
||||
previewURL: attachment.previewURL.flatMap { URL(string: $0) }
|
||||
previewURL: attachment.previewURL.flatMap { URL(string: $0) },
|
||||
altText: attachment.altDescription
|
||||
))
|
||||
)
|
||||
viewController.viewModel = viewModel
|
||||
|
@ -76,7 +81,8 @@ final class MediaPreviewViewModel: NSObject {
|
|||
context: context,
|
||||
item: .video(.init(
|
||||
assetURL: attachment.assetURL.flatMap { URL(string: $0) },
|
||||
previewURL: attachment.previewURL.flatMap { URL(string: $0) }
|
||||
previewURL: attachment.previewURL.flatMap { URL(string: $0) },
|
||||
altText: attachment.altDescription
|
||||
))
|
||||
)
|
||||
viewController.viewModel = viewModel
|
||||
|
@ -87,11 +93,11 @@ final class MediaPreviewViewModel: NSObject {
|
|||
let viewController = MediaPreviewImageViewController()
|
||||
let viewModel = MediaPreviewImageViewModel(
|
||||
context: context,
|
||||
item: .remote(.init(
|
||||
item: .init(
|
||||
assetURL: previewContext.assetURL.flatMap { URL(string: $0) },
|
||||
thumbnail: previewContext.thumbnail,
|
||||
altText: nil
|
||||
))
|
||||
)
|
||||
)
|
||||
viewController.viewModel = viewModel
|
||||
viewControllers.append(viewController)
|
||||
|
@ -99,11 +105,11 @@ final class MediaPreviewViewModel: NSObject {
|
|||
let viewController = MediaPreviewImageViewController()
|
||||
let viewModel = MediaPreviewImageViewModel(
|
||||
context: context,
|
||||
item: .remote(.init(
|
||||
item: .init(
|
||||
assetURL: previewContext.assetURL.flatMap { URL(string: $0) },
|
||||
thumbnail: previewContext.thumbnail,
|
||||
altText: nil
|
||||
))
|
||||
)
|
||||
)
|
||||
viewController.viewModel = viewModel
|
||||
viewControllers.append(viewController)
|
||||
|
@ -114,6 +120,10 @@ final class MediaPreviewViewModel: NSObject {
|
|||
self.transitionItem = transitionItem
|
||||
super.init()
|
||||
|
||||
self.$currentPage
|
||||
.map(getAltText)
|
||||
.assign(to: &$altText)
|
||||
|
||||
for viewController in viewControllers {
|
||||
self.$showingChrome
|
||||
.sink { [weak viewController] showingChrome in
|
||||
|
|
|
@ -130,12 +130,14 @@ extension MediaPreviewVideoViewModel {
|
|||
struct RemoteVideoContext {
|
||||
let assetURL: URL?
|
||||
let previewURL: URL?
|
||||
let altText: String?
|
||||
// let thumbnail: UIImage?
|
||||
}
|
||||
|
||||
struct RemoteGIFContext {
|
||||
let assetURL: URL?
|
||||
let previewURL: URL?
|
||||
let altText: String?
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,86 +0,0 @@
|
|||
//
|
||||
// NotificationAvatarButton.swift
|
||||
// Mastodon
|
||||
//
|
||||
// Created by MainasuK Cirno on 2021-7-21.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import FLAnimatedImage
|
||||
import MastodonUI
|
||||
|
||||
final class NotificationAvatarButton: AvatarButton {
|
||||
|
||||
// Size fixed
|
||||
static let containerSize = CGSize(width: 35, height: 35)
|
||||
static let badgeImageViewSize = CGSize(width: 24, height: 24)
|
||||
static let badgeImageMaskSize = CGSize(width: badgeImageViewSize.width + 4, height: badgeImageViewSize.height + 4)
|
||||
|
||||
let badgeImageView: UIImageView = {
|
||||
let imageView = RoundedImageView()
|
||||
imageView.contentMode = .center
|
||||
imageView.isOpaque = true
|
||||
imageView.layer.shouldRasterize = true
|
||||
imageView.layer.rasterizationScale = UIScreen.main.scale
|
||||
return imageView
|
||||
}()
|
||||
|
||||
override func _init() {
|
||||
super._init()
|
||||
|
||||
size = CGSize(width: 35, height: 35)
|
||||
|
||||
let path: CGPath = {
|
||||
let path = CGMutablePath()
|
||||
path.addRect(CGRect(origin: .zero, size: NotificationAvatarButton.containerSize))
|
||||
let x: CGFloat = {
|
||||
if UIApplication.shared.userInterfaceLayoutDirection == .rightToLeft {
|
||||
return -0.5 * NotificationAvatarButton.badgeImageMaskSize.width
|
||||
} else {
|
||||
return NotificationAvatarButton.containerSize.width - 0.5 * NotificationAvatarButton.badgeImageMaskSize.width
|
||||
}
|
||||
}()
|
||||
path.addPath(UIBezierPath(
|
||||
ovalIn: CGRect(
|
||||
x: x,
|
||||
y: NotificationAvatarButton.containerSize.height - 0.5 * NotificationAvatarButton.badgeImageMaskSize.width,
|
||||
width: NotificationAvatarButton.badgeImageMaskSize.width,
|
||||
height: NotificationAvatarButton.badgeImageMaskSize.height
|
||||
)
|
||||
).cgPath)
|
||||
return path
|
||||
}()
|
||||
|
||||
let maskShapeLayer = CAShapeLayer()
|
||||
maskShapeLayer.backgroundColor = UIColor.black.cgColor
|
||||
maskShapeLayer.fillRule = .evenOdd
|
||||
maskShapeLayer.path = path
|
||||
avatarImageView.layer.mask = maskShapeLayer
|
||||
|
||||
badgeImageView.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(badgeImageView)
|
||||
NSLayoutConstraint.activate([
|
||||
badgeImageView.centerXAnchor.constraint(equalTo: trailingAnchor),
|
||||
badgeImageView.centerYAnchor.constraint(equalTo: bottomAnchor),
|
||||
badgeImageView.widthAnchor.constraint(equalToConstant: NotificationAvatarButton.badgeImageViewSize.width).priority(.required - 1),
|
||||
badgeImageView.heightAnchor.constraint(equalToConstant: NotificationAvatarButton.badgeImageViewSize.height).priority(.required - 1),
|
||||
])
|
||||
}
|
||||
|
||||
override func updateAppearance() {
|
||||
super.updateAppearance()
|
||||
badgeImageView.alpha = primaryActionState.contains(.highlighted) ? 0.6 : 1.0
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
final class RoundedImageView: UIImageView {
|
||||
|
||||
override func layoutSubviews() {
|
||||
super.layoutSubviews()
|
||||
|
||||
layer.masksToBounds = true
|
||||
layer.cornerRadius = bounds.width / 2
|
||||
layer.cornerCurve = .circular
|
||||
}
|
||||
}
|
|
@ -111,17 +111,13 @@ extension NotificationTimelineViewModel {
|
|||
snapshot: NSDiffableDataSourceSnapshot<NotificationSection, NotificationItem>,
|
||||
animatingDifferences: Bool
|
||||
) async {
|
||||
diffableDataSource?.apply(snapshot, animatingDifferences: animatingDifferences)
|
||||
await diffableDataSource?.apply(snapshot, animatingDifferences: animatingDifferences)
|
||||
}
|
||||
|
||||
@MainActor func updateSnapshotUsingReloadData(
|
||||
snapshot: NSDiffableDataSourceSnapshot<NotificationSection, NotificationItem>
|
||||
) async {
|
||||
if #available(iOS 15.0, *) {
|
||||
await self.diffableDataSource?.applySnapshotUsingReloadData(snapshot)
|
||||
} else {
|
||||
diffableDataSource?.applySnapshot(snapshot, animated: false, completion: nil)
|
||||
}
|
||||
await self.diffableDataSource?.applySnapshotUsingReloadData(snapshot)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -271,7 +271,7 @@ extension MastodonLoginViewController: MastodonLoginViewModelDelegate {
|
|||
snapshot.appendSections([MastodonLoginViewSection.servers])
|
||||
snapshot.appendItems(viewModel.filteredServers)
|
||||
|
||||
dataSource?.applySnapshot(snapshot, animated: false)
|
||||
dataSource?.apply(snapshot, animatingDifferences: false)
|
||||
|
||||
OperationQueue.main.addOperation {
|
||||
let numberOfResults = viewModel.filteredServers.count
|
||||
|
|
|
@ -43,11 +43,7 @@ final class MastodonPickServerViewController: UIViewController, NeedsDependency
|
|||
tableView.separatorStyle = .none
|
||||
tableView.backgroundColor = .clear
|
||||
tableView.keyboardDismissMode = .onDrag
|
||||
if #available(iOS 15.0, *) {
|
||||
tableView.sectionHeaderTopPadding = .leastNonzeroMagnitude
|
||||
} else {
|
||||
// Fallback on earlier versions
|
||||
}
|
||||
tableView.sectionHeaderTopPadding = .leastNonzeroMagnitude
|
||||
return tableView
|
||||
}()
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ extension MastodonPickServerViewModel {
|
|||
sectionHeaderSnapshot.appendSections([.main])
|
||||
sectionHeaderSnapshot.appendItems(categoryPickerItems, toSection: .main)
|
||||
serverSectionHeaderView.delegate = pickServerServerSectionTableHeaderViewDelegate
|
||||
serverSectionHeaderView.diffableDataSource?.applySnapshot(sectionHeaderSnapshot, animated: false) { [weak self] in
|
||||
serverSectionHeaderView.diffableDataSource?.apply(sectionHeaderSnapshot, animatingDifferences: false) { [weak self] in
|
||||
guard let self = self else { return }
|
||||
guard let indexPath = self.serverSectionHeaderView.diffableDataSource?.indexPath(for: .all) else { return }
|
||||
self.serverSectionHeaderView.collectionView.selectItem(at: indexPath, animated: false, scrollPosition: .centeredHorizontally)
|
||||
|
|
|
@ -55,19 +55,10 @@ struct MastodonRegisterView: View {
|
|||
// Delete
|
||||
if viewModel.avatarImage != nil {
|
||||
Divider()
|
||||
if #available(iOS 15.0, *) {
|
||||
Button(role: .destructive) {
|
||||
viewModel.avatarMediaMenuActionPublisher.send(.delete)
|
||||
} label: {
|
||||
Label(L10n.Scene.Register.Input.Avatar.delete, systemImage: "delete.left")
|
||||
}
|
||||
} else {
|
||||
// Fallback on earlier ve rsions
|
||||
Button {
|
||||
viewModel.avatarMediaMenuActionPublisher.send(.delete)
|
||||
} label: {
|
||||
Label(L10n.Scene.Register.Input.Avatar.delete, systemImage: "delete.left")
|
||||
}
|
||||
Button(role: .destructive) {
|
||||
viewModel.avatarMediaMenuActionPublisher.send(.delete)
|
||||
} label: {
|
||||
Label(L10n.Scene.Register.Input.Avatar.delete, systemImage: "delete.left")
|
||||
}
|
||||
}
|
||||
} label: {
|
||||
|
|
|
@ -37,11 +37,7 @@ final class MastodonServerRulesViewController: UIViewController, NeedsDependency
|
|||
tableView.separatorStyle = .none
|
||||
tableView.backgroundColor = .clear
|
||||
tableView.keyboardDismissMode = .onDrag
|
||||
if #available(iOS 15.0, *) {
|
||||
tableView.sectionHeaderTopPadding = 0
|
||||
} else {
|
||||
// Fallback on earlier versions
|
||||
}
|
||||
tableView.sectionHeaderTopPadding = 0
|
||||
return tableView
|
||||
}()
|
||||
|
||||
|
|
|
@ -21,6 +21,6 @@ extension MastodonServerRulesViewModel {
|
|||
return ServerRuleItem.rule(ruleContext)
|
||||
}
|
||||
snapshot.appendItems(ruleItems, toSection: .rules)
|
||||
diffableDataSource?.applySnapshot(snapshot, animated: false, completion: nil)
|
||||
diffableDataSource?.apply(snapshot, animatingDifferences: false)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,9 +25,8 @@ extension OnboardingNavigationController {
|
|||
updateBorderViewDisplay()
|
||||
}
|
||||
|
||||
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
|
||||
super.traitCollectionDidChange(previousTraitCollection)
|
||||
|
||||
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
|
||||
.portraitOnPhone
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -66,11 +66,7 @@ extension OnboardingViewControllerAppearance {
|
|||
navigationItem.standardAppearance = barAppearance
|
||||
navigationItem.compactAppearance = barAppearance
|
||||
navigationItem.scrollEdgeAppearance = barAppearance
|
||||
if #available(iOS 15.0, *) {
|
||||
navigationItem.compactScrollEdgeAppearance = barAppearance
|
||||
} else {
|
||||
// Fallback on earlier versions
|
||||
}
|
||||
navigationItem.compactScrollEdgeAppearance = barAppearance
|
||||
}
|
||||
|
||||
func setupNavigationBarBackgroundView() {
|
||||
|
|
|
@ -336,11 +336,7 @@ extension WelcomeViewController: OnboardingViewControllerAppearance {
|
|||
navigationItem.standardAppearance = barAppearance
|
||||
navigationItem.compactAppearance = barAppearance
|
||||
navigationItem.scrollEdgeAppearance = barAppearance
|
||||
if #available(iOS 15.0, *) {
|
||||
navigationItem.compactScrollEdgeAppearance = barAppearance
|
||||
} else {
|
||||
// Fallback on earlier versions
|
||||
}
|
||||
navigationItem.compactScrollEdgeAppearance = barAppearance
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ extension BookmarkViewModel {
|
|||
}
|
||||
}
|
||||
|
||||
diffableDataSource.applySnapshot(snapshot, animated: false)
|
||||
diffableDataSource.apply(snapshot, animatingDifferences: false)
|
||||
}
|
||||
.store(in: &disposeBag)
|
||||
}
|
||||
|
|
|
@ -59,7 +59,7 @@ extension FavoriteViewModel {
|
|||
}
|
||||
}
|
||||
|
||||
diffableDataSource.applySnapshot(snapshot, animated: false)
|
||||
diffableDataSource.apply(snapshot, animatingDifferences: false)
|
||||
}
|
||||
.store(in: &disposeBag)
|
||||
}
|
||||
|
|
|
@ -47,7 +47,7 @@ final class FollowedTagsViewModel: NSObject {
|
|||
var snapshot = NSDiffableDataSourceSnapshot<Section, Item>()
|
||||
snapshot.appendSections([.main])
|
||||
snapshot.appendItems(records.map {.hashtag($0) })
|
||||
self.diffableDataSource?.applySnapshot(snapshot, animated: true)
|
||||
self.diffableDataSource?.apply(snapshot, animatingDifferences: true)
|
||||
}
|
||||
.store(in: &disposeBag)
|
||||
}
|
||||
|
|
|
@ -27,12 +27,7 @@ extension FollowerListViewModel {
|
|||
var snapshot = NSDiffableDataSourceSnapshot<UserSection, UserItem>()
|
||||
snapshot.appendSections([.main])
|
||||
snapshot.appendItems([.bottomLoader], toSection: .main)
|
||||
if #available(iOS 15.0, *) {
|
||||
diffableDataSource?.applySnapshotUsingReloadData(snapshot, completion: nil)
|
||||
} else {
|
||||
// Fallback on earlier versions
|
||||
diffableDataSource?.apply(snapshot, animatingDifferences: false)
|
||||
}
|
||||
diffableDataSource?.applySnapshotUsingReloadData(snapshot, completion: nil)
|
||||
|
||||
userFetchedResultsController.$records
|
||||
.receive(on: DispatchQueue.main)
|
||||
|
|
|
@ -28,13 +28,8 @@ extension FollowingListViewModel {
|
|||
var snapshot = NSDiffableDataSourceSnapshot<UserSection, UserItem>()
|
||||
snapshot.appendSections([.main])
|
||||
snapshot.appendItems([.bottomLoader], toSection: .main)
|
||||
if #available(iOS 15.0, *) {
|
||||
diffableDataSource?.applySnapshotUsingReloadData(snapshot, completion: nil)
|
||||
} else {
|
||||
// Fallback on earlier versions
|
||||
diffableDataSource?.apply(snapshot, animatingDifferences: false)
|
||||
}
|
||||
|
||||
diffableDataSource?.applySnapshotUsingReloadData(snapshot)
|
||||
|
||||
userFetchedResultsController.$records
|
||||
.receive(on: DispatchQueue.main)
|
||||
.sink { [weak self] records in
|
||||
|
|
|
@ -150,7 +150,9 @@ extension ProfileHeaderView.ViewModel {
|
|||
// username
|
||||
$acct
|
||||
.map { acct in acct.flatMap { "@" + $0 } ?? " " }
|
||||
.assign(to: \.text, on: view.usernameLabel)
|
||||
.sink(receiveValue: { acct in
|
||||
view.usernameButton.setTitle(acct, for: .normal)
|
||||
})
|
||||
.store(in: &disposeBag)
|
||||
// bio
|
||||
Publishers.CombineLatest4(
|
||||
|
|
|
@ -28,7 +28,6 @@ final class ProfileHeaderView: UIView {
|
|||
|
||||
static let avatarImageViewSize = CGSize(width: 98, height: 98)
|
||||
static let avatarImageViewCornerRadius: CGFloat = 25
|
||||
static let avatarImageViewBorderColor = UIColor.white
|
||||
static let avatarImageViewBorderWidth: CGFloat = 2
|
||||
static let friendshipActionButtonSize = CGSize(width: 108, height: 34)
|
||||
static let bannerImageViewPlaceholderColor = UIColor.systemGray
|
||||
|
@ -90,7 +89,6 @@ final class ProfileHeaderView: UIView {
|
|||
view.layer.masksToBounds = true
|
||||
view.layer.cornerRadius = ProfileHeaderView.avatarImageViewCornerRadius
|
||||
view.layer.cornerCurve = .continuous
|
||||
view.layer.borderColor = ProfileHeaderView.avatarImageViewBorderColor.cgColor
|
||||
view.layer.borderWidth = ProfileHeaderView.avatarImageViewBorderWidth
|
||||
return view
|
||||
}()
|
||||
|
@ -174,15 +172,26 @@ final class ProfileHeaderView: UIView {
|
|||
textField.autocapitalizationType = .none
|
||||
return textField
|
||||
}()
|
||||
|
||||
let usernameLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.font = UIFontMetrics(forTextStyle: .callout).scaledFont(for: .systemFont(ofSize: 16, weight: .regular))
|
||||
label.adjustsFontSizeToFitWidth = true
|
||||
label.minimumScaleFactor = 0.5
|
||||
label.textColor = Asset.Colors.Label.secondary.color
|
||||
label.text = "@alice"
|
||||
return label
|
||||
|
||||
private lazy var usernameButtonMenu: UIMenu = {
|
||||
UIMenu(children: [
|
||||
UIAction(title: L10n.Common.Controls.Actions.copy, image: UIImage(systemName: "doc.on.doc"), handler: { [weak self] _ in
|
||||
UIPasteboard.general.string = self?.usernameButton.title(for: .normal)
|
||||
})
|
||||
])
|
||||
}()
|
||||
|
||||
lazy var usernameButton: UIButton = {
|
||||
let button = UIButton()
|
||||
button.setTitle("@alice", for: .normal)
|
||||
button.titleLabel?.font = UIFontMetrics(forTextStyle: .callout).scaledFont(for: .systemFont(ofSize: 16, weight: .regular))
|
||||
button.titleLabel?.adjustsFontSizeToFitWidth = true
|
||||
button.titleLabel?.minimumScaleFactor = 0.5
|
||||
button.setTitleColor(Asset.Colors.Label.secondary.color, for: .normal)
|
||||
button.menu = usernameButtonMenu
|
||||
button.showsMenuAsPrimaryAction = true
|
||||
button.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
|
||||
return button
|
||||
}()
|
||||
|
||||
let statusDashboardView = ProfileStatusDashboardView()
|
||||
|
@ -242,12 +251,13 @@ final class ProfileHeaderView: UIView {
|
|||
|
||||
extension ProfileHeaderView {
|
||||
private func _init() {
|
||||
backgroundColor = ThemeService.shared.currentTheme.value.systemBackgroundColor
|
||||
ThemeService.shared.currentTheme
|
||||
let currentTheme = ThemeService.shared.currentTheme
|
||||
setColors(from: currentTheme.value)
|
||||
|
||||
currentTheme
|
||||
.receive(on: DispatchQueue.main)
|
||||
.sink { [weak self] theme in
|
||||
guard let self = self else { return }
|
||||
self.backgroundColor = theme.systemBackgroundColor
|
||||
self?.setColors(from: theme)
|
||||
}
|
||||
.store(in: &_disposeBag)
|
||||
|
||||
|
@ -322,10 +332,10 @@ extension ProfileHeaderView {
|
|||
avatarButton.translatesAutoresizingMaskIntoConstraints = false
|
||||
avatarImageViewBackgroundView.addSubview(avatarButton)
|
||||
NSLayoutConstraint.activate([
|
||||
avatarButton.topAnchor.constraint(equalTo: avatarImageViewBackgroundView.topAnchor, constant: 0.5 * ProfileHeaderView.avatarImageViewBorderWidth),
|
||||
avatarButton.leadingAnchor.constraint(equalTo: avatarImageViewBackgroundView.leadingAnchor, constant: 0.5 * ProfileHeaderView.avatarImageViewBorderWidth),
|
||||
avatarImageViewBackgroundView.trailingAnchor.constraint(equalTo: avatarButton.trailingAnchor, constant: 0.5 * ProfileHeaderView.avatarImageViewBorderWidth),
|
||||
avatarImageViewBackgroundView.bottomAnchor.constraint(equalTo: avatarButton.bottomAnchor, constant: 0.5 * ProfileHeaderView.avatarImageViewBorderWidth),
|
||||
avatarButton.topAnchor.constraint(equalTo: avatarImageViewBackgroundView.topAnchor, constant: ProfileHeaderView.avatarImageViewBorderWidth),
|
||||
avatarButton.leadingAnchor.constraint(equalTo: avatarImageViewBackgroundView.leadingAnchor, constant: ProfileHeaderView.avatarImageViewBorderWidth),
|
||||
avatarImageViewBackgroundView.trailingAnchor.constraint(equalTo: avatarButton.trailingAnchor, constant: ProfileHeaderView.avatarImageViewBorderWidth),
|
||||
avatarImageViewBackgroundView.bottomAnchor.constraint(equalTo: avatarButton.bottomAnchor, constant: ProfileHeaderView.avatarImageViewBorderWidth),
|
||||
avatarButton.widthAnchor.constraint(equalToConstant: ProfileHeaderView.avatarImageViewSize.width).priority(.required - 1),
|
||||
avatarButton.heightAnchor.constraint(equalToConstant: ProfileHeaderView.avatarImageViewSize.height).priority(.required - 1),
|
||||
])
|
||||
|
@ -418,7 +428,11 @@ extension ProfileHeaderView {
|
|||
// nameMetaText.textView.setContentHuggingPriority(, for: <#T##NSLayoutConstraint.Axis#>)
|
||||
|
||||
nameContainerStackView.addArrangedSubview(displayNameStackView)
|
||||
nameContainerStackView.addArrangedSubview(usernameLabel)
|
||||
nameContainerStackView.addArrangedSubview(usernameButton)
|
||||
|
||||
NSLayoutConstraint.activate([
|
||||
usernameButton.heightAnchor.constraint(greaterThanOrEqualToConstant: 20)
|
||||
])
|
||||
|
||||
authorContainer.addArrangedSubview(nameContainerStackView)
|
||||
authorContainer.addArrangedSubview(UIView())
|
||||
|
@ -453,6 +467,12 @@ extension ProfileHeaderView {
|
|||
|
||||
updateLayoutMargins()
|
||||
}
|
||||
|
||||
private func setColors(from theme: Theme) {
|
||||
backgroundColor = theme.systemBackgroundColor
|
||||
avatarButton.backgroundColor = theme.secondarySystemBackgroundColor
|
||||
avatarImageViewBackgroundView.layer.borderColor = theme.systemBackgroundColor.cgColor
|
||||
}
|
||||
|
||||
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
|
||||
super.traitCollectionDidChange(previousTraitCollection)
|
||||
|
|
|
@ -28,6 +28,7 @@ final class RemoteProfileViewModel: ProfileViewModel {
|
|||
)
|
||||
}
|
||||
.retry(3)
|
||||
.receive(on: DispatchQueue.main)
|
||||
.sink { completion in
|
||||
switch completion {
|
||||
case .failure(let error):
|
||||
|
@ -89,4 +90,41 @@ final class RemoteProfileViewModel: ProfileViewModel {
|
|||
} // end Task
|
||||
}
|
||||
|
||||
init(context: AppContext, authContext: AuthContext, acct: String) {
|
||||
super.init(context: context, authContext: authContext, optionalMastodonUser: nil)
|
||||
|
||||
let domain = authContext.mastodonAuthenticationBox.domain
|
||||
let authorization = authContext.mastodonAuthenticationBox.userAuthorization
|
||||
Just(acct)
|
||||
.asyncMap { acct in
|
||||
try await context.apiService.accountSearch(
|
||||
domain: domain,
|
||||
query: .init(acct: acct),
|
||||
authorization: authorization
|
||||
)
|
||||
}
|
||||
.retry(3)
|
||||
.receive(on: DispatchQueue.main)
|
||||
.sink { completion in
|
||||
switch completion {
|
||||
case .failure(let error):
|
||||
// TODO: handle error
|
||||
os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s: remote user %s fetch failed: %s", ((#file as NSString).lastPathComponent), #line, #function, acct, error.localizedDescription)
|
||||
case .finished:
|
||||
os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s: remote user %s fetched", ((#file as NSString).lastPathComponent), #line, #function, acct)
|
||||
}
|
||||
} receiveValue: { [weak self] response in
|
||||
guard let self = self else { return }
|
||||
let managedObjectContext = context.managedObjectContext
|
||||
let request = MastodonUser.sortedFetchRequest
|
||||
request.fetchLimit = 1
|
||||
request.predicate = MastodonUser.predicate(domain: domain, id: response.value.id)
|
||||
guard let mastodonUser = managedObjectContext.safeFetch(request).first else {
|
||||
assertionFailure()
|
||||
return
|
||||
}
|
||||
self.user = mastodonUser
|
||||
}
|
||||
.store(in: &disposeBag)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -83,7 +83,7 @@ extension UserTimelineViewModel {
|
|||
}
|
||||
}
|
||||
|
||||
diffableDataSource.applySnapshot(snapshot, animated: false)
|
||||
diffableDataSource.apply(snapshot, animatingDifferences: false)
|
||||
}
|
||||
.store(in: &disposeBag)
|
||||
}
|
||||
|
|
|
@ -28,13 +28,8 @@ extension UserListViewModel {
|
|||
var snapshot = NSDiffableDataSourceSnapshot<UserSection, UserItem>()
|
||||
snapshot.appendSections([.main])
|
||||
snapshot.appendItems([.bottomLoader], toSection: .main)
|
||||
if #available(iOS 15.0, *) {
|
||||
diffableDataSource?.applySnapshotUsingReloadData(snapshot, completion: nil)
|
||||
} else {
|
||||
// Fallback on earlier versions
|
||||
diffableDataSource?.apply(snapshot, animatingDifferences: false)
|
||||
}
|
||||
|
||||
diffableDataSource?.applySnapshotUsingReloadData(snapshot)
|
||||
|
||||
// trigger initial loading
|
||||
stateMachine.enter(UserListViewModel.State.Reloading.self)
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue