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}