Partilhar via


Criando e recuperando recursos em aplicativos da Windows Store

O sistema operacional Windows 8 apresenta um novo modelo de recurso para aplicativos Windows Store que substitui o modelo hub e spoke comum dos apps da área de trabalho do .NET Framework. Este tópico discute esse novo modelo de recurso e explica como criar, implantar, e recuperar recursos em apps de Windows Store.

Recursos em apps de Windows Store

Os apps da área de trabalho do .NET Framework usam um modelo hub e spoke para empacotar e implantar recursos. Normalmente, os recursos para a cultura neutra de app (a cultura cujos os recursos são usados se nenhum recurso localizado estiver disponível) são inseridos ao executável principal do app. Os recursos localizados para cada cultura adicional são inseridos em uma assembly satélite autônoma que contém somente os recursos e nenhum código executável.

Em contraste, os apps de Windows Store usam um único arquivo de recurso. Esse arquivo é denominado como um arquivo de índice (PRI) e armazena os recursos para todos os idiomas, culturas, e fatores de dimensionamento.

Importante

As regras de fallback de recurso determinam quais recursos são carregados se os recursos localizados para uma cultura específica ou a cultura atual não podem ser localizados.

Em apps da área de trabalho, você pode usar arquivos de texto ou arquivos XML (.resx) para criar recursos. O gerador de Arquivo de recurso (Resgen.exe) é usado para compilar esses arquivos em arquivos binários de recursos (.resources). Você usa o compilador para inserir os recursos de cultura neutra na assembly principal do app, e usa o O assembly linker (AL.exe) para inserir todos os outros recursos localizados em outras assemblies satélite. Você pode então recuperar recursos individuais usando a classe de System.Resources.ResourceManager ou enumerar recursos usando a classe de ResourceReader.

Em apps de Windows Store, você usa arquivos .resw para criar recursos. Independente da diferença de extensão do arquivo, o formato de arquivo .resw é idêntico ao formato de arquivo .resx, exceto que os arquivos .resw podem conter somente cadeias de caracteres e caminhos de arquivo. Você pode usar o editores de recurso do Visual Studio para criar e editar recursos. Em tempo de compilação, todos os arquivos .resw para uma app são compactados em um arquivo PRI único pelo utilitário de MakePRI e incluídos com o pacote de implantação do app. Em tempo de execução, as classe e tipos no Windows.ApplicationModel.Resources.ResourceLoader Windows.ApplicationModel.Resources.Core no namespace oferecem acesso aos recursos do app.

Importante

Embora o gerador de Arquivo de recurso (Resgen.exe) é principalmente para uso em apps da área de trabalho, você também pode usar essa ferramenta para descompilar assemblies satélites em arquivos .resw, que podem ser compilados em um arquivo PRI.

Aviso

Embora a classe de System.Resources.ResourceManager esteja incluída em .NET para aplicativos da Windows Store, não recomendamos seu uso. Use ResourceManager somente nas bibliotecas que são desenvolvidas como projetos de Biblioteca de Classes Portátil e que objetivam múltiplas plataformas.

Criando arquivos de recurso

Os editores de recurso do Visual Studio fornecem a maneira mais fácil e mais conveniente de criar um arquivo .resw. Esses editores fornecem uma interface do usuário que oculta o formato de arquivo XML subjacente do arquivo .resw. Usar o Visual Studio para criar e editar um arquivo de recurso possui duas vantagens principais:

  • Elimina a necessidade de criar manualmente um arquivo de recurso e para garantir que o formato XML seja válido.

  • Gerencia o processo de usar o utilitário MakePRI para compilar o recurso, para empacotar-lo em um arquivo PRI e para incluí-lo no pacote de implantação do app.

Em apps da área de trabalho, você usa o atributo NeutralResourcesLanguageAttribute para definir a cultura neutra do app. Em apps de Windows Store, esse atributo é ignorado quando o arquivo PRI é criado e quando a classe ResourceLoader do Windows é usada para extrair recursos.

