2025-04-02 19:11:36 +05:30

82 lines
2.4 KiB
Dart

import 'dart:convert';
import 'dart:developer';
import 'package:maxdash/helpers/services/localizations/language.dart';
import 'package:flutter/services.dart';
import 'package:get/get_utils/src/extensions/string_extensions.dart';
import 'package:shared_preferences/shared_preferences.dart';
class Translator {
static Map<String, String>? _localizedStrings;
static Future<bool> changeLanguage(Language language) async {
try {
String jsonString = await rootBundle
.loadString('assets/lang/${language.locale.languageCode}.json');
Map<String, dynamic> jsonLanguageMap = json.decode(jsonString);
_localizedStrings = jsonLanguageMap.map((key, value) {
return MapEntry(key, value.toString());
});
return true;
} catch (e) {
log(e.toString());
}
return false;
}
// called from every screens which needs a localized text
static String translate(String text) {
if (_localizedStrings != null) {
String? value = _localizedStrings![text];
return value ?? autoTranslate(text);
}
return autoTranslate(text);
}
static String autoTranslate(String text) {
// log("You need to translate this text : " + text);
at(text);
try {
List<String> texts = text.split("_");
StringBuffer stringBuffer = StringBuffer();
for (String singleText in texts) {
stringBuffer
.write("${singleText[0].toUpperCase()}${singleText.substring(1)} ");
}
String result = stringBuffer.toString();
return result.substring(0, result.length - 1);
} catch (err) {
return text;
}
}
static Future<void> at(String t) async {
// print("at");
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
var data = sharedPreferences.getStringList('test_tr') ?? [];
var set = data.toSet();
set.add(t);
sharedPreferences.setStringList('test_tr', set.toList());
}
static clearTrans() async {
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
await sharedPreferences.remove('test_tr');
}
static getUnTrans() async {
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
var data = sharedPreferences.getStringList('test_tr') ?? [];
var set = data.toSet();
String text = "";
for (var value in set.toList()) {
var p = value.replaceAll("_", " ");
p = p.capitalize!;
text += ('"$value": "$p",\n');
}
log(text);
}
}