تنسيقات سلاسل الرسائل وحدة العناية المركزة برقم ، والتاريخ ، الجمع ، واختر أصحاب النائبة لإنشاء رسائل محلية.
تهدف هذه الحزمة إلى توفير طريقة لك لإدارة وتنسيق رسائل سلسلة تطبيق JavaScript إلى سلاسل محلية للأشخاص الذين يستخدمون تطبيقك. يمكنك استخدام هذه الحزمة في المتصفح وعلى الخادم عبر Node.js.
يعتمد هذا التنفيذ على اقتراح Strawman ، ولكن هناك بعض الأماكن التي يختلف هذا التنفيذ.
ملاحظة: قد تتغير API IntlMessageFormat للبقاء متزامن مع ECMA-402 ، ولكن هذه الحزمة ستتبع Semver.
يتم توفير الرسائل في المُنشئ كرسالة String ، أو كائن AST الذي تم تحريكه مسبقًا.
var msg = new IntlMessageFormat ( message , locales , [ formats ] ) ; يتم تحليل message السلسلة ، ثم يتم تخزينها داخليًا في نموذج تم تجميعه تم تحسينه لطريقة format() لإنتاج السلسلة المنسقة للعرض للمستخدم.
var output = msg . format ( values ) ;مثال شائع جدًا هو تنسيق الرسائل التي لها أرقام مع ملصقات صيغة الجمع. باستخدام هذه الحزمة ، يمكنك التأكد من تنسيق السلسلة بشكل صحيح لموقع الشخص ، على سبيل المثال:
var MESSAGES = {
'en-US' : {
NUM_PHOTOS : 'You have {numPhotos, plural, ' +
'=0 {no photos.}' +
'=1 {one photo.}' +
'other {# photos.}}'
} ,
'es-MX' : {
NUM_PHOTOS : 'Usted {numPhotos, plural, ' +
'=0 {no tiene fotos.}' +
'=1 {tiene una foto.}' +
'other {tiene # fotos.}}'
}
} ;
var output ;
var enNumPhotos = new IntlMessageFormat ( MESSAGES [ 'en-US' ] . NUM_PHOTOS , 'en-US' ) ;
output = enNumPhotos . format ( { numPhotos : 1000 } ) ;
console . log ( output ) ; // => "You have 1,000 photos."
var esNumPhotos = new IntlMessageFormat ( MESSAGES [ 'es-MX' ] . NUM_PHOTOS , 'es-MX' ) ;
output = esNumPhotos . format ( { numPhotos : 1000 } ) ;
console . log ( output ) ; // => "Usted tiene 1,000 fotos."إن بناء جملة الرسائل الذي تستخدمه هذه الحزمة ليس ملكية ، في الواقع ، إنها بناء جملة رسائل قياسية شائعة تعمل عبر لغات البرمجة واللغات التي يعرفها المترجمون المحترفون. تستخدم هذه الحزمة بناء جملة رسالة ICU وتعمل لجميع لغات CLDR التي لها قواعد التعددية المحددة.
يستخدم معايير الصناعة: بناء جملة رسالة ICU وبيانات CLDR.
يدعم حجج الرسائل الجمع ، والاختيار ، والاختلاط .
تنسيقات الأرقام والتواريخ/الأوقات في الرسائل التي تستخدم Intl.NumberFormat و Intl.DateTimeFormat ، على التوالي.
تم تحسينه للمكالمات المتكررة إلى طريقة format() مثيل IntlMessageFormat .
يدعم تحديد أنماط/خيارات التنسيق المخصص.
يدعم تسلسل الهروب لـ Message Syntax chars ، على سبيل المثال: "\{foo\}" سوف يخرج: "{foo}" في الإخراج المنسق بدلاً من تفسيره كوسيطة foo .
Intl الحديثة تفترض هذه الحزمة أن الكائن العالمي Intl موجود في وقت التشغيل. Intl موجود في جميع المتصفحات الحديثة (IE11+) والعقدة (مع وحدة العناية المركزة الكاملة). أساليب Intl التي نعتمد عليها هي:
Intl.NumberFormat لتنسيق الأرقام (يمكن تعددها باستخدام intl.js)Intl.DateTimeFormat لتنسيق وقت التاريخ (يمكن تعدده باستخدام intl.js)Intl.PluralRules للتنسيق الجمع/الترتيبي (يمكن تعددها باستخدام intl-pluralrules) < script src =" intl-messageformat/intl-messageformat.min.js " > </ script > ببساطة require() هذه الحزمة:
var IntlMessageFormat = require ( 'intl-messageformat' ) ;ملاحظة: يجب أن تتضمن العقدة الخاصة بك وحدة العناية المركزة الكاملة
IntlMessageFormat لإنشاء رسالة للتنسيق ، استخدم مُنشئ IntlMessageFormat . يأخذ المنشئ ثلاثة معلمات:
رسالة - {String | AST} - رسالة السلسلة (أو AST المسبقة) التي تعمل كنمط تنسيق.
لغات - {String | String []} - سلسلة مع علامة لغة BCP 47 ، أو مجموعة من هذه الأوتار. إذا لم تقدم لغة ، فسيتم استخدام اللغة الافتراضية. عند توفير مجموعة من الأماكن ، يتم التحقق من كل عنصر ولغات أجداده ويتم إرجاع أول عنصر في البيانات المحلية المسجلة. انظر: قرار اللغة لمزيد من التفاصيل.
[تنسيقات] - {Object} - كائن اختياري مع خيارات محددة للمستخدم لأنماط التنسيق.
var msg = new IntlMessageFormat ( 'My name is {name}.' , 'en-US' ) ; يستخدم IntlMessageFormat Intl.NumberFormat.supportedLocalesOf() لتحديد البيانات المحلية التي يجب استخدامها بناءً على قيمة locales التي تم تمريرها إلى المنشئ. يمكن تحديد نتيجة عملية الدقة هذه عن طريق استدعاء طريقة النموذج الأولي resolvedOptions() .
resolvedOptions() طريقة تقوم هذه الطريقة بإرجاع كائن بقيم الخيارات التي تم حلها أثناء إنشاء المثيل. أنه يحتوي حاليًا فقط على خاصية locale ؛ هذا مثال:
var msg = new IntlMessageFormat ( '' , 'en-us' ) ;
console . log ( msg . resolvedOptions ( ) . locale ) ; // => "en-US" لاحظ كيف كانت اللغة المحددة هي القيمة السفلية: "en-us" ، ولكن تم حلها وتطبيعها إلى: "en-US" .
format(values) طريقة بمجرد إنشاء الرسالة ، يتم تنسيق الرسالة عن طريق استدعاء طريقة format() على المثيل وتمرير مجموعة من values :
var output = msg . format ( { name : "Eric" } ) ;
console . log ( output ) ; // => "My name is Eric."ملاحظة: يجب توفير قيمة لكل وسيطة في نمط الرسالة تم إنشاء المثيل.
تحديد أنماط التنسيق المخصص مفيد ، تحتاج إلى توفير مجموعة من الخيارات إلى التنسيق الأساسي ؛ على سبيل المثال ، إخراج رقم بالدولار الأمريكي:
var msg = new IntlMessageFormat ( 'The price is: {price, number, USD}' , 'en-US' , {
number : {
USD : {
style : 'currency' ,
currency : 'USD'
}
}
} ) ;
var output = msg . format ( { price : 100 } ) ;
console . log ( output ) ; // => "The price is: $100.00" في هذا المثال ، نقوم بتحديد نمط تنسيق رقم USD والذي يتم تمريره إلى مثيل Intl.NumberFormat الأساسي كخيارات له.
يوضح هذا المثال كيفية استخدام بناء جملة رسالة وحدة العناية المركزة لتحديد رسالة تحتوي على ملصق صيادي ؛ على سبيل المثال ، "You have 10 photos" :
You have {numPhotos, plural,
=0 {no photos.}
=1 {one photo.}
other {# photos.}
}
var MESSAGES = {
photos : '...' , // String from code block above.
...
} ;
var msg = new IntlMessageFormat ( MESSAGES . photos , 'en-US' ) ;
console . log ( msg . format ( { numPhotos : 0 } ) ) ; // => "You have no photos."
console . log ( msg . format ( { numPhotos : 1 } ) ) ; // => "You have one photo."
console . log ( msg . format ( { numPhotos : 1000 } ) ) ; // => "You have 1,000 photos." ملاحظة: عندما كان numPhotos 1000 ، يتم تنسيق الرقم مع فاصل الآلاف الصحيح.
هذا البرنامج مجاني لاستخدامه تحت Yahoo! شركة BSD ترخيص. راجع ملف الترخيص للحصول على نص الترخيص ومعلومات حقوق الطبع والنشر.