如何向ABP模板添加新语言?
How to add new language to ABP template?
我正在使用来自此站点的免费样板文件(ASP.NET 核心 MVC 和 jQuery)https://aspnetboilerplate.com/Templates
是否可以添加新的语言支持?
我已经添加了本地化的 .xml 文件,更新了数据库中的 'abplanguages' table,但它不起作用。我正在更改语言,但文字仍然是英文。预定义语言的相同情况已经与样板一起提供,例如 'espanol-mexico' 不起作用,但是当我选择 'french' 时,页面被翻译了。
这很奇怪,因为在文档中说可以做到。
https://aspnetboilerplate.com/Pages/Documents/Localization#extending-localization-sources
请问是不是免费模板有限制?
注入IApplicationLanguageManager
接口并使用AddAsync()
方法添加新语言。
private readonly IApplicationLanguageManager _applicationLanguageManager;
public LanguageAppService(
IApplicationLanguageManager applicationLanguageManager,
IApplicationLanguageTextManager applicationLanguageTextManager,
IRepository<ApplicationLanguage> languageRepository)
{
_applicationLanguageManager = applicationLanguageManager;
_languageRepository = languageRepository;
_applicationLanguageTextManager = applicationLanguageTextManager;
}
protected virtual async Task CreateLanguageAsync(ApplicationLanguageEditDto input)
{
if (AbpSession.MultiTenancySide != MultiTenancySides.Host)
{
throw new UserFriendlyException(L("TenantsCannotCreateLanguage"));
}
var culture = CultureHelper.GetCultureInfoByChecking(input.Name);
await _applicationLanguageManager.AddAsync(
new ApplicationLanguage(
AbpSession.TenantId,
culture.Name,
culture.DisplayName,
input.Icon
)
{
IsDisabled = !input.IsEnabled
}
);
}
public static class CultureHelper
{
public static CultureInfo[] AllCultures = CultureInfo.GetCultures(CultureTypes.AllCultures);
public static bool IsRtl => CultureInfo.CurrentUICulture.TextInfo.IsRightToLeft;
public static bool UsingLunarCalendar = CultureInfo.CurrentUICulture.DateTimeFormat.Calendar.AlgorithmType == CalendarAlgorithmType.LunarCalendar;
public static CultureInfo GetCultureInfoByChecking(string name)
{
try
{
return CultureInfo.GetCultureInfo(name);
}
catch (CultureNotFoundException)
{
return CultureInfo.CurrentCulture;
}
}
}
public class ApplicationLanguageEditDto
{
public virtual int? Id { get; set; }
[Required]
[StringLength(ApplicationLanguage.MaxNameLength)]
public virtual string Name { get; set; }
[StringLength(ApplicationLanguage.MaxIconLength)]
public virtual string Icon { get; set; }
/// <summary>
/// Mapped from Language.IsDisabled with using manual mapping in CustomDtoMapper.cs
/// </summary>
public bool IsEnabled { get; set; }
}
我明白了。在我的例子中,它是不正确的构建操作 属性。在 VS 中右键单击本地化源文件:*.xml file -> Advanced -> Build action: Embedded resource
.
我正在使用来自此站点的免费样板文件(ASP.NET 核心 MVC 和 jQuery)https://aspnetboilerplate.com/Templates
是否可以添加新的语言支持?
我已经添加了本地化的 .xml 文件,更新了数据库中的 'abplanguages' table,但它不起作用。我正在更改语言,但文字仍然是英文。预定义语言的相同情况已经与样板一起提供,例如 'espanol-mexico' 不起作用,但是当我选择 'french' 时,页面被翻译了。 这很奇怪,因为在文档中说可以做到。 https://aspnetboilerplate.com/Pages/Documents/Localization#extending-localization-sources
请问是不是免费模板有限制?
注入IApplicationLanguageManager
接口并使用AddAsync()
方法添加新语言。
private readonly IApplicationLanguageManager _applicationLanguageManager;
public LanguageAppService(
IApplicationLanguageManager applicationLanguageManager,
IApplicationLanguageTextManager applicationLanguageTextManager,
IRepository<ApplicationLanguage> languageRepository)
{
_applicationLanguageManager = applicationLanguageManager;
_languageRepository = languageRepository;
_applicationLanguageTextManager = applicationLanguageTextManager;
}
protected virtual async Task CreateLanguageAsync(ApplicationLanguageEditDto input)
{
if (AbpSession.MultiTenancySide != MultiTenancySides.Host)
{
throw new UserFriendlyException(L("TenantsCannotCreateLanguage"));
}
var culture = CultureHelper.GetCultureInfoByChecking(input.Name);
await _applicationLanguageManager.AddAsync(
new ApplicationLanguage(
AbpSession.TenantId,
culture.Name,
culture.DisplayName,
input.Icon
)
{
IsDisabled = !input.IsEnabled
}
);
}
public static class CultureHelper
{
public static CultureInfo[] AllCultures = CultureInfo.GetCultures(CultureTypes.AllCultures);
public static bool IsRtl => CultureInfo.CurrentUICulture.TextInfo.IsRightToLeft;
public static bool UsingLunarCalendar = CultureInfo.CurrentUICulture.DateTimeFormat.Calendar.AlgorithmType == CalendarAlgorithmType.LunarCalendar;
public static CultureInfo GetCultureInfoByChecking(string name)
{
try
{
return CultureInfo.GetCultureInfo(name);
}
catch (CultureNotFoundException)
{
return CultureInfo.CurrentCulture;
}
}
}
public class ApplicationLanguageEditDto
{
public virtual int? Id { get; set; }
[Required]
[StringLength(ApplicationLanguage.MaxNameLength)]
public virtual string Name { get; set; }
[StringLength(ApplicationLanguage.MaxIconLength)]
public virtual string Icon { get; set; }
/// <summary>
/// Mapped from Language.IsDisabled with using manual mapping in CustomDtoMapper.cs
/// </summary>
public bool IsEnabled { get; set; }
}
我明白了。在我的例子中,它是不正确的构建操作 属性。在 VS 中右键单击本地化源文件:*.xml file -> Advanced -> Build action: Embedded resource
.