You are not logged in.

Dear visitor, welcome to Runes of Magic EU. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Monday, October 19th 2009, 9:01am

AddOns und Sprachlokalisierung

Hallo,

hier mal ein Tip, was die verschiedenen Sprachen (DE, EN...) in ROM angeht und deren Verwendung in AddOns:

Es gibt eine Funktion

string = TEXT("<StringName>");

Diese Funktion liefert zu der angegebenen Stringconstanten <StringName> den hierzu gehörenden lokalisierten String zurück.

Somit könnten zumindestens Standarttexte und abgefragte Systemmeldungen automatisch korrekt in der im Client eingestellten Sprache genutzt werden, ohne das diese von Hand im AddOn übersetzt werden müssen.

Nun zur Frage 'Wo finde ich diese Stringconstanten?':
Alle Dateien der Stringkonstanten für die jeweiligen Sprachen sind in data.fdb und beginnen mit 'string_xx' wobei das xx für die Sprache steht.
Teilweise sind es Lua-Dateien und .db Dateien (einfache DBase-Datenbank). Diese Dateien können mit FDBExtract ausgepackt werden und eigendlich mit jedem Editor durchforstet werden. Mal schauen, ob ich einen Extraktor für die .db-Datein zusammengeschrieben bekomme.. ;)

Beispiel:
TEXT("SYS_GAMEMSGEVENT_101")
liefert bei auf folgenden Sprachen eingestellten Client den entsprechenden folgenden Text:

DE -> "Ziel ist zu weit entfernt"
EN -> "Target is too far away"
FR -> "La cible est trop éloignée."
...

Somit könnte eine Prüfung im Event für die Warnmeldungen, ob die Meldung "Ziel ist zu weit entfernt" kommt einfach mit
if arg1 = TEXT("SYS_GAMEMSGEVENT_101") then..
abgefragt werden. Und dies funktioniert dann auf allen Clients in allen Sprachen von ROM!

Natürlich wird es immer Texte und Beschreibungen geben, welche nicht in ROM exsistieren, jedoch kann man bei Standarttexten auf die bereits vorhandene Übersetzung von ROM zugreifen und braucht dann nur noch diese speziellen Texte selber zu übersetzen..

----------------

So, habe nun ein Tool für das Auslesen(Convertieren) der Sprachdateien (string_xx.db) erstellt.
Es ist ein einfaches Tool, welches die .db-Dateien in 2 Formate convertiert und speichert. Einmal ein Windows-INI-File und zum Anderen in ein XML-Format. Diese XML-Dateien können auch später wieder einfach geladen werden.

An eine einfache Suche habe ich auch gedacht!

Ihr braucht min. WinXP oder Win2K mit IE 5.0. (MDAC 2.1)

30.03.2010 Version 1.2
Nach einem Hinweis von Pipury:
- Umlaute werden jetzt korrekt dargestellt.
- Kurzanleitung im beigefügtem 'Readme.txt'

30.03.2010 Version 1.3
- Fehlerabfangen wenn noch vor Convert/Load ein Suchtext eingegeben wird.
- Beide Suchfelder können nun in Kombination verwendet werden
- Exit-Button hinzugefügt ;)
- Bei Suchen wird nun die Zeilenanzahl der gefundenen Zeilen ('Lines') mit angezeigt
Nach einem Hinweis von Pipury:
- Suchfilter deaktiviert beim speichern
- Die Anzeige nach Fenster wechseln ist ein Problem von Windows und ist nur ein Schönheitsmangel.

Schauiii

Holger
holgerx has attached the following file:

2

Monday, October 19th 2009, 9:26am

Huhu,

Schön geschrieben, bitte jetzt noch etwas besser platzieren und für die Nachwelt festhalten unter theromwiki.com.

Zudem, weitaus häufiger ist es in Addons nötig, eigene Texte in mehreren Sprachen vorzuhalten. Wie wäre dies mit TEXT möglich? Mal abgesehen von Addons wie ComeOnIn, die einmal für ihr eigenes Interface (GetLanguage()) und einmal für die Ausgabe (englischer Client, aber deutscher Server => deutsche Ausgabe in Zone) lokalisieren müssen.

Gruß,
Martin

3

Monday, October 19th 2009, 9:42am

Hallo!

TEXT ist eine API-Funktion von ROM. ROM liest die übersetzten Texte aus den Datenbanken (.db, sowie .lua) und gibt sie zurück.

