Em um dos treinamentos oficiais que ministro é abordado sobre globalização de aplicações. O capítulo foca nos tipos fornecidos pelo namespace System.Globalization, detalhando suas classes e como podemos utilizá-las para tornar o código independente de cultura.
Como o curso foca no .NET Framework e não na tecnologia, como ASP.NET ou Windows Forms, eu tento mostrar como isso funciona nas aplicações Web e Windows. Durante esse capítulo, uma pergunta que me foi feita é como efetuar a globalização de arquivos *.sitemap, que são utilizados pelos controles do ASP.NET para carregar Menus, Treeviews, etc.
Basicamente o que precisa ser feito é a criação do arquivo *.resx que representa a cultura, e lembrando que voce deve criar a quantidade necessária para todas as culturas suportadas pela aplicação. Neste caso, eu sugiro nomear os arquivos como: Sitemap.resx (default), Sitemap.en-US.resx, etc., e como eles serão utilizados por toda a aplicação, ficarão armazenados no diretório especial chamado App_GlobalResources. Dentro deste arquivo, como já é sabido, existe um dicionário (chave/valor). A chave identifica aquele valor unicamente dentro do arquivo, e será utilizada pela aplicação; já o valor é o variação para aquela cultura que o arquivo representa.
Depois de criado os arquivos *.resx, precisamos fazer com que o arquivo *.sitemap faça uso destas informações. Com isso, o atributo title do elemento siteMapNode não deve ter o título em hardcode, como acontece em aplicações não globalizadas. Ele utilizará um Expression Builder chamado $resources para dizer ao runtime do ASP.NET que esse valor será extraído de um arquivo de recurso. O que está em azul no exemplo abaixo reflete o nome do arquivo *.resx, enquanto o que está em vermelho é a chave.
<siteMapNode
url=”~/AreaRestrita/Cadastros/Colaboradores/Default.aspx”
title=”$resources:Sitemap, Colaboradores“
roles=”Cliente.Administrador” />