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
(self)
| 1092 | return fallback.get(primary_lang_code, lang_code) |
| 1093 | |
| 1094 | def get_user_language(self): |
| 1095 | """ |
| 1096 | Detect the user's language preference and return a human-readable |
| 1097 | language name such as ``English``. Detection order: |
| 1098 | |
| 1099 | 1. ``self.chat_language`` if explicitly set |
| 1100 | 2. ``locale.getlocale()`` |
| 1101 | 3. ``LANG`` / ``LANGUAGE`` / ``LC_ALL`` / ``LC_MESSAGES`` environment variables |
| 1102 | """ |
| 1103 | |
| 1104 | # Explicit override |
| 1105 | if self.chat_language: |
| 1106 | return self.normalize_language(self.chat_language) |
| 1107 | |
| 1108 | # System locale |
| 1109 | try: |
| 1110 | lang = locale.getlocale()[0] |
| 1111 | if lang: |
| 1112 | lang = self.normalize_language(lang) |
| 1113 | if lang: |
| 1114 | return lang |
| 1115 | except Exception: |
| 1116 | pass |
| 1117 | |
| 1118 | # Environment variables |
| 1119 | for env_var in ("LANG", "LANGUAGE", "LC_ALL", "LC_MESSAGES"): |
| 1120 | lang = os.environ.get(env_var) |
| 1121 | if lang: |
| 1122 | lang = lang.split(".")[0] # Strip encoding if present |
| 1123 | return self.normalize_language(lang) |
| 1124 | |
| 1125 | return None |
| 1126 | |
| 1127 | def get_platform_info(self): |
| 1128 | platform_text = "" |