Chúng ta buộc phải nhìn trực tiếp vào thực sự là giờ Việt không quá thông dụng cũng như không được hỗ trợ nhiều trong cố kỉnh giới technology thông tin. Thế nhưng nếu tôi vẫn quyết trọng điểm viết một phần mềm thuần Việt dành cho tất cả những người như chị em tôi, không quá rất gần gũi với giờ Anh, thì sao? nếu tôi ý muốn ứng dụng cung ứng cả tiếng Anh cùng tiếng Việt để có thể hướng cho tới lượng người dùng lớn hơn? nếu như tôi muốn một ngày kia những đứa bạn người Pháp của tôi có thể sử dụng nhưng không gặp mặt rào cản nào về ngôn ngữ? và còn biết bao nhiêu cái giả dụ như khác…

Việc dịch cả một phần mềm không hẳn là các bước quá đơn giản bởi đây không hẳn chỉ là dịch 1 nhiều từ hay như là một câu. Không hẳn lúc nào thì «Open» tương tự với «Mở» cũng đáp ứng được yêu cầu của fan dùng.

Bạn đang xem: Qt linguist là gì? thông tin, link download, file hỗ trợ

Trong thực tế, bọn họ đang nói tới chuyện tạo thành ứng dụng có thể sử dụng được trong hàng nghìn ngôn ngữ với thổ ngữ trên cụ giới, cho dù bảng vần âm của nó gồm là La Tinh tốt Ả Rập, china hay Nhật Bản, vv…

Chúng ta không chỉ đơn thuần nói đến chuyện dịch từ ngôn từ này sang ngữ điệu khác cơ mà còn bàn luận về việc làm thế nào chương trình hoàn toàn có thể định vị được máy tính xách tay người cần sử dụng và tự động hóa thay đổi cân xứng với ngôn từ của họ. Thậm chí đôi lúc thay vị hiển thị văn bạn dạng từ trái qua đề nghị thì đề xuất hiển thị theo chiều trái lại nếu nên thiết.

Đây đó là lúc mà họ thấy Qt thật tuyệt đối hoàn hảo vì rất có thể giúp dễ dàng và đơn giản hóa tương đối nhiều nhiệm vụ này. Tất cả đều đã được tính trước. Các công cụ chúng ta cần phần lớn đã được setup mặc định ngày mà chúng ta ban đầu cài Qt.

Hãy cùng xem làm cho sao chúng ta hoàn thành trọng trách trên trong bài học kinh nghiệm dưới đây.


Các bước sẵn sàng cho phiên dịch

Việc phiên dịch công tác là 1 quá trình cần được chuẩn bị cẩn thận. Nhưng bọn họ trước hết buộc phải hiểu cơ chế hoạt động vui chơi của nó.

Qt nhận định rằng bạn lập trình (các chúng ta và tôi) chưa hẳn là tín đồ phiên dịch. Với nó, đây là 2 bạn khác nhau.

Vậy cần mọi thứ được thiết kế để hỗ trợ người phiên dịch, dù không tồn tại tí năng lực nào về tin học, cũng rất có thể dịch tuyệt vời và hoàn hảo nhất chương trình đích.

! trong trường hợp của những dự án nhỏ tuổi và cá thể thì bọn họ cũng sẽ chính là người phiên dịch mang đến chương trình của mình. Tuy nhiên ở đây, bọn họ hãy đưa định đó là 1 trong người khác.

Hãy quan gần kề sơ trang bị dưới đây, nó thể hiện công việc của quy trình phiên dịch chương trình.

*

Đầu tiên, chúng ta có lập trình viên, bao gồm là phiên bản thân chúng ta. Bọn họ viết mã nguồn công tác như bình thường, cần sử dụng 1 ngôn ngữ xác định, hoàn toàn có thể là giờ đồng hồ Việt, tiếng Anh, vv… Về cơ phiên bản thì không tồn tại mã nguồn sẽ không còn khác mấy đối với trước bởi vì những đổi khác cần thiết hầu như rất nhỏ tuổi nhặt.Mã mối cung cấp sẽ hiện ra 1 tệp chứa các cụm từ hoặc câu cần được dịch. 1 chương trình kèm theo với Qt auto giúp bạn thực hiện việc này. Các tệp sinh ra sẽ sở hữu được phần mở rộng là .ts, thường với tên bao gồm dạng tenChuongTrinh_ngonNgu.ts.Hãy lấy ví dụ chương trình KienTrucSuX mà chúng ta tạo ra lúc trước. Các tệp ra đời sẽ có tên nhưng kientrucsux_vi.ts, kientrucsux_en.ts, vv… 2 chữ cái cuối trong tên thường chính là mã ngôn từ của 1 nước. Chúng khá giống với thương hiệu miền, ví dụ như như: fr (Pháp) giỏi ru (Nga), vv…Người dịch dìm lấy tệp TS khớp ứng với ngữ điệu của mình. Họ đã dịch chúng qua sự cung ứng của Qt Linguist mà họ sẽ tò mò sau đây.Sau lúc dịch xong, người dịch chuyển tệp TS lại mang đến lập trình viên và họ sẽ biên dịch phần lớn tệp này thành số đông tệp nhị phân .qm. Biệt lập giữa 1 tệp .ts với 1 tệp .qm hơi tương tự như khác hoàn toàn giữa tệp mã mối cung cấp .cpp với tệp tiến hành .exe vậy. Tệp .qm đựng phần dịch dưới định hình nhi phân, góp Qt có thể tải với đọc cấp tốc hơn lúc chạy chương trình. Thiết yếu nhờ nỗ lực mà họ không cảm xúc chương trình sau khi dịch chạy chậm hơn lịch trình gốc.

Chúng ta vẫn cùng khám phá từng bước trong phần tiếp theo sau của bài học này. Hãy bắt đầu bằng xây dựng viên họ nhé. Bao gồm đôi chỗ nhỏ tuổi cần chúng ta biến hóa trong mã nguồn chương trình.


Bước thứ nhất của thừa trình, kia là chuyển đổi mã mối cung cấp để tương xứng cho vấn đề phiên dịch, giúp fan dịch rất có thể nhặt ra được những cụm văn bạn dạng và thông điệp phải dịch.


Như các bạn đã biết, Qt tạo nên lớp QString để quản lý các chuỗi cam kết tự. Lớp này rất hoàn chỉnh, có cung ứng làm vấn đề với định hình mã hóa Unicode.

QString không gặp phải vấn đề khó khăn nào khi thống trị các ký tự tượng trong khi tiếng Trung giỏi Ả Rập. Chính vì vậy, lúc các bạn muốn dịch công tác ra nhiều ngôn ngữ, tôi khích lệ việc sử dụng QString để thao tác với các chuỗi ký tự.

QString chuoiKyTu = "Xin chào"; // Thich hop mang lại viec dichchar chuoiKyTu<> = " Xin chào"; // Khong thich hop đến viec dichVậy lời khuyên răn ở đó là : sử dụng QString bất kể lúc nào hoàn toàn có thể thay bởi vì mảng ký tự.


Ứng dụng cơ bản

Phương thức tr() cho phép chỉ ra là một cụm từ cần được dịch. Ví dụ như :

thoat = new QPushButton("&Thoát");… thì không được cho phép nhãn của nút được dịch. Vậy vào đó, nếu họ sử dụng cách tiến hành tr() :

thoat = new QPushButton(tr("&Thoát"));... Thì nhãn hoàn toàn có thể được dịch.

Tóm lại, viết các thông điệp cùng nhãn được sử dụng trong chương trình bởi ngôn ngữ bạn có nhu cầu nhưng hãy đặt tất chúng nó vào trong cách làm tr().

