49 lines
1.5 KiB
Python
49 lines
1.5 KiB
Python
import locale
|
|
import logging
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
|
|
|
|
def _lang_code_mac():
|
|
"""
|
|
stolen from https://github.com/mu-editor/mu
|
|
Returns the user's language preference as defined in the Language & Region
|
|
preference pane in macOS's System Preferences.
|
|
"""
|
|
|
|
# Uses the shell command `defaults read -g AppleLocale` that prints out a
|
|
# language code to standard output. Assumptions about the command:
|
|
# - It exists and is in the shell's PATH.
|
|
# - It accepts those arguments.
|
|
# - It returns a usable language code.
|
|
#
|
|
# Reference documentation:
|
|
# - The man page for the `defaults` command on macOS.
|
|
# - The macOS underlying API:
|
|
# https://developer.apple.com/documentation/foundation/nsuserdefaults.
|
|
|
|
lang_detect_command = "defaults read -g AppleLocale"
|
|
|
|
status, output = subprocess.getstatusoutput(lang_detect_command)
|
|
if status == 0:
|
|
# Command was successful.
|
|
lang_code = output
|
|
else:
|
|
logging.warning("Language detection command failed: %r", output)
|
|
lang_code = ""
|
|
|
|
return lang_code
|
|
|
|
|
|
def configure_locale():
|
|
if sys.platform == "darwin" and "LANG" not in os.environ:
|
|
code = _lang_code_mac()
|
|
if code != "":
|
|
os.environ["LANG"] = f"{code}.utf-8"
|
|
|
|
locale.setlocale(locale.LC_ALL, "")
|
|
sys.stdout.reconfigure(encoding=sys.getdefaultencoding())
|
|
sys.stderr.reconfigure(encoding=sys.getdefaultencoding())
|
|
sys.stdin.reconfigure(encoding=sys.getdefaultencoding())
|