fromFileModel static method
SlangFileCollection
fromFileModel({
- required RawConfig config,
- required Iterable<
PlainTranslationFile> files,
Implementation
static SlangFileCollection fromFileModel({
required RawConfig config,
required Iterable<PlainTranslationFile> files,
}) {
final includeUnderscore = config.namespaces &&
files.any((f) {
final fileNameNoExtension = PathUtils.getFileNameNoExtension(f.path);
final baseFileMatch =
RegexUtils.baseFileRegex.firstMatch(fileNameNoExtension);
if (baseFileMatch == null) {
return false;
}
// It is a file without locale but has a directory locale
return PathUtils.findDirectoryLocale(
filePath: f.path,
inputDirectory: config.inputDirectory,
) !=
null;
});
return SlangFileCollection(
config: config,
files: files
.map((f) {
final fileNameNoExtension =
PathUtils.getFileNameNoExtension(f.path);
final baseFileMatch =
RegexUtils.baseFileRegex.firstMatch(fileNameNoExtension);
if (includeUnderscore || baseFileMatch != null) {
// base file (file without locale, may be multiples due to namespaces!)
// could also be a non-base locale when directory name is a locale
// directory name could be a locale
I18nLocale? directoryLocale;
if (config.namespaces) {
directoryLocale = PathUtils.findDirectoryLocale(
filePath: f.path,
inputDirectory: config.inputDirectory,
);
}
return TranslationFile(
path: f.path,
locale: directoryLocale ?? config.baseLocale,
namespace: fileNameNoExtension,
read: f.read,
);
} else {
// secondary files (strings_x)
final match = RegexUtils.fileWithLocaleRegex
.firstMatch(fileNameNoExtension);
if (match != null) {
final namespace = match.group(1)!;
final locale = I18nLocale(
language: match.group(2)!,
script: match.group(3),
country: match.group(4),
);
return TranslationFile(
path: f.path,
locale: locale,
namespace: namespace,
read: f.read,
);
}
}
return null;
})
// We cannot use "nonNulls" because this requires Dart 3.0
// and slang currently supports Dart 2.17
// ignore: deprecated_member_use
.whereNotNull()
.sortedBy((file) => '${file.locale}-${file.namespace}'),
);
}