Du bist nicht angemeldet.

Werbeanzeige

1

17.08.2018, 13:32

Wie werden Spiele übersetzt?

Hey,

Ich frage mich häufig, wie Entwicklerstudios ihre Spiele in andere Sprachen übersetzen ( programmiertechnisch ).
Das sie nicht bei jedem Untertitel ein

Zitat


if ( sprache == "deutsch" ) dann sage_dasunddas();

machen, ist mir klar - Wäre ja viel zu viel aufwand:D Aber wie läuft es dann konkret ab? Vielen dank für Antworten.

Luca

Tobiking

1x Rätselkönig

  • Private Nachricht senden

2

17.08.2018, 14:03

Der Wikipediaartikel zu Gettext beschreibt sehr gut wie sowas ablaufen kann.

Grundsätzlich schreibst du statt den Text eine ID in deinen Code und kannst dir dann den Text abhängig von der gewählten Sprache aus einer Datei, Datenbank o.ä. laden.

Wirago

Alter Hase

Beiträge: 1 206

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

3

17.08.2018, 15:53

Wenn du C# verwenden solltest, dann gibt es auch hier eigene Möglichkeiten (das Prinzip ist natürlich das selbe)
Gut erklärt hier -> https://stackoverflow.com/questions/1142…tion-in-c-sharp
kleincodiert.at
Deine Seite für den schnellen Einstieg in C++, C# und Java


Aktuelles Projekt:
Twelve Orbs - The Balance Of Life (A 2D Fantasy RPG)

Jonathan

Community-Fossil

  • Private Nachricht senden

4

18.08.2018, 23:38

Das ganze wird beliebig kompliziert. Es reicht ja nicht nur, Strings zu ersetzen, wenn z.B. ein Charakter etwas sagen soll, muss auch die richtige Sounddatei benutzt werden. Vielleicht will man sogar die Animation anpassen (Lippensynchronisation). Desweiteren liegen viele Beschriftungen nicht in Textform sondern als Textur vor, z.B. wenn man Knöpfe mit besonders schicker Schrift im Menü haben will.
Letztendlich kann man dabei aber sehr ähnlich vorgehen. Man könnte z.B. alle Bilder und Tondateien die übersetzt werden in spezielle Unterordner legen und dann jeweils den Pfad anpassen (aus /gfx/EN/Buttons/StartGame.png wird dann /gfx/DE/Buttons/StartGame.png). So kann man diese Unterscheidung irgendwo zentral im Ressourcenmanager unterbringen (z.B. indem vor jedem Laden geprüft wird, ob der Pfad angepasst werden muss) und hat Ruhe.

Wirklich schwierig ist das alles nicht, aber man sollte Übersetzung von Anfang an einplanen, damit man statt hunderten nur eine einzige Stelle hat, wo man etwas ändern muss.
Lieber dumm fragen, als dumm bleiben!

Schorsch

Supermoderator

Beiträge: 5 188

Wohnort: Wickede

Beruf: Student

  • Private Nachricht senden

5

20.08.2018, 11:30

Manche Spiele werden für bestimmte Länder stärker angepasst. Beispiele sind Wolfenstein 2 und irgendein Call of Duty oder Battlefield Teil der vor Jahren auf den Markt kam.Das wichtige Stichwort welches hier schon gefallen ist ist lokalization. Damit solltest du genügend Informationen finden.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Mekphen

Frischling

Beiträge: 2

Wohnort: Hamburg

Beruf: Fachinformatiker Anwendungsentwicklung

  • Private Nachricht senden

6

22.08.2018, 09:03

Bei der Webentwicklung (ich vermute bei der Spiele Entwicklung ist es ähnlich) gibt es für die Texte Englische Variablen und einen Service welcher diese dann je nach Sprache herausgibt. Also sprich
i18N.getText("menu_start_button")
Dieses i18N weiß dann welche Sprache der Client hat und liefert dann je nach dem diesen Text aus einer Datenbank.

FSA

Community-Fossil

Beiträge: 1 931

Wohnort: Hessen

  • Private Nachricht senden

7

25.08.2018, 01:22

