Vytváření satelitních sestavení pro aplikace .NET

Soubory prostředků hrají ústřední roli v lokalizovaných aplikacích. Umožňují aplikaci zobrazit řetězce, obrázky a další data v jazyce a jazykové verzi uživatele a poskytnout alternativní data, pokud prostředky pro jazyk nebo jazykovou verzi uživatele nejsou k dispozici. .NET používá hvězdicový model k vyhledání a načtení lokalizovaných prostředků. Centrum je hlavní sestavení, které obsahuje nelokalizovatelný spustitelný kód a prostředky pro jednu jazykovou verzi, která se nazývá neutrální nebo výchozí jazyková verze. Výchozí jazyková verze je záložní jazyková verze aplikace; používá se, když nejsou k dispozici žádné lokalizované prostředky. Pomocí atributu NeutralResourcesLanguageAttribute určíte jazykovou verzi výchozí jazykové verze aplikace. Každý paprsk se připojuje k satelitnímu sestavení, které obsahuje prostředky pro jednu lokalizovanou jazykovou verzi, ale neobsahuje žádný kód. Vzhledem k tomu, že satelitní sestavení nejsou součástí hlavního sestavení, můžete snadno aktualizovat nebo nahradit prostředky, které odpovídají určité jazykové verzi, aniž byste nahradili hlavní sestavení aplikace.

Poznámka:

Prostředky výchozí jazykové verze aplikace lze také uložit do satelitního sestavení. Uděláte to tak, že atribut přiřadíte NeutralResourcesLanguageAttribute hodnotu UltimateResourceFallbackLocation.Satellite.

Název a umístění satelitního sestavení

Hvězdicový model vyžaduje, abyste prostředky umístili do konkrétních umístění, aby se mohly snadno nacházet a používat. Pokud prostředky zkompilujete a pojmenujete podle očekávání nebo pokud je neumisťujete do správných umístění, modul runtime common language je nebude moct najít a místo toho bude používat prostředky výchozí jazykové verze. Správce prostředků .NET je reprezentován typem ResourceManager a používá se k automatickému přístupu k lokalizovaným prostředkům. Správce prostředků vyžaduje následující:

  • Jedno satelitní sestavení musí obsahovat všechny prostředky pro určitou jazykovou verzi. Jinými slovy, měli byste zkompilovat více souborů .txt nebo .resx do jednoho binárního souboru .resources .

  • V adresáři aplikace musí existovat samostatný podadresář pro každou lokalizovanou jazykovou verzi, která ukládá prostředky dané jazykové verze. Název podadresáře musí být stejný jako název jazykové verze. Můžete také ukládat satelitní sestavení do globální mezipaměti sestavení. V tomto případě musí komponenta informací o jazykové verzi silného názvu sestavení indikovat její jazykovou verzi. Další informace naleznete v tématu Instalace satelitních sestavení v globální mezipaměti sestavení (Global Assembly Cache).

    Poznámka:

    Pokud vaše aplikace obsahuje prostředky pro subcultures, umístěte každou podadresář do samostatného podadresáře pod adresář aplikace. Pod adresářem hlavní jazykové verze neumisťujte podadresáře podadresáře.

  • Satelitní sestavení musí mít stejný název jako aplikace a musí používat příponu názvu souboru ".resources.dll". Pokud je například aplikace pojmenována Example.exe, měl by být název každého satelitního sestavení Example.resources.dll. Název satelitního sestavení neznačí jazykovou verzi souborů prostředků. Satelitní sestavení se však zobrazí v adresáři, který určuje jazykovou verzi.

  • Informace o jazykové verzi satelitního sestavení musí být zahrnuty v metadatech sestavení. Chcete-li název jazykové verze uložit do metadat satelitního sestavení, zadáte /culture možnost při použití Assembly Linker pro vložení prostředků do satelitního sestavení.

Následující obrázek ukazuje ukázkovou adresářovou strukturu a požadavky na umístění pro aplikace, které neinstalujete v globální mezipaměti sestavení. Položky s rozšířeními .txt a .resources se nedoručí s konečnou aplikací. Jedná se o zprostředkující soubory prostředků, které slouží k vytvoření konečných sestavení satelitních prostředků. V tomto příkladu můžete nahradit soubory .resx pro .txt soubory. Další informace najdete v tématu Balení a nasazení prostředků.

