From 81341d5b6ddefd85d78447390048d20da43e9efc Mon Sep 17 00:00:00 2001
From: kingmo888 <17401091+kingmo888@users.noreply.github.com>
Date: Tue, 14 May 2024 10:47:41 +0800
Subject: [PATCH] Fix bugs and adjust internationalization of new pages
---
api/front_locale.py | 20 +-
...06_alter_rustdesdevice_options_and_more.py | 240 ++++++++++++++++++
...07_alter_rustdesdevice_options_and_more.py | 232 +++++++++++++++++
api/templates/base.html | 4 +-
api/templates/show_conn_log.html | 21 +-
api/templates/show_file_log.html | 25 +-
db/db.sqlite3 | Bin 155648 -> 163840 bytes
locale/en/LC_MESSAGES/django.mo | Bin 8128 -> 8872 bytes
locale/en/LC_MESSAGES/django.po | 177 ++++++++++---
rustdesk_server_api/settings.py | 1 +
10 files changed, 659 insertions(+), 61 deletions(-)
create mode 100644 api/migrations/0006_alter_rustdesdevice_options_and_more.py
create mode 100644 api/migrations/0007_alter_rustdesdevice_options_and_more.py
diff --git a/api/front_locale.py b/api/front_locale.py
index 03d478a..42edd0a 100644
--- a/api/front_locale.py
+++ b/api/front_locale.py
@@ -57,4 +57,22 @@
_('3、为保障安全,链接有效期为15分钟、链接仅有效1次。链接一旦被(非分享人的登录用户)访问,分享生效,后续访问链接失效。')
_('系统')
_('我的机器')
-_('信息')
\ No newline at end of file
+_('信息')
+_('远程ID')
+_('远程别名')
+_('用户ID')
+_('用户别名')
+_('用户IP')
+_('文件大小')
+_('发送/接受')
+_('记录于')
+_('连接开始时间')
+_('连接结束时间')
+_('时长')
+_('连接日志')
+_('文件传输日志')
+_('页码 #')
+_('下一页 #')
+_('上一页 #')
+_('第一页')
+_('上页')
\ No newline at end of file
diff --git a/api/migrations/0006_alter_rustdesdevice_options_and_more.py b/api/migrations/0006_alter_rustdesdevice_options_and_more.py
new file mode 100644
index 0000000..8f43eea
--- /dev/null
+++ b/api/migrations/0006_alter_rustdesdevice_options_and_more.py
@@ -0,0 +1,240 @@
+# Generated by Django 4.2.7 on 2024-05-14 10:43
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("api", "0005_connlog_filelog"),
+ ]
+
+ operations = [
+ migrations.AlterModelOptions(
+ name="rustdesdevice",
+ options={
+ "ordering": ("-rid",),
+ "verbose_name": "Device",
+ "verbose_name_plural": "Device List",
+ },
+ ),
+ migrations.AlterModelOptions(
+ name="rustdeskpeer",
+ options={
+ "ordering": ("-username",),
+ "verbose_name": "Peers",
+ "verbose_name_plural": "Peers List",
+ },
+ ),
+ migrations.AlterModelOptions(
+ name="rustdesktag",
+ options={
+ "ordering": ("-uid",),
+ "verbose_name": "Tags",
+ "verbose_name_plural": "Tags List",
+ },
+ ),
+ migrations.AlterModelOptions(
+ name="rustdesktoken",
+ options={
+ "ordering": ("-username",),
+ "verbose_name": "Token",
+ "verbose_name_plural": "Token List",
+ },
+ ),
+ migrations.AlterModelOptions(
+ name="sharelink",
+ options={
+ "ordering": ("-create_time",),
+ "verbose_name": "Share Link",
+ "verbose_name_plural": "Link List",
+ },
+ ),
+ migrations.AlterModelOptions(
+ name="userprofile",
+ options={
+ "permissions": (
+ ("view_task", "Can see available tasks"),
+ ("change_task_status", "Can change the status of tasks"),
+ ("close_task", "Can remove a task by setting its status as closed"),
+ ),
+ "verbose_name": "User",
+ "verbose_name_plural": "User List",
+ },
+ ),
+ migrations.AlterField(
+ model_name="rustdesdevice",
+ name="create_time",
+ field=models.DateTimeField(
+ auto_now_add=True, verbose_name="Device Registration Time"
+ ),
+ ),
+ migrations.AlterField(
+ model_name="rustdesdevice",
+ name="hostname",
+ field=models.CharField(max_length=100, verbose_name="Hostname"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesdevice",
+ name="memory",
+ field=models.CharField(max_length=100, verbose_name="Memory"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesdevice",
+ name="os",
+ field=models.CharField(max_length=100, verbose_name="Operating System"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesdevice",
+ name="rid",
+ field=models.CharField(blank=True, max_length=60, verbose_name="Client ID"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesdevice",
+ name="username",
+ field=models.CharField(
+ blank=True, max_length=100, verbose_name="System Username"
+ ),
+ ),
+ migrations.AlterField(
+ model_name="rustdesdevice",
+ name="version",
+ field=models.CharField(max_length=100, verbose_name="Client Version"),
+ ),
+ migrations.AlterField(
+ model_name="rustdeskpeer",
+ name="alias",
+ field=models.CharField(max_length=30, verbose_name="Alias"),
+ ),
+ migrations.AlterField(
+ model_name="rustdeskpeer",
+ name="hostname",
+ field=models.CharField(max_length=30, verbose_name="Operating System Name"),
+ ),
+ migrations.AlterField(
+ model_name="rustdeskpeer",
+ name="platform",
+ field=models.CharField(max_length=30, verbose_name="Platform"),
+ ),
+ migrations.AlterField(
+ model_name="rustdeskpeer",
+ name="rhash",
+ field=models.CharField(
+ max_length=60, verbose_name="Device Connection Password"
+ ),
+ ),
+ migrations.AlterField(
+ model_name="rustdeskpeer",
+ name="rid",
+ field=models.CharField(max_length=60, verbose_name="Client ID"),
+ ),
+ migrations.AlterField(
+ model_name="rustdeskpeer",
+ name="tags",
+ field=models.CharField(max_length=30, verbose_name="Tag"),
+ ),
+ migrations.AlterField(
+ model_name="rustdeskpeer",
+ name="uid",
+ field=models.CharField(max_length=16, verbose_name="User ID"),
+ ),
+ migrations.AlterField(
+ model_name="rustdeskpeer",
+ name="username",
+ field=models.CharField(max_length=20, verbose_name="System Username"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesktag",
+ name="tag_color",
+ field=models.CharField(blank=True, max_length=60, verbose_name="Tag Color"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesktag",
+ name="tag_name",
+ field=models.CharField(max_length=60, verbose_name="Tag Name"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesktag",
+ name="uid",
+ field=models.CharField(max_length=16, verbose_name="Belongs to User ID"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesktoken",
+ name="access_token",
+ field=models.CharField(
+ blank=True, max_length=60, verbose_name="Access Token"
+ ),
+ ),
+ migrations.AlterField(
+ model_name="rustdesktoken",
+ name="create_time",
+ field=models.DateTimeField(auto_now_add=True, verbose_name="Login Time"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesktoken",
+ name="uid",
+ field=models.CharField(max_length=16, verbose_name="User ID"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesktoken",
+ name="username",
+ field=models.CharField(max_length=20, verbose_name="Username"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesktoken",
+ name="uuid",
+ field=models.CharField(max_length=60, verbose_name="UUID"),
+ ),
+ migrations.AlterField(
+ model_name="sharelink",
+ name="create_time",
+ field=models.DateTimeField(
+ auto_now_add=True, verbose_name="Generation Time"
+ ),
+ ),
+ migrations.AlterField(
+ model_name="sharelink",
+ name="is_expired",
+ field=models.BooleanField(default=False, verbose_name="Is Expired"),
+ ),
+ migrations.AlterField(
+ model_name="sharelink",
+ name="is_used",
+ field=models.BooleanField(default=False, verbose_name="Is Used"),
+ ),
+ migrations.AlterField(
+ model_name="sharelink",
+ name="peers",
+ field=models.CharField(max_length=20, verbose_name="Machine ID List"),
+ ),
+ migrations.AlterField(
+ model_name="sharelink",
+ name="shash",
+ field=models.CharField(max_length=60, verbose_name="Link Key"),
+ ),
+ migrations.AlterField(
+ model_name="sharelink",
+ name="uid",
+ field=models.CharField(max_length=16, verbose_name="User ID"),
+ ),
+ migrations.AlterField(
+ model_name="userprofile",
+ name="deviceInfo",
+ field=models.TextField(blank=True, verbose_name="Login Information:"),
+ ),
+ migrations.AlterField(
+ model_name="userprofile",
+ name="is_active",
+ field=models.BooleanField(default=True, verbose_name="Is Active"),
+ ),
+ migrations.AlterField(
+ model_name="userprofile",
+ name="is_admin",
+ field=models.BooleanField(default=False, verbose_name="Is Administrator"),
+ ),
+ migrations.AlterField(
+ model_name="userprofile",
+ name="username",
+ field=models.CharField(max_length=50, unique=True, verbose_name="Username"),
+ ),
+ ]
diff --git a/api/migrations/0007_alter_rustdesdevice_options_and_more.py b/api/migrations/0007_alter_rustdesdevice_options_and_more.py
new file mode 100644
index 0000000..9a08359
--- /dev/null
+++ b/api/migrations/0007_alter_rustdesdevice_options_and_more.py
@@ -0,0 +1,232 @@
+# Generated by Django 4.2.7 on 2024-05-14 10:46
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("api", "0006_alter_rustdesdevice_options_and_more"),
+ ]
+
+ operations = [
+ migrations.AlterModelOptions(
+ name="rustdesdevice",
+ options={
+ "ordering": ("-rid",),
+ "verbose_name": "设备",
+ "verbose_name_plural": "设备列表",
+ },
+ ),
+ migrations.AlterModelOptions(
+ name="rustdeskpeer",
+ options={
+ "ordering": ("-username",),
+ "verbose_name": "Peers",
+ "verbose_name_plural": "Peers列表",
+ },
+ ),
+ migrations.AlterModelOptions(
+ name="rustdesktag",
+ options={
+ "ordering": ("-uid",),
+ "verbose_name": "Tags",
+ "verbose_name_plural": "Tags列表",
+ },
+ ),
+ migrations.AlterModelOptions(
+ name="rustdesktoken",
+ options={
+ "ordering": ("-username",),
+ "verbose_name": "Token",
+ "verbose_name_plural": "Token列表",
+ },
+ ),
+ migrations.AlterModelOptions(
+ name="sharelink",
+ options={
+ "ordering": ("-create_time",),
+ "verbose_name": "分享链接",
+ "verbose_name_plural": "链接列表",
+ },
+ ),
+ migrations.AlterModelOptions(
+ name="userprofile",
+ options={
+ "permissions": (
+ ("view_task", "Can see available tasks"),
+ ("change_task_status", "Can change the status of tasks"),
+ ("close_task", "Can remove a task by setting its status as closed"),
+ ),
+ "verbose_name": "用户",
+ "verbose_name_plural": "用户列表",
+ },
+ ),
+ migrations.AlterField(
+ model_name="rustdesdevice",
+ name="create_time",
+ field=models.DateTimeField(auto_now_add=True, verbose_name="设备注册时间"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesdevice",
+ name="hostname",
+ field=models.CharField(max_length=100, verbose_name="主机名"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesdevice",
+ name="memory",
+ field=models.CharField(max_length=100, verbose_name="内存"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesdevice",
+ name="os",
+ field=models.CharField(max_length=100, verbose_name="操作系统"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesdevice",
+ name="rid",
+ field=models.CharField(blank=True, max_length=60, verbose_name="客户端ID"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesdevice",
+ name="username",
+ field=models.CharField(blank=True, max_length=100, verbose_name="系统用户名"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesdevice",
+ name="version",
+ field=models.CharField(max_length=100, verbose_name="客户端版本"),
+ ),
+ migrations.AlterField(
+ model_name="rustdeskpeer",
+ name="alias",
+ field=models.CharField(max_length=30, verbose_name="别名"),
+ ),
+ migrations.AlterField(
+ model_name="rustdeskpeer",
+ name="hostname",
+ field=models.CharField(max_length=30, verbose_name="操作系统名"),
+ ),
+ migrations.AlterField(
+ model_name="rustdeskpeer",
+ name="platform",
+ field=models.CharField(max_length=30, verbose_name="平台"),
+ ),
+ migrations.AlterField(
+ model_name="rustdeskpeer",
+ name="rhash",
+ field=models.CharField(max_length=60, verbose_name="设备链接密码"),
+ ),
+ migrations.AlterField(
+ model_name="rustdeskpeer",
+ name="rid",
+ field=models.CharField(max_length=60, verbose_name="客户端ID"),
+ ),
+ migrations.AlterField(
+ model_name="rustdeskpeer",
+ name="tags",
+ field=models.CharField(max_length=30, verbose_name="标签"),
+ ),
+ migrations.AlterField(
+ model_name="rustdeskpeer",
+ name="uid",
+ field=models.CharField(max_length=16, verbose_name="用户ID"),
+ ),
+ migrations.AlterField(
+ model_name="rustdeskpeer",
+ name="username",
+ field=models.CharField(max_length=20, verbose_name="系统用户名"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesktag",
+ name="tag_color",
+ field=models.CharField(blank=True, max_length=60, verbose_name="标签颜色"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesktag",
+ name="tag_name",
+ field=models.CharField(max_length=60, verbose_name="标签名称"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesktag",
+ name="uid",
+ field=models.CharField(max_length=16, verbose_name="所属用户ID"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesktoken",
+ name="access_token",
+ field=models.CharField(
+ blank=True, max_length=60, verbose_name="access_token"
+ ),
+ ),
+ migrations.AlterField(
+ model_name="rustdesktoken",
+ name="create_time",
+ field=models.DateTimeField(auto_now_add=True, verbose_name="登录时间"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesktoken",
+ name="uid",
+ field=models.CharField(max_length=16, verbose_name="用户ID"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesktoken",
+ name="username",
+ field=models.CharField(max_length=20, verbose_name="用户名"),
+ ),
+ migrations.AlterField(
+ model_name="rustdesktoken",
+ name="uuid",
+ field=models.CharField(max_length=60, verbose_name="uuid"),
+ ),
+ migrations.AlterField(
+ model_name="sharelink",
+ name="create_time",
+ field=models.DateTimeField(auto_now_add=True, verbose_name="生成时间"),
+ ),
+ migrations.AlterField(
+ model_name="sharelink",
+ name="is_expired",
+ field=models.BooleanField(default=False, verbose_name="是否过期"),
+ ),
+ migrations.AlterField(
+ model_name="sharelink",
+ name="is_used",
+ field=models.BooleanField(default=False, verbose_name="是否使用"),
+ ),
+ migrations.AlterField(
+ model_name="sharelink",
+ name="peers",
+ field=models.CharField(max_length=20, verbose_name="机器ID列表"),
+ ),
+ migrations.AlterField(
+ model_name="sharelink",
+ name="shash",
+ field=models.CharField(max_length=60, verbose_name="链接Key"),
+ ),
+ migrations.AlterField(
+ model_name="sharelink",
+ name="uid",
+ field=models.CharField(max_length=16, verbose_name="用户ID"),
+ ),
+ migrations.AlterField(
+ model_name="userprofile",
+ name="deviceInfo",
+ field=models.TextField(blank=True, verbose_name="登录信息:"),
+ ),
+ migrations.AlterField(
+ model_name="userprofile",
+ name="is_active",
+ field=models.BooleanField(default=True, verbose_name="是否激活"),
+ ),
+ migrations.AlterField(
+ model_name="userprofile",
+ name="is_admin",
+ field=models.BooleanField(default=False, verbose_name="是否管理员"),
+ ),
+ migrations.AlterField(
+ model_name="userprofile",
+ name="username",
+ field=models.CharField(max_length=50, unique=True, verbose_name="用户名"),
+ ),
+ ]
diff --git a/api/templates/base.html b/api/templates/base.html
index c5e03d0..bad0d35 100644
--- a/api/templates/base.html
+++ b/api/templates/base.html
@@ -37,10 +37,10 @@
{% trans "网页控制" %}
{% if u.is_admin %}
+ {% trans "连接日志" %}
+ {% trans "文件传输日志" %}
{% trans "管理后台" %}
- Connection Log
- File Transfer Log
{% endif %}
{% trans "退出" %}
diff --git a/api/templates/show_conn_log.html b/api/templates/show_conn_log.html
index 1b3197b..0d2a429 100644
--- a/api/templates/show_conn_log.html
+++ b/api/templates/show_conn_log.html
@@ -1,23 +1,24 @@
{% extends "base.html" %}
+{% load my_filters %}
{% block title %}RustDesk WebUI{% endblock %}
{% block content %}
-
+
- {{ "User IP" | translate }} |
- {{ "User ID" | translate }} |
- {{ "User Alias" | translate }} |
- {{ "Remote ID" | translate }} |
- {{ "Remote Alias" | translate }} |
- {{ "Connection Start Time" | translate }} |
- {{ "Connection End Time" | translate }} |
- {{ "Duration (HH:MM:SS)" | translate }} |
+ {{ "用户IP" | translate }} |
+ {{ "用户ID" | translate }} |
+ {{ "用户别名" | translate }} |
+ {{ "远程ID" | translate }} |
+ {{ "远程别名" | translate }} |
+ {{ "连接开始时间" | translate }} |
+ {{ "连接结束时间" | translate }} |
+ {{ "时长" | translate }}(HH:MM:SS) |
@@ -46,7 +47,7 @@
{% endif %}
{% if page_obj.paginator.num_pages > 1 %}
- {{ "Page #" | translate }} {{ page_obj.number }} / {{ page_obj.paginator.num_pages }}
+ {{ "页码 #" | translate }} {{ page_obj.number }} / {{ page_obj.paginator.num_pages }}
{% endif %}
{% if page_obj.has_next %}
diff --git a/api/templates/show_file_log.html b/api/templates/show_file_log.html
index 004d85c..455971e 100644
--- a/api/templates/show_file_log.html
+++ b/api/templates/show_file_log.html
@@ -1,24 +1,25 @@
{% extends "base.html" %}
+{% load my_filters %}
{% block title %}RustDesk WebUI{% endblock %}
{% block content %}
-
+
- {{ "File" | translate }} |
- {{ "Remote ID" | translate }} |
- {{ "Remote Alias" | translate }} |
- {{ "User ID" | translate }} |
- {{ "User Alias" | translate }} |
- {{ "User IP" | translate }} |
- {{ "Filesize" | translate }} |
- {{ "Sent/Received" | translate }} |
- {{ "Logged At" | translate }} |
+ {{ "文件" | translate }} |
+ {{ "远程ID" | translate }} |
+ {{ "远程别名" | translate }} |
+ {{ "用户ID" | translate }} |
+ {{ "用户别名" | translate }} |
+ {{ "用户IP" | translate }} |
+ {{ "文件大小" | translate }} |
+ {{ "发送/接受" | translate }} |
+ {{ "记录于" | translate }} |
@@ -47,12 +48,12 @@
{% if page_obj.has_previous %}
-
+
{% endif %}
{% if page_obj.paginator.num_pages > 1 %}
- {{ "page #" | translate }} {{ page_obj.number }} / {{ page_obj.paginator.num_pages }}
+ {{ "页码 #" | translate }} {{ page_obj.number }} / {{ page_obj.paginator.num_pages }}
{% endif %}
{% if page_obj.has_next %}
diff --git a/db/db.sqlite3 b/db/db.sqlite3
index 46fe727251c8265936451c1592f30f42e9dbcb68..872f8abe71c0a1ea4927aac3fcdbccbe724553b8 100644
GIT binary patch
delta 2587
zcmaJ?eQXnD81H*+ck9<(VPj+8x0bn$ZryvI?{z?+z@nyO2m$6t^itPj9O=5*c8~~h
zfF%B91kU6PMnXcO|40-YGRyquta8!^+c`43`NQ5Z0
zzKSN9w24|86cJ3wQY)s3b~I6$n$6|1v(w5!Evw>x4syaUto9S*vW$2nr&{y_?Wm;|
zLUMvn2&r}YB?lyl0xL;sv;MGsPo0+tc?bo*N$+j%Y~_bp&dP=xh4LuN#burs5UcO+
z5S*BVT}4*E*fF%=@Dq6%2@r<8uGYR}Iy0l?aJg7T%V|X|oyCbcJOlyC2{BINf?yA;
zypQE`xXe&~it@VFP3o!6VW&Qpo1jj@_Urin4yabEMvljVE|sg1p|+#W^vV
zN4yMmrHgf9h(iL;>K}ATPE6t@6Z^Ak$cc#(#yA~yJ5pfdf($t*>BqWbPCq`u@jTQ&
z?~Xe$F2M;LuM<7I6JteQLJ57mr@g)`Y#hIpIOOpjN4H@d39=+3eYqzxTvtsPmpB%&
ze2Bi`YM`?Oy+q%oPthOJ2A!q%lzN#>bVpmzooLLdM->IPR>{v7iW#+#QIBX-s(x~$
zwb|{Cf%JUwkTR#{XS6~=o6RBJ7#Rg^`i+s;nozFb$Kx5I9=YfTG(|ls`Qbx~p*>9<
z00*?^B~*E~=P0OmZ@uS6ft@jN
zj@4pNLHpSbRq9giLpP$9bn=W6rtVTdQ#Yv}sBfud>Ke6#V~kPI>jof%tW~mB(OLy_
z4f58?Su1O;u=MMNwxk=8{W^I|2{+1(GG~y18szJWZqmwiTP2ERVr?T#V%f4n>=iIEIviT4>W)dnk1L!gZ%M0Z
z*NQZ=Y?d_6+Oe*IRnk_7Y?)|Fv&$}3X{#`Mp{1?5(G_VGO6i4PzMk~BrU7&I>{j+3&vx4jYzsBf}y<^FJW6Zwf_VF<$VsVUHqeS!K
zWC~mb9+%5KW~7r~GnREB3HD+G@rm)$D6!LcF9{eUydBG%+YVxG3>b|mFl2nW4V+)R
zoB~_GVqgpL*V=P)p3b2Aj*Ge(`Xdw!c>T}&mVH#?_l=_s$GuVa9h|{e?#-t*i)3pw
z3QljeGB8gNdseG%2Wr(;5aXE?=-)WRL`;teb0nR|{mBpDZ^s}rv3nmgv44CVqj_~^
z7EimDF(Ver%ep`2u4B}w}gGE=c{$rfjpCS+xK80V3;cdq2gnQ4|&G&)27gC0YBbIUJxSVT=@1>!7a@CE?(&c{@m~
zdGPg3yb+X%IOsR_?8aY$PdypqN0|ugG4ERQ<^j<>WE_=A>(mlH&y0fb86;lDlq0V{OBl>h($
delta 1169
zcmaKsOK1~87=ZWDWYbNPNoh^(BS~9YQPNIkW@mSHQ$&LZY6TV4wu-FPMhvvEG*J%<
zw!Us+WrX!4RY5NbN)8o7@F2cU;?0`~KA>0?)T>SeL3hD{x%}UJGynYan4Q&UA2rT*
zHup=Cv`X|pZR4c@Lj>W>LP&%Z@S_g;?oD3?YEsW|Ezuv*m-TD0WANMlvL&
z`U{m}rBXUlt{{Z4TPl~TrSVCE2pvSmAU3;+kvEMzGNEOf$gzf3@SYBq{1@RmV#BSx
z>_ZeX3kj>(!XI?(X#LxwkTQ%B;=4L&n{P1+v16LH$rm~YPWhMtZLu6RQ6eO@^%uq`
zrb^}ir*1&Yz$P^y2uUr%m@fT)Jb{jl8L>CTL(+;7KHN3v&yPUUvKXQKVplfl%a1_A
zG#TM9yK+Gd*@zI6CsV}FFtn+~n8V!^4l;{Uhar9|Wd#`}%wY!qmKq2$LY%tC(t#~t
zh>`FxKatM*JtPWXTQ=nn(=fW;u0lYo^0r76dIO=Hw?cfzw8!Vgh0Q
zG}Alit0sboQABABypqCTQUMRZJ1_}u0}srBL$&7p+W~HGQk_V-MOCx%_|fWNce*$;
zRr-CWbFEEkE+P)xojF>mP82H>#bc#|MegPDa+1HwWn%EN+xh*5iN)-Ql8_gljVX5c=6WS@{chqHa}FPw
diff --git a/locale/en/LC_MESSAGES/django.mo b/locale/en/LC_MESSAGES/django.mo
index 82f76c75fa74af465f5da72f5284670707ee7b58..eb6af4d3467142c985ce7ae5b0dc67f4c6851c4a 100644
GIT binary patch
delta 3399
zcmYk6d2o|O7>Bojw3I>*zybvuh=5!of&v~;phd2hLOBHSsPIvOCDkNciljxc3>At7
z?8w~_r30uq5h#Zu;(dYx=!~d;*rctF3jE`!M8GV>I*-#AS|Iz6;Z_&%tE)
zz4iYL`I+DOn`lhXBz7=nG>$?z6jnoWFsETV_#RZ?v(~<3?I={jSFJy_V?1y-*cN|Z
zm;ndFn_!OhKLVA&N|?p^W}S7^TD}4m-~=SLc^m3Y&szU^r~qGEy9p}6UtlWy!}{A}
zXnqD93|*E5P&=|3wq<=&Nhb?#f?eT$mgsCb9%^OKezrnCQga1qA<_>Fy#L^evK3sj)qP~!$!4uky6ZTx9mzV*+8D#l{V
zCHA@BvK%VjM%WG3WU&9r{52d};C-kw`wS}ZCF^gt_GQaItv|U_d?(VO0{4QNH_&pV
z_2)swp9Zyav+eUmK{~`Te(QM3+9B8v|4UE_eg+4^2B-jOosF3QT~KxjRGbxX9NYl4
z6Q4pQbkXvAsBxFA9c)c>IntmqbVI$#0H}$>EyqF?X93i>5~u~d)?NX}B^a{?PR4)w
zT4T1rluTnHuokM8DhZMZt01=^XhL*!eRe^9Wj@P8ZTc8^jz`0P@
zs19o4QP>-vhDy^BikWhNJNpK_&96Ll?obKzfqmhPkoq&Tpw8S2wQ~We@s&{Vo`ovfZBQ?`4=Rx`R07ALcKD;9
z9q=7gk^Kmjz;93!TD#&4CPM{sTYCu9n@@zQfq8H^Tn2Si`{7Xd7F5+=g$rSFulVya
z%iuaXQ+Ti)YT-tx%&$Og*dg3|65k9p
zeh1XnzW@`ASrWTy+R}TG+7Pq~6`>oEnif{&K8h41A9+wqQ>|!`9OOm!BYi8LKn`-D
zUZJ5$okBTDZGvmCZb#a$dyvv8L8FkGwqq$8DT7vqZjJR~bz)}H?}v2Y+S9?P58{nt
zZGfeqGgyq4pqtTs`sAs#Lb|k*WYET=wP-aOjns6&17p4TNBv>?sya14nudm<2axt!
z?V&i#4e)NH!&hOov{bFH64iyg$$C4(*{DCd!}@fXEv=N!^=Ktp*W$F)VdvTYEI0-|
zX6*^^F4PyzLn@TH@%N`fFw}n%O-FYkm2x>!%S8cHEQ7{JBi1JJUt#+NZ~>Z+23emQ
zPDb4Ee;eQYSk;b&u^nG-A3X>kNBZ8X-G-K-M`X}+msTKM0UydjGmu(F_?vb+TV-!(
zs4s7>J?wIuhWe^_|G%Eg9jZwABBlD7=JJXm(M>N#s%yg2JDg2uzy6uVZBIsb9FII-
z7s^ic_Ia+d;lz=KlY5%p3`J{RjGU@5(U>c;cVFaCwTadoY2JD&T$MU3p~s{`)3~KB
zy8dWneN9ts-M_|x$mWfqchXKI9*VrNwc+@t@apu6grXgdbybscP17lLBI`8>W0!Jy
z^{K`^6)nce^2oj_EmQNlb=f@PgBwqTqC0oTpNA4Vd>vnc*yOJjy3I
zb5HP;I3r;J&!sjcbTs^;3@Nlr({h_$mH#3`8CAj55#+8OFhN@
z(5@aA+A*!fS?C%Y2>W_Q5;A8vOUnX|i?_GE*hmvP*R%7e@nv4Gvp`{8MS)^pz%|pe
g)M;n_=T;8?GxNL)V`D-~vZtr${dm`jWlJ6N55OJWMF0Q*
delta 2687
zcmZ9OeN5F=7{{Nh_=azYplOg`rlw+$qP-{>q6s45JD6yQL?|i>Zbac#r;g>z$}6?i
z2yt1^+;F?rn6A=hYwHbTwf<u-QOZ40)`~xdo1(
z|14yv9d!H4a0vYqaFJQiI%#BK_zPyh*}RQ`Rgg7ptFs=;!M)yZg*?_l)gQhK1j+S|URb+r!srNTQe6;OwIBazLVaQ|0sM6pG
z=Ow6}--4Qd(6Fcjaquqs(_k*^+X5OI@B-AtFF{Sz=KXFskN#!IrYwa)G%XFPKL;kl
zJnyfEJXY;|9%^HUpvJ%GY=J>!Z@b|v)I=Y9|2wE7_yuagKcO7$8yB4@);Su=J^@aF
zQ{BGGSq?Q%4b->>=bkvuUuV|j17GtO?NCY8>Gm$D2|j{jU^kSbH=ri`7ZPRbPsVA7
z2~hS_?@xASx;+Q77t0$#{55fj4=8um_`pUVxXys!C2ttYkq;q3vQJ?q>)T}-g%}daEDhWU^}|{?9yY?U@Hkuz
z&p}Nz5~CJOf(zhuNFG`pEP(r=&b|lgtbc@x^i9aASb(olobLZ98cLc;P!7z6I;#Sx
zvnqmes2FO24NwuOg*>*4N)x{dHSSHQg-=7xa~{g!i~jy|?|%b>`t)9*p`DE5`zmHQ
z=R-NL5-P-{P@&rhwLm>osGFe19foqC8EU~+I1#o(f^6MTM|T}6BEKaOf9)iY9GzeY
zRI(*N?I;y$;WVfPXF`Q8*WZ^wjwL>w-kzK7lh~Z!+;$=*N<2
z8897^hqeK3gbh&dFFS8SW&hxD(MYU@T6iesY<46l@H}|0(NZGv=%|`NCMG2XW9zzczl^IBRqr$wAg_Mv}P#IF06oqYe-bPRv
zU5851CUh@SSr|p6o=>g2KhcKBij*&kfWob!D5>m>Li>+?(?uoG
za-_3fhAL1kdIHTwDi5I&^dzc8ca~i5=$35r_8gdo9z}&n;m<*tXsPc1Gc=~7_2>~)
zjCA%1NJ%pp<)bA?*Qo|QfVeb~vj(g_!6^YJ~Q@rg^q^@(d^1{GG+*QFGdRaS(4AJZNFY;1m?P-=2R_=DuaKukeZ
eZCz->xUa)~Q?3R=Whn`vg7HQD7H!*7VgCV|>i%#5
diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po
index 8f44e08..52e86f4 100644
--- a/locale/en/LC_MESSAGES/django.po
+++ b/locale/en/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-03-15 21:10+0800\n"
+"POT-Creation-Date: 2024-05-14 10:44+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -32,15 +32,15 @@ msgstr "Password Hash Value"
msgid "基本信息"
msgstr "Basic Information"
-#: .\api\admin_user.py:98
+#: .\api\admin_user.py:100
msgid "RustDesk自建Web"
msgstr "RustDesk Self-Hosted Web"
-#: .\api\admin_user.py:99
+#: .\api\admin_user.py:101
msgid "未定义"
msgstr "Undefined"
-#: .\api\front_locale.py:4 .\api\templates\base.html:40
+#: .\api\front_locale.py:4 .\api\templates\base.html:42
msgid "管理后台"
msgstr "Admin Panel"
@@ -54,7 +54,8 @@ msgstr "Share Machine"
#: .\api\front_locale.py:7
msgid "这么简易的东西,忘记密码这功能就没必要了吧。"
-msgstr "For such a simple thing, the forgot password feature is unnecessary, right?"
+msgstr ""
+"For such a simple thing, the forgot password feature is unnecessary, right?"
#: .\api\front_locale.py:8
msgid "立即注册"
@@ -77,7 +78,8 @@ msgid ""
"2、所分享的机器,被分享人享有相同的权限,如果机器设置了保存密码,被分享人也可"
"以直接连接。"
msgstr ""
-"2. The shared machine grants the same permissions to the recipient. If the machine is set to save password, the recipient can also connect directly."
+"2. The shared machine grants the same permissions to the recipient. If the "
+"machine is set to save password, the recipient can also connect directly."
#: .\api\front_locale.py:13
msgid "导出xlsx"
@@ -89,7 +91,9 @@ msgstr "Generate Share Link"
#: .\api\front_locale.py:15
msgid "请输入8~20位密码。可以包含字母、数字和特殊字符。"
-msgstr "Please enter a password of 8~20 characters. It can contain letters, numbers, and special characters."
+msgstr ""
+"Please enter a password of 8~20 characters. It can contain letters, numbers, "
+"and special characters."
#: .\api\front_locale.py:16
msgid "尾页"
@@ -196,8 +200,7 @@ msgid "请输入用户名"
msgstr "Please enter username"
#: .\api\front_locale.py:43
-msgid ""
-"1、链接有效期为15分钟,切勿随意分享给他人。"
+msgid "1、链接有效期为15分钟,切勿随意分享给他人。"
msgstr ""
"1. The link is valid for 15 minutes. Do not share it with others casually."
@@ -217,7 +220,7 @@ msgstr "Next Page"
msgid "登录"
msgstr "Login"
-#: .\api\front_locale.py:48 .\api\templates\base.html:43
+#: .\api\front_locale.py:48 .\api\templates\base.html:45
msgid "退出"
msgstr "Logout"
@@ -227,7 +230,8 @@ msgstr "Please adjust the machines to be shared to the right"
#: .\api\front_locale.py:50
msgid "成功!如需分享,请复制以下链接给其他人:
"
-msgstr "Success! If you need to share, please copy the following link to others:
"
+msgstr ""
+"Success! If you need to share, please copy the following link to others:
"
#: .\api\front_locale.py:51
msgid "忘记密码?"
@@ -258,12 +262,102 @@ msgid ""
"3、为保障安全,链接有效期为15分钟、链接仅有效1次。链接一旦被(非分享人的登录"
"用户)访问,分享生效,后续访问链接失效。"
msgstr ""
-"3. For security reasons, the link is valid for 15 minutes and only valid once. Once the link is accessed by a user (other than the sharing person), the sharing becomes effective, and subsequent access to the link will be invalid."
+"3. For security reasons, the link is valid for 15 minutes and only valid "
+"once. Once the link is accessed by a user (other than the sharing person), "
+"the sharing becomes effective, and subsequent access to the link will be "
+"invalid."
#: .\api\front_locale.py:58
msgid "系统"
msgstr "System"
+#: .\api\front_locale.py:59
+msgid "我的机器"
+msgstr "My Machine"
+
+#: .\api\front_locale.py:60
+#, fuzzy
+#| msgid "基本信息"
+msgid "信息"
+msgstr "Basic Information"
+
+#: .\api\front_locale.py:61
+msgid "远程ID"
+msgstr "Remote ID"
+
+#: .\api\front_locale.py:62
+msgid "远程别名"
+msgstr "Remote Alias"
+
+#: .\api\front_locale.py:63 .\api\models_work.py:11 .\api\models_work.py:48
+#: .\api\models_work.py:126
+msgid "用户ID"
+msgstr "User ID"
+
+#: .\api\front_locale.py:64
+msgid "用户别名"
+msgstr "User Alias"
+
+#: .\api\front_locale.py:65
+msgid "用户IP"
+msgstr "User IP"
+
+#: .\api\front_locale.py:66
+msgid "文件大小"
+msgstr "Filesize"
+
+#: .\api\front_locale.py:67
+msgid "发送/接受"
+msgstr "Sent/Received"
+
+#: .\api\front_locale.py:68
+msgid "记录于"
+msgstr "Logged At"
+
+#: .\api\front_locale.py:69
+msgid "连接开始时间"
+msgstr "Connection Start Time\t"
+
+#: .\api\front_locale.py:70
+msgid "连接结束时间"
+msgstr "Connection End Time"
+
+#: .\api\front_locale.py:71
+msgid "时长"
+msgstr "Duration"
+
+#: .\api\front_locale.py:72 .\api\templates\base.html:40
+msgid "连接日志"
+msgstr "Connection Log"
+
+#: .\api\front_locale.py:73 .\api\templates\base.html:41
+msgid "文件传输日志"
+msgstr "File Transfer Log"
+
+#: .\api\front_locale.py:74
+msgid "页码 #"
+msgstr "Page #"
+
+#: .\api\front_locale.py:75
+msgid "下一页 #"
+msgstr "Next #"
+
+#: .\api\front_locale.py:76
+msgid "上一页 #"
+msgstr "Previous #"
+
+#: .\api\front_locale.py:77
+#, fuzzy
+#| msgid "上一页"
+msgid "第一页"
+msgstr "First"
+
+#: .\api\front_locale.py:78
+#, fuzzy
+#| msgid "上一页"
+msgid "上页"
+msgstr "Previous Page"
+
#: .\api\models_user.py:40
msgid "登录信息:"
msgstr "Login Information:"
@@ -288,10 +382,6 @@ msgstr "User List"
msgid "RustDesk ID"
msgstr "RustDesk ID"
-#: .\api\models_work.py:11 .\api\models_work.py:48 .\api\models_work.py:96
-msgid "用户ID"
-msgstr "User ID"
-
#: .\api\models_work.py:12
msgid "uuid"
msgstr "UUID"
@@ -364,67 +454,69 @@ msgstr "Device"
msgid "设备列表"
msgstr "Device List"
-#: .\api\models_work.py:97
+#: .\api\models_work.py:127
msgid "链接Key"
msgstr "Link Key"
-#: .\api\models_work.py:98
+#: .\api\models_work.py:128
msgid "机器ID列表"
msgstr "Machine ID List"
-#: .\api\models_work.py:99
+#: .\api\models_work.py:129
msgid "是否使用"
msgstr "Is Used"
-#: .\api\models_work.py:100
+#: .\api\models_work.py:130
msgid "是否过期"
msgstr "Is Expired"
-#: .\api\models_work.py:101
+#: .\api\models_work.py:131
msgid "生成时间"
msgstr "Generation Time"
-#: .\api\models_work.py:107
+#: .\api\models_work.py:137
msgid "分享链接"
msgstr "Share Link"
-#: .\api\models_work.py:108
+#: .\api\models_work.py:138
msgid "链接列表"
msgstr "Link List"
-#: .\api\views_api.py:19
+#: .\api\views_api.py:20
msgid "请求方式错误!请使用POST方式。"
msgstr "Request method error! Please use the POST method."
-#: .\api\views_api.py:33
+#: .\api\views_api.py:34
msgid "帐号或密码错误!请重试,多次重试后将被锁定IP!"
-msgstr "Account or password error! Please retry. After multiple retries, the IP will be locked!"
+msgstr ""
+"Account or password error! Please retry. After multiple retries, the IP will "
+"be locked!"
-#: .\api\views_api.py:71
+#: .\api\views_api.py:72
msgid "请求方式错误!"
msgstr "Request method error!"
-#: .\api\views_api.py:79
+#: .\api\views_api.py:80
msgid "异常请求!"
msgstr "Abnormal request!"
-#: .\api\views_api.py:92 .\api\views_api.py:212
+#: .\api\views_api.py:93 .\api\views_api.py:213
msgid "错误的提交方式!"
msgstr "Incorrect submission method!"
-#: .\api\views_api.py:120
+#: .\api\views_api.py:121
msgid "拉取列表错误!"
msgstr "Error fetching list!"
-#: .\api\views_api.py:199
+#: .\api\views_api.py:200
msgid "更新地址簿有误"
msgstr "Error updating address book"
-#: .\api\views_api.py:246 .\api\views_front.py:207 .\api\views_front.py:226
+#: .\api\views_api.py:247 .\api\views_front.py:207 .\api\views_front.py:226
msgid "在线"
msgstr "Online"
-#: .\api\views_api.py:252
+#: .\api\views_api.py:308
msgid "好的"
msgstr "Okay"
@@ -435,12 +527,15 @@ msgstr "The parameter received by model_to_dict must be a model object"
#: .\api\views_front.py:55
#, python-brace-format
msgid "model_to_dict,要替换成{replace_field}字段已经存在了"
-msgstr "model_to_dict, the field to be replaced with {replace_field} already exists"
+msgstr ""
+"model_to_dict, the field to be replaced with {replace_field} already exists"
#: .\api\views_front.py:60
#, python-brace-format
msgid "model_to_dict,要新增默认值,但字段{default_key}已经存在了"
-msgstr "model_to_dict, to add default values, but the field {default_key} already exists"
+msgstr ""
+"model_to_dict, to add default values, but the field {default_key} already "
+"exists"
#: .\api\views_front.py:134
msgid "出了点问题,未获取用户名或密码。"
@@ -460,7 +555,9 @@ msgstr "Username must be at least 3 characters"
#: .\api\views_front.py:165
msgid "密码长度不符合要求, 应在8~20位。"
-msgstr "Password length does not meet requirements, should be between 8~20 characters."
+msgstr ""
+"Password length does not meet requirements, should be between 8~20 "
+"characters."
#: .\api\views_front.py:171
msgid "用户名已存在。"
@@ -485,3 +582,11 @@ msgstr "Device Information Table"
#: .\api\views_front.py:351
msgid "数据为空。"
msgstr "Data is empty."
+
+#: .\api\views_front.py:373 .\api\views_front.py:378 .\api\views_front.py:409
+#: .\api\views_front.py:414
+msgid "UNKNOWN"
+msgstr ""
+
+#~ msgid "未知"
+#~ msgstr "UNKNOWN"
diff --git a/rustdesk_server_api/settings.py b/rustdesk_server_api/settings.py
index 86ccce6..e65d4b6 100644
--- a/rustdesk_server_api/settings.py
+++ b/rustdesk_server_api/settings.py
@@ -44,6 +44,7 @@
#==========数据库配置 结束=====================
LANGUAGE_CODE = os.environ.get("LANGUAGE_CODE", 'zh-hans')
+##LANGUAGE_CODE = os.environ.get("LANGUAGE_CODE", 'en')
# Application definition