11import 'package:flutter/material.dart' ;
2- import 'package:flutter_localizations/flutter_localizations.dart' ;
3- import 'package:flutter_gen/gen_l10n/app_localizations.dart' ;
42import 'package:provider/provider.dart' ;
5-
63import 'package:vpn_client/pages/apps/apps_page.dart' ;
4+ import 'dart:ui' as ui;
75import 'package:vpn_client/pages/main/main_page.dart' ;
86import 'package:vpn_client/pages/servers/servers_page.dart' ;
97import 'package:vpn_client/theme_provider.dart' ;
8+ import 'package:flutter_localizations/flutter_localizations.dart' ;
109import 'package:vpn_client/vpn_state.dart' ;
10+ import 'package:vpn_client/localization_service.dart' ;
1111
1212import 'design/colors.dart' ;
1313import 'nav_bar.dart' ;
1414
15- void main () {
15+ void main () async {
16+ WidgetsFlutterBinding .ensureInitialized ();
17+
18+ Locale userLocale =
19+ ui.PlatformDispatcher .instance.locale; // <-- Get the system locale
20+ await LocalizationService .load (userLocale);
21+
1622 runApp (
1723 MultiProvider (
1824 providers: [
@@ -36,28 +42,23 @@ class App extends StatelessWidget {
3642 final Locale ? manualLocale = null ; // ← use system by default
3743
3844 return MaterialApp (
45+ localizationsDelegates: const [
46+ GlobalMaterialLocalizations .delegate,
47+ GlobalWidgetsLocalizations .delegate,
48+ GlobalCupertinoLocalizations .delegate,
49+ ],
3950 debugShowCheckedModeBanner: false ,
4051 title: 'VPN Client' ,
4152 theme: lightTheme,
4253 darkTheme: darkTheme,
4354 locale: manualLocale,
44- localeResolutionCallback: (locale, supportedLocales ) {
55+ localeResolutionCallback: (locale, _ ) {
4556 if (locale == null ) return const Locale ('en' );
4657
4758 // Check for exact match
48- for (var supportedLocale in supportedLocales) {
49- if (supportedLocale.languageCode == locale.languageCode &&
50- (supportedLocale.countryCode == null ||
51- supportedLocale.countryCode == locale.countryCode)) {
52- return supportedLocale;
53- }
54- }
55-
56- // If Chinese variants are not supported, fallback to zh
57- if (locale.languageCode == 'zh' ) {
58- return supportedLocales.contains (const Locale ('zh' ))
59- ? const Locale ('zh' )
60- : const Locale ('en' );
59+ final supported = ['en' , 'ru' , 'th' , 'zh' ];
60+ if (supported.contains (locale.languageCode)) {
61+ return Locale (locale.languageCode);
6162 }
6263
6364 // Fallback to 'en' if not found
@@ -66,19 +67,6 @@ class App extends StatelessWidget {
6667
6768 themeMode: themeProvider.themeMode,
6869 home: const MainScreen (),
69-
70- localizationsDelegates: const [
71- AppLocalizations .delegate,
72- GlobalMaterialLocalizations .delegate,
73- GlobalWidgetsLocalizations .delegate,
74- GlobalCupertinoLocalizations .delegate,
75- ],
76- supportedLocales: const [
77- Locale ('en' ),
78- Locale ('ru' ),
79- Locale ('th' ),
80- Locale ('zh' ),
81- ],
8270 );
8371 }
8472}
0 commit comments