| 1 | import 'package:cake_wallet/generated/locales.dart'; |
| 2 | import 'package:devicelocale/devicelocale.dart'; |
| 3 | import 'package:intl/intl.dart'; |
| 4 | |
| 5 | class LanguageService { |
| 6 | static const Map<String, String> supportedLocales = { |
| 7 | 'en': 'English', |
| 8 | 'de': 'Deutsch (German)', |
| 9 | 'es': 'Español (Spanish)', |
| 10 | 'fa': 'فارسی (Persian)', |
| 11 | 'fr': 'Français (French)', |
| 12 | // 'gn': 'Guarani (Guarani)', |
| 13 | 'hi': 'हिंदी (Hindi)', |
| 14 | 'ja': '日本 (Japanese)', |
| 15 | 'ko': '한국어 (Korean)', |
| 16 | 'nl': 'Nederlands (Dutch)', |
| 17 | 'pl': 'Polski (Polish)', |
| 18 | 'pt': 'Português (Portuguese)', |
| 19 | 'pt_BR': 'Português Brasileiro (Brazilian Portuguese)', |
| 20 | 'ru': 'Русский (Russian)', |
| 21 | 'uk': 'Українська (Ukrainian)', |
| 22 | 'zh': '简体中文 (Chinese Simplified)', |
| 23 | 'hr': 'Hrvatski (Croatian)', |
| 24 | 'it': 'Italiano (Italian)', |
| 25 | 'th': 'ภาษาไทย (Thai)', |
| 26 | 'ar': 'العربية (Arabic)', |
| 27 | 'tr': 'Türkçe (Turkish)', |
| 28 | 'my': 'မြန်မာ (Burmese)', |
| 29 | 'bg': 'Български (Bulgarian)', |
| 30 | 'cs': 'čeština (Czech)', |
| 31 | 'ur': 'اردو (Urdu)', |
| 32 | 'id': 'Bahasa Indonesia (Indonesian)', |
| 33 | 'yo': 'Yorùbá (Yoruba)', |
| 34 | 'ha': 'Hausa Najeriya (Nigeria)', |
| 35 | 'tl': 'Filipino (Tagalog)', |
| 36 | 'hy': 'Հայերեն (Armenian)', |
| 37 | 'vi': 'Tiếng Việt (Vietnamese)', |
| 38 | }; |
| 39 | |
| 40 | static const Map<String, String> localeCountryCode = { |
| 41 | 'en': 'usa', |
| 42 | 'de': 'deu', |
| 43 | 'es': 'esp', |
| 44 | 'fa': 'irn', |
| 45 | 'fr': 'fra', |
| 46 | 'gn': 'grn', |
| 47 | 'hi': 'ind', |
| 48 | 'ja': 'jpn', |
| 49 | 'ko': 'kor', |
| 50 | 'nl': 'nld', |
| 51 | 'pl': 'pol', |
| 52 | 'pt': 'prt', |
| 53 | 'pt_BR': 'bra', |
| 54 | 'ru': 'rus', |
| 55 | 'uk': 'ukr', |
| 56 | 'zh': 'chn', |
| 57 | 'hr': 'hrv', |
| 58 | 'it': 'ita', |
| 59 | 'th': 'tha', |
| 60 | 'ar': 'sau', |
| 61 | 'tr': 'tur', |
| 62 | 'my': 'mmr', |
| 63 | 'bg': 'bgr', |
| 64 | 'cs': 'czk', |
| 65 | 'ur': 'pak', |
| 66 | 'id': 'idn', |
| 67 | 'yo': 'nga', |
| 68 | 'ha': 'hau', |
| 69 | 'tl': 'phl', |
| 70 | 'hy': 'arm', |
| 71 | 'vi': 'vnm', |
| 72 | }; |
| 73 | |
| 74 | static final list = <String, String>{}; |
| 75 | |
| 76 | static const defaultLocale = 'en'; |
| 77 | |
| 78 | static void loadLocaleList() { |
| 79 | supportedLocales.forEach((key, value) { |
| 80 | if (locales.contains(key)) { |
| 81 | list[key] = value; |
| 82 | } |
| 83 | }); |
| 84 | } |
| 85 | |
| 86 | static Future<String> localeDetection() async { |
| 87 | try { |
| 88 | var locale = await Devicelocale.currentLocale ?? ''; |
| 89 | locale = Intl.shortLocale(locale); |
| 90 | |
| 91 | if (list.keys.contains(locale)) { |
| 92 | return locale; |
| 93 | } |
| 94 | return LanguageService.defaultLocale; |
| 95 | } catch (_) { |
| 96 | return LanguageService.defaultLocale; |
| 97 | } |
| 98 | } |
| 99 | } |