Unverified Commit f0197895 authored by LouiseHsu's avatar LouiseHsu Committed by GitHub

[framework] Add Look Up to selection controls for iOS (#131798)

This PR adds framework support for the Look Up feature in iOS. 

https://github.com/flutter/flutter/assets/36148254/d301df79-4e23-454f-8742-2f8e39c2960c

The corresponding merged engine PR can be found [here](https://github.com/flutter/engine/pull/43308).
This PR addresses https://github.com/flutter/flutter/issues/82907 
More details are available in this [design doc.](flutter.dev/go/add-missing-features-to-selection-controls)

This is the same PR as https://github.com/flutter/flutter/pull/130532, this is an attempt to fix the Google Testing issue
parent 00a83235
...@@ -94,6 +94,7 @@ class CupertinoAdaptiveTextSelectionToolbar extends StatelessWidget { ...@@ -94,6 +94,7 @@ class CupertinoAdaptiveTextSelectionToolbar extends StatelessWidget {
required VoidCallback? onCut, required VoidCallback? onCut,
required VoidCallback? onPaste, required VoidCallback? onPaste,
required VoidCallback? onSelectAll, required VoidCallback? onSelectAll,
required VoidCallback? onLookUp,
required VoidCallback? onLiveTextInput, required VoidCallback? onLiveTextInput,
required this.anchors, required this.anchors,
}) : children = null, }) : children = null,
...@@ -103,6 +104,7 @@ class CupertinoAdaptiveTextSelectionToolbar extends StatelessWidget { ...@@ -103,6 +104,7 @@ class CupertinoAdaptiveTextSelectionToolbar extends StatelessWidget {
onCut: onCut, onCut: onCut,
onPaste: onPaste, onPaste: onPaste,
onSelectAll: onSelectAll, onSelectAll: onSelectAll,
onLookUp: onLookUp,
onLiveTextInput: onLiveTextInput onLiveTextInput: onLiveTextInput
); );
......
...@@ -245,6 +245,10 @@ abstract class CupertinoLocalizations { ...@@ -245,6 +245,10 @@ abstract class CupertinoLocalizations {
// The global version uses the translated string from the arb file. // The global version uses the translated string from the arb file.
String get selectAllButtonLabel; String get selectAllButtonLabel;
/// The term used for looking up a selection.
// The global version uses the translated string from the arb file.
String get lookUpButtonLabel;
/// The default placeholder used in [CupertinoSearchTextField]. /// The default placeholder used in [CupertinoSearchTextField].
// The global version uses the translated string from the arb file. // The global version uses the translated string from the arb file.
String get searchTextFieldPlaceholderLabel; String get searchTextFieldPlaceholderLabel;
...@@ -455,6 +459,9 @@ class DefaultCupertinoLocalizations implements CupertinoLocalizations { ...@@ -455,6 +459,9 @@ class DefaultCupertinoLocalizations implements CupertinoLocalizations {
@override @override
String get selectAllButtonLabel => 'Select All'; String get selectAllButtonLabel => 'Select All';
@override
String get lookUpButtonLabel => 'Look Up';
@override @override
String get searchTextFieldPlaceholderLabel => 'Search'; String get searchTextFieldPlaceholderLabel => 'Search';
......
...@@ -105,6 +105,8 @@ class CupertinoTextSelectionToolbarButton extends StatefulWidget { ...@@ -105,6 +105,8 @@ class CupertinoTextSelectionToolbarButton extends StatefulWidget {
return localizations.pasteButtonLabel; return localizations.pasteButtonLabel;
case ContextMenuButtonType.selectAll: case ContextMenuButtonType.selectAll:
return localizations.selectAllButtonLabel; return localizations.selectAllButtonLabel;
case ContextMenuButtonType.lookUp:
return localizations.lookUpButtonLabel;
case ContextMenuButtonType.liveTextInput: case ContextMenuButtonType.liveTextInput:
case ContextMenuButtonType.delete: case ContextMenuButtonType.delete:
case ContextMenuButtonType.custom: case ContextMenuButtonType.custom:
...@@ -189,6 +191,7 @@ class _CupertinoTextSelectionToolbarButtonState extends State<CupertinoTextSelec ...@@ -189,6 +191,7 @@ class _CupertinoTextSelectionToolbarButtonState extends State<CupertinoTextSelec
case ContextMenuButtonType.paste: case ContextMenuButtonType.paste:
case ContextMenuButtonType.selectAll: case ContextMenuButtonType.selectAll:
case ContextMenuButtonType.delete: case ContextMenuButtonType.delete:
case ContextMenuButtonType.lookUp:
case ContextMenuButtonType.custom: case ContextMenuButtonType.custom:
return textWidget; return textWidget;
case ContextMenuButtonType.liveTextInput: case ContextMenuButtonType.liveTextInput:
......
...@@ -103,6 +103,7 @@ class AdaptiveTextSelectionToolbar extends StatelessWidget { ...@@ -103,6 +103,7 @@ class AdaptiveTextSelectionToolbar extends StatelessWidget {
required VoidCallback? onCut, required VoidCallback? onCut,
required VoidCallback? onPaste, required VoidCallback? onPaste,
required VoidCallback? onSelectAll, required VoidCallback? onSelectAll,
required VoidCallback? onLookUp,
required VoidCallback? onLiveTextInput, required VoidCallback? onLiveTextInput,
required this.anchors, required this.anchors,
}) : children = null, }) : children = null,
...@@ -112,6 +113,7 @@ class AdaptiveTextSelectionToolbar extends StatelessWidget { ...@@ -112,6 +113,7 @@ class AdaptiveTextSelectionToolbar extends StatelessWidget {
onCut: onCut, onCut: onCut,
onPaste: onPaste, onPaste: onPaste,
onSelectAll: onSelectAll, onSelectAll: onSelectAll,
onLookUp: onLookUp,
onLiveTextInput: onLiveTextInput onLiveTextInput: onLiveTextInput
); );
...@@ -215,6 +217,8 @@ class AdaptiveTextSelectionToolbar extends StatelessWidget { ...@@ -215,6 +217,8 @@ class AdaptiveTextSelectionToolbar extends StatelessWidget {
return localizations.selectAllButtonLabel; return localizations.selectAllButtonLabel;
case ContextMenuButtonType.delete: case ContextMenuButtonType.delete:
return localizations.deleteButtonTooltip.toUpperCase(); return localizations.deleteButtonTooltip.toUpperCase();
case ContextMenuButtonType.lookUp:
return localizations.lookUpButtonLabel;
case ContextMenuButtonType.liveTextInput: case ContextMenuButtonType.liveTextInput:
return localizations.scanTextButtonLabel; return localizations.scanTextButtonLabel;
case ContextMenuButtonType.custom: case ContextMenuButtonType.custom:
......
...@@ -115,6 +115,9 @@ abstract class MaterialLocalizations { ...@@ -115,6 +115,9 @@ abstract class MaterialLocalizations {
/// Label for "select all" edit buttons and menu items. /// Label for "select all" edit buttons and menu items.
String get selectAllButtonLabel; String get selectAllButtonLabel;
/// Label for "look up" edit buttons and menu items.
String get lookUpButtonLabel;
/// Label for the [AboutDialog] button that shows the [LicensePage]. /// Label for the [AboutDialog] button that shows the [LicensePage].
String get viewLicensesButtonLabel; String get viewLicensesButtonLabel;
...@@ -1178,6 +1181,9 @@ class DefaultMaterialLocalizations implements MaterialLocalizations { ...@@ -1178,6 +1181,9 @@ class DefaultMaterialLocalizations implements MaterialLocalizations {
@override @override
String get selectAllButtonLabel => 'Select all'; String get selectAllButtonLabel => 'Select all';
@override
String get lookUpButtonLabel => 'Look Up';
@override @override
String get viewLicensesButtonLabel => 'View licenses'; String get viewLicensesButtonLabel => 'View licenses';
......
...@@ -1050,6 +1050,9 @@ mixin TextSelectionDelegate { ...@@ -1050,6 +1050,9 @@ mixin TextSelectionDelegate {
/// Whether select all is enabled, must not be null. /// Whether select all is enabled, must not be null.
bool get selectAllEnabled => true; bool get selectAllEnabled => true;
/// Whether look up is enabled, must not be null.
bool get lookUpEnabled => true;
/// Whether Live Text input is enabled. /// Whether Live Text input is enabled.
/// ///
/// See also: /// See also:
......
...@@ -26,6 +26,9 @@ enum ContextMenuButtonType { ...@@ -26,6 +26,9 @@ enum ContextMenuButtonType {
/// A button that deletes the current text selection. /// A button that deletes the current text selection.
delete, delete,
/// A button that looks up the current text selection.
lookUp,
/// A button for starting Live Text input. /// A button for starting Live Text input.
/// ///
/// See also: /// See also:
......
...@@ -1852,6 +1852,7 @@ class EditableText extends StatefulWidget { ...@@ -1852,6 +1852,7 @@ class EditableText extends StatefulWidget {
required final VoidCallback? onCut, required final VoidCallback? onCut,
required final VoidCallback? onPaste, required final VoidCallback? onPaste,
required final VoidCallback? onSelectAll, required final VoidCallback? onSelectAll,
required final VoidCallback? onLookUp,
required final VoidCallback? onLiveTextInput, required final VoidCallback? onLiveTextInput,
}) { }) {
final List<ContextMenuButtonItem> resultButtonItem = <ContextMenuButtonItem>[]; final List<ContextMenuButtonItem> resultButtonItem = <ContextMenuButtonItem>[];
...@@ -1882,6 +1883,11 @@ class EditableText extends StatefulWidget { ...@@ -1882,6 +1883,11 @@ class EditableText extends StatefulWidget {
onPressed: onSelectAll, onPressed: onSelectAll,
type: ContextMenuButtonType.selectAll, type: ContextMenuButtonType.selectAll,
), ),
if (onLookUp != null)
ContextMenuButtonItem(
onPressed: onLookUp,
type: ContextMenuButtonType.lookUp,
),
]); ]);
} }
...@@ -2232,6 +2238,15 @@ class EditableTextState extends State<EditableText> with AutomaticKeepAliveClien ...@@ -2232,6 +2238,15 @@ class EditableTextState extends State<EditableText> with AutomaticKeepAliveClien
} }
} }
@override
bool get lookUpEnabled {
if (defaultTargetPlatform != TargetPlatform.iOS) {
return false;
}
return !widget.obscureText
&& !textEditingValue.selection.isCollapsed;
}
@override @override
bool get liveTextInputEnabled { bool get liveTextInputEnabled {
return _liveTextInputStatus?.value == LiveTextInputStatus.enabled && return _liveTextInputStatus?.value == LiveTextInputStatus.enabled &&
...@@ -2397,6 +2412,22 @@ class EditableTextState extends State<EditableText> with AutomaticKeepAliveClien ...@@ -2397,6 +2412,22 @@ class EditableTextState extends State<EditableText> with AutomaticKeepAliveClien
} }
} }
/// Look up the current selection, as in the "Look Up" edit menu button on iOS.
/// Currently this is only implemented for iOS.
/// Throws an error if the selection is empty or collapsed.
Future<void> lookUpSelection(SelectionChangedCause cause) async {
assert(!widget.obscureText);
final String text = textEditingValue.selection.textInside(textEditingValue.text);
if (widget.obscureText || text.isEmpty) {
return;
}
await SystemChannels.platform.invokeMethod(
'LookUp.invoke',
text,
);
}
void _startLiveTextInput(SelectionChangedCause cause) { void _startLiveTextInput(SelectionChangedCause cause) {
if (!liveTextInputEnabled) { if (!liveTextInputEnabled) {
return; return;
...@@ -2623,6 +2654,9 @@ class EditableTextState extends State<EditableText> with AutomaticKeepAliveClien ...@@ -2623,6 +2654,9 @@ class EditableTextState extends State<EditableText> with AutomaticKeepAliveClien
onSelectAll: selectAllEnabled onSelectAll: selectAllEnabled
? () => selectAll(SelectionChangedCause.toolbar) ? () => selectAll(SelectionChangedCause.toolbar)
: null, : null,
onLookUp: lookUpEnabled
? () => lookUpSelection(SelectionChangedCause.toolbar)
: null,
onLiveTextInput: liveTextInputEnabled onLiveTextInput: liveTextInputEnabled
? () => _startLiveTextInput(SelectionChangedCause.toolbar) ? () => _startLiveTextInput(SelectionChangedCause.toolbar)
: null, : null,
......
...@@ -168,6 +168,7 @@ void main() { ...@@ -168,6 +168,7 @@ void main() {
onPaste: () {}, onPaste: () {},
onSelectAll: () {}, onSelectAll: () {},
onLiveTextInput: () {}, onLiveTextInput: () {},
onLookUp: () {},
), ),
), ),
)); ));
...@@ -180,16 +181,16 @@ void main() { ...@@ -180,16 +181,16 @@ void main() {
switch (defaultTargetPlatform) { switch (defaultTargetPlatform) {
case TargetPlatform.android: case TargetPlatform.android:
expect(find.byType(CupertinoTextSelectionToolbarButton), findsNWidgets(5)); expect(find.byType(CupertinoTextSelectionToolbarButton), findsNWidgets(6));
case TargetPlatform.fuchsia: case TargetPlatform.fuchsia:
expect(find.byType(CupertinoTextSelectionToolbarButton), findsNWidgets(5)); expect(find.byType(CupertinoTextSelectionToolbarButton), findsNWidgets(6));
case TargetPlatform.iOS: case TargetPlatform.iOS:
expect(find.byType(CupertinoTextSelectionToolbarButton), findsNWidgets(5)); expect(find.byType(CupertinoTextSelectionToolbarButton), findsNWidgets(6));
expect(findLiveTextButton(), findsOneWidget); expect(findLiveTextButton(), findsOneWidget);
case TargetPlatform.macOS: case TargetPlatform.macOS:
case TargetPlatform.linux: case TargetPlatform.linux:
case TargetPlatform.windows: case TargetPlatform.windows:
expect(find.byType(CupertinoDesktopTextSelectionToolbarButton), findsNWidgets(5)); expect(find.byType(CupertinoDesktopTextSelectionToolbarButton), findsNWidgets(6));
} }
}, },
skip: kIsWeb, // [intended] on web the browser handles the context menu. skip: kIsWeb, // [intended] on web the browser handles the context menu.
......
...@@ -247,7 +247,7 @@ void main() { ...@@ -247,7 +247,7 @@ void main() {
testWidgets("When a menu item doesn't fit, a second page is used.", (WidgetTester tester) async { testWidgets("When a menu item doesn't fit, a second page is used.", (WidgetTester tester) async {
// Set the screen size to more narrow, so that Paste can't fit. // Set the screen size to more narrow, so that Paste can't fit.
tester.view.physicalSize = const Size(800, 800); tester.view.physicalSize = const Size(900, 800);
addTearDown(tester.view.reset); addTearDown(tester.view.reset);
final TextEditingController controller = TextEditingController(text: 'abc def ghi'); final TextEditingController controller = TextEditingController(text: 'abc def ghi');
...@@ -270,6 +270,7 @@ void main() { ...@@ -270,6 +270,7 @@ void main() {
expect(find.text('Copy'), findsNothing); expect(find.text('Copy'), findsNothing);
expect(find.text('Paste'), findsNothing); expect(find.text('Paste'), findsNothing);
expect(find.text('Select All'), findsNothing); expect(find.text('Select All'), findsNothing);
expect(find.text('Look Up'), findsNothing);
expect(findOverflowBackButton(), findsNothing); expect(findOverflowBackButton(), findsNothing);
expect(findOverflowNextButton(), findsNothing); expect(findOverflowNextButton(), findsNothing);
...@@ -285,27 +286,43 @@ void main() { ...@@ -285,27 +286,43 @@ void main() {
expect(find.text('Copy'), findsOneWidget); expect(find.text('Copy'), findsOneWidget);
expect(find.text('Paste'), findsNothing); expect(find.text('Paste'), findsNothing);
expect(find.text('Select All'), findsNothing); expect(find.text('Select All'), findsNothing);
expect(find.text('Look Up'), findsNothing);
expect(findOverflowBackButton(), findsNothing); expect(findOverflowBackButton(), findsNothing);
expect(findOverflowNextButton(), findsOneWidget); expect(findOverflowNextButton(), findsOneWidget);
// Tapping the next button shows both the overflow, back, and next buttons.
await tester.tapAt(tester.getCenter(findOverflowNextButton()));
await tester.pumpAndSettle();
expect(find.text('Cut'), findsNothing);
expect(find.text('Copy'), findsNothing);
expect(find.text('Paste'), findsOneWidget);
expect(find.text('Select All'), findsNothing);
expect(find.text('Look Up'), findsNothing);
expect(findOverflowBackButton(), findsOneWidget);
expect(findOverflowNextButton(), findsOneWidget);
// Tapping the next button shows the overflowing button and the next // Tapping the next button shows the overflowing button and the next
// button is hidden as the last page is shown. // button is hidden as the last page is shown.
await tester.tapAt(tester.getCenter(findOverflowNextButton())); await tester.tapAt(tester.getCenter(findOverflowNextButton()));
await tester.pumpAndSettle(); await tester.pumpAndSettle();
expect(find.text('Cut'), findsNothing); expect(find.text('Cut'), findsNothing);
expect(find.text('Copy'), findsNothing); expect(find.text('Copy'), findsNothing);
expect(find.text('Paste'), findsOneWidget); expect(find.text('Paste'), findsNothing);
expect(find.text('Select All'), findsNothing); expect(find.text('Select All'), findsNothing);
expect(find.text('Look Up'), findsOneWidget);
expect(findOverflowBackButton(), findsOneWidget); expect(findOverflowBackButton(), findsOneWidget);
expect(findOverflowNextButton(), findsNothing); expect(findOverflowNextButton(), findsNothing);
// Tapping the back button shows the first page again with the next button. // Tapping the back button shows the first page again with the next button.
await tester.tapAt(tester.getCenter(findOverflowBackButton())); await tester.tapAt(tester.getCenter(findOverflowBackButton()));
await tester.pumpAndSettle(); await tester.pumpAndSettle();
await tester.tapAt(tester.getCenter(findOverflowBackButton()));
await tester.pumpAndSettle();
expect(find.text('Cut'), findsOneWidget); expect(find.text('Cut'), findsOneWidget);
expect(find.text('Copy'), findsOneWidget); expect(find.text('Copy'), findsOneWidget);
expect(find.text('Paste'), findsNothing); expect(find.text('Paste'), findsNothing);
expect(find.text('Select All'), findsNothing); expect(find.text('Select All'), findsNothing);
expect(find.text('Look Up'), findsNothing);
expect(findOverflowBackButton(), findsNothing); expect(findOverflowBackButton(), findsNothing);
expect(findOverflowNextButton(), findsOneWidget); expect(findOverflowNextButton(), findsOneWidget);
}, },
...@@ -340,6 +357,7 @@ void main() { ...@@ -340,6 +357,7 @@ void main() {
expect(find.text('Copy'), findsNothing); expect(find.text('Copy'), findsNothing);
expect(find.text('Paste'), findsNothing); expect(find.text('Paste'), findsNothing);
expect(find.text('Select All'), findsNothing); expect(find.text('Select All'), findsNothing);
expect(find.text('Look Up'), findsNothing);
expect(findOverflowBackButton(), findsNothing); expect(findOverflowBackButton(), findsNothing);
expect(findOverflowNextButton(), findsNothing); expect(findOverflowNextButton(), findsNothing);
...@@ -356,6 +374,7 @@ void main() { ...@@ -356,6 +374,7 @@ void main() {
expect(find.text('Copy'), findsNothing); expect(find.text('Copy'), findsNothing);
expect(find.text('Paste'), findsNothing); expect(find.text('Paste'), findsNothing);
expect(find.text('Select All'), findsNothing); expect(find.text('Select All'), findsNothing);
expect(find.text('Look Up'), findsNothing);
expect(findOverflowBackButton(), findsNothing); expect(findOverflowBackButton(), findsNothing);
expect(findOverflowNextButton(), findsOneWidget); expect(findOverflowNextButton(), findsOneWidget);
...@@ -367,22 +386,36 @@ void main() { ...@@ -367,22 +386,36 @@ void main() {
expect(find.text('Copy'), findsOneWidget); expect(find.text('Copy'), findsOneWidget);
expect(find.text('Paste'), findsNothing); expect(find.text('Paste'), findsNothing);
expect(find.text('Select All'), findsNothing); expect(find.text('Select All'), findsNothing);
expect(find.text('Look Up'), findsNothing);
expect(findOverflowBackButton(), findsOneWidget); expect(findOverflowBackButton(), findsOneWidget);
expect(findOverflowNextButton(), findsOneWidget); expect(findOverflowNextButton(), findsOneWidget);
// Tapping the next button again shows Paste and hides the next button as // Tapping the next button again shows Paste
// the last page is shown.
await tester.tapAt(tester.getCenter(findOverflowNextButton())); await tester.tapAt(tester.getCenter(findOverflowNextButton()));
await tester.pumpAndSettle(); await tester.pumpAndSettle();
expect(find.byType(CupertinoTextSelectionToolbarButton), findsNWidgets(2)); expect(find.byType(CupertinoTextSelectionToolbarButton), findsNWidgets(3));
expect(find.text('Cut'), findsNothing); expect(find.text('Cut'), findsNothing);
expect(find.text('Copy'), findsNothing); expect(find.text('Copy'), findsNothing);
expect(find.text('Paste'), findsOneWidget); expect(find.text('Paste'), findsOneWidget);
expect(find.text('Select All'), findsNothing); expect(find.text('Select All'), findsNothing);
expect(find.text('Look Up'), findsNothing);
expect(findOverflowBackButton(), findsOneWidget);
expect(findOverflowNextButton(), findsOneWidget);
// Tapping the next button again shows the last page.
await tester.tapAt(tester.getCenter(findOverflowNextButton()));
await tester.pumpAndSettle();
expect(find.text('Cut'), findsNothing);
expect(find.text('Copy'), findsNothing);
expect(find.text('Paste'), findsNothing);
expect(find.text('Select All'), findsNothing);
expect(find.text('Look Up'), findsOneWidget);
expect(findOverflowBackButton(), findsOneWidget); expect(findOverflowBackButton(), findsOneWidget);
expect(findOverflowNextButton(), findsNothing); expect(findOverflowNextButton(), findsNothing);
// Tapping the back button shows the second page again with the next button. // Tapping the back button twice shows the second page again with the next button.
await tester.tapAt(tester.getCenter(findOverflowBackButton()));
await tester.pumpAndSettle();
await tester.tapAt(tester.getCenter(findOverflowBackButton())); await tester.tapAt(tester.getCenter(findOverflowBackButton()));
await tester.pumpAndSettle(); await tester.pumpAndSettle();
expect(find.byType(CupertinoTextSelectionToolbarButton), findsNWidgets(3)); expect(find.byType(CupertinoTextSelectionToolbarButton), findsNWidgets(3));
...@@ -390,6 +423,7 @@ void main() { ...@@ -390,6 +423,7 @@ void main() {
expect(find.text('Copy'), findsOneWidget); expect(find.text('Copy'), findsOneWidget);
expect(find.text('Paste'), findsNothing); expect(find.text('Paste'), findsNothing);
expect(find.text('Select All'), findsNothing); expect(find.text('Select All'), findsNothing);
expect(find.text('Look Up'), findsNothing);
expect(findOverflowBackButton(), findsOneWidget); expect(findOverflowBackButton(), findsOneWidget);
expect(findOverflowNextButton(), findsOneWidget); expect(findOverflowNextButton(), findsOneWidget);
...@@ -401,6 +435,7 @@ void main() { ...@@ -401,6 +435,7 @@ void main() {
expect(find.text('Copy'), findsNothing); expect(find.text('Copy'), findsNothing);
expect(find.text('Paste'), findsNothing); expect(find.text('Paste'), findsNothing);
expect(find.text('Select All'), findsNothing); expect(find.text('Select All'), findsNothing);
expect(find.text('Look Up'), findsNothing);
expect(findOverflowBackButton(), findsNothing); expect(findOverflowBackButton(), findsNothing);
expect(findOverflowNextButton(), findsOneWidget); expect(findOverflowNextButton(), findsOneWidget);
}, },
...@@ -485,7 +520,7 @@ void main() { ...@@ -485,7 +520,7 @@ void main() {
expect(findOverflowBackButton(), findsOneWidget); expect(findOverflowBackButton(), findsOneWidget);
expect(findOverflowNextButton(), findsOneWidget); expect(findOverflowNextButton(), findsOneWidget);
// Tap next to go to the third and final page. // Tap twice to go to the third page.
await tester.tapAt(tester.getCenter(findOverflowNextButton())); await tester.tapAt(tester.getCenter(findOverflowNextButton()));
await tester.pumpAndSettle(); await tester.pumpAndSettle();
expect(find.text(_longLocalizations.cutButtonLabel), findsNothing); expect(find.text(_longLocalizations.cutButtonLabel), findsNothing);
...@@ -493,7 +528,7 @@ void main() { ...@@ -493,7 +528,7 @@ void main() {
expect(find.text(_longLocalizations.pasteButtonLabel), findsOneWidget); expect(find.text(_longLocalizations.pasteButtonLabel), findsOneWidget);
expect(find.text(_longLocalizations.selectAllButtonLabel), findsNothing); expect(find.text(_longLocalizations.selectAllButtonLabel), findsNothing);
expect(findOverflowBackButton(), findsOneWidget); expect(findOverflowBackButton(), findsOneWidget);
expect(findOverflowNextButton(), findsNothing); expect(findOverflowNextButton(), findsOneWidget);
// Tap back to go to the second page again. // Tap back to go to the second page again.
await tester.tapAt(tester.getCenter(findOverflowBackButton())); await tester.tapAt(tester.getCenter(findOverflowBackButton()));
......
...@@ -186,6 +186,7 @@ void main() { ...@@ -186,6 +186,7 @@ void main() {
onPaste: () {}, onPaste: () {},
onSelectAll: () {}, onSelectAll: () {},
onLiveTextInput: () {}, onLiveTextInput: () {},
onLookUp: () {},
), ),
), ),
), ),
...@@ -201,18 +202,18 @@ void main() { ...@@ -201,18 +202,18 @@ void main() {
case TargetPlatform.android: case TargetPlatform.android:
case TargetPlatform.fuchsia: case TargetPlatform.fuchsia:
expect(find.text('Select all'), findsOneWidget); expect(find.text('Select all'), findsOneWidget);
expect(find.byType(TextSelectionToolbarTextButton), findsNWidgets(5)); expect(find.byType(TextSelectionToolbarTextButton), findsNWidgets(6));
case TargetPlatform.iOS: case TargetPlatform.iOS:
expect(find.text('Select All'), findsOneWidget); expect(find.text('Select All'), findsOneWidget);
expect(findLiveTextButton(), findsOneWidget); expect(findLiveTextButton(), findsOneWidget);
expect(find.byType(CupertinoTextSelectionToolbarButton), findsNWidgets(5)); expect(find.byType(CupertinoTextSelectionToolbarButton), findsNWidgets(6));
case TargetPlatform.linux: case TargetPlatform.linux:
case TargetPlatform.windows: case TargetPlatform.windows:
expect(find.text('Select all'), findsOneWidget); expect(find.text('Select all'), findsOneWidget);
expect(find.byType(DesktopTextSelectionToolbarButton), findsNWidgets(5)); expect(find.byType(DesktopTextSelectionToolbarButton), findsNWidgets(6));
case TargetPlatform.macOS: case TargetPlatform.macOS:
expect(find.text('Select All'), findsOneWidget); expect(find.text('Select All'), findsOneWidget);
expect(find.byType(CupertinoDesktopTextSelectionToolbarButton), findsNWidgets(5)); expect(find.byType(CupertinoDesktopTextSelectionToolbarButton), findsNWidgets(6));
} }
}, },
skip: kIsWeb, // [intended] on web the browser handles the context menu. skip: kIsWeb, // [intended] on web the browser handles the context menu.
......
...@@ -31,6 +31,7 @@ void main() { ...@@ -31,6 +31,7 @@ void main() {
expect(localizations.copyButtonLabel, isNotNull); expect(localizations.copyButtonLabel, isNotNull);
expect(localizations.cutButtonLabel, isNotNull); expect(localizations.cutButtonLabel, isNotNull);
expect(localizations.scanTextButtonLabel, isNotNull); expect(localizations.scanTextButtonLabel, isNotNull);
expect(localizations.lookUpButtonLabel, isNotNull);
expect(localizations.okButtonLabel, isNotNull); expect(localizations.okButtonLabel, isNotNull);
expect(localizations.pasteButtonLabel, isNotNull); expect(localizations.pasteButtonLabel, isNotNull);
expect(localizations.selectAllButtonLabel, isNotNull); expect(localizations.selectAllButtonLabel, isNotNull);
......
...@@ -154,6 +154,7 @@ void main() { ...@@ -154,6 +154,7 @@ void main() {
onCut: null, onCut: null,
onPaste: null, onPaste: null,
onSelectAll: null, onSelectAll: null,
onLookUp: null,
onLiveTextInput: () { onLiveTextInput: () {
invokedLiveTextInputSuccessfully = true; invokedLiveTextInputSuccessfully = true;
}, },
......
...@@ -2930,6 +2930,7 @@ void main() { ...@@ -2930,6 +2930,7 @@ void main() {
), ),
); );
final bool isTargetPlatformIOS = defaultTargetPlatform == TargetPlatform.iOS;
final Offset selectableTextStart = tester.getTopLeft(find.byType(SelectableText)); final Offset selectableTextStart = tester.getTopLeft(find.byType(SelectableText));
// This tap just puts the cursor somewhere different than where the double // This tap just puts the cursor somewhere different than where the double
...@@ -2957,8 +2958,8 @@ void main() { ...@@ -2957,8 +2958,8 @@ void main() {
const TextSelection(baseOffset: 8, extentOffset: 12), const TextSelection(baseOffset: 8, extentOffset: 12),
); );
// Selected text shows 1 toolbar buttons. // Selected text shows 1 toolbar buttons on MacOS, 2 on iOS.
expect(find.byType(CupertinoButton), findsNWidgets(1)); expect(find.byType(CupertinoButton), isTargetPlatformIOS ? findsNWidgets(2) : findsNWidgets(1));
}, },
variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS, TargetPlatform.macOS }), variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS, TargetPlatform.macOS }),
); );
...@@ -3071,6 +3072,7 @@ void main() { ...@@ -3071,6 +3072,7 @@ void main() {
); );
final Offset selectableTextStart = tester.getTopLeft(find.byType(SelectableText)); final Offset selectableTextStart = tester.getTopLeft(find.byType(SelectableText));
final bool isTargetPlatformIOS = defaultTargetPlatform == TargetPlatform.iOS;
await tester.tapAt(selectableTextStart + const Offset(150.0, 5.0)); await tester.tapAt(selectableTextStart + const Offset(150.0, 5.0));
await tester.pump(const Duration(milliseconds: 50)); await tester.pump(const Duration(milliseconds: 50));
...@@ -3087,8 +3089,8 @@ void main() { ...@@ -3087,8 +3089,8 @@ void main() {
const TextSelection(baseOffset: 8, extentOffset: 12), const TextSelection(baseOffset: 8, extentOffset: 12),
); );
// Selected text shows 1 toolbar buttons. // Selected text shows 2 toolbar buttons for iOS, 1 for macOS.
expect(find.byType(CupertinoButton), findsNWidgets(1)); expect(find.byType(CupertinoButton), isTargetPlatformIOS ? findsNWidgets(2) : findsNWidgets(1));
await gesture.up(); await gesture.up();
await tester.pump(); await tester.pump();
...@@ -3099,7 +3101,7 @@ void main() { ...@@ -3099,7 +3101,7 @@ void main() {
const TextSelection(baseOffset: 8, extentOffset: 12), const TextSelection(baseOffset: 8, extentOffset: 12),
); );
// The toolbar is still showing. // The toolbar is still showing.
expect(find.byType(CupertinoButton), findsNWidgets(1)); expect(find.byType(CupertinoButton), isTargetPlatformIOS ? findsNWidgets(2) : findsNWidgets(1));
}, },
variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS, TargetPlatform.macOS }), variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS, TargetPlatform.macOS }),
); );
...@@ -3198,6 +3200,7 @@ void main() { ...@@ -3198,6 +3200,7 @@ void main() {
); );
final Offset selectableTextStart = tester.getTopLeft(find.byType(SelectableText)); final Offset selectableTextStart = tester.getTopLeft(find.byType(SelectableText));
final bool isTargetPlatformIOS = defaultTargetPlatform == TargetPlatform.iOS;
await tester.longPressAt(selectableTextStart + const Offset(50.0, 5.0)); await tester.longPressAt(selectableTextStart + const Offset(50.0, 5.0));
await tester.pump(); await tester.pump();
...@@ -3215,7 +3218,7 @@ void main() { ...@@ -3215,7 +3218,7 @@ void main() {
); );
// Toolbar shows one button. // Toolbar shows one button.
expect(find.byType(CupertinoButton), findsNWidgets(1)); expect(find.byType(CupertinoButton), isTargetPlatformIOS ? findsNWidgets(2) : findsNWidgets(1));
}, },
variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS, TargetPlatform.macOS }), variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS, TargetPlatform.macOS }),
); );
...@@ -3480,6 +3483,7 @@ void main() { ...@@ -3480,6 +3483,7 @@ void main() {
await tester.startGesture(textOffsetToPosition(tester, 18)); await tester.startGesture(textOffsetToPosition(tester, 18));
await tester.pump(const Duration(milliseconds: 500)); await tester.pump(const Duration(milliseconds: 500));
final bool isTargetPlatformIOS = defaultTargetPlatform == TargetPlatform.iOS;
final EditableText editableTextWidget = tester.widget(find.byType(EditableText).first); final EditableText editableTextWidget = tester.widget(find.byType(EditableText).first);
final TextEditingController controller = editableTextWidget.controller; final TextEditingController controller = editableTextWidget.controller;
...@@ -3550,7 +3554,7 @@ void main() { ...@@ -3550,7 +3554,7 @@ void main() {
), ),
); );
// The toolbar now shows up. // The toolbar now shows up.
expect(find.byType(CupertinoButton), findsNWidgets(1)); expect(find.byType(CupertinoButton), isTargetPlatformIOS ? findsNWidgets(2) : findsNWidgets(1));
}, },
variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS }), variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS }),
); );
...@@ -3778,7 +3782,7 @@ void main() { ...@@ -3778,7 +3782,7 @@ void main() {
); );
// Long press toolbar. // Long press toolbar.
expect(find.byType(CupertinoButton), findsNWidgets(1)); expect(find.byType(CupertinoButton), findsNWidgets(2));
}, },
variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS }), variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS }),
); );
...@@ -3841,6 +3845,7 @@ void main() { ...@@ -3841,6 +3845,7 @@ void main() {
); );
final Offset selectableTextStart = tester.getTopLeft(find.byType(SelectableText)); final Offset selectableTextStart = tester.getTopLeft(find.byType(SelectableText));
final bool isTargetPlatformIOS = defaultTargetPlatform == TargetPlatform.iOS;
await tester.longPressAt(selectableTextStart + const Offset(50.0, 5.0)); await tester.longPressAt(selectableTextStart + const Offset(50.0, 5.0));
await tester.pump(const Duration(milliseconds: 50)); await tester.pump(const Duration(milliseconds: 50));
...@@ -3870,7 +3875,8 @@ void main() { ...@@ -3870,7 +3875,8 @@ void main() {
controller.selection, controller.selection,
const TextSelection(baseOffset: 8, extentOffset: 12), const TextSelection(baseOffset: 8, extentOffset: 12),
); );
expect(find.byType(CupertinoButton), findsNWidgets(1));
expect(find.byType(CupertinoButton), isTargetPlatformIOS ? findsNWidgets(2) : findsNWidgets(1));
}, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS, TargetPlatform.macOS }), }, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS, TargetPlatform.macOS }),
); );
...@@ -3887,6 +3893,7 @@ void main() { ...@@ -3887,6 +3893,7 @@ void main() {
), ),
); );
final Offset selectableTextStart = tester.getTopLeft(find.byType(SelectableText)); final Offset selectableTextStart = tester.getTopLeft(find.byType(SelectableText));
final bool isTargetPlatformIOS = defaultTargetPlatform == TargetPlatform.iOS;
await tester.tapAt(selectableTextStart + const Offset(50.0, 5.0)); await tester.tapAt(selectableTextStart + const Offset(50.0, 5.0));
await tester.pump(const Duration(milliseconds: 50)); await tester.pump(const Duration(milliseconds: 50));
...@@ -3904,7 +3911,7 @@ void main() { ...@@ -3904,7 +3911,7 @@ void main() {
controller.selection, controller.selection,
const TextSelection(baseOffset: 0, extentOffset: 7), const TextSelection(baseOffset: 0, extentOffset: 7),
); );
expect(find.byType(CupertinoButton), findsNWidgets(1)); expect(find.byType(CupertinoButton), isTargetPlatformIOS ? findsNWidgets(2) : findsNWidgets(1));
// Double tap selecting the same word somewhere else is fine. // Double tap selecting the same word somewhere else is fine.
await tester.pumpAndSettle(kDoubleTapTimeout); await tester.pumpAndSettle(kDoubleTapTimeout);
...@@ -3921,7 +3928,7 @@ void main() { ...@@ -3921,7 +3928,7 @@ void main() {
controller.selection, controller.selection,
const TextSelection(baseOffset: 0, extentOffset: 7), const TextSelection(baseOffset: 0, extentOffset: 7),
); );
expect(find.byType(CupertinoButton), findsNWidgets(1)); expect(find.byType(CupertinoButton), isTargetPlatformIOS ? findsNWidgets(2) : findsNWidgets(1));
// Hide the toolbar so it doesn't interfere with taps on the text. // Hide the toolbar so it doesn't interfere with taps on the text.
final EditableTextState editableTextState = final EditableTextState editableTextState =
...@@ -3943,7 +3950,7 @@ void main() { ...@@ -3943,7 +3950,7 @@ void main() {
controller.selection, controller.selection,
const TextSelection(baseOffset: 8, extentOffset: 12), const TextSelection(baseOffset: 8, extentOffset: 12),
); );
expect(find.byType(CupertinoButton), findsNWidgets(1)); expect(find.byType(CupertinoButton), isTargetPlatformIOS ? findsNWidgets(2) : findsNWidgets(1));
}, },
variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS, TargetPlatform.macOS }), variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS, TargetPlatform.macOS }),
); );
...@@ -4022,7 +4029,7 @@ void main() { ...@@ -4022,7 +4029,7 @@ void main() {
await gesture.up(); await gesture.up();
await tester.pump(); await tester.pump();
expect(find.byType(CupertinoButton), findsNWidgets(1)); expect(find.byType(CupertinoButton), findsNWidgets(2));
}, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS })); }, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS }));
testWidgets('tap on non-force-press-supported devices work', (WidgetTester tester) async { testWidgets('tap on non-force-press-supported devices work', (WidgetTester tester) async {
......
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Maak toe", "modalBarrierDismissLabel": "Maak toe",
"searchTextFieldPlaceholderLabel": "Soek", "searchTextFieldPlaceholderLabel": "Soek",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "አሰናብት", "modalBarrierDismissLabel": "አሰናብት",
"searchTextFieldPlaceholderLabel": "ፍለጋ", "searchTextFieldPlaceholderLabel": "ፍለጋ",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -43,5 +43,6 @@ ...@@ -43,5 +43,6 @@
"modalBarrierDismissLabel": "رفض", "modalBarrierDismissLabel": "رفض",
"searchTextFieldPlaceholderLabel": "بحث", "searchTextFieldPlaceholderLabel": "بحث",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "অগ্ৰাহ্য কৰক", "modalBarrierDismissLabel": "অগ্ৰাহ্য কৰক",
"searchTextFieldPlaceholderLabel": "সন্ধান কৰক", "searchTextFieldPlaceholderLabel": "সন্ধান কৰক",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "İmtina edin", "modalBarrierDismissLabel": "İmtina edin",
"searchTextFieldPlaceholderLabel": "Axtarın", "searchTextFieldPlaceholderLabel": "Axtarın",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -33,5 +33,6 @@ ...@@ -33,5 +33,6 @@
"modalBarrierDismissLabel": "Адхіліць", "modalBarrierDismissLabel": "Адхіліць",
"searchTextFieldPlaceholderLabel": "Пошук", "searchTextFieldPlaceholderLabel": "Пошук",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Отхвърляне", "modalBarrierDismissLabel": "Отхвърляне",
"searchTextFieldPlaceholderLabel": "Търсене", "searchTextFieldPlaceholderLabel": "Търсене",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "খারিজ করুন", "modalBarrierDismissLabel": "খারিজ করুন",
"searchTextFieldPlaceholderLabel": "সার্চ করুন", "searchTextFieldPlaceholderLabel": "সার্চ করুন",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -28,5 +28,6 @@ ...@@ -28,5 +28,6 @@
"modalBarrierDismissLabel": "Odbaci", "modalBarrierDismissLabel": "Odbaci",
"searchTextFieldPlaceholderLabel": "Pretraživanje", "searchTextFieldPlaceholderLabel": "Pretraživanje",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Ignora", "modalBarrierDismissLabel": "Ignora",
"searchTextFieldPlaceholderLabel": "Cerca", "searchTextFieldPlaceholderLabel": "Cerca",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -33,5 +33,6 @@ ...@@ -33,5 +33,6 @@
"modalBarrierDismissLabel": "Zavřít", "modalBarrierDismissLabel": "Zavřít",
"searchTextFieldPlaceholderLabel": "Hledat", "searchTextFieldPlaceholderLabel": "Hledat",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -43,5 +43,6 @@ ...@@ -43,5 +43,6 @@
"searchTextFieldPlaceholderLabel": "Chwilio", "searchTextFieldPlaceholderLabel": "Chwilio",
"modalBarrierDismissLabel": "Diystyru", "modalBarrierDismissLabel": "Diystyru",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Afvis", "modalBarrierDismissLabel": "Afvis",
"searchTextFieldPlaceholderLabel": "Søg", "searchTextFieldPlaceholderLabel": "Søg",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Schließen", "modalBarrierDismissLabel": "Schließen",
"searchTextFieldPlaceholderLabel": "Suche", "searchTextFieldPlaceholderLabel": "Suche",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Παράβλεψη", "modalBarrierDismissLabel": "Παράβλεψη",
"searchTextFieldPlaceholderLabel": "Αναζήτηση", "searchTextFieldPlaceholderLabel": "Αναζήτηση",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -165,6 +165,11 @@ ...@@ -165,6 +165,11 @@
"description": "The label for select-all buttons and menu items. The reference abbreviation is what iOS shows on text selection toolbars." "description": "The label for select-all buttons and menu items. The reference abbreviation is what iOS shows on text selection toolbars."
}, },
"lookUpButtonLabel": "Look Up",
"@lookUpButtonLabel": {
"description": "The label for the Look Up button and menu items on iOS."
},
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"@noSpellCheckReplacementsLabel": { "@noSpellCheckReplacementsLabel": {
"description": "The label shown in the text selection context menu on iOS when a misspelled word is tapped but the spell checker found no reasonable fixes for it." "description": "The label shown in the text selection context menu on iOS when a misspelled word is tapped but the spell checker found no reasonable fixes for it."
......
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Cerrar", "modalBarrierDismissLabel": "Cerrar",
"searchTextFieldPlaceholderLabel": "Buscar", "searchTextFieldPlaceholderLabel": "Buscar",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Loobu", "modalBarrierDismissLabel": "Loobu",
"searchTextFieldPlaceholderLabel": "Otsige", "searchTextFieldPlaceholderLabel": "Otsige",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Baztertu", "modalBarrierDismissLabel": "Baztertu",
"searchTextFieldPlaceholderLabel": "Bilatu", "searchTextFieldPlaceholderLabel": "Bilatu",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "نپذیرفتن", "modalBarrierDismissLabel": "نپذیرفتن",
"searchTextFieldPlaceholderLabel": "جستجو", "searchTextFieldPlaceholderLabel": "جستجو",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Ohita", "modalBarrierDismissLabel": "Ohita",
"searchTextFieldPlaceholderLabel": "Hae", "searchTextFieldPlaceholderLabel": "Hae",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "I-dismiss", "modalBarrierDismissLabel": "I-dismiss",
"searchTextFieldPlaceholderLabel": "Hanapin", "searchTextFieldPlaceholderLabel": "Hanapin",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Ignorer", "modalBarrierDismissLabel": "Ignorer",
"searchTextFieldPlaceholderLabel": "Rechercher", "searchTextFieldPlaceholderLabel": "Rechercher",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Ignorar", "modalBarrierDismissLabel": "Ignorar",
"searchTextFieldPlaceholderLabel": "Fai unha busca", "searchTextFieldPlaceholderLabel": "Fai unha busca",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Schließen", "modalBarrierDismissLabel": "Schließen",
"searchTextFieldPlaceholderLabel": "Suche", "searchTextFieldPlaceholderLabel": "Suche",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "છોડી દો", "modalBarrierDismissLabel": "છોડી દો",
"searchTextFieldPlaceholderLabel": "શોધો", "searchTextFieldPlaceholderLabel": "શોધો",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -33,5 +33,6 @@ ...@@ -33,5 +33,6 @@
"modalBarrierDismissLabel": "סגירה", "modalBarrierDismissLabel": "סגירה",
"searchTextFieldPlaceholderLabel": "חיפוש", "searchTextFieldPlaceholderLabel": "חיפוש",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "खारिज करें", "modalBarrierDismissLabel": "खारिज करें",
"searchTextFieldPlaceholderLabel": "खोजें", "searchTextFieldPlaceholderLabel": "खोजें",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -28,5 +28,6 @@ ...@@ -28,5 +28,6 @@
"modalBarrierDismissLabel": "Odbaci", "modalBarrierDismissLabel": "Odbaci",
"searchTextFieldPlaceholderLabel": "Pretraživanje", "searchTextFieldPlaceholderLabel": "Pretraživanje",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Elvetés", "modalBarrierDismissLabel": "Elvetés",
"searchTextFieldPlaceholderLabel": "Keresés", "searchTextFieldPlaceholderLabel": "Keresés",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Փակել", "modalBarrierDismissLabel": "Փակել",
"searchTextFieldPlaceholderLabel": "Որոնում", "searchTextFieldPlaceholderLabel": "Որոնում",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Tutup", "modalBarrierDismissLabel": "Tutup",
"searchTextFieldPlaceholderLabel": "Telusuri", "searchTextFieldPlaceholderLabel": "Telusuri",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Hunsa", "modalBarrierDismissLabel": "Hunsa",
"searchTextFieldPlaceholderLabel": "Leit", "searchTextFieldPlaceholderLabel": "Leit",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Ignora", "modalBarrierDismissLabel": "Ignora",
"searchTextFieldPlaceholderLabel": "Cerca", "searchTextFieldPlaceholderLabel": "Cerca",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "閉じる", "modalBarrierDismissLabel": "閉じる",
"searchTextFieldPlaceholderLabel": "検索", "searchTextFieldPlaceholderLabel": "検索",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "დახურვა", "modalBarrierDismissLabel": "დახურვა",
"searchTextFieldPlaceholderLabel": "ძიება", "searchTextFieldPlaceholderLabel": "ძიება",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Жабу", "modalBarrierDismissLabel": "Жабу",
"searchTextFieldPlaceholderLabel": "Іздеу", "searchTextFieldPlaceholderLabel": "Іздеу",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "ច្រាន​ចោល", "modalBarrierDismissLabel": "ច្រាន​ចោល",
"searchTextFieldPlaceholderLabel": "ស្វែងរក", "searchTextFieldPlaceholderLabel": "ស្វែងរក",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"tabSemanticsLabel": "\u0024\u0074\u0061\u0062\u0043\u006f\u0075\u006e\u0074\u0020\u0cb0\u0cb2\u0ccd\u0cb2\u0cbf\u0ca8\u0020\u0024\u0074\u0061\u0062\u0049\u006e\u0064\u0065\u0078\u0020\u0c9f\u0ccd\u0caf\u0cbe\u0cac\u0ccd", "tabSemanticsLabel": "\u0024\u0074\u0061\u0062\u0043\u006f\u0075\u006e\u0074\u0020\u0cb0\u0cb2\u0ccd\u0cb2\u0cbf\u0ca8\u0020\u0024\u0074\u0061\u0062\u0049\u006e\u0064\u0065\u0078\u0020\u0c9f\u0ccd\u0caf\u0cbe\u0cac\u0ccd",
"searchTextFieldPlaceholderLabel": "\u0cb9\u0cc1\u0ca1\u0cc1\u0c95\u0cbf", "searchTextFieldPlaceholderLabel": "\u0cb9\u0cc1\u0ca1\u0cc1\u0c95\u0cbf",
"noSpellCheckReplacementsLabel": "\u004e\u006f\u0020\u0052\u0065\u0070\u006c\u0061\u0063\u0065\u006d\u0065\u006e\u0074\u0073\u0020\u0046\u006f\u0075\u006e\u0064", "noSpellCheckReplacementsLabel": "\u004e\u006f\u0020\u0052\u0065\u0070\u006c\u0061\u0063\u0065\u006d\u0065\u006e\u0074\u0073\u0020\u0046\u006f\u0075\u006e\u0064",
"menuDismissLabel": "\u0044\u0069\u0073\u006d\u0069\u0073\u0073\u0020\u006d\u0065\u006e\u0075" "menuDismissLabel": "\u0044\u0069\u0073\u006d\u0069\u0073\u0073\u0020\u006d\u0065\u006e\u0075",
"lookUpButtonLabel": "\u004c\u006f\u006f\u006b\u0020\u0055\u0070"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "닫기", "modalBarrierDismissLabel": "닫기",
"searchTextFieldPlaceholderLabel": "검색", "searchTextFieldPlaceholderLabel": "검색",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Жабуу", "modalBarrierDismissLabel": "Жабуу",
"searchTextFieldPlaceholderLabel": "Издөө", "searchTextFieldPlaceholderLabel": "Издөө",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "ປິດໄວ້", "modalBarrierDismissLabel": "ປິດໄວ້",
"searchTextFieldPlaceholderLabel": "ຊອກຫາ", "searchTextFieldPlaceholderLabel": "ຊອກຫາ",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -33,5 +33,6 @@ ...@@ -33,5 +33,6 @@
"modalBarrierDismissLabel": "Atsisakyti", "modalBarrierDismissLabel": "Atsisakyti",
"searchTextFieldPlaceholderLabel": "Paieška", "searchTextFieldPlaceholderLabel": "Paieška",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -28,5 +28,6 @@ ...@@ -28,5 +28,6 @@
"modalBarrierDismissLabel": "Nerādīt", "modalBarrierDismissLabel": "Nerādīt",
"searchTextFieldPlaceholderLabel": "Meklēšana", "searchTextFieldPlaceholderLabel": "Meklēšana",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Отфрли", "modalBarrierDismissLabel": "Отфрли",
"searchTextFieldPlaceholderLabel": "Пребарувајте", "searchTextFieldPlaceholderLabel": "Пребарувајте",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "നിരസിക്കുക", "modalBarrierDismissLabel": "നിരസിക്കുക",
"searchTextFieldPlaceholderLabel": "തിരയുക", "searchTextFieldPlaceholderLabel": "തിരയുക",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Үл хэрэгсэх", "modalBarrierDismissLabel": "Үл хэрэгсэх",
"searchTextFieldPlaceholderLabel": "Хайх", "searchTextFieldPlaceholderLabel": "Хайх",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "डिसमिस करा", "modalBarrierDismissLabel": "डिसमिस करा",
"searchTextFieldPlaceholderLabel": "शोधा", "searchTextFieldPlaceholderLabel": "शोधा",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Tolak", "modalBarrierDismissLabel": "Tolak",
"searchTextFieldPlaceholderLabel": "Cari", "searchTextFieldPlaceholderLabel": "Cari",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "ပယ်ရန်", "modalBarrierDismissLabel": "ပယ်ရန်",
"searchTextFieldPlaceholderLabel": "ရှာရန်", "searchTextFieldPlaceholderLabel": "ရှာရန်",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Avvis", "modalBarrierDismissLabel": "Avvis",
"searchTextFieldPlaceholderLabel": "Søk", "searchTextFieldPlaceholderLabel": "Søk",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "खारेज गर्नुहोस्", "modalBarrierDismissLabel": "खारेज गर्नुहोस्",
"searchTextFieldPlaceholderLabel": "खोज्नुहोस्", "searchTextFieldPlaceholderLabel": "खोज्नुहोस्",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Sluiten", "modalBarrierDismissLabel": "Sluiten",
"searchTextFieldPlaceholderLabel": "Zoeken", "searchTextFieldPlaceholderLabel": "Zoeken",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Avvis", "modalBarrierDismissLabel": "Avvis",
"searchTextFieldPlaceholderLabel": "Søk", "searchTextFieldPlaceholderLabel": "Søk",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "ଖାରଜ କରନ୍ତୁ", "modalBarrierDismissLabel": "ଖାରଜ କରନ୍ତୁ",
"searchTextFieldPlaceholderLabel": "ସନ୍ଧାନ କରନ୍ତୁ", "searchTextFieldPlaceholderLabel": "ସନ୍ଧାନ କରନ୍ତୁ",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "ਖਾਰਜ ਕਰੋ", "modalBarrierDismissLabel": "ਖਾਰਜ ਕਰੋ",
"searchTextFieldPlaceholderLabel": "ਖੋਜੋ", "searchTextFieldPlaceholderLabel": "ਖੋਜੋ",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -33,5 +33,6 @@ ...@@ -33,5 +33,6 @@
"modalBarrierDismissLabel": "Zamknij", "modalBarrierDismissLabel": "Zamknij",
"searchTextFieldPlaceholderLabel": "Szukaj", "searchTextFieldPlaceholderLabel": "Szukaj",
"noSpellCheckReplacementsLabel": "Nie znaleziono zastąpień", "noSpellCheckReplacementsLabel": "Nie znaleziono zastąpień",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Dispensar", "modalBarrierDismissLabel": "Dispensar",
"searchTextFieldPlaceholderLabel": "Pesquisar", "searchTextFieldPlaceholderLabel": "Pesquisar",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -28,5 +28,6 @@ ...@@ -28,5 +28,6 @@
"modalBarrierDismissLabel": "Închideți", "modalBarrierDismissLabel": "Închideți",
"searchTextFieldPlaceholderLabel": "Căutați", "searchTextFieldPlaceholderLabel": "Căutați",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -33,5 +33,6 @@ ...@@ -33,5 +33,6 @@
"modalBarrierDismissLabel": "Закрыть", "modalBarrierDismissLabel": "Закрыть",
"searchTextFieldPlaceholderLabel": "Поиск", "searchTextFieldPlaceholderLabel": "Поиск",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "ඉවත ලන්න", "modalBarrierDismissLabel": "ඉවත ලන්න",
"searchTextFieldPlaceholderLabel": "සෙවීම", "searchTextFieldPlaceholderLabel": "සෙවීම",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -33,5 +33,6 @@ ...@@ -33,5 +33,6 @@
"modalBarrierDismissLabel": "Odmietnuť", "modalBarrierDismissLabel": "Odmietnuť",
"searchTextFieldPlaceholderLabel": "Hľadať", "searchTextFieldPlaceholderLabel": "Hľadať",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -33,5 +33,6 @@ ...@@ -33,5 +33,6 @@
"modalBarrierDismissLabel": "Opusti", "modalBarrierDismissLabel": "Opusti",
"searchTextFieldPlaceholderLabel": "Iskanje", "searchTextFieldPlaceholderLabel": "Iskanje",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Hiq", "modalBarrierDismissLabel": "Hiq",
"searchTextFieldPlaceholderLabel": "Kërko", "searchTextFieldPlaceholderLabel": "Kërko",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -28,5 +28,6 @@ ...@@ -28,5 +28,6 @@
"modalBarrierDismissLabel": "Одбаци", "modalBarrierDismissLabel": "Одбаци",
"searchTextFieldPlaceholderLabel": "Претражите", "searchTextFieldPlaceholderLabel": "Претражите",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Stäng", "modalBarrierDismissLabel": "Stäng",
"searchTextFieldPlaceholderLabel": "Sök", "searchTextFieldPlaceholderLabel": "Sök",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Ondoa", "modalBarrierDismissLabel": "Ondoa",
"searchTextFieldPlaceholderLabel": "Tafuta", "searchTextFieldPlaceholderLabel": "Tafuta",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "நிராகரிக்கும்", "modalBarrierDismissLabel": "நிராகரிக்கும்",
"searchTextFieldPlaceholderLabel": "தேடுக", "searchTextFieldPlaceholderLabel": "தேடுக",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "విస్మరించు", "modalBarrierDismissLabel": "విస్మరించు",
"searchTextFieldPlaceholderLabel": "సెర్చ్ చేయి", "searchTextFieldPlaceholderLabel": "సెర్చ్ చేయి",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "ปิด", "modalBarrierDismissLabel": "ปิด",
"searchTextFieldPlaceholderLabel": "ค้นหา", "searchTextFieldPlaceholderLabel": "ค้นหา",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "I-dismiss", "modalBarrierDismissLabel": "I-dismiss",
"searchTextFieldPlaceholderLabel": "Hanapin", "searchTextFieldPlaceholderLabel": "Hanapin",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Kapat", "modalBarrierDismissLabel": "Kapat",
"searchTextFieldPlaceholderLabel": "Ara", "searchTextFieldPlaceholderLabel": "Ara",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -33,5 +33,6 @@ ...@@ -33,5 +33,6 @@
"modalBarrierDismissLabel": "Закрити", "modalBarrierDismissLabel": "Закрити",
"searchTextFieldPlaceholderLabel": "Шукайте", "searchTextFieldPlaceholderLabel": "Шукайте",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "برخاست کریں", "modalBarrierDismissLabel": "برخاست کریں",
"searchTextFieldPlaceholderLabel": "تلاش کریں", "searchTextFieldPlaceholderLabel": "تلاش کریں",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Yopish", "modalBarrierDismissLabel": "Yopish",
"searchTextFieldPlaceholderLabel": "Qidiruv", "searchTextFieldPlaceholderLabel": "Qidiruv",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Bỏ qua", "modalBarrierDismissLabel": "Bỏ qua",
"searchTextFieldPlaceholderLabel": "Tìm kiếm", "searchTextFieldPlaceholderLabel": "Tìm kiếm",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "关闭", "modalBarrierDismissLabel": "关闭",
"searchTextFieldPlaceholderLabel": "搜索", "searchTextFieldPlaceholderLabel": "搜索",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -23,5 +23,6 @@ ...@@ -23,5 +23,6 @@
"modalBarrierDismissLabel": "Cashisa", "modalBarrierDismissLabel": "Cashisa",
"searchTextFieldPlaceholderLabel": "Sesha", "searchTextFieldPlaceholderLabel": "Sesha",
"noSpellCheckReplacementsLabel": "No Replacements Found", "noSpellCheckReplacementsLabel": "No Replacements Found",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -141,5 +141,6 @@ ...@@ -141,5 +141,6 @@
"expansionTileCollapsedTapHint": "Expand for more details", "expansionTileCollapsedTapHint": "Expand for more details",
"expandedHint": "Collapsed", "expandedHint": "Collapsed",
"collapsedHint": "Expanded", "collapsedHint": "Expanded",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -141,5 +141,6 @@ ...@@ -141,5 +141,6 @@
"expansionTileCollapsedTapHint": "Expand for more details", "expansionTileCollapsedTapHint": "Expand for more details",
"expandedHint": "Collapsed", "expandedHint": "Collapsed",
"collapsedHint": "Expanded", "collapsedHint": "Expanded",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -152,5 +152,6 @@ ...@@ -152,5 +152,6 @@
"expansionTileCollapsedTapHint": "Expand for more details", "expansionTileCollapsedTapHint": "Expand for more details",
"expandedHint": "Collapsed", "expandedHint": "Collapsed",
"collapsedHint": "Expanded", "collapsedHint": "Expanded",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
...@@ -141,5 +141,6 @@ ...@@ -141,5 +141,6 @@
"expansionTileCollapsedTapHint": "Expand for more details", "expansionTileCollapsedTapHint": "Expand for more details",
"expandedHint": "Collapsed", "expandedHint": "Collapsed",
"collapsedHint": "Expanded", "collapsedHint": "Expanded",
"menuDismissLabel": "Dismiss menu" "menuDismissLabel": "Dismiss menu",
"lookUpButtonLabel": "Look Up"
} }
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