最近的项目使用的是ABP 3.9.0版本。网上有许多切换语言的方法版本比较旧,用的时候发现没有效果。所以就自己自己看了源码。
1、语言切换
通过页面切换语言的方法:
<li><a href="/AbpLocalization/ChangeCulture?cultureName=@(language.Name)&returnUrl=@(Request.Url)"><i class="@language.Icon"></i> @language.DisplayName</a></li>
我们可以发现切换语言使用的方法是AbpLocalization控制器中ChangeCulture方法。打开源码abp.web.mvc项目我们可以找到Localization文件夹下的AbpLocalizationController。
该方法如下所示:
public class AbpLocalizationController : AbpController
{
private readonly IAbpWebLocalizationConfiguration _webLocalizationConfiguration;
public AbpLocalizationController(IAbpWebLocalizationConfiguration webLocalizationConfiguration)
{
_webLocalizationConfiguration = webLocalizationConfiguration;
}
[DisableAuditing]
public virtual ActionResult ChangeCulture(string cultureName, string returnUrl = "")
{
if (!GlobalizationHelper.IsValidCultureCode(cultureName))
{
throw new AbpException("Unknown language: " + cultureName + ". It must be a valid culture!");
}
Response.Cookies.Add(
new HttpCookie(_webLocalizationConfiguration.CookieName, cultureName)
{
Expires = Clock.Now.AddYears(2),
Path = Request.ApplicationPath
}
);
if (AbpSession.UserId.HasValue)
{
SettingManager.ChangeSettingForUser(
AbpSession.ToUserIdentifier(),
LocalizationSettingNames.DefaultLanguage,
cultureName
);
}
if (Request.IsAjaxRequest())
{
return Json(new AjaxResponse(), JsonRequestBehavior.AllowGet);
}
if (!string.IsNullOrWhiteSpace(returnUrl) && Request.Url != null && AbpUrlHelper.IsLocalUrl(Request.Url, returnUrl))
{
return Redirect(returnUrl);
}
return Redirect(Request.ApplicationPath);
}
}
我们可以看出ABP将当前语言记录在coo