128 lines
4.2 KiB
JavaScript
128 lines
4.2 KiB
JavaScript
// Language switching functionality for QR Rapido
|
|
document.addEventListener('DOMContentLoaded', function () {
|
|
// FORCE: Respect the URL culture above all else
|
|
let currentCulture = getCurrentCulture();
|
|
|
|
console.log('Current culture:', currentCulture);
|
|
|
|
localStorage.setItem('preferredLanguage', currentCulture);
|
|
|
|
const languageDropdownItems = document.querySelectorAll('.dropdown-item[data-lang]');
|
|
const currentLangSpan = document.getElementById('current-lang');
|
|
|
|
// Get current culture from URL or default to pt-BR
|
|
function getCurrentCulture() {
|
|
const pathSegments = window.location.pathname.split('/').filter(segment => segment);
|
|
const supportedCultures = ['pt-BR', 'es-PY', 'es'];
|
|
|
|
if (pathSegments.length > 0 && supportedCultures.includes(pathSegments[0])) {
|
|
return pathSegments[0];
|
|
}
|
|
|
|
return 'pt-BR';
|
|
}
|
|
|
|
// Update current language display
|
|
function updateCurrentLanguageDisplay(culture) {
|
|
const langMap = {
|
|
'pt-BR': 'PT',
|
|
'es-PY': 'ES',
|
|
'es': 'ES'
|
|
};
|
|
|
|
if (currentLangSpan) {
|
|
currentLangSpan.textContent = langMap[culture] || 'PT';
|
|
}
|
|
}
|
|
|
|
// Build new URL with selected culture
|
|
function buildLocalizedUrl(newCulture) {
|
|
const currentPath = window.location.pathname;
|
|
const queryString = window.location.search;
|
|
const hash = window.location.hash;
|
|
|
|
// Remove existing culture from path if present
|
|
const pathSegments = currentPath.split('/').filter(segment => segment);
|
|
const supportedCultures = ['pt-BR', 'es-PY', 'es'];
|
|
|
|
// Remove current culture if it's the first segment
|
|
if (pathSegments.length > 0 && supportedCultures.includes(pathSegments[0])) {
|
|
pathSegments.shift();
|
|
}
|
|
|
|
// Build new path with selected culture
|
|
const newPath = '/' + newCulture + (pathSegments.length > 0 ? '/' + pathSegments.join('/') : '');
|
|
|
|
return newPath + queryString + hash;
|
|
}
|
|
|
|
// Handle language selection
|
|
// Handle language selection
|
|
languageDropdownItems.forEach(item => {
|
|
item.addEventListener('click', function (e) {
|
|
e.preventDefault();
|
|
|
|
const selectedLang = this.getAttribute('data-lang');
|
|
currentCulture = getCurrentCulture();
|
|
|
|
// Track language change for analytics
|
|
if (typeof window.trackLanguageChange === 'function') {
|
|
window.trackLanguageChange(currentCulture, selectedLang);
|
|
}
|
|
|
|
// Store language preference in localStorage
|
|
localStorage.setItem('preferredLanguage', selectedLang);
|
|
|
|
// Set culture cookie for server-side processing
|
|
document.cookie = `culture=${selectedLang}; path=/; max-age=31536000; SameSite=Lax`;
|
|
|
|
// Navigate to new URL with selected language
|
|
const newUrl = buildLocalizedUrl(selectedLang);
|
|
window.location.href = newUrl;
|
|
});
|
|
});
|
|
|
|
// Initialize current language display
|
|
currentCulture = getCurrentCulture();
|
|
updateCurrentLanguageDisplay(currentCulture);
|
|
|
|
// Store current culture in localStorage if not already set
|
|
if (!localStorage.getItem('preferredLanguage')) {
|
|
localStorage.setItem('preferredLanguage', currentCulture);
|
|
}
|
|
});
|
|
|
|
// Utility function to get user's preferred language
|
|
function getUserPreferredLanguage() {
|
|
// Check localStorage first
|
|
const storedLang = localStorage.getItem('preferredLanguage');
|
|
if (storedLang) {
|
|
return storedLang;
|
|
}
|
|
|
|
// Check browser language
|
|
const browserLang = navigator.language || navigator.userLanguage;
|
|
|
|
// Map browser languages to supported cultures
|
|
const langMap = {
|
|
'pt': 'pt-BR',
|
|
'pt-BR': 'pt-BR',
|
|
'es': 'es-PY',
|
|
'es-PY': 'es-PY'
|
|
};
|
|
|
|
// Check exact match first
|
|
if (langMap[browserLang]) {
|
|
return langMap[browserLang];
|
|
}
|
|
|
|
// Check language part only (e.g., 'es' from 'es-AR')
|
|
const langPart = browserLang.split('-')[0];
|
|
if (langMap[langPart]) {
|
|
return langMap[langPart];
|
|
}
|
|
|
|
}
|
|
|
|
|