如何向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.