Unverified Commit fa149eea authored by xster's avatar xster Committed by GitHub

Cupertino localization step 1: add an English arb file (#29200)

parent 0067efca
...@@ -570,7 +570,7 @@ void processBundle(File file, { @required String localeString }) { ...@@ -570,7 +570,7 @@ void processBundle(File file, { @required String localeString }) {
// Only pre-assume scriptCode if there is a country or script code to assume off of. // Only pre-assume scriptCode if there is a country or script code to assume off of.
// When we assume scriptCode based on languageCode-only, we want this initial pass // When we assume scriptCode based on languageCode-only, we want this initial pass
// to use the un-assumed version as a base class. // to use the un-assumed version as a base class.
LocaleInfo locale = LocaleInfo.fromString(localeString, assume: localeString.split('_').length > 1); LocaleInfo locale = LocaleInfo.fromString(localeString, deriveScriptCode: localeString.split('_').length > 1);
// Allow overwrite if the existing data is assumed. // Allow overwrite if the existing data is assumed.
if (assumedLocales.contains(locale)) { if (assumedLocales.contains(locale)) {
localeToResources[locale] = <String, String>{}; localeToResources[locale] = <String, String>{};
...@@ -582,7 +582,7 @@ void processBundle(File file, { @required String localeString }) { ...@@ -582,7 +582,7 @@ void processBundle(File file, { @required String localeString }) {
} }
populateResources(locale); populateResources(locale);
// Add an assumed locale to default to when there is no info on scriptOnly locales. // Add an assumed locale to default to when there is no info on scriptOnly locales.
locale = LocaleInfo.fromString(localeString, assume: true); locale = LocaleInfo.fromString(localeString, deriveScriptCode: true);
if (locale.scriptCode != null) { if (locale.scriptCode != null) {
final LocaleInfo scriptLocale = LocaleInfo.fromString(locale.languageCode + '_' + locale.scriptCode); final LocaleInfo scriptLocale = LocaleInfo.fromString(locale.languageCode + '_' + locale.scriptCode);
if (!localeToResources.containsKey(scriptLocale)) { if (!localeToResources.containsKey(scriptLocale)) {
......
...@@ -24,7 +24,10 @@ class LocaleInfo implements Comparable<LocaleInfo> { ...@@ -24,7 +24,10 @@ class LocaleInfo implements Comparable<LocaleInfo> {
/// and country is 2-3 characters and all uppercase. /// and country is 2-3 characters and all uppercase.
/// ///
/// 'language_COUNTRY' or 'language_script' are also valid. Missing fields will be null. /// 'language_COUNTRY' or 'language_script' are also valid. Missing fields will be null.
factory LocaleInfo.fromString(String locale, {bool assume = false}) { ///
/// When `deriveScriptCode` is true, if [scriptCode] was unspecified, it will
/// be derived from the [languageCode] and [countryCode] if possible.
factory LocaleInfo.fromString(String locale, { bool deriveScriptCode = false }) {
final List<String> codes = locale.split('_'); // [language, script, country] final List<String> codes = locale.split('_'); // [language, script, country]
assert(codes.isNotEmpty && codes.length < 4); assert(codes.isNotEmpty && codes.length < 4);
final String languageCode = codes[0]; final String languageCode = codes[0];
...@@ -49,7 +52,7 @@ class LocaleInfo implements Comparable<LocaleInfo> { ...@@ -49,7 +52,7 @@ class LocaleInfo implements Comparable<LocaleInfo> {
/// The basis of the assumptions here are based off of known usage of scripts /// The basis of the assumptions here are based off of known usage of scripts
/// across various countries. For example, we know Taiwan uses traditional (Hant) /// across various countries. For example, we know Taiwan uses traditional (Hant)
/// script, so it is safe to apply (Hant) to Taiwanese languages. /// script, so it is safe to apply (Hant) to Taiwanese languages.
if (assume && scriptCode == null) { if (deriveScriptCode && scriptCode == null) {
switch (languageCode) { switch (languageCode) {
case 'zh': { case 'zh': {
if (countryCode == null) { if (countryCode == null) {
......
...@@ -65,6 +65,7 @@ abstract class CupertinoLocalizations { ...@@ -65,6 +65,7 @@ abstract class CupertinoLocalizations {
/// ///
/// - US English: 2018 /// - US English: 2018
/// - Korean: 2018년 /// - Korean: 2018년
// The global version uses date symbols data from the intl package.
String datePickerYear(int yearIndex); String datePickerYear(int yearIndex);
/// Month that is shown in [CupertinoDatePicker] spinner corresponding to /// Month that is shown in [CupertinoDatePicker] spinner corresponding to
...@@ -74,6 +75,7 @@ abstract class CupertinoLocalizations { ...@@ -74,6 +75,7 @@ abstract class CupertinoLocalizations {
/// ///
/// - US English: January /// - US English: January
/// - Korean: 1월 /// - Korean: 1월
// The global version uses date symbols data from the intl package.
String datePickerMonth(int monthIndex); String datePickerMonth(int monthIndex);
/// Day of month that is shown in [CupertinoDatePicker] spinner corresponding /// Day of month that is shown in [CupertinoDatePicker] spinner corresponding
...@@ -83,6 +85,7 @@ abstract class CupertinoLocalizations { ...@@ -83,6 +85,7 @@ abstract class CupertinoLocalizations {
/// ///
/// - US English: 1 /// - US English: 1
/// - Korean: 1일 /// - Korean: 1일
// The global version uses date symbols data from the intl package.
String datePickerDayOfMonth(int dayIndex); String datePickerDayOfMonth(int dayIndex);
/// The medium-width date format that is shown in [CupertinoDatePicker] /// The medium-width date format that is shown in [CupertinoDatePicker]
...@@ -92,6 +95,7 @@ abstract class CupertinoLocalizations { ...@@ -92,6 +95,7 @@ abstract class CupertinoLocalizations {
/// ///
/// - US English: Wed Sep 27 /// - US English: Wed Sep 27
/// - Russian: ср сент. 27 /// - Russian: ср сент. 27
// The global version is based on intl package's DateFormat.MMMEd.
String datePickerMediumDate(DateTime date); String datePickerMediumDate(DateTime date);
/// Hour that is shown in [CupertinoDatePicker] spinner corresponding /// Hour that is shown in [CupertinoDatePicker] spinner corresponding
...@@ -101,9 +105,11 @@ abstract class CupertinoLocalizations { ...@@ -101,9 +105,11 @@ abstract class CupertinoLocalizations {
/// ///
/// - US English: 1 /// - US English: 1
/// - Arabic: ٠١ /// - Arabic: ٠١
// The global version uses date symbols data from the intl package.
String datePickerHour(int hour); String datePickerHour(int hour);
/// Semantics label for the given hour value in [CupertinoDatePicker]. /// Semantics label for the given hour value in [CupertinoDatePicker].
// The global version uses the translated string from the arb file.
String datePickerHourSemanticsLabel(int hour); String datePickerHourSemanticsLabel(int hour);
/// Minute that is shown in [CupertinoDatePicker] spinner corresponding /// Minute that is shown in [CupertinoDatePicker] spinner corresponding
...@@ -113,24 +119,31 @@ abstract class CupertinoLocalizations { ...@@ -113,24 +119,31 @@ abstract class CupertinoLocalizations {
/// ///
/// - US English: 01 /// - US English: 01
/// - Arabic: ٠١ /// - Arabic: ٠١
// The global version uses date symbols data from the intl package.
String datePickerMinute(int minute); String datePickerMinute(int minute);
/// Semantics label for the given minute value in [CupertinoDatePicker]. /// Semantics label for the given minute value in [CupertinoDatePicker].
// The global version uses the translated string from the arb file.
String datePickerMinuteSemanticsLabel(int minute); String datePickerMinuteSemanticsLabel(int minute);
/// The order of the date elements that will be shown in [CupertinoDatePicker]. /// The order of the date elements that will be shown in [CupertinoDatePicker].
// The global version uses the translated string from the arb file.
DatePickerDateOrder get datePickerDateOrder; DatePickerDateOrder get datePickerDateOrder;
/// The order of the time elements that will be shown in [CupertinoDatePicker]. /// The order of the time elements that will be shown in [CupertinoDatePicker].
// The global version uses the translated string from the arb file.
DatePickerDateTimeOrder get datePickerDateTimeOrder; DatePickerDateTimeOrder get datePickerDateTimeOrder;
/// The abbreviation for ante meridiem (before noon) shown in the time picker. /// The abbreviation for ante meridiem (before noon) shown in the time picker.
// The global version uses the translated string from the arb file.
String get anteMeridiemAbbreviation; String get anteMeridiemAbbreviation;
/// The abbreviation for post meridiem (after noon) shown in the time picker. /// The abbreviation for post meridiem (after noon) shown in the time picker.
// The global version uses the translated string from the arb file.
String get postMeridiemAbbreviation; String get postMeridiemAbbreviation;
/// The term used by the system to announce dialog alerts. /// The term used by the system to announce dialog alerts.
// The global version uses the translated string from the arb file.
String get alertDialogLabel; String get alertDialogLabel;
/// Hour that is shown in [CupertinoTimerPicker] corresponding to /// Hour that is shown in [CupertinoTimerPicker] corresponding to
...@@ -140,6 +153,7 @@ abstract class CupertinoLocalizations { ...@@ -140,6 +153,7 @@ abstract class CupertinoLocalizations {
/// ///
/// - US English: 1 /// - US English: 1
/// - Arabic: ١ /// - Arabic: ١
// The global version uses date symbols data from the intl package.
String timerPickerHour(int hour); String timerPickerHour(int hour);
/// Minute that is shown in [CupertinoTimerPicker] corresponding to /// Minute that is shown in [CupertinoTimerPicker] corresponding to
...@@ -149,6 +163,7 @@ abstract class CupertinoLocalizations { ...@@ -149,6 +163,7 @@ abstract class CupertinoLocalizations {
/// ///
/// - US English: 1 /// - US English: 1
/// - Arabic: ١ /// - Arabic: ١
// The global version uses date symbols data from the intl package.
String timerPickerMinute(int minute); String timerPickerMinute(int minute);
/// Second that is shown in [CupertinoTimerPicker] corresponding to /// Second that is shown in [CupertinoTimerPicker] corresponding to
...@@ -158,33 +173,41 @@ abstract class CupertinoLocalizations { ...@@ -158,33 +173,41 @@ abstract class CupertinoLocalizations {
/// ///
/// - US English: 1 /// - US English: 1
/// - Arabic: ١ /// - Arabic: ١
// The global version uses date symbols data from the intl package.
String timerPickerSecond(int second); String timerPickerSecond(int second);
/// Label that appears next to the hour picker in /// Label that appears next to the hour picker in
/// [CupertinoTimerPicker] when selected hour value is `hour`. /// [CupertinoTimerPicker] when selected hour value is `hour`.
/// This function will deal with pluralization based on the `hour` parameter. /// This function will deal with pluralization based on the `hour` parameter.
// The global version uses the translated string from the arb file.
String timerPickerHourLabel(int hour); String timerPickerHourLabel(int hour);
/// Label that appears next to the minute picker in /// Label that appears next to the minute picker in
/// [CupertinoTimerPicker] when selected minute value is `minute`. /// [CupertinoTimerPicker] when selected minute value is `minute`.
/// This function will deal with pluralization based on the `minute` parameter. /// This function will deal with pluralization based on the `minute` parameter.
// The global version uses the translated string from the arb file.
String timerPickerMinuteLabel(int minute); String timerPickerMinuteLabel(int minute);
/// Label that appears next to the minute picker in /// Label that appears next to the minute picker in
/// [CupertinoTimerPicker] when selected minute value is `second`. /// [CupertinoTimerPicker] when selected minute value is `second`.
/// This function will deal with pluralization based on the `second` parameter. /// This function will deal with pluralization based on the `second` parameter.
// The global version uses the translated string from the arb file.
String timerPickerSecondLabel(int second); String timerPickerSecondLabel(int second);
/// The term used for cutting /// The term used for cutting
// The global version uses the translated string from the arb file.
String get cutButtonLabel; String get cutButtonLabel;
/// The term used for copying /// The term used for copying
// The global version uses the translated string from the arb file.
String get copyButtonLabel; String get copyButtonLabel;
/// The term used for pasting /// The term used for pasting
// The global version uses the translated string from the arb file.
String get pasteButtonLabel; String get pasteButtonLabel;
/// The term used for selecting everything /// The term used for selecting everything
// The global version uses the translated string from the arb file.
String get selectAllButtonLabel; String get selectAllButtonLabel;
/// The `CupertinoLocalizations` from the closest [Localizations] instance /// The `CupertinoLocalizations` from the closest [Localizations] instance
......
{
"datePickerHourSemanticsLabelOther": "$hour o'clock",
"@datePickerHourSemanticsLabel": {
"description": "Accessibility announcement for the selected hour on a time picker such as '5 o'clock' or '5点'",
"plural": "hour"
},
"datePickerMinuteSemanticsOne": "1 minute",
"datePickerMinuteSemanticsOther": "$minute minutes",
"@datePickerMinuteSemanticsLabel": {
"description": "Accessibility announcement for the selected minute on a time picker such as '15 minutes' or '15分'",
"plural": "minute"
},
"datePickerDateOrder": "mdy",
"@datePickerDateOrder": {
"description": "The standard order for the locale to arrange day, month and year in a date. Options are dmy, mdy, ymd and ydm.",
},
"datePickerDateTimeOrder": "date_time_dayPeriod",
"@datePickerDateTimeOrder": {
"description": "The standard order for the locale to date, time and am/pm in a datetime. Options are date_time_dayPeriod, date_dayPeriod_time, time_dayPeriod_date and dayPeriod_time_date where 'dayPeriod' is am/pm.",
},
"anteMeridiemAbbreviation": "AM",
"@anteMeridiemAbbreviation": {
"description": "The abbreviation for ante meridiem (before noon) shown in the time picker.",
},
"postMeridiemAbbreviation": "PM",
"@postMeridiemAbbreviation": {
"description": "The abbreviation for post meridiem (after noon) shown in the time picker.",
},
"alertDialogLabel": "Alert",
"@alertDialogLabel": {
"description": "The accessibility audio announcement made when an iOS style alert dialog is opened."
},
"timerPickerHourLabelOne": "hour",
"timerPickerHourLabelOther": "hours",
"@timerPickerHourLabel": {
"description": "The label adjacent to an hour integer number in a countdown timer.",
"plural": "hour"
},
"timerPickerMinuteLabelOther": "min",
"@timerPickerMinuteLabel": {
"description": "The label adjacent to a minute integer number in a countdown timer.",
"plural": "minute"
},
"timerPickerSecondLabelOther": "sec",
"@timerPickerSecondLabel": {
"description": "The label adjacent to a second integer number in a countdown timer.",
"plural": "second"
},
"cutButtonLabel": "Cut",
"@cutButtonLabel": {
"description": "The label for cut buttons and menu items."
},
"copyButtonLabel": "Copy",
"@copyButtonLabel": {
"description": "The label for copy buttons and menu items."
},
"pasteButtonLabel": "Paste",
"@pasteButtonLabel": {
"description": "The label for paste buttons and menu items."
},
"selectAllButtonLabel": "Select All",
"@selectAllButtonLabel": {
"description": "The label for select-all buttons and menu items."
},
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment