From aff5de1429acdb78d319209c6db6537d57f586ae Mon Sep 17 00:00:00 2001 From: Thomas <38211057+vollkorntomate@users.noreply.github.com> Date: Fri, 20 Jan 2023 06:42:40 +0100 Subject: [PATCH] Add localizations for German (#124) * Add German localization * Add missing localization keys --- IceCubesApp.xcodeproj/project.pbxproj | 5 + .../Localization/de.lproj/Localizable.strings | 311 ++++++++++++++++++ .../Localization/en.lproj/Localizable.strings | 4 + .../Status/Row/StatusMediaPreviewView.swift | 8 +- 4 files changed, 324 insertions(+), 4 deletions(-) create mode 100644 IceCubesApp/Resources/Localization/de.lproj/Localizable.strings diff --git a/IceCubesApp.xcodeproj/project.pbxproj b/IceCubesApp.xcodeproj/project.pbxproj index 431382a9..ea012228 100644 --- a/IceCubesApp.xcodeproj/project.pbxproj +++ b/IceCubesApp.xcodeproj/project.pbxproj @@ -155,6 +155,7 @@ 9FE151A5293C90F900E9683D /* IconSelectorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconSelectorView.swift; sourceTree = ""; }; 9FE3DB55296FEF5800628CB0 /* AppAccount */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = AppAccount; path = Packages/AppAccount; sourceTree = ""; }; E9B576C429743F4C00BCE646 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + E9B576CC2974AAAF00BCE646 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -471,6 +472,7 @@ knownRegions = ( en, Base, + de, ); mainGroup = 9FBFE630292A715500C250E9; packageReferences = ( @@ -587,6 +589,7 @@ isa = PBXVariantGroup; children = ( E9B576C429743F4C00BCE646 /* en */, + E9B576CC2974AAAF00BCE646 /* de */, ); name = Localizable.strings; sourceTree = ""; @@ -720,6 +723,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; @@ -779,6 +783,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; diff --git a/IceCubesApp/Resources/Localization/de.lproj/Localizable.strings b/IceCubesApp/Resources/Localization/de.lproj/Localizable.strings new file mode 100644 index 00000000..af8012a4 --- /dev/null +++ b/IceCubesApp/Resources/Localization/de.lproj/Localizable.strings @@ -0,0 +1,311 @@ +// MARK: Common strings +"action.cancel" = "Abbrechen"; +"action.delete" = "Löschen"; +"action.save" = "Sichern"; +"action.done" = "Fertig"; +"action.retry" = "Wiederholen"; + +"alert.button.ok" = "Ok"; +"alert.error" = "Fehler!"; + +"placeholder.loading.long" = "Laden, laden, laden ...."; +"placeholder.loading.short" = "Laden ..."; + +"see-more" = "See more"; + +// MARK: Add Account +"account.add.error.instance-not-supported" = "Diese Instanz wird aktuell nicht unterstützt."; +"account.add.navigation-title" = "Account hinzufügen"; +"account.add.sign-in" = "Anmelden"; + +// MARK: Enums +"enum.avatar-position.leading" = "Vorne"; +"enum.avatar-position.top" = "Oben"; +"enum.avatar-shape.circle" = "Kreis"; +"enum.avatar-shape.rounded" = "Abgerundet"; +"enum.status-actions-display.all" = "Alle"; +"enum.status-actions-display.no-buttons" = "Keine Buttons"; +"enum.status-actions-display.only-buttons" = "Nur Buttons"; +"enum.status-display-style.compact" = "Kompakt"; +"enum.status-display-style.large" = "Groß"; + +// MARK: Instances +"instance.info.domains" = "Domains"; +"instance.info.email" = "Email"; +"instance.info.name" = "Name"; +"instance.info.navigation-title" = "Instanz Info"; +"instance.info.posts" = "Posts"; +"instance.info.section.info" = "Instanz Info"; +"instance.info.section.rules" = "Instanz-Regeln"; +"instance.info.users" = "Nutzer:innen"; +"instance.info.version" = "Version"; +"instance.list.posts-%@" = "%@ Posts"; +"instance.list.users-%@" = "%@ Nutzer:innen"; +"instance.suggestions" = "Vorschläge"; +"instance.url" = "Instanz-URL"; + +// MARK: Settings +"settings.account.add" = "Account hinzufügen"; +"settings.app.icon" = "App-Icon"; +"settings.app.icon.navigation-title" = "Icons"; +"settings.app.source" = "Quellcode (GitHub-Link)"; +"settings.app.support" = "Unterstütze die App"; +"settings.display.avatar.position" = "Avatar-Position"; +"settings.display.avatar.shape" = "Avatar-Form"; +"settings.display.navigation-title" = "Anzeigeeinstellungen"; +"settings.display.restore" = "Standard wiederherstellen"; +"settings.display.section.display" = "Anzeigen"; +"settings.display.section.theme" = "Thema"; +"settings.display.status.action-buttons" = "Status Aktions-Buttons"; +"settings.display.status.media-style" = "Status Medien"; +"settings.display.theme.background" = "Hintergrundfarbe"; +"settings.display.theme.secondary-background" = "Sekundäre Hintergrundfarbe"; +"settings.display.theme.tint" = "Akzentfarbe"; +"settings.general.browser" = "Browser"; +"settings.general.browser.in-app" = "In-App Safari"; +"settings.general.browser.system" = "System Safari"; +"settings.general.display" = "Anzeigeeinstellungen"; +"settings.general.instance" = "Instanz-Informationen"; +"settings.general.push-notifications" = "Push-Benachrichtigungen"; +"settings.general.remote-timelines" = "Andere lokale Timelines"; +"settings.push.boosts" = "Boosts"; +"settings.push.favorites" = "Favoriten"; +"settings.push.follows" = "Follower"; +"settings.push.main-toggle" = "Push-Benachrichtigungen"; +"settings.push.main-toggle.description" = "Push-Benachrichtigungen bei neuen Aktivitäten erhalten"; +"settings.push.mentions" = "Erwähnungen"; +"settings.push.navigation-title" = "Push-Benachrichtigungen"; +"settings.push.new-posts" = "Neue Posts"; +"settings.push.polls" = "Umfrageergebnisse"; +"settings.section.accounts" = "Accounts"; +"settings.section.app" = "App"; +"settings.section.general" = "Allgemein"; +"settings.support.alert.error.message" = "Fehler bei der Ausführung des In-App-Kaufs. Bitte versuche es erneut."; +"settings.support.alert.message" = "Vielen Dank für dein Trinkgeld! Ich weiß es zu schätzen!"; +"settings.support.alert.title" = "Danke!"; +"settings.support.message-from-dev" = "Hey du! Mein Name ist Thomas und ich liebe es, Open-Source-Apps zu erschaffen. Ice Cubes ist definitiv eines meiner Projekte, auf das ich am meisten stolz bin – und seien wir ehrlich, es ist auch das mit dem größten Wartungsaufwand, dank der sich ständig ändernden Welt von Mastodon und Social Media. Wenn du Spaß beim Nutzen von Ice Cubes hast, denk darüber nach, mir eine kleine Spende dazulassen. Das würde mir den Tag versüßen (und dazu beitragen, dass die App reibungslos für dich funktioniert). 🚀"; +"settings.support.navigation-title" = "Ice Cubes unterstützen"; +"settings.support.one.subtitle" = "Klein aber fein!"; +"settings.support.one.title" = "🍬 Kleines Trinkgeld"; +"settings.support.placeholder.loading-subtitle" = "Titel laden ..."; +"settings.support.three.subtitle" = "Du bist der Wahnsinn, riesengroßen Dank!"; +"settings.support.three.title" = "🤯 Großzügiges Trinkgeld"; +"settings.support.two.subtitle" = "Ich liebe den Duft eines tollen Kaffees ❤️"; +"settings.support.two.title" = "☕️ Schönes Trinkgeld"; +"settings.timeline.add" = "Lokale Timeline hinzufügen"; +"settings.title" = "Einstellungen"; + +// MARK: Tabs +"tab.explore" = "Entdecken"; +"tab.federated" = "Föderiert"; +"tab.local" = "Lokal"; +"tab.messages" = "Nachrichten"; +"tab.notifications" = "Mitteilungen"; +"tab.settings" = "Einstellungen"; +"tab.timeline" = "Timeline"; +"tab.trending" = "Im Trend"; + +// MARK: Timeline +"timeline.%@-is-valid" = "%@ ist eine gültige Instanz"; +"timeline.add-remote.title" = "Andere lokale Timeline hinzufügen"; +"timeline.add.action.add" = "Hinzufügen"; +"timeline.filter.add-local" = "Lokale Timeline hinzufügen"; +"timeline.filter.lists" = "Listem"; +"timeline.filter.local" = "Lokale Timelines"; +"timeline.filter.tags" = "Gefolgte Hashtags"; + +// MARK: Package: AppAccount +"app-account.button.add" = "Account hinzufügen"; + +// MARK: Package: Account +"account.action.add-remove-list" = "Hinzufügen/entfernen von Listen"; +"account.action.edit-info" = "Info bearbeiten"; +"account.action.mention" = "Erwähnen"; +"account.action.message" = "Nachricht"; +"account.action.block" = "Blockieren"; +"account.action.unblock" = "Block aufheben"; +"account.action.mute" = "Stummschalten"; +"account.action.unmute" = "Stummschaltung aufheben"; +"account.boosted-by" = "Geboosted von"; +"account.detail.about" = "Über"; +"account.detail.familiar-followers" = "Auch gefolgt von"; +"account.detail.n-fields %lld" = "%lld Felder"; +"account.detail.featured-tags-n-posts %lld" = "%lld Posts"; +"account.edit.about" = "Über"; +"account.edit.account-settings.bot" = "Bot-Account"; +"account.edit.account-settings.discoverable" = "In Suche finden"; +"account.edit.account-settings.private" = "Privat"; +"account.edit.account-settings.section-title" = "Accounteinstellungen"; +"account.edit.display-name" = "Anzeigename"; +"account.edit.error.save.message" = "Fehler beim Speichern deines Profils. Bitte versuche es erneut."; +"account.edit.error.save.title" = "Fehler beim Speichern deines Profils"; +"account.edit.navigation-title" = "Profil bearbeiten"; +"account.edit.post-settings.privacy" = "Standard-Sichtbarkeit"; +"account.edit.post-settings.section-title" = "Post-Einstellungen"; +"account.edit.post-settings.sensitive" = "Sensibler Inhalt"; +"account.favorited-by" = "Favorisiert von"; +"account.follow.follow" = "Folgen"; +"account.follow.following" = "Gefolgt"; +"account.follow.requested" = "Angefragt"; +"account.followers" = "Follower"; +"account.following" = "Folgt"; +"account.list.create" = "Neue Liste erstellen"; +"account.list.create.confirm" = "Liste erstellen"; +"account.list.create.description" = "Gib den Namen deiner Liste ein"; +"account.list.delete" = "Liste löschen"; +"account.list.name" = "Name der Liste"; +"account.post.pinned" = "Angehefteter Post"; +"account.posts" = "Posts"; +"account.relation.follows-you" = "Folgt dir"; + +// MARK: Package: Conversations +"conversations.action.delete" = "Löschen"; +"conversations.action.mark-read" = "Als gelesen markieren"; +"conversations.empty.message" = "Suchst du etwas Liebe auf Social Media? Hier findest du alle deine direkten Nachriten und privaten Erwähnungen. Fröhliches Messaging! 📱❤️"; +"conversations.empty.title" = "Posteingang leer"; +"conversations.error.button" = "Wiederholen"; +"conversations.error.message" = "Fehler beim Laden deiner Nachrichten"; +"conversations.error.title" = "Ein Fehler ist aufgetreten"; +"conversations.navigation-title" = "Direkte Nachrichten"; + +// MARK: Package: DesignSystem +"design.tag.n-posts-from-n-participants %lld %lld" = "%lld Posts von %lld Teilnehmer:innen"; +"design.theme.navigation-title" = "Themen-Auswahl"; +"design.theme.toots-preview" = "Post Vorschau"; + +// MARK: Package: Explore +"explore.navigation-title" = "Entdecken"; +"explore.search.message-%@" = "Hier kannst du alles auf %@ suchen"; +"explore.search.prompt" = "Suche nach Usern, Posts und Hashtags"; +"explore.search.title" = "Durchsuche deine Instanz"; +"explore.section.posts" = "Posts"; +"explore.section.suggested-users" = "Vorgeschlagene Nutzer:innen"; +"explore.section.tags" = "Tags"; +"explore.section.trending.links" = "Links im Trend"; +"explore.section.trending.posts" = "Posts im Trend"; +"explore.section.trending.tags" = "Hashtags im Trend"; +"explore.section.users" = "Nutzer:innen"; + +// MARK: Package: Env +"env.poll-duration.5m" = "5 Minuten"; +"env.poll-duration.30m" = "30 Minuten"; +"env.poll-duration.1h" = "1 Stunde"; +"env.poll-duration.6h" = "6 Stunden"; +"env.poll-duration.1d" = "1 Tag"; +"env.poll-duration.3d" = "3 Tage"; +"env.poll-duration.7d" = "7 Tage"; +"env.poll-vote-frequency.one" = "Einfache Auswahl"; +"env.poll-vote-frequency.multiple" = "Mehrfachauswahl"; + +// MARK: Package: Lists +"lists.add-remove-%@" = "%@ hinzufügen/entfernen"; +"lists.create" = "Neue Liste erstellen"; +"lists.create.confirm" = "Liste erstellen"; +"lists.edit.users-in-list" = "Nutzer:innen in dieser Liste"; +"lists.name" = "Name der Liste"; +"lists.name.message" = "Gib den Namen deiner Liste ein"; + +// MARK: Package: Notifications +"notifications.empty.message" = "Benachrichtigungen? Welche Benachrichtigungen? Dein Posteingang sieht so leer aus. Bleib weiter so fantastisch! 📱😎"; +"notifications.empty.title" = "Keine Benachrichtigungen"; +"notifications.error.message" = "Beim Laden deiner Benachrichtigungen ist ein Fehler aufgetreten, bitte versuche es erneut."; +"notifications.error.title" = "Ein Fehler ist aufgetreten"; +"notifications.label.favorite" = "hat favorisiert"; +"notifications.label.follow" = "folgt dir jetzt"; +"notifications.label.follow-request" = "möchte dir folgen"; +"notifications.label.mention" = "hat dich erwähnt"; +"notifications.label.poll" = "Umfrage beendet"; +"notifications.label.reblog" = "hat geboosted"; +"notifications.label.status" = "hat einen Beitrag gepostet"; +"notifications.label.update" = "hat einen Beitrag geändert"; +"notifications.menu-title.favorite" = "Favorit"; +"notifications.menu-title.follow" = "Follower"; +"notifications.menu-title.follow-request" = "Follow-Anfrage"; +"notifications.menu-title.mention" = "Erwähnung"; +"notifications.menu-title.poll" = "Umfrage"; +"notifications.menu-title.reblog" = "Boost"; +"notifications.menu-title.status" = "Post"; +"notifications.menu-title.update" = "Post bearbeitet"; +"notifications.navigation-title" = "Alle Benachrichtigungen"; +"notifications.tab.all" = "Alle"; +"notifications.tab.mentions" = "Erwähnungen"; + +// MARK: Package: Timeline +"timeline.n-new-posts %lld" = "%lld neue Posts"; +"timeline.federated" = "Föderiert"; +"timeline.home" = "Startseite"; +"timeline.local" = "Lokal"; +"timeline.n-recent-from-n-participants %lld %lld" = "%lld aktuelle Beiträge von %lld Teilnehmer:innen"; +"timeline.trending" = "Im Trend"; + +// MARK: Package: Status +"status.action.bookmark" = "Lesezeichen"; +"status.action.boost" = "Boosten"; +"status.action.copy-text" = "Text kopieren"; +"status.action.delete" = "Löschen"; +"status.action.edit" = "Bearbeiten"; +"status.action.favorite" = "Favorisieren"; +"status.action.mention" = "Erwähnen"; +"status.action.message" = "Nachricht"; +"status.action.pin" = "Anheften"; +"status.action.post" = "Posten"; +"status.action.quote" = "Diesen Post zitieren"; +"status.action.reply" = "Antworten"; +"status.action.section.your-post" = "Dein Post"; +"status.action.share" = "Diesen Post teilen"; +"status.action.unbookmark" = "Lesezeichen entfernen"; +"status.action.unboost" = "Boost entfernen"; +"status.action.unfavorite" = "Favorit entfernen"; +"status.action.unpin" = "Nicht mehr anheften"; +"status.action.view-in-browser" = "Im Browser öffnen"; +"status.draft.delete" = "Entwurf löschen"; +"status.draft.save" = "Entwurf sichern"; +"status.editor.ai-prompt.correct" = "Text korrigieren"; +"status.editor.ai-prompt.emphasize" = "Text hervorheben"; +"status.editor.ai-prompt.fit" = "Text kürzen"; +"status.editor.description.add" = "Beschreibung hinzufügen"; +"status.editor.description.edit" = "Beschreibung bearbeiten"; +"status.editor.drafts.navigation-title" = "Entwürfe"; +"status.editor.error.upload" = "Fehler beim Hochladen"; +"status.editor.language-select.navigation-title" = "Sprache auswählen"; +"status.editor.media.edit-image" = "Bild bearbeiten"; +"status.editor.media.image-description" = "Bildbeschreibung"; +"status.editor.mode.edit" = "Deinen Post bearbeiten"; +"status.editor.mode.new" = "Neuer Post"; +"status.editor.mode.quote-%@" = "Zitat von %@"; +"status.editor.mode.reply-%@" = "Antwort auf %@"; +"status.editor.restore-previous" = "Vorherigen Text wiederherstellen"; +"status.editor.spoiler" = "Spoiler-Text"; +"status.editor.text.placeholder" = "Woran denkst du?"; +"status.editor.visibility" = "Post-Sichtbarkeit"; +"status.error.loading.message" = "Beim Laden der Posts ist ein Fehler aufgetreten. Bitte versuche es erneut."; +"status.error.message" = "Es ist ein Fehler aufgetreten. Bitte versuche es erneut."; +"status.error.title" = "Ein Fehler ist aufgetreten"; +"status.filter.filtered-by-%@" = "Gefiltert von: %@"; +"status.filter.show-anyway" = "Trotzdem anzeigen"; +"status.image.alt-text.abbreviation" = "ALT"; +"status.media.content.show" = "Inhalt zeigen"; +"status.media.contextmenu.copy" = "Bild kopieren"; +"status.media.contextmenu.save" = "Bild sichern"; +"status.media.contextmenu.share" = "Dieses Bild teilen"; +"status.media.contextmenu.view-browser" = "Im Browser anzeigen"; +"status.media.sensitive.show" = "Sensiblen Inhalt zeigen"; +"status.poll.n-votes %lld" = "%lld Stimmen"; +"status.poll.closed" = "Beendet"; +"status.poll.closes-in" = "Endet in "; +"status.poll.duration" = "Umfragedauer"; +"status.poll.frequency" = "Auswahlmöglichkeiten"; +"status.poll.option-n %lld" = "Option %lld"; +"status.post-from-%@" = "Post von %@"; +"status.row.was-boosted" = "hat geboosted"; +"status.row.was-reply" = "Antwort auf"; +"status.row.you-boosted" = "Du hast geboosted"; +"status.show-less" = "Weniger anzeigen"; +"status.show-more" = "Mehr anzeigen"; +"status.summary.at-time" = " um "; +"status.summary.n-boosts %lld" = "%lld Boosts"; +"status.summary.n-favorites %lld" = "%lld Favoriten"; +"status.visibility.direct" = "Direkt"; +"status.visibility.follower" = "Follower"; +"status.visibility.public" = "Öffentlich"; +"status.visibility.unlisted" = "Ungelistet"; diff --git a/IceCubesApp/Resources/Localization/en.lproj/Localizable.strings b/IceCubesApp/Resources/Localization/en.lproj/Localizable.strings index c0de6a77..11fc1d94 100644 --- a/IceCubesApp/Resources/Localization/en.lproj/Localizable.strings +++ b/IceCubesApp/Resources/Localization/en.lproj/Localizable.strings @@ -285,6 +285,10 @@ "status.filter.show-anyway" = "Show anyway"; "status.image.alt-text.abbreviation" = "ALT"; "status.media.content.show" = "Show content"; +"status.media.contextmenu.copy" = "Copy image"; +"status.media.contextmenu.save" = "Save image"; +"status.media.contextmenu.share" = "Share this image"; +"status.media.contextmenu.view-browser" = "View in Browser"; "status.media.sensitive.show" = "Show sensitive content"; "status.poll.n-votes %lld" = "%lld votes"; "status.poll.closed" = "Closed"; diff --git a/Packages/Status/Sources/Status/Row/StatusMediaPreviewView.swift b/Packages/Status/Sources/Status/Row/StatusMediaPreviewView.swift index 7b60973f..2e8ccb33 100644 --- a/Packages/Status/Sources/Status/Row/StatusMediaPreviewView.swift +++ b/Packages/Status/Sources/Status/Row/StatusMediaPreviewView.swift @@ -326,10 +326,10 @@ public struct StatusMediaPreviewView: View { private func contextMenuForMedia(mediaAttachement: MediaAttachment) -> some View { if let url = mediaAttachement.url { ShareLink(item: url) { - Label("Share this image", systemImage: "square.and.arrow.up") + Label("status.media.contextmenu.share", systemImage: "square.and.arrow.up") } Button { openURL(url) } label: { - Label("View in Browser", systemImage: "safari") + Label("status.media.contextmenu.view-browser", systemImage: "safari") } Divider() Button { @@ -340,7 +340,7 @@ public struct StatusMediaPreviewView: View { } catch { } } } label: { - Label("Save image", systemImage: "square.and.arrow.down") + Label("status.media.contextmenu.save", systemImage: "square.and.arrow.down") } Button { Task { @@ -350,7 +350,7 @@ public struct StatusMediaPreviewView: View { } catch { } } } label: { - Label("Copy image", systemImage: "doc.on.doc") + Label("status.media.contextmenu.copy", systemImage: "doc.on.doc") } } }