複數,性別,縮寫數,序數,運行時語言變化,重疊和截斷檢查等等。
Soluling已為.NET,Angular和Delphi實施了國際化(I18N)API的集合。每個API均為平台的標準I18N API添加其他功能,例如,支持語法數字,語法性別,縮寫數字和序數。庫還包括用於執行應用程序運行時語言開關的API,或在運行時選擇初始語言。該庫還包含API,該API在運行時檢查您的用戶界面是否存在截斷或重疊控件等問題。最後,Delphi庫包含FireMonKey的適當本地化資源。
每個API為100%本地API。這意味著它包含完整的源代碼,不需要其他文件。 .NET API僅包含C#代碼,不需要其他庫或數據文件。以同樣的方式,Angular API僅包含打字稿代碼,而Delphi API僅包含Delphi代碼。代碼使用的規則已從CLDR提取到屬於API源代碼的一部分的源代碼文件中。您不需要ICU庫或CLDR XML文件,但是將包括邏輯和規則在內的所有內容都編譯到您的應用程序文件中。
大多數資源格式(例如,.net中的.RESX,Java中的Properties和Delphi中的資源字符串)僅支持普通字符串。語法數字和性別需要結構數據,其中一個字符串有幾種與語言有關的變體。例如,用英語,“我有N車”需要兩個變體:
| 語法數字 | 。網 | Delphi和Java |
|---|---|---|
| 單數 | 我有{0}汽車 | 我有%D車 |
| 複數 | 我有{0}汽車 | 我有%D車 |
一些平台(例如Android和Angular)對複數具有內置支持,這就是為什麼它們還具有特殊的資源格式來容納多種模式。但是,.NET,Delphi和Java沒有這樣的資源格式。該庫使用ICU消息格式將所有相關模式存儲到標準資源字符串中。語法是:
{parameter, kind, form1 {pattern1}[ form2 {pattern2}]...[ formN {patternN}]
在哪裡
kind是plural , gender或select
form是語法數字形式或語法性別形式的代碼。
下表包含可能的形式。
| 形式 | 與 | 描述 |
|---|---|---|
| 零 | 語法數字 | nullar |
| 一 | 語法數字 | 單數 |
| 二 | 語法數字 | 雙重的 |
| 很少 | 語法數字 | 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}車持っています}}
日語只有一種形式,通用,因此字符串僅包含其他模式。
該模式可以包含多模式語法之前和之後的文本。以下示例包含“我有”和“我有”和“”。在多模式之後。
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目錄。
這些課程還支持舊版多模式格式
one;I have {0} car;other;I have {0} cars
但是,對這種遺產格式的支持已被貶低。 ICU消息格式是推薦格式。
API支持多個具有復數/性別的佔位符。在這種情況下,您已經將字符串分成部分,每個部分包含一個佔位符,然後將片段鏈接成一個邏輯句子。使用next表格啟動新部分。例如,如果我想說“我有C車和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 and SamplesWPFPatternsMulti samples。
如果我們需要在屏幕上顯示大量數字,則用戶可能很難輕鬆理解一個數字的大小。例如,如果我們有編號144563217,我們應該如何顯示。我們可以根據用戶區域的規則進行格式化。例如,在美國,它將為14,456,217。儘管這比未格式化的數字更容易理解,但它仍然幾乎沒有問題。第一個是需要一些努力來了解數字的幅度。其次,它需要很多空間。一種解決方案是將其像14,000,000一樣。這更容易理解。為了使它更容易理解,我們也可以像14m一樣縮寫它。縮寫形式越來越受歡迎。不幸的是,每種語言都是縮寫的方式。大多數語言使用三位數。例如,英語:K,M,G,T等。但是,某些亞洲語言使用四位數。例如日語:萬(10,000),億(100,000,000),等。
CLDR包含縮寫數字的規則。縮寫數字API使用這些規則將數字(整數或浮點)作為字符串格式化。結果可以是一根長弦,例如1400萬,短至1400萬,或者是貨幣字符串,例如1400萬美元。
CLDR不包含有關如何從數字創建序數的信息。我一直從各種來源收集規則。沒有適當規則的語言仍然很多。以母語為母語的人將不勝感激。
某些平台(例如Angular)沒有運行時翻譯加載。此API實現了它。使用此API,您現在可以進行一個彙編,一個部署和一個為所有語言服務的URL。
運行時語言開關是一個功能,該應用程序可以在運行時更改其用戶界面的語言。該庫包含為此的代碼。語言更改的實施方式沒有形式或對話框重新加載,並且應用程序的當前狀態保持不變。
運行時語言開關API適用於Delphi VCL,Delphi Firemonkey,.NET Windows表單和.NET WPF。
當我們將字符串翻譯成另一種語言時,總是有可能將翻譯比原始字符串更長。如果原始語言是英語,則尤其如此,因為英語是一種更緊湊的語言,例如德語或芬蘭語。當翻譯的字符串變長時,弦的一部分被截斷或兩個或更多字符串被重疊的風險。這樣的情況很難找到。用戶界面檢查器API會有所幫助。您臨時鏈接到代碼是一個API,運行時,應用程序正在編寫一個帶有屏幕截圖的報表文件,顯示截斷,並用清晰的顏色標記了重疊。您可以立即查看截斷或重疊的位置。
用戶界面檢查器API適用於Delphi VCL,Delphi Firemonkey,.NET Windows表單和.NET WPF。
LibraryNET包含.NET API。 LibraryNETStandard包含一個.NET標準庫,其中包含用於語法數字,語法性別,縮寫數字和序數的API。將其編譯並將其添加到您的解決方案中,最後將庫添加到項目的參考中。由於庫的無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樣本。
您也可以在VCL應用程序中使用.ntres資源,但是建議將標準VCL本地化方法與資源字符串和資源DLL或本地化EXE文件一起使用。
C ++構建器沒有正式支持。所有這些代碼都應與C ++構建器一起使用,但從未進行過測試。
我們選擇.NET,Angular和Delphi作為第一個平台,原因有一些。首先是我們喜歡Angular,C#和Delphi。其次,Delphi和.net都缺乏對幾個I18N API的支持,例如復數和性別。第三個是Delphi和.NET也將從運行時語言開關中受益。第四是Delphi用於創建大小重要的移動應用程序。第五是我相信C# + .NET核心將有光明的未來。
我們正在考慮將類似的類實現為打字稿(JavaScript出現在此過程中)。但是,Typescript主要與已經具有很好的支持型複數和性別的Angular一起使用。我們實現了Angular的運行時翻譯加載。我們可能僅對打字稿實現縮寫數字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。