Unverified Commit 4841a7ed authored by Justin McCandless's avatar Justin McCandless Committed by GitHub

Text Selection Overflow (Android) (#49391)

Adds an overflow menu to the text selection menu on Android when the items overflow.
parent 5e74b004
...@@ -71,6 +71,9 @@ abstract class MaterialLocalizations { ...@@ -71,6 +71,9 @@ abstract class MaterialLocalizations {
/// The tooltip for the delete button on a [Chip]. /// The tooltip for the delete button on a [Chip].
String get deleteButtonTooltip; String get deleteButtonTooltip;
/// The tooltip for the more button on an overflowing text selection menu.
String get moreButtonTooltip;
/// The tooltip for the [MonthPicker]'s "next month" button. /// The tooltip for the [MonthPicker]'s "next month" button.
String get nextMonthTooltip; String get nextMonthTooltip;
...@@ -561,6 +564,9 @@ class DefaultMaterialLocalizations implements MaterialLocalizations { ...@@ -561,6 +564,9 @@ class DefaultMaterialLocalizations implements MaterialLocalizations {
@override @override
String get deleteButtonTooltip => 'Delete'; String get deleteButtonTooltip => 'Delete';
@override
String get moreButtonTooltip => 'More';
@override @override
String get nextMonthTooltip => 'Next month'; String get nextMonthTooltip => 'Next month';
......
...@@ -4,11 +4,14 @@ ...@@ -4,11 +4,14 @@
import 'dart:math' as math; import 'dart:math' as math;
import 'package:flutter/widgets.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter/widgets.dart';
import 'debug.dart'; import 'debug.dart';
import 'flat_button.dart'; import 'flat_button.dart';
import 'icon_button.dart';
import 'icons.dart';
import 'material.dart'; import 'material.dart';
import 'material_localizations.dart'; import 'material_localizations.dart';
import 'theme.dart'; import 'theme.dart';
...@@ -20,17 +23,18 @@ const double _kHandleSize = 22.0; ...@@ -20,17 +23,18 @@ const double _kHandleSize = 22.0;
const double _kToolbarScreenPadding = 8.0; const double _kToolbarScreenPadding = 8.0;
const double _kToolbarHeight = 44.0; const double _kToolbarHeight = 44.0;
// Padding when positioning toolbar below selection. // Padding when positioning toolbar below selection.
const double _kToolbarContentDistanceBelow = 16.0; const double _kToolbarContentDistanceBelow = _kHandleSize - 2.0;
const double _kToolbarContentDistance = 8.0; const double _kToolbarContentDistance = 8.0;
/// Manages a copy/paste text selection toolbar. /// Manages a copy/paste text selection toolbar.
class _TextSelectionToolbar extends StatelessWidget { class _TextSelectionToolbar extends StatefulWidget {
const _TextSelectionToolbar({ const _TextSelectionToolbar({
Key key, Key key,
this.handleCut, this.handleCut,
this.handleCopy, this.handleCopy,
this.handlePaste, this.handlePaste,
this.handleSelectAll, this.handleSelectAll,
this.isAbove,
}) : super(key: key); }) : super(key: key);
final VoidCallback handleCut; final VoidCallback handleCut;
...@@ -38,14 +42,60 @@ class _TextSelectionToolbar extends StatelessWidget { ...@@ -38,14 +42,60 @@ class _TextSelectionToolbar extends StatelessWidget {
final VoidCallback handlePaste; final VoidCallback handlePaste;
final VoidCallback handleSelectAll; final VoidCallback handleSelectAll;
// When true, the toolbar fits above its anchor and will be positioned there.
final bool isAbove;
@override
_TextSelectionToolbarState createState() => _TextSelectionToolbarState();
}
class _TextSelectionToolbarState extends State<_TextSelectionToolbar> with TickerProviderStateMixin {
// Whether or not the overflow menu is open. When it is closed, the menu
// items that don't overflow are shown. When it is open, only the overflowing
// menu items are shown.
bool _overflowOpen = false;
// The key for _TextSelectionToolbarContainer.
UniqueKey _containerKey = UniqueKey();
FlatButton _getItem(VoidCallback onPressed, String label) {
assert(onPressed != null);
return FlatButton(
child: Text(label),
onPressed: onPressed,
);
}
@override
void didUpdateWidget(_TextSelectionToolbar oldWidget) {
if (((widget.handleCut == null) != (oldWidget.handleCut == null))
|| ((widget.handleCopy == null) != (oldWidget.handleCopy == null))
|| ((widget.handlePaste == null) != (oldWidget.handlePaste == null))
|| ((widget.handleSelectAll == null) != (oldWidget.handleSelectAll == null))) {
// Change _TextSelectionToolbarContainer's key when the menu changes in
// order to cause it to rebuild. This lets it recalculate its
// saved width for the new set of children, and it prevents AnimatedSize
// from animating the size change.
_containerKey = UniqueKey();
// If the menu items change, make sure the overflow menu is closed. This
// prevents an empty overflow menu.
_overflowOpen = false;
}
super.didUpdateWidget(oldWidget);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final MaterialLocalizations localizations = MaterialLocalizations.of(context); final MaterialLocalizations localizations = MaterialLocalizations.of(context);
final List<Widget> items = <Widget>[ final List<Widget> items = <Widget>[
if (handleCut != null) FlatButton(child: Text(localizations.cutButtonLabel), onPressed: handleCut), if (widget.handleCut != null)
if (handleCopy != null) FlatButton(child: Text(localizations.copyButtonLabel), onPressed: handleCopy), _getItem(widget.handleCut, localizations.cutButtonLabel),
if (handlePaste != null) FlatButton(child: Text(localizations.pasteButtonLabel), onPressed: handlePaste), if (widget.handleCopy != null)
if (handleSelectAll != null) FlatButton(child: Text(localizations.selectAllButtonLabel), onPressed: handleSelectAll), _getItem(widget.handleCopy, localizations.copyButtonLabel),
if (widget.handlePaste != null)
_getItem(widget.handlePaste, localizations.pasteButtonLabel),
if (widget.handleSelectAll != null)
_getItem(widget.handleSelectAll, localizations.selectAllButtonLabel),
]; ];
// If there is no option available, build an empty widget. // If there is no option available, build an empty widget.
...@@ -53,31 +103,481 @@ class _TextSelectionToolbar extends StatelessWidget { ...@@ -53,31 +103,481 @@ class _TextSelectionToolbar extends StatelessWidget {
return Container(width: 0.0, height: 0.0); return Container(width: 0.0, height: 0.0);
} }
return Material(
return _TextSelectionToolbarContainer(
key: _containerKey,
overflowOpen: _overflowOpen,
child: AnimatedSize(
vsync: this,
// This duration was eyeballed on a Pixel 2 emulator running Android
// API 28.
duration: const Duration(milliseconds: 140),
child: Material(
elevation: 1.0, elevation: 1.0,
child: Container( child: _TextSelectionToolbarItems(
height: _kToolbarHeight, isAbove: widget.isAbove,
child: Row(mainAxisSize: MainAxisSize.min, children: items), overflowOpen: _overflowOpen,
children: <Widget>[
// The navButton that shows and hides the overflow menu is the
// first child.
Material(
child: IconButton(
// TODO(justinmc): This should be an AnimatedIcon, but
// AnimatedIcons doesn't yet support arrow_back to more_vert.
// https://github.com/flutter/flutter/issues/51209
icon: Icon(_overflowOpen ? Icons.arrow_back : Icons.more_vert),
onPressed: () {
setState(() {
_overflowOpen = !_overflowOpen;
});
},
tooltip: _overflowOpen
? localizations.backButtonTooltip
: localizations.moreButtonTooltip,
),
),
...items,
],
),
), ),
),
);
}
}
// When the overflow menu is open, it tries to align its right edge to the right
// edge of the closed menu. This widget handles this effect by measuring and
// maintaining the width of the closed menu and aligning the child to the right.
class _TextSelectionToolbarContainer extends SingleChildRenderObjectWidget {
const _TextSelectionToolbarContainer({
Key key,
@required Widget child,
@required this.overflowOpen,
}) : assert(child != null),
assert(overflowOpen != null),
super(key: key, child: child);
final bool overflowOpen;
@override
_TextSelectionToolbarContainerRenderBox createRenderObject(BuildContext context) {
return _TextSelectionToolbarContainerRenderBox(overflowOpen: overflowOpen);
}
@override
void updateRenderObject(BuildContext context, _TextSelectionToolbarContainerRenderBox renderObject) {
renderObject.overflowOpen = overflowOpen;
}
}
class _TextSelectionToolbarContainerRenderBox extends RenderProxyBox {
_TextSelectionToolbarContainerRenderBox({
@required bool overflowOpen,
}) : assert(overflowOpen != null),
_overflowOpen = overflowOpen,
super();
// The width of the menu when it was closed. This is used to achieve the
// behavior where the open menu aligns its right edge to the closed menu's
// right edge.
double _closedWidth;
bool _overflowOpen;
bool get overflowOpen => _overflowOpen;
set overflowOpen(bool value) {
if (value == overflowOpen) {
return;
}
_overflowOpen = value;
markNeedsLayout();
}
@override
void performLayout() {
child.layout(constraints.loosen(), parentUsesSize: true);
// Save the width when the menu is closed. If the menu changes, this width
// is invalid, so it's important that this RenderBox be recreated in that
// case. Currently, this is achieved by providing a new key to
// _TextSelectionToolbarContainer.
if (!overflowOpen && _closedWidth == null) {
_closedWidth = child.size.width;
}
size = constraints.constrain(Size(
// If the open menu is wider than the closed menu, just use its own width
// and don't worry about aligning the right edges.
// _closedWidth is used even when the menu is closed to allow it to
// animate its size while keeping the same right alignment.
_closedWidth == null || child.size.width > _closedWidth ? child.size.width : _closedWidth,
child.size.height,
));
final _ToolbarParentData childParentData = child.parentData as _ToolbarParentData;
childParentData.offset = Offset(
size.width - child.size.width,
0.0,
);
}
// Paint at the offset set in the parent data.
@override
void paint(PaintingContext context, Offset offset) {
final _ToolbarParentData childParentData = child.parentData as _ToolbarParentData;
context.paintChild(child, childParentData.offset + offset);
}
// Include the parent data offset in the hit test.
@override
bool hitTestChildren(BoxHitTestResult result, { Offset position }) {
// The x, y parameters have the top left of the node's box as the origin.
final _ToolbarParentData childParentData = child.parentData as _ToolbarParentData;
return result.addWithPaintOffset(
offset: childParentData.offset,
position: position,
hitTest: (BoxHitTestResult result, Offset transformed) {
assert(transformed == position - childParentData.offset);
return child.hitTest(result, position: transformed);
},
); );
} }
@override
void setupParentData(RenderBox child) {
if (child.parentData is! _ToolbarParentData) {
child.parentData = _ToolbarParentData();
}
}
@override
void applyPaintTransform(RenderObject child, Matrix4 transform) {
final _ToolbarParentData childParentData = child.parentData as _ToolbarParentData;
transform.translate(childParentData.offset.dx, childParentData.offset.dy);
super.applyPaintTransform(child, transform);
}
} }
/// Centers the toolbar around the given position, ensuring that it remains on // Renders the menu items in the correct positions in the menu and its overflow
// submenu based on calculating which item would first overflow.
class _TextSelectionToolbarItems extends MultiChildRenderObjectWidget {
_TextSelectionToolbarItems({
Key key,
@required this.isAbove,
@required this.overflowOpen,
@required List<Widget> children,
}) : assert(children != null),
assert(isAbove != null),
assert(overflowOpen != null),
super(key: key, children: children);
final bool isAbove;
final bool overflowOpen;
@override
_TextSelectionToolbarItemsRenderBox createRenderObject(BuildContext context) {
return _TextSelectionToolbarItemsRenderBox(
isAbove: isAbove,
overflowOpen: overflowOpen,
);
}
@override
void updateRenderObject(BuildContext context, _TextSelectionToolbarItemsRenderBox renderObject) {
renderObject
..isAbove = isAbove
..overflowOpen = overflowOpen;
}
@override
_TextSelectionToolbarItemsElement createElement() => _TextSelectionToolbarItemsElement(this);
}
class _ToolbarParentData extends ContainerBoxParentData<RenderBox> {
/// Whether or not this child is painted.
///
/// Children in the selection toolbar may be laid out for measurement purposes
/// but not painted. This allows these children to be identified.
bool shouldPaint;
@override
String toString() => '${super.toString()}; shouldPaint=$shouldPaint';
}
class _TextSelectionToolbarItemsElement extends MultiChildRenderObjectElement {
_TextSelectionToolbarItemsElement(
MultiChildRenderObjectWidget widget,
) : super(widget);
static bool _shouldPaint(Element child) {
return (child.renderObject.parentData as _ToolbarParentData).shouldPaint;
}
@override
void debugVisitOnstageChildren(ElementVisitor visitor) {
children.where(_shouldPaint).forEach(visitor);
}
}
class _TextSelectionToolbarItemsRenderBox extends RenderBox with ContainerRenderObjectMixin<RenderBox, _ToolbarParentData> {
_TextSelectionToolbarItemsRenderBox({
@required bool isAbove,
@required bool overflowOpen,
}) : assert(overflowOpen != null),
assert(isAbove != null),
_isAbove = isAbove,
_overflowOpen = overflowOpen,
super();
// The index of the last item that doesn't overflow.
int _lastIndexThatFits = -1;
bool _isAbove;
bool get isAbove => _isAbove;
set isAbove(bool value) {
if (value == isAbove) {
return;
}
_isAbove = value;
markNeedsLayout();
}
bool _overflowOpen;
bool get overflowOpen => _overflowOpen;
set overflowOpen(bool value) {
if (value == overflowOpen) {
return;
}
_overflowOpen = value;
markNeedsLayout();
}
// Layout the necessary children, and figure out where the children first
// overflow, if at all.
void _layoutChildren() {
// When overflow is not open, the toolbar is always a specific height.
final BoxConstraints sizedConstraints = _overflowOpen
? constraints
: BoxConstraints.loose(Size(
constraints.maxWidth,
_kToolbarHeight,
));
int i = -1;
double width = 0.0;
visitChildren((RenderObject renderObjectChild) {
i++;
// No need to layout children inside the overflow menu when it's closed.
// The opposite is not true. It is necessary to layout the children that
// don't overflow when the overflow menu is open in order to calculate
// _lastIndexThatFits.
if (_lastIndexThatFits != -1 && !overflowOpen) {
return;
}
final RenderBox child = renderObjectChild as RenderBox;
child.layout(sizedConstraints.loosen(), parentUsesSize: true);
width += child.size.width;
if (width > sizedConstraints.maxWidth && _lastIndexThatFits == -1) {
_lastIndexThatFits = i - 1;
}
});
// If the last child overflows, but only because of the width of the
// overflow button, then just show it and hide the overflow button.
final RenderBox navButton = firstChild;
if (_lastIndexThatFits != -1
&& _lastIndexThatFits == childCount - 2
&& width - navButton.size.width <= sizedConstraints.maxWidth) {
_lastIndexThatFits = -1;
}
}
// Returns true when the child should be painted, false otherwise.
bool _shouldPaintChild(RenderObject renderObjectChild, int index) {
// Paint the navButton when there is overflow.
if (renderObjectChild == firstChild) {
return _lastIndexThatFits != -1;
}
// If there is no overflow, all children besides the navButton are painted.
if (_lastIndexThatFits == -1) {
return true;
}
// When there is overflow, paint if the child is in the part of the menu
// that is currently open. Overflowing children are painted when the
// overflow menu is open, and the children that fit are painted when the
// overflow menu is closed.
return (index > _lastIndexThatFits) == overflowOpen;
}
// Decide which children will be pained and set their shouldPaint, and set the
// offset that painted children will be placed at.
void _placeChildren() {
int i = -1;
Size nextSize = const Size(0.0, 0.0);
double fitWidth = 0.0;
final RenderBox navButton = firstChild;
double overflowHeight = overflowOpen && !isAbove ? navButton.size.height : 0.0;
visitChildren((RenderObject renderObjectChild) {
i++;
final RenderBox child = renderObjectChild as RenderBox;
final _ToolbarParentData childParentData = child.parentData as _ToolbarParentData;
// Handle placing the navigation button after iterating all children.
if (renderObjectChild == navButton) {
return;
}
// There is no need to place children that won't be painted.
if (!_shouldPaintChild(renderObjectChild, i)) {
childParentData.shouldPaint = false;
return;
}
childParentData.shouldPaint = true;
if (!overflowOpen) {
childParentData.offset = Offset(fitWidth, 0.0);
fitWidth += child.size.width;
nextSize = Size(
fitWidth,
math.max(child.size.height, nextSize.height),
);
} else {
childParentData.offset = Offset(0.0, overflowHeight);
overflowHeight += child.size.height;
nextSize = Size(
math.max(child.size.width, nextSize.width),
overflowHeight,
);
}
});
// Place the navigation button if needed.
final _ToolbarParentData navButtonParentData = navButton.parentData as _ToolbarParentData;
if (_shouldPaintChild(firstChild, 0)) {
navButtonParentData.shouldPaint = true;
if (overflowOpen) {
navButtonParentData.offset = isAbove
? Offset(0.0, overflowHeight)
: Offset.zero;
nextSize = Size(
nextSize.width,
isAbove ? nextSize.height + navButton.size.height : nextSize.height,
);
} else {
navButtonParentData.offset = Offset(fitWidth, 0.0);
nextSize = Size(nextSize.width + navButton.size.width, nextSize.height);
}
} else {
navButtonParentData.shouldPaint = false;
}
size = nextSize;
}
@override
void performLayout() {
_lastIndexThatFits = -1;
if (firstChild == null) {
performResize();
return;
}
_layoutChildren();
_placeChildren();
}
@override
void paint(PaintingContext context, Offset offset) {
visitChildren((RenderObject renderObjectChild) {
final RenderBox child = renderObjectChild as RenderBox;
final _ToolbarParentData childParentData = child.parentData as _ToolbarParentData;
if (!childParentData.shouldPaint) {
return;
}
context.paintChild(child, childParentData.offset + offset);
});
}
@override
void setupParentData(RenderBox child) {
if (child.parentData is! _ToolbarParentData) {
child.parentData = _ToolbarParentData();
}
}
@override
bool hitTestChildren(BoxHitTestResult result, { Offset position }) {
// The x, y parameters have the top left of the node's box as the origin.
RenderBox child = lastChild;
while (child != null) {
final _ToolbarParentData childParentData = child.parentData as _ToolbarParentData;
// Don't hit test children aren't shown.
if (!childParentData.shouldPaint) {
child = childParentData.previousSibling;
continue;
}
final bool isHit = result.addWithPaintOffset(
offset: childParentData.offset,
position: position,
hitTest: (BoxHitTestResult result, Offset transformed) {
assert(transformed == position - childParentData.offset);
return child.hitTest(result, position: transformed);
},
);
if (isHit)
return true;
child = childParentData.previousSibling;
}
return false;
}
}
/// Centers the toolbar around the given anchor, ensuring that it remains on
/// screen. /// screen.
class _TextSelectionToolbarLayout extends SingleChildLayoutDelegate { class _TextSelectionToolbarLayout extends SingleChildLayoutDelegate {
_TextSelectionToolbarLayout(this.screenSize, this.globalEditableRegion, this.position); _TextSelectionToolbarLayout(this.anchor, this.upperBounds, this.fitsAbove);
/// The size of the screen at the time that the toolbar was last laid out. /// Anchor position of the toolbar in global coordinates.
final Size screenSize; final Offset anchor;
/// Size and position of the editing region at the time the toolbar was last /// The upper-most valid y value for the anchor.
/// laid out, in global coordinates. final double upperBounds;
final Rect globalEditableRegion;
/// Whether the closed toolbar fits above the anchor position.
///
/// If the closed toolbar doesn't fit, then the menu is rendered below the
/// anchor position. It should never happen that the toolbar extends below the
/// padded bottom of the screen.
///
/// If the closed toolbar does fit but it doesn't fit when the overflow menu
/// is open, then the toolbar is still rendered above the anchor position. It
/// then grows downward, overlapping the selection.
final bool fitsAbove;
// Return the value that centers width as closely as possible to position
// while fitting inside of min and max.
static double _centerOn(double position, double width, double min, double max) {
// If it overflows on the left, put it as far left as possible.
if (position - width / 2.0 < min) {
return min;
}
// If it overflows on the right, put it as far right as possible.
if (position + width / 2.0 > max) {
return max - width;
}
/// Anchor position of the toolbar, relative to the top left of the // Otherwise it fits while perfectly centered.
/// [globalEditableRegion]. return position - width / 2.0;
final Offset position; }
@override @override
BoxConstraints getConstraintsForChild(BoxConstraints constraints) { BoxConstraints getConstraintsForChild(BoxConstraints constraints) {
...@@ -86,27 +586,22 @@ class _TextSelectionToolbarLayout extends SingleChildLayoutDelegate { ...@@ -86,27 +586,22 @@ class _TextSelectionToolbarLayout extends SingleChildLayoutDelegate {
@override @override
Offset getPositionForChild(Size size, Size childSize) { Offset getPositionForChild(Size size, Size childSize) {
final Offset globalPosition = globalEditableRegion.topLeft + position; return Offset(
_centerOn(
double x = globalPosition.dx - childSize.width / 2.0; anchor.dx,
double y = globalPosition.dy - childSize.height; childSize.width,
_kToolbarScreenPadding,
if (x < _kToolbarScreenPadding) size.width - _kToolbarScreenPadding,
x = _kToolbarScreenPadding; ),
else if (x + childSize.width > screenSize.width - _kToolbarScreenPadding) fitsAbove
x = screenSize.width - childSize.width - _kToolbarScreenPadding; ? math.max(upperBounds, anchor.dy - childSize.height)
: anchor.dy,
if (y < _kToolbarScreenPadding) );
y = _kToolbarScreenPadding;
else if (y + childSize.height > screenSize.height - _kToolbarScreenPadding)
y = screenSize.height - childSize.height - _kToolbarScreenPadding;
return Offset(x, y);
} }
@override @override
bool shouldRelayout(_TextSelectionToolbarLayout oldDelegate) { bool shouldRelayout(_TextSelectionToolbarLayout oldDelegate) {
return position != oldDelegate.position; return anchor != oldDelegate.anchor;
} }
} }
...@@ -143,42 +638,52 @@ class _MaterialTextSelectionControls extends TextSelectionControls { ...@@ -143,42 +638,52 @@ class _MaterialTextSelectionControls extends TextSelectionControls {
BuildContext context, BuildContext context,
Rect globalEditableRegion, Rect globalEditableRegion,
double textLineHeight, double textLineHeight,
Offset position, Offset selectionMidpoint,
List<TextSelectionPoint> endpoints, List<TextSelectionPoint> endpoints,
TextSelectionDelegate delegate, TextSelectionDelegate delegate,
) { ) {
assert(debugCheckHasMediaQuery(context)); assert(debugCheckHasMediaQuery(context));
assert(debugCheckHasMaterialLocalizations(context)); assert(debugCheckHasMaterialLocalizations(context));
// The toolbar should appear below the TextField // The toolbar should appear below the TextField when there is not enough
// when there is not enough space above the TextField to show it. // space above the TextField to show it.
final TextSelectionPoint startTextSelectionPoint = endpoints[0]; final TextSelectionPoint startTextSelectionPoint = endpoints[0];
final double toolbarHeightNeeded = MediaQuery.of(context).padding.top final TextSelectionPoint endTextSelectionPoint = endpoints.length > 1
+ _kToolbarScreenPadding ? endpoints[1]
: endpoints[0];
const double closedToolbarHeightNeeded = _kToolbarScreenPadding
+ _kToolbarHeight + _kToolbarHeight
+ _kToolbarContentDistance; + _kToolbarContentDistance;
final double availableHeight = globalEditableRegion.top + endpoints.first.point.dy - textLineHeight; final double paddingTop = MediaQuery.of(context).padding.top;
final bool fitsAbove = toolbarHeightNeeded <= availableHeight; final double availableHeight = globalEditableRegion.top
final double y = fitsAbove + startTextSelectionPoint.point.dy
? startTextSelectionPoint.point.dy - _kToolbarContentDistance - textLineHeight - textLineHeight
: startTextSelectionPoint.point.dy + _kToolbarHeight + _kToolbarContentDistanceBelow; - paddingTop;
final Offset preciseMidpoint = Offset(position.dx, y); final bool fitsAbove = closedToolbarHeightNeeded <= availableHeight;
final Offset anchor = Offset(
return ConstrainedBox( globalEditableRegion.left + selectionMidpoint.dx,
constraints: BoxConstraints.tight(globalEditableRegion.size), fitsAbove
child: CustomSingleChildLayout( ? globalEditableRegion.top + startTextSelectionPoint.point.dy - textLineHeight - _kToolbarContentDistance
: globalEditableRegion.top + endTextSelectionPoint.point.dy + _kToolbarContentDistanceBelow,
);
return Stack(
children: <Widget>[
CustomSingleChildLayout(
delegate: _TextSelectionToolbarLayout( delegate: _TextSelectionToolbarLayout(
MediaQuery.of(context).size, anchor,
globalEditableRegion, _kToolbarScreenPadding + paddingTop,
preciseMidpoint, fitsAbove,
), ),
child: _TextSelectionToolbar( child: _TextSelectionToolbar(
handleCut: canCut(delegate) ? () => handleCut(delegate) : null, handleCut: canCut(delegate) ? () => handleCut(delegate) : null,
handleCopy: canCopy(delegate) ? () => handleCopy(delegate) : null, handleCopy: canCopy(delegate) ? () => handleCopy(delegate) : null,
handlePaste: canPaste(delegate) ? () => handlePaste(delegate) : null, handlePaste: canPaste(delegate) ? () => handlePaste(delegate) : null,
handleSelectAll: canSelectAll(delegate) ? () => handleSelectAll(delegate) : null, handleSelectAll: canSelectAll(delegate) ? () => handleSelectAll(delegate) : null,
isAbove: fitsAbove,
), ),
), ),
],
); );
} }
...@@ -190,7 +695,7 @@ class _MaterialTextSelectionControls extends TextSelectionControls { ...@@ -190,7 +695,7 @@ class _MaterialTextSelectionControls extends TextSelectionControls {
height: _kHandleSize, height: _kHandleSize,
child: CustomPaint( child: CustomPaint(
painter: _TextSelectionHandlePainter( painter: _TextSelectionHandlePainter(
color: Theme.of(context).textSelectionHandleColor color: Theme.of(context).textSelectionHandleColor,
), ),
), ),
); );
......
...@@ -2483,7 +2483,7 @@ mixin RenderBoxContainerDefaultsMixin<ChildType extends RenderBox, ParentDataTyp ...@@ -2483,7 +2483,7 @@ mixin RenderBoxContainerDefaultsMixin<ChildType extends RenderBox, ParentDataTyp
/// * [defaultPaint], which paints the children appropriate for this /// * [defaultPaint], which paints the children appropriate for this
/// hit-testing strategy. /// hit-testing strategy.
bool defaultHitTestChildren(BoxHitTestResult result, { Offset position }) { bool defaultHitTestChildren(BoxHitTestResult result, { Offset position }) {
// the x, y parameters have the top left of the node's box as the origin // The x, y parameters have the top left of the node's box as the origin.
ChildType child = lastChild; ChildType child = lastChild;
while (child != null) { while (child != null) {
final ParentDataType childParentData = child.parentData as ParentDataType; final ParentDataType childParentData = child.parentData as ParentDataType;
......
...@@ -13,6 +13,7 @@ void main() { ...@@ -13,6 +13,7 @@ void main() {
expect(localizations.backButtonTooltip, isNotNull); expect(localizations.backButtonTooltip, isNotNull);
expect(localizations.closeButtonTooltip, isNotNull); expect(localizations.closeButtonTooltip, isNotNull);
expect(localizations.deleteButtonTooltip, isNotNull); expect(localizations.deleteButtonTooltip, isNotNull);
expect(localizations.moreButtonTooltip, isNotNull);
expect(localizations.nextMonthTooltip, isNotNull); expect(localizations.nextMonthTooltip, isNotNull);
expect(localizations.previousMonthTooltip, isNotNull); expect(localizations.previousMonthTooltip, isNotNull);
expect(localizations.nextPageTooltip, isNotNull); expect(localizations.nextPageTooltip, isNotNull);
......
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';
// Returns the first RenderEditable.
RenderEditable findRenderEditable(WidgetTester tester) {
final RenderObject root = tester.renderObject(find.byType(EditableText));
expect(root, isNotNull);
RenderEditable renderEditable;
void recursiveFinder(RenderObject child) {
if (child is RenderEditable) {
renderEditable = child;
return;
}
child.visitChildren(recursiveFinder);
}
root.visitChildren(recursiveFinder);
expect(renderEditable, isNotNull);
return renderEditable;
}
List<TextSelectionPoint> globalize(Iterable<TextSelectionPoint> points, RenderBox box) {
return points.map<TextSelectionPoint>((TextSelectionPoint point) {
return TextSelectionPoint(
box.localToGlobal(point.point),
point.direction,
);
}).toList();
}
Offset textOffsetToPosition(WidgetTester tester, int offset) {
final RenderEditable renderEditable = findRenderEditable(tester);
final List<TextSelectionPoint> endpoints = globalize(
renderEditable.getEndpointsForSelection(
TextSelection.collapsed(offset: offset),
),
renderEditable,
);
expect(endpoints.length, 1);
return endpoints[0].point + const Offset(0.0, -2.0);
}
...@@ -18,6 +18,7 @@ import 'package:flutter/gestures.dart' show DragStartBehavior, PointerDeviceKind ...@@ -18,6 +18,7 @@ import 'package:flutter/gestures.dart' show DragStartBehavior, PointerDeviceKind
import '../rendering/mock_canvas.dart'; import '../rendering/mock_canvas.dart';
import '../widgets/semantics_tester.dart'; import '../widgets/semantics_tester.dart';
import 'feedback_tester.dart'; import 'feedback_tester.dart';
import 'text.dart' show findRenderEditable, globalize, textOffsetToPosition;
class MockClipboard { class MockClipboard {
Object _clipboardData = <String, dynamic>{ Object _clipboardData = <String, dynamic>{
...@@ -141,45 +142,6 @@ void main() { ...@@ -141,45 +142,6 @@ void main() {
kThreeLines + kThreeLines +
"\nFourth line won't display and ends at"; "\nFourth line won't display and ends at";
// Returns the first RenderEditable.
RenderEditable findRenderEditable(WidgetTester tester) {
final RenderObject root = tester.renderObject(find.byType(EditableText));
expect(root, isNotNull);
RenderEditable renderEditable;
void recursiveFinder(RenderObject child) {
if (child is RenderEditable) {
renderEditable = child;
return;
}
child.visitChildren(recursiveFinder);
}
root.visitChildren(recursiveFinder);
expect(renderEditable, isNotNull);
return renderEditable;
}
List<TextSelectionPoint> globalize(Iterable<TextSelectionPoint> points, RenderBox box) {
return points.map<TextSelectionPoint>((TextSelectionPoint point) {
return TextSelectionPoint(
box.localToGlobal(point.point),
point.direction,
);
}).toList();
}
Offset textOffsetToPosition(WidgetTester tester, int offset) {
final RenderEditable renderEditable = findRenderEditable(tester);
final List<TextSelectionPoint> endpoints = globalize(
renderEditable.getEndpointsForSelection(
TextSelection.collapsed(offset: offset),
),
renderEditable,
);
expect(endpoints.length, 1);
return endpoints[0].point + const Offset(0.0, -2.0);
}
setUp(() { setUp(() {
debugResetSemanticsIdCounter(); debugResetSemanticsIdCounter();
}); });
......
...@@ -3,8 +3,10 @@ ...@@ -3,8 +3,10 @@
// found in the LICENSE file. // found in the LICENSE file.
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';
import 'text.dart' show findRenderEditable, globalize, textOffsetToPosition;
void main() { void main() {
group('canSelectAll', () { group('canSelectAll', () {
...@@ -63,6 +65,445 @@ void main() { ...@@ -63,6 +65,445 @@ void main() {
}); });
}); });
group('Text selection menu overflow (Android)', () {
testWidgets('All menu items show when they fit.', (WidgetTester tester) async {
final TextEditingController controller = TextEditingController(text: 'abc def ghi');
await tester.pumpWidget(MaterialApp(
theme: ThemeData(platform: TargetPlatform.android),
home: Directionality(
textDirection: TextDirection.ltr,
child: MediaQuery(
data: const MediaQueryData(size: Size(800.0, 600.0)),
child: Center(
child: Material(
child: TextField(
controller: controller,
),
),
),
),
),
));
// Initially, the menu isn't shown at all.
expect(find.text('CUT'), findsNothing);
expect(find.text('COPY'), findsNothing);
expect(find.text('PASTE'), findsNothing);
expect(find.text('SELECT ALL'), findsNothing);
expect(find.byType(IconButton), findsNothing);
// Tap to place the cursor in the field, then tap the handle to show the
// selection menu.
await tester.tap(find.byType(TextField));
await tester.pumpAndSettle();
final RenderEditable renderEditable = findRenderEditable(tester);
final List<TextSelectionPoint> endpoints = globalize(
renderEditable.getEndpointsForSelection(controller.selection),
renderEditable,
);
expect(endpoints.length, 1);
final Offset handlePos = endpoints[0].point + const Offset(0.0, 1.0);
await tester.tapAt(handlePos, pointer: 7);
await tester.pump();
expect(find.text('CUT'), findsNothing);
expect(find.text('COPY'), findsNothing);
expect(find.text('PASTE'), findsOneWidget);
expect(find.text('SELECT ALL'), findsOneWidget);
expect(find.byType(IconButton), findsNothing);
// Long press to select a word and show the full selection menu.
final Offset textOffset = textOffsetToPosition(tester, 1);
await tester.longPressAt(textOffset);
await tester.pump();
await tester.pump();
// The full menu is shown without the more button.
expect(find.text('CUT'), findsOneWidget);
expect(find.text('COPY'), findsOneWidget);
expect(find.text('PASTE'), findsOneWidget);
expect(find.text('SELECT ALL'), findsOneWidget);
expect(find.byType(IconButton), findsNothing);
}, skip: isBrowser, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.android }));
testWidgets('When menu items don\'t fit, an overflow menu is used.', (WidgetTester tester) async {
// Set the screen size to more narrow, so that SELECT ALL can't fit.
tester.binding.window.physicalSizeTestValue = const Size(1000, 800);
addTearDown(tester.binding.window.clearPhysicalSizeTestValue);
final TextEditingController controller = TextEditingController(text: 'abc def ghi');
await tester.pumpWidget(MaterialApp(
theme: ThemeData(platform: TargetPlatform.android),
home: Directionality(
textDirection: TextDirection.ltr,
child: MediaQuery(
data: const MediaQueryData(size: Size(800.0, 600.0)),
child: Center(
child: Material(
child: TextField(
controller: controller,
),
),
),
),
),
));
// Initially, the menu isn't shown at all.
expect(find.text('CUT'), findsNothing);
expect(find.text('COPY'), findsNothing);
expect(find.text('PASTE'), findsNothing);
expect(find.text('SELECT ALL'), findsNothing);
expect(find.byType(IconButton), findsNothing);
// Long press to show the menu.
final Offset textOffset = textOffsetToPosition(tester, 1);
await tester.longPressAt(textOffset);
await tester.pumpAndSettle();
// The last button is missing, and a more button is shown.
expect(find.text('CUT'), findsOneWidget);
expect(find.text('COPY'), findsOneWidget);
expect(find.text('PASTE'), findsOneWidget);
expect(find.text('SELECT ALL'), findsNothing);
expect(find.byType(IconButton), findsOneWidget);
final Offset cutOffset = tester.getTopLeft(find.text('CUT'));
// Tapping the button shows the overflow menu.
await tester.tap(find.byType(IconButton));
await tester.pumpAndSettle();
expect(find.text('CUT'), findsNothing);
expect(find.text('COPY'), findsNothing);
expect(find.text('PASTE'), findsNothing);
expect(find.text('SELECT ALL'), findsOneWidget);
expect(find.byType(IconButton), findsOneWidget);
// The back button is at the bottom of the overflow menu.
final Offset selectAllOffset = tester.getTopLeft(find.text('SELECT ALL'));
final Offset moreOffset = tester.getTopLeft(find.byType(IconButton));
expect(moreOffset.dy, greaterThan(selectAllOffset.dy));
// The overflow menu grows upward.
expect(selectAllOffset.dy, lessThan(cutOffset.dy));
// Tapping the back button shows the selection menu again.
expect(find.byType(IconButton), findsOneWidget);
await tester.tap(find.byType(IconButton));
await tester.pumpAndSettle();
expect(find.text('CUT'), findsOneWidget);
expect(find.text('COPY'), findsOneWidget);
expect(find.text('PASTE'), findsOneWidget);
expect(find.text('SELECT ALL'), findsNothing);
expect(find.byType(IconButton), findsOneWidget);
}, skip: isBrowser, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.android }));
testWidgets('A smaller menu bumps more items to the overflow menu.', (WidgetTester tester) async {
// Set the screen size so narrow that only CUT and COPY can fit.
tester.binding.window.physicalSizeTestValue = const Size(800, 800);
addTearDown(tester.binding.window.clearPhysicalSizeTestValue);
final TextEditingController controller = TextEditingController(text: 'abc def ghi');
await tester.pumpWidget(MaterialApp(
theme: ThemeData(platform: TargetPlatform.android),
home: Directionality(
textDirection: TextDirection.ltr,
child: MediaQuery(
data: const MediaQueryData(size: Size(800.0, 600.0)),
child: Center(
child: Material(
child: TextField(
controller: controller,
),
),
),
),
),
));
// Initially, the menu isn't shown at all.
expect(find.text('CUT'), findsNothing);
expect(find.text('COPY'), findsNothing);
expect(find.text('PASTE'), findsNothing);
expect(find.text('SELECT ALL'), findsNothing);
expect(find.byType(IconButton), findsNothing);
// Long press to show the menu.
final Offset textOffset = textOffsetToPosition(tester, 1);
await tester.longPressAt(textOffset);
await tester.pump();
// The last two buttons are missing, and a more button is shown.
expect(find.text('CUT'), findsOneWidget);
expect(find.text('COPY'), findsOneWidget);
expect(find.text('PASTE'), findsNothing);
expect(find.text('SELECT ALL'), findsNothing);
expect(find.byType(IconButton), findsOneWidget);
// Tapping the button shows the overflow menu, which contains both buttons
// missing from the main menu, and a back button.
await tester.tap(find.byType(IconButton));
await tester.pumpAndSettle();
expect(find.text('CUT'), findsNothing);
expect(find.text('COPY'), findsNothing);
expect(find.text('PASTE'), findsOneWidget);
expect(find.text('SELECT ALL'), findsOneWidget);
expect(find.byType(IconButton), findsOneWidget);
// Tapping the back button shows the selection menu again.
await tester.tap(find.byType(IconButton));
await tester.pumpAndSettle();
expect(find.text('CUT'), findsOneWidget);
expect(find.text('COPY'), findsOneWidget);
expect(find.text('PASTE'), findsNothing);
expect(find.text('SELECT ALL'), findsNothing);
expect(find.byType(IconButton), findsOneWidget);
}, skip: isBrowser, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.android }));
testWidgets('When the menu renders below the text, the overflow menu back button is at the top.', (WidgetTester tester) async {
// Set the screen size to more narrow, so that SELECT ALL can't fit.
tester.binding.window.physicalSizeTestValue = const Size(1000, 800);
addTearDown(tester.binding.window.clearPhysicalSizeTestValue);
final TextEditingController controller = TextEditingController(text: 'abc def ghi');
await tester.pumpWidget(MaterialApp(
theme: ThemeData(platform: TargetPlatform.android),
home: Directionality(
textDirection: TextDirection.ltr,
child: MediaQuery(
data: const MediaQueryData(size: Size(800.0, 600.0)),
child: Align(
alignment: Alignment.topLeft,
child: Material(
child: TextField(
controller: controller,
),
),
),
),
),
));
// Initially, the menu isn't shown at all.
expect(find.text('CUT'), findsNothing);
expect(find.text('COPY'), findsNothing);
expect(find.text('PASTE'), findsNothing);
expect(find.text('SELECT ALL'), findsNothing);
expect(find.byType(IconButton), findsNothing);
// Long press to show the menu.
final Offset textOffset = textOffsetToPosition(tester, 1);
await tester.longPressAt(textOffset);
await tester.pump();
// The last button is missing, and a more button is shown.
expect(find.text('CUT'), findsOneWidget);
expect(find.text('COPY'), findsOneWidget);
expect(find.text('PASTE'), findsOneWidget);
expect(find.text('SELECT ALL'), findsNothing);
expect(find.byType(IconButton), findsOneWidget);
final Offset cutOffset = tester.getTopLeft(find.text('CUT'));
// Tapping the button shows the overflow menu.
await tester.tap(find.byType(IconButton));
await tester.pumpAndSettle();
expect(find.text('CUT'), findsNothing);
expect(find.text('COPY'), findsNothing);
expect(find.text('PASTE'), findsNothing);
expect(find.text('SELECT ALL'), findsOneWidget);
expect(find.byType(IconButton), findsOneWidget);
// The back button is at the top of the overflow menu.
final Offset selectAllOffset = tester.getTopLeft(find.text('SELECT ALL'));
final Offset moreOffset = tester.getTopLeft(find.byType(IconButton));
expect(moreOffset.dy, lessThan(selectAllOffset.dy));
// The overflow menu grows downward.
expect(selectAllOffset.dy, greaterThan(cutOffset.dy));
// Tapping the back button shows the selection menu again.
await tester.tap(find.byType(IconButton));
await tester.pumpAndSettle();
expect(find.text('CUT'), findsOneWidget);
expect(find.text('COPY'), findsOneWidget);
expect(find.text('PASTE'), findsOneWidget);
expect(find.text('SELECT ALL'), findsNothing);
expect(find.byType(IconButton), findsOneWidget);
}, skip: isBrowser, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.android }));
testWidgets('When the menu items change, the menu is closed and _closedWidth reset.', (WidgetTester tester) async {
// Set the screen size to more narrow, so that SELECT ALL can't fit.
tester.binding.window.physicalSizeTestValue = const Size(1000, 800);
addTearDown(tester.binding.window.clearPhysicalSizeTestValue);
final TextEditingController controller = TextEditingController(text: 'abc def ghi');
await tester.pumpWidget(MaterialApp(
theme: ThemeData(platform: TargetPlatform.android),
home: Directionality(
textDirection: TextDirection.ltr,
child: MediaQuery(
data: const MediaQueryData(size: Size(800.0, 600.0)),
child: Align(
alignment: Alignment.topLeft,
child: Material(
child: TextField(
controller: controller,
),
),
),
),
),
));
// Initially, the menu isn't shown at all.
expect(find.text('CUT'), findsNothing);
expect(find.text('COPY'), findsNothing);
expect(find.text('PASTE'), findsNothing);
expect(find.text('SELECT ALL'), findsNothing);
expect(find.byType(IconButton), findsNothing);
// Tap to place the cursor and tap again to show the menu without a
// selection.
await tester.tapAt(textOffsetToPosition(tester, 0));
await tester.pumpAndSettle();
final RenderEditable renderEditable = findRenderEditable(tester);
final List<TextSelectionPoint> endpoints = globalize(
renderEditable.getEndpointsForSelection(controller.selection),
renderEditable,
);
expect(endpoints.length, 1);
final Offset handlePos = endpoints[0].point + const Offset(0.0, 1.0);
await tester.tapAt(handlePos, pointer: 7);
await tester.pumpAndSettle();
expect(find.text('CUT'), findsNothing);
expect(find.text('COPY'), findsNothing);
expect(find.text('PASTE'), findsOneWidget);
expect(find.text('SELECT ALL'), findsOneWidget);
expect(find.byType(IconButton), findsNothing);
// Tap SELECT ALL and measure the usual position of CUT, without
// _closedWidth having been used yet.
await tester.tap(find.text('SELECT ALL'));
await tester.pumpAndSettle();
expect(find.text('CUT'), findsOneWidget);
expect(find.text('COPY'), findsOneWidget);
expect(find.text('PASTE'), findsOneWidget);
expect(find.text('SELECT ALL'), findsNothing);
expect(find.byType(IconButton), findsNothing);
final Offset cutOffset = tester.getTopLeft(find.text('CUT'));
// Tap to clear the selection.
await tester.tapAt(textOffsetToPosition(tester, 0));
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.byType(IconButton), findsNothing);
// Long press to show the menu.
await tester.longPressAt(textOffsetToPosition(tester, 1));
await tester.pump();
// The last button is missing, and a more button is shown.
expect(find.text('CUT'), findsOneWidget);
expect(find.text('COPY'), findsOneWidget);
expect(find.text('PASTE'), findsOneWidget);
expect(find.text('SELECT ALL'), findsNothing);
expect(find.byType(IconButton), findsOneWidget);
// Tapping the button shows the overflow menu.
await tester.tap(find.byType(IconButton));
await tester.pumpAndSettle();
expect(find.text('CUT'), findsNothing);
expect(find.text('COPY'), findsNothing);
expect(find.text('PASTE'), findsNothing);
expect(find.text('SELECT ALL'), findsOneWidget);
expect(find.byType(IconButton), findsOneWidget);
// Tapping SELECT ALL changes the menu items so that there is no no longer
// any overflow.
await tester.tap(find.text('SELECT ALL'));
await tester.pumpAndSettle();
expect(find.text('CUT'), findsOneWidget);
expect(find.text('COPY'), findsOneWidget);
expect(find.text('PASTE'), findsOneWidget);
expect(find.text('SELECT ALL'), findsNothing);
expect(find.byType(IconButton), findsNothing);
final Offset newCutOffset = tester.getTopLeft(find.text('CUT'));
expect(newCutOffset, equals(cutOffset));
}, skip: isBrowser, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.android }));
});
group('menu position', () {
testWidgets('When renders below a block of text, menu appears below bottom endpoint', (WidgetTester tester) async {
final TextEditingController controller = TextEditingController(text: 'abc\ndef\nghi\njkl\nmno\npqr');
await tester.pumpWidget(MaterialApp(
theme: ThemeData(platform: TargetPlatform.android),
home: Directionality(
textDirection: TextDirection.ltr,
child: MediaQuery(
data: const MediaQueryData(size: Size(800.0, 600.0)),
child: Align(
alignment: Alignment.topLeft,
child: Material(
child: TextField(
controller: controller,
),
),
),
),
),
));
// Initially, the menu isn't shown at all.
expect(find.text('CUT'), findsNothing);
expect(find.text('COPY'), findsNothing);
expect(find.text('PASTE'), findsNothing);
expect(find.text('SELECT ALL'), findsNothing);
expect(find.byType(IconButton), findsNothing);
// Tap to place the cursor in the field, then tap the handle to show the
// selection menu.
await tester.tap(find.byType(TextField));
await tester.pumpAndSettle();
RenderEditable renderEditable = findRenderEditable(tester);
List<TextSelectionPoint> endpoints = globalize(
renderEditable.getEndpointsForSelection(controller.selection),
renderEditable,
);
expect(endpoints.length, 1);
final Offset handlePos = endpoints[0].point + const Offset(0.0, 1.0);
await tester.tapAt(handlePos, pointer: 7);
await tester.pump();
expect(find.text('CUT'), findsNothing);
expect(find.text('COPY'), findsNothing);
expect(find.text('PASTE'), findsOneWidget);
expect(find.text('SELECT ALL'), findsOneWidget);
expect(find.byType(IconButton), findsNothing);
// Tap to select all.
await tester.tap(find.text('SELECT ALL'));
await tester.pumpAndSettle();
// Only CUT, COPY, and PASTE are shown.
expect(find.text('CUT'), findsOneWidget);
expect(find.text('COPY'), findsOneWidget);
expect(find.text('PASTE'), findsOneWidget);
expect(find.text('SELECT ALL'), findsNothing);
expect(find.byType(IconButton), findsNothing);
// The menu appears below the bottom handle.
renderEditable = findRenderEditable(tester);
endpoints = globalize(
renderEditable.getEndpointsForSelection(controller.selection),
renderEditable,
);
expect(endpoints.length, 2);
final Offset bottomHandlePos = endpoints[1].point;
final Offset cutOffset = tester.getTopLeft(find.text('CUT'));
expect(cutOffset.dy, greaterThan(bottomHandlePos.dy));
}, skip: isBrowser, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.android }));
});
group('material handles', () { group('material handles', () {
testWidgets('draws transparent handle correctly', (WidgetTester tester) async { testWidgets('draws transparent handle correctly', (WidgetTester tester) async {
await tester.pumpWidget(RepaintBoundary( await tester.pumpWidget(RepaintBoundary(
......
...@@ -98,6 +98,9 @@ class MaterialLocalizationAf extends GlobalMaterialLocalizations { ...@@ -98,6 +98,9 @@ class MaterialLocalizationAf extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Maak toe'; String get modalBarrierDismissLabel => 'Maak toe';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Volgende maand'; String get nextMonthTooltip => 'Volgende maand';
...@@ -302,6 +305,9 @@ class MaterialLocalizationAm extends GlobalMaterialLocalizations { ...@@ -302,6 +305,9 @@ class MaterialLocalizationAm extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'አሰናብት'; String get modalBarrierDismissLabel => 'አሰናብት';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'ቀጣይ ወር'; String get nextMonthTooltip => 'ቀጣይ ወር';
...@@ -506,6 +512,9 @@ class MaterialLocalizationAr extends GlobalMaterialLocalizations { ...@@ -506,6 +512,9 @@ class MaterialLocalizationAr extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'رفض'; String get modalBarrierDismissLabel => 'رفض';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'الشهر التالي'; String get nextMonthTooltip => 'الشهر التالي';
...@@ -710,6 +719,9 @@ class MaterialLocalizationAs extends GlobalMaterialLocalizations { ...@@ -710,6 +719,9 @@ class MaterialLocalizationAs extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'অগ্ৰাহ্য কৰক'; String get modalBarrierDismissLabel => 'অগ্ৰাহ্য কৰক';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'পৰৱৰ্তী মাহ'; String get nextMonthTooltip => 'পৰৱৰ্তী মাহ';
...@@ -914,6 +926,9 @@ class MaterialLocalizationAz extends GlobalMaterialLocalizations { ...@@ -914,6 +926,9 @@ class MaterialLocalizationAz extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'İmtina edin'; String get modalBarrierDismissLabel => 'İmtina edin';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Növbəti ay'; String get nextMonthTooltip => 'Növbəti ay';
...@@ -1118,6 +1133,9 @@ class MaterialLocalizationBe extends GlobalMaterialLocalizations { ...@@ -1118,6 +1133,9 @@ class MaterialLocalizationBe extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Адхіліць'; String get modalBarrierDismissLabel => 'Адхіліць';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Наступны месяц'; String get nextMonthTooltip => 'Наступны месяц';
...@@ -1322,6 +1340,9 @@ class MaterialLocalizationBg extends GlobalMaterialLocalizations { ...@@ -1322,6 +1340,9 @@ class MaterialLocalizationBg extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Отхвърляне'; String get modalBarrierDismissLabel => 'Отхвърляне';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Следващият месец'; String get nextMonthTooltip => 'Следващият месец';
...@@ -1526,6 +1547,9 @@ class MaterialLocalizationBn extends GlobalMaterialLocalizations { ...@@ -1526,6 +1547,9 @@ class MaterialLocalizationBn extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'খারিজ করুন'; String get modalBarrierDismissLabel => 'খারিজ করুন';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'পরের মাস'; String get nextMonthTooltip => 'পরের মাস';
...@@ -1730,6 +1754,9 @@ class MaterialLocalizationBs extends GlobalMaterialLocalizations { ...@@ -1730,6 +1754,9 @@ class MaterialLocalizationBs extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Odbaci'; String get modalBarrierDismissLabel => 'Odbaci';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Sljedeći mjesec'; String get nextMonthTooltip => 'Sljedeći mjesec';
...@@ -1934,6 +1961,9 @@ class MaterialLocalizationCa extends GlobalMaterialLocalizations { ...@@ -1934,6 +1961,9 @@ class MaterialLocalizationCa extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Ignora'; String get modalBarrierDismissLabel => 'Ignora';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Mes següent'; String get nextMonthTooltip => 'Mes següent';
...@@ -2138,6 +2168,9 @@ class MaterialLocalizationCs extends GlobalMaterialLocalizations { ...@@ -2138,6 +2168,9 @@ class MaterialLocalizationCs extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Zavřít'; String get modalBarrierDismissLabel => 'Zavřít';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Další měsíc'; String get nextMonthTooltip => 'Další měsíc';
...@@ -2342,6 +2375,9 @@ class MaterialLocalizationDa extends GlobalMaterialLocalizations { ...@@ -2342,6 +2375,9 @@ class MaterialLocalizationDa extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Afvis'; String get modalBarrierDismissLabel => 'Afvis';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Næste måned'; String get nextMonthTooltip => 'Næste måned';
...@@ -2546,6 +2582,9 @@ class MaterialLocalizationDe extends GlobalMaterialLocalizations { ...@@ -2546,6 +2582,9 @@ class MaterialLocalizationDe extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Schließen'; String get modalBarrierDismissLabel => 'Schließen';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Nächster Monat'; String get nextMonthTooltip => 'Nächster Monat';
...@@ -2780,6 +2819,9 @@ class MaterialLocalizationEl extends GlobalMaterialLocalizations { ...@@ -2780,6 +2819,9 @@ class MaterialLocalizationEl extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Παράβλεψη'; String get modalBarrierDismissLabel => 'Παράβλεψη';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Επόμενος μήνας'; String get nextMonthTooltip => 'Επόμενος μήνας';
...@@ -2984,6 +3026,9 @@ class MaterialLocalizationEn extends GlobalMaterialLocalizations { ...@@ -2984,6 +3026,9 @@ class MaterialLocalizationEn extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Dismiss'; String get modalBarrierDismissLabel => 'Dismiss';
@override
String get moreButtonTooltip => 'More';
@override @override
String get nextMonthTooltip => 'Next month'; String get nextMonthTooltip => 'Next month';
...@@ -3533,6 +3578,9 @@ class MaterialLocalizationEs extends GlobalMaterialLocalizations { ...@@ -3533,6 +3578,9 @@ class MaterialLocalizationEs extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Cerrar'; String get modalBarrierDismissLabel => 'Cerrar';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Mes siguiente'; String get nextMonthTooltip => 'Mes siguiente';
...@@ -5360,6 +5408,9 @@ class MaterialLocalizationEt extends GlobalMaterialLocalizations { ...@@ -5360,6 +5408,9 @@ class MaterialLocalizationEt extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Loobu'; String get modalBarrierDismissLabel => 'Loobu';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Järgmine kuu'; String get nextMonthTooltip => 'Järgmine kuu';
...@@ -5564,6 +5615,9 @@ class MaterialLocalizationEu extends GlobalMaterialLocalizations { ...@@ -5564,6 +5615,9 @@ class MaterialLocalizationEu extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Baztertu'; String get modalBarrierDismissLabel => 'Baztertu';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Hurrengo hilabetea'; String get nextMonthTooltip => 'Hurrengo hilabetea';
...@@ -5768,6 +5822,9 @@ class MaterialLocalizationFa extends GlobalMaterialLocalizations { ...@@ -5768,6 +5822,9 @@ class MaterialLocalizationFa extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'نپذیرفتن'; String get modalBarrierDismissLabel => 'نپذیرفتن';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'ماه بعد'; String get nextMonthTooltip => 'ماه بعد';
...@@ -5972,6 +6029,9 @@ class MaterialLocalizationFi extends GlobalMaterialLocalizations { ...@@ -5972,6 +6029,9 @@ class MaterialLocalizationFi extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Ohita'; String get modalBarrierDismissLabel => 'Ohita';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Seuraava kuukausi'; String get nextMonthTooltip => 'Seuraava kuukausi';
...@@ -6176,6 +6236,9 @@ class MaterialLocalizationFil extends GlobalMaterialLocalizations { ...@@ -6176,6 +6236,9 @@ class MaterialLocalizationFil extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'I-dismiss'; String get modalBarrierDismissLabel => 'I-dismiss';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Susunod na buwan'; String get nextMonthTooltip => 'Susunod na buwan';
...@@ -6380,6 +6443,9 @@ class MaterialLocalizationFr extends GlobalMaterialLocalizations { ...@@ -6380,6 +6443,9 @@ class MaterialLocalizationFr extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Ignorer'; String get modalBarrierDismissLabel => 'Ignorer';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Mois suivant'; String get nextMonthTooltip => 'Mois suivant';
...@@ -6638,6 +6704,9 @@ class MaterialLocalizationGl extends GlobalMaterialLocalizations { ...@@ -6638,6 +6704,9 @@ class MaterialLocalizationGl extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Ignorar'; String get modalBarrierDismissLabel => 'Ignorar';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Mes seguinte'; String get nextMonthTooltip => 'Mes seguinte';
...@@ -6842,6 +6911,9 @@ class MaterialLocalizationGsw extends GlobalMaterialLocalizations { ...@@ -6842,6 +6911,9 @@ class MaterialLocalizationGsw extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Schließen'; String get modalBarrierDismissLabel => 'Schließen';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Nächster Monat'; String get nextMonthTooltip => 'Nächster Monat';
...@@ -7046,6 +7118,9 @@ class MaterialLocalizationGu extends GlobalMaterialLocalizations { ...@@ -7046,6 +7118,9 @@ class MaterialLocalizationGu extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'છોડી દો'; String get modalBarrierDismissLabel => 'છોડી દો';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'આગલો મહિનો'; String get nextMonthTooltip => 'આગલો મહિનો';
...@@ -7250,6 +7325,9 @@ class MaterialLocalizationHe extends GlobalMaterialLocalizations { ...@@ -7250,6 +7325,9 @@ class MaterialLocalizationHe extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'סגירה'; String get modalBarrierDismissLabel => 'סגירה';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'החודש הבא'; String get nextMonthTooltip => 'החודש הבא';
...@@ -7454,6 +7532,9 @@ class MaterialLocalizationHi extends GlobalMaterialLocalizations { ...@@ -7454,6 +7532,9 @@ class MaterialLocalizationHi extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'खारिज करें'; String get modalBarrierDismissLabel => 'खारिज करें';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'अगला महीना'; String get nextMonthTooltip => 'अगला महीना';
...@@ -7658,6 +7739,9 @@ class MaterialLocalizationHr extends GlobalMaterialLocalizations { ...@@ -7658,6 +7739,9 @@ class MaterialLocalizationHr extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Odbaci'; String get modalBarrierDismissLabel => 'Odbaci';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Sljedeći mjesec'; String get nextMonthTooltip => 'Sljedeći mjesec';
...@@ -7862,6 +7946,9 @@ class MaterialLocalizationHu extends GlobalMaterialLocalizations { ...@@ -7862,6 +7946,9 @@ class MaterialLocalizationHu extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Elvetés'; String get modalBarrierDismissLabel => 'Elvetés';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Következő hónap'; String get nextMonthTooltip => 'Következő hónap';
...@@ -8066,6 +8153,9 @@ class MaterialLocalizationHy extends GlobalMaterialLocalizations { ...@@ -8066,6 +8153,9 @@ class MaterialLocalizationHy extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Փակել'; String get modalBarrierDismissLabel => 'Փակել';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Հաջորդ ամիս'; String get nextMonthTooltip => 'Հաջորդ ամիս';
...@@ -8270,6 +8360,9 @@ class MaterialLocalizationId extends GlobalMaterialLocalizations { ...@@ -8270,6 +8360,9 @@ class MaterialLocalizationId extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Tutup'; String get modalBarrierDismissLabel => 'Tutup';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Bulan berikutnya'; String get nextMonthTooltip => 'Bulan berikutnya';
...@@ -8474,6 +8567,9 @@ class MaterialLocalizationIs extends GlobalMaterialLocalizations { ...@@ -8474,6 +8567,9 @@ class MaterialLocalizationIs extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Hunsa'; String get modalBarrierDismissLabel => 'Hunsa';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Næsti mánuður'; String get nextMonthTooltip => 'Næsti mánuður';
...@@ -8678,6 +8774,9 @@ class MaterialLocalizationIt extends GlobalMaterialLocalizations { ...@@ -8678,6 +8774,9 @@ class MaterialLocalizationIt extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Ignora'; String get modalBarrierDismissLabel => 'Ignora';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Mese successivo'; String get nextMonthTooltip => 'Mese successivo';
...@@ -8882,6 +8981,9 @@ class MaterialLocalizationJa extends GlobalMaterialLocalizations { ...@@ -8882,6 +8981,9 @@ class MaterialLocalizationJa extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => '閉じる'; String get modalBarrierDismissLabel => '閉じる';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => '来月'; String get nextMonthTooltip => '来月';
...@@ -9086,6 +9188,9 @@ class MaterialLocalizationKa extends GlobalMaterialLocalizations { ...@@ -9086,6 +9188,9 @@ class MaterialLocalizationKa extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'დახურვა'; String get modalBarrierDismissLabel => 'დახურვა';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'შემდეგი თვე'; String get nextMonthTooltip => 'შემდეგი თვე';
...@@ -9290,6 +9395,9 @@ class MaterialLocalizationKk extends GlobalMaterialLocalizations { ...@@ -9290,6 +9395,9 @@ class MaterialLocalizationKk extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Жабу'; String get modalBarrierDismissLabel => 'Жабу';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Келесі ай'; String get nextMonthTooltip => 'Келесі ай';
...@@ -9494,6 +9602,9 @@ class MaterialLocalizationKm extends GlobalMaterialLocalizations { ...@@ -9494,6 +9602,9 @@ class MaterialLocalizationKm extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'ច្រាន​ចោល'; String get modalBarrierDismissLabel => 'ច្រាន​ចោល';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'ខែ​​ក្រោយ'; String get nextMonthTooltip => 'ខែ​​ក្រោយ';
...@@ -9698,6 +9809,9 @@ class MaterialLocalizationKn extends GlobalMaterialLocalizations { ...@@ -9698,6 +9809,9 @@ class MaterialLocalizationKn extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => '\u{cb5}\u{c9c}\u{cbe}\u{c97}\u{cca}\u{cb3}\u{cbf}\u{cb8}\u{cbf}'; String get modalBarrierDismissLabel => '\u{cb5}\u{c9c}\u{cbe}\u{c97}\u{cca}\u{cb3}\u{cbf}\u{cb8}\u{cbf}';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => '\u{cae}\u{cc1}\u{c82}\u{ca6}\u{cbf}\u{ca8}\u{20}\u{ca4}\u{cbf}\u{c82}\u{c97}\u{cb3}\u{cc1}'; String get nextMonthTooltip => '\u{cae}\u{cc1}\u{c82}\u{ca6}\u{cbf}\u{ca8}\u{20}\u{ca4}\u{cbf}\u{c82}\u{c97}\u{cb3}\u{cc1}';
...@@ -9902,6 +10016,9 @@ class MaterialLocalizationKo extends GlobalMaterialLocalizations { ...@@ -9902,6 +10016,9 @@ class MaterialLocalizationKo extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => '닫기'; String get modalBarrierDismissLabel => '닫기';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => '다음 달'; String get nextMonthTooltip => '다음 달';
...@@ -10106,6 +10223,9 @@ class MaterialLocalizationKy extends GlobalMaterialLocalizations { ...@@ -10106,6 +10223,9 @@ class MaterialLocalizationKy extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Жабуу'; String get modalBarrierDismissLabel => 'Жабуу';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Кийинки ай'; String get nextMonthTooltip => 'Кийинки ай';
...@@ -10310,6 +10430,9 @@ class MaterialLocalizationLo extends GlobalMaterialLocalizations { ...@@ -10310,6 +10430,9 @@ class MaterialLocalizationLo extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'ປິດໄວ້'; String get modalBarrierDismissLabel => 'ປິດໄວ້';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'ເດືອນໜ້າ'; String get nextMonthTooltip => 'ເດືອນໜ້າ';
...@@ -10514,6 +10637,9 @@ class MaterialLocalizationLt extends GlobalMaterialLocalizations { ...@@ -10514,6 +10637,9 @@ class MaterialLocalizationLt extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Atsisakyti'; String get modalBarrierDismissLabel => 'Atsisakyti';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Kitas mėnuo'; String get nextMonthTooltip => 'Kitas mėnuo';
...@@ -10718,6 +10844,9 @@ class MaterialLocalizationLv extends GlobalMaterialLocalizations { ...@@ -10718,6 +10844,9 @@ class MaterialLocalizationLv extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Nerādīt'; String get modalBarrierDismissLabel => 'Nerādīt';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Nākamais mēnesis'; String get nextMonthTooltip => 'Nākamais mēnesis';
...@@ -10922,6 +11051,9 @@ class MaterialLocalizationMk extends GlobalMaterialLocalizations { ...@@ -10922,6 +11051,9 @@ class MaterialLocalizationMk extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Отфрли'; String get modalBarrierDismissLabel => 'Отфрли';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Следниот месец'; String get nextMonthTooltip => 'Следниот месец';
...@@ -11126,6 +11258,9 @@ class MaterialLocalizationMl extends GlobalMaterialLocalizations { ...@@ -11126,6 +11258,9 @@ class MaterialLocalizationMl extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'നിരസിക്കുക'; String get modalBarrierDismissLabel => 'നിരസിക്കുക';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'അടുത്ത മാസം'; String get nextMonthTooltip => 'അടുത്ത മാസം';
...@@ -11330,6 +11465,9 @@ class MaterialLocalizationMn extends GlobalMaterialLocalizations { ...@@ -11330,6 +11465,9 @@ class MaterialLocalizationMn extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Үл хэрэгсэх'; String get modalBarrierDismissLabel => 'Үл хэрэгсэх';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Дараах сар'; String get nextMonthTooltip => 'Дараах сар';
...@@ -11534,6 +11672,9 @@ class MaterialLocalizationMr extends GlobalMaterialLocalizations { ...@@ -11534,6 +11672,9 @@ class MaterialLocalizationMr extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'डिसमिस करा'; String get modalBarrierDismissLabel => 'डिसमिस करा';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'पुढील महिना'; String get nextMonthTooltip => 'पुढील महिना';
...@@ -11738,6 +11879,9 @@ class MaterialLocalizationMs extends GlobalMaterialLocalizations { ...@@ -11738,6 +11879,9 @@ class MaterialLocalizationMs extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Tolak'; String get modalBarrierDismissLabel => 'Tolak';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Bulan depan'; String get nextMonthTooltip => 'Bulan depan';
...@@ -11942,6 +12086,9 @@ class MaterialLocalizationMy extends GlobalMaterialLocalizations { ...@@ -11942,6 +12086,9 @@ class MaterialLocalizationMy extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'ပယ်ရန်'; String get modalBarrierDismissLabel => 'ပယ်ရန်';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'နောက်လ'; String get nextMonthTooltip => 'နောက်လ';
...@@ -12146,6 +12293,9 @@ class MaterialLocalizationNb extends GlobalMaterialLocalizations { ...@@ -12146,6 +12293,9 @@ class MaterialLocalizationNb extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Avvis'; String get modalBarrierDismissLabel => 'Avvis';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Neste måned'; String get nextMonthTooltip => 'Neste måned';
...@@ -12350,6 +12500,9 @@ class MaterialLocalizationNe extends GlobalMaterialLocalizations { ...@@ -12350,6 +12500,9 @@ class MaterialLocalizationNe extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'खारेज गर्नुहोस्'; String get modalBarrierDismissLabel => 'खारेज गर्नुहोस्';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'अर्को महिना'; String get nextMonthTooltip => 'अर्को महिना';
...@@ -12554,6 +12707,9 @@ class MaterialLocalizationNl extends GlobalMaterialLocalizations { ...@@ -12554,6 +12707,9 @@ class MaterialLocalizationNl extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Sluiten'; String get modalBarrierDismissLabel => 'Sluiten';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Volgende maand'; String get nextMonthTooltip => 'Volgende maand';
...@@ -12758,6 +12914,9 @@ class MaterialLocalizationOr extends GlobalMaterialLocalizations { ...@@ -12758,6 +12914,9 @@ class MaterialLocalizationOr extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'ଖାରଜ କରନ୍ତୁ'; String get modalBarrierDismissLabel => 'ଖାରଜ କରନ୍ତୁ';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'ପରବର୍ତ୍ତୀ ମାସ'; String get nextMonthTooltip => 'ପରବର୍ତ୍ତୀ ମାସ';
...@@ -12962,6 +13121,9 @@ class MaterialLocalizationPa extends GlobalMaterialLocalizations { ...@@ -12962,6 +13121,9 @@ class MaterialLocalizationPa extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'ਖਾਰਜ ਕਰੋ'; String get modalBarrierDismissLabel => 'ਖਾਰਜ ਕਰੋ';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'ਅਗਲਾ ਮਹੀਨਾ'; String get nextMonthTooltip => 'ਅਗਲਾ ਮਹੀਨਾ';
...@@ -13166,6 +13328,9 @@ class MaterialLocalizationPl extends GlobalMaterialLocalizations { ...@@ -13166,6 +13328,9 @@ class MaterialLocalizationPl extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Zamknij'; String get modalBarrierDismissLabel => 'Zamknij';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Następny miesiąc'; String get nextMonthTooltip => 'Następny miesiąc';
...@@ -13370,6 +13535,9 @@ class MaterialLocalizationPs extends GlobalMaterialLocalizations { ...@@ -13370,6 +13535,9 @@ class MaterialLocalizationPs extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'رد کړه'; String get modalBarrierDismissLabel => 'رد کړه';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'بله میاشت'; String get nextMonthTooltip => 'بله میاشت';
...@@ -13574,6 +13742,9 @@ class MaterialLocalizationPt extends GlobalMaterialLocalizations { ...@@ -13574,6 +13742,9 @@ class MaterialLocalizationPt extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Dispensar'; String get modalBarrierDismissLabel => 'Dispensar';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Próximo mês'; String get nextMonthTooltip => 'Próximo mês';
...@@ -13856,6 +14027,9 @@ class MaterialLocalizationRo extends GlobalMaterialLocalizations { ...@@ -13856,6 +14027,9 @@ class MaterialLocalizationRo extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Închideți'; String get modalBarrierDismissLabel => 'Închideți';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Luna viitoare'; String get nextMonthTooltip => 'Luna viitoare';
...@@ -14060,6 +14234,9 @@ class MaterialLocalizationRu extends GlobalMaterialLocalizations { ...@@ -14060,6 +14234,9 @@ class MaterialLocalizationRu extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Закрыть'; String get modalBarrierDismissLabel => 'Закрыть';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Следующий месяц'; String get nextMonthTooltip => 'Следующий месяц';
...@@ -14264,6 +14441,9 @@ class MaterialLocalizationSi extends GlobalMaterialLocalizations { ...@@ -14264,6 +14441,9 @@ class MaterialLocalizationSi extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'ඉවත ලන්න'; String get modalBarrierDismissLabel => 'ඉවත ලන්න';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'ඊළඟ මාසය'; String get nextMonthTooltip => 'ඊළඟ මාසය';
...@@ -14468,6 +14648,9 @@ class MaterialLocalizationSk extends GlobalMaterialLocalizations { ...@@ -14468,6 +14648,9 @@ class MaterialLocalizationSk extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Odmietnuť'; String get modalBarrierDismissLabel => 'Odmietnuť';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Budúci mesiac'; String get nextMonthTooltip => 'Budúci mesiac';
...@@ -14672,6 +14855,9 @@ class MaterialLocalizationSl extends GlobalMaterialLocalizations { ...@@ -14672,6 +14855,9 @@ class MaterialLocalizationSl extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Opusti'; String get modalBarrierDismissLabel => 'Opusti';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Naslednji mesec'; String get nextMonthTooltip => 'Naslednji mesec';
...@@ -14876,6 +15062,9 @@ class MaterialLocalizationSq extends GlobalMaterialLocalizations { ...@@ -14876,6 +15062,9 @@ class MaterialLocalizationSq extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Hiq'; String get modalBarrierDismissLabel => 'Hiq';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Muaji i ardhshëm'; String get nextMonthTooltip => 'Muaji i ardhshëm';
...@@ -15080,6 +15269,9 @@ class MaterialLocalizationSr extends GlobalMaterialLocalizations { ...@@ -15080,6 +15269,9 @@ class MaterialLocalizationSr extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Одбаци'; String get modalBarrierDismissLabel => 'Одбаци';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Следећи месец'; String get nextMonthTooltip => 'Следећи месец';
...@@ -15488,6 +15680,9 @@ class MaterialLocalizationSv extends GlobalMaterialLocalizations { ...@@ -15488,6 +15680,9 @@ class MaterialLocalizationSv extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Stäng'; String get modalBarrierDismissLabel => 'Stäng';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Nästa månad'; String get nextMonthTooltip => 'Nästa månad';
...@@ -15692,6 +15887,9 @@ class MaterialLocalizationSw extends GlobalMaterialLocalizations { ...@@ -15692,6 +15887,9 @@ class MaterialLocalizationSw extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Ondoa'; String get modalBarrierDismissLabel => 'Ondoa';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Mwezi ujao'; String get nextMonthTooltip => 'Mwezi ujao';
...@@ -15896,6 +16094,9 @@ class MaterialLocalizationTa extends GlobalMaterialLocalizations { ...@@ -15896,6 +16094,9 @@ class MaterialLocalizationTa extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'நிராகரிக்கும்'; String get modalBarrierDismissLabel => 'நிராகரிக்கும்';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'அடுத்த மாதம்'; String get nextMonthTooltip => 'அடுத்த மாதம்';
...@@ -16100,6 +16301,9 @@ class MaterialLocalizationTe extends GlobalMaterialLocalizations { ...@@ -16100,6 +16301,9 @@ class MaterialLocalizationTe extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'విస్మరించు'; String get modalBarrierDismissLabel => 'విస్మరించు';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'తర్వాత నెల'; String get nextMonthTooltip => 'తర్వాత నెల';
...@@ -16304,6 +16508,9 @@ class MaterialLocalizationTh extends GlobalMaterialLocalizations { ...@@ -16304,6 +16508,9 @@ class MaterialLocalizationTh extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'ปิด'; String get modalBarrierDismissLabel => 'ปิด';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'เดือนหน้า'; String get nextMonthTooltip => 'เดือนหน้า';
...@@ -16508,6 +16715,9 @@ class MaterialLocalizationTl extends GlobalMaterialLocalizations { ...@@ -16508,6 +16715,9 @@ class MaterialLocalizationTl extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'I-dismiss'; String get modalBarrierDismissLabel => 'I-dismiss';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Susunod na buwan'; String get nextMonthTooltip => 'Susunod na buwan';
...@@ -16712,6 +16922,9 @@ class MaterialLocalizationTr extends GlobalMaterialLocalizations { ...@@ -16712,6 +16922,9 @@ class MaterialLocalizationTr extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Kapat'; String get modalBarrierDismissLabel => 'Kapat';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Gelecek ay'; String get nextMonthTooltip => 'Gelecek ay';
...@@ -16916,6 +17129,9 @@ class MaterialLocalizationUk extends GlobalMaterialLocalizations { ...@@ -16916,6 +17129,9 @@ class MaterialLocalizationUk extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Закрити'; String get modalBarrierDismissLabel => 'Закрити';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Наступний місяць'; String get nextMonthTooltip => 'Наступний місяць';
...@@ -17120,6 +17336,9 @@ class MaterialLocalizationUr extends GlobalMaterialLocalizations { ...@@ -17120,6 +17336,9 @@ class MaterialLocalizationUr extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'برخاست کریں'; String get modalBarrierDismissLabel => 'برخاست کریں';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'اگلا مہینہ'; String get nextMonthTooltip => 'اگلا مہینہ';
...@@ -17324,6 +17543,9 @@ class MaterialLocalizationUz extends GlobalMaterialLocalizations { ...@@ -17324,6 +17543,9 @@ class MaterialLocalizationUz extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Yopish'; String get modalBarrierDismissLabel => 'Yopish';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Keyingi oy'; String get nextMonthTooltip => 'Keyingi oy';
...@@ -17528,6 +17750,9 @@ class MaterialLocalizationVi extends GlobalMaterialLocalizations { ...@@ -17528,6 +17750,9 @@ class MaterialLocalizationVi extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Bỏ qua'; String get modalBarrierDismissLabel => 'Bỏ qua';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Tháng sau'; String get nextMonthTooltip => 'Tháng sau';
...@@ -17732,6 +17957,9 @@ class MaterialLocalizationZh extends GlobalMaterialLocalizations { ...@@ -17732,6 +17957,9 @@ class MaterialLocalizationZh extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => '关闭'; String get modalBarrierDismissLabel => '关闭';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => '下个月'; String get nextMonthTooltip => '下个月';
...@@ -18209,6 +18437,9 @@ class MaterialLocalizationZu extends GlobalMaterialLocalizations { ...@@ -18209,6 +18437,9 @@ class MaterialLocalizationZu extends GlobalMaterialLocalizations {
@override @override
String get modalBarrierDismissLabel => 'Cashisa'; String get modalBarrierDismissLabel => 'Cashisa';
@override
String get moreButtonTooltip => 'TBD';
@override @override
String get nextMonthTooltip => 'Inyanga ezayo'; String get nextMonthTooltip => 'Inyanga ezayo';
......
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"collapsedIconTapHint": "Vou uit", "collapsedIconTapHint": "Vou uit",
"remainingTextFieldCharacterCountOne": "1 karakter oor", "remainingTextFieldCharacterCountOne": "1 karakter oor",
"remainingTextFieldCharacterCountOther": "$remainingCount karakters oor", "remainingTextFieldCharacterCountOther": "$remainingCount karakters oor",
"refreshIndicatorSemanticLabel": "Herlaai" "refreshIndicatorSemanticLabel": "Herlaai",
"moreButtonTooltip": "TBD"
} }
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"collapsedIconTapHint": "ዘርጋ", "collapsedIconTapHint": "ዘርጋ",
"remainingTextFieldCharacterCountOne": "1 ቁምፊ ይቀራል", "remainingTextFieldCharacterCountOne": "1 ቁምፊ ይቀራል",
"remainingTextFieldCharacterCountOther": "$remainingCount ቁምፊዎች ይቀራሉ", "remainingTextFieldCharacterCountOther": "$remainingCount ቁምፊዎች ይቀራሉ",
"refreshIndicatorSemanticLabel": "አድስ" "refreshIndicatorSemanticLabel": "አድስ",
"moreButtonTooltip": "TBD"
} }
...@@ -58,5 +58,6 @@ ...@@ -58,5 +58,6 @@
"remainingTextFieldCharacterCountZero": "لا أحرف متبقية", "remainingTextFieldCharacterCountZero": "لا أحرف متبقية",
"remainingTextFieldCharacterCountOne": "حرف واحد متبقٍ", "remainingTextFieldCharacterCountOne": "حرف واحد متبقٍ",
"remainingTextFieldCharacterCountOther": "$remainingCount حرف متبقٍ", "remainingTextFieldCharacterCountOther": "$remainingCount حرف متبقٍ",
"refreshIndicatorSemanticLabel": "إعادة تحميل" "refreshIndicatorSemanticLabel": "إعادة تحميل",
"moreButtonTooltip": "TBD"
} }
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"collapsedIconTapHint": "বিস্তাৰ কৰক", "collapsedIconTapHint": "বিস্তাৰ কৰক",
"remainingTextFieldCharacterCountOne": "১টা বর্ণ বাকী আছে", "remainingTextFieldCharacterCountOne": "১টা বর্ণ বাকী আছে",
"remainingTextFieldCharacterCountOther": "$remainingCountটা বর্ণ বাকী আছে", "remainingTextFieldCharacterCountOther": "$remainingCountটা বর্ণ বাকী আছে",
"refreshIndicatorSemanticLabel": "ৰিফ্ৰেশ্ব কৰক" "refreshIndicatorSemanticLabel": "ৰিফ্ৰেশ্ব কৰক",
"moreButtonTooltip": "TBD"
} }
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"collapsedIconTapHint": "Genişləndirin", "collapsedIconTapHint": "Genişləndirin",
"remainingTextFieldCharacterCountOne": "1 simvol qalır", "remainingTextFieldCharacterCountOne": "1 simvol qalır",
"remainingTextFieldCharacterCountOther": "$remainingCount simvol qalır", "remainingTextFieldCharacterCountOther": "$remainingCount simvol qalır",
"refreshIndicatorSemanticLabel": "Yeniləyin" "refreshIndicatorSemanticLabel": "Yeniləyin",
"moreButtonTooltip": "TBD"
} }
...@@ -54,5 +54,6 @@ ...@@ -54,5 +54,6 @@
"collapsedIconTapHint": "Разгарнуць", "collapsedIconTapHint": "Разгарнуць",
"remainingTextFieldCharacterCountOne": "Застаўся 1 сімвал", "remainingTextFieldCharacterCountOne": "Застаўся 1 сімвал",
"remainingTextFieldCharacterCountOther": "Засталося $remainingCount сімвала", "remainingTextFieldCharacterCountOther": "Засталося $remainingCount сімвала",
"refreshIndicatorSemanticLabel": "Абнавіць" "refreshIndicatorSemanticLabel": "Абнавіць",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "Остава 1 знак", "remainingTextFieldCharacterCountOne": "Остава 1 знак",
"remainingTextFieldCharacterCountOther": "Остават $remainingCount знака", "remainingTextFieldCharacterCountOther": "Остават $remainingCount знака",
"refreshIndicatorSemanticLabel": "Опресняване" "refreshIndicatorSemanticLabel": "Опресняване",
"moreButtonTooltip": "TBD"
} }
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"collapsedIconTapHint": "বড় করুন", "collapsedIconTapHint": "বড় করুন",
"remainingTextFieldCharacterCountOne": "আর ১টি অক্ষর লেখা যাবে", "remainingTextFieldCharacterCountOne": "আর ১টি অক্ষর লেখা যাবে",
"remainingTextFieldCharacterCountOther": "আর $remainingCountটি অক্ষর লেখা যাবে", "remainingTextFieldCharacterCountOther": "আর $remainingCountটি অক্ষর লেখা যাবে",
"refreshIndicatorSemanticLabel": "রিফ্রেশ করুন" "refreshIndicatorSemanticLabel": "রিফ্রেশ করুন",
"moreButtonTooltip": "TBD"
} }
...@@ -53,5 +53,6 @@ ...@@ -53,5 +53,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "Još jedan znak", "remainingTextFieldCharacterCountOne": "Još jedan znak",
"remainingTextFieldCharacterCountOther": "Još $remainingCount znakova", "remainingTextFieldCharacterCountOther": "Još $remainingCount znakova",
"refreshIndicatorSemanticLabel": "Osvježi" "refreshIndicatorSemanticLabel": "Osvježi",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "Queda 1 caràcter", "remainingTextFieldCharacterCountOne": "Queda 1 caràcter",
"remainingTextFieldCharacterCountOther": "Queden $remainingCount caràcters", "remainingTextFieldCharacterCountOther": "Queden $remainingCount caràcters",
"refreshIndicatorSemanticLabel": "Actualitza" "refreshIndicatorSemanticLabel": "Actualitza",
"moreButtonTooltip": "TBD"
} }
...@@ -55,5 +55,6 @@ ...@@ -55,5 +55,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "Zbývá 1 znak", "remainingTextFieldCharacterCountOne": "Zbývá 1 znak",
"remainingTextFieldCharacterCountOther": "Zbývá $remainingCount znaků", "remainingTextFieldCharacterCountOther": "Zbývá $remainingCount znaků",
"refreshIndicatorSemanticLabel": "Obnovit" "refreshIndicatorSemanticLabel": "Obnovit",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "Ét tegn tilbage", "remainingTextFieldCharacterCountOne": "Ét tegn tilbage",
"remainingTextFieldCharacterCountOther": "$remainingCount tegn tilbage", "remainingTextFieldCharacterCountOther": "$remainingCount tegn tilbage",
"refreshIndicatorSemanticLabel": "Opdater" "refreshIndicatorSemanticLabel": "Opdater",
"moreButtonTooltip": "TBD"
} }
...@@ -52,5 +52,6 @@ ...@@ -52,5 +52,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "Noch 1 Zeichen", "remainingTextFieldCharacterCountOne": "Noch 1 Zeichen",
"remainingTextFieldCharacterCountOther": "Noch $remainingCount Zeichen", "remainingTextFieldCharacterCountOther": "Noch $remainingCount Zeichen",
"refreshIndicatorSemanticLabel": "Aktualisieren" "refreshIndicatorSemanticLabel": "Aktualisieren",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "απομένει 1 χαρακτήρας", "remainingTextFieldCharacterCountOne": "απομένει 1 χαρακτήρας",
"remainingTextFieldCharacterCountOther": "απομένουν $remainingCount χαρακτήρες", "remainingTextFieldCharacterCountOther": "απομένουν $remainingCount χαρακτήρες",
"refreshIndicatorSemanticLabel": "Ανανέωση" "refreshIndicatorSemanticLabel": "Ανανέωση",
"moreButtonTooltip": "TBD"
} }
...@@ -31,6 +31,11 @@ ...@@ -31,6 +31,11 @@
"description": "The tooltip for the delete button of chips." "description": "The tooltip for the delete button of chips."
}, },
"moreButtonTooltip": "More",
"@moreButtonTooltip": {
"description": "The tooltip for the more button in the text selection menu, which shows the overflowing menu items."
},
"nextMonthTooltip": "Next month", "nextMonthTooltip": "Next month",
"@nextMonthTooltip": { "@nextMonthTooltip": {
"description": "The tooltip for the month picker's 'next month' button." "description": "The tooltip for the month picker's 'next month' button."
......
...@@ -52,5 +52,6 @@ ...@@ -52,5 +52,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "Queda 1 carácter.", "remainingTextFieldCharacterCountOne": "Queda 1 carácter.",
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres", "remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres",
"refreshIndicatorSemanticLabel": "Actualizar" "refreshIndicatorSemanticLabel": "Actualizar",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "Jäänud on 1 tähemärk", "remainingTextFieldCharacterCountOne": "Jäänud on 1 tähemärk",
"remainingTextFieldCharacterCountOther": "Jäänud on $remainingCount tähemärki", "remainingTextFieldCharacterCountOther": "Jäänud on $remainingCount tähemärki",
"refreshIndicatorSemanticLabel": "Värskendamine" "refreshIndicatorSemanticLabel": "Värskendamine",
"moreButtonTooltip": "TBD"
} }
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"collapsedIconTapHint": "Zabaldu", "collapsedIconTapHint": "Zabaldu",
"remainingTextFieldCharacterCountOne": "1 karaktere geratzen da", "remainingTextFieldCharacterCountOne": "1 karaktere geratzen da",
"remainingTextFieldCharacterCountOther": "$remainingCount karaktere geratzen dira", "remainingTextFieldCharacterCountOther": "$remainingCount karaktere geratzen dira",
"refreshIndicatorSemanticLabel": "Freskatu" "refreshIndicatorSemanticLabel": "Freskatu",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "۱ نویسه باقی مانده است", "remainingTextFieldCharacterCountOne": "۱ نویسه باقی مانده است",
"remainingTextFieldCharacterCountOther": "$remainingCount نویسه باقی مانده است", "remainingTextFieldCharacterCountOther": "$remainingCount نویسه باقی مانده است",
"refreshIndicatorSemanticLabel": "بازخوانی" "refreshIndicatorSemanticLabel": "بازخوانی",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "1 merkki jäljellä", "remainingTextFieldCharacterCountOne": "1 merkki jäljellä",
"remainingTextFieldCharacterCountOther": "$remainingCount merkkiä jäljellä", "remainingTextFieldCharacterCountOther": "$remainingCount merkkiä jäljellä",
"refreshIndicatorSemanticLabel": "Päivitys" "refreshIndicatorSemanticLabel": "Päivitys",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "1 character ang natitira", "remainingTextFieldCharacterCountOne": "1 character ang natitira",
"remainingTextFieldCharacterCountOther": "$remainingCount na character ang natitira", "remainingTextFieldCharacterCountOther": "$remainingCount na character ang natitira",
"refreshIndicatorSemanticLabel": "Nagre-refresh" "refreshIndicatorSemanticLabel": "Nagre-refresh",
"moreButtonTooltip": "TBD"
} }
...@@ -52,5 +52,6 @@ ...@@ -52,5 +52,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "1 caractère restant", "remainingTextFieldCharacterCountOne": "1 caractère restant",
"remainingTextFieldCharacterCountOther": "$remainingCount caractères restants", "remainingTextFieldCharacterCountOther": "$remainingCount caractères restants",
"refreshIndicatorSemanticLabel": "Actualiser" "refreshIndicatorSemanticLabel": "Actualiser",
"moreButtonTooltip": "TBD"
} }
...@@ -52,5 +52,6 @@ ...@@ -52,5 +52,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "1 carácter restante", "remainingTextFieldCharacterCountOne": "1 carácter restante",
"remainingTextFieldCharacterCountOther": "$remainingCount caracteres restantes", "remainingTextFieldCharacterCountOther": "$remainingCount caracteres restantes",
"refreshIndicatorSemanticLabel": "Actualizar" "refreshIndicatorSemanticLabel": "Actualizar",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "Noch 1 Zeichen", "remainingTextFieldCharacterCountOne": "Noch 1 Zeichen",
"remainingTextFieldCharacterCountOther": "Noch $remainingCount Zeichen", "remainingTextFieldCharacterCountOther": "Noch $remainingCount Zeichen",
"refreshIndicatorSemanticLabel": "Aktualisieren" "refreshIndicatorSemanticLabel": "Aktualisieren",
"moreButtonTooltip": "TBD"
} }
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"collapsedIconTapHint": "વિસ્તૃત કરો", "collapsedIconTapHint": "વિસ્તૃત કરો",
"remainingTextFieldCharacterCountOne": "1 અક્ષર બાકી", "remainingTextFieldCharacterCountOne": "1 અક્ષર બાકી",
"remainingTextFieldCharacterCountOther": "$remainingCount અક્ષર બાકી", "remainingTextFieldCharacterCountOther": "$remainingCount અક્ષર બાકી",
"refreshIndicatorSemanticLabel": "રિફ્રેશ કરો" "refreshIndicatorSemanticLabel": "રિફ્રેશ કરો",
"moreButtonTooltip": "TBD"
} }
...@@ -55,5 +55,6 @@ ...@@ -55,5 +55,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "נותר תו אחד", "remainingTextFieldCharacterCountOne": "נותר תו אחד",
"remainingTextFieldCharacterCountOther": "נותרו $remainingCount תווים", "remainingTextFieldCharacterCountOther": "נותרו $remainingCount תווים",
"refreshIndicatorSemanticLabel": "רענון" "refreshIndicatorSemanticLabel": "רענון",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "एक वर्ण अाैर डाला जा सकता है", "remainingTextFieldCharacterCountOne": "एक वर्ण अाैर डाला जा सकता है",
"remainingTextFieldCharacterCountOther": "$remainingCount वर्ण अाैर डाले जा सकते हैं", "remainingTextFieldCharacterCountOther": "$remainingCount वर्ण अाैर डाले जा सकते हैं",
"refreshIndicatorSemanticLabel": "रीफ़्रेश करें" "refreshIndicatorSemanticLabel": "रीफ़्रेश करें",
"moreButtonTooltip": "TBD"
} }
...@@ -53,5 +53,6 @@ ...@@ -53,5 +53,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "Preostao je 1 znak", "remainingTextFieldCharacterCountOne": "Preostao je 1 znak",
"remainingTextFieldCharacterCountOther": "Preostalo je $remainingCount znakova", "remainingTextFieldCharacterCountOther": "Preostalo je $remainingCount znakova",
"refreshIndicatorSemanticLabel": "Osvježi" "refreshIndicatorSemanticLabel": "Osvježi",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "1 karakter maradt", "remainingTextFieldCharacterCountOne": "1 karakter maradt",
"remainingTextFieldCharacterCountOther": "$remainingCount karakter maradt", "remainingTextFieldCharacterCountOther": "$remainingCount karakter maradt",
"refreshIndicatorSemanticLabel": "Frissítés" "refreshIndicatorSemanticLabel": "Frissítés",
"moreButtonTooltip": "TBD"
} }
...@@ -56,5 +56,6 @@ ...@@ -56,5 +56,6 @@
"remainingTextFieldCharacterCountZero": "Նիշի հնարավորություն չկա", "remainingTextFieldCharacterCountZero": "Նիշի հնարավորություն չկա",
"remainingTextFieldCharacterCountOne": "Մնացել է 1 նիշ", "remainingTextFieldCharacterCountOne": "Մնացել է 1 նիշ",
"remainingTextFieldCharacterCountOther": "Մնացել է $remainingCount նիշ", "remainingTextFieldCharacterCountOther": "Մնացել է $remainingCount նիշ",
"refreshIndicatorSemanticLabel": "Թարմացնել" "refreshIndicatorSemanticLabel": "Թարմացնել",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "Sisa 1 karakter", "remainingTextFieldCharacterCountOne": "Sisa 1 karakter",
"remainingTextFieldCharacterCountOther": "Sisa $remainingCount karakter", "remainingTextFieldCharacterCountOther": "Sisa $remainingCount karakter",
"refreshIndicatorSemanticLabel": "Memuat ulang" "refreshIndicatorSemanticLabel": "Memuat ulang",
"moreButtonTooltip": "TBD"
} }
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"collapsedIconTapHint": "Stækka", "collapsedIconTapHint": "Stækka",
"remainingTextFieldCharacterCountOne": "1 stafur eftir", "remainingTextFieldCharacterCountOne": "1 stafur eftir",
"remainingTextFieldCharacterCountOther": "$remainingCount stafir eftir", "remainingTextFieldCharacterCountOther": "$remainingCount stafir eftir",
"refreshIndicatorSemanticLabel": "Endurnýja" "refreshIndicatorSemanticLabel": "Endurnýja",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "1 carattere rimanente", "remainingTextFieldCharacterCountOne": "1 carattere rimanente",
"remainingTextFieldCharacterCountOther": "$remainingCount caratteri rimanenti", "remainingTextFieldCharacterCountOther": "$remainingCount caratteri rimanenti",
"refreshIndicatorSemanticLabel": "Aggiorna" "refreshIndicatorSemanticLabel": "Aggiorna",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "残り 1 文字(半角相当)", "remainingTextFieldCharacterCountOne": "残り 1 文字(半角相当)",
"remainingTextFieldCharacterCountOther": "残り $remainingCount 文字(半角相当)", "remainingTextFieldCharacterCountOther": "残り $remainingCount 文字(半角相当)",
"refreshIndicatorSemanticLabel": "更新" "refreshIndicatorSemanticLabel": "更新",
"moreButtonTooltip": "TBD"
} }
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"collapsedIconTapHint": "გაშლა", "collapsedIconTapHint": "გაშლა",
"remainingTextFieldCharacterCountOne": "დარჩა 1 სიმბოლო", "remainingTextFieldCharacterCountOne": "დარჩა 1 სიმბოლო",
"remainingTextFieldCharacterCountOther": "დარჩა $remainingCount სიმბოლო", "remainingTextFieldCharacterCountOther": "დარჩა $remainingCount სიმბოლო",
"refreshIndicatorSemanticLabel": "განახლება" "refreshIndicatorSemanticLabel": "განახლება",
"moreButtonTooltip": "TBD"
} }
...@@ -52,5 +52,6 @@ ...@@ -52,5 +52,6 @@
"collapsedIconTapHint": "Жаю", "collapsedIconTapHint": "Жаю",
"remainingTextFieldCharacterCountZero": "Таңбалар қалмады", "remainingTextFieldCharacterCountZero": "Таңбалар қалмады",
"remainingTextFieldCharacterCountOther": "$remainingCount таңба қалды.", "remainingTextFieldCharacterCountOther": "$remainingCount таңба қалды.",
"refreshIndicatorSemanticLabel": "Жаңарту" "refreshIndicatorSemanticLabel": "Жаңарту",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "នៅសល់​ 1 តួ​ទៀត", "remainingTextFieldCharacterCountOne": "នៅសល់​ 1 តួ​ទៀត",
"remainingTextFieldCharacterCountOther": "នៅសល់ $remainingCount តួ​ទៀត", "remainingTextFieldCharacterCountOther": "នៅសល់ $remainingCount តួ​ទៀត",
"refreshIndicatorSemanticLabel": "ផ្ទុកឡើងវិញ" "refreshIndicatorSemanticLabel": "ផ្ទុកឡើងវិញ",
"moreButtonTooltip": "TBD"
} }
{ {
"scriptCategory": "\u0074\u0061\u006c\u006c", "scriptCategory": "tall",
"timeOfDayFormat": "\u0048\u003a\u006d\u006d", "timeOfDayFormat": "H:mm",
"openAppDrawerTooltip": "\u0ca8\u0ccd\u0caf\u0cbe\u0cb5\u0cbf\u0c97\u0cc7\u0cb6\u0ca8\u0ccd\u200c\u0020\u0cae\u0cc6\u0ca8\u0cc1\u0020\u0ca4\u0cc6\u0cb0\u0cc6\u0caf\u0cbf\u0cb0\u0cbf", "openAppDrawerTooltip": "ನ್ಯಾವಿಗೇಶನ್‌ ಮೆನು ತೆರೆಯಿರಿ",
"backButtonTooltip": "\u0cb9\u0cbf\u0c82\u0ca4\u0cbf\u0cb0\u0cc1\u0c97\u0cbf", "backButtonTooltip": "ಹಿಂತಿರುಗಿ",
"closeButtonTooltip": "\u0cae\u0cc1\u0c9a\u0ccd\u0c9a\u0cbf\u0cb0\u0cbf", "closeButtonTooltip": "ಮುಚ್ಚಿರಿ",
"deleteButtonTooltip": "\u0c85\u0cb3\u0cbf\u0cb8\u0cbf", "deleteButtonTooltip": "ಅಳಿಸಿ",
"nextMonthTooltip": "\u0cae\u0cc1\u0c82\u0ca6\u0cbf\u0ca8\u0020\u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1", "nextMonthTooltip": "ಮುಂದಿನ ತಿಂಗಳು",
"previousMonthTooltip": "\u0cb9\u0cbf\u0c82\u0ca6\u0cbf\u0ca8\u0020\u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1", "previousMonthTooltip": "ಹಿಂದಿನ ತಿಂಗಳು",
"nextPageTooltip": "\u0cae\u0cc1\u0c82\u0ca6\u0cbf\u0ca8\u0020\u0caa\u0cc1\u0c9f", "nextPageTooltip": "ಮುಂದಿನ ಪುಟ",
"previousPageTooltip": "\u0cb9\u0cbf\u0c82\u0ca6\u0cbf\u0ca8\u0020\u0caa\u0cc1\u0c9f", "previousPageTooltip": "ಹಿಂದಿನ ಪುಟ",
"showMenuTooltip": "\u0cae\u0cc6\u0ca8\u0cc1\u0020\u0ca4\u0ccb\u0cb0\u0cbf\u0cb8\u0cbf", "showMenuTooltip": "ಮೆನು ತೋರಿಸಿ",
"aboutListTileTitle": "\u0024\u0061\u0070\u0070\u006c\u0069\u0063\u0061\u0074\u0069\u006f\u006e\u004e\u0061\u006d\u0065\u0020\u0cac\u0c97\u0ccd\u0c97\u0cc6", "aboutListTileTitle": "$applicationName ಬಗ್ಗೆ",
"licensesPageTitle": "\u0caa\u0cb0\u0cb5\u0cbe\u0ca8\u0c97\u0cbf\u0c97\u0cb3\u0cc1", "licensesPageTitle": "ಪರವಾನಗಿಗಳು",
"pageRowsInfoTitle": "\u0024\u0072\u006f\u0077\u0043\u006f\u0075\u006e\u0074\u0020\u0cb0\u0cb2\u0ccd\u0cb2\u0cbf\u0020\u0024\u0066\u0069\u0072\u0073\u0074\u0052\u006f\u0077\u2013\u0024\u006c\u0061\u0073\u0074\u0052\u006f\u0077", "pageRowsInfoTitle": "$rowCount ರಲ್ಲಿ $firstRow–$lastRow",
"pageRowsInfoTitleApproximate": "\u0024\u0072\u006f\u0077\u0043\u006f\u0075\u006e\u0074\u0020\u0cb0\u0cb2\u0ccd\u0cb2\u0cbf\u0020\u0024\u0066\u0069\u0072\u0073\u0074\u0052\u006f\u0077\u2013\u0024\u006c\u0061\u0073\u0074\u0052\u006f\u0077", "pageRowsInfoTitleApproximate": "$rowCount ರಲ್ಲಿ $firstRow–$lastRow",
"rowsPerPageTitle": "\u0caa\u0ccd\u0cb0\u0ca4\u0cbf\u0020\u0caa\u0cc1\u0c9f\u0c95\u0ccd\u0c95\u0cc6\u0020\u0cb8\u0cbe\u0cb2\u0cc1\u0c97\u0cb3\u0cc1\u003a", "rowsPerPageTitle": "ಪ್ರತಿ ಪುಟಕ್ಕೆ ಸಾಲುಗಳು:",
"tabLabel": "\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", "tabLabel": "$tabCount ರಲ್ಲಿನ $tabIndex ಟ್ಯಾಬ್",
"selectedRowCountTitleOne": "\u0031\u0020\u0c90\u0c9f\u0c82\u0020\u0c86\u0caf\u0ccd\u0c95\u0cc6\u0020\u0cae\u0cbe\u0ca1\u0cb2\u0cbe\u0c97\u0cbf\u0ca6\u0cc6", "selectedRowCountTitleOne": "1 ಐಟಂ ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ",
"selectedRowCountTitleOther": "\u0024\u0073\u0065\u006c\u0065\u0063\u0074\u0065\u0064\u0052\u006f\u0077\u0043\u006f\u0075\u006e\u0074\u0020\u0c90\u0c9f\u0c82\u0c97\u0cb3\u0ca8\u0ccd\u0ca8\u0cc1\u0020\u0c86\u0caf\u0ccd\u0c95\u0cc6\u0020\u0cae\u0cbe\u0ca1\u0cb2\u0cbe\u0c97\u0cbf\u0ca6\u0cc6", "selectedRowCountTitleOther": "$selectedRowCount ಐಟಂಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ",
"cancelButtonLabel": "\u0cb0\u0ca6\u0ccd\u0ca6\u0cc1\u0cae\u0cbe\u0ca1\u0cbf", "cancelButtonLabel": "ರದ್ದುಮಾಡಿ",
"closeButtonLabel": "\u0cae\u0cc1\u0c9a\u0ccd\u0c9a\u0cbf\u0cb0\u0cbf", "closeButtonLabel": "ಮುಚ್ಚಿರಿ",
"continueButtonLabel": "\u0cae\u0cc1\u0c82\u0ca6\u0cc1\u0cb5\u0cb0\u0cbf\u0cb8\u0cbf", "continueButtonLabel": "ಮುಂದುವರಿಸಿ",
"copyButtonLabel": "\u0ca8\u0c95\u0cb2\u0cbf\u0cb8\u0cbf", "copyButtonLabel": "ನಕಲಿಸಿ",
"cutButtonLabel": "\u0c95\u0ca4\u0ccd\u0ca4\u0cb0\u0cbf\u0cb8\u0cbf", "cutButtonLabel": "ಕತ್ತರಿಸಿ",
"okButtonLabel": "\u0cb8\u0cb0\u0cbf", "okButtonLabel": "ಸರಿ",
"pasteButtonLabel": "\u0c85\u0c82\u0c9f\u0cbf\u0cb8\u0cbf", "pasteButtonLabel": "ಅಂಟಿಸಿ",
"selectAllButtonLabel": "\u0c8e\u0cb2\u0ccd\u0cb2\u0cb5\u0ca8\u0ccd\u0ca8\u0cc2\u0020\u0c86\u0caf\u0ccd\u0c95\u0cc6\u0cae\u0cbe\u0ca1\u0cbf", "selectAllButtonLabel": "ಎಲ್ಲವನ್ನೂ ಆಯ್ಕೆಮಾಡಿ",
"viewLicensesButtonLabel": "\u0caa\u0cb0\u0cb5\u0cbe\u0ca8\u0c97\u0cbf\u0c97\u0cb3\u0ca8\u0ccd\u0ca8\u0cc1\u0020\u0cb5\u0cbf\u0cd5\u0c95\u0ccd\u0cb7\u0cbf\u0cb8\u0cbf", "viewLicensesButtonLabel": "ಪರವಾನಗಿಗಳನ್ನು ವೀಕ್ಷಿಸಿ",
"anteMeridiemAbbreviation": "\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6", "anteMeridiemAbbreviation": "ಬೆಳಿಗ್ಗೆ",
"postMeridiemAbbreviation": "\u0cb8\u0c82\u0c9c\u0cc6", "postMeridiemAbbreviation": "ಸಂಜೆ",
"timePickerHourModeAnnouncement": "\u0c97\u0c82\u0c9f\u0cc6\u0c97\u0cb3\u0ca8\u0ccd\u0ca8\u0cc1\u0020\u0c86\u0caf\u0ccd\u0c95\u0cc6\u0cae\u0cbe\u0ca1\u0cbf", "timePickerHourModeAnnouncement": "ಗಂಟೆಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ",
"timePickerMinuteModeAnnouncement": "\u0ca8\u0cbf\u0cae\u0cbf\u0cb7\u0c97\u0cb3\u0ca8\u0ccd\u0ca8\u0cc1\u0020\u0c86\u0caf\u0ccd\u0c95\u0cc6\u0cae\u0cbe\u0ca1\u0cbf", "timePickerMinuteModeAnnouncement": "ನಿಮಿಷಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ",
"modalBarrierDismissLabel": "\u0cb5\u0c9c\u0cbe\u0c97\u0cca\u0cb3\u0cbf\u0cb8\u0cbf", "modalBarrierDismissLabel": "ವಜಾಗೊಳಿಸಿ",
"signedInLabel": "\u0cb8\u0cc8\u0ca8\u0ccd\u0020\u0c87\u0ca8\u0ccd\u0020\u0cae\u0cbe\u0ca1\u0cb2\u0cbe\u0c97\u0cbf\u0ca6\u0cc6", "signedInLabel": "ಸೈನ್ ಇನ್ ಮಾಡಲಾಗಿದೆ",
"hideAccountsLabel": "\u0c96\u0cbe\u0ca4\u0cc6\u0c97\u0cb3\u0ca8\u0ccd\u0ca8\u0cc1\u0020\u0cae\u0cb0\u0cc6\u0cae\u0cbe\u0ca1\u0cbf", "hideAccountsLabel": "ಖಾತೆಗಳನ್ನು ಮರೆಮಾಡಿ",
"showAccountsLabel": "\u0c96\u0cbe\u0ca4\u0cc6\u0c97\u0cb3\u0ca8\u0ccd\u0ca8\u0cc1\u0020\u0ca4\u0ccb\u0cb0\u0cbf\u0cb8\u0cbf", "showAccountsLabel": "ಖಾತೆಗಳನ್ನು ತೋರಿಸಿ",
"drawerLabel": "\u0ca8\u0ccd\u0caf\u0cbe\u0cb5\u0cbf\u0c97\u0cc7\u0cb6\u0ca8\u0ccd\u200c\u0020\u0cae\u0cc6\u0ca8\u0cc1", "drawerLabel": "ನ್ಯಾವಿಗೇಶನ್‌ ಮೆನು",
"popupMenuLabel": "\u0caa\u0cbe\u0caa\u0ccd\u0c85\u0caa\u0ccd\u0020\u0cae\u0cc6\u0ca8\u0cc1", "popupMenuLabel": "ಪಾಪ್ಅಪ್ ಮೆನು",
"dialogLabel": "\u0ca1\u0cc8\u0cb2\u0cbe\u0c97\u0ccd", "dialogLabel": "ಡೈಲಾಗ್",
"alertDialogLabel": "\u0c8e\u0c9a\u0ccd\u0c9a\u0cb0\u0cbf\u0c95\u0cc6", "alertDialogLabel": "ಎಚ್ಚರಿಕೆ",
"searchFieldLabel": "\u0cb9\u0cc1\u0ca1\u0cc1\u0c95\u0cbf", "searchFieldLabel": "ಹುಡುಕಿ",
"reorderItemToStart": "\u0caa\u0ccd\u0cb0\u0cbe\u0cb0\u0c82\u0cad\u0c95\u0ccd\u0c95\u0cc6\u0020\u0cb8\u0cb0\u0cbf\u0cb8\u0cbf", "reorderItemToStart": "ಪ್ರಾರಂಭಕ್ಕೆ ಸರಿಸಿ",
"reorderItemToEnd": "\u0c95\u0cca\u0ca8\u0cc6\u0c97\u0cc6\u0020\u0cb8\u0cb0\u0cbf\u0cb8\u0cbf", "reorderItemToEnd": "ಕೊನೆಗೆ ಸರಿಸಿ",
"reorderItemUp": "\u0cae\u0cc7\u0cb2\u0cc6\u0020\u0cb8\u0cb0\u0cbf\u0cb8\u0cbf", "reorderItemUp": "ಮೇಲೆ ಸರಿಸಿ",
"reorderItemDown": "\u0c95\u0cc6\u0cb3\u0c97\u0cc6\u0020\u0cb8\u0cb0\u0cbf\u0cb8\u0cbf", "reorderItemDown": "ಕೆಳಗೆ ಸರಿಸಿ",
"reorderItemLeft": "\u0c8e\u0ca1\u0c95\u0ccd\u0c95\u0cc6\u0020\u0cb8\u0cb0\u0cbf\u0cb8\u0cbf", "reorderItemLeft": "ಎಡಕ್ಕೆ ಸರಿಸಿ",
"reorderItemRight": "\u0cac\u0cb2\u0c95\u0ccd\u0c95\u0cc6\u0020\u0cb8\u0cb0\u0cbf\u0cb8\u0cbf", "reorderItemRight": "ಬಲಕ್ಕೆ ಸರಿಸಿ",
"expandedIconTapHint": "\u0c95\u0cc1\u0c97\u0ccd\u0c97\u0cbf\u0cb8\u0cbf", "expandedIconTapHint": "ಕುಗ್ಗಿಸಿ",
"collapsedIconTapHint": "\u0cb5\u0cbf\u0cb8\u0ccd\u0ca4\u0cb0\u0cbf\u0cb8\u0cbf", "collapsedIconTapHint": "ವಿಸ್ತರಿಸಿ",
"remainingTextFieldCharacterCountOne": "\u0031\u0020\u0c85\u0c95\u0ccd\u0cb7\u0cb0\u0020\u0c89\u0cb3\u0cbf\u0ca6\u0cbf\u0ca6\u0cc6", "remainingTextFieldCharacterCountOne": "1 ಅಕ್ಷರ ಉಳಿದಿದೆ",
"remainingTextFieldCharacterCountOther": "\u0024\u0072\u0065\u006d\u0061\u0069\u006e\u0069\u006e\u0067\u0043\u006f\u0075\u006e\u0074\u0020\u0c85\u0c95\u0ccd\u0cb7\u0cb0\u0c97\u0cb3\u0cc1\u0020\u0c89\u0cb3\u0cbf\u0ca6\u0cbf\u0cb5\u0cc6", "remainingTextFieldCharacterCountOther": "$remainingCount ಅಕ್ಷರಗಳು ಉಳಿದಿವೆ",
"refreshIndicatorSemanticLabel": "\u0cb0\u0cbf\u0cab\u0ccd\u0cb0\u0cc6\u0cb6\u0ccd\u0020\u0cae\u0cbe\u0ca1\u0cbf" "refreshIndicatorSemanticLabel": "ರಿಫ್ರೆಶ್ ಮಾಡಿ",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "1자 남음", "remainingTextFieldCharacterCountOne": "1자 남음",
"remainingTextFieldCharacterCountOther": "$remainingCount자 남음", "remainingTextFieldCharacterCountOther": "$remainingCount자 남음",
"refreshIndicatorSemanticLabel": "새로고침" "refreshIndicatorSemanticLabel": "새로고침",
"moreButtonTooltip": "TBD"
} }
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"collapsedIconTapHint": "Жайып көрсөтүү", "collapsedIconTapHint": "Жайып көрсөтүү",
"remainingTextFieldCharacterCountOne": "1 белги калды", "remainingTextFieldCharacterCountOne": "1 белги калды",
"remainingTextFieldCharacterCountOther": "$remainingCount белги калды", "remainingTextFieldCharacterCountOther": "$remainingCount белги калды",
"refreshIndicatorSemanticLabel": "Жаңыртуу" "refreshIndicatorSemanticLabel": "Жаңыртуу",
"moreButtonTooltip": "TBD"
} }
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"collapsedIconTapHint": "ຂະຫຍາຍ", "collapsedIconTapHint": "ຂະຫຍາຍ",
"remainingTextFieldCharacterCountOne": "ຍັງອີກ 1 ຕົວອັກສອນ", "remainingTextFieldCharacterCountOne": "ຍັງອີກ 1 ຕົວອັກສອນ",
"remainingTextFieldCharacterCountOther": "ຍັງອີກ $remainingCount ຕົວອັກສອນ", "remainingTextFieldCharacterCountOther": "ຍັງອີກ $remainingCount ຕົວອັກສອນ",
"refreshIndicatorSemanticLabel": "ໂຫຼດຄືນໃໝ່" "refreshIndicatorSemanticLabel": "ໂຫຼດຄືນໃໝ່",
"moreButtonTooltip": "TBD"
} }
...@@ -55,5 +55,6 @@ ...@@ -55,5 +55,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "Liko 1 simbolis", "remainingTextFieldCharacterCountOne": "Liko 1 simbolis",
"remainingTextFieldCharacterCountOther": "Liko $remainingCount simbolių", "remainingTextFieldCharacterCountOther": "Liko $remainingCount simbolių",
"refreshIndicatorSemanticLabel": "Atnaujinti" "refreshIndicatorSemanticLabel": "Atnaujinti",
"moreButtonTooltip": "TBD"
} }
...@@ -52,5 +52,6 @@ ...@@ -52,5 +52,6 @@
"remainingTextFieldCharacterCountZero": "Nav atlikusi neviena rakstzīme.", "remainingTextFieldCharacterCountZero": "Nav atlikusi neviena rakstzīme.",
"remainingTextFieldCharacterCountOne": "Atlikusi 1 rakstzīme.", "remainingTextFieldCharacterCountOne": "Atlikusi 1 rakstzīme.",
"remainingTextFieldCharacterCountOther": "Atlikušas $remainingCount rakstzīmes.", "remainingTextFieldCharacterCountOther": "Atlikušas $remainingCount rakstzīmes.",
"refreshIndicatorSemanticLabel": "Atsvaidzināt" "refreshIndicatorSemanticLabel": "Atsvaidzināt",
"moreButtonTooltip": "TBD"
} }
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"collapsedIconTapHint": "Прошири", "collapsedIconTapHint": "Прошири",
"remainingTextFieldCharacterCountOne": "Преостанува уште 1 знак", "remainingTextFieldCharacterCountOne": "Преостанува уште 1 знак",
"remainingTextFieldCharacterCountOther": "Преостануваат уште $remainingCount знаци", "remainingTextFieldCharacterCountOther": "Преостануваат уште $remainingCount знаци",
"refreshIndicatorSemanticLabel": "Освежи" "refreshIndicatorSemanticLabel": "Освежи",
"moreButtonTooltip": "TBD"
} }
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"collapsedIconTapHint": "വികസിപ്പിക്കുക", "collapsedIconTapHint": "വികസിപ്പിക്കുക",
"remainingTextFieldCharacterCountOne": "ഒരു പ്രതീകം ശേഷിക്കുന്നു", "remainingTextFieldCharacterCountOne": "ഒരു പ്രതീകം ശേഷിക്കുന്നു",
"remainingTextFieldCharacterCountOther": "$remainingCount പ്രതീകങ്ങൾ ശേഷിക്കുന്നു", "remainingTextFieldCharacterCountOther": "$remainingCount പ്രതീകങ്ങൾ ശേഷിക്കുന്നു",
"refreshIndicatorSemanticLabel": "പുതുക്കിയെടുക്കുക" "refreshIndicatorSemanticLabel": "പുതുക്കിയെടുക്കുക",
"moreButtonTooltip": "TBD"
} }
...@@ -52,5 +52,6 @@ ...@@ -52,5 +52,6 @@
"remainingTextFieldCharacterCountZero": "No characters remaining", "remainingTextFieldCharacterCountZero": "No characters remaining",
"remainingTextFieldCharacterCountOne": "1 тэмдэгт үлдсэн", "remainingTextFieldCharacterCountOne": "1 тэмдэгт үлдсэн",
"remainingTextFieldCharacterCountOther": "$remainingCount тэмдэгт үлдсэн", "remainingTextFieldCharacterCountOther": "$remainingCount тэмдэгт үлдсэн",
"refreshIndicatorSemanticLabel": "Сэргээх" "refreshIndicatorSemanticLabel": "Сэргээх",
"moreButtonTooltip": "TBD"
} }
...@@ -52,5 +52,6 @@ ...@@ -52,5 +52,6 @@
"remainingTextFieldCharacterCountZero": "कोणतेही वर्ण शिल्लक नाहीत", "remainingTextFieldCharacterCountZero": "कोणतेही वर्ण शिल्लक नाहीत",
"remainingTextFieldCharacterCountOne": "एक वर्ण शिल्लक", "remainingTextFieldCharacterCountOne": "एक वर्ण शिल्लक",
"remainingTextFieldCharacterCountOther": "$remainingCount वर्ण शिल्लक", "remainingTextFieldCharacterCountOther": "$remainingCount वर्ण शिल्लक",
"refreshIndicatorSemanticLabel": "रिफ्रेश करा" "refreshIndicatorSemanticLabel": "रिफ्रेश करा",
"moreButtonTooltip": "TBD"
} }
...@@ -52,5 +52,6 @@ ...@@ -52,5 +52,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "1 aksara lagi", "remainingTextFieldCharacterCountOne": "1 aksara lagi",
"remainingTextFieldCharacterCountOther": "$remainingCount aksara lagi", "remainingTextFieldCharacterCountOther": "$remainingCount aksara lagi",
"refreshIndicatorSemanticLabel": "Muat semula" "refreshIndicatorSemanticLabel": "Muat semula",
"moreButtonTooltip": "TBD"
} }
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"collapsedIconTapHint": "ချဲ့ရန်", "collapsedIconTapHint": "ချဲ့ရန်",
"remainingTextFieldCharacterCountOne": "အက္ခရာ ၁ လုံးကျန်သည်", "remainingTextFieldCharacterCountOne": "အက္ခရာ ၁ လုံးကျန်သည်",
"remainingTextFieldCharacterCountOther": "အက္ခရာ $remainingCount လုံးကျန်သည်", "remainingTextFieldCharacterCountOther": "အက္ခရာ $remainingCount လုံးကျန်သည်",
"refreshIndicatorSemanticLabel": "ပြန်လည်စတင်ရန်" "refreshIndicatorSemanticLabel": "ပြန်လည်စတင်ရန်",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "1 tegn gjenstår", "remainingTextFieldCharacterCountOne": "1 tegn gjenstår",
"remainingTextFieldCharacterCountOther": "$remainingCount tegn gjenstår", "remainingTextFieldCharacterCountOther": "$remainingCount tegn gjenstår",
"refreshIndicatorSemanticLabel": "Laster inn på nytt" "refreshIndicatorSemanticLabel": "Laster inn på nytt",
"moreButtonTooltip": "TBD"
} }
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"collapsedIconTapHint": "विस्तार गर्नुहोस्", "collapsedIconTapHint": "विस्तार गर्नुहोस्",
"remainingTextFieldCharacterCountOne": "१ वर्ण बाँकी", "remainingTextFieldCharacterCountOne": "१ वर्ण बाँकी",
"remainingTextFieldCharacterCountOther": "$remainingCount वर्णहरू बाँकी", "remainingTextFieldCharacterCountOther": "$remainingCount वर्णहरू बाँकी",
"refreshIndicatorSemanticLabel": "पुनः ताजा गर्नुहोस्" "refreshIndicatorSemanticLabel": "पुनः ताजा गर्नुहोस्",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "1 teken resterend", "remainingTextFieldCharacterCountOne": "1 teken resterend",
"remainingTextFieldCharacterCountOther": "$remainingCount tekens resterend", "remainingTextFieldCharacterCountOther": "$remainingCount tekens resterend",
"refreshIndicatorSemanticLabel": "Vernieuwen" "refreshIndicatorSemanticLabel": "Vernieuwen",
"moreButtonTooltip": "TBD"
} }
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"collapsedIconTapHint": "ପ୍ରସାରିତ କରନ୍ତୁ", "collapsedIconTapHint": "ପ୍ରସାରିତ କରନ୍ତୁ",
"remainingTextFieldCharacterCountOne": "1ଟି ଅକ୍ଷର ବାକି ଅଛି", "remainingTextFieldCharacterCountOne": "1ଟି ଅକ୍ଷର ବାକି ଅଛି",
"remainingTextFieldCharacterCountOther": "$remainingCountଟି ଅକ୍ଷର ବାକି ଅଛି", "remainingTextFieldCharacterCountOther": "$remainingCountଟି ଅକ୍ଷର ବାକି ଅଛି",
"refreshIndicatorSemanticLabel": "ରିଫ୍ରେସ୍ କରନ୍ତୁ" "refreshIndicatorSemanticLabel": "ରିଫ୍ରେସ୍ କରନ୍ତୁ",
"moreButtonTooltip": "TBD"
} }
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"collapsedIconTapHint": "ਵਿਸਤਾਰ ਕਰੋ", "collapsedIconTapHint": "ਵਿਸਤਾਰ ਕਰੋ",
"remainingTextFieldCharacterCountOne": "1 ਅੱਖਰ-ਚਿੰਨ੍ਹ ਬਾਕੀ", "remainingTextFieldCharacterCountOne": "1 ਅੱਖਰ-ਚਿੰਨ੍ਹ ਬਾਕੀ",
"remainingTextFieldCharacterCountOther": "$remainingCount ਅੱਖਰ-ਚਿੰਨ੍ਹ ਬਾਕੀ", "remainingTextFieldCharacterCountOther": "$remainingCount ਅੱਖਰ-ਚਿੰਨ੍ਹ ਬਾਕੀ",
"refreshIndicatorSemanticLabel": "ਰਿਫ੍ਰੈਸ਼ ਕਰੋ" "refreshIndicatorSemanticLabel": "ਰਿਫ੍ਰੈਸ਼ ਕਰੋ",
"moreButtonTooltip": "TBD"
} }
...@@ -55,5 +55,6 @@ ...@@ -55,5 +55,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "Jeszcze 1 znak", "remainingTextFieldCharacterCountOne": "Jeszcze 1 znak",
"remainingTextFieldCharacterCountOther": "Pozostało $remainingCount znaków", "remainingTextFieldCharacterCountOther": "Pozostało $remainingCount znaków",
"refreshIndicatorSemanticLabel": "Odśwież" "refreshIndicatorSemanticLabel": "Odśwież",
"moreButtonTooltip": "TBD"
} }
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "TBD", "remainingTextFieldCharacterCountOne": "TBD",
"remainingTextFieldCharacterCountOther": "TBD", "remainingTextFieldCharacterCountOther": "TBD",
"refreshIndicatorSemanticLabel": "TBD" "refreshIndicatorSemanticLabel": "TBD",
"moreButtonTooltip": "TBD"
} }
...@@ -53,5 +53,6 @@ ...@@ -53,5 +53,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "1 caractere restante", "remainingTextFieldCharacterCountOne": "1 caractere restante",
"remainingTextFieldCharacterCountOther": "$remainingCount caracteres restantes", "remainingTextFieldCharacterCountOther": "$remainingCount caracteres restantes",
"refreshIndicatorSemanticLabel": "Atualizar" "refreshIndicatorSemanticLabel": "Atualizar",
"moreButtonTooltip": "TBD"
} }
...@@ -54,5 +54,6 @@ ...@@ -54,5 +54,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "un caracter rămas", "remainingTextFieldCharacterCountOne": "un caracter rămas",
"remainingTextFieldCharacterCountOther": "$remainingCount de caractere rămase", "remainingTextFieldCharacterCountOther": "$remainingCount de caractere rămase",
"refreshIndicatorSemanticLabel": "Actualizați" "refreshIndicatorSemanticLabel": "Actualizați",
"moreButtonTooltip": "TBD"
} }
...@@ -56,5 +56,6 @@ ...@@ -56,5 +56,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "Остался 1 символ", "remainingTextFieldCharacterCountOne": "Остался 1 символ",
"remainingTextFieldCharacterCountOther": "Осталось $remainingCount символа", "remainingTextFieldCharacterCountOther": "Осталось $remainingCount символа",
"refreshIndicatorSemanticLabel": "Обновление" "refreshIndicatorSemanticLabel": "Обновление",
"moreButtonTooltip": "TBD"
} }
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"collapsedIconTapHint": "දිග හරින්න", "collapsedIconTapHint": "දිග හරින්න",
"remainingTextFieldCharacterCountOne": "අනුලකුණු 1ක් ඉතිරිය", "remainingTextFieldCharacterCountOne": "අනුලකුණු 1ක් ඉතිරිය",
"remainingTextFieldCharacterCountOther": "අනුලකුණු $remainingCountක් ඉතිරිය", "remainingTextFieldCharacterCountOther": "අනුලකුණු $remainingCountක් ඉතිරිය",
"refreshIndicatorSemanticLabel": "නැවුම් කරන්න" "refreshIndicatorSemanticLabel": "නැවුම් කරන්න",
"moreButtonTooltip": "TBD"
} }
...@@ -55,5 +55,6 @@ ...@@ -55,5 +55,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "Zostáva 1 znak", "remainingTextFieldCharacterCountOne": "Zostáva 1 znak",
"remainingTextFieldCharacterCountOther": "Zostáva $remainingCount znakov", "remainingTextFieldCharacterCountOther": "Zostáva $remainingCount znakov",
"refreshIndicatorSemanticLabel": "Obnoviť" "refreshIndicatorSemanticLabel": "Obnoviť",
"moreButtonTooltip": "TBD"
} }
...@@ -55,5 +55,6 @@ ...@@ -55,5 +55,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "Še 1 znak", "remainingTextFieldCharacterCountOne": "Še 1 znak",
"remainingTextFieldCharacterCountOther": "Še $remainingCount znakov", "remainingTextFieldCharacterCountOther": "Še $remainingCount znakov",
"refreshIndicatorSemanticLabel": "Osveži" "refreshIndicatorSemanticLabel": "Osveži",
"moreButtonTooltip": "TBD"
} }
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"collapsedIconTapHint": "Zgjero", "collapsedIconTapHint": "Zgjero",
"remainingTextFieldCharacterCountOne": "1 karakter i mbetur", "remainingTextFieldCharacterCountOne": "1 karakter i mbetur",
"remainingTextFieldCharacterCountOther": "$remainingCount karaktere të mbetura", "remainingTextFieldCharacterCountOther": "$remainingCount karaktere të mbetura",
"refreshIndicatorSemanticLabel": "Rifresko" "refreshIndicatorSemanticLabel": "Rifresko",
"moreButtonTooltip": "TBD"
} }
...@@ -53,5 +53,6 @@ ...@@ -53,5 +53,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "Преостао је 1 знак", "remainingTextFieldCharacterCountOne": "Преостао је 1 знак",
"remainingTextFieldCharacterCountOther": "Преостало је $remainingCount знакова", "remainingTextFieldCharacterCountOther": "Преостало је $remainingCount знакова",
"refreshIndicatorSemanticLabel": "Освежи" "refreshIndicatorSemanticLabel": "Освежи",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "1 tecken kvar", "remainingTextFieldCharacterCountOne": "1 tecken kvar",
"remainingTextFieldCharacterCountOther": "$remainingCount tecken kvar", "remainingTextFieldCharacterCountOther": "$remainingCount tecken kvar",
"refreshIndicatorSemanticLabel": "Uppdatera" "refreshIndicatorSemanticLabel": "Uppdatera",
"moreButtonTooltip": "TBD"
} }
...@@ -52,5 +52,6 @@ ...@@ -52,5 +52,6 @@
"remainingTextFieldCharacterCountZero": "Hapana herufi zilizo baki", "remainingTextFieldCharacterCountZero": "Hapana herufi zilizo baki",
"remainingTextFieldCharacterCountOne": "Imesalia herufi 1", "remainingTextFieldCharacterCountOne": "Imesalia herufi 1",
"remainingTextFieldCharacterCountOther": "Zimesalia herufi $remainingCount", "remainingTextFieldCharacterCountOther": "Zimesalia herufi $remainingCount",
"refreshIndicatorSemanticLabel": "Onyesha upya" "refreshIndicatorSemanticLabel": "Onyesha upya",
"moreButtonTooltip": "TBD"
} }
...@@ -52,5 +52,6 @@ ...@@ -52,5 +52,6 @@
"remainingTextFieldCharacterCountZero": "எழுத்துக்கள் எதுவும் இல்லை", "remainingTextFieldCharacterCountZero": "எழுத்துக்கள் எதுவும் இல்லை",
"remainingTextFieldCharacterCountOne": "1 எழுத்து மீதமுள்ளது", "remainingTextFieldCharacterCountOne": "1 எழுத்து மீதமுள்ளது",
"remainingTextFieldCharacterCountOther": "$remainingCount எழுத்துகள் மீதமுள்ளன", "remainingTextFieldCharacterCountOther": "$remainingCount எழுத்துகள் மீதமுள்ளன",
"refreshIndicatorSemanticLabel": "ரெஃப்ரெஷ் செய்யும்" "refreshIndicatorSemanticLabel": "ரெஃப்ரெஷ் செய்யும்",
"moreButtonTooltip": "TBD"
} }
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"collapsedIconTapHint": "విస్తరించు", "collapsedIconTapHint": "విస్తరించు",
"remainingTextFieldCharacterCountOne": "1 అక్షరం మిగిలి ఉంది", "remainingTextFieldCharacterCountOne": "1 అక్షరం మిగిలి ఉంది",
"remainingTextFieldCharacterCountOther": "$remainingCount అక్షరాలు మిగిలి ఉన్నాయి", "remainingTextFieldCharacterCountOther": "$remainingCount అక్షరాలు మిగిలి ఉన్నాయి",
"refreshIndicatorSemanticLabel": "రిఫ్రెష్ చేయి" "refreshIndicatorSemanticLabel": "రిఫ్రెష్ చేయి",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "เหลือ 1 อักขระ", "remainingTextFieldCharacterCountOne": "เหลือ 1 อักขระ",
"remainingTextFieldCharacterCountOther": "เหลือ $remainingCount อักขระ", "remainingTextFieldCharacterCountOther": "เหลือ $remainingCount อักขระ",
"refreshIndicatorSemanticLabel": "รีเฟรช" "refreshIndicatorSemanticLabel": "รีเฟรช",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "1 character ang natitira", "remainingTextFieldCharacterCountOne": "1 character ang natitira",
"remainingTextFieldCharacterCountOther": "$remainingCount na character ang natitira", "remainingTextFieldCharacterCountOther": "$remainingCount na character ang natitira",
"refreshIndicatorSemanticLabel": "Nagre-refresh" "refreshIndicatorSemanticLabel": "Nagre-refresh",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "1 karakter kaldı", "remainingTextFieldCharacterCountOne": "1 karakter kaldı",
"remainingTextFieldCharacterCountOther": "$remainingCount karakter kaldı", "remainingTextFieldCharacterCountOther": "$remainingCount karakter kaldı",
"refreshIndicatorSemanticLabel": "Yenile" "refreshIndicatorSemanticLabel": "Yenile",
"moreButtonTooltip": "TBD"
} }
...@@ -55,5 +55,6 @@ ...@@ -55,5 +55,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "Залишився 1 символ", "remainingTextFieldCharacterCountOne": "Залишився 1 символ",
"remainingTextFieldCharacterCountOther": "Залишилося $remainingCount символу", "remainingTextFieldCharacterCountOther": "Залишилося $remainingCount символу",
"refreshIndicatorSemanticLabel": "Оновити" "refreshIndicatorSemanticLabel": "Оновити",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "1 حرف باقی ہے", "remainingTextFieldCharacterCountOne": "1 حرف باقی ہے",
"remainingTextFieldCharacterCountOther": "$remainingCount حروف باقی ہیں", "remainingTextFieldCharacterCountOther": "$remainingCount حروف باقی ہیں",
"refreshIndicatorSemanticLabel": "ریفریش کریں" "refreshIndicatorSemanticLabel": "ریفریش کریں",
"moreButtonTooltip": "TBD"
} }
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"collapsedIconTapHint": "Yoyish", "collapsedIconTapHint": "Yoyish",
"remainingTextFieldCharacterCountOne": "1 ta belgi qoldi", "remainingTextFieldCharacterCountOne": "1 ta belgi qoldi",
"remainingTextFieldCharacterCountOther": "$remainingCount ta belgi qoldi", "remainingTextFieldCharacterCountOther": "$remainingCount ta belgi qoldi",
"refreshIndicatorSemanticLabel": "Yangilash" "refreshIndicatorSemanticLabel": "Yangilash",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "Còn lại 1 ký tự", "remainingTextFieldCharacterCountOne": "Còn lại 1 ký tự",
"remainingTextFieldCharacterCountOther": "Còn lại $remainingCount ký tự", "remainingTextFieldCharacterCountOther": "Còn lại $remainingCount ký tự",
"refreshIndicatorSemanticLabel": "Làm mới" "refreshIndicatorSemanticLabel": "Làm mới",
"moreButtonTooltip": "TBD"
} }
...@@ -51,5 +51,6 @@ ...@@ -51,5 +51,6 @@
"remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountZero": "TBD",
"remainingTextFieldCharacterCountOne": "还可输入 1 个字符", "remainingTextFieldCharacterCountOne": "还可输入 1 个字符",
"remainingTextFieldCharacterCountOther": "还可输入 $remainingCount 个字符", "remainingTextFieldCharacterCountOther": "还可输入 $remainingCount 个字符",
"refreshIndicatorSemanticLabel": "刷新" "refreshIndicatorSemanticLabel": "刷新",
"moreButtonTooltip": "TBD"
} }
...@@ -50,5 +50,6 @@ ...@@ -50,5 +50,6 @@
"collapsedIconTapHint": "Nweba", "collapsedIconTapHint": "Nweba",
"remainingTextFieldCharacterCountOne": "1 uhlamvu olusele", "remainingTextFieldCharacterCountOne": "1 uhlamvu olusele",
"remainingTextFieldCharacterCountOther": "$remainingCount izinhlamvu ezisele", "remainingTextFieldCharacterCountOther": "$remainingCount izinhlamvu ezisele",
"refreshIndicatorSemanticLabel": "Vuselela" "refreshIndicatorSemanticLabel": "Vuselela",
"moreButtonTooltip": "TBD"
} }
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