4.1k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von
Hallo - ich bin neu :-) neu hier im Forum und neu im Thema Javascript. Ich brauche aber Hilfe - zu einem Thema wo es schon hunderte Beiträge gibt, mit denen ich aber nicht klar komme.

Ich habe ein Dropdown (alles stark reduziert) - wo ich das Ergebnis der Auswahl (value) in das unten (ganz unten) stehende <script> übernehmen möchte.

<script language="javascript">
function doSelect()
{
var selection = document.getElementById("mmoid");
var textfeld = document.getElementById("mmotxt");
textfeld.value = selection.value;
}
</script>

<select id="mmoid" onChange="doSelect()">
<option value="">SELECT LANGUAGE .</option>
<option value="en">English</option>
<option value="de">German</option>
</select>

Das Ergebnis der vorstehenden Auswahl (ohne Button oder ähnliches) soll in folgendes Script übernommen werden:

<script src="//translate.js?cb=section&hl=HIERHER"></script>

Danke im Voraus. Grüsse aus dem wilden Süden.

18 Antworten

0 Punkte
Beantwortet von
nun kenn ich natürlich das untere Script nicht. Nehmen wir mal an, dort gäbe es eine Variable foo, die den Wert enthalten soll, dann könntest du das obere Script wie folgt ändern:

erstens statt

<select id="mmoid" onChange="doSelect()">
besser

<select onchange="doSelect(this)">

(die ID ist überflüssig, du kannst dem Script mit dem Schlüsselwort this mitteilen, von wo onchange feuert)

dann

<script type="text/javascript">
function doSelect(auswahl)
{
var textfeld = document.getElementById("mmotxt");
foo=textfeld.value = auswahl.value;
}
</script>


(Beachte die Scripteinleitung, deine ist falsch!)

Weitere Hilfe ist mit dem bisschen Quellcode nicht möglich. Sinnvoller ist es übrigens beide Scriptteile in einer externen JS-Datei zusammenzufassen, das hebt die Übersicht.
0 Punkte
Beantwortet von
Hallo Gast_42,

zunächst vielen Dank für Deine Mühe und Erklärungen. Wahrscheinlich habe ich mich nicht richtig ausgedrückt.

Das Ergebnis (value) der Auswahl ......
<option value="en">English</option>
<option value="de">German</option>
</select

soll in DIESEN script-string (in die Variable HIERHER)
<script src="//translate.js?cb=section&hl=HIERHER"></script

in der kompletten Länge ist der script-string (oder wie heisst das richtig?) dafür da, die Übersetzung entsprechend der Auswahl (select) via google zu ermöglichen. Übersetzt wird dabei nicht die komplette Seite sondern nur ein Textteil. Bisher klappt das super - von Deutsch nach Englisch - und jetzt möchte ich eben vorstehende Auswahl ergänzen, um die Übersetzung auch in andere Sprachen zu ermöglichen.

Liebe Grüsse aus dem wilden Süden ;-)
0 Punkte
Beantwortet von mixmax Experte (2.2k Punkte)
also was wohl ein kleines Problem für viele Browser wird, nachträglich die Adresse von "<script src="//translate.js?cb=section&hl=HIERHER"></script"
zu ändern.

viele Browser werden das falsch interpretieren - du könntest für eine Dynamische änderung auf techniken wie AJAX zurückgreifen aber das wird vermutlich dann zu kompliziert.

Am besten wäre es du machst ein Reload der Seite oder lädst ein Script über ein unsichtbares IFrame...

(Den FORM und /FORM must irgendwohin packen wo ein Zeilenumbruch nicht stört, sonst ist dein auswahlfeld immer in einer eigenen Zeile)

<form method="GET" target="iframename" action="scriptiniframe.html" id="LANSELFORM">

<input type="hidden" name="cb" value="section" />
<select name="hl" onChange="doSelect()">
<option>SELECT LANGUAGE .</option>
<option value="en">English</option>
<option value="de">German</option>
</select>
<script>
<!--
function doSelect() {
document.forms['LANSELFORM'].submit();
}
//-->
</script>
<noscript>
Sprachauswahl geht nur mit eingeschalteten Javascript! (bäh)
</noscript>
</form>
<iframe name="iframename" width=0 height=0 style="visibility:hidden"></iframe>


beachte das du in der aufgerufenen html-datei in einem unterframe bist und alles was das Javascript tun soll also einmal in richtung parent-fenster gehoben werden muss.


