ursus contionabundo: Getestet und repariert. (Aber immer noch "suboptimal")

Beitrag lesen

So. Gerrit. Mich wundert ja, dass Du Dich mit den vorgestellten Lösungen offenbar gar nicht wirklich befasst. Sonst wäre Dir aufgefallen, dass mein Schnellschrieb von gestern den einen oder anderen kleinen Fehler enthält.

Hier also der reparierte und getestete Code der "selectLanguage.js", die, wie gezeigt, nur eingebunden werden muss. Einfacher geht es wirklich nicht.

// file: [DOCUMENT_ROOT]/selectLanguage.js

function selectLanguage () {

    // Selbst festlegen    
    var languages = ['de', 'en', 'fr'];
    var defaultLang   = 'en'; // languages[1] geht auch…
    // Ab hier nichts mehr ändern


    var newUri = false;  
    for ( var i=0; i < languages.length; i++ ) {
        if ( navigator.language.indexOf( languages[i] ) > -1 ) {
            newUri = constructNewUri( languages[i] );
        }
    }
    if ( false == newUri ) {
        newUri = constructNewUri( defaultLang );
    }
    document.location.href = newUri;
}


function constructNewUri( language ) {

    var uri =  new URL( document.location.href );
    newUri = uri.protocol + '//';

    if ( uri.username ) {
        newUri = newUri + uri.username;
        if ( uri.password ) {
            newUri = newUri + ':' + uri.password;
        }
    }

    if ( uri.username || uri.password ) {
        newUri = newUri + '@';
    }

    newUri = newUri + uri.host;
    
    if ( uri.port ) {
        newUri = newUri + ':' + uri.port;
    }

    newUri = newUri + '/' + language;

    if ( uri.pathname ) {
        newUri = newUri + uri.pathname;
    }

    if ( uri.search ) {
        newUri = newUri + uri.search;
    } 

    if ( uri.hash ) {
        newUri = newUri + uri.hash;
    }
    
    return newUri;
}

selectLanguage();