Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Allow add_[format]() in flutter gen-l10n
  • Loading branch information
Albert221 committed Oct 7, 2024
commit 28754ffe12a63daedc539c8f5819e1adc5c0f12c
13 changes: 12 additions & 1 deletion packages/flutter_tools/lib/src/localizations/gen_l10n.dart
Original file line number Diff line number Diff line change
Expand Up @@ -165,9 +165,20 @@ String generateDateFormattingLogic(Message message) {
);
}
if (placeholder.hasValidDateFormat) {
final List<String> formatParts = placeholderFormat.split(dateFormatPartsDelimiter);
final String mainFormat = formatParts.first;
final List<String> addFormats = formatParts.skip(1).toList();

// 'format' can contain a number of date time formats separated by dateFormatPartsDelimeter.
// The first format is the main format, and the rest are additional formats.
final String addedFormatsString = addFormats.map((String addFormat) {
return dateFormatAddFormatTemplate.replaceAll('@(format)', addFormat);
}).join();

return dateFormatTemplate
.replaceAll('@(placeholder)', placeholder.name)
.replaceAll('@(format)', placeholderFormat);
.replaceAll('@(format)', mainFormat)
.replaceAll('@(addFormats)', addedFormatsString);
}
return dateFormatCustomTemplate
.replaceAll('@(placeholder)', placeholder.name)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,10 +123,12 @@ const String numberFormatNamedTemplate = '''
''';

const String dateFormatTemplate = '''
final intl.DateFormat @(placeholder)DateFormat = intl.DateFormat.@(format)(localeName);
final intl.DateFormat @(placeholder)DateFormat = intl.DateFormat.@(format)(localeName)@(addFormats);
final String @(placeholder)String = @(placeholder)DateFormat.format(@(placeholder));
''';

const String dateFormatAddFormatTemplate = '''.add_@(format)()''';

const String dateFormatCustomTemplate = '''
final intl.DateFormat @(placeholder)DateFormat = intl.DateFormat(@(format), localeName);
final String @(placeholder)String = @(placeholder)DateFormat.format(@(placeholder));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ const Set<String> validDateFormats = <String>{
's',
};

const String dateFormatPartsDelimiter = '+';

// The set of number formats that can be automatically localized.
//
// The localizations generation tool makes use of the intl library's
Expand Down Expand Up @@ -252,7 +254,7 @@ class Placeholder {
bool get requiresNumFormatting => <String>['int', 'num', 'double'].contains(type) && format != null;
bool get hasValidNumberFormat => _validNumberFormats.contains(format);
bool get hasNumberFormatWithParameters => _numberFormatsWithNamedParameters.contains(format);
bool get hasValidDateFormat => validDateFormats.contains(format);
bool get hasValidDateFormat => format?.split(dateFormatPartsDelimiter).every(validDateFormats.contains) ?? false;

static String? _stringAttribute(
String resourceId,
Expand Down