Ich habe vor Ewigkeiten mal einen wirklich rudimentären Übersetzer für einfache GUI's geschrieben. Die Sprachdatei ist fast identisch mit ini. Kannst du dir unter den Links mal angucken. Das ist kein Produktionscode, also unstable (und manchmal echt hässlich geschrieben)! Wenn es jemand nutzen will, macht's einfach. Keine Anmerkungen zu mir notwendig.

CPP: https://pastebin.com/VYFCqzLp
Header: https://pastebin.com/txUHpp93
Sprachdatei: https://pastebin.com/WXLjkGP1


Kurzes Beispiel:

C-/C++-Quelltext

1
2
3
4
5
LanguageHandler* lang = new LanguageHandler(L"Languagefile.lang");
lang->SetLanguage(L"English");

// Zum Übersetzen mit der aktuell gewählten Sprache
std::wstring translation = lang->Translate(L"Section", L"Element name");

Zitat von »LetsGo«

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veralteten strukturieren Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »FSA« (25.08.2018, 02:47)


8

09.10.2018, 11:41

Mal auf rein Praktischer Sicht: von der Seite der Lokalisation her sind die Sprach-Strings meist in einer einfachen Excel oder Textdatei definiert.

zB in einer einfachen CSV Datei: (das \n indiziert hier einen Zeilenumbruch)

....
gui_close_warning,"do you want to close the game?","Möchten Sie das Spiel Schließen?","voulez-vous fermer le jeu?"
combat_headshot,"headshot","Kopfnuss","photo du visage"
help_healthpacks,"You can pickup a healthpack \nto heal yourself","Sie können den Verbandskasten nutzen\num sich zu heilen","vous pouvez prendre un kit de santé pour vous soigner"
....

wobei hier der erste Eintrag ein Label ist, der im Programm verwendet werden kann (key) und die folgenden Einträge die lokalisierten Sprachstrings (value). (Englisch, Deutsch, Franzmännisch)

Der Vorteil in einem solchen Format ist, das man die Excel Tabelle, oder die CSV Datei einem beliebigen Übersetzer (ohne einem speziellen Editor) geben kann, der hoffentlich im richtigen Kontekt die jeweilige Sprache eintragen kann.
(Ich hab schon bei kleinen Spielen gesehen daß das die Sekräterin übersetzt hat...)

Bei Indyspielen können so auch Modder zB selbständig eine russische Übersetzung in die Lokalisationsdateien einfügen.


Das Spiel kann beim Start die Datei parsen, und die Label mit dem String der aktuell gewählten Sprache austauschen. (zB mittels einer Hashmap mit den Labeln als key, oder Arrays und den keys als Index, oder was auch immer den Key zu dem Wert mappen kann).



(Es sei denn man hat ein sehr großes textlastiges Spiel, dann braucht man eher einen Datenbank Ansatz).

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Damocles« (09.10.2018, 11:50)


BlueCobold

Community-Fossil

Beiträge: 10 890

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

09.10.2018, 11:54

Das ist zwar tatsächlich der Standard, aber ich wünschte die Übersetzer würden endlich mal in der Lage sein XML zu importieren...
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

10

09.10.2018, 11:59

Das ist zwar tatsächlich der Standard, aber ich wünschte die Übersetzer würden endlich mal in der Lage sein XML zu importieren...

Ich finde XML sollte man eher Verwenden wenn man Objekthirarchien oder Datenstrukturen definieren möchte.

Übersetzungen sind meist einfache Key-Value Zuordnungen. Da bringt XML wenig Vorteile genenüber einem einfachen CSV, und wird eher zu komplex.

Es würde dann Sinn machen, wenn man für die Jeweilige Sprache noch besondere Anweisungen geben muss. (zB für die Formatierung, oder wenn das ganze noch mit Audio-Dateien und Timing angepasst werden muss).

---

Bei einem Großprojekt wie einem MMO (WoW, EvE etc), wird dann wiederum eine große Lokalisationsdatenbank mit speziellen Tools verwendet.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Damocles« (09.10.2018, 12:07)


Werbeanzeige