findStringsFile function
Find slang generated file in a package Returns import path (e.g., 'package:pkg_a/i18n/translations.g.dart') or null
Implementation
Future<String?> findStringsFile(String packagePath, String packageName) async {
// Common locations for slang generated files
// Note: slang can generate as strings.g.dart OR translations.g.dart
final searchPaths = [
'lib/i18n/strings.g.dart',
'lib/i18n/translations.g.dart',
'lib/l10n/strings.g.dart',
'lib/l10n/translations.g.dart',
'lib/translations/strings.g.dart',
'lib/translations/translations.g.dart',
'lib/generated/strings.g.dart',
'lib/generated/translations.g.dart',
];
for (final relativePath in searchPaths) {
final file = File(p.join(packagePath, relativePath));
if (await file.exists()) {
// Convert to package import path
final importPath = relativePath.replaceFirst('lib/', '');
return 'package:$packageName/$importPath';
}
}
// Fallback: search lib directory recursively for .g.dart files with slang patterns
final libDir = Directory(p.join(packagePath, 'lib'));
if (!await libDir.exists()) {
return null;
}
await for (final entity in libDir.list(recursive: true)) {
if (entity is File) {
final filename = p.basename(entity.path);
if (filename == 'strings.g.dart' || filename == 'translations.g.dart') {
// Convert absolute path to package import
final relativePath = p.relative(entity.path, from: p.join(packagePath, 'lib'));
return 'package:$packageName/$relativePath';
}
}
}
return null;
}