So, es gibt mal wieder Neuigkeiten.
Zum einen ist das html-frontend jetzt mehrsprachig.
Umgesetzt wird das Ganze über php und einen language-cookie.
Für jede Sprache gibt es eine php-Datei im „language“-Ordner und das Ganze ist wirklich selbst erklärend.
Ich habe das frontend in Deutsch und Englisch umgesetzt, eine Erweiterung um andere Sprachen ist sehr einfach.
Mehr dazu kommt die Tage noch in den Projekt-Spezifikationen.
Und zum anderen unterstütze ich nun einen neuen Schaltertypen – ab sofort kann man auch die Relais der SimpliBox IO mit der Zeitschaltuhr benutzen.
Derzeit werden nur die Ausgänge unterstützt, das wird sich aber ändern wenn ich demnächst Sensoren anbinde. Dann werden auch die Eingänge unterstützt.
Trotzdem wird die Palette der Schaltmöglichkeiten dadurch wieder etwas erweitert.
Das neue html-frontend kann wie immer hier begutachtet werden -> http://html-test-area.mausbiber-projekte.de/scheduler/
Den Sourcecode findet Ihr wie immer bei github -> https://github.com/Mausbiber/smartHome
Ich bin mal gespannt ob ich damit dem ein oder anderen weiter helfen kann und würde mich wie immer über Kommentare und Anregungen freuen, vor allem auch über neue Sprachdateien.
Hilfe benötigt:
Das richtet sich an die php- und javascript-Programmiere.
Vielleicht könnt ihr mir bei einem Problem helfen.
Derzeit ist es so das ich ein Cookie setze und dort die Sprache (de/en) ablege.
Für jede Sprache gibt es eine php-Datei in welcher die Wörter & Sätze in einem Array gespeichert sind.
Beim Start einer html-Seite überprüft ein php-Skript welchen Wert der Cookie hat und lädt die dementsprechende Sprachdatei.
Mit dem Array kann ich jetzt im html-Code über
<?php echo $lang['new_cycle_time']; ?>
die entsprechenden Wörter & Sätze ausgeben.
Das klappt bis auf eine Ausnahme auch wunderbar – die Echtzeit Uhr am oberen rechten Rand.
Die ist über eine Javascript-Funktion realisiert.
function zeitanzeige() { d = new Date (); h = (d.getHours () < 10 ? '0' + d.getHours () : d.getHours ()); m = (d.getMinutes () < 10 ? '0' + d.getMinutes () : d.getMinutes ()); s = (d.getSeconds () < 10 ? '0' + d.getSeconds () : d.getSeconds ()); if (getCookie('lang')=="de") { var monate = new Array ("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"); } else { var monate = new Array ("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); } /*var monate = new Array ("Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez");*/ document.getElementById("anzeige_uhrzeit").innerHTML = h + ':' + m + ' Uhr'; document.getElementById("anzeige_datum").innerHTML = d.getDate () + '. ' + monate[d.getMonth ()] + ' ' + d.getFullYear (); }
Und hier sieht man auch mein Problem.
Ich weiß nicht wie ich innerhalb einer Javascript-Funktion auf die Daten aus dem php-Array zugreifen kann.
Und weil ich das nicht weiß musste ich diese Notlösung wählen.
Für alle Sprachen außer Deutsch werden die englischen Monatsnamen benutzt.
Ich möchte vermeiden das man für neue Sprachen auch noch in dem Script arbeiten muss.
Also zu meiner Frage:
Hat jemand eine Idee wie ich innerhalb der obigen Javascript-Funktion auf die Daten aus den php-Sprachdateien zugreifen kann?
Hallo Cristopher,
das ist ein interessantes und sehr gut umgesetztes Projekt.
Ein Feature fehlt mir (oder ich habe es übersehen): In vielen Anwendungsfällen (bei mir Wohnraumbelüftung) hat man an Feiertagen andere Verhältnisse (andere Schaltzeiten oder in anderen Anwednungen kein Bedarf).
Es gibt ja Feiertage die jedes Jahr am gleichen Datum vorkommen (Weihnachten, Silvester…) und welche die in Abhängkeit zu Ostern (Gaußsche Osterformel) stehen (z.B. Aschermittwoch ist 46 Tage vor Ostern).
Viele Grüße
Michael
Da gibt es eine einfache Lösung:
Speichere deine Texte im JSON-Format. Die Datei kannst du im Javascript per „eval“ laden (muss also öffentlich erreichbar sein).
Auf PHP-Seite kannst du die gleiche Datei parsen. Ist kein Aufwand mit json_decode: http://php.net/manual/de/function.json-decode.php
Wenn du da Hilfe brauchst, helfe ich gern auf GitHub.
Hallo Cristopher,
Javascript hat dafür ein eigenes Mechanismus. Du brauchst also kein Array:
Beispiel:
var date = new Date()
options = { weekday: ‚long‘, year: ’numeric‘, month: ‚long‘, day: ’numeric‘ };
date.toLocaleDateString(’nl-NL‘, options) // (in meiner Fall)
Gibt: „zaterdag 16 april 2016“
date.toLocaleDateString(‚de-DE‘, options) // (in deiner Fall)
Gibt: „Samstag, 16. April 2016“
Wie wäre es wenn du für die Variableneue einfachen einen Ajax Call machst. Du könntest mit einem Call saß komplette PHP Array laden…
Kannst du mir das bitte etwas näher erklären?
Ich weiß gerade nicht genau wo von du redest.
Hallo Christopher, würde vorschlagen du nimmst die php daten und füllst die in den html code,bspw. so:
<input type="hidden" id="new_cycle_time" value="“ />
und im javascript kannst du dann auf den Wert zugreifen:
var new_cycle_time = document.getElementById(’new_cycle_time‘);
und so kannst du dann darauf zugreifen. Das Problem ist, dass PHP zuerst ausgefüht wird, er erzeugt das html und das ist dann statisch, dannach kannst du mit javascript auf die Inhalte des generierten html zugreifen. Hoffe das ist soweit verständlich.
Dasist doch eine schöne Entwicklung!
Du kannst in Javascript nicht auf PHP-Variablen zugreifen. Das liegt daran, dass PHP auf dem Server interpretiert und zu HTML umgewandelt wird.
Javascript jedoch wird erst im Browser interpretiert, und ist dadurch nur von HTML-Code umgeben.
Na, dann hoffe ich, das es irgendeine andere Lösung für das Problem gibt.
Weil die derzeitige ist nicht sehr schön.