diff --git a/.github/workflows/README.md b/.github/workflows/README.md
new file mode 100644
index 00000000..febad1fd
--- /dev/null
+++ b/.github/workflows/README.md
@@ -0,0 +1 @@
+github workflows
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index cb911a49..cd8e2d0e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -397,6 +397,7 @@ FodyWeavers.xsd
# JetBrains Rider
*.sln.iml
.idea/
+!src/backend/CloudCode.DataGrip/.idea
# User Define
dist/
diff --git a/.gitmodules b/.gitmodules
index 5d673544..e811f5f4 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,6 +1,6 @@
-[submodule "refs/Furion"]
- path = refs/Furion
- url = https://github.com/nsnail/Furion.git
+[submodule "refs/Gurion"]
+ path = refs/Gurion
+ url = https://github.com/nsnail/Gurion.git
[submodule "refs/ns-ext"]
path = refs/ns-ext
url = https://github.com/nsnail/ns-ext.git
diff --git a/Directory.Build.props b/Directory.Build.props
index ac75abf8..100ffc56 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -1,6 +1,7 @@
+ DBTYPE_SQLITE
$(MSBuildThisFileDirectory)
diff --git a/NetAdmin.sln b/NetAdmin.sln
index da3755ac..3114e75b 100644
--- a/NetAdmin.sln
+++ b/NetAdmin.sln
@@ -31,6 +31,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{BB0B
1.git.pull.request.ps1 = scripts/1.git.pull.request.ps1
2.git.release.ps1 = scripts/2.git.release.ps1
3.git.recreate.branch.ps1 = scripts/3.git.recreate.branch.ps1
+ 4.git.del.obsolete.tags.ps1 = scripts/4.git.del.obsolete.tags.ps1
clean.ln.csx = scripts/clean.ln.csx
code.clean.csx = scripts/code.clean.csx
code.clean.ps1 = scripts/code.clean.ps1
@@ -39,13 +40,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{BB0B
gen.id.linq = scripts/gen.id.linq
gen.ln.cmd = scripts/gen.ln.cmd
gen.resx.tt = scripts/gen.resx.tt
- git.del.obsolete.tags.ps1 = scripts/git.del.obsolete.tags.ps1
image.optimize.csx = scripts/image.optimize.csx
install.as.tpl.ps1 = scripts/install.as.tpl.ps1
rename.csx = scripts/rename.csx
resharper.full.ps1 = scripts/resharper.full.ps1
switcher.freesql.json = scripts/switcher.freesql.json
- switcher.furion.json = scripts/switcher.furion.json
+ switcher.gurion.json = scripts/switcher.gurion.json
switcher.nsext.json = scripts/switcher.nsext.json
switcher.ps1 = scripts/switcher.ps1
sync.sln.files.csx = scripts/sync.sln.files.csx
@@ -57,6 +57,7 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{3C6F049E-3EE8-4D66-9AFF-E8A369032487}"
ProjectSection(SolutionItems) = preProject
nightly-build.yml = .github/workflows/nightly-build.yml
+ README.md = .github/workflows/README.md
release.yml = .github/workflows/release.yml
EndProjectSection
EndProject
@@ -99,10 +100,25 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "01.frameworks", "01.framewo
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "04.tests", "04.tests", "{89260294-80FC-49F1-8D73-AECD39AFF2B7}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.AdmServer.Tests", "src\backend\NetAdmin.AdmServer.Tests\NetAdmin.AdmServer.Tests.csproj", "{C7F27698-DA05-4ACD-B0D7-4791B3972002}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "05.tools", "05.tools", "{79409163-5006-405D-AC96-406FA0AD77B7}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests", "src\backend\UnitTests\UnitTests.csproj", "{C7F27698-DA05-4ACD-B0D7-4791B3972002}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Tests", "src\backend\NetAdmin.Tests\NetAdmin.Tests.csproj", "{00604162-C444-478B-B773-3AB23C856CA7}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{E80A1018-C354-4A26-9029-8847BB9DA864}"
+ ProjectSection(SolutionItems) = preProject
+ README.md = docker/README.md
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.SysComponent.Domain", "src\backend\NetAdmin.SysComponent.Domain\NetAdmin.SysComponent.Domain.csproj", "{51D6E603-0749-4A11-A78C-9E5BB127E03A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.AdmServer.Domain", "src\backend\NetAdmin.AdmServer.Domain\NetAdmin.AdmServer.Domain.csproj", "{932520DF-D312-415A-A128-1117F8221D68}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.AdmServer.Infrastructure", "src\backend\NetAdmin.AdmServer.Infrastructure\NetAdmin.AdmServer.Infrastructure.csproj", "{C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.SysComponent.Infrastructure", "src\backend\NetAdmin.SysComponent.Infrastructure\NetAdmin.SysComponent.Infrastructure.csproj", "{48EE6FC4-B64A-40D3-B889-36837E067880}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -164,6 +180,22 @@ Global
{00604162-C444-478B-B773-3AB23C856CA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{00604162-C444-478B-B773-3AB23C856CA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{00604162-C444-478B-B773-3AB23C856CA7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {51D6E603-0749-4A11-A78C-9E5BB127E03A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {51D6E603-0749-4A11-A78C-9E5BB127E03A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {51D6E603-0749-4A11-A78C-9E5BB127E03A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {51D6E603-0749-4A11-A78C-9E5BB127E03A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {932520DF-D312-415A-A128-1117F8221D68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {932520DF-D312-415A-A128-1117F8221D68}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {932520DF-D312-415A-A128-1117F8221D68}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {932520DF-D312-415A-A128-1117F8221D68}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {48EE6FC4-B64A-40D3-B889-36837E067880}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {48EE6FC4-B64A-40D3-B889-36837E067880}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {48EE6FC4-B64A-40D3-B889-36837E067880}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {48EE6FC4-B64A-40D3-B889-36837E067880}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{4DAF9366-855F-46BB-AE4C-660C92FA0697} = {C84EB5A0-37AD-4B17-A51E-E36888C4441E}
@@ -180,10 +212,15 @@ Global
{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
{89260294-80FC-49F1-8D73-AECD39AFF2B7} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
{C7F27698-DA05-4ACD-B0D7-4791B3972002} = {89260294-80FC-49F1-8D73-AECD39AFF2B7}
- {3C6F049E-3EE8-4D66-9AFF-E8A369032487} = {1129FE25-466B-4F4F-85FC-3752664245E1}
{00604162-C444-478B-B773-3AB23C856CA7} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
{34650E82-D257-46DA-BD6B-DE307113347B} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
+ {79409163-5006-405D-AC96-406FA0AD77B7} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
+ {51D6E603-0749-4A11-A78C-9E5BB127E03A} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
+ {932520DF-D312-415A-A128-1117F8221D68} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
+ {C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
+ {48EE6FC4-B64A-40D3-B889-36837E067880} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
+ {3C6F049E-3EE8-4D66-9AFF-E8A369032487} = {1129FE25-466B-4F4F-85FC-3752664245E1}
EndGlobalSection
EndGlobal
\ No newline at end of file
diff --git a/NetAdmin.sln.DotSettings b/NetAdmin.sln.DotSettings
index c1226460..bde2d8b2 100644
--- a/NetAdmin.sln.DotSettings
+++ b/NetAdmin.sln.DotSettings
@@ -27,6 +27,256 @@
NEVER
NEVER
NEVER
+ AD
+ AE
+ AF
+ AG
+ AI
+ AL
+ AM
+ AO
+ AQ
+ AR
+ AS
+ AT
+ AU
+ AW
+ AX
+ AZ
+ BA
+ BB
+ BD
+ BE
+ BF
+ BG
+ BH
+ BI
+ BJ
+ BL
+ BM
+ BN
+ BO
+ BQ
+ BR
+ BS
+ BT
+ BV
+ BW
+ BY
+ BZ
+ CA
+ CC
+ CD
+ CF
+ CG
+ CH
+ CI
+ CK
+ CL
+ CM
+ CN
+ CO
+ CR
+ CU
+ CV
+ CW
+ CX
+ CY
+ CZ
+ DE
+ DJ
+ DK
+ DM
+ DO
+ DZ
+ EC
+ EE
+ EG
+ EH
+ ER
+ ES
+ ET
+ FI
+ FJ
+ FK
+ FM
+ FO
+ FR
+ GA
+ GB
+ GD
+ GE
+ GF
+ GG
+ GH
+ GI
+ GL
+ GM
+ GN
+ GP
+ GQ
+ GR
+ GS
+ GT
+ GU
+ GW
+ GY
+ HK
+ HM
+ HN
+ HR
+ HT
+ HU
+ ID
+ IE
+ IL
+ IM
+ IN
+ IO
+ IQ
+ IR
+ IS
+ IT
+ JE
+ JM
+ JO
+ JP
+ KE
+ KG
+ KH
+ KI
+ KM
+ KN
+ KP
+ KR
+ KW
+ KY
+ KZ
+ LA
+ LB
+ LC
+ LI
+ LK
+ LR
+ LS
+ LT
+ LU
+ LV
+ LY
+ MA
+ MC
+ MD
+ ME
+ MF
+ MG
+ MH
+ MK
+ ML
+ MM
+ MN
+ MO
+ MP
+ MQ
+ MR
+ MS
+ MT
+ MU
+ MV
+ MW
+ MX
+ MY
+ MZ
+ NA
+ NC
+ NE
+ NF
+ NG
+ NI
+ NL
+ NO
+ NP
+ NR
+ NU
+ NZ
+ OM
+ OTP
+ PA
+ PE
+ PF
+ PG
+ PH
+ PK
+ PL
+ PM
+ PN
+ PR
+ PS
+ PT
+ PW
+ PY
+ QA
+ RE
+ RO
+ RS
+ RU
+ RW
+ SA
+ SB
+ SC
+ SD
+ SE
+ SG
+ SH
+ SI
+ SJ
+ SK
+ SL
+ SM
+ SN
+ SO
+ SR
+ SS
+ ST
+ SV
+ SX
+ SY
+ SZ
+ TC
+ TD
+ TF
+ TG
+ TH
+ TJ
+ TK
+ TL
+ TM
+ TN
+ TO
+ TR
+ TT
+ TV
+ TW
+ TZ
+ UA
+ UG
+ UM
+ US
+ UY
+ UZ
+ VA
+ VC
+ VE
+ VG
+ VI
+ VN
+ VU
+ WF
+ WS
+ YE
+ YT
+ ZA
+ ZM
+ ZW
<Policy><Descriptor Staticness="Static" AccessRightKinds="Private" Description="Static readonly fields (private)"><ElementKinds><Kind Name="READONLY_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /></Policy>
<Policy><Descriptor Staticness="Any" AccessRightKinds="Private" Description="Constant fields (private)"><ElementKinds><Kind Name="CONSTANT_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="_" Suffix="" Style="AA_BB" /></Policy>
<Policy><Descriptor Staticness="Any" AccessRightKinds="Protected, ProtectedInternal, Internal, Public, PrivateProtected" Description="Constant fields (not private)"><ElementKinds><Kind Name="CONSTANT_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AA_BB" /></Policy>
diff --git a/assets/res/CountryCodes.ln b/assets/res/CountryCodes.ln
new file mode 100644
index 00000000..e2937ce9
--- /dev/null
+++ b/assets/res/CountryCodes.ln
@@ -0,0 +1,249 @@
+不丹
+东帝汶
+中国
+中非
+丹麦
+乌克兰
+乌兹别克斯坦
+乌干达
+乌拉圭
+乍得
+也门
+亚美尼亚
+以色列
+伊拉克
+伊朗
+伯利兹
+佛得角
+俄罗斯
+保加利亚
+克罗地亚
+关岛
+冈比亚
+冰岛
+几内亚
+几内亚比绍
+列支敦士登
+刚果共和国
+刚果民主共和国
+利比亚
+利比里亚
+加拿大
+加纳
+加蓬
+匈牙利
+北马其顿
+北马里亚纳群岛
+南乔治亚和南桑威奇群岛
+南极洲
+南苏丹
+南非
+博茨瓦纳
+卡塔尔
+卢旺达
+卢森堡
+印度
+印度尼西亚
+危地马拉
+厄瓜多尔
+厄立特里亚
+叙利亚
+古巴
+台湾
+吉尔吉斯斯坦
+吉布提
+哈萨克斯坦
+哥伦比亚
+哥斯达黎加
+喀麦隆
+图瓦卢
+土库曼斯坦
+土耳其
+圣卢西亚
+圣基茨和尼维斯
+圣多美和普林西比
+圣巴泰勒米
+圣文森特和格林纳丁斯
+圣皮埃尔和密克隆
+圣诞岛
+圣赫勒拿
+圣马力诺
+圭亚那
+坦桑尼亚
+埃及
+埃塞俄比亚
+基里巴斯
+塔吉克斯坦
+塞内加尔
+塞尔维亚
+塞拉利昂
+塞浦路斯
+塞舌尔
+墨西哥
+多哥
+多米尼克
+多米尼加
+奥兰
+奥地利
+委内瑞拉
+孟加拉国
+安哥拉
+安圭拉
+安提瓜和巴布达
+安道尔
+密克罗尼西亚联邦
+尼加拉瓜
+尼日利亚
+尼日尔
+尼泊尔
+巴勒斯坦
+巴哈马
+巴基斯坦
+巴巴多斯
+巴布亚新几内亚
+巴拉圭
+巴拿马
+巴林
+巴西
+布基纳法索
+布隆迪
+布韦岛
+希腊
+帕劳
+库克群岛
+库拉索
+开曼群岛
+德国
+意大利
+所罗门群岛
+托克劳
+拉脱维亚
+挪威
+捷克
+摩尔多瓦
+摩洛哥
+摩纳哥
+文莱
+斐济
+斯威士兰
+斯洛伐克
+斯洛文尼亚
+斯瓦尔巴和扬马延
+斯里兰卡
+新加坡
+新喀里多尼亚
+新西兰
+日本
+智利
+朝鲜
+柬埔寨
+根西
+格林纳达
+格陵兰
+格鲁吉亚
+梵蒂冈
+比利时
+毛里塔尼亚
+毛里求斯
+汤加
+沙特阿拉伯
+法国
+法属南部和南极领地
+法属圣马丁
+法属圭亚那
+法属波利尼西亚
+法罗群岛
+波兰
+波多黎各
+波黑
+泰国
+泽西
+津巴布韦
+洪都拉斯
+海地
+澳大利亚
+澳门
+爱尔兰
+爱沙尼亚
+牙买加
+特克斯和凯科斯群岛
+特立尼达和多巴哥
+玻利维亚
+瑙鲁
+瑞典
+瑞士
+瓜德罗普
+瓦利斯和富图纳
+瓦努阿图
+留尼汪
+白俄罗斯
+百慕大
+皮特凯恩群岛
+直布罗陀
+福克兰群岛
+科威特
+科摩罗
+科特迪瓦
+科科斯基林群岛
+秘鲁
+突尼斯
+立陶宛
+索马里
+约旦
+纳米比亚
+纽埃
+缅甸
+罗马尼亚
+美国
+美国本土外小岛屿
+美属维尔京群岛
+美属萨摩亚
+老挝
+肯尼亚
+芬兰
+苏丹
+苏里南
+英国
+英属印度洋领地
+英属维尔京群岛
+荷兰
+荷兰加勒比区
+荷属圣马丁
+莫桑比克
+莱索托
+菲律宾
+萨尔瓦多
+萨摩亚
+葡萄牙
+蒙古
+蒙特塞拉特
+西撒哈拉
+西班牙
+诺福克岛
+贝宁
+赞比亚
+赤道几内亚
+赫德岛和麦克唐纳群岛
+越南
+阿塞拜疆
+阿富汗
+阿尔及利亚
+阿尔巴尼亚
+阿曼
+阿根廷
+阿联酋
+阿鲁巴
+韩国
+香港
+马尔代夫
+马恩岛
+马拉维
+马提尼克
+马来西亚
+马约特
+马绍尔群岛
+马耳他
+马达加斯加
+马里
+黎巴嫩
+黑山
\ No newline at end of file
diff --git a/assets/res/NetAdmin.AdmServer.Fields.ln b/assets/res/NetAdmin.AdmServer.Fields.ln
new file mode 100644
index 00000000..e69de29b
diff --git a/assets/res/NetAdmin.AdmServer.Statements.ln b/assets/res/NetAdmin.AdmServer.Statements.ln
new file mode 100644
index 00000000..e69de29b
diff --git a/assets/res/NetAdmin.Fields.ln b/assets/res/NetAdmin.Fields.ln
new file mode 100644
index 00000000..ce1e80c2
--- /dev/null
+++ b/assets/res/NetAdmin.Fields.ln
@@ -0,0 +1,70 @@
+不为其中之一
+不以什么开始
+不以什么结束
+不包含
+不排序
+不等于
+丧偶
+中专
+中共党员
+为其中之一
+以什么开始
+以什么结束
+保密
+保密
+信息
+倒序排序
+共青团员
+出生证
+初中
+包含
+博士
+博士后
+同步数据库结构
+外国人居留证
+外部错误
+大专
+大于
+大于等于
+女
+女
+宕机
+小于
+小于等于
+小学
+已婚
+并且
+成功
+或者
+护照
+插入种子数据
+无效操作
+无效输入
+日期范围
+未处理异常
+未婚
+本科
+比较数据库结构
+港澳台通行证
+男
+男
+硕士
+示例导出
+离异
+等于
+等于
+等于
+管理模块
+系统模块
+结果非预期
+群众
+自定义
+范围
+警告
+调试
+跟踪
+身份证
+错误
+随机排序
+顺序排序
+高中
\ No newline at end of file
diff --git a/assets/res/NetAdmin.Statements.ln b/assets/res/NetAdmin.Statements.ln
new file mode 100644
index 00000000..6aafb9b4
--- /dev/null
+++ b/assets/res/NetAdmin.Statements.ln
@@ -0,0 +1,21 @@
+6位数字
+8位以上数字字母组合
+XML注释文件不存在
+中文姓名
+事务已回滚
+事务已提交
+区号电话号码分机号
+参数格式不正确
+开始事务
+支付宝账号
+数据库同步开始
+数据库结构同步完成
+无效端口号
+无效证件号码
+时间表达式
+用户名不能是手机号码
+用户名长度4位以上
+请求对象不能为空
+邀请码不正确
+配置文件初始化完毕
+非JSON字符串
\ No newline at end of file
diff --git a/assets/res/Fields.ln b/assets/res/NetAdmin.SysComponent.Fields.ln
similarity index 59%
rename from assets/res/Fields.ln
rename to assets/res/NetAdmin.SysComponent.Fields.ln
index 95b42809..c95fefe1 100644
--- a/assets/res/Fields.ln
+++ b/assets/res/NetAdmin.SysComponent.Fields.ln
@@ -2,66 +2,29 @@
上次执行状态
上次执行耗时
下次执行时间
-不为其中之一
-不以什么开始
-不以什么结束
-不包含
-不排序
-不等于
-丧偶
-中专
-中共党员
-为其中之一
人工审核
-以什么开始
-以什么结束
作业名称
作业状态
-保密
-信息
-倒序排序
全部数据
公告
-共青团员
-出生证
创建时间
-初中
删除
-包含
-博士
-博士后
发送失败
-同步数据库结构
响应体
响应状态码
唯一编码
备注
-外国人居留证
-外部错误
-大专
-大于
-大于等于
-女
字典内容导出
-宕机
客户端IP
-小于
-小于等于
-小学
已发送
-已婚
已校验
已读
-并且
-成功
-或者
所属角色
所属部门
手机
手机号
执行耗时
执行计划
-护照
指定部门数据
按钮
排序
@@ -69,66 +32,41 @@
接口导出
接口描述
接口路径
-插入种子数据
操作系统
数据范围
-无效操作
-无效输入
无限权限
-日期范围
是否启用
显示仪表板
最后登录时间
-未处理异常
-未婚
未读
本人数据
-本科
本部门和下级部门数据
本部门数据
框架
-比较数据库结构
注册
消息主题
消息摘要
消息类型
-港澳台通行证
用户代理
用户名
用户导出
电子邮箱
-男
登录
登录名
登录日志导出
-硕士
-示例导出
-离异
空闲
站内信导出
-等于
等待发送
-管理模块
-系统模块
绑定手机号码
-结果非预期
-群众
-自定义
-范围
菜单
角色名称
角色导出
解绑手机号码
-警告
计划作业导出
计划作业执行记录导出
请求方式
请求日志导出
-调试
-跟踪
跟踪标识
-跟踪编号
-身份证
运行
通知
邮箱号
@@ -137,11 +75,7 @@
配置导出
重设密码
链接
-错误
-随机排序
项值
项名
-顺序排序
-高中
默认角色
默认部门
\ No newline at end of file
diff --git a/assets/res/Statements.ln b/assets/res/NetAdmin.SysComponent.Statements.ln
similarity index 82%
rename from assets/res/Statements.ln
rename to assets/res/NetAdmin.SysComponent.Statements.ln
index 02bc1d2f..d65c5763 100644
--- a/assets/res/Statements.ln
+++ b/assets/res/NetAdmin.SysComponent.Statements.ln
@@ -1,17 +1,9 @@
1分钟内只能发送1次
-6位数字
-8位以上数字字母组合
-XML注释文件不存在
-中文姓名
-事务已回滚
-事务已提交
人机校验请求不能为空
人机验证未通过
作业名称不能为空
允许的文件大小
允许的文件格式
-区号电话号码分机号
-参数格式不正确
唯一编码不能为空
图标代码不能为空
图标名称不能为空
@@ -19,55 +11,61 @@ XML注释文件不存在
字典名称不能为空
字典目录不存在
字典目录编号不能为空
+字典目录编号不能为空
字典编码不能为空
学历不正确
密码不能为空
+密码不能为空
+密码不能为空
+密码不能为空
+已处理完毕
+已处理完毕
已处理完毕
并发冲突_请稍后重试
-开始事务
性别不正确
手机号码不正确
手机号码不能为空
接口编码不存在
-支付宝账号
政治面貌不正确
-数据库同步开始
数据库服务器时钟偏移
-数据库结构同步完成
文件不能为空
新密码不能为空
新手机号码验证码不正确
-无效端口号
-无效证件号码
旧密码不正确
旧密码不能为空
旧手机号码不正确
旧手机号码验证码不正确
-时间表达式
时间计划不能为空
未指定部门
未获取到待执行任务
模块名称不能为空
+模块类型不能为空
模块说明不能为空
此节点已下线
+此节点已下线
民族不正确
消息主题不能为空
消息内容不能为空
父节点不存在
用户不存在
用户名不能为空
-用户名不能是手机号码
+用户名不能为空
+用户名不能为空
用户名或密码错误
-用户名长度4位以上
用户头像不能为空
用户编号不存在
目标设备不能为空
+目标设备不能为空
+短信验证请求不能为空
+短信验证请求不能为空
短信验证请求不能为空
站内信不存在
站内信状态不正确
站内信类型不正确
缓存键不能为空
网络地址不正确
+网络地址不正确
+网络地址不正确
菜单名称不能为空
菜单标题不能为空
菜单类型不正确
@@ -83,21 +81,19 @@ XML注释文件不存在
该部门下存在子部门
该部门下存在用户
请求地址不能为空
-请求对象不能为空
请求方法不正确
+请稍后重试
请联系管理员激活账号
读取用户令牌出错
账号不能为空
-邀请码不正确
邮箱验证码不正确
部门不存在
部门名称不能为空
-配置文件初始化完毕
键值不能为空
键名称不能为空
+键名称不能为空
随机延时结束时间不正确
随机延时起始时间不正确
-非JSON字符串
验证数据不能为空
验证码不正确
验证码不能为空
diff --git a/build/prebuild.targets b/build/prebuild.targets
index ffa1687e..85f82d72 100644
--- a/build/prebuild.targets
+++ b/build/prebuild.targets
@@ -9,22 +9,4 @@
Command="dotnet t4 ./gen.cs.tt -o ../dist/backend/$(ProjectName)/Ln.cs"
StdOutEncoding="utf-8" />
-
-
- Languages/Statements.ln
-
-
- Languages/Nations.ln
-
-
- Languages/Fields.ln
-
-
- Languages/Ln.resx
- PublicResXFileCodeGenerator
-
-
- Languages/Ln.Designer.cs
-
-
\ No newline at end of file
diff --git a/docker/README.md b/docker/README.md
new file mode 100644
index 00000000..6d0eac4b
--- /dev/null
+++ b/docker/README.md
@@ -0,0 +1 @@
+docker
\ No newline at end of file
diff --git a/refs/Furion b/refs/Furion
deleted file mode 160000
index d23c7cca..00000000
--- a/refs/Furion
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit d23c7cca552e9b1b1365349741139a012e2bc955
diff --git a/scripts/2.git.release.ps1 b/scripts/2.git.release.ps1
index b354d715..09ff4de9 100644
--- a/scripts/2.git.release.ps1
+++ b/scripts/2.git.release.ps1
@@ -20,8 +20,10 @@ git tag -d $tag
git tag $tag
git push --tags origin release
Start-Process -FilePath "https://github.com/nsnail/NetAdmin/compare/main...release"
-Write-Host "按『Enter』回到主分支,『Ctrl+C』退出"
+Write-Host "按『Enter』回到tk分支,『Ctrl+C』退出"
Pause
git checkout main
git pull
-git branch -D release
\ No newline at end of file
+git branch -D release
+git branch -D tk
+git checkout -b tk
\ No newline at end of file
diff --git a/scripts/git.del.obsolete.tags.ps1 b/scripts/4.git.del.obsolete.tags.ps1
similarity index 100%
rename from scripts/git.del.obsolete.tags.ps1
rename to scripts/4.git.del.obsolete.tags.ps1
diff --git a/scripts/gen.resx.tt b/scripts/gen.resx.tt
index ba5cf23f..29f8b5cd 100644
--- a/scripts/gen.resx.tt
+++ b/scripts/gen.resx.tt
@@ -1,6 +1,7 @@
<#@ template language="C#" #>
<#@ output encoding="utf-8" extension="resx" #>
<#@ import namespace="System.IO" #>
+<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text.RegularExpressions" #>
@@ -28,14 +29,11 @@
<#
var regex = new Regex(@"^\d", RegexOptions.Compiled);
- foreach (var file in Directory.GetFiles("../assets/res/", "*.ln"))
+ foreach (var line in Directory.GetFiles("../assets/res/", "*.ln").SelectMany(x => File.ReadLines(x)).Distinct())
{
- foreach (var line in File.ReadLines(file))
- {
#>
<#= line #>" xml:space="preserve"><#= line #>
<#
- }
}
#>
\ No newline at end of file
diff --git a/scripts/switcher.furion.json b/scripts/switcher.gurion.json
similarity index 52%
rename from scripts/switcher.furion.json
rename to scripts/switcher.gurion.json
index edc4de27..3ec2b573 100644
--- a/scripts/switcher.furion.json
+++ b/scripts/switcher.gurion.json
@@ -1,15 +1,15 @@
{
"solution": "NetAdmin.sln",
"mappings": {
- "Furion.Pure.NS": "../refs/Furion/framework/Furion.Pure/Furion.Pure.csproj"
+ "Gurion": "../refs/Gurion/src/Gurion.csproj"
},
"restore": [
{
"name": "NetAdmin.Infrastructure",
"packages": [
{
- "packageName": "Furion.Pure.NS",
- "version": "4.9.5.8-ns1"
+ "packageName": "Gurion",
+ "version": "1.1.0"
}
]
}
diff --git a/scripts/sync.sln.files.csx b/scripts/sync.sln.files.csx
index b197fa69..f0e256f2 100644
--- a/scripts/sync.sln.files.csx
+++ b/scripts/sync.sln.files.csx
@@ -17,6 +17,20 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "meta", "meta", "{5198A03D-0
"""
);
+content = Regex.Replace(
+ content,
+ "Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"docker\", \"docker\", \"{E80A1018-C354-4A26-9029-8847BB9DA864}\"(?:.|\n)*?EndProject",
+ $$"""
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{E80A1018-C354-4A26-9029-8847BB9DA864}"
+ ProjectSection(SolutionItems) = preProject
+{{string.Join('\n',
+ Directory.GetFiles(@"../docker", "*")
+ .Select(x=>$" {Path.GetFileName(x)} = docker/{Path.GetFileName(x)}")
+ )}}
+ EndProject
+"""
+);
+
content = Regex.Replace(
content,
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"workflows\", \"workflows\", \"{3C6F049E-3EE8-4D66-9AFF-E8A369032487}\"(?:.|\n)*?EndProject",
diff --git a/src/backend/GlobalUsings.cs b/src/backend/GlobalUsings.cs
index 587d8489..f89552ee 100644
--- a/src/backend/GlobalUsings.cs
+++ b/src/backend/GlobalUsings.cs
@@ -25,16 +25,16 @@ global using FreeSql;
global using FreeSql.Aop;
global using FreeSql.DataAnnotations;
global using FreeSql.Internal.Model;
-global using Furion;
-global using Furion.Authorization;
-global using Furion.ConfigurableOptions;
-global using Furion.DataEncryption;
-global using Furion.DataValidation;
-global using Furion.DependencyInjection;
-global using Furion.DynamicApiController;
-global using Furion.EventBus;
-global using Furion.SpecificationDocument;
-global using Furion.UnifyResult;
+global using Gurion;
+global using Gurion.Authorization;
+global using Gurion.ConfigurableOptions;
+global using Gurion.DataEncryption;
+global using Gurion.DataValidation;
+global using Gurion.DependencyInjection;
+global using Gurion.DynamicApiController;
+global using Gurion.EventBus;
+global using Gurion.SpecificationDocument;
+global using Gurion.UnifyResult;
global using Mapster;
global using Microsoft.AspNetCore.Authorization;
global using Microsoft.AspNetCore.Builder;
diff --git a/src/backend/NetAdmin.AdmServer.Application/NetAdmin.AdmServer.Application.csproj b/src/backend/NetAdmin.AdmServer.Application/NetAdmin.AdmServer.Application.csproj
index b00e0fa0..3c99a87b 100644
--- a/src/backend/NetAdmin.AdmServer.Application/NetAdmin.AdmServer.Application.csproj
+++ b/src/backend/NetAdmin.AdmServer.Application/NetAdmin.AdmServer.Application.csproj
@@ -1,9 +1,10 @@
-
- DBTYPE_SQLITE
-
+
+
+
+
\ No newline at end of file
diff --git a/src/backend/NetAdmin.AdmServer.Application/NetAdmin.AdmServer.Application.csproj.DotSettings b/src/backend/NetAdmin.AdmServer.Application/NetAdmin.AdmServer.Application.csproj.DotSettings
deleted file mode 100644
index b8097e57..00000000
--- a/src/backend/NetAdmin.AdmServer.Application/NetAdmin.AdmServer.Application.csproj.DotSettings
+++ /dev/null
@@ -1,2 +0,0 @@
-
- True
\ No newline at end of file
diff --git a/src/backend/NetAdmin.AdmServer.Cache/NetAdmin.AdmServer.Cache.csproj b/src/backend/NetAdmin.AdmServer.Cache/NetAdmin.AdmServer.Cache.csproj
index ceb4baae..03e702c7 100644
--- a/src/backend/NetAdmin.AdmServer.Cache/NetAdmin.AdmServer.Cache.csproj
+++ b/src/backend/NetAdmin.AdmServer.Cache/NetAdmin.AdmServer.Cache.csproj
@@ -1,7 +1,7 @@
-
+
\ No newline at end of file
diff --git a/src/backend/NetAdmin.AdmServer.Domain/NetAdmin.AdmServer.Domain.csproj b/src/backend/NetAdmin.AdmServer.Domain/NetAdmin.AdmServer.Domain.csproj
new file mode 100644
index 00000000..c014e087
--- /dev/null
+++ b/src/backend/NetAdmin.AdmServer.Domain/NetAdmin.AdmServer.Domain.csproj
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/backend/NetAdmin.AdmServer.Host/Extensions/ServiceCollectionExtensions.cs b/src/backend/NetAdmin.AdmServer.Host/Extensions/ServiceCollectionExtensions.cs
index 22f4cd96..6e01a2b5 100644
--- a/src/backend/NetAdmin.AdmServer.Host/Extensions/ServiceCollectionExtensions.cs
+++ b/src/backend/NetAdmin.AdmServer.Host/Extensions/ServiceCollectionExtensions.cs
@@ -1,8 +1,8 @@
using NetAdmin.AdmServer.Host.Filters;
-using NetAdmin.Domain.Contexts;
using NetAdmin.Domain.DbMaps.Dependency.Fields;
-using NetAdmin.Domain.Enums.Sys;
-using NetAdmin.Host.Extensions;
+using NetAdmin.SysComponent.Domain.Contexts;
+using NetAdmin.SysComponent.Domain.Enums.Sys;
+using NetAdmin.SysComponent.Host.Extensions;
namespace NetAdmin.AdmServer.Host.Extensions;
diff --git a/src/backend/NetAdmin.AdmServer.Host/NetAdmin.AdmServer.Host.csproj b/src/backend/NetAdmin.AdmServer.Host/NetAdmin.AdmServer.Host.csproj
index 58eb7b2c..6d799c87 100644
--- a/src/backend/NetAdmin.AdmServer.Host/NetAdmin.AdmServer.Host.csproj
+++ b/src/backend/NetAdmin.AdmServer.Host/NetAdmin.AdmServer.Host.csproj
@@ -1,17 +1,11 @@
-
-
-
-
-
- PreserveNewest
-
+
diff --git a/src/backend/NetAdmin.AdmServer.Host/Startup.cs b/src/backend/NetAdmin.AdmServer.Host/Startup.cs
index e671dc20..f9186b2f 100644
--- a/src/backend/NetAdmin.AdmServer.Host/Startup.cs
+++ b/src/backend/NetAdmin.AdmServer.Host/Startup.cs
@@ -91,7 +91,8 @@ namespace NetAdmin.AdmServer.Host
.AddFreeSqlWithArgs() // 添加 freeSql
.AddRemoteRequest() // 添加远程请求
.AddCorsAccessor() // 添加支持跨域访问
- .AddContextUser() // 添加上下文用户
+ .AddContextUserToken() // 添加上下文用户令牌
+ .AddContextUserInfo() // 添加上下文用户信息
.AddRedisCache() // 添加 Redis 缓存
.AddSchedules() // 添加计划任务
diff --git a/src/backend/NetAdmin.AdmServer.Host/settings.Development.json b/src/backend/NetAdmin.AdmServer.Host/settings.Development.json
deleted file mode 100644
index 9e26dfee..00000000
--- a/src/backend/NetAdmin.AdmServer.Host/settings.Development.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
\ No newline at end of file
diff --git a/src/backend/NetAdmin.AdmServer.Host/settings.Test.json b/src/backend/NetAdmin.AdmServer.Host/settings.Test.json
deleted file mode 100644
index 9e26dfee..00000000
--- a/src/backend/NetAdmin.AdmServer.Host/settings.Test.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
\ No newline at end of file
diff --git a/src/backend/NetAdmin.AdmServer.Host/settings.json b/src/backend/NetAdmin.AdmServer.Host/settings.json
deleted file mode 100644
index 44762fdf..00000000
--- a/src/backend/NetAdmin.AdmServer.Host/settings.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
- "SpecificationDocumentSettings": {
- "GroupOpenApiInfos": [
- {
- "Group": "Sys",
- "Title": "系统组件",
- "Description": "NetAdmin - 系统组件",
- },
- {
- "Group": "Adm",
- "Title": "管理服务",
- "Description": "NetAdmin - 管理服务",
- },
- {
- "Group": "Tpl",
- "Visible": false,
- },
- {
- "Group": "Probe",
- "Visible": false,
- }
- ],
- "SecurityDefinitions": [
- {
- "Id": "Bearer",
- "Type": "ApiKey",
- "Name": "Authorization",
- "Description": "JWT Authorization header using the Bearer scheme.",
- "BearerFormat": "JWT",
- "Scheme": "bearer",
- "In": "Header",
- "Requirement": {
- "Scheme": {
- "Reference": {
- "Id": "Bearer",
- "Type": "SecurityScheme"
- },
- "Accesses": []
- }
- }
- }
- ]
- }
-}
\ No newline at end of file
diff --git a/src/backend/NetAdmin.AdmServer.Infrastructure/AdmSettings.Development.json b/src/backend/NetAdmin.AdmServer.Infrastructure/AdmSettings.Development.json
new file mode 100644
index 00000000..6fc2bc4b
--- /dev/null
+++ b/src/backend/NetAdmin.AdmServer.Infrastructure/AdmSettings.Development.json
@@ -0,0 +1,10 @@
+{
+ "$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
+ "Logging": {
+ "LogLevel": {
+ "Default": "Debug",
+ "Microsoft.AspNetCore": "Debug",
+ "System.Logging.EventBusService": "Debug"
+ },
+ }
+}
\ No newline at end of file
diff --git a/src/backend/NetAdmin.AdmServer.Infrastructure/AdmSettings.Remote.json b/src/backend/NetAdmin.AdmServer.Infrastructure/AdmSettings.Remote.json
new file mode 100644
index 00000000..6fc2bc4b
--- /dev/null
+++ b/src/backend/NetAdmin.AdmServer.Infrastructure/AdmSettings.Remote.json
@@ -0,0 +1,10 @@
+{
+ "$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
+ "Logging": {
+ "LogLevel": {
+ "Default": "Debug",
+ "Microsoft.AspNetCore": "Debug",
+ "System.Logging.EventBusService": "Debug"
+ },
+ }
+}
\ No newline at end of file
diff --git a/src/backend/NetAdmin.AdmServer.Infrastructure/AdmSettings.Test.json b/src/backend/NetAdmin.AdmServer.Infrastructure/AdmSettings.Test.json
new file mode 100644
index 00000000..6fc2bc4b
--- /dev/null
+++ b/src/backend/NetAdmin.AdmServer.Infrastructure/AdmSettings.Test.json
@@ -0,0 +1,10 @@
+{
+ "$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
+ "Logging": {
+ "LogLevel": {
+ "Default": "Debug",
+ "Microsoft.AspNetCore": "Debug",
+ "System.Logging.EventBusService": "Debug"
+ },
+ }
+}
\ No newline at end of file
diff --git a/src/backend/NetAdmin.AdmServer.Infrastructure/AdmSettings.json b/src/backend/NetAdmin.AdmServer.Infrastructure/AdmSettings.json
new file mode 100644
index 00000000..a4bd517e
--- /dev/null
+++ b/src/backend/NetAdmin.AdmServer.Infrastructure/AdmSettings.json
@@ -0,0 +1,99 @@
+{
+ "$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
+ // Swagger文档配置 ------------------------------------------------------------------------------
+ "SpecificationDocumentSettings": {
+ "GroupOpenApiInfos": [
+ {
+ "Group": "Sys",
+ "Title": "系统组件",
+ "Description": "NetAdmin - 系统组件"
+ },
+ {
+ "Group": "Adm",
+ "Title": "管理服务",
+ "Description": "NetAdmin - 管理服务"
+ },
+ {
+ "Group": "Tpl",
+ "Visible": false
+ },
+ {
+ "Group": "Probe",
+ "Visible": false
+ }
+ ],
+ "XmlComments": [
+ "NetAdmin.AdmServer.Application.xml",
+ "NetAdmin.AdmServer.Cache.xml",
+ "NetAdmin.AdmServer.Domain.xml",
+ "NetAdmin.AdmServer.Host.xml",
+ "NetAdmin.AdmServer.Infrastructure.xml",
+ "FreeSql.xml",
+ "NetAdmin.Application.xml",
+ "NetAdmin.Cache.xml",
+ "NetAdmin.Domain.xml",
+ "NetAdmin.Host.xml",
+ "NetAdmin.Infrastructure.xml",
+ "NetAdmin.SysComponent.Application.xml",
+ "NetAdmin.SysComponent.Cache.xml",
+ "NetAdmin.SysComponent.Domain.xml",
+ "NetAdmin.SysComponent.Host.xml",
+ "NetAdmin.SysComponent.Infrastructure.xml"
+ ]
+ },
+ // 数据库配置 --------------------------------------------------------------------------------------------------------
+ "Database": {
+ "DbType": "Sqlite",
+ "ConnStr": "data source=NetAdmin.db",
+ "SeedDataRelativePath": "SeedData"
+ },
+ // JWT鉴权配置 -------------------------------------------------------------------------------------------------------
+ "JWTSettings": {
+ "ValidateIssuerSigningKey": true,
+ "IssuerSigningKey": "bO0BCAGxpxYnm6AE4XpgO25T27NayFzjGgfDqBuzUzD6ROpFiZUi3KjVg93bdGek",
+ "ValidateIssuer": true,
+ "ValidIssuer": "签发方",
+ "ValidateAudience": true,
+ "ValidAudience": "签收方",
+ "ValidateLifetime": true,
+ "ExpiredTime": 5256000,
+ "ClockSkew": 5,
+ "Algorithm": "HS256"
+ },
+ // 日志配置 ----------------------------------------------------------------------------------------------------------
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning",
+ "System.Logging.EventBusService": "Error"
+ }
+ },
+ // Redis配置 --------------------------------------------------------------------------------------------------------
+ "Redis": {
+ "Instances": [
+ {
+ "Name": "DataCache",
+ "ConnStr": "localhost:6379,abortConnect=false",
+ "DataBase": 0
+ }
+ ]
+ },
+ // 文件上传配置 -------------------------------------------------------------------------------------------------------
+ "Upload": {
+ "ContentTypes": [
+ "image/jpg",
+ "image/png",
+ "image/jpeg",
+ "image/gif"
+ ],
+ "MaxSize": 1073741824,
+ "Minio": {
+ "ServerAddress": "vm-ubt-1:9000",
+ "AccessKey": "nVMM0gSqwyIjM8iZ",
+ "SecretKey": "F8OZngGrNsZSYn4MP9swwMSf5rfm61EC",
+ "BucketName": "cloud-code",
+ "AccessUrl": "http://vm-ubt-1:9000",
+ "Secure": false
+ }
+ },
+}
\ No newline at end of file
diff --git a/src/backend/NetAdmin.AdmServer.Infrastructure/NetAdmin.AdmServer.Infrastructure.csproj b/src/backend/NetAdmin.AdmServer.Infrastructure/NetAdmin.AdmServer.Infrastructure.csproj
new file mode 100644
index 00000000..13a8758f
--- /dev/null
+++ b/src/backend/NetAdmin.AdmServer.Infrastructure/NetAdmin.AdmServer.Infrastructure.csproj
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+ Languages/NetAdmin.AdmServer.Statements.ln
+
+
+ Languages/NetAdmin.AdmServer.Fields.ln
+
+
+
+
+ PreserveNewest
+
+
+
\ No newline at end of file
diff --git a/src/backend/NetAdmin.SysComponent.Application/Modules/Tpl/IExampleModule.cs b/src/backend/NetAdmin.Application/Modules/Tpl/IExampleModule.cs
similarity index 82%
rename from src/backend/NetAdmin.SysComponent.Application/Modules/Tpl/IExampleModule.cs
rename to src/backend/NetAdmin.Application/Modules/Tpl/IExampleModule.cs
index 897f0334..fd653293 100644
--- a/src/backend/NetAdmin.SysComponent.Application/Modules/Tpl/IExampleModule.cs
+++ b/src/backend/NetAdmin.Application/Modules/Tpl/IExampleModule.cs
@@ -1,6 +1,7 @@
+using NetAdmin.Domain.Dto.Dependency;
using NetAdmin.Domain.Dto.Tpl.Example;
-namespace NetAdmin.SysComponent.Application.Modules.Tpl;
+namespace NetAdmin.Application.Modules.Tpl;
///
/// 示例模块
diff --git a/src/backend/NetAdmin.Application/NetAdmin.Application.csproj b/src/backend/NetAdmin.Application/NetAdmin.Application.csproj
index ce1aa961..c21da26e 100644
--- a/src/backend/NetAdmin.Application/NetAdmin.Application.csproj
+++ b/src/backend/NetAdmin.Application/NetAdmin.Application.csproj
@@ -1,7 +1,4 @@
-
- DBTYPE_SQLITE
-
diff --git a/src/backend/NetAdmin.Application/Services/Tpl/Dependency/IExampleService.cs b/src/backend/NetAdmin.Application/Services/Tpl/Dependency/IExampleService.cs
new file mode 100644
index 00000000..670d0f04
--- /dev/null
+++ b/src/backend/NetAdmin.Application/Services/Tpl/Dependency/IExampleService.cs
@@ -0,0 +1,8 @@
+using NetAdmin.Application.Modules.Tpl;
+
+namespace NetAdmin.Application.Services.Tpl.Dependency;
+
+///
+/// 示例服务
+///
+public interface IExampleService : IService, IExampleModule;
\ No newline at end of file
diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Tpl/ExampleService.cs b/src/backend/NetAdmin.Application/Services/Tpl/ExampleService.cs
similarity index 92%
rename from src/backend/NetAdmin.SysComponent.Application/Services/Tpl/ExampleService.cs
rename to src/backend/NetAdmin.Application/Services/Tpl/ExampleService.cs
index 994ad1b9..bf23ecea 100644
--- a/src/backend/NetAdmin.SysComponent.Application/Services/Tpl/ExampleService.cs
+++ b/src/backend/NetAdmin.Application/Services/Tpl/ExampleService.cs
@@ -1,8 +1,10 @@
+using NetAdmin.Application.Repositories;
+using NetAdmin.Application.Services.Tpl.Dependency;
using NetAdmin.Domain.DbMaps.Tpl;
+using NetAdmin.Domain.Dto.Dependency;
using NetAdmin.Domain.Dto.Tpl.Example;
-using NetAdmin.SysComponent.Application.Services.Tpl.Dependency;
-namespace NetAdmin.SysComponent.Application.Services.Tpl;
+namespace NetAdmin.Application.Services.Tpl;
///
public sealed class ExampleService(BasicRepository rpo) //
@@ -27,10 +29,10 @@ public sealed class ExampleService(BasicRepository rpo) //
{
req.ThrowIfInvalid();
return QueryInternal(req)
- #if DBTYPE_SQLSERVER
+ #if DBTYPE_SQLSERVER
.WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait)
- #endif
- .CountAsync();
+ #endif
+ .CountAsync();
}
///
@@ -53,10 +55,10 @@ public sealed class ExampleService(BasicRepository rpo) //
{
req.ThrowIfInvalid();
return QueryInternal(req)
- #if DBTYPE_SQLSERVER
+ #if DBTYPE_SQLSERVER
.WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait)
- #endif
- .AnyAsync();
+ #endif
+ .AnyAsync();
}
///
diff --git a/src/backend/NetAdmin.Cache/Tpl/Dependency/IExampleCache.cs b/src/backend/NetAdmin.Cache/Tpl/Dependency/IExampleCache.cs
new file mode 100644
index 00000000..d887f95a
--- /dev/null
+++ b/src/backend/NetAdmin.Cache/Tpl/Dependency/IExampleCache.cs
@@ -0,0 +1,9 @@
+using NetAdmin.Application.Modules.Tpl;
+using NetAdmin.Application.Services.Tpl.Dependency;
+
+namespace NetAdmin.Cache.Tpl.Dependency;
+
+///
+/// 示例缓存
+///
+public interface IExampleCache : ICache, IExampleModule;
\ No newline at end of file
diff --git a/src/backend/NetAdmin.SysComponent.Cache/Tpl/ExampleCache.cs b/src/backend/NetAdmin.Cache/Tpl/ExampleCache.cs
similarity index 90%
rename from src/backend/NetAdmin.SysComponent.Cache/Tpl/ExampleCache.cs
rename to src/backend/NetAdmin.Cache/Tpl/ExampleCache.cs
index 9be9ba1e..d2a7b472 100644
--- a/src/backend/NetAdmin.SysComponent.Cache/Tpl/ExampleCache.cs
+++ b/src/backend/NetAdmin.Cache/Tpl/ExampleCache.cs
@@ -1,8 +1,9 @@
+using NetAdmin.Application.Services.Tpl.Dependency;
+using NetAdmin.Cache.Tpl.Dependency;
+using NetAdmin.Domain.Dto.Dependency;
using NetAdmin.Domain.Dto.Tpl.Example;
-using NetAdmin.SysComponent.Application.Services.Tpl.Dependency;
-using NetAdmin.SysComponent.Cache.Tpl.Dependency;
-namespace NetAdmin.SysComponent.Cache.Tpl;
+namespace NetAdmin.Cache.Tpl;
///
public sealed class ExampleCache(IDistributedCache cache, IExampleService service)
diff --git a/src/backend/NetAdmin.Domain/Contexts/ContextUserToken.cs b/src/backend/NetAdmin.Domain/Contexts/ContextUserToken.cs
index a76db8e9..6ec5e9cb 100644
--- a/src/backend/NetAdmin.Domain/Contexts/ContextUserToken.cs
+++ b/src/backend/NetAdmin.Domain/Contexts/ContextUserToken.cs
@@ -1,5 +1,3 @@
-using NetAdmin.Domain.Dto.Sys.User;
-
namespace NetAdmin.Domain.Contexts;
///
@@ -43,9 +41,9 @@ public sealed record ContextUserToken : DataAbstraction
///
/// 从 QueryUserRsp 创建上下文用户
///
- public static ContextUserToken Create(QueryUserRsp user)
+ public static ContextUserToken Create(long id, Guid token, string userName, long deptId)
{
- return new ContextUserToken { Id = user.Id, Token = user.Token, UserName = user.UserName, DeptId = user.DeptId };
+ return new ContextUserToken { Id = id, Token = token, UserName = userName, DeptId = deptId };
}
///
diff --git a/src/backend/NetAdmin.Domain/DbMaps/Dependency/Fields/IFieldModifiedUser.cs b/src/backend/NetAdmin.Domain/DbMaps/Dependency/Fields/IFieldModifiedUser.cs
index b5fce03d..92df41a6 100644
--- a/src/backend/NetAdmin.Domain/DbMaps/Dependency/Fields/IFieldModifiedUser.cs
+++ b/src/backend/NetAdmin.Domain/DbMaps/Dependency/Fields/IFieldModifiedUser.cs
@@ -1,7 +1,7 @@
namespace NetAdmin.Domain.DbMaps.Dependency.Fields;
///
-/// 更新用户字段接口
+/// 修改用户字段接口
///
public interface IFieldModifiedUser
{
diff --git a/src/backend/NetAdmin.Domain/DbMaps/Dependency/Fields/IFieldSummary.cs b/src/backend/NetAdmin.Domain/DbMaps/Dependency/Fields/IFieldSummary.cs
index bd93c673..48353a24 100644
--- a/src/backend/NetAdmin.Domain/DbMaps/Dependency/Fields/IFieldSummary.cs
+++ b/src/backend/NetAdmin.Domain/DbMaps/Dependency/Fields/IFieldSummary.cs
@@ -1,12 +1,12 @@
namespace NetAdmin.Domain.DbMaps.Dependency.Fields;
///
-/// 描述字段接口
+/// 备注字段接口
///
public interface IFieldSummary
{
///
- /// 描述
+ /// 备注
///
string Summary { get; init; }
}
\ No newline at end of file
diff --git a/src/backend/NetAdmin.Domain/DbMaps/Dependency/ImmutableEntity.cs b/src/backend/NetAdmin.Domain/DbMaps/Dependency/ImmutableEntity.cs
index 805ca178..09d5ed74 100644
--- a/src/backend/NetAdmin.Domain/DbMaps/Dependency/ImmutableEntity.cs
+++ b/src/backend/NetAdmin.Domain/DbMaps/Dependency/ImmutableEntity.cs
@@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
///
public abstract record ImmutableEntity : ImmutableEntity
{
- ///
+ ///
+ /// 唯一编码
+ ///
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
[Snowflake]
@@ -17,19 +19,25 @@ public abstract record ImmutableEntity : ImmutableEntity
public abstract record ImmutableEntity : LiteImmutableEntity, IFieldCreatedUser
where T : IEquatable
{
- ///
+ ///
+ /// 创建者编号
+ ///
[Column(CanUpdate = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
public long? CreatedUserId { get; init; }
- ///
+ ///
+ /// 创建者用户名
+ ///
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanUpdate = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
public virtual string CreatedUserName { get; init; }
- ///
+ ///
+ /// 唯一编码
+ ///
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
public override T Id { get; init; }
diff --git a/src/backend/NetAdmin.Domain/DbMaps/Dependency/LiteImmutableEntity.cs b/src/backend/NetAdmin.Domain/DbMaps/Dependency/LiteImmutableEntity.cs
index e46d9cb9..7d22adc6 100644
--- a/src/backend/NetAdmin.Domain/DbMaps/Dependency/LiteImmutableEntity.cs
+++ b/src/backend/NetAdmin.Domain/DbMaps/Dependency/LiteImmutableEntity.cs
@@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
///
public abstract record LiteImmutableEntity : LiteImmutableEntity
{
- ///
+ ///
+ /// 唯一编码
+ ///
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
[Snowflake]
@@ -17,13 +19,17 @@ public abstract record LiteImmutableEntity : LiteImmutableEntity
public abstract record LiteImmutableEntity : EntityBase, IFieldCreatedTime
where T : IEquatable
{
- ///
+ ///
+ /// 创建时间
+ ///
[Column(ServerTime = DateTimeKind.Local, CanUpdate = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
public virtual DateTime CreatedTime { get; init; }
- ///
+ ///
+ /// 唯一编码
+ ///
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
[JsonIgnore]
diff --git a/src/backend/NetAdmin.Domain/DbMaps/Dependency/LiteMutableEntity.cs b/src/backend/NetAdmin.Domain/DbMaps/Dependency/LiteMutableEntity.cs
index a343e85a..06824910 100644
--- a/src/backend/NetAdmin.Domain/DbMaps/Dependency/LiteMutableEntity.cs
+++ b/src/backend/NetAdmin.Domain/DbMaps/Dependency/LiteMutableEntity.cs
@@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
///
public abstract record LiteMutableEntity : LiteMutableEntity
{
- ///
+ ///
+ /// 唯一编码
+ ///
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
[Snowflake]
@@ -16,12 +18,16 @@ public abstract record LiteMutableEntity : LiteMutableEntity
public abstract record LiteMutableEntity : LiteImmutableEntity, IFieldModifiedTime
where T : IEquatable
{
- ///
+ ///
+ /// 唯一编码
+ ///
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
public override T Id { get; init; }
- ///
+ ///
+ /// 修改时间
+ ///
[Column(ServerTime = DateTimeKind.Local, CanInsert = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
diff --git a/src/backend/NetAdmin.Domain/DbMaps/Dependency/LiteVersionEntity.cs b/src/backend/NetAdmin.Domain/DbMaps/Dependency/LiteVersionEntity.cs
index fa388a64..53e7f209 100644
--- a/src/backend/NetAdmin.Domain/DbMaps/Dependency/LiteVersionEntity.cs
+++ b/src/backend/NetAdmin.Domain/DbMaps/Dependency/LiteVersionEntity.cs
@@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
///
public abstract record LiteVersionEntity : LiteVersionEntity
{
- ///
+ ///
+ /// 唯一编码
+ ///
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
[Snowflake]
@@ -16,13 +18,17 @@ public abstract record LiteVersionEntity : LiteVersionEntity
public abstract record LiteVersionEntity : LiteMutableEntity, IFieldVersion
where T : IEquatable
{
- ///
+ ///
+ /// 唯一编码
+ ///
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
[Snowflake]
public override T Id { get; init; }
- ///
+ ///
+ /// 数据版本
+ ///
[Column(IsVersion = true, Position = -1)]
[CsvIgnore]
[JsonIgnore]
diff --git a/src/backend/NetAdmin.Domain/DbMaps/Dependency/MutableEntity.cs b/src/backend/NetAdmin.Domain/DbMaps/Dependency/MutableEntity.cs
index 82f862bc..81120cc3 100644
--- a/src/backend/NetAdmin.Domain/DbMaps/Dependency/MutableEntity.cs
+++ b/src/backend/NetAdmin.Domain/DbMaps/Dependency/MutableEntity.cs
@@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
///
public abstract record MutableEntity : MutableEntity
{
- ///
+ ///
+ /// 唯一编码
+ ///
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
[Snowflake]
@@ -16,30 +18,40 @@ public abstract record MutableEntity : MutableEntity
public abstract record MutableEntity : LiteMutableEntity, IFieldCreatedUser, IFieldModifiedUser
where T : IEquatable
{
- ///
+ ///
+ /// 创建者编号
+ ///
[Column(CanUpdate = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
public virtual long? CreatedUserId { get; init; }
- ///
+ ///
+ /// 创建者用户名
+ ///
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanUpdate = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
public virtual string CreatedUserName { get; init; }
- ///
+ ///
+ /// 唯一编码
+ ///
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
public override T Id { get; init; }
- ///
+ ///
+ /// 修改者编号
+ ///
[Column(CanInsert = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
public long? ModifiedUserId { get; init; }
- ///
+ ///
+ /// 修改者用户名
+ ///
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanInsert = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
diff --git a/src/backend/NetAdmin.Domain/DbMaps/Dependency/SimpleEntity.cs b/src/backend/NetAdmin.Domain/DbMaps/Dependency/SimpleEntity.cs
index 2704d9c7..12698287 100644
--- a/src/backend/NetAdmin.Domain/DbMaps/Dependency/SimpleEntity.cs
+++ b/src/backend/NetAdmin.Domain/DbMaps/Dependency/SimpleEntity.cs
@@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
///
public abstract record SimpleEntity : SimpleEntity
{
- ///
+ ///
+ /// 唯一编码
+ ///
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
[Snowflake]
diff --git a/src/backend/NetAdmin.Domain/DbMaps/Dependency/VersionEntity.cs b/src/backend/NetAdmin.Domain/DbMaps/Dependency/VersionEntity.cs
index b0bbf267..939b8093 100644
--- a/src/backend/NetAdmin.Domain/DbMaps/Dependency/VersionEntity.cs
+++ b/src/backend/NetAdmin.Domain/DbMaps/Dependency/VersionEntity.cs
@@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
///
public abstract record VersionEntity : VersionEntity
{
- ///
+ ///
+ /// 唯一编码
+ ///
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
[Snowflake]
@@ -16,30 +18,40 @@ public abstract record VersionEntity : VersionEntity
public abstract record VersionEntity : LiteVersionEntity, IFieldModifiedUser, IFieldCreatedUser
where T : IEquatable
{
- ///
+ ///
+ /// 创建者编号
+ ///
[Column(CanUpdate = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
public virtual long? CreatedUserId { get; init; }
- ///
+ ///
+ /// 创建者用户名
+ ///
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanUpdate = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
public virtual string CreatedUserName { get; init; }
- ///
+ ///
+ /// 唯一编码
+ ///
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
public override T Id { get; init; }
- ///
+ ///
+ /// 修改者编号
+ ///
[Column(CanInsert = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
public virtual long? ModifiedUserId { get; init; }
- ///
+ ///
+ /// 修改者用户名
+ ///
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanInsert = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
diff --git a/src/backend/NetAdmin.Domain/Dto/RestfulInfo.cs b/src/backend/NetAdmin.Domain/Dto/RestfulInfo.cs
index 08856711..3286b5e6 100644
--- a/src/backend/NetAdmin.Domain/Dto/RestfulInfo.cs
+++ b/src/backend/NetAdmin.Domain/Dto/RestfulInfo.cs
@@ -8,6 +8,7 @@ public record RestfulInfo : DataAbstraction
///
/// 代码
///
+ /// succeed
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public ErrorCodes Code { get; init; }
@@ -17,7 +18,8 @@ public record RestfulInfo : DataAbstraction
public T Data { get; init; }
///
- /// 消息
+ /// 字符串:"消息内容",或数组:[{"参数名1":"消息内容1"},{"参数名2":"消息内容2"}]
///
+ /// 请求成功
public object Msg { get; init; }
}
\ No newline at end of file
diff --git a/src/backend/NetAdmin.Domain/NetAdmin.Domain.csproj b/src/backend/NetAdmin.Domain/NetAdmin.Domain.csproj
index d0d678da..681c72f9 100644
--- a/src/backend/NetAdmin.Domain/NetAdmin.Domain.csproj
+++ b/src/backend/NetAdmin.Domain/NetAdmin.Domain.csproj
@@ -1,11 +1,5 @@
-
- DBTYPE_SQLITE
-
-
-
-
diff --git a/src/backend/NetAdmin.Domain/ProjectUsings.cs b/src/backend/NetAdmin.Domain/ProjectUsings.cs
index 89735778..4f775145 100644
--- a/src/backend/NetAdmin.Domain/ProjectUsings.cs
+++ b/src/backend/NetAdmin.Domain/ProjectUsings.cs
@@ -1,13 +1,5 @@
-global using NetAdmin.Domain.Attributes;
-global using NetAdmin.Domain.Attributes.DataValidation;
+global using NetAdmin.Domain.Attributes;
global using NetAdmin.Domain.DbMaps.Dependency;
global using NetAdmin.Domain.DbMaps.Dependency.Fields;
-global using NetAdmin.Domain.DbMaps.Sys;
-global using NetAdmin.Domain.Dto.Dependency;
-global using NetAdmin.Domain.Enums.Sys;
global using CsvIgnore = CsvHelper.Configuration.Attributes.IgnoreAttribute;
-global using CsvIndex = CsvHelper.Configuration.Attributes.IndexAttribute;
-global using CsvName = CsvHelper.Configuration.Attributes.NameAttribute;
-global using DynamicFilterOperators = NetAdmin.Domain.Enums.DynamicFilterOperators;
-global using HttpMethods = NetAdmin.Domain.Enums.HttpMethods;
-global using SqlIndex = FreeSql.DataAnnotations.IndexAttribute;
\ No newline at end of file
+global using DynamicFilterOperators = NetAdmin.Domain.Enums.DynamicFilterOperators;
\ No newline at end of file
diff --git a/src/backend/NetAdmin.SysComponent.Host/Controllers/Tpl/ExampleController.cs b/src/backend/NetAdmin.Host/Controllers/Tpl/ExampleController.cs
similarity index 89%
rename from src/backend/NetAdmin.SysComponent.Host/Controllers/Tpl/ExampleController.cs
rename to src/backend/NetAdmin.Host/Controllers/Tpl/ExampleController.cs
index dd0eb0a6..15606d46 100644
--- a/src/backend/NetAdmin.SysComponent.Host/Controllers/Tpl/ExampleController.cs
+++ b/src/backend/NetAdmin.Host/Controllers/Tpl/ExampleController.cs
@@ -1,9 +1,11 @@
+using NetAdmin.Application.Modules.Tpl;
+using NetAdmin.Application.Services.Tpl.Dependency;
+using NetAdmin.Cache.Tpl.Dependency;
+using NetAdmin.Domain.Dto.Dependency;
using NetAdmin.Domain.Dto.Tpl.Example;
-using NetAdmin.SysComponent.Application.Modules.Tpl;
-using NetAdmin.SysComponent.Application.Services.Tpl.Dependency;
-using NetAdmin.SysComponent.Cache.Tpl.Dependency;
+using NetAdmin.Host.Attributes;
-namespace NetAdmin.SysComponent.Host.Controllers.Tpl;
+namespace NetAdmin.Host.Controllers.Tpl;
///
/// 示例服务
diff --git a/src/backend/NetAdmin.Host/Extensions/ServiceCollectionExtensions.cs b/src/backend/NetAdmin.Host/Extensions/ServiceCollectionExtensions.cs
index c4d347db..ed9a3264 100644
--- a/src/backend/NetAdmin.Host/Extensions/ServiceCollectionExtensions.cs
+++ b/src/backend/NetAdmin.Host/Extensions/ServiceCollectionExtensions.cs
@@ -1,12 +1,7 @@
-using Furion.Logging;
+using Gurion.Logging;
using NetAdmin.Domain.Contexts;
-using NetAdmin.Domain.Events;
-using NetAdmin.Host.Filters;
-using NetAdmin.Host.Utils;
using StackExchange.Redis;
using Yitter.IdGenerator;
-using FreeSqlBuilder = NetAdmin.Infrastructure.Utils.FreeSqlBuilder;
-
#if DEBUG
using Spectre.Console;
#endif
@@ -83,7 +78,7 @@ public static class ServiceCollectionExtensions
this IServiceCollection me)
{
var optionsTypes
- = from type in App.EffectiveTypes.Where(x => !x.IsAbstract && !x.FullName!.Contains(nameof(Furion)) &&
+ = from type in App.EffectiveTypes.Where(x => !x.IsAbstract && !x.FullName!.Contains(nameof(Gurion)) &&
x.GetInterfaces().Contains(typeof(IConfigurableOptions)))
select type;
@@ -126,12 +121,11 @@ public static class ServiceCollectionExtensions
}
///
- /// 添加上下文用户
+ /// 添加上下文用户令牌
///
- public static IServiceCollection AddContextUser(this IServiceCollection me)
+ public static IServiceCollection AddContextUserToken(this IServiceCollection me)
{
- return me.AddScoped(typeof(ContextUserToken), _ => ContextUserToken.Create())
- .AddScoped(typeof(ContextUserInfo), _ => ContextUserInfo.Create());
+ return me.AddScoped(typeof(ContextUserToken), _ => ContextUserToken.Create());
}
///
@@ -142,42 +136,6 @@ public static class ServiceCollectionExtensions
return me.AddEventBus(builder => builder.AddSubscribers(App.Assemblies.ToArray()));
}
- ///
- /// 添加 freeSql orm工具
- ///
- public static IServiceCollection AddFreeSql( //
- this IServiceCollection me, FreeSqlInitMethods initMethods = FreeSqlInitMethods.None, Action freeSqlConfig = null)
- {
- // // 非调试模式下禁止同步数据库
- // #if !DEBUG
- // initOptions = FreeSqlInitOptions.None;
- // #endif
- var dbOptions = App.GetOptions();
- var fSql = new FreeSqlBuilder(dbOptions).Build(initMethods);
- _ = me.AddSingleton(fSql);
-
- fSql.Aop.AuditValue += SqlAuditor.DataAuditHandler; // Insert/Update自动值处理
- var eventPublisher = App.GetService();
-
- #pragma warning disable VSTHRD110
-
- // AOP事件发布(异步)
- fSql.Aop.CommandBefore += (_, e) => eventPublisher.PublishAsync(new SqlCommandBeforeEvent(e)); // 增删查改,执行命令之前触发
- fSql.Aop.CommandAfter += (_, e) => eventPublisher.PublishAsync(new SqlCommandAfterEvent(e)); // 增删查改,执行命令完成后触发
-
- fSql.Aop.SyncStructureBefore += (_, e) => eventPublisher.PublishAsync(new SyncStructureBeforeEvent(e)); // CodeFirst迁移,执行之前触发
-
- fSql.Aop.SyncStructureAfter += (_, e) => eventPublisher.PublishAsync(new SyncStructureAfterEvent(e)); // CodeFirst迁移,执行完成触发
- #pragma warning restore VSTHRD110
-
- // 全局过滤器设置
- freeSqlConfig?.Invoke(fSql);
-
- return me.AddScoped() // 注入工作单元管理器
- .AddFreeRepository(null, App.Assemblies.ToArray()) // 批量注入 Repository
- .AddMvcFilter(); // 注入事务拦截器
- }
-
///
/// 添加内存缓存
///
diff --git a/src/backend/NetAdmin.Host/Filters/ApiResultHandler.cs b/src/backend/NetAdmin.Host/Filters/ApiResultHandler.cs
index 66e92381..cc242292 100644
--- a/src/backend/NetAdmin.Host/Filters/ApiResultHandler.cs
+++ b/src/backend/NetAdmin.Host/Filters/ApiResultHandler.cs
@@ -1,4 +1,4 @@
-using Furion.FriendlyException;
+using Gurion.FriendlyException;
using NetAdmin.Domain.Dto;
namespace NetAdmin.Host.Filters;
diff --git a/src/backend/NetAdmin.Host/Filters/DefaultApiResultHandler.cs b/src/backend/NetAdmin.Host/Filters/DefaultApiResultHandler.cs
index 8224ac10..d6777752 100644
--- a/src/backend/NetAdmin.Host/Filters/DefaultApiResultHandler.cs
+++ b/src/backend/NetAdmin.Host/Filters/DefaultApiResultHandler.cs
@@ -1,4 +1,4 @@
-using Furion.FriendlyException;
+using Gurion.FriendlyException;
using NetAdmin.Domain.Dto;
namespace NetAdmin.Host.Filters;
diff --git a/src/backend/NetAdmin.Host/Filters/GlobalExceptionHandler.cs b/src/backend/NetAdmin.Host/Filters/GlobalExceptionHandler.cs
index 88e211bc..2d0a7e95 100644
--- a/src/backend/NetAdmin.Host/Filters/GlobalExceptionHandler.cs
+++ b/src/backend/NetAdmin.Host/Filters/GlobalExceptionHandler.cs
@@ -1,8 +1,8 @@
-using Furion.FriendlyException;
+using Gurion.FriendlyException;
namespace NetAdmin.Host.Filters;
-///
+///
public sealed class GlobalExceptionHandler(ILogger logger) : IGlobalExceptionHandler, ISingleton
{
///
diff --git a/src/backend/NetAdmin.Infrastructure/Attributes/CountryAttribute.cs b/src/backend/NetAdmin.Infrastructure/Attributes/CountryAttribute.cs
new file mode 100644
index 00000000..7a2b8ad1
--- /dev/null
+++ b/src/backend/NetAdmin.Infrastructure/Attributes/CountryAttribute.cs
@@ -0,0 +1,56 @@
+namespace NetAdmin.Infrastructure.Attributes;
+
+///
+/// 国家信息特性
+///
+///
+/// https://github.com/countries/countries
+///
+[AttributeUsage(AttributeTargets.Field | AttributeTargets.Enum)]
+public sealed class CountryAttribute : Attribute
+{
+ ///
+ /// 三个字母的国家代码
+ ///
+ public string Alpha3 { get; set; }
+
+ ///
+ /// 国际电话呼号
+ ///
+ public int CallingCode { get; set; }
+
+ ///
+ /// 国际电话子呼号(区分同一呼号不同国家)
+ ///
+ public string CallingSubCode { get; set; }
+
+ ///
+ /// 货币代码
+ ///
+ public string CurrencyCode { get; set; }
+
+ ///
+ /// 当命中多个国家时的首选国家
+ ///
+ public bool IsPreferred { get; set; }
+
+ ///
+ /// 官方语言代码
+ ///
+ public string Languages { get; set; }
+
+ ///
+ /// 国家全称
+ ///
+ public string LongName { get; set; }
+
+ ///
+ /// 国家简称
+ ///
+ public string ShortName { get; set; }
+
+ ///
+ /// 非正式名称
+ ///
+ public string UnofficialNames { get; set; }
+}
\ No newline at end of file
diff --git a/src/backend/NetAdmin.Infrastructure/Attributes/DomainAttribute.cs b/src/backend/NetAdmin.Infrastructure/Attributes/DomainAttribute.cs
new file mode 100644
index 00000000..5ce02505
--- /dev/null
+++ b/src/backend/NetAdmin.Infrastructure/Attributes/DomainAttribute.cs
@@ -0,0 +1,13 @@
+namespace NetAdmin.Infrastructure.Attributes;
+
+///
+/// 域名特性
+///
+[AttributeUsage(AttributeTargets.Field | AttributeTargets.Enum)]
+public sealed class DomainAttribute : Attribute
+{
+ ///
+ /// 主机名称
+ ///
+ public string HostName { get; init; }
+}
\ No newline at end of file
diff --git a/src/backend/NetAdmin.Infrastructure/Configuration/Dependency/ApiClientOptions.cs b/src/backend/NetAdmin.Infrastructure/Configuration/Dependency/ApiClientOptions.cs
new file mode 100644
index 00000000..e2294468
--- /dev/null
+++ b/src/backend/NetAdmin.Infrastructure/Configuration/Dependency/ApiClientOptions.cs
@@ -0,0 +1,17 @@
+namespace NetAdmin.Infrastructure.Configuration.Dependency;
+
+///
+/// API客户端基础选项
+///
+public abstract record ApiClientOptions : OptionAbstraction
+{
+ ///
+ /// 网关地址
+ ///
+ public string Gateway { get; set; }
+
+ ///
+ /// 密钥
+ ///
+ public string Token { get; set; }
+}
\ No newline at end of file
diff --git a/src/backend/NetAdmin.Infrastructure/Configuration/Options/OptionAbstraction.cs b/src/backend/NetAdmin.Infrastructure/Configuration/Dependency/OptionAbstraction.cs
similarity index 66%
rename from src/backend/NetAdmin.Infrastructure/Configuration/Options/OptionAbstraction.cs
rename to src/backend/NetAdmin.Infrastructure/Configuration/Dependency/OptionAbstraction.cs
index bf9cca15..880bdad4 100644
--- a/src/backend/NetAdmin.Infrastructure/Configuration/Options/OptionAbstraction.cs
+++ b/src/backend/NetAdmin.Infrastructure/Configuration/Dependency/OptionAbstraction.cs
@@ -1,4 +1,4 @@
-namespace NetAdmin.Infrastructure.Configuration.Options;
+namespace NetAdmin.Infrastructure.Configuration.Dependency;
///
/// 选项抽象基类
diff --git a/src/backend/NetAdmin.Infrastructure/Configuration/Options/CaptchaOptions.cs b/src/backend/NetAdmin.Infrastructure/Configuration/Options/CaptchaOptions.cs
index 5f7257db..7e362cf9 100644
--- a/src/backend/NetAdmin.Infrastructure/Configuration/Options/CaptchaOptions.cs
+++ b/src/backend/NetAdmin.Infrastructure/Configuration/Options/CaptchaOptions.cs
@@ -1,3 +1,5 @@
+using NetAdmin.Infrastructure.Configuration.Dependency;
+
namespace NetAdmin.Infrastructure.Configuration.Options;
///
diff --git a/src/backend/NetAdmin.Infrastructure/Configuration/Options/DatabaseOptions.cs b/src/backend/NetAdmin.Infrastructure/Configuration/Options/DatabaseOptions.cs
index 469449f6..ea46cecf 100644
--- a/src/backend/NetAdmin.Infrastructure/Configuration/Options/DatabaseOptions.cs
+++ b/src/backend/NetAdmin.Infrastructure/Configuration/Options/DatabaseOptions.cs
@@ -1,3 +1,4 @@
+using NetAdmin.Infrastructure.Configuration.Dependency;
using DataType = FreeSql.DataType;
namespace NetAdmin.Infrastructure.Configuration.Options;
diff --git a/src/backend/NetAdmin.Infrastructure/Configuration/Options/RedisOptions.cs b/src/backend/NetAdmin.Infrastructure/Configuration/Options/RedisOptions.cs
index dc92a1d5..dfafd920 100644
--- a/src/backend/NetAdmin.Infrastructure/Configuration/Options/RedisOptions.cs
+++ b/src/backend/NetAdmin.Infrastructure/Configuration/Options/RedisOptions.cs
@@ -1,3 +1,5 @@
+using NetAdmin.Infrastructure.Configuration.Dependency;
+
namespace NetAdmin.Infrastructure.Configuration.Options;
///
diff --git a/src/backend/NetAdmin.Infrastructure/Configuration/Options/UploadOptions.cs b/src/backend/NetAdmin.Infrastructure/Configuration/Options/UploadOptions.cs
index 2d4256b0..7dba5c74 100644
--- a/src/backend/NetAdmin.Infrastructure/Configuration/Options/UploadOptions.cs
+++ b/src/backend/NetAdmin.Infrastructure/Configuration/Options/UploadOptions.cs
@@ -1,3 +1,5 @@
+using NetAdmin.Infrastructure.Configuration.Dependency;
+
namespace NetAdmin.Infrastructure.Configuration.Options;
///
diff --git a/src/backend/NetAdmin.Infrastructure/Constant/Chars.cs b/src/backend/NetAdmin.Infrastructure/Constant/Chars.cs
index bbca647f..824894cb 100644
--- a/src/backend/NetAdmin.Infrastructure/Constant/Chars.cs
+++ b/src/backend/NetAdmin.Infrastructure/Constant/Chars.cs
@@ -74,14 +74,10 @@ public static class Chars
public const string FLG_HTTP_METHOD_PUT = "PUT";
public const string FLG_HTTP_METHOD_TRACE = "TRACE";
public const string FLG_PATH_API_METRICS = "metrics";
-
- public const string FLG_PATH_API_RPOBE = "api/probe";
- public const string FLG_PATH_API_SYS_USER_LOGIN_BY_PWD = "api/sys/user/login.by.pwd";
- public const string FLG_PATH_WEBSOCKET_PREFIX = "ws";
- public const string FLG_RANDOM_UNAME_PWD = "VcXlp7WY";
- public const string FLG_REDIS_INSTANCE_DATA_CACHE = "DataCache";
- public const string FLG_SNOWFLAKE_WORK_ID = "SNOWFLAKE_WORK_ID";
- public const string FLG_SYSTEM_PREFIX = "sc_";
+ public const string FLG_PATH_API_RPOBE = "api/probe";
+ public const string FLG_PATH_WEBSOCKET_PREFIX = "ws";
+ public const string FLG_REDIS_INSTANCE_DATA_CACHE = "DataCache";
+ public const string FLG_SNOWFLAKE_WORK_ID = "SNOWFLAKE_WORK_ID";
public const string FLGL_HTTP_HEADER_VALUE_UA_MOBILE
= "Mozilla/5.0 (Linux; Android 9; Redmi Note 8 Pro Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.96 Mobile Safari/537.36";
diff --git a/src/backend/NetAdmin.Infrastructure/Constant/Numbers.cs b/src/backend/NetAdmin.Infrastructure/Constant/Numbers.cs
index 56f1f153..b2360c87 100644
--- a/src/backend/NetAdmin.Infrastructure/Constant/Numbers.cs
+++ b/src/backend/NetAdmin.Infrastructure/Constant/Numbers.cs
@@ -10,26 +10,14 @@ namespace NetAdmin.Infrastructure.Constant;
///
public static class Numbers
{
- public const int DEF_PAGE_SIZE_QUERY = 20; // 分页查询默认的页容量
- public const long DEF_SORT_VAL = 100; // 排序默认值
-
- public const int HTTP_STATUS_BIZ_FAIL = 900; // Http状态码-业务异常
- public const long ID_DIC_CATALOG_GEO_AREA = 379794295185413; // 唯一编号:字典目录-行政区划字典
-
- public const int MAX_LIMIT_BULK_REQ = 100; // 最大限制:批量请求数
- public const int MAX_LIMIT_EXPORT = 10000; // 最大限制:导出为CSV文件的条数
- public const int MAX_LIMIT_QUERY = 1000; // 最大限制:非分页查询条数
- public const int MAX_LIMIT_QUERY_PAGE_NO = 10000; // 最大限制:分页查询页码
- public const int MAX_LIMIT_QUERY_PAGE_SIZE = 100; // 最大限制:分页查询页容量
- public const int MAX_LIMIT_RETRY_CNT_REDIS_LOCK = 10; // 最大限制:Redis锁重试次数
- public const int REQUEST_LOG_BUFF_SIZE = 10; // 请求日志缓冲区大小
- public const int SCHEDULED_JOB_PARALLEL_NUM = 5; // 计划作业并发数
- public const int SECS_CACHE_CHART = 300; // 秒:缓存时间-仪表
- public const int SECS_CACHE_DEFAULT = 60; // 秒:缓存时间-默认
- public const int SECS_CACHE_DIC_CATALOG_CODE = 300; // 秒:缓存时间-字典配置-目录代码
- public const int SECS_CACHE_LOGIN_BY_USER_ID = 3600 * 24 * 30; // 秒:缓存时间-通过用户编号登录的用户信息
- public const int SECS_REDIS_LOCK_EXPIRY = 60; // 秒:Redis锁过期时间
- public const int SECS_REDIS_LOCK_RETRY_DELAY = 1; // 秒:Redis锁重试间隔
- public const int SECS_TIMEOUT_HTTP_CLIENT = 15; // 秒:超时时间-默认HTTP客户端
- public const int SECS_TIMEOUT_JOB = 600; // 秒:超时时间-作业
+ public const int DEF_PAGE_SIZE_QUERY = 20; // 默认值:分页查询页容量
+ public const int HTTP_STATUS_BIZ_FAIL = 900; // HTTP状态码:业务异常
+ public const int MAX_LIMIT_BULK_REQ = 100; // 最大限制:批量请求数
+ public const int MAX_LIMIT_EXPORT = 50000; // 最大限制:导出为CSV文件的条数
+ public const int MAX_LIMIT_QUERY = 1000; // 最大限制:非分页查询条数
+ public const int MAX_LIMIT_QUERY_PAGE_NO = 10000; // 最大限制:分页查询页码
+ public const int MAX_LIMIT_QUERY_PAGE_SIZE = 100; // 最大限制:分页查询页容量
+ public const int MAX_LIMIT_RETRY_CNT_REDIS_LOCK = 10; // 最大限制:Redis锁重试次数
+ public const int SECS_REDIS_LOCK_EXPIRY = 60; // 秒:Redis锁过期时间
+ public const int SECS_REDIS_LOCK_RETRY_DELAY = 1; // 秒:Redis锁重试间隔
}
\ No newline at end of file
diff --git a/src/backend/NetAdmin.Infrastructure/Enums/Countries.cs b/src/backend/NetAdmin.Infrastructure/Enums/Countries.cs
new file mode 100644
index 00000000..9074ed34
--- /dev/null
+++ b/src/backend/NetAdmin.Infrastructure/Enums/Countries.cs
@@ -0,0 +1,2581 @@
+// ReSharper disable UnusedMember.Global
+
+#pragma warning disable RCS1154
+
+namespace NetAdmin.Infrastructure.Enums;
+
+///
+/// 世界各国
+///
+///
+/// ISO3166-1
+///
+[Export]
+public enum Countries
+{
+ ///
+ /// 多米尼加
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "809,829,849", Alpha3 = "DOM", ShortName = "Dominican Republic", LongName = "The Dominican Republic"
+ , CurrencyCode = "DOP", Languages = "es"
+ , UnofficialNames
+ = "Dominican Republic|Dominikanische Republik|République Dominicaine|República Dominicana|ドミニカ共和国|Dominicaanse Republiek|多米尼加")]
+ [ResourceDescription(nameof(Ln.多米尼加))]
+ DO = 214
+
+ ,
+
+ ///
+ /// 波多黎各
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "787,939", Alpha3 = "PRI", ShortName = "Puerto Rico", LongName = "The Commonwealth of Puerto Rico"
+ , CurrencyCode = "USD", Languages = "es|en", UnofficialNames = "Puerto Rico|プエルトリコ|波多黎各")]
+ [ResourceDescription(nameof(Ln.波多黎各))]
+ PR = 630
+
+ ,
+
+ ///
+ /// 牙买加
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "658,876", Alpha3 = "JAM", ShortName = "Jamaica", LongName = "Jamaica", CurrencyCode = "JMD"
+ , Languages = "en", UnofficialNames = "Jamaica|Jamaika|Jamaïque|ジャマイカ|牙买加")]
+ [ResourceDescription(nameof(Ln.牙买加))]
+ JM = 388
+
+ ,
+
+ ///
+ /// 圣基茨和尼维斯
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "869", Alpha3 = "KNA", ShortName = "Saint Kitts and Nevis", LongName = "Saint Kitts and Nevis"
+ , CurrencyCode = "XCD", Languages = "en"
+ , UnofficialNames
+ = "Saint Kitts and Nevis|Föderation St. Kitts und Nevis|Saint Kitts et Nevis|Saint Kitts y Nevis|セントクリストファー・ネイビス|Saint Kitts en Nevis|St. Kitts and Nevis|St Kitts and Nevis|圣基茨和尼维斯")]
+ [ResourceDescription(nameof(Ln.圣基茨和尼维斯))]
+ KN = 659
+
+ ,
+
+ ///
+ /// 特立尼达和多巴哥
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "868", Alpha3 = "TTO", ShortName = "Trinidad and Tobago"
+ , LongName = "The Republic of Trinidad and Tobago", CurrencyCode = "TTD", Languages = "en"
+ , UnofficialNames = "Trinidad and Tobago|Trinidad und Tobago|Trinité et Tobago|Trinidad y Tobago|トリニダード・トバゴ|Trinidad en Tobago|特立尼达和多巴哥")]
+ [ResourceDescription(nameof(Ln.特立尼达和多巴哥))]
+ TT = 780
+
+ ,
+
+ ///
+ /// 圣文森特和格林纳丁斯
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "784", Alpha3 = "VCT", ShortName = "Saint Vincent and the Grenadines"
+ , LongName = "Saint Vincent and the Grenadines", CurrencyCode = "XCD", Languages = "en"
+ , UnofficialNames
+ = "Saint Vincent and the Grenadines|Saint Vincent und die Grenadinen|Saint-Vincent et les Grenadines|San Vicente y Granadinas|セントビンセントおよびグレナディーン諸島|Saint Vincent en de Grenadines|St. Vincent Grenadines|St Vincent Grenadines|圣文森特和格林纳丁斯")]
+ [ResourceDescription(nameof(Ln.圣文森特和格林纳丁斯))]
+ VC = 670
+
+ ,
+
+ ///
+ /// 多米尼克
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "767", Alpha3 = "DMA", ShortName = "Dominica", LongName = "The Commonwealth of Dominica"
+ , CurrencyCode = "XCD", Languages = "en", UnofficialNames = "Dominica|ドミニカ国|多米尼克")]
+ [ResourceDescription(nameof(Ln.多米尼克))]
+ DM = 212
+
+ ,
+
+ ///
+ /// 圣卢西亚
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "758", Alpha3 = "LCA", ShortName = "Saint Lucia", LongName = "Saint Lucia", CurrencyCode = "XCD"
+ , Languages = "en", UnofficialNames = "Saint Lucia|Saint-Lucie|Santa Lucía|セントルシア|St. Lucia|St Lucia|圣卢西亚")]
+ [ResourceDescription(nameof(Ln.圣卢西亚))]
+ LC = 662
+
+ ,
+
+ ///
+ /// 荷属圣马丁
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "721", Alpha3 = "SXM", ShortName = "Sint Maarten (Dutch part)", LongName = "Sint Maarten"
+ , CurrencyCode = "ANG", Languages = "nl|en", UnofficialNames = "Sint Maarten|セント・マーチン島|荷属圣马丁")]
+ [ResourceDescription(nameof(Ln.荷属圣马丁))]
+ SX = 534
+
+ ,
+
+ ///
+ /// 美属萨摩亚
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "684", Alpha3 = "ASM", ShortName = "American Samoa", LongName = "The Territory of American Samoa"
+ , CurrencyCode = "USD", Languages = "en|sm"
+ , UnofficialNames = "American Samoa|Amerikanisch-Samoa|Samoa américaines|Samoa Americana|アメリカ領サモア|Amerikaans Samoa|美属萨摩亚")]
+ [ResourceDescription(nameof(Ln.美属萨摩亚))]
+ AS = 016
+
+ ,
+
+ ///
+ /// 关岛
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "671", Alpha3 = "GUM", ShortName = "Guam", LongName = "The Territory of Guam", CurrencyCode = "USD"
+ , Languages = "en|ch|es", UnofficialNames = "Guam|グアム|关岛")]
+ [ResourceDescription(nameof(Ln.关岛))]
+ GU = 316
+
+ ,
+
+ ///
+ /// 北马里亚纳群岛
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "670", Alpha3 = "MNP", ShortName = "Northern Mariana Islands"
+ , LongName = "The Commonwealth of the Northern Mariana Islands", CurrencyCode = "USD", Languages = "en|ch"
+ , UnofficialNames
+ = "Northern Mariana Islands|Nördliche Marianen|Mariannes du Nord|Islas Marianas del Norte|北マリアナ諸島|Noordelijke Marianeneilanden|北马里亚纳群岛")]
+ [ResourceDescription(nameof(Ln.北马里亚纳群岛))]
+ MP = 580
+
+ ,
+
+ ///
+ /// 蒙特塞拉特
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "664", Alpha3 = "MSR", ShortName = "Montserrat", LongName = "Montserrat", CurrencyCode = "XCD"
+ , Languages = "en", UnofficialNames = "Montserrat|モントセラト|蒙特塞拉特")]
+ [ResourceDescription(nameof(Ln.蒙特塞拉特))]
+ MS = 500
+
+ ,
+
+ ///
+ /// 特克斯和凯科斯群岛
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "649", Alpha3 = "TCA", ShortName = "Turks and Caicos Islands"
+ , LongName = "The Turks and Caicos Islands", CurrencyCode = "USD", Languages = "en"
+ , UnofficialNames
+ = "Turks and Caicos Islands|Turks- und Caicosinseln|Îles Turks et Caïcos|Islas Turks y Caicos|タークス・カイコス諸島|Turks- en Caicoseilanden|Turks and Caicos|特克斯和凯科斯群岛")]
+ [ResourceDescription(nameof(Ln.特克斯和凯科斯群岛))]
+ TC = 796
+
+ ,
+
+ ///
+ /// 格林纳达
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "473", Alpha3 = "GRD", ShortName = "Grenada", LongName = "Grenada", CurrencyCode = "XCD"
+ , Languages = "en", UnofficialNames = "Grenada|グレナダ|格林纳达")]
+ [ResourceDescription(nameof(Ln.格林纳达))]
+ GD = 308
+
+ ,
+
+ ///
+ /// 百慕大
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "441", Alpha3 = "BMU", ShortName = "Bermuda", LongName = "Bermuda", CurrencyCode = "BMD"
+ , Languages = "en", UnofficialNames = "Bermuda|Bermudes|Bermudas|バミューダ|百慕大")]
+ [ResourceDescription(nameof(Ln.百慕大))]
+ BM = 060
+
+ ,
+
+ ///
+ /// 开曼群岛
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "345", Alpha3 = "CYM", ShortName = "Cayman Islands", LongName = "The Cayman Islands"
+ , CurrencyCode = "KYD", Languages = "en"
+ , UnofficialNames = "Cayman Islands|Kaimaninseln|Îles Caïmans|Islas Caimán|ケイマン諸島|Caymaneilanden|开曼群岛")]
+ [ResourceDescription(nameof(Ln.开曼群岛))]
+ KY = 136
+
+ ,
+
+ ///
+ /// 美属维尔京群岛
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "340", Alpha3 = "VIR", ShortName = "Virgin Islands (U.S.)"
+ , LongName = "The Virgin Islands of the United States", CurrencyCode = "USD", Languages = "en"
+ , UnofficialNames
+ = "Virgin Islands of the United States|Amerikanische Jungferninseln|Îles Vierges américaines|Islas Vírgenes de los Estados Unidos|アメリカ領ヴァージン諸島|Amerikaanse Maagdeneilanden|Virgin Islands (U.S.)|United States Virgin Islands|U.S. Virgin Islands|美属维尔京群岛")]
+ [ResourceDescription(nameof(Ln.美属维尔京群岛))]
+ VI = 850
+
+ ,
+
+ ///
+ /// 英属维尔京群岛
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "284", Alpha3 = "VGB", ShortName = "Virgin Islands (British)", LongName = "The Virgin Islands"
+ , CurrencyCode = "USD", Languages = "en"
+ , UnofficialNames
+ = "British Virgin Islands|Britische Jungferninseln|Îles Vierges britanniques|Islas Vírgenes del Reino Unido|イギリス領ヴァージン諸島|Britse Maagdeneilanden|Virgin Islands (British)|英属维尔京群岛")]
+ [ResourceDescription(nameof(Ln.英属维尔京群岛))]
+ VG = 092
+
+ ,
+
+ ///
+ /// 安提瓜和巴布达
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "268", Alpha3 = "ATG", ShortName = "Antigua and Barbuda", LongName = "Antigua and Barbuda"
+ , CurrencyCode = "XCD", Languages = "en"
+ , UnofficialNames
+ = "Antigua and Barbuda|Antigua und Barbuda|Antigua et Barbuda|Antigua y Barbuda|アンティグア・バーブーダ|Antigua en Barbuda|安提瓜和巴布达")]
+ [ResourceDescription(nameof(Ln.安提瓜和巴布达))]
+ AG = 028
+
+ ,
+
+ ///
+ /// 安圭拉
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "264", Alpha3 = "AIA", ShortName = "Anguilla", LongName = "Anguilla", CurrencyCode = "XCD"
+ , Languages = "en", UnofficialNames = "Anguilla|アンギラ|安圭拉")]
+ [ResourceDescription(nameof(Ln.安圭拉))]
+ AI = 660
+
+ ,
+
+ ///
+ /// 巴巴多斯
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "246", Alpha3 = "BRB", ShortName = "Barbados", LongName = "Barbados", CurrencyCode = "BBD"
+ , Languages = "en", UnofficialNames = "Barbade|Barbados|バルバドス|巴巴多斯")]
+ [ResourceDescription(nameof(Ln.巴巴多斯))]
+ BB = 052
+
+ ,
+
+ ///
+ /// 巴哈马
+ ///
+ [Country(CallingCode = 1, CallingSubCode = "242", Alpha3 = "BHS", ShortName = "Bahamas", LongName = "The Commonwealth of The Bahamas"
+ , CurrencyCode = "BSD", Languages = "en", UnofficialNames = "The Bahamas|バハマ|巴哈马")]
+ [ResourceDescription(nameof(Ln.巴哈马))]
+ BS = 044
+
+ ,
+
+ ///
+ /// 加拿大
+ ///
+ [Country(CallingCode = 1, Alpha3 = "CAN", ShortName = "Canada", LongName = "Canada", CurrencyCode = "CAD", Languages = "en|fr"
+ , UnofficialNames = "Canada|Kanada|Canadá|カナダ|加拿大")]
+ [ResourceDescription(nameof(Ln.加拿大))]
+ CA = 124
+
+ ,
+
+ ///
+ /// 美国本土外小岛屿
+ ///
+ [Country(CallingCode = 1, Alpha3 = "UMI", ShortName = "United States Minor Outlying Islands", LongName = "United States Minor Outlying Islands"
+ , CurrencyCode = "USD", Languages = "en"
+ , UnofficialNames
+ = "United States Minor Outlying Islands|US-Amerikanische Hoheitsgebiete|Dépendances américaines|Islas menores de Estados Unidos|合衆国領有小離島|Kleine afgelegen eilanden van de Verenigde Staten|美国本土外小岛屿")]
+ [ResourceDescription(nameof(Ln.美国本土外小岛屿))]
+ UM = 581
+
+ ,
+
+ ///
+ /// 美国
+ ///
+ [Country(CallingCode = 1, Alpha3 = "USA", ShortName = "United States of America", LongName = "The United States of America", CurrencyCode = "USD"
+ , Languages = "en"
+ , UnofficialNames
+ = "United States|USA|Vereinigte Staaten von Amerika|États-Unis|Estados Unidos|アメリカ合衆国|Verenigde Staten|Соединенные Штаты Америки|美国"
+ , IsPreferred = true)]
+ [ResourceDescription(nameof(Ln.美国))]
+ US = 840
+
+ ,
+
+ ///
+ /// 哈萨克斯坦
+ ///
+ [Country(CallingCode = 7, CallingSubCode = "6,7", Alpha3 = "KAZ", ShortName = "Kazakhstan", LongName = "The Republic of Kazakhstan"
+ , CurrencyCode = "KZT", Languages = "kk|ru", UnofficialNames = "Kazakhstan|Kasachstan|Kazajistán|カザフスタン|Kazachstan|哈萨克斯坦")]
+ [ResourceDescription(nameof(Ln.哈萨克斯坦))]
+ KZ = 398
+
+ ,
+
+ ///
+ /// 俄罗斯
+ ///
+ [Country(CallingCode = 7, Alpha3 = "RUS", ShortName = "Russian Federation", LongName = "The Russian Federation", CurrencyCode = "RUB"
+ , Languages = "ru", UnofficialNames = "Russia|Russland|Russie|Rusia|ロシア連邦|Rusland|Россия|Расія|俄罗斯", IsPreferred = true)]
+ [ResourceDescription(nameof(Ln.俄罗斯))]
+ RU = 643
+
+ ,
+
+ ///
+ /// 埃及
+ ///
+ [Country(CallingCode = 20, Alpha3 = "EGY", ShortName = "Egypt", LongName = "The Arab Republic of Egypt", CurrencyCode = "EGP", Languages = "ar"
+ , UnofficialNames = "Egypt|مصر|Ägypten|Égypte|Egipto|エジプト|Egypte|埃及")]
+ [ResourceDescription(nameof(Ln.埃及))]
+ EG = 818
+
+ ,
+
+ ///
+ /// 南非
+ ///
+ [Country(CallingCode = 27, Alpha3 = "ZAF", ShortName = "South Africa", LongName = "The Republic of South Africa", CurrencyCode = "ZAR"
+ , Languages = "af|en|nr|st|ss|tn|ts|ve|xh|zu"
+ , UnofficialNames = "South Africa|Republik Südafrika|Afrique du Sud|República de Sudáfrica|南アフリカ|Zuid-Afrika|南非")]
+ [ResourceDescription(nameof(Ln.南非))]
+ ZA = 710
+
+ ,
+
+ ///
+ /// 希腊
+ ///
+ [Country(CallingCode = 30, Alpha3 = "GRC", ShortName = "Greece", LongName = "The Hellenic Republic", CurrencyCode = "EUR", Languages = "el"
+ , UnofficialNames = "Greece|Griechenland|Grèce|Grecia|ギリシャ|Griekenland|希腊")]
+ [ResourceDescription(nameof(Ln.希腊))]
+ GR = 300
+
+ ,
+
+ ///
+ /// 荷兰
+ ///
+ [Country(CallingCode = 31, Alpha3 = "NLD", ShortName = "Netherlands", LongName = "The Kingdom of the Netherlands", CurrencyCode = "EUR"
+ , Languages = "nl|fy", UnofficialNames = "Netherlands|The Netherlands|Niederlande|Pays-Bas|Países Bajos|オランダ|Nederland|Нидерландия|荷兰")]
+ [ResourceDescription(nameof(Ln.荷兰))]
+ NL = 528
+
+ ,
+
+ ///
+ /// 比利时
+ ///
+ [Country(CallingCode = 32, Alpha3 = "BEL", ShortName = "Belgium", LongName = "The Kingdom of Belgium", CurrencyCode = "EUR"
+ , Languages = "nl|fr|de", UnofficialNames = "Belgium|Belgien|Belgique|Bélgica|ベルギー|België|比利时")]
+ [ResourceDescription(nameof(Ln.比利时))]
+ BE = 056
+
+ ,
+
+ ///
+ /// 法国
+ ///
+ [Country(CallingCode = 33, Alpha3 = "FRA", ShortName = "France", LongName = "The French Republic", CurrencyCode = "EUR", Languages = "fr"
+ , UnofficialNames = "France|Frankreich|the French Republic|フランス|Frankrijk|Francia|法国")]
+ [ResourceDescription(nameof(Ln.法国))]
+ FR = 250
+
+ ,
+
+ ///
+ /// 西班牙
+ ///
+ [Country(CallingCode = 34, Alpha3 = "ESP", ShortName = "Spain", LongName = "The Kingdom of Spain", CurrencyCode = "EUR", Languages = "es"
+ , UnofficialNames = "Spain|Spanien|Espagne|España|スペイン|Spanje|西班牙")]
+ [ResourceDescription(nameof(Ln.西班牙))]
+ ES = 724
+
+ ,
+
+ ///
+ /// 匈牙利
+ ///
+ [Country(CallingCode = 36, Alpha3 = "HUN", ShortName = "Hungary", LongName = "Hungary", CurrencyCode = "HUF", Languages = "hu"
+ , UnofficialNames = "Hungary|Ungarn|Hongrie|Hungría|ハンガリー|Hongarije|匈牙利")]
+ [ResourceDescription(nameof(Ln.匈牙利))]
+ HU = 348
+
+ ,
+
+ ///
+ /// 意大利
+ ///
+ [Country(CallingCode = 39, Alpha3 = "ITA", ShortName = "Italy", LongName = "The Italian Republic", CurrencyCode = "EUR", Languages = "it"
+ , UnofficialNames = "Italy|Italien|Italie|Italia|イタリア|Italië|意大利", IsPreferred = true)]
+ [ResourceDescription(nameof(Ln.意大利))]
+ IT = 380
+
+ ,
+
+ ///
+ /// 罗马尼亚
+ ///
+ [Country(CallingCode = 40, Alpha3 = "ROU", ShortName = "Romania", LongName = "Romania", CurrencyCode = "RON", Languages = "ro"
+ , UnofficialNames = "Romania|Rumänien|Roumanie|Rumania|ルーマニア|Roemenië|罗马尼亚")]
+ [ResourceDescription(nameof(Ln.罗马尼亚))]
+ RO = 642
+
+ ,
+
+ ///
+ /// 瑞士
+ ///
+ [Country(CallingCode = 41, Alpha3 = "CHE", ShortName = "Switzerland", LongName = "The Swiss Confederation", CurrencyCode = "CHF"
+ , Languages = "de|fr|it", UnofficialNames = "Switzerland|Schweiz|Suisse|Suiza|スイス|Zwitserland|瑞士")]
+ [ResourceDescription(nameof(Ln.瑞士))]
+ CH = 756
+
+ ,
+
+ ///
+ /// 奥地利
+ ///
+ [Country(CallingCode = 43, Alpha3 = "AUT", ShortName = "Austria", LongName = "The Republic of Austria", CurrencyCode = "EUR", Languages = "de"
+ , UnofficialNames = "Austria|Österreich|Autriche|オーストリア|Oostenrijk|奥地利")]
+ [ResourceDescription(nameof(Ln.奥地利))]
+ AT = 040
+
+ ,
+
+ ///
+ /// 英国
+ ///
+ [Country(CallingCode = 44, Alpha3 = "GBR", ShortName = "United Kingdom of Great Britain and Northern Ireland"
+ , LongName = "The United Kingdom of Great Britain and Northern Ireland", CurrencyCode = "GBP", Languages = "en"
+ , UnofficialNames
+ = "United Kingdom|The United Kingdom|England|Großbritannien|Vereinigtes Königreich|Royaume-Uni|Reino Unido|イギリス|Verenigd Koninkrijk|Great Britain (UK)|UK|Великобритания|Velká Británie|İngiltere|Великобританія|英国"
+ , IsPreferred = true)]
+ [ResourceDescription(nameof(Ln.英国))]
+ GB = 826
+
+ ,
+
+ ///
+ /// 根西
+ ///
+ [Country(CallingCode = 44, CallingSubCode = "1481", Alpha3 = "GGY", ShortName = "Guernsey", LongName = "The Bailiwick of Guernsey"
+ , CurrencyCode = "GBP", Languages = "en|fr"
+ , UnofficialNames = "Guernsey and Alderney|Guernsey und Alderney|Guernsey et Alderney|Guernsey y Alderney|ガーンジー|Guernsey|根西")]
+ [ResourceDescription(nameof(Ln.根西))]
+ GG = 831
+
+ ,
+
+ ///
+ /// 马恩岛
+ ///
+ [Country(CallingCode = 44, CallingSubCode = "1624", Alpha3 = "IMN", ShortName = "Isle of Man", LongName = "The Isle of Man", CurrencyCode = "GBP"
+ , Languages = "en|gv", UnofficialNames = "Isle of Man|Insel Man|Île de Man|Isla de Man|マン島|马恩岛")]
+ [ResourceDescription(nameof(Ln.马恩岛))]
+ IM = 833
+
+ ,
+
+ ///
+ /// 泽西
+ ///
+ [Country(CallingCode = 44, CallingSubCode = "1534", Alpha3 = "JEY", ShortName = "Jersey", LongName = "The Bailiwick of Jersey"
+ , CurrencyCode = "GBP", Languages = "en|fr", UnofficialNames = "Jersey|ジャージー|泽西")]
+ [ResourceDescription(nameof(Ln.泽西))]
+ JE = 832
+
+ ,
+
+ ///
+ /// 丹麦
+ ///
+ [Country(CallingCode = 45, Alpha3 = "DNK", ShortName = "Denmark", LongName = "The Kingdom of Denmark", CurrencyCode = "DKK", Languages = "da"
+ , UnofficialNames = "Denmark|Dänemark|Danemark|Dinamarca|デンマーク|Denemarken|丹麦")]
+ [ResourceDescription(nameof(Ln.丹麦))]
+ DK = 208
+
+ ,
+
+ ///
+ /// 瑞典
+ ///
+ [Country(CallingCode = 46, Alpha3 = "SWE", ShortName = "Sweden", LongName = "The Kingdom of Sweden", CurrencyCode = "SEK", Languages = "sv"
+ , UnofficialNames = "Sweden|Schweden|Suède|Suecia|スウェーデン|Zweden|瑞典")]
+ [ResourceDescription(nameof(Ln.瑞典))]
+ SE = 752
+
+ ,
+
+ ///
+ /// 斯瓦尔巴和扬马延
+ ///
+ [Country(CallingCode = 47, CallingSubCode = "79", Alpha3 = "SJM", ShortName = "Svalbard and Jan Mayen", LongName = "Svalbard and Jan Mayen"
+ , CurrencyCode = "NOK", Languages = "no"
+ , UnofficialNames
+ = "Svalbard and Jan Mayen|Svalbard und Jan Mayen|Îles Svalbard et Jan Mayen|Islas Svalbard y Jan Mayen|スヴァールバル諸島およびヤンマイエン島|Svalbard en Jan Mayen|斯瓦尔巴和扬马延")]
+ [ResourceDescription(nameof(Ln.斯瓦尔巴和扬马延))]
+ SJ = 744
+
+ ,
+
+ ///
+ /// 布韦岛
+ ///
+ [Country(CallingCode = 47, Alpha3 = "BVT", ShortName = "Bouvet Island", LongName = "Bouvet Island", CurrencyCode = "NOK", Languages = ""
+ , UnofficialNames = "Bouvet Island|Bouvetinsel|ブーベ島|Bouveteiland|布韦岛")]
+ [ResourceDescription(nameof(Ln.布韦岛))]
+ BV = 074
+
+ ,
+
+ ///
+ /// 挪威
+ ///
+ [Country(CallingCode = 47, Alpha3 = "NOR", ShortName = "Norway", LongName = "The Kingdom of Norway", CurrencyCode = "NOK", Languages = "nb|nn"
+ , UnofficialNames = "Norway|Norwegen|Norvège|Noruega|ノルウェー|Noorwegen|挪威", IsPreferred = true)]
+ [ResourceDescription(nameof(Ln.挪威))]
+ NO = 578
+
+ ,
+
+ ///
+ /// 波兰
+ ///
+ [Country(CallingCode = 48, Alpha3 = "POL", ShortName = "Poland", LongName = "The Republic of Poland", CurrencyCode = "PLN", Languages = "pl"
+ , UnofficialNames = "Poland|Polen|Pologne|Polonia|ポーランド|波兰")]
+ [ResourceDescription(nameof(Ln.波兰))]
+ PL = 616
+
+ ,
+
+ ///
+ /// 德国
+ ///
+ [Country(CallingCode = 49, Alpha3 = "DEU", ShortName = "Germany", LongName = "The Federal Republic of Germany", CurrencyCode = "EUR"
+ , Languages = "de", UnofficialNames = "Germany|Deutschland|Allemagne|Alemania|ドイツ|Duitsland|德国")]
+ [ResourceDescription(nameof(Ln.德国))]
+ DE = 276
+
+ ,
+
+ ///
+ /// 秘鲁
+ ///
+ [Country(CallingCode = 51, Alpha3 = "PER", ShortName = "Peru", LongName = "The Republic of Perú", CurrencyCode = "PEN", Languages = "es"
+ , UnofficialNames = "Peru|Pérou|Perú|ペルー|秘鲁")]
+ [ResourceDescription(nameof(Ln.秘鲁))]
+ PE = 604
+
+ ,
+
+ ///
+ /// 墨西哥
+ ///
+ [Country(CallingCode = 52, Alpha3 = "MEX", ShortName = "Mexico", LongName = "The United Mexican States", CurrencyCode = "MXN", Languages = "es"
+ , UnofficialNames = "Mexico|Mexiko|Mexique|México|メキシコ|墨西哥")]
+ [ResourceDescription(nameof(Ln.墨西哥))]
+ MX = 484
+
+ ,
+
+ ///
+ /// 古巴
+ ///
+ [Country(CallingCode = 53, Alpha3 = "CUB", ShortName = "Cuba", LongName = "The Republic of Cuba", CurrencyCode = "CUP", Languages = "es"
+ , UnofficialNames = "Cuba|Kuba|キューバ|古巴")]
+ [ResourceDescription(nameof(Ln.古巴))]
+ CU = 192
+
+ ,
+
+ ///
+ /// 阿根廷
+ ///
+ [Country(CallingCode = 54, Alpha3 = "ARG", ShortName = "Argentina", LongName = "The Argentine Republic", CurrencyCode = "ARS", Languages = "es|gn"
+ , UnofficialNames = "Argentina|Argentinien|Argentine|アルゼンチン|Argentinië|阿根廷")]
+ [ResourceDescription(nameof(Ln.阿根廷))]
+ AR = 032
+
+ ,
+
+ ///
+ /// 巴西
+ ///
+ [Country(CallingCode = 55, Alpha3 = "BRA", ShortName = "Brazil", LongName = "The Federative Republic of Brazil", CurrencyCode = "BRL"
+ , Languages = "pt", UnofficialNames = "Brazil|Brasilien|Brésil|Brasil|ブラジル|Brazilië|巴西")]
+ [ResourceDescription(nameof(Ln.巴西))]
+ BR = 076
+
+ ,
+
+ ///
+ /// 智利
+ ///
+ [Country(CallingCode = 56, Alpha3 = "CHL", ShortName = "Chile", LongName = "The Republic of Chile", CurrencyCode = "CLP", Languages = "es"
+ , UnofficialNames = "Chile|チリ|Chili|智利")]
+ [ResourceDescription(nameof(Ln.智利))]
+ CL = 152
+
+ ,
+
+ ///
+ /// 哥伦比亚
+ ///
+ [Country(CallingCode = 57, Alpha3 = "COL", ShortName = "Colombia", LongName = "The Republic of Colombia", CurrencyCode = "COP", Languages = "es"
+ , UnofficialNames = "Colombia|Kolumbien|Colombie|コロンビア|哥伦比亚")]
+ [ResourceDescription(nameof(Ln.哥伦比亚))]
+ CO = 170
+
+ ,
+
+ ///
+ /// 委内瑞拉
+ ///
+ [Country(CallingCode = 58, Alpha3 = "VEN", ShortName = "Venezuela (Bolivarian Republic of)", LongName = "The Bolivarian Republic of Venezuela"
+ , CurrencyCode = "VES", Languages = "es", UnofficialNames = "Venezuela|ベネズエラ・ボリバル共和国|委内瑞拉")]
+ [ResourceDescription(nameof(Ln.委内瑞拉))]
+ VE = 862
+
+ ,
+
+ ///
+ /// 马来西亚
+ ///
+ [Country(CallingCode = 60, Alpha3 = "MYS", ShortName = "Malaysia", LongName = "Malaysia", CurrencyCode = "MYR", Languages = "ms|en"
+ , UnofficialNames = "Malaysia|Malaisie|Malasia|マレーシア|Maleisië|马来西亚")]
+ [ResourceDescription(nameof(Ln.马来西亚))]
+ MY = 458
+
+ ,
+
+ ///
+ /// 澳大利亚
+ ///
+ [Country(CallingCode = 61, Alpha3 = "AUS", ShortName = "Australia", LongName = "The Commonwealth of Australia", CurrencyCode = "AUD"
+ , Languages = "en", UnofficialNames = "Australia|Australien|Australie|オーストラリア|Australië|澳洲|澳大利亚", IsPreferred = true)]
+ [ResourceDescription(nameof(Ln.澳大利亚))]
+ AU = 036
+
+ ,
+
+ ///
+ /// 科科斯基林群岛
+ ///
+ [Country(CallingCode = 61, CallingSubCode = "89162", Alpha3 = "CCK", ShortName = "Cocos (Keeling) Islands"
+ , LongName = "The Territory of Cocos (Keeling) Islands", CurrencyCode = "AUD", Languages = "en"
+ , UnofficialNames = "Cocos (Keeling) Islands|Kokosinseln|ココス(キーリング)諸島|Cocoseilanden|科科斯基林群岛")]
+ [ResourceDescription(nameof(Ln.科科斯基林群岛))]
+ CC = 166
+
+ ,
+
+ ///
+ /// 圣诞岛
+ ///
+ [Country(CallingCode = 61, CallingSubCode = "89164", Alpha3 = "CXR", ShortName = "Christmas Island"
+ , LongName = "The Territory of Christmas Island", CurrencyCode = "AUD", Languages = "en|zh|ms"
+ , UnofficialNames = "Christmas Island|Weihnachtsinsel|クリスマス島|Christmaseiland|圣诞岛")]
+ [ResourceDescription(nameof(Ln.圣诞岛))]
+ CX = 162
+
+ ,
+
+ ///
+ /// 赫德岛和麦克唐纳群岛
+ ///
+ [Country(CallingCode = 672, CallingSubCode = "1", Alpha3 = "HMD", ShortName = "Heard Island and McDonald Islands"
+ , LongName = "The Territory of Heard Island and McDonald Islands", CurrencyCode = "AUD", Languages = "en"
+ , UnofficialNames
+ = "Heard and McDonald Islands|Heard und die McDonaldinseln|ハード島とマクドナルド諸島|Heard- en McDonaldeilanden|Heard Island and McDonald Islands|赫德岛和麦克唐纳群岛")]
+ [ResourceDescription(nameof(Ln.赫德岛和麦克唐纳群岛))]
+ HM = 334
+
+ ,
+
+ ///
+ /// 印度尼西亚
+ ///
+ [Country(CallingCode = 62, Alpha3 = "IDN", ShortName = "Indonesia", LongName = "The Republic of Indonesia", CurrencyCode = "IDR", Languages = "id"
+ , UnofficialNames = "Indonesia|Indonesien|Indonésie|インドネシア|Indonesië|印度尼西亚")]
+ [ResourceDescription(nameof(Ln.印度尼西亚))]
+ ID = 360
+
+ ,
+
+ ///
+ /// 菲律宾
+ ///
+ [Country(CallingCode = 63, Alpha3 = "PHL", ShortName = "Philippines", LongName = "The Republic of the Philippines", CurrencyCode = "PHP"
+ , Languages = "tl|en", UnofficialNames = "Philippines|Philippinen|Filipinas|フィリピン|Filipijnen|菲律宾")]
+ [ResourceDescription(nameof(Ln.菲律宾))]
+ PH = 608
+
+ ,
+
+ ///
+ /// 新西兰
+ ///
+ [Country(CallingCode = 64, Alpha3 = "NZL", ShortName = "New Zealand", LongName = "New Zealand", CurrencyCode = "NZD", Languages = "en"
+ , UnofficialNames = "New Zealand|Neuseeland|Nouvelle Zélande|Nueva Zelanda|ニュージーランド|Nieuw-Zeeland|新西兰", IsPreferred = true)]
+ [ResourceDescription(nameof(Ln.新西兰))]
+ NZ = 554
+
+ ,
+
+ ///
+ /// 皮特凯恩群岛
+ ///
+ [Country(CallingCode = 64, Alpha3 = "PCN", ShortName = "Pitcairn", LongName = "The Pitcairn, Henderson, Ducie and Oeno Islands"
+ , CurrencyCode = "NZD", Languages = "en", UnofficialNames = "Pitcairn|ピトケアン|Pitcairneilanden|Pitcairn Islands|皮特凯恩群岛")]
+ [ResourceDescription(nameof(Ln.皮特凯恩群岛))]
+ PN = 612
+
+ ,
+
+ ///
+ /// 新加坡
+ ///
+ [Country(CallingCode = 65, Alpha3 = "SGP", ShortName = "Singapore", LongName = "The Republic of Singapore", CurrencyCode = "SGD"
+ , Languages = "en|ms|ta", UnofficialNames = "Singapore|Singapur|Singapour|シンガポール|新加坡")]
+ [ResourceDescription(nameof(Ln.新加坡))]
+ SG = 702
+
+ ,
+
+ ///
+ /// 泰国
+ ///
+ [Country(CallingCode = 66, Alpha3 = "THA", ShortName = "Thailand", LongName = "The Kingdom of Thailand", CurrencyCode = "THB", Languages = "th"
+ , UnofficialNames = "Thailand|Thaïlande|Tailandia|タイ|ประเทศไทย|泰国")]
+ [ResourceDescription(nameof(Ln.泰国))]
+ TH = 764
+
+ ,
+
+ ///
+ /// 日本
+ ///
+ [Country(CallingCode = 81, Alpha3 = "JPN", ShortName = "Japan", LongName = "Japan", CurrencyCode = "JPY", Languages = "ja"
+ , UnofficialNames = "Japan|Japon|Japón|日本")]
+ [ResourceDescription(nameof(Ln.日本))]
+ JP = 392
+
+ ,
+
+ ///
+ /// 韩国
+ ///
+ [Country(CallingCode = 82, Alpha3 = "KOR", ShortName = "Korea (Republic of)", LongName = "The Republic of Korea", CurrencyCode = "KRW"
+ , Languages = "ko"
+ , UnofficialNames = "South Korea|Korea (South)|Südkorea|Corée du Sud|Corea del Sur|大韓民国|Zuid-Korea|Korea (Republic of)|韩国")]
+ [ResourceDescription(nameof(Ln.韩国))]
+ KR = 410
+
+ ,
+
+ ///
+ /// 越南
+ ///
+ [Country(CallingCode = 84, Alpha3 = "VNM", ShortName = "Viet Nam", LongName = "The Socialist Republic of Viet Nam", CurrencyCode = "VND"
+ , Languages = "vi", UnofficialNames = "Vietnam|ベトナム|Viet Nam|越南")]
+ [ResourceDescription(nameof(Ln.越南))]
+ VN = 704
+
+ ,
+
+ ///
+ /// 中国
+ ///
+ [Country(CallingCode = 86, Alpha3 = "CHN", ShortName = "China", LongName = "The People's Republic of China", CurrencyCode = "CNY"
+ , Languages = "zh", UnofficialNames = "China|Chine|中国")]
+ [ResourceDescription(nameof(Ln.中国))]
+ CN = 156
+
+ ,
+
+ ///
+ /// 土耳其
+ ///
+ [Country(CallingCode = 90, Alpha3 = "TUR", ShortName = "Türkiye", LongName = "The Republic of Türkiye", CurrencyCode = "TRY", Languages = "tr"
+ , UnofficialNames = "Turkey|Türkei|Turquie|Turquía|トルコ|Turkije|土耳其")]
+ [ResourceDescription(nameof(Ln.土耳其))]
+ TR = 792
+
+ ,
+
+ ///
+ /// 印度
+ ///
+ [Country(CallingCode = 91, Alpha3 = "IND", ShortName = "India", LongName = "The Republic of India", CurrencyCode = "INR", Languages = "hi|en"
+ , UnofficialNames = "India|Indien|Inde|インド|印度")]
+ [ResourceDescription(nameof(Ln.印度))]
+ IN = 356
+
+ ,
+
+ ///
+ /// 巴基斯坦
+ ///
+ [Country(CallingCode = 92, Alpha3 = "PAK", ShortName = "Pakistan", LongName = "The Islamic Republic of Pakistan", CurrencyCode = "PKR"
+ , Languages = "en|ur", UnofficialNames = "Pakistan|Paquistán|パキスタン|巴基斯坦")]
+ [ResourceDescription(nameof(Ln.巴基斯坦))]
+ PK = 586
+
+ ,
+
+ ///
+ /// 阿富汗
+ ///
+ [Country(CallingCode = 93, Alpha3 = "AFG", ShortName = "Afghanistan", LongName = "The Islamic Republic of Afghanistan", CurrencyCode = "AFN"
+ , Languages = "ps|uz|tk", UnofficialNames = "Afghanistan|Afganistán|アフガニスタン|阿富汗")]
+ [ResourceDescription(nameof(Ln.阿富汗))]
+ AF = 004
+
+ ,
+
+ ///
+ /// 斯里兰卡
+ ///
+ [Country(CallingCode = 94, Alpha3 = "LKA", ShortName = "Sri Lanka", LongName = "The Democratic Socialist Republic of Sri Lanka"
+ , CurrencyCode = "LKR", Languages = "si|ta", UnofficialNames = "Sri Lanka|スリランカ|斯里兰卡")]
+ [ResourceDescription(nameof(Ln.斯里兰卡))]
+ LK = 144
+
+ ,
+
+ ///
+ /// 缅甸
+ ///
+ [Country(CallingCode = 95, Alpha3 = "MMR", ShortName = "Myanmar", LongName = "The Republic of the Union of Myanmar", CurrencyCode = "MMK"
+ , Languages = "my", UnofficialNames = "Myanmar (Burma)|ミャンマー|缅甸")]
+ [ResourceDescription(nameof(Ln.缅甸))]
+ MM = 104
+
+ ,
+
+ ///
+ /// 伊朗
+ ///
+ [Country(CallingCode = 98, Alpha3 = "IRN", ShortName = "Iran (Islamic Republic of)", LongName = "The Islamic Republic of Iran"
+ , CurrencyCode = "IRR", Languages = "fa"
+ , UnofficialNames = "Iran|Irán|Iran (Islamic Republic Of)|イラン・イスラム共和国|Islamic Republic of Iran|伊朗")]
+ [ResourceDescription(nameof(Ln.伊朗))]
+ IR = 364
+
+ ,
+
+ ///
+ /// 南苏丹
+ ///
+ [Country(CallingCode = 211, Alpha3 = "SSD", ShortName = "South Sudan", LongName = "The Republic of South Sudan", CurrencyCode = "SSP"
+ , Languages = "ar|en", UnofficialNames = "South Sudan|Südsudan|南スーダン|Zuid-Soedan|南苏丹")]
+ [ResourceDescription(nameof(Ln.南苏丹))]
+ SS = 728
+
+ ,
+
+ ///
+ /// 西撒哈拉
+ ///
+ [Country(CallingCode = 212, Alpha3 = "ESH", ShortName = "Western Sahara", LongName = "The Sahrawi Arab Democratic Republic", CurrencyCode = "MAD"
+ , Languages = "es|fr", UnofficialNames = "Western Sahara|الصحراء الغربية|Westsahara|Sahara Occidental|西サハラ|Westelijke Sahara|西撒哈拉")]
+ [ResourceDescription(nameof(Ln.西撒哈拉))]
+ EH = 732
+
+ ,
+
+ ///
+ /// 摩洛哥
+ ///
+ [Country(CallingCode = 212, Alpha3 = "MAR", ShortName = "Morocco", LongName = "The Kingdom of Morocco", CurrencyCode = "MAD", Languages = "ar"
+ , UnofficialNames = "Morocco|المغرب|Marokko|Maroc|Marruecos|モロッコ|摩洛哥", IsPreferred = true)]
+ [ResourceDescription(nameof(Ln.摩洛哥))]
+ MA = 504
+
+ ,
+
+ ///
+ /// 阿尔及利亚
+ ///
+ [Country(CallingCode = 213, Alpha3 = "DZA", ShortName = "Algeria", LongName = "The People's Democratic Republic of Algeria", CurrencyCode = "DZD"
+ , Languages = "ar", UnofficialNames = "Algeria|الجزائر|Algerien|Algérie|Argelia|アルジェリア|Algerije|阿尔及利亚")]
+ [ResourceDescription(nameof(Ln.阿尔及利亚))]
+ DZ = 012
+
+ ,
+
+ ///
+ /// 突尼斯
+ ///
+ [Country(CallingCode = 216, Alpha3 = "TUN", ShortName = "Tunisia", LongName = "The Republic of Tunisia", CurrencyCode = "TND", Languages = "ar|fr"
+ , UnofficialNames = "Tunisia|تونس|Tunesien|Tunisie|Túnez|チュニジア|Tunesië|突尼斯")]
+ [ResourceDescription(nameof(Ln.突尼斯))]
+ TN = 788
+
+ ,
+
+ ///
+ /// 利比亚
+ ///
+ [Country(CallingCode = 218, Alpha3 = "LBY", ShortName = "Libya", LongName = "The State of Libya", CurrencyCode = "LYD", Languages = "ar"
+ , UnofficialNames = "Libya|ليبيا|Libyen|Libye|Libia|リビア|Libië|Libyan Arab Jamahiriya|利比亚")]
+ [ResourceDescription(nameof(Ln.利比亚))]
+ LY = 434
+
+ ,
+
+ ///
+ /// 冈比亚
+ ///
+ [Country(CallingCode = 220, Alpha3 = "GMB", ShortName = "Gambia", LongName = "The Republic of The Gambia", CurrencyCode = "GMD", Languages = "en"
+ , UnofficialNames = "The Gambia|ガンビア|冈比亚")]
+ [ResourceDescription(nameof(Ln.冈比亚))]
+ GM = 270
+
+ ,
+
+ ///
+ /// 塞内加尔
+ ///
+ [Country(CallingCode = 221, Alpha3 = "SEN", ShortName = "Senegal", LongName = "The Republic of Senegal", CurrencyCode = "XOF", Languages = "fr"
+ , UnofficialNames = "Senegal|Sénégal|セネガル|塞内加尔")]
+ [ResourceDescription(nameof(Ln.塞内加尔))]
+ SN = 686
+
+ ,
+
+ ///
+ /// 毛里塔尼亚
+ ///
+ [Country(CallingCode = 222, Alpha3 = "MRT", ShortName = "Mauritania", LongName = "The Islamic Republic of Mauritania", CurrencyCode = "MRU"
+ , Languages = "ar|fr", UnofficialNames = "Mauritania|موريتانيا|Mauretanien|Mauritanie|モーリタニア|Mauritanië|毛里塔尼亚")]
+ [ResourceDescription(nameof(Ln.毛里塔尼亚))]
+ MR = 478
+
+ ,
+
+ ///
+ /// 马里
+ ///
+ [Country(CallingCode = 223, Alpha3 = "MLI", ShortName = "Mali", LongName = "The Republic of Mali", CurrencyCode = "XOF", Languages = "fr"
+ , UnofficialNames = "Mali|マリ|马里")]
+ [ResourceDescription(nameof(Ln.马里))]
+ ML = 466
+
+ ,
+
+ ///
+ /// 几内亚
+ ///
+ [Country(CallingCode = 224, Alpha3 = "GIN", ShortName = "Guinea", LongName = "The Republic of Guinea", CurrencyCode = "GNF", Languages = "fr|ff"
+ , UnofficialNames = "Guinea|Guinée|ギニア|Guinee|几内亚")]
+ [ResourceDescription(nameof(Ln.几内亚))]
+ GN = 324
+
+ ,
+
+ ///
+ /// 科特迪瓦
+ ///
+ [Country(CallingCode = 225, Alpha3 = "CIV", ShortName = "Côte d'Ivoire", LongName = "The Republic of Côte d'Ivoire", CurrencyCode = "XOF"
+ , Languages = "fr"
+ , UnofficialNames
+ = "Côte D'Ivoire|Elfenbeinküste|コートジボワール|Ivoorkust|Cote D'Ivoire (Ivory Coast)|Cote d Ivoire (Ivory Coast)|Ivory Coast|科特迪瓦")]
+ [ResourceDescription(nameof(Ln.科特迪瓦))]
+ CI = 384
+
+ ,
+
+ ///
+ /// 布基纳法索
+ ///
+ [Country(CallingCode = 226, Alpha3 = "BFA", ShortName = "Burkina Faso", LongName = "Burkina Faso", CurrencyCode = "XOF", Languages = "fr|ff"
+ , UnofficialNames = "Burkina Faso|ブルキナファソ|布基纳法索")]
+ [ResourceDescription(nameof(Ln.布基纳法索))]
+ BF = 854
+
+ ,
+
+ ///
+ /// 尼日尔
+ ///
+ [Country(CallingCode = 227, Alpha3 = "NER", ShortName = "Niger", LongName = "The Republic of the Niger", CurrencyCode = "XOF", Languages = "fr"
+ , UnofficialNames = "Niger|Níger|ニジェール|尼日尔")]
+ [ResourceDescription(nameof(Ln.尼日尔))]
+ NE = 562
+
+ ,
+
+ ///
+ /// 多哥
+ ///
+ [Country(CallingCode = 228, Alpha3 = "TGO", ShortName = "Togo", LongName = "The Togolese Republic", CurrencyCode = "XOF", Languages = "fr"
+ , UnofficialNames = "Togo|トーゴ|多哥")]
+ [ResourceDescription(nameof(Ln.多哥))]
+ TG = 768
+
+ ,
+
+ ///
+ /// 贝宁
+ ///
+ [Country(CallingCode = 229, Alpha3 = "BEN", ShortName = "Benin", LongName = "The Republic of Benin", CurrencyCode = "XOF", Languages = "fr"
+ , UnofficialNames = "Benin|Bénin|ベナン|贝宁")]
+ [ResourceDescription(nameof(Ln.贝宁))]
+ BJ = 204
+
+ ,
+
+ ///
+ /// 毛里求斯
+ ///
+ [Country(CallingCode = 230, Alpha3 = "MUS", ShortName = "Mauritius", LongName = "The Republic of Mauritius", CurrencyCode = "MUR"
+ , Languages = "en", UnofficialNames = "Mauritius|Île Maurice|Mauricio|モーリシャス|毛里求斯")]
+ [ResourceDescription(nameof(Ln.毛里求斯))]
+ MU = 480
+
+ ,
+
+ ///
+ /// 利比里亚
+ ///
+ [Country(CallingCode = 231, Alpha3 = "LBR", ShortName = "Liberia", LongName = "The Republic of Liberia", CurrencyCode = "LRD", Languages = "en"
+ , UnofficialNames = "Liberia|リベリア|利比里亚")]
+ [ResourceDescription(nameof(Ln.利比里亚))]
+ LR = 430
+
+ ,
+
+ ///
+ /// 塞拉利昂
+ ///
+ [Country(CallingCode = 232, Alpha3 = "SLE", ShortName = "Sierra Leone", LongName = "The Republic of Sierra Leone", CurrencyCode = "SLL"
+ , Languages = "en", UnofficialNames = "Sierra Leone|シエラレオネ|塞拉利昂")]
+ [ResourceDescription(nameof(Ln.塞拉利昂))]
+ SL = 694
+
+ ,
+
+ ///
+ /// 加纳
+ ///
+ [Country(CallingCode = 233, Alpha3 = "GHA", ShortName = "Ghana", LongName = "The Republic of Ghana", CurrencyCode = "GHS", Languages = "en"
+ , UnofficialNames = "Ghana|ガーナ|加纳")]
+ [ResourceDescription(nameof(Ln.加纳))]
+ GH = 288
+
+ ,
+
+ ///
+ /// 尼日利亚
+ ///
+ [Country(CallingCode = 234, Alpha3 = "NGA", ShortName = "Nigeria", LongName = "The Federal Republic of Nigeria", CurrencyCode = "NGN"
+ , Languages = "en", UnofficialNames = "Nigeria|Nigéria|the Federal Republic of Nigeria|ナイジェリア|尼日利亚")]
+ [ResourceDescription(nameof(Ln.尼日利亚))]
+ NG = 566
+
+ ,
+
+ ///
+ /// 乍得
+ ///
+ [Country(CallingCode = 235, Alpha3 = "TCD", ShortName = "Chad", LongName = "The Republic of Chad", CurrencyCode = "XAF", Languages = "ar|fr"
+ , UnofficialNames = "Chad|تشاد|Tschad|Tchad|チャド|Tsjaad|乍得")]
+ [ResourceDescription(nameof(Ln.乍得))]
+ TD = 148
+
+ ,
+
+ ///
+ /// 中非
+ ///
+ [Country(CallingCode = 236, Alpha3 = "CAF", ShortName = "Central African Republic", LongName = "The Central African Republic"
+ , CurrencyCode = "XAF", Languages = "fr|sg"
+ , UnofficialNames
+ = "Central African Republic|Zentralafrikanische Republik|République Centrafricaine|República Centroafricana|中央アフリカ共和国|Centraal-Afrikaanse Republiek|中非")]
+ [ResourceDescription(nameof(Ln.中非))]
+ CF = 140
+
+ ,
+
+ ///
+ /// 喀麦隆
+ ///
+ [Country(CallingCode = 237, Alpha3 = "CMR", ShortName = "Cameroon", LongName = "The Republic of Cameroon", CurrencyCode = "XAF"
+ , Languages = "en|fr", UnofficialNames = "Cameroon|Kamerun|Cameroun|Camerún|カメルーン|Kameroen|喀麦隆")]
+ [ResourceDescription(nameof(Ln.喀麦隆))]
+ CM = 120
+
+ ,
+
+ ///
+ /// 佛得角
+ ///
+ [Country(CallingCode = 238, Alpha3 = "CPV", ShortName = "Cabo Verde", LongName = "The Republic of Cabo Verde", CurrencyCode = "CVE"
+ , Languages = "pt", UnofficialNames = "Cape Verde|Kap Verde|Cap Vert|Cabo Verde|カーボベルデ|Kaapverdië|佛得角")]
+ [ResourceDescription(nameof(Ln.佛得角))]
+ CV = 132
+
+ ,
+
+ ///
+ /// 圣多美和普林西比
+ ///
+ [Country(CallingCode = 239, Alpha3 = "STP", ShortName = "Sao Tome and Principe", LongName = "The Democratic Republic of São Tomé and Príncipe"
+ , CurrencyCode = "STD", Languages = "pt"
+ , UnofficialNames
+ = "São Tomé and Príncipe|São Tomé und Príncipe|São Tomé et Príncipe|Santo Tomé y Príncipe|サントメ・プリンシペ|Sao Tomé en Principe|圣多美和普林西比")]
+ [ResourceDescription(nameof(Ln.圣多美和普林西比))]
+ ST = 678
+
+ ,
+
+ ///
+ /// 赤道几内亚
+ ///
+ [Country(CallingCode = 240, Alpha3 = "GNQ", ShortName = "Equatorial Guinea", LongName = "The Republic of Equatorial Guinea", CurrencyCode = "XAF"
+ , Languages = "es|fr"
+ , UnofficialNames = "Equatorial Guinea|Äquatorial-Guinea|Guinée Équatoriale|Guinea Ecuatorial|赤道ギニア|Equatoriaal-Guinea|赤道几内亚")]
+ [ResourceDescription(nameof(Ln.赤道几内亚))]
+ GQ = 226
+
+ ,
+
+ ///
+ /// 加蓬
+ ///
+ [Country(CallingCode = 241, Alpha3 = "GAB", ShortName = "Gabon", LongName = "The Gabonese Republic", CurrencyCode = "XAF", Languages = "fr"
+ , UnofficialNames = "Gabon|Gabun|Gabón|ガボン|加蓬")]
+ [ResourceDescription(nameof(Ln.加蓬))]
+ GA = 266
+
+ ,
+
+ ///
+ /// 刚果共和国
+ ///
+ [Country(CallingCode = 242, Alpha3 = "COG", ShortName = "Congo", LongName = "The Republic of the Congo", CurrencyCode = "XAF", Languages = "fr|ln"
+ , UnofficialNames = "Congo|Kongo|コンゴ共和国|Congo [Republiek]|Congo, Republic of|刚果共和国")]
+ [ResourceDescription(nameof(Ln.刚果共和国))]
+ CG = 178
+
+ ,
+
+ ///
+ /// 刚果民主共和国
+ ///
+ [Country(CallingCode = 243, Alpha3 = "COD", ShortName = "Congo (Democratic Republic of the)", LongName = "The Democratic Republic of the Congo"
+ , CurrencyCode = "CDF", Languages = "fr|ln|kg|sw|lu"
+ , UnofficialNames
+ = "Congo (Dem. Rep.)|Kongo (Dem. Rep.)|Congo (Rep. Dem.)|コンゴ民主共和国|Congo [DRC]|Congo (The Democratic Republic Of The)|Democratic Republic of the Congo|Congo, Democratic Republic of|刚果民主共和国")]
+ [ResourceDescription(nameof(Ln.刚果民主共和国))]
+ CD = 180
+
+ ,
+
+ ///
+ /// 安哥拉
+ ///
+ [Country(CallingCode = 244, Alpha3 = "AGO", ShortName = "Angola", LongName = "The Republic of Angola", CurrencyCode = "AOA", Languages = "pt"
+ , UnofficialNames = "Angola|アンゴラ|安哥拉")]
+ [ResourceDescription(nameof(Ln.安哥拉))]
+ AO = 024
+
+ ,
+
+ ///
+ /// 几内亚比绍
+ ///
+ [Country(CallingCode = 245, Alpha3 = "GNB", ShortName = "Guinea-Bissau", LongName = "The Republic of Guinea-Bissau", CurrencyCode = "XOF"
+ , Languages = "pt", UnofficialNames = "Guinea-Bissau|Guinée-Bissau|ギニアビサウ|Guinee-Bissau|Guinea Bissau|几内亚比绍")]
+ [ResourceDescription(nameof(Ln.几内亚比绍))]
+ GW = 624
+
+ ,
+
+ ///
+ /// 英属印度洋领地
+ ///
+ [Country(CallingCode = 246, Alpha3 = "IOT", ShortName = "British Indian Ocean Territory", LongName = "The British Indian Ocean Territory"
+ , CurrencyCode = "USD", Languages = "en"
+ , UnofficialNames
+ = "British Indian Ocean Territory|Britisches Territorium im Indischen Ozean|イギリス領インド洋地域|Britse Gebieden in de Indische Oceaan|英属印度洋领地")]
+ [ResourceDescription(nameof(Ln.英属印度洋领地))]
+ IO = 086
+
+ ,
+
+ ///
+ /// 塞舌尔
+ ///
+ [Country(CallingCode = 248, Alpha3 = "SYC", ShortName = "Seychelles", LongName = "The Republic of Seychelles", CurrencyCode = "SCR"
+ , Languages = "fr|en", UnofficialNames = "Seychelles|Seychellen|セーシェル|塞舌尔")]
+ [ResourceDescription(nameof(Ln.塞舌尔))]
+ SC = 690
+
+ ,
+
+ ///
+ /// 苏丹
+ ///
+ [Country(CallingCode = 249, Alpha3 = "SDN", ShortName = "Sudan", LongName = "The Republic of the Sudan", CurrencyCode = "SDG", Languages = "ar|en"
+ , UnofficialNames = "Sudan|السودان|Soudan|Sudán|スーダン|Soedan|苏丹")]
+ [ResourceDescription(nameof(Ln.苏丹))]
+ SD = 729
+
+ ,
+
+ ///
+ /// 卢旺达
+ ///
+ [Country(CallingCode = 250, Alpha3 = "RWA", ShortName = "Rwanda", LongName = "The Republic of Rwanda", CurrencyCode = "RWF"
+ , Languages = "rw|en|fr", UnofficialNames = "Rwanda|Ruanda|ルワンダ|卢旺达")]
+ [ResourceDescription(nameof(Ln.卢旺达))]
+ RW = 646
+
+ ,
+
+ ///
+ /// 埃塞俄比亚
+ ///
+ [Country(CallingCode = 251, Alpha3 = "ETH", ShortName = "Ethiopia", LongName = "The Federal Democratic Republic of Ethiopia", CurrencyCode = "ETB"
+ , Languages = "am", UnofficialNames = "Ethiopia|Äthiopien|Éthiopie|Etiopía|エチオピア|Ethiopië|埃塞俄比亚")]
+ [ResourceDescription(nameof(Ln.埃塞俄比亚))]
+ ET = 231
+
+ ,
+
+ ///
+ /// 索马里
+ ///
+ [Country(CallingCode = 252, Alpha3 = "SOM", ShortName = "Somalia", LongName = "The Federal Republic of Somalia", CurrencyCode = "SOS"
+ , Languages = "so|ar", UnofficialNames = "Somalia|الصومال|ソマリア|Somalië|索马里")]
+ [ResourceDescription(nameof(Ln.索马里))]
+ SO = 706
+
+ ,
+
+ ///
+ /// 吉布提
+ ///
+ [Country(CallingCode = 253, Alpha3 = "DJI", ShortName = "Djibouti", LongName = "The Republic of Djibouti", CurrencyCode = "DJF"
+ , Languages = "ar|fr", UnofficialNames = "Djibouti|جيبوتي|Dschibuti|ジブチ|吉布提")]
+ [ResourceDescription(nameof(Ln.吉布提))]
+ DJ = 262
+
+ ,
+
+ ///
+ /// 肯尼亚
+ ///
+ [Country(CallingCode = 254, Alpha3 = "KEN", ShortName = "Kenya", LongName = "The Republic of Kenya", CurrencyCode = "KES", Languages = "en|sw"
+ , UnofficialNames = "Kenya|Kenia|ケニア|肯尼亚")]
+ [ResourceDescription(nameof(Ln.肯尼亚))]
+ KE = 404
+
+ ,
+
+ ///
+ /// 坦桑尼亚
+ ///
+ [Country(CallingCode = 255, Alpha3 = "TZA", ShortName = "Tanzania, United Republic of", LongName = "The United Republic of Tanzania"
+ , CurrencyCode = "TZS", Languages = "sw|en", UnofficialNames = "Tanzania|Tansania|Tanzanie|タンザニア|Tanzania United Republic|坦桑尼亚")]
+ [ResourceDescription(nameof(Ln.坦桑尼亚))]
+ TZ = 834
+
+ ,
+
+ ///
+ /// 乌干达
+ ///
+ [Country(CallingCode = 256, Alpha3 = "UGA", ShortName = "Uganda", LongName = "The Republic of Uganda", CurrencyCode = "UGX", Languages = "en|sw"
+ , UnofficialNames = "Uganda|ウガンダ|Oeganda|乌干达")]
+ [ResourceDescription(nameof(Ln.乌干达))]
+ UG = 800
+
+ ,
+
+ ///
+ /// 布隆迪
+ ///
+ [Country(CallingCode = 257, Alpha3 = "BDI", ShortName = "Burundi", LongName = "The Republic of Burundi", CurrencyCode = "BIF", Languages = "fr|rn"
+ , UnofficialNames = "Burundi|ブルンジ|布隆迪")]
+ [ResourceDescription(nameof(Ln.布隆迪))]
+ BI = 108
+
+ ,
+
+ ///
+ /// 莫桑比克
+ ///
+ [Country(CallingCode = 258, Alpha3 = "MOZ", ShortName = "Mozambique", LongName = "The Republic of Mozambique", CurrencyCode = "MZN"
+ , Languages = "pt", UnofficialNames = "Mozambique|Mosambik|モザンビーク|莫桑比克")]
+ [ResourceDescription(nameof(Ln.莫桑比克))]
+ MZ = 508
+
+ ,
+
+ ///
+ /// 赞比亚
+ ///
+ [Country(CallingCode = 260, Alpha3 = "ZMB", ShortName = "Zambia", LongName = "The Republic of Zambia", CurrencyCode = "ZMW", Languages = "en"
+ , UnofficialNames = "Zambia|Sambia|Zambie|ザンビア|赞比亚")]
+ [ResourceDescription(nameof(Ln.赞比亚))]
+ ZM = 894
+
+ ,
+
+ ///
+ /// 马达加斯加
+ ///
+ [Country(CallingCode = 261, Alpha3 = "MDG", ShortName = "Madagascar", LongName = "The Republic of Madagascar", CurrencyCode = "MGA"
+ , Languages = "fr|mg", UnofficialNames = "Madagascar|Madagaskar|the Republic of Madagascar|マダガスカル|马达加斯加")]
+ [ResourceDescription(nameof(Ln.马达加斯加))]
+ MG = 450
+
+ ,
+
+ ///
+ /// 留尼汪
+ ///
+ [Country(CallingCode = 262, Alpha3 = "REU", ShortName = "Réunion", LongName = "Réunion", CurrencyCode = "EUR", Languages = "fr"
+ , UnofficialNames = "Réunion|Reunión|Reunion|レユニオン|留尼汪", IsPreferred = true)]
+ [ResourceDescription(nameof(Ln.留尼汪))]
+ RE = 638
+
+ ,
+
+ ///
+ /// 法属南部和南极领地
+ ///
+ [Country(CallingCode = 262, Alpha3 = "ATF", ShortName = "French Southern Territories", LongName = "The French Southern and Antarctic Lands"
+ , CurrencyCode = "EUR", Languages = "fr"
+ , UnofficialNames
+ = "French Southern Territories|Französische Süd- und Antarktisgebiete|Terres Australes Françaises|Territorios Franceses del Sur|フランス領南方・南極地域|Franse Gebieden in de zuidelijke Indische Oceaan|French Southern and Antarctic Lands|法属南部和南极领地")]
+ [ResourceDescription(nameof(Ln.法属南部和南极领地))]
+ TF = 260
+
+ ,
+
+ ///
+ /// 马约特
+ ///
+ [Country(CallingCode = 262, CallingSubCode = "269,639", Alpha3 = "MYT", ShortName = "Mayotte", LongName = "The Department of Mayotte"
+ , CurrencyCode = "EUR", Languages = "fr", UnofficialNames = "Mayotte|マヨット|马约特")]
+ [ResourceDescription(nameof(Ln.马约特))]
+ YT = 175
+
+ ,
+
+ ///
+ /// 津巴布韦
+ ///
+ [Country(CallingCode = 263, Alpha3 = "ZWE", ShortName = "Zimbabwe", LongName = "The Republic of Zimbabwe", CurrencyCode = "USD"
+ , Languages = "en|sn|nd", UnofficialNames = "Zimbabwe|Simbabwe|Zimbabue|ジンバブエ|津巴布韦")]
+ [ResourceDescription(nameof(Ln.津巴布韦))]
+ ZW = 716
+
+ ,
+
+ ///
+ /// 纳米比亚
+ ///
+ [Country(CallingCode = 264, Alpha3 = "NAM", ShortName = "Namibia", LongName = "The Republic of Namibia", CurrencyCode = "NAD", Languages = "en|af"
+ , UnofficialNames = "Namibia|Namibie|ナミビア|Namibië|纳米比亚")]
+ [ResourceDescription(nameof(Ln.纳米比亚))]
+ NA = 516
+
+ ,
+
+ ///
+ /// 马拉维
+ ///
+ [Country(CallingCode = 265, Alpha3 = "MWI", ShortName = "Malawi", LongName = "The Republic of Malawi", CurrencyCode = "MWK", Languages = "en|ny"
+ , UnofficialNames = "Malawi|マラウイ|马拉维")]
+ [ResourceDescription(nameof(Ln.马拉维))]
+ MW = 454
+
+ ,
+
+ ///
+ /// 莱索托
+ ///
+ [Country(CallingCode = 266, Alpha3 = "LSO", ShortName = "Lesotho", LongName = "The Kingdom of Lesotho", CurrencyCode = "LSL", Languages = "en|st"
+ , UnofficialNames = "Lesotho|レソト|莱索托")]
+ [ResourceDescription(nameof(Ln.莱索托))]
+ LS = 426
+
+ ,
+
+ ///
+ /// 博茨瓦纳
+ ///
+ [Country(CallingCode = 267, Alpha3 = "BWA", ShortName = "Botswana", LongName = "The Republic of Botswana", CurrencyCode = "BWP"
+ , Languages = "en|tn", UnofficialNames = "Botswana|ボツワナ|博茨瓦纳")]
+ [ResourceDescription(nameof(Ln.博茨瓦纳))]
+ BW = 072
+
+ ,
+
+ ///
+ /// 斯威士兰
+ ///
+ [Country(CallingCode = 268, Alpha3 = "SWZ", ShortName = "Eswatini", LongName = "The Kingdom of Eswatini", CurrencyCode = "SZL"
+ , Languages = "en|ss", UnofficialNames = "Swaziland|Swasiland|Suazilandia|スワジランド|斯威士兰")]
+ [ResourceDescription(nameof(Ln.斯威士兰))]
+ SZ = 748
+
+ ,
+
+ ///
+ /// 科摩罗
+ ///
+ [Country(CallingCode = 269, Alpha3 = "COM", ShortName = "Comoros", LongName = "The Union of the Comoros", CurrencyCode = "KMF"
+ , Languages = "ar|fr", UnofficialNames = "Comoros|Union der Komoren|Comores|コモロ|Comoren|科摩罗")]
+ [ResourceDescription(nameof(Ln.科摩罗))]
+ KM = 174
+
+ ,
+
+ ///
+ /// 圣赫勒拿
+ ///
+ [Country(CallingCode = 290, Alpha3 = "SHN", ShortName = "Saint Helena, Ascension and Tristan da Cunha"
+ , LongName = "Saint Helena, Ascension and Tristan da Cunha", CurrencyCode = "SHP", Languages = "en"
+ , UnofficialNames
+ = "Saint Helena|Sankt Helena|Sainte Hélène|Santa Helena|セントヘレナ・アセンションおよびトリスタンダクーニャ|Sint-Helena|Saint Helena, Ascension and Tristan da Cunha|圣赫勒拿")]
+ [ResourceDescription(nameof(Ln.圣赫勒拿))]
+ SH = 654
+
+ ,
+
+ ///
+ /// 厄立特里亚
+ ///
+ [Country(CallingCode = 291, Alpha3 = "ERI", ShortName = "Eritrea", LongName = "The State of Eritrea", CurrencyCode = "ETB", Languages = "en|ar|ti"
+ , UnofficialNames = "Eritrea|إريتريا|Érythrée|エリトリア|厄立特里亚")]
+ [ResourceDescription(nameof(Ln.厄立特里亚))]
+ ER = 232
+
+ ,
+
+ ///
+ /// 阿鲁巴
+ ///
+ [Country(CallingCode = 297, Alpha3 = "ABW", ShortName = "Aruba", LongName = "Aruba", CurrencyCode = "AWG", Languages = "nl"
+ , UnofficialNames = "Aruba|アルバ|阿鲁巴")]
+ [ResourceDescription(nameof(Ln.阿鲁巴))]
+ AW = 533
+
+ ,
+
+ ///
+ /// 法罗群岛
+ ///
+ [Country(CallingCode = 298, Alpha3 = "FRO", ShortName = "Faroe Islands", LongName = "The Faroe Islands", CurrencyCode = "DKK", Languages = "fo"
+ , UnofficialNames = "Faroe Islands|Färöer-Inseln|Îles Féroé|Islas Faroe|フェロー諸島|Faeröer|法罗群岛")]
+ [ResourceDescription(nameof(Ln.法罗群岛))]
+ FO = 234
+
+ ,
+
+ ///
+ /// 格陵兰
+ ///
+ [Country(CallingCode = 299, Alpha3 = "GRL", ShortName = "Greenland", LongName = "Kalaallit Nunaat", CurrencyCode = "DKK", Languages = "kl"
+ , UnofficialNames = "Greenland|Grönland|Groenland|Groenlandia|グリーンランド|格陵兰")]
+ [ResourceDescription(nameof(Ln.格陵兰))]
+ GL = 304
+
+ ,
+
+ ///
+ /// 直布罗陀
+ ///
+ [Country(CallingCode = 350, Alpha3 = "GIB", ShortName = "Gibraltar", LongName = "Gibraltar", CurrencyCode = "GIP", Languages = "en"
+ , UnofficialNames = "Gibraltar|ジブラルタル|直布罗陀")]
+ [ResourceDescription(nameof(Ln.直布罗陀))]
+ GI = 292
+
+ ,
+
+ ///
+ /// 葡萄牙
+ ///
+ [Country(CallingCode = 351, Alpha3 = "PRT", ShortName = "Portugal", LongName = "The Portuguese Republic", CurrencyCode = "EUR", Languages = "pt"
+ , UnofficialNames = "Portugal|ポルトガル|葡萄牙")]
+ [ResourceDescription(nameof(Ln.葡萄牙))]
+ PT = 620
+
+ ,
+
+ ///
+ /// 卢森堡
+ ///
+ [Country(CallingCode = 352, Alpha3 = "LUX", ShortName = "Luxembourg", LongName = "The Grand Duchy of Luxembourg", CurrencyCode = "EUR"
+ , Languages = "fr|de|lb", UnofficialNames = "Luxembourg|Luxemburg|Luxemburgo|ルクセンブルク|卢森堡")]
+ [ResourceDescription(nameof(Ln.卢森堡))]
+ LU = 442
+
+ ,
+
+ ///
+ /// 爱尔兰
+ ///
+ [Country(CallingCode = 353, Alpha3 = "IRL", ShortName = "Ireland", LongName = "Ireland", CurrencyCode = "EUR", Languages = "en|ga"
+ , UnofficialNames = "Ireland|Irland|Irlande|Irlanda|アイルランド|Ierland|爱尔兰")]
+ [ResourceDescription(nameof(Ln.爱尔兰))]
+ IE = 372
+
+ ,
+
+ ///
+ /// 冰岛
+ ///
+ [Country(CallingCode = 354, Alpha3 = "ISL", ShortName = "Iceland", LongName = "Iceland", CurrencyCode = "ISK", Languages = "is"
+ , UnofficialNames = "Iceland|Island|Islande|Islandia|アイスランド|IJsland|冰岛")]
+ [ResourceDescription(nameof(Ln.冰岛))]
+ IS = 352
+
+ ,
+
+ ///
+ /// 阿尔巴尼亚
+ ///
+ [Country(CallingCode = 355, Alpha3 = "ALB", ShortName = "Albania", LongName = "The Republic of Albania", CurrencyCode = "ALL", Languages = "sq"
+ , UnofficialNames = "Albania|Albanien|Albanie|アルバニア|Albanië|阿尔巴尼亚")]
+ [ResourceDescription(nameof(Ln.阿尔巴尼亚))]
+ AL = 008
+
+ ,
+
+ ///
+ /// 马耳他
+ ///
+ [Country(CallingCode = 356, Alpha3 = "MLT", ShortName = "Malta", LongName = "The Republic of Malta", CurrencyCode = "EUR", Languages = "mt|en"
+ , UnofficialNames = "Malta|Malte|マルタ|马耳他")]
+ [ResourceDescription(nameof(Ln.马耳他))]
+ MT = 470
+
+ ,
+
+ ///
+ /// 塞浦路斯
+ ///
+ [Country(CallingCode = 357, Alpha3 = "CYP", ShortName = "Cyprus", LongName = "The Republic of Cyprus", CurrencyCode = "EUR"
+ , Languages = "el|tr|hy", UnofficialNames = "Cyprus|Zypern|Chypre|Chipre|キプロス|塞浦路斯")]
+ [ResourceDescription(nameof(Ln.塞浦路斯))]
+ CY = 196
+
+ ,
+
+ ///
+ /// 奥兰
+ ///
+ [Country(CallingCode = 358, CallingSubCode = "18", Alpha3 = "ALA", ShortName = "Åland Islands", LongName = "Åland", CurrencyCode = "EUR"
+ , Languages = "sv", UnofficialNames = "Åland Islands|Åland|オーランド諸島|Ålandeilanden|奥兰")]
+ [ResourceDescription(nameof(Ln.奥兰))]
+ AX = 248
+
+ ,
+
+ ///
+ /// 芬兰
+ ///
+ [Country(CallingCode = 358, Alpha3 = "FIN", ShortName = "Finland", LongName = "The Republic of Finland", CurrencyCode = "EUR", Languages = "fi|sv"
+ , UnofficialNames = "Finland|Finnland|Finlande|Finlandia|フィンランド|芬兰", IsPreferred = true)]
+ [ResourceDescription(nameof(Ln.芬兰))]
+ FI = 246
+
+ ,
+
+ ///
+ /// 保加利亚
+ ///
+ [Country(CallingCode = 359, Alpha3 = "BGR", ShortName = "Bulgaria", LongName = "The Republic of Bulgaria", CurrencyCode = "BGN", Languages = "bg"
+ , UnofficialNames = "Bulgaria|България|Bulgarien|Bulgarie|ブルガリア|Bulgarije|保加利亚")]
+ [ResourceDescription(nameof(Ln.保加利亚))]
+ BG = 100
+
+ ,
+
+ ///
+ /// 立陶宛
+ ///
+ [Country(CallingCode = 370, Alpha3 = "LTU", ShortName = "Lithuania", LongName = "The Republic of Lithuania", CurrencyCode = "EUR"
+ , Languages = "lt", UnofficialNames = "Lithuania|Litauen|Lituanie|Lituania|リトアニア|Litouwen|Літва|Lietuva|立陶宛")]
+ [ResourceDescription(nameof(Ln.立陶宛))]
+ LT = 440
+
+ ,
+
+ ///
+ /// 拉脱维亚
+ ///
+ [Country(CallingCode = 371, Alpha3 = "LVA", ShortName = "Latvia", LongName = "The Republic of Latvia", CurrencyCode = "EUR", Languages = "lv"
+ , UnofficialNames = "Latvia|Lettland|Lettonie|Letonia|ラトビア|Letland|拉脱维亚")]
+ [ResourceDescription(nameof(Ln.拉脱维亚))]
+ LV = 428
+
+ ,
+
+ ///
+ /// 爱沙尼亚
+ ///
+ [Country(CallingCode = 372, Alpha3 = "EST", ShortName = "Estonia", LongName = "The Republic of Estonia", CurrencyCode = "EUR", Languages = "et"
+ , UnofficialNames = "Estonia|Estland|Estonie|エストニア|爱沙尼亚")]
+ [ResourceDescription(nameof(Ln.爱沙尼亚))]
+ EE = 233
+
+ ,
+
+ ///
+ /// 摩尔多瓦
+ ///
+ [Country(CallingCode = 373, Alpha3 = "MDA", ShortName = "Moldova (Republic of)", LongName = "The Republic of Moldova", CurrencyCode = "MDL"
+ , Languages = "ro", UnofficialNames = "Moldova|Moldawien|Moldavie|Moldavia|the Republic of Moldova|モルドバ共和国|Moldavië|摩尔多瓦")]
+ [ResourceDescription(nameof(Ln.摩尔多瓦))]
+ MD = 498
+
+ ,
+
+ ///
+ /// 亚美尼亚
+ ///
+ [Country(CallingCode = 374, Alpha3 = "ARM", ShortName = "Armenia", LongName = "The Republic of Armenia", CurrencyCode = "AMD", Languages = "hy|ru"
+ , UnofficialNames = "Armenia|Armenien|Arménie|アルメニア|Armenië|亚美尼亚")]
+ [ResourceDescription(nameof(Ln.亚美尼亚))]
+ AM = 051
+
+ ,
+
+ ///
+ /// 白俄罗斯
+ ///
+ [Country(CallingCode = 375, Alpha3 = "BLR", ShortName = "Belarus", LongName = "The Republic of Belarus", CurrencyCode = "BYN", Languages = "be|ru"
+ , UnofficialNames = "Belarus|Weißrussland|Biélorussie|Bielorrusia|ベラルーシ|Wit-Rusland|Беларусь|白俄罗斯")]
+ [ResourceDescription(nameof(Ln.白俄罗斯))]
+ BY = 112
+
+ ,
+
+ ///
+ /// 安道尔
+ ///
+ [Country(CallingCode = 376, Alpha3 = "AND", ShortName = "Andorra", LongName = "The Principality of Andorra", CurrencyCode = "EUR"
+ , Languages = "ca", UnofficialNames = "Andorre|Andorra|アンドラ|安道尔")]
+ [ResourceDescription(nameof(Ln.安道尔))]
+ AD = 020
+
+ ,
+
+ ///
+ /// 摩纳哥
+ ///
+ [Country(CallingCode = 377, Alpha3 = "MCO", ShortName = "Monaco", LongName = "The Principality of Monaco", CurrencyCode = "EUR", Languages = "fr"
+ , UnofficialNames = "Monaco|Mónaco|モナコ|摩纳哥")]
+ [ResourceDescription(nameof(Ln.摩纳哥))]
+ MC = 492
+
+ ,
+
+ ///
+ /// 圣马力诺
+ ///
+ [Country(CallingCode = 378, Alpha3 = "SMR", ShortName = "San Marino", LongName = "The Republic of San Marino", CurrencyCode = "EUR"
+ , Languages = "it", UnofficialNames = "San Marino|Saint-Marin|サンマリノ|圣马力诺")]
+ [ResourceDescription(nameof(Ln.圣马力诺))]
+ SM = 674
+
+ ,
+
+ ///
+ /// 梵蒂冈
+ ///
+ [Country(CallingCode = 39, CallingSubCode = "06698", Alpha3 = "VAT", ShortName = "Holy See", LongName = "The Holy See", CurrencyCode = "EUR"
+ , Languages = "it|la"
+ , UnofficialNames = "Vatican City|Vatikan|Cité du Vatican|Ciudad del Vaticano|バチカン市国|Vaticaanstad|Vatican City State (Holy See)|梵蒂冈")]
+ [ResourceDescription(nameof(Ln.梵蒂冈))]
+ VA = 336
+
+ ,
+
+ ///
+ /// 乌克兰
+ ///
+ [Country(CallingCode = 380, Alpha3 = "UKR", ShortName = "Ukraine", LongName = "Ukraine", CurrencyCode = "UAH", Languages = "uk"
+ , UnofficialNames = "Ukraine|Ucrania|ウクライナ|Oekraïne|Украина|Україна|Украіна|乌克兰")]
+ [ResourceDescription(nameof(Ln.乌克兰))]
+ UA = 804
+
+ ,
+
+ ///
+ /// 塞尔维亚
+ ///
+ [Country(CallingCode = 381, Alpha3 = "SRB", ShortName = "Serbia", LongName = "The Republic of Serbia", CurrencyCode = "RSD", Languages = "sr"
+ , UnofficialNames = "Serbia|Serbien|Serbie|セルビア|Servië|塞尔维亚")]
+ [ResourceDescription(nameof(Ln.塞尔维亚))]
+ RS = 688
+
+ ,
+
+ ///
+ /// 黑山
+ ///
+ [Country(CallingCode = 382, Alpha3 = "MNE", ShortName = "Montenegro", LongName = "Montenegro", CurrencyCode = "EUR", Languages = "sr|bs|sq|hr"
+ , UnofficialNames = "Crna Gora|Montenegro|モンテネグロ|黑山")]
+ [ResourceDescription(nameof(Ln.黑山))]
+ ME = 499
+
+ ,
+
+ ///
+ /// 克罗地亚
+ ///
+ [Country(CallingCode = 385, Alpha3 = "HRV", ShortName = "Croatia", LongName = "The Republic of Croatia", CurrencyCode = "EUR", Languages = "hr"
+ , UnofficialNames = "Croatia|Kroatien|Croatie|Croacia|クロアチア|Kroatië|Croatia (Hrvatska)|克罗地亚")]
+ [ResourceDescription(nameof(Ln.克罗地亚))]
+ HR = 191
+
+ ,
+
+ ///
+ /// 斯洛文尼亚
+ ///
+ [Country(CallingCode = 386, Alpha3 = "SVN", ShortName = "Slovenia", LongName = "The Republic of Slovenia", CurrencyCode = "EUR", Languages = "sl"
+ , UnofficialNames = "Slovenia|Slowenien|Slovénie|Eslovenia|スロベニア|Slovenië|斯洛文尼亚")]
+ [ResourceDescription(nameof(Ln.斯洛文尼亚))]
+ SI = 705
+
+ ,
+
+ ///
+ /// 波黑
+ ///
+ [Country(CallingCode = 387, Alpha3 = "BIH", ShortName = "Bosnia and Herzegovina", LongName = "Bosnia and Herzegovina", CurrencyCode = "BAM"
+ , Languages = "bs|hr|sr"
+ , UnofficialNames
+ = "Bosnia and Herzegovina|Bosnien und Herzegowina|Bosnie et Herzégovine|Bosnia y Herzegovina|ボスニア・ヘルツェゴビナ|Bosnië en Herzegovina|Bosnia Herzegovina|波黑")]
+ [ResourceDescription(nameof(Ln.波黑))]
+ BA = 070
+
+ ,
+
+ ///
+ /// 北马其顿
+ ///
+ [Country(CallingCode = 389, Alpha3 = "MKD", ShortName = "North Macedonia", LongName = "The Republic of North Macedonia", CurrencyCode = "MKD"
+ , Languages = "mk"
+ , UnofficialNames
+ = "Macedonia|Mazedonien|Macédoine|F.Y.R.O.M (Macedonia)|マケドニア旧ユーゴスラビア共和国|Macedonië [FYROM]|Macedonia (The Former Yugoslav Republic of)|North Macedonia|Macedonia (FYROM)|北马其顿")]
+ [ResourceDescription(nameof(Ln.北马其顿))]
+ MK = 807
+
+ ,
+
+ ///
+ /// 捷克
+ ///
+ [Country(CallingCode = 420, Alpha3 = "CZE", ShortName = "Czechia", LongName = "The Czech Republic", CurrencyCode = "CZK", Languages = "cs"
+ , UnofficialNames = "Czech Republic|Tschechische Republik|République Tchèque|República Checa|チェコ|Tsjechië|Czechia|Česká republika|捷克")]
+ [ResourceDescription(nameof(Ln.捷克))]
+ CZ = 203
+
+ ,
+
+ ///
+ /// 斯洛伐克
+ ///
+ [Country(CallingCode = 421, Alpha3 = "SVK", ShortName = "Slovakia", LongName = "The Slovak Republic", CurrencyCode = "EUR", Languages = "sk"
+ , UnofficialNames = "Slovakia|Slowakei|Slovaquie|República Eslovaca|スロバキア|Slowakije|斯洛伐克")]
+ [ResourceDescription(nameof(Ln.斯洛伐克))]
+ SK = 703
+
+ ,
+
+ ///
+ /// 列支敦士登
+ ///
+ [Country(CallingCode = 423, Alpha3 = "LIE", ShortName = "Liechtenstein", LongName = "The Principality of Liechtenstein", CurrencyCode = "CHF"
+ , Languages = "de", UnofficialNames = "Liechtenstein|リヒテンシュタイン|列支敦士登")]
+ [ResourceDescription(nameof(Ln.列支敦士登))]
+ LI = 438
+
+ ,
+
+ ///
+ /// 福克兰群岛
+ ///
+ [Country(CallingCode = 500, Alpha3 = "FLK", ShortName = "Falkland Islands (Malvinas)", LongName = "The Falkland Islands", CurrencyCode = "FKP"
+ , Languages = "en"
+ , UnofficialNames
+ = "Falkland Islands|Falklandinseln|Îles Malouines|Islas Malvinas|フォークランド(マルビナス)諸島|Falklandeilanden [Islas Malvinas]|福克兰群岛"
+ , IsPreferred = true)]
+ [ResourceDescription(nameof(Ln.福克兰群岛))]
+ FK = 238
+
+ ,
+
+ ///
+ /// 南乔治亚和南桑威奇群岛
+ ///
+ [Country(CallingCode = 500, Alpha3 = "SGS", ShortName = "South Georgia and the South Sandwich Islands"
+ , LongName = "South Georgia and the South Sandwich Islands", CurrencyCode = "GBP", Languages = "en"
+ , UnofficialNames
+ = "South Georgia|South Georgia and the South Sandwich Islands|Südgeorgien und die Südlichen Sandwichinseln|サウスジョージア・サウスサンドウィッチ諸島|Zuid-Georgia en Zuidelijke Sandwicheilanden|南乔治亚和南桑威奇群岛")]
+ [ResourceDescription(nameof(Ln.南乔治亚和南桑威奇群岛))]
+ GS = 239
+
+ ,
+
+ ///
+ /// 伯利兹
+ ///
+ [Country(CallingCode = 501, Alpha3 = "BLZ", ShortName = "Belize", LongName = "Belize", CurrencyCode = "BZD", Languages = "en|es"
+ , UnofficialNames = "Belize|Belice|ベリーズ|伯利兹")]
+ [ResourceDescription(nameof(Ln.伯利兹))]
+ BZ = 084
+
+ ,
+
+ ///
+ /// 危地马拉
+ ///
+ [Country(CallingCode = 502, Alpha3 = "GTM", ShortName = "Guatemala", LongName = "The Republic of Guatemala", CurrencyCode = "GTQ"
+ , Languages = "es", UnofficialNames = "Guatemala|グアテマラ|危地马拉")]
+ [ResourceDescription(nameof(Ln.危地马拉))]
+ GT = 320
+
+ ,
+
+ ///
+ /// 萨尔瓦多
+ ///
+ [Country(CallingCode = 503, Alpha3 = "SLV", ShortName = "El Salvador", LongName = "The Republic of El Salvador", CurrencyCode = "USD"
+ , Languages = "es", UnofficialNames = "El Salvador|Salvador|エルサルバドル|萨尔瓦多")]
+ [ResourceDescription(nameof(Ln.萨尔瓦多))]
+ SV = 222
+
+ ,
+
+ ///
+ /// 洪都拉斯
+ ///
+ [Country(CallingCode = 504, Alpha3 = "HND", ShortName = "Honduras", LongName = "The Republic of Honduras", CurrencyCode = "HNL", Languages = "es"
+ , UnofficialNames = "Honduras|ホンジュラス|洪都拉斯")]
+ [ResourceDescription(nameof(Ln.洪都拉斯))]
+ HN = 340
+
+ ,
+
+ ///
+ /// 尼加拉瓜
+ ///
+ [Country(CallingCode = 505, Alpha3 = "NIC", ShortName = "Nicaragua", LongName = "The Republic of Nicaragua", CurrencyCode = "NIO"
+ , Languages = "es", UnofficialNames = "Nicaragua|ニカラグア|尼加拉瓜")]
+ [ResourceDescription(nameof(Ln.尼加拉瓜))]
+ NI = 558
+
+ ,
+
+ ///
+ /// 哥斯达黎加
+ ///
+ [Country(CallingCode = 506, Alpha3 = "CRI", ShortName = "Costa Rica", LongName = "The Republic of Costa Rica", CurrencyCode = "CRC"
+ , Languages = "es", UnofficialNames = "Costa Rica|コスタリカ|哥斯达黎加")]
+ [ResourceDescription(nameof(Ln.哥斯达黎加))]
+ CR = 188
+
+ ,
+
+ ///
+ /// 巴拿马
+ ///
+ [Country(CallingCode = 507, Alpha3 = "PAN", ShortName = "Panama", LongName = "The Republic of Panamá", CurrencyCode = "PAB", Languages = "es"
+ , UnofficialNames = "Panama|Panamá|パナマ|巴拿马")]
+ [ResourceDescription(nameof(Ln.巴拿马))]
+ PA = 591
+
+ ,
+
+ ///
+ /// 圣皮埃尔和密克隆
+ ///
+ [Country(CallingCode = 508, Alpha3 = "SPM", ShortName = "Saint Pierre and Miquelon"
+ , LongName = "The Overseas Collectivity of Saint-Pierre and Miquelon", CurrencyCode = "EUR", Languages = "fr"
+ , UnofficialNames
+ = "Saint Pierre and Miquelon|Saint-Pierre und Miquelon|Saint-Pierre-et-Miquelon|San Pedro y Miquelón|サンピエール島・ミクロン島|Saint Pierre en Miquelon|圣皮埃尔和密克隆")]
+ [ResourceDescription(nameof(Ln.圣皮埃尔和密克隆))]
+ PM = 666
+
+ ,
+
+ ///
+ /// 海地
+ ///
+ [Country(CallingCode = 509, Alpha3 = "HTI", ShortName = "Haiti", LongName = "The Republic of Haiti", CurrencyCode = "HTG", Languages = "fr|ht"
+ , UnofficialNames = "Haiti|ハイチ|Haïti|海地")]
+ [ResourceDescription(nameof(Ln.海地))]
+ HT = 332
+
+ ,
+
+ ///
+ /// 圣巴泰勒米
+ ///
+ [Country(CallingCode = 590, Alpha3 = "BLM", ShortName = "Saint Barthélemy", LongName = "The Collectivity of Saint-Barthélemy"
+ , CurrencyCode = "EUR", Languages = "fr", UnofficialNames = "Saint Barthélemy|Saint-Barthélemy|サン・バルテルミー|圣巴泰勒米")]
+ [ResourceDescription(nameof(Ln.圣巴泰勒米))]
+ BL = 652
+
+ ,
+
+ ///
+ /// 瓜德罗普
+ ///
+ [Country(CallingCode = 590, Alpha3 = "GLP", ShortName = "Guadeloupe", LongName = "Guadeloupe", CurrencyCode = "EUR", Languages = "fr"
+ , UnofficialNames = "Guadeloupe|Guadalupe|グアドループ|瓜德罗普", IsPreferred = true)]
+ [ResourceDescription(nameof(Ln.瓜德罗普))]
+ GP = 312
+
+ ,
+
+ ///
+ /// 法属圣马丁
+ ///
+ [Country(CallingCode = 590, Alpha3 = "MAF", ShortName = "Saint Martin (French part)", LongName = "The Collectivity of Saint-Martin"
+ , CurrencyCode = "EUR", Languages = "en|fr|nl", UnofficialNames = "Saint Martin|サン・マルタン(フランス領)|Saint-Martin|法属圣马丁")]
+ [ResourceDescription(nameof(Ln.法属圣马丁))]
+ MF = 663
+
+ ,
+
+ ///
+ /// 玻利维亚
+ ///
+ [Country(CallingCode = 591, Alpha3 = "BOL", ShortName = "Bolivia (Plurinational State of)", LongName = "The Plurinational State of Bolivia"
+ , CurrencyCode = "BOB", Languages = "es|ay|qu", UnofficialNames = "Bolivia|Bolivien|Bolivie|ボリビア多民族国|玻利维亚")]
+ [ResourceDescription(nameof(Ln.玻利维亚))]
+ BO = 068
+
+ ,
+
+ ///
+ /// 圭亚那
+ ///
+ [Country(CallingCode = 592, Alpha3 = "GUY", ShortName = "Guyana", LongName = "The Co-operative Republic of Guyana", CurrencyCode = "GYD"
+ , Languages = "en", UnofficialNames = "Guyana|ガイアナ|圭亚那")]
+ [ResourceDescription(nameof(Ln.圭亚那))]
+ GY = 328
+
+ ,
+
+ ///
+ /// 厄瓜多尔
+ ///
+ [Country(CallingCode = 593, Alpha3 = "ECU", ShortName = "Ecuador", LongName = "The Republic of Ecuador", CurrencyCode = "USD", Languages = "es"
+ , UnofficialNames = "Ecuador|Équateur|エクアドル|厄瓜多尔")]
+ [ResourceDescription(nameof(Ln.厄瓜多尔))]
+ EC = 218
+
+ ,
+
+ ///
+ /// 法属圭亚那
+ ///
+ [Country(CallingCode = 594, Alpha3 = "GUF", ShortName = "French Guiana", LongName = "Guyane", CurrencyCode = "EUR", Languages = "fr"
+ , UnofficialNames = "French Guiana|Französisch Guyana|Guayana Francesa|フランス領ギアナ|Frans-Guyana|法属圭亚那")]
+ [ResourceDescription(nameof(Ln.法属圭亚那))]
+ GF = 254
+
+ ,
+
+ ///
+ /// 巴拉圭
+ ///
+ [Country(CallingCode = 595, Alpha3 = "PRY", ShortName = "Paraguay", LongName = "The Republic of Paraguay", CurrencyCode = "PYG"
+ , Languages = "es|gn", UnofficialNames = "Paraguay|パラグアイ|巴拉圭")]
+ [ResourceDescription(nameof(Ln.巴拉圭))]
+ PY = 600
+
+ ,
+
+ ///
+ /// 马提尼克
+ ///
+ [Country(CallingCode = 596, Alpha3 = "MTQ", ShortName = "Martinique", LongName = "Martinique", CurrencyCode = "EUR", Languages = "fr"
+ , UnofficialNames = "Martinique|Martinica|マルティニーク|马提尼克")]
+ [ResourceDescription(nameof(Ln.马提尼克))]
+ MQ = 474
+
+ ,
+
+ ///
+ /// 苏里南
+ ///
+ [Country(CallingCode = 597, Alpha3 = "SUR", ShortName = "Suriname", LongName = "The Republic of Suriname", CurrencyCode = "SRD", Languages = "nl"
+ , UnofficialNames = "Suriname|Surinam|スリナム|苏里南")]
+ [ResourceDescription(nameof(Ln.苏里南))]
+ SR = 740
+
+ ,
+
+ ///
+ /// 乌拉圭
+ ///
+ [Country(CallingCode = 598, Alpha3 = "URY", ShortName = "Uruguay", LongName = "The Oriental Republic of Uruguay", CurrencyCode = "UYU"
+ , Languages = "es", UnofficialNames = "Uruguay|ウルグアイ|乌拉圭")]
+ [ResourceDescription(nameof(Ln.乌拉圭))]
+ UY = 858
+
+ ,
+
+ ///
+ /// 库拉索
+ ///
+ [Country(CallingCode = 599, CallingSubCode = "9", Alpha3 = "CUW", ShortName = "Curaçao", LongName = "The Country of Curaçao", CurrencyCode = "ANG"
+ , Languages = "nl", UnofficialNames = "Curaçao|キュラソー島|库拉索")]
+ [ResourceDescription(nameof(Ln.库拉索))]
+ CW = 531
+
+ ,
+
+ ///
+ /// 荷兰加勒比区
+ ///
+ [Country(CallingCode = 599, Alpha3 = "BES", ShortName = "Bonaire, Sint Eustatius and Saba", LongName = "Bonaire, Sint Eustatius and Saba"
+ , CurrencyCode = "USD", Languages = "nl|en"
+ , UnofficialNames = "Bonaire, Sint Eustatius and Saba|Caribbean Netherlands|Caribisch Nederland|ボネール、シント・ユースタティウスおよびサバ|荷兰加勒比区"
+ , IsPreferred = true)]
+ [ResourceDescription(nameof(Ln.荷兰加勒比区))]
+ BQ = 535
+
+ ,
+
+ ///