From 8cc002a8c810e32384927d7867f55baf36ec75c2 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Mon, 2 Oct 2023 19:53:38 +0200 Subject: [PATCH 01/53] first few words --- Localization/de_DE.lproj/Localizable.strings | 374 ++++++++++++++++++ .../Resources/de_DE.lproj/Localizable.strings | 11 + 2 files changed, 385 insertions(+) create mode 100644 Localization/de_DE.lproj/Localizable.strings create mode 100644 PixelfedKit/Sources/PixelfedKit/Resources/de_DE.lproj/Localizable.strings diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings new file mode 100644 index 0000000..99ada3d --- /dev/null +++ b/Localization/de_DE.lproj/Localizable.strings @@ -0,0 +1,374 @@ +// MARK: Common strings. +"global.title.contentWarning" = "Delikater Inhalt"; +"global.title.seePost" = "Beitrag ansehen"; +"global.title.refresh" = "Aktualisieren"; +"global.title.momentsAgo" = "gerade eben"; +"global.title.success" = "Erfolgreich"; +"global.title.photoSaved" = "Foto wurde gespeichert."; +"global.title.ok" = "OK"; +"global.title.showMore" = "Mehr anzeigen"; +"global.title.showLess" = "Weniger anzeigen"; +"global.title.close" = "Schließen"; +"global.error.refreshingCredentialsTitle" = "Zugangsdaten konnten nicht erneuert werden."; +"global.error.refreshingCredentialsSubtitle" = "Bitte erneut in Pixelfed einloggen."; + +// MARK: Global errors. +"global.error.unexpected" = "Überraschender Fehler."; +"global.error.statusesNotRetrieved" = "Beiträge nicht geladen."; +"global.error.errorDuringDownloadStatuses" = "Fehler beim Laden der Beiträge vom Server."; +"global.error.errorDuringDownloadHashtag" = "Fehler beim Laden des Tags vom Server."; +"global.error.hashtagNotExists" = "Hashtag existiert nicht."; +"global.error.errorDuringImageDownload" = "Bild kann nicht geladen werden."; +"global.error.canceledImageDownload" = "Laden der Bildes abgebrochen."; +"global.error.errorDuringDataLoad" = "Laden von Daten fehlgeschlagen."; +"global.error.errorDuringUserRead" = "Nutzer kann nicht geladen werden."; +"global.error.badUrlServer" = "Ungültige Server-URL."; +"global.error.accessTokenNotFound" = "Zugangstoken nicht gefunden."; +"global.error.errorDuringDownloadStatus" = "Fehler beim Laden vom Server."; +"global.error.errorDuringPurchaseVerification" = "Verifikation des Einkaufs fehlgeschlagen."; + +// MARK: Main view (main navigation bar). +"mainview.tab.homeTimeline" = "Zuhause"; +"mainview.tab.localTimeline" = "Lokal"; +"mainview.tab.federatedTimeline" = "Föderiert"; +"mainview.tab.trendingPhotos" = "Fotos"; +"mainview.tab.trendingTags" = "Tags"; +"mainview.tab.trendingAccounts" = "Accounts"; +"mainview.tab.userProfile" = "Profil"; +"mainview.tab.notifications" = "Benachrichtigungen"; +"mainview.tab.search" = "Suche"; +"mainview.tab.trending" = "Im Trend"; + +// MARK: Main view (leading navigation bar). +"mainview.menu.settings" = "Einstellungen"; + +// MARK: Main view (error notifications). +"mainview.error.switchAccounts" = "Konnte Accounts nicht wechseln."; + +// MARK: Home timeline. +"home.title.allCaughtUp" = "Alles gesehen"; +"home.title.noPhotos" = "Hier sind leider keine Bilder."; + +// MARK: Statuses timeline (local/federated/favourite/bookmarks etc.). +"statuses.navigationBar.localTimeline" = "Lokal"; +"statuses.navigationBar.federatedTimeline" = "Föderiert"; +"statuses.navigationBar.favourites" = "Favoriten"; +"statuses.navigationBar.bookmarks" = "Lesezeichen"; +"statuses.title.noPhotos" = "Hier sind leider keine Bilder."; +"statuses.title.tagFollowed" = "Du folgst dem Tag."; +"statuses.title.tagUnfollowed" = "Du folgst dem Tag nicht mehr."; +"statuses.error.loadingStatusesFailed" = "Laden der Beiträge fehlgeschlagen."; +"statuses.error.tagFollowFailed" = "Das Folgen des Tags ist fehlgeschlagen."; +"statuses.error.tagUnfollowFailed" = "Das nicht mehr Folgen des Tags ist fehlgeschlagen."; + +// Mark: Search view. +"search.navigationBar.title" = "Suche"; +"search.title.placeholder" = "Suche..."; +"search.title.usersWith" = "Nutzer mit %@"; +"search.title.goToUser" = "Gehe zu Nutzer %@"; +"search.title.hashtagWith" = "Hashtags mit %@"; +"search.title.goToHashtag" = "Gehe zu Hashtag %@"; + +// Mark: Trending statuses. +"trendingStatuses.navigationBar.title" = "Fotos"; +"trendingStatuses.title.daily" = "Täglich"; +"trendingStatuses.title.monthly" = "Monatlich"; +"trendingStatuses.title.yearly" = "Jährlich"; +"trendingStatuses.error.loadingStatusesFailed" = "Laden der Beiträge fehlgeschlagen."; +"trendingStatuses.title.noPhotos" = "Hier sind leider keine Bilder."; + +// Mark: Trending tags. +"tags.navigationBar.trendingTitle" = "Tags"; +"tags.navigationBar.searchTitle" = "Tags"; +"tags.navigationBar.followedTitle" = "Tags denen Du folgst"; +"tags.title.noTags" = "Hier sind leider keine Tags."; +"tags.title.amountOfPosts" = "%d Beiträge"; +"tags.error.loadingTagsFailed" = "Laden der Tags fehlgeschlagen."; + +// Mark: Trending accounts. +"trendingAccounts.navigationBar.title" = "Konten"; +"trendingAccounts.title.noAccounts" = "Hier ist leider niemand."; +"trendingAccounts.error.loadingAccountsFailed" = "Laden der Konten fehlgeschlagen."; + +// Mark: User profile view. +"userProfile.title.openInBrowser" = "Im Browser öffnen"; +"userProfile.title.share" = "Teilen"; +"userProfile.title.unmute" = "Stummschaltung aufheben"; +"userProfile.title.mute" = "Stummschalten"; +"userProfile.title.unblock" = "Blockierung aufheben"; +"userProfile.title.block" = "Blockieren"; +"userProfile.title.favourites" = "Favoriten"; +"userProfile.title.bookmarks" = "Lesezeichen"; +"userProfile.title.followedTags" = "Tags denen Du folgst"; +"userProfile.title.posts" = "Beiträge"; +"userProfile.title.followers" = "Leute die Dir folgen"; +"userProfile.title.following" = "Leute denen Du folgst"; +"userProfile.title.joined" = "%@ beigetreten"; +"userProfile.title.unfollow" = "Nicht mehr folgen"; +"userProfile.title.follow" = "Folgen"; +"userProfile.title.instance" = "Instanzinformation"; +"userProfile.title.blocks" = "Blockierte Konten"; +"userProfile.title.mutes" = "Stummgeschaltete Konten"; +"userProfile.title.muted" = "Konto stummgeschaltet"; +"userProfile.title.unmuted" = "Stummschaltung des Kontos aufgehoben"; +"userProfile.title.blocked" = "Konto blockiert"; +"userProfile.title.unblocked" = "Konto nicht mehr blockiert"; +"userProfile.title.report" = "Melden"; +"userProfile.title.followsYou" = "Folgt Dir"; +"userProfile.title.requestFollow" = "Folgen anfragen"; +"userProfile.title.cancelRequestFollow" = "Anfrage abbrechen"; +"userProfile.title.followRequests" = "Anfragen"; +"userProfile.title.privateProfileTitle" = "Dieses Profil ist privat."; +"userProfile.title.privateProfileSubtitle" = "Nur freigeschaltete folgende können Beiträge sehen."; +"userProfile.error.notExists" = "Konto existiert nicht."; +"userProfile.error.loadingAccountFailed" = "Fehler beim Laden vom Server."; +"userProfile.error.muting" = "(Nicht mehr) Stummschalten fehlgeschlagen."; +"userProfile.error.block" = "(Nicht mehr) Blockieren fehlgeschlagen."; +"userProfile.error.relationship" = "Beziehungsaktion fehlgeschlagen."; +"userProfile.title.edit" = "Bearbeiten"; +"userProfile.title.muted" = "Stummgeschaltet"; +"userProfile.title.blocked" = "Blockiert"; + +// Mark: Notifications view. +"notifications.navigationBar.title" = "Benachrichtigungen"; +"notifications.title.noNotifications" = "Unfortunately, there is nothing here."; +"notifications.title.followedYou" = "followed you"; +"notifications.title.mentionedYou" = "mentioned you"; +"notifications.title.boosted" = "boosted"; +"notifications.title.favourited" = "favourited"; +"notifications.title.postedStatus" = "posted status"; +"notifications.title.followRequest" = "follow request"; +"notifications.title.poll" = "poll"; +"notifications.title.updatedStatus" = "updated status"; +"notifications.title.signedUp" = "signed up"; +"notifications.title.newReport" = "new report"; +"notifications.error.loadingNotificationsFailed" = "Loading notifications failed."; + +// Mark: Compose view. +"compose.navigationBar.title" = "Compose"; +"compose.title.everyone" = "Everyone"; +"compose.title.unlisted" = "Unlisted"; +"compose.title.followers" = "Followers"; +"compose.title.attachPhotoFull" = "Attach a photo and type what's on your mind"; +"compose.title.attachPhotoMini" = "Type what's on your mind"; +"compose.title.publish" = "Publish"; +"compose.title.cancel" = "Cancel"; +"compose.title.writeContentWarning" = "Write content warning"; +"compose.title.commentsWillBeDisabled" = "Comments will be disabled"; +"compose.title.statusPublished" = "Status published"; +"compose.title.tryToUpload" = "Try to upload"; +"compose.title.delete" = "Delete"; +"compose.title.edit" = "Edit"; +"compose.title.photos" = "Photos library"; +"compose.title.camera" = "Take photo"; +"compose.title.files" = "Browse files"; +"compose.title.missingAltTexts" = "Missing ALT texts"; +"compose.title.missingAltTextsWarning" = "Not all images have been described for the visually impaired. Would you like to send photos anyway?"; +"compose.error.loadingPhotosFailed" = "Cannot retreive image from library."; +"compose.error.postingPhotoFailed" = "Error during posting photo."; +"compose.error.postingStatusFailed" = "Error during posting status."; + +// Mark: Photo editor view. +"photoEdit.navigationBar.title" = "Photo details"; +"photoEdit.title.photo" = "Photo"; +"photoEdit.title.accessibility" = "Accessibility"; +"photoEdit.title.accessibilityDescription" = "Description for the visually impaired"; +"photoEdit.title.save" = "Save"; +"photoEdit.title.cancel" = "Cancel"; +"photoEdit.error.updatePhotoFailed" = "Error during updating photo."; + +// Mark: Place selector view. +"placeSelector.navigationBar.title" = "Places"; +"placeSelector.title.search" = "Search..."; +"placeSelector.title.buttonSearch" = "Search"; +"placeSelector.title.cancel" = "Cancel"; +"placeSelector.error.loadingPlacesFailed" = "Loading notifications failed."; + +// Mark: Settings view. +"settings.navigationBar.title" = "Settings"; +"settings.title.close" = "Close"; +"settings.title.version" = "Version"; +"settings.title.accounts" = "Accounts"; +"settings.title.newAccount" = "New account"; +"settings.title.accent" = "Accent"; +"settings.title.theme" = "Theme"; +"settings.title.system" = "System"; +"settings.title.light" = "Light"; +"settings.title.dark" = "Dark"; +"settings.title.avatar" = "Avatar"; +"settings.title.circle" = "Circle"; +"settings.title.rounderRectangle" = "Rounded rectangle"; +"settings.title.other" = "Other"; +"settings.title.thirdParty" = "Third party"; +"settings.title.reportBug" = "Report a bug"; +"settings.title.githubIssues" = "Issues on Github"; +"settings.title.follow" = "Follow me"; +"settings.title.support" = "Support"; +"settings.title.thankYouTitle" = "Thank you 💕"; +"settings.title.thankYouMessage" = "Thanks for your purchase. Purchases both big and small help us keep our dream of providing the best quality products to our customers. We hope you’re loving Vernissage."; +"settings.title.thankYouClose" = "Close"; +"settings.title.haptics" = "Haptics"; +"settings.title.hapticsTabSelection" = "Tab selection"; +"settings.title.hapticsButtonPress" = "Button press"; +"settings.title.hapticsListRefresh" = "List refresh"; +"settings.title.hapticsAnimationFinished" = "Animation finished"; +"settings.title.mediaSettings" = "Media settings"; +"settings.title.alwaysShowSensitiveTitle" = "Always show NSFW"; +"settings.title.alwaysShowSensitiveDescription" = "Force show all NFSW (sensitive) media without warnings"; +"settings.title.alwaysShowAltTitle" = "Show alternative text"; +"settings.title.alwaysShowAltDescription" = "Show alternative text if present on status details screen"; +"settings.title.general" = "General"; +"settings.title.applicationIcon" = "Application icon"; +"settings.title.followVernissage" = "Follow Vernissage"; +"settings.title.mastodonAccount" = "Mastodon account"; +"settings.title.pixelfedAccount" = "Pixelfed account"; +"settings.title.openPage" = "Open"; +"settings.title.privacyPolicy" = "Privacy policy"; +"settings.title.terms" = "Terms & Conditions"; +"settings.title.sourceCode" = "Source code"; +"settings.title.rate" = "Rate Vernissage"; +"settings.title.socials" = "Socials"; +"settings.title.menuPosition" = "Menu position"; +"settings.title.topMenu" = "Navigation bar"; +"settings.title.bottomRightMenu" = "Bottom right"; +"settings.title.bottomLeftMenu" = "Bottom left"; +"settings.title.showAvatars" = "Show avatars"; +"settings.title.showAvatarsOnTimeline" = "Avatars will be displayed on timelines"; +"settings.title.showFavourite" = "Show favourites"; +"settings.title.showFavouriteOnTimeline" = "Favourites will be displayed on timelines"; +"settings.title.showAltText" = "Show ALT icon"; +"settings.title.showAltTextOnTimeline" = "ALT icon will be displayed on timelines"; +"settings.title.warnAboutMissingAltTitle" = "Warn of missing ALT text"; +"settings.title.warnAboutMissingAltDescription" = "A warning about missing ALT texts will be displayed before publishing new post."; + +// Mark: Signin view. +"signin.navigationBar.title" = "Sign in to Pixelfed"; +"signin.title.serverAddress" = "Server address"; +"signin.title.signIn" = "Sign in"; +"signin.title.enterServerAddress" = "Enter server address"; +"signin.title.howToJoinLink" = "How to join Pixelfed"; +"signin.title.chooseServer" = "Or choose Pixelfed server"; +"signin.title.amountOfUsers" = "%d users"; +"signin.title.amountOStatuses" = "%d statuses"; +"signin.error.communicationFailed" = "Communication with server failed."; + +// Mark: Status view. +"status.navigationBar.title" = "Details"; +"status.title.uploaded" = "Uploaded"; +"status.title.via" = "via %@"; +"status.title.reboostedBy" = "Boosted by"; +"status.title.favouritedBy" = "Favourited by"; +"status.title.openInBrowser" = "Open in browser"; +"status.title.shareStatus" = "Share status"; +"status.title.yourStatus" = "Your status"; +"status.title.delete" = "Delete"; +"status.title.reboosted" = "Boosted"; +"status.title.unreboosted" = "Unboosted"; +"status.title.favourited" = "Favourited"; +"status.title.unfavourited" = "Unfavourited"; +"status.title.bookmarked" = "Bookmarked"; +"status.title.unbookmarked" = "Unbookmarked"; +"status.title.statusDeleted" = "Status deleted"; +"status.title.reboost" = "Boost"; +"status.title.unreboost" = "Unboost"; +"status.title.favourite" = "Favourite"; +"status.title.unfavourite" = "Unfavourite"; +"status.title.bookmark" = "Bookmark"; +"status.title.unbookmark" = "Unbookmark"; +"status.title.comment" = "Comment"; +"status.title.report" = "Report"; +"status.title.saveImage" = "Save image"; +"status.title.showMediaDescription" = "Show media description"; +"status.title.mediaDescription" = "Media description"; +"status.title.shareImage" = "Share image"; +"status.title.altText" = "ALT"; +"status.error.loadingStatusFailed" = "Loading status failed."; +"status.error.notFound" = "Status not existing anymore."; +"status.error.loadingCommentsFailed" = "Comments cannot be downloaded."; +"status.error.reboostFailed" = "Boost action failed."; +"status.error.favouriteFailed" = "Favourite action failed."; +"status.error.bookmarkFailed" = "Bookmark action failed."; +"status.error.deleteFailed" = "Delete action failed."; + +// Mark: Accounts view. +"accounts.navigationBar.followers" = "Followers"; +"accounts.navigationBar.following" = "Following"; +"accounts.navigationBar.favouritedBy" = "Favourited by"; +"accounts.navigationBar.reboostedBy" = "Boosted by"; +"accounts.navigationBar.blocked" = "Blocked accounts"; +"accounts.navigationBar.mutes" = "Muted accounts"; +"accounts.title.noAccounts" = "Unfortunately, there is no one here."; +"accounts.error.loadingAccountsFailed" = "Loading accounts failed."; + +// Mark: Third party view. +"thirdParty.navigationBar.title" = "Third party"; + +// Mark: Widget view. +"widget.title.photoDescription" = "Widget with photos from Pixelfed."; +"widget.title.qrCodeDescription" = "Widget with QR Code to your Pixelfed profile."; + +// Mark: In-app purchases. +"purchase.donut.title" = "Donut"; +"purchase.donut.description" = "Treat me to a doughnut."; +"purchase.coffee.title" = "Coffee"; +"purchase.coffee.description" = "Treat me to a coffee."; +"purchase.cake.title" = "Coffee & cake"; +"purchase.cake.description" = "Treat me to a coffee and cake."; + +// Mark: Edit profile. +"editProfile.navigationBar.title" = "Edit profile"; +"editProfile.title.displayName" = "Display name"; +"editProfile.title.bio" = "Bio"; +"editProfile.title.website" = "Website"; +"editProfile.title.save" = "Save"; +"editProfile.title.accountSaved" = "Profile has been updated."; +"editProfile.title.photoInfo" = "The changed photo will be visible in the app and on the website with a small delay."; +"editProfile.title.privateAccount" = "Private account"; +"editProfile.title.privateAccountInfo" = "When your account is private, only people you approve can see your photos and videos on Pixelfed. Your existing followers won't be affected."; +"editProfile.error.saveAccountFailed" = "Saving profile failed."; +"editProfile.error.loadingAvatarFailed" = "Loading avatar failed."; +"editProfile.error.noProfileData" = "Profile data cannot be displayed."; +"editProfile.error.loadingAccountFailed" = "Error during download account from server."; + +// Mark: Instance information. +"instance.navigationBar.title" = "Instance"; +"instance.title.instanceInfo" = "Instance info"; +"instance.title.name" = "Name"; +"instance.title.address" = "Address"; +"instance.title.email" = "Email"; +"instance.title.version" = "Version"; +"instance.title.users" = "Users"; +"instance.title.posts" = "Posts"; +"instance.title.domains" = "Domains"; +"instance.title.registrations" = "Registrations"; +"instance.title.approvalRequired" = "Approval required"; +"instance.title.rules" = "Instance rules"; +"instance.title.contact" = "Contact"; +"instance.title.pixelfedAccount" = "Pixelfed account"; +"instance.error.noInstanceData" = "Instance data cannot be displayed."; +"instance.error.loadingDataFailed" = "Error during download instance data from server."; + +// Mark: Report screen. +"report.navigationBar.title" = "Report"; +"report.title.close" = "Close"; +"report.title.send" = "Send"; +"report.title.userReported" = "User has been reported"; +"report.title.postReported" = "Post has been reported"; +"report.title.reportType" = "Type of abuse"; +"report.title.spam" = "It's a spam"; +"report.title.sensitive" = "Nudity or sexual activity"; +"report.title.abusive" = "Hate speech or symbols"; +"report.title.underage" = "Underage account"; +"report.title.violence" = "Violence or dangerous organisations"; +"report.title.copyright" = "Copyright infringement"; +"report.title.impersonation" = "Impersonation"; +"report.title.scam" = "Bullying or harassment"; +"report.title.terrorism" = "Terrorism"; +"report.error.notReported" = "Error during sending report."; + +// Mark: Following requests. +"followingRequests.navigationBar.title" = "Following requests"; +"followingRequests.title.approve" = "Approve"; +"followingRequests.title.reject" = "Reject"; +"followingRequests.error.approve" = "Error during approving request."; +"followingRequests.error.reject" = "Error during rejecting request."; diff --git a/PixelfedKit/Sources/PixelfedKit/Resources/de_DE.lproj/Localizable.strings b/PixelfedKit/Sources/PixelfedKit/Resources/de_DE.lproj/Localizable.strings new file mode 100644 index 0000000..9f360bc --- /dev/null +++ b/PixelfedKit/Sources/PixelfedKit/Resources/de_DE.lproj/Localizable.strings @@ -0,0 +1,11 @@ +// MARK: Network errors. +"global.error.notSuccessResponse" = "Antwort vom Server: %@."; +"global.error.unknownError" = "Unbekannter Fehler."; + +// Mark: Report errors. +"report.error.noSelfReports" = "Du darfst Dich nicht selbst melden."; +"report.error.invalidObjectId" = "Fehlerhafte ID."; +"report.error.duplicate" = "Der Bericht wurde bereits gesendet."; +"report.error.invalidParameters" = "Ungültige Parameter."; +"report.error.invalidType" = "Ungültiger Berichtstyp."; +"report.error.invalidObject" = "Ungültiges Objekt."; From c88475661454cec5e96c7812c76f116dd81737fd Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Fri, 13 Oct 2023 12:02:03 +0200 Subject: [PATCH 02/53] more strings localized --- Localization/de_DE.lproj/Localizable.strings | 180 +++++++++---------- 1 file changed, 90 insertions(+), 90 deletions(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 99ada3d..ef981dd 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -131,109 +131,109 @@ // Mark: Notifications view. "notifications.navigationBar.title" = "Benachrichtigungen"; -"notifications.title.noNotifications" = "Unfortunately, there is nothing here."; -"notifications.title.followedYou" = "followed you"; -"notifications.title.mentionedYou" = "mentioned you"; -"notifications.title.boosted" = "boosted"; -"notifications.title.favourited" = "favourited"; -"notifications.title.postedStatus" = "posted status"; -"notifications.title.followRequest" = "follow request"; -"notifications.title.poll" = "poll"; -"notifications.title.updatedStatus" = "updated status"; -"notifications.title.signedUp" = "signed up"; -"notifications.title.newReport" = "new report"; -"notifications.error.loadingNotificationsFailed" = "Loading notifications failed."; +"notifications.title.noNotifications" = "Hier ist leider nichts."; +"notifications.title.followedYou" = "folgt Dir"; +"notifications.title.mentionedYou" = "hat Dich erwähnt"; +"notifications.title.boosted" = "geboostet"; +"notifications.title.favourited" = "favorisiert"; +"notifications.title.postedStatus" = "Beitrag veröffentlicht"; +"notifications.title.followRequest" = "Folgeanfrage"; +"notifications.title.poll" = "Umfrage"; +"notifications.title.updatedStatus" = "Beitrag bearbeitet"; +"notifications.title.signedUp" = "registriert"; +"notifications.title.newReport" = "neue Meldung"; +"notifications.error.loadingNotificationsFailed" = "Benachrichtigungen laden fehlgeschlagen."; // Mark: Compose view. -"compose.navigationBar.title" = "Compose"; -"compose.title.everyone" = "Everyone"; -"compose.title.unlisted" = "Unlisted"; -"compose.title.followers" = "Followers"; -"compose.title.attachPhotoFull" = "Attach a photo and type what's on your mind"; -"compose.title.attachPhotoMini" = "Type what's on your mind"; -"compose.title.publish" = "Publish"; -"compose.title.cancel" = "Cancel"; -"compose.title.writeContentWarning" = "Write content warning"; -"compose.title.commentsWillBeDisabled" = "Comments will be disabled"; -"compose.title.statusPublished" = "Status published"; -"compose.title.tryToUpload" = "Try to upload"; -"compose.title.delete" = "Delete"; -"compose.title.edit" = "Edit"; -"compose.title.photos" = "Photos library"; -"compose.title.camera" = "Take photo"; -"compose.title.files" = "Browse files"; -"compose.title.missingAltTexts" = "Missing ALT texts"; -"compose.title.missingAltTextsWarning" = "Not all images have been described for the visually impaired. Would you like to send photos anyway?"; -"compose.error.loadingPhotosFailed" = "Cannot retreive image from library."; -"compose.error.postingPhotoFailed" = "Error during posting photo."; -"compose.error.postingStatusFailed" = "Error during posting status."; +"compose.navigationBar.title" = "Beitrag erstellen"; +"compose.title.everyone" = "Öffentlich"; +"compose.title.unlisted" = "nicht gelistet"; +"compose.title.followers" = "für Folgende"; +"compose.title.attachPhotoFull" = "Füge ein Foto hinzu und beschreibe was Du denkst."; +"compose.title.attachPhotoMini" = "Beschreibe was Du denkst."; +"compose.title.publish" = "Veröffentlichen"; +"compose.title.cancel" = "Abbrechen"; +"compose.title.writeContentWarning" = "Inhaltswarnung hinzufügen"; +"compose.title.commentsWillBeDisabled" = "Kommentare werden nicht möglich sein"; +"compose.title.statusPublished" = "Beitrag veröffentlicht"; +"compose.title.tryToUpload" = "Versuche hochzuladen"; +"compose.title.delete" = "Löschen"; +"compose.title.edit" = "Bearbeiten"; +"compose.title.photos" = "Foto Bibliothek"; +"compose.title.camera" = "Foto aufnehmen"; +"compose.title.files" = "Dateien durchsuchen"; +"compose.title.missingAltTexts" = "Fehlende ALT Texte"; +"compose.title.missingAltTextsWarning" = "Es haben nicht alle Fotos eine Beschreibung für Sehbehinderte. Möchtest Du trotzdem senden?"; +"compose.error.loadingPhotosFailed" = "Kann das Foto nicht aus der Bibliothek laden."; +"compose.error.postingPhotoFailed" = "Fehler beim Veröffentlichen des Fotos."; +"compose.error.postingStatusFailed" = "Fehler beim Veröffentlichen des Beitrags."; // Mark: Photo editor view. -"photoEdit.navigationBar.title" = "Photo details"; -"photoEdit.title.photo" = "Photo"; -"photoEdit.title.accessibility" = "Accessibility"; -"photoEdit.title.accessibilityDescription" = "Description for the visually impaired"; -"photoEdit.title.save" = "Save"; -"photoEdit.title.cancel" = "Cancel"; -"photoEdit.error.updatePhotoFailed" = "Error during updating photo."; +"photoEdit.navigationBar.title" = "Foto Details"; +"photoEdit.title.photo" = "Foto"; +"photoEdit.title.accessibility" = "Barrierefreiheit"; +"photoEdit.title.accessibilityDescription" = "Beschreibung für Sehbehinderte"; +"photoEdit.title.save" = "Speichern"; +"photoEdit.title.cancel" = "Abbrechen"; +"photoEdit.error.updatePhotoFailed" = "Fehler beim Aktualisieren des Fotos."; // Mark: Place selector view. -"placeSelector.navigationBar.title" = "Places"; -"placeSelector.title.search" = "Search..."; -"placeSelector.title.buttonSearch" = "Search"; -"placeSelector.title.cancel" = "Cancel"; -"placeSelector.error.loadingPlacesFailed" = "Loading notifications failed."; +"placeSelector.navigationBar.title" = "Orte"; +"placeSelector.title.search" = "Suchen..."; +"placeSelector.title.buttonSearch" = "Suchen"; +"placeSelector.title.cancel" = "Abbrechen"; +"placeSelector.error.loadingPlacesFailed" = "Benachrichtigungen laden fehlgeschlagen."; // Mark: Settings view. -"settings.navigationBar.title" = "Settings"; -"settings.title.close" = "Close"; +"settings.navigationBar.title" = "Einstellungen"; +"settings.title.close" = "Schließen"; "settings.title.version" = "Version"; -"settings.title.accounts" = "Accounts"; -"settings.title.newAccount" = "New account"; -"settings.title.accent" = "Accent"; +"settings.title.accounts" = "Konten"; +"settings.title.newAccount" = "Neues Konto"; +"settings.title.accent" = "Akzent"; "settings.title.theme" = "Theme"; "settings.title.system" = "System"; -"settings.title.light" = "Light"; -"settings.title.dark" = "Dark"; +"settings.title.light" = "Hell"; +"settings.title.dark" = "Dunkel"; "settings.title.avatar" = "Avatar"; -"settings.title.circle" = "Circle"; -"settings.title.rounderRectangle" = "Rounded rectangle"; -"settings.title.other" = "Other"; -"settings.title.thirdParty" = "Third party"; -"settings.title.reportBug" = "Report a bug"; -"settings.title.githubIssues" = "Issues on Github"; -"settings.title.follow" = "Follow me"; +"settings.title.circle" = "Kreis"; +"settings.title.rounderRectangle" = "Abgerundetes Rechteck"; +"settings.title.other" = "Anderes"; +"settings.title.thirdParty" = "Dritthersteller"; +"settings.title.reportBug" = "Fehler melden"; +"settings.title.githubIssues" = "Issues auf Github"; +"settings.title.follow" = "Folge mir"; "settings.title.support" = "Support"; -"settings.title.thankYouTitle" = "Thank you 💕"; -"settings.title.thankYouMessage" = "Thanks for your purchase. Purchases both big and small help us keep our dream of providing the best quality products to our customers. We hope you’re loving Vernissage."; -"settings.title.thankYouClose" = "Close"; -"settings.title.haptics" = "Haptics"; -"settings.title.hapticsTabSelection" = "Tab selection"; -"settings.title.hapticsButtonPress" = "Button press"; -"settings.title.hapticsListRefresh" = "List refresh"; -"settings.title.hapticsAnimationFinished" = "Animation finished"; -"settings.title.mediaSettings" = "Media settings"; -"settings.title.alwaysShowSensitiveTitle" = "Always show NSFW"; -"settings.title.alwaysShowSensitiveDescription" = "Force show all NFSW (sensitive) media without warnings"; -"settings.title.alwaysShowAltTitle" = "Show alternative text"; -"settings.title.alwaysShowAltDescription" = "Show alternative text if present on status details screen"; -"settings.title.general" = "General"; -"settings.title.applicationIcon" = "Application icon"; -"settings.title.followVernissage" = "Follow Vernissage"; -"settings.title.mastodonAccount" = "Mastodon account"; -"settings.title.pixelfedAccount" = "Pixelfed account"; -"settings.title.openPage" = "Open"; -"settings.title.privacyPolicy" = "Privacy policy"; -"settings.title.terms" = "Terms & Conditions"; -"settings.title.sourceCode" = "Source code"; -"settings.title.rate" = "Rate Vernissage"; -"settings.title.socials" = "Socials"; -"settings.title.menuPosition" = "Menu position"; -"settings.title.topMenu" = "Navigation bar"; -"settings.title.bottomRightMenu" = "Bottom right"; -"settings.title.bottomLeftMenu" = "Bottom left"; -"settings.title.showAvatars" = "Show avatars"; -"settings.title.showAvatarsOnTimeline" = "Avatars will be displayed on timelines"; +"settings.title.thankYouTitle" = "Dankeschön 💕"; +"settings.title.thankYouMessage" = "Danke für die Unterstützung! Kleine und große Einkäufe helfen uns, unseren Traum eines hochqualitativen Produktes für unsere Nutzer aufrecht zu halten. Wir hoffen Du liebst Vernissage!"; +"settings.title.thankYouClose" = "Schließen"; +"settings.title.haptics" = "Haptik"; +"settings.title.hapticsTabSelection" = "Tab Auswahl"; +"settings.title.hapticsButtonPress" = "Knopfdruck"; +"settings.title.hapticsListRefresh" = "Liste aktualisieren"; +"settings.title.hapticsAnimationFinished" = "Animation beendet"; +"settings.title.mediaSettings" = "Medieneinstellungen"; +"settings.title.alwaysShowSensitiveTitle" = "Anstößige Inhalte immer zeigen"; +"settings.title.alwaysShowSensitiveDescription" = "Anstößige Inhalte immer ohne Warnung anzeigen"; +"settings.title.alwaysShowAltTitle" = "Alternativen Text anzeigen"; +"settings.title.alwaysShowAltDescription" = "Alternativen Text in der Detailansicht anzeigen"; +"settings.title.general" = "Generell"; +"settings.title.applicationIcon" = "Anwendungs-Icon"; +"settings.title.followVernissage" = "Vernissage folgen"; +"settings.title.mastodonAccount" = "Mastodon"; +"settings.title.pixelfedAccount" = "Pixelfed"; +"settings.title.openPage" = "Öffnen"; +"settings.title.privacyPolicy" = "Datenschutzrichtlinie"; +"settings.title.terms" = "Nutzungsbedingungen"; +"settings.title.sourceCode" = "Quellcode"; +"settings.title.rate" = "Vernissage bewerten"; +"settings.title.socials" = "Soziale Netzwerke"; +"settings.title.menuPosition" = "Menüposition"; +"settings.title.topMenu" = "Navigationsleiste"; +"settings.title.bottomRightMenu" = "Unten rechts"; +"settings.title.bottomLeftMenu" = "Unten links"; +"settings.title.showAvatars" = "Avatare anzeigen"; +"settings.title.showAvatarsOnTimeline" = "Avatare werden in Listen angezeigt"; "settings.title.showFavourite" = "Show favourites"; "settings.title.showFavouriteOnTimeline" = "Favourites will be displayed on timelines"; "settings.title.showAltText" = "Show ALT icon"; From 2a44115bd864c1965a6f48c2492308a6f52fc499 Mon Sep 17 00:00:00 2001 From: Marcin Czachurski Date: Mon, 13 Nov 2023 13:48:37 +0100 Subject: [PATCH 03/53] Fix issue with translations and maximum statuses on lists --- CoreData/ViewedStatusHandler.swift | 2 +- Localization/Localizable.xcstrings | 314 +++++++++++++++++- Vernissage.xcodeproj/project.pbxproj | 12 +- Vernissage/Services/HomeTimelineService.swift | 4 +- Vernissage/Views/HomeTimelineView.swift | 2 +- Vernissage/Views/StatusesView.swift | 2 +- 6 files changed, 324 insertions(+), 12 deletions(-) diff --git a/CoreData/ViewedStatusHandler.swift b/CoreData/ViewedStatusHandler.swift index e29e11d..d79a658 100644 --- a/CoreData/ViewedStatusHandler.swift +++ b/CoreData/ViewedStatusHandler.swift @@ -50,7 +50,7 @@ class ViewedStatusHandler { fetchDescriptor.fetchLimit = 1 fetchDescriptor.includePendingChanges = true - guard let first = try modelContext.fetch(fetchDescriptor).first else { + guard try modelContext.fetch(fetchDescriptor).first != nil else { return false } diff --git a/Localization/Localizable.xcstrings b/Localization/Localizable.xcstrings index cc0a963..61f43d5 100644 --- a/Localization/Localizable.xcstrings +++ b/Localization/Localizable.xcstrings @@ -322,6 +322,18 @@ "value" : "Potenciadores desactivados" } }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Desgaitutako bultzadak" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Boosters désactivés" + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -1250,7 +1262,7 @@ }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Le jeton d'accès n'est pas trouvé." } }, @@ -1276,6 +1288,18 @@ "value" : "Avatar no se ha descargado." } }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Avatarra ez da deskargatu." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'avatar n'a pas été téléchargé." + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -1333,6 +1357,18 @@ "value" : "No se puede configurar el receptor de transacciones." } }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Ezin da transakzio-entzulea konfiguratu." + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Impossible de configurer l'auditeur de transactions." + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -1355,6 +1391,18 @@ "value" : "No se pueden descargar productos in-app." } }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Ezin dira deskargatu aplikazioko produktuak." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible de télécharger des produits in-app." + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -1445,6 +1493,18 @@ "value" : "Error durante la descarga de metadatos." } }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Errore bat gertatu da metadatuak deskargatzean." + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Erreur lors du téléchargement des métadonnées." + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -1467,6 +1527,18 @@ "value" : "Error durante la descarga de nuevos estados para la cantidad de nuevos estados." } }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Errore bat gertatu da egoera berriak deskargatzean egoera berrien kopuruagatik." + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Erreur lors du téléchargement des nouveaux statuts pour le nombre de nouveaux statuts." + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -1697,6 +1769,18 @@ "value" : "Compra fallida." } }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Erosketak huts egin du." + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "L'achat a échoué." + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -1787,6 +1871,18 @@ "value" : "Error en la recarga." } }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Ezin izan da freskatu tokena." + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Le jeton de rafraîchissement a échoué." + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -1845,6 +1941,18 @@ "value" : "más..." } }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "gehiago..." + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "plus..." + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -1867,6 +1975,18 @@ "value" : "Se han recuperado nuevos tokens de acceso." } }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Sarbide-token berriak berreskuratu dira." + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "De nouveaux jetons d'accès ont été récupérés." + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -4391,6 +4511,24 @@ "value" : "Error during enabling notifications." } }, + "es" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Error al activar las notificaciones." + } + }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Errore bat gertatu da jakinarazpenak gaitzean." + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Erreur lors de l'activation des notifications." + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -5478,6 +5616,24 @@ "value" : "Notifications" } }, + "es" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Notificaciones" + } + }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Jakinarazpenak" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notifications" + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -5495,6 +5651,24 @@ "value" : "The application badge with the number of new notifications will be visible near the application icon." } }, + "es" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "La insignia de la aplicación con el número de nuevas notificaciones será visible cerca del icono de la aplicación." + } + }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Jakinarazpen berrien kopurua duen aplikazioaren bereizgarria aplikazioaren ikonoaren ondoan egongo da ikusgai." + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Le badge de l'application indiquant le nombre de nouvelles notifications sera visible près de l'icône de l'application." + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -5512,6 +5686,24 @@ "value" : "Show application badge" } }, + "es" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Mostrar distintivo de solicitud" + } + }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Erakutsi aplikazioaren bereizgarria" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Afficher le badge d'application" + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -8463,6 +8655,18 @@ "value" : "Renderiza Emoji personalizados en texto. Soporta emojis locales y remotos. Los emojis remotos se cargan y almacenan en caché con Nuke." } }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Errendatu Emoji pertsonalizatua testuan. Tokiko eta urruneko emojiak onartzen ditu. Urruneko emojiak kargatu eta cachean gordetzen dira Nuke erabiliz." + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Rendu des Emoji personnalisés dans le texte. Supporte les emojis locaux et distants. Les emojis distants sont chargés et mis en cache à l'aide de Nuke." + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -8555,6 +8759,18 @@ "value" : "Fuente utilizada en la aplicación en los iconos y en la pantalla de inicio." } }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Aplikazioan erabiltzen den letra-tipoa ikonoetan eta harrera-pantailan." + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Police utilisée dans l'application dans les icônes et dans l'écran d'accueil." + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -8647,6 +8863,18 @@ "value" : "Es un paquete Swift que intenta convertir HTML en Markdown." } }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "HTML Markdown bihurtzen saiatzen den Swift pakete bat da." + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Il s'agit d'un paquet Swift qui tente de convertir HTML en Markdown." + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -8739,6 +8967,18 @@ "value" : "HTMLString es una librería escrita en Swift que permite a tu programa añadir y eliminar entidades HTML en Strings." } }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "HTMLString Swift-en idatzitako liburutegi bat da, zure programari Strings-en HTML entitateak gehitzeko eta kentzeko aukera ematen diona." + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "HTMLString est une bibliothèque écrite en Swift qui permet à votre programme d'ajouter et de supprimer des entités HTML dans des chaînes de caractères." + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -8831,6 +9071,18 @@ "value" : "Nuke proporciona una forma eficaz de descargar y mostrar imágenes en tu aplicación. Es fácil de aprender y utilizar. Su arquitectura permite muchas características de gran alcance al tiempo que ofrece posibilidades prácticamente ilimitadas para la personalización." } }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Nuke-k zure aplikazioan irudiak deskargatzeko eta bistaratzeko modu eraginkorra eskaintzen du. Ikasteko eta erabiltzeko erraza da. Bere arkitekturak ezaugarri indartsu asko ahalbidetzen ditu pertsonalizatzeko aukera ia mugagabeak eskaintzen dituen bitartean." + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Nuke offre un moyen efficace de télécharger et d'afficher des images dans votre application. Il est facile à apprendre et à utiliser. Son architecture permet de nombreuses fonctionnalités puissantes tout en offrant des possibilités de personnalisation pratiquement illimitées." + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -8958,6 +9210,18 @@ "value" : "Un µFramework para mostrar alertas como la que se utiliza al copiar desde la mesa de trabajo o al conectar el lápiz de Apple." } }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Pasteboardetik kopiatzerakoan edo Apple pencil konektatzean erabiltzen den bezalako alertak erakusteko µFramework." + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Un µFramework pour afficher des alertes comme celles utilisées lors de la copie à partir d'un tableau ou de la connexion d'un crayon Apple." + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -9050,6 +9314,18 @@ "value" : "Librería OAuth basada en Swift para iOS y macOS." } }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Swift-en oinarritutako OAuth liburutegia iOS eta macOSentzat." + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Bibliothèque OAuth basée sur Swift pour iOS et macOS." + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -9142,6 +9418,18 @@ "value" : "Un sencillo generador de imágenes de código QR para usar en tus aplicaciones, escrito en Swift 5." } }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Zure aplikazioetan erabiltzeko QR kode irudi-sorgailu soil bat, Swift 5-en idatzia." + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Un simple générateur d'image de code QR à utiliser dans vos applications, écrit en Swift 5." + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -9923,6 +10211,18 @@ "value" : "Potenciadores desactivados" } }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Desgaitutako bultzadak" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Boosters désactivés" + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -10877,6 +11177,18 @@ "value" : "No se admite" } }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Ez da onartzen" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Non pris en charge" + } + }, "pl" : { "stringUnit" : { "state" : "translated", diff --git a/Vernissage.xcodeproj/project.pbxproj b/Vernissage.xcodeproj/project.pbxproj index 9d62a3a..fe80c0b 100644 --- a/Vernissage.xcodeproj/project.pbxproj +++ b/Vernissage.xcodeproj/project.pbxproj @@ -1209,7 +1209,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 2.0.0; + MARKETING_VERSION = 2.0.1; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage.widget; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -1243,7 +1243,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 2.0.0; + MARKETING_VERSION = 2.0.1; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage.widget; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -1276,7 +1276,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 2.0.0; + MARKETING_VERSION = 2.0.1; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage.share; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -1308,7 +1308,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 2.0.0; + MARKETING_VERSION = 2.0.1; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage.share; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -1474,7 +1474,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 2.0.0; + MARKETING_VERSION = 2.0.1; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1517,7 +1517,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 2.0.0; + MARKETING_VERSION = 2.0.1; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; diff --git a/Vernissage/Services/HomeTimelineService.swift b/Vernissage/Services/HomeTimelineService.swift index f323033..b5a37df 100644 --- a/Vernissage/Services/HomeTimelineService.swift +++ b/Vernissage/Services/HomeTimelineService.swift @@ -20,7 +20,7 @@ public class HomeTimelineService { public static let shared = HomeTimelineService() private init() { } - private let maximumAmountOfDownloadedStatuses = 80 + private let maximumAmountOfDownloadedStatuses = 40 private let imagePrefetcher = ImagePrefetcher(destination: .diskCache) private let semaphore = AsyncSemaphore(value: 1) @@ -45,7 +45,7 @@ public class HomeTimelineService { var statuses: [Status] = [] var newestStatusId = lastSeenStatusId - // There can be more then 80 newest statuses, that's why we have to sometimes send more then one request. + // There can be more then 40 newest statuses, that's why we have to sometimes send more then one request. while true { do { let downloadedStatuses = try await client.getHomeTimeline(minId: newestStatusId, diff --git a/Vernissage/Views/HomeTimelineView.swift b/Vernissage/Views/HomeTimelineView.swift index 775a2d2..c89eec9 100644 --- a/Vernissage/Views/HomeTimelineView.swift +++ b/Vernissage/Views/HomeTimelineView.swift @@ -27,7 +27,7 @@ struct HomeTimelineView: View { @State private var opacity = 0.0 @State private var offset = -50.0 - private let defaultLimit = 80 + private let defaultLimit = 40 private let imagePrefetcher = ImagePrefetcher(destination: .diskCache) private let timelineDoubleTapTip = TimelineDoubleTapTip() diff --git a/Vernissage/Views/StatusesView.swift b/Vernissage/Views/StatusesView.swift index 6295d69..29934d8 100644 --- a/Vernissage/Views/StatusesView.swift +++ b/Vernissage/Views/StatusesView.swift @@ -61,7 +61,7 @@ struct StatusesView: View { @State private var containerWidth: Double = UIDevice.isIPad ? UIScreen.main.bounds.width / 3 : UIScreen.main.bounds.width @State private var containerHeight: Double = UIDevice.isIPad ? UIScreen.main.bounds.height / 3 : UIScreen.main.bounds.height - private let defaultLimit = 80 + private let defaultLimit = 40 private let imagePrefetcher = ImagePrefetcher(destination: .diskCache) var body: some View { From facc2caf5fe246e21a9899cd2432537f85196a97 Mon Sep 17 00:00:00 2001 From: Marcin Czachurski Date: Mon, 20 Nov 2023 15:23:42 +0100 Subject: [PATCH 04/53] Improve counter on home timeline --- .../Sources/ClientKit/Client+Timeline.swift | 6 +-- CoreData/AccountDataHandler.swift | 2 +- Localization/Localizable.xcstrings | 28 ++++++++++ .../Sources/PixelfedKit/Entities/Link.swift | 2 +- .../PixelfedKit/Entities/Linkable.swift | 28 +++++++++- .../PixelfedClient+Timelines.swift | 12 ++--- Vernissage.xcodeproj/project.pbxproj | 12 ++--- Vernissage/Services/HomeTimelineService.swift | 38 +++++++++++--- Vernissage/Views/HomeTimelineView.swift | 52 ++++++++++--------- Vernissage/Views/StatusesView.swift | 48 +++++++++-------- Vernissage/Widgets/ImagesGrid.swift | 14 +++-- .../PhotoWidget/Service/StatusFetcher.swift | 6 +-- 12 files changed, 169 insertions(+), 79 deletions(-) diff --git a/ClientKit/Sources/ClientKit/Client+Timeline.swift b/ClientKit/Sources/ClientKit/Client+Timeline.swift index e70305c..48044ac 100644 --- a/ClientKit/Sources/ClientKit/Client+Timeline.swift +++ b/ClientKit/Sources/ClientKit/Client+Timeline.swift @@ -13,7 +13,7 @@ extension Client { sinceId: String? = nil, minId: String? = nil, limit: Int = 40, - includeReblogs: Bool? = nil) async throws -> [Status] { + includeReblogs: Bool? = nil) async throws -> Linkable<[Status]> { return try await pixelfedClient.getHomeTimeline(maxId: maxId, sinceId: sinceId, minId: minId, limit: limit, includeReblogs: includeReblogs) } @@ -22,7 +22,7 @@ extension Client { maxId: String? = nil, sinceId: String? = nil, minId: String? = nil, - limit: Int = 40) async throws -> [Status] { + limit: Int = 40) async throws -> Linkable<[Status]> { return try await pixelfedClient.getPublicTimeline(local: local, remote: remote, onlyMedia: true, @@ -38,7 +38,7 @@ extension Client { maxId: String? = nil, sinceId: String? = nil, minId: String? = nil, - limit: Int = 40) async throws -> [Status] { + limit: Int = 40) async throws -> Linkable<[Status]> { return try await pixelfedClient.getTagTimeline(tag: tag, local: local, remote: remote, diff --git a/CoreData/AccountDataHandler.swift b/CoreData/AccountDataHandler.swift index b1c382f..c56d229 100644 --- a/CoreData/AccountDataHandler.swift +++ b/CoreData/AccountDataHandler.swift @@ -64,7 +64,7 @@ class AccountDataHandler { } } - func update(lastSeenStatusId: String?, lastLoadedStatusId: String?, statuses: [Status]? = nil, applicationState: ApplicationState, modelContext: ModelContext) throws { + func update(lastSeenStatusId: String?, lastLoadedStatusId: String?, statuses: Linkable<[Status]>? = nil, applicationState: ApplicationState, modelContext: ModelContext) throws { guard let accountId = applicationState.account?.id else { return } diff --git a/Localization/Localizable.xcstrings b/Localization/Localizable.xcstrings index 61f43d5..3daf974 100644 --- a/Localization/Localizable.xcstrings +++ b/Localization/Localizable.xcstrings @@ -237,6 +237,34 @@ } } }, + "+99" : { + "localizations" : { + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "+99" + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : "+99" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "+99" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "+99" + } + } + } + }, "accounts.error.loadingAccountsFailed" : { "comment" : "Information message when loading account failed", "localizations" : { diff --git a/PixelfedKit/Sources/PixelfedKit/Entities/Link.swift b/PixelfedKit/Sources/PixelfedKit/Entities/Link.swift index 8a12ae2..f8ea40a 100644 --- a/PixelfedKit/Sources/PixelfedKit/Entities/Link.swift +++ b/PixelfedKit/Sources/PixelfedKit/Entities/Link.swift @@ -8,7 +8,7 @@ import Foundation import RegexBuilder /// Link returned in header for paging feature/ -public struct Link { +public struct Link: Codable { /// Raw value of header link. public let rawLink: String diff --git a/PixelfedKit/Sources/PixelfedKit/Entities/Linkable.swift b/PixelfedKit/Sources/PixelfedKit/Entities/Linkable.swift index 0942e9d..3d37d06 100644 --- a/PixelfedKit/Sources/PixelfedKit/Entities/Linkable.swift +++ b/PixelfedKit/Sources/PixelfedKit/Entities/Linkable.swift @@ -7,7 +7,7 @@ import Foundation /// Some of endpoint returns JSON data and additional information in header, like link for paging functionality. -public struct Linkable where T: Codable { +public struct Linkable : Codable where T: Codable { /// Data retunred in HTTP reponse body (mostly JSON data/entities). public let data: T @@ -20,3 +20,29 @@ public struct Linkable where T: Codable { self.link = link } } + +public extension Linkable<[Status]> { + func getMinId() -> String? { + if let link = self.link { + return link.minId + } + + if let firstItemId = self.data.first?.id { + return firstItemId + } + + return nil + } + + func getMaxId() -> String? { + if let link = self.link { + return link.maxId + } + + if let lastItemId = self.data.last?.id { + return lastItemId + } + + return nil + } +} diff --git a/PixelfedKit/Sources/PixelfedKit/PixelfedClient+Timelines.swift b/PixelfedKit/Sources/PixelfedKit/PixelfedClient+Timelines.swift index b435a72..478532d 100644 --- a/PixelfedKit/Sources/PixelfedKit/PixelfedClient+Timelines.swift +++ b/PixelfedKit/Sources/PixelfedKit/PixelfedClient+Timelines.swift @@ -13,7 +13,7 @@ public extension PixelfedClientAuthenticated { minId: EntityId? = nil, limit: Int? = nil, includeReblogs: Bool? = nil, - timeoutInterval: Double? = nil) async throws -> [Status] { + timeoutInterval: Double? = nil) async throws -> Linkable<[Status]> { let request = try Self.request( for: baseURL, @@ -22,7 +22,7 @@ public extension PixelfedClientAuthenticated { timeoutInterval: timeoutInterval ) - return try await downloadJson([Status].self, request: request) + return try await downloadJsonWithLink([Status].self, request: request) } func getPublicTimeline(local: Bool? = nil, @@ -31,7 +31,7 @@ public extension PixelfedClientAuthenticated { maxId: EntityId? = nil, sinceId: EntityId? = nil, minId: EntityId? = nil, - limit: Limit? = nil) async throws -> [Status] { + limit: Limit? = nil) async throws -> Linkable<[Status]> { let request = try Self.request( for: baseURL, @@ -39,7 +39,7 @@ public extension PixelfedClientAuthenticated { withBearerToken: token ) - return try await downloadJson([Status].self, request: request) + return try await downloadJsonWithLink([Status].self, request: request) } func getTagTimeline(tag: String, @@ -49,7 +49,7 @@ public extension PixelfedClientAuthenticated { maxId: EntityId? = nil, sinceId: EntityId? = nil, minId: EntityId? = nil, - limit: Int? = nil) async throws -> [Status] { + limit: Int? = nil) async throws -> Linkable<[Status]> { let request = try Self.request( for: baseURL, @@ -57,7 +57,7 @@ public extension PixelfedClientAuthenticated { withBearerToken: token ) - return try await downloadJson([Status].self, request: request) + return try await downloadJsonWithLink([Status].self, request: request) } func setMarkers(_ markers: [Pixelfed.Markers.Timeline: EntityId]) async throws -> Markers { diff --git a/Vernissage.xcodeproj/project.pbxproj b/Vernissage.xcodeproj/project.pbxproj index fe80c0b..b6953a4 100644 --- a/Vernissage.xcodeproj/project.pbxproj +++ b/Vernissage.xcodeproj/project.pbxproj @@ -1209,7 +1209,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 2.0.1; + MARKETING_VERSION = 2.0.2; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage.widget; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -1243,7 +1243,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 2.0.1; + MARKETING_VERSION = 2.0.2; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage.widget; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -1276,7 +1276,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 2.0.1; + MARKETING_VERSION = 2.0.2; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage.share; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -1308,7 +1308,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 2.0.1; + MARKETING_VERSION = 2.0.2; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage.share; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -1474,7 +1474,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 2.0.1; + MARKETING_VERSION = 2.0.2; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1517,7 +1517,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 2.0.1; + MARKETING_VERSION = 2.0.2; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; diff --git a/Vernissage/Services/HomeTimelineService.swift b/Vernissage/Services/HomeTimelineService.swift index b5a37df..3fa0028 100644 --- a/Vernissage/Services/HomeTimelineService.swift +++ b/Vernissage/Services/HomeTimelineService.swift @@ -43,27 +43,49 @@ public class HomeTimelineService { let client = PixelfedClient(baseURL: accountData.serverUrl).getAuthenticated(token: accessToken) var statuses: [Status] = [] - var newestStatusId = lastSeenStatusId + var latestStatusId: String? = nil + var breakProcesssing = false; // There can be more then 40 newest statuses, that's why we have to sometimes send more then one request. while true { do { - let downloadedStatuses = try await client.getHomeTimeline(minId: newestStatusId, + // Download statuses from the top or the list. + let downloadedStatuses = try await client.getHomeTimeline(maxId: latestStatusId, limit: self.maximumAmountOfDownloadedStatuses, includeReblogs: includeReblogs) - guard let firstStatus = downloadedStatuses.first else { - break + // Iterate througt the list until we go to already visible status by the user. + var temporaryList: [Status] = [] + for downloadedStatus in downloadedStatuses.data { + guard downloadedStatus.id != lastSeenStatusId else { + breakProcesssing = true + break + } + + temporaryList.append(downloadedStatus) } - + + // Remove from the list duplicated statuses. let visibleStatuses = self.getVisibleStatuses(accountId: accountData.id, - statuses: downloadedStatuses, + statuses: temporaryList, hideStatusesWithoutAlt: hideStatusesWithoutAlt, modelContext: modelContext) - + + // Add statuses to the list. statuses.append(contentsOf: visibleStatuses) - newestStatusId = firstStatus.id + // Break when we go to the already visible status. + if breakProcesssing { + break + } + + // When we discovered more then 100 statuses we can break. + if statuses.count > 100 { + break + } + + // Set status Id which should be used to download next portion of the statuses. + latestStatusId = downloadedStatuses.getMaxId() } catch { ErrorService.shared.handle(error, message: "global.error.errorDuringDownloadingNewStatuses") break diff --git a/Vernissage/Views/HomeTimelineView.swift b/Vernissage/Views/HomeTimelineView.swift index c89eec9..3852d4e 100644 --- a/Vernissage/Views/HomeTimelineView.swift +++ b/Vernissage/Views/HomeTimelineView.swift @@ -143,8 +143,14 @@ struct HomeTimelineView: View { HStack { Image(systemName: "arrow.up") .fontWeight(.light) - Text("\(self.applicationState.amountOfNewStatuses)") - .fontWeight(.semibold) + + if self.applicationState.amountOfNewStatuses < 100 { + Text("\(self.applicationState.amountOfNewStatuses)") + .fontWeight(.semibold) + } else { + Text("+99") + .fontWeight(.semibold) + } } .padding(.vertical, 12) .padding(.horizontal, 18) @@ -183,28 +189,28 @@ struct HomeTimelineView: View { // Download statuses from API (which are older then last visible status). let statuses = try await self.loadFromCacheOrApi(timelineCache: accountData.timelineCache) - if statuses.isEmpty { + if statuses.data.isEmpty { self.allItemsLoaded = true return } // Remember last status id returned by API. - self.lastStatusId = statuses.last?.id + self.lastStatusId = statuses.getMaxId() // Get only visible statuses. let visibleStatuses = HomeTimelineService.shared.getVisibleStatuses(accountId: accountId, - statuses: statuses, + statuses: statuses.data, hideStatusesWithoutAlt: self.applicationState.hideStatusesWithoutAlt, modelContext: modelContext) // Remeber first status returned by API in user context (when it's newer then remembered). try AccountDataHandler.shared.update(lastSeenStatusId: nil, - lastLoadedStatusId: statuses.first?.id, + lastLoadedStatusId: statuses.getMinId(), applicationState: self.applicationState, modelContext: modelContext) // Append statuses to viewed. - try ViewedStatusHandler.shared.append(contentsOf: statuses, accountId: accountId, modelContext: modelContext) + try ViewedStatusHandler.shared.append(contentsOf: statuses.data, accountId: accountId, modelContext: modelContext) // Map to view models. let statusModels = visibleStatuses.map({ StatusModel(status: $0) }) @@ -222,24 +228,24 @@ struct HomeTimelineView: View { // Download statuses from API. let statuses = try await self.loadFromApi(maxId: lastStatusId) - if statuses.isEmpty { + if statuses.data.isEmpty { self.allItemsLoaded = true return } // Now we have new last status. - if let lastStatusId = statuses.last?.id { + if let lastStatusId = statuses.getMaxId() { self.lastStatusId = lastStatusId } // Get only visible statuses. let visibleStatuses = HomeTimelineService.shared.getVisibleStatuses(accountId: accountId, - statuses: statuses, + statuses: statuses.data, hideStatusesWithoutAlt: self.applicationState.hideStatusesWithoutAlt, modelContext: modelContext) // Append statuses to viewed. - try ViewedStatusHandler.shared.append(contentsOf: statuses, accountId: accountId, modelContext: modelContext) + try ViewedStatusHandler.shared.append(contentsOf: statuses.data, accountId: accountId, modelContext: modelContext) // Map to view models. let statusModels = visibleStatuses.map({ StatusModel(status: $0) }) @@ -260,29 +266,29 @@ struct HomeTimelineView: View { // Download statuses from API. let statuses = try await self.loadFromApi() - if statuses.isEmpty { + if statuses.data.isEmpty { self.allItemsLoaded = true return } // Remember last status id returned by API. - self.lastStatusId = statuses.last?.id + self.lastStatusId = statuses.getMaxId() // Get only visible statuses. let visibleStatuses = HomeTimelineService.shared.getVisibleStatuses(accountId: accountId, - statuses: statuses, + statuses: statuses.data, hideStatusesWithoutAlt: self.applicationState.hideStatusesWithoutAlt, modelContext: modelContext) // Remeber first status returned by API in user context (when it's newer then remembered). try AccountDataHandler.shared.update(lastSeenStatusId: self.statusViewModels.first?.id, - lastLoadedStatusId: statuses.first?.id, + lastLoadedStatusId: statuses.getMinId(), statuses: statuses, applicationState: self.applicationState, modelContext: modelContext) // Append statuses to viewed. - try ViewedStatusHandler.shared.append(contentsOf: statuses, accountId: accountId, modelContext: modelContext) + try ViewedStatusHandler.shared.append(contentsOf: statuses.data, accountId: accountId, modelContext: modelContext) // Map to view models. let statusModels = visibleStatuses.map({ StatusModel(status: $0) }) @@ -297,24 +303,22 @@ struct HomeTimelineView: View { self.applicationState.amountOfNewStatuses = 0 } - private func loadFromCacheOrApi(timelineCache: String?) async throws -> [Status] { - if let timelineCache, let timelineCacheData = timelineCache.data(using: .utf8) { - let statusesFromCache = try? JSONDecoder().decode([Status].self, from: timelineCacheData) - if let statusesFromCache { - return statusesFromCache - } + private func loadFromCacheOrApi(timelineCache: String?) async throws -> Linkable<[Status]> { + if let timelineCache, let timelineCacheData = timelineCache.data(using: .utf8), + let statusesFromCache = try? JSONDecoder().decode(Linkable<[Status]>.self, from: timelineCacheData) { + return statusesFromCache } return try await self.loadFromApi() } - private func loadFromApi(maxId: String? = nil, sinceId: String? = nil, minId: String? = nil) async throws -> [Status] { + private func loadFromApi(maxId: String? = nil, sinceId: String? = nil, minId: String? = nil) async throws -> Linkable<[Status]> { return try await self.client.publicTimeline?.getHomeTimeline( maxId: maxId, sinceId: sinceId, minId: minId, limit: self.defaultLimit, - includeReblogs: self.applicationState.showReboostedStatuses) ?? [] + includeReblogs: self.applicationState.showReboostedStatuses) ?? Linkable(data: []) } private func calculateOffset() { diff --git a/Vernissage/Views/StatusesView.swift b/Vernissage/Views/StatusesView.swift index 29934d8..788392d 100644 --- a/Vernissage/Views/StatusesView.swift +++ b/Vernissage/Views/StatusesView.swift @@ -182,29 +182,29 @@ struct StatusesView: View { let statuses = try await self.loadFromApi() - if statuses.isEmpty { + if statuses.data.isEmpty { self.allItemsLoaded = true return } // Remember last status id returned by API. - self.lastStatusId = statuses.last?.id + self.lastStatusId = statuses.getMaxId() // Get only visible statuses. let visibleStatuses = HomeTimelineService.shared.getVisibleStatuses(accountId: accountId, - statuses: statuses, + statuses: statuses.data, hideStatusesWithoutAlt: self.applicationState.hideStatusesWithoutAlt, modelContext: modelContext) if self.listType == .home { // Remeber first status returned by API in user context (when it's newer then remembered). try AccountDataHandler.shared.update(lastSeenStatusId: nil, - lastLoadedStatusId: statuses.first?.id, + lastLoadedStatusId: statuses.getMinId(), applicationState: self.applicationState, modelContext: modelContext) // Append statuses to viewed. - try ViewedStatusHandler.shared.append(contentsOf: statuses, accountId: accountId, modelContext: modelContext) + try ViewedStatusHandler.shared.append(contentsOf: statuses.data, accountId: accountId, modelContext: modelContext) } // Map to view models. @@ -221,25 +221,25 @@ struct StatusesView: View { if let lastStatusId = self.lastStatusId, let accountId = self.applicationState.account?.id { let statuses = try await self.loadFromApi(maxId: lastStatusId) - if statuses.isEmpty { + if statuses.data.isEmpty { self.allItemsLoaded = true return } // Now we have new last status. - if let lastStatusId = statuses.last?.id { + if let lastStatusId = statuses.getMaxId() { self.lastStatusId = lastStatusId } // Get only visible statuses. let visibleStatuses = HomeTimelineService.shared.getVisibleStatuses(accountId: accountId, - statuses: statuses, + statuses: statuses.data, hideStatusesWithoutAlt: self.applicationState.hideStatusesWithoutAlt, modelContext: modelContext) if self.listType == .home { // Append statuses to viewed. - try ViewedStatusHandler.shared.append(contentsOf: statuses, accountId: accountId, modelContext: modelContext) + try ViewedStatusHandler.shared.append(contentsOf: statuses.data, accountId: accountId, modelContext: modelContext) } // Map to view models. @@ -260,29 +260,29 @@ struct StatusesView: View { let statuses = try await self.loadFromApi() - if statuses.isEmpty { + if statuses.data.isEmpty { self.allItemsLoaded = true return } // Remember last status id returned by API. - self.lastStatusId = statuses.last?.id + self.lastStatusId = statuses.getMaxId() // Get only visible statuses. let visibleStatuses = HomeTimelineService.shared.getVisibleStatuses(accountId: accountId, - statuses: statuses, + statuses: statuses.data, hideStatusesWithoutAlt: self.applicationState.hideStatusesWithoutAlt, modelContext: modelContext) if self.listType == .home { // Remeber first status returned by API in user context (when it's newer then remembered). try AccountDataHandler.shared.update(lastSeenStatusId: self.statusViewModels.first?.id, - lastLoadedStatusId: statuses.first?.id, + lastLoadedStatusId: statuses.getMinId(), applicationState: self.applicationState, modelContext: modelContext) // Append statuses to viewed. - try ViewedStatusHandler.shared.append(contentsOf: statuses, accountId: accountId, modelContext: modelContext) + try ViewedStatusHandler.shared.append(contentsOf: statuses.data, accountId: accountId, modelContext: modelContext) } // Map to view models. @@ -296,7 +296,7 @@ struct StatusesView: View { self.statusViewModels = statusModels } - private func loadFromApi(maxId: String? = nil, sinceId: String? = nil, minId: String? = nil) async throws -> [Status] { + private func loadFromApi(maxId: String? = nil, sinceId: String? = nil, minId: String? = nil) async throws -> Linkable<[Status]> { switch self.listType { case .home: return try await self.client.publicTimeline?.getHomeTimeline( @@ -304,40 +304,44 @@ struct StatusesView: View { sinceId: sinceId, minId: minId, limit: self.defaultLimit, - includeReblogs: self.applicationState.showReboostedStatuses) ?? [] + includeReblogs: self.applicationState.showReboostedStatuses) ?? Linkable(data: []) case .local: return try await self.client.publicTimeline?.getStatuses( local: true, maxId: maxId, sinceId: sinceId, minId: minId, - limit: self.defaultLimit) ?? [] + limit: self.defaultLimit) ?? Linkable(data: []) case .federated: return try await self.client.publicTimeline?.getStatuses( remote: true, maxId: maxId, sinceId: sinceId, minId: minId, - limit: self.defaultLimit) ?? [] + limit: self.defaultLimit) ?? Linkable(data: []) case .favourites: - return try await self.client.accounts?.favourites( + let favourites = try await self.client.accounts?.favourites( maxId: maxId, sinceId: sinceId, minId: minId, limit: self.defaultLimit) ?? [] + + return Linkable(data: favourites) case .bookmarks: - return try await self.client.accounts?.bookmarks( + let bookmarks = try await self.client.accounts?.bookmarks( maxId: maxId, sinceId: sinceId, minId: minId, limit: self.defaultLimit) ?? [] + + return Linkable(data: bookmarks) case .hashtag(let tag): let hashtagsFromApi = try await self.client.search?.search(query: tag, resultsType: .hashtags) guard let hashtagsFromApi = hashtagsFromApi, hashtagsFromApi.hashtags.isEmpty == false else { ToastrService.shared.showError(title: LocalizedStringResource("global.error.hashtagNotExists"), imageSystemName: "exclamationmark.octagon") dismiss() - return [] + return Linkable(data: []) } return try await self.client.publicTimeline?.getTagStatuses( @@ -345,7 +349,7 @@ struct StatusesView: View { maxId: maxId, sinceId: sinceId, minId: minId, - limit: self.defaultLimit) ?? [] + limit: self.defaultLimit) ?? Linkable(data: []) } } diff --git a/Vernissage/Widgets/ImagesGrid.swift b/Vernissage/Widgets/ImagesGrid.swift index 74f1bcd..3bac12a 100644 --- a/Vernissage/Widgets/ImagesGrid.swift +++ b/Vernissage/Widgets/ImagesGrid.swift @@ -75,7 +75,7 @@ struct ImagesGrid: View { do { let statusesFromApi = try await self.loadStatuses() - let statusesWithImages = statusesFromApi.getStatusesWithImagesOnly() + let statusesWithImages = statusesFromApi.data.getStatusesWithImagesOnly() let photoUrls = self.getPhotoUrls(statuses: statusesWithImages) self.prefetch(photoUrls: photoUrls) @@ -119,15 +119,21 @@ struct ImagesGrid: View { } } - private func loadStatuses() async throws -> [Status] { + private func loadStatuses() async throws -> Linkable<[Status]> { switch self.gridType { case .hashtag(let name): return try await self.client.publicTimeline?.getTagStatuses( tag: name, local: true, - limit: 10) ?? [] + limit: 10) ?? Linkable(data: []) case .account(let accountId, _, _): - return try await self.client.accounts?.statuses(createdBy: accountId, onlyMedia: true, limit: 10) ?? [] + let accountStatuses = try await self.client.accounts?.statuses( + createdBy: accountId, + onlyMedia: true, + limit: 10 + ) ?? [] + + return Linkable(data: accountStatuses) } } diff --git a/VernissageWidget/PhotoWidget/Service/StatusFetcher.swift b/VernissageWidget/PhotoWidget/Service/StatusFetcher.swift index a786805..01e0483 100644 --- a/VernissageWidget/PhotoWidget/Service/StatusFetcher.swift +++ b/VernissageWidget/PhotoWidget/Service/StatusFetcher.swift @@ -33,7 +33,7 @@ public class StatusFetcher { let client = PixelfedClient(baseURL: account.serverUrl).getAuthenticated(token: accessToken) let statuses = try await client.getHomeTimeline(limit: 20, includeReblogs: defaultSettings.showReboostedStatuses, timeoutInterval: 5.0) - let widgetEntries = await self.prepare(statuses: statuses, length: length) + let widgetEntries = await self.prepare(statuses: statuses.data, length: length) return widgetEntries } @@ -49,11 +49,11 @@ public class StatusFetcher { let accountData = AccountDataHandler.shared.getAccountData(accountId: accountId, modelContext: modelContext) guard let timelineCache = accountData?.timelineCache, let timelineCacheData = timelineCache.data(using: .utf8), - let statusesFromCache = try? JSONDecoder().decode([Status].self, from: timelineCacheData) else { + let statusesFromCache = try? JSONDecoder().decode(Linkable<[Status]>.self, from: timelineCacheData) else { return [self.placeholder()] } - let widgetEntries = await self.prepare(statuses: statusesFromCache, length: length) + let widgetEntries = await self.prepare(statuses: statusesFromCache.data, length: length) return widgetEntries } From 42795333718b9ff78eb3d94d00d4d66a9a9ac738 Mon Sep 17 00:00:00 2001 From: Marcin Czachurski Date: Tue, 21 Nov 2023 12:50:40 +0100 Subject: [PATCH 05/53] Fix not displayed rebloged statuses on timeline --- CoreData/ViewedStatusHandler.swift | 4 ++-- Vernissage.xcodeproj/project.pbxproj | 12 ++++++------ Vernissage/Services/HomeTimelineService.swift | 6 ++++-- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/CoreData/ViewedStatusHandler.swift b/CoreData/ViewedStatusHandler.swift index d79a658..9339e1d 100644 --- a/CoreData/ViewedStatusHandler.swift +++ b/CoreData/ViewedStatusHandler.swift @@ -44,8 +44,8 @@ class ViewedStatusHandler { let statusId = status.id var fetchDescriptor = FetchDescriptor( - // Here we are finding status which is other then checked status AND orginal status has been visible OR same reblogged by different user status has been visible. - predicate: #Predicate { $0.pixelfedAccount?.id == accountId && $0.id != statusId && ($0.id == reblogId || $0.reblogId == reblogId) } + // Here we are finding status which is older then checked status AND orginal status has been visible OR same reblogged by different user status has been visible. + predicate: #Predicate { $0.pixelfedAccount?.id == accountId && $0.id < statusId && ($0.id == reblogId || $0.reblogId == reblogId) } ) fetchDescriptor.fetchLimit = 1 fetchDescriptor.includePendingChanges = true diff --git a/Vernissage.xcodeproj/project.pbxproj b/Vernissage.xcodeproj/project.pbxproj index b6953a4..99409e8 100644 --- a/Vernissage.xcodeproj/project.pbxproj +++ b/Vernissage.xcodeproj/project.pbxproj @@ -1209,7 +1209,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 2.0.2; + MARKETING_VERSION = 2.0.3; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage.widget; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -1243,7 +1243,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 2.0.2; + MARKETING_VERSION = 2.0.3; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage.widget; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -1276,7 +1276,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 2.0.2; + MARKETING_VERSION = 2.0.3; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage.share; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -1308,7 +1308,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 2.0.2; + MARKETING_VERSION = 2.0.3; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage.share; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -1474,7 +1474,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 2.0.2; + MARKETING_VERSION = 2.0.3; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1517,7 +1517,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 2.0.2; + MARKETING_VERSION = 2.0.3; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; diff --git a/Vernissage/Services/HomeTimelineService.swift b/Vernissage/Services/HomeTimelineService.swift index 3fa0028..effd048 100644 --- a/Vernissage/Services/HomeTimelineService.swift +++ b/Vernissage/Services/HomeTimelineService.swift @@ -102,9 +102,10 @@ public class HomeTimelineService { public func getVisibleStatuses(accountId: String, statuses: [Status], hideStatusesWithoutAlt: Bool, modelContext: ModelContext) -> [Status] { // We have to include in the counter only statuses with images. let statusesWithImagesOnly = statuses.getStatusesWithImagesOnly() + let statusesFromOldestToNewest = statusesWithImagesOnly.reversed() var visibleStatuses: [Status] = [] - for status in statusesWithImagesOnly { + for status in statusesFromOldestToNewest { // We have to hide statuses without ALT text. if hideStatusesWithoutAlt && status.statusContainsAltText() == false { @@ -134,7 +135,8 @@ public class HomeTimelineService { visibleStatuses.append(status) } - return visibleStatuses + // Return statuses from newest to oldest. + return visibleStatuses.reversed() } private func hasBeenAlreadyOnTimeline(accountId: String, status: Status, modelContext: ModelContext) -> Bool { From 6d233299a5df51012b7d8b86105b01f2f993a0fe Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Wed, 22 Nov 2023 11:05:54 +0100 Subject: [PATCH 06/53] remaining translations --- Localization/de_DE.lproj/Localizable.strings | 254 +++++++++---------- 1 file changed, 127 insertions(+), 127 deletions(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index ef981dd..4d83c29 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -1,5 +1,5 @@ // MARK: Common strings. -"global.title.contentWarning" = "Delikater Inhalt"; +"global.title.contentWarning" = "Inhaltswarnung"; "global.title.seePost" = "Beitrag ansehen"; "global.title.refresh" = "Aktualisieren"; "global.title.momentsAgo" = "gerade eben"; @@ -9,19 +9,19 @@ "global.title.showMore" = "Mehr anzeigen"; "global.title.showLess" = "Weniger anzeigen"; "global.title.close" = "Schließen"; -"global.error.refreshingCredentialsTitle" = "Zugangsdaten konnten nicht erneuert werden."; +"global.error.refreshingCredentialsTitle" = "Zugangsdaten konnten nicht bestätigt werden."; "global.error.refreshingCredentialsSubtitle" = "Bitte erneut in Pixelfed einloggen."; // MARK: Global errors. -"global.error.unexpected" = "Überraschender Fehler."; +"global.error.unexpected" = "Unerwarteter Fehler."; "global.error.statusesNotRetrieved" = "Beiträge nicht geladen."; "global.error.errorDuringDownloadStatuses" = "Fehler beim Laden der Beiträge vom Server."; -"global.error.errorDuringDownloadHashtag" = "Fehler beim Laden des Tags vom Server."; +"global.error.errorDuringDownloadHashtag" = "Fehler beim Laden des Hashtags vom Server."; "global.error.hashtagNotExists" = "Hashtag existiert nicht."; "global.error.errorDuringImageDownload" = "Bild kann nicht geladen werden."; "global.error.canceledImageDownload" = "Laden der Bildes abgebrochen."; "global.error.errorDuringDataLoad" = "Laden von Daten fehlgeschlagen."; -"global.error.errorDuringUserRead" = "Nutzer kann nicht geladen werden."; +"global.error.errorDuringUserRead" = "Benutzer kann nicht geladen werden."; "global.error.badUrlServer" = "Ungültige Server-URL."; "global.error.accessTokenNotFound" = "Zugangstoken nicht gefunden."; "global.error.errorDuringDownloadStatus" = "Fehler beim Laden vom Server."; @@ -32,8 +32,8 @@ "mainview.tab.localTimeline" = "Lokal"; "mainview.tab.federatedTimeline" = "Föderiert"; "mainview.tab.trendingPhotos" = "Fotos"; -"mainview.tab.trendingTags" = "Tags"; -"mainview.tab.trendingAccounts" = "Accounts"; +"mainview.tab.trendingTags" = "Hashtags"; +"mainview.tab.trendingAccounts" = "Benutzer"; "mainview.tab.userProfile" = "Profil"; "mainview.tab.notifications" = "Benachrichtigungen"; "mainview.tab.search" = "Suche"; @@ -43,10 +43,10 @@ "mainview.menu.settings" = "Einstellungen"; // MARK: Main view (error notifications). -"mainview.error.switchAccounts" = "Konnte Accounts nicht wechseln."; +"mainview.error.switchAccounts" = "Konnte Benutzer nicht wechseln."; // MARK: Home timeline. -"home.title.allCaughtUp" = "Alles gesehen"; +"home.title.allCaughtUp" = "Das war's, alles gesehen"; "home.title.noPhotos" = "Hier sind leider keine Bilder."; // MARK: Statuses timeline (local/federated/favourite/bookmarks etc.). @@ -55,11 +55,11 @@ "statuses.navigationBar.favourites" = "Favoriten"; "statuses.navigationBar.bookmarks" = "Lesezeichen"; "statuses.title.noPhotos" = "Hier sind leider keine Bilder."; -"statuses.title.tagFollowed" = "Du folgst dem Tag."; -"statuses.title.tagUnfollowed" = "Du folgst dem Tag nicht mehr."; +"statuses.title.tagFollowed" = "Du folgst dem Hashtag."; +"statuses.title.tagUnfollowed" = "Du folgst dem Hashtag nicht mehr."; "statuses.error.loadingStatusesFailed" = "Laden der Beiträge fehlgeschlagen."; -"statuses.error.tagFollowFailed" = "Das Folgen des Tags ist fehlgeschlagen."; -"statuses.error.tagUnfollowFailed" = "Das nicht mehr Folgen des Tags ist fehlgeschlagen."; +"statuses.error.tagFollowFailed" = "Das Folgen des Hashtags ist fehlgeschlagen."; +"statuses.error.tagUnfollowFailed" = "Das nicht mehr Folgen des Hashtags ist fehlgeschlagen."; // Mark: Search view. "search.navigationBar.title" = "Suche"; @@ -78,12 +78,12 @@ "trendingStatuses.title.noPhotos" = "Hier sind leider keine Bilder."; // Mark: Trending tags. -"tags.navigationBar.trendingTitle" = "Tags"; -"tags.navigationBar.searchTitle" = "Tags"; -"tags.navigationBar.followedTitle" = "Tags denen Du folgst"; -"tags.title.noTags" = "Hier sind leider keine Tags."; +"tags.navigationBar.trendingTitle" = "Hashtags"; +"tags.navigationBar.searchTitle" = "Hashtags"; +"tags.navigationBar.followedTitle" = "Hashtags denen Du folgst"; +"tags.title.noTags" = "Hier sind leider keine Hashtags."; "tags.title.amountOfPosts" = "%d Beiträge"; -"tags.error.loadingTagsFailed" = "Laden der Tags fehlgeschlagen."; +"tags.error.loadingTagsFailed" = "Laden der Hashtags fehlgeschlagen."; // Mark: Trending accounts. "trendingAccounts.navigationBar.title" = "Konten"; @@ -99,7 +99,7 @@ "userProfile.title.block" = "Blockieren"; "userProfile.title.favourites" = "Favoriten"; "userProfile.title.bookmarks" = "Lesezeichen"; -"userProfile.title.followedTags" = "Tags denen Du folgst"; +"userProfile.title.followedTags" = "Hashtags denen Du folgst"; "userProfile.title.posts" = "Beiträge"; "userProfile.title.followers" = "Leute die Dir folgen"; "userProfile.title.following" = "Leute denen Du folgst"; @@ -119,7 +119,7 @@ "userProfile.title.cancelRequestFollow" = "Anfrage abbrechen"; "userProfile.title.followRequests" = "Anfragen"; "userProfile.title.privateProfileTitle" = "Dieses Profil ist privat."; -"userProfile.title.privateProfileSubtitle" = "Nur freigeschaltete folgende können Beiträge sehen."; +"userProfile.title.privateProfileSubtitle" = "Nur Freigeschaltete können Beiträge sehen."; "userProfile.error.notExists" = "Konto existiert nicht."; "userProfile.error.loadingAccountFailed" = "Fehler beim Laden vom Server."; "userProfile.error.muting" = "(Nicht mehr) Stummschalten fehlgeschlagen."; @@ -234,141 +234,141 @@ "settings.title.bottomLeftMenu" = "Unten links"; "settings.title.showAvatars" = "Avatare anzeigen"; "settings.title.showAvatarsOnTimeline" = "Avatare werden in Listen angezeigt"; -"settings.title.showFavourite" = "Show favourites"; -"settings.title.showFavouriteOnTimeline" = "Favourites will be displayed on timelines"; -"settings.title.showAltText" = "Show ALT icon"; -"settings.title.showAltTextOnTimeline" = "ALT icon will be displayed on timelines"; -"settings.title.warnAboutMissingAltTitle" = "Warn of missing ALT text"; -"settings.title.warnAboutMissingAltDescription" = "A warning about missing ALT texts will be displayed before publishing new post."; +"settings.title.showFavourite" = "Favoriten anzeigen"; +"settings.title.showFavouriteOnTimeline" = "Favoriten werden in der Zeitleiste angezeigt"; +"settings.title.showAltText" = "ALT Icon anzeigen"; +"settings.title.showAltTextOnTimeline" = "ALT Icons werden in der Zeitleiste angezeigt"; +"settings.title.warnAboutMissingAltTitle" = "Warne mich bei fehlenden ALT Texten"; +"settings.title.warnAboutMissingAltDescription" = "Eine Warnung wird bei fehlenden ALT Texten angezeigt bevor ein Beitrag veröffentlicht wird."; // Mark: Signin view. -"signin.navigationBar.title" = "Sign in to Pixelfed"; -"signin.title.serverAddress" = "Server address"; -"signin.title.signIn" = "Sign in"; -"signin.title.enterServerAddress" = "Enter server address"; -"signin.title.howToJoinLink" = "How to join Pixelfed"; -"signin.title.chooseServer" = "Or choose Pixelfed server"; -"signin.title.amountOfUsers" = "%d users"; -"signin.title.amountOStatuses" = "%d statuses"; -"signin.error.communicationFailed" = "Communication with server failed."; +"signin.navigationBar.title" = "In Pixelfed einloggen"; +"signin.title.serverAddress" = "Server Adresse"; +"signin.title.signIn" = "Einloggen"; +"signin.title.enterServerAddress" = "Server Adresse eingeben"; +"signin.title.howToJoinLink" = "Wie man Pixelfed beitritt"; +"signin.title.chooseServer" = "oder wähle einen Pixelfed Server"; +"signin.title.amountOfUsers" = "%d Benutzer"; +"signin.title.amountOStatuses" = "%d Beiträge"; +"signin.error.communicationFailed" = "Kommunikation mit dem Server fehlgeschlagen."; // Mark: Status view. "status.navigationBar.title" = "Details"; -"status.title.uploaded" = "Uploaded"; +"status.title.uploaded" = "Hochgeladen"; "status.title.via" = "via %@"; "status.title.reboostedBy" = "Boosted by"; -"status.title.favouritedBy" = "Favourited by"; -"status.title.openInBrowser" = "Open in browser"; -"status.title.shareStatus" = "Share status"; -"status.title.yourStatus" = "Your status"; -"status.title.delete" = "Delete"; +"status.title.favouritedBy" = "Favorisiert von"; +"status.title.openInBrowser" = "Im Browser öffnen"; +"status.title.shareStatus" = "Beitrag teilen"; +"status.title.yourStatus" = "Dein Beitrag"; +"status.title.delete" = "Löschen"; "status.title.reboosted" = "Boosted"; -"status.title.unreboosted" = "Unboosted"; -"status.title.favourited" = "Favourited"; -"status.title.unfavourited" = "Unfavourited"; -"status.title.bookmarked" = "Bookmarked"; -"status.title.unbookmarked" = "Unbookmarked"; -"status.title.statusDeleted" = "Status deleted"; +"status.title.unreboosted" = "Boot rückgängig gemacht"; +"status.title.favourited" = "Favorisiert"; +"status.title.unfavourited" = "Favorisieren rückgängig gemacht"; +"status.title.bookmarked" = "Lesezeichen gesetzt"; +"status.title.unbookmarked" = "Lesezeichen gelöscht"; +"status.title.statusDeleted" = "Beitrag gelöscht"; "status.title.reboost" = "Boost"; -"status.title.unreboost" = "Unboost"; -"status.title.favourite" = "Favourite"; -"status.title.unfavourite" = "Unfavourite"; -"status.title.bookmark" = "Bookmark"; -"status.title.unbookmark" = "Unbookmark"; -"status.title.comment" = "Comment"; -"status.title.report" = "Report"; -"status.title.saveImage" = "Save image"; -"status.title.showMediaDescription" = "Show media description"; -"status.title.mediaDescription" = "Media description"; -"status.title.shareImage" = "Share image"; +"status.title.unreboost" = "Boost rückgängig machen"; +"status.title.favourite" = "Favorisieren"; +"status.title.unfavourite" = "Nicht mehr favorisieren"; +"status.title.bookmark" = "Lesezeichen"; +"status.title.unbookmark" = "Lesezeichen löschen"; +"status.title.comment" = "Kommentieren"; +"status.title.report" = "Melden"; +"status.title.saveImage" = "Bild speichern"; +"status.title.showMediaDescription" = "Medienbeschreibung anzeigen"; +"status.title.mediaDescription" = "Medienbeschreibung"; +"status.title.shareImage" = "Bild teilen"; "status.title.altText" = "ALT"; -"status.error.loadingStatusFailed" = "Loading status failed."; -"status.error.notFound" = "Status not existing anymore."; -"status.error.loadingCommentsFailed" = "Comments cannot be downloaded."; -"status.error.reboostFailed" = "Boost action failed."; -"status.error.favouriteFailed" = "Favourite action failed."; -"status.error.bookmarkFailed" = "Bookmark action failed."; -"status.error.deleteFailed" = "Delete action failed."; +"status.error.loadingStatusFailed" = "Beitrag laden fehlgeschlagen."; +"status.error.notFound" = "Beitrag existiert nicht mehr."; +"status.error.loadingCommentsFailed" = "Kommentare können nicht geladen werden."; +"status.error.reboostFailed" = "Boost fehlgeschlagen."; +"status.error.favouriteFailed" = "Favorisieren fehlgeschlagen."; +"status.error.bookmarkFailed" = "Lesezeichen setzen fehlgeschlagen."; +"status.error.deleteFailed" = "Löschen fehlgeschlagen."; // Mark: Accounts view. -"accounts.navigationBar.followers" = "Followers"; -"accounts.navigationBar.following" = "Following"; -"accounts.navigationBar.favouritedBy" = "Favourited by"; -"accounts.navigationBar.reboostedBy" = "Boosted by"; -"accounts.navigationBar.blocked" = "Blocked accounts"; -"accounts.navigationBar.mutes" = "Muted accounts"; -"accounts.title.noAccounts" = "Unfortunately, there is no one here."; -"accounts.error.loadingAccountsFailed" = "Loading accounts failed."; +"accounts.navigationBar.followers" = "Folgende"; +"accounts.navigationBar.following" = "Folge"; +"accounts.navigationBar.favouritedBy" = "Favorisiert"; +"accounts.navigationBar.reboostedBy" = "Boosted"; +"accounts.navigationBar.blocked" = "Blockierte Benutzer"; +"accounts.navigationBar.mutes" = "Stummgeschaltete Benutzer"; +"accounts.title.noAccounts" = "Hier ist leider niemand."; +"accounts.error.loadingAccountsFailed" = "Benutzer laden fehlgeschlagen."; // Mark: Third party view. -"thirdParty.navigationBar.title" = "Third party"; +"thirdParty.navigationBar.title" = "Dritte"; // Mark: Widget view. -"widget.title.photoDescription" = "Widget with photos from Pixelfed."; -"widget.title.qrCodeDescription" = "Widget with QR Code to your Pixelfed profile."; +"widget.title.photoDescription" = "Widget mit Fotos aus Pixelfed."; +"widget.title.qrCodeDescription" = "Widget mit QR Code zu Deinem Pixelfed Profil."; // Mark: In-app purchases. "purchase.donut.title" = "Donut"; -"purchase.donut.description" = "Treat me to a doughnut."; -"purchase.coffee.title" = "Coffee"; -"purchase.coffee.description" = "Treat me to a coffee."; -"purchase.cake.title" = "Coffee & cake"; -"purchase.cake.description" = "Treat me to a coffee and cake."; +"purchase.donut.description" = "Gib mir einen Donut aus."; +"purchase.coffee.title" = "Kaffee"; +"purchase.coffee.description" = "Gib mir einen Kaffee."; +"purchase.cake.title" = "Kaffee und Kuchen"; +"purchase.cake.description" = "Lade mich zu Kaffee und Kuchen ein."; // Mark: Edit profile. -"editProfile.navigationBar.title" = "Edit profile"; -"editProfile.title.displayName" = "Display name"; -"editProfile.title.bio" = "Bio"; -"editProfile.title.website" = "Website"; -"editProfile.title.save" = "Save"; -"editProfile.title.accountSaved" = "Profile has been updated."; -"editProfile.title.photoInfo" = "The changed photo will be visible in the app and on the website with a small delay."; -"editProfile.title.privateAccount" = "Private account"; -"editProfile.title.privateAccountInfo" = "When your account is private, only people you approve can see your photos and videos on Pixelfed. Your existing followers won't be affected."; -"editProfile.error.saveAccountFailed" = "Saving profile failed."; -"editProfile.error.loadingAvatarFailed" = "Loading avatar failed."; -"editProfile.error.noProfileData" = "Profile data cannot be displayed."; -"editProfile.error.loadingAccountFailed" = "Error during download account from server."; +"editProfile.navigationBar.title" = "Profil bearbeiten"; +"editProfile.title.displayName" = "Anzeigename"; +"editProfile.title.bio" = "Biografie"; +"editProfile.title.website" = "Webseite"; +"editProfile.title.save" = "Speichern"; +"editProfile.title.accountSaved" = "Profil wurde aktualisiert."; +"editProfile.title.photoInfo" = "Das geänderte Profilbild wird mit einer kurzen Verzögerung in der App und auf der Webseite sichtbar sein."; +"editProfile.title.privateAccount" = "Privater Account"; +"editProfile.title.privateAccountInfo" = "Wenn Dein Account privat ist, können nur Nutzer die Du bestätigst Deine Fotos und Videos auf Pixelfed sehen. Benutzer die Dir jetzt schon folgen sind nicht betroffen."; +"editProfile.error.saveAccountFailed" = "Profil speichern fehlgeschlagen."; +"editProfile.error.loadingAvatarFailed" = "Avatar laden fehlgeschlagen."; +"editProfile.error.noProfileData" = "Profildaten können nicht angezeigt werden."; +"editProfile.error.loadingAccountFailed" = "Fehler beim Laden des Profils vom Server."; // Mark: Instance information. -"instance.navigationBar.title" = "Instance"; -"instance.title.instanceInfo" = "Instance info"; +"instance.navigationBar.title" = "Instanz"; +"instance.title.instanceInfo" = "Instanz Info"; "instance.title.name" = "Name"; -"instance.title.address" = "Address"; +"instance.title.address" = "Addresse"; "instance.title.email" = "Email"; "instance.title.version" = "Version"; -"instance.title.users" = "Users"; -"instance.title.posts" = "Posts"; +"instance.title.users" = "Benutzer"; +"instance.title.posts" = "Beiträge"; "instance.title.domains" = "Domains"; -"instance.title.registrations" = "Registrations"; -"instance.title.approvalRequired" = "Approval required"; -"instance.title.rules" = "Instance rules"; -"instance.title.contact" = "Contact"; -"instance.title.pixelfedAccount" = "Pixelfed account"; -"instance.error.noInstanceData" = "Instance data cannot be displayed."; -"instance.error.loadingDataFailed" = "Error during download instance data from server."; +"instance.title.registrations" = "Registrierungen"; +"instance.title.approvalRequired" = "Genehmigung erforderlich"; +"instance.title.rules" = "Instanzregeln"; +"instance.title.contact" = "Kontact"; +"instance.title.pixelfedAccount" = "Pixelfed Konto"; +"instance.error.noInstanceData" = "Instanzdaten können nicht angezeigt werden."; +"instance.error.loadingDataFailed" = "Fehler beim Laden der Instanzdaten vom Server."; // Mark: Report screen. -"report.navigationBar.title" = "Report"; -"report.title.close" = "Close"; -"report.title.send" = "Send"; -"report.title.userReported" = "User has been reported"; -"report.title.postReported" = "Post has been reported"; -"report.title.reportType" = "Type of abuse"; -"report.title.spam" = "It's a spam"; -"report.title.sensitive" = "Nudity or sexual activity"; -"report.title.abusive" = "Hate speech or symbols"; -"report.title.underage" = "Underage account"; -"report.title.violence" = "Violence or dangerous organisations"; -"report.title.copyright" = "Copyright infringement"; -"report.title.impersonation" = "Impersonation"; -"report.title.scam" = "Bullying or harassment"; -"report.title.terrorism" = "Terrorism"; -"report.error.notReported" = "Error during sending report."; +"report.navigationBar.title" = "Melden"; +"report.title.close" = "Schließen"; +"report.title.send" = "Senden"; +"report.title.userReported" = "Benutzer wurde gemeldet"; +"report.title.postReported" = "Beitrag wurde gemeldet"; +"report.title.reportType" = "Art des Mißbrauchs"; +"report.title.spam" = "Spam"; +"report.title.sensitive" = "Nacktheit oder Sex"; +"report.title.abusive" = "Hassrede oder Symbole"; +"report.title.underage" = "Minderjähriger Benutzer"; +"report.title.violence" = "Gewalt oder gefährliche Organisationen"; +"report.title.copyright" = "Urheberrechtsverletzung"; +"report.title.impersonation" = "Identitätsdiebstahl"; +"report.title.scam" = "Beleidigung"; +"report.title.terrorism" = "Terrorismus"; +"report.error.notReported" = "Fehler beim Melden."; // Mark: Following requests. -"followingRequests.navigationBar.title" = "Following requests"; -"followingRequests.title.approve" = "Approve"; -"followingRequests.title.reject" = "Reject"; -"followingRequests.error.approve" = "Error during approving request."; -"followingRequests.error.reject" = "Error during rejecting request."; +"followingRequests.navigationBar.title" = "Folgeanfragen"; +"followingRequests.title.approve" = "Genehmigen"; +"followingRequests.title.reject" = "Ablehnen"; +"followingRequests.error.approve" = "Fehler beim Genehmigen."; +"followingRequests.error.reject" = "Fehler beim Ablehnen."; From bb79f78b6491fedf4e238046e357f1ee562ff7a4 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:17:13 +0100 Subject: [PATCH 07/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 4d83c29..7050a1d 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -19,7 +19,7 @@ "global.error.errorDuringDownloadHashtag" = "Fehler beim Laden des Hashtags vom Server."; "global.error.hashtagNotExists" = "Hashtag existiert nicht."; "global.error.errorDuringImageDownload" = "Bild kann nicht geladen werden."; -"global.error.canceledImageDownload" = "Laden der Bildes abgebrochen."; +"global.error.canceledImageDownload" = "Laden des Bildes abgebrochen."; "global.error.errorDuringDataLoad" = "Laden von Daten fehlgeschlagen."; "global.error.errorDuringUserRead" = "Benutzer kann nicht geladen werden."; "global.error.badUrlServer" = "Ungültige Server-URL."; From c18263c9c7ed1e543c91ab2c491e061cc361c4b3 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:17:44 +0100 Subject: [PATCH 08/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 7050a1d..927f877 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -25,7 +25,7 @@ "global.error.badUrlServer" = "Ungültige Server-URL."; "global.error.accessTokenNotFound" = "Zugangstoken nicht gefunden."; "global.error.errorDuringDownloadStatus" = "Fehler beim Laden vom Server."; -"global.error.errorDuringPurchaseVerification" = "Verifikation des Einkaufs fehlgeschlagen."; +"global.error.errorDuringPurchaseVerification" = "Konnte Einkauf nicht verifizieren."; // MARK: Main view (main navigation bar). "mainview.tab.homeTimeline" = "Zuhause"; From a3402120cf30f5e94a55958f3527594b4d466f4b Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:17:56 +0100 Subject: [PATCH 09/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 927f877..e0985ff 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -46,7 +46,7 @@ "mainview.error.switchAccounts" = "Konnte Benutzer nicht wechseln."; // MARK: Home timeline. -"home.title.allCaughtUp" = "Das war's, alles gesehen"; +"home.title.allCaughtUp" = "Das war’s, alles gesehen"; "home.title.noPhotos" = "Hier sind leider keine Bilder."; // MARK: Statuses timeline (local/federated/favourite/bookmarks etc.). From b27115f92731dbd39553ff462c064e2aea996358 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:18:06 +0100 Subject: [PATCH 10/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index e0985ff..4bfd8f2 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -63,7 +63,7 @@ // Mark: Search view. "search.navigationBar.title" = "Suche"; -"search.title.placeholder" = "Suche..."; +"search.title.placeholder" = "Suche …"; "search.title.usersWith" = "Nutzer mit %@"; "search.title.goToUser" = "Gehe zu Nutzer %@"; "search.title.hashtagWith" = "Hashtags mit %@"; From f5d425db028f5b45f9f908b13893226e27111a58 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:18:15 +0100 Subject: [PATCH 11/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 4bfd8f2..9f2ce01 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -80,7 +80,7 @@ // Mark: Trending tags. "tags.navigationBar.trendingTitle" = "Hashtags"; "tags.navigationBar.searchTitle" = "Hashtags"; -"tags.navigationBar.followedTitle" = "Hashtags denen Du folgst"; +"tags.navigationBar.followedTitle" = "Hashtags, denen Du folgst"; "tags.title.noTags" = "Hier sind leider keine Hashtags."; "tags.title.amountOfPosts" = "%d Beiträge"; "tags.error.loadingTagsFailed" = "Laden der Hashtags fehlgeschlagen."; From 4e695887e4b626e279b9226d41293ad60ea0cbdf Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:18:23 +0100 Subject: [PATCH 12/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 9f2ce01..541a599 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -344,7 +344,7 @@ "instance.title.approvalRequired" = "Genehmigung erforderlich"; "instance.title.rules" = "Instanzregeln"; "instance.title.contact" = "Kontact"; -"instance.title.pixelfedAccount" = "Pixelfed Konto"; +"instance.title.pixelfedAccount" = "Pixelfed-Konto"; "instance.error.noInstanceData" = "Instanzdaten können nicht angezeigt werden."; "instance.error.loadingDataFailed" = "Fehler beim Laden der Instanzdaten vom Server."; From f429602b233d3baca360e2a4edf01d1362040663 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:18:31 +0100 Subject: [PATCH 13/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 541a599..a327e86 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -354,7 +354,7 @@ "report.title.send" = "Senden"; "report.title.userReported" = "Benutzer wurde gemeldet"; "report.title.postReported" = "Beitrag wurde gemeldet"; -"report.title.reportType" = "Art des Mißbrauchs"; +"report.title.reportType" = "Art des Missbrauchs"; "report.title.spam" = "Spam"; "report.title.sensitive" = "Nacktheit oder Sex"; "report.title.abusive" = "Hassrede oder Symbole"; From 13da5e52e5570e1d9c6889bcd1e6e000bab6ff5a Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:18:48 +0100 Subject: [PATCH 14/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index a327e86..4806e61 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -99,7 +99,7 @@ "userProfile.title.block" = "Blockieren"; "userProfile.title.favourites" = "Favoriten"; "userProfile.title.bookmarks" = "Lesezeichen"; -"userProfile.title.followedTags" = "Hashtags denen Du folgst"; +"userProfile.title.followedTags" = "Hashtags, denen Du folgst"; "userProfile.title.posts" = "Beiträge"; "userProfile.title.followers" = "Leute die Dir folgen"; "userProfile.title.following" = "Leute denen Du folgst"; From 1f03f0641a10fd1d449d2038260345c0999ca547 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:19:12 +0100 Subject: [PATCH 15/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 4806e61..e231d53 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -101,8 +101,8 @@ "userProfile.title.bookmarks" = "Lesezeichen"; "userProfile.title.followedTags" = "Hashtags, denen Du folgst"; "userProfile.title.posts" = "Beiträge"; -"userProfile.title.followers" = "Leute die Dir folgen"; -"userProfile.title.following" = "Leute denen Du folgst"; +"userProfile.title.followers" = "Leute, die Dir folgen"; +"userProfile.title.following" = "Leute, denen Du folgst"; "userProfile.title.joined" = "%@ beigetreten"; "userProfile.title.unfollow" = "Nicht mehr folgen"; "userProfile.title.follow" = "Folgen"; From 2bd637618776a72ef76ff635870d2d897eb46b97 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:19:33 +0100 Subject: [PATCH 16/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index e231d53..14f7299 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -103,7 +103,7 @@ "userProfile.title.posts" = "Beiträge"; "userProfile.title.followers" = "Leute, die Dir folgen"; "userProfile.title.following" = "Leute, denen Du folgst"; -"userProfile.title.joined" = "%@ beigetreten"; +"userProfile.title.joined" = "Am %@ beigetreten"; "userProfile.title.unfollow" = "Nicht mehr folgen"; "userProfile.title.follow" = "Folgen"; "userProfile.title.instance" = "Instanzinformation"; From 22585c873c5fdfa9600437631b359a42dd5ed616 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:19:41 +0100 Subject: [PATCH 17/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 14f7299..5082d29 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -368,7 +368,7 @@ // Mark: Following requests. "followingRequests.navigationBar.title" = "Folgeanfragen"; -"followingRequests.title.approve" = "Genehmigen"; +"followingRequests.title.approve" = "Bestätigen"; "followingRequests.title.reject" = "Ablehnen"; "followingRequests.error.approve" = "Fehler beim Genehmigen."; "followingRequests.error.reject" = "Fehler beim Ablehnen."; From 125020b1529db6ac0841c3a3ec4023df90a31aaf Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:19:49 +0100 Subject: [PATCH 18/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 5082d29..e55a125 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -370,5 +370,5 @@ "followingRequests.navigationBar.title" = "Folgeanfragen"; "followingRequests.title.approve" = "Bestätigen"; "followingRequests.title.reject" = "Ablehnen"; -"followingRequests.error.approve" = "Fehler beim Genehmigen."; +"followingRequests.error.approve" = "Fehler beim Bestätigen."; "followingRequests.error.reject" = "Fehler beim Ablehnen."; From 66044c0fe6e7da3f27fe89740efd7904177964e4 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:20:02 +0100 Subject: [PATCH 19/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- .../PixelfedKit/Resources/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PixelfedKit/Sources/PixelfedKit/Resources/de_DE.lproj/Localizable.strings b/PixelfedKit/Sources/PixelfedKit/Resources/de_DE.lproj/Localizable.strings index 9f360bc..4ebe5cc 100644 --- a/PixelfedKit/Sources/PixelfedKit/Resources/de_DE.lproj/Localizable.strings +++ b/PixelfedKit/Sources/PixelfedKit/Resources/de_DE.lproj/Localizable.strings @@ -1,5 +1,5 @@ // MARK: Network errors. -"global.error.notSuccessResponse" = "Antwort vom Server: %@."; +"global.error.notSuccessResponse" = "Serverantwort: %@."; "global.error.unknownError" = "Unbekannter Fehler."; // Mark: Report errors. From f6a94134da0a33b5f249c5809e1fa1a3d9511fab Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:20:54 +0100 Subject: [PATCH 20/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index e55a125..0dec534 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -142,7 +142,7 @@ "notifications.title.updatedStatus" = "Beitrag bearbeitet"; "notifications.title.signedUp" = "registriert"; "notifications.title.newReport" = "neue Meldung"; -"notifications.error.loadingNotificationsFailed" = "Benachrichtigungen laden fehlgeschlagen."; +"notifications.error.loadingNotificationsFailed" = "Benachrichtigungen konnten nicht geladen werden."; // Mark: Compose view. "compose.navigationBar.title" = "Beitrag erstellen"; From a84bfc2328563e79d0bcabaf6cd789a0054626f7 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:21:14 +0100 Subject: [PATCH 21/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 0dec534..64f27b9 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -149,7 +149,7 @@ "compose.title.everyone" = "Öffentlich"; "compose.title.unlisted" = "nicht gelistet"; "compose.title.followers" = "für Folgende"; -"compose.title.attachPhotoFull" = "Füge ein Foto hinzu und beschreibe was Du denkst."; +"compose.title.attachPhotoFull" = "Füge ein Foto hinzu und beschreibe, was Du denkst."; "compose.title.attachPhotoMini" = "Beschreibe was Du denkst."; "compose.title.publish" = "Veröffentlichen"; "compose.title.cancel" = "Abbrechen"; From 2e131fcf6516b200d42e73b6e9492f3c81c02e68 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:21:40 +0100 Subject: [PATCH 22/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 64f27b9..53ad5e0 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -159,7 +159,7 @@ "compose.title.tryToUpload" = "Versuche hochzuladen"; "compose.title.delete" = "Löschen"; "compose.title.edit" = "Bearbeiten"; -"compose.title.photos" = "Foto Bibliothek"; +"compose.title.photos" = "Fotobibliothek"; "compose.title.camera" = "Foto aufnehmen"; "compose.title.files" = "Dateien durchsuchen"; "compose.title.missingAltTexts" = "Fehlende ALT Texte"; From 99f356cb7fb8afddae1fe52abcd9d6335fd3936f Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:21:58 +0100 Subject: [PATCH 23/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 53ad5e0..61440e4 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -169,7 +169,7 @@ "compose.error.postingStatusFailed" = "Fehler beim Veröffentlichen des Beitrags."; // Mark: Photo editor view. -"photoEdit.navigationBar.title" = "Foto Details"; +"photoEdit.navigationBar.title" = "Fotodetails"; "photoEdit.title.photo" = "Foto"; "photoEdit.title.accessibility" = "Barrierefreiheit"; "photoEdit.title.accessibilityDescription" = "Beschreibung für Sehbehinderte"; From 4637591b796f166dca09848860e04f300dc6e465 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:22:16 +0100 Subject: [PATCH 24/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 61440e4..1332748 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -162,7 +162,7 @@ "compose.title.photos" = "Fotobibliothek"; "compose.title.camera" = "Foto aufnehmen"; "compose.title.files" = "Dateien durchsuchen"; -"compose.title.missingAltTexts" = "Fehlende ALT Texte"; +"compose.title.missingAltTexts" = "Fehlende ALT-Texte"; "compose.title.missingAltTextsWarning" = "Es haben nicht alle Fotos eine Beschreibung für Sehbehinderte. Möchtest Du trotzdem senden?"; "compose.error.loadingPhotosFailed" = "Kann das Foto nicht aus der Bibliothek laden."; "compose.error.postingPhotoFailed" = "Fehler beim Veröffentlichen des Fotos."; From 923b8c3e9f460832e969d4dd0bd23b9787a8923f Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:22:32 +0100 Subject: [PATCH 25/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 1332748..b50fed8 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -179,7 +179,7 @@ // Mark: Place selector view. "placeSelector.navigationBar.title" = "Orte"; -"placeSelector.title.search" = "Suchen..."; +"placeSelector.title.search" = "Suchen …"; "placeSelector.title.buttonSearch" = "Suchen"; "placeSelector.title.cancel" = "Abbrechen"; "placeSelector.error.loadingPlacesFailed" = "Benachrichtigungen laden fehlgeschlagen."; From 6f97190d5ee25ef5002942b0b5462cacfc455dfd Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:22:50 +0100 Subject: [PATCH 26/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index b50fed8..0d64d63 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -182,7 +182,7 @@ "placeSelector.title.search" = "Suchen …"; "placeSelector.title.buttonSearch" = "Suchen"; "placeSelector.title.cancel" = "Abbrechen"; -"placeSelector.error.loadingPlacesFailed" = "Benachrichtigungen laden fehlgeschlagen."; +"placeSelector.error.loadingPlacesFailed" = "Benachrichtigungen konnten nicht geladen werden."; // Mark: Settings view. "settings.navigationBar.title" = "Einstellungen"; From 171e4a8d38d3e5220f43180023f79ac47cdb4ec7 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:23:30 +0100 Subject: [PATCH 27/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 0d64d63..2e20eaf 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -204,7 +204,7 @@ "settings.title.githubIssues" = "Issues auf Github"; "settings.title.follow" = "Folge mir"; "settings.title.support" = "Support"; -"settings.title.thankYouTitle" = "Dankeschön 💕"; +"settings.title.thankYouTitle" = "Danke schön 💕"; "settings.title.thankYouMessage" = "Danke für die Unterstützung! Kleine und große Einkäufe helfen uns, unseren Traum eines hochqualitativen Produktes für unsere Nutzer aufrecht zu halten. Wir hoffen Du liebst Vernissage!"; "settings.title.thankYouClose" = "Schließen"; "settings.title.haptics" = "Haptik"; From 36d85b7ef10554aece49a4603827089ddfc16b32 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:23:51 +0100 Subject: [PATCH 28/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 2e20eaf..ddb6394 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -205,7 +205,7 @@ "settings.title.follow" = "Folge mir"; "settings.title.support" = "Support"; "settings.title.thankYouTitle" = "Danke schön 💕"; -"settings.title.thankYouMessage" = "Danke für die Unterstützung! Kleine und große Einkäufe helfen uns, unseren Traum eines hochqualitativen Produktes für unsere Nutzer aufrecht zu halten. Wir hoffen Du liebst Vernissage!"; +"settings.title.thankYouMessage" = "Danke für die Unterstützung! Kleine und große Einkäufe helfen uns, unseren Traum eines hochqualitativen Produkts für unsere Nutzer aufrecht zu erhalten. Wir hoffen, Du liebst Vernissage!"; "settings.title.thankYouClose" = "Schließen"; "settings.title.haptics" = "Haptik"; "settings.title.hapticsTabSelection" = "Tab Auswahl"; From d3188b931f134699adb9061322a7d3af7a3fcd2f Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:24:07 +0100 Subject: [PATCH 29/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index ddb6394..6f4b9ef 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -208,7 +208,7 @@ "settings.title.thankYouMessage" = "Danke für die Unterstützung! Kleine und große Einkäufe helfen uns, unseren Traum eines hochqualitativen Produkts für unsere Nutzer aufrecht zu erhalten. Wir hoffen, Du liebst Vernissage!"; "settings.title.thankYouClose" = "Schließen"; "settings.title.haptics" = "Haptik"; -"settings.title.hapticsTabSelection" = "Tab Auswahl"; +"settings.title.hapticsTabSelection" = "Tabauswahl"; "settings.title.hapticsButtonPress" = "Knopfdruck"; "settings.title.hapticsListRefresh" = "Liste aktualisieren"; "settings.title.hapticsAnimationFinished" = "Animation beendet"; From b8b0234b9c8d48cc25ed894f3c5d5b34b870541b Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:24:27 +0100 Subject: [PATCH 30/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 6f4b9ef..57abdd9 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -215,8 +215,8 @@ "settings.title.mediaSettings" = "Medieneinstellungen"; "settings.title.alwaysShowSensitiveTitle" = "Anstößige Inhalte immer zeigen"; "settings.title.alwaysShowSensitiveDescription" = "Anstößige Inhalte immer ohne Warnung anzeigen"; -"settings.title.alwaysShowAltTitle" = "Alternativen Text anzeigen"; -"settings.title.alwaysShowAltDescription" = "Alternativen Text in der Detailansicht anzeigen"; +"settings.title.alwaysShowAltTitle" = "ALT-Text anzeigen"; +"settings.title.alwaysShowAltDescription" = "ALT-Text in der Detailansicht anzeigen"; "settings.title.general" = "Generell"; "settings.title.applicationIcon" = "Anwendungs-Icon"; "settings.title.followVernissage" = "Vernissage folgen"; From fe770fcbfe75c8b285ac56f9408e08249010f959 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:24:43 +0100 Subject: [PATCH 31/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 57abdd9..4896eba 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -218,7 +218,7 @@ "settings.title.alwaysShowAltTitle" = "ALT-Text anzeigen"; "settings.title.alwaysShowAltDescription" = "ALT-Text in der Detailansicht anzeigen"; "settings.title.general" = "Generell"; -"settings.title.applicationIcon" = "Anwendungs-Icon"; +"settings.title.applicationIcon" = "App-Icon"; "settings.title.followVernissage" = "Vernissage folgen"; "settings.title.mastodonAccount" = "Mastodon"; "settings.title.pixelfedAccount" = "Pixelfed"; From 24ec2456153e393b5f735e3109ff220e9413af9d Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:24:58 +0100 Subject: [PATCH 32/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 4896eba..19ac952 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -236,7 +236,7 @@ "settings.title.showAvatarsOnTimeline" = "Avatare werden in Listen angezeigt"; "settings.title.showFavourite" = "Favoriten anzeigen"; "settings.title.showFavouriteOnTimeline" = "Favoriten werden in der Zeitleiste angezeigt"; -"settings.title.showAltText" = "ALT Icon anzeigen"; +"settings.title.showAltText" = "ALT-Icon anzeigen"; "settings.title.showAltTextOnTimeline" = "ALT Icons werden in der Zeitleiste angezeigt"; "settings.title.warnAboutMissingAltTitle" = "Warne mich bei fehlenden ALT Texten"; "settings.title.warnAboutMissingAltDescription" = "Eine Warnung wird bei fehlenden ALT Texten angezeigt bevor ein Beitrag veröffentlicht wird."; From cc97bcff00ab97803a6c950c19b28045526084e5 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:25:14 +0100 Subject: [PATCH 33/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 19ac952..3eb91ed 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -237,7 +237,7 @@ "settings.title.showFavourite" = "Favoriten anzeigen"; "settings.title.showFavouriteOnTimeline" = "Favoriten werden in der Zeitleiste angezeigt"; "settings.title.showAltText" = "ALT-Icon anzeigen"; -"settings.title.showAltTextOnTimeline" = "ALT Icons werden in der Zeitleiste angezeigt"; +"settings.title.showAltTextOnTimeline" = "ALT-Icons werden in der Zeitleiste angezeigt"; "settings.title.warnAboutMissingAltTitle" = "Warne mich bei fehlenden ALT Texten"; "settings.title.warnAboutMissingAltDescription" = "Eine Warnung wird bei fehlenden ALT Texten angezeigt bevor ein Beitrag veröffentlicht wird."; From 45f8f385f7bf39cdfa6523298225a0abb1c6dc8f Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:25:47 +0100 Subject: [PATCH 34/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 3eb91ed..cda36d9 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -238,7 +238,7 @@ "settings.title.showFavouriteOnTimeline" = "Favoriten werden in der Zeitleiste angezeigt"; "settings.title.showAltText" = "ALT-Icon anzeigen"; "settings.title.showAltTextOnTimeline" = "ALT-Icons werden in der Zeitleiste angezeigt"; -"settings.title.warnAboutMissingAltTitle" = "Warne mich bei fehlenden ALT Texten"; +"settings.title.warnAboutMissingAltTitle" = "Warne mich bei fehlenden ALT-Texten"; "settings.title.warnAboutMissingAltDescription" = "Eine Warnung wird bei fehlenden ALT Texten angezeigt bevor ein Beitrag veröffentlicht wird."; // Mark: Signin view. From b18870c92fbc2dc45ae463464eb46a4dc120e9f6 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:26:10 +0100 Subject: [PATCH 35/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index cda36d9..dd27521 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -239,7 +239,7 @@ "settings.title.showAltText" = "ALT-Icon anzeigen"; "settings.title.showAltTextOnTimeline" = "ALT-Icons werden in der Zeitleiste angezeigt"; "settings.title.warnAboutMissingAltTitle" = "Warne mich bei fehlenden ALT-Texten"; -"settings.title.warnAboutMissingAltDescription" = "Eine Warnung wird bei fehlenden ALT Texten angezeigt bevor ein Beitrag veröffentlicht wird."; +"settings.title.warnAboutMissingAltDescription" = "Vernissage wird Dich warnen, wenn Du einen Beitrag mit fehlendem ALT-Text veröffentlichen möchtest."; // Mark: Signin view. "signin.navigationBar.title" = "In Pixelfed einloggen"; From cf0f76ef31af2b34034403b8acd98f588553db0c Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:26:32 +0100 Subject: [PATCH 36/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index dd27521..8f40e9a 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -243,7 +243,7 @@ // Mark: Signin view. "signin.navigationBar.title" = "In Pixelfed einloggen"; -"signin.title.serverAddress" = "Server Adresse"; +"signin.title.serverAddress" = "Serveradresse"; "signin.title.signIn" = "Einloggen"; "signin.title.enterServerAddress" = "Server Adresse eingeben"; "signin.title.howToJoinLink" = "Wie man Pixelfed beitritt"; From 32d75d3b394b5c13a5e3b4a6930a97973e2c77fd Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:26:57 +0100 Subject: [PATCH 37/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 8f40e9a..98a4e8e 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -245,7 +245,7 @@ "signin.navigationBar.title" = "In Pixelfed einloggen"; "signin.title.serverAddress" = "Serveradresse"; "signin.title.signIn" = "Einloggen"; -"signin.title.enterServerAddress" = "Server Adresse eingeben"; +"signin.title.enterServerAddress" = "Serveradresse eingeben"; "signin.title.howToJoinLink" = "Wie man Pixelfed beitritt"; "signin.title.chooseServer" = "oder wähle einen Pixelfed Server"; "signin.title.amountOfUsers" = "%d Benutzer"; From a1e11ecaacc42554933b5aef366c6133ba6132ad Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:27:18 +0100 Subject: [PATCH 38/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 98a4e8e..2627e6f 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -247,7 +247,7 @@ "signin.title.signIn" = "Einloggen"; "signin.title.enterServerAddress" = "Serveradresse eingeben"; "signin.title.howToJoinLink" = "Wie man Pixelfed beitritt"; -"signin.title.chooseServer" = "oder wähle einen Pixelfed Server"; +"signin.title.chooseServer" = "oder wähle einen Pixelfed-Server"; "signin.title.amountOfUsers" = "%d Benutzer"; "signin.title.amountOStatuses" = "%d Beiträge"; "signin.error.communicationFailed" = "Kommunikation mit dem Server fehlgeschlagen."; From 152583f42cbbf98c5a4b544f5a1b430f7da9d886 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:27:39 +0100 Subject: [PATCH 39/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 2627e6f..a6d1c0c 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -255,7 +255,7 @@ // Mark: Status view. "status.navigationBar.title" = "Details"; "status.title.uploaded" = "Hochgeladen"; -"status.title.via" = "via %@"; +"status.title.via" = "über %@"; "status.title.reboostedBy" = "Boosted by"; "status.title.favouritedBy" = "Favorisiert von"; "status.title.openInBrowser" = "Im Browser öffnen"; From 6cd6ff10ed89d182cf7ca23048b213f51bd31366 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:28:10 +0100 Subject: [PATCH 40/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index a6d1c0c..462dd5b 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -256,7 +256,7 @@ "status.navigationBar.title" = "Details"; "status.title.uploaded" = "Hochgeladen"; "status.title.via" = "über %@"; -"status.title.reboostedBy" = "Boosted by"; +"status.title.reboostedBy" = "Geboostet von"; "status.title.favouritedBy" = "Favorisiert von"; "status.title.openInBrowser" = "Im Browser öffnen"; "status.title.shareStatus" = "Beitrag teilen"; From 51d6869ad09d6de1bc91f0adf8ed17404fbf7b6c Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:28:37 +0100 Subject: [PATCH 41/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 462dd5b..d95fe48 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -262,7 +262,7 @@ "status.title.shareStatus" = "Beitrag teilen"; "status.title.yourStatus" = "Dein Beitrag"; "status.title.delete" = "Löschen"; -"status.title.reboosted" = "Boosted"; +"status.title.reboosted" = "Geboostet"; "status.title.unreboosted" = "Boot rückgängig gemacht"; "status.title.favourited" = "Favorisiert"; "status.title.unfavourited" = "Favorisieren rückgängig gemacht"; From d74193c9b38b76395ac0fc1c78b4f638e901b83b Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:29:18 +0100 Subject: [PATCH 42/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index d95fe48..c61837d 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -263,7 +263,7 @@ "status.title.yourStatus" = "Dein Beitrag"; "status.title.delete" = "Löschen"; "status.title.reboosted" = "Geboostet"; -"status.title.unreboosted" = "Boot rückgängig gemacht"; +"status.title.unreboosted" = "Boost rückgängig gemacht"; "status.title.favourited" = "Favorisiert"; "status.title.unfavourited" = "Favorisieren rückgängig gemacht"; "status.title.bookmarked" = "Lesezeichen gesetzt"; From 469c5e94c41c2683ef067248edf0c8470ab7f7f9 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:29:45 +0100 Subject: [PATCH 43/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index c61837d..c67f598 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -269,7 +269,7 @@ "status.title.bookmarked" = "Lesezeichen gesetzt"; "status.title.unbookmarked" = "Lesezeichen gelöscht"; "status.title.statusDeleted" = "Beitrag gelöscht"; -"status.title.reboost" = "Boost"; +"status.title.reboost" = "Boosten"; "status.title.unreboost" = "Boost rückgängig machen"; "status.title.favourite" = "Favorisieren"; "status.title.unfavourite" = "Nicht mehr favorisieren"; From 14b66a02cf83ccc0a70201a9bd99cdb2ef6af731 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:30:08 +0100 Subject: [PATCH 44/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index c67f598..50c1c8e 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -270,7 +270,7 @@ "status.title.unbookmarked" = "Lesezeichen gelöscht"; "status.title.statusDeleted" = "Beitrag gelöscht"; "status.title.reboost" = "Boosten"; -"status.title.unreboost" = "Boost rückgängig machen"; +"status.title.unreboost" = "Nicht mehr boosten"; "status.title.favourite" = "Favorisieren"; "status.title.unfavourite" = "Nicht mehr favorisieren"; "status.title.bookmark" = "Lesezeichen"; From 468554d8895901886f8f735ed33ad15c2458231e Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:30:31 +0100 Subject: [PATCH 45/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 50c1c8e..dc368f0 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -282,7 +282,7 @@ "status.title.mediaDescription" = "Medienbeschreibung"; "status.title.shareImage" = "Bild teilen"; "status.title.altText" = "ALT"; -"status.error.loadingStatusFailed" = "Beitrag laden fehlgeschlagen."; +"status.error.loadingStatusFailed" = "Konnte Beitrag nicht laden."; "status.error.notFound" = "Beitrag existiert nicht mehr."; "status.error.loadingCommentsFailed" = "Kommentare können nicht geladen werden."; "status.error.reboostFailed" = "Boost fehlgeschlagen."; From c67182d4e94bb8430fa4043a48ec07e13637ad93 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Thu, 30 Nov 2023 08:37:16 +0100 Subject: [PATCH 46/53] Improvements from PattaFeuFeu Co-authored-by: Patrick Geselbracht --- Localization/de_DE.lproj/Localizable.strings | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index dc368f0..b3cfab9 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -293,19 +293,19 @@ // Mark: Accounts view. "accounts.navigationBar.followers" = "Folgende"; "accounts.navigationBar.following" = "Folge"; -"accounts.navigationBar.favouritedBy" = "Favorisiert"; -"accounts.navigationBar.reboostedBy" = "Boosted"; +"accounts.navigationBar.favouritedBy" = "Favorisiert von"; +"accounts.navigationBar.reboostedBy" = "Geboostet von"; "accounts.navigationBar.blocked" = "Blockierte Benutzer"; "accounts.navigationBar.mutes" = "Stummgeschaltete Benutzer"; "accounts.title.noAccounts" = "Hier ist leider niemand."; -"accounts.error.loadingAccountsFailed" = "Benutzer laden fehlgeschlagen."; +"accounts.error.loadingAccountsFailed" = "Konnte Benutzer nicht laden."; // Mark: Third party view. "thirdParty.navigationBar.title" = "Dritte"; // Mark: Widget view. "widget.title.photoDescription" = "Widget mit Fotos aus Pixelfed."; -"widget.title.qrCodeDescription" = "Widget mit QR Code zu Deinem Pixelfed Profil."; +"widget.title.qrCodeDescription" = "Widget mit QR-Code zu Deinem Pixelfed-Profil."; // Mark: In-app purchases. "purchase.donut.title" = "Donut"; @@ -324,24 +324,24 @@ "editProfile.title.accountSaved" = "Profil wurde aktualisiert."; "editProfile.title.photoInfo" = "Das geänderte Profilbild wird mit einer kurzen Verzögerung in der App und auf der Webseite sichtbar sein."; "editProfile.title.privateAccount" = "Privater Account"; -"editProfile.title.privateAccountInfo" = "Wenn Dein Account privat ist, können nur Nutzer die Du bestätigst Deine Fotos und Videos auf Pixelfed sehen. Benutzer die Dir jetzt schon folgen sind nicht betroffen."; -"editProfile.error.saveAccountFailed" = "Profil speichern fehlgeschlagen."; -"editProfile.error.loadingAvatarFailed" = "Avatar laden fehlgeschlagen."; +"editProfile.title.privateAccountInfo" = "Wenn Dein Account privat ist, können nur Nutzer die Du bestätigst Deine Fotos und Videos auf Pixelfed sehen. Benutzer, die Dir jetzt schon folgen, sind nicht betroffen."; +"editProfile.error.saveAccountFailed" = "Konnte Profil nicht speichern."; +"editProfile.error.loadingAvatarFailed" = "Konnte Avatar nicht laden."; "editProfile.error.noProfileData" = "Profildaten können nicht angezeigt werden."; "editProfile.error.loadingAccountFailed" = "Fehler beim Laden des Profils vom Server."; // Mark: Instance information. "instance.navigationBar.title" = "Instanz"; -"instance.title.instanceInfo" = "Instanz Info"; +"instance.title.instanceInfo" = "Instanzinfo"; "instance.title.name" = "Name"; "instance.title.address" = "Addresse"; -"instance.title.email" = "Email"; +"instance.title.email" = "E-Mail"; "instance.title.version" = "Version"; "instance.title.users" = "Benutzer"; "instance.title.posts" = "Beiträge"; "instance.title.domains" = "Domains"; "instance.title.registrations" = "Registrierungen"; -"instance.title.approvalRequired" = "Genehmigung erforderlich"; +"instance.title.approvalRequired" = "Bestätigung erforderlich"; "instance.title.rules" = "Instanzregeln"; "instance.title.contact" = "Kontact"; "instance.title.pixelfedAccount" = "Pixelfed-Konto"; From dcd717a356010a816a68505a5518d0bc18714f18 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Fri, 1 Dec 2023 14:41:29 +0100 Subject: [PATCH 47/53] Update Localizable.strings decided to go for "Follower" also in German, since everyone knows the word. In all other contexts, it's "folgen" and passive ("werden gefolgt" instead of "Du folgst" or "ich folge") --- Localization/de_DE.lproj/Localizable.strings | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index b3cfab9..4fad56f 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -101,8 +101,8 @@ "userProfile.title.bookmarks" = "Lesezeichen"; "userProfile.title.followedTags" = "Hashtags, denen Du folgst"; "userProfile.title.posts" = "Beiträge"; -"userProfile.title.followers" = "Leute, die Dir folgen"; -"userProfile.title.following" = "Leute, denen Du folgst"; +"userProfile.title.followers" = "Follower"; +"userProfile.title.following" = "werden gefolgt"; "userProfile.title.joined" = "Am %@ beigetreten"; "userProfile.title.unfollow" = "Nicht mehr folgen"; "userProfile.title.follow" = "Folgen"; @@ -114,7 +114,7 @@ "userProfile.title.blocked" = "Konto blockiert"; "userProfile.title.unblocked" = "Konto nicht mehr blockiert"; "userProfile.title.report" = "Melden"; -"userProfile.title.followsYou" = "Folgt Dir"; +"userProfile.title.followsYou" = "folgt Dir"; "userProfile.title.requestFollow" = "Folgen anfragen"; "userProfile.title.cancelRequestFollow" = "Anfrage abbrechen"; "userProfile.title.followRequests" = "Anfragen"; @@ -148,7 +148,7 @@ "compose.navigationBar.title" = "Beitrag erstellen"; "compose.title.everyone" = "Öffentlich"; "compose.title.unlisted" = "nicht gelistet"; -"compose.title.followers" = "für Folgende"; +"compose.title.followers" = "für Follower"; "compose.title.attachPhotoFull" = "Füge ein Foto hinzu und beschreibe, was Du denkst."; "compose.title.attachPhotoMini" = "Beschreibe was Du denkst."; "compose.title.publish" = "Veröffentlichen"; @@ -291,8 +291,8 @@ "status.error.deleteFailed" = "Löschen fehlgeschlagen."; // Mark: Accounts view. -"accounts.navigationBar.followers" = "Folgende"; -"accounts.navigationBar.following" = "Folge"; +"accounts.navigationBar.followers" = "Follower"; +"accounts.navigationBar.following" = "werden gefolgt"; "accounts.navigationBar.favouritedBy" = "Favorisiert von"; "accounts.navigationBar.reboostedBy" = "Geboostet von"; "accounts.navigationBar.blocked" = "Blockierte Benutzer"; From eca913ed5ad3c1943e4092daf2f0bf3e719d3e14 Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Fri, 1 Dec 2023 14:55:32 +0100 Subject: [PATCH 48/53] less awkward --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 4fad56f..9abcc55 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -199,7 +199,7 @@ "settings.title.circle" = "Kreis"; "settings.title.rounderRectangle" = "Abgerundetes Rechteck"; "settings.title.other" = "Anderes"; -"settings.title.thirdParty" = "Dritthersteller"; +"settings.title.thirdParty" = "Verwendete Software"; "settings.title.reportBug" = "Fehler melden"; "settings.title.githubIssues" = "Issues auf Github"; "settings.title.follow" = "Folge mir"; From a2233ff3afbc5517bd080cf1dc408a709bed840f Mon Sep 17 00:00:00 2001 From: Toby Baier Date: Fri, 1 Dec 2023 15:09:16 +0100 Subject: [PATCH 49/53] Update Localizable.strings needs to be the same as the other occurance --- Localization/de_DE.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings index 9abcc55..9d1b427 100644 --- a/Localization/de_DE.lproj/Localizable.strings +++ b/Localization/de_DE.lproj/Localizable.strings @@ -301,7 +301,7 @@ "accounts.error.loadingAccountsFailed" = "Konnte Benutzer nicht laden."; // Mark: Third party view. -"thirdParty.navigationBar.title" = "Dritte"; +"thirdParty.navigationBar.title" = "Verwendete Software"; // Mark: Widget view. "widget.title.photoDescription" = "Widget mit Fotos aus Pixelfed."; From a2e17b1a48f9e5ea8fa30e8d1911317f025ae8e0 Mon Sep 17 00:00:00 2001 From: Marcin Czachurski Date: Fri, 1 Dec 2023 23:03:29 +0100 Subject: [PATCH 50/53] Move german translation to xcstrings files --- Localization/Localizable.xcstrings | 1974 +++++++++++++++++ Localization/de_DE.lproj/Localizable.strings | 374 ---- Localization/es_ES.lproj/Localizable.strings | 371 ---- .../Sources/PixelfedKit/Localizable.xcstrings | 48 + .../Resources/de_DE.lproj/Localizable.strings | 11 - .../Sources/ServicesKit/Localizable.xcstrings | 86 +- Vernissage.xcodeproj/project.pbxproj | 1 + .../Sources/WidgetsKit/Localizable.xcstrings | 336 +++ 8 files changed, 2409 insertions(+), 792 deletions(-) delete mode 100644 Localization/de_DE.lproj/Localizable.strings delete mode 100644 Localization/es_ES.lproj/Localizable.strings delete mode 100644 PixelfedKit/Sources/PixelfedKit/Resources/de_DE.lproj/Localizable.strings diff --git a/Localization/Localizable.xcstrings b/Localization/Localizable.xcstrings index 3daf974..87b15c8 100644 --- a/Localization/Localizable.xcstrings +++ b/Localization/Localizable.xcstrings @@ -3,6 +3,12 @@ "strings" : { "" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -31,6 +37,12 @@ }, "@%@" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "@%@" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -59,6 +71,12 @@ }, "@mczachurski" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "@mczachurski" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -87,6 +105,12 @@ }, "@vernissage" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "@vernissage" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -115,6 +139,12 @@ }, "#%@" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "#%@" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -143,6 +173,12 @@ }, "%@ (%@)" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ (%2$@)" + } + }, "en" : { "stringUnit" : { "state" : "new", @@ -177,6 +213,12 @@ }, "%lld" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -205,6 +247,12 @@ }, "%lld/%lld" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld/%2$lld" + } + }, "en" : { "stringUnit" : { "state" : "new", @@ -239,6 +287,12 @@ }, "+99" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "+99" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -268,6 +322,12 @@ "accounts.error.loadingAccountsFailed" : { "comment" : "Information message when loading account failed", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Laden der Konten fehlgeschlagen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -303,6 +363,12 @@ "accounts.navigationBar.blocked" : { "comment" : "Blocked", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blockierte Benutzer" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -338,6 +404,12 @@ "accounts.navigationBar.disabledBoosts" : { "comment" : "Disabled boosts", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Deaktivierte Boosts" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -373,6 +445,12 @@ "accounts.navigationBar.favouritedBy" : { "comment" : "Favourited by", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Favorisiert von" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -408,6 +486,12 @@ "accounts.navigationBar.followers" : { "comment" : "Followers", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Follower" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -443,6 +527,12 @@ "accounts.navigationBar.following" : { "comment" : "Following", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "werden gefolgt" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -478,6 +568,12 @@ "accounts.navigationBar.mutes" : { "comment" : "Mutes", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stummgeschaltete Benutzer" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -513,6 +609,12 @@ "accounts.navigationBar.reboostedBy" : { "comment" : "Reboosted by", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geboostet von" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -547,6 +649,12 @@ }, "accounts.title.noAccounts" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hier ist leider niemand." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -581,6 +689,12 @@ }, "compose.error.postingPhotoFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehler beim Veröffentlichen des Fotos." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -616,6 +730,12 @@ "compose.navigationBar.title" : { "comment" : " Compose view.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beitrag erstellen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -650,6 +770,12 @@ }, "editProfile.error.loadingAccountFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehler beim Laden des Profils vom Server." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -684,6 +810,12 @@ }, "editProfile.error.loadingAvatarFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konnte Avatar nicht laden." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -718,6 +850,12 @@ }, "editProfile.error.noProfileData" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profildaten können nicht angezeigt werden." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -752,6 +890,12 @@ }, "editProfile.error.saveAccountFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konnte Profil nicht speichern." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -787,6 +931,12 @@ "editProfile.navigationBar.title" : { "comment" : "Edit profile.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil bearbeiten" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -821,6 +971,12 @@ }, "editProfile.title.accountSaved" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil wurde aktualisiert." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -856,6 +1012,12 @@ "editProfile.title.bio" : { "comment" : "Bio", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Biografie" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -891,6 +1053,12 @@ "editProfile.title.displayName" : { "comment" : "Display name", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anzeigename" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -925,6 +1093,12 @@ }, "editProfile.title.photoInfo" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Das geänderte Profilbild wird mit einer kurzen Verzögerung in der App und auf der Webseite sichtbar sein." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -959,6 +1133,12 @@ }, "editProfile.title.privateAccount" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Privater Account" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -994,6 +1174,12 @@ "editProfile.title.privateAccountInfo" : { "comment" : "Private account info", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wenn Dein Account privat ist, können nur Nutzer die Du bestätigst Deine Fotos und Videos auf Pixelfed sehen. Benutzer, die Dir jetzt schon folgen, sind nicht betroffen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1029,6 +1215,12 @@ "editProfile.title.save" : { "comment" : "Save", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Speichern" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1064,6 +1256,12 @@ "editProfile.title.website" : { "comment" : "Website", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Webseite" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1098,6 +1296,12 @@ }, "followingRequests.error.approve" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehler beim Bestätigen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1132,6 +1336,12 @@ }, "followingRequests.error.reject" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehler beim Ablehnen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1167,6 +1377,12 @@ "followingRequests.navigationBar.title" : { "comment" : "Following requests.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Folgeanfragen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1201,6 +1417,12 @@ }, "followingRequests.title.approve" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bestätigen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1235,6 +1457,12 @@ }, "followingRequests.title.reject" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ablehnen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1270,6 +1498,12 @@ "global.error.accessTokenNotFound" : { "comment" : "Access token is not saved in account model.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zugangstoken nicht gefunden." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1304,6 +1538,12 @@ }, "global.error.avatarHasNotBeenDownloaded" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Avatar wurde noch nicht heruntergeladen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1339,6 +1579,12 @@ "global.error.badUrlServer" : { "comment" : "User enter bad URL to server.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ungültige Server-URL." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1373,6 +1619,12 @@ }, "global.error.cannotConfigureTransactionListener" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Der Transaktions-Listener kann nicht konfiguriert werden." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1407,6 +1659,12 @@ }, "global.error.cannotDownloadInAppProducts" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "In-App-Produkte können nicht heruntergeladen werden." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1441,6 +1699,12 @@ }, "global.error.errorDuringDataLoad" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Laden von Daten fehlgeschlagen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1475,6 +1739,12 @@ }, "global.error.errorDuringDownloadHashtag" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehler beim Laden des Hashtags vom Server." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1509,6 +1779,12 @@ }, "global.error.errorDuringDownloadingMetadata" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehler beim Herunterladen von Metadaten." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1543,6 +1819,12 @@ }, "global.error.errorDuringDownloadingNewStatuses" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Fehler beim Herunterladen neuer Status für die Menge der neuen Status." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1578,6 +1860,12 @@ "global.error.errorDuringDownloadStatus" : { "comment" : "Status cannot be downloaded from server.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehler beim Laden vom Server." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1612,6 +1900,12 @@ }, "global.error.errorDuringDownloadStatuses" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehler beim Laden der Beiträge vom Server." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1647,6 +1941,12 @@ "global.error.errorDuringImageDownload" : { "comment" : "Cannot download image", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bild kann nicht geladen werden." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1682,6 +1982,12 @@ "global.error.errorDuringPurchaseVerification" : { "comment" : "Something went wrong during purchase verification.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konnte Einkauf nicht verifizieren." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1717,6 +2023,12 @@ "global.error.errorDuringUserRead" : { "comment" : "User acount cannot be downloaded from Core Data.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benutzer kann nicht geladen werden." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1751,6 +2063,12 @@ }, "global.error.hashtagNotExists" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hashtag existiert nicht." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1785,6 +2103,12 @@ }, "global.error.purchaseFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Der Kauf ist gescheitert." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1819,6 +2143,12 @@ }, "global.error.refreshingCredentialsSubtitle" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bitte erneut in Pixelfed einloggen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1853,6 +2183,12 @@ }, "global.error.refreshingCredentialsTitle" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zugangsdaten konnten nicht bestätigt werden." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1887,6 +2223,12 @@ }, "global.error.refreshTokenFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Aktualisierungs-Token fehlgeschlagen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1922,6 +2264,12 @@ "global.title.close" : { "comment" : "Close", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schließen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1957,6 +2305,12 @@ "global.title.more" : { "comment" : "more...", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "mehr..." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1991,6 +2345,12 @@ }, "global.title.newAccessTokenRetrieved" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Es wurden neue Zugangstoken abgerufen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2026,6 +2386,12 @@ "global.title.ok" : { "comment" : "OK", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2061,6 +2427,12 @@ "global.title.photoSaved" : { "comment" : "Photo has been saved", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Foto wurde gespeichert." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2096,6 +2468,12 @@ "global.title.success" : { "comment" : "Success", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erfolgreich" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2131,6 +2509,12 @@ "home.title.allCaughtUp" : { "comment" : "You're all caught up", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Das war’s, alles gesehen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2165,6 +2549,12 @@ }, "instance.error.loadingDataFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehler beim Laden der Instanzdaten vom Server." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2199,6 +2589,12 @@ }, "instance.error.noInstanceData" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Instanzdaten können nicht angezeigt werden." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2234,6 +2630,12 @@ "instance.navigationBar.title" : { "comment" : "Instance information.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Instanz" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2268,6 +2670,12 @@ }, "instance.title.address" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Addresse" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2302,6 +2710,12 @@ }, "instance.title.approvalRequired" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bestätigung erforderlich" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2336,6 +2750,12 @@ }, "instance.title.contact" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontact" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2370,6 +2790,12 @@ }, "instance.title.domains" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Domains" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2404,6 +2830,12 @@ }, "instance.title.email" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2438,6 +2870,12 @@ }, "instance.title.instanceInfo" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Instanzinfo" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2472,6 +2910,12 @@ }, "instance.title.name" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Name" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2507,6 +2951,12 @@ "instance.title.pixelfedAccount" : { "comment" : "Pixelfed account", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pixelfed-Konto" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2541,6 +2991,12 @@ }, "instance.title.posts" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beiträge" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2575,6 +3031,12 @@ }, "instance.title.registrations" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrierungen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2609,6 +3071,12 @@ }, "instance.title.rules" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Instanzregeln" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2643,6 +3111,12 @@ }, "instance.title.users" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benutzer" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2677,6 +3151,12 @@ }, "instance.title.version" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Version" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2712,6 +3192,12 @@ "mainview.error.switchAccounts" : { "comment" : "Cannot switch accounts.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konnte Benutzer nicht wechseln." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2747,6 +3233,12 @@ "mainview.menu.settings" : { "comment" : "Main view (leading navigation bar).", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Einstellungen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2781,6 +3273,12 @@ }, "mainview.tab.federatedTimeline" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Föderiert" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2816,6 +3314,12 @@ "mainview.tab.homeTimeline" : { "comment" : "Main view (main navigation bar).", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zuhause" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2850,6 +3354,12 @@ }, "mainview.tab.localTimeline" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lokal" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2884,6 +3394,12 @@ }, "mainview.tab.notifications" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benachrichtigungen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2918,6 +3434,12 @@ }, "mainview.tab.search" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suche" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2953,6 +3475,12 @@ "mainview.tab.trending" : { "comment" : "Trending menu section", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Im Trend" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -2987,6 +3515,12 @@ }, "mainview.tab.trendingAccounts" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benutzer" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3021,6 +3555,12 @@ }, "mainview.tab.trendingPhotos" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fotos" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3055,6 +3595,12 @@ }, "mainview.tab.trendingTags" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hashtags" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3089,6 +3635,12 @@ }, "mainview.tab.userProfile" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3123,6 +3675,12 @@ }, "notifications.error.loadingNotificationsFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benachrichtigungen konnten nicht geladen werden." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3158,6 +3716,12 @@ "notifications.navigationBar.title" : { "comment" : "Notifications view.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benachrichtigungen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3192,6 +3756,12 @@ }, "notifications.title.boosted" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "geboostet" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3226,6 +3796,12 @@ }, "notifications.title.favourited" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "favorisiert" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3260,6 +3836,12 @@ }, "notifications.title.followedYou" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "folgt Dir" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3294,6 +3876,12 @@ }, "notifications.title.followRequest" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Folgeanfrage" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3328,6 +3916,12 @@ }, "notifications.title.mentionedYou" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "hat Dich erwähnt" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3362,6 +3956,12 @@ }, "notifications.title.newReport" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "neue Meldung" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3396,6 +3996,12 @@ }, "notifications.title.noNotifications" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hier ist leider nichts." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3430,6 +4036,12 @@ }, "notifications.title.poll" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Umfrage" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3464,6 +4076,12 @@ }, "notifications.title.postedStatus" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beitrag veröffentlicht" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3498,6 +4116,12 @@ }, "notifications.title.signedUp" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "registriert" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3532,6 +4156,12 @@ }, "notifications.title.updatedStatus" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beitrag bearbeitet" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3567,6 +4197,12 @@ "purchase.cake.description" : { "extractionState" : "manual", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lade mich zu Kaffee und Kuchen ein." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3602,6 +4238,12 @@ "purchase.cake.title" : { "extractionState" : "manual", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kaffee und Kuchen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3637,6 +4279,12 @@ "purchase.coffee.description" : { "extractionState" : "manual", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib mir einen Kaffee." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3672,6 +4320,12 @@ "purchase.coffee.title" : { "extractionState" : "manual", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kaffee" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3707,6 +4361,12 @@ "purchase.donut.description" : { "extractionState" : "manual", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib mir einen Donut aus." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3743,6 +4403,12 @@ "comment" : "In-app purchases.", "extractionState" : "manual", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Donut" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3777,6 +4443,12 @@ }, "report.error.notReported" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehler beim Melden." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3812,6 +4484,12 @@ "report.navigationBar.title" : { "comment" : "Report screen.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Melden" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3846,6 +4524,12 @@ }, "report.title.abusive" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hassrede oder Symbole" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3881,6 +4565,12 @@ "report.title.close" : { "comment" : "Close", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schließen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3915,6 +4605,12 @@ }, "report.title.copyright" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Urheberrechtsverletzung" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3949,6 +4645,12 @@ }, "report.title.impersonation" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Identitätsdiebstahl" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -3983,6 +4685,12 @@ }, "report.title.postReported" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beitrag wurde gemeldet" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4017,6 +4725,12 @@ }, "report.title.reportType" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Art des Missbrauchs" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4051,6 +4765,12 @@ }, "report.title.scam" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beleidigung" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4086,6 +4806,12 @@ "report.title.send" : { "comment" : "Send", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Senden" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4120,6 +4846,12 @@ }, "report.title.sensitive" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nacktheit oder Sex" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4154,6 +4886,12 @@ }, "report.title.spam" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spam" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4188,6 +4926,12 @@ }, "report.title.terrorism" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terrorismus" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4222,6 +4966,12 @@ }, "report.title.underage" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minderjähriger Benutzer" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4256,6 +5006,12 @@ }, "report.title.userReported" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benutzer wurde gemeldet" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4290,6 +5046,12 @@ }, "report.title.violence" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gewalt oder gefährliche Organisationen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4325,6 +5087,12 @@ "search.navigationBar.title" : { "comment" : "Search view.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suche" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4360,6 +5128,12 @@ "search.title.goToHashtag" : { "comment" : "Go to hashtag ", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gehe zu Hashtag %@" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4395,6 +5169,12 @@ "search.title.goToUser" : { "comment" : "Go to user ", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gehe zu Nutzer %@" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4430,6 +5210,12 @@ "search.title.hashtagWith" : { "comment" : "Hashtags with ", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hashtags mit %@" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4464,6 +5250,12 @@ }, "search.title.placeholder" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suche..." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4499,6 +5291,12 @@ "search.title.usersWith" : { "comment" : "Users with ", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nutzer mit %@" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4533,6 +5331,12 @@ }, "settings.error.notificationEnableFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehler bei der Aktivierung von Benachrichtigungen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4568,6 +5372,12 @@ "settings.navigationBar.title" : { "comment" : "Settings view.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Einstellungen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4602,6 +5412,12 @@ }, "settings.title.accent" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Akzent" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4636,6 +5452,12 @@ }, "settings.title.accounts" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konten" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4671,6 +5493,12 @@ "settings.title.alwaysShowAltDescription" : { "comment" : "Show alternative text if present on status details screen", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "ALT-Text in der Detailansicht anzeigen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4706,6 +5534,12 @@ "settings.title.alwaysShowAltTitle" : { "comment" : "Show alternative text", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "ALT-Text anzeigen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4741,6 +5575,12 @@ "settings.title.alwaysShowSensitiveDescription" : { "comment" : "Force show all NFSW (sensitive) media without warnings", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anstößige Inhalte immer ohne Warnung anzeigen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4776,6 +5616,12 @@ "settings.title.alwaysShowSensitiveTitle" : { "comment" : "Always show NSFW", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anstößige Inhalte immer zeigen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4811,6 +5657,12 @@ "settings.title.applicationIcon" : { "comment" : "Application icon", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "App-Icon" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4845,6 +5697,12 @@ }, "settings.title.avatar" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avatar" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4879,6 +5737,12 @@ }, "settings.title.bottomLeftMenu" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unten links" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4913,6 +5777,12 @@ }, "settings.title.bottomRightMenu" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unten rechts" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4948,6 +5818,12 @@ "settings.title.circle" : { "comment" : "Circle", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kreis" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -4983,6 +5859,12 @@ "settings.title.close" : { "comment" : "Close", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schließen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5017,6 +5899,12 @@ }, "settings.title.dark" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dunkel" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5052,6 +5940,12 @@ "settings.title.enableReboostOnTimeline" : { "comment" : "Show boosted statuses", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Erhöhte Zustände anzeigen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5087,6 +5981,12 @@ "settings.title.enableReboostOnTimelineDescription" : { "comment" : "Boosted statuses will be visible on your home timeline.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Erhöhte Status werden auf Ihrer privaten Zeitleiste angezeigt." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5122,6 +6022,12 @@ "settings.title.follow" : { "comment" : "Follow me", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Folge mir" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5157,6 +6063,12 @@ "settings.title.followVernissage" : { "comment" : "Follow Vernissage", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vernissage folgen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5191,6 +6103,12 @@ }, "settings.title.general" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Generell" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5225,6 +6143,12 @@ }, "settings.title.haptics" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Haptik" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5259,6 +6183,12 @@ }, "settings.title.hapticsAnimationFinished" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animation beendet" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5293,6 +6223,12 @@ }, "settings.title.hapticsButtonPress" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Knopfdruck" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5327,6 +6263,12 @@ }, "settings.title.hapticsListRefresh" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Liste aktualisieren" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5361,6 +6303,12 @@ }, "settings.title.hapticsTabSelection" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tabauswahl" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5396,6 +6344,12 @@ "settings.title.hideStatusesWithoutAlt" : { "comment" : "Hide statuses without ALT", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Status ohne ALT-Text ausblenden" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5431,6 +6385,12 @@ "settings.title.hideStatusesWithoutAltDescription" : { "comment" : "Statuses without ALT text will not be visible on your home timeline.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Statusmeldungen ohne ALT-Text werden nicht auf der eigenen Zeitleiste angezeigt." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5465,6 +6425,12 @@ }, "settings.title.light" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hell" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5500,6 +6466,12 @@ "settings.title.mastodonAccount" : { "comment" : "Mastodon account", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mastodon" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5534,6 +6506,12 @@ }, "settings.title.mediaSettings" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Medieneinstellungen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5569,6 +6547,12 @@ "settings.title.menuPosition" : { "comment" : "Menu position", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Menüposition" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5604,6 +6588,12 @@ "settings.title.newAccount" : { "comment" : "New account", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neues Konto" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5638,6 +6628,12 @@ }, "settings.title.notifications" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Benachrichtigungen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5673,6 +6669,12 @@ "settings.title.notificationsDescription" : { "comment" : "Application badge with amount of new notifications will be visible near the app icon.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Der Anwendungs-Badge mit der Anzahl der neuen Benachrichtigungen wird in der Nähe des Anwendungssymbols angezeigt." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5708,6 +6710,12 @@ "settings.title.notificationsTitle" : { "comment" : "Show application badge", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Anwendungsbadge anzeigen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5742,6 +6750,12 @@ }, "settings.title.other" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anderes" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5777,6 +6791,12 @@ "settings.title.pixelfedAccount" : { "comment" : "Pixelfed account", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pixelfed" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5811,6 +6831,12 @@ }, "settings.title.privacyPolicy" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Datenschutzrichtlinie" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5845,6 +6871,12 @@ }, "settings.title.rate" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vernissage bewerten" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5879,6 +6911,12 @@ }, "settings.title.reportBug" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehler melden" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5914,6 +6952,12 @@ "settings.title.rounderRectangle" : { "comment" : "Rounded rectangle", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abgerundetes Rechteck" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5949,6 +6993,12 @@ "settings.title.showAltText" : { "comment" : "Show ALT icon", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "ALT-Icon anzeigen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -5984,6 +7034,12 @@ "settings.title.showAltTextOnTimeline" : { "comment" : "ALT icon will be displayed on timelines", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "ALT-Icons werden in der Zeitleiste angezeigt" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6019,6 +7075,12 @@ "settings.title.showAvatars" : { "comment" : "Show avatars", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avatare anzeigen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6054,6 +7116,12 @@ "settings.title.showAvatarsOnTimeline" : { "comment" : "Show avatars on timeline", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avatare werden in Listen angezeigt" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6089,6 +7157,12 @@ "settings.title.showFavourite" : { "comment" : "Show favourites", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Favoriten anzeigen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6124,6 +7198,12 @@ "settings.title.showFavouriteOnTimeline" : { "comment" : "Show favourites on timeline", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Favoriten werden in der Zeitleiste angezeigt" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6158,6 +7238,12 @@ }, "settings.title.socials" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Soziale Netzwerke" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6192,6 +7278,12 @@ }, "settings.title.sourceCode" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quellcode" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6226,6 +7318,12 @@ }, "settings.title.support" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Support" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6260,6 +7358,12 @@ }, "settings.title.system" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "System" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6294,6 +7398,12 @@ }, "settings.title.terms" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nutzungsbedingungen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6329,6 +7439,12 @@ "settings.title.thankYouClose" : { "comment" : "Close", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schließen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6364,6 +7480,12 @@ "settings.title.thankYouMessage" : { "comment" : "Thank you message", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Danke für die Unterstützung! Kleine und große Einkäufe helfen uns, unseren Traum eines hochqualitativen Produkts für unsere Nutzer aufrecht zu erhalten. Wir hoffen, Du liebst Vernissage!" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6399,6 +7521,12 @@ "settings.title.thankYouTitle" : { "comment" : "Thank you 💕", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Danke schön 💕" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6434,6 +7562,12 @@ "settings.title.theme" : { "comment" : "Theme", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Theme" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6468,6 +7602,12 @@ }, "settings.title.thirdParty" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwendete Software" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6502,6 +7642,12 @@ }, "settings.title.topMenu" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Navigationsleiste" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6537,6 +7683,12 @@ "settings.title.version" : { "comment" : "Version", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Version" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6572,6 +7724,12 @@ "settings.title.warnAboutMissingAltDescription" : { "comment" : "A warning about missing ALT texts will be displayed before publishing new post.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vernissage wird Dich warnen, wenn Du einen Beitrag mit fehlendem ALT-Text veröffentlichen möchtest." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6607,6 +7765,12 @@ "settings.title.warnAboutMissingAltTitle" : { "comment" : "Warn of missing ALT text", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Warne mich bei fehlenden ALT-Texten" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6641,6 +7805,12 @@ }, "signin.error.communicationFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kommunikation mit dem Server fehlgeschlagen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6676,6 +7846,12 @@ "signin.navigationBar.title" : { "comment" : "Signin view.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "In Pixelfed einloggen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6711,6 +7887,12 @@ "signin.title.amountOfUsers" : { "comment" : "users", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%d Benutzer" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6746,6 +7928,12 @@ "signin.title.amountOStatuses" : { "comment" : "statuses", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%d Beiträge" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6780,6 +7968,12 @@ }, "signin.title.chooseServer" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "oder wähle einen Pixelfed-Server" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6815,6 +8009,12 @@ "signin.title.enterServerAddress" : { "comment" : "Enter server address", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Serveradresse eingeben" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6850,6 +8050,12 @@ "signin.title.howToJoinLink" : { "comment" : "How to join Pixelfed", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wie man Pixelfed beitritt" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6884,6 +8090,12 @@ }, "signin.title.serverAddress" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Serveradresse" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6919,6 +8131,12 @@ "signin.title.signIn" : { "comment" : "Sign in", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Einloggen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6953,6 +8171,12 @@ }, "status.error.bookmarkFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lesezeichen setzen fehlgeschlagen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -6987,6 +8211,12 @@ }, "status.error.deleteFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Löschen fehlgeschlagen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7021,6 +8251,12 @@ }, "status.error.favouriteFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Favorisieren fehlgeschlagen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7055,6 +8291,12 @@ }, "status.error.loadingCommentsFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kommentare können nicht geladen werden." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7089,6 +8331,12 @@ }, "status.error.loadingStatusFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konnte Beitrag nicht laden." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7123,6 +8371,12 @@ }, "status.error.notFound" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beitrag existiert nicht mehr." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7157,6 +8411,12 @@ }, "status.error.reboostFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Boost fehlgeschlagen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7192,6 +8452,12 @@ "status.navigationBar.title" : { "comment" : "Status view.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Details" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7226,6 +8492,12 @@ }, "status.title.bookmark" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lesezeichen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7261,6 +8533,12 @@ "status.title.bookmarked" : { "comment" : "Bookmarked", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lesezeichen gesetzt" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7295,6 +8573,12 @@ }, "status.title.delete" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Löschen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7329,6 +8613,12 @@ }, "status.title.favourite" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Favorisieren" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7364,6 +8654,12 @@ "status.title.favourited" : { "comment" : "Favourited", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Favorisiert" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7398,6 +8694,12 @@ }, "status.title.favouritedBy" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Favorisiert von" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7433,6 +8735,12 @@ "status.title.mediaDescription" : { "comment" : "Media description", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Medienbeschreibung" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7467,6 +8775,12 @@ }, "status.title.openInBrowser" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Im Browser öffnen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7501,6 +8815,12 @@ }, "status.title.reboost" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Boosten" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7536,6 +8856,12 @@ "status.title.reboosted" : { "comment" : "Reboosted", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geboostet" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7570,6 +8896,12 @@ }, "status.title.reboostedBy" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geboostet von" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7605,6 +8937,12 @@ "status.title.report" : { "comment" : "Report", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Melden" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7639,6 +8977,12 @@ }, "status.title.saveImage" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bild speichern" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7673,6 +9017,12 @@ }, "status.title.shareImage" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bild teilen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7707,6 +9057,12 @@ }, "status.title.shareStatus" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beitrag teilen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7741,6 +9097,12 @@ }, "status.title.showMediaDescription" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Medienbeschreibung anzeigen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7775,6 +9137,12 @@ }, "status.title.statusDeleted" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beitrag gelöscht" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7810,6 +9178,12 @@ "status.title.unbookmarked" : { "comment" : "Unbookmarked", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lesezeichen gelöscht" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7845,6 +9219,12 @@ "status.title.unfavourited" : { "comment" : "Unfavourited", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Favorisieren rückgängig gemacht" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7880,6 +9260,12 @@ "status.title.unreboosted" : { "comment" : "Unreboosted", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Boost rückgängig gemacht" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7915,6 +9301,12 @@ "status.title.uploaded" : { "comment" : "Uploaded", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hochgeladen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7950,6 +9342,12 @@ "status.title.via" : { "comment" : "via", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "über %@" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -7985,6 +9383,12 @@ "status.title.yourStatus" : { "comment" : "Your post", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dein Beitrag" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8019,6 +9423,12 @@ }, "statuses.error.loadingStatusesFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Laden der Beiträge fehlgeschlagen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8053,6 +9463,12 @@ }, "statuses.error.tagFollowFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Das Folgen des Hashtags ist fehlgeschlagen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8087,6 +9503,12 @@ }, "statuses.error.tagUnfollowFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Das nicht mehr Folgen des Hashtags ist fehlgeschlagen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8121,6 +9543,12 @@ }, "statuses.navigationBar.bookmarks" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lesezeichen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8155,6 +9583,12 @@ }, "statuses.navigationBar.favourites" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Favoriten" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8189,6 +9623,12 @@ }, "statuses.navigationBar.federatedTimeline" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Föderiert" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8224,6 +9664,12 @@ "statuses.navigationBar.localTimeline" : { "comment" : "Statuses timeline (local/federated/favourite/bookmarks etc.).", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lokal" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8258,6 +9704,12 @@ }, "statuses.title.noPhotos" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hier sind leider keine Bilder." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8292,6 +9744,12 @@ }, "statuses.title.tagFollowed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du folgst dem Hashtag." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8326,6 +9784,12 @@ }, "statuses.title.tagUnfollowed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du folgst dem Hashtag nicht mehr." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8361,6 +9825,12 @@ "statusPlaceholder.title.line1" : { "comment" : "Lorem ispum text something", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lorem ipsum dolor sit amet" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8396,6 +9866,12 @@ "statusPlaceholder.title.line2" : { "comment" : "Lorem ispum text something sdf sdfsdf sdfdsfsdfsdf", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam tristique, ipsum nec cursus facilisis." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8430,6 +9906,12 @@ }, "tags.error.loadingTagsFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Laden der Hashtags fehlgeschlagen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8464,6 +9946,12 @@ }, "tags.navigationBar.followedTitle" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hashtags, denen Du folgst" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8498,6 +9986,12 @@ }, "tags.navigationBar.searchTitle" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hashtags" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8533,6 +10027,12 @@ "tags.navigationBar.trendingTitle" : { "comment" : "Trending tags.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hashtags" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8568,6 +10068,12 @@ "tags.title.amountOfPosts" : { "comment" : "Amount of posts", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%d Beiträge" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8602,6 +10108,12 @@ }, "tags.title.noTags" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hier sind leider keine Hashtags." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8636,6 +10148,12 @@ }, "thirdparty.customemoji.address" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "https://github.com/divadretlaw/EmojiText" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8671,6 +10189,12 @@ "thirdparty.customemoji.description" : { "comment" : "Render Custom Emoji in Text. Supports local and remote emojis. Remote emojis are loadad and cached using Nuke.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Benutzerdefinierte Emoji in Text rendern. Unterstützt lokale und entfernte Emojis. Entfernte Emojis werden mit Nuke geladen und zwischengespeichert." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8706,6 +10230,12 @@ "thirdparty.customemoji.title" : { "comment" : "Custom emoji section title", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "EmojiText" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8740,6 +10270,12 @@ }, "thirdparty.fleur.address" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "https://fonts.google.com/specimen/Fleur+De+Leah" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8775,6 +10311,12 @@ "thirdparty.fleur.description" : { "comment" : "Font used in the application in the icons and in the splash screen.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Schriftart, die in der Anwendung in den Symbolen und auf dem Startbildschirm verwendet wird." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8810,6 +10352,12 @@ "thirdparty.fleur.title" : { "comment" : "Fleur De Leah section title", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fleur De Leah" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8844,6 +10392,12 @@ }, "thirdparty.htmlmarkdown.address" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "https://gitlab.com/mflint/HTML2Markdown" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8879,6 +10433,12 @@ "thirdparty.htmlmarkdown.description" : { "comment" : "It's a Swift Package which attempts to convert HTML into Markdown.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Es ist ein Swift-Paket, das versucht, HTML in Markdown zu konvertieren." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8914,6 +10474,12 @@ "thirdparty.htmlmarkdown.title" : { "comment" : "Status body section title", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "HTML2Markdown" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8948,6 +10514,12 @@ }, "thirdparty.htmlstring.address" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "https://github.com/alexisakers/HTMLString" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -8983,6 +10555,12 @@ "thirdparty.htmlstring.description" : { "comment" : "HTMLString is a library written in Swift that allows your program to add and remove HTML entities in Strings.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "HTMLString ist eine in Swift geschriebene Bibliothek, die es Ihrem Programm ermöglicht, HTML-Entitäten in Strings hinzuzufügen und zu entfernen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9018,6 +10596,12 @@ "thirdparty.htmlstring.title" : { "comment" : "Section html string title", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "HTMLString" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9052,6 +10636,12 @@ }, "thirdparty.lazyimage.address" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "https://github.com/kean/Nuke" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9087,6 +10677,12 @@ "thirdparty.lazyimage.description" : { "comment" : "Lazy image section description.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Nuke bietet eine effiziente Möglichkeit zum Herunterladen und Anzeigen von Bildern in Ihrer Anwendung. Es ist einfach zu erlernen und zu verwenden. Seine Architektur ermöglicht viele leistungsstarke Funktionen und bietet praktisch unbegrenzte Möglichkeiten zur Anpassung." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9122,6 +10718,12 @@ "thirdparty.lazyimage.title" : { "comment" : "Lazy image section title", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nuke" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9157,6 +10759,12 @@ "thirdParty.navigationBar.title" : { "comment" : "Third party view.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwendete Software" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9191,6 +10799,12 @@ }, "thirdparty.notifications.address" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "https://github.com/omaralbeik/Drops" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9226,6 +10840,12 @@ "thirdparty.notifications.description" : { "comment" : "A µFramework for showing alerts like the one used when copying from pasteboard or connecting Apple pencil.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Ein µFramework zur Anzeige von Warnungen, wie sie beim Kopieren von der Papptafel oder beim Anschluss des Apple Pencil verwendet werden." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9261,6 +10881,12 @@ "thirdparty.notifications.title" : { "comment" : "Notifications (drops) section title", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Drops" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9295,6 +10921,12 @@ }, "thirdparty.oauth.address" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "https://github.com/OAuthSwift/OAuthSwift" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9330,6 +10962,12 @@ "thirdparty.oauth.description" : { "comment" : "Swift based OAuth library for iOS and macOS.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Swift-basierte OAuth-Bibliothek für iOS und macOS." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9365,6 +11003,12 @@ "thirdparty.oauth.title" : { "comment" : "OAuth section title", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "OAuthSwift" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9399,6 +11043,12 @@ }, "thirdparty.qrcodes.address" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "https://github.com/dmrschmidt/QRCode" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9434,6 +11084,12 @@ "thirdparty.qrcodes.description" : { "comment" : "A simple QR code image generator to use in your apps, written in Swift 5.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Ein einfacher QR-Code-Generator zur Verwendung in Ihren Anwendungen, geschrieben in Swift 5." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9469,6 +11125,12 @@ "thirdparty.qrcodes.title" : { "comment" : "QR codes section title", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "QRCode" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9503,6 +11165,12 @@ }, "trendingAccounts.error.loadingAccountsFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Laden der Konten fehlgeschlagen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9538,6 +11206,12 @@ "trendingAccounts.navigationBar.title" : { "comment" : "Trending accounts.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konten" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9572,6 +11246,12 @@ }, "trendingAccounts.title.noAccounts" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hier ist leider niemand." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9606,6 +11286,12 @@ }, "trendingStatuses.error.loadingStatusesFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Laden der Beiträge fehlgeschlagen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9641,6 +11327,12 @@ "trendingStatuses.navigationBar.title" : { "comment" : "Trending statuses.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fotos" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9676,6 +11368,12 @@ "trendingStatuses.title.daily" : { "comment" : "Daily", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Täglich" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9711,6 +11409,12 @@ "trendingStatuses.title.monthly" : { "comment" : "Monthly", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Monatlich" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9745,6 +11449,12 @@ }, "trendingStatuses.title.noPhotos" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hier sind leider keine Bilder." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9780,6 +11490,12 @@ "trendingStatuses.title.yearly" : { "comment" : "Yearly", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jährlich" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9814,6 +11530,12 @@ }, "userProfile.error.block" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "(Nicht mehr) Blockieren fehlgeschlagen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9848,6 +11570,12 @@ }, "userProfile.error.loadingAccountFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehler beim Laden vom Server." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9882,6 +11610,12 @@ }, "userProfile.error.muting" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "(Nicht mehr) Stummschalten fehlgeschlagen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9916,6 +11650,12 @@ }, "userProfile.error.notExists" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto existiert nicht." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9950,6 +11690,12 @@ }, "userProfile.error.relationship" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beziehungsaktion fehlgeschlagen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -9985,6 +11731,12 @@ "userProfile.title.block" : { "comment" : "Block", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blockiert" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10019,6 +11771,12 @@ }, "userProfile.title.blocked" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto blockiert" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10054,6 +11812,12 @@ "userProfile.title.blocks" : { "comment" : "Blocked accounts", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blockierte Konten" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10089,6 +11853,12 @@ "userProfile.title.bookmarks" : { "comment" : "Bookmarks", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lesezeichen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10123,6 +11893,12 @@ }, "userProfile.title.boostedStatusesMuted" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Boosts gedämpft" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10157,6 +11933,12 @@ }, "userProfile.title.cancelRequestFollow" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anfrage abbrechen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10192,6 +11974,12 @@ "userProfile.title.disableBoosts" : { "comment" : "Disable boosts", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Boosts deaktivieren" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10227,6 +12015,12 @@ "userProfile.title.disabledBoosts" : { "comment" : "Disabled boosts", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Deaktivierte Boosts" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10262,6 +12056,12 @@ "userProfile.title.edit" : { "comment" : "Edit profile", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bearbeiten" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10297,6 +12097,12 @@ "userProfile.title.enableBoosts" : { "comment" : "Enable boosts", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Aktivieren von Boosts" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10332,6 +12138,12 @@ "userProfile.title.favourites" : { "comment" : "Favourites", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Favoriten" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10366,6 +12178,12 @@ }, "userProfile.title.follow" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Folgen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10401,6 +12219,12 @@ "userProfile.title.followedTags" : { "comment" : "Followed tags", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hashtags, denen Du folgst" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10436,6 +12260,12 @@ "userProfile.title.followers" : { "comment" : "Followers", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Follower" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10471,6 +12301,12 @@ "userProfile.title.following" : { "comment" : "Following", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "werden gefolgt" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10506,6 +12342,12 @@ "userProfile.title.followRequests" : { "comment" : "FollowRequests", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anfragen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10540,6 +12382,12 @@ }, "userProfile.title.followsYou" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "folgt Dir" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10575,6 +12423,12 @@ "userProfile.title.instance" : { "comment" : "Instance information", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Instanzinformation" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10610,6 +12464,12 @@ "userProfile.title.joined" : { "comment" : "Joined", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Am %@ beigetreten" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10645,6 +12505,12 @@ "userProfile.title.mute" : { "comment" : "Mute", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stummschalten" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10679,6 +12545,12 @@ }, "userProfile.title.muted" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto stummgeschaltet" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10714,6 +12586,12 @@ "userProfile.title.mutes" : { "comment" : "Muted accounts", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stummgeschaltete Konten" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10749,6 +12627,12 @@ "userProfile.title.openInBrowser" : { "comment" : "Open in browser", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Im Browser öffnen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10784,6 +12668,12 @@ "userProfile.title.posts" : { "comment" : "Posts", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beiträge" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10819,6 +12709,12 @@ "userProfile.title.privateProfileSubtitle" : { "comment" : "Only approved followers can see photos.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nur Freigeschaltete können Beiträge sehen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10854,6 +12750,12 @@ "userProfile.title.privateProfileTitle" : { "comment" : "This profile is private.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dieses Profil ist privat." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10889,6 +12791,12 @@ "userProfile.title.report" : { "comment" : "Report", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Melden" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10923,6 +12831,12 @@ }, "userProfile.title.requestFollow" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Folgen anfragen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10958,6 +12872,12 @@ "userProfile.title.share" : { "comment" : "Share", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Teilen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -10993,6 +12913,12 @@ "userProfile.title.unblock" : { "comment" : "Unblock", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blockierung aufheben" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -11027,6 +12953,12 @@ }, "userProfile.title.unblocked" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto nicht mehr blockiert" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -11061,6 +12993,12 @@ }, "userProfile.title.unfollow" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nicht mehr folgen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -11096,6 +13034,12 @@ "userProfile.title.unmute" : { "comment" : "Unute", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stummschaltung aufheben" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -11130,6 +13074,12 @@ }, "userProfile.title.unmuted" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stummschaltung des Kontos aufgehoben" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -11164,6 +13114,12 @@ }, "Vernissage" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vernissage" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -11193,6 +13149,12 @@ "widget.family.notSupported" : { "comment" : "Not supported", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Nicht unterstützt" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -11228,6 +13190,12 @@ "widget.title.photoDescription" : { "comment" : "Widget view.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Widget mit Fotos aus Pixelfed." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -11262,6 +13230,12 @@ }, "widget.title.qrCodeDescription" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Widget mit QR-Code zu Deinem Pixelfed-Profil." + } + }, "en" : { "stringUnit" : { "state" : "translated", diff --git a/Localization/de_DE.lproj/Localizable.strings b/Localization/de_DE.lproj/Localizable.strings deleted file mode 100644 index 9d1b427..0000000 --- a/Localization/de_DE.lproj/Localizable.strings +++ /dev/null @@ -1,374 +0,0 @@ -// MARK: Common strings. -"global.title.contentWarning" = "Inhaltswarnung"; -"global.title.seePost" = "Beitrag ansehen"; -"global.title.refresh" = "Aktualisieren"; -"global.title.momentsAgo" = "gerade eben"; -"global.title.success" = "Erfolgreich"; -"global.title.photoSaved" = "Foto wurde gespeichert."; -"global.title.ok" = "OK"; -"global.title.showMore" = "Mehr anzeigen"; -"global.title.showLess" = "Weniger anzeigen"; -"global.title.close" = "Schließen"; -"global.error.refreshingCredentialsTitle" = "Zugangsdaten konnten nicht bestätigt werden."; -"global.error.refreshingCredentialsSubtitle" = "Bitte erneut in Pixelfed einloggen."; - -// MARK: Global errors. -"global.error.unexpected" = "Unerwarteter Fehler."; -"global.error.statusesNotRetrieved" = "Beiträge nicht geladen."; -"global.error.errorDuringDownloadStatuses" = "Fehler beim Laden der Beiträge vom Server."; -"global.error.errorDuringDownloadHashtag" = "Fehler beim Laden des Hashtags vom Server."; -"global.error.hashtagNotExists" = "Hashtag existiert nicht."; -"global.error.errorDuringImageDownload" = "Bild kann nicht geladen werden."; -"global.error.canceledImageDownload" = "Laden des Bildes abgebrochen."; -"global.error.errorDuringDataLoad" = "Laden von Daten fehlgeschlagen."; -"global.error.errorDuringUserRead" = "Benutzer kann nicht geladen werden."; -"global.error.badUrlServer" = "Ungültige Server-URL."; -"global.error.accessTokenNotFound" = "Zugangstoken nicht gefunden."; -"global.error.errorDuringDownloadStatus" = "Fehler beim Laden vom Server."; -"global.error.errorDuringPurchaseVerification" = "Konnte Einkauf nicht verifizieren."; - -// MARK: Main view (main navigation bar). -"mainview.tab.homeTimeline" = "Zuhause"; -"mainview.tab.localTimeline" = "Lokal"; -"mainview.tab.federatedTimeline" = "Föderiert"; -"mainview.tab.trendingPhotos" = "Fotos"; -"mainview.tab.trendingTags" = "Hashtags"; -"mainview.tab.trendingAccounts" = "Benutzer"; -"mainview.tab.userProfile" = "Profil"; -"mainview.tab.notifications" = "Benachrichtigungen"; -"mainview.tab.search" = "Suche"; -"mainview.tab.trending" = "Im Trend"; - -// MARK: Main view (leading navigation bar). -"mainview.menu.settings" = "Einstellungen"; - -// MARK: Main view (error notifications). -"mainview.error.switchAccounts" = "Konnte Benutzer nicht wechseln."; - -// MARK: Home timeline. -"home.title.allCaughtUp" = "Das war’s, alles gesehen"; -"home.title.noPhotos" = "Hier sind leider keine Bilder."; - -// MARK: Statuses timeline (local/federated/favourite/bookmarks etc.). -"statuses.navigationBar.localTimeline" = "Lokal"; -"statuses.navigationBar.federatedTimeline" = "Föderiert"; -"statuses.navigationBar.favourites" = "Favoriten"; -"statuses.navigationBar.bookmarks" = "Lesezeichen"; -"statuses.title.noPhotos" = "Hier sind leider keine Bilder."; -"statuses.title.tagFollowed" = "Du folgst dem Hashtag."; -"statuses.title.tagUnfollowed" = "Du folgst dem Hashtag nicht mehr."; -"statuses.error.loadingStatusesFailed" = "Laden der Beiträge fehlgeschlagen."; -"statuses.error.tagFollowFailed" = "Das Folgen des Hashtags ist fehlgeschlagen."; -"statuses.error.tagUnfollowFailed" = "Das nicht mehr Folgen des Hashtags ist fehlgeschlagen."; - -// Mark: Search view. -"search.navigationBar.title" = "Suche"; -"search.title.placeholder" = "Suche …"; -"search.title.usersWith" = "Nutzer mit %@"; -"search.title.goToUser" = "Gehe zu Nutzer %@"; -"search.title.hashtagWith" = "Hashtags mit %@"; -"search.title.goToHashtag" = "Gehe zu Hashtag %@"; - -// Mark: Trending statuses. -"trendingStatuses.navigationBar.title" = "Fotos"; -"trendingStatuses.title.daily" = "Täglich"; -"trendingStatuses.title.monthly" = "Monatlich"; -"trendingStatuses.title.yearly" = "Jährlich"; -"trendingStatuses.error.loadingStatusesFailed" = "Laden der Beiträge fehlgeschlagen."; -"trendingStatuses.title.noPhotos" = "Hier sind leider keine Bilder."; - -// Mark: Trending tags. -"tags.navigationBar.trendingTitle" = "Hashtags"; -"tags.navigationBar.searchTitle" = "Hashtags"; -"tags.navigationBar.followedTitle" = "Hashtags, denen Du folgst"; -"tags.title.noTags" = "Hier sind leider keine Hashtags."; -"tags.title.amountOfPosts" = "%d Beiträge"; -"tags.error.loadingTagsFailed" = "Laden der Hashtags fehlgeschlagen."; - -// Mark: Trending accounts. -"trendingAccounts.navigationBar.title" = "Konten"; -"trendingAccounts.title.noAccounts" = "Hier ist leider niemand."; -"trendingAccounts.error.loadingAccountsFailed" = "Laden der Konten fehlgeschlagen."; - -// Mark: User profile view. -"userProfile.title.openInBrowser" = "Im Browser öffnen"; -"userProfile.title.share" = "Teilen"; -"userProfile.title.unmute" = "Stummschaltung aufheben"; -"userProfile.title.mute" = "Stummschalten"; -"userProfile.title.unblock" = "Blockierung aufheben"; -"userProfile.title.block" = "Blockieren"; -"userProfile.title.favourites" = "Favoriten"; -"userProfile.title.bookmarks" = "Lesezeichen"; -"userProfile.title.followedTags" = "Hashtags, denen Du folgst"; -"userProfile.title.posts" = "Beiträge"; -"userProfile.title.followers" = "Follower"; -"userProfile.title.following" = "werden gefolgt"; -"userProfile.title.joined" = "Am %@ beigetreten"; -"userProfile.title.unfollow" = "Nicht mehr folgen"; -"userProfile.title.follow" = "Folgen"; -"userProfile.title.instance" = "Instanzinformation"; -"userProfile.title.blocks" = "Blockierte Konten"; -"userProfile.title.mutes" = "Stummgeschaltete Konten"; -"userProfile.title.muted" = "Konto stummgeschaltet"; -"userProfile.title.unmuted" = "Stummschaltung des Kontos aufgehoben"; -"userProfile.title.blocked" = "Konto blockiert"; -"userProfile.title.unblocked" = "Konto nicht mehr blockiert"; -"userProfile.title.report" = "Melden"; -"userProfile.title.followsYou" = "folgt Dir"; -"userProfile.title.requestFollow" = "Folgen anfragen"; -"userProfile.title.cancelRequestFollow" = "Anfrage abbrechen"; -"userProfile.title.followRequests" = "Anfragen"; -"userProfile.title.privateProfileTitle" = "Dieses Profil ist privat."; -"userProfile.title.privateProfileSubtitle" = "Nur Freigeschaltete können Beiträge sehen."; -"userProfile.error.notExists" = "Konto existiert nicht."; -"userProfile.error.loadingAccountFailed" = "Fehler beim Laden vom Server."; -"userProfile.error.muting" = "(Nicht mehr) Stummschalten fehlgeschlagen."; -"userProfile.error.block" = "(Nicht mehr) Blockieren fehlgeschlagen."; -"userProfile.error.relationship" = "Beziehungsaktion fehlgeschlagen."; -"userProfile.title.edit" = "Bearbeiten"; -"userProfile.title.muted" = "Stummgeschaltet"; -"userProfile.title.blocked" = "Blockiert"; - -// Mark: Notifications view. -"notifications.navigationBar.title" = "Benachrichtigungen"; -"notifications.title.noNotifications" = "Hier ist leider nichts."; -"notifications.title.followedYou" = "folgt Dir"; -"notifications.title.mentionedYou" = "hat Dich erwähnt"; -"notifications.title.boosted" = "geboostet"; -"notifications.title.favourited" = "favorisiert"; -"notifications.title.postedStatus" = "Beitrag veröffentlicht"; -"notifications.title.followRequest" = "Folgeanfrage"; -"notifications.title.poll" = "Umfrage"; -"notifications.title.updatedStatus" = "Beitrag bearbeitet"; -"notifications.title.signedUp" = "registriert"; -"notifications.title.newReport" = "neue Meldung"; -"notifications.error.loadingNotificationsFailed" = "Benachrichtigungen konnten nicht geladen werden."; - -// Mark: Compose view. -"compose.navigationBar.title" = "Beitrag erstellen"; -"compose.title.everyone" = "Öffentlich"; -"compose.title.unlisted" = "nicht gelistet"; -"compose.title.followers" = "für Follower"; -"compose.title.attachPhotoFull" = "Füge ein Foto hinzu und beschreibe, was Du denkst."; -"compose.title.attachPhotoMini" = "Beschreibe was Du denkst."; -"compose.title.publish" = "Veröffentlichen"; -"compose.title.cancel" = "Abbrechen"; -"compose.title.writeContentWarning" = "Inhaltswarnung hinzufügen"; -"compose.title.commentsWillBeDisabled" = "Kommentare werden nicht möglich sein"; -"compose.title.statusPublished" = "Beitrag veröffentlicht"; -"compose.title.tryToUpload" = "Versuche hochzuladen"; -"compose.title.delete" = "Löschen"; -"compose.title.edit" = "Bearbeiten"; -"compose.title.photos" = "Fotobibliothek"; -"compose.title.camera" = "Foto aufnehmen"; -"compose.title.files" = "Dateien durchsuchen"; -"compose.title.missingAltTexts" = "Fehlende ALT-Texte"; -"compose.title.missingAltTextsWarning" = "Es haben nicht alle Fotos eine Beschreibung für Sehbehinderte. Möchtest Du trotzdem senden?"; -"compose.error.loadingPhotosFailed" = "Kann das Foto nicht aus der Bibliothek laden."; -"compose.error.postingPhotoFailed" = "Fehler beim Veröffentlichen des Fotos."; -"compose.error.postingStatusFailed" = "Fehler beim Veröffentlichen des Beitrags."; - -// Mark: Photo editor view. -"photoEdit.navigationBar.title" = "Fotodetails"; -"photoEdit.title.photo" = "Foto"; -"photoEdit.title.accessibility" = "Barrierefreiheit"; -"photoEdit.title.accessibilityDescription" = "Beschreibung für Sehbehinderte"; -"photoEdit.title.save" = "Speichern"; -"photoEdit.title.cancel" = "Abbrechen"; -"photoEdit.error.updatePhotoFailed" = "Fehler beim Aktualisieren des Fotos."; - -// Mark: Place selector view. -"placeSelector.navigationBar.title" = "Orte"; -"placeSelector.title.search" = "Suchen …"; -"placeSelector.title.buttonSearch" = "Suchen"; -"placeSelector.title.cancel" = "Abbrechen"; -"placeSelector.error.loadingPlacesFailed" = "Benachrichtigungen konnten nicht geladen werden."; - -// Mark: Settings view. -"settings.navigationBar.title" = "Einstellungen"; -"settings.title.close" = "Schließen"; -"settings.title.version" = "Version"; -"settings.title.accounts" = "Konten"; -"settings.title.newAccount" = "Neues Konto"; -"settings.title.accent" = "Akzent"; -"settings.title.theme" = "Theme"; -"settings.title.system" = "System"; -"settings.title.light" = "Hell"; -"settings.title.dark" = "Dunkel"; -"settings.title.avatar" = "Avatar"; -"settings.title.circle" = "Kreis"; -"settings.title.rounderRectangle" = "Abgerundetes Rechteck"; -"settings.title.other" = "Anderes"; -"settings.title.thirdParty" = "Verwendete Software"; -"settings.title.reportBug" = "Fehler melden"; -"settings.title.githubIssues" = "Issues auf Github"; -"settings.title.follow" = "Folge mir"; -"settings.title.support" = "Support"; -"settings.title.thankYouTitle" = "Danke schön 💕"; -"settings.title.thankYouMessage" = "Danke für die Unterstützung! Kleine und große Einkäufe helfen uns, unseren Traum eines hochqualitativen Produkts für unsere Nutzer aufrecht zu erhalten. Wir hoffen, Du liebst Vernissage!"; -"settings.title.thankYouClose" = "Schließen"; -"settings.title.haptics" = "Haptik"; -"settings.title.hapticsTabSelection" = "Tabauswahl"; -"settings.title.hapticsButtonPress" = "Knopfdruck"; -"settings.title.hapticsListRefresh" = "Liste aktualisieren"; -"settings.title.hapticsAnimationFinished" = "Animation beendet"; -"settings.title.mediaSettings" = "Medieneinstellungen"; -"settings.title.alwaysShowSensitiveTitle" = "Anstößige Inhalte immer zeigen"; -"settings.title.alwaysShowSensitiveDescription" = "Anstößige Inhalte immer ohne Warnung anzeigen"; -"settings.title.alwaysShowAltTitle" = "ALT-Text anzeigen"; -"settings.title.alwaysShowAltDescription" = "ALT-Text in der Detailansicht anzeigen"; -"settings.title.general" = "Generell"; -"settings.title.applicationIcon" = "App-Icon"; -"settings.title.followVernissage" = "Vernissage folgen"; -"settings.title.mastodonAccount" = "Mastodon"; -"settings.title.pixelfedAccount" = "Pixelfed"; -"settings.title.openPage" = "Öffnen"; -"settings.title.privacyPolicy" = "Datenschutzrichtlinie"; -"settings.title.terms" = "Nutzungsbedingungen"; -"settings.title.sourceCode" = "Quellcode"; -"settings.title.rate" = "Vernissage bewerten"; -"settings.title.socials" = "Soziale Netzwerke"; -"settings.title.menuPosition" = "Menüposition"; -"settings.title.topMenu" = "Navigationsleiste"; -"settings.title.bottomRightMenu" = "Unten rechts"; -"settings.title.bottomLeftMenu" = "Unten links"; -"settings.title.showAvatars" = "Avatare anzeigen"; -"settings.title.showAvatarsOnTimeline" = "Avatare werden in Listen angezeigt"; -"settings.title.showFavourite" = "Favoriten anzeigen"; -"settings.title.showFavouriteOnTimeline" = "Favoriten werden in der Zeitleiste angezeigt"; -"settings.title.showAltText" = "ALT-Icon anzeigen"; -"settings.title.showAltTextOnTimeline" = "ALT-Icons werden in der Zeitleiste angezeigt"; -"settings.title.warnAboutMissingAltTitle" = "Warne mich bei fehlenden ALT-Texten"; -"settings.title.warnAboutMissingAltDescription" = "Vernissage wird Dich warnen, wenn Du einen Beitrag mit fehlendem ALT-Text veröffentlichen möchtest."; - -// Mark: Signin view. -"signin.navigationBar.title" = "In Pixelfed einloggen"; -"signin.title.serverAddress" = "Serveradresse"; -"signin.title.signIn" = "Einloggen"; -"signin.title.enterServerAddress" = "Serveradresse eingeben"; -"signin.title.howToJoinLink" = "Wie man Pixelfed beitritt"; -"signin.title.chooseServer" = "oder wähle einen Pixelfed-Server"; -"signin.title.amountOfUsers" = "%d Benutzer"; -"signin.title.amountOStatuses" = "%d Beiträge"; -"signin.error.communicationFailed" = "Kommunikation mit dem Server fehlgeschlagen."; - -// Mark: Status view. -"status.navigationBar.title" = "Details"; -"status.title.uploaded" = "Hochgeladen"; -"status.title.via" = "über %@"; -"status.title.reboostedBy" = "Geboostet von"; -"status.title.favouritedBy" = "Favorisiert von"; -"status.title.openInBrowser" = "Im Browser öffnen"; -"status.title.shareStatus" = "Beitrag teilen"; -"status.title.yourStatus" = "Dein Beitrag"; -"status.title.delete" = "Löschen"; -"status.title.reboosted" = "Geboostet"; -"status.title.unreboosted" = "Boost rückgängig gemacht"; -"status.title.favourited" = "Favorisiert"; -"status.title.unfavourited" = "Favorisieren rückgängig gemacht"; -"status.title.bookmarked" = "Lesezeichen gesetzt"; -"status.title.unbookmarked" = "Lesezeichen gelöscht"; -"status.title.statusDeleted" = "Beitrag gelöscht"; -"status.title.reboost" = "Boosten"; -"status.title.unreboost" = "Nicht mehr boosten"; -"status.title.favourite" = "Favorisieren"; -"status.title.unfavourite" = "Nicht mehr favorisieren"; -"status.title.bookmark" = "Lesezeichen"; -"status.title.unbookmark" = "Lesezeichen löschen"; -"status.title.comment" = "Kommentieren"; -"status.title.report" = "Melden"; -"status.title.saveImage" = "Bild speichern"; -"status.title.showMediaDescription" = "Medienbeschreibung anzeigen"; -"status.title.mediaDescription" = "Medienbeschreibung"; -"status.title.shareImage" = "Bild teilen"; -"status.title.altText" = "ALT"; -"status.error.loadingStatusFailed" = "Konnte Beitrag nicht laden."; -"status.error.notFound" = "Beitrag existiert nicht mehr."; -"status.error.loadingCommentsFailed" = "Kommentare können nicht geladen werden."; -"status.error.reboostFailed" = "Boost fehlgeschlagen."; -"status.error.favouriteFailed" = "Favorisieren fehlgeschlagen."; -"status.error.bookmarkFailed" = "Lesezeichen setzen fehlgeschlagen."; -"status.error.deleteFailed" = "Löschen fehlgeschlagen."; - -// Mark: Accounts view. -"accounts.navigationBar.followers" = "Follower"; -"accounts.navigationBar.following" = "werden gefolgt"; -"accounts.navigationBar.favouritedBy" = "Favorisiert von"; -"accounts.navigationBar.reboostedBy" = "Geboostet von"; -"accounts.navigationBar.blocked" = "Blockierte Benutzer"; -"accounts.navigationBar.mutes" = "Stummgeschaltete Benutzer"; -"accounts.title.noAccounts" = "Hier ist leider niemand."; -"accounts.error.loadingAccountsFailed" = "Konnte Benutzer nicht laden."; - -// Mark: Third party view. -"thirdParty.navigationBar.title" = "Verwendete Software"; - -// Mark: Widget view. -"widget.title.photoDescription" = "Widget mit Fotos aus Pixelfed."; -"widget.title.qrCodeDescription" = "Widget mit QR-Code zu Deinem Pixelfed-Profil."; - -// Mark: In-app purchases. -"purchase.donut.title" = "Donut"; -"purchase.donut.description" = "Gib mir einen Donut aus."; -"purchase.coffee.title" = "Kaffee"; -"purchase.coffee.description" = "Gib mir einen Kaffee."; -"purchase.cake.title" = "Kaffee und Kuchen"; -"purchase.cake.description" = "Lade mich zu Kaffee und Kuchen ein."; - -// Mark: Edit profile. -"editProfile.navigationBar.title" = "Profil bearbeiten"; -"editProfile.title.displayName" = "Anzeigename"; -"editProfile.title.bio" = "Biografie"; -"editProfile.title.website" = "Webseite"; -"editProfile.title.save" = "Speichern"; -"editProfile.title.accountSaved" = "Profil wurde aktualisiert."; -"editProfile.title.photoInfo" = "Das geänderte Profilbild wird mit einer kurzen Verzögerung in der App und auf der Webseite sichtbar sein."; -"editProfile.title.privateAccount" = "Privater Account"; -"editProfile.title.privateAccountInfo" = "Wenn Dein Account privat ist, können nur Nutzer die Du bestätigst Deine Fotos und Videos auf Pixelfed sehen. Benutzer, die Dir jetzt schon folgen, sind nicht betroffen."; -"editProfile.error.saveAccountFailed" = "Konnte Profil nicht speichern."; -"editProfile.error.loadingAvatarFailed" = "Konnte Avatar nicht laden."; -"editProfile.error.noProfileData" = "Profildaten können nicht angezeigt werden."; -"editProfile.error.loadingAccountFailed" = "Fehler beim Laden des Profils vom Server."; - -// Mark: Instance information. -"instance.navigationBar.title" = "Instanz"; -"instance.title.instanceInfo" = "Instanzinfo"; -"instance.title.name" = "Name"; -"instance.title.address" = "Addresse"; -"instance.title.email" = "E-Mail"; -"instance.title.version" = "Version"; -"instance.title.users" = "Benutzer"; -"instance.title.posts" = "Beiträge"; -"instance.title.domains" = "Domains"; -"instance.title.registrations" = "Registrierungen"; -"instance.title.approvalRequired" = "Bestätigung erforderlich"; -"instance.title.rules" = "Instanzregeln"; -"instance.title.contact" = "Kontact"; -"instance.title.pixelfedAccount" = "Pixelfed-Konto"; -"instance.error.noInstanceData" = "Instanzdaten können nicht angezeigt werden."; -"instance.error.loadingDataFailed" = "Fehler beim Laden der Instanzdaten vom Server."; - -// Mark: Report screen. -"report.navigationBar.title" = "Melden"; -"report.title.close" = "Schließen"; -"report.title.send" = "Senden"; -"report.title.userReported" = "Benutzer wurde gemeldet"; -"report.title.postReported" = "Beitrag wurde gemeldet"; -"report.title.reportType" = "Art des Missbrauchs"; -"report.title.spam" = "Spam"; -"report.title.sensitive" = "Nacktheit oder Sex"; -"report.title.abusive" = "Hassrede oder Symbole"; -"report.title.underage" = "Minderjähriger Benutzer"; -"report.title.violence" = "Gewalt oder gefährliche Organisationen"; -"report.title.copyright" = "Urheberrechtsverletzung"; -"report.title.impersonation" = "Identitätsdiebstahl"; -"report.title.scam" = "Beleidigung"; -"report.title.terrorism" = "Terrorismus"; -"report.error.notReported" = "Fehler beim Melden."; - -// Mark: Following requests. -"followingRequests.navigationBar.title" = "Folgeanfragen"; -"followingRequests.title.approve" = "Bestätigen"; -"followingRequests.title.reject" = "Ablehnen"; -"followingRequests.error.approve" = "Fehler beim Bestätigen."; -"followingRequests.error.reject" = "Fehler beim Ablehnen."; diff --git a/Localization/es_ES.lproj/Localizable.strings b/Localization/es_ES.lproj/Localizable.strings deleted file mode 100644 index e139016..0000000 --- a/Localization/es_ES.lproj/Localizable.strings +++ /dev/null @@ -1,371 +0,0 @@ -// MARK: Common strings. -"global.title.contentWarning" = "Contenido sensible"; -"global.title.seePost" = "Ver publicación"; -"global.title.refresh" = "Actualizar"; -"global.title.momentsAgo" = "hace uno momento"; -"global.title.success" = "Éxito"; -"global.title.photoSaved" = "La foto se ha guardado."; -"global.title.ok" = "Aceptar"; -"global.title.showMore" = "Mostrar más"; -"global.title.showLess" = "Mostrar menos"; -"global.title.close" = "Cerrar"; -"global.error.refreshingCredentialsTitle" = "Error al actualizar las credenciales."; -"global.error.refreshingCredentialsSubtitle" = "Por favor, vuelve a iniciar sesión en Pixelfed."; - -// MARK: Global errors. -"global.error.unexpected" = "Error inesperado."; -"global.error.statusesNotRetrieved" = "No se pudieron obtener los estados."; -"global.error.errorDuringDownloadStatuses" = "Error durante la descarga de estados del servidor."; -"global.error.errorDuringDownloadHashtag" = "Error durante la descarga de etiquetas del servidor."; -"global.error.hashtagNotExists" = "La etiqueta no existe."; -"global.error.errorDuringImageDownload" = "No se puede descargar la imagen."; -"global.error.canceledImageDownload" = "La descarga de la imagen ha sido cancelada."; -"global.error.errorDuringDataLoad" = "Error al cargar los datos."; -"global.error.errorDuringUserRead" = "No se puede recuperar la cuenta de usuario."; -"global.error.badUrlServer" = "URL incorrecta del servidor."; -"global.error.accessTokenNotFound" = "Token de acceso no encontrado."; -"global.error.errorDuringDownloadStatus" = "Error durante la descarga del estado del servidor."; -"global.error.errorDuringPurchaseVerification" = "Fallo en la verificación de la compra."; - -// MARK: Main view (main navigation bar). -"mainview.tab.homeTimeline" = "Inicio"; -"mainview.tab.localTimeline" = "Local"; -"mainview.tab.federatedTimeline" = "Federado"; -"mainview.tab.trendingPhotos" = "Fotos"; -"mainview.tab.trendingTags" = "Etiquetas"; -"mainview.tab.trendingAccounts" = "Cuentas"; -"mainview.tab.userProfile" = "Perfil"; -"mainview.tab.notifications" = "Notificaciones"; -"mainview.tab.search" = "Buscar"; -"mainview.tab.trending" = "Tendencias"; - -// MARK: Main view (leading navigation bar). -"mainview.menu.settings" = "Ajustes"; - -// MARK: Main view (error notifications). -"mainview.error.switchAccounts" = "No se pueden cambiar las cuentas."; - -// MARK: Home timeline. -"home.title.allCaughtUp" = "Estás al día"; -"home.title.noPhotos" = "Desafortunadamente, no hay fotos aquí."; - -// MARK: Statuses timeline (local/federated/favourite/bookmarks etc.). -"statuses.navigationBar.localTimeline" = "Local"; -"statuses.navigationBar.federatedTimeline" = "Federado"; -"statuses.navigationBar.favourites" = "Favoritos"; -"statuses.navigationBar.bookmarks" = "Marcadores"; -"statuses.title.noPhotos" = "Desafortunadamente, no hay fotos aquí."; -"statuses.title.tagFollowed" = "Estás siguiendo la etiqueta."; -"statuses.title.tagUnfollowed" = "Se ha dejado de seguir la etiqueta."; -"statuses.error.loadingStatusesFailed" = "Error al cargar los estados."; -"statuses.error.tagFollowFailed" = "Error al seguir la etiqueta."; -"statuses.error.tagUnfollowFailed" = "Error al dejar de seguir la etiqueta."; - -// Mark: Search view. -"search.navigationBar.title" = "Buscar"; -"search.title.placeholder" = "Buscar..."; -"search.title.usersWith" = "Usuarios con %@"; -"search.title.goToUser" = "Ir al usuario %@"; -"search.title.hashtagWith" = "Etiquetas con %@"; -"search.title.goToHashtag" = "Ir a la etiqueta %@"; - -// Mark: Trending statuses. -"trendingStatuses.navigationBar.title" = "Fotos"; -"trendingStatuses.title.daily" = "Diario"; -"trendingStatuses.title.monthly" = "Mensual"; -"trendingStatuses.title.yearly" = "Anual"; -"trendingStatuses.error.loadingStatusesFailed" = "Error al cargar los estados."; -"trendingStatuses.title.noPhotos" = "Desafortunadamente, no hay fotos aquí."; - -// Mark: Trending tags. -"trendingTags.navigationBar.title" = "Etiquetas"; -"trendingTags.title.noTags" = "Desafortunadamente, no hay etiquetas aquí."; -"trendingTags.title.amountOfPosts" = "%d publicaciones"; -"trendingTags.error.loadingTagsFailed" = "Error al cargar las etiquetas."; - -// Mark: Trending accounts. -"trendingAccounts.navigationBar.title" = "Cuentas"; -"trendingAccounts.title.noAccounts" = "Desafortunadamente, aquí no hay nadie."; -"trendingAccounts.error.loadingAccountsFailed" = "Error al cargar las cuentas."; - -// Mark: User profile view. -"userProfile.title.openInBrowser" = "Abrir en el navegador"; -"userProfile.title.share" = "Compartir"; -"userProfile.title.unmute" = "Quitar silencio"; -"userProfile.title.mute" = "Silenciar"; -"userProfile.title.unblock" = "Desbloquear"; -"userProfile.title.block" = "Bloquear"; -"userProfile.title.favourites" = "Favoritos"; -"userProfile.title.bookmarks" = "Marcadores"; -"userProfile.title.posts" = "Publicaciones"; -"userProfile.title.followers" = "Seguidores"; -"userProfile.title.following" = "Siguiendo"; -"userProfile.title.joined" = "Unido a %@"; -"userProfile.title.unfollow" = "Dejar de seguir"; -"userProfile.title.follow" = "Seguir"; -"userProfile.title.instance" = "Información de la instancia"; -"userProfile.title.blocks" = "Cuentas bloqueadas"; -"userProfile.title.mutes" = "Cuentas silenciadas"; -"userProfile.title.muted" = "Cuenta silenciada"; -"userProfile.title.unmuted" = "Cuenta sin silencio"; -"userProfile.title.blocked" = "Cuenta bloqueada"; -"userProfile.title.unblocked" = "Cuenta desbloqueada"; -"userProfile.title.report" = "Informar"; -"userProfile.title.followsYou" = "Te sigue"; -"userProfile.title.requestFollow" = "Solicitar seguir"; -"userProfile.title.cancelRequestFollow" = "Cancelar solicitud"; -"userProfile.title.followRequests" = "Solicitudes de seguimiento"; -"userProfile.title.privateProfileTitle" = "Este perfil es privado."; -"userProfile.title.privateProfileSubtitle" = "Solo los seguidores aprobados pueden ver las fotos."; -"userProfile.error.notExists" = "La cuenta no existe."; -"userProfile.error.loadingAccountFailed" = "Error al descargar la cuenta del servidor."; -"userProfile.error.muting" = "Error al silenciar/quitar silencio."; -"userProfile.error.block" = "Error al bloquear/desbloquear."; -"userProfile.error.relationship" = "Error en la acción de relación."; -"userProfile.title.edit" = "Editar"; -"userProfile.title.muted" = "Silenciado"; -"userProfile.title.blocked" = "Bloqueado"; - -// Mark: Notifications view. -"notifications.navigationBar.title" = "Notificaciones"; -"notifications.title.noNotifications" = "Desafortunadamente, aquí no hay nada."; -"notifications.title.followedYou" = "te ha seguido"; -"notifications.title.mentionedYou" = "te ha mencionado"; -"notifications.title.boosted" = "ha compartido"; -"notifications.title.favourited" = "le ha gustado"; -"notifications.title.postedStatus" = "ha publicado un estado"; -"notifications.title.followRequest" = "solicitud de seguimiento"; -"notifications.title.poll" = "encuesta"; -"notifications.title.updatedStatus" = "estado actualizado"; -"notifications.title.signedUp" = "se ha registrado"; -"notifications.title.newReport" = "nuevo informe"; -"notifications.error.loadingNotificationsFailed" = "Error al cargar las notificaciones."; - -// Mark: Compose view. -"compose.navigationBar.title" = "Componer"; -"compose.title.everyone" = "Todos"; -"compose.title.unlisted" = "No listado"; -"compose.title.followers" = "Seguidores"; -"compose.title.attachPhotoFull" = "Adjunta una foto y escribe lo que piensas"; -"compose.title.attachPhotoMini" = "Escribe lo que piensas"; -"compose.title.publish" = "Publicar"; -"compose.title.cancel" = "Cancelar"; -"compose.title.writeContentWarning" = "Escribir aviso de contenido"; -"compose.title.commentsWillBeDisabled" = "Los comentarios estarán desactivados"; -"compose.title.statusPublished" = "Estado publicado"; -"compose.title.tryToUpload" = "Intentar subir"; -"compose.title.delete" = "Eliminar"; -"compose.title.edit" = "Editar"; -"compose.title.photos" = "Fototeca"; -"compose.title.camera" = "Hacer una foto"; -"compose.title.files" = "Explorar archivos"; -"compose.title.missingAltTexts" = "Textos ALT faltantes"; -"compose.title.missingAltTextsWarning" = "No todas las imágenes han sido descritas para personas con discapacidad visual. ¿Te gustaría enviar las fotos de todos modos?"; -"compose.error.loadingPhotosFailed" = "No se puede recuperar la imagen de la biblioteca."; -"compose.error.postingPhotoFailed" = "Error al publicar la foto."; -"compose.error.postingStatusFailed" = "Error al publicar el estado."; - -// Mark: Photo editor view. -"photoEdit.navigationBar.title" = "Detalles de la foto"; -"photoEdit.title.photo" = "Foto"; -"photoEdit.title.accessibility" = "Accesibilidad"; -"photoEdit.title.accessibilityDescription" = "Descripción para personas con discapacidad visual"; -"photoEdit.title.save" = "Guardar"; -"photoEdit.title.cancel" = "Cancelar"; -"photoEdit.error.updatePhotoFailed" = "Error al actualizar la foto."; - -// Mark: Place selector view. -"placeSelector.navigationBar.title" = "Lugares"; -"placeSelector.title.search" = "Buscar..."; -"placeSelector.title.buttonSearch" = "Buscar"; -"placeSelector.title.cancel" = "Cancelar"; -"placeSelector.error.loadingPlacesFailed" = "Error al cargar las notificaciones."; - -// Mark: Settings view. -"settings.navigationBar.title" = "Ajustes"; -"settings.title.close" = "Cerrar"; -"settings.title.version" = "Versión"; -"settings.title.accounts" = "Cuentas"; -"settings.title.newAccount" = "Nueva cuenta"; -"settings.title.accent" = "Acento"; -"settings.title.theme" = "Tema"; -"settings.title.system" = "Sistema"; -"settings.title.light" = "Claro"; -"settings.title.dark" = "Oscuro"; -"settings.title.avatar" = "Avatar"; -"settings.title.circle" = "Círculo"; -"settings.title.rounderRectangle" = "Rectángulo redondeado"; -"settings.title.other" = "Otros"; -"settings.title.thirdParty" = "Terceros"; -"settings.title.reportBug" = "Informar de un error"; -"settings.title.githubIssues" = "Problemas en Github"; -"settings.title.follow" = "Sígueme"; -"settings.title.support" = "Soporte"; -"settings.title.thankYouTitle" = "Gracias 💕"; -"settings.title.thankYouMessage" = "Gracias por tu compra. Tanto las compras grandes como las pequeñas nos ayudan a mantener nuestro sueño de proporcionar productos de la mejor calidad a nuestros clientes. Esperamos que estés disfrutando de Vernissage."; -"settings.title.thankYouClose" = "Cerrar"; -"settings.title.haptics" = "Respuesta háptica"; -"settings.title.hapticsTabSelection" = "Selección de pestaña"; -"settings.title.hapticsButtonPress" = "Pulsación de botón"; -"settings.title.hapticsListRefresh" = "Actualizar lista"; -"settings.title.hapticsAnimationFinished" = "Animación finalizada"; -"settings.title.mediaSettings" = "Ajustes multimedia"; -"settings.title.alwaysShowSensitiveTitle" = "Mostrar siempre NSFW"; -"settings.title.alwaysShowSensitiveDescription" = "Mostrar siempre todos los medios NSFW (sensibles) sin advertencias"; -"settings.title.alwaysShowAltTitle" = "Mostrar texto alternativo"; -"settings.title.alwaysShowAltDescription" = "Mostrar el texto alternativo si está presente en la pantalla de detalles del estado"; -"settings.title.general" = "General"; -"settings.title.applicationIcon" = "Icono de la aplicación"; -"settings.title.followVernissage" = "Sígueme en Vernissage"; -"settings.title.mastodonAccount" = "Cuenta de Mastodon"; -"settings.title.pixelfedAccount" = "Cuenta de Pixelfed"; -"settings.title.openPage" = "Abrir"; -"settings.title.privacyPolicy" = "Política de privacidad"; -"settings.title.terms" = "Términos y condiciones"; -"settings.title.sourceCode" = "Código fuente"; -"settings.title.rate" = "Puntúa Vernissage"; -"settings.title.socials" = "Redes sociales"; -"settings.title.menuPosition" = "Posición del menú"; -"settings.title.topMenu" = "Barra de navegación"; -"settings.title.bottomRightMenu" = "Abajo a la derecha"; -"settings.title.bottomLeftMenu" = "Abajo a la izquierda"; -"settings.title.showAvatars" = "Mostrar avatares"; -"settings.title.showAvatarsOnTimeline" = "Los avatares se mostrarán en las cronologías"; -"settings.title.showFavourite" = "Mostrar favoritos"; -"settings.title.showFavouriteOnTimeline" = "Los favoritos se mostrarán en las cronologías"; -"settings.title.showAltText" = "Mostrar icono ALT"; -"settings.title.showAltTextOnTimeline" = "El icono ALT se mostrará en las cronologíasS"; -"settings.title.warnAboutMissingAltTitle" = "Advertir sobre el texto ALT faltante"; -"settings.title.warnAboutMissingAltDescription" = "Se mostrará una advertencia sobre los textos ALT faltantes antes de publicar una nueva entrada."; - -// Mark: Signin view. -"signin.navigationBar.title" = "Iniciar sesión en Pixelfed"; -"signin.title.serverAddress" = "Dirección del servidor"; -"signin.title.signIn" = "Iniciar sesión"; -"signin.title.enterServerAddress" = "Introducir la dirección del servidor"; -"signin.title.howToJoinLink" = "Cómo unirse a Pixelfed"; -"signin.title.chooseServer" = "O elige un servidor Pixelfed"; -"signin.title.amountOfUsers" = "%d usuarios"; -"signin.title.amountOStatuses" = "%d estados"; -"signin.error.communicationFailed" = "Error de comunicación con el servidor."; - -// Mark: Status view. -"status.navigationBar.title" = "Detalles"; -"status.title.uploaded" = "Subido"; -"status.title.via" = "a través de %@"; -"status.title.reboostedBy" = "Compartido por"; -"status.title.favouritedBy" = "Le ha gustado a"; -"status.title.openInBrowser" = "Abrir en el navegador"; -"status.title.shareStatus" = "Compartir estado"; -"status.title.yourStatus" = "Tu estado"; -"status.title.delete" = "Eliminar"; -"status.title.reboosted" = "Compartido"; -"status.title.unreboosted" = "No compartido"; -"status.title.favourited" = "Le ha gustado"; -"status.title.unfavourited" = "No le ha gustado"; -"status.title.bookmarked" = "Marcado"; -"status.title.unbookmarked" = "No marcado"; -"status.title.statusDeleted" = "Estado eliminado"; -"status.title.reboost" = "Compartir"; -"status.title.unreboost" = "No compartir"; -"status.title.favourite" = "Me gusta"; -"status.title.unfavourite" = "No me gusta"; -"status.title.bookmark" = "Marcar"; -"status.title.unbookmark" = "Desmarcar"; -"status.title.comment" = "Comentario"; -"status.title.report" = "Informar"; -"status.title.saveImage" = "Guardar imagen"; -"status.title.showMediaDescription" = "Mostrar descripción de medios"; -"status.title.mediaDescription" = "Descripción de medios"; -"status.title.shareImage" = "Compartir imagen"; -"status.title.altText" = "ALT"; -"status.error.loadingStatusFailed" = "Error al cargar el estado."; -"status.error.notFound" = "El estado ya no existe."; -"status.error.loadingCommentsFailed" = "No se pueden cargar los comentarios."; -"status.error.reboostFailed" = "Error al compartir."; -"status.error.favouriteFailed" = "Error al dar me gusta."; -"status.error.bookmarkFailed" = "Error al marcar."; -"status.error.deleteFailed" = "Error al eliminar."; - -// Mark: Accounts view. -"accounts.navigationBar.followers" = "Seguidores"; -"accounts.navigationBar.following" = "Siguiendo"; -"accounts.navigationBar.favouritedBy" = "Le ha gustado a"; -"accounts.navigationBar.reboostedBy" = "Compartido por"; -"accounts.navigationBar.blocked" = "Cuentas bloqueadas"; -"accounts.navigationBar.mutes" = "Cuentas silenciadas"; -"accounts.title.noAccounts" = "Desafortunadamente, aquí no hay nadie."; -"accounts.error.loadingAccountsFailed" = "Error al cargar las cuentas."; - -// Mark: Third party view. -"thirdParty.navigationBar.title" = "Terceros"; - -// Mark: Widget view. -"widget.title.photoDescription" = "Widget con fotos de Pixelfed."; -"widget.title.qrCodeDescription" = "Widget con el código QR de tu perfil de Pixelfed."; - -// Mark: In-app purchases. -"purchase.donut.title" = "Rosquilla"; -"purchase.donut.description" = "Dame una rosquilla."; -"purchase.coffee.title" = "Café"; -"purchase.coffee.description" = "Dame un café."; -"purchase.cake.title" = "Café y pastel"; -"purchase.cake.description" = "Dame un café y un pastel."; - -// Mark: Edit profile. -"editProfile.navigationBar.title" = "Editar perfil"; -"editProfile.title.displayName" = "Nombre para mostrar"; -"editProfile.title.bio" = "Biografía"; -"editProfile.title.website" = "Sitio web"; -"editProfile.title.save" = "Guardar"; -"editProfile.title.accountSaved" = "Perfil actualizado."; -"editProfile.title.photoInfo" = "La foto cambiada se mostrará en la aplicación y en el sitio web con un pequeño retraso."; -"editProfile.title.privateAccount" = "Cuenta privada"; -"editProfile.title.privateAccountInfo" = "Cuando tu cuenta es privada, sólo las personas a las que apruebas pueden ver tus fotos y vídeos en Pixelfed. Tus seguidores existentes no se verán afectados."; -"editProfile.error.saveAccountFailed" = "Error al guardar el perfil."; -"editProfile.error.loadingAvatarFailed" = "Error al cargar el avatar."; -"editProfile.error.noProfileData" = "No se pueden mostrar los datos del perfil."; -"editProfile.error.loadingAccountFailed" = "Error al cargar los datos de la cuenta desde el servidor."; - -// Mark: Instance information. -"instance.navigationBar.title" = "Instancia"; -"instance.title.instanceInfo" = "Información de la instancia"; -"instance.title.name" = "Nombre"; -"instance.title.address" = "Dirección"; -"instance.title.email" = "Correo electrónico"; -"instance.title.version" = "Versión"; -"instance.title.users" = "Usuarios"; -"instance.title.posts" = "Publicaciones"; -"instance.title.domains" = "Dominios"; -"instance.title.registrations" = "Registros"; -"instance.title.approvalRequired" = "Se requiere aprobación"; -"instance.title.rules" = "Reglas de la instancia"; -"instance.title.contact" = "Contacto"; -"instance.title.pixelfedAccount" = "Cuenta de Pixelfed"; -"instance.error.noInstanceData" = "No se pueden mostrar los datos de la instancia."; -"instance.error.loadingDataFailed" = "Error al cargar los datos de la instancia desde el servidor."; - -// Mark: Report screen. -"report.navigationBar.title" = "Informe"; -"report.title.close" = "Cerrar"; -"report.title.send" = "Enviar"; -"report.title.userReported" = "El usuario ha sido denunciado"; -"report.title.postReported" = "La publicación ha sido denunciada"; -"report.title.reportType" = "Tipo de abuso"; -"report.title.spam" = "No deseado (spam)"; -"report.title.sensitive" = "Desnudos o actividad sexual"; -"report.title.abusive" = "Discurso o símbolos de odio"; -"report.title.underage" = "Cuenta de menor de edad"; -"report.title.violence" = "Violencia u organizaciones peligrosas"; -"report.title.copyright" = "Infracción de derechos de autor"; -"report.title.impersonation" = "Suplantación de identidad"; -"report.title.scam" = "Acoso u hostigamiento"; -"report.title.terrorism" = "Terrorismo"; -"report.error.notReported" = "Error al enviar el informe."; - -// Mark: Following requests. -"followingRequests.navigationBar.title" = "Solicitudes de seguimiento"; -"followingRequests.title.approve" = "Aprobar"; -"followingRequests.title.reject" = "Rechazar"; -"followingRequests.error.approve" = "Error al aprobar la solicitud."; -"followingRequests.error.reject" = "Error al rechazar la solicitud."; diff --git a/PixelfedKit/Sources/PixelfedKit/Localizable.xcstrings b/PixelfedKit/Sources/PixelfedKit/Localizable.xcstrings index b5bf826..ceb233d 100644 --- a/PixelfedKit/Sources/PixelfedKit/Localizable.xcstrings +++ b/PixelfedKit/Sources/PixelfedKit/Localizable.xcstrings @@ -4,6 +4,12 @@ "global.error.notSuccessResponse" : { "comment" : "It's error returned from remote server. Request URL: '(response.url?.string ?? \"unknown\")'.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Serverantwort: %@." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -39,6 +45,12 @@ "global.error.unknownError" : { "comment" : "Response doesn't contains any information about request status.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unbekannter Fehler." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -74,6 +86,12 @@ "report.error.duplicate" : { "comment" : "The report has already been sent.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Der Bericht wurde bereits gesendet." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -109,6 +127,12 @@ "report.error.invalidObject" : { "comment" : "Invalid object type.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ungültiges Objekt." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -144,6 +168,12 @@ "report.error.invalidObjectId" : { "comment" : "Incorrect object Id.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehlerhafte ID." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -179,6 +209,12 @@ "report.error.invalidParameters" : { "comment" : "Invalid report parameters.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ungültige Parameter." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -214,6 +250,12 @@ "report.error.invalidType" : { "comment" : "Invalid report type.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ungültiger Berichtstyp." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -249,6 +291,12 @@ "report.error.noSelfReports" : { "comment" : "Self-reporting is not allowed.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du darfst Dich nicht selbst melden." + } + }, "en" : { "stringUnit" : { "state" : "translated", diff --git a/PixelfedKit/Sources/PixelfedKit/Resources/de_DE.lproj/Localizable.strings b/PixelfedKit/Sources/PixelfedKit/Resources/de_DE.lproj/Localizable.strings deleted file mode 100644 index 4ebe5cc..0000000 --- a/PixelfedKit/Sources/PixelfedKit/Resources/de_DE.lproj/Localizable.strings +++ /dev/null @@ -1,11 +0,0 @@ -// MARK: Network errors. -"global.error.notSuccessResponse" = "Serverantwort: %@."; -"global.error.unknownError" = "Unbekannter Fehler."; - -// Mark: Report errors. -"report.error.noSelfReports" = "Du darfst Dich nicht selbst melden."; -"report.error.invalidObjectId" = "Fehlerhafte ID."; -"report.error.duplicate" = "Der Bericht wurde bereits gesendet."; -"report.error.invalidParameters" = "Ungültige Parameter."; -"report.error.invalidType" = "Ungültiger Berichtstyp."; -"report.error.invalidObject" = "Ungültiges Objekt."; diff --git a/ServicesKit/Sources/ServicesKit/Localizable.xcstrings b/ServicesKit/Sources/ServicesKit/Localizable.xcstrings index 00a9099..392fb4b 100644 --- a/ServicesKit/Sources/ServicesKit/Localizable.xcstrings +++ b/ServicesKit/Sources/ServicesKit/Localizable.xcstrings @@ -2,10 +2,47 @@ "sourceLanguage" : "en", "strings" : { "" : { - + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + } + } }, "global.error.downloadingImageFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Das Herunterladen des Bildes in den Cache ist fehlgeschlagen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -18,6 +55,18 @@ "value" : "Error al descargar la imagen en la caché." } }, + "eu" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Ezin izan da irudia cachean deskargatu." + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Le téléchargement de l'image dans le cache a échoué." + } + }, "pl" : { "stringUnit" : { "state" : "translated", @@ -25,41 +74,6 @@ } } } - }, - "global.error.unexpected" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Unexpected error." - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Error inesperado." - } - }, - "eu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Espero ez zen errorea." - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Erreur inattendue." - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Wystąpił nieoczekiwany błąd." - } - } - } } }, "version" : "1.0" diff --git a/Vernissage.xcodeproj/project.pbxproj b/Vernissage.xcodeproj/project.pbxproj index 99409e8..7b5890a 100644 --- a/Vernissage.xcodeproj/project.pbxproj +++ b/Vernissage.xcodeproj/project.pbxproj @@ -957,6 +957,7 @@ eu, fr, es, + de, ); mainGroup = F88C245F295C37B80006098B; packageReferences = ( diff --git a/WidgetsKit/Sources/WidgetsKit/Localizable.xcstrings b/WidgetsKit/Sources/WidgetsKit/Localizable.xcstrings index 6a41a31..a06c6bc 100644 --- a/WidgetsKit/Sources/WidgetsKit/Localizable.xcstrings +++ b/WidgetsKit/Sources/WidgetsKit/Localizable.xcstrings @@ -3,6 +3,12 @@ "strings" : { "" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -31,6 +37,12 @@ }, "@%@" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "@%@" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -59,6 +71,12 @@ }, "#%@" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "#%@" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -87,6 +105,12 @@ }, "%@" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -115,6 +139,12 @@ }, "%@, %@" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@, %2$@" + } + }, "en" : { "stringUnit" : { "state" : "new", @@ -149,6 +179,12 @@ }, "%lld" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -177,6 +213,12 @@ }, "compose.error.cannotLoadImageFromExternalLibrary" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Bild kann nicht aus externer Bibliothek geladen werden." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -199,6 +241,12 @@ }, "compose.error.errorDuringComposingAttributeString" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Fehler beim Zusammenstellen der Attributzeichenfolge." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -221,6 +269,12 @@ }, "compose.error.errorDuringDownloadingAutocomplete" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Fehler beim Herunterladen von Autocomplete." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -243,6 +297,12 @@ }, "compose.error.loadingPhotosFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kann das Foto nicht aus der Bibliothek laden." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -277,6 +337,12 @@ }, "compose.error.postingStatusFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehler beim Veröffentlichen des Beitrags." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -311,6 +377,12 @@ }, "compose.title.attachPhotoFull" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Füge ein Foto hinzu und beschreibe, was Du denkst." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -345,6 +417,12 @@ }, "compose.title.attachPhotoMini" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beschreibe was Du denkst." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -380,6 +458,12 @@ "compose.title.camera" : { "comment" : "Camera", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Foto aufnehmen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -415,6 +499,12 @@ "compose.title.cancel" : { "comment" : "Cancel", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abbrechen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -450,6 +540,12 @@ "compose.title.commentsWillBeDisabled" : { "comment" : "Comments disabled", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kommentare werden nicht möglich sein" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -484,6 +580,12 @@ }, "compose.title.delete" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Löschen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -518,6 +620,12 @@ }, "compose.title.edit" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bearbeiten" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -552,6 +660,12 @@ }, "compose.title.everyone" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Öffentlich" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -587,6 +701,12 @@ "compose.title.files" : { "comment" : "Files", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dateien durchsuchen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -621,6 +741,12 @@ }, "compose.title.followers" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "für Follower" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -656,6 +782,12 @@ "compose.title.missingAltTexts" : { "comment" : "Missing ALT texts", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehlende ALT-Texte" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -691,6 +823,12 @@ "compose.title.missingAltTextsWarning" : { "comment" : "Missing ALT texts warning", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Es haben nicht alle Fotos eine Beschreibung für Sehbehinderte. Möchtest Du trotzdem senden?" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -726,6 +864,12 @@ "compose.title.photos" : { "comment" : "Photo", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fotobibliothek" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -761,6 +905,12 @@ "compose.title.publish" : { "comment" : "Publish", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Veröffentlichen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -796,6 +946,12 @@ "compose.title.tryToUpload" : { "comment" : "Try to upload", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versuche hochzuladen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -830,6 +986,12 @@ }, "compose.title.unlisted" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "nicht gelistet" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -865,6 +1027,12 @@ "compose.title.writeContentWarning" : { "comment" : "Content warning", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inhaltswarnung hinzufügen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -899,6 +1067,12 @@ }, "global.error.errorDuringDeletingFileFromTmpDirectory" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Fehler beim Löschen einer Datei aus dem tmp-Verzeichnis." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -921,6 +1095,12 @@ }, "global.error.errorDuringGettingTmpDirectoryContents" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Fehler beim Abrufen des Inhalts des tmp-Verzeichnisses." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -943,6 +1123,12 @@ }, "global.error.errorDuringRemovingTransferredImage" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Fehler beim Entfernen des übertragenen Bildes aus dem tmp-Verzeichnis." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -966,6 +1152,12 @@ "global.title.contentWarning" : { "comment" : "Sensitive content", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inhaltswarnung" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1001,6 +1193,12 @@ "global.title.momentsAgo" : { "comment" : "moments ago", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "gerade eben" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1036,6 +1234,12 @@ "global.title.refresh" : { "comment" : "Refresh", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktualisieren" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1071,6 +1275,12 @@ "global.title.seePost" : { "comment" : "See post", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beitrag ansehen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1105,6 +1315,12 @@ }, "global.title.showLess" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weniger anzeigen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1139,6 +1355,12 @@ }, "global.title.showMore" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mehr anzeigen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1173,6 +1395,12 @@ }, "photoEdit.error.updatePhotoFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehler beim Aktualisieren des Fotos." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1208,6 +1436,12 @@ "photoEdit.navigationBar.title" : { "comment" : "Title", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fotodetails" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1243,6 +1477,12 @@ "photoEdit.title.accessibility" : { "comment" : "Accessibility", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Barrierefreiheit" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1278,6 +1518,12 @@ "photoEdit.title.accessibilityDescription" : { "comment" : "Accesibility", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beschreibung für Sehbehinderte" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1313,6 +1559,12 @@ "photoEdit.title.cancel" : { "comment" : "Cancel", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abbrechen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1348,6 +1600,12 @@ "photoEdit.title.photo" : { "comment" : "Photo", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Foto" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1383,6 +1641,12 @@ "photoEdit.title.save" : { "comment" : "Save", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Speichern" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1417,6 +1681,12 @@ }, "placeSelector.error.loadingPlacesFailed" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benachrichtigungen konnten nicht geladen werden." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1452,6 +1722,12 @@ "placeSelector.navigationBar.title" : { "comment" : "Title", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Orte" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1487,6 +1763,12 @@ "placeSelector.title.buttonSearch" : { "comment" : "Search", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suchen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1522,6 +1804,12 @@ "placeSelector.title.cancel" : { "comment" : "Cancel", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abbrechen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1557,6 +1845,12 @@ "placeSelector.title.search" : { "comment" : "Search", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suchen..." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1592,6 +1886,12 @@ "status.title.altText" : { "comment" : "ALT", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "ALT" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1627,6 +1927,12 @@ "tip.mainNavigation.message" : { "comment" : "Main navigation tip message.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Sie können die Position des Hauptnavigationsmenüs in den Einstellungen der App anpassen." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1644,6 +1950,12 @@ "tip.mainNavigation.title" : { "comment" : "Main navigation tip title.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Position im Menü" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1661,6 +1973,12 @@ "tip.menuCustomizable.message" : { "comment" : "Menu customizable tip message.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Sie können die Standardoptionen im Menü ändern, indem Sie lange auf die jeweilige Option drücken." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1678,6 +1996,12 @@ "tip.menuCustomizable.title" : { "comment" : "Menu customizable tip title.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Ändern der Standardoptionen" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1695,6 +2019,12 @@ "tip.timelineDoubleTap.message" : { "comment" : "Timeline double tip message.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Ein Doppeltippen auf ein Foto führt dazu, dass es favorisiert wird." + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -1712,6 +2042,12 @@ "tip.timelineDoubleTap.title" : { "comment" : "Timeline double tip title.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Als Favorit markieren" + } + }, "en" : { "stringUnit" : { "state" : "translated", From b63d97053a630dea070e84eaf688e39dad7cf915 Mon Sep 17 00:00:00 2001 From: Marcin Czachurski Date: Fri, 1 Dec 2023 23:06:34 +0100 Subject: [PATCH 51/53] Change version to 2.0.4 --- Vernissage.xcodeproj/project.pbxproj | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Vernissage.xcodeproj/project.pbxproj b/Vernissage.xcodeproj/project.pbxproj index 7b5890a..d72530e 100644 --- a/Vernissage.xcodeproj/project.pbxproj +++ b/Vernissage.xcodeproj/project.pbxproj @@ -1210,7 +1210,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 2.0.3; + MARKETING_VERSION = 2.0.4; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage.widget; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -1244,7 +1244,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 2.0.3; + MARKETING_VERSION = 2.0.4; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage.widget; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -1277,7 +1277,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 2.0.3; + MARKETING_VERSION = 2.0.4; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage.share; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -1309,7 +1309,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 2.0.3; + MARKETING_VERSION = 2.0.4; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage.share; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -1475,7 +1475,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 2.0.3; + MARKETING_VERSION = 2.0.4; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1518,7 +1518,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 2.0.3; + MARKETING_VERSION = 2.0.4; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; From 669746b2bac392cfc40d72af7f39c29089e69c5f Mon Sep 17 00:00:00 2001 From: Xabi <888924+xabirequejo@users.noreply.github.com> Date: Mon, 4 Dec 2023 19:14:31 +0100 Subject: [PATCH 52/53] Basque localisation Updated a few strings marked for reviewing. --- Localization/Localizable.xcstrings | 86 +++++++++++++++--------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/Localization/Localizable.xcstrings b/Localization/Localizable.xcstrings index 87b15c8..8b12dc8 100644 --- a/Localization/Localizable.xcstrings +++ b/Localization/Localizable.xcstrings @@ -424,8 +424,8 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Desgaitutako bultzadak" + "state" : "translated", + "value" : "Ezgaitutako bultzadak" } }, "fr" : { @@ -1558,8 +1558,8 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Avatarra ez da deskargatu." + "state" : "translated", + "value" : "Abatarra ez da deskargatu." } }, "fr" : { @@ -1639,7 +1639,7 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Ezin da transakzio-entzulea konfiguratu." } }, @@ -1679,8 +1679,8 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Ezin dira deskargatu aplikazioko produktuak." + "state" : "translated", + "value" : "Ezin dira aplikazioko produktuak deskargatu." } }, "fr" : { @@ -1799,8 +1799,8 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Errore bat gertatu da metadatuak deskargatzean." + "state" : "translated", + "value" : "Errorea metadatuak deskargatzean." } }, "fr" : { @@ -1839,8 +1839,8 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Errore bat gertatu da egoera berriak deskargatzean egoera berrien kopuruagatik." + "state" : "translated", + "value" : "Errorea egoera berriak deskargatzean, kopurua dela-eta." } }, "fr" : { @@ -2123,7 +2123,7 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Erosketak huts egin du." } }, @@ -2243,8 +2243,8 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Ezin izan da freskatu tokena." + "state" : "translated", + "value" : "Ezin izan da tokena freskatu." } }, "fr" : { @@ -2325,7 +2325,7 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "gehiago..." } }, @@ -2365,8 +2365,8 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Sarbide-token berriak berreskuratu dira." + "state" : "translated", + "value" : "Sarbide-token berria berreskuratu da." } }, "fr" : { @@ -5351,8 +5351,8 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Errore bat gertatu da jakinarazpenak gaitzean." + "state" : "translated", + "value" : "Errorea jakinarazpenak gaitzean." } }, "fr" : { @@ -6648,7 +6648,7 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Jakinarazpenak" } }, @@ -6689,8 +6689,8 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Jakinarazpen berrien kopurua duen aplikazioaren bereizgarria aplikazioaren ikonoaren ondoan egongo da ikusgai." + "state" : "translated", + "value" : "Jakinarazpen berrien kopurua duen ikurra aplikazioaren ikonoaren ondoan egongo da ikusgai." } }, "fr" : { @@ -6730,8 +6730,8 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Erakutsi aplikazioaren bereizgarria" + "state" : "translated", + "value" : "Erakutsi ikurra aplikazioan" } }, "fr" : { @@ -9281,7 +9281,7 @@ "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Bultzada kendua" + "value" : "Bultzada kenduta" } }, "fr" : { @@ -9321,7 +9321,7 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : ">" } }, @@ -10209,8 +10209,8 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Errendatu Emoji pertsonalizatua testuan. Tokiko eta urruneko emojiak onartzen ditu. Urruneko emojiak kargatu eta cachean gordetzen dira Nuke erabiliz." + "state" : "translated", + "value" : "Errendatu Emoji pertsonalizatua testuan. Zerbitzari propioko eta besteetako emojiak onartzen ditu. Urruneko emojiak kargatu eta katxean gordetzen dira Nuke erabiliz." } }, "fr" : { @@ -10331,8 +10331,8 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Aplikazioan erabiltzen den letra-tipoa ikonoetan eta harrera-pantailan." + "state" : "translated", + "value" : "Aplikazioaren ikonoan eta harrera-pantailan erabiltzen den letra-tipoa." } }, "fr" : { @@ -10453,7 +10453,7 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "HTML Markdown bihurtzen saiatzen den Swift pakete bat da." } }, @@ -10575,7 +10575,7 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "HTMLString Swift-en idatzitako liburutegi bat da, zure programari Strings-en HTML entitateak gehitzeko eta kentzeko aukera ematen diona." } }, @@ -10697,7 +10697,7 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Nuke-k zure aplikazioan irudiak deskargatzeko eta bistaratzeko modu eraginkorra eskaintzen du. Ikasteko eta erabiltzeko erraza da. Bere arkitekturak ezaugarri indartsu asko ahalbidetzen ditu pertsonalizatzeko aukera ia mugagabeak eskaintzen dituen bitartean." } }, @@ -10860,8 +10860,8 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Pasteboardetik kopiatzerakoan edo Apple pencil konektatzean erabiltzen den bezalako alertak erakusteko µFramework." + "state" : "translated", + "value" : "Pasteboardetik kopiatzerakoan edo Apple pencil konektatzean erabiltzen den bezalako alertak erakusteko µFrameworka." } }, "fr" : { @@ -10982,7 +10982,7 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Swift-en oinarritutako OAuth liburutegia iOS eta macOSentzat." } }, @@ -11104,7 +11104,7 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Zure aplikazioetan erabiltzeko QR kode irudi-sorgailu soil bat, Swift 5-en idatzia." } }, @@ -11914,7 +11914,7 @@ "eu" : { "stringUnit" : { "state" : "translated", - "value" : "Bultzadak mututu dira" + "value" : "Bultzadak ezkutatu dira" } }, "fr" : { @@ -12035,8 +12035,8 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Desgaitutako bultzadak" + "state" : "translated", + "value" : "Ezgaitutako bultzadak" } }, "fr" : { @@ -13169,8 +13169,8 @@ }, "eu" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Ez da onartzen" + "state" : "translated", + "value" : "Ez da bateragarria" } }, "fr" : { @@ -13270,4 +13270,4 @@ } }, "version" : "1.0" -} \ No newline at end of file +} From 1d1fd1a6317786825a12a406ece9684330fac3f7 Mon Sep 17 00:00:00 2001 From: Marcin Czachurski Date: Tue, 5 Dec 2023 17:08:17 +0100 Subject: [PATCH 53/53] Fix translation and update Nuke --- Localization/Localizable.xcstrings | 2 +- .../project.xcworkspace/xcshareddata/swiftpm/Package.resolved | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Localization/Localizable.xcstrings b/Localization/Localizable.xcstrings index 8b12dc8..1c8a332 100644 --- a/Localization/Localizable.xcstrings +++ b/Localization/Localizable.xcstrings @@ -2354,7 +2354,7 @@ "en" : { "stringUnit" : { "state" : "translated", - "value" : "New access tokens has been retrieved." + "value" : "New access tokens have been retrieved." } }, "es" : { diff --git a/Vernissage.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Vernissage.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 6376e84..eccdc69 100644 --- a/Vernissage.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Vernissage.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -77,8 +77,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/kean/Nuke", "state" : { - "revision" : "3f666f120b63ea7de57d42e9a7c9b47f8e7a290b", - "version" : "12.1.6" + "revision" : "1694798e876113d44f6ec6ead965d7286695981d", + "version" : "12.2.0" } }, {