Wie man Mods mit mehreren Konstruktionen und entsprechend unterschiedlichen Beschreibungen korrekt in mehreren Sprachen ausstattet, möchte ich anhand des RInglokschuppen mit Drehscheibe zeigen, der zusätzlich noch ein paar Assets enthält.
Im Zentrum steht dabei die Datei "strings.lua" im Hauptverzeichnis einer Modifikation mit folgendem Aufbau:
function data()
return {
Sprache1 = {
[Schlüssel1] = "Text 1 Sprache 1",
[Schlüssel2] = "Text 2 Sprache 1",
...
},
Sprache2 = {
[Schlüssel1] = "Text 1 Sprache 2",
[Schlüssel2] = "Text 2 Sprache 2",
...
},
}
end
Display More
Die data()-Funktion der "strings.lua" gibt eine Auflistung der von der Modifikation unterstützten Sprachen zurück, wobei jede Sprache wiederum aus einer Auflistung von Schlüssel-Wert-Paaren besteht. Über den Schlüssel und der Spracheinstellung des Spiels wird der anzuzeigenden Wert in der UI von Transport Fever ermittelt.
Manche Modder benutzen für den Schlüssel der Text-Resourcen lua-Variablen, andere wiederum - so auch ich - Zeichenfolgen. Die Benutzung von Zeichenfolgen ist vorzuziehen, da sie unkritisch gegenüber Änderungen seitens UG sind - wie der "Usability"-Patch zeigte.
Anfangen tue ich mit dem generellen Namen und der generellen Beschreibung der Modifikation, die im Ingame-Mod-Manager von Transport Fever und im Steam-Workshop angezeigt wird. Daran beteiligt sind die Dateien "strings.lua" und "mod.lua" im Hauptverzeichnis der Modifikation. Hier soll außer der Bezeichnung der Modifikation eine mehr oder weniger umfangreiche Beschreibung der selbigen angezeigt werden. Dazu lege ich für den Namen den Schlüssel name und für die Beschreibung den Schlüssel desc (Description) fest. Zeichenfolgen, die als Schlüssel für Text-Resourcen in der "strings.lua" dienen sollen, müssen in runden Klammern geschrieben werden und mit einem Unterstrich beginnen. Siehe Zeile 7 und 8:
function data()
return {
info = {
minorVersion = 0,
severityAdd = "NONE",
severityRemove = "CRITICAL",
name = _("name"),
description = _("desc"),
authors = {
...
So sehen alle meine "mod.lua"-Dateien bezüglich Namen und Beschreibung aus. Die Zeichenfolgen-Schlüssel sind für jede Modifikation lokal, d.h. Modifikationen können die selben Schlüssel verwenden, ohne sich gegenseitig zu beeinflussen.
Hier nun ein Auszug aus der "strings.lua" mit den korrespondierenden Texten:
function data()
return {
de = {
["name"] = "Ringlokschuppen mit Drehscheibe",
["desc"] =
"Fügt dem Spiel einen Ringlokschuppen mit Drehscheibe hinzu. \n\n" ..
"Zu diesem Mod gehören noch einige Asset-Gebäude: Verwaltung, Schuppen, Schornstein. \n\n" ..
"Wie die Drehscheibe funktioniert könnt ihr der Videoanleitung entnehmen. \n\n" ..
"Bitte haltet Rücksprache mit mir, falls Ihr Dateien weiterverwenden wollt.\n" ..
"Das Hochladen dieser Modifikation auf anderen Seiten ist nicht erwünscht. \n" ..
"Für Schäden an Soft- und Hardware übernehme ich keine Verantwortung. \n",
...
},
en = {
["name"] = "Roundhouse with turntable",
["desc"] =
"Adds a roundhouse with turntable to the game. \n\n" ..
"To this mod belong also some asset buildings: administration, shed, chimney.\n\n" ..
"How the turntable works you can see the video-instruction.\n\n" ..
"Please keep in contact with me, if you want to reuse files. \n" ..
"Uploading this modification on other pages is not welcome. \n" ..
"I accept no responsibility for damages to software and hardware. ",
...
},
}
end
Display More
Und so sieht es im Ingame-Mod-Manager aus:
Analog wird die Beschreibung in der entsprechenden Sprache im Steam-Workshop angezeigt.
Belässt man es jetzt dabei, dann würde diese Beschreibung auch in einem entsprechend großen Popup-Fenster im Bau-Menü von Transport Fever gezeigt. Dies empfinde ich als störend!
Deshalb bekommt eine jede Konstruktion der Modifikation ihren eigenen Namen und Beschreibung. Hier der entsprechende Ausschnitt der con-Datei des Lokschuppens:
function data()
return {
type = "RAIL_DEPOT",
description = {
name = _("name_depot"),
description = _("desc_depot")
},
availability = {
yearFrom = 1892,
},
...
Display More
An den Namens- und Beschreibungs-Schlüssel aus der "mod.lua" hänge ich einfach einen passenden Begriff an, hier "depot". Die "strings.lua" sieht dann so aus:
function data()
return {
de = {
["name"] = "Ringlokschuppen mit Drehscheibe",
["desc"] =
"Fügt dem Spiel einen Ringlokschuppen mit Drehscheibe hinzu. \n\n" ..
"Zu diesem Mod gehören noch einige Asset-Gebäude: Verwaltung, Schuppen, Schornstein. \n\n" ..
"Wie die Drehscheibe funktioniert könnt ihr der Videoanleitung entnehmen. \n\n" ..
"Bitte haltet Rücksprache mit mir, falls Ihr Dateien weiterverwenden wollt.\n" ..
"Das Hochladen dieser Modifikation auf anderen Seiten ist nicht erwünscht. \n" ..
"Für Schäden an Soft- und Hardware übernehme ich keine Verantwortung. \n",
["name_depot"] = "Ringlokschuppen mit Drehscheibe",
["desc_depot"] = "Wird benötigt, um Züge zu kaufen und zu verkaufen.",
...
},
en = {
["name"] = "Roundhouse with turntable",
["desc"] =
"Adds a roundhouse with turntable to the game. \n\n" ..
"To this mod belong also some asset buildings: administration, shed, chimney.\n\n" ..
"How the turntable works you can see the video-instruction.\n\n" ..
"Please keep in contact with me, if you want to reuse files. \n" ..
"Uploading this modification on other pages is not welcome. \n" ..
"I accept no responsibility for damages to software and hardware. ",
["name_depot"] = "Roundhouse with turntable",
["desc_depot"] = "Used to buy and sell trains.",
...
},
}
end
Display More
Im Spiel sieht es dann so aus:
Zum Abschluss die vollständige "strings.lua" mit den Einträgen für die Assets und Texten für UI-Parameter, die im Spiel in englisch geschrieben sind und somit in der "strings.lua" nur Einträge für die deutsche Übersetzung benötigen:
function data()
return {
de = {
["name"] = "Ringlokschuppen mit Drehscheibe",
["desc"] =
"Fügt dem Spiel einen Ringlokschuppen mit Drehscheibe hinzu. \n\n" ..
"Zu diesem Mod gehören noch einige Asset-Gebäude: Verwaltung, Schuppen, Schornstein. \n\n" ..
"Wie die Drehscheibe funktioniert könnt ihr der Videoanleitung entnehmen. \n\n" ..
"Bitte haltet Rücksprache mit mir, falls Ihr Dateien weiterverwenden wollt.\n" ..
"Das Hochladen dieser Modifikation auf anderen Seiten ist nicht erwünscht. \n" ..
"Für Schäden an Soft- und Hardware übernehme ich keine Verantwortung. \n",
["name_depot"] = "Ringlokschuppen mit Drehscheibe",
["desc_depot"] = "Wird benötigt, um Züge zu kaufen und zu verkaufen.",
["name_chimney"] = "Ringlokschuppen Schornstein",
["desc_chimney"] = "",
["name_shed"] = "Ringlokschuppen Lagerschuppen",
["desc_shed"] = "",
["name_officebuilding"] = "Ringlokschuppen Verwaltungsgebäude",
["desc_officebuilding"] = "",
["Number of roads on the right side"] = "Anzahl Stände rechts",
["Number of sheds on the right side"] = "Anzahl Schuppen rechts",
["Number of roads on the left side"] = "Anzahl Stände links",
["Number of sheds on the left side"] = "Anzahl Schuppen links",
["none"] = "keine",
},
en = {
["name"] = "Roundhouse with turntable",
["desc"] =
"Adds a roundhouse with turntable to the game. \n\n" ..
"To this mod belong also some asset buildings: administration, shed, chimney.\n\n" ..
"How the turntable works you can see the video-instruction.\n\n" ..
"Please keep in contact with me, if you want to reuse files. \n" ..
"Uploading this modification on other pages is not welcome. \n" ..
"I accept no responsibility for damages to software and hardware. ",
["name_depot"] = "Roundhouse with turntable",
["desc_depot"] = "Used to buy and sell trains.",
["name_chimney"] = "Roundhouse chimney",
["desc_chimney"] = "",
["name_shed"] = "Roundhouse storage shed",
["desc_shed"] = "",
["name_officebuilding"] = "Roundhouse office building",
["desc_officebuilding"] = "",
},
}
end
Display More
Weitere Information zur "mod.lua" und "strings.lua" könnt ihr hier mod.lua und strings.lua - Erklärung und Inhalt von @Xanos finden...