! cách thức tr() được tư tưởng trong lớp QObject. Đây là một phương thức tĩnh được kế thừa bởi toàn bộ các lớp trong Qt do chúng đa số là lớp con, con cháu của QObject. Trong đa phần trường hợp, viết tr() là đủ. Mặc dù nhiên, ví như 1 ngày họ phải thao tác với 1 lớp không thừa kế QObject, vậy thì bọn họ sẽ đề xuất thêm chi phí tố QObject:: vào trước tên cách tiến hành : thoat = new QPushButton(QObject::tr("&Thoát"));

Tùy chỉnh : thêm ngữ cảnh

Đôi khi chúng ta phát hiện 1 các từ rất cần phải có ngữ cảnh đúng đắn thì mới có thể dịch ngay cạnh nghĩa nó. Trong trường vừa lòng đó, bạn cũng có thể sử dụng cho tới tham số thứ hai của cách làm tr() để lấy ra văn cảnh của từ cho người dịch.

thoat = new QPushButton(tr("&Thoát ", "Dùng làm cho nút thoát chương trình"));Đoạn văn bạn dạng ngữ cảnh này sẽ không còn được hiển thị trong chương trình mà chỉ dành riêng để cung ứng cho dịch giả.

Về cơ phiên bản thì tham số văn cảnh này là ko bắt buộc. Mặc dù trong một số ít trường hợp này lại trở đề nghị vô cùng quan trọng và chẳng thể không có, ví dụ như khi bọn họ muốn dịch …tổ vừa lòng phím tắt.

nutThoat->setShortcut(QKeySequence(tr("Ctrl+Q", "Phím tắt để thoát")));Nhờ đó, bạn dịch rất có thể dịch tổng hợp phím tắt này thành 1 tổ hợp phím, có thể giống hoặc khác tổng hợp phím gốc, như “Ctrl+X” để thích phù hợp với ngôn ngữ sử dụng.

Tùy chỉnh : làm chủ số lượng

Đôi khi, 1 nhiều từ cần phải được viết không giống đi tùy thuộc vào số lương đối tượng. Đây là sự việc rất thường chạm chán khi dịch từ giờ Việt ra tiếng quốc tế do gồm có ngôn ngữ, như tiếng Anh hay tiếng Pháp, chuyển đổi 1 từ nhằm hợp giống cùng hợp số.

Hãy rước 1 ví dụ đơn giản :

Số lượng

Tiếng Việt

Tiếng Anh

Tiếng Pháp

0

Tải 0 tệp

Download 0 files

Télécharger 0 fichier

1

Tải 1 tệp

Download 1 file

Télécharger 1 fichier

2

Tải 2 tệp

Download 2 files

Télécharger 2 fichiers

Tùy vào con số mà bọn họ thêm chữ “s” vào trong danh từ. Tôi biết là giờ Nga thậm chí là còn vấn đề hơn thế.

? Vậy làm sao để giải quyết và xử lý vấn đề này ?

Yên tâm, Qt ở đây để giúp các bạn quản lý tất cả những trắc trở bên lề này, chỉ việc là fan dịch hoàn toàn có thể dịch đúng từng trường hợp là được.

Làm sao Qt làm được ? Đó là nhờ thông sang 1 tham số thiết bị 3 cho cách làm tr().

tr("Tải xuống %n tệp", "", soTep);! còn nếu như không muốn chỉ dẫn tham số ngữ cảnh, bọn họ bắt bắt buộc truyền vào tham số thứ hai của cách tiến hành 1 chuỗi cam kết tự rỗng để có thể sử dụng được tham số lắp thêm 3. Đây là kể lại 1 chút về những hàm với tham số không phải trong C++.

Vậy là Qt sẽ tự động tìm ra được phiên bản dịch đúng cho cụm từ phụ thuộc ngôn ngữ nên dịch và số lượng của đối tượng. Bên cạnh ra, quý giá của biến đổi số tệp sẽ auto thay thay vị trí của %n vào chuỗi cam kết tự.

