التجميعات ، الجنسين ، الأرقام المختصرة ، الأرقام الترتيبية ، تغيير لغة وقت التشغيل ، التداخل والتحقق من الاقتطاع ، وغيرها الكثير.
قامت Soluling بتنفيذ مجموعة من واجهات برمجة التطبيقات للتدويل (I18N) لـ .NET و Angular و Delphi. يضيف كل API ميزات إضافية إلى واجهة برمجة تطبيقات I18N القياسية للمنصة - على سبيل المثال ، دعم الأرقام النحوية ، والأجناس النحوية ، والأرقام المختصرة ، والأرقام الترتيبية. تتضمن المكتبة أيضًا واجهات برمجة التطبيقات لأداء تبديل تطبيقات لغة وقت التشغيل ، أو لتحديد اللغة الأولية في وقت التشغيل. تحتوي المكتبة أيضًا على واجهة برمجة التطبيقات التي تتحقق من وقت التشغيل في واجهة المستخدم الخاصة بك لمشكلات مثل عناصر التحكم المقطوعة أو المتداخلة. أخيرًا ، تحتوي مكتبة Delphi على مورد توطين مناسب لـ Firemonkey.
كل API هو 100 ٪ API الأصلي. وهذا يعني أنه يحتوي على رمز المصدر الكامل ولا يتطلب أي ملفات إضافية. .NET API يحتوي على رمز C# فقط ولا يتطلب أي مكتبة أو ملفات بيانات أخرى. بنفس الطريقة التي تحتوي بها API Angular على رمز TypeScript فقط ، ويحتوي Delphi API على رمز Delphi فقط. تم استخراج القواعد المستخدمة من قبل الرمز من CLDR إلى ملفات رمز المصدر والتي هي جزء من رمز مصدر API. لا تحتاج إلى ملفات وحدة العناية المركزة أو ملفات CLDR XML ، ولكن يتم تجميع كل شيء بما في ذلك المنطق والقواعد في ملف التطبيق الخاص بك.
تدعم معظم تنسيقات الموارد (على سبيل المثال ، .resx in .NET ،. تتطلب الأرقام النحوية والأجناس بيانات هيكلية حيث توجد العديد من المتغيرات التي تعتمد على اللغة لسلسلة واحدة. على سبيل المثال ، باللغة الإنجليزية ، "لدي سيارات n" تتطلب نوعين:
| الرقم النحوي | .شبكة | دلفي وجافا |
|---|---|---|
| المفرد | لدي سيارة {0} | لدي ٪ d سيارة |
| جمع | لدي سيارات {0} | لدي ٪ d سيارات |
بعض المنصات مثل Android و Angular لديها دعم مدمج للتجمعات ، وهذا هو السبب في أن لديهم أيضًا تنسيق موارد خاص للاحتفاظ بأنماط متعددة. ومع ذلك ، فإن .NET و Delphi و Java ليس لديهم مثل هذا التنسيق. تستخدم هذه المكتبة تنسيق رسالة وحدة العناية المركزة لتخزين جميع الأنماط ذات الصلة في سلسلة موارد قياسية. بناء الجملة هو:
{parameter, kind, form1 {pattern1}[ form2 {pattern2}]...[ formN {patternN}]
أين
kind إما plural أو gender أو select
form هو رمز نموذج الرقم النحوي أو لنموذج الجنس النحوي.
يحتوي الجدول التالي على نماذج محتملة.
| استمارة | تستخدم مع | وصف |
|---|---|---|
| صفر | الأرقام النحوية | نولار |
| واحد | الأرقام النحوية | المفرد |
| اثنين | الأرقام النحوية | مزدوج |
| عدد قليل | الأرقام النحوية | القول ، المحاكمة أو ما شابه ذلك |
| كثير | الأرقام النحوية | أكبر من القول أو ما شابه ذلك |
| آخر | الأرقام النحوية الجنسين النحويين | جمع حيادي |
| ذكر | الجنسين النحويين | ذكر |
| أنثى | الجنسين النحويين | أنثى |
| حيادي | الجنسين النحويين | حيادي. مثل الآخر. |
بالإضافة إلى النماذج المذكورة أعلاه ، يمكنك استخدام المشغل بأرقام نحوية. المشغلون هم:
| استمارة | مثال | وصف |
|---|---|---|
| = ن | = 1 | متساوي |
| ~ ن | ~ 12 | حول |
| > ن | > 5 | أكبر من |
| <ن | <10 | أقل من |
| > = ن | > = 5 | أكبر أو تساوي |
| <= ن | <= 10 | أقل أو مساوية ل |
| ن .. م | 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
ومع ذلك ، تم إهمال دعم هذا التنسيق القديم. تنسيق رسالة وحدة العناية المركزة هو التنسيق الموصى به.
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 ، كيف ينبغي أن نعرضه. يمكننا تنسيقه وفقًا لقواعد لغة المستخدم. على سبيل المثال ، في الولايات المتحدة الأمريكية سيكون 14456،217. على الرغم من أن هذا أمر أسهل في الفهم من الرقم غير المطوّل ، إلا أنه لا يزال يعاني من مشاكل قليلة. الأول هو أنه يتطلب بعض الجهد لفهم حجم الرقم. ثانياً ، يتطلب الكثير من المساحة. حل واحد هو تقريبه مثل 14،000،000. من الأسهل الفهم. لتسهيل الفهم ، يمكننا أيضًا اختلاطه مثل 14M. النماذج المختصرة أصبحت أكثر وأكثر شعبية. لسوء الحظ ، كل لغة هي طريقها إلى الخنازير. معظم اللغات تمر بثلاثة أرقام. على سبيل المثال ، اللغة الإنجليزية: K ، M ، G ، T ، إلخ. ومع ذلك ، تمر بعض اللغات الآسيوية بأربعة أرقام. على سبيل المثال اليابانية: 万 (10000) ، 億 (100،000،000) ، إلخ.
يحتوي CLDR على قواعد لختصر الأرقام. يستخدم API الرقم المختصر هذه القواعد لتنسيق رقم (عدد صحيح أو تعويم) كسلسلة. يمكن أن تكون النتيجة إما سلسلة طويلة مثل 14 مليون ، أو قصيرة تصل إلى 14 مترًا ، أو سلسلة عملة مثل 14 مليون دولار.
لا يحتوي CLDR على معلومات حول كيفية إنشاء أرقام ترتيبية من رقم. لقد تم جمع القواعد من مصادر مختلفة. لا تزال هناك العديد من اللغات بدون قواعد مناسبة. المساعدة من المتحدث الأصلي سيكون موضع تقدير.
بعض المنصات مثل Angular ليس لديها تحميل ترجمة وقت التشغيل. API هذا ينفذها. باستخدام واجهة برمجة التطبيقات هذه ، يمكنك الآن إجراء مجموعة واحدة ونشر واحد وعنوان URL واحد يخدم جميع اللغات.
يعد التبديل لغة وقت التشغيل ميزة حيث يمكن للتطبيق تغيير لغة واجهة المستخدم الخاصة به في وقت التشغيل. تحتوي هذه المكتبة على رمز لذلك. يتم تنفيذ تغيير اللغة بطريقة لا توجد إعادة تحميل من النماذج أو الحوار ، وتبقى الحالة الحالية للتطبيق دون تغيير.
واجهات برمجة التطبيقات لتبديل لغة وقت التشغيل مخصصة لـ Delphi VCL و Delphi Firemonkey و .NET Windows Forms و .NET WPF.
عندما نترجم السلاسل إلى لغة أخرى ، هناك دائمًا احتمال أن تكون الترجمة أطول من السلسلة الأصلية. هذا صحيح بشكل خاص إذا كانت اللغة الأصلية باللغة الإنجليزية لأن اللغة الإنجليزية هي لغة أكثر إحكاما على سبيل المثال ، الألمانية أو الفنلندية. عندما تتلاشى السلاسل المترجمة ، هناك خطر من اقتطاع جزء من السلسلة أو تتداخل سلسلتين أو أكثر. من الصعب العثور على مواقف مثل هذه. API واجهة المستخدم API يساعد. إنها واجهة برمجة تطبيقات أنك رابط مؤقت للرمز الخاص بك ، وعندما تقوم بتشغيل التطبيق ، يقوم التطبيق بكتابة ملف تقرير مع لقطات تعرض عمليات الاقتطاع وتداخلها بألوان واضحة. يمكنك على الفور معرفة أين يحدث اقتطاع أو تداخل.
واجهات برمجة تطبيقات واجهة المستخدم APIs مخصصة لـ Delphi VCL و Delphi Firemonkey و .NET Windows Forms و .NET WPF.
LibraryNET تحتوي على .NET API. تحتوي LibraryNETStandard على مكتبة .NET قياسية تحتوي على API للأرقام النحوية ، والأجناس النحوية ، والأرقام المختصرة ، والأرقام الترتيبية. قم بتجميعه وأضف ذلك إلى الحل الخاص بك وأخير إضافة المكتبة إلى مراجع مشروعك. نظرًا لأن جزء NO UI من المكتبة هو .NET Standard ، فإنه يعمل مع نماذج Windows و WPF و ASP.NET و .NET Core و Xamarin. يمكنك أيضًا تجميعه باستخدام أي إصدار .NET بدءًا من .NET 2.0.
يمكنك الحصول على واجهة برمجة التطبيقات من خلال nuget.
Install-Package Soluling
حاليًا ، لدينا عينات لنماذج Windows و WPF. سنضيف عينات ASP.NET و ASP.NET الأساسية قريبًا.
LibraryAngular تحتوي على واجهة برمجة تطبيقات الزاوي. تتطلب واجهة برمجة التطبيقات (API) 9 أو أحدث. أسهل طريقة لاستخدامها هي من خلال NPM.
npm install @soluling/angularلمعرفة المزيد حول API اقرأ وثائقها.
LibraryDelphi تحتوي على Delphi API. أسهل طريقة لإدراجهم في تطبيقك هي إضافة المسار إلى مسار البحث في مشروعك. تدعم المكتبة Delphi 7 أو أحدث. ومع ذلك ، للحصول على جميع الميزات التي تحتاجها Delphi XE2 أو أحدث.
FireMonkey ليس لديه مورد توطين مناسب. إذا كانت منصات المحمول المستهدفة مثل iOS أو Android ، فلا يمكنك استخدام DLLs للموارد. كل شيء ، بما في ذلك المورد المترجمة ، يجب أن يكون في ملف التطبيق الرئيسي. تحتوي هذه المكتبة على حل لتوطين 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 أولاً.
يمكنك استخدام موارد .ntres أيضًا في تطبيقات VCL ، ولكن يوصى باستخدام طريقة توطين VCL القياسية مع سلاسل الموارد وموارد DLLs أو ملفات EXE المترجمة.
لا يتم دعم منشئ C ++ رسميًا. يجب أن تعمل كل هذه الرموز مع منشئ C ++ ولكن لم يتم اختباره أبدًا.
لقد اخترنا .NET ، Angular و Delphi كمنصة أولى لعدة أسباب. الأول هو أننا نحب Angular و C# و Delphi. ثانياً ، يفتقر كل من Delphi و .NET إلى دعم العديد من واجهات برمجة التطبيقات I18N ، مثل التجميعات والأجناس. والثالث هو أن كل من Delphi و .NET سيستفيدان أيضًا من مفتاح لغة وقت التشغيل. رابعًا هو أن Delphi يستخدم لإنشاء تطبيقات متنقلة حيث يهم الحجم. والخامس هو أنني أعتقد أن C# + .NET Core سيكون لها مستقبل مشرق.
نحن نفكر في تنفيذ فئات مماثلة لـ TypeScript (تأتي JavaScript في هذه العملية). ومع ذلك ، يستخدم TypeScript في الغالب مع Angular ولديه بالفعل دعم كبير من الأجناس والأجناس. قمنا بتنفيذ تحميل ترجمة وقت التشغيل لـ Angular. من المحتمل أن ننفذ أرقام API المختصرة فقط لـ TypeScript.
يمكننا تنفيذ مكتبات مماثلة لجافا. يوجد بالفعل تطبيق وحدة العناية المركزة لـ 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 على عينات للمنصات التالية:
إذا كنت تخطط لتوطين التطبيق الخاص بك باستخدام سلاسل أنماط متعددة ، فمن الأفضل استخدام أداة توطين لها دعم للأرقام النحوية والأجناس النحوية. يتمتع Soluling بدعم ممتاز لأنماط متعددة ، ويدعم ASP.NET ، .NET ، Angular ، React ، Blazor ، Delphi ، Python ، Java ، بالإضافة إلى أكثر من 100 تنسيق ملفات وقاعدة بيانات أخرى.
يدعم SOLULING التوطين المستمر ، والترجمة الآلية ، وذاكرة الترجمة التفاعلية الممكّنة للمطابقة ، والمصطلحات التفاعلية ، والاستيراد/التصدير ، وأدوات البناء ، والترجمة السحابية.

يمكنك تنزيل soluling من هنا.
ملحوظة! في الوقت الحالي ، هما Soluling و Solumake هي تطبيقات Windows والعمل فقط على Windows. ومع ذلك ، فإننا نخطط لإصدار إصدار قائم على الويب في Future و Port Solumake إلى Linux و MacOS.