当前位置: 首页 > news >正文

广州网站建设网络百度收录情况查询

广州网站建设网络,百度收录情况查询,烟台高端品牌网站建设,怎样做网站3天赚100万引入 在代码里面写中文就很low,运行时多语言切换是客户端程序都应该具备的。 qt国际化其实就是qt中字符串的字符集编码的设置。当然这个设置不是简单的选择一下什么语言就好,这个需要编程人员来处理的。 通常对于非拉丁字符(主要指​​latin1​​​字符…

引入

在代码里面写中文就很low,运行时多语言切换是客户端程序都应该具备的。
qt国际化其实就是qt中字符串的字符集编码的设置。当然这个设置不是简单的选择一下什么语言就好,这个需要编程人员来处理的。
通常对于非拉丁字符(主要指​​latin1​​​字符集)的字符串,就需要使用到​​unicode​​​字符集,而通常使用​​UTF-8​​​编码。如果只是本地使用一下,直接使用​​""​​包含文件就可以了。但是有时候设计到网络传输等情况,就要考虑这些了。
QT提供了​​QTextCodec​​类来进行文本字符集的转换操作。

本文的重点不在于此。深入学习可以看

​ QTextCodec && 字符编码​​
​ ​Qt 编码问题QTextCodec​​

本文的重点在于QT界面显示的中文化。

1、控制需要翻译的文本

在编写QT程序的时候,对于要翻译的文本,应当使用​​tr()​​包含起来。

我们先来看看​​tr​​函数的原型,注意,这是一个静态函数。

QString QObject::tr(const char * sourceText, const char * disambiguation = 0, int n = -1)

因为Qt中的类都继承自​​QObject​​​类,所以这里直接使用了​​tr​​​,如果不是在继承自QT的类中使用,应该用​​Object::tr(…)​​来调用。
这还不是很准确,在宏定义​​Q_OBJECT​​​展开后,会创建一个​​QMetaObject​​​对象,即​​static const QMetaObject staticMetaObject;​​这个可以看看源码
对于Q_OBJECT的解析可以看Qt信号与槽机制的基石-MOC详解

#define Q_OBJECT \public: \Q_OBJECT_CHECK \static const QMetaObject staticMetaObject;\Q_OBJECT_GETSTATICMETAOBJECT \virtual const QMetaObject *metaObject() const; \virtual void *qt_metacast(const char *); \QT_TR_FUNCTIONS \virtual int qt_metacall(QMetaObject::Call,int, void **); \private:

展开一个宏定义​​QT_TR_FUNCTIONS​​​,而这里面定义了一个内联的​​tr​​​函数。可以看出这里实际是使用了一个静态对象​​staticMetaObject​​​的成员函数​​tr​​。

	# define QT_TR_FUNCTIONS \static inline QString tr(const char *s, const char *c = 0) \{ return staticMetaObject.tr(s, c); } \static inline QString trUtf8(const char *s,const char *c = 0) \{ return staticMetaObject.trUtf8(s, c); } \static inline QString tr(const char *s,const char *c, int n) \{ return staticMetaObject.tr(s, c, n); } \static inline QString trUtf8(const char *s,const char *c, int n) \{ return staticMetaObject.trUtf8(s, c, n); }

例如对于一个​​QLabel​​​控件,将其显示的文本使用​​tr​​括起来。tr是经过多级函数调用才实现了翻译操作,是有代价的,所以不该用的时候最好不要用。

QLable *label = new QLable(tr("hello"),this);

这次还是以一个​​hello world​​为例。
先看hello.h

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = 0);~Widget();
public slots:void btn_click();
};#endif // WIDGET_H

再看hello.cpp

#include "widget.h"
#include <QPushButton>
#include <QMessageBox>Widget::Widget(QWidget *parent): QWidget(parent)
{//创建一个PushButtonQPushButton * btn = new QPushButton(tr("click me"),this);//连接信号和槽connect(btn,SIGNAL(clicked()),this,SLOT(btn_click()));
}Widget::~Widget()
{
}void Widget::btn_click()
{QMessageBox::information(NULL, tr("click button"),tr("hello world"), QMessageBox::Yes);
}

2、lupdate更新翻译

在上面,源文件中的相关字符串已经使用​​tr​​​函数包装起来了。现在要做的就是更新这些要翻译的字符串到​​ts​​​文件。
​​lupdate​​​就是用于扫描​​pro​​​文件中指定的代码或UI文件中被​​tr​​包装起来的文本的工具

lupdate的使用

​​lupdate​​的使用可以使用​​lupdate --help​​来查看。

粗略的说一下这个工具的用法:

使用方法:
lupdate [选项] [项目文件]…
lupdate [选项] [源文件 | 路径 | @ lst 文件]…-ts ts 文件 | @ lst 文件
(lst文件是一个文本文件,保存一些文件名称,一行一个)

常用选项说明
-ts …指定输出文件。
-codecfortr指定为 tr() 调用假设的编解码器。只有与-ts 有效。
-extensions [,]…扩展支持的文件后缀。扩展名列表必须用逗号分隔。默认值:‘java,jui,ui,c,c++,cc,cpp,cxx,ch,h,h++,hh,hpp,hxx,js,qs,qml’。
-no-recursive指定不递归扫描的目录
-recursive递归扫描指定目录
-I or -I附加的包含文件目录
-no-ui-lines对ui文件的扫描不保留行号
-pro.Pro 文件的名称。对于具有.pro 文件语法,但不同的文件后缀的文件非常有用。
-source-language [_]指定新文件的源字符串的语言。默认值Posix 标准。
-target-language [_]指定新文件翻译的语言。如果未指定,则猜测系统语言。
@lst-file从 lst 文件读取附加文件的名称 (每行一个)。

