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:
Code:
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
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
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:
Code:
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:
Code:
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
"Gerne dürft ihr mir eine gute Bewertung da lassen aber auch gegenüber Kritik bin ich offen" Angel
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:
Code:
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:
Code:
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.
Zitieren


Gehe zu:


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