【发布时间】:2019-02-17 18:24:06
【问题描述】:
在我从本地环境运行的浏览器上,字符串按预期进行翻译。当我上传到 Azure 时,它仍然有效。但是,当我切换到 Edge(除了下载 FireFox 之外我从不使用它)时,字符串不再被翻译。我在各种浏览器上与外部用户进行了验证,这似乎是独立于平台的问题。
我将所有翻译都放在根目录中的全局文件中,并且我有虚拟文件,因此我可以按照文档的建议将其注入到视图和控制器中。不知何故,似乎找不到 RESX 文件,所以我把它放到 始终上传。不过,不良行为没有改变。
我不确定如何进一步诊断它,或者是否将 RESX 文件编译到 DLL 中或直接上传到服务器并即时读取。是否有可能以某种方式验证文件“在那里”?
我的配置是这样的。
public void ConfigureServices(IServiceCollection services)
{
...
services.AddLocalization(a => a.ResourcesPath = "");
services.Configure<RequestLocalizationOptions>(a =>
{
CultureInfo[] supportedCultures = {
new CultureInfo("sv-SE"),
new CultureInfo("se")
};
a.DefaultRequestCulture = new RequestCulture("se");
a.SupportedCultures = supportedCultures;
a.SupportedUICultures = supportedCultures;
});
...
services.AddMvc()
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseRequestLocalization();
...
app.UseMvcWithDefaultRoute();
}
编辑
我注意到当我有这些行时它可以在 Chrome 中工作。
RequestLocalizationOptions options = app.ApplicationServices
.GetService<IOptions<RequestLocalizationOptions>>().Value;
app.UseRequestLocalization(options);
当我有这些时它停止工作。
//RequestLocalizationOptions options = app.ApplicationServices
// .GetService<IOptions<RequestLocalizationOptions>>().Value;
app.UseRequestLocalization();
在 IE 中这两种情况都不起作用。
【问题讨论】:
-
您是否使用 cookie 本地化? Edge 中的 cookie 可能(但我不确定)有问题。所以尝试通过查询字符串指定文化,看看它是否适用于 Edge。
-
@Alexander 我知道我不清楚这个问题。这些字符串不会在任何浏览器中翻译,除非该浏览器“从以前开始”使用过。不知道多久,但我通常在 Cr 和 FF 中运行我的东西,它可以在我的电脑上运行。但是,另一台计算机上的相同浏览器会失败。更奇怪的是,即使在 IE 和 Eg 中本地运行也会失败。但只是为了排除它与 cookie 相关的可能性 - 我将如何根据您的建议指定 cookie?
-
好的,如果 cookie 有问题,您仍然应该看到默认文化的翻译(在您的情况下为
se)。它在一个浏览器中工作而在另一个浏览器中不起作用,这有点奇怪,因为浏览器不会影响本地化过程(嗯,它只设置请求文化,仅此而已)。如果它以前有效而现在无效,则您必须更改项目中的某些内容,特别是本地化文件。什么是虚拟文件?您的本地化文件的名称是什么? -
这个启动代码你改了吗?诚然,您说这是可行的,但我希望 RequestLocalizationOptions 服务能够传递给 UseRequestLocalization。像 var locOptions = app.ApplicationServices.GetService
>(); app.UseRequestLocalization(locOptions.Value); -
@Alexander 好点。它在 Cr 和 FF(本地和远程)中仍然工作并工作。它在 Eg 和 IE(loco 和 remo)中不起作用。我目前要求人们安装浏览器并检查他们的系统。看起来好像最初在开发中使用的浏览器出现了一些问题......至于虚拟 - 它只是我在注入 IStringLocalization
时使用的一个空类。我的 RESX 文件名为 Ling.se.resx(我还创建了 Controller.Lingo.se.resx 在纯粹的破坏中)。出于实际原因,我现在想将所有翻译保存在一个文件中。帮忙?
标签: c# razor asp.net-core internationalization asp.net-core-2.2