Übersetzungen

Hallo Zusammen,

ich würde gerne Inhalte eines Moduls übersetzen > also die Ausgabewerte in Variablen.
Für das Konfigurationsformular habe ich die gefunden wie die Labels etc übersetzt werden
können.

Hat jemand eine Idee, wie die Ausgabewerte für die Variablen übersetzen könnte (DE/EN/FR).

Danke und Grüsse,

Mike

Das geht so… Kommt aber erst zu IP-Symcon 4.3: SymconTest/module.php at master · paresy/SymconTest · GitHub

paresy

Passend dazu, kann es sein das bei GetConfigurationForm innerhalb des Rückgabewertes enthaltene Übersetzungen mit ‚translations‘ ignoriert werden?

Michael

Hallo Paresy,

geht es bei o.g. Funktion nicht auch um das Configurationform?

Mir geht es um die Variablenbezeichnung und Inhalte, welche z.B. im Webfront angezeigt werden…

Grüsse,

Mike

Mit Translate bekommst du den übersetzten String (aus local.json) zurück, damit geht das :slight_smile:

Michael

Sowas geht dann ja auch:


$this->RegisterVariableInteger("TestVariable", $this->Translate("Super cool variable!"), "~Intensity.100");

paresy

Hallo Michael,

ich habe länger nichts an dem Modulen gemacht und musste nun notgedrungen ein Modul anpassen. Dabei wollte ich die Übersetzungen nutzen, aber irgendwie scheint das nicht so auf Anhieb zu gehen, oder ich verstehe es noch nicht :D.

In der Doku zur Übersetzung steht

"translations": {
        "de": { 
            "Zu übersetzendes Wort 1": "Übersetzung ins Deutsche - Wort 1",
            "Zu übersetzendes Wort 2": "Übersetzung ins Deutsche - Wort 2"
        }
        "de_DE": {
            "Zu übersetzendes Wort 1": "Übersetzung ins Deutsche - Wort 1",
            "Zu übersetzendes Wort 2": "Übersetzung ins Deutsche - Wort 2"
        }

wobei hier nach der geschweiften Klammer } von „de“ ein Komma hingehört :wink:

Habe versucht dies in meinem Modul einzusetzen, sowohl für das Konfigurationsformular,
als auch für die Darstellung im Modul selber.

Auszug locale.json

