load static method
Implementation
static Future<CatalogConfig> load({
String path = defaultConfigPath,
}) async {
final file = File(path);
if (!file.existsSync()) {
return CatalogConfig.defaults();
}
final content = await file.readAsString();
final parsed = loadYaml(content);
if (parsed is! YamlMap) {
throw const FormatException('anas_catalog.yaml must be a YAML object.');
}
final formatRaw = parsed['format']?.toString() ?? 'json';
final sourceRaw = parsed['source_locale']?.toString();
final hideCatalogUiKeys = _parseBool(
parsed['hide_catalog_ui_keys'],
fallback: true,
);
final autoGenerateDictionary = _parseBool(
parsed['auto_generate_dictionary'],
fallback: true,
);
return CatalogConfig(
version: int.tryParse(parsed['version']?.toString() ?? '') ?? 1,
langDir: parsed['lang_dir']?.toString() ?? 'assets/lang',
format: catalogFileFormatFromString(formatRaw),
fallbackLocale: parsed['fallback_locale']?.toString() ?? 'en',
sourceLocale: (sourceRaw == null || sourceRaw == 'null' || sourceRaw.trim().isEmpty) ? null : sourceRaw,
stateFile: parsed['state_file']?.toString() ?? '.anas_localization/catalog_state.json',
uiPort: int.tryParse(parsed['ui_port']?.toString() ?? '') ?? 4466,
apiPort: int.tryParse(parsed['api_port']?.toString() ?? '') ?? 4467,
openBrowser: _parseBool(parsed['open_browser'], fallback: true),
arbFilePrefix: parsed['arb_file_prefix']?.toString() ?? 'app',
hideCatalogUiKeys: hideCatalogUiKeys,
autoGenerateDictionary: autoGenerateDictionary,
);
}