Udostępnij za pośrednictwem


TN057: Lokalizacja składników MFC

[!UWAGA]

Następujące Uwaga techniczna została zaktualizowana, ponieważ najpierw została uwzględniona w dokumentacji online.W rezultacie niektóre procedur i tematów może być nieaktualne lub nieprawidłowe.Najnowsze informacje zaleca się wyszukać temat zainteresowanie Indeks dokumentacji online.

Uwaga ta opisuje niektórych wzorów i procedury, których można użyć do zlokalizowania składnika, jeśli ją kontrolować aplikacji lub OLE lub biblioteki DLL, która używa MFC.

Omówienie

Naprawdę są dwa problemy rozwiązać, kiedy lokalizowanie składnik, który używa MFC.Po pierwsze, trzeba przetłumaczyć własnymi zasobami — ciągów, okien dialogowych i innych zasobów, które są specyficzne dla składnika.Większość składników zbudowany przy użyciu MFC również obejmować i używać liczby zasobów, które są definiowane przez MFC.Należy podać również zlokalizowanych zasobów MFC.Na szczęście kilka języków są już udostępniane przez MFC sam.

Ponadto składnik powinna być przygotowana do działania w jego środowisku docelowym (Europejskie lub WYWOŁA funkcję ochrony środowiska).W większości zależy to aplikacja, traktując poprawnie znaków z ustawionym bitem wysoki i obsługi ciągów znaków dwubajtowych.MFC jest włączone, domyślnie dla obu tych środowiskach taki, że jest możliwe pojedynczego na całym świecie pliku binarnego, który jest używany na wszystkich platformach z zasobów tylko różnych podłączony w czasie instalacji.

Lokalizowanie zasobów składnika sieci

Lokalizowanie aplikacja lub biblioteka DLL powinna obejmować po prostu zastępowanie zasobów z zasobów, które odpowiadają języka docelowego.Dla zasobów, jest stosunkowo proste: edytowanie zasobów w edytorze zasobów i budowanie aplikacji.Jeżeli kodu jest napisane poprawnie, będzie nie ciągi lub tekst, który chcesz zlokalizować zakodowane w kodzie źródłowym C++ – wszystkich lokalizacji, możesz to zrobić po prostu zmieniając zasobów.W rzeczywistości można zaimplementować składnik takie że dostarczanie wszystkich zlokalizowanych wersji nawet obejmują kompilacji pierwotnego kodu.Jest bardziej złożony, ale jest również warto i jest mechanizmem wybrany dla MFC sam.Jest również możliwe do zlokalizowania aplikacji ładowanie pliku EXE lub DLL do edytora zasobów i bezpośrednio edytując zasobów.Podczas gdy to możliwe wymaga ponownego tych zmian po każdym utworzenie nowej wersji aplikacji.

Jednym ze sposobów uniknięcia, który jest wszystkich zasobów w osobne biblioteki DLL, czasami nazywane satelitarnej DLL.Ta biblioteka DLL następnie ładowane dynamicznie w czasie wykonywania i zasoby są ładowane z tej biblioteki DLL zamiast z głównym modułu z całego kodu.MFC bezpośrednio obsługuje tego podejścia.Należy wziąć pod uwagę aplikacji o nazwie MOJAAPLIKACJA.EXE; może mieć wszystkich zasobów znajdujących się w bibliotece DLL, o nazwie MYRES.DLL.Przy stosowaniu InitInstance on będzie wykonać następujące czynności, aby załadować bibliotekę DLL i powodować MFC załadować zasobów z tej lokalizacji:

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

Następnie MFC będzie ładować zasoby z tej biblioteki DLL zamiast z mojaapl.exe.Wszystkie zasoby, jednak musi być obecny w tej bibliotece DLL; MFC nie szukać wystąpienie aplikacji search danego zasobu.Technika ta ma zastosowanie, równie dobrze do regularnych biblioteki DLL, a także formanty OLE.Program instalacyjny może skopiować odpowiednią wersję MYRES.DLL, w zależności od ustawień regionalnych zasobów, które użytkownik chciałby.

Stosunkowo łatwo utworzyć zasób tylko biblioteki DLL.Tworzenie projektu biblioteki DLL, dodać użytkownika.RC plik do niego i dodać niezbędne zasoby.Jeśli masz istniejącego projektu, który nie korzysta z tej techniki, można skopiować zasoby z tego projektu.Po dodaniu pliku zasobów do projektu, są prawie gotowy do skonstruowania projektu.Trzeba się tylko ustawić opcje dołączania łączący /NOENTRY.Informuje program łączący że biblioteki DLL nie ma wpisu punktu – ponieważ go nie ma kodu, posiada nie punktu wejścia.

[!UWAGA]

Edytor zasobu w Visual C++ 4.0 i nowszej obsługuje wiele języków na.Plik RC.To może ułatwić bardzo łatwy w zarządzaniu użytkownika lokalizacji w jednym projekcie.Zasoby dla każdego języka są kontrolowane przez dyrektywy preprocesora, które są generowane przez Edytor zasobów.

Za pomocą dostarczonego MFC zlokalizowanych zasobów

Każda aplikacja MFC konstruowania ponownie wykorzystuje dwie rzeczy z MFC: kod i zasobów.Oznacza to, że MFC ma różne komunikaty o błędach, wbudowane w oknach dialogowych i innych zasobów, które są używane przez klas MFC.Aby całkowicie localize aplikacji, trzeba localize nie tylko zasoby aplikacji, ale również zasoby, które pochodzą bezpośrednio z MFC.MFC udostępnia szereg różnych języka plików zasobów automatycznie, tak, że jeśli język, są wyróżniane jest jednym z języków, które wspiera już MFC, wystarczy upewnij się, że używasz tych zasobów zlokalizowanych.

Pisania tego MFC obsługuje chiński, niemiecki, hiszpański, francuski, włoski, japoński i koreański.Pliki, które zawierają te zlokalizowane wersje są w MFC\INCLUDE\L.* ("L" oznacza dla zlokalizowana) katalogów.Niemiecki pliki znajdują się w MFC\INCLUDE\L.DEU, np.Spowodować aplikacji do korzystania z tych RC plików zamiast plików znajdujących się w MFC\INCLUDE, dodać /IC:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\VC7\MFC\INCLUDE\L.DEU do linii poleceń RC (jest to tylko przykład; trzeba zastąpić ustawienia regionalne, wybór, jak również katalog, w którym zainstalowany jest program Visual C++).

Powyższe instrukcje będą działać, jeśli aplikacja statycznie łączy się z MFC.Większość aplikacji łącze dynamicznie (ponieważ jest to domyślny AppWizard).W tym scenariuszu nie tylko kodu jest dynamicznie tak połączone — zasoby.W rezultacie zasoby można lokalizować w aplikacji, ale zasoby wdrażania MFC będzie nadal ładowany z MFC7x.DLL (lub nowszej wersji) lub MFC7xLOC.DLL, jeśli istnieje.Można to podejście, z dwoma różnymi kątami.

Bardziej złożone podejście jest statku jeden zlokalizowane MFC7xLOC.DLLs (na przykład MFC7xDEU dla języka niemieckiego, MFC7xESP.DLL, hiszpański, itp.) lub nowszym i zainstalować odpowiednią MFC7xLOC.DLL w katalogu system podczas instalowania aplikacji przez użytkownika.Może to być bardzo skomplikowane, zarówno dla autora i użytkownika końcowego i jako takie nie jest zalecane.Zobacz technicznej Uwaga 56 więcej informacji na temat tej techniki i jego ostrzeżenia.

Najprostszym i najbezpieczniejszy podejście jest zlokalizowanych zasobów MFC należy umieścić w aplikacji lub DLL sam (lub jego satelitarnej DLL), jeśli używasz.Pozwala to uniknąć problemów poprawnie instalacji MFC7xLOC.DLL.Aby to zrobić, postępuj zgodnie z instrukcjami w przypadku statycznej podane powyżej (ustawienie RC wiersza polecenia poprawnie, aby wskazywały zlokalizowanych zasobów), z wyjątkiem że należy również usunąć /D_AFXDLL zdefiniować, który został dodany przez AppWizard.Gdy /D_AFXDLL jest zdefiniowany, AFXRES.H (i inne pliki MFC RC) faktycznie definiuje wszystkie zasoby (ponieważ one będą być ściągane z biblioteki MFC dll zamiast).

Zobacz też

Inne zasoby

Uwagi techniczne przez liczbę

Uwagi techniczne według kategorii