023 Übung Translator:
Deinen bisher programmierten »Nodes« hast Du mit description immer eine kleine Beschreibung in Englisch oder Deutsch beigefügt. Was aber, wenn jemand diese Sprachen nicht beherrscht? Darum ist es üblich, dem ganzen »Mod« eine Übersetzung zu spendieren. Dafür wird die Funktion »get_translator()« benötigt, sowie ein Ordner »locale« mit den Texten für die Übersetzung:
Vorbereitung: Download
Lade das benötigte Material »023 Übung Material« herunter und entpacke es.
CONFIG-DATEI BEARBEITEN:
Schließe zunächst »Minetest« komplett. Öffne dann die Datei »minetest.conf« im Minetest-Ordner:
Füge die folgende Codezeile ein:
language = de
»de« steht für Deutsch. Falls Du ins Englische übersetzen möchtest, nimm »en«. Jede andere Sprache – wie Plattdeutsch oder Klingonisch – ist natürlich auch erlaubt. Aber Du kannst in der »minetest.conf« immer nur eine Sprache angeben. Speichere die Änderungen.
Übersetzungen anfertigen:
Jetzt musst Du in Deinem Mod-Ordner einen Unterordner namens »locale« kreieren. In diesem legst Du zwei Dateien mit folgenden Namen an:
template.txt Dein_Modname.Sprachenkürzel.tr
»template.txt« zeigt ein Muster, wie die Übersetzung anzufertigen ist. Dann wissen andere Personen sofort, wie sie Deine Beschreibungen in ihre eigene Sprache übersetzen können. Die eigentliche Übersetzung erfolgt aber in der Datei »Dein_Modname.Sprachenkürzel.tr«. Ändere den Dateinamen, so dass die Datei heißt wie Dein »Mod« und ersetze »Sprachenkürzel« durch ein Kürzel der Zielsprache (also zum Beispiel »de« für Deutsch, »en« für Englisch).
Öffne »Dein_Modname.Sprachenkürzel.tr« und schreibe die Übersetzung nach folgendem Muster:
Öffne »Dein_Modname.Sprachenkürzel.tr« und schreibe die Übersetzung nach folgendem Muster:
My description in english=Meine Übersetzung ins deutsche
Bei der Übersetzung ins deutsche darfst Du alle Umlaute und Sonderzeichen verwenden. Eventuell musst Du aber den einen oder anderen Ausdruck »maskieren«.
Achtung: Vor und hinter dem Gleichheitszeichen darf kein Leerzeichen stehen. Denn auch das Leerzeichen wird als Bestandteil des zu übersetzenden Textes verstanden …
Unklar? Dann schau Dir im oben heruntergeladenen Material »023 Übung Material« den Ordner »locale« an.
Achtung: Vor und hinter dem Gleichheitszeichen darf kein Leerzeichen stehen. Denn auch das Leerzeichen wird als Bestandteil des zu übersetzenden Textes verstanden …
Unklar? Dann schau Dir im oben heruntergeladenen Material »023 Übung Material« den Ordner »locale« an.
get_translator() verwenden:
Bisher wissen Deine »Nodes« noch gar nicht, dass es eine Übersetzung für sie gibt. Öffne nach und nach alle Deine .lua-Dateien und füge ganz oben die folgende Codezeile ein:
local S = minetest.get_translator("Dein_Modname")
Dann veränderst Du noch bei jeder Node-Beschreibung die Zeile description wie folgt:
description = S("Beschreibung Deiner Node")
»Beschreibung Deiner Node« ist natürlich ein Platzhalter. Ersetze ihn durch Deine Beschreibung der »Node«. Der Text muss dabei exakt zu den Angaben passen, die Du im locale-Ordner verwendet hast, sonst wird die Übersetzung ignoriert.
Irgendetwas unklar? Dann schau in die Datei »Ausschnitt Quellcode translator.txt« aus dem oben heruntergeladenen Material »023 Übung Material«.
Irgendetwas unklar? Dann schau in die Datei »Ausschnitt Quellcode translator.txt« aus dem oben heruntergeladenen Material »023 Übung Material«.
Übersetzungen mit Variablen Mitten im Text:
Du hast schon kennengelernt, wie man Texte und Variablen mit zwei Punkten verbindet (»concatenate«):
local current_amount = 5 output = "You got " .. current_amount .. " points."
Aber, wie lässt sich ein solch zusammengesetzter String mit »get_translator()« übersetzen? Du könntest ihn in der .lua-Datei umständlich in mehrere Einzelteile zerlegen:
output = S("You got ") .. current_amount .. S(" points.")
Jetzt müsstest Du die Übersetzung in der .tr-Datei jedoch ebenfalls in Einzelteile zerlegen:
You got =Du hast points.= Punkte.
Das wäre nicht nur kompliziert, Du bekämest in unserem obigen Beispiel auch noch Probleme mit den gewünschten Leerzeichen vor und hinter der Zahl. Darum ist es möglich, einen Platzhalter zu verwenden:
local current_amount = 5 output = S("You got @1 points.", current_amount)
In die .tr-Datei schreibst Du jetzt:
You got @1 points.=Du hast @1 Punkte.
Du kannst auf diese Weise bis zu 9 Platzhalter verwenden, die Du von @1 bis @9 durchnummerierst:
local v1 = 5 local v2 = 10 local v3 = 25 output = S("You have achieved @1 out of @2 possible points in @3 seconds.", v1, v2, v3)
Du möchtest noch mehr wissen?
Musterlösung: so könnte es aussehen
Versuche zunächst, eine eigene Lösung für die gestellten Aufgaben zu finden. Falls Du aber alleine nicht weiterkommst, kannst Du Dir unsere Musterlösung herunterladen.
Beachte: Da es sich um eine Musterlösung handelt, kann Dein Quellcode am Ende ganz anders aussehen. Das fängt schon bei den Ordner- und Dateinamen an, die Du für Deinen »Mod« gewählt hast. Solange Dein »Mod« aber funktioniert, ist eine Lösung so gut wie die andere ...
Beachte: Da es sich um eine Musterlösung handelt, kann Dein Quellcode am Ende ganz anders aussehen. Das fängt schon bei den Ordner- und Dateinamen an, die Du für Deinen »Mod« gewählt hast. Solange Dein »Mod« aber funktioniert, ist eine Lösung so gut wie die andere ...
Verwendung dieser Inhalte - auch in Auszügen - im Schulunterricht, der Jugendarbeit und im Bildungsbereich mit dem Vermerk »© multimediamobil – Region Süd« erlaubt.