refactor: add switch language

This commit is contained in:
wxg0103 2025-06-12 11:24:55 +08:00
parent 39ab4e155b
commit e0d08ac590
4 changed files with 43 additions and 2 deletions

View File

@ -218,3 +218,13 @@ class SendEmailAPI(APIMixin):
@staticmethod
def get_response():
return DefaultResultSerializer
class LanguageSerializer(serializers.Serializer):
language = serializers.CharField(required=True, label=_('Language'))
class SwitchUserLanguageAPI(APIMixin):
@staticmethod
def get_request():
return LanguageSerializer

View File

@ -673,3 +673,16 @@ class CheckCodeSerializer(serializers.Serializer):
if value is None or value != self.data.get("code"):
raise ExceptionCodeConstants.CODE_ERROR.value.to_app_api_exception()
return True
class SwitchLanguageSerializer(serializers.Serializer):
user_id = serializers.UUIDField(required=True, label=_('user id'))
language = serializers.CharField(required=True, label=('language'))
def switch(self):
self.is_valid(raise_exception=True)
language = self.data.get('language')
support_language_list = ['zh-CN', 'zh-Hant', 'en-US']
if not support_language_list.__contains__(language):
raise AppApiException(500, _('language only support:') + ','.join(support_language_list))
QuerySet(User).filter(id=self.data.get('user_id')).update(language=language)

View File

@ -9,6 +9,7 @@ urlpatterns = [
path('user/captcha', views.CaptchaView.as_view(), name='captcha'),
path('user/test', views.TestPermissionsUserView.as_view(), name="test"),
path('user/logout', views.Logout.as_view(), name='logout'),
path('user/language', views.SwitchUserLanguageView.as_view(), name='language'),
path("user/send_email", views.SendEmail.as_view(), name='send_email'),
path("user/check_code", views.CheckCode.as_view(), name='check_code'),
path("user/re_password", views.RePasswordView.as_view(), name='re_password'),

View File

@ -24,10 +24,10 @@ from models_provider.api.model import DefaultModelResponse
from tools.serializers.tool import encryption
from users.api.user import UserProfileAPI, TestWorkspacePermissionUserApi, DeleteUserApi, EditUserApi, \
ChangeUserPasswordApi, UserPageApi, UserListApi, UserPasswordResponse, WorkspaceUserAPI, ResetPasswordAPI, \
SendEmailAPI, CheckCodeAPI
SendEmailAPI, CheckCodeAPI, SwitchUserLanguageAPI
from users.models import User
from users.serializers.user import UserProfileSerializer, UserManageSerializer, CheckCodeSerializer, \
SendEmailSerializer, RePasswordSerializer
SendEmailSerializer, RePasswordSerializer, SwitchLanguageSerializer
default_password = CONFIG.get('default_password', 'MaxKB@123..')
@ -81,6 +81,23 @@ class TestPermissionsUserView(APIView):
return result.success(UserProfileSerializer().profile(request.user, request.auth))
class SwitchUserLanguageView(APIView):
authentication_classes = [TokenAuth]
@extend_schema(methods=['POST'],
summary=_("Switch Language"),
description=_("Switch Language"),
operation_id=_("Switch Language"), # type: ignore
tags=[_("User Management")], # type: ignore
request=SwitchUserLanguageAPI.get_request(),
)
@log(menu='User management', operate='Switch Language',
get_operation_object=lambda r, k: {'name': r.user.username})
def post(self, request: Request):
data = {**request.data, 'user_id': request.user.id}
return result.success(SwitchLanguageSerializer(data=data).switch())
class TestWorkspacePermissionUserView(APIView):
authentication_classes = [TokenAuth]