2012-02-10 19 views
11
#include<QApplication> 
#include<QTranslator> 
#include<QObject> 
#include<QTextCodec> 
#include<QWidget> 

int main(int argc, char* argv[]) 
{ 
    QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale()); 
    QApplication app(argc, argv); 

    QTranslator translator; 
    translator.load("app_zh_CN.qm"); 
    app.installTranslator(&translator); 

    QWidget widget; 
    widget.setWindowTitle(QObject::tr("Hello World!")); 
    widget.show(); 
    return app.exec(); 
} 

QTranslator không hoạt động

SOURCES += \ 
    main.cpp 

TRANSLATIONS += app_zh_CN.ts 

Giao diện Gui là "Hello World!" cũng .. Nhưng trong tập tin của tôi.qm được dịch sang "你好!" (Trung Quốc) ... nơi là tiền đề? những người có thể giúp tôi ..

+2

'translator.load() 'trả về một bool. Là nó trở về đúng hay sai cho bạn? –

+0

@Arnold Spence: Cảm ơn bạn .. giá trị trả về là sai ... Điều gì là sai? –

+0

Hãy thử làm theo các hướng dẫn được cung cấp bởi @Dave Mateer trong câu trả lời của mình :) –

Trả lời

19

Ví dụ của bạn làm việc cho tôi nếu tôi đặt tệp .qm vào vị trí "chính xác". (Xem bên dưới.) Đảm bảo bạn đang thực hiện tất cả các bước:

  1. Chạy lupdate để tạo tệp .ts.
  2. Làm bản dịch của bạn trong Ngôn ngữ học và lưu tệp .ts.
  3. Chạy lrelease để biên dịch tệp .ts thành tệp .qm.
  4. Sao chép tệp .qm vào đúng vị trí.

Tôi đoán là # 4 sẽ rất tệ. Các tài liệu cho QTranslator::load khẳng định:

Nếu thư mục không được xác định, thư mục của thực thi của ứng dụng được sử dụng (ví dụ, như applicationDirPath()).

Tuy nhiên, tôi phải đặt tệp .qm trong thư mục ở trên tệp thực thi để làm cho nó hoạt động như cũ. Trừ khi tôi hiểu nhầm các tài liệu, đây là lỗi Qt, nhưng đó là lỗi đơn giản để giải quyết. Nếu tôi đã cung cấp thư mục một cách rõ ràng là app.applicationDirPath, nó hoạt động trong thư mục thực thi. Bạn cũng có thể chỉ định một thư mục riêng biệt. Ví dụ:

translator.load("app_zh_CN.qm"); làm việc với:

[MyApp] 
    app_zh_CN.qm 
    [debug] 
    MyApp.exe 

translator.load("app_zh_CN.qm", app.applicationDirPath()); làm việc với:

[MyApp] 
    [debug] 
    app_zh_CN.qm 
    MyApp.exe 
+0

Cảm ơn bạn đã giúp tôi ... –