What's Changed
π Internationalization (EN / PL)
Full two-language support across the entire CLI β menus, live screen, manual mode, status, recommendations, warnings, problems, advice and normalizer errors. Default language is English; Polish can be selected in Settings and is saved to %APPDATA%\ValoPicker\settings.json.
All visible strings are managed through a central i18n.py module with a t(language, key, **params) helper and a guaranteed fallback chain (lang β en β key), so the app never crashes on a missing translation.
ποΈ Code Quality
- Extracted all recommendation scoring weights into named constants at the top of
recommender.pywith a comment clarifying their nature as heuristic ranking weights, not probabilities. Previously every magic number (e.g. the controller bonus, the third-duelist penalty) was scattered inline with no explanation. - Pre-compute base role and utility counters once per
recommend()call instead of rebuilding them from scratch for every agent candidate (~20 iterations)._team_score_afternow receives the pre-built counters and copies them rather than re-iterating the team. - Added an explanatory comment next to
ssl._create_unverified_context()clarifying that Riot's local client uses a self-signed certificate and that the context is intentionally scoped to local lockfile-derived endpoints only. - Fixed settings file read to use
utf-8-sigencoding, preventing JSON parse errors caused by a BOM on Windows. - Added
requirements.txtdocumenting that the application has no runtime dependencies beyond the standard library.
β Tests
Added tests/test_i18n.py with 6 tests:
- EN and PL dictionaries have an identical set of keys (checked symmetrically in both directions)
- All translation values are non-empty strings
normalize_language()correctly falls back toenfor unknown orNoneinputt()correctly formats parametrised messages in both languages
Total test count: 72 tests, all passing.
Full Changelog: https://github.com/Taczer/valorant-picker/commits/main