From d5f671a7be77d67f8ac8bafc54663a62a134c907 Mon Sep 17 00:00:00 2001 From: Till Hellmund Date: Mon, 14 Aug 2023 13:09:47 -0400 Subject: [PATCH] Only use fallback error messages for non-Spain Spanish --- .../android/networking/StripeErrorMapping.kt | 19 ++++++++++++++++++- .../java/com/stripe/android/StripeTest.java | 2 +- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/payments-core/src/main/java/com/stripe/android/networking/StripeErrorMapping.kt b/payments-core/src/main/java/com/stripe/android/networking/StripeErrorMapping.kt index 613db88cec0..9fe703b5148 100644 --- a/payments-core/src/main/java/com/stripe/android/networking/StripeErrorMapping.kt +++ b/payments-core/src/main/java/com/stripe/android/networking/StripeErrorMapping.kt @@ -3,11 +3,17 @@ package com.stripe.android.networking import android.content.Context import com.stripe.android.R import com.stripe.android.core.StripeError +import java.util.Locale import com.stripe.android.uicore.R as UiCoreR @Suppress("ComplexMethod") internal fun StripeError.withLocalizedMessage(context: Context): StripeError { - val newMessage = context.mapErrorCodeToLocalizedMessage(code) ?: message + val newMessage = if (shouldFallBackToLocalizedError) { + context.mapErrorCodeToLocalizedMessage(code) + } else { + message ?: context.mapErrorCodeToLocalizedMessage(code) + } + return copy(message = newMessage) } @@ -29,3 +35,14 @@ internal fun Context.mapErrorCodeToLocalizedMessage(code: String?): String? { } return messageResourceId?.let { getString(it) } } + +/** + * For some language tags, our backend is unable to provide translated error messages. For these + * languages, we fall back to local error messages. As of right now, the only languages for which we + * are aware of this issue are Spanish languages outside of Spain, such as in Argentina or Chile. + */ +private val shouldFallBackToLocalizedError: Boolean + get() { + val locale = Locale.getDefault() + return locale.language.lowercase() == "es" && locale.country.lowercase() != "es" + } diff --git a/payments-core/src/test/java/com/stripe/android/StripeTest.java b/payments-core/src/test/java/com/stripe/android/StripeTest.java index 4ca7a88ec0a..512b8db1ad3 100644 --- a/payments-core/src/test/java/com/stripe/android/StripeTest.java +++ b/payments-core/src/test/java/com/stripe/android/StripeTest.java @@ -1038,7 +1038,7 @@ public void createTokenSynchronous_withInvalidCardNumber_throwsCardException() { CardException.class, () -> defaultStripe.createCardTokenSynchronous(cardParams) ); - assertEquals("Your card's number is invalid.", cardException.getMessage()); + assertEquals("Your card number is incorrect.", cardException.getMessage()); } @Test