【愚公系列】2022年03月 .NET架构班 019-ABP vNext 国际化配置
【摘要】 前言多语言程序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)