Sdílet prostřednictvím


TN057: Lokalizace komponent MFC

Poznámka

Následující technická poznámka se od prvního zahrnutí do online dokumentace neaktualizovala. V důsledku toho můžou být některé postupy a témata zastaralé nebo nesprávné. Nejnovější informace doporučujeme vyhledat v online indexu dokumentace, které vás zajímá.

Tato poznámka popisuje některé návrhy a postupy, které můžete použít k lokalizaci komponenty, pokud jde o aplikaci nebo ovládací prvek OLE nebo knihovnu DLL, která používá mfc.

Přehled

Při lokalizaci komponenty, která používá mfc, jsou opravdu dva problémy. Nejprve musíte lokalizovat vlastní prostředky – řetězce, dialogy a další prostředky, které jsou specifické pro vaši komponentu. Většina komponent vytvořených pomocí knihovny MFC také zahrnuje a používá řadu prostředků, které jsou definovány prostředím MFC. Musíte také poskytnout lokalizované prostředky MFC. Mfc naštěstí již poskytuje několik jazyků.

Kromě toho by vaše komponenta měla být připravená ke spuštění v cílovém prostředí (prostředí s podporou evropské nebo dbcs). Ve většině případů to závisí na tom, že vaše aplikace zpracovává znaky s vysokou bitovou sadou správně a zpracovává řetězce s dvojitými bajtovými znaky. Prostředí MFC je ve výchozím nastavení povolené pro obě tato prostředí, aby bylo možné mít v době nastavení jediný globální binární soubor, který se používá na všech platformách s pouze různými prostředky připojenými k síti.

Lokalizace prostředků komponenty

Lokalizace aplikace nebo knihovny DLL by měla zahrnovat jednoduše nahrazení prostředků prostředky, které odpovídají cílovému jazyku. Pro vlastní prostředky je to poměrně jednoduché: upravte prostředky v editoru prostředků a sestavte aplikaci. Pokud je váš kód napsaný správně, nebudou existovat žádné řetězce ani text, které chcete lokalizovat pevně zakódované do zdrojového kódu jazyka C++ – veškerou lokalizaci lze provést jednoduše úpravou prostředků. Ve skutečnosti můžete implementovat komponentu tak, aby všechna poskytování lokalizované verze ani neobsázely sestavení původního kódu. Je to složitější, ale stojí za to a je to mechanismus zvolený pro samotný MFC. Je také možné lokalizovat aplikaci načtením souboru EXE nebo DLL do editoru prostředků a úpravou prostředků přímo. I když je to možné, vyžaduje opětovné zopakování těchto změn pokaždé, když sestavíte novou verzi aplikace.

Jedním ze způsobů, jak se vyhnout tomu, je najít všechny prostředky v samostatné knihovně DLL, někdy označované jako satelitní knihovna DLL. Tato knihovna DLL se pak načte dynamicky za běhu a prostředky se načtou z této knihovny DLL místo z hlavního modulu se všemi vašimi kódy. MFC tento přístup přímo podporuje. Zvažte aplikaci s názvem MYAPP.EXE; může mít všechny své prostředky umístěné v knihovně DLL s názvem MYRES.DLL. V aplikaci InitInstance by provedl následující načtení této knihovny DLL a způsobit, že mfc načítá prostředky z tohoto umístění:

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
    // ...
}

Od tého dne mfc načte prostředky z této knihovny DLL místo z myapp.exe. Všechny prostředky však musí být přítomny v této knihovně DLL; MFC nebude prohledávat instanci aplikace při hledání daného prostředku. Tato technika platí stejně dobře pro běžné knihovny MFC DLL a také ovládací prvky OLE. Instalační program zkopíruje odpovídající verzi knihovny MYRES.DLL v závislosti na tom, jaké národní prostředí prostředku bude uživatel chtít.

