Skip to content

Commit 9b811b6

Browse files
committed
feat: 添加多语言支持并统一消息管理
- 新增LangMiddleware中间件处理语言协商 - 添加messages.go统一管理双语消息 - 修改validator.go支持双语验证错误 - 更新所有控制器使用统一消息返回 - 在路由中启用语言中间件
1 parent 45841e5 commit 9b811b6

32 files changed

+555
-390
lines changed

gotribe-admin

41.8 MB
Binary file not shown.

internal/app/controller/ad_controller.go

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,16 @@
66
package controller
77

88
import (
9-
"github.com/gin-gonic/gin"
10-
"github.com/go-playground/validator/v10"
119
"gotribe-admin/internal/app/repository"
1210
"gotribe-admin/internal/pkg/common"
1311
"gotribe-admin/internal/pkg/model"
1412
"gotribe-admin/pkg/api/dto"
1513
"gotribe-admin/pkg/api/response"
1614
"gotribe-admin/pkg/api/vo"
1715
"strings"
16+
17+
"github.com/gin-gonic/gin"
18+
"github.com/go-playground/validator/v10"
1819
)
1920

2021
type IAdController interface {
@@ -40,13 +41,13 @@ func NewAdController() IAdController {
4041
func (pc AdController) GetAdInfo(c *gin.Context) {
4142
ad, err := pc.AdRepository.GetAdByAdID(c.Param("adID"))
4243
if err != nil {
43-
response.Fail(c, nil, "获取当前广告信息失败: "+err.Error())
44+
response.Fail(c, nil, common.Msg(c, common.MsgGetFail)+": "+err.Error())
4445
return
4546
}
4647
adInfoDto := dto.ToAdInfoDto(ad)
4748
response.Success(c, gin.H{
4849
"ad": adInfoDto,
49-
}, "获取当前广告信息成功")
50+
}, common.Msg(c, common.MsgGetSuccess))
5051
}
5152

5253
// 获取广告列表
@@ -59,18 +60,18 @@ func (pc AdController) GetAds(c *gin.Context) {
5960
}
6061
// 参数校验
6162
if err := common.Validate.Struct(&req); err != nil {
62-
errStr := err.(validator.ValidationErrors)[0].Translate(common.Trans)
63+
errStr := err.(validator.ValidationErrors)[0].Translate(common.GetTransFromCtx(c))
6364
response.Fail(c, nil, errStr)
6465
return
6566
}
6667

6768
// 获取
6869
ad, total, err := pc.AdRepository.GetAds(&req)
6970
if err != nil {
70-
response.Fail(c, nil, "获取广告列表失败: "+err.Error())
71+
response.Fail(c, nil, common.Msg(c, common.MsgListFail)+": "+err.Error())
7172
return
7273
}
73-
response.Success(c, gin.H{"ads": dto.ToAdsDto(ad), "total": total}, "获取广告列表成功")
74+
response.Success(c, gin.H{"ads": dto.ToAdsDto(ad), "total": total}, common.Msg(c, common.MsgListSuccess))
7475
}
7576

7677
// 创建广告
@@ -83,7 +84,7 @@ func (pc AdController) CreateAd(c *gin.Context) {
8384
}
8485
// 参数校验
8586
if err := common.Validate.Struct(&req); err != nil {
86-
errStr := err.(validator.ValidationErrors)[0].Translate(common.Trans)
87+
errStr := err.(validator.ValidationErrors)[0].Translate(common.GetTransFromCtx(c))
8788
response.Fail(c, nil, errStr)
8889
return
8990
}
@@ -103,10 +104,10 @@ func (pc AdController) CreateAd(c *gin.Context) {
103104

104105
err := pc.AdRepository.CreateAd(&ad)
105106
if err != nil {
106-
response.Fail(c, nil, "创建广告失败: "+err.Error())
107+
response.Fail(c, nil, common.Msg(c, common.MsgCreateFail)+": "+err.Error())
107108
return
108109
}
109-
response.Success(c, nil, "创建广告成功")
110+
response.Success(c, nil, common.Msg(c, common.MsgCreateSuccess))
110111

111112
}
112113

