Вот код:
Widget _buildAndroid(BuildContext context) {
final width = MediaQuery.of(context).size.width;
return PopupMenuButton<ScreenOrientation>(
child: SizedBox(
width: width,
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Icon(ScreenOrientation._getAndroidIconData(currentSelection), size: 30, color: iconColor),
SizedBox(width: 20),
Icon(Icons.expand_more, color: fontColor)
])),
padding: EdgeInsets.zero,
onSelected: (ScreenOrientation orientation) {
onScreenOrientationChanged(orientation);
},
itemBuilder: (BuildContext context) =>
ScreenOrientation.orientations
.map((o) => CheckedPopupMenuItem<ScreenOrientation>(
key: UniqueKey(),
selectedColor: selectedColor,
child: Row(
children: <Widget>[
Icon(ScreenOrientation._getAndroidIconData(o), size: 30, color: iconColor),
SizedBox(width: 10),
Text(L10n.of(context).tr((m) =>
m['settings']['orientations'][o._name]),
style: TextStyle(color: fontColor),
)
],
),
value: o,
checked: o == currentSelection,
))
.toList());
}
Таким образом, единственный интересный бит здесь - это L10n.of(context).tr((m) => m['settings']['orientations'][o._name]
, который по существу извлекает локализованную строку из правого файла json, имя которого определяется на основе текущей локали.