Ich habe eine Lua-Webapplikation erstellt und es ist klar geworden, dass ich mit der Internationalisierung ("i18n") für meine ausländischen Kunden beginnen muss.
Was ist der beste Weg zur Internationalisierung meiner Anwendung in Lua?
Mir ist klar, dass dies ein bedeutendes Unterfangen ist, zumal ein Teil meiner Darstellung in HTML-Templates fest codiert ist und einige Datenfelder sich in meiner derzeit US-Englisch orientierten Datenbank befinden.
Jede Anleitung wäre willkommen.
Bearbeiten: hinzugefügtes metatables Zeug
Würde es jemandem etwas ausmachen, den obigen Beispielcode ein wenig klarer zu machen?
Sicher.
In einer Datei definieren Sie eine i18n
Variable mit den folgenden Methoden:
In derselben Datei oder in anderen (s) fügen Sie die erforderlichen Gebietsschemata in i18n.locales
ein.
Verwendung:
%Vor% In Lua ist es ziemlich einfach Übersetzungstabellen zu verwenden. Schreiben Sie zuerst den Code, so dass jede zu übersetzende Zeichenfolge über einen Funktionsaufruf verwendet wird, wie in i18n"Hello World"
. Schreiben Sie dann Übersetzungstabellen für die Sprachen, die Sie unterstützen möchten. Zum Beispiel English={["Hello World"]="Hello World"}
(oder fügen Sie ein Indexmetamethod hinzu, das einfach den Schlüssel zurückgibt, um die Wiederholung von Zeichenfolgen zu vermeiden) und French={["Hello World"]="Salut le monde"}
. Schreiben Sie schließlich function i18n(s) return Language[s] end
und setzen Sie Language=French
, wenn Sie es brauchen.
Ich löste das ungefähr genauso wie in der Antwort von lhf für bib.lua , ein Projekt von mir, das ein Modul verwendet Definieren einer Tabelle mit Strings. Ich hatte gerade darüber nachgedacht, es zu teilen, damit Sie Code sehen können, der tatsächlich etwas Ähnliches verwendet.
Es ist in bib / trans.lua.
Einige Dinge, die in meinem Ansatz hinzugefügt werden könnten, sind:
Überprüfen, ob die verwendete Übersetzung vollständig ist, z. B. alle in der reference Sprache wird in der verwendeten Sprache definiert. Oder besser noch, sogar Suche nach allen Zeichenfolgen im zu definierenden Programm.
Ein metatabler Mechanismus für die verschiedenen Nicht-Referenz Sprachen zum Drucken von a Warnung und geben Sie die Referenz Sprachbezeichnung zurück, wenn sie nicht in der verwendete Sprache.
Abgesehen von diesen Dingen fühlte ich mich ziemlich wohl damit, wie es ist. Schwierig sind nur, wenn Zeichenketten aufgrund von Unterschieden in der Sprachstruktur nicht übereinstimmen. Ich frage mich, wie ich diese lösen kann.
Tags und Links web-applications lua internationalization