From a8b07cbc3548cf2ed2beb82c07c715b6585fff27 Mon Sep 17 00:00:00 2001 From: kingmo888 <17401091+kingmo888@users.noreply.github.com> Date: Fri, 15 Mar 2024 23:54:34 +0800 Subject: [PATCH] Increase English language support --- .gitignore | 3 +- README.md | 5 +- api/admin_user.py | 16 +- api/front_locale.py | 60 +++ ...03_alter_rustdesdevice_options_and_more.py | 238 +++++++++ ...04_alter_rustdesdevice_options_and_more.py | 232 +++++++++ api/models_user.py | 14 +- api/models_work.py | 78 +-- api/templates/base.html | 13 +- api/templates/login.html | 15 +- api/templates/msg.html | 3 +- api/templates/reg.html | 21 +- api/templates/share.html | 25 +- api/templates/show_work.html | 77 +-- api/templatetags/__init__.py | 0 api/templatetags/my_filters.py | 8 + api/views.py | 1 + api/views_api.py | 22 +- api/views_front.py | 31 +- db/db.sqlite3 | Bin 155648 -> 155648 bytes locale/en/LC_MESSAGES/django.mo | Bin 0 -> 8128 bytes locale/en/LC_MESSAGES/django.po | 487 ++++++++++++++++++ rustdesk_server_api/settings.py | 15 +- rustdesk_server_api/urls.py | 3 + 新建文本文档.txt | 4 + 25 files changed, 1213 insertions(+), 158 deletions(-) create mode 100644 api/front_locale.py create mode 100644 api/migrations/0003_alter_rustdesdevice_options_and_more.py create mode 100644 api/migrations/0004_alter_rustdesdevice_options_and_more.py create mode 100644 api/templatetags/__init__.py create mode 100644 api/templatetags/my_filters.py create mode 100644 locale/en/LC_MESSAGES/django.mo create mode 100644 locale/en/LC_MESSAGES/django.po create mode 100644 新建文本文档.txt diff --git a/.gitignore b/.gitignore index 7478fcd..5167aa8 100644 --- a/.gitignore +++ b/.gitignore @@ -25,4 +25,5 @@ dist_py38 LICENSE.rst -db/test_db.sqlite3 \ No newline at end of file +db/test_db.sqlite3 +job2en.py \ No newline at end of file diff --git a/README.md b/README.md index 930dede..a3ceac8 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@ # rustdesk-api-server -## 如果项目有帮到你,给个star不过分吧? - ## 请使用客户端最新版本1.2.3 [The English explanation is available by clicking here.](https://github.com/kingmo888/rustdesk-api-server/blob/master/README_EN.md) @@ -9,7 +7,7 @@
一个 python 实现的 Rustdesk API 接口,支持 WebUI 管理
-
+
@@ -142,6 +140,7 @@ services:
| `MYSQL_PASSWORD` | 可选,默认 `-` | MYSQL数据库的密码 |
| `MYSQL_PORT` | 可选,默认 `3306` | MYSQL数据库端口 |
| 数据库配置 | -- 结束 -- | 查看【[sqlite3迁移mysql教程](/tutorial/sqlite2mysql.md)】 |
+| `LANGUAGE_CODE` | 可选,默认 `zh-hans` | 语言,支持中文(`zh-hans`)、英语(`en`) |
## 使用问题
diff --git a/api/admin_user.py b/api/admin_user.py
index 898a04d..46d9618 100644
--- a/api/admin_user.py
+++ b/api/admin_user.py
@@ -5,14 +5,14 @@ from django import forms
from django.contrib.auth.models import Group
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.forms import ReadOnlyPasswordHashField
-
+from django.utils.translation import gettext as _
class UserCreationForm(forms.ModelForm):
"""A form for creating new users. Includes all the required
fields, plus a repeated password."""
- password1 = forms.CharField(label='密码', widget=forms.PasswordInput)
- password2 = forms.CharField(label='再次输入密码', widget=forms.PasswordInput)
+ password1 = forms.CharField(label=_('密码'), widget=forms.PasswordInput)
+ password2 = forms.CharField(label=_('再次输入密码'), widget=forms.PasswordInput)
class Meta:
model = models.UserProfile
@@ -23,7 +23,7 @@ class UserCreationForm(forms.ModelForm):
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
if password1 and password2 and password1 != password2:
- raise forms.ValidationError("密码校验失败,两次密码不一致。")
+ raise forms.ValidationError(_("密码校验失败,两次密码不一致。"))
return password2
@@ -41,7 +41,7 @@ class UserChangeForm(forms.ModelForm):
the user, but replaces the password field with admin's
password hash display field.
"""
- password = ReadOnlyPasswordHashField(label=("密码Hash值"), help_text=("点击修改密码."))
+ password = ReadOnlyPasswordHashField(label=(_("密码Hash值")), help_text=("点击修改密码."))
class Meta:
model = models.UserProfile
fields = ('username', 'is_active', 'is_admin')
@@ -72,7 +72,7 @@ class UserAdmin(BaseUserAdmin):
list_display = ('username', 'rid')
list_filter = ('is_admin', 'is_active')
fieldsets = (
- ('基本信息', {'fields': ('username', 'password', 'is_active', 'is_admin', 'rid', 'uuid', 'deviceInfo',)}),
+ (_('基本信息'), {'fields': ('username', 'password', 'is_active', 'is_admin', 'rid', 'uuid', 'deviceInfo',)}),
)
readonly_fields = ( 'rid', 'uuid')
@@ -95,5 +95,5 @@ admin.site.register(models.RustDeskPeer, models.RustDeskPeerAdmin)
admin.site.register(models.RustDesDevice, models.RustDesDeviceAdmin)
admin.site.register(models.ShareLink, models.ShareLinkAdmin)
admin.site.unregister(Group)
-admin.site.site_header = 'RustDesk自建Web'
-admin.site.site_title = '未定义'
\ No newline at end of file
+admin.site.site_header = _('RustDesk自建Web')
+admin.site.site_title = _('未定义')
\ No newline at end of file
diff --git a/api/front_locale.py b/api/front_locale.py
new file mode 100644
index 0000000..03d478a
--- /dev/null
+++ b/api/front_locale.py
@@ -0,0 +1,60 @@
+from django.utils.translation import gettext as _
+
+
+_('管理后台')
+_('ID列表')
+_('分享机器')
+_('这么简易的东西,忘记密码这功能就没必要了吧。')
+_('立即注册')
+_('创建时间')
+_('注册成功,请前往登录页登录。')
+_('注册日期')
+_('2、所分享的机器,被分享人享有相同的权限,如果机器设置了保存密码,被分享人也可以直接连接。')
+_('导出xlsx')
+_('生成分享链接')
+_('请输入8~20位密码。可以包含字母、数字和特殊字符。')
+_('尾页')
+_('请确认密码')
+_('注册')
+_('内存')
+_('首页')
+_('网页控制')
+_('注册时间')
+_('链接地址')
+_('请输入密码')
+_('系统用户名')
+_('状态')
+_('已有账号?立即登录')
+_('密码')
+_('别名')
+_('上一页')
+_('更新时间')
+_('综合屏')
+_('平台')
+_('全部用户')
+_('注册页')
+_('分享机器给其他用户')
+_('所有设备')
+_('连接密码')
+_('设备统计')
+_('所属用户')
+_('分享')
+_('请输入用户名')
+_('1、链接有效期为15分钟,切勿随意分享给他人。')
+_('CPU')
+_('客户端ID')
+_('下一页')
+_('登录')
+_('退出')
+_('请将要分享的机器调整到右侧')
+_('成功!如需分享,请复制以下链接给其他人:
')
+_('忘记密码?')
+_('计算机名')
+_('两次输入密码不一致!')
+_('页码')
+_('版本')
+_('用户名')
+_('3、为保障安全,链接有效期为15分钟、链接仅有效1次。链接一旦被(非分享人的登录用户)访问,分享生效,后续访问链接失效。')
+_('系统')
+_('我的机器')
+_('信息')
\ No newline at end of file
diff --git a/api/migrations/0003_alter_rustdesdevice_options_and_more.py b/api/migrations/0003_alter_rustdesdevice_options_and_more.py
new file mode 100644
index 0000000..608ef94
--- /dev/null
+++ b/api/migrations/0003_alter_rustdesdevice_options_and_more.py
@@ -0,0 +1,238 @@
+# Generated by Django 4.2.7 on 2024-03-15 20:52
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("api", "0002_alter_rustdesdevice_cpu_alter_rustdesdevice_hostname_and_more"),
+ ]
+
+ 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="Creation 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 Activated"),
+ ),
+ migrations.AlterField(
+ model_name="userprofile",
+ name="is_admin",
+ field=models.BooleanField(default=False, verbose_name="Is Admin"),
+ ),
+ migrations.AlterField(
+ model_name="userprofile",
+ name="username",
+ field=models.CharField(max_length=50, unique=True, verbose_name="Username"),
+ ),
+ ]
diff --git a/api/migrations/0004_alter_rustdesdevice_options_and_more.py b/api/migrations/0004_alter_rustdesdevice_options_and_more.py
new file mode 100644
index 0000000..f59f783
--- /dev/null
+++ b/api/migrations/0004_alter_rustdesdevice_options_and_more.py
@@ -0,0 +1,232 @@
+# Generated by Django 4.2.7 on 2024-03-15 23:52
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("api", "0003_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/models_user.py b/api/models_user.py
index 058baac..65e9fff 100644
--- a/api/models_user.py
+++ b/api/models_user.py
@@ -4,7 +4,7 @@ from django.contrib.auth.models import (
BaseUserManager,AbstractBaseUser,PermissionsMixin
)
from .models_work import *
-
+from django.utils.translation import gettext as _
class MyUserManager(BaseUserManager):
def create_user(self, username, password=None):
@@ -29,7 +29,7 @@ class MyUserManager(BaseUserManager):
class UserProfile(AbstractBaseUser, PermissionsMixin):
- username = models.CharField('用户名',
+ username = models.CharField(_('用户名'),
unique=True,
max_length=50)
@@ -37,10 +37,10 @@ class UserProfile(AbstractBaseUser, PermissionsMixin):
uuid = models.CharField(verbose_name='uuid', max_length=60)
autoLogin = models.BooleanField(verbose_name='autoLogin', default=True)
rtype = models.CharField(verbose_name='rtype', max_length=20)
- deviceInfo = models.TextField(verbose_name='登录信息:', blank=True)
+ deviceInfo = models.TextField(verbose_name=_('登录信息:'), blank=True)
- is_active = models.BooleanField(verbose_name='是否激活', default=True)
- is_admin = models.BooleanField(verbose_name='是否管理员', default=False)
+ is_active = models.BooleanField(verbose_name=_('是否激活'), default=True)
+ is_admin = models.BooleanField(verbose_name=_('是否管理员'), default=False)
objects = MyUserManager()
@@ -79,8 +79,8 @@ class UserProfile(AbstractBaseUser, PermissionsMixin):
class Meta:
- verbose_name = "用户"
- verbose_name_plural = "用户列表"
+ verbose_name = _("用户")
+ verbose_name_plural = _("用户列表")
permissions = (
("view_task", "Can see available tasks"),
("change_task_status", "Can change the status of tasks"),
diff --git a/api/models_work.py b/api/models_work.py
index 011c542..70ec29a 100644
--- a/api/models_work.py
+++ b/api/models_work.py
@@ -1,22 +1,22 @@
# cython:language_level=3
from django.db import models
from django.contrib import admin
-
+from django.utils.translation import gettext as _
class RustDeskToken(models.Model):
''' Token
'''
- username = models.CharField(verbose_name='用户名', max_length=20)
- rid = models.CharField(verbose_name='RustDesk ID', max_length=16)
- uid = models.CharField(verbose_name='用户ID', max_length=16)
- uuid = models.CharField(verbose_name='uuid', max_length=60)
- access_token = models.CharField(verbose_name='access_token', max_length=60, blank=True)
- create_time = models.DateTimeField(verbose_name='登录时间', auto_now_add=True)
+ username = models.CharField(verbose_name=_('用户名'), max_length=20)
+ rid = models.CharField(verbose_name=_('RustDesk ID'), max_length=16)
+ uid = models.CharField(verbose_name=_('用户ID'), max_length=16)
+ uuid = models.CharField(verbose_name=_('uuid'), max_length=60)
+ access_token = models.CharField(verbose_name=_('access_token'), max_length=60, blank=True)
+ create_time = models.DateTimeField(verbose_name=_('登录时间'), auto_now_add=True)
#expire_time = models.DateTimeField(verbose_name='过期时间')
class Meta:
ordering = ('-username',)
verbose_name = "Token"
- verbose_name_plural = "Token列表"
+ verbose_name_plural = _("Token列表")
class RustDeskTokenAdmin(admin.ModelAdmin):
list_display = ('username', 'uid')
@@ -27,14 +27,14 @@ class RustDeskTokenAdmin(admin.ModelAdmin):
class RustDeskTag(models.Model):
''' Tags
'''
- uid = models.CharField(verbose_name='所属用户ID', max_length=16)
- tag_name = models.CharField(verbose_name='标签名称', max_length=60)
- tag_color = models.CharField(verbose_name='标签颜色', max_length=60, blank=True)
+ uid = models.CharField(verbose_name=_('所属用户ID'), max_length=16)
+ tag_name = models.CharField(verbose_name=_('标签名称'), max_length=60)
+ tag_color = models.CharField(verbose_name=_('标签颜色'), max_length=60, blank=True)
class Meta:
ordering = ('-uid',)
verbose_name = "Tags"
- verbose_name_plural = "Tags列表"
+ verbose_name_plural = _("Tags列表")
class RustDeskTagAdmin(admin.ModelAdmin):
list_display = ('tag_name', 'uid', 'tag_color')
@@ -45,19 +45,19 @@ class RustDeskTagAdmin(admin.ModelAdmin):
class RustDeskPeer(models.Model):
''' Pees
'''
- uid = models.CharField(verbose_name='用户ID', max_length=16)
- rid = models.CharField(verbose_name='客户端ID', max_length=60)
- username = models.CharField(verbose_name='系统用户名', max_length=20)
- hostname = models.CharField(verbose_name='操作系统名', max_length=30)
- alias = models.CharField(verbose_name='别名', max_length=30)
- platform = models.CharField(verbose_name='平台', max_length=30)
- tags = models.CharField(verbose_name='标签', max_length=30)
- rhash = models.CharField(verbose_name='设备链接密码', max_length=60)
+ uid = models.CharField(verbose_name=_('用户ID'), max_length=16)
+ rid = models.CharField(verbose_name=_('客户端ID'), max_length=60)
+ username = models.CharField(verbose_name=_('系统用户名'), max_length=20)
+ hostname = models.CharField(verbose_name=_('操作系统名'), max_length=30)
+ alias = models.CharField(verbose_name=_('别名'), max_length=30)
+ platform = models.CharField(verbose_name=_('平台'), max_length=30)
+ tags = models.CharField(verbose_name=_('标签'), max_length=30)
+ rhash = models.CharField(verbose_name=_('设备链接密码'), max_length=60)
class Meta:
ordering = ('-username',)
verbose_name = "Peers"
- verbose_name_plural = "Peers列表"
+ verbose_name_plural = _("Peers列表" )
class RustDeskPeerAdmin(admin.ModelAdmin):
@@ -67,21 +67,21 @@ class RustDeskPeerAdmin(admin.ModelAdmin):
class RustDesDevice(models.Model):
- rid = models.CharField(verbose_name='客户端ID', max_length=60, blank=True)
+ rid = models.CharField(verbose_name=_('客户端ID'), max_length=60, blank=True)
cpu = models.CharField(verbose_name='CPU', max_length=100)
- hostname = models.CharField(verbose_name='主机名', max_length=100)
- memory = models.CharField(verbose_name='内存', max_length=100)
- os = models.CharField(verbose_name='操作系统', max_length=100)
+ hostname = models.CharField(verbose_name=_('主机名'), max_length=100)
+ memory = models.CharField(verbose_name=_('内存'), max_length=100)
+ os = models.CharField(verbose_name=_('操作系统'), max_length=100)
uuid = models.CharField(verbose_name='uuid', max_length=100)
- username = models.CharField(verbose_name='系统用户名', max_length=100, blank=True)
- version = models.CharField(verbose_name='客户端版本', max_length=100)
- create_time = models.DateTimeField(verbose_name='设备注册时间', auto_now_add=True)
- update_time = models.DateTimeField(verbose_name='设备更新时间', auto_now=True, blank=True)
+ username = models.CharField(verbose_name=_('系统用户名'), max_length=100, blank=True)
+ version = models.CharField(verbose_name=_('客户端版本'), max_length=100)
+ create_time = models.DateTimeField(verbose_name=_('设备注册时间'), auto_now_add=True)
+ update_time = models.DateTimeField(verbose_name=('设备更新时间'), auto_now=True, blank=True)
class Meta:
ordering = ('-rid',)
- verbose_name = "设备"
- verbose_name_plural = "设备列表"
+ verbose_name = _("设备")
+ verbose_name_plural = _("设备列表" )
class RustDesDeviceAdmin(admin.ModelAdmin):
list_display = ('rid', 'hostname', 'memory', 'uuid', 'version', 'create_time', 'update_time')
@@ -93,19 +93,19 @@ class RustDesDeviceAdmin(admin.ModelAdmin):
class ShareLink(models.Model):
''' 分享链接
'''
- uid = models.CharField(verbose_name='用户ID', max_length=16)
- shash = models.CharField(verbose_name='链接Key', max_length=60)
- peers = models.CharField(verbose_name='机器ID列表', max_length=20)
- is_used = models.BooleanField(verbose_name='是否使用', default=False)
- is_expired = models.BooleanField(verbose_name='是否过期', default=False)
- create_time = models.DateTimeField(verbose_name='生成时间', auto_now_add=True)
+ uid = models.CharField(verbose_name=_('用户ID'), max_length=16)
+ shash = models.CharField(verbose_name=_('链接Key'), max_length=60)
+ peers = models.CharField(verbose_name=_('机器ID列表'), max_length=20)
+ is_used = models.BooleanField(verbose_name=_('是否使用'), default=False)
+ is_expired = models.BooleanField(verbose_name=_('是否过期'), default=False)
+ create_time = models.DateTimeField(verbose_name=_('生成时间'), auto_now_add=True)
class Meta:
ordering = ('-create_time',)
- verbose_name = "分享链接"
- verbose_name_plural = "链接列表"
+ verbose_name = _("分享链接")
+ verbose_name_plural = _("链接列表" )
class ShareLinkAdmin(admin.ModelAdmin):
diff --git a/api/templates/base.html b/api/templates/base.html
index 96f5ae8..89f1fa6 100644
--- a/api/templates/base.html
+++ b/api/templates/base.html
@@ -1,4 +1,5 @@
{% load static %}
+{% load i18n %}
@@ -27,19 +28,19 @@