@@ -120,15 +121,15 @@ func (pc AdController) UpdateAdByID(c *gin.Context) {
120121
}
121122
// 参数校验
122123
if err := common.Validate.Struct(&req); err != nil {
123-
errStr := err.(validator.ValidationErrors)[0].Translate(common.Trans)
124+
errStr := err.(validator.ValidationErrors)[0].Translate(common.GetTransFromCtx(c))
124125
response.Fail(c, nil, errStr)
125126
return
126127
}
127128

128129
// 根据path中的AdID获取广告信息
129130
oldAd, err := pc.AdRepository.GetAdByAdID(c.Param("adID"))
130131
if err != nil {
131-
response.Fail(c, nil, "获取需要更新的广告信息失败: "+err.Error())
132+
response.Fail(c, nil, common.Msg(c, common.MsgGetFail)+": "+err.Error())
132133
return
133134
}
134135
oldAd.Title = req.Title
@@ -144,10 +145,10 @@ func (pc AdController) UpdateAdByID(c *gin.Context) {
144145
// 更新广告
145146
err = pc.AdRepository.UpdateAd(&oldAd)
146147
if err != nil {
147-
response.Fail(c, nil, "更新广告失败: "+err.Error())
148+
response.Fail(c, nil, common.Msg(c, common.MsgUpdateFail)+": "+err.Error())
148149
return
149150
}
150-
response.Success(c, nil, "更新广告成功")
151+
response.Success(c, nil, common.Msg(c, common.MsgUpdateSuccess))
151152
}
152153

153154
// 批量删除广告
@@ -160,7 +161,7 @@ func (pc AdController) BatchDeleteAdByIds(c *gin.Context) {
160161
}
161162
// 参数校验
162163
if err := common.Validate.Struct(&req); err != nil {
163-
errStr := err.(validator.ValidationErrors)[0].Translate(common.Trans)
164+
errStr := err.(validator.ValidationErrors)[0].Translate(common.GetTransFromCtx(c))
164165
response.Fail(c, nil, errStr)
165166
return
166167
}
@@ -169,10 +170,9 @@ func (pc AdController) BatchDeleteAdByIds(c *gin.Context) {
169170
reqAdIds := strings.Split(req.AdIds, ",")
170171
err := pc.AdRepository.BatchDeleteAdByIds(reqAdIds)
171172
if err != nil {
172-
response.Fail(c, nil, "删除广告失败: "+err.Error())
173+
response.Fail(c, nil, common.Msg(c, common.MsgDeleteFail)+": "+err.Error())
173174
return
174175
}
175-
176-
response.Success(c, nil, "删除广告成功")
176+
response.Success(c, nil, common.Msg(c, common.MsgDeleteSuccess))
177177

178178
}

internal/app/controller/ad_scene_controller.go

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,16 @@
66
package controller
77

88
import (
9-
"github.com/gin-gonic/gin"
10-
"github.com/go-playground/validator/v10"
119
"gotribe-admin/internal/app/repository"
1210
"gotribe-admin/internal/pkg/common"
1311
"gotribe-admin/internal/pkg/model"
1412
"gotribe-admin/pkg/api/dto"
1513
"gotribe-admin/pkg/api/response"
1614
"gotribe-admin/pkg/api/vo"
1715
"strings"
16+
17+
"github.com/gin-gonic/gin"
18+
"github.com/go-playground/validator/v10"
1819
)
1920

2021
type IAdSceneController interface {
@@ -40,13 +41,13 @@ func NewAdSceneController() IAdSceneController {
4041
func (pc AdSceneController) GetAdSceneInfo(c *gin.Context) {
4142
adScene, err := pc.AdSceneRepository.GetAdSceneByAdSceneID(c.Param("adSceneID"))
4243
if err != nil {
43-
response.Fail(c, nil, "获取当前推广场景信息失败: "+err.Error())
44+
response.Fail(c, nil, common.Msg(c, common.MsgGetFail)+": "+err.Error())
4445
return
4546
}
4647
adSceneInfoDto := dto.ToAdSceneInfoDto(adScene)
4748
response.Success(c, gin.H{
4849
"adScene": adSceneInfoDto,
49-
}, "获取当前推广场景信息成功")
50+
}, common.Msg(c, common.MsgGetSuccess))
5051
}
5152

