refactor: improve language normalization and date handling utilities
All checks were successful
CI / lint-and-test (push) Successful in 21s
All checks were successful
CI / lint-and-test (push) Successful in 21s
- 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.
This commit is contained in:
26
duty_teller/i18n/lang.py
Normal file
26
duty_teller/i18n/lang.py
Normal file
@@ -0,0 +1,26 @@
|
||||
"""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"
|
||||
Reference in New Issue
Block a user