Je poměrně snadné vytvořit pouze knihovnu DLL prostředku. Vytvoříte projekt knihovny DLL, přidejte svůj . Rc soubor do něj a přidejte potřebné prostředky. Pokud máte existující projekt, který tuto techniku nepoužívá, můžete zkopírovat zdroje z tohoto projektu. Po přidání souboru zdroje do projektu jste téměř připraveni k sestavení projektu. Jedinou věcí, kterou musíte udělat, je nastavit možnosti linkeru tak, aby zahrnovaly /NOENTRY. To říká linkeru, že knihovna DLL nemá žádný vstupní bod – protože nemá žádný kód, nemá žádný vstupní bod.

Poznámka

Editor prostředků v jazyce Visual C++ 4.0 a novější podporuje více jazyků na každý . RC soubor. Díky tomu můžete velmi snadno spravovat lokalizaci v jednom projektu. Prostředky pro každý jazyk jsou řízeny direktivami preprocesoru generované editorem prostředků.

Použití poskytnutých lokalizovaných prostředků MFC

Každá aplikace MFC, kterou vytvoříte, opakovaně používá dvě věci z prostředí MFC: kód a prostředky. To znamená, že MFC obsahuje různé chybové zprávy, předdefinované dialogy a další prostředky, které používají třídy MFC. Abyste mohli aplikaci zcela lokalizovat, musíte lokalizovat nejen prostředky aplikace, ale také prostředky, které pocházejí přímo z prostředí MFC. MFC poskytuje řadu různých souborů prostředků jazyka automaticky, takže pokud je jazyk, na který cílíte, některý z jazyků, které knihovna MFC již podporuje, stačí se ujistit, že tyto lokalizované prostředky používáte.

Od tohoto psaní podporuje MFC čínštinu, němčinu, španělštinu, francouzštinu, italštinu, japonštinu a korejštinu. Soubory, které obsahují tyto lokalizované verze, jsou v adresářích MFC\INCLUDE\L.* (zkratka "L" pro lokalizované) adresáře. Německé soubory jsou například v prostředí MFC\INCLUDE\L.DEU. Pokud chcete, aby vaše aplikace místo souborů umístěných v prostředí MFC\INCLUDE používala tyto soubory RC, přidejte /IC:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\VC7\MFC\INCLUDE\L.DEU do příkazového řádku RC (to je jen příklad. Musíte nahradit národní prostředí a adresář, do kterého jste nainstalovali Visual C++).

Výše uvedené pokyny budou fungovat, pokud vaše aplikace staticky propojí s mfc. Většina aplikací je dynamicky propojená (protože se jedná o výchozí AppWizard). V tomto scénáři je nejen kód dynamicky propojený – tedy prostředky. V důsledku toho můžete své prostředky v aplikaci lokalizovat, ale prostředky implementace MFC budou stále načteny z knihovny MFC7x.DLL (nebo novější verze) nebo z knihovny MFC7xLOC.DLL, pokud existuje. Můžete k tomu přistupovat ze dvou různých úhlů.

Složitějším přístupem je odeslání jedné z lokalizovaných knihoven MFC7xLOC.DLL (například MFC7xDEU, pro němčinu, MFC7xESP.DLL pro španělštinu atd.) nebo novější verze a instalaci příslušné knihovny MFC7xLOC.DLL do systémového adresáře, když uživatel nainstaluje vaši aplikaci. To může být pro vývojáře i koncového uživatele velmi složité a proto se nedoporučuje. Další informace o této technice a jejích upozorněních najdete v technické poznámce 56 .

Nejjednodušším a nejbezpečnějším přístupem je zahrnout lokalizované prostředky MFC do samotné aplikace nebo knihovny DLL (nebo její satelitní dll, pokud ho používáte). Tím se zabrání problémům při správné instalaci knihovny MFC7xLOC.DLL. Uděláte to tak, že budete postupovat podle stejných pokynů pro statický případ uvedený výše (správně nastavíte příkazový řádek RC tak, aby odkazoval na lokalizované prostředky), s tím rozdílem, že musíte také odebrat /D_AFXDLL definici přidanou nástrojem AppWizard. Při /D_AFXDLL definování AFXRES. H (a ostatní soubory MFC RC) ve skutečnosti nedefinují žádné prostředky (protože se načte z knihoven DLL MFC).

Viz také

Technické poznámky podle čísel
Technické poznámky podle kategorií