Následující obrázek znázorňuje adresář satelitního sestavení:

Adresář satelitního sestavení s lokalizovanými podadresáři jazykových verzí.

Kompilace satelitních sestavení

Generátor souborů prostředků (resgen.exe) slouží ke kompilaci textových souborů nebo souborů XML (.resx), které obsahují prostředky do binárních souborů .resources. Potom použijete Assembly Linker (al.exe) ke kompilaci souborů .resources do satelitních sestavení. al.exe vytvoří sestavení ze zadaných souborů .resources. Satelitní sestavení mohou obsahovat pouze prostředky; nemohou obsahovat žádný spustitelný kód.

Následující příkaz al.exe vytvoří satelitní sestavení pro aplikaci Example z německého souboru resources strings.de.resources.

al -target:lib -embed:strings.de.resources -culture:de -out:Example.resources.dll

Následující příkaz al.exe také vytvoří satelitní sestavení pro aplikaci Example ze souboru strings.de.resources. Možnost /template způsobí, že satelitní sestavení dědí všechna metadata sestavení s výjimkou informací o jazykové verzi z nadřazeného sestavení (Example.dll).

al -target:lib -embed:strings.de.resources -culture:de -out:Example.resources.dll -template:Example.dll

Následující tabulka popisuje al.exe možnosti použité v těchto příkazech podrobněji:

Možnost Popis
-target:lib Určuje, že satelitní sestavení je kompilováno do souboru knihovny (.dll). Vzhledem k tomu, že satelitní sestavení neobsahuje spustitelný kód a není hlavním sestavením aplikace, je nutné uložit satelitní sestavení jako knihovny DLL.
-embed:strings.de.resources Určuje název souboru prostředků, který se má vložit při al.exe kompiluje sestavení. Do satelitního sestavení můžete vložit několik souborů .resources, ale pokud sledujete model hvězdicové architektury, musíte pro každou jazykovou verzi zkompilovat jedno satelitní sestavení. Pro řetězce a objekty však můžete vytvořit samostatné soubory .resources.
-culture:de Určuje jazykovou verzi prostředku, která se má zkompilovat. Modul CLR (Common Language Runtime) používá tyto informace při hledání prostředků pro zadanou jazykovou verzi. Pokud tuto možnost vynecháte, al.exe prostředek zkompiluje, ale modul runtime ho nebude moct najít, když ho uživatel požádá.
-out:Example.resources.dll Určuje název výstupního souboru. Název musí následovat po pojmenování standard baseName.resources.extension, where baseName je název hlavního sestavení a přípona je platná přípona názvu souboru (například .dll). Modul runtime nemůže určit jazykovou verzi satelitního sestavení na základě názvu výstupního souboru; K jeho zadání je nutné použít možnost /culture .
-template:Example.dll Určuje sestavení, ze kterého bude satelitní sestavení dědit všechna metadata sestavení s výjimkou pole jazykové verze. Tato možnost má vliv na satelitní sestavení pouze v případě, že zadáte sestavení se silným názvem.

Úplný seznam možností dostupných pro al.exe najdete v tématu Linker sestavení (al.exe).

Poznámka:

Může docházet k tomu, že budete chtít k kompilaci satelitních sestavení použít úlohu .NET Core MSBuild, i když cílíte na rozhraní .NET Framework. Můžete například použít deterministickou možnost kompilátoru jazyka C#, abyste mohli porovnávat sestavení z různých sestavení. V tomto případě nastavte GenerateSatelliteAssembliesForCore do true souboru .csproj pro generování satelitních sestavení pomocí csc.exe místo Al.exe (Linker sestavení).

<Project>
    <PropertyGroup>
        <GenerateSatelliteAssembliesForCore>true</GenerateSatelliteAssembliesForCore>
    </PropertyGroup>
</Project>

Úloha .NET Core MSBuild používá csc.exe místo al.exe ke generování satelitních sestavení ve výchozím nastavení. Další informace naleznete v tématu Usnadnění přihlášení k generování satelitního sestavení Core.