Es wird hier die Übersetzung geliefert, welche gerade im Client eingestellt ist. Ob es eine Möglichkeit gibt um auch den Sprachcode mitzugeben (Client EN -> Benötigt DE-Text) habe ich noch nicht versucht.

Für eigene Texte müsstet ihr die Funktion Hooken und leider weiterhin die Texte selber in Dateien verwalten.. ;(

@Fliewatuet
Da ich leider nicht so flüssig Enlisch wie Deutsch schreiben kann, wünsche ich Dir viel Spass beim Übersetzen und Eintragen im Wiki. ;) Meine erlaubnis hast Du..
Ach könntest Du auch gleich die API-Beschreibungen von Elrac nachtragen, welche in theromwiki.com fehlen? ;)

4

Monday, October 19th 2009, 11:28am

Quoted from "Fliewatuet;1120792"

...Mal abgesehen von Addons wie ComeOnIn, die einmal für ihr eigenes Interface (GetLanguage()) und einmal für die Ausgabe (englischer Client, aber deutscher Server => deutsche Ausgabe in Zone) lokalisieren müssen...

Quoted from "holgerx;1120855"

...Es wird hier die Übersetzung geliefert, welche gerade im Client eingestellt ist. Ob es eine Möglichkeit gibt um auch den Sprachcode mitzugeben (Client EN -> Benötigt DE-Text) habe ich noch nicht versucht...


Nur noch mal zur Klarstellung was meint ihr genau mit "englischer Client"?
Für Englisch(US+EU), Deutsch, Spanisch, Französisch existiert nur 1 Client. Der ist bei allen identisch egal ob man den in DE oder USA runterlädt. Der hat die Endung ".en" bei der Versionsnummerierung.

Dann gibt es noch die "Regions-Einstellung" im Launcher des Clients. Diese hat Einfluss welche Server einem zur Auswahl angeboten werden.

Und zum Abschluss gibts dann noch die "Sprach-Einstellung" im Launcher, welche die verwendete Sprache des Interface bestimmt. Dies hat keinen Einfluss auf die Server.

Wenn jetzt immer jmd schreibt "der englische Client"...was meint er damit? Den runter geladenen Client mit der Endung ".en" an sich oder die eingestellte Region oder meint er dass er nen englischen Client hat weil das Interface auf englisch ist.
Die Angabe ist also mehr als ungenau und verwirrend weil jeder es anders verstehen könnte.

Könnte man sich in der Hinsicht einigen, dass man gerade wenn man etwas zur Addon-Entwicklung bzw Problembehebung zu sagen hat von diesem absieht und dann etwas genauer ist.
Also nicht einfach schreiben "englischer Client" sondern wirklich schreiben ob man die Region, die Sprache oder wirklich den Client an sich meint. Es gibt da ja neben dem englischen also internationalen ".en" Client noch andere wie russisch ".ru", Chinesisch ".cn", Singapur/Malaysia ".sg", Japan ".jp", Türkei ".tr" und andere diese sind dann wirklich andere Clients.
Diese wird man hier wohl eher selten meinen.

Also bei Region und Sprache bleiben.
Region --> GetLocation()
Sprache --> GetLanguage()

Und die Systemmeldungen benutzen immer die eingestellte Sprache, egal ob man auf nem anderen Server ist...

Ich schreib das nur, weil ich diese ungenauen Angaben schon oft gesehen habe und man dann aneinander vorbei geredet hat, weil jeder was andere gemeint hat und dies dann bei etwaiigen Problembehebungen hinderlich war.
Und wenn ich oben die Posts lese, weiß ich auch hier nicht was denn nun genau gemeint ist...
Wenn wir die Bugs nicht beachten, gibt es auch keine!
Offline!

5

Monday, October 19th 2009, 12:16pm

Hallo,

mit englichem Client meinen wir einen Client, dessen Interface-Sprache auf englich eingestellt ist. Somit meinten wir mit deutschem Client DE als eingestellte Sprache für das Interfache. (GetLanguage())

Mit englichen Server meint Fliewatuet tatsäch einen Englischsprachigen Server! (Hab gerade keinen Namen im Kopf ;) )

z.B: ist Muinin ein deutscher Server.

Die TEXT() -Funktion gibt den Text anhand der Interface-Sprache des Clients aus, weshalb die Texte auch in den fdb-Dateien für jede (ClientInterface-)Sprache vorhanden sind.

6

Monday, October 19th 2009, 1:51pm

Quoted from "holgerx;1121635"

Hallo,

