diff --git a/apps/users/api/user.py b/apps/users/api/user.py index 9e217b837..e9b6b4443 100644 --- a/apps/users/api/user.py +++ b/apps/users/api/user.py @@ -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 diff --git a/apps/users/serializers/user.py b/apps/users/serializers/user.py index 0c3a7b7fc..8b01abb38 100644 --- a/apps/users/serializers/user.py +++ b/apps/users/serializers/user.py @@ -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) diff --git a/apps/users/urls.py b/apps/users/urls.py index a861ac66a..0c6a56468 100644 --- a/apps/users/urls.py +++ b/apps/users/urls.py @@ -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'), diff --git a/apps/users/views/user.py b/apps/users/views/user.py index a02395b1d..9ec436b45 100644 --- a/apps/users/views/user.py +++ b/apps/users/views/user.py @@ -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]