159d709d503bab6e2b61931737e662dd293b40578ccornelius/******************************************************************************** 259d709d503bab6e2b61931737e662dd293b40578ccornelius* Copyright (C) 2008-2013, International Business Machines Corporation and 359d709d503bab6e2b61931737e662dd293b40578ccornelius* others. All Rights Reserved. 459d709d503bab6e2b61931737e662dd293b40578ccornelius******************************************************************************* 559d709d503bab6e2b61931737e662dd293b40578ccornelius*/ 659d709d503bab6e2b61931737e662dd293b40578ccornelius 759d709d503bab6e2b61931737e662dd293b40578ccornelius//! [PluralFormatExample1] 859d709d503bab6e2b61931737e662dd293b40578ccornelius#include <iostream> 959d709d503bab6e2b61931737e662dd293b40578ccornelius#include "unicode/plurfmt.h" 1059d709d503bab6e2b61931737e662dd293b40578ccornelius#include "unicode/msgfmt.h" 1159d709d503bab6e2b61931737e662dd293b40578ccornelius#include "unicode/ustdio.h" 1259d709d503bab6e2b61931737e662dd293b40578ccornelius//! [PluralFormatExample1] 1359d709d503bab6e2b61931737e662dd293b40578ccornelius 1459d709d503bab6e2b61931737e662dd293b40578ccorneliususing namespace std; 1559d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic void PluralFormatExample() { 1659d709d503bab6e2b61931737e662dd293b40578ccornelius 1759d709d503bab6e2b61931737e662dd293b40578ccornelius u_printf("=============================================================================\n"); 1859d709d503bab6e2b61931737e662dd293b40578ccornelius u_printf(" PluralFormatExample()\n"); 1959d709d503bab6e2b61931737e662dd293b40578ccornelius u_printf("\n"); 2059d709d503bab6e2b61931737e662dd293b40578ccornelius u_printf(" Use PluralFormat and Messageformat to get Plural Form for languages below:\n"); 2159d709d503bab6e2b61931737e662dd293b40578ccornelius u_printf(" English, Slovenian\n"); 2259d709d503bab6e2b61931737e662dd293b40578ccornelius u_printf("=============================================================================\n"); 2359d709d503bab6e2b61931737e662dd293b40578ccornelius 2459d709d503bab6e2b61931737e662dd293b40578ccornelius //! [PluralFormatExample] 2559d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status =U_ZERO_ERROR; 2659d709d503bab6e2b61931737e662dd293b40578ccornelius Locale locEn = Locale("en"); 2759d709d503bab6e2b61931737e662dd293b40578ccornelius Locale locSl = Locale("sl"); 2859d709d503bab6e2b61931737e662dd293b40578ccornelius 2959d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString patEn = UnicodeString("one{dog} other{dogs}"); // English 'dog' 3059d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString patSl = UnicodeString("one{pes} two{psa} few{psi} other{psov}"); // Slovenian translation of dog in Plural Form 3159d709d503bab6e2b61931737e662dd293b40578ccornelius 3259d709d503bab6e2b61931737e662dd293b40578ccornelius // Create a new PluralFormat for a given locale locale and pattern string 3359d709d503bab6e2b61931737e662dd293b40578ccornelius PluralFormat plfmtEn = PluralFormat(locEn, patEn,status); 3459d709d503bab6e2b61931737e662dd293b40578ccornelius PluralFormat plfmtSl = PluralFormat(locSl, patSl,status); 3559d709d503bab6e2b61931737e662dd293b40578ccornelius // Constructs a MessageFormat for given pattern and locale. 3659d709d503bab6e2b61931737e662dd293b40578ccornelius MessageFormat* msgfmtEn = new MessageFormat("{0,number} {1}", locEn,status); 3759d709d503bab6e2b61931737e662dd293b40578ccornelius MessageFormat* msgfmtSl = new MessageFormat("{0,number} {1}", locSl,status); 3859d709d503bab6e2b61931737e662dd293b40578ccornelius 3959d709d503bab6e2b61931737e662dd293b40578ccornelius int numbers[] = {0, 1, 2, 3, 4, 5, 10, 100, 101, 102}; 4059d709d503bab6e2b61931737e662dd293b40578ccornelius u_printf("Output by using PluralFormat and MessageFormat API\n"); 4159d709d503bab6e2b61931737e662dd293b40578ccornelius u_printf("%-16s%-16s%-16s\n","Number", "English","Slovenian"); 4259d709d503bab6e2b61931737e662dd293b40578ccornelius 4359d709d503bab6e2b61931737e662dd293b40578ccornelius // Use MessageFormat.format () to format the objects and append to the given StringBuffer 4459d709d503bab6e2b61931737e662dd293b40578ccornelius for (int i=0;i<sizeof(numbers)/sizeof(int);i++) { 4559d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString msgEn,msgSl; 4659d709d503bab6e2b61931737e662dd293b40578ccornelius FieldPosition fpos = 0; 4759d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable argEn[]={Formattable(numbers[i]), Formattable(plfmtEn.format(numbers[i],status))}; 4859d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable argSl[]={Formattable(numbers[i]), Formattable(plfmtSl.format(numbers[i],status))}; 4959d709d503bab6e2b61931737e662dd293b40578ccornelius msgfmtEn->format(argEn,2,msgEn,fpos,status); 5059d709d503bab6e2b61931737e662dd293b40578ccornelius msgfmtSl->format(argSl,2,msgSl,fpos,status); 5159d709d503bab6e2b61931737e662dd293b40578ccornelius u_printf("%-16d%-16S%-16S\n", numbers[i], msgEn.getTerminatedBuffer(),msgSl.getTerminatedBuffer()); 5259d709d503bab6e2b61931737e662dd293b40578ccornelius } 5359d709d503bab6e2b61931737e662dd293b40578ccornelius 5459d709d503bab6e2b61931737e662dd293b40578ccornelius u_printf("\n"); 5559d709d503bab6e2b61931737e662dd293b40578ccornelius 5659d709d503bab6e2b61931737e662dd293b40578ccornelius // Equivalent code with message format pattern 5759d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString msgPatEn = "{0,plural, one{# dog} other{# dogs}}"; 5859d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString msgPatSl = "{0,plural, one{# pes} two{# psa} few{# psi} other{# psov}}"; 5959d709d503bab6e2b61931737e662dd293b40578ccornelius 6059d709d503bab6e2b61931737e662dd293b40578ccornelius MessageFormat* altMsgfmtEn = new MessageFormat(msgPatEn, locEn,status); 6159d709d503bab6e2b61931737e662dd293b40578ccornelius MessageFormat* altMsgfmtSl = new MessageFormat(msgPatSl, locSl,status); 6259d709d503bab6e2b61931737e662dd293b40578ccornelius u_printf("Same Output by using MessageFormat API only\n"); 6359d709d503bab6e2b61931737e662dd293b40578ccornelius u_printf("%-16s%-16s%-16s\n","Number", "English","Slovenian"); 6459d709d503bab6e2b61931737e662dd293b40578ccornelius for (int i=0;i<sizeof(numbers)/sizeof(int);i++) { 6559d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString msgEn,msgSl; 6659d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable arg[] = {numbers[i]}; 6759d709d503bab6e2b61931737e662dd293b40578ccornelius FieldPosition fPos =0; 6859d709d503bab6e2b61931737e662dd293b40578ccornelius altMsgfmtEn->format(arg, 1, msgEn, fPos, status); 6959d709d503bab6e2b61931737e662dd293b40578ccornelius altMsgfmtSl->format(arg, 1, msgSl, fPos,status); 7059d709d503bab6e2b61931737e662dd293b40578ccornelius u_printf("%-16d%-16S%-16S\n", numbers[i], msgEn.getTerminatedBuffer(), msgSl.getTerminatedBuffer()); 7159d709d503bab6e2b61931737e662dd293b40578ccornelius } 7259d709d503bab6e2b61931737e662dd293b40578ccornelius 7359d709d503bab6e2b61931737e662dd293b40578ccornelius delete msgfmtEn; 7459d709d503bab6e2b61931737e662dd293b40578ccornelius delete msgfmtSl; 7559d709d503bab6e2b61931737e662dd293b40578ccornelius delete altMsgfmtEn; 7659d709d503bab6e2b61931737e662dd293b40578ccornelius delete altMsgfmtSl; 7759d709d503bab6e2b61931737e662dd293b40578ccornelius //! [PluralFormatExample] 7859d709d503bab6e2b61931737e662dd293b40578ccornelius 7959d709d503bab6e2b61931737e662dd293b40578ccornelius /* output of the sample code: 8059d709d503bab6e2b61931737e662dd293b40578ccornelius ******************************************************************** 8159d709d503bab6e2b61931737e662dd293b40578ccornelius Number English Slovenian 8259d709d503bab6e2b61931737e662dd293b40578ccornelius 0 0 dogs 0 psov 8359d709d503bab6e2b61931737e662dd293b40578ccornelius 1 1 dog 1 pes 8459d709d503bab6e2b61931737e662dd293b40578ccornelius 2 2 dogs 2 psa 8559d709d503bab6e2b61931737e662dd293b40578ccornelius 3 3 dogs 3 psi 8659d709d503bab6e2b61931737e662dd293b40578ccornelius 4 4 dogs 4 psi 8759d709d503bab6e2b61931737e662dd293b40578ccornelius 5 5 dogs 5 psov 8859d709d503bab6e2b61931737e662dd293b40578ccornelius 10 10 dogs 10 psov 8959d709d503bab6e2b61931737e662dd293b40578ccornelius 100 100 dogs 100 psov 9059d709d503bab6e2b61931737e662dd293b40578ccornelius 101 101 dogs 101 pes 9159d709d503bab6e2b61931737e662dd293b40578ccornelius 102 102 dogs 102 psa 9259d709d503bab6e2b61931737e662dd293b40578ccornelius 9359d709d503bab6e2b61931737e662dd293b40578ccornelius *********************************************************************/ 9459d709d503bab6e2b61931737e662dd293b40578ccornelius} 9559d709d503bab6e2b61931737e662dd293b40578ccorneliusint main (int argc, char* argv[]) 9659d709d503bab6e2b61931737e662dd293b40578ccornelius{ 9759d709d503bab6e2b61931737e662dd293b40578ccornelius PluralFormatExample(); 9859d709d503bab6e2b61931737e662dd293b40578ccornelius return 0; 9959d709d503bab6e2b61931737e662dd293b40578ccornelius}