【愚公系列】2022年03月 .NET架构班 019-ABP vNext 国际化配置

举报
愚公搬代码 发表于 2022/03/10 02:28:11 2022/03/10
【摘要】 前言多语言程序i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称,一种计算机应用程序的组装技术,它对程序的文本部分适于选择理想的国语.应用程序被分为两部分,操作码和文本.该分离保持在程序的执行点上.操作码部分由使用目标特指了文本部分,也就是对单个文本项目的识别.当由操作码寻找时,文本目标从文本部分提出,并用于理想目的...

前言

多语言程序

i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称,一种计算机应用程序的组装技术,它对程序的文本部分适于选择理想的国语.应用程序被分为两部分,操作码和文本.该分离保持在程序的执行点上.操作码部分由使用目标特指了文本部分,也就是对单个文本项目的识别.当由操作码寻找时,文本目标从文本部分提出,并用于理想目的的使用,目标是通用的,即它们是独立于语言的使用.从一种语言转换到另一种,只要用新语言置换程序和文本部分应即生效。

一、国际化配置

1.语言包的引入

在EBusiness.Domain.Shared层放入如下语言包
在这里插入图片描述
en.json

{
  "culture": "en",
  "texts": {
    "Menu:Home": "Home",
    "Welcome": "Welcome",
    "LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io.",
    "ProductException": "The product name must be unique"
  }
}

zh-Hans.json

{
  "culture": "zh-Hans",
  "texts": {
    "Menu:Home": "首页",
    "Welcome": "欢迎",
    "LongWelcomeMessage": "欢迎来到该应用程序. 这是一个基于ABP框架的启动项目. 有关更多信息, 请访问 abp.io.",
    "ProductException": "商品名称不能重复"
  }
 }

EBusinessResource

[LocalizationResourceName("EBusiness")]
public class EBusinessResource
{

}

2.配置语言包

EBusinessDomainSharedModule中配置如下:

[DependsOn(
    typeof(AbpAuditLoggingDomainSharedModule),
    typeof(AbpBackgroundJobsDomainSharedModule),
    typeof(AbpFeatureManagementDomainSharedModule),
    typeof(AbpIdentityDomainSharedModule),
    typeof(AbpIdentityServerDomainSharedModule),
    typeof(AbpPermissionManagementDomainSharedModule),
    typeof(AbpSettingManagementDomainSharedModule),
    typeof(AbpTenantManagementDomainSharedModule)
    )]
public class EBusinessDomainSharedModule : AbpModule
{
    public override void PreConfigureServices(ServiceConfigurationContext context)
    {
        EBusinessGlobalFeatureConfigurator.Configure();
        EBusinessModuleExtensionConfigurator.Configure();

        // 注册拦截器(AOP)对IOC的类进行代理
        context.Services.OnRegistred(options => {
            if (options.ImplementationType.IsDefined(typeof(LogAttribute), true))
            {
                options.Interceptors.TryAdd<LogInterceptor>();
            }
        });
    }

    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        Configure<AbpVirtualFileSystemOptions>(options =>
        {
            options.FileSets.AddEmbedded<EBusinessDomainSharedModule>();
        });
        
        Configure<AbpLocalizationOptions>(options =>
        {
            options.Resources
                .Add<EBusinessResource>("en")
                .AddBaseTypes(typeof(AbpValidationResource))
                .AddVirtualJson("/Localization/EBusiness");

            options.DefaultResourceType = typeof(EBusinessResource);

            // 1、语言选项
            options.Languages.Add(new LanguageInfo("ar", "ar", "العربية"));
            options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština"));
            options.Languages.Add(new LanguageInfo("en", "en", "English"));
            options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (UK)"));
            options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar"));
            options.Languages.Add(new LanguageInfo("fi", "fi", "Finnish"));
            options.Languages.Add(new LanguageInfo("fr", "fr", "Français"));
            options.Languages.Add(new LanguageInfo("hi", "hi", "Hindi", "in"));
            options.Languages.Add(new LanguageInfo("it", "it", "Italian", "it"));
            options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português"));
            options.Languages.Add(new LanguageInfo("ru", "ru", "Русский"));
            options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak"));
            options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe"));
            options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文"));
            options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文"));
            options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsch", "de"));
            options.Languages.Add(new LanguageInfo("es", "es", "Español"));
        });

        Configure<AbpExceptionLocalizationOptions>(options =>
        {
            options.MapCodeNamespace("EBusiness", typeof(EBusinessResource));
        });
    }
}

3.使用语言包

/// <summary>
/// 商品领域服务
/// </summary>
[Dependency(ServiceLifetime.Transient)]
public class ProductManager /*: ITransientDependency*/
{
    private readonly IProductRepository _productRepository;
    private readonly IStringLocalizer<EBusinessResource> _localizer;
    public ILanguageProvider languageProvider { set; get; } // 获取所有语言

    public ProductManager(IProductRepository productRepository,
                            IStringLocalizer<EBusinessResource> localizer)
    {
        _productRepository = productRepository;
        _localizer = localizer;
    }

    /// <summary>
    /// 1、规则1:商品名称不能重复
    /// 2、规则2:商品名称不能为空
    /// </summary>
    /// <param name="ProductTitle"></param>
    public void HasProductTitle(string ProductTitle)
    {
        Product products = _productRepository.GetProductByName(ProductTitle);
        if (products != null)
        {
            #region abp异常信息
            {
                throw new BusinessException(EBusinessDomainErrorCodes.ProductCreateErrorCode, _localizer["ProductException"]);
            }
            #endregion

            #region 获取所有语言
            {
                // 1、获取不同
                var languages = languageProvider.GetLanguagesAsync().Result;
                foreach (var language in languages)
                {
                   // language.
                }

                // 2、语言显示到UI界面

                // 3、根据语言显示具体信息
                //  工具:
                //   1、Cookie 目的:记录本地化信息
                //   2、AbpLanguagesController 语言切换接口
                //   3、LocalizationResourceContributorList 根据国家获取具体值
            }
            #endregion
        }
    }
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。