Skip to content

[Bug] tarina.lang 在 Linux 下不尊重语言设置。 #44

@su226

Description

@su226

由于 tarina.lang 调用 locale.getlocale(locale.LC_MESSAGES) 获取语言设置,而 locale.getlocale 在调用 locale.setlocale 之前永远返回 'C' 区域(即元组 (None, None)),因此 tarina.lang 无法正确获得语言设置。

参见文档: https://docs.python.org/zh-cn/3.14/library/locale.html#locale.getdefaultlocale

根据 POSIX 的规范,未调用 setlocale(LC_ALL, '') 的程序采用可移植的 'C' 区域设置运行。 调用 setlocale(LC_ALL, '') 则可采用 LANG 变量定义的默认区域。

解决方法是在 locale.getlocale(locale.LC_MESSAGES) 之前调用 locale.setlocale(locale.LC_MESSAGES, ''),第二个参数为空字符串表示读取环境变量的值。(不修改当前 locale 而直接读取环境变量的 locale.getdefaultlocale 已弃用。)

但需要注意的是,locale.setlocale 不是线程安全的;以及当相关环境变量无效时,locale.setlocale 会抛出异常。

Image

另外,Python 启动时会自动调用 setlocale(LC_CTYPE, ''),因此若获取 LC_CTYPE 则无需调用 setlocale,参见: python/cpython#90817 (comment)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions