App-Ressourcen für Bibliotheken, die für mehrere Zielplattformen konfiguriert sindApp Resources for Libraries That Target Multiple Platforms

Sie können .NET Framework Portable Class Library Projekttyp, um sicherzustellen, dass von mehreren Plattformen Ressourcen in den Klassenbibliotheken zugegriffen werden können.You can use the .NET Framework Portable Class Library project type to ensure that resources in your class libraries can be accessed from multiple platforms. Dieser Projekttyp ist in Visual Studio 2012Visual Studio 2012 verfügbar, und er ist für die portable Teilmenge der .NET Framework-Klassenbibliothek vorgesehen.This project type is available in Visual Studio 2012Visual Studio 2012 and targets the portable subset of the .NET Framework class library. Durch die Verwendung von Portable KlassenbibliothekPortable Class Library wird sichergestellt, dass von Desktop-Apps, Silverlight-Apps, Windows Phone-Apps und Windows 8.x StoreWindows 8.x Store-Apps auf die Bibliothek zugegriffen werden kann.Using a Portable KlassenbibliothekPortable Class Library ensures that your library can be accessed from desktop apps, Silverlight apps, Windows Phone apps, and Windows 8.x StoreWindows 8.x Store apps.

Das Portable KlassenbibliothekPortable Class Library-Projekt macht nur eine sehr geringe Teilmenge der Typen im System.Resources-Namespace für die Anwendung verfügbar. Es ermöglicht Ihnen jedoch das Abrufen von Ressourcen mithilfe der ResourceManager-Klasse.The Portable KlassenbibliothekPortable Class Library project makes only a very limited subset of the types in the System.Resources namespace available to your application, but it does allow you to use the ResourceManager class to retrieve resources. Wenn Sie jedoch eine Anwendung unter Verwendung von Visual Studio erstellen, sollten Sie den von Visual Studio erstellten stark typisierten Wrapper verwenden und nicht die ResourceManager-Klasse direkt verwenden.However, if you are creating an app by using Visual Studio, you should use the strongly typed wrapper created by Visual Studio instead of using the ResourceManager class directly.

Um einen stark typisierten Wrapper in Visual Studio erstellen möchten, legen Sie die Hauptressourcendatei Zugriffsmodifizierer in der Visual Studio-Ressourcen-Designer auf öffentlichen.To create a strongly typed wrapper in Visual Studio, set the main resource file's Access Modifier in the Visual Studio Resource Designer to Public. Dadurch wird eine [resourceFileName].designer.cs-Datei oder [resourceFileName].designer.vb-Datei erstellt, die den stark typisierten ResourceManager-Wrapper enthält.This creates a [resourceFileName].designer.cs or [resourceFileName].designer.vb file that contains the strongly typed ResourceManager wrapper. Weitere Informationen zur Verwendung von einer stark typisierten ressourcenwrappers finden Sie im Abschnitt "Generieren einer stark typisierten Ressourcenklasse" in der Resgen.exe (Resource File Generator) Thema.For more information about using a strongly typed resource wrapper, see the "Generating a Strongly Typed Resource Class" section in the Resgen.exe (Resource File Generator) topic.

Ressourcen-Manager in Portable KlassenbibliothekPortable Class LibraryResource Manager in the Portable KlassenbibliothekPortable Class Library

In einem Portable KlassenbibliothekPortable Class Library-Projekt wird der gesamte Zugriff auf Ressourcen von der ResourceManager-Klasse behandelt.In a Portable KlassenbibliothekPortable Class Library project, all access to resources is handled by the ResourceManager class. Da in einem System.Resources-Projekt nicht auf Typen im ResourceReader-Namespace, z. B. ResourceSet und Portable KlassenbibliothekPortable Class Library, zugegriffen werden kann, können sie nicht für den Zugriff auf Ressourcen verwendet werden.Because types in the System.Resources namespace, such as ResourceReader and ResourceSet, are not accessible from a Portable KlassenbibliothekPortable Class Library project, they cannot be used to access resources.

Das Portable KlassenbibliothekPortable Class Library-Projekt enthält die vier ResourceManager-Member, die in der folgenden Tabelle aufgeführt sind.The Portable KlassenbibliothekPortable Class Library project includes the four ResourceManager members listed in the following table. Diese Konstruktoren und Methoden ermöglichen es Ihnen, ein ResourceManager-Objekt zu instanziieren und Zeichenfolgenressourcen abzurufen.These constructors and methods enable you to instantiate a ResourceManager object and retrieve string resources.

ResourceManager-MemberResourceManager member BeschreibungDescription
ResourceManager(String, Assembly) Erstellt eine ResourceManager-Instanz für den Zugriff auf die benannte Ressourcendatei in der angegebenen Assembly.Creates a ResourceManager instance to access the named resource file found in the specified assembly.
ResourceManager(Type) Erstellt eine ResourceManager-Instanz, die dem angegebenen Typ entspricht.Creates a ResourceManager instance that corresponds to the specified type.
GetString(String) Ruft eine benannte Ressource für die aktuelle Kultur ab.Retrieves a named resource for the current culture.
GetString(String, CultureInfo) Ruft eine benannte Ressource ab, die zu der angegebenen Kultur gehört.Retrieves a named resource belonging to the specified culture.

Der Ausschluss anderer ResourceManager-Member aus Portable KlassenbibliothekPortable Class Library bedeutet, dass serialisierte Objekte, Daten, die keine Zeichenfolgen sind, und Bilder nicht aus einer Ressourcendatei abgerufen werden können.The exclusion of other ResourceManager members from the Portable KlassenbibliothekPortable Class Library means that serialized objects, non-string data, and images cannot be retrieved from a resource file. Um Ressourcen aus Portable KlassenbibliothekPortable Class Library zu verwenden, sollten Sie alle Objektdaten im Zeichenfolgenformat speichern.To use resources from a Portable KlassenbibliothekPortable Class Library, you should store all object data in string form. Beispielsweise können Sie numerische Werte in einer Ressourcendatei speichern, indem Sie sie in Zeichenfolgen konvertieren. Anschließend können Sie diese abrufen und mit der Parse-Methode oder der TryParse-Methode des numerischen Datentyps zurück in Zahlen konvertieren.For example, you can store numeric values in a resource file by converting them to strings, and you can retrieve them and then convert them back to numbers by using the numeric data type's Parse or TryParse method. Sie können Bilder oder andere Binärdaten durch Aufruf der Convert.ToBase64String-Methode in eine Zeichenfolgendarstellung konvertieren und sie durch Aufruf der Convert.FromBase64String-Methode als Bytearray wiederherstellen.You can convert images or other binary data to a string representation by calling the Convert.ToBase64String method, and restore them to a byte array by calling the Convert.FromBase64String method.

Die Portable KlassenbibliothekPortable Class Library und Windows Store-AppsThe Portable KlassenbibliothekPortable Class Library and Windows Store Apps

In Portable KlassenbibliothekPortable Class Library-Projekten werden Ressourcen in RESX-Dateien gespeichert, die dann als RESOURCES-Dateien kompiliert und zur Kompilierzeit in die Hauptassembly oder in Satellitenassemblys eingebettet werden.Portable KlassenbibliothekPortable Class Library projects store resources in .resx files, which are then compiled into .resources files and embedded in the main assembly or in satellite assemblies at compile time. Für Apps im Windows 8.x StoreWindows 8.x Store hingegen müssen Ressourcen in RESW-Dateien gespeichert werden, die dann als einzelne PRI (Package Resource Index)-Datei kompiliert werden.Windows 8.x StoreWindows 8.x Store apps, on the other hand, require resources to be stored in .resw files, which are then compiled into a single package resource index (PRI) file. Portable KlassenbibliothekPortable Class Library wird jedoch trotz der nicht kompatiblen Dateiformate in einer App im Windows 8.x StoreWindows 8.x Store ausgeführt.However, despite the incompatible file formats, your Portable KlassenbibliothekPortable Class Library will work in a Windows 8.x StoreWindows 8.x Store app.

Um die Klassenbibliothek in einer App im Windows 8.x StoreWindows 8.x Store zu verwenden, fügen Sie im Projekt für die App im Windows Store einen Verweis auf die Klassenbibliothek hinzu.To consume your class library from a Windows 8.x StoreWindows 8.x Store app, add a reference to it in your Windows Store app project. Visual Studio extrahiert die Ressourcen transparent aus der Assembly in eine RESW-Datei und verwendet sie zum Generieren einer PRI-Datei, aus der Windows-RuntimeWindows Runtime Ressourcen extrahieren kann.Visual Studio will transparently extract the resources from your assembly into a .resw file and use it to generate a PRI file from which the Windows-RuntimeWindows Runtime can extract resources. Windows-RuntimeWindows Runtime führt zur Laufzeit den Code in Portable KlassenbibliothekPortable Class Library aus, ruft jedoch die Ressourcen der portablen Klassenbibliothek aus der PRI-Datei ab.At run time, the Windows-RuntimeWindows Runtime executes the code in your Portable KlassenbibliothekPortable Class Library, but it retrieves your Portable Class Library's resources from the PRI file.

Wenn das Portable KlassenbibliothekPortable Class Library-Projekt lokalisierte Ressourcen enthält, stellen Sie diese auf die gleiche Weise wie für eine Bibliothek in einer Desktop-App mithilfe des Hub-and-Spoke-Modells bereit.If your Portable KlassenbibliothekPortable Class Library project includes localized resources, you use the hub-and-spoke model to deploy them just as you would for a library in a desktop app. Um in der App im Windows 8.x StoreWindows 8.x Store die Hauptressourcendatei und ggf. lokalisierte Ressourcendateien zu verwenden, fügen Sie einen Verweis auf die Hauptassembly hinzu.To consume your main resource file and any localized resource files in your Windows 8.x StoreWindows 8.x Store app, you add a reference to the main assembly. Zur Kompilierzeit extrahiert Visual Studio die Ressource aus der Hauptressourcendatei und lokalisiert die Ressourcendateien in separate RESW-Dateien.At compile time, Visual Studio extracts the resources from your main resource file and any localized resource files into separate .resw files. Anschließend werden die RESW-Dateien in eine einzelne PRI-Datei kompiliert, auf die Windows-RuntimeWindows Runtime zur Laufzeit zugreift.It then compiles the .resw files into a single PRI file that the Windows-RuntimeWindows Runtime accesses at run time.

Beispiel: Portable KlassenbibliothekPortable Class Library ohne LokalisierungExample: Non-Localized Portable KlassenbibliothekPortable Class Library

Im folgenden einfachen Beispiel für Portable KlassenbibliothekPortable Class Library ohne Lokalisierung werden Ressourcen verwendet, um die Namen von Spalten zu speichern und die Anzahl von Zeichen zu bestimmen, die für Tabellendaten reserviert werden sollen.The following simple, non-localized Portable KlassenbibliothekPortable Class Library example uses resources to store the names of columns and to determine the number of characters to reserve for tabular data. Im Beispiel werden die in der folgenden Tabelle aufgeführten Zeichenfolgenressourcen in der Datei LibResources.resx gespeichert.The example uses a file named LibResources.resx to store the string resources listed in the following table.

RessourcennameResource name RessourcenwertResource value
BornBorn BirthdateBirthdate
BornLengthBornLength 1212
HiredHired Hire DateHire Date
HiredLengthHiredLength 1212
IDID IDID
ID.LengthID.Length 1212
NameName NameName
NameLengthNameLength 2525
TitelTitle MitarbeiterdatenbankEmployee Database

Der folgende Code definiert eine UILibrary Klasse, die den Ressourcen-Manager-Wrapper verwendet resources von Visual Studio generiert bei der Zugriffsmodifizierer für die Datei, in geändert wird öffentlichen .The following code defines a UILibrary class that uses the Resource Manager wrapper named resources generated by Visual Studio when the Access Modifier for the file is changed to Public. Die UILibrary-Klasse analysiert die Zeichenfolgendaten nach Bedarf.The UILibrary class parses the string data as necessary. .. Beachten Sie, dass sich die Klasse im MyCompany.Employees-Namespace befindet.Note that the class is in the MyCompany.Employees namespace.

using System;
using System.Resources;
using MyCompany.Employees;

[assembly: NeutralResourcesLanguage("en-US")]

namespace MyCompany.Employees
{
   public class UILibrary
   {
      private const int nFields = 4;

      public static string GetTitle()
      {
         string retval = LibResources.Born; 
         if (String.IsNullOrEmpty(retval))
            retval = "";

         return retval;
      }

      public static string[] GetFieldNames()
      {
         string[] fieldnames = new string[nFields];
         fieldnames[0] = LibResources.Name;
         fieldnames[1] = LibResources.ID;
         fieldnames[2] = LibResources.Born;
         fieldnames[3] = LibResources.Hired;
         return fieldnames;
      }

      public static int[] GetFieldLengths()
      {
         int[] fieldLengths = new int[nFields];
         fieldLengths[0] = Int32.Parse(LibResources.NameLength);
         fieldLengths[1] = Int32.Parse(LibResources.IDLength);
         fieldLengths[2] = Int32.Parse(LibResources.BornLength);
         fieldLengths[3] = Int32.Parse(LibResources.HiredLength);
         return fieldLengths;
      }
   }
}
Imports System.Resources

<Assembly: NeutralResourcesLanguage("en-US")> 

Public Class UILibrary
   Private Const nFields As Integer = 4

   Public Shared Function GetTitle() As String
      Dim retval As String = My.Resources.LibResources.Title
      If String.IsNullOrEmpty(retval) Then retval = "<No value>"

      Return retval
   End Function

   Public Shared Function GetFieldNames() As String()
      Dim fieldnames(nFields - 1) As String
      fieldnames(0) = My.Resources.LibResources.Name
      fieldnames(1) = My.Resources.LibResources.ID
      fieldnames(2) = My.Resources.LibResources.Born
      fieldnames(3) = My.Resources.LibResources.Hired
      Return fieldnames
   End Function

   Public Shared Function GetFieldLengths() As Integer()
      Dim fieldLengths(nFields - 1) As Integer
      fieldLengths(0) = Int32.Parse(My.Resources.LibResources.NameLength)
      fieldLengths(1) = Int32.Parse(My.Resources.LibResources.IDLength)
      fieldLengths(2) = Int32.Parse(My.Resources.LibResources.BornLength)
      fieldLengths(3) = Int32.Parse(My.Resources.LibResources.HiredLength)
      Return fieldLengths
   End Function
End Class

Im folgenden Code wird veranschaulicht, wie aus einer App im Konsolenmodus auf die UILibrary-Klasse und ihre Ressourcen zugegriffen werden kann.The following code illustrates how the UILibrary class and its resources can be accessed from a console-mode app. Dem Konsolen-App-Projekt muss ein Verweis auf UILIbrary.dll hinzugefügt werden.It requires a reference to UILIbrary.dll to be added to the console app project.

using System;
using System.Collections.Generic;
using MyCompany.Employees;
 
class Program
{
   static void Main()
   {
     // Get the data from some data source.
      var employees = InitializeData();

      // Display application title.
      string title = UILibrary.GetTitle();
      int start = (Console.WindowWidth + title.Length) / 2;
      string titlefmt = String.Format("{{0,{0}{1}", start, "}");
      Console.WriteLine(titlefmt, title);
      Console.WriteLine();

      // Retrieve resources.
      string[] fields = UILibrary.GetFieldNames();
      int[] lengths = UILibrary.GetFieldLengths();
      string fmtString = String.Empty;
      // Create format string for field headers and data.
      for (int ctr = 0; ctr < fields.Length; ctr++)
         fmtString += String.Format("{{{0},-{1}{2}{3}   ", ctr, lengths[ctr], ctr >= 2 ? ":d" : "", "}");

      // Display the headers.
      Console.WriteLine(fmtString, fields);
      Console.WriteLine();
      // Display the data.
      foreach (var e in employees)
         Console.WriteLine(fmtString, e.Item1, e.Item2, e.Item3, e.Item4);

      Console.ReadLine();
   }

