localize UI strings in LibraryComponents and expand German and Portuguese translations with motivational phrases and dictionary content options

This commit is contained in:
jonasgaudian
2026-02-17 17:47:24 +01:00
parent f39375e9df
commit 64dcc5d0d5
7 changed files with 382 additions and 71 deletions

View File

@@ -423,7 +423,7 @@ fun BottomStatsSection(
onClick = { navController.navigate(NavigationRoutes.STATS_LANGUAGE_PROGRESS) } onClick = { navController.navigate(NavigationRoutes.STATS_LANGUAGE_PROGRESS) }
) { ) {
Column(modifier = Modifier.padding(20.dp)) { Column(modifier = Modifier.padding(20.dp)) {
Text(text = "LEARNED", style = MaterialTheme.typography.labelSmall, color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.7f)) Text(text = stringResource(R.string.label_learned).uppercase(), style = MaterialTheme.typography.labelSmall, color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.7f))
Spacer(modifier = Modifier.height(8.dp)) Spacer(modifier = Modifier.height(8.dp))
Text(text = learnedWords.toString(), style = MaterialTheme.typography.headlineMedium, fontWeight = FontWeight.Bold) Text(text = learnedWords.toString(), style = MaterialTheme.typography.headlineMedium, fontWeight = FontWeight.Bold)
Spacer(modifier = Modifier.height(8.dp)) Spacer(modifier = Modifier.height(8.dp))

View File

@@ -1,5 +1,3 @@
@file:Suppress("HardCodedStringLiteral")
package eu.gaudian.translator.view.library package eu.gaudian.translator.view.library
import androidx.compose.animation.Crossfade import androidx.compose.animation.Crossfade
@@ -89,7 +87,7 @@ fun LibraryTopBar(
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
Text( Text(
text = "Library", text = stringResource(R.string.label_library),
style = MaterialTheme.typography.headlineMedium, style = MaterialTheme.typography.headlineMedium,
fontWeight = FontWeight.Bold, fontWeight = FontWeight.Bold,
color = MaterialTheme.colorScheme.onSurface color = MaterialTheme.colorScheme.onSurface
@@ -102,7 +100,7 @@ fun LibraryTopBar(
) { ) {
Icon( Icon(
imageVector = Icons.Default.Add, imageVector = Icons.Default.Add,
contentDescription = "Add", contentDescription = stringResource(R.string.cd_add),
tint = MaterialTheme.colorScheme.primary tint = MaterialTheme.colorScheme.primary
) )
} }
@@ -214,7 +212,7 @@ fun SearchBar(
) { ) {
Icon( Icon(
imageVector = Icons.Default.Search, imageVector = Icons.Default.Search,
contentDescription = "Search", contentDescription = stringResource(R.string.cd_search),
tint = MaterialTheme.colorScheme.onSurfaceVariant tint = MaterialTheme.colorScheme.onSurfaceVariant
) )
Spacer(modifier = Modifier.width(12.dp)) Spacer(modifier = Modifier.width(12.dp))
@@ -232,7 +230,7 @@ fun SearchBar(
Box(contentAlignment = Alignment.CenterStart) { Box(contentAlignment = Alignment.CenterStart) {
if (searchQuery.isEmpty()) { if (searchQuery.isEmpty()) {
Text( Text(
text = "Search cards or topics...", text = stringResource(R.string.label_search_cards),
color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.7f), color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.7f),
style = MaterialTheme.typography.bodyLarge style = MaterialTheme.typography.bodyLarge
) )
@@ -245,7 +243,7 @@ fun SearchBar(
IconButton(onClick = onFilterClick) { IconButton(onClick = onFilterClick) {
Icon( Icon(
imageVector = Icons.Default.Tune, imageVector = Icons.Default.Tune,
contentDescription = "Filter options", contentDescription = stringResource(R.string.cd_filter_options),
tint = MaterialTheme.colorScheme.primary tint = MaterialTheme.colorScheme.primary
) )
} }
@@ -279,7 +277,7 @@ fun SegmentedControl(
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
Text( Text(
text = "All Cards", text = stringResource(R.string.label_all_cards),
color = if (!isCategoriesView) MaterialTheme.colorScheme.onPrimary else MaterialTheme.colorScheme.onSurfaceVariant, color = if (!isCategoriesView) MaterialTheme.colorScheme.onPrimary else MaterialTheme.colorScheme.onSurfaceVariant,
fontWeight = FontWeight.Bold, fontWeight = FontWeight.Bold,
style = MaterialTheme.typography.labelLarge style = MaterialTheme.typography.labelLarge
@@ -296,7 +294,7 @@ fun SegmentedControl(
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
Text( Text(
text = "Categories", text = stringResource(R.string.label_categories),
color = if (isCategoriesView) MaterialTheme.colorScheme.onPrimary else MaterialTheme.colorScheme.onSurfaceVariant, color = if (isCategoriesView) MaterialTheme.colorScheme.onPrimary else MaterialTheme.colorScheme.onSurfaceVariant,
fontWeight = FontWeight.Bold, fontWeight = FontWeight.Bold,
style = MaterialTheme.typography.labelLarge style = MaterialTheme.typography.labelLarge
@@ -453,14 +451,14 @@ fun VocabularyCard(
if (isSelected) { if (isSelected) {
Icon( Icon(
imageVector = Icons.Default.CheckCircle, imageVector = Icons.Default.CheckCircle,
contentDescription = "Selected", contentDescription = stringResource(R.string.cd_selected),
tint = MaterialTheme.colorScheme.primary tint = MaterialTheme.colorScheme.primary
) )
} else { } else {
IconButton(onClick = { /* Options menu could go here */ }) { IconButton(onClick = { /* Options menu could go here */ }) {
Icon( Icon(
imageVector = Icons.Default.MoreVert, imageVector = Icons.Default.MoreVert,
contentDescription = "Options", contentDescription = stringResource(R.string.cd_options),
tint = MaterialTheme.colorScheme.onSurfaceVariant tint = MaterialTheme.colorScheme.onSurfaceVariant
) )
} }
@@ -601,7 +599,7 @@ fun ExploreMoreCard(
) )
Spacer(modifier = Modifier.height(4.dp)) Spacer(modifier = Modifier.height(4.dp))
Text( Text(
text = "Explore more categories", text = stringResource(R.string.text_explore_more_categories),
style = MaterialTheme.typography.labelMedium, style = MaterialTheme.typography.labelMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant color = MaterialTheme.colorScheme.onSurfaceVariant
) )
@@ -682,6 +680,7 @@ fun SegmentedControlPreview() {
} }
} }
@Suppress("HardCodedStringLiteral")
@Preview(showBackground = true) @Preview(showBackground = true)
@Composable @Composable
fun VocabularyCardPreview() { fun VocabularyCardPreview() {
@@ -707,6 +706,7 @@ fun VocabularyCardPreview() {
} }
} }
@Suppress("HardCodedStringLiteral")
@Preview(showBackground = true) @Preview(showBackground = true)
@Composable @Composable
fun CategoryCardPreview() { fun CategoryCardPreview() {

View File

@@ -1,10 +1,23 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<resources> <resources>
<string-array name="exercise_example_prompts">Exercise Example Prompts</string-array>
<string-array name="changelog_entries"> <string-array name="changelog_entries">
<item>Version 0.3.0 \n• CSV-Import für Vokabeln aktiviert\n• Option, für einige unterstützte Sprachen einen Übersetzungsserver statt KI-Modelle zu nutzen\n• UI-Fehlerbehebungen \n• Anzeige der Worthäufigkeit \n• Leistungsoptimierungen \n• Verbesserte Übersetzungen (Deutsch und Portugiesisch)</item> <item>Version 0.3.0 \n• CSV-Import für Vokabeln aktiviert\n• Option, für einige unterstützte Sprachen einen Übersetzungsserver, statt KI-Modelle zu nutzen\n• UI-Fehlerbehebungen \n• Anzeige der Worthäufigkeit \n• Leistungsoptimierungen \n• Verbesserte Übersetzungen (Deutsch und Portugiesisch)</item>
<item>Version 0.4.0 \n• Wörterbuch-Download hinzugefügt (Beta) \n• Verbesserungen der Benutzeroberfläche \n• Fehlerbehebungen \n• Neugestaltete Vokabelkarte mit verbesserter UI \n• Mehr vorkonfigurierte Anbieter \n• Verbesserte Leistung</item> <item>Version 0.4.0 \n• Wörterbuch-Download hinzugefügt (Beta) \n• Verbesserungen der Benutzeroberfläche \n• Fehlerbehebungen \n• Neugestaltete Vokabelkarte mit verbesserter UI \n• Mehr vorkonfigurierte Anbieter \n• Verbesserte Leistung</item>
</string-array> </string-array>
<string-array name="dictionary_content">
<item>Wortart und Genus (bei Nomen)</item>
<item>Deklination (bei Nomen)</item>
<item>Aussprache (IPA) und Worttrennung</item>
<item>Definition</item>
<item>Herkunft</item>
<item>Synonyme</item>
<item>Antonyme</item>
<item>Beispiele</item>
<item>Konjugation (bei Verben)</item>
<item>Redewendungen</item>
<item>Grammatikalische Merkmale (bei Präpositionen)</item>
</string-array>
<!-- Stable, non-localized keys for dictionary content options. Order must match dictionary_content. --> <!-- Stable, non-localized keys for dictionary content options. Order must match dictionary_content. -->
<string-array name="dictionary_content_keys"> <string-array name="dictionary_content_keys">
<item>word_class_gender</item> <item>word_class_gender</item>
@@ -19,35 +32,87 @@
<item>idioms</item> <item>idioms</item>
<item>grammatical_features_prepositions</item> <item>grammatical_features_prepositions</item>
</string-array> </string-array>
<string-array name="dictionary_content">
<item>Wortart und Genus (bei Nomen)</item> <string-array name="example_prompts">
<item>Deklination (bei Nomen)</item> <item>Alles übersetzen, ohne etwas hinzuzufügen.</item>
<item>Aussprache (IPA) und Worttrennung</item>
<item>Definition</item>
<item>Herkunft</item>
<item>Synonyme</item>
<item>Antonyme</item>
<item>Beispiele</item>
<item>Konjugation (bei Verben)</item>
<item>Redewendungen</item>
<item>Grammatikalische Merkmale (bei Präpositionen)</item>
</string-array>
<string-array name="example_prompts"><item>Alles übersetzen, ohne etwas hinzuzufügen.</item>
<item>Ersetze höfliche Pronomen Sie (formell) durch "du".</item> <item>Ersetze höfliche Pronomen Sie (formell) durch "du".</item>
<item>Mach es sehr formell.</item> <item>Mach es sehr formell.</item>
<item>Mach es informell und füge ein Emoji hinzu.</item> <item>Mach es informell und füge ein Emoji hinzu.</item>
</string-array> </string-array>
<string-array name="vocabulary_hints"><item>Grundlegende Begrüßungen</item>
<item>Unregelmäßige Verben</item> <string-array name="exercise_example_prompts">Exercise Example Prompts</string-array>
<item>Vokabular am Flughafen</item>
<item>Wie man einen Kaffee bestellt</item> <string-array name="motivational_phrases">
<item>Idiomatische Ausdrücke</item> <item>Die Grenzen deiner Sprache sind die Grenzen deiner Welt. Lass uns den Käfig etwas größer machen.</item>
<item>Du bist im Grunde ein Fleisch-Computer, der eine Sprachsimulation am Laufen hat. Zeit für ein Firmware-Upgrade.</item>
<item>Eine andere Sprache zu sprechen heißt, eine zweite Seele zu besitzen. Oder zumindest einen ziemlich guten Party-Trick.</item>
<item>Irgendwann wirst du deine existenzielle Angst in einem völlig anderen Dialekt formulieren.</item>
<item>Neuroplastizität klingt nach einer schicken OP, ist aber nur dein Gehirn, das mal endlich schweres Heben macht.</item>
<item>Jedes neue Wort, das du lernst, ist ein Konzept, das du dir aus der Leere zurückholst.</item>
<item>Red weniger, sag mehr. Stopp, du lernst Vokabeln rede schlecht, aber rede oft.</item>
<item>Deine heutige Wortanzahl ist im Kosmos statistisch irrelevant, aber für dein Ego monumental.</item>
<item>Descartes Dualismus meint, Geist und Körper seien getrennt. Lass uns sicherstellen, dass der Geist heute auch mal was reißt.</item>
<item>Fließend sein ist nur eine Reihe gut getarnter Fehler. Leg los und mach ein paar.</item>
<item>Wissen ist das Einzige, was die Leere wirklich stillt. Fütter sie.</item>
<item>Dein Kurzzeitgedächtnis ist ein Sieb. Wir werden diese Wörter durch reine Wiederholung in den Tresor des Langzeitgedächtnisses prügeln.</item>
<item>Wahre Freiheit ist, genau das richtige, hochspezifische Adjektiv zu kennen, wenn du jemanden stumm verurteilst.</item>
<item>Du bist ein Künstler und dein Medium sind leicht falsch ausgesprochene Nomen.</item>
<item>Ein hungriger Magen knurrt. Ein hungriger Geist scrollt nur dumm durchs Internet. Lern lieber ein Wort.</item>
<item>Spaced Repetition: weil dein Gehirn aggressiv versucht, alles zu löschen, was du nicht aktiv nutzt.</item>
<item>Kuratiere deinen Wortschatz wie ein Museum, in dem die Hauptattraktion deine eigene Überlegenheit ist.</item>
<item>Solipsismus ist der Glaube, dass nur dein Geist existiert. Wenn das so ist, solltest du ihm vielleicht einen besseren Wortschatz verpassen.</item>
<item>Ein Mensch ohne Sprache ist ein Mensch ohne Land. Oder einfach ein sehr stiller Tourist.</item>
<item>Baue ein Vokabel-Imperium auf, eine aggressiv missverstandene Redewendung nach der anderen.</item>
<item>Die Eule der Minerva beginnt ihren Flug erst in der Dämmerung. Und nach einer richtigen Lerneinheit.</item>
<item>Um dem Gravitationsfeld der Einsprachigkeit zu entkommen, braucht es ordentlich Schubkraft. Bleib am Ball.</item>
<item>Sprache ist das Betriebssystem des Bewusstseins. Deins installiert gerade ein Update.</item>
<item>Wir sind alle in der Gosse, aber einige von uns schauen in fremdsprachige Wörterbücher.</item>
<item>Eine Sache zu benennen heißt, sie zu besitzen. Es wird Zeit, dass du zum absoluten Großgrundbesitzer der Realität wirst.</item>
<item>Grammatik ist die Grundstruktur der Realität. Ignorier sie auf eigene ontologische Gefahr.</item>
<item>Sogar Sokrates wusste, dass er nichts wusste. Aber er wusste wenigstens das Wort für \'nichts\' auf Griechisch.</item>
<item>Die Reise von tausend Meilen beginnt mit einer unbeholfenen Kaffee-Bestellung in der falschen Zeitform.</item>
<item>Dein Gehirn verbraucht etwa zwanzig Prozent der Energie deines Körpers. Lass es sich seinen Unterhalt verdienen.</item>
<item>Motivation ist eine flüchtige Emotion. Gewohnheit ist eine unerbittliche Maschine. Sei die Maschine.</item>
<item>Wenn Worte Waffen sind, ist dein Arsenal gerade eine Sammlung stumpfer Löffel. Lass uns sie schärfen.</item>
<item>Lernen bedeutet, sich freiwillig vorübergehender Inkompetenz zu unterziehen. Leb mit der Peinlichkeit.</item>
<item>Sprachenlernen ist der Mythos des Sisyphos, aber manchmal rollt der Stein den Berg runter und du verstehst tatsächlich einen Podcast.</item>
<item>Dein zukünftiges Ich beurteilt gerade deine heutige Arbeitsmoral. Beweis ihm das Gegenteil.</item>
<item>Entropie besagt, dass das Universum zum Chaos neigt. Vokabeln zu lernen ist deine tägliche Revolte gegen die Physik.</item>
<item>10 Wörter am Tag sind 3.650 im Jahr. Immer noch nicht genug, um die menschliche Existenz zu erklären, aber ein ordentlicher Anfang.</item>
<item>Zinseszins gilt auch für kognitive Werte. Also los, investier in ein paar Verben.</item>
<item>Du bist die Summe deiner Erinnerungen. Lass uns sicherstellen, dass die nicht nur aus Popsongs und Peinlichkeiten bestehen.</item>
<item>Englisch sind einfach drei verschiedene Sprachen, die in einem Mantel aufeinanders Schultern stehen. Wenn das so tun kann, kannst du das auch.</item>
<item>Das französische Wort für 99 heißt wörtlich \'vier-zwanzig-zehn-neun\'. Deine aktuellen Lernprobleme sind nichts gegen deren Mathe.</item>
<item>Im Mandarin macht der falsche Ton aus \'Mutter\' ein \'Pferd\'. Vermeiden wir heute mal ödipale Reitunfälle.</item>
<item>Deutsch lässt dich Nomen zusammenknallen, bis du ein Wort hast, das lang genug ist, um deine ganz spezielle Form des Elends auszudrücken. Streb nach dieser Macht.</item>
<item>Die Beherrschung des grammatikalischen Geschlechts bedeutet zu akzeptieren, dass das Universum willkürlich entschieden hat, dass ein Tisch weiblich und eine Brücke männlich ist. Füg dich dem Absurden.</item>
<item>Japanisch hat spezielle Zählwörter, je nachdem, ob ein Objekt flach, zylindrisch oder ein kleines Tier ist. Präzision ist eine Tugend. Fang an zu üben.</item>
<item>Spanischsprachige rasseln etwa 25% schneller Silben runter als Englischsprachige. Du musst nicht schlauer sein, du musst nur schneller denken.</item>
<item>Finnisch hat 15 Fälle. Plötzlich ist Vokabeln lernen gar nicht mehr so schlimm, oder?</item>
<item>Eine Sprache zu lernen bedeutet zu erkennen, dass Redewendungen nur kulturell sanktionierte, kollektive Halluzinationen sind. Lass uns halluzinieren.</item>
<item>Geschriebenes Walisisch sieht aus, als wäre jemand auf einer vokalfaulen Tastatur eingeschlafen, aber es birgt eine dunkle, uralte Poesie. Find die Poesie in deiner Zielsprache.</item>
<item>Ein robuster Wortschatz ist der sozial akzeptabelste Weg, ein herablassender Snob zu sein. Verdien dir deine Arroganz.</item>
<item>Du kämpfst gerade gegen die Ebbinghaussche Vergessenskurve. Sie ist eine gnadenlose, unverzeihliche mathematische Realität. Wehr dich.</item>
<item>Latein zu lernen ist nutzlos, es sei denn, du willst mit mittelalterlichen Mönchen diskutieren oder versehentlich irgendwas beschwören. So oder so, es ist eine gute Vorbereitung.</item>
<item>Ohne Vokabeln ist Grammatik nur eine wunderschön strukturierte Stille. Gib ihr etwas Lärm.</item>
<item>Irisch hat keine Wörter für \'ja\' oder \'nein\'. Du musst das Verb wiederholen. Bei Sprachen geht es darum, voll und ganz dabei zu sein.</item>
<item>Das hawaiianische Alphabet hat nur 13 Buchstaben. Die Sprache, die du lernst, hat mehr. Hör auf zu jammern und lerne sie.</item>
<item>Wortwörtlich zu übersetzen ist das reinste Hamsterrad. Jede Sprache bildet die Realität anders ab. Zeit, eine neue Karte zu lernen.</item>
<item>Irgendwann kannst du einen fremdsprachigen Film gucken, ohne nur auf das untere Drittel des Bildschirms zu starren. Bleib dran.</item>
</string-array> </string-array>
<string-array name="vocabulary_example_prompts"><item>Verwende lateinamerikanisches Spanisch</item>
<string-array name="vocabulary_example_prompts">
<item>Verwende lateinamerikanisches Spanisch</item>
<item>Vermeide lange Wörter</item> <item>Vermeide lange Wörter</item>
<item>Vermeide Sätze</item> <item>Vermeide Sätze</item>
<item>Enthält viele Verben und Adjektive</item> <item>Enthält viele Verben und Adjektive</item>
<item>Verwende informelle Sprache</item> <item>Verwende informelle Sprache</item>
</string-array> </string-array>
<string-array name="vocabulary_hints">
<item>Grundlegende Begrüßungen</item>
<item>Unregelmäßige Verben</item>
<item>Vokabular am Flughafen</item>
<item>Wie man einen Kaffee bestellt</item>
<item>Idiomatische Ausdrücke</item>
</string-array>
</resources> </resources>

View File

@@ -829,5 +829,92 @@
<string name="duplicate">Duplikat</string> <string name="duplicate">Duplikat</string>
<string name="hint_scan_hint_title">Das richtige AI-Modell finden</string> <string name="hint_scan_hint_title">Das richtige AI-Modell finden</string>
<string name="hint_translate_how_it_works">Wie Übersetzung funktioniert</string> <string name="hint_translate_how_it_works">Wie Übersetzung funktioniert</string>
<string name="label_home">Startseite</string>
<string name="label_more">Mehr</string>
<string name="label_quit_app">App beenden</string>
<string name="label_target_correct_answers_per_day">Ziel für richtige Antworten pro Tag</string>
<string name="label_interval_settings_in_days">Intervall-Einstellungen</string>
<string name="label_vocabulary_settings">Fortschritts-Einstellungen</string>
<string name="label_no_category">Keine</string>
<string name="text_search">Suche</string>
<string name="text_language_settings_description">Stelle ein, welche Sprachen du in der App verwenden möchtest. Sprachen, die nicht aktiviert sind, werden in dieser App nicht angezeigt. Du kannst auch deine eigene Sprache zur Liste hinzufügen oder eine vorhandene Sprache (Region/Locale) ändern.</string>
<string name="message_success_generic">Erfolg!</string>
<string name="message_info_generic">Info</string>
<string name="message_error_generic">Ein Fehler ist aufgetreten</string>
<string name="message_loading_generic">Lädt…</string>
<string name="message_error_language_not_selected">Quell- und Zielsprachen müssen ausgewählt sein.</string>
<string name="message_error_no_words_found">Keine Wörter im bereitgestellten Text gefunden.</string>
<string name="message_success_language_replaced">Sprach-ID für %1$d Elemente aktualisiert.</string>
<string name="message_success_vocabulary_imported">Vokabeln erfolgreich importiert.</string>
<string name="message_error_vocabulary_import_failed">Fehler beim Importieren der Vokabeln: %1$s</string>
<string name="message_success_items_merged">Einträge zusammengeführt!</string>
<string name="message_success_items_added">%1$d neue Vokabeln erfolgreich hinzugefügt.</string>
<string name="message_error_items_add_failed">Fehler beim Hinzufügen der Einträge: %1$s</string>
<string name="message_success_items_deleted">Vokabeln erfolgreich gelöscht.</string>
<string name="message_error_items_delete_failed">Fehler beim Löschen: %1$s</string>
<string name="message_error_no_cards_found">Keine Karten für den angegebenen Filter gefunden.</string>
<string name="message_success_cards_loaded">Kartensatz erfolgreich geladen.</string>
<string name="message_success_grammar_updated">Grammatikdetails aktualisiert!</string>
<string name="message_error_grammar_fetch_failed">Konnte Grammatikdetails nicht abrufen.</string>
<string name="message_loading_grammar_fetch">Grammatik wird für %1$d Elemente abgerufen…</string>
<string name="message_success_file_saved">Datei unter %1$s gespeichert</string>
<string name="message_error_file_save_failed">Fehler beim Speichern der Datei: %1$s</string>
<string name="message_error_file_save_cancelled">Speichern der Datei abgebrochen oder fehlgeschlagen.</string>
<string name="message_error_file_picker_not_initialized">Save File Launcher nicht initialisiert.</string>
<string name="message_success_category_saved">Kategorie in %1$s gespeichert.</string>
<string name="message_error_api_key_missing">Dein API-Schlüssel fehlt oder ist ungültig.</string>
<string name="message_error_api_key_invalid">Dein API-Schlüssel fehlt oder ist ungültig.</string>
<string name="message_loading_translating">Übersetze %1$d Wörter…</string>
<string name="message_success_translation_completed">Übersetzung abgeschlossen.</string>
<string name="message_error_translation_failed">Übersetzung fehlgeschlagen: %1$s</string>
<string name="message_success_repository_wiped">Alle Repository-Daten gelöscht.</string>
<string name="message_error_repository_wipe_failed">Fehler beim Löschen des Repositorys: %1$s</string>
<string name="message_loading_card_set">Lade Kartensatz</string>
<string name="message_success_stage_updated">Stufe erfolgreich aktualisiert.</string>
<string name="message_error_stage_update_failed">Fehler beim Aktualisieren des Stages: %1$s</string>
<string name="message_success_category_updated">Kategorie erfolgreich aktualisiert.</string>
<string name="message_error_category_update_failed">Fehler beim Aktualisieren der Kategorie: %1$s</string>
<string name="message_success_articles_removed">Artikel erfolgreich entfernt.</string>
<string name="message_error_articles_remove_failed">Fehler beim Entfernen der Artikel: %1$s</string>
<string name="message_success_synonyms_generated">Synonyme erfolgreich generiert.</string>
<string name="message_error_synonyms_generation_failed">Fehler beim Generieren von Synonymen: %1$s</string>
<string name="message_error_operation_failed">Operation fehlgeschlagen: %1$s</string>
<string name="message_loading_operation_in_progress">Operation läuft…</string>
<string name="message_test_info">Das ist eine allgemeine Infomeldung.</string>
<string name="message_test_success">Das ist eine Erfolgsmeldung für den Test!</string>
<string name="message_test_error">Hoppla, da ist etwas schiefgelaufen :(</string>
<string name="label_stats">Statistiken</string>
<string name="label_library">Sammlung</string>
<string name="label_edit">Bearbeiten</string>
<string name="label_new_words">Neue Wörter</string>
<string name="desc_expand_your_vocabulary">Erweitere deinen Wortschatz</string>
<string name="label_settings">Einstellungen</string>
<string name="label_2d_days">%1$d Tage</string>
<string name="label_current_streak">Aktuelle Streak</string>
<string name="label_daily_goal">Tägliches Ziel</string>
<string name="text_desc_no_activity_data_available">Keine Aktivitätsdaten verfügbar</string>
<string name="label_see_history">Verlauf anzeigen</string>
<string name="label_weekly_progress">Wöchentlicher Fortschritt</string>
<string name="cd_go">Los</string>
<string name="label_sort_by">Sortieren nach</string>
<string name="label_reset">Zurücksetzen</string>
<string name="label_filter_cards">Filter Cards</string>
<string name="text_desc_organize_vocabulary_groups">Organisiere deinen Wortschatz in Gruppen</string>
<string name="text_add_new_word_to_list">Extrahiere ein neues Wort in deine Liste</string>
<string name="cd_scroll_to_top">Nach oben scrollen</string>
<string name="cd_settings">Einstellungen</string>
<string name="label_import_csv">CSV importieren</string>
<string name="label_ai_generator">KI-Generator</string>
<string name="label_new_wordss">Neue Wörter</string>
<string name="label_recently_added">Kürzlich hinzugefügt</string>
<string name="label_view_all">Alle anzeigen</string>
<string name="text_explore_more_categories">Entdecke weitere Kategorien</string>
<string name="cd_options">Optionen</string>
<string name="cd_selected">Ausgewählt</string>
<string name="label_all_cards">Alle Karten</string>
<string name="cd_filter_options">Filteroptionen</string>
<string name="cd_add">Hinzufügen</string>
<string name="cd_searchh">Suche</string>
<string name="label_learnedd">gelernt</string>
</resources> </resources>

View File

@@ -1,6 +1,23 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<resources> <resources>
<string-array name="exercise_example_prompts">Exercise Example Prompts</string-array> <string-array name="changelog_entries">
<item>Versão 0.3.0 \n• Habilitada a importação de vocabulário via CSV\n• Opção para usar um servidor de tradução em vez de modelos de IA para alguns idiomas suportados\n• Correções de bugs na interface \n• Exibição da frequência de palavras \n• Otimizações de desempenho \n• Traduções melhoradas (alemão e português)</item>
<item>Versão 0.4.0 \n• Adicionado download de dicionário (beta) \n• Melhorias na interface \n• Correções de bugs \n• Cartão de vocabulário redesenhado com interface melhorada \n• Mais provedores pré-configurados \n• Desempenho melhorado</item>
</string-array>
<string-array name="dictionary_content">
<item>Classe da palavra e gênero (para substantivos)</item>
<item>Declinação (para substantivos)</item>
<item>Pronúncia (IPA) e separação de sílabas</item>
<item>Definição</item>
<item>Origem</item>
<item>Sinônimos</item>
<item>Antônimos</item>
<item>Exemplos</item>
<item>Flexão (para verbos)</item>
<item>Expressões idiomáticas</item>
<item>Recursos gramaticais (para preposições)</item>
</string-array>
<!-- Stable, non-localized keys for dictionary content options. Order must match dictionary_content. --> <!-- Stable, non-localized keys for dictionary content options. Order must match dictionary_content. -->
<string-array name="dictionary_content_keys"> <string-array name="dictionary_content_keys">
<item>word_class_gender</item> <item>word_class_gender</item>
@@ -15,39 +32,87 @@
<item>idioms</item> <item>idioms</item>
<item>grammatical_features_prepositions</item> <item>grammatical_features_prepositions</item>
</string-array> </string-array>
<string-array name="dictionary_content">
<item>Classe da palavra e gênero (para substantivos)</item> <string-array name="example_prompts">
<item>Declinação (para substantivos)</item> <item>Traduzir tudo sem adicionar mais nada</item>
<item>Pronúncia (IPA) e separação de sílabas</item>
<item>Definição</item>
<item>Origem</item>
<item>Sinônimos</item>
<item>Antônimos</item>
<item>Exemplos</item>
<item>Flexão (para verbos)</item>
<item>Expressões idiomáticas</item>
<item>Recursos gramaticais (para preposições)</item>
</string-array>
<string-array name="changelog_entries">
<item>Versão 0.3.0 \n• Habilitada a importação de vocabulário via CSV\n• Opção para usar um servidor de tradução em vez de modelos de IA para alguns idiomas suportados\n• Correções de bugs na interface \n• Exibição da frequência de palavras \n• Otimizações de desempenho \n• Traduções melhoradas (Alemão e Português)</item>
<item>Versão 0.4.0 \n• Adicionado download de dicionário (beta) \n• Melhorias na interface \n• Correções de bugs \n• Cartão de vocabulário redesenhado com interface melhorada \n• Mais provedores pré-configurados \n• Desempenho melhorado</item>
</string-array>
<string-array name="example_prompts"><item>Traduzir tudo sem adicionar mais nada</item>
<item>Usa o pronome de "tu" em vez do formal "você/vos/vous"</item> <item>Usa o pronome de "tu" em vez do formal "você/vos/vous"</item>
<item>Faz tudo muito formal e adicione um ponto final</item> <item>Faz tudo muito formal e adicione um ponto final</item>
<item>Faz tudo informal</item> <item>Faz tudo informal</item>
</string-array> </string-array>
<string-array name="vocabulary_hints"><item>Saudação básica</item>
<item>Verbos irregulares</item> <string-array name="exercise_example_prompts">Exercise Example Prompts</string-array>
<item>Vocabulário no aeroporto</item>
<item>Como pedir um café</item> <string-array name="motivational_phrases">
<item>Expressões idiomáticas</item> <item>Os limites da sua língua são os limites do seu mundo. Vamos expandir essa gaiola.</item>
<item>Você é basicamente um computador de carne rodando uma simulação de idioma. Hora de atualizar o seu firmware.</item>
<item>Falar outra língua é possuir uma segunda alma. Ou pelo menos um truque de festa ótimo.</item>
<item>Um dia você vai articular a sua angústia existencial num dialeto completamente diferente.</item>
<item>Neuroplasticidade parece cirurgia fancy, mas é só seu cérebro finalmente fazendo trabalho pesado.</item>
<item>Cada palavra nova que você aprende é um conceito que você rouba de volta do vazio.</item>
<item>Fale menos, diga mais. Pera, você tá aprendendo vocabulário—fala mal, mas fala sempre.</item>
<item>Sua contagem de palavras hoje é estatisticamente irrelevante no cosmos, mas monumental para o o seu ego.</item>
<item>O dualismo cartesiano sugere que mente e corpo são separados. Bora fazer a mente puxar peso hoje.</item>
<item>Fluência é só uma série de erros bem disfarçados. Vai lá e comete alguns.</item>
<item>Conhecimento é a única coisa que realmente sacia o vazio. Alimenta ele.</item>
<item>Sua memória de curto prazo é uma peneira. A gente vai forçar essas palavras para o cofre de longo prazo na base da repetição pura.</item>
<item>Liberdade verdadeira é saber exatamente qual adjetivo super específico usar na hora que você julga alguém em silêncio.</item>
<item>Você é um artista, e o seu meio são substantivos levemente pronunciados errados.</item>
<item>Estômago vazio ronca. Mente vazia só fica rolando tela. Aprende uma palavra.</item>
<item>Repetição espaçada: porque o seu cérebro tenta agressivamente deletar tudo que você não usa ativamente.</item>
<item>Curadoria do seu léxico como um museu onde a exposição principal é a sua própria superioridade.</item>
<item>Solipsismo é a crença de que só a sua mente existe. Se for o caso, melhor dar um vocabulário melhor para ela.</item>
<item>Uma pessoa sem língua é uma pessoa sem país. Ou só um turista muito quieto.</item>
<item>Construindo um império de vocabulário, uma expressão agressivamente mal interpretada de cada vez.</item>
<item>A coruja de Minerva abre as suas asas só com o cair do crepúsculo. E depois de uma sessão de estudos sólida.</item>
<item>Escapar do poço gravitacional do monolinguismo requer impulso sério. Continua queimando combustível.</item>
<item>A língua é o sistema operativo da consciência. O seu tá instalando uma atualização.</item>
<item>Estamos todos no esgoto, mas alguns de nós estão olhando para dicionários de línguas estrangeiras.</item>
<item>Nomear uma coisa é possuí-la. Hora de virar o maior latifundiário da realidade.</item>
<item>Gramática é a estrutura subjacente da realidade. Ignora por sua conta e risco ontológico.</item>
<item>Até Sócrates sabia que nada sabia. Mas pelo menos ele sabia a palavra para \'nada\' em grego.</item>
<item>A jornada de mil milhas começa com um pedido estranho de café no tempo verbal errado.</item>
<item>Seu cérebro consome uns vinte por cento da energia do seu corpo. Faz ele merecer o salário.</item>
<item>Motivação é uma emoção passageira. Hábito é uma máquina implacável. Sê a máquina.</item>
<item>Se palavras são armas, o seu arsenal é uma coleção de colheres cegas. Vamos afiá-las.</item>
<item>Aprender é se submeter voluntariamente à incompetência temporária. Abraça o constrangimento.</item>
<item>Aprender língua é o mito de Sísifo, mas às vezes a pedra desce rolando e você entende um podcast.</item>
<item>Seu eu do futuro tá julgando a sua ética de trabalho atual. Prova que ele tá errado.</item>
<item>Entropia dita que o universo tende ao caos. O seu treino de vocabulário é uma rebelião diária contra a física.</item>
<item>10 palavras por dia são 3.650 por ano. Ainda não o suficiente para explicar a condição humana, mas um começo decente.</item>
<item>Juros compostos valem para ativos cognitivos também. Vai investir em uns verbos.</item>
<item>Você é a soma das suas memórias. Bora garantir que essas memórias não sejam só de pop songs e vergonhas.</item>
<item>Inglês é só três línguas diferentes empilhadas nos ombros uma da outra dentro de um sobretudo. Se elas conseguem se passar por uma, você também consegue.</item>
<item>A palavra francesa para 99 traduz literalmente para \'quatro-vintes-dezenove\'. As suas dificuldades de estudo não são nada perto da matemática deles.</item>
<item>Em Mandarim, usar o tom errado transforma \'mãe\' em \'cavalo\'. Vamos evitar incidentes edipianos equestres hoje.</item>
<item>Alemão deixa você juntar substantivos até construir uma palavra longa o bastante para expressar o seu sabor exato de miséria. Busca esse poder.</item>
<item>Dominar gênero gramatical significa aceitar que o universo decidiu arbitrariamente que mesa é feminino e ponte é masculino. Submeta-se ao absurdo.</item>
<item>Japonês tem contadores específicos dependendo se o objeto é plano, cilíndrico, ou um animal pequeno. Precisão é virtude. Começa a treinar.</item>
<item>Falantes de espanhol falam umas 25% mais rápido que inglês. Você não precisa ser mais esperto, só precisa pensar mais rápido.</item>
<item>Finlandês tem 15 casos para substantivo. De repente, memorizar uns flashcards não parece tão trágico, né?</item>
<item>Aprender uma língua é perceber que expressões são só alucinações coletivas sancionadas pela cultura. Bora alucinar.</item>
<item>Galês escrito parece que alguém dormiu num teclado com falta de vogal, mas tem uma poesia sombria e antiga. Acha a poesia na sua língua alvo.</item>
<item>Um vocabulário robusto é o jeito mais socialmente aceitável de ser um snob condescendente. Ganhe a sua arrogância.</item>
<item>Você tá batalhando a curva do esquecimento de Ebbinghaus. Ela é uma realidade matemática implacável. Reage.</item>
<item>Aprender Latim é inútil a não ser que você planeje discutir com monges medievais ou invocar algo acidentalmente. De qualquer jeito, é um bom preparo.</item>
<item>Sem vocabulário, gramática é só um silêncio lindamente estruturado. Dá um barulho para ele.</item>
<item>Irlandês não tem palavras para \'sim\' ou \'não\'. Você tem que repetir o verbo. Língua é sobre entrar na brincadeira de vez.</item>
<item>O alfabeto havaiano só tem 13 letras. A língua que você tá aprendendo tem mais. Para de reclamar e decora.</item>
<item>Traduzir palavra por palavra é furada. Cada língua mapeia a realidade diferente. Hora de aprender um mapa novo.</item>
<item>Um dia você vai ver um filme estrangeiro sem ficar olhando só para o terço inferior da tela. Continua.</item>
</string-array> </string-array>
<string-array name="vocabulary_example_prompts"><item>Usar espanhol latino-americano</item>
<string-array name="vocabulary_example_prompts">
<item>Usar espanhol latino-americano</item>
<item>Evitar palavras longas</item> <item>Evitar palavras longas</item>
<item>Evitar frases</item> <item>Evitar frases</item>
<item>Incluir muitos verbos e adjetivos</item> <item>Incluir muitos verbos e adjetivos</item>
<item>Usar linguagem informal</item> <item>Usar linguagem informal</item>
</string-array> </string-array>
<string-array name="vocabulary_hints">
<item>Saudação básica</item>
<item>Verbos irregulares</item>
<item>Vocabulário no aeroporto</item>
<item>Como pedir um café</item>
<item>Expressões idiomáticas</item>
</string-array>
</resources> </resources>

View File

@@ -824,10 +824,95 @@
<string name="hint_hints_header_basics">Primeiros Passos</string> <string name="hint_hints_header_basics">Primeiros Passos</string>
<string name="hint_hints_header_vocabulary">Gerenciamento de Vocabulário</string> <string name="hint_hints_header_vocabulary">Gerenciamento de Vocabulário</string>
<string name="hint_hints_header_advanced">Recursos Avançados</string> <string name="hint_hints_header_advanced">Recursos Avançados</string>
<string name="category_hint_intro">Você pode criar dois tipos de categorias para organizar seu vocabulário:</string> <string name="category_hint_intro">Você pode criar dois tipos de categorias para organizar o seu vocabulário:</string>
<string name="review_intro">Revise o vocabulário gerado antes de adicioná-lo à sua coleção.</string> <string name="review_intro">Revise o vocabulário gerado antes de adicioná-lo à sua coleção.</string>
<string name="duplicate">Duplicado</string> <string name="duplicate">Duplicado</string>
<string name="hint_scan_hint_title">Encontrando o modelo de IA certo</string> <string name="hint_scan_hint_title">Encontrando o modelo de IA certo</string>
<string name="hint_translate_how_it_works">Como funciona a tradução</string> <string name="hint_translate_how_it_works">Como funciona a tradução</string>
<string name="label_home">Início</string>
<string name="label_quit_app">Sair do App</string>
<string name="label_interval_settings_in_days">Configurações de Intervalo</string>
<string name="label_vocabulary_settings">Configurações de Progresso</string>
<string name="label_no_category">Nenhum</string>
<string name="text_search">Buscar</string>
<string name="text_language_settings_description">1. Escolha quais idiomas você quer usar no app. Idiomas que não estiverem ativados não vão aparecer aqui. Você também pode adicionar o seu próprio idioma à lista ou mudar um idioma existente (região/localidade)</string>
<string name="message_success_generic">2. Sucesso!</string>
<string name="message_info_generic">3. Informações</string>
<string name="message_error_generic">Ocorreu um erro</string>
<string name="message_loading_generic">Carregando…</string>
<string name="message_error_language_not_selected">Os idiomas de origem e destino precisam ser selecionados.</string>
<string name="message_error_no_words_found">Nenhuma palavra encontrada no texto fornecido.</string>
<string name="message_success_language_replaced">ID do idioma atualizado para %1$d itens.</string>
<string name="message_success_vocabulary_imported">Itens de vocabulário importados com sucesso.</string>
<string name="message_error_vocabulary_import_failed">Erro ao importar itens de vocabulário: %1$s</string>
<string name="message_success_items_merged">Itens mesclados!</string>
<string name="message_success_items_added">Adicionados %1$d novos itens de vocabulário com sucesso.</string>
<string name="message_error_items_add_failed">Erro ao adicionar itens: %1$s</string>
<string name="message_success_items_deleted">Itens de vocabulário excluídos com sucesso.</string>
<string name="message_error_items_delete_failed">Erro ao excluir itens: %1$s</string>
<string name="message_error_no_cards_found">Nenhum card encontrado para o filtro especificado.</string>
<string name="message_success_cards_loaded">Conjunto de cards carregado com sucesso.</string>
<string name="message_success_grammar_updated">Detalhes da gramática atualizados!</string>
<string name="message_error_grammar_fetch_failed">Não foi possível obter os detalhes da gramática.</string>
<string name="message_loading_grammar_fetch">Buscando gramática para %1$d itens…</string>
<string name="message_success_file_saved">Arquivo salvo em %1$s</string>
<string name="message_error_file_save_failed">Erro ao salvar o arquivo: %1$s</string>
<string name="message_error_file_save_cancelled">Salvamento do arquivo cancelado ou falhou.</string>
<string name="message_error_file_picker_not_initialized">Launcher de Salvar Arquivo não inicializado.</string>
<string name="message_success_category_saved">Categoria salva em %1$s</string>
<string name="message_error_api_key_missing">Chave da API tá faltando ou é inválida.</string>
<string name="message_error_api_key_invalid">Chave da API tá faltando ou é inválida.</string>
<string name="message_loading_translating">Traduzindo %1$d palavras…</string>
<string name="message_success_translation_completed">Tradução concluída.</string>
<string name="message_error_translation_failed">Falha na tradução: %1$s</string>
<string name="message_success_repository_wiped">Todos os dados do repositório foram apagados.</string>
<string name="message_error_repository_wipe_failed">Falha ao limpar repositório: %1$s</string>
<string name="message_loading_card_set">Carregando conjunto de cartas</string>
<string name="message_success_stage_updated">Estágio atualizado com sucesso.</string>
<string name="message_error_stage_update_failed">Erro ao atualizar o estágio: %1$s</string>
<string name="message_success_category_updated">Categoria atualizada com sucesso.</string>
<string name="message_error_category_update_failed">Erro ao atualizar a categoria: %1$s</string>
<string name="message_success_articles_removed">Artigos removidos com sucesso.</string>
<string name="message_error_articles_remove_failed">Erro ao remover os artigos: %1$s</string>
<string name="message_success_synonyms_generated">Sinônimos gerados com sucesso.</string>
<string name="message_error_synonyms_generation_failed">Falha ao gerar sinônimos: %1$s</string>
<string name="message_error_operation_failed">Operação falhou: %1$s</string>
<string name="message_loading_operation_in_progress">Operação em andamento...</string>
<string name="message_test_info">Esta é uma mensagem de informação genérica.</string>
<string name="message_test_success">Esta é uma mensagem de sucesso de teste!</string>
<string name="message_test_error">Ops, deu algo errado :(</string>
<string name="label_stats">Estatísticas</string>
<string name="label_library">Biblioteca</string>
<string name="label_edit">Editar</string>
<string name="label_new_words">Novas Palavras</string>
<string name="desc_expand_your_vocabulary">Expanda seu vocabulário</string>
<string name="label_settings">Configurações</string>
<string name="label_2d_days">%1$d dias</string>
<string name="label_current_streak">Sequência atual</string>
<string name="label_daily_goal">Meta Diária</string>
<string name="text_desc_no_activity_data_available">Sem dados de atividade disponíveis</string>
<string name="label_see_history">Ver Histórico</string>
<string name="label_weekly_progress">Progresso Semanal</string>
<string name="cd_go">Vai</string>
<string name="label_sort_by">Ordenar Por</string>
<string name="label_reset">Redefinir</string>
<string name="label_filter_cards">Filtrar Cartões</string>
<string name="text_desc_organize_vocabulary_groups">Organize Seu Vocabulário em Grupos</string>
<string name="text_add_new_word_to_list">Extrair uma nova palavra para a sua lista</string>
<string name="cd_scroll_to_top">Rolar para o topo</string>
<string name="cd_settings">Configurações</string>
<string name="label_import_csv">Importar CSV</string>
<string name="label_ai_generator">Gerador de IA</string>
<string name="label_new_wordss">Novas Palavras</string>
<string name="label_recently_added">Adicionados recentemente</string>
<string name="label_view_all">Ver tudo</string>
<string name="text_explore_more_categories">Explorar mais categorias</string>
<string name="cd_options">Opções</string>
<string name="cd_selected">Selecionado</string>
<string name="label_all_cards">Todos os Cartões</string>
<string name="cd_filter_options">Opções de filtro</string>
<string name="cd_add">Adicionar</string>
<string name="cd_searchh">Buscar</string>
<string name="label_learnedd">aprendido</string>
</resources> </resources>

View File

@@ -1104,4 +1104,13 @@
<string name="label_new_wordss">New Words</string> <string name="label_new_wordss">New Words</string>
<string name="label_recently_added">Recently Added</string> <string name="label_recently_added">Recently Added</string>
<string name="label_view_all">View All</string> <string name="label_view_all">View All</string>
<string name="text_explore_more_categories">Explore more categories</string>
<string name="cd_options">Options</string>
<string name="cd_selected">Selected</string>
<string name="label_all_cards">All Cards</string>
<string name="cd_filter_options">Filter options</string>
<string name="cd_add">Add</string>
<string name="cd_searchh">Search</string>
<string name="label_search_cards">Search cards</string>
<string name="label_learnedd">learned</string>
</resources> </resources>