Schrompf hat geschrieben: ↑04.04.2024, 13:14Der Standard dafür sind oder waren übrigens die GNU gettext utilities.
Oh wow, GNU gettext. Ich kann dir auch keine bessere Alternative empfehlen, aber ich möchte auf zwei Probleme hinweisen:
Performance – das Ganze ist String-basiert. Da findet kein String-Hashing während des Kompilierens in deinem Executable statt (denke ich?), sondern beim Anfordern der Übersetzung. Also besser nicht in inneren Schleifen nutzen.
Build Chain – bereite dich darauf vor, dass die Dateien ständig neu kompiliert werden und in deiner Quelltextverwaltung ständig als geänderte Dateien angezeigt werden, auch wenn du gar nichts geändert hast. Ich habe die Original-Bug-Tickets gerade nicht parat, weil es bei mir schon ein Bisschen her ist, aber das hier fasst die Gründe wohl gut zusammen:
https://github.com/vslavik/poedit/issues/757#issuecomment-1146752578 hat geschrieben:On one hand, (1) VCS noise is annoying. On the other, (2) the "this PO file is current as of this date" information has value for translators and maintainers too. It is not immediately obvious to me that (1) is more important than (2) [to be explicit: this is not saying that it isn't, just that it isn't obvious to me and need to think about it].
Aber wie gesagt ist die Unterstützung breit und Fans können recht einfach neue Übersetzungen beitragen.
Hmmm, ich meine Gettext kling nett, aber es löst halt mein Problem nicht. Die Strings zu bekommen ist simpel, das sind irgendwie 10 Zeilen Code irgendwo. Natürlich könnte ich das jetzt durch gettext oder sowas ersetzen und dann würde es besser funktionieren und mehr können. Aber der Hauptgrund, weshalb ich Sprache nicht dynamisch umschalten kann ist, dass ich halt z.B. viele GUI Elemente beim Start erzeuge und dann für den Rest des Spiel benutze. Ich müsste also für alles was irgendwo lokalisiert werden muss Callbacks einbauen und entsprechend dynamisch neu generieren. Man kann das jetzt schnell rein hacken und übersieht dann 5% der Strings in obskuren Situationen oder man macht es richtig und so das es funktioniert und robust ist und dann dauert das noch 2 Wochen. Fuddellösungen mag ich nicht, von daher...
AI Übersetzungen mag ich auch überhaupt nicht. Ich hatte neulich nochmal ein paar Indie-Spiele aus Spaß auf Deutsch gestellt und nach 5 Minuten entsetzt wieder zurück-gewechselt. Sorry, aber ich erwarte eine gewisse Qualität, Übersetzungen haben von einem Menschen zu kommen, der das Spiel auch gespielt hat oder im Optionsmenü weiß, was welcher Eintrag bedeutet ("Schattenkarten" in den Bioshock Optionen, uff).
Systemsprache klingt nett, aber ehrlich gesagt tut das ja auch nicht. Beispielsweise Ist ja Textsprache (was auf den Buttons steht), Tastaturlayout (UK und US is ja auch schon wieder sehr unterschiedlich) und Uhrzeitformat (MM-DD-YY, *grusel*) komplett unabhängig voneinander und nichts davon hat mit dem physikalischen Standort des Geräts zu tun. Ich hatte auch schon einige male Software, die auf die schlechte deutsche Übersetzung (siehe oben) gewechselt hat, obwohl System-Text-Sprache eigentlich englisch ist. Umstellen ging dann nicht, mit dem Vermerk, dass Programm sei ja intelligent und stellt die Sprache automatisch richtig ein.
Beim ersten Start auf eine von 2 Flaggen zu klicken, das geht schnell und ist robust. Gettext merk ich mir mal für die Zukunft. Allerdings mag ich meine Asset-Dateien gerade eigentlich, die sind auch super um in der Entwicklung einfach mal was auszuprobieren ("es gibt einen Satz neuer Sounds, welche klingen besser?").
Es wäre natürlich schön eine Community mit Fans zu haben die beim Übersetzen helfen. Andererseits bin ich leider was pessimistisch was die Größe meiner Fan-Base angeht. Aber vielleicht sollte ich mal ein paar Bekannte nett fragen, ich würde sicherlich noch Spanisch, Russisch und Chinesisch zusammen kriegen, und damit wäre dann schon echt viel abgedeckt :)
Jonathan hat geschrieben: ↑05.04.2024, 07:47Systemsprache klingt nett, aber ehrlich gesagt tut das ja auch nicht. Beispielsweise Ist ja Textsprache (was auf den Buttons steht), Tastaturlayout (UK und US is ja auch schon wieder sehr unterschiedlich) und Uhrzeitformat (MM-DD-YY, *grusel*) komplett unabhängig voneinander und nichts davon hat mit dem physikalischen Standort des Geräts zu tun. Ich hatte auch schon einige male Software, die auf die schlechte deutsche Übersetzung (siehe oben) gewechselt hat, obwohl System-Text-Sprache eigentlich englisch ist. Umstellen ging dann nicht, mit dem Vermerk, dass Programm sei ja intelligent und stellt die Sprache automatisch richtig ein.
Ich verstand Schrompfs Kommentar eigentlich eher als Denkanstoß denn als wörtliche Anleitung, deshalb wollte ich ihn nicht zerpflücken. Aber als User mit englischer Systemsprache, deutschem Tastaturlayout, ISO-Datumseinstellung und Punkt als Dezimaltrennzeichen kann ich ja direkt aufzählen:
GetNumberFormat(LOCALE_USER_DEFAULT) formatiert dir Zahlen gemäß User-Einstellung (Punkt oder Komma).
GetDateFormat(LOCALE_USER_DEFAULT) formatiert dir Datum gemäß User-Einstellung (bei mir 2024-04-05; bei den meisten anderen hier 05.04.2024).
GetTimeFormat(LOCALE_USER_DEFAULT) und GetDurationFormat(LOCALE_USER_DEFAULT) formatieren dir Uhrzeit (08:45:32) und Zeitspannen (time remaining: 4:15) gemäß User-Einstellung.
GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_RETURN_NUMBER | LOCALE_IMEASURE) sagt dir, ob der User frühsintflutliche Einheiten (Zoll, Fuß, Steinwürfe, Biberschwänze) gegenüber metrischen bevorzugt. Aus einem gewissen Land war das tatsächlich einer der häufigsten Feature Requests …
Die Sprache selber habe ich mangels Übersetzung noch nicht gebraucht, aber GetUserDefaultUILanguage() sollte die Funktion sein.
Tastatur-Layout macht Windows doch automatisch für dich, sofern du Win32 nicht umgehst (etwa durch DirectInput oder Scan Codes)? Jeder Virtual Key Code ist automatisch laut User-Layout, darum ja Virtual.
Der Fehler vieler Programme ist wohl, bloß die Systemsprache abzufragen und alle anderen Formate daraus abzuleiten, statt sie getrennt zu verarbeiten.
Jonathan hat geschrieben: ↑05.04.2024, 07:47Aber der Hauptgrund, weshalb ich Sprache nicht dynamisch umschalten kann ist, dass ich halt z.B. viele GUI Elemente beim Start erzeuge und dann für den Rest des Spiel benutze. Ich müsste also für alles was irgendwo lokalisiert werden muss Callbacks einbauen und entsprechend dynamisch neu generieren.
Krishty hat geschrieben: ↑05.04.2024, 08:56Der Fehler vieler Programme ist wohl, bloß die Systemsprache abzufragen und alle anderen Formate daraus abzuleiten, statt sie getrennt zu verarbeiten.
Also bei Spielen ist es so dass Englisch entweder die Originalsprache ist (best case) oder die beste Lokalisierung nach der Originalsprache. Es würde mich ehrlich gesagt auch wundern, wenn es außerhalb von Japan und China noch Teams gäbe die nicht selbst dann Englisch als Originalsprache haben, wenn die Geographie etwas anderes sagen würden. Hmm ... glauben wir, dass die Witcher 3 Urfassung auf Polnisch ist, eher nicht, aber ich habe auch nicht versucht es zu recherchieren.
Kurz gesagt, man will eigentlich immer Englisch für Spiele aber meine Systemsprache ist Deutsch. Der logische Ort für dieses Setting wäre eigentlich Steam und nicht das Betriebssystem.
Das hast du oben schon gesagt, und im Kontext verstehe ich das nicht recht. Selbst wenn ein Spiel Englisch ist, möchte ich das Datum (etwa im Multiplayer-Chat) als 2024-04-05 oder 05.04.2024 angezeigt bekommen und nicht als 04/05/24?
Krishty hat geschrieben: ↑05.04.2024, 09:29
Das hast du oben schon gesagt, und im Kontext verstehe ich das nicht recht. Selbst wenn ein Spiel Englisch ist, möchte ich das Datum (etwa im Multiplayer-Chat) als 2024-04-05 oder 05.04.2024 angezeigt bekommen und nicht als 04/05/24?
Ich denke am Ende läuft es darauf hinaus wie sehr man ein Spiel als kuratiertes Gesamtkunstwerk versteht und wie sehr als "Programm". Das ist natürlich nicht für alle Spiele gleich. Wenn ich in einem Adventure (in dem weitesten Sinne) das Tagebuch von jemandem lese, dann möchte ich eigentlich schon dass das Datum in der Locale des Schreibers ist (sofern eben Englisch, was es ja doch meistens ist) und nicht in meiner. Wenn ich Flugsimulator spiele möchte ich dass die Boeing die Flughöhe in Fuß anzeigt und nicht in Metern.
Ich hatte auch schon Spiele, die die Einheiten haben wählen lassen, kann ich mich nicht erinnern welche das waren, klingt wie etwas was OpenTTD machen würde, aber das waren dann in der Regel wahrscheinlich eher nicht Spiele, die Immersion erzeugen wollen.
Aber wahrscheinlich sollte ich einfach klein beigeben und nach fast 30 Jahren Windows die Systemsprache auf Englisch stellen.
Neuerungen:
- neue, dynamische Musik
- besseres Tutorial
- Anleitung in Deutsch / Englisch
- Installer :)
- Viele kleine Verbesserungen & Polishing
- Anpassbare Steuerung
Insgesamt sollte jetzt alles etwas Nicht-Nerd-freundlicher (d.h. zugänglicher) sein. War nochmal echt viel Arbeit und viele Kleinigkeiten, aber ich wollte gerne vermeiden, dass Menschen das Spiel herunterladen und aufgeben, bevor sie es richtig gespielt haben. Vieles Neues sind Details auf die ich halt wert lege und von denen ich nicht immer weiß, wie nötig sie jetzt gerade waren, aber ich habe jetzt erstmal für mich das Gefühl, alles vernünftig gemacht zu haben und bin zufrieden mit mir.
Über Feedback jeglicher Art freue ich mich natürlich, vermutlich gibt es in den nächsten Tagen eine leicht angepasste Version in der ich irgendeine Kleinigkeit fixe.
Es gibt mehrere Hasen, die Kamera ist aber nur auf den obersten fixiert. D.h. ist man schnell genug, stirbt der andere Spieler irgendwann, einfach weil er außerhalb des Bildschirms ist und nicht sehen kann, wo er hinspringen muss. Zusätzlich macht der obere Spieler schon die Blätter kaputt, der andere muss also hinterher kommen.
Möhren einsammeln ist dabei immer noch sehr interessant, weil es einen ja Doppelsprünge beschert. Bei den Eiern bin ich mir noch unsicher: Das beide Spieler Punkte sammeln scheint nicht zu funktionieren, denn ansonsten kann man sich einfach schnell umbringen, wenn man gerade mehr Punkte hat und der andere hat automatisch verloren. Will man das vermeiden muss man wohl immer den Spieler, der länger überlebt hat gewinnen lassen, was Punktezählen unnötig macht. Zwischen verlieren und Selbstmord kann man im Spiel halt irgendwie nicht unterscheiden...
Man könnte einer entweder durch Möhren ersetzen, oder aber sie geben dir z.B. einen kurzzeitigen Geschwindigkeitsbonus. Dann muss man halt überlegen ob man einen Umweg gehen will um das Ei einzusammeln, oder nicht.
Die Frage ist dann immer noch, will man das so als Duell-Spiel wirklich spielen. Oder sollte man die Entwicklungszeit nicht einfach in ein neues Spiel stecken? Im Zweifelsfalle müsste man wohl ausprobieren, ob es zu zweit wirklich Spaß macht, aber Multiplayer testen ist immer viel schwieriger, weil man das nicht alleine machen kann.
Jonathan hat geschrieben: ↑17.07.2024, 22:04
Möhren einsammeln ist dabei immer noch sehr interessant, weil es einen ja Doppelsprünge beschert. Bei den Eiern bin ich mir noch unsicher: Das beide Spieler Punkte sammeln scheint nicht zu funktionieren, denn ansonsten kann man sich einfach schnell umbringen, wenn man gerade mehr Punkte hat und der andere hat automatisch verloren. Will man das vermeiden muss man wohl immer den Spieler, der länger überlebt hat gewinnen lassen, was Punktezählen unnötig macht. Zwischen verlieren und Selbstmord kann man im Spiel halt irgendwie nicht unterscheiden...
Es gäbe natürlich noch die Möglichkeit, beide Spieler spielen zu lassen, bis sie tot sind und dann nach den Punkten zu gehen. Das heißt, der länger lebende Spieler kann noch verlieren (wenn der andere mehr Eier gesammelt hat) aber auch gewinnen (wenn er noch mehr Höhe zurücklegen kann).
Unabhängig davon: ich würde mich an deiner Stelle eher zum nächsten Projekt bzw. Landvogt oder dem Zombie-Shooter zuwenden. Ich habe Harald Hoppelhase gerne zwischendrin gespielt, weil es sehr casual ist. Ich würde aber mit Besuch, Freunden, etc. mich vermutlich nicht hinsetzen, um das miteinander zu spielen. Aber ich bin auch nicht zwangsweise repräsentativ.
Japp, seh ich auch so. Der Gedanke an CouchCoop wohnt im Feature Creek, dem Tal des wandernden Scopes. Das Spiel ist simpel, schlicht und gut poliert - erfreue Dich daran, dass Du was fertig bekommen hast, und zieh zum Nächsten.
Ich stimme den Beiden zu. Das Spiel ist lustig und macht Spaß, aber einen Coop-Modus würde ich auch für überzogen halten. Es sei denn du möchtest das mal ausprobieren und versuchen ob es funktioniert. Einen wirklichen Mehrwert hast du damit aber nicht.
Ich würde das Projekt als fertig abhaken und in die Hall of Fame stellen. Immerhin ist es doch immer wieder etwas besonders ein Projekt bis zum Ende fertig zu bekommen.