Plurals , เพศ , ตัวเลขตัวย่อ , หมายเลขลำดับ , การเปลี่ยนแปลงภาษารันไทม์ , การตรวจสอบการทับซ้อนและการตัดทอน และอีกมากมาย
Soluling ได้ดำเนินการรวบรวม APIs นานาชาติ (I18N) สำหรับ. NET, Angular และ Delphi API แต่ละตัวจะเพิ่มคุณสมบัติเพิ่มเติมให้กับ I18N API มาตรฐานของแพลตฟอร์ม - ตัวอย่างเช่นการสนับสนุนหมายเลขไวยากรณ์เพศไวยากรณ์ตัวเลขตัวย่อและหมายเลขลำดับ ห้องสมุดยังรวมถึง APIs เพื่อดำเนินการสวิตช์ภาษารันไทม์ของแอปพลิเคชันหรือเพื่อเลือกภาษาเริ่มต้นบนรันไทม์ ไลบรารียังมี API ที่บนรันไทม์ตรวจสอบส่วนต่อประสานผู้ใช้ของคุณสำหรับปัญหาเช่นการควบคุมที่ถูกตัดทอนหรือซ้อนทับ ในที่สุดห้องสมุด Delphi มีทรัพยากรการแปลที่เหมาะสมสำหรับ Firemonkey
API แต่ละตัวเป็น API พื้นเมือง 100% หมายความว่ามีซอร์สโค้ดเต็มและไม่จำเป็นต้องใช้ไฟล์เพิ่มเติม .NET API มีเฉพาะรหัส C# และไม่จำเป็นต้องใช้ไลบรารีหรือไฟล์ข้อมูลอื่น ๆ ในทำนองเดียวกัน Angular API มีเฉพาะรหัส typescript และ Delphi API มีเฉพาะรหัส Delphi กฎที่ใช้โดยรหัสได้รับการดึงจาก CLDR ไปยังไฟล์ซอร์สโค้ดที่เป็นส่วนหนึ่งของซอร์สโค้ด API คุณไม่จำเป็นต้องใช้ไลบรารี ICU หรือไฟล์ CLDR XML แต่ทุกอย่างรวมถึงตรรกะและกฎจะถูกรวบรวมไว้ในไฟล์แอปพลิเคชันของคุณ
รูปแบบทรัพยากรส่วนใหญ่ (เช่น .resx ใน. NET, .Properties ใน Java และ Strings ทรัพยากรใน Delphi) รองรับสตริงธรรมดาเท่านั้น ตัวเลขไวยากรณ์และเพศต้องการข้อมูลโครงสร้างที่มีหลายตัวแปรที่ขึ้นอยู่กับภาษาสำหรับสตริงเดียว ตัวอย่างเช่นในภาษาอังกฤษ "ฉันมีรถยนต์ n" จะต้องใช้สองสายพันธุ์:
| จำนวนไวยากรณ์ | .สุทธิ | Delphi และ Java |
|---|---|---|
| เอกพจน์ | ฉันมีรถ {0} | ฉันมีรถยนต์ %D |
| พหูพจน์ | ฉันมีรถยนต์ {0} | ฉันมีรถยนต์ %D |
แพลตฟอร์มบางแห่งเช่น Android และ Angular มีการสนับสนุนในตัวสำหรับ Plurals และนั่นคือเหตุผลที่พวกเขายังมีรูปแบบทรัพยากรพิเศษเพื่อเก็บรูปแบบหลายรูปแบบ อย่างไรก็ตาม. NET, Delphi และ Java ไม่มีรูปแบบทรัพยากรดังกล่าว ไลบรารีนี้ใช้รูปแบบข้อความ ICU เพื่อจัดเก็บรูปแบบที่เกี่ยวข้องทั้งหมดลงในสตริงทรัพยากรมาตรฐาน ไวยากรณ์คือ:
{parameter, kind, form1 {pattern1}[ form2 {pattern2}]...[ formN {patternN}]
ที่ไหน
kind คือ plural gender หรือ select
form คือรหัสสำหรับแบบฟอร์มหมายเลขไวยากรณ์หรือสำหรับรูปแบบเพศไวยากรณ์
ตารางต่อไปนี้มีรูปแบบที่เป็นไปได้
| รูปร่าง | ใช้กับ | คำอธิบาย |
|---|---|---|
| ศูนย์ | ตัวเลขไวยากรณ์ | นัลลาร์ |
| หนึ่ง | ตัวเลขไวยากรณ์ | เอกพจน์ |
| สอง | ตัวเลขไวยากรณ์ | คู่ |
| น้อย | ตัวเลขไวยากรณ์ | 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 และ SamplesWPFPatternsMulti
หากเราต้องการแสดงตัวเลขจำนวนมากบนหน้าจออาจเป็นเรื่องยากสำหรับผู้ใช้ที่จะเข้าใจขนาดของตัวเลขได้อย่างง่ายดาย ตัวอย่างเช่นหากเรามีหมายเลข 144563217 เราควรแสดงอย่างไร เราสามารถจัดรูปแบบตามกฎของสถานที่ของผู้ใช้ ตัวอย่างเช่นในสหรัฐอเมริกามันจะเป็น 14,456,217 แม้ว่าสิ่งนี้จะเข้าใจได้ง่ายกว่าตัวเลขที่ไม่ได้ฟอร์แมต แต่ก็ยังมีปัญหาเล็กน้อย สิ่งแรกคือมันต้องใช้ความพยายามในการทำความเข้าใจขนาดของจำนวน ประการที่สองมันต้องใช้พื้นที่ค่อนข้างมาก ทางออกหนึ่งคือการปัดเศษเป็น 14,000,000 เข้าใจง่ายกว่า เพื่อให้เข้าใจได้ง่ายยิ่งขึ้นเรายังสามารถย่อมันเช่น 14m แบบฟอร์มย่อกำลังได้รับความนิยมมากขึ้นเรื่อย ๆ น่าเสียดายที่แต่ละภาษาเป็นวิธีที่จะย่อ ภาษาส่วนใหญ่ไปสามหลัก ตัวอย่างเช่นภาษาอังกฤษ: K, M, G, T, ฯลฯ อย่างไรก็ตามภาษาเอเชียบางภาษาไปสี่หลัก ตัวอย่างเช่นภาษาญี่ปุ่น: 万 (10,000), 億 (100,000,000) ฯลฯ
CLDR มีกฎสำหรับหมายเลขย่อ API หมายเลขตัวย่อใช้กฎเหล่านั้นเพื่อจัดรูปแบบตัวเลข (จำนวนเต็มหรือลอย) เป็นสตริง ผลลัพธ์อาจเป็นสตริงที่ยาวเช่น 14 ล้านสั้นเป็น 14 ม. หรือสตริงสกุลเงินเช่น $ 14M
CLDR ไม่มีข้อมูลเกี่ยวกับวิธีการสร้างหมายเลขลำดับจากตัวเลข ฉันได้รวบรวมกฎจากแหล่งต่าง ๆ ยังมีหลายภาษาที่ไม่มีกฎที่เหมาะสม ความช่วยเหลือจากเจ้าของภาษาจะได้รับการชื่นชม
บางแพลตฟอร์มเช่น Angular ไม่มีการโหลดการแปลรันไทม์ API นี้ใช้มัน การใช้ API นี้ตอนนี้คุณสามารถทำการรวบรวมหนึ่งการปรับใช้และ URL หนึ่งรายการที่ให้บริการทุกภาษา
Runtime Language Switch เป็นคุณสมบัติที่แอปพลิเคชันสามารถเปลี่ยนภาษาของส่วนต่อประสานผู้ใช้บนรันไทม์ ไลบรารีนี้มีรหัสสำหรับสิ่งนั้น การเปลี่ยนแปลงภาษาถูกนำไปใช้ในลักษณะที่ไม่มีการโหลดแบบฟอร์มหรือบทสนทนาซ้ำและสถานะปัจจุบันของแอปพลิเคชันยังคงไม่เปลี่ยนแปลง
APIs สวิตช์ภาษารันไทม์ใช้สำหรับ Delphi VCL, Delphi Firemonkey,. NET Windows แบบฟอร์มและ. NET WPF
เมื่อเราแปลสตริงเป็นภาษาอื่นมีความเป็นไปได้เสมอที่การแปลจะยาวกว่าสตริงดั้งเดิม นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งหากภาษาดั้งเดิมเป็นภาษาอังกฤษเพราะภาษาอังกฤษเป็นภาษาที่มีขนาดกะทัดรัดเช่นภาษาเยอรมันหรือภาษาฟินแลนด์ เมื่อสตริงแปลนานขึ้นมีความเสี่ยงที่ส่วนหนึ่งของสตริงจะถูกตัดทอนหรือสองสายหรือมากกว่านั้นจะทับซ้อนกัน สถานการณ์เช่นนี้หายาก ส่วนต่อประสานผู้ใช้ API ช่วย มันเป็น API ที่คุณเชื่อมโยงไปยังรหัสชั่วคราวและเมื่อคุณเรียกใช้แอปพลิเคชันกำลังเขียนไฟล์รายงานที่มีภาพหน้าจอแสดงการตัดทอนและทับซ้อนกันด้วยสีที่ชัดเจน คุณสามารถดูได้ทันทีว่ามีการตัดทอนหรือซ้อนทับกันทันที
APIs ส่วนต่อประสานผู้ใช้มีไว้สำหรับ Delphi VCL, Delphi Firemonkey,. NET Windows แบบฟอร์มและ. NET WPF
LibraryNET มี. NET API LibraryNETStandard มีไลบรารีมาตรฐาน. NET ที่มี API สำหรับหมายเลขไวยากรณ์, เพศไวยากรณ์, ตัวเลขตัวย่อและหมายเลขลำดับ รวบรวมและเพิ่มสิ่งนั้นลงในโซลูชันของคุณและในที่สุดก็เพิ่มไลบรารีลงในการอ้างอิงของโครงการของคุณ เนื่องจากส่วนที่ไม่มี UI ของไลบรารีเป็นมาตรฐาน. NET จึงทำงานกับรูปแบบ Windows, WPF, ASP.NET, .NET CORE และ Xamarin นอกจากนี้คุณยังสามารถรวบรวมได้โดยใช้. NET เวอร์ชันใด ๆ ที่เริ่มต้นด้วย. NET 2.0
คุณสามารถรับ API ผ่าน NUGET
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 ของไลบรารีเพื่อเข้าถึงทรัพยากร คุณไม่จำเป็นต้องปรับเปลี่ยนแอปพลิเคชันที่มีอยู่ของคุณอย่างมากเพื่อให้ได้หลายภาษา ข้อยกเว้นเพียงอย่างเดียวคือสตริงทรัพยากร คุณไม่สามารถใช้. หากคุณมีสตริง hardcoded และคุณต้องการ จำกัด มันให้ห่อในฟังก์ชัน _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 มาตรฐานกับสตริงทรัพยากรและทรัพยากร DLLS หรือไฟล์ EXE ที่แปลเป็นภาษาท้องถิ่น
C ++ Builder ไม่ได้รับการสนับสนุนอย่างเป็นทางการ รหัสทั้งหมดเหล่านี้ควรทำงานกับ C ++ Builder แต่ไม่เคยทดสอบ
เราเลือก. NET, Angular และ Delphi เป็นแพลตฟอร์มแรกด้วยเหตุผลบางประการ ก่อนอื่นคือเรารัก Angular, C# และ Delphi ประการที่สองทั้ง Delphi และ. NET ขาดการสนับสนุนสำหรับ I18N APIs หลายแห่งเช่น Plurals และเพศ ประการที่สามคือทั้ง Delphi และ. NET จะได้รับประโยชน์จากสวิตช์ภาษารันไทม์ ประการที่สี่คือ Delphi ใช้เพื่อสร้างแอปพลิเคชันมือถือที่มีขนาดสำคัญ ประการที่ห้าคือฉันเชื่อว่า C# + .NET Core จะมีอนาคตที่สดใส
เรากำลังพิจารณาที่จะใช้คลาสที่คล้ายกันสำหรับ TypeScript (JavaScript มาในกระบวนการ) อย่างไรก็ตาม TypeScript ส่วนใหญ่จะใช้กับ Angular ที่มี plurals และเพศสนับสนุนที่ดีอยู่แล้ว เราใช้การโหลดการแปลรันไทม์สำหรับ 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, typenscript และ Python ได้เช่นกัน
repo นี้ยังมีแอปพลิเคชันตัวอย่างสากลและการแปลไฟล์และฐานข้อมูล Soluling มีตัวอย่างหลายสิบตัวอย่างที่ครอบคลุมแพลตฟอร์มการเขียนโปรแกรมที่สำคัญหลายแห่งและรูปแบบไฟล์ ตัวอย่างเป็นข้อมูลล่าสุดและใช้ภาษาการเขียนโปรแกรมเวอร์ชันล่าสุด
Soluling มีตัวอย่างสำหรับแพลตฟอร์มต่อไปนี้:
หากคุณวางแผนที่จะ จำกัด แอปพลิเคชันของคุณโดยใช้สตริงหลายรูปแบบคุณควรใช้เครื่องมือการแปลที่มีการสนับสนุนหมายเลขไวยากรณ์และเพศไวยากรณ์ Soluling มีการสนับสนุนที่ยอดเยี่ยมสำหรับหลายรูปแบบและรองรับ ASP.NET, .NET, Angular, React, Blazor, Delphi, Python, Java, รวมถึงรูปแบบไฟล์และฐานข้อมูลอื่น ๆ มากกว่า 100 รูปแบบ
การแก้ปัญหาสนับสนุนการแปลอย่างต่อเนื่อง, การแปลด้วยเครื่อง, การจับคู่แบบฟัซซี่แบบโต้ตอบที่เปิดใช้งานหน่วยความจำการแปล, คำศัพท์เชิงโต้ตอบ, การนำเข้า/ส่งออก, เครื่องมือสร้างและการแปลคลาวด์

คุณสามารถดาวน์โหลดโซลูได้จากที่นี่
บันทึก! ในขณะนี้การโซลูและ solumake เป็นแอพพลิเคชั่น Windows และทำงานบน Windows เท่านั้น อย่างไรก็ตามเราวางแผนที่จะเปิดตัวเวอร์ชันบนเว็บในอนาคตและพอร์ต Solumake ไปยัง Linux และ MacOS