mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
[gen_l10n] Fix plural parsing for translated messages (#53954)
This commit is contained in:
parent
c6ee4d268f
commit
4e811d2819
@ -85,7 +85,7 @@ String generateNumberFormattingLogic(Message message) {
|
||||
return formatStatements.isEmpty ? '@(none)' : formatStatements.join('');
|
||||
}
|
||||
|
||||
String generatePluralMethod(Message message) {
|
||||
String generatePluralMethod(Message message, AppResourceBundle bundle) {
|
||||
if (message.placeholders.isEmpty) {
|
||||
throw L10nException(
|
||||
'Unable to find placeholders for the plural message: ${message.resourceId}.\n'
|
||||
@ -96,7 +96,7 @@ String generatePluralMethod(Message message) {
|
||||
|
||||
// To make it easier to parse the plurals message, temporarily replace each
|
||||
// "{placeholder}" parameter with "#placeholder#".
|
||||
String easyMessage = message.value;
|
||||
String easyMessage = bundle.translationFor(message);
|
||||
for (final Placeholder placeholder in message.placeholders)
|
||||
easyMessage = easyMessage.replaceAll('{${placeholder.name}}', '#${placeholder.name}#');
|
||||
|
||||
@ -168,7 +168,7 @@ String generateMethod(Message message, AppResourceBundle bundle) {
|
||||
}
|
||||
|
||||
if (message.isPlural) {
|
||||
return generatePluralMethod(message);
|
||||
return generatePluralMethod(message, bundle);
|
||||
}
|
||||
|
||||
if (message.placeholdersRequireFormatting) {
|
||||
|
@ -92,37 +92,40 @@ void main() {
|
||||
'#l10n 13 (Hello GB fallback World)\n'
|
||||
'#l10n 14 (--- zh ---)\n'
|
||||
'#l10n 15 (你好世界)\n'
|
||||
'#l10n 16 (--- scriptCode: zh_Hans ---)\n'
|
||||
'#l10n 17 (简体你好世界)\n'
|
||||
'#l10n 18 (--- scriptCode - zh_Hant ---)\n'
|
||||
'#l10n 19 (繁體你好世界)\n'
|
||||
'#l10n 20 (--- scriptCode - zh_Hant_TW ---)\n'
|
||||
'#l10n 21 (台灣繁體你好世界)\n'
|
||||
'#l10n 22 (--- General formatting tests ---)\n'
|
||||
'#l10n 23 (Hello World)\n'
|
||||
'#l10n 24 (Hello _NEWLINE_ World)\n'
|
||||
'#l10n 25 (Hello World)\n'
|
||||
'#l10n 16 (你好)\n'
|
||||
'#l10n 17 (你好世界)\n'
|
||||
'#l10n 18 (你好2个其他世界)\n'
|
||||
'#l10n 19 (--- scriptCode: zh_Hans ---)\n'
|
||||
'#l10n 20 (简体你好世界)\n'
|
||||
'#l10n 21 (--- scriptCode - zh_Hant ---)\n'
|
||||
'#l10n 22 (繁體你好世界)\n'
|
||||
'#l10n 23 (--- scriptCode - zh_Hant_TW ---)\n'
|
||||
'#l10n 24 (台灣繁體你好世界)\n'
|
||||
'#l10n 25 (--- General formatting tests ---)\n'
|
||||
'#l10n 26 (Hello World)\n'
|
||||
'#l10n 27 (Hello World on Friday, January 1, 1960)\n'
|
||||
'#l10n 28 (Hello world argument on 1/1/1960 at 00:00)\n'
|
||||
'#l10n 29 (Hello World from 1960 to 2020)\n'
|
||||
'#l10n 30 (Hello for 123)\n'
|
||||
'#l10n 31 (Hello for price USD123.00)\n'
|
||||
'#l10n 32 (Hello)\n'
|
||||
'#l10n 33 (Hello World)\n'
|
||||
'#l10n 34 (Hello two worlds)\n'
|
||||
'#l10n 27 (Hello _NEWLINE_ World)\n'
|
||||
'#l10n 28 (Hello World)\n'
|
||||
'#l10n 29 (Hello World)\n'
|
||||
'#l10n 30 (Hello World on Friday, January 1, 1960)\n'
|
||||
'#l10n 31 (Hello world argument on 1/1/1960 at 00:00)\n'
|
||||
'#l10n 32 (Hello World from 1960 to 2020)\n'
|
||||
'#l10n 33 (Hello for 123)\n'
|
||||
'#l10n 34 (Hello for price USD123.00)\n'
|
||||
'#l10n 35 (Hello)\n'
|
||||
'#l10n 36 (Hello new World)\n'
|
||||
'#l10n 37 (Hello two new worlds)\n'
|
||||
'#l10n 38 (Hello on Friday, January 1, 1960)\n'
|
||||
'#l10n 39 (Hello World, on Friday, January 1, 1960)\n'
|
||||
'#l10n 40 (Hello two worlds, on Friday, January 1, 1960)\n'
|
||||
'#l10n 41 (Hello other 0 worlds, with a total of 100 citizens)\n'
|
||||
'#l10n 42 (Hello World of 101 citizens)\n'
|
||||
'#l10n 43 (Hello two worlds with 102 total citizens)\n'
|
||||
'#l10n 44 ([Hello] -World- #123#)\n'
|
||||
'#l10n 45 (Flutter\'s amazing!)\n'
|
||||
'#l10n 46 (Flutter is "amazing"!)\n'
|
||||
'#l10n 36 (Hello World)\n'
|
||||
'#l10n 37 (Hello two worlds)\n'
|
||||
'#l10n 38 (Hello)\n'
|
||||
'#l10n 39 (Hello new World)\n'
|
||||
'#l10n 40 (Hello two new worlds)\n'
|
||||
'#l10n 41 (Hello on Friday, January 1, 1960)\n'
|
||||
'#l10n 42 (Hello World, on Friday, January 1, 1960)\n'
|
||||
'#l10n 43 (Hello two worlds, on Friday, January 1, 1960)\n'
|
||||
'#l10n 44 (Hello other 0 worlds, with a total of 100 citizens)\n'
|
||||
'#l10n 45 (Hello World of 101 citizens)\n'
|
||||
'#l10n 46 (Hello two worlds with 102 total citizens)\n'
|
||||
'#l10n 47 ([Hello] -World- #123#)\n'
|
||||
'#l10n 48 (Flutter\'s amazing!)\n'
|
||||
'#l10n 49 (Flutter is "amazing"!)\n'
|
||||
'#l10n END\n'
|
||||
);
|
||||
});
|
||||
|
@ -126,6 +126,9 @@ class Home extends StatelessWidget {
|
||||
callback: (BuildContext context) {
|
||||
results.add('--- zh ---');
|
||||
results.add(AppLocalizations.of(context).helloWorld);
|
||||
results.add(AppLocalizations.of(context).helloWorlds(0));
|
||||
results.add(AppLocalizations.of(context).helloWorlds(1));
|
||||
results.add(AppLocalizations.of(context).helloWorlds(2));
|
||||
},
|
||||
),
|
||||
LocaleBuilder(
|
||||
@ -402,13 +405,14 @@ void main() {
|
||||
}
|
||||
''';
|
||||
|
||||
// Only tests `helloWorld`. The rest of the messages are added out of
|
||||
// necessity since every base class requires an override for every
|
||||
// message.
|
||||
// Only tests `helloWorld` and `helloWorlds`. The rest of the messages
|
||||
// are added out of necessity since every base class requires an
|
||||
// override for every message.
|
||||
final String appZh = r'''
|
||||
{
|
||||
"@@locale": "zh",
|
||||
"helloWorld": "你好世界",
|
||||
"helloWorlds": "{count,plural, =0{你好} =1{你好世界} other{你好{count}个其他世界}}",
|
||||
"helloNewlineWorld": "Hello \n World",
|
||||
"hello": "Hello {world}",
|
||||
"greeting": "{hello} {world}",
|
||||
@ -417,7 +421,6 @@ void main() {
|
||||
"helloOn": "Hello {world} on {date} at {time}",
|
||||
"helloFor": "Hello for {value}",
|
||||
"helloCost": "Hello for {price} {value}",
|
||||
"helloWorlds": "{count,plural, =0{Hello} =1{Hello World} =2{Hello two worlds} few{Hello {count} worlds} many{Hello all {count} worlds} other{Hello other {count} worlds}}",
|
||||
"helloAdjectiveWorlds": "{count,plural, =0{Hello} =1{Hello {adjective} World} =2{Hello two {adjective} worlds} other{Hello other {count} {adjective} worlds}}",
|
||||
"helloWorldsOn": "{count,plural, =0{Hello on {date}} =1{Hello World, on {date}} =2{Hello two worlds, on {date}} other{Hello other {count} worlds, on {date}}}",
|
||||
"helloWorldPopulation": "{count,plural, =1{Hello World of {population} citizens} =2{Hello two worlds with {population} total citizens} many{Hello all {count} worlds, with a total of {population} citizens} other{Hello other {count} worlds, with a total of {population} citizens}}",
|
||||
|
Loading…
Reference in New Issue
Block a user