Partilhar via


Noções básicas sobre a localização do AJAX ASP.NET

por Scott Cate

A localização é o processo de criação e integração de suporte para uma linguagem e cultura específicas em um aplicativo ou componente de aplicativo. A plataforma microsoft ASP.NET fornece amplo suporte para localização para aplicativos de ASP.NET padrão integrando o modelo de localização padrão do .NET; O Microsoft AJAX Framework utiliza o modelo integrado para dar suporte aos diversos cenários em que a localização pode ser executada.

Introdução

A tecnologia ASP.NET da Microsoft traz um modelo de programação orientado a objetos e orientado a eventos e o une com os benefícios do código compilado. No entanto, seu modelo de processamento do lado do servidor tem várias desvantagens inerentes à tecnologia, muitas das quais podem ser abordadas pelos novos recursos incluídos no namespace System.Web.Extensions, que encapsula os Serviços Microsoft AJAX no .NET Framework 3.5. Essas extensões permitem muitos recursos avançados do cliente, anteriormente disponíveis como parte das Extensões AJAX do ASP.NET 2.0, mas agora fazem parte da Biblioteca de Classes Base da Estrutura. Os controles e recursos nesse namespace incluem a renderização parcial de páginas sem a necessidade de uma atualização de página inteira, a capacidade de acessar serviços Web por meio de script de cliente (incluindo a API de criação de perfil de ASP.NET) e uma ampla API do lado do cliente projetada para espelho muitos dos esquemas de controle vistos no conjunto de controle do lado do servidor ASP.NET.

Este white paper examina os recursos de localização presentes no Microsoft AJAX Framework e na Biblioteca de Scripts do Microsoft AJAX, no contexto da necessidade empresarial de suporte à localização e da revisão do suporte já integrado para localização em aplicativos Web fornecidos pelo .NET Framework. A Biblioteca de Scripts do Microsoft AJAX utiliza o formato de arquivo .resx já usado por aplicativos .NET, que fornece suporte integrado ao IDE e um tipo de recurso compartilhável.

Esse white paper é baseado na versão Beta 2 do Microsoft Visual Studio 2008. Esse white paper também pressupõe que você trabalhará com o Visual Studio 2008, não com o Visual Web Developer Express e fornecerá instruções passo a passo de acordo com a interface do usuário do Visual Studio. Alguns exemplos de código utilizarão modelos de projeto que podem não estar disponíveis no Visual Web Developer Express.

A necessidade de localização

Especialmente para desenvolvedores de aplicativos empresariais e desenvolvedores de componentes, a capacidade de criar ferramentas que possam estar cientes das diferenças entre culturas e linguagens tornou-se cada vez mais necessária. A criação de componentes com a capacidade de se adaptar à localidade do cliente aumenta a produtividade do desenvolvedor e reduz a quantidade de trabalho necessária para que a adaptação de um componente funcione globalmente.

A localização é o processo de criação e integração de suporte para uma linguagem e cultura específicas em um aplicativo ou componente de aplicativo. A plataforma microsoft ASP.NET fornece amplo suporte para localização para aplicativos de ASP.NET padrão integrando o modelo de localização padrão do .NET; O Microsoft AJAX Framework utiliza o modelo integrado para dar suporte aos diversos cenários em que a localização pode ser executada. Com o Microsoft AJAX Framework, os scripts podem ser localizados sendo implantados em assemblies satélites ou utilizando uma estrutura estática do sistema de arquivos.

Inserindo scripts com assemblies satélites

Consistente com a estratégia de localização de .NET Framework padrão, os recursos podem ser incluídos em assemblies satélites. Assemblies satélite fornecem várias vantagens sobre a inclusão de recursos tradicionais em binários – qualquer localização específica pode ser atualizada sem atualizar a imagem maior, localizações adicionais podem ser implantadas simplesmente instalando assemblies satélites na pasta do projeto e assemblies satélites podem ser implantados sem causar um recarregamento do assembly do projeto main. Particularmente em projetos ASP.NET, isso é benéfico porque pode reduzir significativamente a quantidade de recursos do sistema usados por atualizações incrementais e interrompe minimamente o uso do site de produção.

Os scripts são inseridos em assemblies incluindo-os em arquivos .resx gerenciados (ou .resources compilados), que são incluídos no assembly em tempo de compilação. Em seguida, seus recursos são disponibilizados para o aplicativo de script por meio do código gerado por runtime do AJAX, por meio de atributos no nível do assembly

Convenções de nomenclatura para arquivos de script inseridos

