Using InstallScript to Implement Custom DialogsInstallShield 2014 Proj dịch - Using InstallScript to Implement Custom DialogsInstallShield 2014 Proj Việt làm thế nào để nói

Using InstallScript to Implement Cu

Using InstallScript to Implement Custom Dialogs
InstallShield 2014

Project: This information applies to the following project types:

• InstallScript
• InstallScript MSI

The next step in creating a custom dialog is to write an InstallScript function that processes the end user’s interaction with the dialog controls.

To use InstallScript to implement a custom dialog in an InstallScript project:

1. Begin by creating a new InstallScript source file to contain the custom dialog code. Name the file CustomDialog.rul.

Tip: To be able to use the dialog script in other projects, copy the .rul file to another location. In your other projects, open the InstallScript view, right-click the Files item in the InstallScript explorer, and click Insert Script Files.

2. Inside CustomDialog.rul, place the prototype and implementation for your custom dialog function. Add the following code to CustomDialog.rul.

prototype NUMBER CustomDialog( );

function NUMBER CustomDialog( )

begin

end;

3. When you compile your script, indicate that the main script Setup.rul should include the code for your CustomDialog function by inserting the following line near the top of Setup.rul:

#include "CustomDialog.rul"





4. In the CustomDialog.rul script, define the constants that store the numeric IDs of the controls that you added to the dialog. If you copied the Back, Next, and Cancel buttons from a standard dialog, you can add the following lines near the top of CustomDialog.rul:

// control identifiers

#define BUTTON_NEXT 1

#define BUTTON_BACK 12

In general, the numeric ID of a control on a dialog is the number listed in the control’s Control Identifier property, displayed in the property list when you select the control in the Dialog Editor.

Important: To enable end users to cancel the installation by clicking the close button in the upper-right corner of the InstallScript dialog, the dialog must have a button control with a value of 2 for the Control Identifier property. You can place this button anywhere on the dialog, and if necessary, you can make this button invisible. This is necessary because the InstallScript engine passes the WM_CLOSE message to the script only if it comes from a valid control in the dialog. If the dialog does not have a button with this identifier, the installation does not pass through the message that is generated when the dialog’s close button is clicked.

You need to define additional constants for every other control (for example, check box, edit field, or list box) with which the end user can interact.

5. Your CustomDialog function loads the custom dialog into memory using the EzDefineDialog function:

EzDefineDialog(

"CustomDialog", // nickname for dialog

ISUSER, // DLL containing the dialog’s resources

"CustomDialog", // name of dialog in Dialogs view

0); // numeric resource ID for dialog; not used here

To learn which arguments you use with EzDefineDialog, see EzDefineDialog.

Tip: The resource ID of a dialog is the dialog’s name, as it appears in the Dialog Editor. If you need to specify a numeric resource ID, you can add a numeric ID to the ISResourceId column in the Dialog table for the custom dialog. You can access the Dialog table in the Direct Editor.

6. Create a message loop in your script for the custom dialog. The message loop repeatedly calls the function WaitOnDialog, which returns the numeric control ID for the control with which user interacts with. A typical message loop appears as follows.

// repeatedly call WaitOnDialog until the user exits the dialog

// with the Next, Back, or Cancel button

while (!bDone)



// wait for the user to interact with a control,

// then return its ID

nCtrl = WaitOnDialog("CustomDialog");



// use a switch statement to handle the different controls

switch (nCtrl)



case CONTROL1:

// do something when user clicks CONTROL1



case CONTROL2:

// do something when user clicks CONTROL2



// case statements for other controls



endswitch;



endwhile;

For example, CustomDialog currently contains Next, Back, and Cancel buttons. Its message loop might appear as follows:

while (!bDone)



nControl = WaitOnDialog("CustomDialog");



switch (nControl)



case DLG_INIT:

// Initialize the back, next, and cancel button enable/disable

// states for this dialog and replace %P, %VS, %VI with

// IFX_PRODUCT_DISPLAY_NAME, IFX_PRODUCT_DISPLAY_VERSION, and

// IFX_INSTALLED_DISPLAY_VERSION, respectively, on control IDs 700-724 and 202.

hwndDlg = CmdGetHwndDlg("CustomDialog");

SdGeneralInit("CustomDialog", hwndDlg, 0, "");



case BUTTON_BACK:

// user clicked Back

nReturn = BUTTON_BACK;

