Seu site em várias línguas
##Parte 1
Olá pessoal, aqui é o Mauricio Junior e eu vou te mostrar como colocar seu site em muitas línguas, até porque a Globalização está presente em países do primeiro mundo e passando para países de terceiro mundo. Existem muitas maneiras, eu vou mostrar uma maneira que o usuário pode escolher a linguagem quer quiser para o site. E usando a linguagem C# com a ferramenta Visual Studio fica muito mais fácil e simples.
Eu já publiquei vários artigos mostrando como colocar seu site em várias línguas, mas esse é diferente porque vou usar o MVC. É um pouco diferente do que já foi mostrado nestes artigos. Veja no site https://www.ecode10.com.
Usando a plataforma MVC (Model View Controller) fica simples e ao mesmo tempo diferente.
Usado
- Ferramenta Visual Studio versão 2017
- Linguagem C#
- Plataforma MVC
- Globalization Resources
A grande notícia é que mudou um pouco a maneira de colocar multi-língua em seu site. Vamos aprender um pouco como fazer.
Planejamento
- Criar um site que contemplam várias línguas;
- Não precisar passar o código da linguagem em várias páginas;
- A página precisa entender e usar o arquivo da língua que eu quero sem precisar mudar o que já está pronto.
Prática
Para funcionar em todas as páginas, é necessário usar algo no arquivo Global.asax que pode ser lido em qualquer parte do código. Para as páginas pegarem os valores, seria bom utilizar um cookie com o valor e o arquivo global pode ser no momento que ele quiser para mudar a cultura do site.
Arquivo Global.asax
Existe um método dentro do arquivo Global.asax que pode ser usado a cada requisição. Ele não vem no código, é necessário criar ele. Mas é bem simples. O nome do método é Application_BeginRequest, veja o código 1.1. Após ler o código, veja os comentários logo abaixo.
Código: 1.1 - Global.asax
protected void Application_BeginRequest(object sender, EventArgs e)
{
//using for language on the system
HttpCookie cookie = HttpContext.Current.Request.Cookies["Language"];
if (cookie != null && cookie.Value != null)
{
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cookie.Value);
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(cookie.Value);
}
else
{
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("pt");
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("pt");
}
}
O primeiro passo é ler o cookie criado em alguma classe, cujo ainda não criamos. Depois é bom verificar se ele é diferente de null. Se for diferente, eu vou informar qual a globalização assume o site e o que tem dentro do cookie, pode ser PT, EN, CH ou outros.
Caso o valor do cookie for null, é necessário informar uma linguagem padrão para seu sistema ou site. No meu caso, coloquei no "pt" que é o português.
Vamos para o segundo passo que é criar o cookie depois que o usuário clicar em algum link ou bandeira em seu site.
Método que gera cookie com a língua desejada pelo usuário
Controller
Vamos criar um método na classe principal do seu site, pode ser na HomeController ou qualquer outra que achar melhor. Eu dei o nome de ChangeLanguage(String languageAbreviation) que recebe uma string como parâmetro. Veja o código 1.2.
Código 1.2 - Criando método na controller.
public ActionResult ChangeLanguage(String languageAbreviation)
{
if (!String.IsNullOrEmpty(languageAbreviation))
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(languageAbreviation);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(languageAbreviation);
}
HttpCookie cookie = new HttpCookie("Language");
cookie.Value = languageAbreviation;
Response.Cookies.Add(cookie);
return View("Index");
}
O primeiro passo do método é verificar se a string que chegou é diferente de null ou se está vazia. Se for diferente então vamos criar uma cultura específica com o CultureInfo.CreateSpecificCulture(languageAbreviation) passando o valor. Depois disso basta criar o cookie chamado Language com o valor e ele vai ser lido dentro do Global.asax.
No final, escrevo o cookie com o Response.Cookies.Add e retorno para o método Index da controller que estou utilizando.
O próximo passo agora é criar o link dentro do site para o usuário clicar e chamar a controller e o método ChangeLanguage. Tem desenvolvedor que colocar no arquivo .cshtml compartilhado e outros colocam em páginas específica, a melhor é colocar em páginas compartilhadas como o _Layout.cshtml que fica dentro da pasta Shared.
Página HTML
Para finalizar, vou escrever o código HTML dentro da página _Layout.cshtml. Utilizando o UrL.Action basta passar o nome do método e o nome da controller. Não se esqueça de passar a variável languageAbreviation que deseja por isso o new { languageAbreviation = "pt" }. Veja o código 1.3.
Código 1.3 - Links na página.
<div style="text-align:right;">
<a href='@Url.Action("ChangeLanguage", "<Sua_Controller>", new { languageAbreviation = "pt" })'><img title="Português" src='~/Content/img/bandeira-brasil.png' border="0" width="25" /></a>
<a href='@Url.Action("ChangeLanguage", "<Sua_Controller>", new { languageAbreviation = "en" })'><img title="English" src='~/Content/img/bandeira-estadosunidos.png' border="0" width="25" /></a>
</div>
Arquivo de tradução
Depois de finalizar a programação, preciso criar o arquivo com extensão .resx para usar nas páginas. Vou deixar essa parte para o outro artigo, o parte 2 ok. Espero que tenha gostado e qualquer dúvida, por favor entrar em contato pelo site https://www.mauriciojunior.org.
Sign up to our newsletter
Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.