   private static List<Tuple<String, String, DateTime, DateTime>> InitializeData() 
   {
      List<Tuple<String, String, DateTime, DateTime>> employees = new List<Tuple<String, String, DateTime, DateTime>>();
      var t1 = Tuple.Create("John", "16302", new DateTime(1954, 8, 18), new DateTime(2006, 9, 8));
      employees.Add(t1);
      t1 = Tuple.Create("Alice", "19745", new DateTime(1995, 5, 10), new DateTime(2012, 10, 17));
      employees.Add(t1);
      return employees;
   }
}
Imports MyCompany.Employees
Imports System.Collections.Generic

Module Module1

   Sub Main()
      ' Get the data from some data source.
      Dim employees = InitializeData()

      ' Display application title.
      Dim title As String = UILibrary.GetTitle()
      Dim start As Integer = (Console.WindowWidth + title.Length) \ 2
      Dim titlefmt As String = String.Format("{{0,{0}{1}", start, "}")
      Console.WriteLine(titlefmt, title)
      Console.WriteLine()

      ' Retrieve resources.
      Dim fields() As String = UILibrary.GetFieldNames()
      Dim lengths() As Integer = UILibrary.GetFieldLengths()
      Dim fmtString As String = String.Empty
      ' Create format string for field headers and data.
      For ctr = 0 To fields.Length - 1
         fmtString += String.Format("{{{0},-{1}{2}{3}   ", ctr, lengths(ctr), IIf(ctr >= 2, ":d", ""), "}")
      Next
      ' Display the headers.
      Console.WriteLine(fmtString, fields)
      Console.WriteLine()
      ' Display the data.
      For Each e In employees
         Console.WriteLine(fmtString, e.Item1, e.Item2, e.Item3, e.Item4)
      Next
      Console.ReadLine()
   End Sub

   Private Function InitializeData() As List(Of Tuple(Of String, String, Date, Date))
      Dim employees As New List(Of Tuple(Of String, String, Date, Date))
      Dim t1 = Tuple.Create("John", "16302", #8/18/1954#, #9/8/2006#)
      employees.Add(t1)
      t1 = Tuple.Create("Alice", "19745", #5/10/1995#, #10/17/2012#)
      employees.Add(t1)
      Return employees
   End Function
End Module

Im folgenden Code wird veranschaulicht, wie aus einer App im UILibrary auf die Windows 8.x StoreWindows 8.x Store-Klasse und ihre Ressourcen zugegriffen werden kann.The following code illustrates how the UILibrary class and its resources can be accessed from a Windows 8.x StoreWindows 8.x Store app. Dem Windows Store-App-Projekt muss ein Verweis auf UILIbrary.dll hinzugefügt werden.It requires a reference to UILIbrary.dll to be added to the Windows Store app project.

using System;
using System.Collections.Generic;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using MyCompany.Employees;

namespace ConsumerCS
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class BlankPage : Page
    {
        public BlankPage()
        {
            this.InitializeComponent();

         }

        /// <summary>
        /// Invoked when this page is about to be displayed in a Frame.
        /// </summary>
        /// <param name="e">Event data that describes how this page was reached.  The Parameter
        /// property is typically used to configure the page.</param>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
           Example.DisplayData(outputBlock);
       }
    }
}

