Plurales , géneros , números abreviados , números ordinales , cambio de lenguaje de tiempo de ejecución , comprobación de superposición y truncamiento , y muchos más.
Soluling ha implementado una colección de API de internacionalización (I18N) para .NET, Angular y Delphi. Cada API agrega características adicionales a la API estándar I18N de la plataforma, por ejemplo, soporte para números gramaticales, géneros gramaticales, números abreviados y números ordinales. La biblioteca también incluye API para realizar un interruptor de lenguaje de tiempo de ejecución de aplicaciones, o para seleccionar el idioma inicial en tiempo de ejecución. La biblioteca también contiene API que, en tiempo de ejecución, verifica su interfaz de usuario para obtener problemas como controles truncados o superpuestos. Finalmente, la Biblioteca Delphi contiene un recurso de localización adecuado para Firemonkey.
Cada API es 100% API nativa. Significa que contiene código fuente completo y no requiere archivos adicionales. .NET API contiene solo código C# y no requiere otra biblioteca o archivos de datos. De la misma manera, Angular API contiene solo código TypeScript, y la API de Delphi contiene solo código Delphi. Las reglas utilizadas por el código se han extraído de CLDR en archivos de código fuente que forman parte del código fuente de API. No necesita la biblioteca de la UCI o los archivos CLDR XML, pero todo lo que incluye la lógica y las reglas se compilan en su archivo de aplicación.
La mayoría de los formatos de recursos (por ejemplo, .Resx en .NET, .Properties en Java y cadenas de recursos en Delphi) solo admiten cadenas simples. Los números gramaticales y los géneros requieren datos estructurales donde hay varias variantes dependientes del lenguaje para una sola cadena. Por ejemplo, en inglés, "tengo n autos" requeriría dos variantes:
| Número gramatical | .NETO | Delphi y Java |
|---|---|---|
| singular | Tengo {0} coche | Tengo %d coche |
| plural | Tengo {0} autos | Tengo %d autos |
Algunas plataformas como Android y Angular tienen soporte incorporado para plurales, y es por eso que también tienen un formato de recursos especial para contener múltiples patrones. Sin embargo, .NET, Delphi y Java no tienen ese formato de recursos. Esta biblioteca utiliza el formato de mensaje de la UCI para almacenar todos los patrones relacionados en una cadena de recursos estándar. La sintaxis es:
{parameter, kind, form1 {pattern1}[ form2 {pattern2}]...[ formN {patternN}]
dónde
kind es plural , gender o select
form es el código para el número de número gramatical o para la forma de género gramatical.
La siguiente tabla contiene posibles formularios.
| Forma | Usado con | Descripción |
|---|---|---|
| cero | Números gramaticales | Nullar |
| uno | Números gramaticales | Singular |
| dos | Números gramaticales | Dual |
| pocos | Números gramaticales | Paucal, juicio o similar |
| muchos | Números gramaticales | Mayor paucal o similar |
| otro | Números gramaticales Géneros gramaticales | Plural Neutral |
| masculino | Géneros gramaticales | Masculino |
| femenino | Géneros gramaticales | Femenino |
| neutral | Géneros gramaticales | Neutral. Igual que otro. |
Además de los formularios anteriores, puede usar el operador con números gramaticales. Los operadores son:
| Forma | Ejemplo | Descripción |
|---|---|---|
| = n | = 1 | Igual |
| ~ n | ~ 12 | Alrededor |
| > n | > 5 | Más que |
| <n | <10 | Menos que |
| > = n | > = 5 | Mayor o igual a |
| <= n | <= 10 | Menos o igual a |
| Nuevo Méjico | 2..6 | Rango |
La muestra de automóvil para .net sería:
{plural, one {I have {0} car} other {I have {0} cars}}
La versión finlandesa sería
{plural, one {Minulla on {0} auto} other {Minulla on {0} autoa}}
La versión japonesa sería
{plural, other {{0}車持っています}}
El japonés tiene solo una forma, universal, por lo que la cadena contiene solo otro patrón.
El patrón puede contener texto antes y después de la sintaxis del patrón múltiple. El siguiente ejemplo contiene "Tengo" antes del patrón múltiple y ". Después del patrón múltiple.
I have {plural, one {{0} car} other {{0} cars}}.
Para Delphi la muestra sería
I have {plural, one {%d car} other {%d cars}}.
Si su patrón necesita tener aparatos ortopédicos ({o}), deben escaparse usando . El personaje también debe ser escapado. Por ejemplo , "me gusta esquiar {alpine s} sin embargo, solo tengo {0} pares de esquís" serían
other {I like skiing {alpine\s} however, I only have {0} pairs of skis}
Consulte muestras en SamplesDelphiVCLPatterns , SamplesDelphiFMXPatterns , SamplesWindowsFormsPatterns y SamplesWPFPatterns directorios.
Las clases también admiten el formato Legacy Multi Pattern
one;I have {0} car;other;I have {0} cars
Sin embargo, el soporte para este formato heredado se ha desactivado. El formato de mensaje de la UCI es el formato recomendado.
La API admite múltiples marcadores de posición en plural/género. En ese caso, ha dividido su cadena en partes, cada una con un marcador de posición, y luego encadena los segmentos en una oración lógica. Use el next formulario para comenzar una nueva parte. Por ejemplo, si quiero decir "Tengo autos C y S ", creará la siguiente cadena que contiene dos partes: una para automóvil y otra para esquí. Cada parte contiene dos patrones: singulares y plurales.
I have {plural, one {{0} car} other {{0} cars}} and {plural, one {{0} ski} other {{0} skis}}.
La cadena contiene dos patrones múltiples: autos y esquís.
I have {plural, one {%d car} other {%d cars}} and {plural, one {%d ski} other {%d skis}}.
Consulte SamplesDelphiVCLPatternsMulti , SamplesDelphiFMXPatternsMulti , SamplesWindowsFormsPatternsMulti y SamplesWPFPatternsMulti muestras.
Si necesitamos mostrar grandes números en una pantalla, puede ser difícil para el usuario comprender la magnitud de un número fácilmente. Por ejemplo, si tenemos el número 144563217, ¿cómo debemos mostrarlo? Podríamos formatearlo de acuerdo con las reglas de la ubicación del usuario. Por ejemplo, en los Estados Unidos sería 14,456,217. Aunque esto es más fácil de entender que el número sin formato, todavía tiene pocos problemas. El primero es que requiere un esfuerzo para comprender la magnitud del número. En segundo lugar, requiere bastante espacio. Una solución es redondearlo como 14,000,000. Es más fácil de entender. Para que sea aún más fácil de entender, también podemos abreviarlo como 14m. Las formas abreviadas se están volviendo cada vez más populares. Desafortunadamente, cada idioma como su camino para abreviar. La mayoría de los idiomas pasan por tres dígitos. Por ejemplo, inglés: K, M, G, T, etc. Sin embargo, algunos idiomas asiáticos pasan por cuatro dígitos. Por ejemplo, japonés: 万 (10,000), 億 (100,000,000), etc.
CLDR contiene reglas para abreviar los números. La API de número abreviado usa esas reglas para formatear un número (entero o flotante) como una cadena. El resultado puede ser una cadena larga como 14 millones, corta como 14m o una cadena de divisas como $ 14M.
CLDR no contiene información sobre cómo crear números ordinales a partir de un número. He estado recopilando las reglas de varias fuentes. Todavía hay muchos idiomas sin las reglas adecuadas. La ayuda de un hablante nativo sería apreciada.
Algunas plataformas como Angular no tienen carga de traducción en tiempo de ejecución. Esta API lo implementa. Usando esta API, ahora puede hacer una compilación, una implementación y una URL que sirve a todos los idiomas.
Runtime Language Switch es una característica en la que la aplicación puede cambiar el idioma de su interfaz de usuario en Runtime. Esta biblioteca contiene código para eso. El cambio de idioma se implementa de tal manera que no hay recarga de formularios o diálogo, y el estado actual de la aplicación permanece sin cambios.
Las API de interruptor de lenguaje de tiempo de ejecución son para Delphi VCL, Delphi Firemonkey, .NET Windows Forms y .NET WPF.
Cuando traducimos cadenas a otro idioma, siempre existe la posibilidad de que la traducción sea más larga que la cadena original. Esto es especialmente cierto si el idioma original es inglés porque el inglés es un idioma más compacto, ya que, por ejemplo, alemán o finlandés. Cuando las cadenas traducidas se hacen más largas, existe el riesgo de que parte de la cadena se trunce o se superpongan a dos o más cuerdas. Situaciones como estas son difíciles de encontrar. La API del verificador de interfaz de usuario ayuda. Es una API que usted es un enlace temporal a su código, y cuando ejecuta la aplicación está escribiendo un archivo de informe con capturas de pantalla que muestran trunciones y superpuesto marcado con colores claros. Puede ver instantáneamente dónde se produce un truncamiento o superposición.
Las API del controlador de interfaz de usuario son para Delphi VCL, Delphi Firemonkey, .NET Windows Forms y .NET WPF.
LibraryNET contiene la API .NET. LibraryNETStandard contiene una biblioteca estándar .NET que contiene API para números gramaticales, géneros gramaticales, números abreviados y números ordinales. Compile y agregue eso a su solución y finalmente agregue la biblioteca a las referencias de su proyecto. Debido a que la parte de no UI de la biblioteca es .NET estándar, funciona con formularios de Windows, WPF, ASP.NET, .NET Core y Xamarin. También puede compilarlo utilizando cualquier versión de .NET que comience con .NET 2.0.
Puedes obtener la API a través de Nuget.
Install-Package Soluling
Actualmente, tenemos muestras para formularios de Windows y WPF. Agregaremos muestras de Core ASP.NET y ASP.NET pronto.
LibraryAngular contiene la API angular. La API requiere Angular 9 o posterior. La forma más fácil de usarlo es a través de NPM.
npm install @soluling/angularPara obtener más información sobre esta API, lea su documentación.
LibraryDelphi contiene la API Delphi. La forma más fácil de incluirlos en su aplicación es agregar la ruta a la ruta de búsqueda de su proyecto. La biblioteca es compatible con Delphi 7 o posterior. Sin embargo, para obtener todas las características, necesita Delphi XE2 o posterior.
Firemonkey no tiene un recurso de localización adecuado. Si sus plataformas móviles objetivo como iOS o Android, no puede usar DLL de recursos. Todo, incluido el recurso localizado, debe estar en el archivo de aplicación principal. Esta biblioteca contiene una solución para la localización de Firemonkey. Utiliza un formato de archivo .ntres especial para almacenar los recursos de formulario ( .fmx ), cadena, imagen y audio en un solo archivo .ntres . El archivo contiene los recursos en todos los idiomas que desea admitir. Finalmente, agrega el archivo .ntres como un recurso personalizado en su aplicación y usa las llamadas API de la biblioteca para acceder a los recursos. No tiene que modificar tanto su aplicación existente para hacer es multilingüe. La única excepción son las cadenas de recursos. No puedes usar el. Si tiene una cadena codificada y desea localizarla, envuélvala en la función _t.
procedure TForm1.UpdateStrings ;
begin
Label1.Text := _T( ' Hello world ' );
end ;Si ya tiene una cadena de recursos existente, elimínelo y use la función _T. Además, debe llamar _t para cada formulario.
procedure TForm1.FormCreate (Sender: TObject);
begin
_T(Self);
end ; Ver SamplesDelphiFMXPatternsSimple primero.
Puede usar los recursos .ntres también en aplicaciones VCL, pero se recomienda utilizar el método estándar de localización de VCL con cadenas de recursos y DLL de recursos o archivos EXE localizados.
C ++ Builder no es compatible oficialmente. Todos estos códigos deberían funcionar con C ++ Builder pero nunca probados.
Elegimos .NET, Angular y Delphi como la primera plataforma por algunas razones. Primero es que amamos Angular, C# y Delphi. En segundo lugar, tanto Delphi como .NET carecen de soporte para varias API I18N, como plurales y géneros. El tercero es que tanto Delphi como .NET también se beneficiarían del interruptor de lenguaje de tiempo de ejecución. Cuarto es que Delphi se usa para crear aplicaciones móviles donde el tamaño importa. El quinto es que creo que C# + .NET Core tendrá un futuro brillante.
Estamos considerando implementar clases similares para TypeScript (JavaScript viene en el proceso). Sin embargo, TypeScript se usa principalmente con Angular que ya tiene excelentes plurales y géneros de soporte. Implementamos la carga de traducción en tiempo de ejecución para Angular. Probablemente implementaremos solo API de números abreviados para TypeScript.
Podemos implementar bibliotecas similares para Java. Ya existe una implementación de la UCI para Java, por lo que si usa Java en el lado del servidor, puede usarla. Si usa Java en el lado del cliente, lo más probable es que sea Android, y admite plurales pero no géneros. Todavía estamos considerando el apoyo de Java. Háganos saber si sería útil.
BinCldrToCode.exe es una herramienta que extrae reglas de los archivos CLDR XML a los archivos C# y Delphi. Normalmente no tiene que usarlo porque la biblioteca ya contiene archivos extraídos que contienen reglas en todos los idiomas CLDR. Sin embargo, si desea crear archivos de reglas que contengan solo algunos idiomas, puede usar CldrToCode.exe para crear sus propios archivos de reglas. Por ejemplo, si desea crear archivos de reglas que solo contengan inglés, alemán y uso de francés:
CldrToCode.exe -lang:en;de;fr D:CLDRcommon
Esto creará NtPluralData.pas , NtNumberData.pas , PluralData.cs y NumberData.cs .
Con poco esfuerzo podemos hacer cldrTocode.exe para crear archivos Java, TypeScript y Python también.
Este repositorio también contiene aplicaciones, archivos y bases de datos de muestra de internacionalización y localización. Soluling tiene docenas de muestras que cubren varias plataformas de programación importantes y formatos de archivos. Las muestras están actualizadas y utilizan una versión reciente de su lenguaje de programación.
Soluling contiene muestras para las siguientes plataformas:
Si planea localizar su aplicación utilizando múltiples cadenas de patrones, es mejor utilizar una herramienta de localización que tenga soporte para números gramaticales y géneros gramaticales. Soluling tiene un excelente soporte para múltiples patrones, y es compatible con ASP.NET, .NET, Angular, React, Blazor, Delphi, Python, Java, más más de 100 formatos de base y base de datos.
Soluling admite la localización continua, la traducción automática, la memoria interactiva de traducción habilitada para coincidir, terminología interactiva, importación/exportación, herramientas de compilación y traducción en la nube.

Puedes descargar Soluling desde aquí.
¡Nota! Por el momento, Soluling y Solumake son aplicaciones de Windows y trabajan solo en Windows. Sin embargo, planeamos lanzar una versión basada en la web en Future y Port Solumake a Linux y MacOS.