• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Urwigo und Umlaute

Charlenni

Geomaster
Heute Mittag wurde im Groundspeak-Forum die Frage gestellt, ob es möglich wäre, mit Urwigo eine mehrsprachige Datei zu erstellen. Bei Earwigo ist das ja schon lange möglich

Dazu habe ich mir jetzt einige Gedanken gemacht und wollte mal nachfragen, ob der eine oder andere Interessierte Lust hat, sich das anzuschauen, ob man das Ergebnis auf die Menschheit loslassen kann.

Im Prinzip ist es ganz einfach:
1. Das Lua Author Script in die eigene Cartridge kopieren
2. Alle Texte in der Cartridge, die übersetzt werden sollen, in der Form "Sprache 1@@Sprach 2@@Sprache 3" schreiben
3. Am Anfang gleich beim Benutzer die Sprache abfrage
4. Die gewünschte Sprache und das Trennzeichen (in obigen Beispiel "@@") beim Aufruf der Initialisierungsroutine angebn. diese lautet dann z.B. "Language.Init(2, "@@")" für die zweite Sprache
5. Fertig

Wo funktioniert das? Bei Zonen, Items, Charactern und Tasks im Namen und bei der Beschreibung. Bei Commands natürlich auch. Bei Messages und Dialogen (auch die Buttons). Bei Eingaben (Name und Text) mit Mehrfachauswahlen (alle Auswahlen). Die Eingaben werden anschließend wieder zurückgewandelt, so dass auf "Answer 1@@Antwort 1" überprüft werden kann, obwohl im Display nur "Antwort 1" ausgewählt werden kann.

Was passiert, wenn einmal nur ein Text ohne "@@" hinterlegt ist? Dann wird einfach dieser Text genommen (Sprache 1 ist der Vorgabewert).

Verschlüsselung sollte auch kein Problem sein, da die Sprachauswahl nach der Entschlüsselung ansetzt.

Ich habe noch einen kleinen Nebeneffekt eingebaut: Umlaute können in Urwigo normal eingegeben werden. Dann beim Erzeugen der GWZ Datei die Option mit UTF-8 verwenden und mit dem http://www.wherigo.com Compiler die GWC erzeugen lassen (wie beim normalen Herunterladen). Und schon sollte der Garmin auch äöüß können :). Natürlich auch bei Texteingaben. Dort werden Freitexte wieder in UTF-8 zum Vergleich konvertiert. Das klappt auch, wenn man gar keine weitere Sprache hat. Nur mit "Language.Init(1, "@@")" am Anfang (OnStart der Cartridge) initialisieren. Leider sind die Umlaute nicht im Emulator mit Direktaufruf zu sehen :(. Aber bei Handcompilierung und manuellem Aufruf im Emulator geht es.

Der Code ist in der beiliegenden Urwigo Datei zu finden. Alles was im Lua Author Script hinterlegt ist, wird benötigt. Nicht mehr und nicht weniger. Mit dieser Cartridge kann man auch gleich etwas testen und herumprobieren.

All zu viel habe ich nicht getestet, da ich gerade erst fertig geworden bin. Auch die anderen Devices außer dem Emulator habe ich noch nicht ausprobiert.

Über positive wie negative Rückmeldungen würde ich mich freuen.

Viele Grüße und weiterhin viel Spaß
Dirk (Charlenni)
 

Anhänge

  • Language.zip
    4,8 KB · Aufrufe: 96

keogarl

Geocacher
Super Sache :D
An der mehrsprachigkeit bin ich nicht interessiert (mein 2 sprachiger WIG musste sowieso auf 2 separate Carts aufgeteilt werden, er hätte sonst den Rahmen gesprengt..), aber die Umlautegeschichte finde ich interessant.
Frage:
Charlenni schrieb:
Nur mit "Language.Init(1, "@@")" am Anfang (OnStart der Cartridge) initialisieren.
Was heißt das denn für dummies? :roll:
Gibts evtl. die "Umlautefunktion" als abgespeckte Version ohne den Sprachenfirlefanz?
Danke für deinen unermüdlichen Einsatz.
karl
 