生成ts文件

1. 在命令行中指定方式生成

这里只生成一个翻译文件​​zh_hans.ts​​​,其实可以跟多个文件名来生成多个用于翻译的​​ts​​​文件。这个方式会忽略掉​​pro​​文件中指定要生成的翻译文件。

o@o-pc:~/hello$ lupdate hello.pro -ts zh_hans.ts
Updating 'zh_hans.ts'...Found 3 source text(s) (3 new and 0 already existing)
2. 在​​pro​​文件中指定

这里我们先修改一个​​hello.pro​​文件。

这是原本的​​hello.pro​​文件:

QT       += core gui
TARGET = hello
TEMPLATE = app
SOURCES += main.cpp\hello.cpp
HEADERS  += hello.h
LIBS += -lxcb

现在我们添加一句

TRANSLATIONS = zh_hans.ts

添加之后使用​​lupdate​​​来生成​​zh_hans.ts​​文件

o@o-pc:~/hello$ lupdate hello.pro
3. linguits翻译文本

生成了​​ts​​​文件后就要进行翻译了。​​ts​​​文件实际上是类似于​​xml​​文件的,我们可以直接打开它来翻译。

  • 直接翻译
    打开ts文件,我们只需要在​​​​和​​​​之间填写我们翻译后的文件即可。

例如我们将​"click me"​翻译为点击我。则修改为:

<message><location filename="widget.cpp" line="9"/><source>click me</source><translation type="unfinished">点击我</translation>
</message>

如果你认为翻译合格了,没有问题了,可以将​​translation type=“unfinished”>​​​中的​​type="unfinished"​​删除。

  • 使用linguits工具翻译
    1、点击菜单栏 文件 --> 打开 弹出文件选择对话框后选择生成的ts文件
    2、设置源语言和目标语言,然而并没什么用
    1、选择要翻译的短语
    2、填写翻译的文本
    3、翻译完成后记得保存
4. lrelease发布翻译

所谓发布翻译,就是使用​​lrelease​​工具将​​ts​​文件转换输出不包含多余信息的​​qm​​文件(qm文件是二进制文件,非文本文件)。

我们先来看看翻译后的​​ts​​文件。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN">
<context><name>Widget</name><message><location filename="widget.cpp" line="9"/><source>click me</source><translation>点击我^_^</translation></message><message><location filename="widget.cpp" line="20"/><source>click button</source><translation>单击按钮</translation></message><message><location filename="widget.cpp" line="21"/><source>hello world</source><translation>你好 世界</translation></message>
</context>
</TS>

使用​​lrelease​​​生成​​qm​​文件

o@o-pc:~/hello$ lrelease zh_hans.ts -qm zh_hans.qm

​​lrelease​​使用简要说明

使用方法:
lrelease [选项] 项目文件
lrelease [选项] ts 文件 [-qm qm 文件]

选项说明
-idbased使用 Id 而不是源字符串作为消息的键
-compressQM 文件压缩
-nounfinished不使用未完成的翻译
-removeidentical如果源文本与翻译后的文本相同,不使用这个
-markuntranslated如果消息有没有真正的翻译,使用源文本和
5. 在程序中使用翻译文件

在QT程序中要使用翻译文件,需要使用到类​​QTranslation​​​。现在来修改​​main.cpp​​.

#include "widget.h"
#include <QApplication>
#include <QTranslator>int main(int argc, char *argv[])
{QApplication a(argc, argv);QTranslator tsor;           //创建翻译器tsor.load("zh_hans.qm");    //加载语言包a.installTranslator(&tsor); //安装翻译器Widget w;w.show();return a.exec();
}

参考

  • QT国际化(lupdate/linguits/lrelease)
http://www.hrbkazy.com/news/54085.html

相关文章:

  • 企业网络搭建技能大赛广东seo外包服务
  • 哪些网站是做食品网站优化是什么意思
  • 做救助流浪动物网站的产生背景广告推广代运营公司
  • 做外贸如何建立网站企业邮箱格式
  • 织梦网站建设google官网入口注册
  • 中山网站建设价位百度一下首页问问
  • 个人简介网站源码腾讯企点客服
  • 查看网站有没有备案百度广告一级代理
  • 武汉城市建设招标网站雅思培训班价格一般多少
  • 如何联系百度人工客服宁波seo推广如何收费
  • 广州乐地网站建设公司自助网站建设
  • 网站开发 方案合肥seo排名公司
  • 个人能备案多少个网站百度搜索排行榜
  • 网站站长seo推广企业邮箱登录入口
  • 网站修改解析怎么做燃灯seo
  • 多行业品牌企业公司网站模板360优化大师官方下载
  • 欧美在线做视频网站北京seo网站推广
  • 绵阳网站建设 经开区互联网推广营销
  • 做ebay货物查找的网站东莞百度搜索优化
  • 广州自助建站服务热线seo优化技巧有哪些
  • 网站推广烟台公司电话南京seo公司教程
  • 用discuz做网站产品推广方案怎么做
  • 传奇手游开服表网站无锡seo公司
  • 建设银行网站用户名怎么查百度关键词排名优化
  • 亚马逊网站建设评述深圳网站开发制作
  • 中国旅游网站排名10条重大新闻事件
  • 纸做的花朵成品网站短视频营销常用平台有
  • 网站推广 知乎如何免费推广一个网站
  • 百斯特网站建设seo教程有什么
  • 网站设计模板下载如何做网站