複数形、性別、略語数、順序数、ランタイム言語の変更、オーバーラップおよび切り捨てチェックなど。
Solulingは、.NET、Angular、Delphiの国際化(I18N)APIのコレクションを実装しています。各APIは、プラットフォームの標準I18N APIに追加機能を追加します。たとえば、文法数、文法性別、略語数、順序数のサポートです。ライブラリには、アプリケーションのランタイム言語スイッチを実行したり、ランタイムの初期言語を選択したりするAPIも含まれています。また、ライブラリには、ランタイムで、切り捨てられたコントロールや重複型コントロールなどの問題についてユーザーインターフェイスをチェックするAPIも含まれています。最後に、Delphi LibraryにはFiremonkeyの適切なローカリゼーションリソースが含まれています。
各APIは100%ネイティブAPIです。これは、完全なソースコードを含み、追加のファイルを必要としないことを意味します。 .NET APIにはC#コードのみが含まれており、他のライブラリまたはデータファイルは必要ありません。同様に、Angular APIにはタイプスクリプトコードのみが含まれ、Delphi APIにはDelphiコードのみが含まれます。コードで使用されるルールは、CLDRからAPIソースコードの一部であるソースコードファイルに抽出されています。 ICUライブラリまたはCLDR XMLファイルは必要ありませんが、ロジックやルールを含むすべてがアプリケーションファイルにコンパイルされます。
ほとんどのリソース形式(.netの.resx、javaの.properties、およびdelphiのリソース文字列)のみをサポートしています。文法数と性別は、単一の文字列にいくつかの言語依存バリアントがある構造データを必要とします。たとえば、英語では、「私はn車を持っています」には2つのバリアントが必要です。
| 文法番号 | 。ネット | デルフィとジャワ |
|---|---|---|
| 特異 | 私は{0}車を持っています | 私は%d車を持っています |
| 複数 | 私は{0}車を持っています | 私は%d車を持っています |
AndroidやAngularなどの一部のプラットフォームには、複数形のサポートが組み込まれているため、複数のパターンを保持するための特別なリソース形式もあります。ただし、.NET、Delphi、およびJavaには、このようなリソース形式はありません。このライブラリは、ICUメッセージ形式を使用して、関連するすべてのパターンを標準のリソース文字列に保存します。構文は次のとおりです。
{parameter, kind, form1 {pattern1}[ form2 {pattern2}]...[ formN {patternN}]
どこ
kindはplural 、 gender 、またはselectいずれかです
form 、文法番号フォームまたは文法的な性別フォームのコードです。
次の表には、可能なフォームが含まれています。
| 形状 | で使用されます | 説明 |
|---|---|---|
| ゼロ | 文法数 | ヌラー |
| 1つ | 文法数 | 特異 |
| 二 | 文法数 | デュアル |
| 少し | 文法数 | Paucal、裁判など |
| 多くの | 文法数 | より大きなpaucalまたは同様 |
| 他の | 文法数 文法性別 | 複数 中性 |
| 男 | 文法性別 | 男 |
| 女性 | 文法性別 | 女性 |
| 中性 | 文法性別 | 中性。他と同じ。 |
上記のフォームに加えて、文法数のオペレーターを使用できます。オペレーターは次のとおりです。
| 形状 | 例 | 説明 |
|---|---|---|
| = 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}車持っています}}
日本語には普遍的な形式が1つしかないため、文字列には他のパターンのみが含まれています。
パターンには、マルチパターン構文の前後にテキストを含めることができます。次の例には、マルチパターンと「」の前に「I Have」が含まれています。マルチパターンの後。
I have {plural, one {{0} car} other {{0} cars}}.
デルフィの場合、サンプルはそうです
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ディレクトリを参照してください。
クラスは、レガシーマルチパターン形式もサポートしています
one;I have {0} car;other;I have {0} cars
ただし、このレガシー形式のサポートは廃止されました。 ICUメッセージ形式は推奨形式です。
APIは、複数の複数/性別に対応したプレースホルダーをサポートします。その場合、文字列をパーツに分割し、それぞれに1つのプレースホルダーを含み、セグメントを論理文に連れて行きます。 nextフォームを使用して、新しい部品を開始します。たとえば、「私はC車とSスキーを持っている」と言いたい場合は、2つの部分を含む次の文字列を作成します。1つは車用、もう1つはスキー用です。各部分には、特異と複数の2つのパターンが含まれています。
I have {plural, one {{0} car} other {{0} cars}} and {plural, one {{0} ski} other {{0} skis}}.
文字列には、車とスキーの2つのマルチパターンが含まれています。
I have {plural, one {%d car} other {%d cars}} and {plural, one {%d ski} other {%d skis}}.
SamplesDelphiVCLPatternsMulti 、 SamplesDelphiFMXPatternsMulti 、 SamplesWindowsFormsPatternsMultiおよびSamplesWPFPatternsMultiサンプルを参照してください。
画面に多数を表示する必要がある場合は、ユーザーが数の大きさを簡単に理解するのが難しい場合があります。たとえば、144563217の番号がある場合、どのように表示する必要があります。ユーザーのロケールのルールに従ってフォーマットできます。たとえば、米国では14,456,217になります。これは、定められていない数よりも理解しやすいですが、まだ問題はほとんどありません。 1つ目は、数の大きさを理解するためにある程度の努力が必要であることです。第二に、かなり多くのスペースが必要です。解決策の1つは、14,000,000のように丸くすることです。理解しやすいです。さらに理解しやすくするために、14mのように略すこともできます。略語されたフォームはますます人気を博しています。残念ながら、それぞれの言語は略す方法として。ほとんどの言語は3桁だけ行きます。たとえば、英語:K、M、G、Tなど。ただし、一部のアジア言語は4桁だけ移動します。たとえば、日本語:万(10,000)、億(100,000,000)など。
CLDRには、数値を略すルールが含まれています。略語番号APIは、これらのルールを使用して、string(整数またはフロート)を文字列としてフォーマットします。結果は、1400万などの長い文字列、14mという短い文字列、または1400万ドルなどの通貨文字列にすることができます。
CLDRには、数字から序数を作成する方法に関する情報は含まれていません。私はさまざまな情報源からルールを収集しています。適切なルールのない言語はまだたくさんあります。ネイティブスピーカーからのヘルプをいただければ幸いです。
Angularなどの一部のプラットフォームには、ランタイム翻訳の読み込みがありません。このAPIはそれを実装します。このAPIを使用して、1つのコンピレーション、1つの展開、すべての言語を提供する1つのURLを作成できます。
ランタイム言語スイッチは、アプリケーションがランタイムでユーザーインターフェイスの言語を変更できる機能です。このライブラリにはそのためのコードが含まれています。言語の変更は、フォームやダイアログのリロードがなく、アプリケーションの現在の状態が変更されていないような方法で実装されます。
ランタイム言語スイッチAPIは、Delphi VCL、Delphi Firemonkey、.Net Windowsフォーム、および.NET WPF用です。
文字列を別の言語に翻訳すると、翻訳が元の文字列よりも長くなる可能性が常にあります。英語はドイツ語やフィンランド語などのように、英語はよりコンパクトな言語であるため、元の言語が英語の場合は特に当てはまります。翻訳された文字列が長くなると、文字列の一部が切り捨てられるか、2つ以上の文字列が重複するリスクがあります。このような状況を見つけるのは難しいです。ユーザーインターフェイスチェッカーAPIが役立ちます。これは、コードへの一時的なリンクであり、アプリケーションを実行するときに、切り捨てを示すスクリーンショットを備えたレポートファイルを書き込み、明確な色でマークしたマークを付けています。切り捨てや重複が発生する場所を即座に確認できます。
ユーザーインターフェイスチェッカーAPIは、Delphi VCL、Delphi Firemonkey、.Net Windowsフォーム、および.NET WPF用です。
LibraryNETには.NET APIが含まれています。 LibraryNETStandardには、文法数、文法性別、略語数、および序数のAPIが含まれる.NET標準ライブラリが含まれています。コンパイルしてソリューションに追加し、最後にライブラリをプロジェクトの参照に追加します。ライブラリのUI部分は.NET標準であるため、Windowsフォーム、WPF、ASP.NET、.NET Core、およびXamarinで動作します。 .NET 2.0から始まる.NETバージョンを使用してコンパイルすることもできます。
Nugetを介してAPIを取得できます。
Install-Package Soluling
現在、WindowsフォームとWPF用のサンプルがあります。 ASP.NETおよびASP.NETコアサンプルをまもなく追加します。
LibraryAngularには角度APIが含まれています。 APIにはAngular 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 Sample最初に参照してください。
VCLアプリケーションでも.ntresリソースを使用できますが、リソース文字列とリソースDLLまたはローカライズされたEXEファイルを使用して標準VCLローカリゼーション方法を使用することをお勧めします。
C ++ビルダーは正式にサポートされていません。これらのすべてのコードは、C ++ビルダーで動作するはずですが、テストされていません。
いくつかの理由で、.NET、Angular、およびDelphiを最初のプラットフォームとして選択しました。まず、Angular、C#、Delphiが大好きです。第二に、Delphiと.NETの両方に、複数形や性別など、いくつかのI18N APIのサポートがありません。 3つ目は、Delphiと.NETの両方がランタイム言語スイッチの恩恵を受けることです。 4番目は、Delphiがサイズが重要なモバイルアプリケーションを作成するために使用されることです。 5番目は、C# + .NETコアには明るい未来があると信じているということです。
TypeScriptの同様のクラスを実装することを検討しています(JavaScriptがプロセスに登場します)。ただし、タイプスクリプトは、すでに優れたサポートプラルと性別を備えたAngularで使用されています。 Angularのランタイム翻訳ロードを実装しました。おそらく、TypeScriptの略語APIのみを実装します。
Javaに同様のライブラリを実装できます。 JavaにはすでにICU実装があるため、サーバー側で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には、次のプラットフォームのサンプルが含まれています。
複数のパターン文字列を使用してアプリケーションをローカライズする予定がある場合は、文法数と文法性別をサポートするローカリゼーションツールをより適切に使用します。 Solulingは複数のパターンに優れたサポートを受けており、ASP.NET、.NET、Angular、React、Blazor、Delphi、Python、Java、さらに100を超える他のファイルおよびデータベース形式をサポートしています。
Solulingは、継続的なローカリゼーション、機械翻訳、インタラクティブファジーマッチングの有効な翻訳メモリ、インタラクティブ用語、インポート/エクスポート、ビルドツール、クラウド翻訳をサポートします。

ここからsolulingをダウンロードできます。
注記!現時点では、SolulingとSolumakeはWindowsアプリケーションであり、Windowsでのみ動作しています。ただし、Webベースのバージョンを将来、LinuxとMacosにポートソルマケをリリースする予定です。