MVC 6: como usar arquivos RESX?
Estou tentando migrar meu projeto existente do ASP.NET MVC 5 para o projeto MVC 6 vNext, enquanto consegui resolver e resolver a maioria dos problemas, parece que não consigo encontrar nenhuma documentação sobre como usar os arquivos de recurso RESX para localização no MVC 6
Meus ViewModels estão usando instruções como
[Required(ErrorMessageResourceType = typeof(Resources.MyProj.Messages), ErrorMessageResourceName = "FieldRequired")]
Isso funcionou bem no MVC 5, desde que o RESX tenha sido incluído corretamente e os modificadores de acesso tenham sido definidos corretamente, mas parece não funcionar em um projeto vNext Alguém sabe como o RESX pode ser usado em projetos MVC 6 vNext?
Vi algumas postagens aqui e no site do hub GIT, que dizem que a história de localização do ASP.NET 5 / MVC 6 está completa, mas não consigo encontrar nenhuma amostra decente em que as cadeias de recursos foram usadas.
Usar o código acima me dá um erro
Erro CS0246 Não foi possível encontrar o tipo ou nome do espaço de nome 'Recursos' (está faltando uma diretiva de uso ou uma referência de montagem?)
Editar: texto alterado para esclarecer que estou procurando a implementação da localização em projetos vNext (MVC 6), posso fazê-lo funcionar no MVC 5.
Edit 2: O bit de localização está funcionando depois de implementar a resposta de Mohammed, mas estou com um novo erro agora.
Depois de incluir
"Microsoft.AspNet.Localization": "1.0.0-beta7-10364",
"Microsoft.Framework.Localization": "1.0.0-beta7-10364",
pacotes e adicione a seguinte linha em ConfigureServices no arquivo Startup.cs
services.AddMvcLocalization();
Eu recebo um novo erro quando o código a seguir está sendo executado.
public class HomeController : Controller
{
private readonly IHtmlLocalizer _localizer;
public HomeController(IHtmlLocalizer<HomeController> localizer)
{
_localizer = localizer;
}
....
Erro:
Ocorreu uma exceção não tratada durante o processamento da solicitação.
InvalidOperationException: não foi possível resolver o serviço para o tipo 'Microsoft.Framework.Runtime.IApplicationEnvironment' enquanto tentava ativar 'Microsoft.Framework.Localization.ResourceManagerStringLocalizerFactory'. Microsoft.Framework.DependencyInjection.ServiceLookup.Service.CreateCallSite (provedor ServiceProvider, ISet`1 callSiteChain)
Não consigo descobrir se está faltando uma dependência ou se há um problema no código
Edição 3:
Para quem ainda procura uma solução. Neste momento, você pode usar o código na resposta,Muhammad Rehan Saee para obter suporte à localização em seu CSHTML. No entanto, a história para habilitar a localização em atributos de validação ainda não foi concluída (no momento desta edição: 08 / set / 2015) Veja o problema no site GITHUB para mvc abaixo:
https://github.com/aspnet/Mvc/issues/2766#issuecomment-137192942
PS: Para corrigir o InvalidOperationException, fiz o seguinte
Tomando todas as dependências como beta7- * e limpando todo o conteúdo dos meus pacotes C: \ Users \ .dnx \, eliminamos o erro.
Detalhes sobre a questão que levantei:
https://github.com/aspnet/Mvc/issues/2893#issuecomment-127164729
Edição: 25 / Dec / 2015
Finalmente, isso está funcionando no MVC 6 agora.
Escreveu uma postagem rápida no blog aqui:http://pratikvasani.github.io/archive/2015/12/25/MVC-6-localization-how-to/