ASP.NET 样板本地化
ASP.NET boilerplate localization
在 ASP.NET 样板中,我正在更改语言
<a href="/AbpLocalization/ChangeCulture?cultureName=en">English</a>
它在我的本地机器上运行正常,但在测试服务器上运行不正常。
此外,当我在本地单击它时,有时 abp.message.error 内容为空。
我有几个问题:
1) 这是什么 URL (/AbpLocalization...),看起来像一个控制器,但我的代码中没有这样的东西?
2) 如何找到并调试它?
3) 在另一台服务器崩溃时可能会发生什么(在测试服务器上单击按钮重新加载状态,但不会更改语言)
ASP.NET Boilerplate 是一个由模块构建的应用程序框架,其中之一是本地化模块。由于它是开源的,您可以更改默认行为,但我不建议在没有充分理由的情况下这样做。
本地化是核心包的一部分,位于此处:GitHub
我建议您使用文档并根据您的需要进行配置。您可以在此处找到本地化文档:documentation.
最后,您应该检查您在测试环境中的 运行 配置,这可能在某些方面有问题。另一个错误原因可能是 issue 与您的 ABP 版本有关。
AbpLocalizationController 在源代码中位于此处
src/Abp.AspNetCore/AspNetCore/Mvc/Controllers/AbpLocalizationController.cs
这是更改区域性代码:
public virtual ActionResult ChangeCulture(string cultureName, string returnUrl = "")
{
if (!GlobalizationHelper.IsValidCultureCode(cultureName))
{
throw new AbpException("Unknown language: " + cultureName + ". It must be a valid culture!");
}
var cookieValue = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(cultureName, cultureName));
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
cookieValue,
new CookieOptions {Expires = Clock.Now.AddYears(2)}
);
if (AbpSession.UserId.HasValue)
{
SettingManager.ChangeSettingForUser(
AbpSession.ToUserIdentifier(),
LocalizationSettingNames.DefaultLanguage,
cultureName
);
}
if (Request.IsAjaxRequest())
{
return Json(new AjaxResponse());
}
if (!string.IsNullOrWhiteSpace(returnUrl) && AbpUrlHelper.IsLocalUrl(Request, returnUrl))
{
return Redirect(returnUrl);
}
return Redirect("/"); //TODO: Go to app root
}
如果您想调试此代码,请从 github 存储库中分叉该项目并将其添加到您的解决方案中。用这个本地项目引用替换你的 abp dll 引用。
同时你没有提到错误的内容。要了解它,请查看网站日志。
已解决!
导致问题的原因是测试服务器上的数据库没有本地数据库中的 table,更重要的是:这个 table 包含在通过 [=12= 传输的模型中] 到数据库。添加 table 到测试服务器后一切正常。
在 ASP.NET 样板中,我正在更改语言
<a href="/AbpLocalization/ChangeCulture?cultureName=en">English</a>
它在我的本地机器上运行正常,但在测试服务器上运行不正常。
此外,当我在本地单击它时,有时 abp.message.error 内容为空。
我有几个问题:
1) 这是什么 URL (/AbpLocalization...),看起来像一个控制器,但我的代码中没有这样的东西?
2) 如何找到并调试它?
3) 在另一台服务器崩溃时可能会发生什么(在测试服务器上单击按钮重新加载状态,但不会更改语言)
ASP.NET Boilerplate 是一个由模块构建的应用程序框架,其中之一是本地化模块。由于它是开源的,您可以更改默认行为,但我不建议在没有充分理由的情况下这样做。
本地化是核心包的一部分,位于此处:GitHub
我建议您使用文档并根据您的需要进行配置。您可以在此处找到本地化文档:documentation.
最后,您应该检查您在测试环境中的 运行 配置,这可能在某些方面有问题。另一个错误原因可能是 issue 与您的 ABP 版本有关。
AbpLocalizationController 在源代码中位于此处
src/Abp.AspNetCore/AspNetCore/Mvc/Controllers/AbpLocalizationController.cs
这是更改区域性代码:
public virtual ActionResult ChangeCulture(string cultureName, string returnUrl = "")
{
if (!GlobalizationHelper.IsValidCultureCode(cultureName))
{
throw new AbpException("Unknown language: " + cultureName + ". It must be a valid culture!");
}
var cookieValue = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(cultureName, cultureName));
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
cookieValue,
new CookieOptions {Expires = Clock.Now.AddYears(2)}
);
if (AbpSession.UserId.HasValue)
{
SettingManager.ChangeSettingForUser(
AbpSession.ToUserIdentifier(),
LocalizationSettingNames.DefaultLanguage,
cultureName
);
}
if (Request.IsAjaxRequest())
{
return Json(new AjaxResponse());
}
if (!string.IsNullOrWhiteSpace(returnUrl) && AbpUrlHelper.IsLocalUrl(Request, returnUrl))
{
return Redirect(returnUrl);
}
return Redirect("/"); //TODO: Go to app root
}
如果您想调试此代码,请从 github 存储库中分叉该项目并将其添加到您的解决方案中。用这个本地项目引用替换你的 abp dll 引用。
同时你没有提到错误的内容。要了解它,请查看网站日志。
已解决! 导致问题的原因是测试服务器上的数据库没有本地数据库中的 table,更重要的是:这个 table 包含在通过 [=12= 传输的模型中] 到数据库。添加 table 到测试服务器后一切正常。