Příklad satelitních sestavení

Následuje jednoduchý příklad "Hello world", který zobrazí pole se zprávou obsahující lokalizovaný pozdrav. Příklad obsahuje zdroje pro jazykové verze angličtiny (USA), francouzštiny (Francie) a ruštiny (Rusko) a její záložní jazykovou verzi je angličtina. Pokud chcete vytvořit příklad, postupujte takto:

  1. Vytvořte soubor prostředku s názvem Greeting.resx nebo Greeting.txt , který bude obsahovat prostředek pro výchozí jazykovou verzi. Do tohoto souboru uložte jeden řetězec s názvem HelloString "Hello world!".

  2. Chcete-li označit, že angličtina (en) je výchozí jazyková verze aplikace, přidejte následující System.Resources.NeutralResourcesLanguageAttribute atribut do souboru AssemblyInfo aplikace nebo do hlavního souboru zdrojového kódu, který bude zkompilován do hlavního sestavení aplikace.

    [assembly: NeutralResourcesLanguage("en")]
    
    <Assembly: NeutralResourcesLanguage("en")>
    
  3. Do aplikace přidejte podporu dalších jazykových verzí (en-USaru-RUfr-FR) následujícím způsobem:

    • Pro podporu en-US jazykové verze (USA) vytvořte soubor prostředků s názvem Greeting.en-US.resx nebo Greeting.en-US.txt a uložte ho do jednoho řetězce s názvem HelloString "Hi world!".

    • Pokud chcete podporovat fr-FR jazykovou verzi francouzštiny (Francie), vytvořte soubor prostředků s názvem Greeting.fr-FR.resx nebo Greeting.fr-FR.txt a uložte ho do jednoho řetězce s názvem HelloString "Salut tout le monde!".

    • Pokud chcete podporovat ru-RU jazykovou verzi ruštiny (Rusko), vytvořte soubor prostředků s názvem Greeting.ru-RU.resx nebo Greeting.ru-RU.txt a uložte ho do jednoho řetězce s názvem HelloString "Всем привет!".

  4. Pomocí resgen.exe zkompilujte každý text nebo soubor prostředků XML do binárního souboru .resources . Výstup je sada souborů, které mají stejný název kořenového souboru jako soubory .resx nebo .txt , ale příponu .resources . Pokud vytvoříte příklad pomocí sady Visual Studio, proces kompilace se zpracuje automaticky. Pokud visual Studio nepoužíváte, spuštěním následujících příkazů zkompilujte soubory .resx do souborů .resources :

    resgen Greeting.resx
    resgen Greeting.en-us.resx
    resgen Greeting.fr-FR.resx
    resgen Greeting.ru-RU.resx
    

    Pokud jsou vaše prostředky v textových souborech místo souborů XML, nahraďte příponu .resx .txt.

  5. Zkompilujte následující zdrojový kód spolu s prostředky pro výchozí jazykovou verzi do hlavního sestavení aplikace:

    Důležité

    Pokud k vytvoření příkladu používáte příkazový řádek místo sady Visual Studio, měli byste změnit volání konstruktoru ResourceManager třídy na následující: ResourceManager rm = new ResourceManager("Greeting", typeof(Example).Assembly);

    using System;
    using System.Globalization;
    using System.Reflection;
    using System.Resources;
    using System.Threading;
    using System.Windows.Forms;
    
    class Example
    {
       static void Main()
       {
          // Create array of supported cultures
          string[] cultures = {"en-CA", "en-US", "fr-FR", "ru-RU"};
          Random rnd = new Random();
          int cultureNdx = rnd.Next(0, cultures.Length);
          CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture;
    
          try {
             CultureInfo newCulture = new CultureInfo(cultures[cultureNdx]);
             Thread.CurrentThread.CurrentCulture = newCulture;
             Thread.CurrentThread.CurrentUICulture = newCulture;
             ResourceManager rm = new ResourceManager("Example.Greeting",
                                                      typeof(Example).Assembly);
             string greeting = String.Format("The current culture is {0}.\n{1}",
                                             Thread.CurrentThread.CurrentUICulture.Name,
                                             rm.GetString("HelloString"));
    
             MessageBox.Show(greeting);
          }
          catch (CultureNotFoundException e) {
             Console.WriteLine("Unable to instantiate culture {0}", e.InvalidCultureName);
          }
          finally {
             Thread.CurrentThread.CurrentCulture = originalCulture;
             Thread.CurrentThread.CurrentUICulture = originalCulture;
          }
       }
    }
    
    Imports System.Globalization
    Imports System.Resources
    Imports System.Threading
    
    Module Module1
    
        Sub Main()
            ' Create array of supported cultures
            Dim cultures() As String = {"en-CA", "en-US", "fr-FR", "ru-RU"}
            Dim rnd As New Random()
            Dim cultureNdx As Integer = rnd.Next(0, cultures.Length)
            Dim originalCulture As CultureInfo = Thread.CurrentThread.CurrentCulture
    
            Try
                Dim newCulture As New CultureInfo(cultures(cultureNdx))
                Thread.CurrentThread.CurrentCulture = newCulture
                Thread.CurrentThread.CurrentUICulture = newCulture
                Dim greeting As String = String.Format("The current culture is {0}.{1}{2}",
                                                       Thread.CurrentThread.CurrentUICulture.Name,
                                                       vbCrLf, My.Resources.Greetings.HelloString)
    
                MsgBox(greeting)
            Catch e As CultureNotFoundException
                Console.WriteLine("Unable to instantiate culture {0}", e.InvalidCultureName)
            Finally
                Thread.CurrentThread.CurrentCulture = originalCulture
                Thread.CurrentThread.CurrentUICulture = originalCulture
            End Try
        End Sub
    End Module
    

    Pokud se aplikace jmenuje Příklad a kompilujete z příkazového řádku, je příkaz kompilátoru jazyka C#:

    csc Example.cs -res:Greeting.resources
    

    Odpovídající příkaz kompilátoru jazyka Visual Basic je:

    vbc Example.vb -res:Greeting.resources
    
  6. Vytvořte podadresář v hlavním adresáři aplikace pro každou lokalizovanou jazykovou verzi podporovanou aplikací. Měli byste vytvořit podadresář en-US, fr-FR a ru-RU . Visual Studio vytvoří tyto podadresáře automaticky jako součást procesu kompilace.

  7. Vložte soubory .resources specifické pro jednotlivé jazykové verze do satelitních sestavení a uložte je do příslušného adresáře. Příkaz, který to provede pro každý soubor .resources , je:

    al -target:lib -embed:Greeting.culture.resources -culture:culture -out:culture\Example.resources.dll
    

    kde jazyková verze je název jazykové verze, jejíž prostředky satelitní sestavení obsahuje. Visual Studio tento proces zpracovává automaticky.

