Sonnat Project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

39 lines
1.4 KiB

1 year ago
1 year ago
  1. import 'dart:convert';
  2. import 'package:data/app_setting_data/repository/app_setting_box_repository_impl.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter/services.dart' show rootBundle;
  5. import 'package:local_db_core/lib/boxes/box_list/setting_box/app_setting_box.dart';
  6. import 'package:repositories/app_setting_box_domain/repository/app_setting_box_repository.dart';
  7. import 'package:sonnat/core/language/language_cubit.dart';
  8. import 'package:sonnat/core/language/languages.dart';
  9. final List<String> supportedLanguages = [
  10. 'en',
  11. 'fa',
  12. 'ar',
  13. ];
  14. class Translator {
  15. static Map<dynamic, dynamic>? _localizedValues;
  16. static Iterable<Locale> supportedLocales() => supportedLanguages.map<Locale>((lang) => Locale(lang, ''));
  17. static String translate(String key) {
  18. if (_localizedValues == null || _localizedValues![key] == null) {
  19. return '$key not found';
  20. }
  21. return _localizedValues![key];
  22. }
  23. static Future<void> setNewLanguage(Languages newLanguage) async {
  24. AppSettingBoxRepository repository = AppSettingBoxRepositoryImpl(appSettingBox: AppSettingBox());
  25. Locale locale = Locale(newLanguage.value, '');
  26. String jsonContent = await rootBundle.loadString('assets/languages/${locale.languageCode}.json');
  27. _localizedValues = json.decode(jsonContent);
  28. await repository.setCurrentLanguage(locale.languageCode);
  29. return;
  30. }
  31. Translator._internal();
  32. }