Nie*_*sma 13 .net c# dll asp.net-mvc asp.net-identity
我试图通过使用以下帖子中的建议获取瑞典语为Asp.Net Identity的本地化错误消息:如何本地化ASP.NET Identity UserName和Password错误消息?
使用NuGet我下载了德语语言包,然后在dotPeek中打开\ packages\Microsoft.AspNet.Identity.Core.2.0.0\lib \net45\de\Microsoft.AspNet.Identity.Core.resources.dll,然后将其导出到一个新的VS项目:
https://github.com/nielsbosma/AspNet.Identity.Resources.Swedish/
我已将生成的\ Microsoft.AspNet.Identity.Core.resources.dll复制到\ packages\Microsoft.AspNet.Identity.Core.2.0.0\lib \net45\se下的新文件夹.
当我在本地运行我的网站时,我看到Microsoft.AspNet.Identity.Core.resources.dll已被复制到MySite\bin\sv \
但我不能让它工作:(
如果我在我的Web.config中设置:
<system.web>
...
<globalization culture="sv-SE" uiCulture="sv" />
</system.web>
Run Code Online (Sandbox Code Playgroud)
我仍然得到英文默认错误消息.但是,如果我改为德语,我已经从NuGet中包含了我收到德语错误消息.
使用dotPeek我将我的dll与德语进行了比较,除了我的PublicKeyToken = null和德语为"31bf3856ad364e35"之外,它们是相同的.这可能是我无法加载我的dll的原因吗?无论如何为dll设置PublicKeyToken?任何解决方法?
谢谢你的任何指示.
除非您拥有Microsoft用于签署dll的私钥.
更新:作为一种解决方法,直到我们添加对您自己的资源插入的支持,您现在可能只使用显式切换包装所有默认标识结果错误消息,应该只有大约10-20个面向用户的错误.
就像是:
public static string Localize(string error) {
switch (error) {
case "<english error>": return "<localized version";
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
灵感来自彼得的答案我也提出了蹩脚但快速的解决方案.
我需要在默认的AccountController模板中本地化错误,所以我编写了自己的AddLocalizedErrors方法.我正在使用Resources来本地化错误.
//Original method
private void AddErrors(IdentityResult result)
{
foreach (var error in result.Errors)
{
ModelState.AddModelError("", error);
}
}
//My method
private void AddLocalizedErrors(IdentityResult result, ApplicationUser user)
{
foreach (var error in result.Errors)
{
var localizedError = error;
string userName = "";
string email = "";
if (user != null)
{
userName = user.UserName;
email = user.Email;
}
//password errors
localizedError = localizedError.Replace("Passwords must have at least one uppercase ('A'-'Z').", AspNetValidationMessages.password_uppercase);
localizedError = localizedError.Replace("Passwords must have at least one digit ('0'-'9').", AspNetValidationMessages.password_digit);
localizedError = localizedError.Replace("Passwords must have at least one lowercase ('a'-'z').", AspNetValidationMessages.password_lowercase);
localizedError = localizedError.Replace("Passwords must have at least one non letter or digit character.", AspNetValidationMessages.password_nonletter_nondigit);
localizedError = localizedError.Replace("Passwords must have at least one non letter or digit character.", AspNetValidationMessages.password_nonletter_nondigit);
localizedError = localizedError.Replace("Passwords must have at least one non letter or digit character.", AspNetValidationMessages.password_nonletter_nondigit);
//register errors
localizedError = localizedError.Replace("Name "+userName+" is already taken.", AspNetValidationMessages.name_taken.Replace("{0}", userName));
localizedError = localizedError.Replace("Email '" + email + "' is already taken.", AspNetValidationMessages.email_taken.Replace("{0}", email));
ModelState.AddModelError("", localizedError);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用,string.Replace()因为例如密码错误只是单个密码要求的字符串.
谈到角色的收集,我应该更有创意.可能使用string.Contains().
| 归档时间: |
|
| 查看次数: |
7297 次 |
| 最近记录: |