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