OP
C

Charlenni

Geomaster
In der Urwigo-Datei ist das zu sehen. Einfach ein Lua Code Objekt aufmachen und die obige Funktion eintragen. Das sollte alles sein.

Abspecken? Kann ich mal schauen. Bringt aber sicher nicht all zu viel. Geschwindigkeits- und speicherplatzmäßig meine ich ;)

Ach, Urwigo-Datei schon einmal angeschaut? Aber bitte über www.wherigo.com Compilierens, sonst geht es nicht :)
 

keogarl

Geocacher
Charlenni schrieb:
Ach, Urwigo-Datei schon einmal angeschaut?
klar! jetzt hab ichs die lua-initialisierung auch gefunden, beim input. Ich werde das gleich mal im aktuellen Projekt ausprobieren, ist einfach schöner so. danke
 
OP
C

Charlenni

Geomaster
Ich habe die Bibliothek nochmals überarbeitet und jetzt gibt es folgende Funktionen

Language.Init(language, separator, replace)
Beschreibung
Initialisiert die Bibliothek und muss unbedingt vor der Verwendung aufgerufen werden. Wird im jeweiligen Text kein Trenner gefunden, dann wird am jeweiligen Text nichts geändert.
Parameter
language (optional): Nummer der Sprache, die verwendet werden soll. Dabei steht 1 für die erste Sprache, 2 für die Zweite usw. Vorgabe ist 1
separator (optional): Trenner, der die einzelnen Sprachen trennt. Vorgabe ist "@@"
replace (optional): Wenn diese Tabelle angegeben wird, dann können gleich bei ersten Durchlauf alle Zeichenketten ersetzt werden (siehe auch Language.ReplaceString).
Aufruf
Language.Init(2, "@@",{["~completion~"] = Player.CompletionCode})

Language.GetString(text): string
Beschreibung
Liefert den Text zur bei Init gewählten Sprache. Ist kein Trenner, welcher auch über Init gesetzt wurde, vorhanden, so wird der Text unverändert zurückgegeben. Zusätzlich werden auf Garmins auch noch die Sonderzeichen durch mögliche Garminzeichen ersetzt.
Parameter
text: Text, aus dem die richtige Sprache extrahiert werden soll. Bei nil oder einem Leertext wird ein Leertext zurückgegeben.
Rückgabewert
Der Ergebnistext
Aufruf
Language.GetString("This is a test text@@Dies ist ein Testtext")

Language.ReplaceString(text, search, replace)
Beschreibung
Alle Teile, die search entsprechen, werden durch die Zeichenkette replace ersetzt. Anschließend findet ein GetString statt, um die richtige Sprache auszuwählen und auf Garmins die Sonderzeichen zu ersetzen.
Parameter
text: Ausgangstext, in dem Teile ersetzt werden sollen
search: Zeichenkette, die ersetzt werden soll
replace: Zeichenkette, die ersetzen soll. Für diese wird auch ein GetString aufgerufen, so dass die ersetzende Zeichenkette der Zielsprache entspricht
Aufruf
Language.ReplaceString("This is a ~str~ text@@Dies ist ein ~str~text", "~str~", "stupid@@Schwachsinns")

Language.ReplaceString(text, searchReplaceTable)
Beschreibung
Alle Teile, die einem Eintrag in searchReplaceTable entsprechen, werden durch den jeweiligen Wert ersetzt. Anschließend findet ein GetString statt, um die richtige Sprache auszuwählen und auf Garmins die Sonderzeichen zu ersetzen.
Parameter
text: Ausgangstext, in dem Teile ersetzt werden sollen
searchReplaceTable: Tabelle mit Einträgen in der Form search = replace
Aufruf
Language.ReplaceString("This is a ~str~ ~value~@@Dies ist ein ~str~~value", {["~str~"] = "test@@Test", ["~value~"] = "text"})

