Share via


TN057: Pelokalan Komponen MFC

Catatan

Catatan teknis berikut belum diperbarui sejak pertama kali disertakan dalam dokumentasi online. Akibatnya, beberapa prosedur dan topik mungkin kedaluarsa atau salah. Untuk informasi terbaru, disarankan agar Anda mencari topik yang menarik dalam indeks dokumentasi online.

Catatan ini menjelaskan beberapa desain dan prosedur yang dapat Anda gunakan untuk melokalisasi komponen Anda, jika itu aplikasi atau kontrol OLE atau DLL yang menggunakan MFC.

Gambaran Umum

Benar-benar ada dua masalah yang harus diselesaikan saat melokalisasi komponen yang menggunakan MFC. Pertama, Anda harus melokalisasi sumber daya Anda sendiri — string, dialog, dan sumber daya lain yang khusus untuk komponen Anda. Sebagian besar komponen yang dibangun menggunakan MFC juga menyertakan dan menggunakan sejumlah sumber daya yang ditentukan oleh MFC. Anda juga harus menyediakan sumber daya MFC yang dilokalkan. Untungnya, beberapa bahasa sudah disediakan oleh MFC itu sendiri.

Selain itu, komponen Anda harus siap untuk berjalan di lingkungan targetnya (lingkungan yang mendukung Eropa atau DBCS). Sebagian besar, ini tergantung pada aplikasi Anda memperlakukan karakter dengan bit tinggi diatur dengan benar dan menangani string dengan karakter byte ganda. MFC diaktifkan, secara default, untuk kedua lingkungan ini, sehingga dimungkinkan untuk memiliki satu biner di seluruh dunia yang digunakan pada semua platform hanya dengan sumber daya yang berbeda yang dicolokkan pada waktu penyiapan.

Melokalisasi Sumber Daya Komponen Anda

Melokalisasi aplikasi atau DLL Anda harus melibatkan hanya mengganti sumber daya dengan sumber daya yang cocok dengan bahasa target. Untuk sumber daya Anda sendiri, ini relatif sederhana: edit sumber daya di editor sumber daya dan bangun aplikasi Anda. Jika kode Anda ditulis dengan benar, tidak akan ada string atau teks yang ingin Anda lokalkan secara permanen ke kode sumber C++ Anda - semua pelokalan dapat dilakukan hanya dengan memodifikasi sumber daya. Bahkan, Anda dapat mengimplementasikan komponen Anda sehingga semua menyediakan versi yang dilokalkan bahkan tidak melibatkan build kode asli. Ini lebih kompleks, tetapi sepadan dan merupakan mekanisme yang dipilih untuk MFC itu sendiri. Dimungkinkan juga untuk melokalisasi aplikasi dengan memuat file EXE atau DLL ke editor sumber daya dan mengedit sumber daya secara langsung. Meskipun memungkinkan, diperlukan penerapan ulang perubahan tersebut setiap kali Anda membangun versi baru aplikasi Anda.

Salah satu cara untuk menghindarinya adalah dengan menemukan semua sumber daya di DLL terpisah, kadang-kadang disebut DLL satelit. DLL ini kemudian dimuat secara dinamis pada runtime dan sumber daya dimuat dari DLL tersebut alih-alih dari modul utama dengan semua kode Anda. MFC secara langsung mendukung pendekatan ini. Pertimbangkan aplikasi bernama MYAPP.EXE; itu bisa memiliki semua sumber dayanya yang terletak di DLL yang disebut MYRES.DLL. Dalam aplikasi, InitInstance ini akan melakukan hal berikut untuk memuat DLL tersebut dan menyebabkan MFC memuat sumber daya dari lokasi tersebut:

CMyApp::InitInstance()
{
    // one of the first things in the init code
    HINSTANCE hInst = LoadLibrary("myres.dll");

    if (hInst != NULL)
        AfxSetResourceHandle(hInst);

    // other initialization code would follow
    // ...
}

Sejak saat itu, MFC akan memuat sumber daya dari DLL tersebut alih-alih dari myapp.exe. Namun, semua sumber daya harus ada di DLL tersebut; MFC tidak akan mencari instans aplikasi untuk mencari sumber daya tertentu. Teknik ini berlaku sama baiknya untuk DLL MFC reguler serta Kontrol OLE. Program penyiapan Anda akan menyalin versi MYRES.DLL yang sesuai tergantung pada sumber daya mana yang diinginkan pengguna.