Pak můžete spustit příklad. Náhodně vytvoří jednu z podporovaných jazykových verzí aktuální jazykovou verzi a zobrazí lokalizovaný pozdrav.

Instalace satelitních sestavení do globální mezipaměti sestavení

Místo instalace sestavení v podadresáři místní aplikace je můžete nainstalovat do globální mezipaměti sestavení. To je zvlášť užitečné, pokud máte knihovny tříd a sestavení prostředků knihovny tříd, které používají více aplikací.

Instalace sestavení v globální mezipaměti sestavení vyžaduje, aby měly silné názvy. Sestavení se silným názvem jsou podepsána platnou dvojicí veřejného a privátního klíče. Obsahují informace o verzi, které modul runtime používá k určení sestavení, které se má použít k splnění požadavku vazby. Další informace o silných názvech asch Další informace o silných názvech naleznete v tématu Sestavení se silným názvem.

Když vyvíjíte aplikaci, je nepravděpodobné, že budete mít přístup k poslednímu páru veřejného a privátního klíče. Pokud chcete nainstalovat satelitní sestavení do globální mezipaměti sestavení a zajistit, že funguje podle očekávání, můžete použít techniku označovanou jako zpožděné podepisování. Když zpozdíte podepsání sestavení, v době sestavení si rezervujete místo v souboru pro podpis silného názvu. Skutečné podepisování se zpozdí až později, až bude k dispozici poslední pár veřejného a privátního klíče. Další informace o zpožděném podepisování naleznete v tématu Zpoždění podepisování sestavení.

