Anwendung lokalisieren
Zeigen Sie die eigenen Texte einer Access-Anwendung – Meldungen, Beschriftungen, Fragen – in der Sprache an, in der auch die WKL-Komponenten mit dem Benutzer sprechen: Englisch, Deutsch, Slowenisch, Kroatisch oder Italienisch, mit einer Datenbank für alle Sprachen.
Voraussetzungen: WKL Forms Object Library 1.65 oder höher; Beschriftungen mit Schlüssel (@orders.title) ab 1.66,
neutrale Texte, weitere Sprachen und der Sprachordner ab 1.67.
Lösungsüberblick
- Die Texte stehen in der Tabelle
USysWklTextsder Anwendung: ein Datensatz je Schlüssel und Sprache. Die Tabelle liegt in der Datenbank selbst; ACCDE und Access Runtime brauchen nichts weiter. - Im Code holt
WklTexts.Texteinen Text nach Schlüssel. Er erscheint in der Sprache, die die Komponenten für die Datenbank gewählt haben (Sprache der Komponenten festlegen); fehlt die Übersetzung, in Englisch. - Beschriftungen, die Sie in der Entwurfsansicht festlegen, nennen statt eines Textes einen Schlüssel:
@orders.title. WKL-Steuerelemente und das Menüband zeigen den Text selbst an; für die Access-eigenen Steuerelemente eines Formulars oder Berichts genügt ein Aufruf vonWklTexts.Localizeim Ereignis Beim Öffnen. Ein Formular dient so allen Sprachen. - Für Schaltflächen und Rückfragen, die jede Anwendung braucht (OK, Abbrechen, Speichern, Löschen …), gibt es Standardtexte mit festen Schlüsseln
wkl.*. Sie sind in allen fünf Sprachen geprüft und lauten in jeder WKL-Anwendung gleich.
Projekte des WKL Office SDK: Führen Sie die Texte statt mit den Schritten 1 und 2 als Dateien
source/texts/<Sprache>.jsondes Projekts; der Build schreibt daraus die TabelleUSysWklTexts. Steht zusätzlich eine Tabelle dieses Namens unter den Quellen, bricht der Build ab (Dokumentation des WKL Office SDK, „Vorgehen: Eine Anwendung übersetzen“). Die Schritte 3 und 4 gelten unverändert.
Umsetzung
Tabelle anlegen. Führen Sie die Anweisung einmal aus, zum Beispiel im Direktbereich des VBA-Editors:
CurrentDb.Execute "CREATE TABLE USysWklTexts (ID COUNTER CONSTRAINT pkUSysWklTexts PRIMARY KEY, " & _ "TextKey TEXT(255), Language TEXT(10), TextValue MEMO)", dbFailOnErrorDas Präfix
USysblendet die Tabelle im Navigationsbereich aus, solange Systemobjekte ausgeblendet sind.Texte eintragen. Je Schlüssel ein Datensatz für Englisch und je einer für jede weitere Sprache:
TextKey Language TextValue orders.titleenOrders orders.titledeAufträge orders.saveden{0} orders saved. orders.savedde{0} Aufträge gespeichert. Englisch ist die Rückfallsprache; legen Sie jeden Schlüssel mindestens in Englisch an.
Texte im Code verwenden:
Private Sub cmdSave_Click() Dim texts As New WklTexts Dim count As Long On Error GoTo ErrorHandler count = SaveOrders() MsgBox texts.Text("orders.saved", count), vbInformation, texts.Text("wkl.information") FinalHandler: Exit Sub ErrorHandler: MsgBox Err.Description, vbExclamation, texts.Text("wkl.error") Resume FinalHandler End SubNew WklTextsbraucht den Verweis WKL Forms x.y Object Library (VBA-Editor: Extras › Verweise); ohne Verweis schreiben SieCreateObject("WklForms.Texts").Schlüssel in die Beschriftungen schreiben. Setzen Sie in der Entwurfsansicht die Eigenschaft Beschriftung des Formulars auf
@orders.title, die der Schaltfläche Speichern auf@wkl.saveund die der Schaltfläche Schließen auf@wkl.close. Lokalisieren Sie das Formular dann beim Öffnen:Private Sub Form_Open(Cancel As Integer) Dim texts As New WklTexts texts.Localize Me End SubLocalizeersetzt Beschriftung (Caption), SteuerelementTip-Text (ControlTipText) und Statusleistentext (StatusBarText) des Formulars und aller seiner Steuerelemente, deren Wert ein Schlüssel ist, und gibt die Zahl der ersetzten Werte zurück. Ein Bericht macht es ebenso inReport_Open; ein Unterformular lokalisiert sich im eigenen Ereignis Beim Öffnen.
WKL-Steuerelemente, Menüband und Navigation
WKL-Steuerelemente nehmen überall, wo sie eine Beschriftung haben, einen Schlüssel an und zeigen dessen Text ohne Code:
| Wo | Beschriftung mit Schlüssel |
|---|---|
| WklGrid, WklTreeList | Spalten- und Bandbeschriftungen, Befehlsschaltflächen der Zeilen, Register der Detailansichten |
| WklPropertyGrid | Feldbeschriftungen und Kategorien |
WklNavBar und die Navigationstabelle USysWklShellNavigation | Gruppen und Einträge (Spalte Caption der Tabelle) |
| WklActionBar | Titel, Untertitel, Befehle, deren QuickInfos, die Schaltfläche Mehr |
| WklButton | Beschriftung, Menüeinträge, Segmente |
| WklToggleSwitch, WklGauge | Beschriftung, Ein- und Aus-Text; Beschriftung, Hinweis und Balkenbeschriftungen |
Menüband-Modell (USysWklRibbon) | Beschriftungen von Registerkarten, Gruppen, Backstage-Elementen und Befehlen |
Entwurfsansicht, Eigenschaftenblätter, Designer und die gespeicherte Definition behalten den Schlüssel; das Formular bleibt in jeder Sprache dasselbe. QuickInfos und erweiterte QuickInfos (screentip, supertip) des Menübands werden so geschrieben, wie sie stehen, und nehmen keine Schlüssel an.
Neutrale Texte, weitere Sprachen und Sprachordner
- Neutrale Texte. Datensätze mit der Sprache
neutralenthalten den Text, den ein Schlüssel in jeder Sprache ohne eigene Übersetzung zeigt, noch vor Englisch. Schreiben Sie dort die Texte in Ihrer eigenen Sprache und ergänzen Sie nur die Übersetzungen: Sind die neutralen Texte deutsch, bleibt die Spaltedeleer. Die Reihenfolge lautet: verlangte Sprache,neutral,en,[key]. - Beliebige Sprachen. Die Texte der Anwendung dürfen in jeder Sprache vorliegen, etwa
fr,ploderes; ein regionaler Code wiefr-CAzählt als seine Sprache. Die Sprache der Sitzung ist die erste aus Anwendungsmodell, Office und Windows, in der die Anwendung Texte hat. Die WKL-Steuerelemente bleiben bei ihren fünf Sprachen: Bei französischen Anwendungstexten zeigen sie ihre eigenen Texte in der Sprache, die sie sonst wählen. Sprachordner
i18n. Dateien<Sprache>.jsonundneutral.jsonin einem Ordneri18nneben der Datenbank ergänzen die Texte und ersetzen Datensätze der Tabelle mit gleichem Schlüssel und gleicher Sprache – für eine Korrektur oder eine weitere Sprache nach der Auslieferung, ohne neuen Build. Jede Datei ist ein JSON-Objekt aus Schlüsseln und Texten in UTF-8:{ "orders.title": "Commandes", "orders.saved": "{0} commandes enregistrées." }Eine Datei, die sich nicht lesen lässt, wird übergangen; die übrigen Texte gelten weiter. Wer in den Ordner schreiben darf, ändert die Texte der Anwendung: Schützen Sie ihn auf einer Netzwerkfreigabe wie die Datenbank selbst.
Excel und Word. Eine Arbeitsmappe oder ein Dokument hat keine Tabelle; die Texte kommen aus einem Sprachordner, den der Code einmal nennt, zum Beispiel in
Workbook_Open:Dim texts As New WklTexts texts.Folder = ThisWorkbook.Path & "\i18n"
Die Sprache ist dort die Anzeigesprache von Windows, wenn der Ordner Texte in ihr hat, sonst die Sprache der Komponenten;
texts.Languagelegt eine andere fest.
Erwartetes Ergebnis
In einem deutschen Office zeigt das Formular „Aufträge“ und die Schaltflächen „Speichern“ und „Schließen“, in einem
slowenischen „Naročila“, „Shrani“ und „Zapri“. Eine Spalte eines WklGrid mit der Beschriftung @orders.customer zeigt
ebenso „Kunde“ oder „Stranka“. Hat orders.title keine slowenische Übersetzung, erscheint sein neutraler Text und ohne diesen „Orders“. Ein
Schlüssel ohne jeden Text erscheint als [orders.title], damit die Lücke auffällt, statt eine leere Beschriftung zu
hinterlassen.
Hinweise
- Platzhalter:
{0},{1}… werden in dieser Reihenfolge mit den weiteren Argumenten vonTextgefüllt;{0:N2}zeigt eine Zahl mit zwei Nachkommastellen,{1:d}ein kurzes Datum. Zahlen und Datumsangaben folgen den Regionaleinstellungen von Windows, wie alles, was Access formatiert, nicht der Sprache des Textes. - Schlüssel unterscheiden nicht zwischen Groß- und Kleinschreibung. Punkte gliedern sie nach Formular oder Thema (
orders.title,orders.saved). - Welche Beschriftungen Schlüssel sind:
@, gefolgt von einem Schlüssel mit mindestens einem Punkt und nur Buchstaben, Ziffern,.,_und-.@Homeoder@ Bürobleiben, wie sie sind.@@am Anfang schreibt ein wörtliches@:@@orders.titlezeigt@orders.title. Ein Schlüssel ohne jeden Text erscheint als[key]und steht inMissing, wie beiText. Localizeeinmal je Öffnen aufrufen, in der Formular- oder Berichtsansicht. Danach enthalten die Eigenschaften die Texte. In der Entwurfsansicht löstLocalizeeinen Fehler aus, statt die Schlüssel zu ersetzen, die sonst mit dem Formular gespeichert würden.- Beschriftungen als Daten:
texts.CaptionText(Wert)löst einen Wert nach derselben Regel auf wie die Steuerelemente, zum Beispiel die Beschriftung der Navigationstabelle, die die Anwendung in eine Tabelle oder einen Bericht übernimmt. - Standardtexte
wkl.*lassen sich nicht überschreiben; ein Datensatz der Anwendung mit einem solchen Schlüssel wird übergangen. Die Liste steht in der API-Referenz von WklTexts. - Sprache für einen Test festlegen:
texts.Language = "sl"zeigt bis zum Ende von Access alle Texte – auch die der Komponenten – auf Slowenisch, unabhängig von Office;texts.Language = ""kehrt zur gemessenen Sprache zurück.texts.Missingnennt danach jeden Schlüssel, dem in der verlangten Sprache der Text fehlte, je ZeileSchlüssel Sprache. Ein Test kann so prüfen, dass eine Übersetzung vollständig ist. - Wann die Texte gelesen werden: Tabelle und Sprachordner einmal je Datenbank und Access-Sitzung. Ändert die Anwendung sie während des Betriebs, liest
texts.Reloadsie neu. - IntelliSense und die Namen der Mitglieder bleiben englisch; nur die Texte wechseln die Sprache.