2012-10-12 61 views
2

我是入門級程序員,也是QT的新手。我有一個項目,我很難將我的編程編碼爲三種不同的語言。我在弄清楚如何硬編碼俄文而不是字母,我得到了一個問題???。我的代碼被分解成FR.h SP.h German.h Russian.h - >我理解其他人使用拉丁編解碼器,但俄羅斯不English.h下面的文件是如何的例子來看,每個字定義硬編碼俄文翻譯qt C++

#ifndef EN_H 
#define EN_H 

#define TR_PRG_EN     "Program" 
#define TR_HELP_EN    "Help" 
#define TR_PASSRW_EN    "Pass: R/W" 
#define TR_ALLOWWRITE_EN   "Allow Write" 
#define TR_SERIAL_EN    "Serial #" 
#define TR_ALLOWREAD_EN   "Allow Read" 
#define TR_PRO_EN     "Product #" 
#define TR_MEMSIZE_EN    "Mem. Size" 
#define TR_TRIP_EN    "Trip #" 
#define TR_RANGE_EN    "Range" 
#define TR_DESCR_EN    "Description" 
#define TR_LOGSET_EN    "Logger Settings" 
#define TR_INTTEMP_EN    "Int. Temp (NTC)" 
#define TR_HHIGH_EN    "HHigh(°F)" 
#define TR_HIGH_EN    "High(°F)" 
#define TR_LOW_EN     "Low(°F)" 
#define TR_LLOW_EN    "LLow(°F)" 

與russian.h

#ifndef RU_H 
#define RU_H 

#define TR_ENCODING    "utf-8" 
#define TR_PRG_RU     "??????????" 
#define TR_HELP_RU    "Help" 
#define TR_PASSRW_RU    "?????????" 
#define TR_ALLOWWRITE_RU   "????????" 
#define TR_SERIAL_RU    "???????? #" 
#define TR_ALLOWREAD_RU   "????????? ??????" 
#define TR_PRO_RU     "??????? #" 
#define TR_MEMSIZE_RU    "?????? ?????? " 
#define TR_TRIP_RU    "??????? #" 
#define TR_RANGE_RU    "????????" 
#define TR_DESCR_RU    "????????" 

然後我有Clang.cpp(類,with.h文件)文件,該文件我把話成的QList>(2D陣列) - >下面是一個例子

const char *trOK[NB_LAN]={TR_OK_EN,TR_OK_FR,TR_OK_SP,TR_OK_IT,TR_OK_RU,TR_OK_GR,TR_OK_PR}; 
const char *trName[NB_LAN]={TR_NAME_EN,TR_NAME_FR,TR_NAME_SP,TR_NAME_IT,TR_NAME_RU,TR_NAME_GR,TR_NAME_PR}; 
const char *trDesc[NB_LAN]={TR_DESC_EN,TR_DESC_FR,TR_DESC_SP,TR_DESC_IT,TR_DESC_RU,TR_DESC_GR,TR_DESC_PR}; 
const char *trLL[NB_LAN]={TR_LL_EN,TR_LL_FR,TR_LL_SP,TR_LL_IT,TR_LL_RU,TR_LL_GR,TR_LL_PR}; 
const char *trL[NB_LAN]={TR_L_EN,TR_L_FR,TR_L_SP,TR_L_IT,TR_L_RU,TR_L_GR,TR_L_PR}; 
const char *trH[NB_LAN]={TR_H_EN,TR_H_FR,TR_H_SP,TR_H_IT,TR_H_RU,TR_H_GR,TR_H_PR}; 
const char *trHH[NB_LAN]={TR_HH_EN,TR_HH_FR,TR_HH_SP,TR_HH_IT,TR_HH_RU,TR_HH_GR,TR_HH_PR}; 
CLang::CLang() 
{ 
    for(int i=0;i<NB_LAN;i++) 
    { 

     strTab << QStringList(); 
     strTab[i] << trPrg[i];   //m_tabLogger 
     strTab[i] << trHelp[i];   //m_textBrowserHelp 
     strTab[i] << trPassrw[i];   //label_13 
     strTab[i] << trAllowWrite[i];  //m_checkBoxLoggerAllowWrite 
     strTab[i] << trSerial[i];   //label_2 
     strTab[i] << trAllowRead[i];  //m_checkBoxLoggerAllowRead 
     strTab[i] << trPro[i];   //label_3 
     strTab[i] << trMemSize[i];  //label_5 
     strTab[i] << trTrip[i];   //label_6 
     strTab[i] << trRange[i];   //m_labelRange 
     strTab[i] << trDescr[i];   //label_7 
     strTab[i] << trLogSet[i];   //m_groupBoxSettings 

然後我把它在主窗口中,所以我的疑問句我怎麼讓俄語顯示字母 我有另一個問題是我多個窗口(GUI)我如何稱這些翻譯在這些不同的窗口(GUI)

+0

您已選擇翻譯最難的方法。雖然QT本身提供了最簡單的維護! –

+0

它想要什麼,我想我會喜歡用qLing。但它給了我的問題在這個意義上,我不得不說是一種資源的HTML – user1741867

+0

Qt提供了資源嵌入到二進制支持文本,所以你可以做的是用'.qm'文件,如果你想有一個二進制文件。 –

回答

3

幾乎每個框架都有處理翻譯的設施,包括QT: http://doc.qt.digia.com/4.7-snapshot/linguist-programmers.html

你應該用這個來代替硬編碼UTF8源文件

並回答失敗的原因 - 你正試圖把UTF8轉換成char。不會工作。你需要使用QString或類似的。

+0

幾乎每個框架都有處理翻譯的工具,但QT和GNU gettext是最好的! –

+1

UTF-8顯然會*在char中工作。然而,必須小心翼翼地做,以便編譯器能夠認識到它正在考慮utf-8和Microsoft Visual C++(可能除Visual C++ 2012之外)堅持搞砸了。 –

+0

Utf-8編碼文件可以與QString :: fromUtf8完美協同工作。 Ягарантируюэто。你只需要正確設置你的IDE。 – Lol4t0

2

我看到2個解決方案。更真實的方式是寫你的定義是這樣的:

1.使用爲const char *常量:

const char* TR_HELP_RU = "Справка"; 

,然後在main.cpp中添加:

QTextCodec *codec = QTextCodec::codecForName("UTF-8"); 
QTextCodec::setCodecForCStrings(codec); 

2。使用QString常量:

const QString TR_HELP_RU = QString("Справка"); 
+0

我已經嘗試了兩種方法,仍然沒有結果。我的trans存儲在2d數組中,然後從該數組中挑選 – user1741867

+0

檢查源文件的編碼,如果需要,轉換爲UTF-8,然後重試。 – troyane

+0

仍然沒有,所以我使用選項2,我運行並得到這個錯誤Clang.cpp:19:錯誤:不能在初始化時將'const QString'轉換爲'const char *' – user1741867