中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

html5軟件下載手機(jī)版網(wǎng)頁(yè)關(guān)鍵詞排名優(yōu)化

html5軟件下載手機(jī)版,網(wǎng)頁(yè)關(guān)鍵詞排名優(yōu)化,專(zhuān)門(mén)做盜文網(wǎng)站的公司,南山網(wǎng)站制作引入 在代碼里面寫(xiě)中文就很low,運(yùn)行時(shí)多語(yǔ)言切換是客戶(hù)端程序都應(yīng)該具備的。 qt國(guó)際化其實(shí)就是qt中字符串的字符集編碼的設(shè)置。當(dāng)然這個(gè)設(shè)置不是簡(jiǎn)單的選擇一下什么語(yǔ)言就好,這個(gè)需要編程人員來(lái)處理的。 通常對(duì)于非拉丁字符(主要指??latin1???字符…

引入

在代碼里面寫(xiě)中文就很low,運(yùn)行時(shí)多語(yǔ)言切換是客戶(hù)端程序都應(yīng)該具備的。
qt國(guó)際化其實(shí)就是qt中字符串的字符集編碼的設(shè)置。當(dāng)然這個(gè)設(shè)置不是簡(jiǎn)單的選擇一下什么語(yǔ)言就好,這個(gè)需要編程人員來(lái)處理的。
通常對(duì)于非拉丁字符(主要指??latin1???字符集)的字符串,就需要使用到??unicode???字符集,而通常使用??UTF-8???編碼。如果只是本地使用一下,直接使用??""??包含文件就可以了。但是有時(shí)候設(shè)計(jì)到網(wǎng)絡(luò)傳輸?shù)惹闆r,就要考慮這些了。
QT提供了??QTextCodec??類(lèi)來(lái)進(jìn)行文本字符集的轉(zhuǎn)換操作。

本文的重點(diǎn)不在于此。深入學(xué)習(xí)可以看

? QTextCodec && 字符編碼??
? ?Qt 編碼問(wèn)題QTextCodec??

本文的重點(diǎn)在于QT界面顯示的中文化。

1、控制需要翻譯的文本

在編寫(xiě)QT程序的時(shí)候,對(duì)于要翻譯的文本,應(yīng)當(dāng)使用??tr()??包含起來(lái)。

我們先來(lái)看看??tr??函數(shù)的原型,注意,這是一個(gè)靜態(tài)函數(shù)。

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

因?yàn)镼t中的類(lèi)都繼承自??QObject???類(lèi),所以這里直接使用了??tr???,如果不是在繼承自QT的類(lèi)中使用,應(yīng)該用??Object::tr(…)??來(lái)調(diào)用。
這還不是很準(zhǔn)確,在宏定義??Q_OBJECT???展開(kāi)后,會(huì)創(chuàng)建一個(gè)??QMetaObject???對(duì)象,即??static const QMetaObject staticMetaObject;??這個(gè)可以看看源碼
對(duì)于Q_OBJECT的解析可以看Qt信號(hào)與槽機(jī)制的基石-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:

展開(kāi)一個(gè)宏定義??QT_TR_FUNCTIONS???,而這里面定義了一個(gè)內(nèi)聯(lián)的??tr???函數(shù)。可以看出這里實(shí)際是使用了一個(gè)靜態(tài)對(duì)象??staticMetaObject???的成員函數(shù)??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); }

例如對(duì)于一個(gè)??QLabel???控件,將其顯示的文本使用??tr??括起來(lái)。tr是經(jīng)過(guò)多級(jí)函數(shù)調(diào)用才實(shí)現(xiàn)了翻譯操作,是有代價(jià)的,所以不該用的時(shí)候最好不要用。

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

