Platzhalter für normen Text in HTML

D

dilemma

Ich muss eine HP in drei Sprachen (de, it, en) machen. Dazu will ich den Text aus einer externen Datei "auslesen" und in der HTML-Datei an geeigner Stelle anzeigen lassen:

<html>
<head></head>
<body>
<p>%TEXTit%</p>
</body>
</html>

Wobei %TEXTit% der eigentliche Text sein soll. Also der Text für die ganze Website soll in einer einzigen TXT-Datei sein und in dem HTML-Dateien sollen nur noch Platzhalter die Inhalte repräsentieren.

Der Inhalt der TXT-Datei könnte so ausshen:

TEXTde: Willkommen
TEXTen: Welcome
TEXTit: Benvenuti

Ich glaube, das lässt sich mit Javasript lösen, aber ich weiß noch nicht wie. Bin da eher ein Anfänger, aber das muss doch eine Standardproblemstellung sein. :rolleyes:
 
Mit JavaScript geht z.B. folgendes:

Du gibst jedem Element in deiner HTML Datei, das Text aenthaelt, eine ID:
Code:
<html>
  <head>
    <script type="text/javascript"></script> <!-- dazu spaeter mehr -->
    <script type="text/javascript">
      /* Js Code */
    </script>
  </head>
  <body>
    <h1 id="PageTitle">Titel der Homepage</h1>
    <p id="FirstP>
      Ein kleiner Testtext 
    </p>
  </body>
</html>
Du hast also eine "Standartsprache".
Sprich: Wenn JavaScript versagt (ausgeschalten, Textbrowser, aus welchen Gruenden auch immer) wird diese Sprache (in diesem Fall Deutsch) immer angezeigt.

Jetzt der JavaScript Teil:
Du erstellst dir nun mehrere "Sprachdateien", in die du jeweils ein Array packst.
In diesem Array stehen fuer alle id's, die uebersetzt werden sollen, der uebersetzte Text:
Code:
/* en.lang.js */
var aLang = new Array();
aLang['PageTitle'] = 'Your title';
aLang['FirstP']    = 'Some test text';
/* usw.. */

/* it.lang.js */
var aLang = new Array();
aLang['PageTitle'] = 'was weiss ich';
aLang['FirstP']    = 'testo texto';
Jetzt checkst du mit JavaScript, ob die gewuenschte Sprache von der Standardsprache abweicht (z.B. mit Cookies oder window.title.search).
Dann kommt dieser erste, leere <script> Tag dran:
Da rein laedst du dann die en.lang.js, oder it.lang.js und hast somit das Array mit der Uebersetzung zur Verfuegung.
Dieses Array musst du dann nur noch durchgehen und per getElementById und innerHTML alle zu uebersetzenden Texte ersetzen.
Code:
if (/* andere Sprache benutzen */) {
    window.document.getElementsByTagName('script')[0].src = sLang.'lang.js'; /* Language Datei laden */
    for (sInd in aLang) {
        window.document.getElementById(sInd).innerHTML = aLang[sInd];
    }
}
Beachte aber, dass du diesen Code erst nach onload ausfuehren solltest, sonst ist die HTML Datei warscheinlich noch nicht im DOM Tree von JS.

So, ich hoffe, das hilft dir weiter.
Ich hab das Script jetzt nicht getestet und kann auch nicht sagen, ob das so funktioniert, wie ich mir das vorstelle. Aber einen Versuch sollte es Wert sein :)

Ps: Danke, dass du eine abwechslungsreiche Frage stellst :)
 
Zuletzt bearbeitet von einem Moderator:
Hi...

aufjeden Fall ein cooles Bsp...

Aber ich bräuchte was, was zur Programmlaufzeit geändert werden kann.

Möchte gerne je nach klick auf einen Link eine andere Überschrift haben.

Wie löse ich das problem

mfg Jepse
 
Hmmm....

Ja das wäre eine Lösung. Doch ich habe eine Tabelle, die durch einen Layer
mitten auf die Seite geladen wird. Jetzt hat diese Tabelle auch eine Überschrift...

