Вызов Localizations.localeOf(context).languageCode
должен вернуть вам languageCode. MaterialApp создает и использует локализацию по умолчанию, если она не предоставлена, а затем вы можете вызвать ее после MaterialApp, чтобы узнать язык, на котором в настоящее время используется устройство, и обновить свое приложение этой информацией с помощью вашего State Managament.
Мой совет для простой проект - использовать этот плагин для VS IDE (или this для Android Studio, это от того же автора). После его установки просто добавьте зависимости в свой pubspe c .yaml
dependencies:
// Other dependencies...
flutter_localizations:
sdk: flutter
...
flutter_intl:
enabled: true
class_name: S # Optional. Sets the name for the generated localization class. Default: S
main_locale: en # Optional. Sets the main locale used for generating localization files. Provided value should comply with ISO-639-1 and ISO-3166-1 (e.g. "en", "en_GB"). Default: en
In Android Studio (я действительно не знаю, где в VS, извините) проверьте Tools > Flutter intl
(он должен быть в конец), и там вы можете инициализировать свой проект и добавить языковые стандарты. Теперь в вашем проекте должна быть папка lib/l10n
с файлами arb, они выглядят как файлы JSON, просто добавьте ключ со строкой. Создайте по одному для каждой языковой версии, которую хотите, и дайте им параметры строки для каждого языка
intl_en.arb {"name": "У меня есть имя"}
intl_es.arb {"name" : "Yo ten go un Nombre"}
Сборка должна запуститься автоматически. После этого создайте свое материальное приложение, делегирующее S (имя кода, который будет сгенерирован, вы можете изменить имя позже, если хотите).
import 'package:flutter_localizations/flutter_localizations.dart';
import 'generated/l10n.dart';
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
localizationsDelegates: [
S.delegate, //The class S
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales,
title: 'Flutter Demo',
home: MyHomePage(),
);
}
}
Теперь вы можете использовать его в дереве виджетов
class MyHomePage extends StatelessWidget{
@override
Widget build(BuildContext context){
return Text(S.of(context).name)
// now it prints the string of name depending the language the device is
}
}
Если устройство работает на языке, который вы не поддерживаете (например, французский в моем случае), оно будет использовать язык класса по умолчанию en ('Engli sh), отметьте main_locale в pubspe c, если вы хотите использовать другой по умолчанию
Отметьте это Пример того, как использовать интернационализацию с JSON ключами, если вы хотите попробовать что-то другое.