37 changed files with 859 additions and 541 deletions
@ -1,52 +0,0 @@ |
|||||
{ |
|
||||
"Logging": { |
|
||||
"LogLevel": { |
|
||||
"Default": "Information", |
|
||||
"Microsoft": "Warning", |
|
||||
"Microsoft.Hosting.Lifetime": "Information" |
|
||||
} |
|
||||
}, |
|
||||
"AllowedHosts": "*", |
|
||||
"App": { |
|
||||
"SelfUrl": "http://localhost:44314", |
|
||||
"CorsOrigins": "http://localhost:4200" |
|
||||
}, |
|
||||
"GlobalConfiguration": { |
|
||||
}, |
|
||||
"Routes": [ |
|
||||
{ |
|
||||
"DownstreamPathTemplate": "/{url}", |
|
||||
"DownstreamScheme": "http", |
|
||||
"DownstreamHostAndPorts": [ |
|
||||
{ |
|
||||
"Host": "localhost", |
|
||||
"Port": 44315 |
|
||||
} |
|
||||
], |
|
||||
"UpstreamPathTemplate": "/gateway/{url}", |
|
||||
"UpstreamHttpMethod": [ |
|
||||
"Get", |
|
||||
"Post", |
|
||||
"Put", |
|
||||
"Delete" |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
"DownstreamPathTemplate": "/{url}", |
|
||||
"DownstreamScheme": "ws", |
|
||||
"DownstreamHostAndPorts": [ |
|
||||
{ |
|
||||
"Host": "localhost", |
|
||||
"Port": 44315 |
|
||||
} |
|
||||
], |
|
||||
"UpstreamPathTemplate": "/ws/{url}", |
|
||||
"UpstreamHttpMethod": [ |
|
||||
"Get", |
|
||||
"Post", |
|
||||
"Put", |
|
||||
"Delete" |
|
||||
] |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
@ -1,61 +0,0 @@ |
|||||
{ |
|
||||
"Serilog": { |
|
||||
"MinimumLevel": { |
|
||||
"Default": "Information", |
|
||||
"Override": { |
|
||||
"Microsoft": "Information", |
|
||||
"Volo.Abp": "Information", |
|
||||
"Hangfire": "Information", |
|
||||
"DotNetCore.CAP": "Information", |
|
||||
"Serilog.AspNetCore": "Information" |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
"App": { |
|
||||
"SelfUrl": "http://localhost:44315", |
|
||||
"CorsOrigins": "https://*.AbpPro.com,http://localhost:4200,http://localhost:3100" |
|
||||
}, |
|
||||
"ConnectionStrings": { |
|
||||
"Default": "Data Source=localhost;Database=LionAbpProDB20211106;uid=root;pwd=1q2w3E*;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true" |
|
||||
}, |
|
||||
"Redis": { |
|
||||
"Configuration": "localhost,password=mypassword,defaultdatabase=1" |
|
||||
}, |
|
||||
"Jwt": { |
|
||||
"Audience": "LionAbpPro", |
|
||||
//客户端标识 |
|
||||
"SecurityKey": "dzehzRz9a8asdfasfdadfasdfasdfafsdadfasbasdf=", |
|
||||
"Issuer": "LionAbpPro", |
|
||||
//签发者 |
|
||||
"ExpirationTime": 24 |
|
||||
//过期时间 hour |
|
||||
}, |
|
||||
"Cap": { |
|
||||
"Enabled": "false", |
|
||||
"RabbitMq": { |
|
||||
"HostName": "localhost", |
|
||||
"UserName": "admin", |
|
||||
"Password": "admin" |
|
||||
} |
|
||||
}, |
|
||||
"LogToElasticSearch": { |
|
||||
"Enabled": "false", |
|
||||
"ElasticSearch": { |
|
||||
"Url": "http://es.cn", |
|
||||
"IndexFormat": "companyname.projectname.development", |
|
||||
"UserName": "elastic", |
|
||||
"Password": "aVVhjQ95RP7nbwNy", |
|
||||
"DashboardIndex": "companyname.projectname" |
|
||||
} |
|
||||
}, |
|
||||
"HttpClient": { |
|
||||
"Sts": { |
|
||||
"Url": "http://localhost:44354" |
|
||||
} |
|
||||
}, |
|
||||
"Consul": { |
|
||||
"Enabled": true, |
|
||||
"Host": "http://localhost:8500", |
|
||||
"Service": "Project-Service" |
|
||||
} |
|
||||
} |
|
||||
@ -1,2 +0,0 @@ |
|||||
{ |
|
||||
} |
|
||||
@ -0,0 +1,24 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Reflection; |
||||
|
using Lion.AbpPro.Localization; |
||||
|
|
||||
|
namespace System |
||||
|
{ |
||||
|
public static class EnumLocalicationExtension |
||||
|
{ |
||||
|
public static string ToLocalicationDescription(this Enum value) |
||||
|
{ |
||||
|
var member = |
||||
|
((IEnumerable<MemberInfo>)value.GetType().GetMember(value.ToString())) |
||||
|
.FirstOrDefault<MemberInfo>(); |
||||
|
|
||||
|
var localKey =$"Enum:{member.ReflectedType.Name}:{value}:{Convert.ToInt16(value)}"; |
||||
|
if (localKey.IsNullOrWhiteSpace()) |
||||
|
{ |
||||
|
throw new ArgumentException(); |
||||
|
} |
||||
|
return !(member != (MemberInfo)null) ? value.ToString() : LocalizationHelper.L[localKey]; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,65 @@ |
|||||
|
using System; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Microsoft.Extensions.Localization; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
|
using Microsoft.AspNetCore.Builder; |
||||
|
|
||||
|
|
||||
|
namespace Lion.AbpPro.Localization |
||||
|
{ |
||||
|
public static class LocalizationHelper |
||||
|
{ |
||||
|
private static IServiceProvider ServiceProvider { get; set; } |
||||
|
|
||||
|
private static IAbpLazyServiceProvider _lazyServiceProvider; |
||||
|
private static IAbpLazyServiceProvider LazyServiceProvider |
||||
|
{ |
||||
|
get |
||||
|
{ |
||||
|
return _lazyServiceProvider ??= ServiceProvider.GetRequiredService<IAbpLazyServiceProvider>(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private static IStringLocalizerFactory StringLocalizerFactory => LazyServiceProvider.LazyGetRequiredService<IStringLocalizerFactory>(); |
||||
|
|
||||
|
private static IStringLocalizer _localizer; |
||||
|
|
||||
|
private static Type _localizationResource = typeof(AbpProResource); |
||||
|
|
||||
|
public static IStringLocalizer L => _localizer ??= CreateLocalizer(); |
||||
|
|
||||
|
public static Type LocalizationResource |
||||
|
{ |
||||
|
get => _localizationResource; |
||||
|
set |
||||
|
{ |
||||
|
_localizationResource = value; |
||||
|
_localizer = null; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private static IStringLocalizer CreateLocalizer() |
||||
|
{ |
||||
|
if (LocalizationResource != null) |
||||
|
{ |
||||
|
return StringLocalizerFactory.Create(LocalizationResource); |
||||
|
} |
||||
|
|
||||
|
return StringLocalizerFactory.CreateDefaultOrNull() ?? |
||||
|
throw new AbpException(message: "Localizer is null"); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public static void InitializeLocalization(this IApplicationBuilder app) |
||||
|
{ |
||||
|
ServiceProvider = app.ApplicationServices; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public static void InitializeLocalization(this IServiceProvider serviceProvider) |
||||
|
{ |
||||
|
ServiceProvider = serviceProvider; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -1,7 +1,12 @@ |
|||||
|
using Lion.AbpPro.Localization; |
||||
|
|
||||
namespace Lion.AbpPro |
namespace Lion.AbpPro |
||||
{ |
{ |
||||
public abstract class AbpProDomainTestBase : AbpProTestBase<AbpProDomainTestModule> |
public abstract class AbpProDomainTestBase : AbpProTestBase<AbpProDomainTestModule> |
||||
{ |
{ |
||||
|
public AbpProDomainTestBase() |
||||
|
{ |
||||
|
ServiceProvider.InitializeLocalization();; |
||||
|
} |
||||
} |
} |
||||
} |
} |
||||
|
|||||
@ -0,0 +1,46 @@ |
|||||
|
using System; |
||||
|
using Lion.AbpPro.Localization; |
||||
|
using Shouldly; |
||||
|
using Volo.Abp.Localization; |
||||
|
using Xunit; |
||||
|
|
||||
|
namespace Lion.AbpPro.Localizations |
||||
|
{ |
||||
|
public class LocalizationHelper_Tests:AbpProDomainTestBase |
||||
|
{ |
||||
|
[Fact] |
||||
|
public void Test_LocalizationHelper_L_OK() |
||||
|
{ |
||||
|
using (CultureHelper.Use("en")) |
||||
|
{ |
||||
|
var enValue = LocalizationHelper.L["Welcome"]; |
||||
|
enValue.Value.ShouldBe("Welcome"); |
||||
|
} |
||||
|
|
||||
|
using (CultureHelper.Use("zh-Hans")) |
||||
|
{ |
||||
|
|
||||
|
var enValue = LocalizationHelper.L["Welcome"]; |
||||
|
enValue.Value.ShouldBe("欢迎"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void Test_ToLocalicationDescription_L_OK() |
||||
|
{ |
||||
|
var test = new {TestType=TestType.Cancel}; |
||||
|
using (CultureHelper.Use("en")) |
||||
|
{ |
||||
|
var enValue = test.TestType.ToLocalicationDescription(); |
||||
|
enValue.ShouldBe("Cancel"); |
||||
|
} |
||||
|
|
||||
|
using (CultureHelper.Use("zh-Hans")) |
||||
|
{ |
||||
|
|
||||
|
var enValue = test.TestType.ToLocalicationDescription(); |
||||
|
enValue.ShouldBe("取消"); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,9 @@ |
|||||
|
namespace Lion.AbpPro.Localizations |
||||
|
{ |
||||
|
public enum TestType |
||||
|
{ |
||||
|
Created, |
||||
|
Cancel, |
||||
|
Delete |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,63 @@ |
|||||
|
version: '3' |
||||
|
services: |
||||
|
mysql: |
||||
|
image: mysql:5.7.26 |
||||
|
# network_mode: "host" # 如果需要容器使用宿主机IP(内网IP),则可以配置此项 |
||||
|
container_name: abp-pro-mysql # 指定容器名称,如果不设置此参数,则由系统自动生成 |
||||
|
restart: always # 设置容器自启模式 |
||||
|
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci # 设置utf8字符集 |
||||
|
environment: |
||||
|
- TZ=Asia/Shanghai # 设置容器时区与宿主机保持一致 |
||||
|
- MYSQL_ROOT_PASSWORD=1q2w3E* # 设置root密码 |
||||
|
volumes: |
||||
|
- /etc/localtime:/etc/localtime:ro # 设置容器时区与宿主机保持一致 |
||||
|
ports: |
||||
|
- "3307:3306" |
||||
|
networks: |
||||
|
- lionAbpPro |
||||
|
|
||||
|
redis: |
||||
|
image: redis:5.0.4 |
||||
|
container_name: abp-pro-redis |
||||
|
restart: always |
||||
|
command: redis-server # 启动redis命令 |
||||
|
environment: |
||||
|
- TZ=Asia/Shanghai |
||||
|
volumes: |
||||
|
- /etc/localtime:/etc/localtime:ro # 设置容器时区与宿主机保持一致 |
||||
|
ports: |
||||
|
- "6380:6379" |
||||
|
networks: |
||||
|
- lionAbpPro |
||||
|
|
||||
|
rabbitMq: |
||||
|
image: rabbitmq:management |
||||
|
container_name: abp-pro-rabbitMq |
||||
|
restart: always |
||||
|
ports: |
||||
|
- "5673:5672" |
||||
|
- "15673:15672" |
||||
|
environment: |
||||
|
- RABBITMQ_DEFAULT_USER=admin |
||||
|
- RABBITMQ_DEFAULT_PASS=1q2w3E* |
||||
|
networks: |
||||
|
- lionAbpPro |
||||
|
|
||||
|
consul: |
||||
|
image: consul |
||||
|
ports: |
||||
|
- 8300:8300 |
||||
|
- 8301:8301 |
||||
|
- 8301:8301/udp |
||||
|
- 8302:8302 |
||||
|
- 8302:8302/udp |
||||
|
- 8400:8400 |
||||
|
- 8500:8500 |
||||
|
- 53:53/udp |
||||
|
command: agent -server -bind=0.0.0.0 -client=0.0.0.0 -node=consul_Server1 -bootstrap-expect=1 -ui |
||||
|
networks: |
||||
|
- lionAbpPro |
||||
|
|
||||
|
networks: |
||||
|
lionAbpPro: |
||||
|
driver: bridge |
||||
File diff suppressed because it is too large
Loading…
Reference in new issue