Thế là mã mối cung cấp của chúng ta đã chuẩn bị để được dịch ra các ngôn ngữ khác. Chuyển hẳn sang bước 2 thôi hả?


Chúng ta đã tất cả trong tay chương trình áp dụng tr() nhằm chỉ ra tất cả các các từ buộc phải dịch.

Chúng ta sẽ thực hiện lại lấy ví dụ như của chương trình KienTrucSuX để minh họa. Tôi đã thay đổi nó 1 chút thực hiện phương thức tr().

Chúng ta ước ao chương trình KienTrucSuX của chúng ta được dịch ra giờ đồng hồ Anh và tiếng Pháp.

Vậy cần tạo nên 2 tệp dịch kientrucsux_en.ts dành cho tiếng Anh và kientrucsux_fr.ts đến tiếng Pháp.

Chúng ta cần chuyển đổi tệp .pro 1 chút. Đây là tệp auto sinh ra do Qt Creator khi họ tạo dự án.

Mở tệp này với trình biên soạn thảo văn bản.

HEADERS += CuaSoMa.h CuaSoChinh.hSOURCES += CuaSoMa.cpp CuaSoChinh.cpp main.cppQT += widgetsHãy thêm vào dòng xoáy lệnh cho biết là cần tạo ra 2 tệp nhằm dịch lịch trình ra 2 thiết bị tiếng.

HEADERS += CuaSoMa.h CuaSoChinh.hSOURCES += CuaSoMa.cpp CuaSoChinh.cpp main.cppTRANSLATIONS = kientrucsux_en.ts kientrucsux_fr.tsQT += widgetsTốt rồi, giờ chúng ta sẽ cần thực hiện đến 1 công tác kiểu chiếc lệnh của Qt để tạo thành các tệp .ts yêu cầu.

Hãy xuất hiện thêm cửa sổ mẫu lệnh với đường truyền tắt Qt Command Prompt và gửi tới thư mục của dự án.

lupdate KienTrucSuX.prolupdate là một trong những chương trình tự động cập nhật nội dung cho những tệp .ts hoặc tạo ra chúng nếu không tồn tại.

*

Chương trình này tương đối thông minh. Nếu lần sản phẩm công nghệ 2 chúng ta thực thi nó, nó chỉ update những chuỗi cam kết tự bao gồm thay đổi. Việc này rất hữu dụng khi người dịch thấy ngay chớp nhoáng những nhiều từ cần phải chuyển đổi so với bản trước.

Thế là bây chừ chúng ta đã bao gồm 2 tệp kientrucsux_en.ts cùng kientrucsux_fr.ts. Hãy nhờ cất hộ chúng cho những người dịch ngôn ngữ tương ứng.


Qt đã thiết lập cho bọn họ 1 số công tác lúc ban đầu, chúng ta còn ghi nhớ chứ ?

1 trong các chúng sẽ mang về trợ giúp lớn lao cho họ vào thời khắc này. Đó là Qt Linguist.

Người dịch sẽ yêu cầu 2 thứ nhằm thực hiện công việc của mình

Tệp tin .ts nên dịchChương trình Qt Linguist để dịch

Khi khởi hễ chương trình, tín đồ dịch đã thấy hành lang cửa số dưới đây.

*

Không thể nói là nó siêu cấp tinh vi một khi mang đi đối chiếu với phần lớn chương trình như của Qt Designer. Sau khi đã học ngừng bài học tập về hành lang cửa số chính, bọn họ dễ dàng nhận biết cửa sổ này cùng với danh lục, thanh công cụ, vùng trung tâm, vv… Đúng vậy, lịch trình này phiên bản thân nó cũng được viết bằng Qt, y như tất cả các phần mềm đi kèm Qt khác.

