Vorgehen: Eine Anwendung übersetzen
Die Texte einer Access-Anwendung in beliebig vielen Sprachen als Dateien des Projekts führen, jedem Übersetzer ein Paket seiner Sprache für Excel geben, alle Pakete in einem Schritt zurücknehmen und die Anwendung in jeder Sprache testen.
Voraussetzungen: WKL Office SDK 0.8 oder höher; WKL Forms Object Library 1.67 oder höher auf den Rechnern, auf denen
die Anwendung läuft (das Objekt WklTexts).
Lösungsüberblick
- Die Texte sind Dateien des Projekts:
source/texts/neutral.jsonenthält sie in der Sprache, in der die Anwendung geschrieben ist,source/texts/<code>.jsonje eine Übersetzung, für jeden Sprachcode (de.json,fr.json,pl.json…). - Der Build schreibt sie in die Tabelle
USysWklTextsder ACCDB und der ACCDE. Zur Laufzeit liefertWklTextsjeden Text in der Sprache der Sitzung; ein Schlüssel ohne Text in dieser Sprache zeigt den neutralen Text, danach den englischen. Zur Laufzeit wird das SDK nicht gebraucht. - Jeder Build meldet fehlende Übersetzungen, Texte mit anderen Platzhaltern, Schlüssel, die der Code verlangt, die aber keinen Text haben, und Übersetzungen, deren Vorlage sich inzwischen geändert hat.
- Jeder Übersetzer bekommt ein CSV-Paket seiner Sprache, das Excel direkt öffnet; die Pakete kommen in beliebiger Reihenfolge zurück und werden in einem Import zusammengeführt.
Umsetzung
Die neutralen Texte schreiben in
source/texts/neutral.json, in der Sprache, in der Sie entwickeln. Jeder Schlüssel braucht einen neutralen Text, denn er ist der Rückfall für jede andere Sprache:{ "orders.saved": "{0} orders saved.", "orders.title": "Orders" }Nennen Sie diese Sprache in der Projektdatei; dann braucht sie keine eigene Datei und wird nicht als unübersetzt gemeldet:
<NeutralLanguage>en</NeutralLanguage>
Die Schlüssel im Code verwenden, über
WklTexts(siehe die Dokumentation der WKL Forms Object Library, “Anwendung lokalisieren”):Dim texts As New WklTexts Me.Caption = texts.Text("orders.title") MsgBox texts.Text("orders.saved", count), vbInformation, texts.Text("wkl.information")Jedem Übersetzer ein Paket geben. Ein Befehl je Sprache:
wkl-office texts export Orders.acproj --language fr wkl-office texts export Orders.acproj --language it
Jeder Befehl schreibt
texts.<code>.csvneben die Projektdatei, mit den Spaltenkey,source(der neutrale Text), der Sprache undreview. Der Übersetzer füllt in Excel nur die Sprachspalte und speichert die Datei als CSV UTF-8. Eine Zeile mit Text inreviewist eine Übersetzung zum Prüfen: Die Spalte zeigt die Vorlage, nach der sie entstand.Alle Pakete auf einmal übernehmen, sobald sie da sind:
wkl-office texts import Orders.acproj texts.fr.csv texts.it.csvGeschrieben werden nur die Sprachspalten. Eine leere Zelle und eine fehlende Zeile ändern nichts; ein Übersetzer, der das Paket halb fertig zurückgibt, löscht also nichts. Eine Zeile je Sprache nennt, wie viele Texte neu, geändert, noch unübersetzt und zur Prüfung markiert sind. Prüfen und committen Sie die Dateien wie jede andere Quelle.
- Bauen und prüfen.
wkl-office build Orders.acprojschreibt die Texte in die Datenbank und nennt als Warnung jeden Schlüssel, der in einer Sprache keinen Text hat, und jede zur Prüfung markierte Übersetzung. In jeder Sprache testen:
foreach ($language in 'en', 'fr', 'it') { wkl-office test Orders.acproj --language $language --work "test-results\$language" }
--languagelegt die Sprache der Sitzung für die Anwendungstexte und die WKL-Komponenten fest, unabhängig von der Sprache von Office.
Erwartetes Ergebnis
ACCDB und ACCDE enthalten die Tabelle USysWklTexts mit jedem Text jeder Sprache. In einem französischen Office zeigt
die Anwendung ihre französischen Texte; ein Schlüssel ohne französischen Text zeigt den neutralen Text. Ein Testlauf
mit --language fr meldet dieselben Prüfungen wie in einem französischen Office.
Hinweise
- Zwei Pakete widersprechen sich. Liefern zwei Dateien für denselben Schlüssel und dieselbe Sprache verschiedene Texte, nennt der Import jeden Widerspruch, schreibt nichts und endet mit Exitcode 2. Entfernen Sie die falsche Zeile oder Datei und importieren Sie erneut.
- Der neutrale Text hat sich geändert. Die Übersetzungen, die nach dem früheren Text entstanden, werden in
source/texts/review.<code>.jsonzur Prüfung markiert, und das nächste Paket zeigt diesen früheren Text in der Spaltereview. Ein Paket, das nach einer veralteten Vorlage übersetzt wurde, wird übernommen und ebenso markiert. Die Markierung verschwindet, sobald eine Übersetzung des aktuellen Texts zurückkommt. - Neue Schlüssel kommen aus den neutralen Texten. Ein Paket kann keine Schlüssel hinzufügen: Eine Zeile mit einem Schlüssel, den die Anwendung nicht hat, wird mit einer Warnung übergangen.
- Der ganze Bestand in einer Datei.
texts exportohne--languageschreibt alle Sprachen intexts.csv, eine Spalte je Sprache,neutralzuerst.texts import --replace texts.csvnimmt eine solche Datei als ganzen Bestand: Ein Schlüssel, der in ihr fehlt, wird entfernt, und eine Sprachspalte, die in jeder Zeile leer ist, lässt ihre Datei unverändert. - Keine neutralen Texte. Ein Projekt, das nur
source/texts/en.jsonhat, funktioniert weiter: Dann ist Englisch die Vorlage der Prüfungen und der Pakete. - Excel und Trennzeichen. Excel speichert CSV mit dem Listentrennzeichen der Regionaleinstellungen, Komma oder Semikolon;
texts importliest beides. Speichern Sie als “CSV UTF-8”: Das einfache Format “CSV” von Excel verliert č, š, ž und andere Buchstaben außerhalb der Codepage von Windows. - Eine Datei am falschen Ort. Eine Textdatei einer Sprache außerhalb von
source/texts(zum Beispielsource/fr.json) wird nicht gelesen;checkundbuildmelden sie als Warnung. - Terminologie.
source/texts/terms.<code>.jsonnennt Begriffe, die nicht verwendet werden sollen, zum Beispiel{ "podatkovna zbirka": [ "zbirka podatkov" ] }; jeder Build meldet einen Text, der eine solche Variante enthält. - In Access geändert? Der Export schreibt die Tabelle
USysWklTextsnie zurück: Ändern Sie Texte in den Dateien, nicht in der Datenbank. - Tests finden Lücken.
WklTexts.Missingnennt die Schlüssel, die in der verlangten Sprache keinen Text hatten; ein Test, dertexts.Missing = ""prüft, schlägt bei einer unvollständigen Übersetzung fehl.