public class Example
{
    static public void DisplayData(Windows.UI.Xaml.Controls.TextBlock outputBlock)
    {
        // Get the data from some data source.
        var employees = InitializeData();
        outputBlock.FontFamily = new FontFamily("Courier New");      
        // Display application title.
        string title = UILibrary.GetTitle();
        outputBlock.Text += title + Environment.NewLine + Environment.NewLine;

        // Retrieve resources.
        string[] fields = UILibrary.GetFieldNames();
        int[] lengths = UILibrary.GetFieldLengths();
        string fmtString = String.Empty;
        // Create format string for field headers and data.
        for (int ctr = 0; ctr < fields.Length; ctr++)
            fmtString += String.Format("{{{0},-{1}{2}{3}   ", ctr, lengths[ctr], ctr >= 2 ? ":d" : "", "}");

        // Display the headers.
        outputBlock.Text += String.Format(fmtString, fields) + Environment.NewLine + Environment.NewLine;
        // Display the data.
        foreach (var e in employees)
            outputBlock.Text += String.Format(fmtString, e.Item1, e.Item2, e.Item3, e.Item4) + Environment.NewLine;
    }

    private static List<Tuple<String, String, DateTime, DateTime>> InitializeData()
    {
        List<Tuple<String, String, DateTime, DateTime>> employees = new List<Tuple<String, String, DateTime, DateTime>>();
        var t1 = Tuple.Create("John", "16302", new DateTime(1954, 8, 18), new DateTime(2006, 9, 8));
        employees.Add(t1);
        t1 = Tuple.Create("Alice", "19745", new DateTime(1995, 5, 10), new DateTime(2012, 10, 17));
        employees.Add(t1);
        return employees;
    }
}

Beispiel: Portable KlassenbibliothekPortable Class Library mit LokalisierungExample: Localized Portable KlassenbibliothekPortable Class Library

Das folgende Beispiel für Portable KlassenbibliothekPortable Class Library mit Lokalisierung enthält Ressourcen für die Kulturen Französisch (Frankreich) und Englisch (USA).The following localized Portable KlassenbibliothekPortable Class Library example includes resources for the French (France) and English (United States) cultures. Die Kultur Englisch (Vereinigte Staaten) ist die Standardkultur der app; Ihre Ressourcen werden angezeigt, in der Tabelle in der vorherigen Abschnitt.The English (United States) culture is the app's default culture; its resources are shown in the table in the previous section. Die Ressourcendatei für die Kultur Französisch (Frankreich) hat den Namen LibResources.fr-FR.resx, und sie besteht aus den Zeichenfolgenressourcen in der folgenden Tabelle.The resources file for the French (France) culture is named LibResources.fr-FR.resx and consists of the string resources listed in the following table. Der Quellcode für die UILibrary-Klasse ist mit dem Quellcode im vorherigen Abschnitt identisch.The source code for the UILibrary class is the same as that shown in the previous section.

RessourcennameResource name RessourcenwertResource value
BornBorn Date de naissanceDate de naissance
BornLengthBornLength 2020
HiredHired Date embauchéDate embauché
HiredLengthHiredLength 1616
IDID IDID
NameName NomNom
TitelTitle Base de données des employésBase de données des employés

Im folgenden Code wird veranschaulicht, wie aus einer App im Konsolenmodus auf die UILibrary-Klasse und ihre Ressourcen zugegriffen werden kann.The following code illustrates how the UILibrary class and its resources can be accessed from a console-mode app. Dem Konsolen-App-Projekt muss ein Verweis auf UILIbrary.dll hinzugefügt werden.It requires a reference to UILIbrary.dll to be added to the console app project.

using System;
using System.Collections.Generic;
using System.Globalization;

using MyCompany.Employees;
 
class Program
{
   static void Main(string[] args)
   {
     
      // Get the data from some data source.
      var employees = InitializeData();

      // Display application title.
      string title = UILibrary.GetTitle();
      int start = (Console.WindowWidth + title.Length) / 2;
      string titlefmt = String.Format("{{0,{0}{1}", start, "}");
      Console.WriteLine(titlefmt, title);
      Console.WriteLine();

      // Retrieve resources.
      string[] fields = UILibrary.GetFieldNames();
      int[] lengths = UILibrary.GetFieldLengths();
      string fmtString = String.Empty;
      // Create format string for field headers and data.
      for (int ctr = 0; ctr < fields.Length; ctr++)
         fmtString += String.Format("{{{0},-{1}{2}{3}   ", ctr, lengths[ctr], ctr >= 2 ? ":d" : "", "}");

      // Display the headers.
      Console.WriteLine(fmtString, fields);
      Console.WriteLine();
      // Display the data.
      foreach (var e in employees)
         Console.WriteLine(fmtString, e.Item1, e.Item2, e.Item3, e.Item4);

      Console.ReadLine();
   }

