3
respostas

Dúvida sobre a troca de idioma e na traducao do corpo das páginas

Fiquei sem saber como que o usuario fará a escolha de idioma se nao tem nenhum nome ou picture com link para as paginas devidas.

Outra pergunta: Como no html normal crio uma página para cada idioma traduzindo todos os textos manualmente, o que significa que duplico as páginas caso seja só dois idiomas, gostária de saber se aqui é de igual forma? vou duplicando as Views e demais arquivos que necessitarem, como no caso do menu lateral que está abaixo?

namespace LojaRazor.DAO
{
    public class DepartamentosDAO
    {
        public IList<Departamento> Lista()
        {
            return new List<Departamento>()
            {
                NovoDepartamento("Informática", "Notebooks", "Monitores", "HDs"),
                NovoDepartamento("Eletrônicos", "TVs", "Rádios", "Video Cassete", "DVD Players"),
                NovoDepartamento("Entretenimento", "Filmes", "Músicas", "Brinquedos"),
                NovoDepartamento("Livros", "Aventura", "Ficção", "Universitários", "Romances", "Terror")
            };
        }

Obrigado :)

3 respostas

Olá Graziela, tudo bom? A forma mais simples de adicionar um botão para trocar a linguagem do site é alterando o atributo uiCulture como mostrado na aula. Para alterar ele em tempo de execução você pode criar um método no seu controller com a estrutura abaixo:

public class LanguageController : Controller
{
    public ActionResult SetLanguage(string name)
    {
        Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(name);
        Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

        HttpContext.Current.Session["culture"] = name;

        return RedirectToAction("Index", "Home");
    }

E na sua View você pode adicionar os seguintes links

<a href="@Url.Action("SetLanguage", "Language", new { @name = "pt-br" })">Português</a>
<a href="@Url.Action("SetLanguage", "Language", new { @name = "en" })">English</a>

Repara que independente da quantidade de idiomas que você for trabalhar, não é necessário duplicar a view, apenas criar o arquivo de recurso referente ao idioma com a tradução de cada palavra.

Espero ter ajudado,

Bons estudos.

Olá Renan, tudo bem?

Veleu mesmo pela resposta.

Tentei fazer segundo o teu enunciado, porém recebo o seguinte erro no Controller:

Error 1 'System.Web.HttpContextBase' does not contain a definition for 'Current' and no extension method 'Current' accepting a first argument of type 'System.Web.HttpContextBase' could be found (are you missing a using directive or an assembly reference?) C:\Users\graziela\Desktop\Alura\ASP.NET Razor\LojaRazor\Controllers\LanguageController.cs 29 25 LojaRazor

e também nao sei onde chamar esta view Language para que que os idiomas sejam mostrado no menu. Para entender, precisaria de um Tutorial passo-a-passo, pois é a 1a x's que estou a utilizar MVC :)

**Nao existe a possibilidade de fazer como no html normal de criar um simples href a linkar?

Obrigado

Há erros neste código :

Error    CS1061    'HttpContextBase' does not contain a definition for 'Current' and no extension method 'Current' accepting a first argument of type 'HttpContextBase' could be found (are you missing a using directive or an assembly reference?)    LojaRazor    C:\......\Visual Studio 2015\Projects\LojaRazor\Controllers\LanguageController.cs    17    Active
 public class LanguageController : Controller
    {
        public ActionResult SetLanguage(string name)
        {
            Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(name);
            Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

            HttpContext.Current.Session["culture"] = name;

            return RedirectToAction("Index", "Home");

Renan, o Visual Studio avisou sobre o Thread, então fiz um Ctrl + ponto, para adicionar um System.Threating. Logo após isso, o HttpContext. Avisa sobre o Current, e depois de alguns testes o Session. Não sei se o erro é no HttpContext(Base) ou na atribuição do Current. Poderia verificar para que possamos ter uma ideia deste tópico? Esta questão é importante