Pergunta

Estou tendo um pouco de problemas para obter arquivos de recursos localizados para trabalhar no Windows Phone 7. Aqui está o que estou fazendo:

  1. Crie um arquivo de recurso, diga "strings.resx" (Build Action: Compile)
  2. Crie uma chave, digamos "TestKey" com um valor padrão da string vazia
  3. Adicione um arquivo de recurso em inglês na mesma pasta com um valor de "alguma string em inglês": strings.en-us.resx (Build Ação: Recurso incorporado)
  4. Adicione um arquivo de recurso japonês na mesma pasta com um valor de "alguma string japonesa": strings.ja-jp.resx (Build Ação: Recurso incorporado)

No meu PC Silverlight, aplicativos WPF que funcionam bem quando eu troco o thread.CurrentThread.CurrentCulture. Mas no telefone eu sempre pareço estar obtendo o valor que está no arquivo strings.resx - uma string vazia.

Eu tentei usar o código gerado pelo designer e a fiação do gerente de recursos manualmente e isso não parece importar. Aqui está o meu código:

            Type t = typeof(Strings);

            _resourceManager = new ResourceManager(
                t.Namespace + "." + t.Name,
                t.Assembly);

            _resourceManager.GetString("TestKey");

Diga -me que os recursos localizados são suportados no telefone ...;> O que estou fazendo de errado? Obrigado!

Atualizar: Obrigado Olivier por encaminhar o link. Eu vi isso também, mas perdi um passo importante. Não adicionei o nó "SuportedCultures" ao meu CSProj. Fez toda a diferença - esperando que alguém não perca duas horas tentando descobrir isso como eu.

<SupportedCultures>de-DE;es-ES;</SupportedCultures>
Foi útil?

Solução

Eu escrevi um post de blog que fornece links para um monte de Guias de globalização / localização para WP7. Existe um Windows Phone 7 em 7 Vídeo de Treinamento Isso me ajudou a entender o básico. Depois disso, foi simplesmente uma questão de aprender a fazer o banco de dados:

O artigo do MSDN mostra como configurar os arquivos e criar a classe LocalizedStrings, mas eles assumem que você sabe como usar essa classe para ligação de dados. O Visual Studio 2010 e o Silverlight manipulam a ligação de dados de maneira diferente das Winforms, e fica ainda mais confuso, pois a XAML também possui sua própria definição de recursos diferentes do que os recursos .NET que acabamos de criar. O Silverlight também usa o termo recurso para se referir a arquivos que usam a ação de construção de "Conteúdo", pois esses arquivos são envolvidos no arquivo .xap semelhante à maneira como os arquivos com a ação de construção de "recurso" são incorporados ao conjunto .dll (Ex: carregando uma imagem de arquivos de conteúdo ou recurso). Descobri que, em vez de usar o texto = "{Caminho de ligação = ResourceFile.ResourceName, Source = {staticResource LocalizedResources}}" Xaml Sintaxe, era mais fácil usar as seguintes etapas:

  1. Abra sua página XAML primária (geralmente mainpage.xaml) no designer do Visual Studio

  2. Abra as propriedades para o PhoneApplicationPage e defina o DataContext como Application.Resources -> LocalizedStrings. NOTA: Se você já está usando um objeto DataContext, integrar a classe LocalizedStrings nesse objeto para que ele tenha suporte de localização.

  3. Depois que o datacontext da página estiver definido, você pode alterar a ligação de dados para qualquer controle da página, simplesmente selecionando a propriedade (ex: texto, verificado etc.), selecionando “Aplicar a ligação de dados…” e definir o caminho para localizedResources.btntext ou qualquer que seja o nome do valor de recurso desejado.

Outras dicas

Obviamente, recursos localizados são suportados no telefone:

Como: construir um aplicativo localizado para o Windows Phone

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top