This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
JavaScript für Sprachumleitung funktioniert nicht
#1
Hallo,

es geht um eine mehrsprachige Website, die ich jeweils automatisch auf die jeweilige eingestellte Browsersprache weiterleiten will. Grundlegend ist deutsch eingestellt, dann eben noch /it/ + /en/ - italiensich und englisch. Das folgende Script funkt in der Testumgebung aber eben nicht in der Liveschaltung. In der Liveschaltung wiederholen sich einfach die Alert-Konstrukte wie wenn eine Schleife auf unendlich laufen würde. Nehme ich die Alertkonstrukte heraus ( waren ohnehin nur eine Hilfsfunktion ) bauen sich mehrfach Browsertabs von der ständigen Wiederholung auf. ????


Hier mal das Script, vllt. kann jemand helfen! VG und schon mal danke.

<script type="text/javascript">

var userLang = navigator.language || navigator.userLanguage;
alert ("The language is: " + userLang);

if ( userLang=="de") {
alert ( " DIE SEITE wird in Deutsch geladen");
document.location.href='https://domain.com';
}

else if ( userLang=="en" || userLang=="en-US") {
alert ( " DIE SEITE wird in Englisch geladen");
document.location.href='https://domain.com/en/';
}

else if ( userLang=="it") {
alert ( " DIE SEITE wird in Italienisch geladen");
document.location.href='https://domain.com/it/';
}

else {
alert ("This Site here is not available in your language");
document.location.href='https://domain.com';
}

</script>
Zitieren
#2
Hi alhai007,
ich habe schnell eine eigene Version heraus gebracht. Verwende in diesem Fall das switch statement anstatt elseif.

Hier mein Beispiel:
var userLang = navigator.language; // navigator.language reicht vollkommen aus. Es wird von den meisten Browsern unterstützt auch vom IE11
switch(userLang) {
    case 'de':
        alert("Ihre Seite wird in deutsch geladen");
        document.location.href='https://domain.com';
    break;
    case 'en':
    case 'en-us': // Wird immer klein geschrieben nach ISO 3166-1
        alert("Die Seite wird in englisch geladen");
        document.location.href='https://domain.com/en/';
    break;
    case 'it':
        alert ("DIE SEITE wird in Italienisch geladen");
        document.location.href='https://domain.com/it/';
    break;
    default:
        alert ("This Site here is not available in your language");
    document.location.href='https://domain.com';    
}

Viel Erfolg!

rzscout
"Gerne dürft ihr mir eine gute Bewertung da lassen aber auch gegenüber Kritik bin ich offen" Angel
Als Lösung markieren Zitieren
#3
Vielen Dank, ich probiere es später dann gleich mal aus.
VG

Hallo, habe es versucht, aber das hat dieselbige Problematik, das Script bleibt hängen und wiederholt sich. Was könnte das sein?
VG
Als Lösung markieren Zitieren
#4
Hi alhai007,
ich weiß nicht wo das Problem ist, deswegen habe ich zwei Schutzmechanismen eingebaut. Sollten diese nicht funktionieren und es wird als Schleife ausgegeben, dann stimmt etwas nicht mit deiner Browserkonfiguration. Versuche mal diesen Code; der sollte nur einmal ausführbar sein.

Mein modifizierte Version meines Codeschnipsels:
document.addEventListener('DOMContentLoaded', init);
var userLang, count;
function init() {
    count++;
    if(count<= 1) {
        userLang = navigator.language; // navigator.language reicht vollkommen aus. Es wird von den meisten Browsern unterstützt auch vom IE11
        switch(userLang) {
            case 'de':
                alert("Ihre Seite wird in deutsch geladen");
                document.location.href='https://domain.com';
            break;
            case 'en':
            case 'en-us': // Wird immer klein geschrieben nach ISO 3166-1
                alert("Die Seite wird in englisch geladen");
                document.location.href='https://domain.com/en/';
            break;
            case 'it':
                alert ("DIE SEITE wird in Italienisch geladen");
                document.location.href='https://domain.com/it/';
            break;
            default:
                alert ("This Site here is not available in your language");
            document.location.href='https://domain.com';    
        }
    }    
}