bDone = TRUE;



case BUTTON_NEXT:

// user clicked Next

nReturn = BUTTON_NEXT;

bDone = TRUE;





default:

// check standard control handling

if (SdIsStdButton(nControl) && SdDoStdButton(nControl)) then

bDone = TRUE;

endif;



endswitch;



endwhile;

7. When the end user exits the dialog by clicking Back or Next, you should remove the dialog from the screen and from memory using EndDialog and ReleaseDialog:

EndDialog("CustomDialog");

ReleaseDialog("CustomDialog");

To use the dialog in the main script, add a call to the CustomDialog function in, for example, the OnFirstUIBefore event handler of Setup.rul.

Dlg_SdWelcome:

szTitle = "";

szMsg = "";

nResult = SdWelcome(szTitle, szMsg);



Dlg_CustomDlg:

nResult = CustomDialog( );

if (nResult = BUTTON_BACK) goto Dlg_SdWelcome;



// etc.

If the end user clicks Back or Next, the script displays the previous or following dialog. If the user clicks Cancel, the standard confirmation dialog (handled by the OnCanceling event handler) is displayed.

Note: For information on implementing dialog control functionality, see Using InstallScript to Process Dialog Controls.

Special Messages

In addition to returning control identifiers, the WaitOnDialog function returns some special messages.

