Chromium Code Reviews| Index: pkg/intl/lib/intl.dart |
| diff --git a/pkg/intl/lib/intl.dart b/pkg/intl/lib/intl.dart |
| index e0e32eeb977a9e10810d80e7804542d2f5cc03a8..3db37455c39186ca27eb441bfa76039fa276b260 100644 |
| --- a/pkg/intl/lib/intl.dart |
| +++ b/pkg/intl/lib/intl.dart |
| @@ -71,7 +71,7 @@ part 'number_format.dart'; |
| * '''I see ${Intl.plural(num_people, |
| * {'0': 'no one at all', |
| * '1': 'one other person', |
| - * 'other': '$num_people other people'})} in $place.'''', |
| + * 'other': '$num_people other people'})} in $place.''', |
| * name: 'msg', |
| * args: [num_people, place], |
| * desc: 'Description of how many people are seen as program start.', |
| @@ -238,12 +238,42 @@ class Intl { |
| } |
| /** |
| - * Support method for message formatting. Select the correct plural form from |
| - * [cases] given [howMany]. |
| + * Format a message differently depending on [howMany]. Normally used |
| + * as part of an Intl.message message that is to be translated. |
|
Emily Fortuna
2013/07/03 17:52:33
`Intl.message`
also you probably can do without t
Alan Knight
2013/07/03 18:41:07
Done. Changed second "message" to "text"
|
| + * Selects the correct plural form from |
| + * the provided alternatives. The [other] named argument is mandatory. |
| */ |
| - static String plural(var howMany, Map cases, [num offset=0]) { |
| - // TODO(efortuna): Deal with "few" and "many" cases, offset, and others! |
| - return select(howMany.toString(), cases); |
| + static String plural(int howMany, {zero, one, two, few, many, other}) { |
| + if (other == null) { |
| + throw new ArgumentError("The 'other' named argument must be provided"); |
|
Emily Fortuna
2013/07/03 17:52:33
in which case should we make it a positional requi
Alan Knight
2013/07/03 18:41:07
That would mean you'd have to write it first, whic
|
| + } |
| + // TODO(alanknight): This algorithm needs to be locale-dependent. |
|
Emily Fortuna
2013/07/03 17:52:33
how will we be able to change this behavior based
Alan Knight
2013/07/03 18:41:07
I was thinking that there would be a generated imp
|
| + switch (howMany) { |
| + case 0 : return (zero == null) ? other : zero; |
| + case 1 : return (one == null) ? other : one; |
| + case 2: return (two == null) ? ((few == null) ? other : few) : two; |
| + default: |
| + if (howMany == 3 || howMany == 4 && few != null) return few; |
| + if (howMany > 10 && howMany < 100 && many != null) return many; |
| + return other; |
| + } |
| + throw new ArgumentError("Invalid plural usage for $howMany"); |
| + } |
| + |
| + /** |
| + * Format a message differently depending on [gender]. Normally used as part |
| + * of an Intl.message message that is to be translated. |
| + */ |
| + static String gender(String gender, |
| + {String male, String female, String other}) { |
| + if (other == null) { |
| + throw new ArgumentError("The 'other' named argument must be specified"); |
| + } |
| + switch(gender) { |
| + case "female" : return female == null ? other : female; |
| + case "male" : return male == null ? other : male; |
| + default: return other; |
| + } |
| } |
| /** |
| @@ -274,13 +304,10 @@ class Intl { |
| * usually) form from [cases] given the user [choice]. |
| */ |
| static String select(String choice, Map cases) { |
| - if (cases.containsKey(choice)) { |
| - return cases[choice]; |
| - } else if (cases.containsKey('other')){ |
| - return cases['other']; |
| - } else { |
| - return ''; |
| - } |
| + var exact = cases[choice]; |
| + if (exact != null) return exact; |
| + var other = cases["other"]; |
| + return (other == null) ? '' : other; |
| } |
| /** |