createLocaleFile method

Future<void> createLocaleFile(
  1. String locale
)

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;
  }
}