mit englichem Client meinen wir einen Client, dessen Interface-Sprache auf englich eingestellt ist. Somit meinten wir mit deutschem Client DE als eingestellte Sprache für das Interfache. (GetLanguage())

Mit englichen Server meint Fliewatuet tatsäch einen Englischsprachigen Server! (Hab gerade keinen Namen im Kopf ;) )

z.B: ist Muinin ein deutscher Server.

Die TEXT() -Funktion gibt den Text anhand der Interface-Sprache des Clients aus, weshalb die Texte auch in den fdb-Dateien für jede (ClientInterface-)Sprache vorhanden sind.


Ah. so langsam komm ich dahinter und kann eure Gedankengänge synchronisieren xD

Btw. Mit welchem Programm bekommst du die ".db" Dateien auf?
Hab das schon mit verschiedenen Programmen probiert das solche Dateien eigentlich kennen sollte, aber scheints sich um die RoM eigenen Dateien doch um etwas unterschiedliche zu handeln, denn die kann keins der Programme lesen...
Wenn wir die Bugs nicht beachten, gibt es auch keine!
Offline!

7

Monday, October 19th 2009, 2:06pm

Hallo,
das ist eine Art DBase-Datenbank, habe sie mit einem eigenen Programm geöffnet, ausgelesen und in einem anderen Format abgespeichet.

Werd mal schauen, ob und wie ich das Programm 'benutzerfreundlicher' gestallten und event. hochladen kann ;)

8

Tuesday, October 20th 2009, 3:11pm

Ein kleiner Pusch, damit das bereitgestellte Tool auch 'gesehen' wird ;)

9

Wednesday, October 21st 2009, 4:06pm

Tool funktioniert.

Danke.

(Kannst du vlt noch ein paar Einzelheiten zum Format veröffentlich - oder wo man diese finden kann? Oder fällt das unter Hacking und würde von Frogster geahndet werden *zu den offiziellen schieloO*)
[LEFT]Addons: [THREAD=79852]yGather[/THREAD], [THREAD=144091]mendedCraft[/THREAD], [THREAD=236416]recallRecall[/THREAD]

[/LEFT]

10

Thursday, October 22nd 2009, 2:17pm

Währe Hilfreich, wenn sich noch andere AddOn-Entwickler hierzu melden würden und einen Test mit ihren AddOns durchführen könnten.

Vielleicht würde dieses Thema ja auch gestickt werden (oder wie heist das Festsetzen? ;) )

Schauiii...

LighTmarE

Trainee

Posts: 1,314

Location: Wiesbaden

  • Send private message

11

Friday, October 23rd 2009, 5:08pm

Quoted from "holgerx;1136062"

Währe Hilfreich, wenn sich noch andere AddOn-Entwickler hierzu melden würden und einen Test mit ihren AddOns durchführen könnten.

Vielleicht würde dieses Thema ja auch gestickt werden (oder wie heist das Festsetzen? ;) )

Schauiii...

"angepinnt"

meintest du das? ;)

12

Saturday, October 24th 2009, 4:06pm

;)
nicht ganz...

Mir geht es darum, ob dieses Thema 'verdient' am Forenanfang 'fixiert' zu werden... ;)

Darum möchte ich eure Meinung wissen, ob diese AddOn-'übergreifende' Hilfe brauchbar ist und ob ein Mod gebeten werden sollte das Flag zu setzen...

Schauii..

13

Monday, October 26th 2009, 1:18pm

also ich werds bei meinem addon aufjedenfall mal testen und ggf auch mit den strings umschreiben ^^

14

Monday, October 26th 2009, 1:36pm

Ein kleines Beispiel:

Das von mir hier im Forum veröffentliche AddOn 'QuickClassChange' basiert schon darauf.

http://forum.runesofmagic.com/showthread.php?t=110923

Da ich docht einen Button hinzufüge, sowie nach vorhandensein von anderen Optionsbuttons abfrage, habe ich dies dort verwendet, so das dieses AddOn eigendlich auf allen Sprachen (DE,EN,FR,SP..) des en-Clienst laufen sollte.

Ob das wie gesagt auch auf anderssprachicgen Clients funktioniert, kann ich nicht sagen..
;)

Schauiii..

ArcticXWolf

Intermediate

Posts: 1,050

Location: Ein kleines Kaff, das du nicht kennst.

  • Send private message

15

Monday, October 26th 2009, 3:35pm

Klar, aber das geht ja nur, wenn ich Ingame-Strings haben möchte. Eigene (z.B. für das Addon) kann man so nicht benutzen.
Inaktiv..
FAQ | Addon-FAQ | Forenregeln | Suchen

