XX-net/XX-Net · warning

get lang except:%r

Error message

get lang except:%r

What it means

While detecting the OS UI language in _get_os_language(), an unexpected exception occurred while reading locale info (e.g. from locale.getdefaultlocale() or Windows API calls); the code logs it and falls back to zh_CN (Chinese).

Source

Thrown at code/default/launcher/config.py:135

            pass
    elif sys_platform.platform == "android":
        try:
            res = request("GET", "http://localhost:8084/env/")
            dat = json.loads(res.text)
            lang_code = dat["lang_code"]
            xlog.debug("lang_code:%s", lang_code)
            if 'zh' in lang_code:
                return 'zh_CN'
            elif 'en' in lang_code:
                return 'en_US'
            elif 'fa' in lang_code:
                return 'fa_IR'
            elif 'ru' in lang_code:
                return 'ru_RU'
            else:
                return None
        except Exception as e:
            xlog.warn("get lang except:%r", e)
            return "zh_CN"
    elif sys_platform.platform == "ios":
        lang_code = os.environ["IOS_LANG"]
        if 'zh' in lang_code:
            return 'zh_CN'
        elif 'en' in lang_code:
            return 'en_US'
        elif 'fa' in lang_code:
            return 'fa_IR'
        elif 'ru' in lang_code:
            return 'ru_RU'
        else:
            return None
    else:
        try:
            lang_code, code_page = locale.getdefaultlocale()
            # ('en_GB', 'cp1252'), en_US,
            return lang_code

View on GitHub (pinned to cfa5bc17b6)

Solutions

  1. Set a valid locale explicitly: export LANG=en_US.UTF-8 and LC_ALL=en_US.UTF-8
  2. Ensure locale data is installed in minimal environments (locale-gen / locales package)
  3. Pass the desired language via the app's config so detection is bypassed
  4. If zh_CN fallback surprises you, set the language setting in the launcher config

Example fix

// before
lang_code = locale.getdefaultlocale()[0] or ''
// after
try:
    lang_code = locale.getdefaultlocale()[0] or os.environ.get('LANG', 'en_US')
except Exception:
    lang_code = os.environ.get('LANG', 'en_US')
Defensive patterns

Strategy: fallback

Validate before calling

import os
lang = os.environ.get('LANG', '') or os.environ.get('LC_ALL', '')
if not lang or lang in ('C', 'POSIX'):
    # set a sane default before language detection runs

Try / catch

try:
    lang = get_language()
except Exception:
    lang = 'en_US'  # explicit app-level fallback

Prevention

When it happens

Trigger: Calling get_language() on a platform whose locale detection path raises — malformed locale environment (LC_ALL/LANG unset or garbage), missing locale module data, or Windows MUI API returning unexpected values.

Common situations: Containers/servers with no locale set (LANG=C or POSIX), minimal Docker images without locale data, or older Windows versions with unusual language codes.

Related errors


AI-assisted analysis of XX-net/XX-Net@cfa5bc17b6 (2026-08-27). Data as JSON: /api/errors/29b19a4dbe87a00c. Report an issue: GitHub.