5253
// 获取推广场景列表
@@ -59,18 +60,18 @@ func (pc AdSceneController) GetAdScenes(c *gin.Context) {
5960
}
6061
// 参数校验
6162
if err := common.Validate.Struct(&req); err != nil {
62-
errStr := err.(validator.ValidationErrors)[0].Translate(common.Trans)
63+
errStr := err.(validator.ValidationErrors)[0].Translate(common.GetTransFromCtx(c))
6364
response.Fail(c, nil, errStr)
6465
return
6566
}
6667

6768
// 获取
6869
adScene, total, err := pc.AdSceneRepository.GetAdScenes(&req)
6970
if err != nil {
70-
response.Fail(c, nil, "获取推广场景列表失败: "+err.Error())
71+
response.Fail(c, nil, common.Msg(c, common.MsgListFail)+": "+err.Error())
7172
return
7273
}
73-
response.Success(c, gin.H{"adScenes": dto.ToAdScenesDto(adScene), "total": total}, "获取推广场景列表成功")
74+
response.Success(c, gin.H{"adScenes": dto.ToAdScenesDto(adScene), "total": total}, common.Msg(c, common.MsgListSuccess))
7475
}
7576

7677
// 创建推广场景
@@ -83,7 +84,7 @@ func (pc AdSceneController) CreateAdScene(c *gin.Context) {
8384
}
8485
// 参数校验
8586
if err := common.Validate.Struct(&req); err != nil {
86-
errStr := err.(validator.ValidationErrors)[0].Translate(common.Trans)
87+
errStr := err.(validator.ValidationErrors)[0].Translate(common.GetTransFromCtx(c))
8788
response.Fail(c, nil, errStr)
8889
return
8990
}
@@ -96,10 +97,10 @@ func (pc AdSceneController) CreateAdScene(c *gin.Context) {
9697

9798
err := pc.AdSceneRepository.CreateAdScene(&adScene)
9899
if err != nil {
99-
response.Fail(c, nil, "创建推广场景失败: "+err.Error())
100+
response.Fail(c, nil, common.Msg(c, common.MsgCreateFail)+": "+err.Error())
100101
return
101102
}
102-
response.Success(c, nil, "创建推广场景成功")
103+
response.Success(c, nil, common.Msg(c, common.MsgCreateSuccess))
103104

104105
}
105106

@@ -113,26 +114,26 @@ func (pc AdSceneController) UpdateAdSceneByID(c *gin.Context) {
113114
}
114115
// 参数校验
115116
if err := common.Validate.Struct(&req); err != nil {
116-
errStr := err.(validator.ValidationErrors)[0].Translate(common.Trans)
117+
errStr := err.(validator.ValidationErrors)[0].Translate(common.GetTransFromCtx(c))
117118
response.Fail(c, nil, errStr)
118119
return
119120
}
120121

121122
// 根据path中的AdSceneID获取推广场景信息
122123
oldAdScene, err := pc.AdSceneRepository.GetAdSceneByAdSceneID(c.Param("adSceneID"))
123124
if err != nil {
124-
response.Fail(c, nil, "获取需要更新的推广场景信息失败: "+err.Error())
125+
response.Fail(c, nil, common.Msg(c, common.MsgGetFail)+": "+err.Error())
125126
return
126127
}
127128
oldAdScene.Title = req.Title
128129
oldAdScene.Description = req.Description
129130
// 更新推广场景
130131
err = pc.AdSceneRepository.UpdateAdScene(&oldAdScene)
131132
if err != nil {
132-
response.Fail(c, nil, "更新推广场景失败: "+err.Error())
133+
response.Fail(c, nil, common.Msg(c, common.MsgUpdateFail)+": "+err.Error())
133134
return
134135
}
135-
response.Success(c, nil, "更新推广场景成功")
136+
response.Success(c, nil, common.Msg(c, common.MsgUpdateSuccess))
136137
}
137138

