Design Docs‎ > ‎Formatting‎ > ‎MessageFormat‎ > ‎MessageFormat 2011q1‎ > ‎

MessagePattern Demo

Sample output of demo code that parses MessageFormat pattern strings via the MessagePattern class and pretty-prints the parsed structure. Some of the patterns are formatted via a "mini formatter".

message:  Hello!
 0: MSG_START(0)@0
 1: MSG_LIMIT(0)@6
message:  Hel'lo!
autoQA:   Hel''lo!
 0: MSG_START(0)@0
 1: INSERT_CHAR(39)@4
 2: MSG_LIMIT(0)@7
message:  Hel'{o
autoQA:   Hel'{o'
 0: MSG_START(0)@0
 1: SKIP_SYNTAX(0)@3="'"
 2: INSERT_CHAR(39)@6
 3: MSG_LIMIT(0)@6
message:  Hel'{'o
 0: MSG_START(0)@0
 1: SKIP_SYNTAX(0)@3="'"
 2: SKIP_SYNTAX(0)@5="'"
 3: MSG_LIMIT(0)@7
message:  a'{bc''de'f
 0: MSG_START(0)@0
 1: SKIP_SYNTAX(0)@1="'"
 2: SKIP_SYNTAX(0)@6="'"
 3: SKIP_SYNTAX(0)@9="'"
 4: MSG_LIMIT(0)@11
