mirror of
https://github.com/Aider-AI/aider.git
synced 2025-05-29 16:54:59 +00:00
refactor: add normalize_language and improve get_user_language to return readable names
This commit is contained in:
parent
433f2908a0
commit
e17c7d938c
1 changed files with 61 additions and 9 deletions
|
@ -1018,23 +1018,75 @@ class Coder:
|
|||
]
|
||||
self.cur_messages = []
|
||||
|
||||
def get_user_language(self):
|
||||
if self.chat_language:
|
||||
return self.chat_language
|
||||
def normalize_language(self, lang_code):
|
||||
"""
|
||||
Convert a locale code such as ``en_US`` or ``fr`` into a readable
|
||||
language name (e.g. ``English`` or ``French``). If Babel is
|
||||
available it is used for reliable conversion; otherwise a small
|
||||
built-in fallback map handles common languages.
|
||||
"""
|
||||
if not lang_code:
|
||||
return None
|
||||
|
||||
# Probably already a language name
|
||||
if (
|
||||
len(lang_code) > 3
|
||||
and "_" not in lang_code
|
||||
and "-" not in lang_code
|
||||
and lang_code[0].isupper()
|
||||
):
|
||||
return lang_code
|
||||
|
||||
# Preferred: Babel
|
||||
if Locale is not None:
|
||||
try:
|
||||
loc = Locale.parse(lang_code.replace("-", "_"))
|
||||
return loc.get_display_name("en").capitalize()
|
||||
except Exception:
|
||||
pass # Fall back to manual mapping
|
||||
|
||||
# Simple fallback for common languages
|
||||
fallback = {
|
||||
"en": "English",
|
||||
"fr": "French",
|
||||
"es": "Spanish",
|
||||
"de": "German",
|
||||
"it": "Italian",
|
||||
"pt": "Portuguese",
|
||||
"zh": "Chinese",
|
||||
"ja": "Japanese",
|
||||
"ko": "Korean",
|
||||
"ru": "Russian",
|
||||
}
|
||||
return fallback.get(lang_code.split("_")[0].lower(), lang_code)
|
||||
|
||||
def get_user_language(self):
|
||||
"""
|
||||
Detect the user's language preference and return a human-readable
|
||||
language name such as ``English``. Detection order:
|
||||
|
||||
1. ``self.chat_language`` if explicitly set
|
||||
2. ``locale.getlocale()``
|
||||
3. ``LANG`` / ``LANGUAGE`` / ``LC_ALL`` / ``LC_MESSAGES`` environment variables
|
||||
"""
|
||||
# Explicit override
|
||||
if self.chat_language:
|
||||
return self.normalize_language(self.chat_language)
|
||||
|
||||
# System locale
|
||||
try:
|
||||
lang = locale.getlocale()[0]
|
||||
if lang:
|
||||
return lang # Return the full language code, including country
|
||||
return self.normalize_language(lang)
|
||||
except Exception:
|
||||
pass
|
||||
pass # pragma: no cover
|
||||
|
||||
for env_var in ["LANG", "LANGUAGE", "LC_ALL", "LC_MESSAGES"]:
|
||||
# Environment variables
|
||||
for env_var in ("LANG", "LANGUAGE", "LC_ALL", "LC_MESSAGES"):
|
||||
lang = os.environ.get(env_var)
|
||||
if lang:
|
||||
return lang.split(".")[
|
||||
0
|
||||
] # Return language and country, but remove encoding if present
|
||||
lang = lang.split(".")[0] # Strip encoding if present
|
||||
return self.normalize_language(lang)
|
||||
|
||||
return None
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue