createLocaleFile method
Creates a new empty locale file.
Implementation
Future<void> createLocaleFile(String locale) async {
final normalizedLocale = locale.trim().replaceAll('-', '_');
if (!_isLocaleCode(normalizedLocale)) {
throw ArgumentError('Invalid locale code: "$locale"');
}
final dataset = await load();
if (dataset.locales.contains(normalizedLocale)) {
throw CatalogRepositoryException('Locale "$normalizedLocale" already exists.');
}
final dir = Directory(_langDirectoryPath);
if (!dir.existsSync()) {
await dir.create(recursive: true);
}
final emptyContent = <String, dynamic>{};
String filePath;
switch (config.format) {
case CatalogFileFormat.json:
filePath = PathUtils.join(_langDirectoryPath, '$normalizedLocale.json');
await File(filePath).writeAsString(const JsonEncoder.withIndent(' ').convert(emptyContent));
break;
case CatalogFileFormat.yaml:
filePath = PathUtils.join(_langDirectoryPath, '$normalizedLocale.yaml');
await File(filePath).writeAsString('{}\n');
break;
case CatalogFileFormat.csv:
filePath = PathUtils.join(_langDirectoryPath, '$normalizedLocale.csv');
await File(filePath).writeAsString('key,value\n');
break;
case CatalogFileFormat.arb:
filePath = PathUtils.join(_langDirectoryPath, '${config.arbFilePrefix}_$normalizedLocale.arb');
final arbContent = '''
{
"@@locale": "$normalizedLocale",
"@@last_modified": "${DateTime.now().toUtc().toIso8601String()}"
}''';
await File(filePath).writeAsString(arbContent);
break;
}
}