138139
// 批量删除推广场景
@@ -145,7 +146,7 @@ func (pc AdSceneController) BatchDeleteAdSceneByIds(c *gin.Context) {
145146
}
146147
// 参数校验
147148
if err := common.Validate.Struct(&req); err != nil {
148-
errStr := err.(validator.ValidationErrors)[0].Translate(common.Trans)
149+
errStr := err.(validator.ValidationErrors)[0].Translate(common.GetTransFromCtx(c))
149150
response.Fail(c, nil, errStr)
150151
return
151152
}
@@ -154,10 +155,9 @@ func (pc AdSceneController) BatchDeleteAdSceneByIds(c *gin.Context) {
154155
reqAdSceneIds := strings.Split(req.AdSceneIds, ",")
155156
err := pc.AdSceneRepository.BatchDeleteAdSceneByIds(reqAdSceneIds)
156157
if err != nil {
157-
response.Fail(c, nil, "删除推广场景失败: "+err.Error())
158+
response.Fail(c, nil, common.Msg(c, common.MsgDeleteFail)+": "+err.Error())
158159
return
159160
}
160-
161-
response.Success(c, nil, "删除推广场景成功")
161+
response.Success(c, nil, common.Msg(c, common.MsgDeleteSuccess))
162162

163163
}

internal/app/controller/admin_controller.go

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,13 @@ func NewAdminController() IAdminController {
4545
func (uc AdminController) GetAdminInfo(c *gin.Context) {
4646
user, err := uc.AdminRepository.GetCurrentAdmin(c)
4747
if err != nil {
48-
response.Fail(c, nil, "获取当前用户信息失败: "+err.Error())
48+
response.Fail(c, nil, common.Msg(c, common.MsgGetFail)+": "+err.Error())
4949
return
5050
}
5151
userInfoDto := dto.ToAdminInfoDto(user)
5252
response.Success(c, gin.H{
5353
"admin": userInfoDto,
54-
}, "获取当前用户信息成功")
54+
}, common.Msg(c, common.MsgGetSuccess))
5555
}
5656

5757
// 获取用户列表
@@ -64,18 +64,18 @@ func (uc AdminController) GetAdmins(c *gin.Context) {
6464
}
6565
// 参数校验
6666
if err := common.Validate.Struct(&req); err != nil {
67-
errStr := err.(validator.ValidationErrors)[0].Translate(common.Trans)
67+
errStr := err.(validator.ValidationErrors)[0].Translate(common.GetTransFromCtx(c))
6868
response.Fail(c, nil, errStr)
6969
return
7070
}
7171

7272
// 获取
7373
users, total, err := uc.AdminRepository.GetAdmins(&req)
7474
if err != nil {
75-
response.Fail(c, nil, "获取管理员列表失败: "+err.Error())
75+
response.Fail(c, nil, common.Msg(c, common.MsgListFail)+": "+err.Error())
7676
return
7777
}
78-
response.Success(c, gin.H{"admins": dto.ToAdminsDto(users), "total": total}, "获取管理员列表成功")
78+
response.Success(c, gin.H{"admins": dto.ToAdminsDto(users), "total": total}, common.Msg(c, common.MsgListSuccess))
7979
}
8080

8181
// 更新用户登录密码
@@ -89,7 +89,7 @@ func (uc AdminController) ChangePwd(c *gin.Context) {
8989
}
9090
// 参数校验
9191
if err := common.Validate.Struct(&req); err != nil {
92-
errStr := err.(validator.ValidationErrors)[0].Translate(common.Trans)
92+
errStr := err.(validator.ValidationErrors)[0].Translate(common.GetTransFromCtx(c))
9393
response.Fail(c, nil, errStr)
9494
return
9595
}
@@ -118,10 +118,10 @@ func (uc AdminController) ChangePwd(c *gin.Context) {
118118
}
119119
err = uc.AdminRepository.ChangePwd(user.Username, hashedPassword)
120120
if err != nil {
121-
response.Fail(c, nil, "更新密码失败: "+err.Error())
121+
response.Fail(c, nil, common.Msg(c, common.MsgUpdateFail)+": "+err.Error())
122122
return
123123
}
124-
response.Success(c, nil, "更新密码成功")
124+
response.Success(c, nil, common.Msg(c, common.MsgUpdateSuccess))
125125
}
126126

