CWA-174 | added localeDetection() to Language class, moved languages from change_language.dart to language.dart, localeDetection() called in the settings store
Oleksandr Sobol committed
Feb 26, 2020 at 19:18 UTC
90f66274a26992c83f6cfd9a13274b955c4b7c8e
5 files changed
+40
-22
lib/src/domain/common/language.dart
+24
@@ -1,4 +1,21 @@
1
import 'package:flutter/material.dart';
2
+import 'package:devicelocale/devicelocale.dart';
3
+import 'package:intl/intl.dart';
4
+
5
+const Map<String, String> languages = {
6
+ 'en': 'English',
7
+ 'de': 'Deutsch (German)',
8
+ 'es': 'Español (Spanish)',
9
+ 'hi': 'हिंदी (Hindi)',
10
+ 'ja': '日本 (Japanese)',
11
+ 'ko': '한국어 (Korean)',
12
+ 'nl': 'Nederlands (Dutch)',
13
+ 'pl': 'Polski (Polish)',
14
+ 'pt': 'Português (Portuguese)',
15
+ 'ru': 'Русский (Russian)',
16
+ 'uk': 'Українська (Ukrainian)',
17
+ 'zh': '中文 (Chinese)'
18
+};
19
20
class Language with ChangeNotifier {
21
Language(this._currentLanguage);
@@ -11,4 +28,11 @@ class Language with ChangeNotifier {
28
_currentLanguage = language;
29
notifyListeners();
30
}
31
+
32
+ static Future<String> localeDetection() async {
33
+ String locale = await Devicelocale.currentLocale;
34
+ locale = Intl.shortLocale(locale);
35
+
36
+ return languages.keys.contains(locale) ? locale : 'en';
37
+ }
38
}
\ No newline at end of file
lib/src/screens/settings/change_language.dart
+6
-21
@@ -6,21 +6,6 @@ import 'package:cake_wallet/src/domain/common/language.dart';
6
import 'package:cake_wallet/src/stores/settings/settings_store.dart';
7
import 'package:cake_wallet/src/screens/base_page.dart';
8
9
-const Map<String, String> _languages = {
10
- 'en': 'English',
11
- 'de': 'Deutsch (German)',
12
- 'es': 'Español (Spanish)',
13
- 'hi': 'हिंदी (Hindi)',
14
- 'ja': '日本 (Japanese)',
15
- 'ko': '한국어 (Korean)',
16
- 'nl': 'Nederlands (Dutch)',
17
- 'pl': 'Polski (Polish)',
18
- 'pt': 'Português (Portuguese)',
19
- 'ru': 'Русский (Russian)',
20
- 'uk': 'Українська (Ukrainian)',
21
- 'zh': '中文 (Chinese)'
22
-};
23
-
9
class ChangeLanguage extends BasePage {
10
@override
11
String get title => S.current.settings_change_language;
@@ -36,11 +21,11 @@ class ChangeLanguage extends BasePage {
21
return Container(
22
padding: EdgeInsets.only(top: 10.0, bottom: 10.0),
23
child: ListView.builder(
39
- itemCount: _languages.values.length,
24
+ itemCount: languages.values.length,
25
itemBuilder: (BuildContext context, int index) {
26
final isCurrent = settingsStore.languageCode == null
27
? false
43
- : _languages.keys.elementAt(index) ==
28
+ : languages.keys.elementAt(index) ==
29
settingsStore.languageCode;
30
31
return Container(
@@ -48,7 +33,7 @@ class ChangeLanguage extends BasePage {
33
color: isCurrent ? currentColor : notCurrentColor,
34
child: ListTile(
35
title: Text(
51
- _languages.values.elementAt(index),
36
+ languages.values.elementAt(index),
37
style: TextStyle(
38
fontSize: 16.0,
39
color: Theme.of(context).primaryTextTheme.title.color),
@@ -65,7 +50,7 @@ class ChangeLanguage extends BasePage {
50
),
51
content: Text(
52
S.of(context).change_language_to(
68
- _languages.values.elementAt(index)),
53
+ languages.values.elementAt(index)),
54
textAlign: TextAlign.center,
55
),
56
actions: <Widget>[
@@ -76,9 +61,9 @@ class ChangeLanguage extends BasePage {
61
onPressed: () {
62
settingsStore.saveLanguageCode(
63
languageCode:
79
- _languages.keys.elementAt(index));
64
+ languages.keys.elementAt(index));
65
currentLanguage.setCurrentLanguage(
81
- _languages.keys.elementAt(index));
66
+ languages.keys.elementAt(index));
67
Navigator.of(context).pop();
68
},
69
child: Text(S.of(context).change)),
lib/src/stores/settings/settings_store.dart
+2
-1
@@ -13,6 +13,7 @@ import 'package:cake_wallet/src/screens/settings/items/item_headers.dart';
13
import 'package:cake_wallet/generated/i18n.dart';
14
import 'package:cake_wallet/src/domain/common/default_settings_migration.dart';
15
import 'package:package_info/package_info.dart';
16
+import 'package:cake_wallet/src/domain/common/language.dart';
17
18
part 'settings_store.g.dart';
19
@@ -93,7 +94,7 @@ abstract class SettingsStoreBase with Store {
94
: sharedPreferences.getInt(currentPinLength);
95
final savedLanguageCode =
96
sharedPreferences.getString(currentLanguageCode) == null
96
- ? 'en'
97
+ ? await Language.localeDetection()
98
: sharedPreferences.getString(currentLanguageCode);
99
100
final store = SettingsStore(
pubspec.lock
+7
@@ -211,6 +211,13 @@ packages:
211
url: "https://pub.dartlang.org"
212
source: hosted
213
version: "1.0.6"
214
+ devicelocale:
215
+ dependency: "direct main"
216
+ description:
217
+ name: devicelocale
218
+ url: "https://pub.dartlang.org"
219
+ source: hosted
220
+ version: "0.2.1"
221
dio:
222
dependency: "direct main"
223
description:
pubspec.yaml
+1
@@ -47,6 +47,7 @@ dependencies:
47
hive_flutter: ^0.2.1
48
local_auth: ^0.6.1
49
package_info: ^0.4.0+13
50
+ devicelocale: ^0.2.1
51
52
# The following adds the Cupertino Icons font to your application.
53
# Use with the CupertinoIcons class for iOS style icons.