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 |
|||
{ |
|||
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