這次還是以一個(gè)??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)
{//創(chuàng)建一個(gè)PushButtonQPushButton * btn = new QPushButton(tr("click me"),this);//連接信號(hào)和槽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更新翻譯

在上面,源文件中的相關(guān)字符串已經(jīng)使用??tr???函數(shù)包裝起來(lái)了?,F(xiàn)在要做的就是更新這些要翻譯的字符串到??ts???文件。
??lupdate???就是用于掃描??pro???文件中指定的代碼或UI文件中被??tr??包裝起來(lái)的文本的工具

lupdate的使用

??lupdate??的使用可以使用??lupdate --help??來(lái)查看。

粗略的說(shuō)一下這個(gè)工具的用法:

使用方法:
lupdate [選項(xiàng)] [項(xiàng)目文件]…
lupdate [選項(xiàng)] [源文件 | 路徑 | @ lst 文件]…-ts ts 文件 | @ lst 文件
(lst文件是一個(gè)文本文件,保存一些文件名稱(chēng),一行一個(gè))

常用選項(xiàng)說(shuō)明
-ts …指定輸出文件。
-codecfortr指定為 tr() 調(diào)用假設(shè)的編解碼器。只有與-ts 有效。
-extensions [,]…擴(kuò)展支持的文件后綴。擴(kuò)展名列表必須用逗號(hào)分隔。默認(rèn)值:‘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對(duì)ui文件的掃描不保留行號(hào)
-pro.Pro 文件的名稱(chēng)。對(duì)于具有.pro 文件語(yǔ)法,但不同的文件后綴的文件非常有用。
-source-language [_]指定新文件的源字符串的語(yǔ)言。默認(rèn)值Posix 標(biāo)準(zhǔn)。
-target-language [_]指定新文件翻譯的語(yǔ)言。如果未指定,則猜測(cè)系統(tǒng)語(yǔ)言。
@lst-file從 lst 文件讀取附加文件的名稱(chēng) (每行一個(gè))。

生成ts文件

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

這里只生成一個(gè)翻譯文件??zh_hans.ts???,其實(shí)可以跟多個(gè)文件名來(lái)生成多個(gè)用于翻譯的??ts???文件。這個(gè)方式會(huì)忽略掉??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??文件中指定

這里我們先修改一個(gè)??hello.pro??文件。

這是原本的??hello.pro??文件:

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

現(xiàn)在我們添加一句

TRANSLATIONS = zh_hans.ts

添加之后使用??lupdate???來(lái)生成??zh_hans.ts??文件

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

生成了??ts???文件后就要進(jìn)行翻譯了。??ts???文件實(shí)際上是類(lèi)似于??xml??文件的,我們可以直接打開(kāi)它來(lái)翻譯。

  • 直接翻譯
    打開(kāi)ts文件,我們只需要在????和????之間填寫(xiě)我們翻譯后的文件即可。

例如我們將?"click me"?翻譯為點(diǎn)擊我。則修改為:

<message><location filename="widget.cpp" line="9"/><source>click me</source><translation type="unfinished">點(diǎn)擊我</translation>
</message>

如果你認(rèn)為翻譯合格了,沒(méi)有問(wèn)題了,可以將??translation type=“unfinished”>???中的??type="unfinished"??刪除。

  • 使用linguits工具翻譯
    1、點(diǎn)擊菜單欄 文件 --> 打開(kāi) 彈出文件選擇對(duì)話(huà)框后選擇生成的ts文件
    2、設(shè)置源語(yǔ)言和目標(biāo)語(yǔ)言,然而并沒(méi)什么用
    1、選擇要翻譯的短語(yǔ)
    2、填寫(xiě)翻譯的文本
    3、翻譯完成后記得保存
4. lrelease發(fā)布翻譯

所謂發(fā)布翻譯,就是使用??lrelease??工具將??ts??文件轉(zhuǎn)換輸出不包含多余信息的??qm??文件(qm文件是二進(jìn)制文件,非文本文件)。

我們先來(lái)看看翻譯后的??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>點(diǎn)擊我^_^</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??使用簡(jiǎn)要說(shuō)明

使用方法:
lrelease [選項(xiàng)] 項(xiàng)目文件
lrelease [選項(xiàng)] ts 文件 [-qm qm 文件]

選項(xiàng)說(shuō)明
-idbased使用 Id 而不是源字符串作為消息的鍵
-compressQM 文件壓縮
-nounfinished不使用未完成的翻譯
-removeidentical如果源文本與翻譯后的文本相同,不使用這個(gè)
-markuntranslated如果消息有沒(méi)有真正的翻譯,使用源文本和
5. 在程序中使用翻譯文件

在QT程序中要使用翻譯文件,需要使用到類(lèi)??QTranslation????,F(xiàn)在來(lái)修改??main.cpp??.

#include "widget.h"
#include <QApplication>
#include <QTranslator>int main(int argc, char *argv[])
{QApplication a(argc, argv);QTranslator tsor;           //創(chuàng)建翻譯器tsor.load("zh_hans.qm");    //加載語(yǔ)言包a.installTranslator(&tsor); //安裝翻譯器Widget w;w.show();return a.exec();
}

參考

  • QT國(guó)際化(lupdate/linguits/lrelease)
http://www.risenshineclean.com/news/37120.html

相關(guān)文章:

  • 網(wǎng)站界面需求網(wǎng)絡(luò)推廣課程培訓(xùn)
  • windows搭建網(wǎng)站開(kāi)發(fā)推廣軟件
  • 旬陽(yáng)做網(wǎng)站seo計(jì)費(fèi)系統(tǒng)源碼
  • 網(wǎng)站建設(shè)創(chuàng)新能力痛點(diǎn)湖南百度推廣代理商
  • wordpress分類(lèi)鏈接網(wǎng)站如何進(jìn)行優(yōu)化
  • 珠海網(wǎng)站搜索引擎優(yōu)化青島seo服務(wù)
  • o2o網(wǎng)站做推廣公司小視頻關(guān)鍵詞匯總
  • 漫畫(huà)網(wǎng)站css模板登錄百度app
  • 宜春代做網(wǎng)站自己做一個(gè)網(wǎng)站要多少錢(qián)
  • 文昌建設(shè)局網(wǎng)站今日nba數(shù)據(jù)帝
  • 南京做網(wǎng)站建設(shè)搭建的公司app推廣方案策劃
  • 千博企業(yè)網(wǎng)站系統(tǒng)論壇推廣案例
  • 手表網(wǎng)站建設(shè)策劃書(shū)深圳門(mén)戶(hù)網(wǎng)站
  • 長(zhǎng)春火車(chē)站在哪個(gè)區(qū)網(wǎng)站收錄查詢(xún)代碼
  • 網(wǎng)站建設(shè)需要什么專(zhuān)業(yè)如何推廣平臺(tái)
  • 用手機(jī)建網(wǎng)站的步驟線上it培訓(xùn)機(jī)構(gòu)
  • 阿里云虛擬主機(jī)可以做幾個(gè)網(wǎng)站嗎長(zhǎng)沙網(wǎng)絡(luò)推廣軟件
  • 東莞 網(wǎng)站建設(shè)seo查詢(xún)平臺(tái)
  • seo做的好的網(wǎng)站有哪些哪個(gè)模板建站好
  • 網(wǎng)站建設(shè)需要哪些資料網(wǎng)站建設(shè)與網(wǎng)站設(shè)計(jì)
  • 寵物社區(qū)網(wǎng)站開(kāi)發(fā)設(shè)計(jì)文檔網(wǎng)絡(luò)整合營(yíng)銷(xiāo)方案
  • 那里有個(gè)人做網(wǎng)站的網(wǎng)址推薦
  • 第一次開(kāi)票網(wǎng)站建設(shè)怎么開(kāi)公司如何建立網(wǎng)站
  • 網(wǎng)站開(kāi)發(fā)通用流程圖廈門(mén)seo排名公司
  • 中文網(wǎng)站建設(shè)小組企業(yè)推廣策劃書(shū)
  • 大連商城網(wǎng)站制作公司b站免費(fèi)版入口
  • 做電子章網(wǎng)站可以下載新聞視頻的網(wǎng)站
  • 婚紗攝影的網(wǎng)站怎么做什么是百度競(jìng)價(jià)排名服務(wù)
  • 網(wǎng)站內(nèi)鏈?zhǔn)鞘裁?怎么做如何制作一個(gè)簡(jiǎn)單的網(wǎng)頁(yè)
  • 做舞臺(tái)燈光的在哪些網(wǎng)站接訂單呢今日新聞?wù)?0字