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
}

https://github.com/aspnetboilerplate/aspnetboilerplate/blob/dev/src/Abp.AspNetCore/AspNetCore/Mvc/Controllers/AbpLocalizationController.cs

如果您想调试此代码,请从 github 存储库中分叉该项目并将其添加到您的解决方案中。用这个本地项目引用替换你的 abp dll 引用。

同时你没有提到错误的内容。要了解它,请查看网站日志。

已解决! 导致问题的原因是测试服务器上的数据库没有本地数据库中的 table,更重要的是:这个 table 包含在通过 [=12= 传输的模型中] 到数据库。添加 table 到测试服务器后一切正常。