You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			161 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			161 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
| #!/bin/python3
 | |
| import argparse
 | |
| import json
 | |
| import os
 | |
| import sys
 | |
| 
 | |
| 
 | |
| # This allows for importing from the localization and util directories NOTE: Auto importing tools will also prepend the import paths with "tools." this will not work and needs to be removed from import paths
 | |
| sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
 | |
| 
 | |
| from util.time import ExecutionTimer;
 | |
| 
 | |
| timer = ExecutionTimer()
 | |
| 
 | |
| from dynamicVariables import (
 | |
|     extractVariablesFromDict,
 | |
|     identifyLocaleDyanmicVariableDifferences,
 | |
|     prettyPrintIssuesTable,
 | |
|     identifyAndPrintOldDynamicVariables,
 | |
| )
 | |
| from localization.localeTypes import generateLocalesType
 | |
| from util.logger import console
 | |
| from util.fileUtils import createMappedJsonFileDictionary, writeFile
 | |
| 
 | |
| 
 | |
| # If the --throw-error-on-missing flag is passed, the script will exit with an error if there are any missing keys or dynamic variables
 | |
| # This is useful for CI/CD pipelines to ensure that all translations are consistent
 | |
| parser = argparse.ArgumentParser(description="Generate locale files")
 | |
| parser.add_argument(
 | |
|     "--error-on-problems",
 | |
|     action="store_true",
 | |
|     help="Exit with an error if there are any missing keys or dynamic variables",
 | |
| )
 | |
| parser.add_argument(
 | |
|     "--error-old-dynamic-variables",
 | |
|     action="store_true",
 | |
|     help="Exit with an error if there are any old dynamic variables",
 | |
| )
 | |
| parser.add_argument(
 | |
|     "--print-problems",
 | |
|     action="store_true",
 | |
|     help="Print the problems table",
 | |
| )
 | |
| parser.add_argument(
 | |
|     "--write-problems", action="store_true", help="Write the problems to a file"
 | |
| )
 | |
| parser.add_argument(
 | |
|     "--problems-file",
 | |
|     default="./tools/localization/output/problems.json",
 | |
|     help="The file to write the problems to",
 | |
| )
 | |
| parser.add_argument(
 | |
|     "--print-old-dynamic-variables",
 | |
|     action="store_true",
 | |
|     help="The file to write the problems to",
 | |
| )
 | |
| parser.add_argument("--en-only", action="store_true", help="Only check the en locale")
 | |
| parser.add_argument("--debug", action="store_true", help="Enable debug mode")
 | |
| parser.add_argument(
 | |
|     "--dict-dir",
 | |
|     type=str,
 | |
|     default="./_locales"
 | |
| )
 | |
| parser.add_argument(
 | |
|     "--dict-file-name",
 | |
|     type=str,
 | |
|     default="messages.json",
 | |
| )
 | |
| parser.add_argument(
 | |
|     "--en-file-path",
 | |
|     type=str,
 | |
|     default="./_locales/en/messages.json",
 | |
| )
 | |
| parser.add_argument(
 | |
|     "--generate-types",
 | |
|     action="store_true",
 | |
|     help="Generate the types file",
 | |
| )
 | |
| 
 | |
| args = parser.parse_args()
 | |
| 
 | |
| if args.debug:
 | |
|     console.enableDebug()
 | |
| 
 | |
| GENERATE_TYPES = args.generate_types
 | |
| OUTPUT_DIR = "./ts/localization"
 | |
| EN_FILE = args.en_file_path
 | |
| INPUT_DIR = args.dict_dir
 | |
| 
 | |
| # Create a dictionary that maps locale names to their corresponding JSON file data
 | |
| locales, localeFiles = createMappedJsonFileDictionary(INPUT_DIR, args.dict_file_name)
 | |
| 
 | |
| if args.en_only:
 | |
|     locales = {"en": locales["en"]}
 | |
| 
 | |
| # Generate the locales type and write it to a file
 | |
| if GENERATE_TYPES:
 | |
|   generateTypesOutputMessage = generateLocalesType(locales["en"])
 | |
|   console.info(generateTypesOutputMessage)
 | |
| 
 | |
| localeVariables = dict()
 | |
| localeVariablesOld = dict()
 | |
| 
 | |
| # Extract the dynamic variables from each locale and store them in a dictionary
 | |
| for locale, data in locales.items():
 | |
|     console.debug(f"Extracting dynamic variables for {locale}")
 | |
|     (
 | |
|         localeVariables[locale],
 | |
|         localeVariablesOld[locale],
 | |
|     ) = extractVariablesFromDict(data)
 | |
| 
 | |
| 
 | |
| problems = identifyLocaleDyanmicVariableDifferences(localeVariables)
 | |
| 
 | |
| 
 | |
| found_old_dynamic_variables = identifyAndPrintOldDynamicVariables(
 | |
|     localeVariablesOld, args.print_old_dynamic_variables
 | |
| )
 | |
| 
 | |
| # Wrapping up the script and printing out the results
 | |
| 
 | |
| if problems:
 | |
|     message = "There are issues with the locales."
 | |
|     if args.print_problems:
 | |
|         prettyPrintIssuesTable(problems)
 | |
|         message += " See above for details."
 | |
| 
 | |
|     if args.write_problems:
 | |
|         writeFile(args.problems_file, json.dumps(problems, indent=2))
 | |
|         console.info(f"Problems written to {args.problems_file}")
 | |
|         message += f" Problems written to {args.problems_file}"
 | |
| 
 | |
|     if not args.print_problems and not args.write_problems:
 | |
|         message += " Run the script with --print-problems or --write-problems to see the problems."
 | |
| 
 | |
|     console.warn(message)
 | |
| 
 | |
| if found_old_dynamic_variables:
 | |
|     warning_message = (
 | |
|     "Old dynamic variables were found in the locales. Please update the locales to use the new dynamic variables. "
 | |
| )
 | |
|     if args.print_old_dynamic_variables:
 | |
|         if args.print_problems:
 | |
|             warning_message += "See above for details (before the problems table)."
 | |
|         else:
 | |
|             warning_message += "See above for details."
 | |
|     else:
 | |
|         warning_message += "Run the script with --print-old-dynamic-variables to see the old dynamic variables."
 | |
|     console.warn(warning_message)
 | |
| 
 | |
| 
 | |
| 
 | |
| console.debug("Locales generation complete")
 | |
| 
 | |
| timer.stop()
 | |
| 
 | |
| if (args.error_on_problems and problems) or (
 | |
|     args.error_old_dynamic_variables and found_old_dynamic_variables
 | |
| ):
 | |
|     sys.exit(1)
 |