Skip to content

Commit e0d08ac

Browse files
committed
refactor: add switch language
1 parent 39ab4e1 commit e0d08ac

File tree

4 files changed

+43
-2
lines changed

4 files changed

+43
-2
lines changed

apps/users/api/user.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,3 +218,13 @@ def get_request():
218218
@staticmethod
219219
def get_response():
220220
return DefaultResultSerializer
221+
222+
223+
class LanguageSerializer(serializers.Serializer):
224+
language = serializers.CharField(required=True, label=_('Language'))
225+
226+
227+
class SwitchUserLanguageAPI(APIMixin):
228+
@staticmethod
229+
def get_request():
230+
return LanguageSerializer

apps/users/serializers/user.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -673,3 +673,16 @@ def is_valid(self, *, raise_exception=False):
673673
if value is None or value != self.data.get("code"):
674674
raise ExceptionCodeConstants.CODE_ERROR.value.to_app_api_exception()
675675
return True
676+
677+
678+
class SwitchLanguageSerializer(serializers.Serializer):
679+
user_id = serializers.UUIDField(required=True, label=_('user id'))
680+
language = serializers.CharField(required=True, label=('language'))
681+
682+
def switch(self):
683+
self.is_valid(raise_exception=True)
684+
language = self.data.get('language')
685+
support_language_list = ['zh-CN', 'zh-Hant', 'en-US']
686+
if not support_language_list.__contains__(language):
687+
raise AppApiException(500, _('language only support:') + ','.join(support_language_list))
688+
QuerySet(User).filter(id=self.data.get('user_id')).update(language=language)

apps/users/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
path('user/captcha', views.CaptchaView.as_view(), name='captcha'),
1010
path('user/test', views.TestPermissionsUserView.as_view(), name="test"),
1111
path('user/logout', views.Logout.as_view(), name='logout'),
12+
path('user/language', views.SwitchUserLanguageView.as_view(), name='language'),
1213
path("user/send_email", views.SendEmail.as_view(), name='send_email'),
1314
path("user/check_code", views.CheckCode.as_view(), name='check_code'),
1415
path("user/re_password", views.RePasswordView.as_view(), name='re_password'),

apps/users/views/user.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@
2424
from tools.serializers.tool import encryption
2525
from users.api.user import UserProfileAPI, TestWorkspacePermissionUserApi, DeleteUserApi, EditUserApi, \
2626
ChangeUserPasswordApi, UserPageApi, UserListApi, UserPasswordResponse, WorkspaceUserAPI, ResetPasswordAPI, \
27-
SendEmailAPI, CheckCodeAPI
27+
SendEmailAPI, CheckCodeAPI, SwitchUserLanguageAPI
2828
from users.models import User
2929
from users.serializers.user import UserProfileSerializer, UserManageSerializer, CheckCodeSerializer, \
30-
SendEmailSerializer, RePasswordSerializer
30+
SendEmailSerializer, RePasswordSerializer, SwitchLanguageSerializer
3131

3232
default_password = CONFIG.get('default_password', 'MaxKB@123..')
3333

@@ -81,6 +81,23 @@ def get(self, request: Request):
8181
return result.success(UserProfileSerializer().profile(request.user, request.auth))
8282

8383

84+
class SwitchUserLanguageView(APIView):
85+
authentication_classes = [TokenAuth]
86+
87+
@extend_schema(methods=['POST'],
88+
summary=_("Switch Language"),
89+
description=_("Switch Language"),
90+
operation_id=_("Switch Language"), # type: ignore
91+
tags=[_("User Management")], # type: ignore
92+
request=SwitchUserLanguageAPI.get_request(),
93+
)
94+
@log(menu='User management', operate='Switch Language',
95+
get_operation_object=lambda r, k: {'name': r.user.username})
96+
def post(self, request: Request):
97+
data = {**request.data, 'user_id': request.user.id}
98+
return result.success(SwitchLanguageSerializer(data=data).switch())
99+
100+
84101
class TestWorkspacePermissionUserView(APIView):
85102
authentication_classes = [TokenAuth]
86103

0 commit comments

Comments
 (0)