Skip to content

Commit a07409a

Browse files
authored
Merge pull request #73 from Dusk-afk/l10n_improvement
Enable immediate language change without requiring restart
2 parents 0d0e762 + 3800487 commit a07409a

File tree

3 files changed

+26
-17
lines changed

3 files changed

+26
-17
lines changed

lib/main.dart

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'package:package_info_plus/package_info_plus.dart';
99
import 'package:revitool/commands/ms_store_command.dart';
1010
import 'package:revitool/commands/recommendation_command.dart';
1111
import 'package:revitool/l10n/generated/localizations.dart';
12+
import 'package:revitool/providers/l10n_provider.dart';
1213
import 'package:revitool/screens/home_page.dart';
1314
import 'package:provider/provider.dart';
1415
import 'package:revitool/theme.dart';
@@ -89,10 +90,14 @@ class MyApp extends StatelessWidget {
8990

9091
@override
9192
Widget build(BuildContext context) {
92-
return ChangeNotifierProvider(
93-
create: (_) => AppTheme(SettingsService()),
93+
return MultiProvider(
94+
providers: [
95+
ChangeNotifierProvider(create: (_) => AppTheme(SettingsService())),
96+
ChangeNotifierProvider(create: (_) => L10nProvider(appLanguage)),
97+
],
9498
builder: (context, _) {
9599
final appTheme = context.watch<AppTheme>();
100+
final appLocale = context.watch<L10nProvider>().locale;
96101
return FluentApp(
97102
title: 'Revision Tool',
98103
debugShowCheckedModeBanner: false,
@@ -101,7 +106,7 @@ class MyApp extends StatelessWidget {
101106
ReviLocalizations.delegate,
102107
GlobalWidgetsLocalizations.delegate,
103108
],
104-
locale: Locale(appLanguage.split('_')[0], appLanguage.split('_')[1]),
109+
locale: appLocale,
105110
supportedLocales: ReviLocalizations.supportedLocales,
106111
themeMode: appTheme.themeMode,
107112
color: appTheme.color,

lib/providers/l10n_provider.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import 'package:fluent_ui/fluent_ui.dart';
2+
3+
class L10nProvider with ChangeNotifier {
4+
L10nProvider(String initialLocale) {
5+
_locale = initialLocale;
6+
}
7+
8+
late String _locale;
9+
String get localeStr => _locale;
10+
Locale get locale => Locale(_locale.split("_")[0], _locale.split("_")[1]);
11+
12+
void changeLocale(String newLocale) {
13+
_locale = newLocale;
14+
notifyListeners();
15+
}
16+
}

lib/screens/settings.dart

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:fluent_ui/fluent_ui.dart';
22
import 'package:provider/provider.dart';
33
import 'package:revitool/extensions.dart';
4+
import 'package:revitool/providers/l10n_provider.dart';
45
import 'package:revitool/services/tool_update_service.dart';
56
import 'package:revitool/theme.dart';
67
import 'package:revitool/utils.dart';
@@ -189,21 +190,8 @@ class _SettingsPageState extends State<SettingsPage> {
189190
r'SOFTWARE\Revision\Revision Tool',
190191
'Language',
191192
appLanguage);
193+
context.read<L10nProvider>().changeLocale(appLanguage);
192194
});
193-
showDialog(
194-
context: context,
195-
builder: (context) => ContentDialog(
196-
content: Text(context.l10n.restartAppDialog),
197-
actions: [
198-
Button(
199-
child: Text(context.l10n.okButton),
200-
onPressed: () {
201-
Navigator.pop(context);
202-
},
203-
)
204-
],
205-
),
206-
);
207195
},
208196
items: languageList,
209197
),

0 commit comments

Comments
 (0)