From a756f0808ced7c6f4fec564d4f81f2bcb36caa63 Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 10 Oct 2025 10:51:51 +0000 Subject: [PATCH] feat: improve Bible version selection logic and language switching MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Auto-select appropriate version when switching languages - Prioritize favorite version only if it matches current locale - Fall back to locale-specific default version - Redirect Bible pages to reader root when changing language to allow proper version selection 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- app/[locale]/bible/reader.tsx | 18 ++++++++++++------ components/layout/language-switcher.tsx | 20 +++++++++++++++----- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/app/[locale]/bible/reader.tsx b/app/[locale]/bible/reader.tsx index 8140dd5..f0df315 100644 --- a/app/[locale]/bible/reader.tsx +++ b/app/[locale]/bible/reader.tsx @@ -350,12 +350,15 @@ export default function BibleReaderNew({ initialVersion, initialBook, initialCha if (data.success && data.versions) { setVersions(data.versions) - // Only auto-select if there's NO current selection - if (!selectedVersion) { - // Try to load user's favorite version first + // Check if current version is available in the new locale's versions + const currentVersionAvailable = selectedVersion && data.versions.find((v: BibleVersion) => v.id === selectedVersion) + + // Auto-select if there's NO current selection OR if current version is not available in new locale + if (!selectedVersion || (!showAllVersions && !currentVersionAvailable)) { let versionToSelect = null - if (user) { + // Try to load user's favorite version first, but only if it matches the current locale + if (user && !showAllVersions) { const token = localStorage.getItem('authToken') if (token) { try { @@ -365,6 +368,7 @@ export default function BibleReaderNew({ initialVersion, initialBook, initialCha const favoriteData = await favoriteRes.json() if (favoriteData.success && favoriteData.favoriteBibleVersion) { + // Check if favorite version is in the current locale's versions const favoriteVersion = data.versions.find((v: BibleVersion) => v.id === favoriteData.favoriteBibleVersion) if (favoriteVersion) { versionToSelect = favoriteVersion @@ -376,9 +380,11 @@ export default function BibleReaderNew({ initialVersion, initialBook, initialCha } } - // Fall back to default version or first version + // Fall back to default version for this locale or first version if (!versionToSelect) { - versionToSelect = data.versions.find((v: BibleVersion) => v.isDefault) || data.versions[0] + versionToSelect = data.versions.find((v: BibleVersion) => v.isDefault && v.language.toLowerCase() === locale.toLowerCase()) + || data.versions.find((v: BibleVersion) => v.isDefault) + || data.versions[0] } if (versionToSelect) { diff --git a/components/layout/language-switcher.tsx b/components/layout/language-switcher.tsx index 6dc2087..930b404 100644 --- a/components/layout/language-switcher.tsx +++ b/components/layout/language-switcher.tsx @@ -33,12 +33,22 @@ export function LanguageSwitcher() { setAnchorEl(null) } - const handleLanguageChange = (newLocale: string) => { - // Remove current locale from pathname and add new one - const pathWithoutLocale = pathname.replace(`/${locale}`, '') || '/' - const newPath = `/${newLocale}${pathWithoutLocale === '/' ? '' : pathWithoutLocale}` + const handleLanguageChange = async (newLocale: string) => { + // Check if we're on a Bible page + const isBiblePage = pathname.includes('/bible/') + + if (isBiblePage) { + // For Bible pages, redirect to Bible reader without specific version + // Let the reader component select appropriate version for the new language + const newPath = `/${newLocale}/bible` + router.push(newPath) + } else { + // For other pages, just change the locale in the URL + const pathWithoutLocale = pathname.replace(`/${locale}`, '') || '/' + const newPath = `/${newLocale}${pathWithoutLocale === '/' ? '' : pathWithoutLocale}` + router.push(newPath) + } - router.push(newPath) handleClose() }