System.Resources.ResourceManager.GetString-metoder

Anmärkning

Den här artikeln innehåller ytterligare kommentarer till referensdokumentationen för det här API:et.

Egenskapen IgnoreCase avgör om jämförelsen av name med namnen på resurserna är skiftlägesokänslig (standard) eller skiftlägeskänslig.

Anmärkning

Metoderna GetString kan generera fler undantag än vad som visas i listan. En orsak till att detta kan inträffa är om en metod som den här metoden anropar utlöser ett undantag. Ett FileLoadException undantag kan till exempel utlösas om ett fel uppstod vid distribution eller installation av en satellitsammansättning, eller om ett SerializationException undantag kan utlösas om en användardefinierad typ utlöser ett användardefinierat undantag när typen deserialiseras.

GetString(String) metod

Skrivbordsappar

I datorprogram lokaliseras den resurs som returneras för den aktuella trådens användargränssnittskultur, som definieras av egenskapen CultureInfo.CurrentUICulture. Om resursen inte har lokaliserats för den kulturen avsöker resurshanteraren en resurs genom att följa stegen som beskrivs i avsnittet "Resursåterställningsprocess" i artikeln Paketering och distribution av resurser . Om ingen användbar uppsättning lokaliserade resurser hittas återgår resurshanteraren till standardkulturens resurser. Om resurshanteraren inte kan läsa in standardkulturens resursuppsättning utlöser metoden ett MissingManifestResourceException undantag eller, om resursuppsättningen förväntas finnas i en satellitsammansättning, ett MissingSatelliteAssemblyException undantag. Om resurshanteraren kan läsa in en lämplig resursuppsättning men inte kan hitta en resurs med namnet namereturnerar metoden null.

Windows 8.x-appar

Viktigt!

Även om klassen ResourceManager stöds i Windows 8.x-appar rekommenderar vi inte att den används. Använd endast den här klassen när du utvecklar portabla klassbiblioteksprojekt som kan användas med Windows 8.x-appar. Om du vill hämta resurser från Windows 8.x-appar använder du klassen Windows.ApplicationModel.Resources.ResourceLoader i stället.

I Windows 8.x-apparna returnerar GetString(String)-metoden värdet för name-strängresursen, lokaliserad för anroparens nuvarande UI-kulturella inställningar. Listan över kulturer härleds från operativsystemets föredragna UI-språklista. Om resurshanteraren inte kan matcha namereturnerar nullmetoden .

Exempel

I följande exempel används GetString metoden för att hämta kulturspecifika resurser. Den består av resurser som sammanställts från .txt filer för den engelska (en), franska (Frankrike) (fr-FR), och ryska (Ryssland) (ru-RU) kulturer. Exemplet ändrar den aktuella kulturen och den aktuella användargränssnittskulturen till engelska (USA), franska (Frankrike), ryska (Ryssland) och svenska (Sverige). Sedan anropas GetString metoden för att hämta den lokaliserade strängen, som visas tillsammans med aktuell dag och månad. Observera att utdata visar lämplig lokaliserad sträng utom när den aktuella användargränssnittskulturen är svensk (Sverige). Eftersom svenska språkresurser inte är tillgängliga använder appen i stället resurserna i standardkulturen, som är engelska. Exemplet kräver de textbaserade resursfiler som anges i följande tabell. Var och en har en enskild strängresurs med namnet DateStart.

Kultur Filnamn Resursnamn Resursvärde
en-US DateStrings.txt DateStart Idag är
fr-FR DateStrings.fr-FR.txt DateStart Idag är det
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

Du kan använda följande batchfil för att kompilera C#-exemplet. För Visual Basic ändrar du csc till vbcoch ändrar filnamnstillägget för källkodsfilen från .cs till .vb.

resgen DateStrings.txt
csc showdate.cs /resource:DateStrings.resources

md fr-FR
resgen DateStrings.fr-FR.txt
al /out:fr-FR\Showdate.resources.dll /culture:fr-FR /embed:DateStrings.fr-FR.resources

md ru-RU
resgen DateStrings.ru-RU.txt
al /out:ru-RU\Showdate.resources.dll /culture:ru-RU /embed:DateStrings.ru-RU.resources