Relatif mudah untuk membuat DLL hanya sumber daya. Anda membuat proyek DLL, menambahkan . File RC ke dalamnya, dan tambahkan sumber daya yang diperlukan. Jika Anda memiliki proyek yang sudah ada yang tidak menggunakan teknik ini, Anda dapat menyalin sumber daya dari proyek tersebut. Setelah menambahkan file sumber daya ke proyek, Anda hampir siap untuk membangun proyek. Satu-satunya hal yang harus Anda lakukan adalah mengatur opsi linker untuk menyertakan /NOENTRY. Ini memberi tahu linker bahwa DLL tidak memiliki titik masuk - karena tidak memiliki kode, dll tidak memiliki titik masuk.

Catatan

Editor sumber daya di Visual C++ 4.0 dan yang lebih baru mendukung beberapa bahasa per . File RC. Ini dapat membuatnya sangat mudah untuk mengelola pelokalan Anda dalam satu proyek. Sumber daya untuk setiap bahasa dikontrol oleh direktif praprosedur yang dihasilkan oleh editor sumber daya.

Menggunakan Sumber Daya Terlokalisasi MFC yang Disediakan

Aplikasi MFC apa pun yang Anda buat menggunakan kembali dua hal dari MFC: kode dan sumber daya. Artinya, MFC memiliki berbagai pesan kesalahan, dialog bawaan, dan sumber daya lain yang digunakan oleh kelas MFC. Untuk melokalisasi aplikasi Anda sepenuhnya, Anda perlu melokalisasi tidak hanya sumber daya aplikasi Anda, tetapi juga sumber daya yang berasal langsung dari MFC. MFC menyediakan sejumlah file sumber daya bahasa yang berbeda secara otomatis, sehingga jika bahasa yang Anda targetkan adalah salah satu bahasa yang sudah didukung MFC, Anda hanya perlu memastikan Anda menggunakan sumber daya yang dilokalkan tersebut.

Pada tulisan ini, MFC mendukung Bahasa Tionghoa, Jerman, Spanyol, Prancis, Italia, Jepang, dan Korea. File yang berisi versi yang dilokalkan ini berada di direktori MFC\INCLUDE\L.* ('L' singkatan dari lokal). File Jerman berada di MFC\INCLUDE\L.DEU, misalnya. Untuk menyebabkan aplikasi Anda menggunakan file RC ini alih-alih file yang terletak di MFC\INCLUDE, tambahkan /IC:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\VC7\MFC\INCLUDE\L.DEU ke baris perintah RC Anda (ini hanyalah contoh; Anda perlu mengganti lokal pilihan Anda serta direktori tempat Anda menginstal Visual C++).

Instruksi di atas akan berfungsi jika aplikasi Anda ditautkan secara statis dengan MFC. Sebagian besar aplikasi menautkan secara dinamis (karena itu adalah default AppWizard). Dalam skenario ini, tidak hanya kode yang ditautkan secara dinamis - begitu juga sumber dayanya. Akibatnya, Anda dapat melokalisasi sumber daya di aplikasi Anda, tetapi sumber daya implementasi MFC masih akan dimuat dari MFC7x.DLL (atau versi yang lebih baru) atau dari MFC7xLOC.DLL jika ada. Anda dapat mendekati ini dari dua sudut yang berbeda.

Pendekatan yang lebih kompleks adalah mengirim salah satu MFC7xLOC.DL yang dilokalkan (seperti MFC7xDEU, untuk Jerman, MFC7xESP.DLL untuk Spanyol, dll.), atau versi yang lebih baru, dan instal MFC7xLOC.DLL yang sesuai ke direktori sistem saat pengguna menginstal aplikasi Anda. Ini bisa sangat kompleks untuk pengembang dan pengguna akhir dan karenanya tidak disarankan. Lihat Catatan Teknis 56 untuk informasi selengkapnya tentang teknik ini dan peringatannya.

Pendekatan paling sederhana dan paling aman adalah menyertakan sumber daya MFC yang dilokalkan dalam aplikasi Anda atau DLL itu sendiri (atau DLL satelitnya jika Anda menggunakannya). Ini menghindari masalah penginstalan MFC7xLOC.DLL dengan benar. Untuk melakukannya, Anda mengikuti instruksi yang sama untuk kasus statis yang diberikan di atas (mengatur baris perintah RC dengan benar untuk menunjuk ke sumber daya yang dilokalkan), kecuali bahwa Anda juga harus menghapus /D_AFXDLL definisi yang ditambahkan oleh AppWizard. Ketika /D_AFXDLL didefinisikan, AFXRES. H (dan file RC MFC lainnya) tidak benar-benar menentukan sumber daya apa pun (karena mereka akan ditarik dari DLL MFC sebagai gantinya).

Baca juga

Catatan Teknis menurut Angka
Catatan Teknis menurut Kategori