Em apps de Windows Store, você designa os nomes de arquivos de recurso localizados criando uma pasta para armazenar os recursos e as imagens de uma cultura suportados. Você pode então descrever o recurso usando o nome de cultura (como “ko-kr”) seguido pelo nome do recurso e a extensão de arquivo padrão do recurso (como “ko-kr\Resources.resw”).

Implantando arquivos de recurso

O Visual Studio trata de todos os detalhes de implantação do app para arquivos de recursos que fazem parte de um projeto do Visual Studio. Gera automaticamente um arquivo de configuração para todos os recursos que fazem parte de um projeto, usa a ferramenta MakePRI para incluir os recursos em um único arquivo PRI e coloca o arquivo PRI no pacote de implantação do app.

Como todos os recursos estão incluídos em um único arquivo PRI em vez de uma coleção de arquivos individuais, a modificação de um arquivo de recurso existente ou a adição de suporte para uma nova cultura localizada ao adicionar um arquivo de recurso exige que todo o app inteiro seja reconstruído e redistribuído.

Para recuperar recursos dos arquivos de recursos

Para recuperar recursos em um objeto Windows Store app, you instantiate a Tempo de Execução do Windows Windows.ApplicationModel.Resources.ResourceLoader ou um dos tipos no namespace Windows.ApplicationModel.Resources.Core. Embora a classe .NET Framework System.Resources.ResourceManager é suportada em apps Windows Store, não recomendamos seu uso. Somente use ResourceManager quando você for desenvolver projetos de Biblioteca de Classes Portátil que usam múltiplas plataformas. A tabela a seguir lista os membros ResourceManager e seus equivalentes simples na classe Windows.ApplicationModel.Resources.ResourceLoader ou os tipos no namespace Windows.ApplicationModel.Resources.Core.

Membro de ResourceManager

Membro equivalente do ResourceLoader ou outro tipo de Tempo de Execução do Windows

ResourceManager.GetString(String)

Windows.ApplicationModel.Resources.ResourceLoader.GetString(String)

ResourceManager.GetString(String, CultureInfo)

Windows.ApplicationModel.Resources.Core.ResourceMap.GetValue(String, ResourceContext)

ResourceManager.ResourceManager(String, Assembly)

Windows.ApplicationModel.Resources.ResourceLoader.ResourceLoader()

- ou -

Windows.ApplicationModel.Resources.ResourceLoader.ResourceLoader(String)

Um exemplo simples "Alô Mundo"

Veja a seguir um exemplo simples de um app Windows Store que exibe cadeias de caracteres localizadas. A cultura neutra é Russo (Rússia), mas também inclui recursos para culturas Inglesas (Estados Unidos) e Francesa (França.) Se o app for executado em um sistema cuja cultura atual é Inglesa (Estados Unidos), ele exibe em uma saudação em Inglês; caso contrário, exibe o saudação padrão em Russo. Finalmente, independente da cultura atual, usa Windows.ApplicationModel.Resources.Core.ResourceContext e os objetos Windows.ApplicationModel.Resources.Core.ResourceMap para exibir uma saudação em Francês.

Para exibir a saída para um controle de TextBlock, o exemplo requer a adição da seguinte marcação de <TextBlock> para BlankPage.xaml:

    <Grid Background="{StaticResource PageBackgroundBrush}"> <TextBlock x:Name="outputBlock" /> </Grid>

O código do aplicativo é então chamado do construtor da classe BlankPage como segue:

Public Sub New()

    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.
    Example.Run(outputBlock)
End Sub
public BlankPage()
{

    InitializeComponent();
    Example.Run(outputBlock);
}