*nachtrag*
ach so den Zweck hab ich etwas falsch verstanden... aber vielleicht hilft dir die alternative über ein Iframe-objekt ja doch weiter. Ist zumindest der sicherste weg das verschiedene browser das kappieren.
0 Punkte
Beantwortet von
danke MixMax - leider hilft mir das nicht wirklich. Ich oute mich mal - ich habe keine Ahnung vom dem was Du mir da geschrieben hast. Ich bin eher ein "Schöngeist" als ein Programmierer. Es ist durchaus möglich, dass eine Kuh mehr Ahnung vom Fliegen hat, als ich vom Programmieren. Ich habe (nur) versucht, eine Google Vorlage an meine Bedürfnisse anzupassen - hier nochmals das gesamte script zum besseren Verständnis:

<!-- Anfang - dieser Teil ist von Google -->

<script>
function googleSectionalElementInit() {
new google.translate.SectionalElement({
pageLanguage: 'auto',
sectionalNodeClassName: 'goog-trans-section',
controlNodeClassName: 'goog-trans-control',
background: '#212144'
}, 'google_sectional_element');
}
</script>

<!-- Ende Google - Anfang Sprachauswahl -->

<script type="text/javascript">
function doSelect(auswahl)
{
var textfeld = document.getElementById("mlotxt");
foo=textfeld.value = auswahl.value;
}
</script>
<select onchange="doSelect(auswahl)">
<option value="">SELECT LANGUAGE .</option>
<option value="en">English</option>
<option value="de">German</option>
<option value="ro">Romania</option>
<option value="cs">Czech</option>
</select>

<!-- Ende Sprachauswahl - jetzt Übergabe der Auswahl (value) an den Script-String. Der Script-String ist ebenfalls von Google. Geändert werden kann nur das letzte Wort. Derzeit heist es "auto" idealerweise sollte "auto" eine Variable sein, der das Ergebnis der Sprachauswahl (value) übertragen wird -->

<script src="//translate.google.com/translate_a/element.js?cb=googleSectionalElementInit&ug=section&hl=auto"></script>

<!-- dieser TEil ist ebenfalls von Gogle - hier erfolgt die Übersetzung des Textteiles -->

<div class="goog-trans-section">
<div class="goog-trans-control">
</div>
<br/>
"das ist de Text der übersetzt werden soll".
</div>

<!-- ENDE -->

Wenn das zu lösen ist, bitte ich um Hilfe - danach werde ich wieder meine Finger von derartigen Sachen lassen - versprochen ;-)

Liebe Grüsse aus dem wilden Süden
0 Punkte
Beantwortet von mixmax Experte (2.2k Punkte)
warum finger von lassen - versuch macht klug...

also einfach mal auf &quot;muss nicht schön sein&quot;

Hm... das klappt doch super schon...

du müstest nur bei den Beiträgen (am besten DIREKT um den zu übersetzenden Text)

[code]&lt;div class=&quot;goog-trans-section&quot;&gt;
&lt;div class=&quot;goog-trans-control&quot;&gt;
&lt;/div&gt;
[/code][Ausgabe des Forumsbeitrags]
[code]&lt;/div&gt;[/code]

drumherum bauen. den Rest läßt du wie im Original.

Das Script wird dir dann an den Anfang jedes Beitrags einen &quot;Translate&quot; Link anbieten und die Sprache kannst du halt in besagten Dropdown auswählen...

Alles einschließlich das &quot;&lt;script src=&quot;//translate...&quot; baust du einfach als teil des Menus ins forum ein. (z.B. könnte man das hier bei dem rechten Menu dazubauen)
0 Punkte
Beantwortet von
vielen Dank MixMax für Deine Zeit und Deine Mühe. Sicherlich macht Versuch klug - aber für das bisschen Script habe ich jetzt eine Woche benötigt und musste mich durch unendlich viele (zum Teil sehr sinlose) Seiten durchlesen, um zu verstehen was ich da mache. Weitestgehend habe ich es auch verstanden - aber eben nicht vollständig.

Werde jetzt mal versuchen, Deine Ansätze umzusetzen (was für mich als Software-Legastheniker eine echte Herausforderung ist) und vielleicht bin ich am Ende noch schlauer ... ;-)

Wenns nix wird melde ich mich noch mal :-)))

Danke und Grüsse aus dem wilden Süden.
0 Punkte
Beantwortet von
Hier bin ich noch mal ......

du müstest nur bei den Beiträgen (am besten DIREKT um den zu übersetzenden Text)
<div class="goog-trans-section">
<div class="goog-trans-control">
</div>
[Ausgabe des Forumsbeitrags]
</div>
drumherum bauen. den Rest läßt du wie im Original.

hatte ich so schon.


Das Script wird dir dann an den Anfang jedes Beitrags einen "Translate" Link anbieten und die Sprache kannst du halt in besagten Dropdown auswählen...
kann ich eben NICHT - der Translate Link kommt (und die Auswahl auch) ich kann jedoch auswählen was ich will - übersetzt wird nur von Deutsch nach Englisch ....


