Files
Nikolay Tatarinov d02d0a1835
All checks were successful
CI / lint-and-test (push) Successful in 21s
refactor: improve language normalization and date handling utilities
- Introduced a new `normalize_lang` function to standardize language codes across the application, ensuring consistent handling of user language preferences.
- Refactored date handling utilities by adding `parse_utc_iso` and `parse_utc_iso_naive` functions for better parsing of ISO 8601 date strings, enhancing timezone awareness.
- Updated various modules to utilize the new language normalization and date parsing functions, improving code clarity and maintainability.
- Enhanced error handling in date validation to raise specific `DateRangeValidationError` exceptions, providing clearer feedback on validation issues.
- Improved test coverage for date range validation and language normalization functionalities, ensuring robustness and reliability.
2026-02-20 22:42:54 +03:00

27 lines
865 B
Python

"""Single source of truth for normalizing language codes to 'ru' or 'en'.
Use for: env DEFAULT_LANGUAGE, Accept-Language header, Telegram user.language_code,
and initData user object in Miniapp auth.
"""
from typing import Literal
def normalize_lang(code: str | None) -> Literal["ru", "en"]:
"""Normalize a language code to 'ru' or 'en'.
Suitable for: env DEFAULT_LANGUAGE, Accept-Language header,
Telegram user.language_code, and initData user in Miniapp auth.
Args:
code: Raw language code (e.g. 'ru', 'ru-RU', 'en', 'en-US') or None.
Returns:
'ru' if code starts with 'ru' (after strip/lower), else 'en'.
Returns 'en' when code is empty or not a string.
"""
if not code or not isinstance(code, str):
return "en"
code = code.strip().lower()
return "ru" if code.startswith("ru") else "en"