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)
|