O exemplo requer que você crie os seguintes recursos:

  • Um recurso do idioma Russo chamado “Saudação” cujo valor é “Привет!”. A cadeia de caracteres deve ser adicionada a um arquivo de recurso chamado Resources.resw no nível raiz do projeto.

  • Um recurso do idioma Inglês chamado “Saudação” cujo valor é “Oi”. Para criar o arquivo de recurso, adicione uma pasta denominada de en-US ao seu projeto e adicione um arquivo de recurso denominado de Resources.resw na pasta.

  • Um recurso do idioma Francês chamado “Saudação” cujo valor é "Bon Jour!". Para criar o arquivo de recurso, adicione uma pasta denominada de fr-FR ao seu projeto e adicione um arquivo de recurso denominado de Resources.resw na pasta.

O exemplo a seguir exibe as cadeias de caracteres localizadas apropriadas no controle de TextBlock.

Imports System.Globalization
Imports Windows.ApplicationModel.Resources
Imports Windows.ApplicationModel.Resources.Core
Imports Windows.UI.Xaml.Controls

Public Class Example
    Public Shared Sub Run(outputBlock As Windows.UI.Xaml.Controls.TextBlock)
        outputBlock.Text += String.Format("{1}The current culture is {0}.{1}",
                                          CultureInfo.CurrentCulture.Name, vbCrLf)
        Dim rl As ResourceLoader = New ResourceLoader()

        ' Display greeting using the resources of the current culture.
        Dim greeting As String = rl.GetString("Greeting")
        outputBlock.Text += String.Format("{0}{1}",
                                          If(String.IsNullOrEmpty(greeting), "Здрауствуйте", greeting),
                                          vbCrLf)

        ' Display greeting using fr-FR resources.
        Dim ctx As ResourceContext = New Windows.ApplicationModel.Resources.Core.ResourceContext()
        ctx.Languages = {"fr-FR"}

        Dim rmap As ResourceMap = ResourceManager.Current.MainResourceMap.GetSubtree("Resources")
        Dim newGreeting As String = rmap.GetValue("Greeting", ctx).ToString()

        outputBlock.Text += String.Format("{1}{1}Culture of Current Context: {0}{1}",
                                          ctx.Languages(0), vbCrLf)
        outputBlock.Text += String.Format("{0}{1}", If(String.IsNullOrEmpty(newGreeting),
                                                       greeting, newGreeting), vbCrLf)
    End Sub
End Class
using System;
using System.Globalization;
using Windows.ApplicationModel.Resources;
using Windows.ApplicationModel.Resources.Core;
using Windows.UI.Xaml.Controls;

public class Example
{
    public static void Run(Windows.UI.Xaml.Controls.TextBlock outputBlock)
    {
        outputBlock.Text += String.Format("\nThe current culture is {0}.\n", CultureInfo.CurrentCulture.Name);
        ResourceLoader rl = new ResourceLoader();

        // Display greeting using the resources of the current culture.
        string greeting = rl.GetString("Greeting");
        outputBlock.Text += String.Format("{0}\n", String.IsNullOrEmpty(greeting) ? "Здрауствуйте" :  greeting);


        // Display greeting using fr-FR resources.
        ResourceContext ctx = new Windows.ApplicationModel.Resources.Core.ResourceContext();
        ctx.Languages =  new string[] { "fr-FR" } ;

        ResourceMap rmap = ResourceManager.Current.MainResourceMap.GetSubtree("Resources");
        string newGreeting = rmap.GetValue("Greeting", ctx).ToString();

        outputBlock.Text += String.Format("\n\nCulture of Current Context: {0}\n", ctx.Languages[0]);
        outputBlock.Text += String.Format("{0}\n", String.IsNullOrEmpty(newGreeting) ? greeting : newGreeting);

    }
}

Quando você compila e executa o aplicativo, ele exibe a saída como a seguinte em um sistema cuja é cultura é en-us.

The current culture is en-US. Hi there! Culture of Current Context: fr-FR Bonjour!

Consulte também

Referência

Editores de recursos do Visual Studio

Conceitos

Recursos em aplicativos de Desktop