16

Monday, October 26th 2009, 4:41pm

Quoted from "ArcticXWolf;1151065"

Klar, aber das geht ja nur, wenn ich Ingame-Strings haben möchte. Eigene (z.B. für das Addon) kann man so nicht benutzen.


Hab ich auch nie behauptet.. ;)

Es geht darum, das wenn man versucht überwiegend mit Standart-Texten zu arbeiten (z.B. Buttons..), das diese automatisch von ROM in diverse Sprachen übersetzt werden (immerhin über 150.000 Texte in jeweils diversen Sparachen).

Ein Hauptaugenmerk ist, wenn man einen Meldungsstring oder ,wie im erwähneten AddOn, eine genau 'Bezeichnung' vergleichen will, so ist dass über diesen Weg der einzig richtige, da so direkt mit der Sprach-richtigen Caption gearbeitet wird..

Das spezielle Texte von AddOns immer noch händisch übersetzt werden müssen ist schon klar, nur man kann sich die Übersetzung für alle sparen, wo mann Standart-Texte verwendet.. ;)

Schauiii..

17

Monday, October 26th 2009, 6:10pm

Finde das auf jeden Fall eine gute Idee. :)

Ich arbeite in meinem Addon aber derzeit sowieso möglichst mit vorhandenen Strings, auch um mir die Übersetzungsarbeit zu sparen.^^
Entwickler von GuildPanel.
Zur Kontaktaufnahme bitte PN schicken, ich bin foreninaktiv.

18

Monday, October 26th 2009, 10:53pm

Quoted from "holgerx;1150486"

...
Ob das wie gesagt auch auf anderssprachicgen Clients funktioniert, kann ich nicht sagen..


Funktioniert auch bei anderen Clients. Habs zwar nicht mit deinem Addon proboert sondern hab WoWMap mal so umgeschrieben wie du es beschrieben hast und es geht. Getestet mit den EN, RU, JP, SG/MY Clients und 8 verschiedenen Sprachen

Allerdings werd ich denke ich mal trotzdem bei den locale files bleiben, da man dort mehr Einfluss hat was bei raus kommt.
Denn bei Clients die vom Content her noch nicht so weit sind und bei denen neuere Einträge noch nicht in der string_xx.db stehen kommt dann als Ausgabe nur der Wert über den man in der Datei eigentlich nen Wert abfragt was etwas unschön ist. (Positiv ist das keine Fehlermeldung kommt.)
Mit den locales kann ich bei solchen fällen immer noch die englische Variante als Zwischenlösung nehmen statt das dann irgendwelche Werte/Variablen ingame angezeigt werden. ;)

Aber für andere Fälle ist deine Lösung aber sehr gut geeignet :)

19

Tuesday, October 27th 2009, 4:14am

Quoted from "Chichii;1153003"


Allerdings werd ich denke ich mal trotzdem bei den locale files bleiben, da man dort mehr Einfluss hat was bei raus kommt.
Denn bei Clients die vom Content her noch nicht so weit sind und bei denen neuere Einträge noch nicht in der string_xx.db stehen kommt dann als Ausgabe nur der Wert über den man in der Datei eigentlich nen Wert abfragt was etwas unschön ist. (Positiv ist das keine Fehlermeldung kommt.)
Mit den locales kann ich bei solchen fällen immer noch die englische Variante als Zwischenlösung nehmen statt das dann irgendwelche Werte/Variablen ingame angezeigt werden.


Mache Dir doch eine Art TEXTSELF()-Funktion! Nach folgendem Muster:

Source code

1
2
3
4
5
6
7
8
function TEXTSELF(ACaption)
   local t = TEXT(ACaption);
   if t = ACaption then
     -- hohle Text aus eigener Sprachdatei
     t = ...
   end;
   return t;
end;


So wird bei Vorhandensein der ROM-Text genommen, ansonsten dein eigener. Nun nur an allen Stellen einbauen wo TEXT() vorgesehen ist.. ;)

Geraffel

Beginner

Posts: 42

Location: Hamburg

  • Send private message

20

Wednesday, October 28th 2009, 7:41pm

Moin, kurze Frage: wo finde ich den FDBExtract, bitte?
SuFu konnte mir nicht wirklich helfen..
VG
"Ja, mach nur einen Plan, sei nur ein großes Licht! Und mach dann noch `nen zweiten Plan, geh`n tun sie beide nicht."
Zitat: Brecht