diff --git a/app/src/main/java/app/terraplanet/terraplanet/BaseApplication.kt b/app/src/main/java/app/terraplanet/terraplanet/BaseApplication.kt index a7b6e57..dd66bed 100644 --- a/app/src/main/java/app/terraplanet/terraplanet/BaseApplication.kt +++ b/app/src/main/java/app/terraplanet/terraplanet/BaseApplication.kt @@ -42,8 +42,8 @@ class BaseApplication : Application() { } } - fun startServer(auth: Auth, status: (String) -> Unit, result: (Boolean) -> Unit) { - status("Server starting...") + fun startServer(auth: Auth, status: (Int) -> Unit, result: (Boolean) -> Unit) { + status(R.string.server_status_starting) ioThread = Thread { val nodeDir = applicationContext.filesDir.absolutePath + "/nodejs-project" val nodeDirReference = File(nodeDir) @@ -51,7 +51,7 @@ class BaseApplication : Application() { AppUtil.deleteFolderRecursively(File(nodeDir)) } AppUtil.copyAssetFolder(applicationContext.assets, "nodejs-project", nodeDir) - uiThread.post { status("Server connecting...") } + uiThread.post { status(R.string.server_status_connecting) } try { startNodeWithArguments( arrayOf("node", "$nodeDir/bin/www", auth.username, auth.password) @@ -74,25 +74,25 @@ class BaseApplication : Application() { .observeOn(AndroidSchedulers.mainThread()) .subscribe({ disposable?.dispose() - status("Server connected") + status(R.string.server_status_connected) result(ping) }, { disposable?.dispose() - status("Server error") + status(R.string.server_status_error) result(ping) Log.e(LOG_E, "${it.message}") }) } - fun checkServerStatus(status: (String) -> Unit, result: (Boolean) -> Unit) { + fun checkServerStatus(status: (Int) -> Unit, result: (Boolean) -> Unit) { val auth = Storage.getAuth() var value: Boolean - status("Server status...") + status(R.string.server_status) api.getStatus() .observeOn(AndroidSchedulers.mainThread()) .subscribe({ data -> value = data.status == OK - if (value) status("Server running...") + if (value) status(R.string.server_status_running) result(value) }, { value = false diff --git a/app/src/main/java/app/terraplanet/terraplanet/MainActivity.kt b/app/src/main/java/app/terraplanet/terraplanet/MainActivity.kt index 403df25..7a5b37d 100644 --- a/app/src/main/java/app/terraplanet/terraplanet/MainActivity.kt +++ b/app/src/main/java/app/terraplanet/terraplanet/MainActivity.kt @@ -6,6 +6,7 @@ import android.os.Build import android.os.Bundle import androidx.activity.compose.setContent import androidx.annotation.RequiresApi +import androidx.annotation.StringRes import androidx.biometric.BiometricPrompt import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Column @@ -19,6 +20,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.fragment.app.FragmentActivity @@ -35,10 +37,10 @@ import app.terraplanet.terraplanet.util.bitmapDrawable import app.terraplanet.terraplanet.viewmodel.State import com.google.accompanist.systemuicontroller.rememberSystemUiController -data class LoginState(val state: State, val status: String, val loading: Boolean) +data class LoginState(val state: State, @StringRes val statusResId: Int, val loading: Boolean) class MainActivity : FragmentActivity() { - var status = mutableStateOf(LoginState(State.LOADING, "Server status...", true)) + var status = mutableStateOf(LoginState(State.LOADING, R.string.server_status, true)) val app by lazy { (applicationContext as BaseApplication) } val api = APIServiceImpl() @@ -69,7 +71,7 @@ class MainActivity : FragmentActivity() { goToInitScreen() } } else { - status.value = LoginState(State.FAILED, "Server failed. Close the app and try again", false) + status.value = LoginState(State.FAILED, R.string.server_status_failed, false) } }) } @@ -96,18 +98,18 @@ class MainActivity : FragmentActivity() { object : BiometricPrompt.AuthenticationCallback() { override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) { super.onAuthenticationSucceeded(result) - status.value = LoginState(State.SUCCESS, "Auth Successful", false) + status.value = LoginState(State.SUCCESS, R.string.biometrics_successful, false) goToHomeScreen() } override fun onAuthenticationError(errorCode: Int, errString: CharSequence) { super.onAuthenticationError(errorCode, errString) - status.value = LoginState(State.CANCELLED, "Auth Canceled", false) + status.value = LoginState(State.CANCELLED, R.string.biometrics_canceled, false) } override fun onAuthenticationFailed() { super.onAuthenticationFailed() - status.value = LoginState(State.CANCELLED, "Error. Try Again", false) + status.value = LoginState(State.CANCELLED, R.string.biometrics_error, false) } } @@ -115,16 +117,16 @@ class MainActivity : FragmentActivity() { private fun launchBiometric(context: Context, authenticationCallback: BiometricPrompt.AuthenticationCallback) { if (checkBiometricSupport(context)) { val biometricPromptInfo = BiometricPrompt.PromptInfo.Builder() - .setTitle("Terra Planet") - .setDescription("Authenticate with Biometrics") - .setNegativeButtonText("Cancel") + .setTitle(getString(R.string.app_name)) + .setDescription(getString(R.string.biometrics_authenticate)) + .setNegativeButtonText(getString(R.string.biometrics_cancel)) .setConfirmationRequired(true) .build() val biometricPrompt = BiometricPrompt(this, mainExecutor, authenticationCallback) biometricPrompt.authenticate(biometricPromptInfo) } else { - status.value = LoginState(State.SUCCESS, "Auth Successful", false) + status.value = LoginState(State.SUCCESS, R.string.biometrics_successful, false) goToHomeScreen() } } @@ -166,7 +168,7 @@ private fun LoadingScreen(state: LoginState, onBiometrics: () -> Unit) { } } VSpacer(20) - Text(state.status, color = Color.White, textAlign = TextAlign.Center) + Text(stringResource(state.statusResId), color = Color.White, textAlign = TextAlign.Center) VSpacer(50) } } diff --git a/app/src/main/java/app/terraplanet/terraplanet/nav/Screen.kt b/app/src/main/java/app/terraplanet/terraplanet/nav/Screen.kt index c425ea4..edc1151 100644 --- a/app/src/main/java/app/terraplanet/terraplanet/nav/Screen.kt +++ b/app/src/main/java/app/terraplanet/terraplanet/nav/Screen.kt @@ -1,9 +1,11 @@ package app.terraplanet.terraplanet.nav +import androidx.annotation.DrawableRes +import androidx.annotation.StringRes import app.terraplanet.terraplanet.R -sealed class Screen(val title: String, val icon: Int, val route: String) { - object Wallet : Screen("Wallet", icon = R.drawable.tab_wallet, route = "wallet_tab") - object Transactions : Screen("Transactions", icon = R.drawable.tab_transactions, route = "transactions_tab") - object Settings : Screen("Settings", icon = R.drawable.tab_settings, route = "settings_tab") +sealed class Screen(@StringRes val title: Int, @DrawableRes val icon: Int, val route: String) { + object Wallet : Screen(R.string.bottom_navigation_wallet, icon = R.drawable.tab_wallet, route = "wallet_tab") + object Transactions : Screen(R.string.bottom_navigation_transactions, icon = R.drawable.tab_transactions, route = "transactions_tab") + object Settings : Screen(R.string.bottom_navigation_settings, icon = R.drawable.tab_settings, route = "settings_tab") } \ No newline at end of file diff --git a/app/src/main/java/app/terraplanet/terraplanet/screen/CameraActivity.kt b/app/src/main/java/app/terraplanet/terraplanet/screen/CameraActivity.kt index ef0a1ff..9b1469a 100644 --- a/app/src/main/java/app/terraplanet/terraplanet/screen/CameraActivity.kt +++ b/app/src/main/java/app/terraplanet/terraplanet/screen/CameraActivity.kt @@ -33,6 +33,7 @@ import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.layout.onSizeChanged import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalLifecycleOwner +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.IntSize @@ -40,6 +41,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.viewinterop.AndroidView import androidx.core.content.ContextCompat +import app.terraplanet.terraplanet.R import app.terraplanet.terraplanet.ui.theme.TerraPlanetTheme import app.terraplanet.terraplanet.ui.util.Center import app.terraplanet.terraplanet.ui.util.Expandable @@ -157,7 +159,7 @@ fun CameraScreen(onResult: (String) -> Unit) { ) {} VSpacer(20) Text( - text = "Scan a Terra address QR Code", + stringResource(R.string.camera_qr_scan), textAlign = TextAlign.Center, color = Color.White, fontSize = 18.sp, diff --git a/app/src/main/java/app/terraplanet/terraplanet/screen/HomeActivity.kt b/app/src/main/java/app/terraplanet/terraplanet/screen/HomeActivity.kt index 0733418..0f7b737 100644 --- a/app/src/main/java/app/terraplanet/terraplanet/screen/HomeActivity.kt +++ b/app/src/main/java/app/terraplanet/terraplanet/screen/HomeActivity.kt @@ -11,15 +11,19 @@ import androidx.compose.material.* import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.sp import androidx.fragment.app.FragmentActivity import androidx.navigation.NavController import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController +import app.terraplanet.terraplanet.R import app.terraplanet.terraplanet.nav.Screen import app.terraplanet.terraplanet.nav.SetupNavGraph import app.terraplanet.terraplanet.network.APIServiceImpl -import app.terraplanet.terraplanet.ui.theme.* +import app.terraplanet.terraplanet.ui.theme.TerraPlanetTheme +import app.terraplanet.terraplanet.ui.theme.bgColor +import app.terraplanet.terraplanet.ui.theme.bottomNavBgColor import app.terraplanet.terraplanet.util.Biometrics import com.google.accompanist.systemuicontroller.rememberSystemUiController @@ -52,15 +56,15 @@ class HomeActivity : FragmentActivity() { @RequiresApi(Build.VERSION_CODES.Q) fun launchBiometric( context: Context, - description: String = "Authenticate with Biometrics", + description: String, authenticationCallback: BiometricPrompt.AuthenticationCallback, unsupportedCallback: () -> Unit ) { if (Biometrics.checkBiometricSupport(context)) { val biometricPromptInfo = BiometricPrompt.PromptInfo.Builder() - .setTitle("Terra Planet") + .setTitle(getString(R.string.app_name)) .setDescription(description) - .setNegativeButtonText("Cancel") + .setNegativeButtonText(getString(R.string.biometrics_cancel)) .setConfirmationRequired(true) .build() @@ -109,8 +113,8 @@ private fun BottomNavigation(navController: NavController) { tabs.forEach { tab -> BottomNavigationItem( - icon = { Icon(painter = painterResource(id = tab.icon), tab.title) }, - label = { Text(tab.title, fontSize = 12.sp) }, + icon = { Icon(painter = painterResource(id = tab.icon), stringResource(tab.title)) }, + label = { Text(text = stringResource(tab.title), fontSize = 12.sp) }, selected = currentRoute == tab.route, onClick = { navController.navigate(tab.route) { diff --git a/app/src/main/java/app/terraplanet/terraplanet/screen/ImportWalletActivity.kt b/app/src/main/java/app/terraplanet/terraplanet/screen/ImportWalletActivity.kt index 0769a9e..bd15ecc 100644 --- a/app/src/main/java/app/terraplanet/terraplanet/screen/ImportWalletActivity.kt +++ b/app/src/main/java/app/terraplanet/terraplanet/screen/ImportWalletActivity.kt @@ -15,9 +15,11 @@ import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalFocusManager +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import app.terraplanet.terraplanet.R import app.terraplanet.terraplanet.network.APIServiceImpl import app.terraplanet.terraplanet.ui.theme.MainColor import app.terraplanet.terraplanet.ui.theme.TerraPlanetTheme @@ -82,7 +84,7 @@ private fun ImportWallet(loading: Boolean, onContinue: (String) -> Unit) { ) { VSpacer(30) Text( - "Import Wallet", + stringResource(R.string.import_wallet_import_wallet), fontSize = 40.sp, fontWeight = FontWeight.Bold, ) @@ -91,7 +93,7 @@ private fun ImportWallet(loading: Boolean, onContinue: (String) -> Unit) { modifier = Modifier.fillMaxWidth() ) { Text( - "Seed Phrase:", + stringResource(R.string.import_wallet_seed_phrase), fontSize = 18.sp, fontWeight = FontWeight.Bold ) @@ -118,7 +120,7 @@ private fun ImportWallet(loading: Boolean, onContinue: (String) -> Unit) { ) ) { Text( - text = "CONTINUE", + stringResource(R.string.import_wallet_continue), color = MainColor, fontWeight = FontWeight.Bold, ) diff --git a/app/src/main/java/app/terraplanet/terraplanet/screen/InitActivity.kt b/app/src/main/java/app/terraplanet/terraplanet/screen/InitActivity.kt index 8de8526..8a2229c 100644 --- a/app/src/main/java/app/terraplanet/terraplanet/screen/InitActivity.kt +++ b/app/src/main/java/app/terraplanet/terraplanet/screen/InitActivity.kt @@ -13,6 +13,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp @@ -79,7 +80,7 @@ private fun InitScreen(onWallet: () -> Unit, onImport: () -> Unit) { ) VSpacer(30) Text( - text = "The open source non-custodial Terra Wallet.", + stringResource(R.string.init_app_description), color = Color.White, fontSize = 18.sp, textAlign = TextAlign.Center, @@ -93,7 +94,7 @@ private fun InitScreen(onWallet: () -> Unit, onImport: () -> Unit) { shape = RoundedCornerShape(25) ) { Text( - text = "CREATE NEW WALLET", + stringResource(R.string.init_create_wallet), color = MainColor, fontWeight = FontWeight.Bold, ) @@ -110,7 +111,7 @@ private fun InitScreen(onWallet: () -> Unit, onImport: () -> Unit) { ) ) { Text( - text = "IMPORT WALLET", + stringResource(R.string.init_import_wallet), color = Color.White, fontWeight = FontWeight.Bold, ) diff --git a/app/src/main/java/app/terraplanet/terraplanet/screen/InitWalletActivity.kt b/app/src/main/java/app/terraplanet/terraplanet/screen/InitWalletActivity.kt index 8bd155e..c7d38a3 100644 --- a/app/src/main/java/app/terraplanet/terraplanet/screen/InitWalletActivity.kt +++ b/app/src/main/java/app/terraplanet/terraplanet/screen/InitWalletActivity.kt @@ -13,10 +13,12 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import app.terraplanet.terraplanet.R import app.terraplanet.terraplanet.model.Wallet import app.terraplanet.terraplanet.network.APIServiceImpl import app.terraplanet.terraplanet.network.APIServiceImpl.Companion.LOG_E @@ -86,7 +88,7 @@ private fun YourWallet(loading: Boolean, wallet: Wallet?, onContinue: () -> Unit ) { VSpacer(30) Text( - "Your Wallet", + stringResource(R.string.init_wallet_your_wallet), fontSize = 40.sp, fontWeight = FontWeight.Bold, ) @@ -95,7 +97,7 @@ private fun YourWallet(loading: Boolean, wallet: Wallet?, onContinue: () -> Unit modifier = Modifier.fillMaxWidth() ) { Text( - "Address:", + stringResource(R.string.init_wallet_address), fontSize = 18.sp, fontWeight = FontWeight.Bold ) @@ -120,7 +122,7 @@ private fun YourWallet(loading: Boolean, wallet: Wallet?, onContinue: () -> Unit modifier = Modifier.fillMaxWidth() ) { Text( - "Seed Phrase:", + stringResource(R.string.init_wallet_seed_phrase), fontSize = 18.sp, fontWeight = FontWeight.Bold ) @@ -139,9 +141,7 @@ private fun YourWallet(loading: Boolean, wallet: Wallet?, onContinue: () -> Unit ) } VSpacer(10) - Text( - "Please store your seed phrase securely. We would not be able to recover your wallet if you lose it. We suggest copying it on paper.", - ) + Text(stringResource(R.string.init_wallet_description)) Expandable() Button( onClick = { onContinue() }, @@ -154,7 +154,7 @@ private fun YourWallet(loading: Boolean, wallet: Wallet?, onContinue: () -> Unit ) ) { Text( - text = "CONTINUE", + stringResource(R.string.init_wallet_continue), color = MainColor, fontWeight = FontWeight.Bold, ) diff --git a/app/src/main/java/app/terraplanet/terraplanet/screen/modal/EarnModal.kt b/app/src/main/java/app/terraplanet/terraplanet/screen/modal/EarnModal.kt index cc35360..9c2ba8c 100644 --- a/app/src/main/java/app/terraplanet/terraplanet/screen/modal/EarnModal.kt +++ b/app/src/main/java/app/terraplanet/terraplanet/screen/modal/EarnModal.kt @@ -2,6 +2,7 @@ package app.terraplanet.terraplanet.screen.modal import android.os.Build import androidx.activity.compose.BackHandler +import androidx.annotation.StringRes import androidx.compose.foundation.* import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape @@ -20,12 +21,14 @@ import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalFocusManager +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import app.terraplanet.terraplanet.R import app.terraplanet.terraplanet.model.Coin import app.terraplanet.terraplanet.screen.HomeActivity import app.terraplanet.terraplanet.ui.theme.MainBlue @@ -36,9 +39,9 @@ import app.terraplanet.terraplanet.ui.util.* import app.terraplanet.terraplanet.util.bitmapDrawable import app.terraplanet.terraplanet.util.roundDecimal -enum class EarnTab { - Deposit, - Withdraw +enum class EarnTab(@StringRes val resId: Int) { + Deposit(R.string.earn_deposit), + Withdraw(R.string.earn_withdraw) } @Composable @@ -52,8 +55,8 @@ fun EarnModal( modal: ModalTransitionDialogHelper ) { val scrollState = rememberScrollState() - val earnSegment = remember { listOf(EarnTab.Deposit.name, EarnTab.Withdraw.name) } - var selectedSegment by remember { mutableStateOf(if (isDeposit) EarnTab.Deposit.name else EarnTab.Withdraw.name) } + val earnSegment = remember { listOf(EarnTab.Deposit, EarnTab.Withdraw) } + var selectedSegment by remember { mutableStateOf(if (isDeposit) EarnTab.Deposit else EarnTab.Withdraw) } var deposit by remember { mutableStateOf(isDeposit) } val ust by remember { mutableStateOf(coin) } @@ -86,30 +89,36 @@ fun EarnModal( ) } } - Text("Earn", fontSize = 40.sp, fontWeight = FontWeight.Bold) + Text(stringResource(R.string.earn_title), fontSize = 40.sp, fontWeight = FontWeight.Bold) VSpacer(30) SegmentedControl( segments = earnSegment, selectedSegment = selectedSegment, onSegmentSelected = { selectedSegment = it - deposit = selectedSegment == EarnTab.Deposit.name + deposit = selectedSegment == EarnTab.Deposit amount = 0.0 } ) { - SegmentText(it) + SegmentText(stringResource(it.resId)) } VSpacer(30) Row { - Text("Amount:", fontSize = 18.sp, fontWeight = FontWeight.Bold) + Text(stringResource(R.string.earn_amount), fontSize = 18.sp, fontWeight = FontWeight.Bold) Expandable() Text( - "Balance: ${if (deposit) coin.amount.roundDecimal(4) else earn.roundDecimal(4)}", + stringResource( + R.string.earn_balance, + if (deposit) + coin.amount.roundDecimal(4) + else + earn.roundDecimal(4) + ), fontSize = 18.sp ) HSpacer(10) Text( - text = "Max.", + stringResource(R.string.earn_max), fontSize = 18.sp, color = MainBlue, modifier = Modifier.clickable { @@ -158,7 +167,9 @@ fun EarnModal( if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { context.launchBiometric( context, - "Authenticate to ${if (deposit) "deposit" else "withdraw"}", + context.getString( + if (deposit) R.string.earn_deposit_authenticate else R.string.earn_withdraw_authenticate + ), context.authenticationCallback(onSuccess = { onSubmit(amount, deposit) }), unsupportedCallback = { @@ -174,7 +185,7 @@ fun EarnModal( enabled = if (deposit) amount >= 1.0 else amount >= 0.5 && coin.amount >= 0.5 ) { Text( - text = selectedSegment.uppercase(), + stringResource(selectedSegment.resId).uppercase(), color = Color.White, fontWeight = FontWeight.Bold, ) @@ -182,7 +193,7 @@ fun EarnModal( if (deposit) { VSpacer(10) Text( - "We suggest you to keep 1 UST at least to pay gas. Remember that in the Earn Section the gas will be paid always in UST", + stringResource(R.string.earn_deposit_description), color = Color.Gray, fontSize = 14.sp ) @@ -191,8 +202,7 @@ fun EarnModal( if (!deposit && coin.amount < 0.5) { VSpacer(10) Text( - "You don't have enough UST to pay fees and Withdraw your earnings. Please, deposit more funds or" + - " select a lower amount.", + stringResource(R.string.earn_withdraw_not_enough_balance), color = Color.Gray, fontSize = 14.sp ) @@ -201,7 +211,7 @@ fun EarnModal( if (!deposit) { VSpacer(10) Text( - "When you withdraw your funds, it will take up to a minute to be reflected in your balance", + stringResource(R.string.earn_withdraw_description), color = Color.Gray, fontSize = 14.sp ) diff --git a/app/src/main/java/app/terraplanet/terraplanet/screen/modal/ReceiveModal.kt b/app/src/main/java/app/terraplanet/terraplanet/screen/modal/ReceiveModal.kt index a626fec..971e4f6 100644 --- a/app/src/main/java/app/terraplanet/terraplanet/screen/modal/ReceiveModal.kt +++ b/app/src/main/java/app/terraplanet/terraplanet/screen/modal/ReceiveModal.kt @@ -19,10 +19,12 @@ import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import app.terraplanet.terraplanet.R import app.terraplanet.terraplanet.ui.theme.* import app.terraplanet.terraplanet.ui.util.Container import app.terraplanet.terraplanet.ui.util.ModalTransitionDialogHelper @@ -72,7 +74,7 @@ fun ReceiveQrScreen(modal: ModalTransitionDialogHelper, address: String) { } VSpacer(20) Container(modifier = Modifier.align(Alignment.Start)) { - Text("Address:", fontSize = 18.sp, fontWeight = FontWeight.Bold) + Text(stringResource(R.string.receive_address), fontSize = 18.sp, fontWeight = FontWeight.Bold) } VSpacer(8) Container(modifier = Modifier.align(Alignment.Start)) { @@ -80,9 +82,11 @@ fun ReceiveQrScreen(modal: ModalTransitionDialogHelper, address: String) { } VSpacer(20) Button( - onClick = { context.copyToClipboard("Wallet Address", address) { - Toast.makeText(context, "Address copied", Toast.LENGTH_SHORT).show() - }}, + onClick = { + context.copyToClipboard(context.getString(R.string.receive_address_clipboard_clip), address) { + Toast.makeText(context, R.string.receive_address_clipboard_message, Toast.LENGTH_SHORT).show() + } + }, colors = ButtonDefaults.buttonColors(backgroundColor = Color.Transparent), modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(25), @@ -92,7 +96,7 @@ fun ReceiveQrScreen(modal: ModalTransitionDialogHelper, address: String) { ) ) { Text( - text = "Copy Address", + stringResource(R.string.receive_address_copy), color = MainBlue, fontWeight = FontWeight.Bold, fontSize = 20.sp diff --git a/app/src/main/java/app/terraplanet/terraplanet/screen/modal/SendModal.kt b/app/src/main/java/app/terraplanet/terraplanet/screen/modal/SendModal.kt index c243fba..49e04d2 100644 --- a/app/src/main/java/app/terraplanet/terraplanet/screen/modal/SendModal.kt +++ b/app/src/main/java/app/terraplanet/terraplanet/screen/modal/SendModal.kt @@ -30,6 +30,7 @@ import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.ImeAction @@ -95,10 +96,10 @@ fun SendModal( if (valid) { address = data } else { - Toast.makeText(context, "Not a valid Terra address", Toast.LENGTH_SHORT).show() + Toast.makeText(context, R.string.send_address_invalid, Toast.LENGTH_SHORT).show() } }, { - Toast.makeText(context, "Not a valid Terra address", Toast.LENGTH_SHORT).show() + Toast.makeText(context, R.string.send_address_invalid, Toast.LENGTH_SHORT).show() }) } } @@ -117,7 +118,11 @@ fun SendModal( horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier.padding(top = 8.dp) ) { - Text("Select Coin", fontWeight = FontWeight.Bold, modifier = Modifier.padding(16.dp)) + Text( + stringResource(R.string.send_coin_select), + fontWeight = FontWeight.Bold, + modifier = Modifier.padding(16.dp) + ) LazyColumn { items(wallet.value.coins.size) { ListItem( @@ -162,10 +167,14 @@ fun SendModal( ) } } - Text("Send To", fontSize = 40.sp, fontWeight = FontWeight.Bold) + Text(stringResource(R.string.send_title), fontSize = 40.sp, fontWeight = FontWeight.Bold) VSpacer(30) Container(modifier = Modifier.align(Alignment.Start)) { - Text("Address:", fontSize = 18.sp, fontWeight = FontWeight.Bold) + Text( + stringResource(R.string.send_address_title), + fontSize = 18.sp, + fontWeight = FontWeight.Bold + ) } VSpacer(10) Row(verticalAlignment = Alignment.CenterVertically) { @@ -188,11 +197,11 @@ fun SendModal( if (valid) { address = data } else { - Toast.makeText(context, "Not a valid Terra address", Toast.LENGTH_SHORT) + Toast.makeText(context, R.string.send_address_invalid, Toast.LENGTH_SHORT) .show() } }, { - Toast.makeText(context, "Not a valid Terra address", Toast.LENGTH_SHORT).show() + Toast.makeText(context, R.string.send_address_invalid, Toast.LENGTH_SHORT).show() }) } }, @@ -201,7 +210,7 @@ fun SendModal( elevation = ButtonDefaults.elevation(defaultElevation = 0.dp, pressedElevation = 0.dp) ) { Text( - text = "Paste", + stringResource(R.string.send_address_paste), color = MainBlue, fontSize = 16.sp, fontWeight = FontWeight.Bold @@ -219,7 +228,7 @@ fun SendModal( } VSpacer(30) Container(modifier = Modifier.align(Alignment.Start)) { - Text("Coin:", fontSize = 18.sp, fontWeight = FontWeight.Bold) + Text(stringResource(R.string.send_coin_title), fontSize = 18.sp, fontWeight = FontWeight.Bold) } VSpacer(10) Surface( @@ -237,15 +246,18 @@ fun SendModal( } VSpacer(40) Row(verticalAlignment = Alignment.CenterVertically) { - Text("Amount:", fontSize = 18.sp, fontWeight = FontWeight.Bold) + Text(stringResource(R.string.send_amount_title), fontSize = 18.sp, fontWeight = FontWeight.Bold) Expandable() - Text("Balance:") + Text(stringResource(R.string.send_balance)) HSpacer(4) Text(totalBalance.roundDecimal(if (coin.denom == Denom.UST) 2 else 4)) HSpacer(15) - Text("Max", fontSize = 18.sp, color = MainBlue, modifier = Modifier.clickable { - amount = ValidInput("$totalBalance", true) - }) + Text( + stringResource(R.string.send_max), + fontSize = 18.sp, + color = MainBlue, + modifier = Modifier.clickable { amount = ValidInput("$totalBalance", true) } + ) } VSpacer(10) Row(verticalAlignment = Alignment.CenterVertically) { @@ -296,12 +308,15 @@ fun SendModal( memo ) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - context.launchBiometric(context, "Authenticate to send transaction", + context.launchBiometric( + context, + context.getString(R.string.send_authenticate), context.authenticationCallback(onSuccess = { onSubmit(send!!) }), unsupportedCallback = { onSubmit(send!!) - }) + } + ) } else { onSubmit(send!!) } @@ -313,7 +328,7 @@ fun SendModal( address.isNotEmpty() ) { Text( - text = "SEND", + stringResource(R.string.send_action), color = Color.White, fontSize = 18.sp, fontWeight = FontWeight.Bold, @@ -323,7 +338,7 @@ fun SendModal( } VSpacer(20) Container(modifier = Modifier.align(Alignment.Start)) { - Text("Memo (optional):") + Text(stringResource(R.string.send_memo)) } VSpacer(10) Surface( @@ -345,7 +360,7 @@ fun SendModal( LoadingOverlay(Color.White) } - ShowSwapDialog(send, showDialog, onConfirm, onDismiss) + ShowSendDialog(send, showDialog, onConfirm, onDismiss) } } @@ -416,7 +431,7 @@ private fun CoinSelector(coin: Coin) { } @Composable -private fun ShowSwapDialog( +private fun ShowSendDialog( sendData: Send?, show: Boolean, onConfirm: () -> Unit, @@ -455,7 +470,12 @@ private fun ShowSwapDialog( ) else null, title = { Text( - if (haveBalance) "SEND" else "ATTENTION", + stringResource( + if (haveBalance) + R.string.send_dialog_title + else + R.string.send_dialog_title_attention + ), textAlign = TextAlign.Center, fontSize = 20.sp, fontWeight = FontWeight.Bold @@ -463,11 +483,13 @@ private fun ShowSwapDialog( }, text = { Text( - text = if (haveBalance) "From: ${wallet?.address}\n\n" + - "To: ${send.address}\n\n" + - "Amount: ${send.amount}\n\n" + - "Fee: ${send.fee} ${send.gas.label}" - else "You don't have enough ${send.gas.label} balance to pay fees and perform this action.", + if (haveBalance) + stringResource(R.string.send_dialog_description_from, wallet?.address ?: "") + "\n\n" + + stringResource(R.string.send_dialog_description_to, send.address) + "\n\n" + + stringResource(R.string.send_dialog_description_amount, send.amount) + "\n\n" + + stringResource(R.string.send_dialog_description_fee, send.fee, send.gas.label) + else + stringResource(R.string.send_dialog_description_not_enough_balance, send.gas.label), textAlign = TextAlign.Center, modifier = Modifier.fillMaxWidth(), fontSize = 18.sp @@ -481,11 +503,11 @@ private fun ShowSwapDialog( @Composable private fun ConfirmButton(onConfirm: () -> Unit) { TextButton(onClick = onConfirm) - { Text(text = "Sign it!", fontSize = 18.sp) } + { Text(stringResource(R.string.send_dialog_sign), fontSize = 18.sp) } } @Composable private fun DismissButton(onDismiss: () -> Unit) { TextButton(onClick = onDismiss) - { Text(text = "Cancel", fontSize = 18.sp) } + { Text(stringResource(R.string.send_dialog_cancel), fontSize = 18.sp) } } diff --git a/app/src/main/java/app/terraplanet/terraplanet/screen/modal/SwapModal.kt b/app/src/main/java/app/terraplanet/terraplanet/screen/modal/SwapModal.kt index 776725c..ba96902 100644 --- a/app/src/main/java/app/terraplanet/terraplanet/screen/modal/SwapModal.kt +++ b/app/src/main/java/app/terraplanet/terraplanet/screen/modal/SwapModal.kt @@ -25,6 +25,7 @@ import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.ImeAction @@ -108,7 +109,7 @@ fun SwapModal( ) } } - Text("Swap", fontSize = 40.sp, fontWeight = FontWeight.Bold) + Text(stringResource(R.string.swap_title), fontSize = 40.sp, fontWeight = FontWeight.Bold) VSpacer(30) Surface( border = BorderStroke(3.dp, MainColor), @@ -223,7 +224,7 @@ fun SwapModal( if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { context.launchBiometric( context, - "Authenticate to swap", + context.getString(R.string.swap_authenticate), context.authenticationCallback(onSuccess = { onSubmit(swapData) }), unsupportedCallback = { @@ -239,7 +240,7 @@ fun SwapModal( enabled = (uusd.valid && uusd.input.parseToDouble() > 0.0) && (luna.valid && luna.input.parseToDouble() > 0.0) ) { Text( - text = "SWAP", + stringResource(R.string.swap_dialog_title), color = Color.White, fontWeight = FontWeight.Bold, modifier = Modifier.padding(5.dp) @@ -342,15 +343,15 @@ private fun ShowSwapDialog( properties = DialogProperties(dismissOnBackPress = false, dismissOnClickOutside = false), confirmButton = { TextButton(onClick = onConfirm) - { Text(text = "Sign it!", fontSize = 18.sp) } + { Text(stringResource(R.string.swap_dialog_sign), fontSize = 18.sp) } }, dismissButton = { TextButton(onClick = onDismiss) - { Text(text = "Cancel", fontSize = 18.sp) } + { Text(stringResource(R.string.swap_dialog_cancel), fontSize = 18.sp) } }, title = { Text( - "SWAP", + stringResource(R.string.swap_dialog_title), textAlign = TextAlign.Center, fontSize = 20.sp, fontWeight = FontWeight.Bold @@ -358,10 +359,15 @@ private fun ShowSwapDialog( }, text = { Text( - text = "From: ${it.from.denom.label}\n" + - "To: ${it.to.denom.label}\n\n" + - "Amount: ${if (it.from.denom == Denom.LUNA) it.amount * lunaPrice else it.amount / lunaPrice}\n\n" + - "Fee: ${swap.fee} ${swap.pay.label}", + stringResource(R.string.swap_dialog_description_from, it.from.denom.label) + "\n" + + stringResource(R.string.swap_dialog_description_to, it.to.denom.label) + "\n\n" + + stringResource(R.string.swap_dialog_description_amount, + if (it.from.denom == Denom.LUNA) + it.amount * lunaPrice + else + it.amount / lunaPrice + ) + "\n\n" + + stringResource(R.string.swap_dialog_description_fee, swap.fee, swap.pay.label), textAlign = TextAlign.Center, modifier = Modifier.fillMaxWidth(), fontSize = 18.sp diff --git a/app/src/main/java/app/terraplanet/terraplanet/screen/tab/SettingsTab.kt b/app/src/main/java/app/terraplanet/terraplanet/screen/tab/SettingsTab.kt index b0aaca7..3456318 100644 --- a/app/src/main/java/app/terraplanet/terraplanet/screen/tab/SettingsTab.kt +++ b/app/src/main/java/app/terraplanet/terraplanet/screen/tab/SettingsTab.kt @@ -12,10 +12,12 @@ import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.window.DialogProperties +import app.terraplanet.terraplanet.R import app.terraplanet.terraplanet.network.APIServiceImpl import app.terraplanet.terraplanet.network.Denom import app.terraplanet.terraplanet.network.Net @@ -39,7 +41,7 @@ fun SettingsTab(activity: ComponentActivity, settings: SettingsViewModel) { horizontalAlignment = Alignment.CenterHorizontally ) { VSpacer(30) - Text("Settings", fontSize = 40.sp, fontWeight = FontWeight.Bold) + Text(stringResource(R.string.settings_title), fontSize = 40.sp, fontWeight = FontWeight.Bold) VSpacer(30) Surface( border = BorderStroke(3.dp, MainColor), @@ -51,7 +53,7 @@ fun SettingsTab(activity: ComponentActivity, settings: SettingsViewModel) { modifier = Modifier.padding(horizontal = 16.dp, vertical = 24.dp), verticalAlignment = Alignment.CenterVertically ) { - Text("Pay gas with:", fontSize = 18.sp) + Text(stringResource(R.string.settings_pay_gas), fontSize = 18.sp) Expandable() PayGasSegmented(settings) } @@ -67,7 +69,7 @@ fun SettingsTab(activity: ComponentActivity, settings: SettingsViewModel) { modifier = Modifier.padding(horizontal = 16.dp, vertical = 24.dp), verticalAlignment = Alignment.CenterVertically ) { - Text("Network:", fontSize = 18.sp) + Text(stringResource(R.string.settings_network), fontSize = 18.sp) Expandable() NetworkSegmented(settings) } @@ -76,7 +78,7 @@ fun SettingsTab(activity: ComponentActivity, settings: SettingsViewModel) { Button( onClick = { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - context.launchBiometric(context, "Authenticate to show Seed Phrase", + context.launchBiometric(context, context.getString(R.string.settings_authenticate), context.authenticationCallback(onSuccess = { settings.openSeedDialog() }), unsupportedCallback = { @@ -91,7 +93,7 @@ fun SettingsTab(activity: ComponentActivity, settings: SettingsViewModel) { shape = RoundedCornerShape(25) ) { Text( - text = "See my Seed Phrase", + stringResource(R.string.settings_show_seed_phrase), color = Color.White, fontSize = 18.sp ) @@ -108,7 +110,7 @@ fun SettingsTab(activity: ComponentActivity, settings: SettingsViewModel) { ) ) { Text( - text = "Log Out", + stringResource(R.string.settings_logout), color = Color.Red, fontSize = 18.sp ) @@ -146,9 +148,9 @@ private fun ShowSeedDialog( properties = DialogProperties(dismissOnBackPress = false, dismissOnClickOutside = false), confirmButton = { TextButton(onClick = onConfirm) - { Text(text = "OK", fontWeight = FontWeight.Bold) } + { Text(stringResource(R.string.settings_show_seed_phrase_ok), fontWeight = FontWeight.Bold) } }, - title = { Text("Your seed phrase is:", fontSize = 18.sp, fontWeight = FontWeight.Bold) }, + title = { Text(stringResource(R.string.settings_show_seed_phrase_title), fontSize = 18.sp, fontWeight = FontWeight.Bold) }, text = { Text(seedPhrase, fontSize = 16.sp) } ) } @@ -166,15 +168,14 @@ private fun ShowLogoutDialog( properties = DialogProperties(dismissOnBackPress = false, dismissOnClickOutside = false), confirmButton = { TextButton(onClick = onConfirm) - { Text(text = "Confirm", color = Color.Red) } + { Text(stringResource(R.string.settings_logout_confirm), color = Color.Red) } }, dismissButton = { TextButton(onClick = onDismiss) - { Text(text = "Cancel", fontWeight = FontWeight.Bold) } + { Text(stringResource(R.string.settings_logout_cancel), fontWeight = FontWeight.Bold) } }, - title = { Text("ATTENTION", fontSize = 18.sp, fontWeight = FontWeight.Bold) }, - text = { Text("Make sure your Seed Phrase is saved. If you don't have your Seed Phrase you will lose " + - "access to your Wallet forever.", fontSize = 16.sp) } + title = { Text(stringResource(R.string.settings_logout_title), fontSize = 18.sp, fontWeight = FontWeight.Bold) }, + text = { Text(stringResource(R.string.settings_logout_description), fontSize = 16.sp) } ) } } diff --git a/app/src/main/java/app/terraplanet/terraplanet/screen/tab/WalletTab.kt b/app/src/main/java/app/terraplanet/terraplanet/screen/tab/WalletTab.kt index 322e233..280fe1d 100644 --- a/app/src/main/java/app/terraplanet/terraplanet/screen/tab/WalletTab.kt +++ b/app/src/main/java/app/terraplanet/terraplanet/screen/tab/WalletTab.kt @@ -3,10 +3,13 @@ package app.terraplanet.terraplanet.screen.tab import android.annotation.SuppressLint import android.widget.Toast import androidx.activity.ComponentActivity +import androidx.annotation.DrawableRes import androidx.compose.foundation.* import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.* +import androidx.compose.material.Icon +import androidx.compose.material.Surface +import androidx.compose.material.Text import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Refresh import androidx.compose.runtime.* @@ -16,6 +19,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow @@ -85,7 +89,7 @@ fun WalletTab(activity: ComponentActivity, .clickable { navigateToSettings() }, color = Orange) { Center { Text( - text = Net.TEST.label.uppercase(), + Net.TEST.label.uppercase(), color = Color.White, fontWeight = FontWeight.Bold, fontSize = 20.sp, @@ -96,7 +100,7 @@ fun WalletTab(activity: ComponentActivity, } VSpacer(20) Row { - Text("Total Balance", fontSize = 20.sp) + Text(stringResource(R.string.wallet_tab_total_balance), fontSize = 20.sp) HSpacer(5) Icon( painter = rememberVectorPainter(image = Icons.Default.Refresh), @@ -107,7 +111,7 @@ fun WalletTab(activity: ComponentActivity, VSpacer(6) Text("$${wallet.value.amount}", fontSize = 50.sp, fontWeight = FontWeight.Bold) VSpacer(30) - Text("Your Coins", fontSize = 24.sp, fontWeight = FontWeight.Bold) + Text(stringResource(R.string.wallet_tab_your_coins), fontSize = 24.sp, fontWeight = FontWeight.Bold) VSpacer(6) Surface( shape = RoundedCornerShape(10), @@ -121,7 +125,7 @@ fun WalletTab(activity: ComponentActivity, when(wallet.value.state) { State.SUCCESS -> { if (wallet.value.coins.isEmpty()) { - Text(text = "You don't own coins yet", + Text(stringResource(R.string.wallet_tab_no_coins), color = Color.LightGray, fontStyle = FontStyle.Italic, modifier = Modifier.padding(horizontal = 8.dp, vertical = 16.dp) @@ -134,12 +138,12 @@ fun WalletTab(activity: ComponentActivity, } } } - State.FAILED -> Text(text = "Error getting coins, try again", + State.FAILED -> Text(stringResource(R.string.wallet_tab_error_getting_coins), color = Color.LightGray, fontStyle = FontStyle.Italic, modifier = Modifier.padding(horizontal = 8.dp, vertical = 16.dp) ) - State.LOADING -> Text(text = "Getting coins...", + State.LOADING -> Text(stringResource(R.string.wallet_tab_getting_coins), color = Color.LightGray, fontStyle = FontStyle.Italic, modifier = Modifier.padding(horizontal = 8.dp, vertical = 16.dp) @@ -149,7 +153,7 @@ fun WalletTab(activity: ComponentActivity, } } VSpacer(30) - Text("Actions", fontSize = 24.sp, fontWeight = FontWeight.Bold) + Text(stringResource(R.string.wallet_tab_actions), fontSize = 24.sp, fontWeight = FontWeight.Bold) VSpacer(8) Row( horizontalArrangement = Arrangement.SpaceEvenly, @@ -159,7 +163,7 @@ fun WalletTab(activity: ComponentActivity, onDismissRequest = { showReceiveModal = false }, showReceiveModal = showReceiveModal ) { WalletAction( - text = "Receive", + stringResource(R.string.wallet_tab_receive), icon = R.drawable.icon_receive, enabled = true, onClick = { showReceiveModal = true } @@ -201,7 +205,7 @@ fun WalletTab(activity: ComponentActivity, isSwapLoading = false } ) { WalletAction( - text = "Swap", + stringResource(R.string.wallet_tab_swap), icon = R.drawable.icon_swap, enabled = wallet.value.coins.isNotEmpty(), onClick = { showSwapModal = true } @@ -242,14 +246,17 @@ fun WalletTab(activity: ComponentActivity, isSendLoading = false } ) { WalletAction( - text = "Send", + stringResource(R.string.wallet_tab_send), icon = R.drawable.icon_send, enabled = wallet.value.coins.isNotEmpty(), onClick = { showSendModal = true } ) } } VSpacer(40) - Text("Earn (${wallet.value.rate.roundDecimal(2)}% APY)", fontSize = 24.sp, fontWeight = FontWeight.Bold) + Text(stringResource(R.string.wallet_tab_earn_apy, wallet.value.rate.roundDecimal(2)), + fontSize = 24.sp, + fontWeight = FontWeight.Bold + ) VSpacer(8) Surface( border = BorderStroke(3.dp, MainColor), @@ -262,7 +269,7 @@ fun WalletTab(activity: ComponentActivity, modifier = Modifier.padding(16.dp) ) { Text( - text = "$${wallet.value.earn.roundDecimal(2)}", + "$${wallet.value.earn.roundDecimal(2)}", fontSize = 30.sp, fontWeight = FontWeight.Bold ) @@ -302,7 +309,7 @@ fun WalletTab(activity: ComponentActivity, }, onError = { isEarnLoading = false - Toast.makeText(context, "Error. Please, try again.", Toast.LENGTH_SHORT).show() + Toast.makeText(context, R.string.wallet_tab_earn_modal_error, Toast.LENGTH_SHORT).show() } ) } else { @@ -315,7 +322,7 @@ fun WalletTab(activity: ComponentActivity, }, onError = { isEarnLoading = false - Toast.makeText(context, "Error. Please, try again.", Toast.LENGTH_SHORT).show() + Toast.makeText(context, R.string.wallet_tab_earn_modal_error, Toast.LENGTH_SHORT).show() } ) } @@ -455,7 +462,7 @@ fun CoinItem(coin: Coin) { @Composable fun RowScope.WalletAction( text: String, - icon: Int, + @DrawableRes icon: Int, enabled: Boolean, onClick: () -> Unit ) { @@ -499,7 +506,7 @@ fun DepositEarn( HSpacer(16) Icon(painter = painterResource(id = R.drawable.icon_deposit), contentDescription = null, tint = Color.White) HSpacer(8) - Text("Deposit", color = Color.White, fontSize = 20.sp) + Text(stringResource(R.string.wallet_tab_earn_deposit), color = Color.White, fontSize = 20.sp) HSpacer(16) } } @@ -529,7 +536,7 @@ fun WithdrawEarn( tint = Color.White ) HSpacer(8) - Text("Withdraw", color = Color.White, fontSize = 20.sp) + Text(stringResource(R.string.wallet_tab_earn_withdraw), color = Color.White, fontSize = 20.sp) HSpacer(16) } } diff --git a/app/src/main/java/app/terraplanet/terraplanet/ui/theme/Common.kt b/app/src/main/java/app/terraplanet/terraplanet/ui/theme/Common.kt index 953d29a..28fa2d1 100644 --- a/app/src/main/java/app/terraplanet/terraplanet/ui/theme/Common.kt +++ b/app/src/main/java/app/terraplanet/terraplanet/ui/theme/Common.kt @@ -4,8 +4,11 @@ import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.sp +import app.terraplanet.terraplanet.R @Composable fun isDark(): Boolean = isSystemInDarkTheme() @@ -19,10 +22,11 @@ fun bottomNavBgColor(): Color = if (isDark()) BnvDark else BnvLight @Composable fun colorAware(): Color = if (isDark()) Color.White else Color.Black +@Preview @Composable fun Title() { Text( - text = "Terra Planet", + stringResource(R.string.app_name), color = Color.White, fontSize = 40.sp, fontWeight = FontWeight.Bold, diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml new file mode 100644 index 0000000..a073ae9 --- /dev/null +++ b/app/src/main/res/values-es/strings.xml @@ -0,0 +1,147 @@ + + + Terra Planet + + + Estado del servidor... + El servidor falló. Cierra la app e intent nuevamente + Iniciando el servidor... + Conectando con el servidor... + Conectado con el servidor + Error del servidor + Ejecutando el servidor... + + + + Autenticar con datos biométricos + Cancelar + Autenticación exitosa + Autenticación cancelada + Error. Intente nuevamente + + + + La Billetera de Terra no-custodiada y de código abierto. + CREAR NUEVA BILLETERA + IMPORTAR BILLETERA + + + + Tu Billetera + Dirección: + Frase semilla: + Por favor, guarda tu frase semilla de forma segura. No podremos recuperar + tu billetera si la pierdes. Sugerimos que la escribas en papel. + CONTINUAR + + + + Importar Billetera + Frase semilla: + CONTINUAR + + + + Billetera + Transacciones + Ajustes + + + + Balance Total + Tus Monedas + No tienes monedas todavía + Error obteniendo monedas, intente nuevamente + Obteniendo monedas... + Acciones + Cambiar + Enviar + Recibir + Error. Por favor, intente nuevamente. + Depositar + Retirar + Ganar (%1$s%% APY) + + + + Dirección: + Copiar Dirección + Dirección de la Billetera + Dirección copiada + + + + Cambiar + Cambiar + Cancelar + ¡Firmar! + CAMBIAR + De: %1$s + Para: %1$s + Monto: %1$s + Comisión: %1$s %2$s + Autenticar para cambiar + + + + Enviar a + Dirección: + Pegar + Dirección Terra inválida + Moneda: + Seleccione Moneda + Monto: + Balance: + Máx + ENVIAR + Memo (opcional): + Cancelar + ¡Firmar! + ENVIAR + ATENCIÓN + De: %1$s + Para: %1$s + Monto: %1$s + Comisión: %1$s %2$s + No tienes suficiente %1$s en tu balance para pagar + comisiones y realizar esta acción. + Autenticar para enviar la transacción + + + + Ganar + Monto: + Balance: %1$s + Máx + Depositar + Retirar + Autenticar para depositar + Autenticar para retirar + Sugerimos que mantengas al menos 1 UST para pagar comisiones. Recuerda + que en la Sección de Ganar la comisión se pagará siempre en UST. + No dispones de UST suficientes para pagar comisiones y Retirar tus + ganancias. Por favor, deposita más fondos o selecciona un monto menor. + Cuando retires tus fondos, va a tomar hasta un minuto para que se + refleje en tu balance. + + + + Ajustes + Pagar el gas con: + Red: + Mostrar mi Frase Semilla + Cerrar sesión + Autenticar para mostrar la Frase Semilla + OK + Tu frase semilla es: + Confirmar + Cancelar + ATENCIÓN + Asegúrate de tener guardada la Frase Semilla. Si no tienes tu Frase + semilla perderás acceso a tu Billetera para siempre. + + + + Escanea un Código QR de una dirección Terra + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8b7e029..4a18b7a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,146 @@ + Terra Planet + + + Server status... + Server failed. Close the app and try again + Server starting... + Server connecting... + Server connected + Server error + Server running... + + + + Authenticate with Biometrics + Cancel + Auth Successful + Auth Canceled + Error. Try Again + + + + The open source non-custodial Terra Wallet. + CREATE NEW WALLET + IMPORT WALLET + + + + Your Wallet + Address: + Seed Phrase: + Please store your seed phrase securely. We would not be able to recover your wallet if you lose it. We suggest copying it on paper. + CONTINUE + + + + Import Wallet + Seed Phrase: + CONTINUE + + + + Wallet + Transactions + Settings + + + + Total Balance + Your Coins + You don\'t own coins yet + Error getting coins, try again + Getting coins... + Actions + Swap + Send + Receive + Error. Please, try again. + Deposit + Withdraw + Earn (%1$s%% APY) + + + + Address: + Copy Address + Wallet Address + Address copied + + + + Swap + Swap + Cancel + Sign it! + SWAP + From: %1$s + To: %1$s + Amount: %1$s + Fee: %1$s %2$s + Authenticate to swap + + + + Send To + Address: + Paste + Not a valid Terra address + Coin: + Select Coin + Amount: + Balance: + Max + SEND + Memo (optional): + Cancel + Sign it! + SEND + ATTENTION + From: %1$s + To: %1$s + Amount: %1$s + Fee: %1$s %2$s + You don\'t have enough %1$s balance to pay fees and + perform this action. + Authenticate to send transaction + + + + Earn + Amount: + Balance: %1$s + Max + Deposit + Withdraw + Authenticate to deposit + Authenticate to withdraw + We suggest you to keep 1 UST at least to pay gas. Remember that in the + Earn Section the gas will be paid always in UST. + You don\'t have enough UST to pay fees and Withdraw your earnings. + Please, deposit more funds or select a lower amount. + When you withdraw your funds, it will take up to a minute to be + reflected in your balance. + + + + Settings + Pay gas with: + Network: + Show my Seed Phrase + Log Out + Authenticate to show Seed Phrase + OK + Your seed phrase is: + Confirm + Cancel + ATTENTION + Make sure your Seed Phrase is saved. If you don\'t have your Seed + Phrase you will lose access to your Wallet forever. + + + + Scan a Terra address QR Code + \ No newline at end of file