Существует множество решений для локализации.
Я решил для этого:
http://geekswithblogs.net/brians/archive/2010/06/14/asp.net-mvc-localization-displaynameattribute-alternatives-a-better-way.aspx
public class LocalizedDataAnnotationsModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override ModelMetadata CreateMetadata(
IEnumerable<Attribute> attributes,
Type containerType,
Func<object> modelAccessor,
Type modelType,
string propertyName)
{
var meta = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
if (string.IsNullOrEmpty(propertyName))
return meta;
if (meta.DisplayName != null)
GetLocalizedDisplayName(meta, propertyName);
if (string.IsNullOrEmpty(meta.DisplayName))
meta.DisplayName = string.Format("[[{0}]]", propertyName);
return meta;
}
private static void GetLocalizedDisplayName(ModelMetadata meta, string propertyName)
{
ResourceManager resourceManager = App_GlobalResources.Strings.ResourceManager;
CultureInfo culture = Thread.CurrentThread.CurrentUICulture;
meta.DisplayName = resourceManager.GetString(propertyName, culture);
}
}
Я изменил строку:
if (meta.DisplayName == null)
в
if (meta.DisplayName != null)
для входа в функцию GetLocalizedDisplayName
В App_GlobalResources есть 2 файла:
Strings.resx и Strings.pl.resx .
Они оба имеют Public модификатор доступа и действие сборки установлено на Embedded Resource
Весь сайт переведен, но у меня проблема с Атрибутами
[Required]
[LocalizedDisplayName("UserName", NameResourceType = typeof(App_GlobalResources.Strings))]
public string UserName { get; set; }
Я думаю, что проблема в этой строке по ссылке, которую я разместил выше:
meta.DisplayName = resourceManager.GetString(propertyName, culture);
GetString всегда возвращает значение по умолчанию из Strings.resx .
культура равно pl и propertyName является правильным UserName , поэтому возвращаемое значение должно быть из строк. pl .resx, а не из Strings.resx.
Пожалуйста, помогите мне:)