Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dtkgui: 加载翻译时应当遵循 LANGUAGE 环境变量指定的列表依次加载多个翻译 #163

Open
BLumia opened this issue Jan 10, 2024 · 0 comments

Comments

@BLumia
Copy link
Member

BLumia commented Jan 10, 2024

SUMMARY | 问题概要

当前,我们默认会根据系统的 locale 加载翻译,实际使用的是 locale 的 name:

bool DGuiApplicationHelper::loadTranslator(const QString &fileName, const QList<QString> &translateDirs, const QList<QLocale> &localeFallback)
{
    ...
    for (const auto &locale : localeFallback) {
        QStringList translateFilenames {QString("%1_%2").arg(fileName).arg(locale.name())};

但这个做法会导致用户的 LANGUAGE 环境变量所设置的 fallback 列表失效。例如用户可能希望优先看到简体中文,如果不存在则看到繁体中文,再否则看到日语,而当前的实现完全不会理会这种偏好设置。

Qt 提供了一个接口来获取这个偏好列表(QLocale::uiLanguages()),但实际,我们只需要使用 QTranslator::load() 传入参数为 QLocale 的重载(bool QTranslator::load(const QLocale &locale, const QString &filename, const QString &prefix = QString(), const QString &directory = QString(), const QString &suffix = QString()))即可使 Qt 主动完成此行为。

我们应当调整我们的 loadTranslator() 默认行为,使我们的行为默认尊重用户的语言偏好列表。

DTK and OS VERSIONS | DTK&系统版本信息

不相关

Minimal Reproducible Case Code | 最小复现案例代码

任意应用中使用现有 loadTranslator() 即可复现。测试前需指定 LANGUAGE 环境变量。

OBSERVED RESULT | 观察到的结果

我们只使用了用户系统 locale 所对应的语言展示应用程序语言

EXPECTED RESULT | 期望的结果

当 LANGUAGE 偏好列表存在时,我们应当遵守用户的 LANGUAGE 所设的偏好列表

ADDITIONAL INFORMATION | 额外补充

有两个额外的事情可能需要确认:

  1. loadTranslator() 现有的 QList<QLocale> 参数存在的目的和这个 issue 提及的 uiLanguage() 本意应该重叠了,看看后续是否要调整 API?
  2. 控制中心可能后续应当允许用户主动设置这个列表
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant