Skip to content

Commit beaffef

Browse files
committed
Update the i18n locale file
1 parent 52ebecd commit beaffef

File tree

10 files changed

+496
-195
lines changed

10 files changed

+496
-195
lines changed

fastapi_user_auth/admin/actions.py

Lines changed: 42 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from fastapi_amis_admin.crud.schema import BaseApiOut
1111
from fastapi_amis_admin.models import Field
1212
from fastapi_amis_admin.utils.pydantic import ModelField
13+
from fastapi_amis_admin.utils.translation import i18n as _
1314
from pydantic import BaseModel
1415
from starlette.requests import Request
1516
from starlette.responses import RedirectResponse
@@ -39,7 +40,7 @@ def get_admin_select_permission_rows(admin: PageSchemaAdmin) -> List[Dict[str, A
3940
for perm in admin.select_permissions:
4041
rows.append(
4142
{
42-
"label": "Data only-" + perm.label, # 仅限数据
43+
"label": _("Data only") + "-" + perm.label, # 仅限数据
4344
"rol": f"{admin.unique_id}#page:select:{perm.name}#page:select",
4445
"reverse": perm.reverse,
4546
}
@@ -69,7 +70,7 @@ def get_admin_field_permission_rows(admin: PageSchemaAdmin, action: str) -> List
6970
return []
7071
rows.append(
7172
{
72-
"label": "All", # 全部
73+
"label": _("All"), # 全部
7374
"rol": f"{admin.unique_id}#page:{action}:*#page:{action}",
7475
}
7576
)
@@ -93,7 +94,7 @@ def __init__(self, admin, **kwargs):
9394
elif self.admin.model.__table__.name == User.__tablename__:
9495
self._subject = "u"
9596
else:
96-
raise Exception("Main model not supported yet") # 暂不支持的主体模型
97+
raise Exception(_("Subject model not supported yet")) # 暂不支持的主体模型
9798

9899
async def get_subject_by_id(self, item_id: str) -> str:
99100
# 从数据库获取用户选择的数据列表
@@ -117,23 +118,23 @@ class UpdateSubRolesAction(BaseSubAction):
117118
action = ActionType.Dialog(
118119
name="update_subject_roles",
119120
icon="fa fa-check",
120-
tooltip="Set up roles", # 设置角色
121+
tooltip=_("Set up roles"), # 设置角色
121122
dialog=amis.Dialog(),
122123
level=LevelEnum.warning,
123124
)
124125

125126
class schema(BaseModel):
126127
role_keys: str = Field(
127128
"",
128-
title="role list", # 角色列表
129+
title=_("role list"), # 角色列表
129130
amis_form_item=amis.Transfer(
130131
selectMode="table",
131132
resultListModeFollowSelect=True,
132133
columns=[
133134
# {"name": "key", "label": "角色标识"},
134-
{"name": "name", "label": "Role Name"}, # 角色名称
135-
{"name": "desc", "label": "Role description"}, # 角色描述
136-
{"name": "role_names", "label": "sub-role"}, # 子角色
135+
{"name": "name", "label": _("Role Name")}, # 角色名称
136+
{"name": "desc", "label": _("Role description")}, # 角色描述
137+
{"name": "role_names", "label": _("sub-role")}, # 子角色
137138
],
138139
source="",
139140
valueField="key",
@@ -158,18 +159,18 @@ async def get_init_data(self, request: Request, **kwargs) -> BaseApiOut[Any]:
158159
return BaseApiOut(data=self.schema())
159160
subject = await self.get_subject_by_id(item_id)
160161
if not subject:
161-
return BaseApiOut(status=0, msg="Models not supported yet") # 暂不支持的模型
162+
return BaseApiOut(status=0, msg=_("Models not supported yet")) # 暂不支持的模型
162163
role_keys = await self.site.auth.enforcer.get_roles_for_user(subject)
163164
return BaseApiOut(data=self.schema(role_keys=",".join(role_keys).replace("r:", "")))
164165

165166
async def handle(self, request: Request, item_id: List[str], data: schema, **kwargs):
166167
"""更新角色Casbin权限"""
167168
subject = await self.get_subject_by_id(item_id[0])
168169
if not subject:
169-
return BaseApiOut(status=0, msg="Models not supported yet") # 暂不支持的模型
170+
return BaseApiOut(status=0, msg=_("Models not supported yet")) # 暂不支持的模型
170171
identity = await self.site.auth.get_current_user_identity(request) or SystemUserEnum.GUEST
171172
if subject == "u:" + identity:
172-
return BaseApiOut(status=0, msg="Cannot modify own permissions") # 不能修改自己的权限
173+
return BaseApiOut(status=0, msg=_("Cannot modify own permissions")) # 不能修改自己的权限
173174
enforcer: AsyncEnforcer = self.site.auth.enforcer
174175
role_keys = [f"r:{role}" for role in data.role_keys.split(",") if role]
175176
if role_keys and identity not in [SystemUserEnum.ROOT, SystemUserEnum.ADMIN]:
@@ -190,7 +191,7 @@ class BaseSubPermAction(BaseSubAction):
190191
action = ActionType.Dialog(
191192
name="view_subject_permissions",
192193
icon="fa fa-check",
193-
tooltip="View permissions", # 查看权限
194+
tooltip=_("View permissions"), # 查看权限
194195
dialog=amis.Dialog(),
195196
level=LevelEnum.warning,
196197
)
@@ -199,7 +200,7 @@ class BaseSubPermAction(BaseSubAction):
199200
class schema(BaseModel):
200201
permissions: str = Field(
201202
"",
202-
title="Permission list", # 权限列表
203+
title=_("Permission list"), # 权限列表
203204
amis_form_item=amis.InputTree(
204205
multiple=True,
205206
source="",
@@ -236,7 +237,7 @@ class ViewSubPagePermAction(BaseSubPermAction):
236237
action = ActionType.Dialog(
237238
name="view_subject_page_permissions",
238239
icon="fa fa-check",
239-
tooltip="View page permissions", # 查看页面权限
240+
tooltip=_("View page permissions"), # 查看页面权限
240241
dialog=amis.Dialog(actions=[]),
241242
level=LevelEnum.warning,
242243
)
@@ -254,14 +255,13 @@ async def get_init_data(self, request: Request, **kwargs) -> BaseApiOut[Any]:
254255
return BaseApiOut(data=self.schema())
255256
subject = await self.get_subject_by_id(item_id)
256257
if not subject:
257-
return BaseApiOut(status=0, msg="Models not supported yet") # 暂不支持的模型
258-
permissions = await get_subject_page_permissions(self.site.auth.enforcer, subject=subject,
259-
implicit=self._implicit)
258+
return BaseApiOut(status=0, msg=_("Models not supported yet")) # 暂不支持的模型
259+
permissions = await get_subject_page_permissions(self.site.auth.enforcer, subject=subject, implicit=self._implicit)
260260
permissions = [perm.replace("#allow", "") for perm in permissions if perm.endswith("#allow")]
261261
return BaseApiOut(data=self.schema(permissions=",".join(permissions)))
262262

263263
async def handle(self, request: Request, item_id: List[str], data: BaseModel, **kwargs):
264-
return BaseApiOut(status=1, msg="Please update settings through [Setting Permissions]!") # 请通过的【设置权限】更新设置!
264+
return BaseApiOut(status=1, msg=_("Please update settings through [Setting Permissions]!")) # 请通过的【设置权限】更新设置!
265265

266266

267267
class UpdateSubDataPermAction(BaseSubPermAction):
@@ -272,18 +272,18 @@ class UpdateSubDataPermAction(BaseSubPermAction):
272272
action = ActionType.Dialog(
273273
name="update_subject_data_permissions",
274274
icon="fa fa-gavel",
275-
tooltip="Update data permissions", # 更新数据权限
276-
dialog=amis.Dialog(actions=[amis.Action(actionType="submit", label="Submit", close=False, primary=True)]), # 保存
275+
tooltip=_("Update data permissions"), # 更新数据权限
276+
dialog=amis.Dialog(actions=[amis.Action(actionType="submit", label=_("Save"), close=False, primary=True)]), # 保存
277277
level=LevelEnum.warning,
278278
)
279279

280280
# 创建动作表单数据模型
281281
class schema(BaseSubPermAction.schema):
282282
effect_matrix: list = Field(
283283
[],
284-
title="Current permissions", # 当前权限
284+
title=_("Current permissions"), # 当前权限
285285
amis_form_item=amis.MatrixCheckboxes(
286-
rowLabel="Permission name", # 权限名称
286+
rowLabel=_("Permission name"), # 权限名称
287287
multiple=False,
288288
singleSelectMode="row",
289289
source="",
@@ -292,9 +292,9 @@ class schema(BaseSubPermAction.schema):
292292
)
293293
policy_matrix: list = Field(
294294
[],
295-
title="Rights Profile", # 权限配置
295+
title=_("Rights Profile"), # 权限配置
296296
amis_form_item=amis.MatrixCheckboxes(
297-
rowLabel="Name", # 名称
297+
rowLabel=_("Name"), # 名称
298298
multiple=False,
299299
singleSelectMode="row",
300300
yCheckAll=True,
@@ -327,22 +327,22 @@ async def _get_admin_action_options(request: Request, item_id: str):
327327

328328
@self.router.get("/get_admin_action_perm_options", response_model=BaseApiOut)
329329
async def get_admin_action_perm_options(
330-
request: Request,
331-
permission: str = "",
332-
item_id: str = "",
333-
type: str = "policy",
330+
request: Request,
331+
permission: str = "",
332+
item_id: str = "",
333+
type: str = "policy",
334334
):
335335
columns = [
336336
{
337-
"label": "default", # 默认
337+
"label": _("default"), # 默认
338338
"col": "default",
339339
},
340340
{
341-
"label": "allow", # 是
341+
"label": _("allow"), # 是
342342
"col": "allow",
343343
},
344344
{
345-
"label": "deny", # 否
345+
"label": _("deny"), # 否
346346
"col": "deny",
347347
},
348348
]
@@ -356,7 +356,7 @@ async def get_admin_action_perm_options(
356356
)
357357
if not permission:
358358
return out
359-
unique_id, action, *_ = permission_decode(permission)
359+
unique_id, action, *a = permission_decode(permission)
360360
admin, parent = self.site.get_page_schema_child(unique_id)
361361
if not admin:
362362
return out
@@ -393,7 +393,7 @@ async def handle(self, request: Request, item_id: List[str], data: BaseModel, **
393393
subject = await self.get_subject_by_id(item_id[0])
394394
identity = await self.site.auth.get_current_user_identity(request) or SystemUserEnum.GUEST
395395
if subject == "u:" + identity:
396-
return BaseApiOut(status=0, msg="Cannot modify own permissions") # 不能修改自己的权限
396+
return BaseApiOut(status=0, msg=_("Cannot modify own permissions")) # 不能修改自己的权限
397397
msg = await update_subject_data_permissions(
398398
self.site.auth.enforcer,
399399
subject=subject,
@@ -411,7 +411,7 @@ class UpdateSubPagePermsAction(ViewSubPagePermAction):
411411
action = ActionType.Dialog(
412412
name="update_subject_page_permissions",
413413
icon="fa fa-gavel",
414-
tooltip="Update page permissions", # 更新页面权限
414+
tooltip=_("Update page permissions"), # 更新页面权限
415415
dialog=amis.Dialog(),
416416
level=LevelEnum.warning,
417417
)
@@ -420,10 +420,10 @@ async def handle(self, request: Request, item_id: List[str], data: BaseModel, **
420420
"""更新角色Casbin权限"""
421421
subject = await self.get_subject_by_id(item_id[0])
422422
if not subject:
423-
return BaseApiOut(status=0, msg="Models not supported yet") # 暂不支持的模型
423+
return BaseApiOut(status=0, msg=_("Models not supported yet")) # 暂不支持的模型
424424
identity = await self.site.auth.get_current_user_identity(request) or SystemUserEnum.GUEST
425425
if subject == "u:" + identity:
426-
return BaseApiOut(status=0, msg="Cannot modify own permissions") # 不能修改自己的权限
426+
return BaseApiOut(status=0, msg=_("Cannot modify own permissions")) # 不能修改自己的权限
427427
# 权限列表
428428
permissions = [perm for perm in data.permissions.split(",") if perm and perm.endswith("#page")] # 分割权限列表,去除空值
429429
enforcer: AsyncEnforcer = self.site.auth.enforcer
@@ -440,20 +440,20 @@ class CopyUserAuthLinkAction(ModelAction):
440440
action = amis.ActionType.Dialog(
441441
name="copy_user_auth_link",
442442
icon="fa fa-link",
443-
tooltip="User login-free link", # 用户免登录链接
443+
tooltip=_("User login-free link"), # 用户免登录链接
444444
level=amis.LevelEnum.danger,
445445
dialog=amis.Dialog(
446446
size=amis.SizeEnum.md,
447-
title="User login-free link", # 用户免登录链接
447+
title=_("User login-free link"), # 用户免登录链接
448448
),
449449
)
450450
form_init = True
451451
form = amis.Form(static=True, disabled=True) # type: ignore # 禁用表单
452452

453453
class schema(UsernameMixin, PkMixin):
454454
auth_url: str = Field(
455-
title="Authorization link", # 授权链接
456-
description="Copy the link to your browser and open it without logging in", # 复制链接到浏览器打开即可免登录
455+
title=_("Authorization link"), # 授权链接
456+
description=_("Copy the link to your browser and open it without logging in"), # 复制链接到浏览器打开即可免登录
457457
amis_form_item=amis.Static(
458458
copyable=True,
459459
),
@@ -471,9 +471,8 @@ async def get_init_data(self, request: Request, **kwargs) -> BaseApiOut[Any]:
471471
}
472472
token = await auth.backend.token_store.write_token(token_data)
473473
return BaseApiOut(
474-
msg="Successful operation", # 操作成功
475-
data={**token_data,
476-
"auth_url": f"{str(request.base_url)[:-1]}{self.site.router_path}/login_by_token?token={token}"},
474+
msg=_("Successful operation"), # 操作成功
475+
data={**token_data, "auth_url": f"{str(request.base_url)[:-1]}{self.site.router_path}/login_by_token?token={token}"},
477476
)
478477

479478
def register_router(self):

fastapi_user_auth/admin/admin.py

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,13 @@
6262

6363

6464
def attach_page_head(page: Page) -> Page:
65-
desc = _(
66-
"Amis is a low-code front-end framework that reduces page development effort and greatly improves efficiency")
65+
desc = _("Amis is a low-code front-end framework that reduces page development effort and greatly improves efficiency")
6766
page.body = [
6867
Html(
6968
html=f'<div style="display: flex; justify-content: center; align-items: center; margin: 96px 0px 8px;">'
70-
f'<img src="https://baidu.gitee.io/amis/static/favicon_b3b0647.png" alt="logo" style="margin-right: 8px; '
71-
f'width: 48px;"><span style="font-size: 32px; font-weight: bold;">Amis Admin</span></div>'
72-
f'<div style="width: 100%; text-align: center; color: rgba(0, 0, 0, 0.45); margin-bottom: 40px;">{desc}</div>'
69+
f'<img src="https://baidu.gitee.io/amis/static/favicon_b3b0647.png" alt="logo" style="margin-right: 8px; '
70+
f'width: 48px;"><span style="font-size: 32px; font-weight: bold;">Amis Admin</span></div>'
71+
f'<div style="width: 100%; text-align: center; color: rgba(0, 0, 0, 0.45); margin-bottom: 40px;">{desc}</div>'
7372
),
7473
Grid(columns=[{"body": [page.body], "lg": 2, "md": 4, "valign": "middle"}], align="center", valign="middle"),
7574
]
@@ -151,8 +150,7 @@ class UserRegFormAdmin(FormAdmin):
151150
page_schema = None
152151
page_route_kwargs = {"name": "reg"}
153152

154-
async def handle(self, request: Request, data: SchemaUpdateT, **kwargs) -> BaseApiOut[
155-
BaseModel]: # self.schema_submit_out
153+
async def handle(self, request: Request, data: SchemaUpdateT, **kwargs) -> BaseApiOut[BaseModel]: # self.schema_submit_out
156154
auth: Auth = request.auth
157155
if data.username.upper() in SystemUserEnum.__members__:
158156
return BaseApiOut(status=-1, msg=_("Username has been registered!"), data=None)
@@ -273,15 +271,19 @@ class UserAdmin(AuthFieldModelAdmin, AuthSelectModelAdmin, SoftDeleteModelAdmin,
273271
lambda admin: UpdateSubPagePermsAction(
274272
admin=admin,
275273
name="update_subject_page_permissions",
276-
tooltip="Update user page permissions", # 更新用户页面权限
274+
tooltip=_("Update user page permissions"), # 更新用户页面权限
277275
),
278276
lambda admin: UpdateSubDataPermAction(
279277
admin=admin,
280278
name="update_subject_data_permissions",
281-
tooltip="Update user data permissions", # 更新用户数据权限
279+
tooltip=_("Update user data permissions"), # 更新用户数据权限
282280
),
283281
lambda admin: UpdateSubRolesAction(
284-
admin=admin, name="update_subject_roles", tooltip="Update user role", icon="fa fa-user", flags="item"
282+
admin=admin,
283+
name="update_subject_roles",
284+
tooltip=_("Update user role"),
285+
icon="fa fa-user",
286+
flags="item"
285287
# 更新用户角色
286288
),
287289
lambda admin: CopyUserAuthLinkAction(admin),
@@ -331,15 +333,19 @@ class RoleAdmin(AutoTimeModelAdmin, FootableModelAdmin):
331333
lambda admin: UpdateSubPagePermsAction(
332334
admin=admin,
333335
name="update_subject_page_permissions",
334-
tooltip="Update role page permissions", # 更新角色页面权限
336+
tooltip=_("Update role page permissions"), # 更新角色页面权限
335337
),
336338
lambda admin: UpdateSubDataPermAction(
337339
admin=admin,
338340
name="update_subject_data_permissions",
339-
tooltip="Update role data permissions", # 更新角色数据权限
341+
tooltip=_("Update role data permissions"), # 更新角色数据权限
340342
),
341343
lambda admin: UpdateSubRolesAction(
342-
admin=admin, name="update_subject_roles", tooltip="Update sub-roles", icon="fa fa-user", flags="item"
344+
admin=admin,
345+
name="update_subject_roles",
346+
tooltip=_("Update sub-roles"),
347+
icon="fa fa-user",
348+
flags="item"
343349
# 更新子角色
344350
),
345351
]
@@ -362,14 +368,13 @@ class CasbinRuleAdmin(ReadOnlyModelAdmin):
362368
unique_id = "Auth>CasbinRuleAdmin"
363369
page_schema = PageSchema(label="CasbinRule", icon="fa fa-lock")
364370
model = CasbinRule
365-
list_filter = [CasbinRule.ptype, CasbinRule.v0, CasbinRule.v1, CasbinRule.v2, CasbinRule.v3, CasbinRule.v4,
366-
CasbinRule.v5]
371+
list_filter = [CasbinRule.ptype, CasbinRule.v0, CasbinRule.v1, CasbinRule.v2, CasbinRule.v3, CasbinRule.v4, CasbinRule.v5]
367372
admin_action_maker = [
368373
lambda admin: AdminAction(
369374
admin=admin,
370375
action=ActionType.Ajax(
371376
id="refresh",
372-
label="Refresh permissions", # 刷新权限
377+
label=_("Refresh permissions"), # 刷新权限
373378
icon="fa fa-refresh",
374379
level=LevelEnum.success,
375380
api=f"GET:{admin.router_path}/load_policy",
@@ -395,14 +400,14 @@ def register_router(self):
395400
async def _load_policy():
396401
await self.load_policy()
397402
get_admin_action_options.cache_clear() # 清除系统菜单缓存
398-
return BaseApiOut(data="Refresh successful") # 刷新成功
403+
return BaseApiOut(data=_("Refresh successful")) # 刷新成功
399404

400405
return super().register_router()
401406

402407

403408
class LoginHistoryAdmin(ReadOnlyModelAdmin):
404409
unique_id = "Auth>LoginHistoryAdmin"
405-
page_schema = PageSchema(label="Login history", icon="fa fa-history") # 登录历史
410+
page_schema = PageSchema(label=_("Login history"), icon="fa fa-history") # 登录历史
406411
model = LoginHistory
407412
search_fields = [LoginHistory.login_name, LoginHistory.ip, LoginHistory.login_status, LoginHistory.user_agent]
408413
list_display = [

0 commit comments

Comments
 (0)