Mit Hilfe von Javascript die Sprache der Webseite ändern
Arbeite ich an einem GUI-website, die mehrere Sprachen. Die ursprünglichen HTML-Dateien, die ich bekam, mit zu arbeiten, war Total statisch. Also falls eine übersetzung nötig war, ich hatte zu durchsuchen, alle Dateien, beachten Sie, wo einige Wörter oder Begriffe waren, sammeln Sie Sie alle mit der hand auf der übersetzungs-Abteilung und geben Sie diese übersetzungen in die neue Sprache-Dateien.
Da diese Dateien waren völlig statisch, es gemeint hat, zu übersetzen, ganze Abschnitte mehrmals. Nicht sehr effictient.
So, jetzt arbeite ich an eine Art Wörterbuch in Javascript, um den Austausch nur die in Bezug auf diese websites. Meist funktioniert das so:
var dicEnglish = {
term 1: "This is the English text"
Ref: "Another English text"
}
var dicFrench = {
term 1: "This is the French text"
Ref: "Another French text"
}
Enthält alle möglichen Inhalte, die geändert werden muss. Jeder Kandidat in den HTML-code bekommt ein class="dicRef" id="l_dicTag_#"
wie die Bezeichner, die ich die Scheibe hinunter, um die Wörterbuch-tag " und Austausch mit folgendem code:
var imgSrc = "en";
var ActiveDic;
var langSel;
if(window.name){
langSel=window.name;
}
else{langSel="English";
}
function LangChange(){
langClass = document.getElementsByClassName("dicRef");
var i = langClass.length;
var Start, Stop, idSrc, idDic;
var navText;
switch(langSel){
case "French":
langSel="French";
imgSrc = "en";
navText="Anglais";
break;
case "English":
case "Anglais":
default:
langSel="English";
imgSrc = "fr";
navText="French";
break;
}
ActiveDic="dic"+langSel;
window.name=langSel;
while(i--){
idSrc = langClass[i].id;
Start=idSrc.indexOf("_")+1;
Stop=idSrc.lastIndexOf("_");
idDic=idSrc.slice(Start,Stop);
if(window[ActiveDic][idDic]){
document.getElementById(idSrc).innerHTML=window[ActiveDic][idDic];}
else{
document.getElementById(idSrc).innerHTML="N/A";
}
}
if(document.getElementById("imgSel")){
document.getElementById("imgSel").src="../../img/"+imgSrc+".gif";
}
if (document.getElementById("l_SelLang1_1")){
document.getElementById("l_SelLang1_1").innerHTML=navText;
}
}
Das problem liegt in der Einzigartigkeit der id-Tags. Da einige Begriffe, die häufiger als einmal vorkommen können und einige generiert werden, die Theke ist gebraucht. Am Liebsten würde ich ommit der Theke, aber nicht finden können, jede andere id zu Sortieren, alle Ziel Begriffe und Ihren Inhalt ändern.
Da möchte ich sicher sein für die Zukunft würde ich lieber eine Lösung, die es möglich macht, Griff eine Dritte Sprache. Arbeit mit dem inneren HTML-müssten tag der gleiche Begriff mehrfach, einmal für jede Sprache.
Also gibt es irgendeine Möglichkeit den Gegner alle Bedingungen ausgetauscht werden, mehr effizient und leicht, oder einen besseren Weg, es zu tun? Ich kann nur mit client-side-Lösungen, also kein PHP und so weiter.
Vielen Dank im Voraus und hoffentlich war das nicht zu lang zum Lesen.
- Ich muss zugeben, da ich neu bin, um tiefer in HTML und komplett auf Javascript, das wusste ich nicht, weil W3C Schulen beginnt mit HTML 4. 😉 Was ist mit Abwärtskompatibilität. Specs sagen, es hat auf Arbeit mit dem IE 7 oder Firefox 3.5 (und höher natürlich). Ich finde widersprüchliche Informationen auf HTML 5 und alten Browsern.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie Daten-Attribute: die Tatsache, dass "HTML5-Attribute werden nicht unterstützt IE6 und IE7" bedeutet, dass Sie nicht bekommen, die
getAttribute()
- Methode oder diedataset
- Eigenschaft zum abrufen von/den Zugriff auf Sie. Aber können Sie immer noch abrufen, wie erklärt in dieser Beitrag.Sogar besser, können Sie mit jQuery .Daten() zur Unterstützung der vorherigen Versionen des IE.
Etwas in dieser Richtung funktionieren sollte:
Beispiel: https://jsfiddle.net/x93oLad8/4/
data
funktioniert nur mit json-kodierter Werte, so müssten Sie zitieren, und die Flucht der Inhalt des data-Attribut, in diesem Fall (das ist nicht zu bequem, wenn nur Skalare Werte).var key = $(this).dataSet(); console.log(key.translate);
. Mit diesem funktioniert es in allen Browsern und Geräten.Nichts für ungut an die anderen Beantworter, sondern speichern Sie den text in JavaScript-oder data-Attribute ist nicht gut für die Suchmaschinen oder deaktiviert Website-Besucher und bietet keine Vorteile, während Hinzugefügt unnötig komplizierten code. Die beste und einfachste Lösung meiner Meinung nach ist das verwenden von HTML-lang Attribut, und verwenden Sie JavaScript ein-und ausblenden der gewünschten Sprache. Auch diese Lösung, die anmutig abbaut, wenn also ein Website-Besucher hat JavaScript deaktiviert, es werden noch den Inhalt anzuzeigen. Hier ist meine Lösung:
HTML
jQuery
Dann würde ich empfehlen, hinzufügen von HTML5-Geolocation, um zu bestimmen, welche Sprache zu zeigen, zunächst auf der Grundlage der Benutzer-Standort in der Welt. Ich würde auch Fontawesome Symbol Sprache, um dem Benutzer anzuzeigen, können Sie die Sprache wechseln, in einer Weise, die verständlich für jedermann: http://fontawesome.io/icon/language/
Hier ist der funktionierende code-Beispiel auf CodePen: https://codepen.io/codepajamas/pen/ZejaQz?editors=1010
Hier ist ein weiteres Beispiel auf code-Stift mit einer select-Menü wechseln Sie zwischen 3
(oder mehr) Sprachen: https://codepen.io/codepajamas/pen/NjGOMV
Aktualisiert Vollständiges Beispiel mit Geolocation und Cookies
Habe ich mich sehr intensiv auf diese und erstellt eine aktualisierte Beispiel der Wechsel zwischen zwei Sprachen Chinesisch und Englisch (wenn Sie mehr als zwei Sprachen, die Sie haben würde, zu verstecken, alle Sprachen und es wird nur der ausgewählt ist anstatt toggle, so wie ich bin). Dieser code erkennt auch, wenn ein vorhandener cookie bereits gesetzt ist für die Sprache mit Hilfe von jQuery Cookie. Es wird auch überprüft, Ihre geolocation-wenn Ihr browser unterstützt es automatisch-Einstellung die Sprache auf Chinesisch, wenn Sie entweder in Taiwan oder China und standardmäßig auf Englisch in allen anderen Ländern. Der code ist kommentiert, so dass Sie sehen können, was jeder Schritt tut und hoffentlich in der Lage sein, um es zu ändern, um Ihre Bedürfnisse anzupassen. Hier ist es:
HTML
jQuery
Hinweis: dies erfordert die Verknüpfung nicht nur jQuery aber auch jQuery Cookie
Einer der Wege, um diese möglicherweise irgendeine Art von client-side templating-system für die Schnittstelle. So brauchen Sie nicht unnötig zu laden Sie Ihre HTML mit einer Reihe von data-Attribute detailliert die Anforderungen an die Sprachkenntnisse, sondern nur beschreiben, es einmal in der JavaScript-und ein paar Funktionen zu unterstützen, bei der übersetzung. Ich habe codiert, bis kurze Beispiel unten, um zu zeigen, was ich meine.
Hier das dictionary-Objekt. Es enthält alle die übersetzungen von Land-code. Das heißt, Sie brauchen nicht separate Wörterbücher für jedes Land. Dies ist wichtig, weil es bedeutet, dass dieses einzelne Objekt-Struktur sehr leicht in der übersetzung-Funktion, wie Sie in einem moment sehen werden. Es bedeutet auch, können Sie hinzufügen, wie viele Sprachen und übersetzungen, wie Sie möchten.
Dies ist unser Land-code, und es bezieht sich direkt auf die country-code-Schlüssel in unser dictionary-Objekt:
Den ersten unserer zwei Funktionen. Dieser nimmt eine Vorlage und eine Sprache und führt die übersetzung, Rückkehr was auch immer ist Links (in der Regel eine Art von HTML-wie in unserem Beispiel).
Die translate-Funktion nimmt das Wörterbuch, die Sprache, ein Wort und gibt den übersetzten Wort. Beachten Sie, dass dies viel einfacher mit einem Objekt der Land-übersetzungen.
Einige HTML. Hier ist unsere Vorlage (display: none) und das output-element. Hinweis: die Wörter in den geschweiften Klammern sind die, übersetzt werden.
Schließlich alles zusammen:
DEMO
Nun, natürlich werden Sie nicht haben, um diese Methode zu verwenden (es gibt Dutzende von JS templating engines da draußen), aber das templating ist besonders nützlich für sites, die mehrere Sprachen verwenden müssen. Viele tun dies auf dem back-end, aber, wie Sie sehen können, es kann leicht getan werden client-Seite auch.
Hoffe, das war nützlich und gegeben, Sie ein paar verschiedene Ideen, wie Sie vielleicht Ansatz Ihrer Lösung.
//Laden der Google-API-Umschrift
google.load("elements", "1", {
Pakete: "transliteration"
});