
For G3 Roll: * Revert "MaterialButton must honor its minWidth and height parameters (#22919)" This reverts commit a02332335a0849e92daa7fb272e2ee1ccc7d4248. * Revert "Update uses of ButtonTheme.bar: pass along the current Theme's colorScheme (#22827)" This reverts commit 655bf6a290714248733c7af46c637fce34b56206. * Revert "ButtonTheme.of().colorScheme defers to Theme (#22880)" This reverts commit a590940e458ae02d89f63062e45a406cb3a73f4e. * Revert "Bring TextTheme into alignment with the current Material spec (#22330)" This reverts commit 8bfb4b3ee5e908165135aaa57dc6bce5d561a693. * Revert "Added ColorScheme, updated ThemeData, ButtonTheme, material buttons (#22013)" This reverts commit eea3465ae75ac5445c54490c542047032f8f8314. * Manual adjustments to fix reversion issues.
7.4 KiB
Material Library Localizations
The .arb
files in this directory contain localized values (primarily
strings) used by the material library. The localizations.dart
file
combines all of the localizations into a single Map that is
linked with the rest of flutter_localizations package.
If you're looking for information about internationalizing Flutter apps in general, see the Internationalizing Flutter Apps tutorial.
Translations for one locale: .arb files
The Material library uses
Application Resource Bundle
files, which have a .arb
extension, to store localized translations
of messages, format strings, and other values. This format is also
used by the Dart intl
package and it is supported by the
Google Translators Toolkit.
The material library only depends on a small subset of the ARB format. Each .arb file contains a single JSON table that maps from resource IDs to localized values.
Filenames contain the locale that the values have been translated
for. For example material_de.arb
contains German translations, and
material_ar.arb
contains Arabic translations. Files that contain
regional translations have names that include the locale's regional
suffix. For example material_en_GB.arb
contains additional English
translations that are specific to Great Britain.
There is one language-specific .arb file for each supported locale. If an additional file with a regional suffix is present, the regional localizations are automatically merged with the language-specific ones.
The JSON table's keys, called resource IDs, are valid Dart variable
names. They correspond to methods from the MaterialLocalizations
class. For example:
Widget build(BuildContext context) {
return new FlatButton(
child: new Text(
MaterialLocalizations.of(context).cancelButtonLabel,
),
);
}
This widget build method creates a button whose label is the local
translation of "CANCEL" which is defined for the cancelButtonLabel
resource ID.
Each of the language-specific .arb files contains an entry for
cancelButtonLabel
. They're all represented by the Map
in the
generated localizations.dart
file. The Map is used by the
MaterialLocalizations class.
material_en.arb Defines all of the resource IDs
All of the .arb
files whose names do not include a regional suffix
contain translations for the same set of resource IDs as
material_en.arb
.
For each resource ID defined for English in material_en.arb, there is an additional resource with an '@' prefix. These '@' resources are not used by the material library at run time, they just exist to inform translators about how the value will be used, and to inform the code generator about what code to write.
"cancelButtonLabel": "CANCEL",
"@cancelButtonLabel": {
"description": "The label for cancel buttons and menu items.",
"type": "text"
},
Values with Parameters, Plurals
A few of material translations contain $variable
tokens. The
material library replaces these tokens with values at run-time. For
example:
"aboutListTileTitle": "About $applicationName",
The value for this resource ID is retrieved with a parameterized method instead of a simple getter:
MaterialLocalizations.of(context).aboutListTileTitle(yourAppTitle)
The names of the $variable
tokens match the names of the
MaterialLocalizations
method parameters.
Plurals are handled similarly, with a lookup method that includes a
quantity parameter. For example selectedRowCountTitle
returns a
string like "1 item selected" or "no items selected".
MaterialLocalizations.of(context).selectedRowCountTitle(yourRowCount)
Plural translations can be provided for several quantities: 0, 1, 2,
"few", "many", "other". The variations are identified by a resource ID
suffix which must be one of "Zero", "One", "Two", "Few", "Many",
"Other". The "Other" variation is used when none of the other
quantities apply. All plural resources must include a resource with
the "Other" suffix. For example the English translations
('material_en.arb') for selectedRowCountTitle
are:
"selectedRowCountTitleZero": "No items selected",
"selectedRowCountTitleOne": "1 item selected",
"selectedRowCountTitleOther": "$selectedRowCount items selected",
scriptCategory and timeOfDayFormat
The values of these resource IDs are not translations, they're keywords that help define an app's text theme and time picker layout respectively.
The value of timeOfDayFormat
defines how a time picker displayed by
showTimePicker()
formats and lays out its time controls. The value of timeOfDayFormat
must be a string that matches one of the formats defined by
https://docs.flutter.io/flutter/material/TimeOfDayFormat-class.html.
It is converted to an enum value because the material_en.arb
file
has this value labeled as "x-flutter-type": "icuShortTimePattern"
.
The value of scriptCategory
is based on the
Language categories reference
section in the Material spec. The scriptCategory
value is used when looking up
the TextTheme
, see the
MaterialTextGeometry
class.
Generated file localizations.dart: all of the localizations as a Map
If you look at the comment at the top of localizations.dart
you'll
see that it was manually generated using a dev/tools
app called
gen_localizations
.
You can see what that script would generate by running this command:
dart dev/tools/gen_localizations.dart packages/flutter_localizations/lib/src/l10n material
The gen_localizations app just combines the contents of all of the
.arb files into a single Map
that has entries for each .arb
file's locale. The MaterialLocalizations
class implementation uses
this Map to implement the methods that lookup localized resource
values.
The gen_localizations app must be run by hand after .arb files have been updated. The app's first parameter is the path to this directory, the second is the file name prefix (the file name less the locale suffix) for the .arb files in this directory.
To in-place update the localizations.dart
file using the default
values, you can just run:
dart dev/tools/gen_localizations.dart --overwrite
Translations Status, Reporting Errors
The translations (the .arb
files) in this directory are based on the
English translations in material_en.arb
. Google contributes
translations for all the languages supported by this package.
(Googlers, for more details see <go/flutter-l10n>.)
If you have feedback about the translations please file an issue on the Flutter github repo.
See Also
The Internationalizing Flutter Apps tutorial describes how to use the internationalization APIs in an ordinary Flutter app.
Application Resource Bundle
covers the .arb
file format used to store localized translations
of messages, format strings, and other values.
The Dart intl package supports internationalization.