[#1421] Spanish translation

* [#1421] Initial es translation structure

* Update strings.xml

* Update strings.xml

* Fix english texts

* Exclude non-translatable texts

* Add new es texts

* [#1421] [WIP] es translation

* Update strings.xml

---------

Co-authored-by: Honza <rychnovsky.honza@gmail.com>

* Add Spanish locale to screenshot testing

* Fix Detekt warning

* Changelogs update

* Add WhatsNew chnagelog Spanish logic

* Spanish WHATS_NEW cleanup

* Google Play Store listings

* Fix history item buttons positioning

* Ktlint warnings fix

* Add Flexa texts on Integration [ES_REQUIRED]

* Adopt latest Spanish in-app review comments

* Update strings.xml

* Revert Zcash to Zashi in Spanish text

* Update Spanish whatsnew

* Update Spanish Google Play Store listing

---------

Co-authored-by: y4ssi <11613913+y4ssi@users.noreply.github.com>
This commit is contained in:
Honza Rychnovský 2024-11-11 12:47:16 +01:00 committed by GitHub
parent 261510a42c
commit 4d35a0d5bc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
54 changed files with 830 additions and 43 deletions

View File

@ -8,6 +8,7 @@ and this application adheres to [Semantic Versioning](https://semver.org/spec/v2
### Added ### Added
- The device authentication feature on the Zashi app launch has been added - The device authentication feature on the Zashi app launch has been added
- Zashi app now supports Spanish language
- The Flexa SDK has been adopted to enable payments using the embedded Flexa UI - The Flexa SDK has been adopted to enable payments using the embedded Flexa UI
### Fixed ### Fixed

View File

@ -30,7 +30,6 @@ import java.io.FileInputStream
import java.io.IOException import java.io.IOException
import java.security.GeneralSecurityException import java.security.GeneralSecurityException
import java.security.KeyStore import java.security.KeyStore
import java.util.Locale
@CacheableTask @CacheableTask
abstract class PublishToGooglePlay @Inject constructor( abstract class PublishToGooglePlay @Inject constructor(
@ -241,15 +240,9 @@ abstract class PublishToGooglePlay @Inject constructor(
// In-app update priority of the release. Can take values in the range [0, 5], with 5 the highest priority. // In-app update priority of the release. Can take values in the range [0, 5], with 5 the highest priority.
val inAppUpdatePriority = project.property("ZCASH_IN_APP_UPDATE_PRIORITY").toString().toInt() val inAppUpdatePriority = project.property("ZCASH_IN_APP_UPDATE_PRIORITY").toString().toInt()
// A description of what is new in this release in form of [LocalizedText] val releaseNotes: List<LocalizedText> = getReleaseNotesFor(
val localizedText = LocalizedText().apply { gradleVersionName, listOf("EN", "ES")
language = Locale.ENGLISH.toLanguageTag() )
text = ChangelogParser.getChangelogEntry(
filePath = "docs/whatsNew/WHATS_NEW_EN.md",
versionNameFallback = gradleVersionName
).toInAppUpdateReleaseNotesText()
}
val releaseNotes: MutableList<LocalizedText> = arrayListOf(localizedText)
log("Publish - Version: $versionName has been uploaded") log("Publish - Version: $versionName has been uploaded")
@ -283,6 +276,24 @@ abstract class PublishToGooglePlay @Inject constructor(
log("App edit with id ${appEdit.id} has been committed") log("App edit with id ${appEdit.id} has been committed")
} }
private val releaseNotesFilePath = "docs/whatsNew/WHATS_NEW_"
private val releaseNotesFileSuffix = ".md"
private fun getReleaseNotesFor(gradleVersionName: String, languageTags: List<String>): MutableList<LocalizedText> {
return buildList {
languageTags.forEach { languageTag ->
// A description of what is new in this release in form of [LocalizedText]
add(LocalizedText().apply {
language = languageTag
text = ChangelogParser.getChangelogEntry(
filePath = releaseNotesFilePath + languageTag + releaseNotesFileSuffix,
versionNameFallback = gradleVersionName
).toInAppUpdateReleaseNotesText()
})
}
}.toMutableList()
}
@TaskAction @TaskAction
fun runTask() { fun runTask() {
log("Publish starting for track: $track and status: $status") log("Publish starting for track: $track and status: $status")

View File

@ -14,7 +14,7 @@ pluginManager.withPlugin("com.android.application") {
// The rest of the locales provides an explicit list of the languages to keep in the // The rest of the locales provides an explicit list of the languages to keep in the
// final app. Doing this will strip out additional locales from libraries like // final app. Doing this will strip out additional locales from libraries like
// Google Play Services and Firebase, which add unnecessary bloat. // Google Play Services and Firebase, which add unnecessary bloat.
resourceConfigurations.addAll(listOf("en", "en-rUS", "en-rGB", "en-rAU", "en_XA", "ar_XB")) resourceConfigurations.addAll(listOf("en", "en-rUS", "en-rGB", "en-rAU", "es", "en_XA", "ar_XB"))
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
@ -39,7 +39,7 @@ pluginManager.withPlugin("com.android.library") {
// If we add other localizations, they should be included in this list. // If we add other localizations, they should be included in this list.
// By explicitly setting supported locales, we strip out unused localizations from third party // By explicitly setting supported locales, we strip out unused localizations from third party
// libraries (e.g. play services) // libraries (e.g. play services)
resourceConfigurations.addAll(listOf("en", "en-rUS", "en-rGB", "en-rAU", "en_XA", "ar_XB")) resourceConfigurations.addAll(listOf("en", "en-rUS", "en-rGB", "en-rAU", "es", "en_XA", "ar_XB"))
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("proguard-consumer.txt") consumerProguardFiles("proguard-consumer.txt")
@ -68,7 +68,7 @@ pluginManager.withPlugin("com.android.test") {
// If we add other localizations, they should be included in this list. // If we add other localizations, they should be included in this list.
// By explicitly setting supported locales, we strip out unused localizations from third party // By explicitly setting supported locales, we strip out unused localizations from third party
// libraries (e.g. play services) // libraries (e.g. play services)
resourceConfigurations.addAll(listOf("en", "en-rUS", "en-rGB", "en-rAU", "en_XA", "ar_XB")) resourceConfigurations.addAll(listOf("en", "en-rUS", "en-rGB", "en-rAU", "es", "en_XA", "ar_XB"))
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"

View File

@ -1,7 +1,8 @@
import co.electriccoin.zcash.Git import co.electriccoin.zcash.Git
import publish.ChangelogParser import publish.ChangelogParser
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.Date
import java.util.TimeZone
plugins { plugins {
kotlin("multiplatform") kotlin("multiplatform")
@ -9,6 +10,14 @@ plugins {
id("secant.dependency-conventions") id("secant.dependency-conventions")
} }
private val gitShaKey = "gitSha"
private val gitCommitCountKey = "gitCommitCount"
private val releaseNotesEn = "releaseNotesEn"
private val releaseNotesEs = "releaseNotesEs"
private val releaseNotesEnPath = "docs/whatsNew/WHATS_NEW_EN.md"
private val releaseNotesEsPath = "docs/whatsNew/WHATS_NEW_ES.md"
// Injects build information // Injects build information
// Note timestamp is not currently injected because it effectively disables the cache since it // Note timestamp is not currently injected because it effectively disables the cache since it
// changes with every build // changes with every build
@ -20,20 +29,14 @@ val generateBuildConfigTask = tasks.create("buildConfig") {
parent!!.projectDir parent!!.projectDir
) )
inputs.property(gitShaKey, gitInfo.sha)
inputs.property(gitCommitCountKey, gitInfo.commitCount)
//val buildTimestamp = newIso8601Timestamp() //val buildTimestamp = newIso8601Timestamp()
val gradleVersionName = project.property("ZCASH_VERSION_NAME").toString()
val releaseNotesJson = ChangelogParser.getChangelogEntry(
filePath = "docs/whatsNew/WHATS_NEW_EN.md",
versionNameFallback = gradleVersionName
).toJsonString()
inputs.property("gitSha", gitInfo.sha)
inputs.property("gitCommitCount", gitInfo.commitCount)
//inputs.property("buildTimestamp", buildTimestamp) //inputs.property("buildTimestamp", buildTimestamp)
inputs.property("releaseNotesEn", releaseNotesJson) // Add release notes for all supported languages
fillInReleaseNotes(inputs)
outputs.dir(generatedDir) outputs.dir(generatedDir)
@ -50,9 +53,10 @@ val generateBuildConfigTask = tasks.create("buildConfig") {
// Generated file // Generated file
package co.electriccoin.zcash.build package co.electriccoin.zcash.build
const val gitSha: String = "${gitInfo.sha}" const val gitSha: String = "${inputs.properties[gitShaKey]}"
const val gitCommitCount: Int = ${gitInfo.commitCount} const val gitCommitCount: Int = ${inputs.properties[gitCommitCountKey]}
const val releaseNotesEn: String = "$releaseNotesJson" const val releaseNotesEn: String = "${inputs.properties[releaseNotesEn]}"
const val releaseNotesEs: String = "${inputs.properties[releaseNotesEs]}"
""".trimIndent() """.trimIndent()
) )
} }
@ -93,3 +97,21 @@ fun newIso8601Timestamp(): String {
} }
return formatter.format(Date()) return formatter.format(Date())
} }
fun fillInReleaseNotes(inputs: TaskInputs) {
val gradleVersionName = project.property("ZCASH_VERSION_NAME").toString()
val releaseNotesEnJson = ChangelogParser.getChangelogEntry(
filePath = releaseNotesEnPath,
versionNameFallback = gradleVersionName
).toJsonString()
inputs.property(releaseNotesEn, releaseNotesEnJson)
val releaseNotesEsJson = ChangelogParser.getChangelogEntry(
filePath = releaseNotesEsPath,
versionNameFallback = gradleVersionName
).toJsonString()
inputs.property(releaseNotesEs, releaseNotesEsJson)
}

View File

@ -0,0 +1,27 @@
# Google Play Store Listing: English
This file covers all the store listing texts for Zashi's presence in the Google Play Store.
*Note: Only the texts under the titles are meant to be translated.
## Store presence
### App name
Zashi: Zcash Wallet
### Short description
Zashi is a Zcash wallet that keeps your transaction and message history private.
### Full description
Zashi is a Zcash wallet that keeps your transaction and message history private.
Built and maintained by Electric Coin Co. (ECC), the inventor of Zcash, Zashi is the easiest way to use $ZEC.
Why use the Zashi Zcash wallet?
* You can send and receive ZEC and private memos. (Zashi your mom! Zashi your barista!)
* Its reliable and fast, and it includes the ability to Spend before Sync. (Funds are available before sync completes.)
* The UI is fully updated — simple and clean.
* It supports Sapling and Orchard pools, plus Unified Addresses, a single address type that works across all Zcash pools, transparent and shielded.
* It has built-in mechanisms for user support and developer feedback.

View File

@ -0,0 +1,29 @@
# Google Play Store Listing: Spanish
This file covers all the store listing texts for Zashi's presence in the Google Play Store.
*Note: Only the texts under the titles are meant to be translated.
## Store presence
### App name
Zashi: Billetera de Zcash
### Short description
Zashi es una billetera de Zcash que mantiene privado el historial de tus transacciones y mensajes.
### Full description
Zashi es una billetera de Zcash que mantiene privado el historial de tus transacciones y mensajes.
Creada y gestionada por Electric Coin Co. (ECC), los creadores de Zcash, Zashi es la manera más sencilla de usar $ZEC.
¿Por qué usar la billetera Zashi de Zcash?
* Puedes enviar y recibir ZEC y mensajes privados. (¡Envía Zashi a tu mamá! ¡Envía Zashi a tu barista!)
* Es confiable y rápida, e incluye la función "Gastar antes de Sincronizar" (los fondos están disponibles antes de
que se complete la sincronización).
* La interfaz está completamente actualizada: simple y clara.
* Soporta los pools Sapling y Orchard, además de Direcciones Unificadas, un tipo de dirección única que funciona en
todos los pools de Zcash, tanto transparentes como protegidos.
* Cuenta con funciones integradas para soporte al usuario y feedback de desarrolladores.

View File

@ -11,6 +11,7 @@ directly impact users rather than highlighting other key architectural updates.*
### Added ### Added
- The device authentication feature on the Zashi app launch has been added - The device authentication feature on the Zashi app launch has been added
- Zashi app now supports Spanish language
- The Flexa SDK has been adopted to enable payments using the embedded Flexa UI - The Flexa SDK has been adopted to enable payments using the embedded Flexa UI
### Fixed ### Fixed

View File

@ -0,0 +1,20 @@
# Changelog
All notable changes to this application will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this application adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
**Please be aware that this changelog primarily focuses on user-related modifications, emphasizing changes that can
directly impact users rather than highlighting other key architectural updates.**
## [Unreleased]
### Added
- The device authentication feature on the Zashi app launch has been added
- Zashi app now supports Spanish language
- The Flexa SDK has been adopted to enable payments using the embedded Flexa UI
### Fixed
- Address book toast now correctly shows on send screen when adding both new and known addresses to text field
- The application now correctly navigates to the homepage after deleting the current wallet and creating a new or
recovering an older one

View File

@ -0,0 +1,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="amount_with_fiat_currency_symbol" formatted="true"><xliff:g id="fiat_currency_symbol" example="$">%1$s</xliff:g><xliff:g id="amount" example="123">%2$s</xliff:g></string>
<string name="hide_balance_placeholder">-----</string>
<string name="back_navigation_content_description">Atrás</string>
<string name="triple_dots"></string>
</resources>

View File

@ -30,6 +30,10 @@ android {
getByName("main").apply { getByName("main").apply {
res.setSrcDirs( res.setSrcDirs(
setOf( setOf(
// This is a special case as these texts are not translated, they are replaced in build time via
// app/build.gradle.kts instead
"src/main/res/ui/non_translatable",
"src/main/res/ui/about", "src/main/res/ui/about",
"src/main/res/ui/account", "src/main/res/ui/account",
"src/main/res/ui/address_book", "src/main/res/ui/address_book",

View File

@ -2,9 +2,11 @@ package co.electriccoin.zcash.ui.common.model
import android.content.Context import android.content.Context
import android.content.pm.ApplicationInfo import android.content.pm.ApplicationInfo
import cash.z.ecc.android.sdk.model.Locale
import co.electriccoin.zcash.build.gitCommitCount import co.electriccoin.zcash.build.gitCommitCount
import co.electriccoin.zcash.build.gitSha import co.electriccoin.zcash.build.gitSha
import co.electriccoin.zcash.build.releaseNotesEn import co.electriccoin.zcash.build.releaseNotesEn
import co.electriccoin.zcash.build.releaseNotesEs
import co.electriccoin.zcash.spackle.EmulatorWtfUtil import co.electriccoin.zcash.spackle.EmulatorWtfUtil
import co.electriccoin.zcash.spackle.FirebaseTestLabUtil import co.electriccoin.zcash.spackle.FirebaseTestLabUtil
import co.electriccoin.zcash.spackle.getPackageInfoCompat import co.electriccoin.zcash.spackle.getPackageInfoCompat
@ -38,8 +40,16 @@ data class VersionInfo(
isTestnet = context.resources.getBoolean(cash.z.ecc.sdk.ext.R.bool.zcash_is_testnet), isTestnet = context.resources.getBoolean(cash.z.ecc.sdk.ext.R.bool.zcash_is_testnet),
gitSha = gitSha, gitSha = gitSha,
gitCommitCount = gitCommitCount.toLong(), gitCommitCount = gitCommitCount.toLong(),
changelog = Changelog.new(json = releaseNotesEn) changelog = Changelog.new(json = resolveBestReleaseNotes())
) )
} }
private fun resolveBestReleaseNotes(): String {
return if (Locale.getDefault().language.contains("es", ignoreCase = true)) {
releaseNotesEs
} else {
releaseNotesEn
}
}
} }
} }

View File

@ -615,7 +615,7 @@ private fun HistoryItemExpandedAddressPart(
Spacer(modifier = Modifier.height(16.dp)) Spacer(modifier = Modifier.height(16.dp))
Row { Row(verticalAlignment = Alignment.CenterVertically) {
TextWithIcon( TextWithIcon(
text = stringResource(id = R.string.account_history_item_tap_to_copy), text = stringResource(id = R.string.account_history_item_tap_to_copy),
style = ZashiTypography.textSm, style = ZashiTypography.textSm,
@ -633,6 +633,8 @@ private fun HistoryItemExpandedAddressPart(
) { onAction(TrxItemAction.AddressClick(recipient)) } ) { onAction(TrxItemAction.AddressClick(recipient)) }
) )
Spacer(modifier = Modifier.width(ZashiDimensions.Spacing.spacingSm))
if (contact == null) { if (contact == null) {
TextWithIcon( TextWithIcon(
text = stringResource(id = R.string.account_history_item_save_address), text = stringResource(id = R.string.account_history_item_save_address),

View File

@ -71,7 +71,7 @@ internal fun BaseExchangeRateOptIn(
Image(painter = painterResource(R.drawable.exchange_rate), contentDescription = "") Image(painter = painterResource(R.drawable.exchange_rate), contentDescription = "")
Spacer(modifier = Modifier.height(16.dp)) Spacer(modifier = Modifier.height(16.dp))
Text( Text(
text = "Currency Conversion", text = stringResource(id = R.string.exchange_rate_opt_in_subtitle),
color = ZashiColors.Text.textPrimary, color = ZashiColors.Text.textPrimary,
style = ZashiTypography.header6, style = ZashiTypography.header6,
fontWeight = FontWeight.SemiBold fontWeight = FontWeight.SemiBold

View File

@ -155,7 +155,7 @@ class IntegrationsViewModel(
viewModelScope.launch { viewModelScope.launch {
runCatching { runCatching {
biometricRepository.requestBiometrics( biometricRepository.requestBiometrics(
BiometricRequest(message = stringRes(R.string.integrations_biometric_message)) BiometricRequest(message = stringRes(R.string.integrations_flexa_biometric_message))
) )
Twig.debug { "Getting send transaction proposal" } Twig.debug { "Getting send transaction proposal" }
getSynchronizer() getSynchronizer()

View File

@ -0,0 +1,14 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="about_title">Acerca de</string>
<string name="about_version_format" formatted="true">Versión de Zashi <xliff:g example="1" id="version">%s</xliff:g></string>
<string name="about_debug_menu_app_name">Nombre de la app:<xliff:g example="Zashi" id="app_name">%1$s</xliff:g></string>
<string name="about_debug_menu_build">Compilación: <xliff:g example="635dac0eb9ddc2bc6da5177f0dd495d8b76af4dc" id="git_commit_hash">%1$s</xliff:g></string>
<string name="about_description">¡Envía y recibe ZEC en Zashi!\nZashi es una billetera de diseño minimalista y autogestionada, exclusivamente para ZEC, que mantiene tu historial de transacciones y saldo de la billetera privados. Construida por Zcashers, para Zcashers. Desarrollada y mantenida por Electric Coin Co., el inventor de Zcash, Zashi cuenta con un mecanismo de retroalimentación integrado para habilitar más funciones, más rápidamente.</string>
<string name="about_pp_part_1">Consulta nuestra Política de Privacidad\u0020</string>
<string name="about_pp_part_2">aquí</string>
<string name="about_pp_part_3">.</string>
<string name="about_unable_to_web_browser">No se pudo encontrar una aplicación de navegador web.</string>
<string name="about_button_whats_new">Novedades</string>
<string name="about_button_privacy_policy">Política de Privacidad</string>
</resources>

View File

@ -11,4 +11,4 @@
<string name="about_unable_to_web_browser">Unable to find a web browser app.</string> <string name="about_unable_to_web_browser">Unable to find a web browser app.</string>
<string name="about_button_whats_new">What\'s new</string> <string name="about_button_whats_new">What\'s new</string>
<string name="about_button_privacy_policy">Privacy Policy</string> <string name="about_button_privacy_policy">Privacy Policy</string>
</resources> </resources>

View File

@ -0,0 +1,29 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="account_history_empty">Sin historial de transacciones</string>
<string name="account_history_item_sent">Enviado</string>
<string name="account_history_item_received">Recibido</string>
<string name="account_history_item_sending">Enviando…</string>
<string name="account_history_item_receiving">Recibiendo…</string>
<string name="account_history_item_receive_failed">Error al recibir</string>
<string name="account_history_item_send_failed">Error al enviar</string>
<string name="account_history_item_shielded">Transacción protegida</string>
<string name="account_history_item_sent_prefix">-</string>
<string name="account_history_item_received_prefix">+</string>
<string name="account_history_item_tap_to_copy">Toca para copiar</string>
<string name="account_history_item_save_address">Guardar dirección</string>
<plurals name="account_history_item_message">
<item quantity="one">Mensaje</item>
<item quantity="other">Mensajes</item>
<item quantity="many">Mensajes</item>
</plurals>
<string name="account_history_item_collapse_transaction">Colapsar transacción</string>
<string name="account_history_item_transaction_id">ID de transacción</string>
<string name="account_history_item_transaction_fee">Tarifa de transacción</string>
<string name="account_history_item_transaction_fee_typical">Tarifa típica &lt; <xliff:g id="fee_amount" example="0.001">%1$s</xliff:g></string>
<string name="account_history_memo_clipboard_tag">Mensaje de transacción</string>
<string name="account_history_id_clipboard_tag">ID de transacción</string>
<string name="account_history_address_clipboard_tag">Dirección de transacción</string>
</resources>

View File

@ -13,7 +13,7 @@
<string name="account_history_item_received_prefix">+</string> <string name="account_history_item_received_prefix">+</string>
<string name="account_history_item_tap_to_copy">Tap to copy</string> <string name="account_history_item_tap_to_copy">Tap to copy</string>
<string name="account_history_item_save_address">Save address</string> <string name="account_history_item_save_address">Save address</string>
n <plurals name="account_history_item_message"> <plurals name="account_history_item_message">
<item quantity="one">Message</item> <item quantity="one">Message</item>
<item quantity="other">Messages</item> <item quantity="other">Messages</item>
</plurals> </plurals>

View File

@ -0,0 +1,4 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="add_new_contact_title">Agregar nuevo contacto</string>
<string name="add_new_contact_primary_btn">Guardar</string>
</resources>

View File

@ -0,0 +1,8 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="address_book_title">Libreta de direcciones</string>
<string name="address_book_add">Agregar nuevo contacto</string>
<string name="address_book_empty">Tu libreta de direcciones está vacía</string>
<string name="address_book_version">Versión <xliff:g example="1" id="version">%s</xliff:g></string>
<string name="address_book_scan_btn">Escanear código QR</string>
<string name="address_book_manual_btn">Entrada manual</string>
</resources>

View File

@ -0,0 +1,9 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="advanced_settings_title">Configuración avanzada</string>
<string name="advanced_settings_recovery">Frase de recuperación</string>
<string name="advanced_settings_export">Exportar datos privados</string>
<string name="advanced_settings_choose_server">Elegir un servidor</string>
<string name="advanced_settings_currency_conversion">Conversión de moneda</string>
<string name="advanced_settings_info">Se te pedirá confirmación en la siguiente pantalla</string>
<string name="advanced_settings_delete_button">Eliminar Zashi</string>
</resources>

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="authentication_system_ui_title">
Autenticación para <xliff:g id="app_name" example="Zashi">%1$s</xliff:g>
</string>
<string name="authentication_system_ui_subtitle">
Usa credenciales biométricas o del dispositivo para acceder a <xliff:g id="use_case" example="Recovery Phrase">%1$s</xliff:g>.
</string>
<string name="authentication_use_case_delete_wallet">Función Eliminar Cartera</string>
<string name="authentication_use_case_export_data">Función Exportar Datos Privados</string>
<string name="authentication_use_case_seed_recovery">Función Recuperación de Semilla</string>
<string name="authentication_use_case_send_funds">Función Enviar Fondos</string>
<string name="authentication_toast_canceled">Autenticación cancelada</string>
<string name="authentication_toast_failed">Autenticación fallida</string>
<string name="authentication_error_title">Error de autenticación</string>
<string name="authentication_error_text">La autenticación falló por la siguiente razón. Reintenta la autenticación o contacta al equipo de soporte para obtener ayuda.</string>
<string name="authentication_error_details">
Código de error: <xliff:g id="code" example="-1">%1$d</xliff:g>\nMensaje de error: <xliff:g id="message" example="No device credential">%2$s</xliff:g>
</string>
<string name="authentication_error_button_retry">Reintentar</string>
<string name="authentication_error_button_support">Contactar Soporte</string>
<string name="authentication_failed_title">Autenticación fallida</string>
<string name="authentication_failed_text">
La autenticación fue presentada pero no fue reconocida. Reintenta la autenticación o contacta al equipo de soporte para obtener ayuda.
</string>
<string name="authentication_failed_button_retry">Reintentar</string>
<string name="authentication_failed_button_support">Contactar Soporte</string>
<string name="authentication_failed_welcome_icon_cont_desc">Toca para desbloquear la app <xliff:g id="app_name" example="Zashi">%1$s</xliff:g></string>
<string name="authentication_failed_welcome_title">Tu cuenta de Zashi está segura.</string>
<string name="authentication_failed_welcome_subtitle">Toca el ícono de la llave para desbloquearla.</string>
</resources>

View File

@ -0,0 +1,53 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="balances_title">Saldos</string>
<string name="balances_shielded_spendable">ZEC protegidos (disponibles)</string>
<string name="balances_change_pending">Cambio pendiente</string>
<string name="balances_pending_transactions">Transacciones pendientes</string>
<string name="balances_transparent_balance">Saldo transparente</string>
<string name="balances_transparent_balance_help" formatted="true">
<xliff:g id="app_name" example="Zashi">%1$s</xliff:g> utiliza la última actualización de la red y no
admite el envío de <xliff:g id="currency" example="ZEC">%2$s</xliff:g> transparentes (no protegidos). Usa el botón de Proteger y Consolidar para proteger tus fondos, lo cual se sumará a tu saldo disponible y hará que tus <xliff:g id="currency" example="ZEC">%2$s</xliff:g> sean gastables.</string>
<string name="balances_transparent_balance_help_close">¡Entendido!</string>
<string name="balances_transparent_help_content_description">Mostrar ayuda</string>
<string name="balances_transparent_balance_shield">Proteger y consolidar fondos</string>
<string name="balances_transparent_balance_fee">(Tarifa típica &lt; <xliff:g id="fee_amount" example="0.001">%1$s</xliff:g>)</string>
<string name="balances_status_syncing" formatted="true">Sincronizando…</string>
<string name="balances_status_syncing_amount_suffix" formatted="true"><xliff:g id="amount_prefix" example="123$">%1$s</xliff:g> hasta ahora</string>
<string name="balances_status_syncing_percentage" formatted="true"><xliff:g id="synced_percent" example="50.25">%1$s</xliff:g>%%</string> <!-- double %% for escaping -->
<string name="balances_status_synced">Sincronizado</string>
<string name="balances_status_update">Por favor, actualiza <xliff:g id="app_name" example="Zashi">%1$s</xliff:g> usando Google Play</string>
<string name="balances_status_error_simple"><xliff:g id="app_name" example="Zashi">%1$s</xliff:g> encontró un error al sincronizar, intentando resolver…</string>
<string name="balances_status_restoring_text">El proceso de restauración puede tomar varias horas en dispositivos de baja potencia, e incluso en dispositivos potentes es probable que tome más de una hora.</string>
<string name="balances_shielding_successful">La protección ha sido enviada con éxito</string>
<string name="balances_status_error_dialog_title">Error</string>
<string name="balances_status_error_dialog_connection">
Desconectado. Por favor, revisa tu conexión a internet.
</string>
<string name="balances_status_error_dialog_cause" formatted="true">Error:
<xliff:g id="error_cause" example="Problema al escanear bloques">%1$s</xliff:g>\n\nRastro de error:
<xliff:g id="error_stacktrace" example="java.lang.IllegalStateException: Estado de billetera no soportado
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
Causado por: java.lang.RuntimeException: Error del backend Rust">%2$s</xliff:g>
</string>
<string name="balances_status_error_dialog_cause_unknown">
Causa desconocida. Por favor contacta a nuestro equipo de soporte si el problema persiste.
</string>
<string name="balances_status_error_dialog_stacktrace_unknown">Rastro de error desconocido.</string>
<string name="balances_status_dialog_stopped">La sincronización está detenida. Se reanudará pronto.</string>
<string name="balances_status_dialog_ok_button">OK</string>
<string name="balances_status_dialog_report_button">Reportar</string>
<string name="balances_shielding_dialog_error_title">Transacción Fallida</string>
<string name="balances_shielding_dialog_error_text">El intento de proteger los fondos transparentes falló. Inténtalo de nuevo, por favor.</string>
<string name="balances_shielding_dialog_error_btn">OK</string>
<string name="balances_shielding_dialog_report_btn">Reportar</string>
<string name="balances_shielding_dialog_error_text_below_threshold">El saldo transparente actual es cero o está por debajo del límite permitido para proteger.</string>
<string name="balances_shielding_dialog_error_grpc_title">Error de conexión</string>
<string name="balances_shielding_dialog_error_grpc_text">Zashi encontró algunos problemas de conexión al enviar la transacción protegida a la red. Lo intentará de nuevo en los próximos minutos.</string>
<string name="balances_shielding_dialog_error_grpc_btn">OK</string>
</resources>

View File

@ -0,0 +1,35 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="choose_server_title">Servidor</string>
<string name="choose_server_default_label">predeterminado: <xliff:g id="server" example="example.com:123">%1$s</xliff:g></string>
<string name="choose_server_custom">personalizado</string>
<string name="choose_server_custom_delimiter">:</string>
<string name="choose_server_full_server_name">
<xliff:g id="hostname" example="example.com">%1$s</xliff:g>:
<xliff:g id="port" example="508">%2$d</xliff:g>
</string>
<string name="choose_server_full_server_name_text_field">
<xliff:g id="hostname" example="example.com">%1$s</xliff:g>:<xliff:g id="port" example="508">%2$d</xliff:g>
</string>
<string name="choose_server_textfield_hint">&lt;nombre del host&gt;:&lt;puerto&gt;</string>
<string name="choose_server_save">Guardar selección</string>
<string name="choose_server_validation_dialog_error_title">Punto final del servidor no válido</string>
<string name="choose_server_validation_dialog_error_text">Error: El intento de cambiar el punto final falló.
Verifique que el nombre del host y el puerto sean correctos, y estén formateados como &lt;nombre del host&gt;:&lt;puerto&gt;.</string>
<string name="choose_server_validation_dialog_error_btn">OK</string>
<string name="choose_server_save_success_dialog_title">Servidor guardado</string>
<string name="choose_server_save_success_dialog_text">El punto final del servidor seleccionado se ha
guardado correctamente.</string>
<string name="choose_server_save_success_dialog_btn">OK</string>
<string name="choose_server_save_default">Predeterminado</string>
<string name="choose_server_loading_title">Realizando prueba de servidor</string>
<string name="choose_server_loading_subtitle">Esto puede tardar un momento…</string>
<string name="choose_server_fastest_servers">Servidores más rápidos</string>
<string name="choose_server_other_servers">Otros servidores</string>
<string name="choose_server_refresh">Actualizar</string>
<string name="choose_server_active">Activo</string>
<string name="choose_server_default">Predeterminado</string>
</resources>

View File

@ -0,0 +1,25 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="back_navigation">Atrás</string>
<string name="back_navigation_content_description">Atrás</string>
<string name="fiat_currency_conversion_rate_unavailable">No disponible</string>
<string name="empty_char">-</string>
<string name="zcash_logo_content_description">Logotipo de Zcash</string>
<string name="settings_menu_content_description">Abrir Configuración</string>
<string name="balance_widget_available">Saldo Disponible:</string>
<string name="hide_balances_content_description">Ocultar saldos</string>
<string name="unable_to_open_email">No se pudo iniciar la aplicación de correo electrónico.</string>
<string name="restoring_wallet_label">[Restaurando tu billetera…]</string>
<string name="disconnected_label">[Desconectado…]</string>
<string name="unable_to_open_play_store">No se pudo iniciar la aplicación de Google Play Store…</string>
<string name="server_disconnected_dialog_title">Aviso</string>
<string name="server_disconnected_dialog_message">Tu servidor actual está experimentando dificultades. Verifica la conexión de tu dispositivo y/o navega a Configuración Avanzada para elegir un servidor diferente.</string>
<string name="server_disconnected_dialog_switch_btn">Cambiar Servidor</string>
<string name="server_disconnected_dialog_ignore_btn">Ignorar</string>
<string name="general_etc"></string>
</resources>

View File

@ -1,7 +1,4 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- This is replaced by a resource overlay via app/build.gradle.kts -->
<string name="app_name">zashi-ui</string>
<string name="back_navigation">Back</string> <string name="back_navigation">Back</string>
<string name="back_navigation_content_description">Back</string> <string name="back_navigation_content_description">Back</string>
@ -13,13 +10,11 @@
<string name="hide_balances_content_description">Hide balances</string> <string name="hide_balances_content_description">Hide balances</string>
<!-- This is replaced by a resource overlay via app/build.gradle.kts -->
<string name="support_email_address" />
<string name="unable_to_open_email">Unable to launch email app.</string> <string name="unable_to_open_email">Unable to launch email app.</string>
<string name="restoring_wallet_label">[Restoring Your Wallet…]</string> <string name="restoring_wallet_label">[Restoring Your Wallet…]</string>
<string name="disconnected_label">[Disconnected…]</string> <string name="disconnected_label">[Disconnected…]</string>
<string name="unable_to_open_play_store">Unable to launch Google Play store app…</string> <string name="unable_to_open_play_store">Unable to launch Google Play Store app…</string>
<string name="server_disconnected_dialog_title">Heads up</string> <string name="server_disconnected_dialog_title">Heads up</string>
<string name="server_disconnected_dialog_message">Your current server is experiencing difficulties. Check your <string name="server_disconnected_dialog_message">Your current server is experiencing difficulties. Check your

View File

@ -0,0 +1,11 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="contact_name_label">Nombre de contacto</string>
<string name="contact_name_hint">Ingrese el nombre del contacto…</string>
<string name="contact_address_label">Dirección de billetera</string>
<string name="contact_address_hint">Ingrese la dirección de la billetera…</string>
<string name="contact_name_error_not_unique">Este nombre de contacto ya está en uso. Por favor, elija un nombre diferente.</string>
<string name="contact_name_error_too_long">Este nombre de contacto supera el límite de 32 caracteres. Por favor, acorte el nombre.</string>
<string name="contact_address_error_not_unique">Esta dirección de billetera ya está en su libreta de direcciones.</string>
<string name="contact_address_error_invalid">Dirección inválida</string>
</resources>

View File

@ -0,0 +1,23 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="delete_wallet_title">
Eliminar <xliff:g id="app_name" example="Zashi">%1$s</xliff:g>
</string>
<string name="delete_wallet_text_1">
Por favor, no elimine esta aplicación a menos que esté seguro de comprender los efectos.
</string>
<string name="delete_wallet_text_2">
Eliminar la aplicación <xliff:g id="app_name" example="Zashi">%1$s</xliff:g> eliminará la base de datos y los datos
almacenados en caché. Cualquier fondo que tenga en esta billetera se perderá y solo podrá recuperarse utilizando su frase de
recuperación secreta de <xliff:g id="app_name" example="Zashi">%1$s</xliff:g> en <xliff:g id="app_name"
example="Zashi">%1$s</xliff:g> u otra billetera Zcash.
</string>
<string name="delete_wallet_acknowledge">Entiendo</string>
<string name="delete_wallet_button">
Eliminar <xliff:g id="app_name" example="Zashi">%1$s</xliff:g>
</string>
<string name="delete_wallet_failed">La eliminación de la billetera falló. Inténtelo de nuevo, por favor.</string>
</resources>

View File

@ -0,0 +1,25 @@
<resources>
<string name="exchange_rate_info_title_1">Protección de dirección IP</string>
<string name="exchange_rate_info_subtitle_1">La función de conversión de moneda de Zashi no compromete su dirección IP.</string>
<string name="exchange_rate_info_title_2">Actualización de tasas</string>
<string name="exchange_rate_info_subtitle_2">La tasa se actualiza automáticamente y también se puede actualizar manualmente.</string>
<string name="exchange_rate_unavailable_title">Tasa de cambio no disponible</string>
<string name="exchange_rate_unavailable_subtitle">Lo intentamos, pero no pudimos actualizar la tasa de cambio para usted. Verifique su conexión, reinicie la aplicación e intentaremos de nuevo.</string>
<string name="exchange_rate_opt_in_title">Nueva Función</string>
<string name="exchange_rate_opt_in_subtitle">Conversión de Moneda</string>
<string name="exchange_rate_opt_in_primary_btn">Revisar</string>
<string name="exchange_rate_opt_in_enable">Habilitar</string>
<string name="exchange_rate_opt_in_save">Guardar cambios</string>
<string name="exchange_rate_opt_in_skip">Omitir por ahora</string>
<string name="exchange_rate_opt_in_note">Nota para los más conscientes de la privacidad: Debido a que obtenemos la tasa de conversión de los intercambios, un intercambio podría ver que la tasa de cambio fue consultada antes de que ocurriera una transacción.</string>
<string name="exchange_rate_opt_in_option_title">Habilitar</string>
<string name="exchange_rate_opt_in_option_subtitle">Mostrar la conversión de moneda.</string>
<string name="exchange_rate_opt_out_option_title">Deshabilitar</string>
<string name="exchange_rate_opt_out_option_subtitle">No mostrar la conversión de moneda.</string>
<string name="exchange_rate_opt_in_description">Muestra tu saldo y los montos de pago en USD.\nPuedes gestionar esta función en Configuración Avanzada.</string>
<string name="exchange_rate_opt_in_description_settings">Muestra tu saldo y los montos de pago en USD.\nLa función de conversión de moneda de Zashi protege tu dirección IP en todo momento.</string>
</resources>

View File

@ -0,0 +1,9 @@
<resources>
<string name="export_data_header">Consentimiento para Exportar Datos Privados</string>
<string name="export_data_text_1">Al hacer clic en \"Estoy de acuerdo\" a continuación, das tu consentimiento para exportar los datos privados de Zashi, lo cual incluye todo el historial de la billetera, toda la información privada, los memos, los montos y las direcciones de los destinatarios, incluso para tu actividad protegida.*\n\nEstos datos privados también permiten ver ciertas acciones futuras que realices con Zashi.\n\nCompartir estos datos privados es irrevocable: una vez que hayas compartido estos datos privados con alguien, no hay forma de revocar su acceso.</string>
<string name="export_data_text_2">*Ten en cuenta que estos datos privados no les dan la capacidad de gastar tus fondos, solo la capacidad de ver lo que haces con tus fondos.</string>
<string name="export_data_confirm">Exportar datos privados</string>
<string name="export_data_agree">Estoy de acuerdo</string>
<string name="export_data_export_data_chooser_title">Compartir datos internos de Zashi con:</string>
<string name="export_data_unable_to_share">No se pudo encontrar una aplicación con la cual compartir.</string>
</resources>

View File

@ -0,0 +1,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="home_tab_account">Cuenta</string>
<string name="home_tab_send">Enviar</string>
<string name="home_tab_receive">Recibir</string>
<string name="home_tab_balances">Saldos</string>
</resources>

View File

@ -0,0 +1,11 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="integrations_title">Integraciones</string>
<string name="integrations_coinbase">Compra <xliff:g id="currency" example="ZEC">%1$s</xliff:g> con Coinbase</string>
<string name="integrations_coinbase_subtitle">Una forma sencilla de comprar <xliff:g id="currency" example="ZEC">%1$s</xliff:g> y recibirlo directamente en tu billetera Zashi.</string>
<string name="integrations_version">Versión <xliff:g id="version" example="1.2.1">%1$s</xliff:g></string>
<string name="integrations_disabled_info">Durante el proceso de restauración, no es posible utilizar integraciones de pago.</string>
<string name="integrations_flexa">Paga con Flexa</string>
<string name="integrations_flexa_subtitle">Paga con clips de pago de Flexa y explora una nueva forma de gastar Zcash.</string>
<string name="integrations_flexa_biometric_message">Autentifícate para pagar con Flexa</string>
<string name="integrations_flexa_key_missing">Clave de Flexa faltante</string>
</resources>

View File

@ -2,10 +2,10 @@
<string name="integrations_title">Integrations</string> <string name="integrations_title">Integrations</string>
<string name="integrations_coinbase">Buy <xliff:g id="currency" example="ZEC">%1$s</xliff:g> with Coinbase</string> <string name="integrations_coinbase">Buy <xliff:g id="currency" example="ZEC">%1$s</xliff:g> with Coinbase</string>
<string name="integrations_coinbase_subtitle">A hassle-free way to buy <xliff:g id="currency" example="ZEC">%1$s</xliff:g> and get it directly into your Zashi wallet.</string> <string name="integrations_coinbase_subtitle">A hassle-free way to buy <xliff:g id="currency" example="ZEC">%1$s</xliff:g> and get it directly into your Zashi wallet.</string>
<string name="integrations_flexa">Pay with Flexa</string>
<string name="integrations_flexa_subtitle">Pay with Flexa payment clips and explore a new way of spending Zcash.</string>
<string name="integrations_version">Version <xliff:g id="version" example="1.2.1">%1$s</xliff:g></string> <string name="integrations_version">Version <xliff:g id="version" example="1.2.1">%1$s</xliff:g></string>
<string name="integrations_disabled_info">During the Restore process, it is not possible to use payment integrations.</string> <string name="integrations_disabled_info">During the Restore process, it is not possible to use payment integrations.</string>
<string name="integrations_biometric_message">Authenticate yourself to pay with Flexa</string> <string name="integrations_flexa">Pay with Flexa</string>
<string name="integrations_flexa_subtitle">Pay with Flexa payment clips and explore a new way of spending Zcash.</string>
<string name="integrations_flexa_biometric_message">Authenticate yourself to pay with Flexa</string>
<string name="integrations_flexa_key_missing">Flexa key missing</string> <string name="integrations_flexa_key_missing">Flexa key missing</string>
</resources> </resources>

View File

@ -0,0 +1,9 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="new_wallet_recovery_header">Tu frase secreta de recuperación</string>
<string name="new_wallet_recovery_description">Las siguientes 24 palabras son la clave para tus fondos y constituyen la única forma de recuperarlos si pierdes el acceso o adquieres un nuevo dispositivo. ¡Protege tu ZEC almacenando esta frase en un lugar de confianza y nunca la compartas con nadie!</string>
<string name="new_wallet_recovery_birthday_height" formatted="true">Altura de cumpleaños de la billetera: <xliff:g example="419200" id="birthday_height">%1$d</xliff:g></string>
<string name="new_wallet_recovery_button_finished">Ya la he guardado</string>
<string name="new_wallet_recovery_copy">Toca para copiar</string>
<string name="new_wallet_recovery_seed_clipboard_tag">Frase de Semilla de Zcash</string>
<string name="new_wallet_recovery_birthday_clipboard_tag">Cumpleaños de la Billetera Zcash</string>
</resources>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<resources>
<!-- These are replaced by resource overlaying via app/build.gradle.kts -->
<string translatable="false" name="app_name">zashi-ui</string>
<string translatable="false" name="support_email_address" />
</resources>

View File

@ -0,0 +1,6 @@
<resources>
<string name="onboarding_header">Una billetera sencilla para enviar y recibir Zcash (ZEC)</string>
<string name="onboarding_create_new_wallet">Crear Nueva Billetera</string>
<string name="onboarding_import_existing_wallet">Restaurar Billetera Existente</string>
</resources>

View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="payment_request_title">Solicitud de Pago</string>
<string name="payment_request_close_content_description">Cerrar</string>
<string name="payment_request_requested_by">Solicitado Por</string>
<string name="payment_request_btn_show_address">Mostrar</string>
<string name="payment_request_btn_hide_address">Ocultar</string>
<string name="payment_request_btn_save_contact">Guardar</string>
<string name="payment_request_memo">Para:</string>
<string name="payment_request_fee">Tarifa</string>
<string name="payment_request_total">Total</string>
<string name="payment_request_send_btn">Enviar</string>
<string name="payment_request_dialog_error_title">Transacción Fallida</string>
<string name="payment_request_dialog_error_text">Ocurrió un error y el intento de enviar fondos falló. Inténtelo de nuevo, por favor.</string>
<string name="payment_request_dialog_error_ok_btn">OK</string>
<string name="payment_request_dialog_error_report_btn">Reportar</string>
<string name="payment_request_dialog_error_grpc_title">Error de Conexión</string>
<string name="payment_request_dialog_error_grpc_text">Zashi encontró algunos problemas de conexión al enviar la transacción a la red. Volverá a intentarlo durante los próximos minutos.</string>
<string name="payment_request_dialog_error_grpc_btn">OK</string>
<string name="payment_request_send_failed_report_unable_open_email">No se pudo iniciar la aplicación de correo.</string>
</resources>

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="qr_code_close_content_description">Cerrar</string>
<string name="qr_code_unified_content_description">Código QR de Dirección Unificada</string>
<string name="qr_code_sapling_content_description">Código QR de Dirección Sapling</string>
<string name="qr_code_transparent_content_description">Código QR de Dirección Transparente</string>
<string name="qr_code_wallet_address_shielded">Dirección Protegida de Zcash</string>
<string name="qr_code_wallet_address_sapling">Dirección Sapling de Zcash</string>
<string name="qr_code_wallet_address_transparent">Dirección Transparente de Zcash</string>
<string name="qr_code_privacy_level_shielded">Privacidad Máxima</string>
<string name="qr_code_privacy_level_transparent">Baja Privacidad</string>
<string name="qr_code_share_btn">Compartir Código QR</string>
<string name="qr_code_copy_btn">Copiar Dirección</string>
<string name="qr_code_clipboard_tag">Dirección de Billetera Zcash</string>
<string name="qr_code_data_unable_to_share">No se pudo encontrar una aplicación para compartir el código QR.</string>
<string name="qr_code_share_chooser_title">Mi Dirección ZEC de Zashi</string>
<string name="qr_code_share_chooser_text">Hola, ¡escanea este código QR para enviarme un pago en ZEC! Enlace de descarga:
https://play.google.com/store/apps/details?id=co.electriccoin.zcash</string>
</resources>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="receive_title">Recibir</string>
<string name="receive_header">Recibir Zcash</string>
<string name="receive_prioritize_shielded">Prioriza usar tu dirección protegida para máxima privacidad.</string>
<string name="receive_wallet_address_shielded">Dirección Protegida de Zcash</string>
<string name="receive_wallet_address_sapling">Dirección Sapling de Zcash</string>
<string name="receive_wallet_address_transparent">Dirección Transparente de Zcash</string>
<string name="receive_copy">Copiar</string>
<string name="receive_qr_code">Código QR</string>
<string name="receive_request">Solicitar</string>
<string name="receive_clipboard_tag">Dirección de Billetera Zcash</string>
</resources>

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="request_title">Solicitar</string>
<string name="request_amount_invalid">Este monto de transacción no es válido</string>
<string name="request_amount_btn">Siguiente</string>
<string name="request_memo_btn">Solicitar</string>
<string name="request_qr_share_btn">Compartir Código QR</string>
<string name="request_qr_close_btn">Cerrar</string>
<string name="request_privacy_level_shielded">Máxima Privacidad</string>
<string name="request_privacy_level_transparent">Baja Privacidad</string>
<string name="request_amount_empty">0</string>
<string name="request_amount_keyboard_zero">0</string>
<string name="request_amount_keyboard_one">1</string>
<string name="request_amount_keyboard_two">2</string>
<string name="request_amount_keyboard_three">3</string>
<string name="request_amount_keyboard_four">4</string>
<string name="request_amount_keyboard_five">5</string>
<string name="request_amount_keyboard_six">6</string>
<string name="request_amount_keyboard_seven">7</string>
<string name="request_amount_keyboard_eight">8</string>
<string name="request_amount_keyboard_nine">9</string>
<string name="request_amount_keyboard_delete">Eliminar</string>
<string name="request_memo_payment_request_subtitle">Solicitud de Pago</string>
<string name="request_memo_text_field_hint">¿Para qué es esto?</string>
<string name="request_memo_bytes_counter">
<xliff:g id="typed_bytes" example="12">%1$s</xliff:g>/<xliff:g id="max_bytes" example="512">%2$s</xliff:g>
</string>
<string name="request_qr_code_content_description">Solicitar Código QR</string>
<string name="request_qr_code_data_unable_to_share">No se pudo encontrar una aplicación para compartir el código QR.</string>
<string name="request_qr_code_share_chooser_title">Solicitar ZEC</string>
<string name="request_qr_code_share_chooser_text">Hola, ¡escanea este código QR para enviarme un pago en ZEC! Enlace de descarga:
https://play.google.com/store/apps/details?id=co.electriccoin.zcash</string>
</resources>

View File

@ -0,0 +1,15 @@
<resources>
<string name="restore_button_clear">Borrar Semilla</string>
<string name="restore_title">Ingresa la frase secreta de recuperación</string>
<string name="restore_seed_instructions">Ingresa tu frase de semilla de 24 palabras para restaurar la billetera asociada.</string>
<string name="restore_seed_hint">privacidad dignidad libertad …</string>
<string name="restore_seed_button_next">Siguiente</string>
<string name="restore_seed_warning_suggestions">Esta palabra no está en el diccionario de frases semilla. Por favor, selecciona la correcta de las sugerencias.</string>
<string name="restore_seed_warning_no_suggestions">Esta palabra no está en el diccionario de frases semilla.</string>
<string name="restore_birthday_header">Altura de cumpleaños de la billetera</string>
<string name="restore_birthday_sub_header">(opcional)</string>
<string name="restore_birthday_button_restore">Restaurar</string>
</resources>

View File

@ -0,0 +1,9 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="restore_success_title">¡Mantén Zashi abierto!</string>
<string name="restore_success_subtitle">Tu billetera ha sido restaurada con éxito y ahora se está sincronizando</string>
<string name="restore_success_description">Para evitar interrupciones, mantén la pantalla encendida, conecta tu dispositivo a una fuente de energía y guárdalo en un lugar seguro.</string>
<string name="restoring_initial_dialog_checkbox">Mantener la pantalla encendida mientras se restaura.</string>
<string name="restore_success_note_part_1">Nota:</string>
<string name="restore_success_note_part_2">Durante la sincronización inicial, tus fondos no se pueden enviar ni gastar. Dependiendo de la antigüedad de tu billetera, la sincronización completa puede tomar algunas horas.</string>
<string name="restore_success_button">¡Entendido!</string>
</resources>

View File

@ -0,0 +1,14 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="scan_preview_content_description">Cámara</string>
<string name="scan_cancel_button">Cancelar</string>
<string name="scan_settings_button">Abrir Configuración</string>
<string name="scan_settings_open_failed">No se pudo iniciar la aplicación de Configuración.</string>
<string name="scan_state_permission">La cámara no está autorizada. Por favor, ve a la configuración del sistema de Zashi y actívala.</string>
<string name="scan_state_failed">Falló la inicialización de la cámara. Inténtalo de nuevo, por favor.</string>
<string name="scan_address_validation_failed">Este código QR no es una dirección válida de Zcash.</string>
<string name="scan_torch_content_description">Alternar linterna de la cámara</string>
<string name="gallery_content_description">Galería</string>
</resources>

View File

@ -0,0 +1,10 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="security_warning_header">Advertencia de seguridad:</string>
<string name="security_warning_text" formatted="true">Zashi <xliff:g example="0.2.0" id="version_name">%1$s</xliff:g> es una billetera exclusiva para Zcash, con protección de privacidad — creada por Zcashers para Zcashers. Zashi ha sido diseñada para tu privacidad y seguridad. Al instalar y usar Zashi, aceptas compartir informes de fallos con Electric Coin Co. (el desarrollador de la billetera), lo que nos ayudará a mejorar la experiencia del usuario de Zashi.*\n\nPor favor, confirma y acepta a continuación para continuar.</string>
<string name="security_warning_text_footnote_part_1">*Nota:</string>
<string name="security_warning_text_footnote_part_2">\u0020Los informes de fallos podrían revelar la fecha y hora del fallo y los eventos que ocurrieron, pero no revelarían las claves de gasto o de visualización.</string>
<string name="security_warning_confirm">Confirmar</string>
<string name="security_warning_acknowledge">Acepto</string>
</resources>

View File

@ -0,0 +1,9 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="seed_recovery_header">Tu frase secreta de recuperación</string>
<string name="seed_recovery_description">Las siguientes 24 palabras son la clave para tus fondos y constituyen la única forma de recuperarlos si pierdes el acceso o adquieres un nuevo dispositivo. ¡Protege tu ZEC almacenando esta frase en un lugar de confianza y nunca la compartas con nadie!</string>
<string name="seed_recovery_birthday_height" formatted="true">Altura de cumpleaños de la billetera: <xliff:g example="419200" id="birthday_height">%1$d</xliff:g></string>
<string name="seed_recovery_button_finished">¡Entendido!</string>
<string name="seed_recovery_copy">Toca para copiar</string>
<string name="seed_recovery_seed_clipboard_tag">Frase de Semilla de Zcash</string>
<string name="seed_recovery_birthday_clipboard_tag">Cumpleaños de la Billetera Zcash</string>
</resources>

View File

@ -0,0 +1,29 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="send_stage_send_title">Enviar</string>
<string name="send_scan_content_description">Escanear</string>
<string name="send_address_label">Enviar a</string>
<string name="send_address_hint">Dirección de Zcash</string>
<string name="send_address_invalid">Dirección no válida</string>
<string name="send_amount_label">Monto</string>
<string name="send_amount_hint"><xliff:g id="currency" example="ZEC">%1$s</xliff:g></string>
<string name="send_usd_amount_hint">USD</string>
<string name="send_amount_insufficient_balance">Fondos insuficientes</string>
<string name="send_amount_invalid">Monto no válido</string>
<string name="send_memo_label">Mensaje</string>
<string name="send_memo_hint">Escribe un mensaje cifrado aquí…</string>
<string name="send_memo_bytes_counter">
<xliff:g id="typed_bytes" example="12">%1$s</xliff:g>/<xliff:g id="max_bytes" example="512">%2$s</xliff:g>
</string>
<string name="send_create">Revisar</string>
<string name="send_fee">(Tarifa típica &lt; <xliff:g id="fee_amount" example="0.001">%1$s</xliff:g>)</string>
<string name="send_dialog_error_title">Error al enviar fondos</string>
<string name="send_dialog_error_text">Error: El intento de enviar fondos falló. Inténtelo de nuevo, por favor.</string>
<string name="send_dialog_error_btn">OK</string>
<string name="send_abbreviated_address_format" formatted="true"><xliff:g id="first_five" example="zs1g7">%1$s</xliff:g><xliff:g id="last_five" example="mvyzg">%2$s</xliff:g></string>
<string name="send_transparent_memo">Las transacciones transparentes no pueden tener mensajes</string>
<string name="send_address_book_hint">Agrega un contacto tocando el ícono de la libreta de direcciones.</string>
</resources>

View File

@ -0,0 +1,46 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="send_stage_confirmation_title">Confirmación</string>
<string name="send_confirmation_amount">Monto Total</string>
<string name="send_confirmation_address">Enviando a</string>
<string name="send_confirmation_memo">Mensaje</string>
<string name="send_confirmation_fee">Tarifa</string>
<string name="send_confirmation_amount_item">Monto</string>
<string name="send_confirmation_send_button">Enviar</string>
<string name="send_confirmation_back_button">Cancelar</string>
<string name="send_confirmation_dialog_error_title">Transacción Fallida</string>
<string name="send_confirmation_dialog_error_text">Ocurrió un error y el intento de enviar fondos falló. Inténtelo de nuevo, por favor.</string>
<string name="send_confirmation_dialog_error_ok_btn">OK</string>
<string name="send_confirmation_dialog_error_report_btn">Reportar</string>
<string name="send_confirmation_dialog_error_grpc_title">Error de Conexión</string>
<string name="send_confirmation_dialog_error_grpc_text">Zashi encontró algunos problemas de conexión al enviar la transacción a la red. Volverá a intentarlo durante los próximos minutos.</string>
<string name="send_confirmation_dialog_error_grpc_btn">OK</string>
<string name="send_confirmation_multiple_error_title">Error de Transacción</string>
<string name="send_confirmation_multiple_error_text_1">Enviar a este destinatario requirió múltiples transacciones, pero solo algunas de ellas se completaron con éxito. Tus fondos están seguros, pero deben recuperarse con la ayuda del soporte del equipo de Zashi.</string>
<string name="send_confirmation_multiple_error_text_2">Por favor, usa el botón de abajo para contactarnos y recuperar tus fondos. Tu mensaje para nosotros estará pre-rellenado con todos los datos necesarios para resolver este problema.</string>
<string name="send_confirmation_multiple_error_trx_title">IDs DE TRANSACCIÓN:</string>
<string name="send_confirmation_multiple_error_trx_item" formatted="true">
<xliff:g id="order" example="1">%1$d. </xliff:g>ID:
</string>
<string name="send_confirmation_multiple_error_btn">Contactar Soporte</string>
<string name="send_confirmation_multiple_report_text">Hola, equipo de Zashi.\n\nAl enviar una transacción a una dirección TEX, encontré un estado de error. Me pongo en contacto para recibir orientación sobre cómo recuperar mis fondos.\n\nGracias.</string>
<string name="send_confirmation_multiple_report_statuses" formatted="true">Estados de la transacción:</string>
<string name="send_confirmation_multiple_report_status_success">
<xliff:g example="1" id="index">%1$d</xliff:g>: Éxito
</string>
<string name="send_confirmation_multiple_report_status_not_attempt" formatted="true">
<xliff:g example="2" id="index">%1$d</xliff:g>: Sin intentar
</string>
<string name="send_confirmation_multiple_report_status_failure" formatted="true">
<xliff:g example="3" id="index">%1$d</xliff:g>: Fallo:
gRPC: <xliff:g example="true" id="grpc">%2$s</xliff:g>,
código: <xliff:g example="123" id="code">%3$d</xliff:g>,
descripción: <xliff:g example="Network unreachable" id="desc">%4$s</xliff:g>
</string>
<string name="send_confirmation_multiple_report_unable_open_email">No se pudo iniciar la aplicación de correo.</string>
</resources>

View File

@ -0,0 +1,15 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="settings_title">Configuración</string>
<string name="settings_advanced_settings">Configuración Avanzada</string>
<string name="settings_integrations">Integraciones</string>
<string name="settings_about_us">Acerca de Nosotros</string>
<string name="settings_feedback">Envíanos tus Comentarios</string>
<string name="settings_version">Versión <xliff:g example="1" id="version">%s</xliff:g></string>
<string name="settings_address_book">Libreta de Direcciones</string>
<string name="settings_troubleshooting_menu_content_description">Configuraciones adicionales</string>
<string name="settings_troubleshooting_rescan">Reescanear blockchain</string>
<string name="settings_troubleshooting_enable_background_sync">Sincronización en segundo plano</string>
<string name="settings_troubleshooting_enable_keep_screen_on">Mantener pantalla encendida durante la sincronización</string>
<string name="settings_troubleshooting_enable_analytics">Reportar fallos</string>
</resources>

View File

@ -0,0 +1,11 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="support_header">Soporte</string>
<string name="support_hint">¿Cómo podemos ayudarte?</string>
<string name="support_send">Enviar</string>
<string name="support_confirmation_dialog_ok">OK</string>
<string name="support_confirmation_dialog_cancel">Cancelar</string>
<string name="support_confirmation_dialog_title">Abrir aplicación de correo electrónico</string>
<string name="support_confirmation_explanation"><xliff:g id="app_name" example="Zcash">%1$s</xliff:g> está a punto de abrir tu aplicación de correo electrónico con un mensaje pre-rellenado.\n\nAsegúrate de presionar enviar dentro de tu aplicación de correo.</string>
<string name="support_information">Por favor, háznos saber sobre cualquier problema que hayas tenido, o funciones que te gustaría ver en el futuro.</string>
</resources>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="update_header">Actualización disponible</string>
<string name="update_critical_header">Actualización requerida</string>
<string name="update_title_available"><xliff:g id="app_name" example="Zashi">%1$s</xliff:g> aquí.</string>
<string name="update_title_required">No eres tú, soy yo.</string>
<string name="update_description_required">
Hay una actualización requerida para <xliff:g id="app_name" example="Zashi">%1$s</xliff:g> que realiza importantes mejoras en el rendimiento y/o la seguridad.
</string>
<string name="update_description_available">
Hay una nueva versión de <xliff:g id="app_name" example="Zashi">%1$s</xliff:g> que realiza actualizaciones menores para mejorar el rendimiento y/o la seguridad.\n\nPor favor, toma un momento para actualizar a la última versión.
</string>
<string name="update_link_text">Obtén más información sobre esta actualización aquí.</string>
<string name="update_download_button">Actualizar</string>
<string name="update_later_enabled_button">Recordarme más tarde</string>
<string name="update_later_disabled_button">(requerido)</string>
</resources>

View File

@ -0,0 +1,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="update_contact_title">Contacto Guardado</string>
<string name="update_contact_primary_btn">Guardar</string>
<string name="update_contact_secondary_btn">Eliminar</string>
</resources>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="not_enough_space_title">No hay suficiente espacio libre</string>
<string name="not_enough_space_description_1">
<xliff:g id="app_name" example="Zashi">%1$s</xliff:g> requiere al menos
<xliff:g example="1" id="required_gigabytes">%2$d</xliff:g> GB de espacio para funcionar, pero solo hay
<xliff:g example="300" id="available_megabytes">%3$d</xliff:g> MB disponibles.
</string>
<string name="not_enough_space_description_2">
Ve a la configuración de tu dispositivo y libera más espacio si deseas usar la aplicación
<xliff:g id="app_name" example="Zashi">%1$s</xliff:g>.
</string>
<string name="not_enough_space_system_settings_btn">Configuración del sistema</string>
<string name="not_enough_space_settings_open_failed">No se pudo iniciar la aplicación de Configuración.</string>
</resources>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="whats_new_title">Novedades</string>
<string name="whats_new_version">Versión de Zashi <xliff:g example="1" id="version">%s</xliff:g></string>
</resources>

View File

@ -146,6 +146,14 @@ class ScreenshotTest : UiTestPrerequisites() {
} }
} }
@Test
@LargeTest
fun takeScreenshotsForRestoreWalletLightEsSP() {
runWith(UiMode.Light, "es-SP") { context, tag ->
takeScreenshotsForRestoreWallet(context, tag)
}
}
// Dark mode was introduced in Android Q // Dark mode was introduced in Android Q
@Test @Test
@LargeTest @LargeTest
@ -155,6 +163,14 @@ class ScreenshotTest : UiTestPrerequisites() {
} }
} }
@Test
@LargeTest
fun takeScreenshotsForRestoreWalletDarkEsSP() {
runWith(UiMode.Dark, "es-SP") { context, tag ->
takeScreenshotsForRestoreWallet(context, tag)
}
}
@OptIn(ExperimentalTestApi::class) @OptIn(ExperimentalTestApi::class)
@Suppress("LongMethod", "CyclomaticComplexMethod") @Suppress("LongMethod", "CyclomaticComplexMethod")
private fun takeScreenshotsForRestoreWallet( private fun takeScreenshotsForRestoreWallet(
@ -185,6 +201,12 @@ class ScreenshotTest : UiTestPrerequisites() {
it.performClick() it.performClick()
} }
// To ensure that the new screen is available, or wait until it is
composeTestRule.waitUntilAtLeastOneExists(
hasText(resContext.getString(R.string.restore_title)),
DEFAULT_TIMEOUT_MILLISECONDS
)
composeTestRule.onNodeWithText(resContext.getString(R.string.restore_title)).also { composeTestRule.onNodeWithText(resContext.getString(R.string.restore_title)).also {
it.assertExists() it.assertExists()
} }
@ -265,6 +287,14 @@ class ScreenshotTest : UiTestPrerequisites() {
} }
} }
@Test
@LargeTest
fun takeScreenshotsForNewWalletAndRestOfAppLightEsSP() {
runWith(UiMode.Light, "es-SP") { context, tag ->
takeScreenshotsForNewWalletAndRestOfApp(context, tag)
}
}
// Dark mode was introduced in Android Q // Dark mode was introduced in Android Q
@Test @Test
@LargeTest @LargeTest
@ -275,6 +305,16 @@ class ScreenshotTest : UiTestPrerequisites() {
} }
} }
@Test
@LargeTest
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
fun takeScreenshotsForNewWalletAndRestOfAppDarkEsSP() {
runWith(UiMode.Dark, "es-SP") { context, tag ->
takeScreenshotsForNewWalletAndRestOfApp(context, tag)
}
}
@OptIn(ExperimentalTestApi::class)
private fun takeScreenshotsForNewWalletAndRestOfApp( private fun takeScreenshotsForNewWalletAndRestOfApp(
resContext: Context, resContext: Context,
tag: String tag: String
@ -289,6 +329,9 @@ class ScreenshotTest : UiTestPrerequisites() {
onboardingScreenshots(resContext, tag, composeTestRule) onboardingScreenshots(resContext, tag, composeTestRule)
recoveryScreenshots(resContext, tag, composeTestRule) recoveryScreenshots(resContext, tag, composeTestRule)
// To ensure that the bottom tab is available, or wait until it is
composeTestRule.waitUntilAtLeastOneExists(hasTestTag(HomeTag.TAB_ACCOUNT), DEFAULT_TIMEOUT_MILLISECONDS)
composeTestRule.navigateInHomeTab(HomeTag.TAB_ACCOUNT) composeTestRule.navigateInHomeTab(HomeTag.TAB_ACCOUNT)
accountScreenshots(tag, composeTestRule) accountScreenshots(tag, composeTestRule)