O gerenciamento de scripts do Microsoft AJAX Framework dá suporte a uma variedade de opções para uso na implantação e teste de scripts, e diretrizes são fornecidas para facilitar essas opções.

Para facilitar a depuração:

Os scripts de versão (produção) não devem incluir o .debug qualificador no nome do arquivo. Os scripts projetados para depuração devem incluir .debug no nome do arquivo.

Para facilitar a localização:

Os scripts de cultura neutra não devem incluir nenhum identificador de cultura no nome do arquivo. Para scripts que contêm recursos localizados, o código de idioma ISO deve ser especificado no nome do arquivo. Por exemplo, es-CO significa espanhol, Columbia.

A tabela a seguir resume as convenções de nomenclatura de arquivo com exemplos:

Nome de arquivo Significado
Script.js Um script de versão de versão neutra em termos de cultura.
Script.debug.js Um script neutro de cultura de versão de depuração.
Script.en-US.js Uma versão de lançamento em inglês, Estados Unidos script.
Script.debug.es-CO.js Um script de Columbia em espanhol de versão de depuração.

Passo a passo: criar um script localizado e inserido

Observação: este passo a passo requer o uso do Visual Studio 2008, pois o Visual Web Developer Express não inclui um modelo de projeto para projetos de biblioteca de classes.

  1. Crie um novo projeto de Site com ASP.NET Extensões AJAX integradas. Crie outro projeto, um projeto de Biblioteca de Classes, dentro da solução chamada LocalizingResources.
  2. Adicione um arquivo Jscript chamado VerifyDeletion.js ao projeto LocalizingResources, bem como arquivos de recursos .resx chamados DeletionResources.resx e DeletionResources.es.resx. O primeiro conterá recursos neutros de cultura; este último conterá recursos de idioma espanhol.
  3. Adicione o seguinte código ao VerifyDeletion.js:
function VerifyDeletion(fileName)
{
 if (confirm(Message.VerifyDelete.replace(/FILENAME/, fileName)))
 {
 Delete(fileName);
 return true;
 }
 return false;
}
function Delete(fileName)
{
 alert (Message.Deleted.replace(/FILENAME/, fileName));
}

Para aqueles que não estão familiarizados com a sintaxe Regex do JavaScript, o texto em barras simples (no exemplo anterior, /FILENAME/ é um exemplo) indica um objeto RegExp. O Biblioteca MSDN contém uma referência abrangente de JavaScript e os recursos em objetos nativos do JavaScript podem ser encontrados online.

  1. Adicione as seguintes cadeias de caracteres de recurso a DeletionResources.resx:

    VerifyDelete: tem certeza de que deseja excluir FILENAME?

    Excluído: FILENAME foi excluído.

  2. Adicione as seguintes cadeias de caracteres de recurso a DeletionResources.es.resx:

    VerifyDelete: Est seguro que desee quitar FILENAME?

    Excluído: FILENAME se ha quitado.

  3. Adicione as seguintes linhas de código ao arquivo AssemblyInfo:

[assembly: System.Web.UI.WebResource("LocalizingResources.VerifyDeletion.js",
 "text/javascript")]
[assembly: System.Web.UI.ScriptResource("LocalizingResources.VerifyDeletion.js",
 "LocalizingResources.DeletionResources", "Message")]
  1. Adicione referências a System.Web e System.Web.Extensions ao projeto LocalizingResources.
  2. Adicione uma referência ao projeto LocalizingResources do projeto site.
  3. Em default.aspx, no projeto Site, atualize o controle ScriptManager com a seguinte marcação adicional:
<asp:ScriptManager ID="ScriptManager1" runat="server" EnableScriptLocalization="true">
 <Scripts>
 <asp:ScriptReference Assembly="LocalizingResources" Name="LocalizingResources.VerifyDeletion.js"/>
 </Scripts>
</asp:ScriptManager>
  1. Em default.aspx, em qualquer lugar da página, inclua esta marcação:
<asp:Button ID="btnDelete" runat="Server" OnClientClick="VerifyDeletion('a.txt');" Text="Delete" />
  1. Pressione F5. Se solicitado, habilite a depuração. Quando a página for carregada, pressione o botão Excluir. Observe que você será solicitado em inglês (a menos que seu computador esteja definido para preferir recursos em espanhol por padrão) para confirmação.
  2. Feche a janela do navegador e retorne para default.aspx. Na diretiva de @Page cabeçalho, substitua automaticamente por Culture e UICulture por es-ES. Pressione F5 novamente para iniciar o aplicativo Web no navegador novamente. Desta vez, observe que você será solicitado a excluir o arquivo em espanhol:

Captura de tela que mostra uma caixa de diálogo de Explorer da Internet do Windows com um prompt de idioma espanhol para clicar em Ok.

(Clique para exibir a imagem em tamanho real)

Captura de tela que mostra um prompt para excluir o arquivo em espanhol.

(Clique para exibir a imagem em tamanho real)

Observe que há várias variações para este passo a passo. Por exemplo, os scripts podem ser registrados com o controle ScriptManager programaticamente durante o carregamento da página.

Incluindo uma estrutura de arquivo de script estático

Ao usar arquivos de script estático para implantação, você perde alguns dos benefícios de usar o esquema de localização inerente do .NET. Principalmente visível é que você perde o tipo automático gerado com a inclusão de arquivos de recurso de script; no passo a passo acima, por exemplo, os recursos foram expostos por um tipo gerado automaticamente chamado Message do controle ScriptManager.

No entanto, há alguns benefícios em usar uma estrutura de arquivo de script estático. Atualizações pode ser executado sem recompilar e reimplantar assemblies satélites, e o uso de uma estrutura de arquivos estáticos também pode ser feito para substituir o script inserido, para integrar uma pequena parte da funcionalidade que pode não ter sido enviada com um componente.

A Microsoft recomenda evitar um problema de controle de versão gerando automaticamente seus recursos de script durante a compilação do projeto. Ao manter uma extensa base de código de script, pode se tornar cada vez mais difícil garantir que as alterações de código sejam refletidas em cada script localizado. Como alternativa, você pode simplesmente manter um script lógico e vários scripts de localização, mesclando os arquivos durante a criação do projeto.

Como não há recursos para incluir declarativamente, os arquivos de script estáticos devem ser referenciados adicionando <asp:ScriptElement> elementos como um filho da <Scripts> marca do controle ScriptManager ou adicionando ScriptReference objetos programaticamente à Scripts propriedade do ScriptManager controle na página em runtime.

O ScriptManager e sua função na localização

O ScriptManager habilita vários comportamentos automáticos para aplicativos localizados:

  • Ele localiza automaticamente arquivos de script com base em configurações e convenções de nomenclatura; por exemplo, ele carrega scripts habilitados para depuração no modo de depuração e carrega scripts localizados com base na seleção da interface do usuário do navegador.
  • Ele habilita a definição de culturas, incluindo culturas personalizadas.
  • Ele habilita a compactação de arquivos de script por HTTP.
  • Ele armazena em cache scripts para gerenciar com eficiência muitas solicitações.
  • Ele adiciona uma camada de indireção aos scripts canalizando-os por meio de uma URL criptografada.

As referências de script podem ser adicionadas ao controle ScriptManager programaticamente ou por marcação declarativa. A marcação declarativa é particularmente útil ao trabalhar com scripts inseridos em assemblies diferentes do próprio projeto do site, pois o nome do script provavelmente não será alterado à medida que as revisões forem enviadas por push.

Resumo

À medida que os aplicativos Web crescem para alcançar um público maior, a necessidade de alcançar culturas e comunidades mais amplas torna-se fundamental para um modelo de negócios; Os aplicativos Web de comércio eletrônico precisam ser capazes de lidar com moedas estrangeiras, os sistemas de gerenciamento de conteúdo precisam ser capazes de não apenas apresentar seu conteúdo, mas também suas dicas de navegação e campos de formulário em outros idiomas, e as empresas precisam saber que essa necessidade está acessível.

O .NET Framework dá suporte intrinsecamente a uma estrutura de localização avançada, utilizando assemblies satélites e arquivos de recurso XML (.resx) para apresentar uma maneira uniforme de pesquisar cadeias de caracteres e imagens de recursos. As extensões ASP.NET AJAX, incluindo o Microsoft AJAX Framework e a Biblioteca de Scripts do Microsoft AJAX, dão suporte para esse modelo de programação no código do lado do cliente, permitindo pesquisas fáceis de cadeia de caracteres de recursos. Assemblies satélite dão suporte à inclusão automática de recursos de script (arquivos .js reais) por meio de ScriptResource.axd, desde que os nomes de arquivo sigam um determinado esquema de nomenclatura. Com esse suporte, as extensões ASP.NET AJAX simplificam a localização de scripts e a globalização de aplicativos.

Biografia

Scott Cate trabalha com tecnologias da Microsoft Web desde 1997 e é presidente de myKB.com (www.myKB.com), onde é especialista em escrever aplicativos baseados em ASP.NET focados em soluções de Software de Base de Conhecimento. Scott pode ser contatado por e-mail em scott.cate@myKB.com ou seu blog em ScottCate.com