Was nicht geht :(
Der Emulator kann bei Commands und in Namen keine Umlaute anzeigen. Ich nehme an, dass dort automatisch alle Zeichen außerhalb von 7-Bit ASCII durch ein "?" ersetzt werden. Schade. Sonst wäre es ganz rund.
Der iPhone Player macht, wie immer, mal wieder Zicken. Das muss ich noch besser austesten, woran es liegt. Update kommt dann (wenn es geht :( ).

Was geht :)
Auf Garmins werden Umlaute angezeigt und auch bei Multiple Choice Fragen richtig verarbeitet. Auch WhereYouGo habe ich inzwischen getestet und hoffentlich alle Fehler behoben.
 

Anhänge

  • Language.zip
    36,1 KB · Aufrufe: 73
OP
C

Charlenni

Geomaster
Update

Wie ich gerade beim Testen festgestellt habe, überlebt die Cartridge das Speichern nicht. Das geht natürlich nicht. Mit der neuen Version sollte das behoben sein und das Speichern nun auch klappen.

Das mit dem iPhone wird noch ein etwas härterer Brocken. Da geht erstmal nichts. Sehr seltsam. Aber ich bin dran.
 

Anhänge

  • Language.zip
    12,8 KB · Aufrufe: 74

jonny65

Geomaster
Mach zur Zeit nix in meiner Wherigo Küche, aber mehrsprachig würde ich mir jetzt auch nicht antun. Interessant dann eher für Programmierer die in Grenzregionen wohnen. Italien, Frankreich, Österreich :???: :D usw. Umlaute hingegen w?ren mehr als zeitgem?? und wohl von allen w?nschenswert, was aber dann auch dicht sein m?sste, d.h ALLE Player m?ssten dies darstellen k?nnen. :/
 
OP
C

Charlenni

Geomaster
Tja, noch habe ich nicht alles im Griff ;) Aber der Garmin tut schon mal. Emulator interessiert mich nicht. WhereYouGo geht auch. Und WF.Player sowieso :D.

Fehlt nur noch der iPhone Player. Wieder mal. Und das könnte schwierig werden.

Zur Not kann man es tatsächlich soweit abspecken, dass nur die Garmin Umlaute übrig bleiben.
 

Bambergator

Geonewbie
Hallo zusammen,

ich habe gerade meinen ersten Wherigo fertig gestellt. Es ist ein Grusel-Night-Wherigo in der Altstadt von Neumarkt i.d.Opf. geworden. Er ist mit Urwigo erstellt worden.
Da ich das ganze mit viel Sound gespickt habe ist meine Cartridge 20,8 MB groß. Ich habe wegen der Umlaute den Wherigofoundation-Compiler genutzt, um die Cartridge erstmal auf meinem iPhone zu testen. Das klappt (fast) problemlos. Ich bekomme da ja beim Kompilieren wegen der Umlaute eine .gwc-Datei, aber zum Hochladen bei Wherigo.com benötige ich ja eine .gwz-Datei. Wie soll ich das mit den Umlauten jetzt hinbekommen beim Hochladen?
Die Fehlermeldung gibt "Wrong local header signature ..." aus. Ich check es nicht...
Könnte mir jemand von Euch helfen?
Vielen Dank!

Bambergator
 

Bambergator

Geonewbie
Danke für deine schnelle Reaktion.
Ich habe in Urwigo den Text ganz normal geschrieben, also mit ä,ü,ö,ß. Mit der UTF-Encoding-Funktion habe ich eine .gwz-Datei im Online-Compiler auf .gwc gewandelt und diese aufs iPhone zum testen geladen. Da klappt alles!
Aber das Hochladen geht dann nicht...
Gruß
 
Oben