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 @@

diff --git a/api/templates/login.html b/api/templates/login.html index ebed222..3193cc9 100644 --- a/api/templates/login.html +++ b/api/templates/login.html @@ -1,10 +1,11 @@ {% load static %} +{% load my_filters %} - 登录_【RustDeskWeb】 + {{ "登录" | translate }}_【RustDeskWeb】 @@ -13,21 +14,21 @@
-
登录
+
{{ "登录" | translate }}
-
-

-

立即注册忘记密码?

+

{{ "立即注册" | translate }}{{ "忘记密码?" | translate }}

@@ -59,7 +60,7 @@ return false; }) $('.fr').on('click', function(){ - layer.alert("这么简易的东西,忘记密码这功能就没必要了吧。",{icon:5}); + layer.alert("{{ "这么简易的东西,忘记密码这功能就没必要了吧。" | translate }}",{icon:5}); }) diff --git a/api/templates/msg.html b/api/templates/msg.html index 86ff15c..5666191 100644 --- a/api/templates/msg.html +++ b/api/templates/msg.html @@ -1,6 +1,7 @@ {% extends "base.html" %} +{% load my_filters %} {% block title %}{{title}}{% endblock %} -{% block legend_name %}信息{% endblock %} +{% block legend_name %}{{ "信息" | translate }}{% endblock %} {% block content %}
diff --git a/api/templates/reg.html b/api/templates/reg.html index c1e7faf..be6a6af 100644 --- a/api/templates/reg.html +++ b/api/templates/reg.html @@ -1,4 +1,5 @@ {% load static %} +{% load my_filters %} @@ -6,7 +7,7 @@ - 注册_【RustDeskWeb】 + {{ "注册" | translate }}_【RustDeskWeb】 @@ -14,14 +15,14 @@