Udocs.me

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

  1. Criar um site que contemplam várias línguas;
  2. Não precisar passar o código da linguagem em várias páginas;
  3. 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.


Autor: Mauricio Junior
Udocs.me