Pluralen , Geschlechter , abgekürzte Zahlen , Ordnungsnummern , Laufzeit -Sprachänderung , Überlappung und Kürzungsprüfung und vieles mehr.
Das Solulieren hat eine Sammlung von APIs (Internationalisierung) für .NET, Angular und Delphi implementiert. Jede API fügt der Standard -I18N -API der Plattform zusätzliche Funktionen hinzu - beispielsweise Unterstützung für grammatikalische Zahlen, grammatikalische Geschlechter, abgekürzte Zahlen und Ordnungsnummern. Die Bibliothek enthält außerdem APIs, um den Laufzeitsprachwechsel von Anwendungen durchzuführen oder die Anfangssprache zur Laufzeit auszuwählen. Die Bibliothek enthält auch API, die Ihre Benutzeroberfläche auf der Laufzeit auf Probleme wie verkürzte oder überlappende Steuerelemente überprüft. Schließlich enthält die Delphi -Bibliothek eine ordnungsgemäße Lokalisierungsressource für Fironemonkey.
Jede API ist 100% native API. Dies bedeutet, dass es den vollständigen Quellcode enthält und keine zusätzlichen Dateien erfordert. .NET API enthält nur C# Code und benötigt keine andere Bibliotheks- oder Datendateien. In der gleichen Weise enthält die Winkel -API nur den TypeScript -Code, und die Delphi -API enthält nur Delphi -Code. Die vom Code verwendeten Regeln wurden von CLDR in Quellcode -Dateien extrahiert, die Teil des API -Quellcode sind. Sie benötigen keine ICU -Bibliothek oder CLDR -XML -Dateien, aber alles, einschließlich Logik und Regeln, werden in Ihre Anwendungsdatei zusammengestellt.
Die meisten Ressourcenformate (z. B., .resx in .NET, .Properties in Java und Ressourcen in Delphi) unterstützen nur einfache Zeichenfolgen. Grammatikalische Zahlen und Geschlechter benötigen Strukturdaten, bei denen mehrere Sprachanpass-Varianten für eine einzelne Zeichenfolge vorhanden sind. In englischer Sprache würde beispielsweise "Ich habe n Autos" zwei Varianten benötigt:
| Grammatikalische Zahl | .NETTO | Delphi und Java |
|---|---|---|
| Singular | Ich habe {0} Auto | Ich habe %D Car |
| Plural | Ich habe {0} Autos | Ich habe %d Cars |
Einige Plattformen wie Android und Angular haben ein integrierte Unterstützung für Plurals, und deshalb verfügen sie auch über ein spezielles Ressourcenformat für mehrere Muster. .NET, Delphi und Java haben jedoch kein solches Ressourcenformat. Diese Bibliothek verwendet das ICU -Nachrichtenformat, um alle verwandten Muster in eine Standard -Ressourcenzeichenfolge zu speichern. Die Syntax ist:
{parameter, kind, form1 {pattern1}[ form2 {pattern2}]...[ formN {patternN}]
Wo
kind ist entweder plural , gender oder select
form ist der Code für grammatikalische Zahlenform oder für grammatikalische Geschlechterform.
Die folgende Tabelle enthält mögliche Formulare.
| Bilden | Verwendet mit | Beschreibung |
|---|---|---|
| null | Grammatikzahlen | Nullar |
| eins | Grammatikzahlen | Singular |
| zwei | Grammatikzahlen | Dual |
| wenige | Grammatikzahlen | Paukal, Versuch oder ähnlich |
| viele | Grammatikzahlen | Größerer Paukal oder ähnlich |
| andere | Grammatikzahlen Grammatikalische Geschlechter | Plural Neutral |
| männlich | Grammatikalische Geschlechter | Männlich |
| weiblich | Grammatikalische Geschlechter | Weiblich |
| neutral | Grammatikalische Geschlechter | Neutral. Gleich wie andere. |
Zusätzlich der oben genannten Formulare können Sie den Bediener mit grammatikalischen Zahlen verwenden. Die Betreiber sind:
| Bilden | Beispiel | Beschreibung |
|---|---|---|
| = n | = 1 | Gleich |
| ~ n | ~ 12 | Um |
| > n | > 5 | Größer als |
| <n | <10 | Weniger als |
| > = n | > = 5 | Größer oder gleich zu |
| <= n | <= 10 | Weniger oder gleich zu |
| n..m | 2..6 | Reichweite |
Die Autoprobe für .NET wäre:
{plural, one {I have {0} car} other {I have {0} cars}}
Finnische Version wäre
{plural, one {Minulla on {0} auto} other {Minulla on {0} autoa}}
Japanische Version wäre
{plural, other {{0}車持っています}}
Japanisch hat nur eine Form, universell, so dass die Saite nur ein anderes Muster enthält.
Das Muster kann vor und nach der Multi-Muster-Syntax Text enthalten. Das folgende Beispiel enthält "Ich habe" vor dem Multi-Muster und "". Nach dem Multi-Muster.
I have {plural, one {{0} car} other {{0} cars}}.
Für Delphi wäre es die Probe
I have {plural, one {%d car} other {%d cars}}.
Wenn Ihr Muster Klammern ({oder}) haben muss, müssen sie mit entkommen werden. Charakter muss ebenfalls entkommen. Zum Beispiel "Ich mag Skifahren {alpine s}, aber ich habe nur {0} -Skierpaare" wäre
other {I like skiing {alpine\s} however, I only have {0} pairs of skis}
Siehe Beispiele in SamplesDelphiVCLPatterns , SamplesDelphiFMXPatterns , SamplesWindowsFormsPatterns und SamplesWPFPatterns -Verzeichnisse.
Die Klassen unterstützen auch das Legacy Multi -Muster -Format
one;I have {0} car;other;I have {0} cars
Die Unterstützung für dieses Legacy -Format wurde jedoch veraltet. Das ICU -Nachrichtenformat ist das empfohlene Format.
Die API unterstützt mehrere plural-/geschlechtsfähige Platzhalter. In diesem Fall haben Sie Ihre Zeichenfolge in Teile aufgeteilt, die jeweils einen Platzhalter enthalten, und dann die Segmente in einen logischen Satz ketten. Verwenden Sie das next Formular, um einen neuen Teil zu starten. Wenn ich beispielsweise "Ich habe C -Autos und S -Skier" sagen möchte, erstellen Sie die folgende Saite, die zwei Teile enthält: einen für Auto und eine für Ski. Jeder Teil enthält zwei Muster: Singular und Plural.
I have {plural, one {{0} car} other {{0} cars}} and {plural, one {{0} ski} other {{0} skis}}.
Die Saite enthält zwei Multi -Muster: Autos und Skier.
I have {plural, one {%d car} other {%d cars}} and {plural, one {%d ski} other {%d skis}}.
Siehe SamplesDelphiVCLPatternsMulti , SamplesDelphiFMXPatternsMulti , SamplesWindowsFormsPatternsMulti und SamplesWPFPatternsMulti -Samples.
Wenn wir große Zahlen auf einem Bildschirm anzeigen müssen, kann es für den Benutzer schwierig sein, die Größe einer Zahl leicht zu verstehen. Wenn wir beispielsweise Nummer 144563217 haben, wie sollten wir es dann zeigen? Wir könnten es gemäß den Regeln des Gebietsschemas des Benutzers formatieren. Zum Beispiel in den USA wäre es 14.456.217. Obwohl dies einfacher zu verstehen ist als die unformatierte Zahl, hat es immer noch nur wenige Probleme. Der erste ist, dass es einige Anstrengungen erfordert, um die Größe der Zahl zu verstehen. Zweitens erfordert es ziemlich viel Platz. Eine Lösung besteht darin, es mit 14.000.000 zu umrunden. Es ist einfacher zu verstehen. Um es noch einfacher zu verstehen, können wir es auch wie 14 m abkürzen. Die abgekürzten Formulare werden immer beliebter. Leider ist jede Sprache ihre Art und Weise zum Abkürzung. Die meisten Sprachen gehen um drei Ziffern. Zum Beispiel Englisch: K, M, G, T usw. Einige asiatische Sprachen gehen jedoch vier Ziffern. Zum Beispiel Japanisch: 万 (10.000), 億 (100.000.000) usw.
CLDR enthält Regeln, um Zahlen abzukürzen. Die abgekürzte Zahl API verwendet diese Regeln, um eine Nummer (Ganzzahl oder Float) als Zeichenfolge zu formatieren. Das Ergebnis kann entweder eine lange Zeichenfolge wie 14 Millionen, eine Kurzzeit von 14 m oder eine Währungszeichenfolge wie 14 Mio. USD sein.
CLDR enthält keine Informationen zum Erstellen von Ordnungsnummern aus einer Zahl. Ich habe die Regeln aus verschiedenen Quellen gesammelt. Es gibt immer noch viele Sprachen ohne ordnungsgemäße Regeln. Die Hilfe eines Muttersprachlers wäre geschätzt.
Einige Plattformen wie Angular haben keine Laufzeit -Übersetzung. Diese API implementiert es. Mit dieser API können Sie jetzt eine Zusammenstellung, eine Bereitstellung und eine URL vornehmen, die allen Sprachen dient.
Der Laufzeit -Sprachschalter ist eine Funktion, bei der die Anwendung die Sprache der Benutzeroberfläche zur Laufzeit ändern kann. Diese Bibliothek enthält dafür Code. Die Sprachänderung wird so implementiert, dass es sich nicht um eine Nachlade von Formularen oder Dialogwaren handelt, und der aktuelle Status der Anwendung bleibt unverändert.
Laufzeit -Sprachschalter -APIs sind für Delphi VCL, Delphi Fironemekey, .NET Windows -Formulare und .NET WPF ab.
Wenn wir Strings in eine andere Sprache übersetzen, besteht immer die Möglichkeit, dass die Übersetzung länger ist als die ursprüngliche Zeichenfolge. Dies gilt insbesondere dann, wenn die Originalsprache Englisch ist, da Englisch eine kompaktere Sprache ist, wie zum Beispiel Deutsch oder Finnisch. Wenn übersetzte Saiten länger werden, besteht ein Risiko, dass ein Teil der Saite abgeschnitten wird oder zwei oder mehr Strings überlappt. Situationen wie diese sind schwer zu finden. Benutzeroberfläche -Checker -API hilft. Es handelt sich um eine API, die Sie vorübergehend zu Ihrem Code verknüpfen können. Wenn Sie ausführen, schreibt die Anwendung eine Berichtsdatei mit Screenshots, die Kürzungen anzeigen und mit klaren Farben überlappt. Sie können sofort erkennen, wo eine Kürzung oder Überlappung auftritt.
User Interface Checker -APIs sind für Delphi VCL, Delphi FironMonkey, .NET Windows -Formulare und .NET WPF bezieht.
LibraryNET enthält die .NET -API. LibraryNETStandard enthält eine .NET -Standardbibliothek, die API für grammatikalische Zahlen, grammatikalische Geschlechter, abgekürzte Zahlen und Ordnungszahlen enthält. Kompilieren Sie es und fügen Sie dies in Ihre Lösung hinzu und fügen Sie die Bibliothek schließlich in die Referenzen Ihres Projekts hinzu. Da der NOI -Teil der Bibliothek .NET Standard ist, funktioniert er mit Windows -Formularen, WPF, ASP.NET, .NET Core und Xamarin. Sie können es auch mit jeder .NET -Version mit .NET 2.0 kompilieren.
Sie können die API durch Nuget bekommen.
Install-Package Soluling
Derzeit haben wir Beispiele für Windows -Formulare und WPF. Wir werden bald ASP.NET- und ASP.NET -Kernproben hinzufügen.
LibraryAngular enthält die Winkel -API. Die API erfordert Winkel 9 oder höher. Der einfachste Weg, es zu verwenden, ist über NPM.
npm install @soluling/angularUm mehr über diese API zu erfahren, lesen Sie ihre Dokumentation.
LibraryDelphi enthält die Delphi -API. Der einfachste Weg, sie in Ihre Bewerbung einzubeziehen, besteht darin, den Pfad Ihres Projekts den Pfad hinzuzufügen. Die Bibliothek unterstützt Delphi 7 oder später. Um jedoch alle Funktionen zu erhalten, benötigen Sie Delphi XE2 oder höher.
Firemonkey hat keine ordnungsgemäße Lokalisierungsressource. Wenn Ihre mobilen Zielplattformen wie iOS oder Android keine Ressourcen -DLLs verwenden können. Alles, einschließlich der lokalisierten Ressource, muss in der Hauptantragsdatei liegen. Diese Bibliothek enthält eine Lösung für die Lokalisierung von FireMonkey. Es verwendet ein spezielles .ntres -Dateiformat, um Formular ( .fmx ), Zeichenfolge, Bild und Audio -Ressourcen in eine einzelne .ntres -Datei zu speichern. Die Datei enthält die Ressourcen in allen Sprachen, die Sie unterstützen möchten. Schließlich fügen Sie die .ntres -Datei als benutzerdefinierte Ressource in Ihre Anwendung hinzu und verwenden die API -Aufrufe der Bibliothek, um auf die Ressourcen zuzugreifen. Sie müssen Ihre vorhandene Anwendung nicht so sehr ändern, um zu erstellen, ist mehrsprachig. Die einzige Ausnahme sind die Ressourcenzeichenfolgen. Sie können die nicht verwenden. Wenn Sie eine festcodierte Zeichenfolge haben und sie lokalisieren möchten, wickeln Sie sie in die _T -Funktion ein.
procedure TForm1.UpdateStrings ;
begin
Label1.Text := _T( ' Hello world ' );
end ;Wenn Sie bereits über eine vorhandene Ressourcenzeichenfolge verfügen, entfernen Sie sie und verwenden Sie die Funktion _t. Außerdem müssen Sie für jedes Formular _T anrufen.
procedure TForm1.FormCreate (Sender: TObject);
begin
_T(Self);
end ; Siehe zuerst SamplesDelphiFMXPatternsSimple Beispiel.
Sie können .ntres -Ressourcen auch in VCL -Anwendungen verwenden. Es wird jedoch empfohlen, die Standard -VCL -Lokalisierungsmethode mit Ressourcenzeichenfolgen und Ressourcen -DLLs oder lokalisierten EXE -Dateien zu verwenden.
C ++ Builder wird nicht offiziell unterstützt. Alle diese Codes sollten mit dem C ++ - Builder funktionieren, aber nie getestet.
Wir haben aus mehreren Gründen .NET, Angular und Delphi als erste Plattform ausgewählt. Erstens lieben wir Angular, C# und Delphi. Zweitens fehlt sowohl Delphi als auch .NET die Unterstützung für mehrere i18N -APIs wie Plural und Geschlechter. Der dritte ist, dass sowohl Delphi als auch .NET auch vom Laufzeit -Sprachschalter profitieren würden. Viertens ist, dass Delphi verwendet wird, um mobile Anwendungen zu erstellen, bei denen die Größe wichtig ist. Das fünfte ist, dass ich glaube, dass C# + .NET Core eine glänzende Zukunft haben wird.
Wir erwägen, ähnliche Klassen für Typscript zu implementieren (JavaScript kommt im Prozess). Typischerweise wird jedoch hauptsächlich mit Angular verwendet, das bereits eine große Unterstützung von Pluralen und Geschlechtern hat. Wir haben die Ladung der Laufzeitübersetzung für Angular implementiert. Wir werden wahrscheinlich nur abgekürzte Zahlen -API für Typscript implementieren.
Wir können ähnliche Bibliotheken für Java implementieren. Für Java gibt es bereits eine ICU-Implementierung. Wenn Sie also Java auf der serverseitigen Verwendung verwenden, können Sie sie verwenden. Wenn Sie Java auf der Kundenseite verwenden, ist es höchstwahrscheinlich Android und unterstützt Pluralen, jedoch nicht die Geschlechter. Wir erwägen immer noch die Unterstützung von Java. Lassen Sie uns wissen, ob es nützlich wäre.
BinCldrToCode.exe ist ein Tool, das Regeln aus den CLDR XML -Dateien an C #- und Delphi -Dateien extrahiert. Normalerweise müssen Sie es nicht verwenden, da die Bibliothek bereits extrahierte Dateien enthält, die Regeln in allen CLDR -Sprachen enthalten. Wenn Sie jedoch Regeldateien erstellen möchten, die nur einige Sprachen enthalten, können Sie CldrToCode.exe verwenden, um Ihre eigenen Regelndateien zu erstellen. Wenn Sie beispielsweise Regeldateien erstellen möchten, die nur Englisch, Deutsch und Französisch verwenden:
CldrToCode.exe -lang:en;de;fr D:CLDRcommon
Dadurch werden NtPluralData.pas , NtNumberData.pas , PluralData.cs und NumberData.cs erstellt.
Mit wenig Anstrengung können wir cldrtocode.exe machen, um auch Java-, Typscript- und Python -Dateien zu erstellen.
Dieses Repo enthält auch Beispielisierungs- und Lokalisierungsmusteranwendungen, Dateien und Datenbanken. Das Lösen hat Dutzende von Proben, die mehrere wichtige Programmierplattformen und Dateiformate abdecken. Die Beispiele sind aktuell und verwenden eine aktuelle Version ihrer Programmiersprache.
Das Lösen enthält Muster für die folgenden Plattformen:
Wenn Sie vorhaben, Ihre Anwendung anhand mehrerer Muster -Zeichenfolgen zu lokalisieren, verwenden Sie besser ein Lokalisierungstool, das die grammatikalischen Zahlen und grammatikalischen Geschlechter unterstützt. Das Löschen bietet eine hervorragende Unterstützung für mehrere Muster und unterstützt ASP.NET, .NET, Angular, React, Blazor, Delphi, Python, Java sowie mehr als 100 andere Datei- und Datenbankformate.
Das Solulieren unterstützt kontinuierliche Lokalisierung, maschinelle Übersetzung, interaktive Fuzzy -Matching -aktivierte Übersetzungsspeicher, interaktive Terminologie, Import/Export, Build -Tools und Cloud -Übersetzung.

Sie können von hier aus dem Solulen herunterladen.
Notiz! Im Moment sind Lösungen und Solumake Windows -Anwendungen und arbeiten nur unter Windows. Wir planen jedoch, in Zukunft eine webbasierte Version und Port Solumake an Linux und MacOS zu veröffentlichen.