Also noch mal zum Mitschreiben:
Es handelt sich vermutlich um einen Bug, der verhindert, dass die Übersetzung überhaupt geladen wird. Minetest ist grundsätzlich schon übersetzbar. Aber in der Vergangenheit muss es wohl eine Regression gegeben haben, die das ganze Übersetzungssystem lahmgelegt hat.
Und ja, ich kann deinen Bug voll reproduzieren, bei mir ist auch alles nur auf Englisch, statt auf Deutsch.
Ich kann deinen Frust schon gut verstehen.
Das Übersetzungssystem scheint bei Minetest bisher ohnehin nicht so wirklich ernst genommen zu sein. :-(
So wie es aussieht, wird wenigstens an der Behebung des Bugs halbwegs gearbeitet:
https://github.com/minetest/minetest/pull/2176Hoffentlich tut sich da was.
Linuxdirk wrote:Es müssten einfach pauschal alle Strings, die irgendwo ausgegeben werden durch eine Funktion gejagt werden, die prüft, ob dieser String anhand der geladenen Übersetzungsdateien übersetzt werden kann, und zwar unabhängig, ob der String oder die Übersetzungsdatei von der Engine kommt, im Minetest-Code steckt, aus den default-Mods stammt, oder aus irgendeinem Subgame oder einer selbst-installierten Mod heraus angezeigt werden soll.
Nein, das ist grundsätzlich eine schlechte Idee. Du vergisst, dass natürliche Sprachen wie Deutsch oft kontextsensitiv sind. Das heißt, ein Wort oder ein Satz oder ein Ausdruck X hat nicht zwangsläufig eine einzige Bedeutung. Nehmen wir zum Beispiel das Wort »gehen«. Ich kann gehen, und zwar mit meinen Beinen. Teig kann auch gehen, aber damit ist ein anderer Vorgang gemeint. Andere Sprachen haben für die beiden Konzepte vielleicht verschiedene Wörter, also müssen Wörter, obwohl sie gleich im Deutschen sind, als seperate Strings betrachtet werden.
Bei einem vernünftigen Übersetzungssystem muss es also immer möglich sein, einen Kontext anzugeben. Gettext z.B. kann das, und steht im Übrigen auch nicht alleine damit da.
Und jetzt stell dir vor, es gibt in der Engine einen String, und einen anderen String in einer Mod, der aber zufällig im Englischen genau gleich zu dem String aus der Engine ist. Jedoch ist dieser String anders gemeint.
Zweitens halte ich es für eine noch schlechtere Idee, alle Strings aus allen Möglichen Quellen in eine einzige Funktion zu holen und in einer einheitlichen Datenbank abzugleichen. Mit diesem Modsystem ist aber eine einheitliche Datenbank schierer Wahnsinn, insbesondere, wenn man das Kontextproblem bedenkt. Mods können nach belieben installiert und wieder entfernt werden, und genau daran scheitert eine zentrale Übersetzungsdatei schon.
Jetzt einfach jeden beliebigen String, der aus einer Mod kommt, blind durch die Übersetzerfunktion zu jagen, und dann zu glauben, dass da was vernünftiges rauskommt, halte ich für naiv. Woher soll die Funktion denn bitte schön erkennen, welche Strings sie vielleicht gar nicht übersetzen soll? Es gibt einige Strings, die nur zum internen Gebrauch benutzt werden; sie dürfen überhaupt nicht übersetzt werden. Solche Strings kann man aber trotzdem ausgeben.
Außerdem lässt du vollkommen außer acht, dass Mods völlig serverseitig sind. Man muss also die Strings nicht nur einfach übersetzen, sondern man muss auch zusehen, wie die _übersetzten_ Strings zu den Clients kommen, und zwar für jeden Client bitteschön in der richtigen Sprache seperat.
Zum Thema Übersetzen von Mods habe ich bereits einen eigenen Thread aufgemacht:
viewtopic.php?f=5&t=10031Ganz durchdiskutiert wurde das m.M. noch nicht, es stehen immer noch Fragen im Raum.
Es gibt noch einige andere Probleme mit deinem naiven Ansatz, aber es sollte nun klar sein, dass es so einfach, wie du es dir vorstellst, leider nicht ist. Wenn du was lernen willst, schlage ich dir vor, mal die Anleitung von Gettext zu überfliegen. Nicht, weil ich meine, dass du unbegingt Gettext lernen solltest, sondern, weil in der Anleitung viel über Hintergründe zu lesen ist. Dann werden vielleicht einige deiner falschen Grundannahmen zu Staub zerfallen.