a{bc'def
message:  a'{bc''de'f{0,number,g'hi''jk'l#}
 0: MSG_START(0)@0
 1: SKIP_SYNTAX(0)@1="'"
 2: SKIP_SYNTAX(0)@6="'"
 3: SKIP_SYNTAX(0)@9="'"
 4: ARG_START(SIMPLE)@11="{"
 5: ARG_NUMBER(0)@12="0"
 6: ARG_TYPE(0)@14="number"
 7: ARG_STYLE(0)@21="g'hi''jk'l#"
 8: ARG_LIMIT(SIMPLE)@32="}"
 9: MSG_LIMIT(0)@33
message:  abc{0}def
 0: MSG_START(0)@0
 1: ARG_START(NONE)@3="{"
 2: ARG_NUMBER(0)@4="0"
 3: ARG_LIMIT(NONE)@5="}"
 4: MSG_LIMIT(0)@9
message:  abc{ arg }def
 0: MSG_START(0)@0
 1: ARG_START(NONE)@3="{"
 2: ARG_NAME(0)@5="arg"
 3: ARG_LIMIT(NONE)@9="}"
 4: MSG_LIMIT(0)@13
message:  abc{1}def{arg}ghi
 0: MSG_START(0)@0
 1: ARG_START(NONE)@3="{"
 2: ARG_NUMBER(1)@4="1"
 3: ARG_LIMIT(NONE)@5="}"
 4: ARG_START(NONE)@9="{"
 5: ARG_NAME(0)@10="arg"
 6: ARG_LIMIT(NONE)@13="}"
 7: MSG_LIMIT(0)@17
message:  abc{2, number}ghi{3, select, xx {xxx} other {ooo}} xyz
 0: MSG_START(0)@0
 1: ARG_START(SIMPLE)@3="{"
 2: ARG_NUMBER(2)@4="2"
 3: ARG_TYPE(0)@7="number"
 4: ARG_LIMIT(SIMPLE)@13="}"
 5: ARG_START(SELECT)@17="{"
 6: ARG_NUMBER(3)@18="3"
 7: ARG_SELECTOR(0)@29="xx"
 8:   MSG_START(1)@32="{"
 9:   MSG_LIMIT(1)@36="}"
10: ARG_SELECTOR(0)@38="other"
11:   MSG_START(1)@44="{"
12:   MSG_LIMIT(1)@48="}"
13: ARG_LIMIT(SELECT)@49="}"
14: MSG_LIMIT(0)@54
message:  abc{gender,select,other{His name is {person,XML,<entry name="PERSON">{$PERSON}</entry>}.}}xyz
 0: MSG_START(0)@0
 1: ARG_START(SELECT)@3="{"
 2: ARG_NAME(0)@4="gender"
 3: ARG_SELECTOR(0)@18="other"
 4:   MSG_START(1)@23="{"
 5:   ARG_START(SIMPLE)@36="{"
 6:   ARG_NAME(0)@37="person"
 7:   ARG_TYPE(0)@44="XML"
 8:   ARG_STYLE(0)@48="<entry name="PERSON">{$PERSON}</entry>"
 9:   ARG_LIMIT(SIMPLE)@86="}"
10:   MSG_LIMIT(1)@88="}"
11: ARG_LIMIT(SELECT)@89="}"
12: MSG_LIMIT(0)@93
message:  abc{num_people, plural, offset:17 few{fff} other {oooo}}xyz
 0: MSG_START(0)@0
 1: ARG_START(PLURAL)@3="{"
 2: ARG_NAME(0)@4="num_people"
 3: ARG_INT(17)@31="17"=17.0
 4: ARG_SELECTOR(0)@34="few"
 5:   MSG_START(1)@37="{"
 6:   MSG_LIMIT(1)@41="}"
 7: ARG_SELECTOR(0)@43="other"
 8:   MSG_START(1)@49="{"
 9:   MSG_LIMIT(1)@54="}"
10: ARG_LIMIT(PLURAL)@55="}"
11: MSG_LIMIT(0)@59
message:  abc{ num , plural , offset: 2 =1 {1} =-1 {-1} =3.14 {3.14} other {oo} }xyz
 0: MSG_START(0)@0
 1: ARG_START(PLURAL)@3="{"
 2: ARG_NAME(0)@5="num"
 3: ARG_INT(2)@28="2"=2.0
 4: ARG_SELECTOR(0)@30="=1"
 5: ARG_INT(1)@31="1"=1.0
 6:   MSG_START(1)@33="{"
 7:   MSG_LIMIT(1)@35="}"
 8: ARG_SELECTOR(0)@37="=-1"
 9: ARG_INT(-1)@38="-1"=-1.0
10:   MSG_START(1)@41="{"
11:   MSG_LIMIT(1)@44="}"
12: ARG_SELECTOR(0)@46="=3.14"
13: ARG_DOUBLE(0)@47="3.14"=3.14
14:   MSG_START(1)@52="{"
15:   MSG_LIMIT(1)@57="}"
16: ARG_SELECTOR(0)@59="other"
17:   MSG_START(1)@65="{"
18:   MSG_LIMIT(1)@68="}"
19: ARG_LIMIT(PLURAL)@70="}"
20: MSG_LIMIT(0)@74
message:  I don't {a,plural,other{w'{'on't #'#'}} and {b,select,other{shan't'}'}} '{'''know'''}' and {c,choice,0#can't'|'}{z,number,#'#'###.00'}'}.
autoQA:   I don''t {a,plural,other{w'{'on''t #'#'}} and {b,select,other{shan''t'}'}} '{'''know'''}' and {c,choice,0#can''t'|'}{z,number,#'#'###.00'}'}.
 0: MSG_START(0)@0
 1: INSERT_CHAR(39)@6
 2: ARG_START(PLURAL)@8="{"
 3: ARG_NAME(0)@9="a"
 4: ARG_SELECTOR(0)@18="other"
 5:   MSG_START(1)@23="{"
 6:   SKIP_SYNTAX(0)@25="'"
 7:   SKIP_SYNTAX(0)@27="'"
 8:   INSERT_CHAR(39)@31
 9:   REPLACE_NUMBER(0)@33="#"
10:   SKIP_SYNTAX(0)@34="'"
11:   SKIP_SYNTAX(0)@36="'"
12:   MSG_LIMIT(1)@37="}"
13: ARG_LIMIT(PLURAL)@38="}"
14: ARG_START(SELECT)@44="{"
15: ARG_NAME(0)@45="b"
16: ARG_SELECTOR(0)@54="other"
17:   MSG_START(1)@59="{"
18:   INSERT_CHAR(39)@65
19:   SKIP_SYNTAX(0)@66="'"
20:   SKIP_SYNTAX(0)@68="'"
21:   MSG_LIMIT(1)@69="}"
22: ARG_LIMIT(SELECT)@70="}"
23: SKIP_SYNTAX(0)@72="'"
24: SKIP_SYNTAX(0)@75="'"
25: SKIP_SYNTAX(0)@76="'"
26: SKIP_SYNTAX(0)@82="'"
27: SKIP_SYNTAX(0)@83="'"
28: SKIP_SYNTAX(0)@85="'"
29: ARG_START(CHOICE)@91="{"
30: ARG_NAME(0)@92="c"
31: ARG_INT(0)@101="0"=0.0
32: ARG_SELECTOR(0)@102="#"
33:   MSG_START(1)@103
34:   INSERT_CHAR(39)@107
35:   SKIP_SYNTAX(0)@108="'"
36:   SKIP_SYNTAX(0)@110="'"
37:   MSG_LIMIT(1)@111
38: ARG_LIMIT(CHOICE)@111="}"
39: ARG_START(SIMPLE)@112="{"
40: ARG_NAME(0)@113="z"
41: ARG_TYPE(0)@115="number"
42: ARG_STYLE(0)@122="#'#'###.00'}'"
43: ARG_LIMIT(SIMPLE)@135="}"
44: MSG_LIMIT(0)@137
message:  a_{0,choice,-∞ #-inf|  5≤ five | 99 # ninety'|'nine  }_z
 0: MSG_START(0)@0
 1: ARG_START(CHOICE)@2="{"
 2: ARG_NUMBER(0)@3="0"
 3: ARG_DOUBLE(0)@12="-∞"=-Infinity
 4: ARG_SELECTOR(0)@15="#"
 5:   MSG_START(1)@16
 6:   MSG_LIMIT(1)@20="|"
 7: ARG_INT(5)@23="5"=5.0
 8: ARG_SELECTOR(0)@24="≤"
 9:   MSG_START(1)@25
10:   MSG_LIMIT(1)@31="|"
11: ARG_INT(99)@33="99"=99.0
12: ARG_SELECTOR(0)@36="#"
13:   MSG_START(1)@37
14:   SKIP_SYNTAX(0)@44="'"
15:   SKIP_SYNTAX(0)@46="'"
16:   MSG_LIMIT(1)@53
17: ARG_LIMIT(CHOICE)@53="}"
18: MSG_LIMIT(0)@56
message:  a_{0,plural,other{num=#'#'=#'#'={1,number,##}!}}_z
 0: MSG_START(0)@0
 1: ARG_START(PLURAL)@2="{"
 2: ARG_NUMBER(0)@3="0"
 3: ARG_SELECTOR(0)@12="other"
 4:   MSG_START(1)@17="{"
 5:   REPLACE_NUMBER(0)@22="#"
 6:   SKIP_SYNTAX(0)@23="'"
 7:   SKIP_SYNTAX(0)@25="'"
 8:   REPLACE_NUMBER(0)@27="#"
 9:   SKIP_SYNTAX(0)@28="'"
10:   SKIP_SYNTAX(0)@30="'"
11:   ARG_START(SIMPLE)@32="{"
12:   ARG_NUMBER(1)@33="1"
13:   ARG_TYPE(0)@35="number"
14:   ARG_STYLE(0)@42="##"
15:   ARG_LIMIT(SIMPLE)@44="}"
16:   MSG_LIMIT(1)@46="}"
17: ARG_LIMIT(PLURAL)@47="}"
18: MSG_LIMIT(0)@50
message:  }}}{0}}
 0: MSG_START(0)@0
 1: ARG_START(NONE)@3="{"
 2: ARG_NUMBER(0)@4="0"
 3: ARG_LIMIT(NONE)@5="}"
 4: MSG_LIMIT(0)@7
message:  Hello {0}!
 0: MSG_START(0)@0
 1: ARG_START(NONE)@6="{"
 2: ARG_NUMBER(0)@7="0"
 3: ARG_LIMIT(NONE)@8="}"
 4: MSG_LIMIT(0)@10
Hello Alice!
message:  ++{0, select, female{{1} calls you her friend}other{{1} calls you '{their}' friend}male{{1} calls you his friend}}--
 0: MSG_START(0)@0
 1: ARG_START(SELECT)@2="{"
 2: ARG_NUMBER(0)@3="0"
 3: ARG_SELECTOR(0)@14="female"
 4:   MSG_START(1)@20="{"
 5:   ARG_START(NONE)@21="{"
 6:   ARG_NUMBER(1)@22="1"
 7:   ARG_LIMIT(NONE)@23="}"
 8:   MSG_LIMIT(1)@45="}"
 9: ARG_SELECTOR(0)@46="other"
10:   MSG_START(1)@51="{"
11:   ARG_START(NONE)@52="{"
12:   ARG_NUMBER(1)@53="1"
13:   ARG_LIMIT(NONE)@54="}"
14:   SKIP_SYNTAX(0)@66="'"
15:   SKIP_SYNTAX(0)@74="'"
16:   MSG_LIMIT(1)@82="}"
17: ARG_SELECTOR(0)@83="male"
18:   MSG_START(1)@87="{"
19:   ARG_START(NONE)@88="{"
20:   ARG_NUMBER(1)@89="1"
21:   ARG_LIMIT(NONE)@90="}"
22:   MSG_LIMIT(1)@112="}"
23: ARG_LIMIT(SELECT)@113="}"
24: MSG_LIMIT(0)@116
++Alice calls you her friend--
message:  ++{0, select, female{{1} calls you her friend}other{{1} calls you '{their}' friend}male{{1} calls you his friend}}--
 0: MSG_START(0)@0
 1: ARG_START(SELECT)@2="{"
 2: ARG_NUMBER(0)@3="0"
 3: ARG_SELECTOR(0)@14="female"
 4:   MSG_START(1)@20="{"
 5:   ARG_START(NONE)@21="{"
 6:   ARG_NUMBER(1)@22="1"
 7:   ARG_LIMIT(NONE)@23="}"
 8:   MSG_LIMIT(1)@45="}"
 9: ARG_SELECTOR(0)@46="other"
10:   MSG_START(1)@51="{"
11:   ARG_START(NONE)@52="{"
12:   ARG_NUMBER(1)@53="1"
13:   ARG_LIMIT(NONE)@54="}"
14:   SKIP_SYNTAX(0)@66="'"
15:   SKIP_SYNTAX(0)@74="'"
16:   MSG_LIMIT(1)@82="}"
17: ARG_SELECTOR(0)@83="male"
18:   MSG_START(1)@87="{"
19:   ARG_START(NONE)@88="{"
20:   ARG_NUMBER(1)@89="1"
21:   ARG_LIMIT(NONE)@90="}"
22:   MSG_LIMIT(1)@112="}"
23: ARG_LIMIT(SELECT)@113="}"
24: MSG_LIMIT(0)@116
++Bob calls you his friend--
message:  ++{0, select, female{{1} calls you her friend}other{{1} calls you '{their}' friend}male{{1} calls you his friend}}--
 0: MSG_START(0)@0
 1: ARG_START(SELECT)@2="{"
 2: ARG_NUMBER(0)@3="0"
 3: ARG_SELECTOR(0)@14="female"
 4:   MSG_START(1)@20="{"
 5:   ARG_START(NONE)@21="{"
 6:   ARG_NUMBER(1)@22="1"
 7:   ARG_LIMIT(NONE)@23="}"
 8:   MSG_LIMIT(1)@45="}"
 9: ARG_SELECTOR(0)@46="other"
10:   MSG_START(1)@51="{"
11:   ARG_START(NONE)@52="{"
12:   ARG_NUMBER(1)@53="1"
13:   ARG_LIMIT(NONE)@54="}"
14:   SKIP_SYNTAX(0)@66="'"
15:   SKIP_SYNTAX(0)@74="'"
16:   MSG_LIMIT(1)@82="}"
17: ARG_SELECTOR(0)@83="male"
18:   MSG_START(1)@87="{"
19:   ARG_START(NONE)@88="{"
20:   ARG_NUMBER(1)@89="1"
21:   ARG_LIMIT(NONE)@90="}"
22:   MSG_LIMIT(1)@112="}"
23: ARG_LIMIT(SELECT)@113="}"
24: MSG_LIMIT(0)@116
++sushifan3 calls you {their} friend--
message:  _'__{gender, select, female{Her n'ame is {person_name}.}other{His n'ame is {person_name}.}}__'_
autoQA:   _''__{gender, select, female{Her n''ame is {person_name}.}other{His n''ame is {person_name}.}}__''_
 0: MSG_START(0)@0
 1: INSERT_CHAR(39)@2
 2: ARG_START(SELECT)@4="{"
 3: ARG_NAME(0)@5="gender"
 4: ARG_SELECTOR(0)@21="female"
 5:   MSG_START(1)@27="{"
 6:   INSERT_CHAR(39)@34
 7:   ARG_START(NONE)@41="{"
 8:   ARG_NAME(0)@42="person_name"
 9:   ARG_LIMIT(NONE)@53="}"
10:   MSG_LIMIT(1)@55="}"
11: ARG_SELECTOR(0)@56="other"
12:   MSG_START(1)@61="{"
13:   INSERT_CHAR(39)@68
14:   ARG_START(NONE)@75="{"
15:   ARG_NAME(0)@76="person_name"
16:   ARG_LIMIT(NONE)@87="}"
17:   MSG_LIMIT(1)@89="}"
18: ARG_LIMIT(SELECT)@90="}"
19: INSERT_CHAR(39)@94
20: MSG_LIMIT(0)@95
_'__Her n'ame is Alice.__'_
message:  _'__{gender, select, female{Her n'ame is {person_name}.}other{His n'ame is {person_name}.}}__'_
autoQA:   _''__{gender, select, female{Her n''ame is {person_name}.}other{His n''ame is {person_name}.}}__''_
 0: MSG_START(0)@0
 1: INSERT_CHAR(39)@2
 2: ARG_START(SELECT)@4="{"
 3: ARG_NAME(0)@5="gender"
 4: ARG_SELECTOR(0)@21="female"
 5:   MSG_START(1)@27="{"
 6:   INSERT_CHAR(39)@34
 7:   ARG_START(NONE)@41="{"
 8:   ARG_NAME(0)@42="person_name"
 9:   ARG_LIMIT(NONE)@53="}"
10:   MSG_LIMIT(1)@55="}"
11: ARG_SELECTOR(0)@56="other"
12:   MSG_START(1)@61="{"
13:   INSERT_CHAR(39)@68
14:   ARG_START(NONE)@75="{"
15:   ARG_NAME(0)@76="person_name"
16:   ARG_LIMIT(NONE)@87="}"
17:   MSG_LIMIT(1)@89="}"
18: ARG_LIMIT(SELECT)@90="}"
19: INSERT_CHAR(39)@94
20: MSG_LIMIT(0)@95
_'__His n'ame is Bob.__'_

Comments