c++ - 如何在 Qt 多语言支持中映射正确的语言?
问题描述
我需要为我们基于 Qt 的产品添加多种语言。我做了一些谷歌搜索并得到了一些想法。但是,我找不到一个答案:“.ts”文件如何知道是哪种语言?
例如,在示例项目中:i18n。
我删除了原始的“i18n_zh.ts”文件并使用“lupdate”创建了一个新的“i18n_zh.ts”文件。然后我查看了新文件的内容。它有这一行:
TS version="2.1" language="zh_CN"
然后我用 'linguist' 工具打开新的 'i18n_zh.ts' 文件,发现 Qt 知道它是中文翻译。
Qt 怎么知道它是中文的?映射表在哪里?文件名中的“_zh”是否暗示了什么?
新的“i18n_zh.ts”文件中的一些内容:
?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN">
<context>
<name>MainWindow</name>
<message>
<location filename="../languagechooser.cpp" line="176"/>
<location filename="../mainwindow.cpp" line="85"/>
<source>English</source>
<translation type="unfinished"></translation>
</message>
解决方案
有效地lupdate
解析名称文件以获取语言。它使用与 by 类似的方法QLocale
。
获得语言环境后,您可以使用QLocale::nativeLanguageName
获取语言名称(在本例中为该语言的语言名称)之类的方法。
为了完整起见,QTranslator
还使用此类文件名后缀来查找要为当前语言环境加载的正确 .qm 文件。更多信息在这里。
有关更多信息,一个很好的起点是Qt 自己的关于多语言应用程序的 wiki 页面。
推荐阅读
- go - 如何在不牺牲内存的情况下组织类似的结构以避免重复
- api - 如何从 Angular7 前端传递关于 API 识别的 CORS 问题?
- css - 小高度div中的大高度图像 Bootstrap 4
- css - Font-Awesome 5 - CSS 伪元素,如何镜像/旋转图标
- php - 从数组中删除值为 0 的项目(和键)
- python - 在python中找到切比雪夫多项式的根
- java - 由于 spring 安全性,无法访问 spring-boot 项目中的资产
- go - Cobra cli 无法初始化新工具
- asp.net-core - 不同项目中的 MiniProfiler
- python - TypeError:运行我的模型时类型提升无效