127127
// 创建用户
@@ -134,7 +134,7 @@ func (uc AdminController) CreateAdmin(c *gin.Context) {
134134
}
135135
// 参数校验
136136
if err := common.Validate.Struct(&req); err != nil {
137-
errStr := err.(validator.ValidationErrors)[0].Translate(common.Trans)
137+
errStr := err.(validator.ValidationErrors)[0].Translate(common.GetTransFromCtx(c))
138138
response.Fail(c, nil, errStr)
139139
return
140140
}
@@ -203,10 +203,10 @@ func (uc AdminController) CreateAdmin(c *gin.Context) {
203203

204204
err = uc.AdminRepository.CreateAdmin(&user)
205205
if err != nil {
206-
response.Fail(c, nil, "创建用户失败: "+err.Error())
206+
response.Fail(c, nil, common.Msg(c, common.MsgCreateFail)+": "+err.Error())
207207
return
208208
}
209-
response.Success(c, nil, "创建用户成功")
209+
response.Success(c, nil, common.Msg(c, common.MsgCreateSuccess))
210210

211211
}
212212

@@ -220,7 +220,7 @@ func (uc AdminController) UpdateAdminByID(c *gin.Context) {
220220
}
221221
// 参数校验
222222
if err := common.Validate.Struct(&req); err != nil {
223-
errStr := err.(validator.ValidationErrors)[0].Translate(common.Trans)
223+
errStr := err.(validator.ValidationErrors)[0].Translate(common.GetTransFromCtx(c))
224224
response.Fail(c, nil, errStr)
225225
return
226226
}
@@ -235,7 +235,7 @@ func (uc AdminController) UpdateAdminByID(c *gin.Context) {
235235
// 根据path中的userID获取用户信息
236236
oldAdmin, err := uc.AdminRepository.GetAdminByID(uint(userID))
237237
if err != nil {
238-
response.Fail(c, nil, "获取需要更新的用户信息失败: "+err.Error())
238+
response.Fail(c, nil, common.Msg(c, common.MsgGetFail)+": "+err.Error())
239239
return
240240
}
241241

@@ -349,10 +349,10 @@ func (uc AdminController) UpdateAdminByID(c *gin.Context) {
349349
// 更新用户
350350
err = uc.AdminRepository.UpdateAdmin(&user)
351351
if err != nil {
352-
response.Fail(c, nil, "更新用户失败: "+err.Error())
352+
response.Fail(c, nil, common.Msg(c, common.MsgUpdateFail)+": "+err.Error())
353353
return
354354
}
355-
response.Success(c, nil, "更新用户成功")
355+
response.Success(c, nil, common.Msg(c, common.MsgUpdateSuccess))
356356

357357
}
358358

@@ -366,7 +366,7 @@ func (uc AdminController) BatchDeleteAdminByIds(c *gin.Context) {
366366
}
367367
// 参数校验
368368
if err := common.Validate.Struct(&req); err != nil {
369-
errStr := err.(validator.ValidationErrors)[0].Translate(common.Trans)
369+
errStr := err.(validator.ValidationErrors)[0].Translate(common.GetTransFromCtx(c))
370370
response.Fail(c, nil, errStr)
371371
return
372372
}
@@ -404,10 +404,9 @@ func (uc AdminController) BatchDeleteAdminByIds(c *gin.Context) {
404404

405405
err = uc.AdminRepository.BatchDeleteAdminByIds(reqAdminIds)
406406
if err != nil {
407-
response.Fail(c, nil, "删除用户失败: "+err.Error())
407+
response.Fail(c, nil, common.Msg(c, common.MsgDeleteFail)+": "+err.Error())
408408
return
409409
}
410-
411-
response.Success(c, nil, "删除用户成功")
410+
response.Success(c, nil, common.Msg(c, common.MsgDeleteSuccess))
412411

413412
}

0 commit comments

Comments
 (0)