fix: Commenter le sélecteur de langue dans l'en-tête et supprimer la détection de langue via VisitorAPI
This commit is contained in:
@@ -148,7 +148,7 @@ pagination = { pagerSize = 6, path = "page" }
|
|||||||
[menu.main.params]
|
[menu.main.params]
|
||||||
has_submenu = true
|
has_submenu = true
|
||||||
submenu = [
|
submenu = [
|
||||||
{ name = "Blog", url = "/resources/blog" },
|
# { name = "Blog", url = "/resources/blog" },
|
||||||
{ name = "Manuels", url = "/resources/manuals" },
|
{ name = "Manuels", url = "/resources/manuals" },
|
||||||
{ name = "Tutoriels", url = "/resources/tutorials" },
|
{ name = "Tutoriels", url = "/resources/tutorials" },
|
||||||
{ name = "Installation", url = "/resources/installation" },
|
{ name = "Installation", url = "/resources/installation" },
|
||||||
@@ -188,7 +188,7 @@ pagination = { pagerSize = 6, path = "page" }
|
|||||||
[languages.en.menu.main.params]
|
[languages.en.menu.main.params]
|
||||||
has_submenu = true
|
has_submenu = true
|
||||||
submenu = [
|
submenu = [
|
||||||
{ name = "Blog", url = "/resources/blog" },
|
# { name = "Blog", url = "/resources/blog" },
|
||||||
{ name = "Technical Documentation", url = "/resources/technical-documentation" },
|
{ name = "Technical Documentation", url = "/resources/technical-documentation" },
|
||||||
{ name = "Manuals", url = "/resources/manuals" },
|
{ name = "Manuals", url = "/resources/manuals" },
|
||||||
{ name = "Tutorials", url = "/resources/tutorials" },
|
{ name = "Tutorials", url = "/resources/tutorials" },
|
||||||
@@ -232,7 +232,7 @@ pagination = { pagerSize = 6, path = "page" }
|
|||||||
{ name = "Handleidingen", url = "/resources/manuals" },
|
{ name = "Handleidingen", url = "/resources/manuals" },
|
||||||
{ name = "Tutorials", url = "/resources/tutorials" },
|
{ name = "Tutorials", url = "/resources/tutorials" },
|
||||||
{ name = "FAQ", url = "/resources/faq" },
|
{ name = "FAQ", url = "/resources/faq" },
|
||||||
{ name = "Blog", url = "/resources/blog" }
|
# { name = "Blog", url = "/resources/blog" }
|
||||||
]
|
]
|
||||||
[[languages.nl.menu.main]]
|
[[languages.nl.menu.main]]
|
||||||
name = "Contacteer Ons"
|
name = "Contacteer Ons"
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
<!-- Language Switcher -->
|
<!-- Language Switcher -->
|
||||||
{{ partial "language-switcher" . }}
|
{{/* {{ partial "language-switcher" . }} */}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- CTA Buttons -->
|
<!-- CTA Buttons -->
|
||||||
|
|||||||
@@ -47,153 +47,12 @@
|
|||||||
redirectToLanguage(preferredLang);
|
redirectToLanguage(preferredLang);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If no stored preference and VisitorAPI is configured, call it every time
|
|
||||||
if (!preferredLang && VISITOR_API_PID) {
|
|
||||||
detectLanguageViaVisitorAPI();
|
|
||||||
} else if (!preferredLang) {
|
|
||||||
console.log('Language preference: No stored preference and VisitorAPI not configured');
|
|
||||||
}
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// Silently fail if localStorage/sessionStorage is unavailable
|
// Silently fail if localStorage/sessionStorage is unavailable
|
||||||
console.warn('Language preference: Storage unavailable', e);
|
console.warn('Language preference: Storage unavailable', e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Detect user's language using VisitorAPI
|
|
||||||
*/
|
|
||||||
function detectLanguageViaVisitorAPI() {
|
|
||||||
console.log('VisitorAPI: Calling API to detect language...');
|
|
||||||
|
|
||||||
// VisitorAPI implementation
|
|
||||||
var VisitorAPI = function(projectId, successCallback, errorCallback) {
|
|
||||||
var xhr = new XMLHttpRequest();
|
|
||||||
xhr.onreadystatechange = function() {
|
|
||||||
if (xhr.readyState === XMLHttpRequest.DONE) {
|
|
||||||
try {
|
|
||||||
var response = JSON.parse(xhr.responseText);
|
|
||||||
if (response.status === 200) {
|
|
||||||
successCallback(response.data);
|
|
||||||
} else {
|
|
||||||
errorCallback(response.status, response.result);
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
errorCallback(0, 'Failed to parse response');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
xhr.open("GET", "https://api.visitorapi.com/api/?pid=" + projectId);
|
|
||||||
xhr.send(null);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Call VisitorAPI
|
|
||||||
VisitorAPI(
|
|
||||||
VISITOR_API_PID,
|
|
||||||
function(data) {
|
|
||||||
handleVisitorAPISuccess(data);
|
|
||||||
},
|
|
||||||
function(errorCode, errorMessage) {
|
|
||||||
console.warn('VisitorAPI error:', errorCode, errorMessage);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle successful VisitorAPI response
|
|
||||||
* @param {Object} data - VisitorAPI response data
|
|
||||||
*/
|
|
||||||
function handleVisitorAPISuccess(data) {
|
|
||||||
console.log('VisitorAPI: Received data:', data);
|
|
||||||
|
|
||||||
// Get languages from response (e.g., ["en", "eng"])
|
|
||||||
var languages = data.languages || [];
|
|
||||||
|
|
||||||
if (languages.length === 0) {
|
|
||||||
console.log('VisitorAPI: No languages detected in response');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log('VisitorAPI: Detected languages:', languages);
|
|
||||||
|
|
||||||
// Get current language to check if already on preferred language
|
|
||||||
var currentLang = getCurrentLanguage();
|
|
||||||
console.log('VisitorAPI: Current language:', currentLang);
|
|
||||||
|
|
||||||
// Get all available Hugo language codes from the page
|
|
||||||
var availableHugoLangs = [];
|
|
||||||
var languageLinks = document.querySelectorAll('.language-switch-link');
|
|
||||||
|
|
||||||
for (var i = 0; i < languageLinks.length; i++) {
|
|
||||||
var hugoLang = languageLinks[i].getAttribute('data-lang');
|
|
||||||
if (hugoLang) {
|
|
||||||
availableHugoLangs.push(hugoLang.toLowerCase());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add current language to available languages if not already present
|
|
||||||
// This handles the case where default language (e.g., "en") might not have a visible switch link
|
|
||||||
if (currentLang && availableHugoLangs.indexOf(currentLang) === -1) {
|
|
||||||
availableHugoLangs.unshift(currentLang); // Add to beginning of array
|
|
||||||
console.log('VisitorAPI: Added current language to available languages:', currentLang);
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log('VisitorAPI: Available Hugo languages:', availableHugoLangs);
|
|
||||||
|
|
||||||
// Try to match visitor's language to available Hugo languages
|
|
||||||
// Match using first 2 characters of language code (e.g., "en" matches "en", "zh" matches "zh-cn")
|
|
||||||
// IMPORTANT: Iterate through visitor's languages IN ORDER to respect preference
|
|
||||||
var detectedLang = null;
|
|
||||||
|
|
||||||
for (var i = 0; i < languages.length; i++) {
|
|
||||||
var visitorLang = languages[i].toLowerCase();
|
|
||||||
// Get first 2 characters of the visitor's language code
|
|
||||||
var langPrefix = visitorLang.substring(0, 2);
|
|
||||||
|
|
||||||
console.log('VisitorAPI: Checking visitor language:', visitorLang, '(prefix: ' + langPrefix + ')');
|
|
||||||
|
|
||||||
// Check if any available Hugo language matches this visitor language
|
|
||||||
for (var j = 0; j < availableHugoLangs.length; j++) {
|
|
||||||
var hugoLang = availableHugoLangs[j];
|
|
||||||
// Get first 2 characters of Hugo language code
|
|
||||||
var hugoPrefix = hugoLang.substring(0, 2);
|
|
||||||
|
|
||||||
// Match based on first 2 characters
|
|
||||||
if (langPrefix === hugoPrefix) {
|
|
||||||
detectedLang = hugoLang;
|
|
||||||
console.log('VisitorAPI: Matched language:', visitorLang, '(' + langPrefix + ') -> Hugo language:', hugoLang);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Break immediately when first match is found (respects visitor's language preference order)
|
|
||||||
if (detectedLang) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we detected a valid language and it's different from current, redirect
|
|
||||||
if (detectedLang) {
|
|
||||||
console.log('VisitorAPI: Detected lang:', detectedLang, 'Current lang:', currentLang);
|
|
||||||
|
|
||||||
if (detectedLang !== currentLang) {
|
|
||||||
console.log('VisitorAPI: Storing preference and redirecting to:', detectedLang);
|
|
||||||
|
|
||||||
// Store the detected language as preference
|
|
||||||
setStoredLanguage(detectedLang);
|
|
||||||
|
|
||||||
// Redirect to detected language
|
|
||||||
redirectToLanguage(detectedLang);
|
|
||||||
} else {
|
|
||||||
console.log('VisitorAPI: Already on detected language, no redirect needed');
|
|
||||||
// Store the preference even if we're already on the right language
|
|
||||||
setStoredLanguage(detectedLang);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
console.log('VisitorAPI: No matching Hugo language found for detected languages');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attach click event listeners to all language switch links
|
* Attach click event listeners to all language switch links
|
||||||
*/
|
*/
|
||||||
@@ -297,7 +156,6 @@
|
|||||||
*/
|
*/
|
||||||
function redirectToLanguage(targetLang) {
|
function redirectToLanguage(targetLang) {
|
||||||
const currentPath = window.location.pathname;
|
const currentPath = window.location.pathname;
|
||||||
const currentLang = getCurrentLanguage();
|
|
||||||
const search = window.location.search;
|
const search = window.location.search;
|
||||||
const hash = window.location.hash;
|
const hash = window.location.hash;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user