Här är källkoden för exemplet (ShowDate.vb för Visual Basic-versionen eller ShowDate.cs för C#-versionen).

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

public class Example
{
   public static void Main()
   {
      string[] cultureNames = [ "en-US", "fr-FR", "ru-RU", "sv-SE" ];
      ResourceManager rm = new ResourceManager("DateStrings",
                                               typeof(Example).Assembly);

      foreach (var cultureName in cultureNames) {
         CultureInfo culture = CultureInfo.CreateSpecificCulture(cultureName);
         Thread.CurrentThread.CurrentCulture = culture;
         Thread.CurrentThread.CurrentUICulture = culture;

         Console.WriteLine($"Current UI Culture: {CultureInfo.CurrentUICulture.Name}");
         string dateString = rm.GetString("DateStart");
         Console.WriteLine($"{dateString} {DateTime.Now:M}.\n");
      }
   }
}
// The example displays output similar to the following:
//       Current UI Culture: en-US
//       Today is February 03.
//
//       Current UI Culture: fr-FR
//       Aujourd'hui, c'est le 3 février
//
//       Current UI Culture: ru-RU
//       Сегодня февраля 03.
//
//       Current UI Culture: sv-SE
//       Today is den 3 februari.
Imports System.Globalization
Imports System.Resources
Imports System.Threading

<Assembly:NeutralResourcesLanguage("en")>

Module Example
   Public Sub Main()
      Dim cultureNames() As String = { "en-US", "fr-FR", "ru-RU", "sv-SE" }
      Dim rm As New ResourceManager("DateStrings",
                                    GetType(Example).Assembly)
      
      For Each cultureName In cultureNames
         Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture(cultureName)
         Thread.CurrentThread.CurrentCulture = culture 
         Thread.CurrentThread.CurrentUICulture = culture

         Console.WriteLine("Current UI Culture: {0}", 
                           CultureInfo.CurrentUICulture.Name)
         Dim dateString As String = rm.GetString("DateStart")
         Console.WriteLine("{0} {1:M}.", dateString, Date.Now)                           
         Console.WriteLine()
      Next                                           
   End Sub
End Module
' The example displays output similar to the following:
'       Current UI Culture: en-US
'       Today is February 03.
'       
'       Current UI Culture: fr-FR
'       Aujourd'hui, c'est le 3 février
'       
'       Current UI Culture: ru-RU
'       Сегодня февраля 03.
'       
'       Current UI Culture: sv-SE
'       Today is den 3 februari.

GetString(String, CultureInfo) metod

Skrivbordsappar

I skrivbordsappar, om culture är null, GetString(String, CultureInfo) använder metoden den aktuella användargränssnittskulturen som hämtats från CultureInfo.CurrentUICulture egenskapen.

Resursen som returneras lokaliseras för den kultur som anges av parametern culture . Om resursen inte har lokaliserats för cultureavsöker resurshanteraren en resurs genom att följa stegen som beskrivs i avsnittet "Resursåterställningsprocess" i avsnittet Paketering och distribution av resurser . Om ingen användbar uppsättning resurser hittas faller resurshanteraren tillbaka på standardkulturens resurser. Om resurshanteraren inte kan läsa in standardkulturens resursuppsättning utlöser metoden ett MissingManifestResourceException undantag eller, om resursuppsättningen förväntas finnas i en satellitsammansättning, ett MissingSatelliteAssemblyException undantag. Om resurshanteraren kan läsa in en lämplig resursuppsättning men inte kan hitta en resurs med namnet namereturnerar metoden null.

Windows 8.x-appar

Viktigt!

Även om klassen ResourceManager stöds i Windows 8.x-appar rekommenderar vi inte att den används. Använd endast den här klassen när du utvecklar portabla klassbiblioteksprojekt som kan användas med Windows 8.x-appar. Om du vill hämta resurser från Windows 8.x-appar använder du klassen Windows.ApplicationModel.Resources.ResourceLoader i stället.

I Windows 8.x-appar GetString(String, CultureInfo) returnerar metoden värdet för strängresursen name , lokaliserad för den kultur som anges av parametern culture . Om resursen inte är lokaliserad för culture kulturen använder sökningen hela återgångslistan för Windows 8-språk och slutar efter att ha sökt i standardkulturen. Om resurshanteraren inte kan matcha namereturnerar nullmetoden .

Exempel

I följande exempel används GetString(String, CultureInfo) metoden för att hämta kulturspecifika resurser. Exemplets standardkultur är engelska (en), och den innehåller satellitsammansättningar för de franska (Frankrike) (fr-FR) och ryska (Ryssland) (ru-RU) kulturer. Exemplet ändrar den aktuella kulturen och den aktuella användargränssnittskulturen till ryska (Ryssland) innan du anropar GetString(String, CultureInfo). Den anropar sedan GetString metoden och DateTime.ToString(String, IFormatProvider) metoden och skickar CultureInfo objekt som representerar de franska (Frankrike) och svenska (Sverige) kulturerna till varje metod. I utdata visas månaden och dagen i månaden samt strängen som föregår dem på franska, eftersom GetString metoden kan hämta den franska språkresursen. Men när den svenska kulturen används visas månaden och dagen i månaden på svenska, även om strängen som föregår dem är på engelska. Det beror på att resurshanteraren inte kan hitta lokaliserade svenska språkresurser, så den returnerar en resurs för den engelska standardkulturen i stället.

Exemplet kräver de textbaserade resursfiler som anges i följande tabell. Var och en har en enskild strängresurs med namnet DateStart.

Kultur Filnamn Resursnamn Resursvärde
en-US DateStrings.txt DateStart Idag är
fr-FR DateStrings.fr-FR.txt DateStart Idag är det
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

Du kan använda följande batchfil för att kompilera Visual Basic-exemplet. Kompilera i C# genom att ändra vbc till cscoch ändra filnamnstillägget för källkodsfilen från .vb till .cs.

resgen DateStrings.txt
vbc showdate.vb /resource:DateStrings.resources

md fr-FR
resgen DateStrings.fr-FR.txt
al /out:fr-FR\Showdate.resources.dll /culture:fr-FR /embed:DateStrings.fr-FR.resources

md ru-RU
resgen DateStrings.ru-RU.txt
al /out:ru-RU\Showdate.resources.dll /culture:ru-RU /embed:DateStrings.ru-RU.resources

Här är källkoden för exemplet (ShowDate.vb för Visual Basic-versionen eller ShowDate.cs för C#-versionen).

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

public class Example2
{
    public static void Main()
    {
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("ru-RU");
        Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("ru-RU");

        string[] cultureNames = [ "fr-FR", "sv-SE" ];
        ResourceManager rm = new ResourceManager("DateStrings",
                                                 typeof(Example).Assembly);

        foreach (var cultureName in cultureNames)
        {
            CultureInfo culture = CultureInfo.CreateSpecificCulture(cultureName);
            string dateString = rm.GetString("DateStart", culture);
            Console.WriteLine($"{culture.DisplayName}: {dateString} {DateTime.Now.ToString("M", culture)}.");
            Console.WriteLine();
        }
    }
}
// The example displays output similar to the following:
//       French (France): Aujourd'hui, c'est le 7 février.
//
//       Swedish (Sweden): Today is den 7 februari.
Imports System.Globalization
Imports System.Resources
Imports System.Threading

Module Example2
    Public Sub Main()
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("ru-RU")
        Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("ru-RU")

        Dim cultureNames() As String = {"fr-FR", "sv-SE"}
        Dim rm As New ResourceManager("DateStrings",
                                    GetType(Example).Assembly)

        For Each cultureName In cultureNames
            Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture(cultureName)
            Dim dateString As String = rm.GetString("DateStart", culture)
            Console.WriteLine("{0}: {1} {2}.", culture.DisplayName, dateString,
                                            Date.Now.ToString("M", culture))
            Console.WriteLine()
        Next
    End Sub
End Module
' The example displays output similar to the following:
'       French (France): Aujourd'hui, c'est le 7 février.
'       
'       Swedish (Sweden): Today is den 7 februari.