Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit 21f3ce8

Browse files
authored
[gen_l10n] Multiline descriptions (#116380)
* init * empty commit to start google testing
1 parent e2fb672 commit 21f3ce8

File tree

3 files changed

+77
-3
lines changed

3 files changed

+77
-3
lines changed

packages/flutter_tools/lib/src/localizations/gen_l10n.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,11 @@ Map<String, String> pluralCases = <String, String>{
201201
};
202202

203203
String generateBaseClassMethod(Message message, LocaleInfo? templateArbLocale) {
204-
final String comment = message.description ?? 'No description provided for @${message.resourceId}.';
204+
final String comment = message
205+
.description
206+
?.split('\n')
207+
.map((String line) => ' /// $line')
208+
.join('\n') ?? ' /// No description provided for @${message.resourceId}.';
205209
final String templateLocaleTranslationComment = '''
206210
/// In $templateArbLocale, this message translates to:
207211
/// **'${generateString(message.value)}'**''';

packages/flutter_tools/lib/src/localizations/gen_l10n_templates.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,14 +179,14 @@ class @(class) extends @(baseLanguageClassName) {
179179
''';
180180

181181
const String baseClassGetterTemplate = '''
182-
/// @(comment)
182+
@(comment)
183183
///
184184
@(templateLocaleTranslationComment)
185185
String get @(name);
186186
''';
187187

188188
const String baseClassMethodTemplate = '''
189-
/// @(comment)
189+
@(comment)
190190
///
191191
@(templateLocaleTranslationComment)
192192
String @(name)(@(parameters));

packages/flutter_tools/test/general.shard/generate_localizations_test.dart

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1318,6 +1318,76 @@ class AppLocalizationsEn extends AppLocalizations {
13181318
^'''));
13191319
}
13201320
});
1321+
1322+
testWithoutContext('no description generates generic comment', () {
1323+
final Directory l10nDirectory = fs.currentDirectory.childDirectory('lib').childDirectory('l10n')
1324+
..createSync(recursive: true);
1325+
l10nDirectory.childFile(defaultTemplateArbFileName)
1326+
.writeAsStringSync(r'''
1327+
{
1328+
"helloWorld": "Hello world!"
1329+
}''');
1330+
l10nDirectory.childFile(esArbFileName)
1331+
.writeAsStringSync(singleEsMessageArbFileString);
1332+
LocalizationsGenerator(
1333+
fileSystem: fs,
1334+
inputPathString: defaultL10nPathString,
1335+
outputPathString: defaultL10nPathString,
1336+
templateArbFileName: defaultTemplateArbFileName,
1337+
outputFileString: defaultOutputFileString,
1338+
classNameString: defaultClassNameString,
1339+
logger: logger,
1340+
)
1341+
..loadResources()
1342+
..writeOutputFiles();
1343+
final File baseLocalizationsFile = fs.file(
1344+
fs.path.join(syntheticL10nPackagePath, 'output-localization-file.dart')
1345+
);
1346+
expect(baseLocalizationsFile.existsSync(), isTrue);
1347+
1348+
final String baseLocalizationsFileContents = fs.file(
1349+
fs.path.join(syntheticL10nPackagePath, 'output-localization-file.dart')
1350+
).readAsStringSync();
1351+
expect(baseLocalizationsFileContents, contains('/// No description provided for @helloWorld.'));
1352+
});
1353+
1354+
testWithoutContext('multiline descriptions are correctly formatted as comments', () {
1355+
final Directory l10nDirectory = fs.currentDirectory.childDirectory('lib').childDirectory('l10n')
1356+
..createSync(recursive: true);
1357+
l10nDirectory.childFile(defaultTemplateArbFileName)
1358+
.writeAsStringSync(r'''
1359+
{
1360+
"helloWorld": "Hello world!",
1361+
"@helloWorld": {
1362+
"description": "The generic example string in every language.\nUse this for tests!"
1363+
}
1364+
}''');
1365+
l10nDirectory.childFile(esArbFileName)
1366+
.writeAsStringSync(singleEsMessageArbFileString);
1367+
LocalizationsGenerator(
1368+
fileSystem: fs,
1369+
inputPathString: defaultL10nPathString,
1370+
outputPathString: defaultL10nPathString,
1371+
templateArbFileName: defaultTemplateArbFileName,
1372+
outputFileString: defaultOutputFileString,
1373+
classNameString: defaultClassNameString,
1374+
logger: logger,
1375+
)
1376+
..loadResources()
1377+
..writeOutputFiles();
1378+
final File baseLocalizationsFile = fs.file(
1379+
fs.path.join(syntheticL10nPackagePath, 'output-localization-file.dart')
1380+
);
1381+
expect(baseLocalizationsFile.existsSync(), isTrue);
1382+
1383+
final String baseLocalizationsFileContents = fs.file(
1384+
fs.path.join(syntheticL10nPackagePath, 'output-localization-file.dart')
1385+
).readAsStringSync();
1386+
expect(baseLocalizationsFileContents, contains('''
1387+
/// The generic example string in every language.
1388+
/// Use this for tests!'''));
1389+
});
1390+
13211391
testWithoutContext('message without placeholders - should generate code comment with description and template message translation', () {
13221392
_standardFlutterDirectoryL10nSetup(fs);
13231393
LocalizationsGenerator(

0 commit comments

Comments
 (0)