From 04da2ddae50a1adda7ac42baf636e3493c7d50e8 Mon Sep 17 00:00:00 2001 From: Kashif Date: Mon, 12 May 2025 19:28:57 +0530 Subject: [PATCH] fix(core): language consumption from locale in payment and payout links (#7993) Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com> --- .../router/locales/{en-GB.yml => en_gb.yml} | 0 .../router/locales/{fr-BE.yml => fr_be.yml} | 0 crates/router/src/core/payment_link/locale.js | 27 +++++++++++++++---- .../api/generic_link_response/context.rs | 24 +++++++++++++++++ 4 files changed, 46 insertions(+), 5 deletions(-) rename crates/router/locales/{en-GB.yml => en_gb.yml} (100%) rename crates/router/locales/{fr-BE.yml => fr_be.yml} (100%) diff --git a/crates/router/locales/en-GB.yml b/crates/router/locales/en_gb.yml similarity index 100% rename from crates/router/locales/en-GB.yml rename to crates/router/locales/en_gb.yml diff --git a/crates/router/locales/fr-BE.yml b/crates/router/locales/fr_be.yml similarity index 100% rename from crates/router/locales/fr-BE.yml rename to crates/router/locales/fr_be.yml diff --git a/crates/router/src/core/payment_link/locale.js b/crates/router/src/core/payment_link/locale.js index f70d9cefbd..5a404c93a5 100644 --- a/crates/router/src/core/payment_link/locale.js +++ b/crates/router/src/core/payment_link/locale.js @@ -619,8 +619,25 @@ const locales = { }, }; - function getTranslations(locale_str) { - var fallback_locale = 'en'; - var locale = locale_str.toLowerCase().replace(/-/g, "_") || fallback_locale; // defaults if locale is not present in payment details. - return locales[locale] || locales['en']; // defaults if locale is not implemented in locales. - } \ No newline at end of file +function getLanguage(localeStr) { + var fallback_locale = 'en'; + var primaryLocale = (localeStr.toLowerCase() || fallback_locale).split(',')[0].trim(); + + // Split into language and country parts + var parts = primaryLocale.split('-'); + var language = parts[0]; + var country = parts.length > 1 ? parts[1] : null; + + var key = `${language}_${country}`; + switch (key) { + case 'en_gb': return 'en_gb'; + case 'fr_be': return 'fr_be'; + default: return language; + } +} + +function getTranslations(localeStr) { + var fallback_locale = 'en'; + var language = getLanguage(localeStr); + return locales[language] || locales[fallback_locale]; +} \ No newline at end of file diff --git a/crates/router/src/services/api/generic_link_response/context.rs b/crates/router/src/services/api/generic_link_response/context.rs index 25d2e3f166..9589081d07 100644 --- a/crates/router/src/services/api/generic_link_response/context.rs +++ b/crates/router/src/services/api/generic_link_response/context.rs @@ -1,7 +1,29 @@ +use common_utils::consts::DEFAULT_LOCALE; use rust_i18n::t; use tera::Context; +fn get_language(locale_str: &str) -> String { + let lowercase_str = locale_str.to_lowercase(); + let primary_locale = lowercase_str.split(',').next().unwrap_or("").trim(); + + if primary_locale.is_empty() { + return DEFAULT_LOCALE.to_string(); + } + + let parts = primary_locale.split('-').collect::>(); + let language = *parts.first().unwrap_or(&DEFAULT_LOCALE); + let country = parts.get(1).copied(); + + match (language, country) { + ("en", Some("gb")) => "en_gb".to_string(), + ("fr", Some("be")) => "fr_be".to_string(), + (lang, _) => lang.to_string(), + } +} + pub fn insert_locales_in_context_for_payout_link(context: &mut Context, locale: &str) { + let language = get_language(locale); + let locale = language.as_str(); let i18n_payout_link_title = t!("payout_link.initiate.title", locale = locale); let i18n_january = t!("months.january", locale = locale); let i18n_february = t!("months.february", locale = locale); @@ -38,6 +60,8 @@ pub fn insert_locales_in_context_for_payout_link(context: &mut Context, locale: } pub fn insert_locales_in_context_for_payout_link_status(context: &mut Context, locale: &str) { + let language = get_language(locale); + let locale = language.as_str(); let i18n_payout_link_status_title = t!("payout_link.status.title", locale = locale); let i18n_success_text = t!("payout_link.status.text.success", locale = locale); let i18n_success_message = t!("payout_link.status.message.success", locale = locale);