我正在使用几个视图(包括部分共享的)和需要本地化的控制器的ASP.NET核心(.NETCoreApp 1.1)Web应用程序。ASP.NET核心本地化从独特的JSON资源
的约束条件是本地化字符串是具有以下结构的单一JSON文件中(可以在一个单一的文件,只要它仍然改变):
{
"HELLO": {
"en": "Hello!",
"fr": "Bonjour !"
}
}
所以我想我需要什么是本地化访问这个独特的文件,并提供IStringLocalizer
和IViewLocalizer
对象,我可以在我的控制器和像_localizer["HELLO"]
视图使用,显然它不是默认模式。
为了增加难度,我还需要能够默认自动检测浏览器中的首选语言,或者明确地将语言作为路由值,例如/ en/Home/Index或/ fr/Home /索引,还包括/ Home/Index。
我对ASP.NET Core非常陌生,甚至在文档和各种示例实现位或我需要的东西时,我都无法实现任何可用于生产的可靠工具。我遇到的每件事都有一些缺失或过时。
如果有人了解这些事情会告诉我如何做到这一点,我将不胜感激!
编辑:我想我已经想出了如何从路由或浏览器中获取语言(如果没有路由的话)。下面是我做的:
我的路径模板是template: "{lang?}/{controller=Home}/{action=Index}/{id?}")
,这里是我使用从控制器获取郎代码:
string lang = this.RouteData.Values["lang"] as string;
if (lang == null)
{
string userLangs = HttpContext.Request.Headers["Accept-Language"].ToString();
lang = userLangs.Split(',').FirstOrDefault();
}
谢谢。这就是我害怕的答案......在过去的两天里,我一直无法实现我所需的努力。我明天再试一次,也许我会有某种顿悟。 – albator1932
@ albator1932 https://stackoverflow.com/a/44782669/909809可能对获取平面文件有用。我打算去平面文件路由,因为它具有更多的意义让所有的单词相邻,所以一切都保持同步,但由于缺乏示例,我现在只是为了多个文件而解决。 –
哦,我不能相信我错过了这一个,我马上试一试。当我有工作的时候,我会做出一个完整的工作示例来分享,我无法相信这是多么的艰难。 – albator1932