fix(i18n): resolve config format and argparse language pre-scan

- Fix config file reading to use canonical format {env: {STRIX_LANGUAGE: es}}
- Pre-scan sys.argv for --language/-l before argparse runs
- This allows --help to display translated text when language is set
- Addresses review feedback from greptile-apps[bot]
This commit is contained in:
criss717 2026-08-10 20:58:39 +02:00
parent 6bb9dda3ea
commit b76a5b7b88
2 changed files with 29 additions and 9 deletions

View file

@ -41,14 +41,17 @@ def _detect_language() -> str:
if env_lang:
return _normalize_lang(env_lang)
# 3. Config file
# 3. Config file (canonical format: {"env": {"STRIX_LANGUAGE": "es"}})
try:
config_path = Path.home() / ".strix" / "cli-config.json"
if config_path.exists():
data = json.loads(config_path.read_text(encoding="utf-8"))
config_lang = data.get("language", "").strip().lower()
if config_lang:
return _normalize_lang(config_lang)
if isinstance(data, dict):
env_block = data.get("env", {})
if isinstance(env_block, dict):
config_lang = env_block.get("STRIX_LANGUAGE", "").strip().lower()
if config_lang:
return _normalize_lang(config_lang)
except (json.JSONDecodeError, OSError):
pass

View file

@ -18,6 +18,25 @@ from strix.interface.utils import (
)
def _pre_resolve_language() -> None:
"""Set language from --language/-l before argparse runs.
Argparse evaluates help text at parse time, so we must set the language
BEFORE parse_args() is called. This pre-scans sys.argv for the flag.
"""
argv = sys.argv[1:]
for i, arg in enumerate(argv):
if arg in ("-l", "--language") and i + 1 < len(argv):
from strix.i18n import set_language
set_language(argv[i + 1])
return
# Handle --language=es form
if arg.startswith("--language="):
from strix.i18n import set_language
set_language(arg.split("=", 1)[1])
return
def get_version() -> str:
try:
from importlib.metadata import version
@ -50,6 +69,9 @@ def _positive_int(value: str) -> int:
def parse_arguments() -> argparse.Namespace:
# Pre-scan for --language before argparse runs so help text can be translated
_pre_resolve_language()
parser = argparse.ArgumentParser(
description="Strix Multi-Agent Cybersecurity Penetration Testing Tool",
formatter_class=argparse.RawDescriptionHelpFormatter,
@ -256,11 +278,6 @@ Examples:
args.diff_scope = {"active": False}
args.run_name = None
# Set language from CLI flag (highest priority in resolution chain)
if args.language:
from strix.i18n import set_language
set_language(args.language)
if args.config:
apply_config_override(validate_config_file(args.config))