! tương đối khó nhận biết vùng trung tâm vì vùng xung quanh của cửa sổ này chiếm diện tích khá lớn. Vùng trung chổ chính giữa thật sự là vùng chữ nhật viền tròn cùng với chữ “Source text” và “Translation” sống trong. Hãy chú ý là vùng xung quanh hoàn toàn có thể chuyển đổi vị trí. Vậy nên hãy sắp xếp cửa sổ hợp lí để tiện lợi nhất cho việc dịch. Thậm chí bạn có thể kéo vùng xung quanh thoát khỏi cửa sổ chủ yếu và tạo thành các cửa sổ bé nếu đề nghị thiết.

Dùng lịch trình này nhằm mở tệp .ts, lấy ví dụ kientrucsux_en.ts. Những cửa sổ con sẽ tự động hóa được điền giá trị.

*

Chi tiết từng mảng của hành lang cửa số chương trình :

Context : vùng này đựng danh sách các tệp nguồn phải dịch. Các bạn sẽ tìm thấy CuaSoChinh cùng CuaSoMa sinh sống đây. Bên cạnh đó là số lượng cụm từ cần dịch.Strings : danh sách những cụm từ phải dịch của tệp được chọn. Đây là những nhiều từ được nhặt ra dựa vào tr().Vùng dịch : chọn 1 cụm từ để dịch, đây đã là vị trí nhập giá trị bản dịch cho các từ đó. Chăm chú là Qt tự động hóa nhận biết ngôn ngữ họ muốn dịch nhờ vào phần cuối tên của tệp .ts. Nếu nhiều từ phải nhiều phiên bạn dạng dịch cho các trường phù hợp số nhiều, vùng dịch sẽ tự động yêu cầu thêm 1 bạn dạng dịch sản phẩm công nghệ 2.Warnings : nơi hiện các thông báo hữu ích để cảnh báo về cụ thể các phiên bản dịch. Đây cũng là nơi hiển thị cụm từ buộc phải dịch trong ngữ cảnh của mã nguồn.

Giờ thì tới lượt người dịch làm công việc của mình.

Sau khi ngừng việc dịch, fan dịch đang cần xác nhận với chương trình bằng phương pháp ấn vào hình tượng ? hoặc tổ hợp phím Ctrl+Enter. Biểu tượng cần chuyển sang hình tượng xác dấn màu xanh. Các bước hoàn thành khi trong vùng “Context” buộc phải hiển thị rằng tất cả các nhiều đều được dịch.

*

Chúng ta chỉ từ 1 bước cuối là biên dịch tệp .ts này sang trọng tệp .qm và lịch trình của bọn họ sẽ tất cả thể tự động thay đổi phù hợp với ngôn ngữ người dùng.


Để triển khai việc này, chúng ta lại sử dụng đến 1 chương trình đi kèm khác của Qt, đấy là lrelease.

Vẫn là cửa sổ dòng lệnh Qt Command Prompt, trong thư mục của dự án, chúng ta hãy gõ

lrelease tenTep.ts… nhằm biên dịch tệp chỉ định, hoặc

lrelease tenDuAn.pro… để biên dịch tất cả tệp .ts của dự án.

*

Các bạn cũng có thể thấy là lrelease chỉ biên dịch nhưng cụm từ được khắc ghi là sẽ dịch chấm dứt với Qt Linguist. Những nhiều từ khác chưa hoàn thành sẽ không được biên dịch trong tệp .qm.

! Những cụm không được dịch hoặc dịch chưa kết thúc thì đã không mở ra trong chương trình của bọn chúng ta. Cầm vào đó, nhiều từ gốc sẽ hiển thị ở đoạn đó. Phương diện khác, chúng ta cũng hoàn toàn có thể biên dịch cùng với Qt Linguist bằng phương pháp thực hiện file > Release vào danh mục.

Vậy là bọn họ đã tất cả tệp kientrucsux_en.qm (hoặc kientrucsux_fr.qm) trong folder của dự án. Vậy cần làm thế nào để áp dụng nó.


Việc yêu cầu thực hiện tệp .qm diễn ra ở đầu hàm main(). Hiện nay giờ, bọn họ có :

int main(int argc, char* argv<>) QApplication app(argc, argv); CuaSoChinh cuaSo; cuaSo.show(); return app.exec();Chúng ta sẽ thêm một số chiếc lệnh để áp dụng tệp .qm.

int main(int argc, char* argv<>) QApplication app(argc, argv); QTranslator phienDich; phienDich.load("kientrucsux_en"); app.installTranslator(&phienDich); CuaSoChinh cuaSo; cuaSo.show(); return app.exec();! chú ý là yêu cầu đặt tệp .qm trong cùng thư mục cùng với tệp thực thi, giả dụ không bạn dạng dịch sẽ không được sử dụng và chương trình sẽ chỉ được hiển thị trong ngôn ngữ gốc.

Nếu đều thứ tốt đẹp, bọn họ sẽ nhận được công dụng sau.

*

? có vẻ tác dụng đấy, thế nhưng chương trình của chúng ta lúc nào cũng chỉ hoàn toàn có thể hiện tiếng Anh. Làm thế nào để nó tự cân xứng theo ngôn ngữ người tiêu dùng ?

Đây đang bước tiếp theo sau trong biến đổi xử lý của bọn chúng ta.

int main(int argc, char* argv<>) QApplication app(argc, argv); QString maNgonNgu = QLocale::system().name().section("_", 0, 0); QTranslator phienDich; phienDich.load(QString("kientrucsux_") + maNgonNgu); app.installTranslator(&phienDich); CuaSoChinh cuaSo; cuaSo.show(); return app.exec();Giải ưng ý : chúng ta muốn lôi ra mã ngôn ngữ của dòng sản phẩm tính fan dùng. Để lấy các thông tin về hệ điều hành trong những số ấy chương trình được thực thi, chúng ta có thể sử dụng 1 danh sách các phương thức tĩnh của lớp QLocale.

Phương thức QLocale::system().name() đã trả về cho chúng ta kết quả dưới dạng sau : maNgonNgu_maNuoc, ví dụ như tiếng Việt đang là vi_VN.

Chúng ta bắt buộc nhặt ra mã ngôn ngữ, là phần ở đằng trước vết _ nên sẽ bắt buộc dùng đến thủ tục section() để thao tác lôi ra chuỗi con. Kết quả là bọn họ sẽ kéo ra được mã ngôn ngữ của dòng sản phẩm tính người dùng để làm kết hợp, khẳng định tệp dịch cần được sử dụng.

QString("kientrucsux_") + maNgonNguNếu người tiêu dùng sử dụng tiếng Anh, họ sẽ tất cả kientrucsux_en còn nếu ngữ điệu dùng là giờ Pháp thì chúng ta có kientrucsux_fr.

Dựa vào kia Qt sẽ tìm ra tệp dịch yêu cầu sử dụng. Nếu như không thể tìm thấy tệp này thì ngôn ngữ mặc định sẽ được sử dụng là ngôn ngữ họ đã dùng để làm viết chương trình.

Thêm vào 1 ví dụ lịch trình của bọn họ được dịch ra ngữ điệu thứ 3, giờ đồng hồ Pháp.

Như các chúng ta cũng có thể nhận thấy, các bước dịch vào Qt đã có phong cách thiết kế khá tỉ mỉ để giúp chúng ta. Chương trình viết ra có thể hiển thị trong nhiều ngôn ngữ khác nhau và hoàn toàn có thể hướng tới nhiều người dùng hơn.

Xem thêm: Giải Mã Căn Bệnh… Biến Thái Ở Nam Giới, Biến Thái Là Gì

Còn vấn đề dịch ra những ngôn ngữ đó thì … xin lỗi, tôi tất yêu giúp được gì hơn.