Plurais , sexos , números abreviados , números ordinais , mudança de linguagem de tempo de execução , verificação de sobreposição e truncamento e muito mais.
A Soluling implementou uma coleção de APIs de internacionalização (I18N) para .NET, Angular e Delphi. Cada API adiciona recursos adicionais à API I18N padrão da plataforma - por exemplo, suporte para números gramaticais, gêneros gramaticais, números abreviados e números ordinais. A biblioteca também inclui APIs para executar a mudança de idioma de tempo de execução dos aplicativos ou para selecionar o idioma inicial no tempo de execução. A biblioteca também contém a API de que, no tempo de execução, verifica sua interface de usuário para problemas como controles truncados ou sobrepostos. Finalmente, a Biblioteca Delphi contém um recurso de localização adequado para o Firemonkey.
Cada API é 100% API nativa. Isso significa que ele contém código -fonte completo e não requer arquivos adicionais. O .NET API contém apenas código C# e não requer outros arquivos de biblioteca ou dados. Da mesma forma, a API angular contém apenas o código TypeScript, e a API Delphi contém apenas código Delphi. As regras usadas pelo código foram extraídas do CLDR para arquivos de código -fonte que fazem parte do código -fonte da API. Você não precisa da biblioteca da UTI ou dos arquivos XML CLDR, mas tudo, incluindo lógica e regras, é compilado no seu arquivo de aplicativo.
A maioria dos formatos de recursos (por exemplo, .Resx in .Net, .Properties em Java e Strings de Recursos em Delphi) suportam apenas strings simples. Números gramaticais e sexos requerem dados estruturais onde existem várias variantes dependentes de idiomas para uma única sequência. Por exemplo, em inglês, "eu tenho n carros" exigiria duas variantes:
| Número gramatical | .LÍQUIDO | Delphi e Java |
|---|---|---|
| singular | Eu tenho {0} carro | Eu tenho %d car |
| plural | Eu tenho {0} carros | Eu tenho %d cars |
Algumas plataformas como Android e Angular têm suporte integrado para plurais, e é por isso que eles também têm um formato de recurso especial para manter vários padrões. No entanto, .Net, Delphi e Java não têm esse formato de recurso. Esta biblioteca usa o formato da mensagem da UTI para armazenar todos os padrões relacionados em uma sequência de recursos padrão. A sintaxe é:
{parameter, kind, form1 {pattern1}[ form2 {pattern2}]...[ formN {patternN}]
onde
kind é plural , gender ou select
form é o código para formulário de número gramatical ou para forma de gênero gramatical.
A tabela a seguir contém formulários possíveis.
| Forma | Usado com | Descrição |
|---|---|---|
| zero | Números gramaticais | Nullar |
| um | Números gramaticais | Singular |
| dois | Números gramaticais | Dual |
| alguns | Números gramaticais | Paucal, julgamento ou similar |
| muitos | Números gramaticais | Maior paucal ou similar |
| outro | Números gramaticais Sexos gramaticais | Plural Neutro |
| macho | Sexos gramaticais | Macho |
| fêmea | Sexos gramaticais | Fêmea |
| neutro | Sexos gramaticais | Neutro. O mesmo que outro. |
Além dos formulários acima, você pode usar o operador com números gramaticais. Os operadores são:
| Forma | Exemplo | Descrição |
|---|---|---|
| = n | = 1 | Igual |
| ~ n | ~ 12 | Em volta |
| > n | > 5 | Maior que |
| <n | <10 | Menor que |
| > = n | > = 5 | Maior ou igual a |
| <= n | <= 10 | Menos ou igual a |
| n..m | 2..6 | Faixa |
A amostra de carro para .NET seria:
{plural, one {I have {0} car} other {I have {0} cars}}
A versão finlandesa seria
{plural, one {Minulla on {0} auto} other {Minulla on {0} autoa}}
A versão japonesa seria
{plural, other {{0}車持っています}}
O japonês tem apenas uma forma, universal, então a string contém apenas outro padrão.
O padrão pode conter texto antes e depois da sintaxe de vários padrões. O exemplo a seguir contém "eu tenho" antes do padrão e "". Após o padrão com vários padrões.
I have {plural, one {{0} car} other {{0} cars}}.
Para Delphi, a amostra seria
I have {plural, one {%d car} other {%d cars}}.
Se o seu padrão precisar ter aparelhos ({ou}), eles precisam ser escapados usando . caractere também deve ser escapado. Por exemplo , "eu gosto de esqui {alpine s} no entanto, eu só tenho {0} pares de esquis" seria
other {I like skiing {alpine\s} however, I only have {0} pairs of skis}
Veja amostras em SamplesDelphiVCLPatterns , SamplesDelphiFMXPatterns , SamplesWindowsFormsPatterns e SamplesWPFPatterns de diretórios.
As classes também suportam o formato de vários padrões de vários padrões legados
one;I have {0} car;other;I have {0} cars
No entanto, o apoio a esse formato herdado foi depreciado. O formato da mensagem da UTI é o formato recomendado.
A API suporta múltiplos espaços reservados habilitados para gênero plural/gênero. Nesse caso, você dividiu sua corda em partes, cada uma contendo um espaço reservado e, em seguida, encorrente os segmentos em uma frase lógica. Use o next formulário para iniciar uma nova peça. Por exemplo, se eu quiser dizer "eu tenho carros C e S Skis", você criará a seguinte sequência que contém duas partes: uma para carro e outra para esqui. Cada parte contém dois padrões: singular e plural.
I have {plural, one {{0} car} other {{0} cars}} and {plural, one {{0} ski} other {{0} skis}}.
A string contém dois padrões múltiplos: carros e esquis.
I have {plural, one {%d car} other {%d cars}} and {plural, one {%d ski} other {%d skis}}.
Consulte SamplesDelphiVCLPatternsMulti , SamplesDelphiFMXPatternsMulti , SamplesWindowsFormsPatternsMulti e SamplesWPFPatternsMulti .
Se precisarmos mostrar grandes números em uma tela, pode ser difícil para o usuário entender a magnitude de um número facilmente. Por exemplo, se tivermos o número 144563217, como devemos mostrá -lo. Poderíamos formatá -lo de acordo com as regras do local do usuário. Por exemplo, nos EUA, seria 14.456.217. Embora isso seja mais fácil de entender do que o número não formado, ele ainda tem poucos problemas. O primeiro é que requer algum esforço para entender a magnitude do número. Em segundo lugar, requer muito espaço. Uma solução é arredondá -lo como 14.000.000. É mais fácil de entender. Para tornar ainda mais fácil de entender, também podemos abreviá -lo como 14m. As formas abreviadas estão ficando cada vez mais populares. Infelizmente, cada idioma como seu caminho para abreviar. A maioria das línguas passa por três dígitos. Por exemplo, inglês: k, m, g, t, etc. No entanto, alguns idiomas asiáticos passam por quatro dígitos. Por exemplo, japonês: 万 (10.000), 億 (100.000.000), etc.
O CLDR contém regras para abreviar números. A API número abreviada usa essas regras para formatar um número (número inteiro ou flutuação) como uma string. O resultado pode ser uma sequência longa como 14 milhões, curtos que 14 milhões ou uma sequência de moeda, como US $ 14 milhões.
O CLDR não contém informações sobre como criar números ordinais a partir de um número. Eu tenho coletado as regras de várias fontes. Ainda existem muitos idiomas sem regras adequadas. A ajuda de um falante nativo seria apreciada.
Algumas plataformas como o Angular não têm carga de tradução em tempo de execução. Esta API implementa. Usando esta API, agora você pode fazer uma compilação, uma implantação e uma URL que serve todos os idiomas.
O Switch de linguagem de tempo de execução é um recurso em que o aplicativo pode alterar o idioma de sua interface de usuário no tempo de execução. Esta biblioteca contém código para isso. A mudança de idioma é implementada de tal maneira que não há recarregar os formulários ou a caixa de diálogo, e o estado atual do aplicativo permanece inalterado.
As APIs do Switch de linguagem de tempo de execução são para Delphi VCL, Delphi Firemonkey, .NET Windows Forms e .Net WPF.
Quando traduzimos strings para outro idioma, sempre existe a possibilidade de a tradução ser mais longa que a string original. Isso é especialmente verdadeiro se o idioma original for inglês porque o inglês é uma linguagem mais compacta, como, por exemplo, alemão ou finlandês. Quando as strings traduzidas ficam mais longas, há um risco de que parte da string seja truncada ou duas ou mais strings se sobrepõem. Situações como essas são difíceis de encontrar. A API do verificador de interface do usuário ajuda. É uma API que seu link temporário para o seu código e, quando você executa o aplicativo, está escrevendo um arquivo de relatório com capturas de tela mostrando truncações e sobreposto marcado com cores claras. Você pode ver instantaneamente onde ocorre um truncamento ou sobreposição.
As APIs do verificador de interface do usuário são para Delphi VCL, Delphi Firemonkey, .NET Windows Forms e .Net WPF.
LibraryNET contém a API .NET. LibraryNETStandard contém uma biblioteca padrão .NET que contém API para números gramaticais, gêneros gramaticais, números abreviados e números ordinais. Compile -o e adicione isso à sua solução e, finalmente, adicione a biblioteca às referências do seu projeto. Como a parte da interface do usuário não é padrão .NET, funciona com o Windows Forms, WPF, ASP.NET, .NET Core e Xamarin. Você também pode compilá -lo usando qualquer versão .NET começando com o .NET 2.0.
Você pode obter a API através do NUGET.
Install-Package Soluling
Atualmente, temos amostras para formulários Windows e WPF. Em breve adicionaremos as amostras do núcleo ASP.NET e ASP.NET.
LibraryAngular contém a API angular. A API requer 9 ou mais tarde. A maneira mais fácil de usá -lo é através da NPM.
npm install @soluling/angularPara saber mais sobre essa API, leia sua documentação.
LibraryDelphi contém a API Delphi. A maneira mais fácil de incluí -los em seu aplicativo é adicionar o caminho ao caminho de pesquisa do seu projeto. A biblioteca suporta Delphi 7 ou posterior. No entanto, para obter todos os recursos necessários para Delphi Xe2 ou posterior.
O Firemonkey não possui um recurso de localização adequado. Se suas plataformas móveis de destino, como iOS ou Android, você não poderá usar DLLs de recursos. Tudo, incluindo o recurso localizado, deve estar no arquivo de aplicativo principal. Esta biblioteca contém uma solução para a localização do Firemonkey. Ele usa um formato de arquivo .ntres especial para armazenar recursos de formulário ( .fmx ), string, imagem e áudio em um único arquivo .ntres . O arquivo contém os recursos em todos os idiomas que você deseja apoiar. Por fim, você adiciona o arquivo .ntres como um recurso personalizado ao seu aplicativo e usa as chamadas da API da biblioteca para acessar os recursos. Você não precisa modificar seu aplicativo existente muito para fazer é multilíngue. A única exceção são as seqüências de recursos. Você não pode usar o. Se você possui string codificada e deseja localizá -la, envolva -a na função _T.
procedure TForm1.UpdateStrings ;
begin
Label1.Text := _T( ' Hello world ' );
end ;Se você já possui uma sequência de recursos existente, remova -a e use a função _T. Além disso, você deve ligar para _t para cada formulário.
procedure TForm1.FormCreate (Sender: TObject);
begin
_T(Self);
end ; Veja SamplesDelphiFMXPatternsSimple primeiro.
Você pode usar os recursos .ntres também em aplicativos VCL, mas é recomendável usar o método de localização VCL padrão com strings de recursos e DLLs de recursos ou arquivos EXE localizados.
O construtor de C ++ não é oficialmente apoiado. Todos esses códigos devem funcionar com o C ++ Builder, mas nunca testados.
Escolhemos .Net, Angular e Delphi como a primeira plataforma por alguns motivos. Primeiro é que amamos Angular, C# e Delphi. Em segundo lugar, Delphi e .Net não têm apoio para várias APIs I18N, como plurais e sexos. O terceiro é que Delphi e .NET também se beneficiariam do interruptor de linguagem de tempo de execução. O quarto é que o Delphi é usado para criar aplicativos móveis onde o tamanho é importante. O quinto é que acredito que C# + .NET Core terá um futuro brilhante.
Estamos pensando em implementar classes semelhantes para o TypeScript (JavaScript vem no processo). No entanto, o TypeScript é usado principalmente com o Angular que já possui um ótimo suporte plurais e sexos. Implementamos o carregamento de tradução para tempo de execução para o Angular. Provavelmente, implementaremos apenas a API de números abreviados para o TypeScript.
Podemos implementar bibliotecas semelhantes para Java. Já existe a implementação da UTI para Java; portanto, se você usar o Java no lado do servidor, poderá usá-lo. Se você usar o Java no lado do cliente, provavelmente será o Android e suporta plurais, mas não sexos. Ainda estamos considerando o apoio de Java. Informe -nos se seria útil.
BinCldrToCode.exe é uma ferramenta que extrai regras dos arquivos XML CLDR para arquivos C# e Delphi. Normalmente, você não precisa usá -lo porque a biblioteca já contém arquivos extraídos que contêm regras em todos os idiomas de CLDR. No entanto, se você deseja criar arquivos de regra que contêm apenas alguns idiomas, poderá usar CldrToCode.exe para criar seus próprios arquivos de regras. Por exemplo, se você deseja criar arquivos de regra que contêm apenas inglês, alemão e francês:
CldrToCode.exe -lang:en;de;fr D:CLDRcommon
Isso criará NtPluralData.pas , NtNumberData.pas , PluralData.cs e NumberData.cs .
Com pouco esforço, podemos fazer com que o cldrtocode.exe também para criar arquivos Java, TypeScript e Python.
Este repo também contém aplicativos, arquivos e bancos de dados de internacionalização e localização. O solulamento possui dezenas de amostras que cobrem várias plataformas de programação e formatos de arquivo importantes. As amostras estão atualizadas e usando uma versão recente de sua linguagem de programação.
Soluling contém amostras para as seguintes plataformas:
Se você planeja localizar seu aplicativo usando vários padrões, é melhor usar uma ferramenta de localização com suporte para números gramaticais e gêneros gramaticais. O Soluling possui excelente suporte para vários padrões e suporta asp.net, .net, angular, reagem, blazor, delphi, python, java, além de mais de 100 outros formatos de arquivo e banco de dados.
O solulamento suporta localização contínua, tradução da máquina, correspondência difusa interativa, a memória de tradução ativada, terminologia interativa, importação/exportação, ferramentas de construção e tradução em nuvem.

Você pode baixar o Soluling aqui.
Observação! No momento, solvendo e solumake são aplicativos do Windows e funcionam apenas no Windows. No entanto, planejamos lançar uma versão baseada na Web no futuro e por Port Solumake para Linux e MacOS.