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

Urwigo, Sprachauswahl

sTeamTraen

Geocacher
bodenseepingu schrieb:
Nein, auf Android geht das, Garmin, Pocket-Pc und Emulator stürzen mit einer LUA-Fehlermeldung ab, wie macht das Earwigo?
Bei mir auf Groundspeak-Emulator und Colorado kein Problem, auch wenn es um einen Runtime-Sprache-Wechsel (neue Funktionalität "WWB_change_language") handelt.
 

bodenseepingu

Geomaster
ich habs mal in einer Test-Cartridge probiert - aber ok - kann ja mal nochmals da rangehen, vielleicht habe ich da einen Fehler gemacht...
 

Charlenni

Geomaster
Sehr schönes Beispiel für Userscripte in Wherigo-Cartridges. Und dazu noch hervorragend erklärt. Klasse.

Bei der Ersetzungsfunktion wäre es das Beste, mit dem variablen Argumente Operator (...) zu arbeiten. Dann ist es egal, ob ein, zwei, drei oder mehr Argumente ersetzt werden sollen. Würde dann so aussehen:

Code:
function getMessageErsetzen(key,...)
  local value = getMessage(key)
  for k,v in ipairs(...) do
    value = string.gsub(value,"#"+tostring(k)+"#",v)
  end
  return value
end
(Allerdings nicht getestet, sondern im Halbschlaf zusammengeschustert ;) )

Was noch bleibt, und was in diesem Zusammenhang schon in der Earwigo-Gruppe diskutiert wurde, ist die Übersetzung der Bilder. Enthalten diese Text oder eindeutige Sprachbezüge (z.B. Bilderrätsel, Fahnen) ist auch hier eine Übersetzung nötig.

Apropos Earwigo: dort ist die Internationalisierung ganz leicht. Einfach verwendete Sprachen angeben, die Textfelder mit den Texten in den verschiedenen Sprachen füllen (deutsch@@englisch@@spanisch) und bei den Bildern die Sprache angeben. Am Ende dann noch einstellen, dass man eine internationalisierte Cartridge machen möchte. Fertig. Damit wird beim Start die Sprache in einer Multipel-Choice-Eingabe abgefragt und alle Texte (auch Schalter und so) on-the-fly übersetzt. Auch die zur Sprache gehörigen Bilder werden richtig gezogen. Äh, und das Ganze natürlich mit Umlauten, wie es sich für Sprachen gehört :D . Es lohnt sich also auf alle Fälle mal rein zu schauen.
 

Charlenni

Geomaster
Gerade habe ich noch eine Unaufmerksamkeit bemerkt. Es ist natürlich viel eleganter, die Funktion getMessage() umzuschreiben
Code:
function getMessage(key,...)
  local value = messages[messages.language][key]
  if value == nil then
    value = messages[messages.defaultLanguage][key]
  end
  for k,v in ipairs(...) do
    value = string.gsub(value,"#"+tostring(k)+"#",v)
  end
end
Der Aufruf lautet dann einfach
Code:
getMessage("Hello")
oder
Code:
getMessage("helloWithName","Krolock")
 

-Waldmeister-

Geocacher
[url=http://krolock.blogspot.de/2012/12/i18n-einen-wherigo-in-verschiedenen.html schrieb:
WherIBlog[/url]"]
Wir beginnen mit der Definition eines Arrays namens messages, dass wir auch gleich als persistente Variable so ans Cartrigde anheften, dass es einen Save/Reload Vorgang übersteht.
Würde aber doch auch ausreichen nur "messages.language" zu persistieren!?
Arbeite selbst an einer Mehrspachenerweiterung meines Wherigos mit einem 2D-Array.
Allgemein vertraue ich nicht allen Funktionen, die die verscheidenen Player implementiert haben.
Der Player freut sich sicher, wenn die Save/Reload Funktion nicht jedesmal das komplette 2D Array speichern muss?
 

bodenseepingu

Geomaster
wozu denn persistieren? Ich gehe mal davon aus dass alle Tables statisch initialisiert sind - warum sollte da Persistierung notwendig sein?
 

Krolock

Geocacher
-Waldmeister- schrieb:
Würde aber doch auch ausreichen nur "messages.language" zu persistieren!?

Vollkommen richtig,
Code:
messages.language
ist der einzig nicht statische Teil der während der Laufzeit geändert wird.
Die komplette Persistierung alle Messages würde auch den Speichervorgang ziemlich verlangsamen und fehleranfälliger machen.
Ich werde es überarbeiten.
Vielen Dank für den Hinweis
 

Krolock

Geocacher
Charlenni schrieb:
Bei der Ersetzungsfunktion wäre es das Beste, mit dem variablen Argumente Operator (...) zu arbeiten. Dann ist es egal, ob ein, zwei, drei oder mehr Argumente ersetzt werden sollen. Würde dann so aussehen:

Coole Idee,
mir war gar nicht bewusst, dass lua variable Argumente unterstüzt.
Wie sieht es denn mit der Unterstützung auf den Playern aus? Geht das auf allen oder muckt das Eierphon wieder rum *duckUndWeg*
 

Charlenni

Geomaster
Da ich es eigentlich in einigen Cartridges verwende, sollte es eigentlich auf allen Plattformen laufen. Ist ja auch Lua-Standard.

Das mit den verschiedenen Plattformen ist echt ärgerlich :(
 

Krolock

Geocacher
Mit ipairs funktioniert der Zugriff auf den vararg Operator nicht.
Im Urwigo-Simulator geht es mit #arg, bzw. arg[1]...
Code:
function getMessage(key, ...)
  local value = messages[language][key]
  if value == nil then
    value = messages[messages.defaultLanguage][key]
  end

  for i = 1, #arg do
    value = string.gsub(value, "#" .. tostring(i) .. "#", arg[i])
  end

  return value
end
 

Charlenni

Geomaster
Tut mir leid, habe das Ganze nicht getestet. Sollte ich wohl immer machen, da ich in Lua nicht arg firm bin :( .

Richtig wäre (im Emulator getestet):

Code:
function getMessage(key,...)
  local value = messages[messages.language][key]
  if value == nil then
    value = messages[messages.defaultLanguage][key]
  end
  for k,v in ipairs(arg) do
    value = string.gsub(value,"#"+tostring(k)+"#",v)
  end
end
 

Krolock

Geocacher
In der aktuellen Version von http://krolock.blogspot.de/2012/12/i18n-einen-wherigo-in-verschiedenen.html ist das Persistenzproblem als auch die vararg Lsg überarbeitet.

Ich werd bei #arg und arg bleiben, das ist mir persönlich übersichtlicher. Die ipairs Lsg ist aber auch nicht verkehrt.
 
Oben