我正在尝试在 flutter 中进行本地化。你能帮我解决这个问题吗?如何在flutter中进行本地化?
final connectivity = Connectivity();
late StreamSubscription<List<ConnectivityResult>> connRes;
final FlutterLocalization localization = FlutterLocalization.instance;
@override
void initState() {
WidgetsBinding.instance.addObserver(this);
// ru_RU -> ru
final String localeName = Platform.localeName.split("_").first;
localization.init(
mapLocales: [
const MapLocale('en', AppLocale.EN),
const MapLocale('ru', AppLocale.RU),
],
initLanguageCode: (localeName != "ru") ? "en" : "ru",
);
localization.onTranslatedLanguage = (_) => setState(() {});
super.initState();
connRes = connectivity.onConnectivityChanged.listen((event) {
if (event.first == ConnectivityResult.none){
showError(context, 'Internet crached');
}
});
}
@override
void didChangeLocales(List<Locale>? locales) {
if (locales == null){
return;
}
localization.translate((locales.first.languageCode != "ru")
? "en"
: "ru"
);
super.didChangeLocales(locales);
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
connRes.cancel();
}
请按照以下步骤操作:
1- 将本地化添加到您的依赖项
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
2- 将以下代码添加到您的
main.dart
文件
Future<void> main() async{
WidgetsFlutterBinding.ensureInitialized();
MobileAds.instance.initialize();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return GetMaterialApp(
localizationsDelegates: const [
GlobalCupertinoLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: const [
Locale("fa", "IR"), // OR Locale('ar', 'AE') OR Other RTL locales
],
locale: const Locale("fa", "IR"),
theme: ThemeData(
useMaterial3: true,
fontFamily: 'Vazir',
bottomSheetTheme: const BottomSheetThemeData(surfaceTintColor: Colors.white12,),
),
title: 'app title',
debugShowCheckedModeBanner: false,
home: const Directionality(textDirection: TextDirection.rtl, child: Home()),
);
}
}