Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,11 @@ android {
compose = true
}

androidResources {
// res/resources.properties names the default language.
generateLocaleConfig = true
}

flavorDimensions += listOf("store")
productFlavors {
create("playStore") {
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/resources.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
unqualifiedResLocale=en
19 changes: 19 additions & 0 deletions app/src/main/res/values-de/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<resources>
<string name="expand_navigation_content_description">Navigation ausklappen</string>
<string name="collapse_navigation_content_description">Navigation einklappen</string>
<string name="add_element_content_description">Eintrag hinzufügen</string>
<string name="search_content_description">Suchen</string>
<string name="open_website_content_description">Website öffnen</string>

<string name="add_new_element">Neuer Eintrag</string>

<string name="home">Start</string>
<string name="password_health">Passwort-Check</string>
<string name="password_health_short">Sicherheit</string>
<string name="connectivity">Verbindungen</string>
<string name="settings">Einstellungen</string>

<string name="match_not_found">Keine Treffer</string>

<string name="coming_soon">Demnächst verfügbar</string>
</resources>
8 changes: 8 additions & 0 deletions core/biometrics/src/main/res/values-de/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="authenticate">Identität bestätigen</string>
<string name="unlock_item">%s entsperren</string>
<string name="cancel">Abbrechen</string>
<string name="use_password">Passwort verwenden</string>

</resources>
16 changes: 16 additions & 0 deletions core/item/src/main/res/values-de/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="password">Passwort</string>
<string name="login">Login</string>
<string name="credit_card">Kreditkarte</string>

<string name="password_strength_ridiculous">Extrem schwach</string>
<string name="password_strength_weak">Schwach</string>
<string name="password_strength_moderate">Mittel</string>
<string name="password_strength_strong">Stark</string>
<string name="password_strength_excellent">Hervorragend</string>

<string name="card_expires_this_month">Läuft diesen Monat ab</string>
<string name="card_expires_next_month">Läuft nächsten Monat ab</string>
<string name="card_expired">Abgelaufen</string>
</resources>
16 changes: 16 additions & 0 deletions core/ui/src/main/res/values-de/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="create_new_item">Neuen Eintrag erstellen</string>

<string name="match_not_found">Keine Treffer</string>

<string name="show_password_content_description">Passwort anzeigen</string>
<string name="hide_password_content_description">Passwort verbergen</string>


<string name="blank_password">Bitte gib ein Passwort ein</string>
<string name="incorrect_password">Falsches Passwort</string>
<string name="password_does_not_match">Die Passwörter stimmen nicht überein</string>

<string name="add">Hinzufügen</string>
</resources>
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.res.pluralStringResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.buildAnnotatedString
Expand Down Expand Up @@ -115,8 +116,9 @@ fun AuthContent(
title = { Text(text = stringResource(R.string.migration_summary_title)) },
text = {
Text(
text = stringResource(
R.string.migration_summary_description,
text = pluralStringResource(
R.plurals.migration_summary_description,
state.skippedItems,
state.skippedItems,
),
)
Expand Down Expand Up @@ -182,10 +184,12 @@ private fun InteractableAuthContent(
.padding(16.dp),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
val (titleStart, titleEnd) = state.title
.split(TitleHighlightPlaceholder, limit = 2)
.let { it.first() to it.getOrElse(1) { "" } }
Text(
text = buildAnnotatedString {
append(state.firstTitlePart)
append(" ")
append(titleStart)

withStyle(
SpanStyle(
Expand All @@ -200,8 +204,10 @@ private fun InteractableAuthContent(
)
)
) {
append(stringResource(R.string.your_vault))
append(stringResource(R.string.auth_title_highlight))
}

append(titleEnd)
},
modifier = Modifier.fillMaxWidth(),
textAlign = TextAlign.Center,
Expand Down Expand Up @@ -385,11 +391,13 @@ fun MigrationDialog(onClick: () -> Unit) {
internal val DialogMinWidth = 280.dp
internal val DialogMaxWidth = 560.dp

private val AuthState.Interactable.firstTitlePart: String
private const val TitleHighlightPlaceholder = "%1\$s"

private val AuthState.Interactable.title: String
@Composable
get() = when (this) {
is AuthState.Login -> stringResource(R.string.authenticate_to_access)
is AuthState.Migrating -> stringResource(R.string.migrate_to_access)
is AuthState.Login -> stringResource(R.string.auth_title_unlock)
is AuthState.Migrating -> stringResource(R.string.auth_title_migrate)
}

private val AuthState.Interactable.buttonText: String
Expand Down
37 changes: 37 additions & 0 deletions feature/auth/src/main/res/values-de/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="confirm_password">Passwort bestätigen</string>
<string name="authenticate">Entsperren</string>
<string name="unlock_item">%s entsperren</string>
<string name="create_access">Zugang einrichten</string>

<string name="use_biometrics">Biometrie verwenden</string>

<!-- Unlock screen headline. %1$s is auth_title_highlight, drawn with a gradient. -->
<string name="auth_title_unlock">%1$s entsperren</string>
<string name="auth_title_migrate">Willkommen beim neuen %1$s</string>
<string name="create_access_access">Erstelle einen Zugang für</string>

<string name="migrating">Wird umgestellt</string>
<string name="migrate">Umstellen</string>
<string name="migrate_to_access_description">Damit deine Daten sicher und unversehrt bleiben, stellen wir deinen Zugang jetzt um. Dafür brauchst du einmal dein Hauptpasswort.</string>

<string name="request_biometric_authentication_content_description">Biometrische Entsperrung starten</string>
<string name="pending_totp_import_subtitle">Entsperre deinen Tresor, um diesen Authenticator-Code hinzuzufügen.</string>

<string name="importing_legacy_data">Deine Daten werden importiert</string>
<string name="importing_legacy_data_description">Deine Einträge werden in deinen neuen Tresor übertragen. Das passiert nur einmal.</string>
<string name="migration_summary_title">Import abgeschlossen</string>
<plurals name="migration_summary_description">
<item quantity="one">%1$d Eintrag konnte nicht gelesen werden und wurde nicht übernommen. Alles andere ist jetzt in deinem Tresor.</item>
<item quantity="other">%1$d Einträge konnten nicht gelesen werden und wurden nicht übernommen. Alles andere ist jetzt in deinem Tresor.</item>
</plurals>
<string name="migration_failed_title">Import unvollständig</string>
<string name="migration_failed_description">Deine Einträge konnten nicht importiert werden. Es ist nichts verloren gegangen – KeyGo versucht es beim nächsten Öffnen einfach noch einmal.</string>
<string name="biometric_reset_title">Biometrische Entsperrung deaktiviert</string>
<string name="biometric_reset_description">Dein Gerät kann den Tresor mit dem für die biometrische Entsperrung gespeicherten Schlüssel nicht mehr öffnen, deshalb hat KeyGo ihn entfernt. Melde dich mit deinem Hauptpasswort an und schalte die biometrische Entsperrung danach in den Einstellungen wieder ein.</string>
<string name="got_it">Verstanden</string>

<string name="retry">Erneut versuchen</string>
<string name="continue_anyway">Weiter</string>
</resources>
12 changes: 8 additions & 4 deletions feature/auth/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@

<string name="use_biometrics">Use biometrics</string>

<string name="migrate_to_access">Migrate to access</string>
<string name="authenticate_to_access">Authenticate to access</string>
<!-- Unlock screen headline. %1$s is auth_title_highlight, drawn with a gradient. -->
<string name="auth_title_unlock">Unlock %1$s</string>
<string name="auth_title_migrate">Welcome to the new %1$s</string>
<string name="auth_title_highlight" translatable="false">KeyGo</string>
<string name="create_access_access">Create an access to</string>
<string name="your_vault">your vault</string>

<string name="migrating">Migrating</string>
<string name="migrate">Migrate</string>
Expand All @@ -22,7 +23,10 @@
<string name="importing_legacy_data">Importing your data</string>
<string name="importing_legacy_data_description">Moving your items into your new vault. This happens once.</string>
<string name="migration_summary_title">Import finished</string>
<string name="migration_summary_description">%1$d of your items could not be read and were left behind. Everything else is in your vault.</string>
<plurals name="migration_summary_description">
<item quantity="one">%1$d of your items could not be read and was left behind. Everything else is in your vault.</item>
<item quantity="other">%1$d of your items could not be read and were left behind. Everything else is in your vault.</item>
</plurals>
<string name="migration_failed_title">Import incomplete</string>
<string name="migration_failed_description">Your items could not be imported. Nothing was lost, and KeyGo will try again the next time you open it.</string>
<string name="biometric_reset_title">Biometric unlock turned off</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.pluralStringResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import de.davis.keygo.feature.autofill.R
Expand Down Expand Up @@ -47,12 +46,8 @@ internal fun AssociationDialog(
},
text = {
Text(
text = pluralStringResource(
R.plurals.suggest_text,
if (domain.isNullOrBlank()) 0 else 1,
itemName,
domain.orEmpty(),
)
text = if (domain.isNullOrBlank()) stringResource(R.string.suggest_text, itemName)
else stringResource(R.string.suggest_text_with_domain, itemName, domain)
)
},
icon = {
Expand Down
29 changes: 29 additions & 0 deletions feature/autofill/src/main/res/values-de/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="autofill_service">Autofill-Dienst</string>
<string name="fill_anyway">Trotzdem ausfüllen</string>

<string name="checking_website_link">App wird überprüft</string>
<string name="checking_website_link_description">KeyGo fragt bei &lt;b>%1$s&lt;/b> nach, ob diese App dafür freigegeben ist.</string>

<string name="suspicious_activity">Verdächtige Aktivität</string>
<string name="suspicious_activity_description">Diese App (&lt;b>%1$s&lt;/b>) ist kein bekannter Browser, zeigt aber eine Website an (&lt;b>%2$s&lt;/b>). Wenn du hier automatisch ausfüllst, könnte die App deine Zugangsdaten erhalten. Fahre nur fort, wenn du der App und der Website vertraust.</string>

<string name="unverified_activity">App konnte nicht überprüft werden</string>
<string name="unverified_activity_description">Diese App (&lt;b>%1$s&lt;/b>) ist kein bekannter Browser, und es ließ sich nicht prüfen, ob sie &lt;b>%2$s&lt;/b> verwenden darf. Der Prüfdienst war nicht erreichbar – meistens ist das Gerät offline oder die App hat keinen Netzwerkzugriff. Fahre nur fort, wenn du der App und der Website vertraust.</string>

<string name="suggest">Vorschlagen</string>
<string name="suggest_for_this_app">Diesen Eintrag vorschlagen</string>

<string name="suggest_text">„%1$s“ wird dir bei der nächsten Anmeldung vorgeschlagen. Diese Einstellung wird nur auf deinem Gerät gespeichert und lässt sich in den Details des Eintrags ändern.</string>
<string name="suggest_text_with_domain">„%1$s“ wird dir bei der nächsten Anmeldung auf %2$s vorgeschlagen. Diese Einstellung wird nur auf deinem Gerät gespeichert und lässt sich in den Details des Eintrags ändern.</string>

<string name="not_now">Nicht jetzt</string>

<string name="cancel">Abbrechen</string>

<string name="open_app">KeyGo-Autofill verwenden</string>
<string name="sms_code">SMS-Code</string>
<string name="waiting_for_sms_code">Warte auf SMS-Code</string>
<string name="waiting_for_sms_code_description">KeyGo trägt den Code automatisch ein, sobald die SMS ankommt.</string>
</resources>
6 changes: 2 additions & 4 deletions feature/autofill/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,8 @@
<string name="suggest">Suggest</string>
<string name="suggest_for_this_app">Suggest this item</string>

<plurals name="suggest_text">
<item quantity="zero">\"%1$s\" will be suggested next time you sign in. This choice is stored on your device and can be changed on the item\'s detail screen.</item>
<item quantity="other">\"%1$s\" will be suggested next time you sign in on %2$s. This choice is stored on your device and can be changed on the item\'s detail screen.</item>
</plurals>
<string name="suggest_text">\"%1$s\" will be suggested next time you sign in. This choice is stored on your device and can be changed on the item\'s detail screen.</string>
<string name="suggest_text_with_domain">\"%1$s\" will be suggested next time you sign in on %2$s. This choice is stored on your device and can be changed on the item\'s detail screen.</string>

<string name="not_now">Not now</string>

Expand Down
Loading
Loading