This commit introduces a comprehensive refactoring of the tag management system, replacing the previous API-based approach with a Core Data-first strategy for improved performance and offline support. Major Changes: Tag Management Architecture: - Add CoreDataTagManagementView using @FetchRequest for reactive updates - Implement cache-first sync strategy in LabelsRepository - Create SyncTagsUseCase following Clean Architecture principles - Add TagSortOrder enum for configurable tag sorting (by count/alphabetically) - Mark LegacyTagManagementView as deprecated Share Extension Improvements: - Replace API-based tag loading with Core Data queries - Display top 150 tags sorted by usage count - Remove unnecessary label fetching logic - Add "Most used tags" localized title - Improve offline bookmark tag management Main App Enhancements: - Add tag sync triggers in AddBookmarkView and BookmarkLabelsView - Implement user-configurable tag sorting in settings - Add sort order indicator labels with localization - Automatic UI updates via SwiftUI @FetchRequest reactivity Settings & Configuration: - Add TagSortOrder setting with persistence - Refactor Settings model structure - Add FontFamily and FontSize domain models - Improve settings repository with tag sort order support Use Case Layer: - Add SyncTagsUseCase for background tag synchronization - Update UseCaseFactory with tag sync support - Add mock implementations for testing Localization: - Add German and English translations for: - "Most used tags" - "Sorted by usage count" - "Sorted alphabetically" Technical Improvements: - Batch tag updates with conflict detection - Background sync with silent failure handling - Reduced server load through local caching - Better separation of concerns following Clean Architecture
166 lines
7.0 KiB
Plaintext
166 lines
7.0 KiB
Plaintext
/*
|
|
Localizable.strings (German)
|
|
readeck
|
|
|
|
Created by conversion from Localizable.xcstrings
|
|
*/
|
|
|
|
|
|
"" = "";
|
|
"(%lld found)" = "(%lld gefunden)";
|
|
"%" = "%";
|
|
"%@ (%lld)" = "%1$@ (%2$lld)";
|
|
"%lld" = "%lld";
|
|
"%lld articles in the queue" = "%lld Artikel in der Warteschlange";
|
|
"%lld bookmark%@ synced successfully" = "%1$lld Lesezeichen%2$@ erfolgreich synchronisiert";
|
|
"%lld bookmark%@ waiting for sync" = "%1$lld Lesezeichen%2$@ warten auf Synchronisation";
|
|
"%lld min" = "%lld Min";
|
|
"%lld." = "%lld.";
|
|
"%lld/%lld" = "%1$lld/%2$lld";
|
|
"12 min • Today • example.com" = "12 Min • Heute • example.com";
|
|
"Activate the Read Aloud Feature to read aloud your articles. This is a really early preview and might not work perfectly." = "Aktiviere die Vorlese-Funktion, um deine Artikel vorlesen zu lassen. Dies ist eine sehr frühe Vorschau und funktioniert möglicherweise noch nicht perfekt.";
|
|
|
|
/* Legal & Privacy */
|
|
"Legal & Privacy" = "Rechtliches & Datenschutz";
|
|
"Privacy Policy" = "Datenschutzerklärung";
|
|
"Legal Notice" = "Impressum";
|
|
"Report an Issue" = "Problem melden";
|
|
"Contact Support" = "Support kontaktieren";
|
|
|
|
/* Navigation & States */
|
|
"All" = "Alle";
|
|
"Unread" = "Ungelesen";
|
|
"Favorites" = "Favoriten";
|
|
"Archive" = "Archiv";
|
|
"Search" = "Suchen";
|
|
"Settings" = "Einstellungen";
|
|
"Articles" = "Artikel";
|
|
"Videos" = "Videos";
|
|
"Pictures" = "Bilder";
|
|
"Tags" = "Labels";
|
|
|
|
/* Settings Sections */
|
|
"Font Settings" = "Schriftart";
|
|
"Appearance" = "Darstellung";
|
|
"Cache Settings" = "Cache";
|
|
"General Settings" = "Allgemein";
|
|
"Server Settings" = "Server";
|
|
"Server Connection" = "Server-Verbindung";
|
|
"Open external links in" = "Öffne externe Links in";
|
|
"In App Browser" = "In App Browser";
|
|
"Default Browser" = "Standard Browser";
|
|
|
|
"Add" = "Hinzufügen";
|
|
"Add new tag:" = "Neues Label hinzufügen:";
|
|
"all" = "alle";
|
|
"All tags selected" = "Alle Labels ausgewählt";
|
|
"Archive" = "Archivieren";
|
|
"Archive bookmark" = "Lesezeichen archivieren";
|
|
"Are you sure you want to delete this bookmark? This action cannot be undone." = "Dieses Lesezeichen wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.";
|
|
"Are you sure you want to log out? This will delete all your login credentials and return you to setup." = "Wirklich abmelden? Dies löscht alle Anmeldedaten und führt zurück zur Einrichtung.";
|
|
"Available tags" = "Verfügbare Labels";
|
|
"Most used tags" = "Meist verwendete Labels";
|
|
"Sorted by usage count" = "Sortiert nach Verwendungshäufigkeit";
|
|
"Sorted alphabetically" = "Alphabetisch sortiert";
|
|
"Cancel" = "Abbrechen";
|
|
"Category-specific Levels" = "Kategorie-spezifische Level";
|
|
"Changes take effect immediately. Lower log levels include higher ones (Debug includes all, Critical includes only critical messages)." = "Änderungen werden sofort wirksam. Niedrigere Log-Level enthalten höhere (Debug enthält alle, Critical nur kritische Nachrichten).";
|
|
"Close" = "Schließen";
|
|
"Configure log levels and categories" = "Log-Level und Kategorien konfigurieren";
|
|
"Critical" = "Kritisch";
|
|
"Debug" = "Debug";
|
|
"DEBUG BUILD" = "DEBUG BUILD";
|
|
"Debug Settings" = "Debug";
|
|
"Delete" = "Löschen";
|
|
"Delete Bookmark" = "Lesezeichen löschen";
|
|
"Developer: Ilyas Hallak" = "Entwickler: Ilyas Hallak";
|
|
"Done" = "Fertig";
|
|
"Enter an optional title..." = "Optionalen Titel eingeben...";
|
|
"Enter your Readeck server details to get started." = "Readeck-Server-Details eingeben, um zu beginnen.";
|
|
"Error" = "Fehler";
|
|
"Error: %@" = "Fehler: %@";
|
|
"Favorite" = "Favorit";
|
|
"Finished reading?" = "Fertig gelesen?";
|
|
"Font" = "Schrift";
|
|
"Font family" = "Schriftart";
|
|
"Font Settings" = "Schrift";
|
|
"Font size" = "Schriftgröße";
|
|
"From Bremen with 💚" = "Aus Bremen mit 💚";
|
|
"General" = "Allgemein";
|
|
"Global Level" = "Globales Level";
|
|
"Global Minimum Level" = "Globales Minimum-Level";
|
|
"Global Settings" = "Global";
|
|
"https://example.com" = "https://example.com";
|
|
"https://readeck.example.com" = "https://readeck.example.com";
|
|
"Include Source Location" = "Quellort einschließen";
|
|
"Info" = "Info";
|
|
"Jump to last read position (%lld%%)" = "Zur letzten Leseposition springen (%lld%%)";
|
|
"Key" = "Schlüssel";
|
|
"Level for %@" = "Level für %@";
|
|
"Loading %@" = "Lade %@";
|
|
"Loading article..." = "Artikel wird geladen...";
|
|
"Logging Configuration" = "Logging-Konfiguration";
|
|
"Login & Save" = "Anmelden & Speichern";
|
|
"Logout" = "Abmelden";
|
|
"Logs below this level will be filtered out globally" = "Logs unter diesem Level werden global herausgefiltert";
|
|
"Manage Labels" = "Labels verwalten";
|
|
"Mark as favorite" = "Als Favorit markieren";
|
|
"More" = "Mehr";
|
|
"New Bookmark" = "Neues Lesezeichen";
|
|
"No articles in the queue" = "Keine Artikel in der Warteschlange";
|
|
"open_url" = "%@ öffnen";
|
|
"open_original_page" = "Originalseite öffnen";
|
|
"No bookmarks" = "Keine Lesezeichen";
|
|
"No bookmarks found in %@." = "Keine Lesezeichen in %@ gefunden.";
|
|
"No bookmarks found." = "Keine Lesezeichen gefunden.";
|
|
"No results" = "Keine Ergebnisse";
|
|
"Notice" = "Hinweis";
|
|
"OK" = "OK";
|
|
"Optional: Custom title" = "Optional: Benutzerdefinierter Titel";
|
|
"Password" = "Passwort";
|
|
"Paste" = "Einfügen";
|
|
"Please wait while we fetch your bookmarks..." = "Bitte warten, während die Lesezeichen geladen werden...";
|
|
"Preview" = "Vorschau";
|
|
"Progress: %lld%%" = "Fortschritt: %lld%%";
|
|
"Re-login & Save" = "Erneut anmelden & Speichern";
|
|
"Read Aloud Feature" = "Vorlese-Funktion";
|
|
"Read article aloud" = "Artikel vorlesen";
|
|
"Read-aloud Queue" = "Vorlese-Warteschlange";
|
|
"readeck Bookmark Title" = "readeck Lesezeichen-Titel";
|
|
"Reading %lld/%lld: " = "Lese %1$lld/%2$lld: ";
|
|
"Remove" = "Entfernen";
|
|
"Reset" = "Zurücksetzen";
|
|
"Reset to Defaults" = "Auf Standardwerte zurücksetzen";
|
|
"Restore" = "Wiederherstellen";
|
|
"Resume listening" = "Zuhören fortsetzen";
|
|
"Save bookmark" = "Lesezeichen speichern";
|
|
"Save Bookmark" = "Lesezeichen speichern";
|
|
"Saving..." = "Speichern...";
|
|
"Search" = "Suchen";
|
|
"Search or add new tag..." = "Suchen oder neues Label hinzufügen...";
|
|
"Search results" = "Suchergebnisse";
|
|
"Search..." = "Suchen...";
|
|
"Searching..." = "Suche...";
|
|
"Select a bookmark or tag" = "Lesezeichen oder Label auswählen";
|
|
"Selected tags" = "Ausgewählte Labels";
|
|
"Server Endpoint" = "Server-Endpunkt";
|
|
"Server not reachable - saving locally" = "Server nicht erreichbar - speichere lokal";
|
|
"Settings" = "Einstellungen";
|
|
"Show Performance Logs" = "Performance-Logs anzeigen";
|
|
"Show Timestamps" = "Zeitstempel anzeigen";
|
|
"Speed" = "Geschwindigkeit";
|
|
"Syncing with server..." = "Synchronisiere mit Server...";
|
|
"Theme" = "Design";
|
|
"This is how your bookmark descriptions and article text will appear in the app. The quick brown fox jumps over the lazy dog." = "So werden Lesezeichen-Beschreibungen und Artikeltexte in der App angezeigt. Franz jagt im komplett verwahrlosten Taxi quer durch Bayern.";
|
|
"Try Again" = "Erneut versuchen";
|
|
"Unable to load bookmarks" = "Lesezeichen können nicht geladen werden";
|
|
"Unarchive Bookmark" = "Lesezeichen aus Archiv entfernen";
|
|
"URL in clipboard:" = "URL in Zwischenablage:";
|
|
"Username" = "Benutzername";
|
|
"Version %@" = "Version %@";
|
|
"Warning" = "Warnung";
|
|
"Your current server connection and login credentials." = "Aktuelle Serververbindung und Anmeldedaten.";
|
|
"Your Password" = "Passwort";
|
|
"Your Username" = "Benutzername";
|
|
|