   private static List<Tuple<String, String, DateTime, DateTime>> InitializeData() 
   {
      List<Tuple<String, String, DateTime, DateTime>> employees = new List<Tuple<String, String, DateTime, DateTime>>();
      var t1 = Tuple.Create("John", "16302", new DateTime(1954, 8, 18), new DateTime(2006, 9, 8));
      employees.Add(t1);
      t1 = Tuple.Create("Alice", "19745", new DateTime(1995, 5, 10), new DateTime(2012, 10, 17));
      employees.Add(t1);
      return employees;
   }

}
Imports MyCompany.Employees
Imports System.Collections.Generic
Imports System.Globalization
Imports System.Threading

Module Module1
   Sub Main()
      Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture("fr-FR")
      Thread.CurrentThread.CurrentCulture = culture
      Thread.CurrentThread.CurrentUICulture = culture
      Console.WriteLine("Current culture is {0}", CultureInfo.CurrentCulture.Name)

      ' Get the data from some data source.
      Dim employees = InitializeData()

      ' Display application title.
      Dim title As String = UILibrary.GetTitle()
      Dim start As Integer = (Console.WindowWidth + title.Length) \ 2
      Dim titlefmt As String = String.Format("{{0,{0}{1}", start, "}")
      Console.WriteLine(titlefmt, title)
      Console.WriteLine()

      ' Retrieve resources.
      Dim fields() As String = UILibrary.GetFieldNames()
      Dim lengths() As Integer = UILibrary.GetFieldLengths()
      Dim fmtString As String = String.Empty
      ' Create format string for field headers and data.
      For ctr = 0 To fields.Length - 1
         fmtString += String.Format("{{{0},-{1}{2}{3}   ", ctr, lengths(ctr), IIf(ctr >= 2, ":d", ""), "}")
      Next
      ' Display the headers.
      Console.WriteLine(fmtString, fields)
      Console.WriteLine()
      ' Display the data.
      For Each e In employees
         Console.WriteLine(fmtString, e.Item1, e.Item2, e.Item3, e.Item4)
      Next
      Console.ReadLine()
   End Sub

   Private Function InitializeData() As List(Of Tuple(Of String, String, Date, Date))
      Dim employees As New List(Of Tuple(Of String, String, Date, Date))
      Dim t1 = Tuple.Create("John", "16302", #8/18/1954#, #9/8/2006#)
      employees.Add(t1)
      t1 = Tuple.Create("Alice", "19745", #5/10/1995#, #10/17/2012#)
      employees.Add(t1)
      Return employees
   End Function
End Module

Im folgenden Code wird veranschaulicht, wie aus einer App im UILibrary auf die Windows 8.x StoreWindows 8.x Store-Klasse und ihre Ressourcen zugegriffen werden kann.The following code illustrates how the UILibrary class and its resources can be accessed from a Windows 8.x StoreWindows 8.x Store app. Dem Windows Store-App-Projekt muss ein Verweis auf UILIbrary.dll hinzugefügt werden.It requires a reference to UILIbrary.dll to be added to the Windows Store app project. Mit der statischen ApplicationLanguages.PrimaryLanguageOverride-Eigenschaft wird die bevorzugte Sprache der App auf Französisch festgelegt.It uses the static ApplicationLanguages.PrimaryLanguageOverride property to set the app's preferred language to French.

using System;
using System.Collections.Generic;
using Windows.Globalization;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using MyCompany.Employees;

namespace LocConsumerCS
{
    public sealed partial class BlankPage : Page
    {
        public BlankPage()
        {
            this.InitializeComponent();

        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            Example.Demo(outputBlock);
        }
    }

    public class Example
    {
        public static void Demo(TextBlock outputBlock)
        {
            // Set the application preferences.
            ApplicationLanguages.PrimaryLanguageOverride = "fr-FR";

            // Get the data from some data source. 
            var employees = InitializeData();
            outputBlock.FontFamily = new FontFamily("Courier New");
            // Display application title.
            string title = UILibrary.GetTitle();
            outputBlock.Text += title + Environment.NewLine + Environment.NewLine; 

            // Retrieve resources.
            string[] fields = UILibrary.GetFieldNames();
            int[] lengths = UILibrary.GetFieldLengths();
            string fmtString = String.Empty;
            // Create format string for field headers and data.
            for (int ctr = 0; ctr < fields.Length; ctr++)
                fmtString += String.Format("{{{0},-{1}{2}{3}   ", ctr, lengths[ctr], ctr >= 2 ? ":d" : "", "}");

            // Display the headers.
            outputBlock.Text += String.Format(fmtString, fields) + Environment.NewLine + Environment.NewLine;

            // Display the data.
            foreach (var e in employees)
                outputBlock.Text += String.Format(fmtString, e.Item1, e.Item2, e.Item3, e.Item4) + Environment.NewLine;
        }

        private static List<Tuple<String, String, DateTime, DateTime>> InitializeData()
        {
            List<Tuple<String, String, DateTime, DateTime>> employees = new List<Tuple<String, String, DateTime, DateTime>>();
            var t1 = Tuple.Create("John", "16302", new DateTime(1954, 8, 18), new DateTime(2006, 9, 8));
            employees.Add(t1);
            t1 = Tuple.Create("Alice", "19745", new DateTime(1995, 5, 10), new DateTime(2012, 10, 17));
            employees.Add(t1);
            return employees;
        }
    }
}
Imports Windows.Globalization
Imports MyCompany.Employees

Public NotInheritable Class BlankPage
    Inherits Page

    Protected Overrides Sub OnNavigatedTo(e As Navigation.NavigationEventArgs)
        Example.Demo(outputBlock)
    End Sub
End Class

Public Class Example
    Public Shared Sub Demo(outputBlock As Windows.UI.Xaml.Controls.TextBlock)
        ' Set the application preferences.
        ApplicationLanguages.PrimaryLanguageOverride = "fr-FR"

        ' Get the data from some data source. 
        Dim employees = InitializeData()
        outputBlock.FontFamily = New FontFamily("Courier New")
        ' Display application title.
        Dim title As String = UILibrary.GetTitle()
        outputBlock.Text += title + vbCrLf + vbCrLf

        ' Retrieve resources.
        Dim fields() As String = UILibrary.GetFieldNames()
        Dim lengths() As Integer = UILibrary.GetFieldLengths()
        Dim fmtString As String = String.Empty
        ' Create format string for field headers and data.
        For ctr = 0 To fields.Length - 1
            fmtString += String.Format("{{{0},-{1}{2}{3}   ", ctr, lengths(ctr), If(ctr >= 2, ":d", ""), "}")
        Next
        ' Display the headers.
        outputBlock.Text += String.Format(fmtString, fields) + vbCrLf + vbCrLf

        ' Display the data.
        For Each e In employees
            outputBlock.Text += String.Format(fmtString, e.Item1, e.Item2, e.Item3, e.Item4) + vbCrLf
        Next
    End Sub

    Private Shared Function InitializeData() As List(Of Tuple(Of String, String, Date, Date))
        Dim employees As New List(Of Tuple(Of String, String, Date, Date))
        Dim t1 = Tuple.Create("John", "16302", #8/18/1954#, #9/8/2006#)
        employees.Add(t1)
        t1 = Tuple.Create("Alice", "19745", #5/10/1995#, #10/17/2012#)
        employees.Add(t1)
        Return employees
    End Function
End Class

Siehe auchSee Also

ResourceManager
Ressourcen in Desktop-AppsResources in Desktop Apps
Verpacken und Bereitstellen von RessourcenPackaging and Deploying Resources