Множественные жилы , пол , сокращенные числа , порядковые числа , изменение языка времени выполнения , перекрытие и проверка усечения и многое другое.
Soluling внедрила коллекцию API интернационализации (I18N) для .NET, Angular и Delphi. Каждый API добавляет дополнительные функции в стандартный API I18N платформы - например, поддержку грамматических чисел, грамматических полей, сокращенных чисел и порядковых чисел. Библиотека также включает в себя API для выполнения переключения языковых приложений среды выполнения или для выбора начального языка в среде выполнения. Библиотека также содержит API, который на время выполнения проверяет ваш пользовательский интерфейс на такие проблемы, как усеченные или перекрываемые элементы управления. Наконец, библиотека Delphi содержит надлежащий ресурс локализации для FireMonkey.
Каждый API составляет 100% местный API. Это означает, что он содержит полный исходный код и не требует дополнительных файлов. API .NET содержит только код C# и не требует других библиотек или файлов данных. Точно так же угловой API содержит только код TypeScript, а Delphi API содержит только код Delphi. Правила, используемые кодом, были извлечены из CLDR в файлы исходного кода, которые являются частью исходного кода API. Вам не нужны библиотеки ICU или файлы CLDR XML, но все, включая логику и правила, составлены в файл вашего приложения.
Большинство форматов ресурсов (например, .resx в .net, .properties в Java и строки ресурсов в Delphi) поддерживают только обычные строки. Грамматические числа, а половины требуют структурных данных, при которых существует несколько вариантов, зависящих от языка для одной строки. Например, на английском языке «у меня есть N Cars», потребуется два варианта:
| Грамматическое число | .СЕТЬ | Дельфи и Ява |
|---|---|---|
| единственный | У меня {0} машина | У меня есть %D автомобиль |
| множественное число | У меня {0} машины | У меня есть %D автомобилей |
Некоторые платформы, такие как Android и Angular, имеют встроенную поддержку множества, и именно поэтому они также имеют специальный формат ресурсов для хранения нескольких шаблонов. Однако .net, Delphi и Java не имеют такого формата ресурсов. Эта библиотека использует формат сообщения ICU для хранения всех связанных шаблонов в стандартной строке ресурса. Синтаксис:
{parameter, kind, form1 {pattern1}[ form2 {pattern2}]...[ formN {patternN}]
где
kind - это либо plural , gender или select
form - это код для грамматического числа или для грамматической гендерной формы.
Следующая таблица содержит возможные формы.
| Форма | Используется с | Описание |
|---|---|---|
| ноль | Грамматические числа | Ноль |
| один | Грамматические числа | Единственный |
| два | Грамматические числа | Двойной |
| немного | Грамматические числа | Паукан, испытание или аналогичный |
| много | Грамматические числа | Большой паукан или аналогичный |
| другой | Грамматические числа Грамматические полов | Множественное число Нейтральный |
| мужской | Грамматические полов | Мужской |
| женский | Грамматические полов | Женский |
| нейтральный | Грамматические полов | Нейтральный То же самое, что и другие. |
В дополнение к вышеуказанным формам вы можете использовать оператора с грамматическими числами. Операторы:
| Форма | Пример | Описание |
|---|---|---|
| = n | = 1 | Равный |
| ~ n | ~ 12 | Вокруг |
| > n | > 5 | Больше |
| <n | <10 | Меньше, чем |
| > = n | > = 5 | Больше или равен |
| <= n | <= 10 | Менее или равен |
| n..m | 2..6 | Диапазон |
Образец автомобиля для .NET будет:
{plural, one {I have {0} car} other {I have {0} cars}}
Финская версия была бы
{plural, one {Minulla on {0} auto} other {Minulla on {0} autoa}}
Японская версия будет
{plural, other {{0}車持っています}}
Японский имеет только одну форму, универсальную, поэтому строка содержит только другой шаблон.
Паттерн может содержать текст до и после мульти-паттерн-синтаксиса. Следующий пример содержит «У меня» до мульти-паттерна и «». После мульти-паттерна.
I have {plural, one {{0} car} other {{0} cars}}.
Для Delphi образец это будет
I have {plural, one {%d car} other {%d cars}}.
Если ваш шаблон должен иметь скоб ({или}), их нужно избежать, используя . Характер также должен быть сбежал. Например , "мне нравится кататься на лыжах {alpine s}, однако, у меня есть только {0} пары лыж"
other {I like skiing {alpine\s} however, I only have {0} pairs of skis}
См. Образцы в SamplesDelphiVCLPatterns , SamplesDelphiFMXPatterns , SamplesWindowsFormsPatterns и SamplesWPFPatterns каталоги.
Классы также поддерживают Legacy Multi Pattern Format
one;I have {0} car;other;I have {0} cars
Однако поддержка этого устаревшего формата устарела. Формат сообщения ICU является рекомендуемым форматом.
API поддерживает множественное множественное число/пол заполнителей. В этом случае вы разделили свою строку на части, каждый из которых содержит один заполнитель, а затем превращают сегменты в логическое предложение. Используйте next форму, чтобы начать новую часть. Например, если я хочу сказать: «У меня есть C Cars и S », вы создадите следующую строку, которая содержит две части: одна для автомобиля, а другая для катания на лыжах. Каждая часть содержит два шаблона: единственное и множественное число.
I have {plural, one {{0} car} other {{0} cars}} and {plural, one {{0} ski} other {{0} skis}}.
Строка содержит два мульти -шаблона: автомобили и лыжи.
I have {plural, one {%d car} other {%d cars}} and {plural, one {%d ski} other {%d skis}}.
См. SamplesDelphiVCLPatternsMulti , SamplesDelphiFMXPatternsMulti , SamplesWindowsFormsPatternsMulti и SamplesWPFPatternsMulti Samples.
Если нам нужно показать большие числа на экране, пользователю может быть трудно легко понять величину числа. Например, если у нас есть номер 144563217, как мы должны показать это. Мы могли бы отформатировать его в соответствии с правилами локали пользователя. Например, в США это будет 14 456 217. Хотя это легче понять, чем неформатированное число, у него все еще мало проблем. Первое заключается в том, что требуют некоторых усилий, чтобы понять величину числа. Во -вторых, это требует довольно много места. Одним из решений является округление его, как 14 000 000. Это легче понять. Чтобы еще проще понять, мы также можем сократить его, как 14 м. Сокращенные формы становятся все более и более популярными. К сожалению, каждый язык как свой путь к сокращению. Большинство языков идут на три цифры. Например, английский: k, m, g, t и т. Д. Однако некоторые азиатские языки идут на четыре цифры. Например, японский: 万 (10 000), 億 (100 000 000) и т. Д.
CLDR содержит правила сокращения чисел. Сокращенное число API номера использует эти правила для форматирования числа (целого числа или плавания) в качестве строки. Результатом может быть длинная строка, такая как 14 миллионов, сокращение 14 миллионов или валютная строка, такая как 14 миллионов долларов.
CLDR не содержит информацию о том, как создавать порядковые номера из числа. Я собирал правила из различных источников. Есть еще много языков без надлежащих правил. Помощь от носителя уроженца будет оценена.
Некоторые платформы, такие как Angular, не имеют загрузки перевода времени выполнения. Этот API реализует это. Используя этот API, теперь вы можете сделать одну компиляцию, одно развертывание и один URL, который служит всем языкам.
Переключение языка времени выполнения - это функция, в которой приложение может изменить язык своего пользовательского интерфейса во время выполнения. Эта библиотека содержит код для этого. Изменение языка реализуется таким образом, что нет перезагрузки форм или диалога, а текущее состояние приложения остается неизменным.
API -интерфейсы языка времени выполнения предназначены для Delphi VCL, Delphi FireMonkey, .NET Windows Forms и .net WPF.
Когда мы переводим строки на другой язык, всегда существует вероятность того, что перевод будет длиннее исходной строки. Это особенно верно, если оригинальный язык является английским, потому что английский является более компактным языком, как, например, немецкий или финский. Когда переведенные строки становятся длиннее, существует риск, что часть строки усекается, или две или более струны перекрываются. Подобные ситуации трудно найти. Пользовательский интерфейс API помогает. Это API, который вы временную ссылку на свой код, и когда вы запускаете приложение, - это написание файла отчета с помощью скриншотов, показывающих усечники и перекрытые, отмеченные чистыми цветами. Вы можете сразу увидеть, где происходит усечение или перекрытие.
API -интерфейсы пользовательского интерфейса предназначены для Delphi VCL, Delphi FireMonkey, .NET Windows Forms и .net WPF.
LibraryNET содержит API .NET. LibraryNETStandard содержит стандартную библиотеку .NET, которая содержит API для грамматических чисел, грамматических полей, сокращенных чисел и порядковых чисел. Составьте его и добавьте это в свое решение и, наконец, добавьте библиотеку в ссылки вашего проекта. Поскольку часть библиотеки NO не является стандартом .NET, она работает с Windows Forms, WPF, ASP.NET, .NET CORE и Xamarin. Вы также можете собрать его, используя любую версию .NET, начиная с .NET 2.0.
Вы можете получить API через Nuget.
Install-Package Soluling
В настоящее время у нас есть образцы для форм Windows и WPF. Мы скоро добавим образцы ядра ASP.NET и ASP.NET.
LibraryAngular содержит угловой API. API требует угловой 9 или более поздней версии. Самый простой способ использовать его - через NPM.
npm install @soluling/angularЧтобы узнать больше об этом API, прочитайте его документацию.
LibraryDelphi содержит Delphi API. Самый простой способ включить их в ваше приложение - добавить путь к пути поиска вашего проекта. Библиотека поддерживает Delphi 7 или более поздней версии. Тем не менее, чтобы получить все функции, которые вам нужны Delphi XE2 или позже.
Firemonkey не имеет надлежащего ресурса локализации. Если ваши целевые мобильные платформы, такие как iOS или Android, вы не можете использовать ресурсы DLL. Все, включая локализованный ресурс, должно быть в основном файле приложения. Эта библиотека содержит решение для локализации FireMonkey. Он использует специальный формат файла .ntres для хранения формы ( .fmx ), строки, изображения и аудио -ресурсов в один файл .ntres . Файл содержит ресурсы на всех языках, которые вы хотите поддержать. Наконец, вы добавляете файл .ntres в качестве пользовательского ресурса в ваше приложение и используете вызовы API библиотеки для доступа к ресурсам. Вам не нужно так много изменять свое существующее приложение, чтобы сделать многоязычное. Единственным исключением являются ресурсные строки. Вы не можете использовать. Если у вас есть жесткая строка, и вы хотите локализовать ее, оберните ее в функцию _t.
procedure TForm1.UpdateStrings ;
begin
Label1.Text := _T( ' Hello world ' );
end ;Если у вас уже есть существующая строка ресурса, удалите ее и используйте функцию _t. Кроме того, вы должны позвонить _t для каждой формы.
procedure TForm1.FormCreate (Sender: TObject);
begin
_T(Self);
end ; См. SamplesDelphiFMXPatternsSimple образец.
Вы можете использовать ресурсы .ntres также в приложениях VCL, но рекомендуется использовать стандартный метод локализации VCL с строками ресурсов и DLL ресурсов или локализованными файлами EXE.
C ++ Builder официально не поддерживается. Все эти коды должны работать с C ++ Builder, но никогда не тестируются.
Мы выбрали .NET, Angular и Delphi в качестве первой платформы по нескольким причинам. Во -первых, мы любим Angular, C# и Delphi. Во -вторых, и Delphi, и .NET не имеют поддержки для нескольких API I18N, таких как множественные жилы и половины. Третье заключается в том, что и Delphi, и .net также выиграют от переключения языка времени выполнения. В -четвертых, Delphi используется для создания мобильных приложений, где имеет значение. Пятое - то, что я считаю, что C# + .NET Core будет иметь светлое будущее.
Мы собираемся реализовать аналогичные классы для TypeScript (JavaScript входит в процесс). Тем не менее, TypeScript в основном используется с Angular, которая уже имеет большую поддержку множества и полов. Мы реализовали загрузку перевода времени выполнения для угловой. Мы, вероятно, будем реализовать только сокращенные номера API для TypeScript.
Мы можем внедрить подобные библиотеки для Java. Уже есть реализация ICU для Java, поэтому, если вы используете Java на серверной стороне, вы можете его использовать. Если вы используете Java на стороне клиента, это, скорее всего, будет Android, и она поддерживает множественные жилы, но не половые. Мы все еще рассматриваем поддержку Java. Дайте нам знать, если это будет полезно.
BinCldrToCode.exe - это инструмент, который извлекает правила из файлов CLDR XML в файлы C# и Delphi. Обычно вам не нужно использовать его, потому что библиотека уже содержит извлеченные файлы, которые содержат правила на всех языках CLDR. Однако, если вы хотите создать файлы правил, которые содержат только некоторые языки, вы можете использовать CldrToCode.exe для создания собственных файлов правил. Например, если вы хотите создать файлы правил, которые содержат только английский, немецкий и французский использование:
CldrToCode.exe -lang:en;de;fr D:CLDRcommon
Это создаст NtPluralData.pas , NtNumberData.pas , PluralData.cs и NumberData.cs .
Благодаря небольшим усилиям мы можем сделать Cldrtocode.exe для создания файлов Java, TypeScript и Python.
Этот репо также содержит приложение, файлы и базы данных, базы данных интернационализации и локализации. У Soluling есть десятки образцов, охватывающих несколько основных платформ программирования и форматов файлов. Образцы обновлены и используют недавнюю версию их языка программирования.
Солулинг содержит образцы для следующих платформ:
Если вы планируете локализовать свое приложение, используя несколько строк шаблонов, вы лучше используете инструмент локализации, который поддерживает грамматические числа и грамматические полы. Soluling отлично поддерживает несколько шаблонов, и она поддерживает ASP.NET, .NET, Angular, React, Blazor, Delphi, Python, Java, а также более 100 других форматов файлов и базы данных.
Солулинг поддерживает непрерывную локализацию, машинный перевод, интерактивное нечеткое сопоставление, включающую память трансляции, интерактивную терминологию, импорт/экспорт, инструменты сборки и облачный перевод.

Вы можете скачать Soluling отсюда.
Примечание! На данный момент Soluling и Solumake являются приложениями Windows и работают только в Windows. Тем не менее, мы планируем выпустить веб-версию в будущем и Port Solumake в Linux и MacOS.