Ich könnte mir vorstellen wo das Problem liegen könnte. Wenn du auf jeder Seite den gleichen Code ausführst, bekommst du eine Schleife. Deswegen wäre es besser vorher abzufragen ob die entsprechende Seite schon geladen wurde. Hier ein weitere Codevbeispiel:
document.addEventListener('DOMContentLoaded', init);
var userLang, count, lang;
function init() {
    count++;
    if(count<= 1) {
        userLang = navigator.language; // navigator.language reicht vollkommen aus. Es wird von den meisten Browsern unterstützt auch vom IE11
        switch(userLang) {
            case 'de':
                checkURL('https://domain.com');
                lang = "Deutsch";                
            break;
            case 'en':
            case 'en-us': // Wird immer klein geschrieben nach ISO 3166-1
                lang = "Englisch";
                checkURL('https://domain.com/en/');
            break;
            case 'it':
                lang = 'Italienisch';
                checkURL('https://domain.com/it/');
            break;
            default:
                lang = "Standardsprache";                
                checkURL('https://domain.com');
        }
    }    
}
function checkURL(myURL) {
    let currentURL = window.location.href;
    if(currentURL != myURL) {
        alert("Die Seite mit " + lang + " wird geladen!");
        window.location.href = myURL;
    }
}

Ich hoffe das hilft dir weiter. Ich würde beide Versionen testen. Wobei die zweite Version dafür das ist wenn du auf jeder Seite diesen Code eingebunden hast.

Viel Erfolg

rzscout
alhai007 likes this post
"Gerne dürft ihr mir eine gute Bewertung da lassen aber auch gegenüber Kritik bin ich offen" Angel
Als Lösung markieren Zitieren
#5
(16.11.2022, 10:48)rzscout schrieb: Hi alhai007,
ich weiß nicht wo das Problem ist, deswegen habe ich zwei Schutzmechanismen eingebaut. Sollten diese nicht funktionieren und es wird als Schleife ausgegeben, dann stimmt etwas nicht mit deiner Browserkonfiguration. Versuche mal diesen Code; der sollte nur einmal ausführbar sein.

Mein modifizierte Version meines Codeschnipsels:
document.addEventListener('DOMContentLoaded', init);
var userLang, count;
function init() {
    count++;
    if(count<= 1) {
        userLang = navigator.language; // navigator.language reicht vollkommen aus. Es wird von den meisten Browsern unterstützt auch vom IE11
        switch(userLang) {
            case 'de':
                alert("Ihre Seite wird in deutsch geladen");
                document.location.href='https://domain.com';
            break;
            case 'en':
            case 'en-us': // Wird immer klein geschrieben nach ISO 3166-1
                alert("Die Seite wird in englisch geladen");
                document.location.href='https://domain.com/en/';
            break;
            case 'it':
                alert ("DIE SEITE wird in Italienisch geladen");
                document.location.href='https://domain.com/it/';
            break;
            default:
                alert ("This Site here is not available in your language");
            document.location.href='https://domain.com';    
        }
    }    
}

Ich könnte mir vorstellen wo das Problem liegen könnte. Wenn du auf jeder Seite den gleichen Code ausführst, bekommst du eine Schleife. Deswegen wäre es besser vorher abzufragen ob die entsprechende Seite schon geladen wurde. Hier ein weitere Codevbeispiel:
document.addEventListener('DOMContentLoaded', init);
var userLang, count, lang;
function init() {
    count++;
    if(count<= 1) {
        userLang = navigator.language; // navigator.language reicht vollkommen aus. Es wird von den meisten Browsern unterstützt auch vom IE11
        switch(userLang) {
            case 'de':
                checkURL('https://domain.com');
                lang = "Deutsch";                
            break;
            case 'en':
            case 'en-us': // Wird immer klein geschrieben nach ISO 3166-1
                lang = "Englisch";
                checkURL('https://domain.com/en/');
            break;
            case 'it':
                lang = 'Italienisch';
                checkURL('https://domain.com/it/');
            break;
            default:
                lang = "Standardsprache";                
                checkURL('https://domain.com');
        }
    }    
}
function checkURL(myURL) {
    let currentURL = window.location.href;
    if(currentURL != myURL) {
        alert("Die Seite mit " + lang + " wird geladen!");
        window.location.href = myURL;
    }
}

Ich hoffe das hilft dir weiter. Ich würde beide Versionen testen. Wobei die zweite Version dafür das ist wenn du auf jeder Seite diesen Code eingebunden hast.

Viel Erfolg

rzscout

Besten Dank, ich werde es abends versuchen.

Als Lösung markieren Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste