Zasoby w aplikacjach .NET
Prawie każda aplikacja jakości produkcyjnej musi używać zasobów. Zasób to wszystkie dane nie wykonywalne, które są logicznie wdrażane za pomocą aplikacji. Zasób może być wyświetlany w aplikacji jako komunikaty o błędach lub w ramach interfejsu użytkownika. Zasoby mogą zawierać dane w wielu formularzach, w tym ciągi, obrazy i utrwalone obiekty. (Aby zapisywać utrwalone obiekty w pliku zasobów, obiekty muszą być serializowalne). Przechowywanie danych w pliku zasobów umożliwia zmianę danych bez ponownego komkompilowania całej aplikacji. Umożliwia również przechowywanie danych w jednej lokalizacji i eliminuje konieczność polegania na zakodowanych danych przechowywanych w wielu lokalizacjach.
Platforma .NET zapewnia kompleksową obsługę tworzenia i lokalizowania zasobów. Ponadto platforma .NET obsługuje prosty model tworzenia pakietów i wdrażania zlokalizowanych zasobów.
Tworzenie i lokalizowanie zasobów
W aplikacji nielokalizowanej można używać plików zasobów jako repozytorium dla danych aplikacji, szczególnie w przypadku ciągów, które w przeciwnym razie mogą być zakodowane w wielu lokalizacjach w kodzie źródłowym. Najczęściej zasoby są tworzone jako pliki tekstowe (.txt) lub XML (resx) i użyjesz Resgen.exe (generatora plików zasobów), aby skompilować je w binarnych plikach resources. Te pliki można następnie osadzać w pliku wykonywalnym aplikacji przez kompilator języka. Aby uzyskać więcej informacji na temat tworzenia zasobów, zobacz Tworzenie plików zasobów.
Możesz również lokalizować zasoby aplikacji dla określonych kultur. Dzięki temu można tworzyć zlokalizowane (przetłumaczone) wersje aplikacji. Podczas tworzenia aplikacji korzystającej z zlokalizowanych zasobów należy wyznaczyć kulturę, która służy jako neutralna lub rezerwowa kultura, której zasoby są używane, jeśli nie są dostępne żadne odpowiednie zasoby. Zazwyczaj zasoby kultury neutralnej są przechowywane w pliku wykonywalny aplikacji. Pozostałe zasoby dla poszczególnych zlokalizowanych kultur są przechowywane w autonomicznych zestawach satelitarnych. Aby uzyskać więcej informacji, zobacz Tworzenie zestawów satelitarnych.
Pakowanie i wdrażanie zasobów
Lokalne zasoby aplikacji są wdrażane w zestawach satelitarnych. Zestaw satelitarny zawiera zasoby jednej kultury; nie zawiera żadnego kodu aplikacji. W modelu wdrażania zestawu satelitarnego należy utworzyć aplikację z jednym zestawem domyślnym (zazwyczaj głównym zestawem) i jednym zestawem satelitarnym dla każdej kultury obsługiwanej przez aplikację. Ponieważ zestawy satelitarne nie są częścią głównego zestawu, można łatwo zastąpić lub zaktualizować zasoby odpowiadające określonej kulturze bez zastępowania głównego zestawu aplikacji.
Dokładnie określ, które zasoby będą składać się na domyślny zestaw zasobów aplikacji. Ponieważ jest to część głównego zestawu, wszelkie zmiany w nim będą wymagały zamiany głównego zestawu. Jeśli nie podasz zasobu domyślnego, zostanie zgłoszony wyjątek, gdy proces rezerwowego zasobu spróbuje go znaleźć. W dobrze zaprojektowanej aplikacji używanie zasobów nigdy nie powinno zgłaszać wyjątku.
Aby uzyskać więcej informacji, zobacz artykuł Tworzenie pakietów i wdrażanie zasobów .
Pobieranie zasobów
W czasie wykonywania aplikacja ładuje odpowiednie zlokalizowane zasoby na podstawie poszczególnych wątków na podstawie kultury określonej przez CultureInfo.CurrentUICulture właściwość. Ta wartość właściwości jest pochodna w następujący sposób:
Przez bezpośrednie przypisanie CultureInfo obiektu reprezentującego zlokalizowaną kulturę Thread.CurrentUICulture do właściwości.
Jeśli kultura nie jest jawnie przypisana, pobierając domyślną kulturę interfejsu użytkownika wątku CultureInfo.DefaultThreadCurrentUICulture z właściwości .
Jeśli domyślna kultura interfejsu użytkownika wątku nie jest jawnie przypisana, pobierając kulturę bieżącego użytkownika na komputerze lokalnym. Implementacje platformy .NET działające w systemie Windows wykonują tę czynność przez wywołanie funkcji systemu Windows
GetUserDefaultUILanguage
.
Aby uzyskać więcej informacji na temat ustawiania bieżącej kultury interfejsu użytkownika, zobacz CultureInfo strony referencyjne i CultureInfo.CurrentUICulture .
Następnie możesz pobrać zasoby dla bieżącej kultury interfejsu użytkownika lub dla określonej kultury przy użyciu System.Resources.ResourceManager klasy . ResourceManager Mimo że klasa jest najczęściej używana do pobierania zasobów, System.Resources przestrzeń nazw zawiera dodatkowe typy, których można użyć do pobierania zasobów. Są to:
Klasa ResourceReader , która umożliwia wyliczanie zasobów osadzonych w zestawie lub przechowywanych w autonomicznym binarnym pliku resources. Jest to przydatne, gdy nie znasz dokładnych nazw zasobów, które są dostępne w czasie wykonywania.
Klasa ResXResourceReader , która umożliwia pobieranie zasobów z pliku XML (resx).
Klasa ResourceSet , która umożliwia pobieranie zasobów określonej kultury bez obserwowania reguł rezerwowych. Zasoby mogą być przechowywane w zestawie lub autonomicznym binarnym pliku resources. Możesz również opracować implementację IResourceReader , która umożliwia używanie ResourceSet klasy do pobierania zasobów z innego źródła.
Klasa ResXResourceSet , która umożliwia pobranie wszystkich elementów w pliku zasobów XML do pamięci.