replaceStringsWithLocaleKeys function
Future<void>
replaceStringsWithLocaleKeys(
{
})
Implementation
Future<void> replaceStringsWithLocaleKeys(
{required Map<String, String> extractedKeyValueMap}) async {
final selection = Select(
prompt: 'Do you want to replace the string with LocaleKeys ?',
options: ["Yes", "No"],
initialIndex: 0,
).interact();
if (selection == 1) return;
if (extractedKeyValueMap.isEmpty) {
ConsoleLog.error('❌ locale_key.dart is empty.');
return;
}
final libDir = Directory('${Directory.current.path}/lib');
if (!libDir.existsSync()) return;
/// PROCESS ALL FILES
for (var file in libDir.listSync(recursive: true)) {
if (file is! File || p.extension(file.path) != '.dart') continue;
final fileName = p.basename(file.path);
// Skip files we must NOT modify
if (fileName.contains('locale_keys') ||
fileName.contains('localization_service') ||
fileName == "en.dart" ||
fileName == "mr.dart" ||
fileName == "hi.dart") {
continue;
}
String fileContent = file.readAsStringSync();
final originalContent = fileContent;
/// Replace using extracted literal → key map
extractedKeyValueMap.forEach((keyName, literal) {
final escaped = RegExp.escape(literal);
// match 'text' OR "text"
final regex = RegExp("(['\"])$escaped\\1");
fileContent = fileContent.replaceAllMapped(regex, (match) {
// prevent double replacement
if (match.group(0)!.contains("LocaleKeys.$keyName.tr")) {
return match.group(0)!;
}
return "LocaleKeys.$keyName.tr";
});
});
/// Write only if modified
if (fileContent != originalContent) {
file.writeAsStringSync(fileContent);
ConsoleLog.info('Updated: ${file.path}');
}
}
ConsoleLog.success('✨ String replacement completed!');
}