Kann man anstelle der Überschrift nicht auch einen Platzhalter setzen und je nach geladenem Inhalt die Überschrift ändern.

?
 
Achso, Überschrift, nicht Titel :)....ist halt noch früh am Morgen

Du kannst die Eigenschaft innerHTML dieser Überschrift jederzeit ändern, wie du willst. Gebe der Überschrift bspw. eine ID, damit du sie bequem ansprechen kannst, und dann ändere, sobald es vonnöten ist.
 
Könntest du mir ein kleines Bsp.: posten ?

Habe mir auch eins gebastelt ...

Aber leider funtioniert das nicht so ganz :)

:(
 
Die Überschrift:
Code:
<h1 id="ueberschrift">Eine Überschrift</h1>

Der Skriptausfruf(in dem Dokument, in welchem sich die geladene Tabelle befindet)...
Code:
<script type="text/javascript">
<!--
parent.document.getElementById('ueberschrift').innerHTML='Eine andere Überschrift';
//-->
</script>
Wenn das nicht funktioniert, müsstest du dies:
Doch ich habe eine Tabelle, die durch einen Layer mitten auf die Seite geladen wird
etwas konkreter beschreiben.
 
Zuletzt bearbeitet:
@Jepse

Aber ich bräuchte was, was zur Programmlaufzeit geändert werden kann.
Möchte gerne je nach klick auf einen Link eine andere Überschrift haben.

Habe Flaggen für de,en,it zum anklicken und das Sprachproblem vorerst so gelöst:

<head> <!-- Datei mit den Texten laden -->
<script src="http://www.domain.de/text.js" language="Javascript" type="text/javascript"></script>
</head>

<body> <!-- an erwünschter Stelle einen Text ausgeben -->
<script language="Javascript" type="text/javascript">
<!--
document.write(text0);
document.write(text1);
//-->
</script>
</body>

Die text.js könnte so aussehen:
text0="hoho";
text1="ist ziemlich einfach";


Allerdings braucht man pro Sprache jeweils eine HTML-Seite, hat aber dafür nur eine Datei mit den ganzen Texten (text.js).



@Fabian
Ich probiere aber trotzdem deine Variante aus, weil ich mir die doppelten HTML-Seiten ersparen möchte. Also ich stelle welche Sprache der Browser hat derzeit so fest:

<script language="Javascript" type="text/javascript">
var ie=document.all:0;
var dom=document.getElementById:0;
var l=(ie||dom)?navigator.browserLanguage:navigator.language;

function langInfo() {
if (l.indexOf('en')>-1) {
window.document.getElementsByTagName('script')[0].src = 'en.lang.js'; /* Language Datei laden */
for (sInd in aLang) window.document.getElementById(sInd).innerHTML = aLang[sInd];
}
else if (l.indexOf('de')>-1) {
window.document.getElementsByTagName('script')[0].src = 'de.lang.js'; /* Language Datei laden */
for (sInd in aLang) window.document.getElementById(sInd).innerHTML = aLang[sInd];
}
else if (l.indexOf('it')>-1) {
window.document.getElementsByTagName('script')[0].src = 'it.lang.js'; /* Language Datei laden */
for (sInd in aLang) window.document.getElementById(sInd).innerHTML = aLang[sInd];
}
}
onload=langInfo;

</script>

Funktioniert soweit im IE, dass immer der Text aus der de.lang.js genommen wird, aber im Mozilla Firefox kommt nur der Text direkt aus dem body. Habe das mit dem window.title.search noch nicht überrissen. Weiters weiß ich nicht, wie

Wie würde man die Sprache IE unspezifischer abfragen können?
 
@dilemma

Das Austauschen der src von <script>-Elementen funktioniert im Mozilla leider bisher nicht.

Alternativ könntest du alle Sprachen innerhalb einer einzigen js-Datei in assoziativen Arrays speichern, und je nach Sprache die jeweiligen Strings aus einem anderen Array holen.
 

Neue Beiträge

Zurück