diff --git a/scripts/ensure_translations_correct.dart b/scripts/ensure_translations_correct.dart new file mode 100644 index 00000000..092178d7 --- /dev/null +++ b/scripts/ensure_translations_correct.dart @@ -0,0 +1,57 @@ +// This script has one task, which is to prevent the translations from +// being accidentally deleted, as we have more than 40 files for both the +// arb files (source) and the dart files (the generated) +// which make it harder to review the changes, some keys can be deleted +// without update the generated dart files which will cause a bug/build failure +// on the next time running the script after doing some changes to the translations +// which make it harder to revert the changes + +// The script must run in the root project folder instead of the scripts folder + +// ignore_for_file: depend_on_referenced_packages, avoid_print + +import 'dart:convert'; +import 'dart:io' show File, exit; + +import 'package:path/path.dart' as path; +import 'package:yaml/yaml.dart'; + +// This must be updated once add or remove some translation keys +// if you update existing keys, no need to update it +const _expectedTranslationKeysLength = 96; + +Future main(List args) async { + final l10nYamlText = await File('l10n.yaml').readAsString(); + final l10nYaml = loadYaml(l10nYamlText); + final arbDir = l10nYaml['arb-dir']; + final templateArbFileName = l10nYaml['template-arb-file']; + final templateArbFile = File(path.join(arbDir, templateArbFileName)); + print('The file path to template arb file: ${templateArbFile.path}'); + final templateArb = + jsonDecode(await templateArbFile.readAsString()) as Map; + print( + 'The length of the current translation keys: ${templateArb.keys.length}'); + final newTranslationKeysLength = templateArb.keys.length; + + if (newTranslationKeysLength > _expectedTranslationKeysLength) { + print( + "You have add a new keys, please update the '_expectedTranslationKeysLength' value", + ); + print('$newTranslationKeysLength > $_expectedTranslationKeysLength'); + exit(1); + } + if (newTranslationKeysLength < _expectedTranslationKeysLength) { + print( + "You have removed some keys, please update the '_expectedTranslationKeysLength' value", + ); + print('$newTranslationKeysLength < $_expectedTranslationKeysLength'); + exit(1); + } + if (newTranslationKeysLength != _expectedTranslationKeysLength) { + print( + "It's looks like you have modified the keys length without updating the `_expectedTranslationKeysLength` value", + ); + print('$newTranslationKeysLength != $_expectedTranslationKeysLength'); + exit(1); + } +}