Sdílet prostřednictvím


Balení a nasazení prostředků

Rozhraní .NET Framework používá model střed a paprsek pro zabalení a nasazení prostředků. Střed je hlavní sestavení, které obsahuje nelokalizovatelný, spustitelný kód a prostředky pro jedinou jazykovou verzi nazvanou neutrální nebo výchozí jazyková verze. Výchozí jazyková verze je pro aplikaci nouzová jazyková verze. Každý paprsek se připojuje k satelitnímu sestavení, které obsahuje prostředky pro jednu jazykovou verzi, ale neobsahuje žádný kód.

Tento model má několik výhod:

  • Můžete inkrementálně přidat prostředky pro novou jazykovou verzi poté, co jste nasadili aplikaci. Protože další vývoj prostředků specifických pro jazykovou verzi může vyžadovat značné množství času, tohle vám umožňuje nejprve uvolnit hlavní aplikaci a prostředky specifické pro jazykovou verzi dodat později.

  • Můžete aktualizovat a měnit satelitní sestavení aplikace bez nutnosti znovu aplikaci kompilovat.

  • Aplikace potřebuje načíst pouze ta satelitní sestavení, která obsahují prostředky potřebné pro určitou jazykovou verzi. To může výrazně snížit použití systémových prostředků.

Nicméně existují také nevýhody tohoto modelu:

  • Je potřeba spravovat více sad prostředků.

  • Počáteční náklady testování aplikace rostou, protože musíte testovat několik konfigurací. Všimněte si, že dlouhodobě bude jednodušší a levnější otestovat jednu základní aplikaci s několika satelity, než testovat a udržovat několik paralelních mezinárodních verzí.

Zásady vytváření názvů prostředků

Když zabalíte prostředky aplikace, musíte je pojmenovat pomocí zásad vytváření názvů prostředků, které modul CLR (Common Language Runtime) očekává. Modul runtime identifikuje prostředky pomocí jejich názvu nebo podpisu jazykové verze. Každé jazykové verzi je dán jedinečný název, který je kombinací dvoupísmenného názvu jazykové verze napsaného malými písmeny, který je asociován s jazykem a v případě potřeby dvoupísmenného názvu jazykové podverze (subkultury) napsaného velkými písmeny. Ten je asociován se zemí nebo oblastí. Název subkultury následuje název jazykové verze, oddělený pomlčkou (-). Například ja-JP pro japonské písmo v Japonsku, en-US pro americkou angličtinu nebo de-DE pro němčinu v Německu (jako protiklad alternativy, například de-AT pro němčinu v Rakousku). Úplný seznam názvů jazykových verzí naleznete v tématu CultureInfo class.

Nouzový proces prostředku

Model střed a paprsek balení a zavádění prostředků používá k vyhledání vhodných prostředků nouzový proces. Pokud uživatel aplikace požaduje ResourceSet, který není k dispozici, prohledá modul CLR (Common Language Runtime) hierarchii jazykových verzí, aby našel nouzový prostředek, který nejvíce odpovídá žádosti uživatele a vyvolá výjimku pouze jako poslední možnost. Pokud je na každé úrovni hierarchie nalezen odpovídající prostředek, modulu runtime jej použije. Pokud prostředek není nalezen, vyhledávání pokračuje na další úrovni.

Chcete-li zlepšit výkon vyhledávání, použije atribut NeutralResourcesLanguageAttribute na vaše hlavní sestavení a předejte mu název neutrálního jazyka, který bude spolupracovat s vaším hlavním sestavením.

Nouzový proces prostředku je popsán v následujících krocích:

  1. Modul runtime nejprve zkontroluje globální mezipaměť sestavení (GAC), zda najde sestavení odpovídající požadované jazykové verzi pro vaši aplikaci.

    Globální mezipaměť sestavení (GAC) může uložit sestavení prostředků, která jsou sdílena mnoha aplikacemi. Tohle vás zprošťuje nutnosti zahrnout určité sady prostředků v adresářové struktuře každé aplikace, kterou vytvoříte. Pokud modul runtime najde odkaz na sestavení, prohledá sestavení, aby našel požadovaný prostředek. Pokud v sestavení najde položku, používá požadovaný prostředek. Pokud položku nenajde, pokračuje ve hledání.

  2. Modul runtime dále zkontroluje adresář aktuálně vykonávajícího sestavení, zda najde adresář odpovídající požadované jazykové verzi. Pokud adresář najde, prohledá ho a snaží se najít platné satelitní sestavení pro požadovanou jazykovou verzi. Modul runtime pak prohledá satelitní sestavení pro požadovaný prostředek. Pokud nalezne prostředek v sestavení, použije jej. Pokud prostředek nenajde, pokračuje ve hledání.

  3. Modul runtime dále prohledá globální mezipaměť sestavení (GAC) znovu, tentokrát hledá nadřazené sestavení požadovaného prostředku. Pokud nadřazené sestavení v globální mezipaměti sestavení (GAC) existuje, modul runtime prohledá sestavení. Hledá požadovaný prostředek.

    Rodič (nadřazené sestavení) je definován jako vhodná nouzová jazyková verze. Považujte rodiče za nejlépe vhodné kandidáty; poskytování některého prostředku je vhodnější k vyvolání výjimky. Tento proces vám také umožňuje znovu použít prostředky. Určitý prostředek na nadřazené úrovni musíte zahrnout pouze v případě, pokud podřízená jazyková verze nepotřebuje lokalizovat požadovaný prostředek. Například, pokud dodáte satelitní sestavení pro en (neutrální angličtina), en-GB (angličtina, jakou se hovoří ve Spojeném království) a en-US (angličtina, jakou se hovoří v USA), tak satelit "en" by obsahoval společnou terminologii, en-GB a en-US by mohly poskytovat přepsání pouze pro ty pojmy, které se liší.

  4. Modul runtime dále zkontroluje adresář aktuálně vykonávajícího sestavení, aby zjistil, zda obsahuje nadřazený adresář. Pokud nadřazený adresář existuje, modul runtime prohledá adresář a snaží se najít platné satelitní sestavení pro nadřazenou jazykovou verzi. Pokud sestavení najde, tak modul runtime sestavení prohledá a snaží se najít požadovaný prostředek. Pokud prostředek najde, použije jej. Pokud prostředek nenajde, pokračuje ve hledání.

  5. Modul runtime dále prohledá nadřazené sestavení, jako v předchozím kroku, skrz mnoho možných úrovní. Každá jazyková verze má pouze jednu nadřazenou položku, ale nadřazená položka může mít vlastního nadřazenou položku.

  6. Pokud původně zadaná jazyková verze a všechny nadřazené položky byly prohledány a prostředek stále nebyl nalezen, tak je použit prostředek pro výchozí (nouzovou) jazykovou verzi. Počínaje verzí 2.0 rozhraní .NET Framework můžete specifikovat, aby konečné nouzové umístění pro prostředek bylo satelitní sestavení, nikoli hlavní sestavení. Pomocí NeutralResourcesLanguageAttribute u výčtu UltimateResourceFallbackLocation můžete řídit, zda konečné nouzové umístění prostředku je v hlavním sestavení nebo v sestavení satelitním.

    PoznámkaPoznámka

    Výchozí prostředek je pouze prostředek, který je kompilován s hlavním sestavením.Pokud neurčíte satelitní sestavení pomocí NeutralResourcesLanguageAttribute, tak je konečným nouzovým (konečný nadřazený prvek). Proto důrazně doporučujeme, abyste vždy zahrnuli výchozí sadu prostředků ve vašem hlavním sestavení.To pomáhá zajistit, že výjimky nejsou vyvolány.Zahrnutím výchozího souboru prostředků, který poskytuje záchranu pro všechny prostředky a zajišťuje, že nejméně jeden prostředek je vždy přítomný pro uživatele, přestože není jazykově specifický.

  7. Nakonec pokud modul runtime nenajde prostředek pro výchozí (nouzovou) jazykovou verzi, tak je vyvolána výjimka označující, že prostředek nemůže být nalezen.

Jako příklad toho, jak se provádí vyhledávání požadovaného prostředku, předpokládejme, že uživatel žádá o prostředek, který je lokalizovaný pro mexickou španělštinu. V souladu s konvencemi pro vytváření názvů prostředku popsanými výše, modul runtime nejprve prohledá globální mezipaměť sestavení (GAC), snaží se najít sestavení odpovídající požadované jazykové verzi "es-MX". Nic nenajde, modul runtime pak prohledá adresář aktuálně vykonávajícího sestavení, hledá adresář „es-MX". To selže, modul runtime znovu prohledá globální mezipaměť sestavení (GAC), hledá nadřazené sestavení odrážející vhodnou, nouzovou jazykovou verzi – v tomto případě "es" (španělština). Pokud nadřazené sestavení není nalezeno, modul runtime prohledá všechny potenciální úrovně nadřazeného sestavení, hledá jazykovou verzi "es-MX", dokud není nalezen odpovídající prostředek. Pokud prostředek není nalezen, modul runtime použije prostředek pro výchozí jazykovou verzi.

Konečná záloha pro satelitní sestavení

Počínaje verzí 2.0 rozhraní .NET Framework můžete volitelně odebrat prostředky z hlavního sestavení a určit, aby konečné záložní prostředky byly nalezeny v satelitním sestavení odpovídajícím specifické jazykové verzi. Chcete-li řídit záložní proces, můžete použít NeutralResourcesLanguageAttribute. Do třídy NeutralResourcesLanguageAttribute byl přidán nový konstruktor, který přebírá další parametr UltimateResourceFallbackLocation pro určení umístění, kde by měl program ResourceManager extrahovat náhradní záložní prostředky pro hlavní nebo satelitní sestavení.

Následující příklad ukazuje, jak aplikovat atribut na úrovni třídy:

[assembly: NeutralResourcesLanguageAttribute("de" , UltimateResourceFallbackLocation.Satellite)]

Pro konečné umístění zálohy tento pokyn nařídí ResourceManager hledat prostředky v podadresáři "de" v adresáři aktuálně vykonávajícího sestavení.

Kvůli časovým nebo rozpočtovým omezením, nemusí být pro vás proveditelné vytvořit sadu prostředků pro každou subkulturu, kterou vaše aplikace podporuje. V takovém případě můžete vytvořit jedno satelitní sestavení pro nadřazenou jazykovou verzi, které může být použito všemi souvisejícími subkulturami. Například můžete poskytnout jedno anglické satelitní sestavení (en), které by bylo získáno uživatelem požadujícím anglický prostředek specifický pro oblast a jedno německé satelitní sestavení (de) pro uživatele požadující německé prostředky specifické pro oblast. Například požadavky pro němčinu v Německu (de-DE), němčinu v Rakousku (de-AT) a němčinu ve Švýcarsku (de-CH) by přešly k německému satelitnímu sestavení (de). Pečlivě vyberte výchozí prostředky pro kompilaci s hlavním sestavením. Výchozí prostředky jsou konečnou zálohou a proto by to měly být prostředky, které budou vyžadovány většinou uživatelů vaší aplikace. Přestože toto řešení nasazuje prostředky, které jsou méně jazykově specifické, může významně snížit náklady na lokalizaci vaší aplikace.

Viz také

Koncepty

Prostředky v aplikacích

Globální mezipaměť sestavení (GAC).

Vytváření satelitních sestavení