"translations": {
        "de": { 
            "T_APIKEY": "API Key",
            "T_LATITUDE": "Latitude",
            "T_LONGITUDE": "Longitude",
            "T_ASL": "ASL Code",
           .....
},
        "en": { 
            "T_APIKEY": "API Key",
            "T_LATITUDE": "Latitude",
            "T_LONGITUDE": "Longitude",
            "T_ASL": "ASL Code",
         ......


Auszug form.json

{ "type": "ValidationTextBox", "name": "MBW_LATITUDE", "caption": "T_LATITUDE" },
    { "type": "ValidationTextBox", "name": "MBW_LONGITUDE", "caption": "T_LONGITUDE" },
    { "type": "ValidationTextBox", "name": "MBW_ASL", "caption": "T_ASL" },
   ....
{ "type": "Select", "name": "MBW_LANGUAGE", "caption": "T_LANGSELECT",
		"options": [
			{ "label": "T_LANG_DE", "value":"de" },
			{ "label": "T_LANG_EN", "value":"en" }
		]
	},

Auszug module.php

$days = array (
				"0" => $this->Translate("T_DAY_0"),
				"1" => $this->Translate("T_DAY_1"), 
				"2" => $this->Translate("T_DAY_2")
            );

mache ich da grundlegend was falsch oder muss ich die Sprache noch irgendwo setzen, welche im Konfigurationsformular vom Benutzer gewählt wird? Habe dazu auf Anhieb nichts gefunden.

Vielen Dank für eure Unterstützung,

Mike

Du nutzt keine Platzhalter, sondern immer Englisch.
Und dann wird von Englisch ins Deutsche übersetzt.
Also alles mit T_ wegwerfen und englisch betiteln.
Entsprechend gibt es auch keine Übersetzung in „en“ in der local.json.
Schau dir doch einfach andere Module oder die TestModule von Symcon an.
Sprache ist nicht einstellbar.
Der Dienst nutzt die Sprache vom Host. Also wenn du im Modul Translate benutzt.
Die Konsole nutzt die Sprache vom Browser bzw. dessen OS und übersetzt die KonfigForm.
Michael

Hallo Michael,

danke für die schnelle Antwort - jetzt bin ich komplett verwirrt :banghead:
Was ich möchte: Konfigurationsanzeige und Ausgaben in Variablen im Modul übersetzen
können.

ich habe mir einige Module angesehen, diese haben aber zumeist nur translate „de“
( SymconTest/TranslateTest at master · symcon/SymconTest · GitHub ) habe ich mir natürlich
angesehen…

Viele Grüsse,

Mike

Nur de reicht ja auch.
Default ist en. Da muss nix übersetzt werden :smiley:
Michael

Das hat jetzt echt gedauert, bis ich das kapiert habe … Ihr macht es einem auch zu einfach :smiley:
Dickes Lob für diese Idee, allerdings muss ich zugeben es war nicht auf den ersten Blick ersichtlich.

Vielen Dank für Deine Unterstützung.

Mike

Für diejenigen, die das ebenfalls probieren wollen, hier ein Tip:

form.json

{ "type": "Select", "name": "MBW_FORECASTDAYS", "caption": "Forecast Days",
		"options": [
			{ "label": "Today", "value":"0" },
			{ "label": "Today + Tomorrow", "value":"1" },
			{ "label": "Today + 2 Days (max)", "value":"2" }
		]
	}


module.php

"12" => $this->Translate("Covered with light rain"),
                "13" => $this->Translate("Covered with light snowfall"),
                "14" => $this->Translate("Mostly cloudy with rain"),
                "15" => $this->Translate("Mostly cloudy with snow"),
                "16" => $this->Translate("Mostly cloudy with light rain")


locale.json

"Forecast Days": "Tage anzeigen",
            "Only Today": "Nur Heute",
            "Today + Tomorrow": "Heute u. morgen",
            "Today + 2 Days": "Heute +2 Tage (max)"

....

"Covered with light rain": "Bedeckt mit leichtem Regen",
            "Covered with light snowfall": "Bedeckt mit leichtem Schneefall",
            "Mostly cloudy with rain": "Überwiegend bewölkt mit Regen",
            "Mostly cloudy with snow": "Überwiegend bewölkt mit Schneefall",
            "Mostly cloudy with light rain": "Überwiegend bewölkt mit leichtem Regen",


Ich habe das Problem das ich gerne Werte einer Variable übersetzen möchte. Also Rain = Regen, Snow = Schnee etc.

Ich nutze Translate in Forms usw, aber wie ich einen Wert übersetze habe ich noch nicht raus?

Schau Mal in der Doku.
Die Methode Translate kann beliebige Strings übersetzen.
Egal ob es nun Assoziationen von einem Profil oder Werte für SetValue sind.
Michael

Und die Übersetzung erstellst du in der locale.json

Uli

Gesendet von iPhone mit Tapatalk

Locale habe ich natürlich … aus der Doku werde ich leider nicht schlau. Die Beispiele beziehen sich ja alle auf Konfigurationselement und ich möchte gerne den Inhalt einer Variable dynamisch übersetzen (natürlich ist bekannt was kommt)?

Dann hast du an der falschen Stelle nachgesehen:
Translate — IP-Symcon :: Automatisierungssoftware
Übersetzt den übergeben Text und gibt die Übersetzung als Rückgabewert.
Somit kannst du mit dem übersetzten Text machen was du willst.
Michael

Es kommt natürlich darauf an, wie du den Wert verwendest. Du kannst per $this->Translate(GetValue(<variablenID>)) den übersetzten Text erhalten und dann damit machen, was du möchtest.

Wichtig ist, das die Übersetzung auch genau so vorhanden sein muss. Also der zu übersetztende Sting muss genau so in der Übersetzung stehen.
Wenn du in der Übersetzung zu Beispiel
„Days“ => „Tage“
Steh hast kannst du nicht direkt „5 Days“ übersetzen.

Dafür nutzt man dann sprintf und die Platzhalter %d oder %s wie auch im Beispiel bzw. BeispielModul.
Michael