Alles einschließlich das "<script src="//translate..." baust du einfach als teil des Menus ins forum ein. (z.B. könnte man das hier bei dem rechten Menu dazubauen)
habe ich natürlich gemacht, bzw. hatte ich schon ...

Gehen wir noch mal zurück zum Anfang .... wie kann ich in
"<script src="//translate...section&hl=auto"></script>" die Variable "auto" mit dem value der Auswahl ersetzen - denn ohne das wird die Übersetzung immer gleich ablaufen .... vom Deutschen ins Englische - oder wenn ich anstatt "auto" z.B. "ro" schreibe dann übersetzt er mir von Deutsch nach Rumänisch.

Viele Grüsse
0 Punkte
Beantwortet von mixmax Experte (2.2k Punkte)
hm... ich sehe was du meinst... und du hast recht er übersetzt immer nach englisch

ok das wird dir vielleicht gefallen... :


<select id="LangSelector" onChange="doSelect(this)">
<option value="en">English</option>
<option value="de">German</option>
<option value="ro">Romania</option>
<option value="cs">Czech</option>
</select>
<script>
<!--
function googleSectionalElementInit() {
new google.translate.SectionalElement({pageLanguage: 'auto',sectionalNodeClassName: 'goog-trans-section',
controlNodeClassName: 'goog-trans-control',background: '#212144'}, 'google_sectional_element');
}
var JSPath = "//translate.google.com/translate_a/element.js?cb=googleSectionalElementInit&ug=section&hl=";
function doSelect(auswahl) { // Beim wechsel der Sprache wird nun über die Adresszeile die Seite neu aufgerufen.
NewGetVars = "?";
var args = document.location.search.substr(1).split('&');
for (ai=0;ai<args.length;ai++) {
var Arg = args[ai].split('=');
if (Arg.length == 2) {
if (Arg[0]!='hl') {
if (NewGetVars.length > 1)
NewGetVars += "&";
NewGetVars += args[ai];
}
}
else {
if (NewGetVars.length > 1)
NewGetVars += "&";
NewGetVars += args[ai];
}
}
if (NewGetVars.length > 1)
NewGetVars += "&";
document.location.search = NewGetVars+'hl='+auswahl.value;
}
var MyLanguage = getLanguage();
document.write('<script src="'+JSPath+MyLanguage+'"></script>');
document.getElementById('LangSelector').value=MyLanguage;
function getLanguage() { // prüfe ob wir bei diesem Seitenaufruf eine bevorzugte Sprache haben...:
var args = document.location.search.substr(1).split('&');
for (var ai=0;ai<args.length;ai++) {
var Arg = args[ai].split('=');
if (Arg.length == 2) {
if (Arg[0]=='hl') {
return Arg[1];
}
}
}
return 'en';
}
//-->
</script>
<div class="goog-trans-section">
<div class="goog-trans-control">
</div>
<br/>
"das ist de Text der übersetzt werden soll".
</div>


das Script muss nach dem Auswahlfeld stehen, da es die aktuell gewählte sprache beim seitenaufbau da auch einstellt.
19:54 Uhr
habe gerade noch 2 fehler korregiert falls dein Forum selber auch mit GET-Variablen arbeitet hätte das zu fehlern geführt
0 Punkte
Beantwortet von
Hallo MixMax - ich habe Deine erste Version sofort ausprobiert - Forum war nicht mehr zu laden. Dann habe ich es im HTML Editor ausprobiert .... ging auch nicht. Dann kam Deine zweite Version .... habe ich natürlich auch sofort im HTML Editor ausprobiert .... geht nicht - weder unter FF noch unter IE ....

Muss jetzt leider dringend weg.

Probiere es huete Nacht noch mit der zweiten Version im Forum - vielleicht klappts ja da.

Ich danke Dir jedenfalls sakrisch für Deine Mühe !

Grüsse aus dem wilden Süden, Christian
0 Punkte
Beantwortet von mixmax Experte (2.2k Punkte)
ich hatte das zuvor hier getestet:

http://ro.shacknet.nu/test/

es funktioniert, eventuell noch prüfen ob was falsch eingebaut wurde.

und wie sieht es aus mit vollständiger übersetzung?

<script src="/pagefiles/default.js" language="javascript"></script>
<div id="google_translate_element"></div><script>
function googleTranslateElementInit() {
new google.translate.TranslateElement({
pageLanguage: 'de',
includedLanguages: 'de,en,ru,ro',
multilanguagePage: true,
layout: google.translate.TranslateElement.InlineLayout.SIMPLE
}, 'google_translate_element');
}
</script><script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>


Dies irgendwo mit ins Forum einbauen läßt eine vollständige übersetzung der aktuellen seite per dropdown zu.
...