Získání veřejného klíče

Pokud chcete podepsat sestavení, musíte mít přístup k veřejnému klíči. Můžete buď získat skutečný veřejný klíč od organizace ve vaší společnosti, která provede případné podepisování, nebo vytvořit veřejný klíč pomocí nástroje Silné jméno (sn.exe).

Následující příkaz Sn.exe vytvoří dvojici testovacího veřejného a privátního klíče. Možnost –k určuje, že Sn.exe by měl vytvořit novou dvojici klíčů a uložit ji do souboru s názvem TestKeyPair.snk.

sn –k TestKeyPair.snk

Veřejný klíč můžete extrahovat ze souboru, který obsahuje dvojici testovacího klíče. Následující příkaz extrahuje veřejný klíč z TestKeyPair.snk a uloží ho do PublicKey.snk:

sn –p TestKeyPair.snk PublicKey.snk

Zpoždění podepsání sestavení

Po získání nebo vytvoření veřejného klíče použijete Linker sestavení (al.exe) ke kompilaci sestavení a určení zpožděného podepisování.

Následující příkaz al.exe vytvoří ze souboru stringLibrary aplikace ze souboru strings.ja.resources sestavení se silným názvem:

al -target:lib -embed:strings.ja.resources -culture:ja -out:StringLibrary.resources.dll -delay+ -keyfile:PublicKey.snk

Možnost -delay+ určuje, že linker sestavení by měl zpozdit podepsání sestavení. Možnost -keyfile určuje název souboru klíče, který obsahuje veřejný klíč, který se má použít ke zpoždění podepsání sestavení.

Opětovné podepsání sestavení

Než nasadíte aplikaci, musíte znovu podepsat satelitní sestavení se zpožděním podepsaným satelitním sestavením pomocí páru skutečných klíčů. Můžete to provést pomocí Sn.exe.

Následující příkaz Sn.exe podepíše StringLibrary.resources.dll párem klíčů uloženým v souboru RealKeyPair.snk. Možnost –R určuje, že dříve podepsané nebo pozdržované sestavení se má znovu podepsat.

sn –R StringLibrary.resources.dll RealKeyPair.snk

Instalace satelitního sestavení do globální mezipaměti sestavení

Když modul runtime hledá prostředky v záložním procesu prostředku, nejprve se podívá do globální mezipaměti sestavení. (Další informace najdete v části "Záložní proces prostředku" v části Zabalte a nasaďte prostředky.) Jakmile je satelitní sestavení podepsáno silným názvem, lze jej nainstalovat do globální mezipaměti sestavení pomocí nástroje Globální mezipaměť sestavení (gacutil.exe).

Následující příkaz Gacutil.exe nainstaluje StringLibrary.resources.dll* do globální mezipaměti sestavení:

gacutil -i:StringLibrary.resources.dll

Možnost /i určuje, že Gacutil.exe by měl nainstalovat zadané sestavení do globální mezipaměti sestavení. Po instalaci satelitního sestavení v mezipaměti budou prostředky, které obsahuje, k dispozici pro všechny aplikace, které jsou navrženy tak, aby používaly satelitní sestavení.

Prostředky v globální mezipaměti sestavení: Příklad

