Plurals , Genders , Nombres abrégés , numéros ordinaux , changement de langue d'exécution , chevauchement et vérification de la troncature , et bien d'autres.
Soluling a mis en œuvre une collection d'API d'internationalisation (I18N) pour .NET, Angular et Delphi. Chaque API ajoute des fonctionnalités supplémentaires à l'API I18N standard de la plate-forme - par exemple, la prise en charge des nombres grammaticaux, des genres grammaticaux, des nombres abrégés et des nombres ordinaux. La bibliothèque comprend également des API pour effectuer un commutateur de langage d'exécution des applications, ou pour sélectionner la langue initiale lors de l'exécution. La bibliothèque contient également des API qui vérifient votre interface utilisateur pour des problèmes tels que des contrôles tronqués ou chevauchés. Enfin, la bibliothèque Delphi contient une ressource de localisation appropriée pour FiremonKey.
Chaque API est une API 100% native. Cela signifie qu'il contient du code source complet et ne nécessite aucun fichier supplémentaire. L'API .NET ne contient que du code C # et ne nécessite aucune autre bibliothèque ou fichiers de données. De la même manière, l'API angulaire ne contient que du code TypeScript, et l'API Delphi ne contient que du code Delphi. Les règles utilisées par le code ont été extraites de CLDR dans des fichiers de code source qui font partie du code source de l'API. Vous n'avez pas besoin de fichiers ICU Library ou CLDR XML, mais tout, y compris la logique et les règles, est compilé dans votre fichier d'application.
La plupart des formats de ressources (par exemple, .resx dans .net, .properties en java et chaînes de ressources à Delphi) ne prennent en charge que les chaînes simples. Les nombres grammaticaux et les sexes nécessitent des données structurelles où il existe plusieurs variantes de la langue pour une seule chaîne. Par exemple, en anglais, "J'ai n voitures" nécessiterait deux variantes:
| Numéro grammatical | .FILET | Delphi et Java |
|---|---|---|
| singulier | J'ai {0} voiture | J'ai% d voiture |
| pluriel | J'ai des voitures {0} | J'ai% d des voitures |
Certaines plateformes telles qu'Android et Angular ont une prise en charge intégrée pour les pluriels, et c'est pourquoi ils ont également un format de ressources spécial pour contenir plusieurs modèles. Cependant, .NET, Delphi et Java n'ont pas un tel format de ressources. Cette bibliothèque utilise le format de message USI pour stocker tous les modèles connexes dans une chaîne de ressources standard. La syntaxe est:
{parameter, kind, form1 {pattern1}[ form2 {pattern2}]...[ formN {patternN}]
où
kind est plural , gender ou select
form est le code pour le numéro de numéro grammatical ou pour la forme grammaticale de genre.
Le tableau suivant contient des formulaires possibles.
| Formulaire | Utilisé avec | Description |
|---|---|---|
| zéro | Nombres grammaticaux | Nullar |
| un | Nombres grammaticaux | Singulier |
| deux | Nombres grammaticaux | Double |
| peu | Nombres grammaticaux | Pauvre, essai ou similaire |
| beaucoup | Nombres grammaticaux | Plus grand ou similaire |
| autre | Nombres grammaticaux Gendeurs grammaticaux | Pluriel Neutre |
| mâle | Gendeurs grammaticaux | Mâle |
| femelle | Gendeurs grammaticaux | Femelle |
| neutre | Gendeurs grammaticaux | Neutre. Identique à l'autre. |
En plus des formulaires ci-dessus, vous pouvez utiliser l'opérateur avec des nombres grammaticaux. Les opérateurs sont:
| Formulaire | Exemple | Description |
|---|---|---|
| = n | = 1 | Égal |
| ~ n | ~ 12 | Autour |
| > n | > 5 | Supérieur à |
| <n | <10 | Moins que |
| > = n | > = 5 | Plus grand ou égal à |
| <= n | <= 10 | Moins ou égal à |
| N..M | 2..6 | Gamme |
L'échantillon de voiture pour .net serait:
{plural, one {I have {0} car} other {I have {0} cars}}
La version finlandaise serait
{plural, one {Minulla on {0} auto} other {Minulla on {0} autoa}}
La version japonaise serait
{plural, other {{0}車持っています}}
Le japonais n'a qu'une seule forme, universel, donc la chaîne ne contient que d'autres motifs.
Le motif peut contenir du texte avant et après la syntaxe multi-motifs. L'exemple suivant contient "J'ai" avant le multi-motifs et "." Après le multi-motifs.
I have {plural, one {{0} car} other {{0} cars}}.
Pour Delphi, l'échantillon ce serait
I have {plural, one {%d car} other {%d cars}}.
Si votre modèle doit avoir des accolades ({ou}), ils doivent être échappés à l'aide de . Le caractère doit également être échappé. Par exemple "j'aime le ski {Alpine s} cependant, je n'ai que des paires de skis"
other {I like skiing {alpine\s} however, I only have {0} pairs of skis}
Voir des échantillons dans SamplesDelphiVCLPatterns , SamplesDelphiFMXPatterns , SamplesWindowsFormsPatterns et SamplesWPFPatterns répertoires.
Les classes prennent également en charge le format multi-motifs hérités
one;I have {0} car;other;I have {0} cars
Cependant, le soutien à ce format hérité a été obsolète. Le format de message USI est le format recommandé.
L'API prend en charge plusieurs espaces réservés en pluriel / sexe. Dans ce cas, vous avez divisé votre chaîne en parties, chacune contenant un espace réservé, puis enchaînez les segments en une phrase logique. Utilisez le formulaire next pour démarrer une nouvelle pièce. Par exemple, si je veux dire "J'ai des voitures C et S skis", vous créera la chaîne suivante qui contient deux parties: une pour la voiture et une autre pour le ski. Chaque partie contient deux modèles: singulier et pluriel.
I have {plural, one {{0} car} other {{0} cars}} and {plural, one {{0} ski} other {{0} skis}}.
La chaîne contient deux motifs multiples: les voitures et les skis.
I have {plural, one {%d car} other {%d cars}} and {plural, one {%d ski} other {%d skis}}.
Voir SamplesDelphiVCLPatternsMulti , SamplesDelphiFMXPatternsMulti , SamplesWindowsFormsPatternsMulti and SamplesWPFPatternsMulti Samples.
Si nous devons afficher de grands nombres sur un écran, il peut être difficile pour l'utilisateur de comprendre facilement l'ampleur d'un nombre. Par exemple, si nous avons le numéro 144563217, comment devrions-nous le montrer. Nous pourrions le formater en fonction des règles de la région de l'utilisateur. Par exemple, aux États-Unis, ce serait 14 456 217. Bien que cela soit plus facile à comprendre que le nombre non formaté, il a encore peu de problèmes. Le premier est qu'il faut un certain effort pour comprendre l'ampleur du nombre. Deuxièmement, cela nécessite beaucoup d'espace. Une solution consiste à l'arrondir comme 14 000 000. C'est plus facile à comprendre. Pour le rendre encore plus facile à comprendre, nous pouvons également l'abréger comme 14 m. Les formulaires abrégés deviennent de plus en plus populaires. Malheureusement, chaque langue comme son chemin pour abréger. La plupart des langues vont à trois chiffres. Par exemple, l'anglais: k, m, g, t, etc. Cependant, certaines langues asiatiques vont à quatre chiffres. Par exemple, japonais: 万 (10 000), 億 (100 000 000), etc.
CLDR contient des règles pour abréger les nombres. L'API du numéro abrégé utilise ces règles pour formater un nombre (entier ou float) en tant que chaîne. Le résultat peut être soit une longue chaîne telle que 14 millions, à court de 14 m ou une chaîne de devises telle que 14 millions de dollars.
CLDR ne contient pas d'informations sur la façon de créer des numéros ordinaux à partir d'un nombre. J'ai collecté les règles de diverses sources. Il existe encore de nombreuses langues sans règles appropriées. L'aide d'un locuteur natif serait appréciée.
Certaines plates-formes telles que Angular n'ont pas de chargement de traduction d'exécution. Cette API l'implémente. En utilisant cette API, vous pouvez maintenant faire une compilation, un déploiement et une URL qui sert toutes les langues.
Le commutateur de langage d'exécution est une fonctionnalité où l'application peut modifier la langue de son interface utilisateur lors de l'exécution. Cette bibliothèque contient du code pour cela. Le changement de langue est mis en œuvre de telle manière qu'il n'y a pas de rechargement de formulaires ou de dialogue, et l'état actuel de l'application reste inchangé.
Les API du commutateur de langue d'exécution sont destinées à Delphi VCL, Delphi FiremonKey, .NET Windows Forms et .NET WPF.
Lorsque nous traduisons les chaînes dans une autre langue, il est toujours possible que la traduction soit plus longue que la chaîne originale. Cela est particulièrement vrai si la langue d'origine est l'anglais parce que l'anglais est une langue plus compacte, car par exemple, allemand ou finlandais. Lorsque les chaînes traduites s'allongent, il y a un risque qu'une partie de la chaîne soit tronquée ou deux ou plusieurs cordes se chevauchent. Des situations comme celles-ci sont difficiles à trouver. L'API de vérification de l'interface utilisateur aide. Il s'agit d'une API que votre lien temporaire vers votre code, et lorsque vous exécutez l'application, rédige un fichier de rapport avec des captures d'écran affichant des troncatures et chevauchées marquées de couleurs claires. Vous pouvez voir instantanément où se produit une troncature ou un chevauchement.
Les API de vérification de l'interface utilisateur sont pour Delphi VCL, Delphi FiremonKey, .NET Windows Forms et .NET WPF.
LibraryNET contient l'API .NET. LibraryNETStandard contient une bibliothèque standard .NET qui contient une API pour les nombres grammaticaux, les genres grammaticaux, les nombres abrégés et les nombres ordinaux. Compilez-le et ajoutez-le dans votre solution et enfin ajoutez la bibliothèque dans les références de votre projet. Étant donné que la partie NO UI de la bibliothèque est .NET Standard, elle fonctionne avec Windows Forms, WPF, ASP.NET, .NET Core et Xamarin. Vous pouvez également le compiler à l'aide de n'importe quelle version .NET en commençant par .NET 2.0.
Vous pouvez obtenir l'API via Nuget.
Install-Package Soluling
Actuellement, nous avons des échantillons pour Windows Forms et WPF. Nous ajouterons bientôt ASP.NET et ASP.NET Core Samples.
LibraryAngular contient l'API angulaire. L'API nécessite un angulaire 9 ou version ultérieure. La façon la plus simple de l'utiliser est le NPM.
npm install @soluling/angularPour en savoir plus sur cette API, lisez sa documentation.
LibraryDelphi contient l'API Delphi. Le moyen le plus simple de les inclure dans votre application est d'ajouter le chemin du chemin de recherche de votre projet. La bibliothèque prend en charge Delphi 7 ou version ultérieure. Cependant, pour obtenir toutes les fonctionnalités dont vous avez besoin Delphi XE2 ou plus tard.
FiremonKey n'a pas de ressource de localisation appropriée. Si vos plates-formes mobiles cibles telles que iOS ou Android, vous ne pouvez pas utiliser les DLL de ressources. Tout, y compris la ressource localisée, doit être dans le fichier d'application principal. Cette bibliothèque contient une solution pour la localisation de FiremonKey. Il utilise un format de fichier .ntres spécial pour stocker le formulaire ( .fmx ), la chaîne, l'image et les ressources audio dans un seul fichier .ntres . Le fichier contient les ressources dans toutes les langues que vous souhaitez prendre en charge. Enfin, vous ajoutez le fichier .ntres en tant que ressource personnalisée dans votre application et utilisez les appels API de la bibliothèque pour accéder aux ressources. Vous n'avez pas à modifier autant votre application existante pour que vous soyez multilingue. La seule exception est les chaînes de ressources. Vous ne pouvez pas utiliser le. Si vous avez une chaîne codée en dur et que vous souhaitez la localiser, enveloppez-la dans la fonction _t.
procedure TForm1.UpdateStrings ;
begin
Label1.Text := _T( ' Hello world ' );
end ;Si vous avez déjà une chaîne de ressources existante, supprimez-la et utilisez la fonction _t. De plus, vous devez appeler _T pour chaque formulaire.
procedure TForm1.FormCreate (Sender: TObject);
begin
_T(Self);
end ; Voir SamplesDelphiFMXPatternsSimple d'abord.
Vous pouvez également utiliser des ressources .ntres dans les applications VCL, mais il est recommandé d'utiliser la méthode de localisation VCL standard avec des chaînes de ressources et des DLL de ressources ou des fichiers EXE localisés.
Le constructeur C ++ n'est pas officiellement soutenu. Tous ces codes doivent fonctionner avec C ++ Builder mais jamais testés.
Nous avons choisi .NET, Angular et Delphi comme première plate-forme pour plusieurs raisons. Le premier est que nous aimons Angular, C # et Delphi. Deuxièmement, Delphi et .NET manquent de support pour plusieurs API i18n, telles que les pluriels et les sexes. Le troisième est que Delphi et .NET bénéficieraient également du commutateur de langage d'exécution. Le quatrième est que Delphi est utilisé pour créer des applications mobiles où la taille compte. Le cinquième est que je crois que C # + .NET Core aura un brillant avenir.
Nous envisageons d'implémenter des classes similaires pour TypeScript (JavaScript est disponible dans le processus). Cependant, le type dactylographié est principalement utilisé avec Angular qui a déjà de grands pluriels de soutien et des genres. Nous avons implémenté le chargement de traduction d'exécution pour Angular. Nous implémenterons probablement uniquement l'API des nombres abrégés pour TypeScript.
Nous pouvons implémenter des bibliothèques similaires pour Java. Il y a déjà une implémentation en USI pour Java, donc si vous utilisez Java à côté du serveur, vous pouvez l'utiliser. Si vous utilisez Java sur le côté client, ce sera probablement Android et il prend en charge les pluriels mais pas les sexes. Nous envisageons toujours le support de Java. Faites-nous savoir si ce serait utile.
BinCldrToCode.exe est un outil qui extrait les règles des fichiers CLDR XML aux fichiers C # et Delphi. Normalement, vous n'avez pas à l'utiliser car la bibliothèque contient déjà des fichiers extraits contenant des règles dans toutes les langues CLDR. Cependant, si vous souhaitez créer des fichiers de règles qui ne contiennent que des langues, vous pouvez utiliser CldrToCode.exe pour créer vos propres fichiers de règles. Par exemple, si vous souhaitez créer des fichiers de règles qui ne contient que l'anglais, l'allemand et le français:
CldrToCode.exe -lang:en;de;fr D:CLDRcommon
Cela créera NtPluralData.pas , NtNumberData.pas , PluralData.cs et NumberData.cs .
Avec peu d'efforts, nous pouvons faire Cldrtocode.exe pour créer également des fichiers Java, TypeScript et Python.
Ce dépôt contient également l'internationalisation et la localisation de l'application, des fichiers et des bases de données. Le soluling a des dizaines d'échantillons couvrant plusieurs plates-formes de programmation et formats de fichiers majeurs. Les échantillons sont à jour et utilisent une version récente de leur langage de programmation.
Le soluling contient des échantillons pour les plates-formes suivantes:
Si vous prévoyez de localiser votre application à l'aide de plusieurs chaînes de modèles, vous utilisez mieux un outil de localisation qui prend en charge les nombres grammaticaux et les genres grammaticaux. Le soluling a un excellent support pour plusieurs modèles, et il prend en charge ASP.NET, .NET, Angular, React, Blazor, Delphi, Python, Java, plus plus de 100 autres formats de fichiers et de base de données.
Le soluling prend en charge la localisation continue, la traduction machine, la correspondance de traduction activée par correspondance incomportée, la terminologie interactive, l'importation / exportation, les outils de construction et la traduction du cloud.

Vous pouvez télécharger du soluling à partir d'ici.
Note! À l'heure actuelle, le soluling et le solumake sont des applications Windows et ne fonctionnent que sur Windows. Cependant, nous prévoyons de publier une version Web à l'avenir et Port Solumake vers Linux et MacOS.