Sdílet prostřednictvím


TN057: Lokalizace komponent MFC

[!POZNÁMKA]

Následující technická poznámka nebyla aktualizována, protože byla poprvé zahrnuta v dokumentaci online.V důsledku toho některé postupy a témata mohou být nesprávné nebo zastaralé.Pro nejnovější informace je vhodné vyhledat téma zájmu v dokumentaci online index.

Tato poznámka popisuje některé z návrhů a postupů, které slouží k lokalizaci komponenty, pokud je aplikace nebo OLE ovládací prvek nebo knihovna DLL, která používá knihovnu MFC.

Přehled

Ve skutečnosti existují dva problémy při řešení lokalizace komponentu, která používá knihovnu MFC.Nejprve je nutné lokalizovat své vlastní prostředky, řetězce, dialogy a další prostředky, které jsou specifické pro komponenty.Většina komponent, které jsou sestaveny pomocí MFC také patří a počet prostředků, které jsou definovány pomocí knihovny MFC.Je nutné zadat také lokalizované prostředky MFC.Naštěstí několik jazyků jsou poskytovány již sama knihovna MFC.

Komponenty by měl navíc připravovat v jeho cílové prostředí (prostředí evropských nebo podporující sadu DBCS).Z velké části závisí na aplikaci správně léčit znaky s nastaveným bitem vysoké a manipulaci s řetězci s dvoubajtovými znaky.MFC je povolena ve výchozím nastavení, obou těchto prostředích takový, že je možné mít jeden po celém světě binární soubor, který se používá na všech platformách s právě různé zdroje, které jsou zapojeny v okamžiku instalace.

Lokalizace zdrojů této komponenty.

Lokalizace aplikace nebo knihovna DLL by měla zahrnovat prostředky jednoduše nahradit zdroje, které odpovídají cílový jazyk.Pro vlastní zdroje, to je poměrně jednoduchý: upravit zdroje v editoru prostředků a sestavení aplikace.Pokud váš kód je napsán správně, že bude existovat žádné řetězce nebo text, který chcete lokalizovat pevně do zdrojového kódu jazyka C++ – všechny lokalizace lze provést jednoduše úpravou zdrojů.Ve skutečnosti můžete implementovat komponenty tak, aby všechny lokalizované verze poskytuje i nezahrnuje sestavení původního kódu.To je složitější, ale dobře placených a mechanismus pro sama knihovna MFC.Je také možné lokalizovat aplikace při načítání souboru EXE nebo DLL do editoru prostředků a přímo úpravou zdrojů.Při možné vyžaduje vratku tyto změny při každém vytvoření nové verze aplikace.

Jedním způsobem, jak zabránit, je najít všechny prostředky v samostatných DLL, někdy nazývaný satelitní knihovny DLL.Této knihovny DLL potom dynamicky za běhu a zdroje jsou načteny z knihovny DLL namísto z modulu hlavní ve vlastním kódu.MFC podporuje přímo tento přístup.Zvažte aplikaci s názvem MYAPP.EXE; by mohla mít všechny jeho prostředky umístěné v knihovně DLL nazývá MYRES.DLL.V aplikačním InitInstance by provedl následující načtení této knihovny DLL a způsobit, že knihovna MFC načíst 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 načte knihovny MFC z knihovny DLL namísto z myapp.exe prostředky.Všechny prostředky, však musí být součástí této knihovny DLL; MFC nebude hledat instance aplikace při hledání daného prostředku.Tento postup platí stejně vhodné pro pravidelné knihovny DLL a také ovládací prvky OLE.Instalační program by zkopírujte správnou verzi MYRES.DLL v závislosti na národní prostředí, které zdroje chcete uživatele.

Je poměrně snadné vytvoření prostředku pouze knihovny DLL.Vytvořte projekt knihovny DLL, přidejte vaše.RC souboru jej a přidejte potřebné prostředky.Pokud máte existující projekt, který nepoužívá tuto techniku, můžete kopírovat prostředky z projektu.Po přidání souboru do projektu, jsou téměř připraven k sestavení projektu.Jediné, je nutné je nastavit možnosti, které zahrnují propojovací program /NOENTRY.To říká propojovacímu programu, že knihovna DLL má žádné vstupní bod – vzhledem k tomu, že žádný kód nemá, nemá žádné vstupní bod.

[!POZNÁMKA]

Editor prostředků Visual C++ 4.0 a novější podporuje více jazyků za.RC souboru.To lze provést velmi snadno spravovat vaše lokalizace v jednom projektu.Prostředky pro jednotlivé jazyky jsou řízeny direktivy preprocesoru, které jsou generovány pomocí editoru prostředků.

Pomocí poskytnutého MFC místní zdroje

Všechny aplikace knihovny MFC, který jste vytvořili opakovaně používá dvě věci z knihovny MFC: kód a zdroje.To znamená, že knihovna MFC má různé chybové zprávy, vestavěných dialogy a další prostředky, které používá třídy knihovny MFC.Chcete-li zcela lokalizovat vaši aplikaci, musíte lokalizovat pouze prostředky aplikace, ale také prostředky, které pocházejí přímo z knihovny MFC.Knihovna MFC poskytuje řadu různých jazykových souborů prostředků automaticky, takže Pokud volíte požadovaný jazyk jedním z jazyků, které již podporuje knihovny MFC, je třeba pouze ujistěte se, že použití těchto lokalizovaných prostředků.

Době psaní tohoto textu MFC podporuje čínské, německé, španělské, francouzské, italské, japonština a korejština.Soubory, které obsahují tyto lokalizované verze jsou MFC\INCLUDE\L.* ("L" je zkratka pro lokalizované) adresáře.Německé soubory jsou v MFC\INCLUDE\L.DEU, např.Způsobit aplikace pomocí RC soubory místo souborů umístěných v MFC\INCLUDE, přidat /IC:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\VC7\MFC\INCLUDE\L.DEU vaše RC příkazový řádek (jedná se pouze o příklad; je třeba nahradit místní volby, stejně jako adresář, do kterého jste nainstalovali aplikaci Visual C++).

Výše uvedené pokyny budou fungovat, pokud vaše aplikace staticky propojena s knihovnou MFC.Většina aplikací propojení dynamicky (protože se jedná o AppWizard výchozí).V tomto scénáři je nejen kód dynamicky propojeny – to jsou prostředky.V důsledku toho je možné lokalizovat vaše prostředky v aplikaci, ale prostředky implementace MFC bude stále načten z MFC7x.DLL (nebo novější) nebo MFC7xLOC.DLL Pokud existuje.To lze dosáhnout ze dvou různých úhlů.

Složitější přístup má loď jeden lokalizované MFC7xLOC.DLLs (například MFC7xDEU pro němčinu, MFC7xESP.DLL pro španělštinu, atd.) nebo novější verzi a nainstalovat odpovídající MFC7xLOC.DLL do adresáře systému, pokud uživatel nainstaluje aplikace.To může být velmi složité pro vývojáře a koncové uživatele a jako takové se nedoporučuje.Viz Technická poznámka: 56 Další informace o této technice a jeho upozornění.

Nejjednodušší a nejbezpečnější přístup je zahrnout místní zdroje knihovny MFC do aplikace nebo knihovna DLL sama (nebo jeho satelitní knihovny DLL, pokud ji používáte).Tím je zabráněno problémům instalace správně MFC7xLOC.DLL.V takovém případě použijte stejné pokyny jako pro statický případ výše uvedených (nastavení RC příkazového řádku správně přejděte na místní zdroje), s výjimkou, že je nutné odebrat také /D_AFXDLL definovat, která byla přidána pomocí AppWizard.Při /D_AFXDLL je definována, AFXRES.H (a jiné soubory knihovny MFC RC) nedefinují skutečně žádné prostředky (vzhledem k tomu, že se zdvihne z knihovny MFC DLL místo).

Viz také

Další zdroje

Technické poznámky podle čísel

Technické poznámky podle kategorií