import 'dart:async'; import 'package:flutter/services.dart' show rootBundle; final RegExp esRegExp = RegExp('^es-'); String getFallbackLang(String lang) { if (lang == 'ast' || lang == 'gl' || lang == 'eu' || lang == 'es' || lang == 'ca' || esRegExp.allMatches(lang).isNotEmpty) { return 'es'; } return 'en'; } Future getFileNameOfLang( {required String dir, required String fileName, required String ext, required String lang}) async { final String base = '$dir/$fileName'; final String fallback = getFallbackLang(lang); String file = '$base-$lang.$ext'; if (await assetNotExists(file)) { file = '$base-$fallback.$ext'; if (await assetNotExists(file)) { file = '$base.$ext'; } } return file; } // https://github.com/flutter/flutter/issues/15325 Future assetNotExists(String asset) { return rootBundle .load(asset) .then((_) => false) .catchError((Object err, StackTrace stack) { return true; }); }