1 /******************************************************************************** 2 * Copyright (C) 2016 and later: Unicode, Inc. and others. 3 * License & terms of use: http://www.unicode.org/copyright.html#License 4 ******************************************************************************** 5 ******************************************************************************** 6 * Copyright (C) 2008-2013, International Business Machines Corporation and 7 * others. All Rights Reserved. 8 ******************************************************************************** 9 */ 10 11 //! [PluralFormatExample1] 12 #include <iostream> 13 #include "unicode/plurfmt.h" 14 #include "unicode/msgfmt.h" 15 #include "unicode/ustdio.h" 16 //! [PluralFormatExample1] 17 18 using namespace std; 19 static void PluralFormatExample() { 20 21 u_printf("=============================================================================\n"); 22 u_printf(" PluralFormatExample()\n"); 23 u_printf("\n"); 24 u_printf(" Use PluralFormat and Messageformat to get Plural Form for languages below:\n"); 25 u_printf(" English, Slovenian\n"); 26 u_printf("=============================================================================\n"); 27 28 //! [PluralFormatExample] 29 UErrorCode status =U_ZERO_ERROR; 30 Locale locEn = Locale("en"); 31 Locale locSl = Locale("sl"); 32 33 UnicodeString patEn = UnicodeString("one{dog} other{dogs}"); // English 'dog' 34 UnicodeString patSl = UnicodeString("one{pes} two{psa} few{psi} other{psov}"); // Slovenian translation of dog in Plural Form 35 36 // Create a new PluralFormat for a given locale locale and pattern string 37 PluralFormat plfmtEn = PluralFormat(locEn, patEn,status); 38 PluralFormat plfmtSl = PluralFormat(locSl, patSl,status); 39 // Constructs a MessageFormat for given pattern and locale. 40 MessageFormat* msgfmtEn = new MessageFormat("{0,number} {1}", locEn,status); 41 MessageFormat* msgfmtSl = new MessageFormat("{0,number} {1}", locSl,status); 42 43 int numbers[] = {0, 1, 2, 3, 4, 5, 10, 100, 101, 102}; 44 u_printf("Output by using PluralFormat and MessageFormat API\n"); 45 u_printf("%-16s%-16s%-16s\n","Number", "English","Slovenian"); 46 47 // Use MessageFormat.format () to format the objects and append to the given StringBuffer 48 for (int i=0;i<sizeof(numbers)/sizeof(int);i++) { 49 UnicodeString msgEn,msgSl; 50 FieldPosition fpos = 0; 51 Formattable argEn[]={Formattable(numbers[i]), Formattable(plfmtEn.format(numbers[i],status))}; 52 Formattable argSl[]={Formattable(numbers[i]), Formattable(plfmtSl.format(numbers[i],status))}; 53 msgfmtEn->format(argEn,2,msgEn,fpos,status); 54 msgfmtSl->format(argSl,2,msgSl,fpos,status); 55 u_printf("%-16d%-16S%-16S\n", numbers[i], msgEn.getTerminatedBuffer(),msgSl.getTerminatedBuffer()); 56 } 57 58 u_printf("\n"); 59 60 // Equivalent code with message format pattern 61 UnicodeString msgPatEn = "{0,plural, one{# dog} other{# dogs}}"; 62 UnicodeString msgPatSl = "{0,plural, one{# pes} two{# psa} few{# psi} other{# psov}}"; 63 64 MessageFormat* altMsgfmtEn = new MessageFormat(msgPatEn, locEn,status); 65 MessageFormat* altMsgfmtSl = new MessageFormat(msgPatSl, locSl,status); 66 u_printf("Same Output by using MessageFormat API only\n"); 67 u_printf("%-16s%-16s%-16s\n","Number", "English","Slovenian"); 68 for (int i=0;i<sizeof(numbers)/sizeof(int);i++) { 69 UnicodeString msgEn,msgSl; 70 Formattable arg[] = {numbers[i]}; 71 FieldPosition fPos =0; 72 altMsgfmtEn->format(arg, 1, msgEn, fPos, status); 73 altMsgfmtSl->format(arg, 1, msgSl, fPos,status); 74 u_printf("%-16d%-16S%-16S\n", numbers[i], msgEn.getTerminatedBuffer(), msgSl.getTerminatedBuffer()); 75 } 76 77 delete msgfmtEn; 78 delete msgfmtSl; 79 delete altMsgfmtEn; 80 delete altMsgfmtSl; 81 //! [PluralFormatExample] 82 83 /* output of the sample code: 84 ******************************************************************** 85 Number English Slovenian 86 0 0 dogs 0 psov 87 1 1 dog 1 pes 88 2 2 dogs 2 psa 89 3 3 dogs 3 psi 90 4 4 dogs 4 psi 91 5 5 dogs 5 psov 92 10 10 dogs 10 psov 93 100 100 dogs 100 psov 94 101 101 dogs 101 pes 95 102 102 dogs 102 psa 96 97 *********************************************************************/ 98 } 99 int main (int argc, char* argv[]) 100 { 101 PluralFormatExample(); 102 return 0; 103 } 104