System.Resources.NeutralResourcesLanguageAttribute – třída

Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.

V desktopových aplikacích NeutralResourcesLanguageAttribute atribut informuje správce prostředků o výchozí jazykové verzi aplikace a o umístění jejích prostředků. Ve výchozím nastavení jsou prostředky vloženy do sestavení hlavní aplikace a atribut můžete použít následujícím způsobem. Tento příkaz určuje, že výchozí jazykovou verzí aplikace je angličtina (USA).

[assembly: NeutralResourcesLanguage("en-US")]
<Assembly:NeutralResourcesLanguage("en-US")>

Pomocí atributu NeutralResourcesLanguageAttribute můžete také určit, kde ResourceManager lze najít prostředky výchozí jazykové verze zadáním UltimateResourceFallbackLocation hodnoty výčtu v příkazu atributu. Nejčastěji to znamená, že prostředky se nacházejí v satelitním sestavení. Například následující příkaz určuje, že angličtina (USA) je výchozí nebo neutrální jazyková verze aplikace a že její prostředky se nacházejí v satelitním sestavení. Objekt ResourceManager je vyhledá v podadresáři s názvem en-US.

[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
<Assembly:NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)>

Tip

K definování výchozí jazykové verze aplikace doporučujeme vždy použít NeutralResourcesLanguageAttribute atribut.

Atribut provádí dvě role:

  • Pokud jsou prostředky výchozí jazykové verze vložené do hlavního sestavení aplikace a ResourceManager musí načíst prostředky, které patří do stejné jazykové verze jako výchozí jazyková verze, ResourceManager automaticky použije prostředky umístěné v hlavním sestavení místo hledání satelitního sestavení. Tím se obchází obvyklá sonda sestavení, zlepšuje výkon vyhledávání prvního prostředku, který načítáte, a může snížit pracovní sadu. Viz Balení a nasazení prostředků pro proces ResourceManager používá k sondování souborů prostředků.

  • Pokud jsou prostředky výchozí jazykové verze umístěny v satelitním sestavení místo v hlavním sestavení aplikace, atribut určuje jazykovou verzi a adresář, NeutralResourcesLanguageAttribute ze kterého může modul runtime načíst prostředky.

Aplikace pro Windows 8.x Store

V aplikacích pro Windows 8.x Store, jejichž prostředky jsou načteny a načteny pomocí ResourceManager třídy, atribut definuje neutrální jazykovou verzi, NeutralResourcesLanguageAttribute jejíž prostředky se používají v případě neúspěšné sondy. Nezadá umístění prostředků. Ve výchozím nastavení ResourceManager používá soubor PRI (Package Resource Index) aplikace k vyhledání prostředků výchozí jazykové verze. Neutrální jazyková verze definovaná atributem NeutralResourcesLanguageAttribute se přidá na konec seznamu jazyků uživatelského rozhraní pro simulaci tohoto efektu.

Pokud načtete a načtete prostředky pomocí třídy prostředí Windows Runtime Windows.ApplicationModel.Resources.ResourceLoader nebo typů v oboru názvů Windows.ApplicationModel.Resources.Core, NeutralResourcesLanguageAttribute atribut bude ignorován.

Příklady

Následující příklad používá jednoduchou aplikaci Hello World k ilustraci použití atributu NeutralResourcesLanguageAttribute k definování výchozí nebo záložní jazykové verze. Vyžaduje vytvoření samostatných souborů prostředků pro jazykové verze angličtiny (en), angličtiny (USA) (en-US) a francouzštiny (Francie) (fr-FR). Následující příklad ukazuje obsah textového souboru s názvem ExampleResources.txt pro anglickou jazykovou verzi.

# Resources for the default (en) culture.
Greeting=Hello

Pokud chcete použít soubor prostředků v aplikaci, musíte použít Generátor souborů prostředků (Resgen.exe) k převodu souboru z textového formátu (.txt) na binární formát (.resources), a to následujícím způsobem:

resgen ExampleResources.txt

Při kompilaci aplikace se binární soubor prostředků vloží do hlavního sestavení aplikace.

Následující příklad ukazuje obsah textového souboru s názvem ExampleResources.en-US.txt, který poskytuje prostředky pro jazykovou verzi angličtiny (USA).

# Resources for the en-US culture.
Greeting=Hi

Textový soubor lze převést na binární soubor prostředků pomocí Generátoru souborů prostředků (ResGen.exe) na příkazovém řádku následujícím způsobem:

resgen ExampleResources.en-US.txt ExampleResources.en-US.resources

Binární soubor prostředků by se pak měl zkompilovat do sestavení pomocí Assembly Linkeru (Al.exe) a umístit do podadresáře adresáře aplikace en-US zadáním následujícího příkazu:

al /t:lib /embed:ExampleResources.en-US.resources /culture:en-US /out:en-us\Example.resources.dll

Následující příklad ukazuje obsah textového souboru s názvem ExampleResources.fr-FR.txt, který poskytuje prostředky pro jazykovou verzi francouzštiny (Francie).

# Resources for the fr-FR culture.
Greeting=Bonjour

Textový soubor lze převést na binární soubor prostředků pomocí ResGen.exe na příkazovém řádku následujícím způsobem:

resgen ExampleResources.fr-FR.txt ExampleResources.fr-FR.resources

Binární soubor prostředků by se pak měl zkompilovat do sestavení pomocí Assembly Linkeru a umístit do podadresáře fr-FR adresáře aplikace vydáním následujícího příkazu:

al /t:lib /embed:ExampleResources.fr-FR.resources /culture:fr-FR /out:fr-FR\Example.resources.dll

Následující příklad poskytuje spustitelný kód, který nastaví aktuální jazykovou verzi, vyzve k zadání uživatelského jména a zobrazí lokalizovaný řetězec.

using System;
using System.Globalization;
using System.Reflection;
using System.Resources;
using System.Threading;

[assembly: NeutralResourcesLanguageAttribute("en")]
public class Example
{
    public static void Main()
    {
        // Select the current culture randomly to test resource fallback.
        string[] cultures = { "de-DE", "en-us", "fr-FR" };
        Random rnd = new Random();
        int index = rnd.Next(0, cultures.Length);
        Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultures[index]);
        Console.WriteLine("The current culture is {0}",
                          CultureInfo.CurrentUICulture.Name);

        // Retrieve the resource.
        ResourceManager rm = new ResourceManager("ExampleResources",
                                                 typeof(Example).Assembly);
        string greeting = rm.GetString("Greeting");

        Console.Write("Enter your name: ");
        string name = Console.ReadLine();
        Console.WriteLine("{0} {1}!", greeting, name);
    }
}
Imports System.Globalization
Imports System.Resources
Imports System.Threading 

<Assembly:NeutralResourcesLanguageAttribute("en")>

Module Example
   Public Sub Main()
      ' Select the current culture randomly to test resource fallback.
      Dim cultures() As String = { "de-DE", "en-us", "fr-FR" }
      Dim rnd As New Random()
      Dim index As Integer = rnd.Next(0, cultures.Length)
      Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultures(index))      
      Console.WriteLine("The current culture is {0}", 
                        CultureInfo.CurrentUICulture.Name)       

      ' Retrieve the resource.
      Dim rm As New ResourceManager("ExampleResources" , GetType(Example).Assembly)
      Dim greeting As String = rm.GetString("Greeting")
      
      Console.Write("Enter your name: ")
      Dim name As String = Console.ReadLine()
      Console.WriteLine("{0} {1}", greeting, name)
   End Sub
End Module

Dá se zkompilovat pomocí následujícího příkazu v jazyce Visual Basic:

vbc Example.vb /resource:ExampleResources.resources

nebo pomocí následujícího příkazu v jazyce C#:

csc Example.cs /resource:ExampleResources.resources