• Immediately before the dialog is displayed on the screen, WaitOnDialog returns the message constant DLG_INIT. In the DLG_INIT case statement, you can set the default states of check boxes and radio buttons, populate and set the current selection in a list box or combo box control, or set the initial text of an edit field.
• If an error occurs, WaitOnDialog returns the constant DLG_ERR.
InstallShield Help Library
May 2014 Copyright Information | Contact Us
0/5000
Từ: -
Sang: -
Kết quả (Việt) 1: [Sao chép]
Sao chép!
Bằng cách sử dụng InstallScript để thực hiện tuỳ chỉnh DialogsInstallShield 2014 Dự án: Thông tin này áp dụng cho các loại dự án sau đây: • InstallScript • InstallScript MSI Bước tiếp theo trong việc tạo ra một hộp thoại tuỳ chỉnh là viết một chức năng InstallScript xử lý người dùng tương tác với điều khiển hộp thoại.Để sử dụng InstallScript để thực hiện một hộp thoại tuỳ chỉnh trong một dự án InstallScript: 1. bắt đầu bằng cách tạo ra một mới InstallScript nguồn tập tin có chứa mã tùy chỉnh hộp thoại. Tên tập tin CustomDialog.rul. Mẹo: Để có thể sử dụng hộp thoại trong các dự án khác, sao chép các tập tin .rul vào vị trí khác. Trong các dự án khác của bạn, mở giao diện InstallScript, bấm chuột phải vào tập tin mục trong nhà thám hiểm InstallScript và nhấp vào chèn tập tin kịch bản. 2. bên trong CustomDialog.rul, nơi các nguyên mẫu và thực hiện chức năng tùy chỉnh hộp thoại của bạn. Thêm mã sau đây để CustomDialog.rul. nguyên mẫu số CustomDialog ();hoạt động số CustomDialog)bắt đầukết thúc; 3. khi bạn biên dịch kịch bản của bạn, chỉ ra rằng các tập lệnh chính Setup.rul nên bao gồm mã cho chức năng CustomDialog của bạn bằng cách chèn dòng sau gần đầu của Setup.rul: #include "CustomDialog.rul" 4. trong kịch bản CustomDialog.rul, xác định các hằng số lưu trữ các ID số điều khiển mà bạn thêm vào hộp thoại. Nếu bạn đã sao chép các nút Back, tiếp theo, và hủy bỏ từ một hộp thoại tiêu chuẩn, bạn có thể thêm những dòng sau gần đầu của CustomDialog.rul: từ định danh của kiểm soát#define BUTTON_NEXT 1#define BUTTON_BACK 12Nói chung, số ID của một điều khiển trên hộp thoại một là một số được liệt kê trong điều khiển kiểm soát nhận dạng tài sản, Hiển thị trong danh sách tài sản khi bạn chọn kiểm soát trong hộp thoại Editor.Quan trọng: Để cho phép người dùng cuối để hủy bỏ cài đặt bằng cách nhấp vào nút đóng ở góc trên bên phải của hộp thoại InstallScript, hộp thoại phải có một nút điều khiển với một giá trị của 2 cho thuộc tính điều khiển nhận dạng. Bạn có thể đặt nút này bất cứ nơi nào trên hộp thoại, và nếu cần thiết, bạn có thể làm cho nút này vô hình. Điều này là cần thiết vì động cơ InstallScript vượt qua tin nhắn WM_CLOSE đến các tập lệnh chỉ nếu nó xuất phát từ một điều khiển hợp lệ trong hộp thoại. Nếu hộp thoại không có một nút với nhận dạng này, tiến trình cài đặt không đi qua tin nhắn được tạo ra khi của hộp thoại đóng nút được nhấp.Bạn cần phải xác định các hằng số bổ sung cho mỗi điều khiển khác (ví dụ, hộp kiểm, lĩnh vực chỉnh sửa hoặc hộp danh sách) với mà người dùng có thể tương tác. 5. chức năng CustomDialog của bạn tải hộp thoại tuỳ chỉnh vào bộ nhớ bằng cách sử dụng các chức năng EzDefineDialog: EzDefineDialog) "CustomDialog", / / biệt danh cho hộp thoại ISUSER, / / DLL có của hộp thoại tài nguyên "CustomDialog", / / tên của hộp thoại trong chế độ xem hội thoại 0); ID số tài nguyên cho hộp thoại; không được sử dụng ở đâyĐể tìm hiểu đối số mà bạn sử dụng với EzDefineDialog, xem EzDefineDialog.Mẹo: ID tài nguyên của một hộp thoại là tên của hộp thoại, như nó xuất hiện trong hộp thoại Editor. Nếu bạn cần phải chỉ định một ID số tài nguyên, bạn có thể thêm một số ID ISResourceId cột trong bảng hộp thoại cho hộp thoại tuỳ chỉnh. Bạn có thể truy cập vào hộp thoại bảng trong trình soạn thảo trực tiếp. 6. tạo ra một vòng lặp thông điệp trong script của bạn cho hộp thoại tuỳ chỉnh. Vòng lặp thông báo nhiều lần gọi chức năng WaitOnDialog, mà trả lại ID số kiểm soát cho sự kiểm soát với người dùng tương tác với. Một vòng lặp điển hình thông báo xuất hiện như sau. nhiều lần gọi WaitOnDialog cho đến khi người dùng ra khỏi hộp thoạivới tiếp theo, trở lại, hoặc hủy bỏ núttrong khi (! bDone) chờ đợi cho người dùng để tương tác với một điều khiển,sau đó trở về ID của nónCtrl = WaitOnDialog("CustomDialog"); sử dụng một tuyên bố chuyển đổi để xử lý các điều khiển khác nhauchuyển đổi (nCtrl) trường hợp CONTROL1: làm điều gì đó khi người dùng nhấp chuột CONTROL1 trường hợp CONTROL2: làm điều gì đó khi người dùng nhấp chuột CONTROL2 Các báo cáo trường hợp cho các điều khiển khác endswitch; endwhile;Ví dụ, CustomDialog hiện nay có tiếp theo, trở lại, và hủy bỏ nút. Vòng lặp thông báo có thể xuất hiện như sau:trong khi (! bDone) nControl = WaitOnDialog("CustomDialog"); chuyển đổi (nControl) trường hợp DLG_INIT: Khởi tạo lại, tiếp theo, và hủy bỏ nút bật/tắt Kỳ cho này hộp thoại và thay thế %P, %VS, % VI với IFX_PRODUCT_DISPLAY_NAME, IFX_PRODUCT_DISPLAY_VERSION, và IFX_INSTALLED_DISPLAY_VERSION, tương ứng, trên điều khiển ID 700-724 và 202. hwndDlg = CmdGetHwndDlg("CustomDialog"); SdGeneralInit ("CustomDialog", hwndDlg, 0, ""); trường hợp BUTTON_BACK: người dùng nhấp vào trở lại nReturn = BUTTON_BACK; bDone = TRUE; trường hợp BUTTON_NEXT: người dùng đã nhấp vào tiếp theo nReturn = BUTTON_NEXT; bDone = TRUE; mặc định: Phòng tiêu chuẩn kiểm soát xử lý Nếu (SdIsStdButton(nControl) & & SdDoStdButton(nControl)) sau đó bDone = TRUE; endif; endswitch; endwhile; 7. khi người dùng ra khỏi hộp thoại bằng cách bấm vào trở lại hoặc tiếp theo, bạn nên loại bỏ hộp thoại từ màn hình và từ bộ nhớ bằng cách sử dụng EndDialog và ReleaseDialog: EndDialog("CustomDialog");ReleaseDialog("CustomDialog");Sử dụng hộp thoại trong kịch bản chính, thêm một cuộc gọi đến các chức năng CustomDialog trong, ví dụ, OnFirstUIBefore sự kiện xử lý của Setup.rul.Dlg_SdWelcome: szTitle = ""; szMsg = ""; nResult = SdWelcome (szTitle, szMsg); Dlg_CustomDlg: nResult = CustomDialog (); Nếu (nResult = BUTTON_BACK) goto Dlg_SdWelcome; vv.Nếu người dùng nhấp vào trở lại hoặc tiếp theo, các kịch bản sẽ hiển thị hộp thoại trước hoặc sau. Nếu người dùng nhấp hủy bỏ, hộp thoại xác nhận tiêu chuẩn (xử lý bởi bộ xử lý sự kiện OnCanceling) sẽ được hiển thị.Lưu ý: Để thông tin về việc thực hiện chức năng kiểm soát hộp thoại, hãy xem sử dụng InstallScript để quá trình hộp thoại điều khiển.Đặc biệt thưNgoài trở về kiểm soát định dạng, chức năng WaitOnDialog trả về một số thông điệp đặc biệt. • Ngay lập tức trước khi hộp thoại sẽ được hiển thị trên màn hình, WaitOnDialog trở về liên tục thông báo DLG_INIT. Trong báo cáo trường hợp DLG_INIT, bạn có thể thiết lập mặc định kỳ của hộp kiểm tra, nút radio, cư và thiết lập lựa chọn hiện thời trong một danh sách hộp hoặc kết hợp hộp kiểm soát hoặc đặt các văn bản ban đầu của một lĩnh vực chỉnh sửa. • Nếu một lỗi xảy ra, WaitOnDialog trả về DLG_ERR liên tục. InstallShield trợ giúp thư việnTháng 5 năm 2014 bản quyền thông tin | Liên hệ với chúng tôi
đang được dịch, vui lòng đợi..
Kết quả (Việt) 2:[Sao chép]
Sao chép!
Sử dụng InstallScript để Thực hiện chỉnh Dialogs
InstallShield 2014 dự án: Thông tin này áp dụng đối với các loại dự án sau đây: • InstallScript • InstallScript MSI . Các bước tiếp theo trong việc tạo ra một hộp thoại tùy chỉnh là để viết một chức năng InstallScript mà các quá trình tương tác của người dùng cuối với các điều khiển hộp thoại Để sử dụng InstallScript để thực hiện một hộp thoại tùy chỉnh trong một dự án InstallScript: 1. Bắt đầu bằng cách tạo ra một tập tin nguồn InstallScript mới để chứa mã hộp thoại tùy chỉnh. Đặt tên tệp CustomDialog.rul. Mẹo: Để có thể sử dụng các kịch bản thoại trong các dự án khác, sao chép các tập tin .rul đến một vị trí khác. Trong các dự án khác của bạn, mở xem InstallScript, kích chuột phải vào mục tập tin trong thám hiểm InstallScript, và nhấn Insert Script Files. 2. Bên trong CustomDialog.rul, đặt các mẫu thử nghiệm và triển khai cho chức năng thoại tùy chỉnh của bạn. Thêm mã sau đây để CustomDialog.rul. nguyên mẫu số CustomDialog (); hàm số CustomDialog () bắt đầu cuối; 3. Khi bạn biên dịch kịch bản của bạn, chỉ ra rằng kịch bản Setup.rul chính phải bao gồm các mã cho chức năng CustomDialog của bạn bằng cách chèn dòng sau gần đầu Setup.rul: #include "CustomDialog.rul" 4. Trong kịch bản CustomDialog.rul, xác định các hằng số mà lưu trữ các ID số các điều khiển mà bạn đã thêm vào hộp thoại. Nếu bạn đã sao chép lại, Next, và Cancel từ một hộp thoại tiêu chuẩn, bạn có thể thêm các dòng sau gần đầu CustomDialog.rul: // Kiểm định #define BUTTON_NEXT 1 #define BUTTON_BACK 12 Nhìn chung, các ID số của một kiểm soát trên một hộp thoại là số được liệt kê trong tài sản kiểm soát nhận dạng của điều khiển, hiển thị trong danh sách thuộc tính khi bạn chọn các điều khiển trong Dialog Editor. Quan trọng: Để cho phép người dùng cuối để hủy bỏ cài đặt bằng cách nhấn vào nút close ở góc trên bên phải góc của hộp thoại InstallScript, hộp thoại phải có một nút điều khiển với giá trị 2 cho các tài sản kiểm soát nhận dạng. Bạn có thể đặt nút này bất cứ nơi nào trên hộp thoại, và nếu cần thiết, bạn có thể làm cho nút này vô hình. Điều này là cần thiết vì các công cụ InstallScript đi thông điệp WM_CLOSE đến kịch bản chỉ nếu nó xuất phát từ một điều khiển hợp lệ trong hộp thoại. Nếu hộp thoại không có một nút bấm với định danh này, việc cài đặt không đi qua các thông điệp được tạo ra khi nút đóng của hộp thoại được nhấp. Bạn cần phải xác định các hằng số bổ sung cho tất cả các điều khiển khác (ví dụ, hộp kiểm tra, chỉnh sửa trường , hoặc hộp danh sách) mà người dùng cuối có thể tương tác. 5. Chức năng CustomDialog bạn tải các hộp thoại tùy chỉnh vào bộ nhớ bằng cách sử dụng chức năng EzDefineDialog: EzDefineDialog ( "CustomDialog", // nickname cho thoại ISUSER, // DLL có tài nguyên của hộp thoại "CustomDialog", // tên của hộp thoại trong Dialogs view 0); // ID tài nguyên số cho hộp thoại; không được sử dụng ở đây để tìm hiểu mà đối số bạn sử dụng với EzDefineDialog, xem EzDefineDialog. Tip: Các ID tài nguyên của một hộp thoại là tên của hộp thoại, như nó xuất hiện trong Dialog Editor. Nếu bạn cần phải xác định một ID tài nguyên số, bạn có thể thêm một số ID để cột ISResourceId trong bảng Dialog cho hộp thoại tùy chỉnh. Bạn có thể truy cập vào bảng Dialog trong biên soạn trực tiếp. 6. Tạo một vòng lặp thông điệp trong kịch bản của bạn cho các hộp thoại tùy chỉnh. Các vòng lặp thông điệp nhiều lần gọi hàm WaitOnDialog, trả về ID kiểm soát số cho các kiểm soát mà người dùng tương tác với. Một vòng lặp thông điệp điển hình xuất hiện như sau. // liên tục gọi WaitOnDialog đến khi người dùng thoát khỏi hộp thoại // với Next, Back, hoặc nút Cancel trong khi (! bDone) // chờ đợi cho người dùng tương tác với một điều khiển, sau đó // trả lại ID của nó nCtrl = WaitOnDialog ("CustomDialog"); // sử dụng một câu lệnh switch để xử lý các điều khiển khác nhau chuyển đổi (nCtrl) trường hợp Control1: // làm một cái gì đó khi người dùng nhấp Control1 trường hợp Control2: // làm một cái gì đó khi người dùng nhấp Control2 / báo cáo / trường hợp cho các điều khiển khác endswitch; endwhile; Ví dụ, CustomDialog hiện chứa Next, Back, và Cancel. Vòng lặp thông điệp của nó có thể xuất hiện như sau: while (bDone!) nControl = WaitOnDialog ("CustomDialog"); switch (nControl) trường hợp DLG_INIT: // Khởi tạo lại, tiếp theo, và hủy bỏ nút bật / tắt // trạng thái cho hộp thoại này và thay thế% P, VS%,% VI với // IFX_PRODUCT_DISPLAY_NAME, IFX_PRODUCT_DISPLAY_VERSION, và // IFX_INSTALLED_DISPLAY_VERSION, tương ứng, trên ID điều khiển 700-724 và 202. hwndDlg = CmdGetHwndDlg ("CustomDialog"); SdGeneralInit ("CustomDialog", hwndDlg, 0 , ""); trường hợp BUTTON_BACK: // user nhấp lại nReturn = BUTTON_BACK; bDone = TRUE; trường hợp BUTTON_NEXT: // user kích Next nReturn = BUTTON_NEXT; bDone = TRUE; default: // kiểm tra tiêu chuẩn kiểm soát xử lý nếu (SdIsStdButton (nControl ) && SdDoStdButton (nControl)) sau đó bDone = TRUE; endif; endswitch; endwhile; 7. Khi người sử dụng cuối cùng thoát khỏi hộp thoại bằng cách nhấn Back hoặc Tiếp theo, bạn nên loại bỏ các hộp thoại từ màn hình và từ bộ nhớ sử dụng EndDialog và ReleaseDialog: EndDialog ("CustomDialog"); ReleaseDialog ("CustomDialog"); Để sử dụng hộp thoại ở mặt chính kịch bản, thêm một cuộc gọi đến các chức năng CustomDialog tại, ví dụ, xử lý sự kiện của OnFirstUIBefore Setup.rul. Dlg_SdWelcome: szTitle = ""; szMsg = ""; nResult = SdWelcome (szTitle, szMsg); Dlg_CustomDlg: nResult = CustomDialog ( ); if (nResult = BUTTON_BACK) goto Dlg_SdWelcome; // vv Nếu người dùng cuối nhấp chuột hoặc Trở lại Tiếp theo, các script sẽ hiển thị hộp thoại trước hoặc sau đó. Nếu người dùng nhấp Cancel, hộp thoại xác nhận tiêu chuẩn (xử lý bằng cách xử lý sự kiện OnCanceling) được hiển thị. Lưu ý: Để biết thông tin về việc thực hiện chức năng điều khiển hội thoại, xem Sử dụng InstallScript để trình Dialog Controls. tin nhắn đặc biệt Ngoài trở về nhận dạng kiểm soát, các WaitOnDialog hàm trả về một số thông điệp đặc biệt. • Ngay lập tức trước khi hộp thoại được hiển thị trên màn hình, WaitOnDialog trả về tin nhắn DLG_INIT liên tục. Trong báo cáo trường hợp DLG_INIT, bạn có thể thiết lập các tiểu bang mặc định của hộp kiểm tra và các nút radio, cư và thiết lập các lựa chọn hiện tại trong một hộp danh sách hoặc hộp combo kiểm soát, hoặc thiết lập các văn bản ban đầu của một lĩnh vực chỉnh sửa. • Nếu có lỗi xảy ra, WaitOnDialog trả về DLG_ERR liên tục. InstallShield Library Help Tháng năm 2014 Copyright thông tin | Liên hệ


























































































































































































