Následující příklad používá metodu v knihovně tříd .NET k extrakci a vrácení lokalizovaného pozdravu ze souboru prostředků. Knihovna a její prostředky jsou registrovány v globální mezipaměti sestavení. Příklad obsahuje zdroje pro angličtinu (USA), francouzštinu (Francie), ruštinu (Rusko) a anglickou jazykovou verzi. Angličtina je výchozí jazyková verze; prostředky jsou uloženy v hlavním sestavení. Příklad zpočátku zpozdí knihovnu a její satelitní sestavení pomocí veřejného klíče a pak je znovu podepíše párem veřejného/privátního klíče. Pokud chcete vytvořit příklad, postupujte takto:

  1. Pokud visual Studio nepoužíváte, vytvořte pomocí následujícího příkazu nástroje Strong Name Tool (Sn.exe) pár veřejného a privátního klíče s názvem ResKey.snk:

    sn –k ResKey.snk
    

    Pokud používáte Visual Studio, vygenerujte soubor klíče pomocí karty Podpis v dialogovém okně Vlastnosti projektu.

  2. Pomocí následujícího příkazu Strong Name Tool (Sn.exe) vytvořte soubor veřejného klíče s názvem PublicKey.snk:

    sn –p ResKey.snk PublicKey.snk
    
  3. Vytvořte soubor prostředku s názvem Strings.resx , který bude obsahovat prostředek pro výchozí jazykovou verzi. V daném souboru uložte jeden řetězec, Greeting jehož hodnota je "How do you do?" (Jak to uděláte).

  4. Chcete-li označit, že "en" je výchozí jazyková verze aplikace, přidejte následující System.Resources.NeutralResourcesLanguageAttribute atribut do souboru AssemblyInfo aplikace nebo do hlavního souboru zdrojového kódu, který se zkompiluje do hlavního sestavení aplikace:

    [assembly:NeutralResourcesLanguageAttribute("en")]
    
    <Assembly: NeutralResourcesLanguageAttribute("en")>
    
  5. Do aplikace přidejte podporu dalších jazykových verzí (jazykové verze en-US, fr-FR a ru-RU):

    • Pokud chcete podporovat jazykovou verzi "en-US" nebo english (USA), vytvořte soubor prostředků s názvem Strings.en-US.resx nebo Strings.en-US.txt a uložte ho do jednoho řetězce s názvem Greeting "Hello!".

    • Pokud chcete podporovat jazykovou verzi fr-FR nebo francouzštinu (Francie), vytvořte soubor prostředků s názvem Strings.fr-FR.resx nebo Strings.fr-FR.txt a uložte ho do jednoho řetězce s názvem Greeting "Bon jour!".

    • Pokud chcete podporovat jazykovou verzi ru-RU nebo ruštinu (Rusko), vytvořte soubor prostředků s názvem Strings.ru-RU.resx nebo Strings.ru-RU.txt a uložte ho do jednoho řetězce, Greeting jehož hodnota je Привет!.

  6. Pomocí resgen.exe zkompilujte každý text nebo soubor prostředků XML do binárního souboru .resources. Výstup je sada souborů, které mají stejný název kořenového souboru jako soubory .resx nebo .txt , ale příponu .resources . Pokud vytvoříte příklad pomocí sady Visual Studio, proces kompilace se zpracuje automaticky. Pokud visual Studio nepoužíváte, spuštěním následujícího příkazu zkompilujte soubory .resx do souborů .resources :

    resgen filename
    

    Kde název souboru je volitelná cesta, název souboru a přípona souboru .resx nebo textového souboru.

  7. Zkompilujte následující zdrojový kód pro StringLibrary.vb nebo StringLibrary.cs společně s prostředky pro výchozí jazykovou verzi do zpožděného podepsaného sestavení knihovny s názvem StringLibrary.dll:

    Důležité

    Pokud k vytvoření příkladu používáte příkazový řádek místo sady Visual Studio, měli byste změnit volání konstruktoru ResourceManager třídy na ResourceManager rm = new ResourceManager("Strings", typeof(Example).Assembly);.

    using System;
    using System.Globalization;
    using System.Reflection;
    using System.Resources;
    using System.Threading;
    
    [assembly:NeutralResourcesLanguageAttribute("en")]
    
    public class StringLibrary
    {
       public string GetGreeting()
       {
          ResourceManager rm = new ResourceManager("Strings",
                               Assembly.GetAssembly(typeof(StringLibrary)));
          string greeting = rm.GetString("Greeting");
          return greeting;
       }
    }
    
    Imports System.Globalization
    Imports System.Reflection
    Imports System.Resources
    Imports System.Threading
    
    <Assembly: NeutralResourcesLanguageAttribute("en")>
    
    Public Class StringLibrary
        Public Function GetGreeting() As String
            Dim rm As New ResourceManager("Strings", _
                                          Assembly.GetAssembly(GetType(StringLibrary)))
            Dim greeting As String = rm.GetString("Greeting")
            Return greeting
        End Function
    End Class
    

    Příkaz pro kompilátor jazyka C# je:

    csc -t:library -resource:Strings.resources -delaysign+ -keyfile:publickey.snk StringLibrary.cs
    

    Odpovídající příkaz kompilátoru jazyka Visual Basic je:

    vbc -t:library -resource:Strings.resources -delaysign+ -keyfile:publickey.snk StringLibrary.vb
    
  8. Vytvořte podadresář v hlavním adresáři aplikace pro každou lokalizovanou jazykovou verzi podporovanou aplikací. Měli byste vytvořit podadresář en-US, fr-FR a ru-RU . Visual Studio vytvoří tyto podadresáře automaticky jako součást procesu kompilace. Vzhledem k tomu, že všechna satelitní sestavení mají stejný název souboru, používají se podadresáře k ukládání jednotlivých satelitních sestavení specifických pro jazykovou verzi, dokud nebudou podepsány pomocí dvojice veřejného a privátního klíče.

  9. Vložte jednotlivé soubory .resources specifické pro jazykovou verzi do zpožděných podepsaných satelitních sestavení a uložte je do příslušného adresáře. Příkaz, který to provede pro každý soubor .resources , je:

    al -target:lib -embed:Strings.culture.resources -culture:culture -out:culture\StringLibrary.resources.dll -delay+ -keyfile:publickey.snk
    

    kde jazyková verze je název jazykové verze. V tomto příkladu jsou názvy jazykových verzí en-US, fr-FR a ru-RU.

  10. Opětovné podepsání StringLibrary.dll pomocí nástroje Silné jméno (sn.exe) následujícím způsobem:

    sn –R StringLibrary.dll RealKeyPair.snk
    
  11. Znovu podepište jednotlivá satelitní sestavení. K tomu použijte nástroj Strong Name (sn.exe) pro každé satelitní sestavení:

    sn –R StringLibrary.resources.dll RealKeyPair.snk
    
  12. Pomocí následujícího příkazu zaregistrujte StringLibrary.dll a každou ze svých satelitních sestavení v globální mezipaměti sestavení:

    gacutil -i filename
    

    kde název souboru je název souboru, který se má zaregistrovat.

  13. Pokud používáte Visual Studio, vytvořte nový projekt konzolové aplikace s názvem Example, přidejte do něj odkaz na StringLibrary.dll a následující zdrojový kód a zkompilujte ho.

    using System;
    using System.Globalization;
    using System.Threading;
    
    public class Example
    {
       public static void Main()
       {
          string[] cultureNames = { "en-GB", "en-US", "fr-FR", "ru-RU" };
          Random rnd = new Random();
          string cultureName = cultureNames[rnd.Next(0, cultureNames.Length)];
          Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultureName);
          Console.WriteLine("The current UI culture is {0}",
                            Thread.CurrentThread.CurrentUICulture.Name);
          StringLibrary strLib = new StringLibrary();
          string greeting = strLib.GetGreeting();
          Console.WriteLine(greeting);
       }
    }
    
    Imports System.Globalization
    Imports System.Threading
    
    Module Example
        Public Sub Main()
            Dim cultureNames() As String = {"en-GB", "en-US", "fr-FR", "ru-RU"}
            Dim rnd As New Random()
            Dim cultureName As String = cultureNames(rnd.Next(0, cultureNames.Length))
            Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultureName)
            Console.WriteLine("The current UI culture is {0}",
                              Thread.CurrentThread.CurrentUICulture.Name)
            Dim strLib As New StringLibrary()
            Dim greeting As String = strLib.GetGreeting()
            Console.WriteLine(greeting)
        End Sub
    End Module
    

    Pokud chcete zkompilovat z příkazového řádku, použijte pro kompilátor jazyka C#následující příkaz:

    csc Example.cs -r:StringLibrary.dll
    

    Příkazový řádek kompilátoru jazyka Visual Basic je:

    vbc Example.vb -r:StringLibrary.dll
    
  14. Spusťte Example.exe.

Viz také