qt_standard_project_setup

qt_standard_project_setup的更先进的国际化。

这个camke命令的官方说明是:项目范围默认标准设置。

该命令在Qt6包的Core组件中定义,可以像这样加载:

 find_package(Qt6 REQUIRED COMPONENTS Core)
  • 这个命令是在Qt 6.3中引入的
qt_standard_project_setup(
     [REQUIRES <version>]
     [SUPPORTS_UP_TO <version>]
     [I18N_TRANSLATED_LANGUAGES <language...>]
     [I18N_SOURCE_LANGUAGE <language>]
 )

该命令简化了设置典型Qt应用程序的任务。通常在第一次find_package(Qt6)调用之后立即调用,通常在顶级CMakeLists.txt文件中,并且在定义任何目标之前。

它可以完成以下工作:

qt_standard_project_setup()命令将CMake的一些变量设置为true,如果它们尚未定义。这将默认启用当前目录范围及其子目录中随后创建的目标的所有与Qt相关的自动生成特性。 CMake会自动包含GNUInstallDirs模块。这会为诸如CMAKE_INSTALL_BINDIR、CMAKE_INSTALL_LIBDIR等变量定义适当的默认值。 在针对Windows时,如果CMAKE_RUNTIME_OUTPUT_DIRECTORY变量尚未设置,它将被设置为${CMAKE_CURRENT_BINARY_DIR}。 针对苹果或Windows之外的目标平台,CMAKE_INSTALL_RPATH将按照以下描述进行扩展。 CMake的USE_FOLDERS属性被设置为ON,而QT_TARGETS_FOLDER被设置为QtInternalTargets。支持文件夹的集成开发环境将在此文件夹中显示Qt内部目标。

自Qt 6.5以来,可以通过选择接受来自更新的Qt版本的更改来更改Qt的CMake API的默认行为。如果指定了REQUIRES,将启用Qt引入的所有建议更改,直到REQUIRES,并且使用较旧的Qt版本将导致错误。如果另外指定了SUPPORTS_UP_TO,还将启用在SUPPORTS_UP_TO版本中引入的任何新更改(但是使用较旧的Qt版本不会导致错误)。这类似于CMake的策略概念(请参阅cmake_policy)。 在支持RPATH的平台上(除了苹果平台),此命令将向CMAKE_INSTALL_RPATH变量附加两个值。附加ORIGIN以便库能够在与自身相同目录中找到其依赖的其他库。还附加ORIGIN/<reldir>,其中<reldir>是从CMAKE_INSTALL_BINDIR到CMAKE_INSTALL_LIBDIR的相对路径。这允许安装到CMAKE_INSTALL_BINDIR的可执行文件找到任何安装到CMAKE_INSTALL_LIBDIR的可能依赖的库。CMAKE_INSTALL_RPATH中的任何重复项都将被移除。在实践中,这两个值确保可执行文件和库能够找到它们的链接时依赖项,假设项目将它们安装到install(TARGETS)命令在没有明确提供目标时使用的默认位置。 要禁用集成开发环境的文件夹支持,请在调用qt_standard_project_setup之前或之后将USE_FOLDERS设置为OFF。 通过将QT_NO_STANDARD_PROJECT_SETUP变量设置为true,可以有效地禁用qt_standard_project_setup()命令。

重点来了:

  • 自Qt 6.7以来,可以使用I18N_TRANSLATED_LANGUAGES参数指定用于项目国际化的语言。参见QT_I18N_TRANSLATED_LANGUAGES了解详细信息。 使用I18N_SOURCE_LANGUAGE指定编写可翻译字符串所用的语言。缺省情况下,使用“en”。详细信息请参见QT_I18N_SOURCE_LANGUAGE。
qt_standard_project_setup(REQUIRES 6.5 I18N_TRANSLATED_LANGUAGES en en_AU fr)

解释:需要版本至少6.5(这里来自于QT官方的一个例子,我是用的版本是6.7),加载QT_I18N_SOURCE_LANGUAGE,需要翻译的.ts有en、en_AU、fr如果你想增加中文翻译,只需要在指定的目录加上zh_CN.ts,然后将命令修改为:

qt_standard_project_setup(REQUIRES 6.5 I18N_TRANSLATED_LANGUAGES en en_AU fr zh_CN)

系统将自动生成对应的.pm文件,然后根据用户所在环境自动的执行国际化。

不用向以前if else判断了,也不需要添加资源,不需要手动生成.qm文件

以下代码也不需要了:

    QTranslator translator;
    const QStringList uiLanguages = QLocale::system().uiLanguages();
    for (const QString &locale : uiLanguages) {
        const QString baseName = "untitled_" + QLocale(locale).name();
        if (translator.load(":/projct_/" + baseName)) {
            a.installTranslator(&translator);
            break;
        }
    }

一气呵成。

该条语句示例存在于官方项目:qml-i18n 中,有兴趣的小伙伴可以自行实践。

配合

qt_add_translations(untitled
    RESOURCE_PREFIX /i18n
    TS_FILE_BASE untitled
    TS_FILE_DIR i18n
)

生成前缀untitled_的.ts文件

QT6.7以前此命令只接受第一个参数作为“target”。“target”用于提取可翻译源和嵌入 .qm 文件。

QT6.7以后第一个参数“target”不再用于源提取。

PS:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN">
<context>
    <name>PayMainWidget</name>
    <message>
        <source>checkout</source>
        <translation type="unfinished">查找</translation>
    </message>
</context>
</TS>

.ts 文件样式

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值