đang được dịch, vui lòng đợi..
 
Các ngôn ngữ khác
Hỗ trợ công cụ dịch thuật: Albania, Amharic, Anh, Armenia, Azerbaijan, Ba Lan, Ba Tư, Bantu, Basque, Belarus, Bengal, Bosnia, Bulgaria, Bồ Đào Nha, Catalan, Cebuano, Chichewa, Corsi, Creole (Haiti), Croatia, Do Thái, Estonia, Filipino, Frisia, Gael Scotland, Galicia, George, Gujarat, Hausa, Hawaii, Hindi, Hmong, Hungary, Hy Lạp, Hà Lan, Hà Lan (Nam Phi), Hàn, Iceland, Igbo, Ireland, Java, Kannada, Kazakh, Khmer, Kinyarwanda, Klingon, Kurd, Kyrgyz, Latinh, Latvia, Litva, Luxembourg, Lào, Macedonia, Malagasy, Malayalam, Malta, Maori, Marathi, Myanmar, Mã Lai, Mông Cổ, Na Uy, Nepal, Nga, Nhật, Odia (Oriya), Pashto, Pháp, Phát hiện ngôn ngữ, Phần Lan, Punjab, Quốc tế ngữ, Rumani, Samoa, Serbia, Sesotho, Shona, Sindhi, Sinhala, Slovak, Slovenia, Somali, Sunda, Swahili, Séc, Tajik, Tamil, Tatar, Telugu, Thái, Thổ Nhĩ Kỳ, Thụy Điển, Tiếng Indonesia, Tiếng Ý, Trung, Trung (Phồn thể), Turkmen, Tây Ban Nha, Ukraina, Urdu, Uyghur, Uzbek, Việt, Xứ Wales, Yiddish, Yoruba, Zulu, Đan Mạch, Đức, Ả Rập, dịch ngôn ngữ.

Copyright ©2024 I Love Translation. All reserved.

E-mail: