perf: 优化国际化、优化显示

This commit is contained in:
kuaifan 2024-10-24 23:42:20 +08:00
parent 6b4b88aba7
commit 1f6ef62499
31 changed files with 229 additions and 44 deletions

View File

@ -82,15 +82,6 @@ class Report extends AbstractModel
return $this->hasOne(User::class, "userid", "userid");
}
public function getTypeAttribute($value): string
{
return match ($value) {
Report::WEEKLY => "周报",
Report::DAILY => "日报",
default => "",
};
}
public function getContentAttribute($value): string
{
return htmlspecialchars_decode($value);

View File

@ -589,7 +589,7 @@ class WebSocketDialogMsg extends AbstractModel
return "[{$action}] {$this->previewMsg(false, $data['msg']['data'])}";
case 'notice':
return $data['msg']['notice'];
return Doo::translate($data['msg']['notice']);
case 'template':
return $this->previewTemplateMsg($data['msg']);

View File

@ -326,6 +326,10 @@ class Extranet
$text = "心灵鸡汤:{$data}";
}
break;
default:
$text = "";
break;
}
return $text;
}

View File

@ -1702,3 +1702,18 @@ WiFi签到延迟时长为±1分钟。
手动签到
签到备注
重复打卡提醒
你确定要退出项目【(*)】吗?
你确定要退出【(*)】共享成员吗?
请输入状态名称
当前项目还没有创建工作流
创建工作流
流转到【(*)】时改变任务负责人为状态负责人,原本的任务负责人移至协助人员。
选择群组
输入关键词搜索群
仅支持选择个人群转为部门群
含有子部门无法修改上级部门
删除部门
你确定要删除【(*)】部门吗?
注意:此操作不可恢复,部门下的成员将移至默认部门。
维护中...

View File

@ -19743,13 +19743,13 @@
"key": "含有子部门无法修改上级部门",
"zh": "",
"zh-CHT": "含有子部門無法修改上級部門",
"en": "Cannot modify parent department with sub-departments",
"ko": "하위 부서가 있는 상위 부서를 수정할 수 없습니다",
"ja": "サブ部門がある上位部門を変更できません",
"de": "Übergeordnete Abteilung mit Unterabteilungen kann nicht geändert werden",
"fr": "Impossible de modifier le département parent avec des sous-départements",
"id": "Tidak dapat mengubah departemen induk dengan sub-departemen",
"ru": "Невозможно изменить родительский отдел с подотделами"
"en": "Cannot modify parent department when subdepartments exist",
"ko": "하위 부서가 있는 경우 상위 부서를 수정할 수 없습니다",
"ja": "子部門がある場合、上位部門を変更できません",
"de": "Übergeordnete Abteilung kann nicht geändert werden, wenn Unterabteilungen vorhanden sind",
"fr": "Impossible de modifier le département parent lorsqu'il existe des sous-départements",
"id": "Tidak dapat mengubah departemen induk ketika terdapat subdepartemen",
"ru": "Невозможно изменить родительский отдел при наличии подотделов"
},
{
"key": "请选择正确的部门负责人",
@ -24766,5 +24766,161 @@
"fr": "Rappel de pointage en double",
"id": "Pengingat Check-in Duplikat",
"ru": "Напоминание о дублирующем входе"
},
{
"key": "你确定要退出项目【(*)】吗?",
"zh": "",
"zh-CHT": "你確定要退出項目【(*)】嗎?",
"en": "Are you sure you want to exit the project 【(*)】?",
"ko": "프로젝트 【(*)】에서 나가시겠습니까?",
"ja": "プロジェクト【(*)】から退出してもよろしいですか?",
"de": "Sind Sie sicher, dass Sie das Projekt 【(*)】 verlassen möchten?",
"fr": "Êtes-vous sûr de vouloir quitter le projet 【(*)】 ?",
"id": "Apakah Anda yakin ingin keluar dari proyek 【(*)】?",
"ru": "Вы уверены, что хотите выйти из проекта 【(*)】?"
},
{
"key": "你确定要退出【(*)】共享成员吗?",
"zh": "",
"zh-CHT": "你確定要退出【(*)】共享成員嗎?",
"en": "Are you sure you want to leave the shared membership of 【(*)】?",
"ko": "【(*)】 공유 멤버에서 나가시겠습니까?",
"ja": "【(*)】の共有メンバーから退出してもよろしいですか?",
"de": "Sind Sie sicher, dass Sie die gemeinsame Mitgliedschaft von 【(*)】 verlassen möchten?",
"fr": "Êtes-vous sûr de vouloir quitter le statut de membre partagé de 【(*)】 ?",
"id": "Apakah Anda yakin ingin keluar dari keanggotaan bersama 【(*)】?",
"ru": "Вы уверены, что хотите выйти из общего членства 【(*)】?"
},
{
"key": "请输入状态名称",
"zh": "",
"zh-CHT": "請輸入狀態名稱",
"en": "Please enter the status name",
"ko": "상태 이름을 입력해주세요",
"ja": "ステータス名を入力してください",
"de": "Bitte geben Sie den Statusnamen ein",
"fr": "Veuillez saisir le nom du statut",
"id": "Silakan masukkan nama status",
"ru": "Пожалуйста, введите название статуса"
},
{
"key": "当前项目还没有创建工作流",
"zh": "",
"zh-CHT": "當前項目還沒有創建工作流",
"en": "No workflow has been created for the current project yet",
"ko": "현재 프로젝트에 아직 워크플로우가 생성되지 않았습니다",
"ja": "現在のプロジェクトにはまだワークフローが作成されていません",
"de": "Für das aktuelle Projekt wurde noch kein Workflow erstellt",
"fr": "Aucun flux de travail n'a encore été créé pour le projet actuel",
"id": "Belum ada alur kerja yang dibuat untuk proyek saat ini",
"ru": "Для текущего проекта еще не создан рабочий процесс"
},
{
"key": "创建工作流",
"zh": "",
"zh-CHT": "創建工作流",
"en": "Create workflow",
"ko": "워크플로우 생성",
"ja": "ワークフローを作成",
"de": "Workflow erstellen",
"fr": "Créer un flux de travail",
"id": "Buat alur kerja",
"ru": "Создать рабочий процесс"
},
{
"key": "流转到【(*)】时改变任务负责人为状态负责人,原本的任务负责人移至协助人员。",
"zh": "",
"zh-CHT": "流轉到【(*)】時改變任務負責人為狀態負責人,原本的任務負責人移至協助人員。",
"en": "When transitioning to 【(*)】, change the task owner to the status owner, and move the original task owner to assistants.",
"ko": "【(*)】로 전환할 때 작업 담당자를 상태 담당자로 변경하고, 원래 작업 담당자를 보조 인원으로 이동합니다.",
"ja": "【(*)】に移行する際、タスク担当者をステータス担当者に変更し、元のタスク担当者を補助者に移動します。",
"de": "Bei der Überführung in 【(*)】 wird der Aufgabenverantwortliche zum Statusverantwortlichen geändert und der ursprüngliche Aufgabenverantwortliche zu den Assistenten verschoben.",
"fr": "Lors du passage à 【(*)】, changer le responsable de la tâche en responsable du statut, et déplacer le responsable initial de la tâche vers les assistants.",
"id": "Saat beralih ke 【(*)】, ubah pemilik tugas menjadi pemilik status, dan pindahkan pemilik tugas asli ke asisten.",
"ru": "При переходе в 【(*)】 изменить владельца задачи на владельца статуса, а исходного владельца задачи переместить в помощники."
},
{
"key": "选择群组",
"zh": "",
"zh-CHT": "選擇群組",
"en": "Select group",
"ko": "그룹 선택",
"ja": "グループを選択",
"de": "Gruppe auswählen",
"fr": "Sélectionner un groupe",
"id": "Pilih grup",
"ru": "Выбрать группу"
},
{
"key": "输入关键词搜索群",
"zh": "",
"zh-CHT": "輸入關鍵詞搜索群",
"en": "Enter keywords to search for groups",
"ko": "키워드를 입력하여 그룹 검색",
"ja": "キーワードを入力してグループを検索",
"de": "Geben Sie Schlüsselwörter ein, um nach Gruppen zu suchen",
"fr": "Entrez des mots-clés pour rechercher des groupes",
"id": "Masukkan kata kunci untuk mencari grup",
"ru": "Введите ключевые слова для поиска групп"
},
{
"key": "仅支持选择个人群转为部门群",
"zh": "",
"zh-CHT": "僅支持選擇個人群轉為部門群",
"en": "Only supports converting personal groups to department groups",
"ko": "개인 그룹을 부서 그룹으로 전환하는 것만 지원합니다",
"ja": "個人グループを部門グループに変換することのみサポートしています",
"de": "Unterstützt nur die Umwandlung von persönlichen Gruppen in Abteilungsgruppen",
"fr": "Prend en charge uniquement la conversion de groupes personnels en groupes départementaux",
"id": "Hanya mendukung konversi grup pribadi menjadi grup departemen",
"ru": "Поддерживается только преобразование личных групп в группы отделов"
},
{
"key": "删除部门",
"zh": "",
"zh-CHT": "刪除部門",
"en": "Delete department",
"ko": "부서 삭제",
"ja": "部門を削除",
"de": "Abteilung löschen",
"fr": "Supprimer le département",
"id": "Hapus departemen",
"ru": "Удалить отдел"
},
{
"key": "你确定要删除【(*)】部门吗?",
"zh": "",
"zh-CHT": "你確定要刪除【(*)】部門嗎?",
"en": "Are you sure you want to delete the 【(*)】 department?",
"ko": "【(*)】 부서를 삭제하시겠습니까?",
"ja": "【(*)】部門を削除してもよろしいですか?",
"de": "Sind Sie sicher, dass Sie die Abteilung 【(*)】 löschen möchten?",
"fr": "Êtes-vous sûr de vouloir supprimer le département 【(*)】 ?",
"id": "Apakah Anda yakin ingin menghapus departemen 【(*)】?",
"ru": "Вы уверены, что хотите удалить отдел 【(*)】?"
},
{
"key": "注意:此操作不可恢复,部门下的成员将移至默认部门。",
"zh": "",
"zh-CHT": "注意:此操作不可恢復,部門下的成員將移至默認部門。",
"en": "Note: This action is irreversible. Members of the department will be moved to the default department.",
"ko": "주의: 이 작업은 되돌릴 수 없습니다. 부서의 구성원들은 기본 부서로 이동됩니다.",
"ja": "注意:この操作は元に戻せません。部門のメンバーはデフォルトの部門に移動されます。",
"de": "Hinweis: Diese Aktion ist nicht rückgängig zu machen. Mitglieder der Abteilung werden in die Standardabteilung verschoben.",
"fr": "Attention : Cette action est irréversible. Les membres du département seront déplacés vers le département par défaut.",
"id": "Perhatian: Tindakan ini tidak dapat dibatalkan. Anggota departemen akan dipindahkan ke departemen default.",
"ru": "Внимание: Это действие необратимо. Члены отдела будут перемещены в отдел по умолчанию."
},
{
"key": "维护中...",
"zh": "",
"zh-CHT": "維護中...",
"en": "Under maintenance...",
"ko": "유지보수 중...",
"ja": "メンテナンス中...",
"de": "Wartungsarbeiten...",
"fr": "En maintenance...",
"id": "Sedang dalam pemeliharaan...",
"ru": "На техническом обслуживании..."
}
]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -27,7 +27,7 @@
<DropdownItem v-if="operateMenu.link" @click.native="onLinkPreview">{{ $L('打开链接') }}</DropdownItem>
<DropdownItem v-if="operateMenu.img" @click.native="onImagePreview">{{ $L('查看图片') }}</DropdownItem>
<DropdownItem @click.native="onEditing">{{ $L('编辑描述') }}</DropdownItem>
<DropdownItem @click.native="onHistory">{{ $L('历史记录') }}</DropdownItem>
<DropdownItem v-if="operateMenu.history" @click.native="onHistory">{{ $L('历史记录') }}</DropdownItem>
</DropdownMenu>
</Dropdown>
</div>
@ -109,6 +109,7 @@ export default {
checked: null,
link: null,
img: null,
history: true
},
listener: null,
@ -125,6 +126,7 @@ export default {
}
parent = parent.parentNode;
}
this.operateMenu.history = typeof this.$listeners['on-history'] === "function";
},
beforeDestroy() {

View File

@ -409,7 +409,7 @@ import {MarkdownPreview} from "../store/markdown";
case 'todo':
return `[${$A.L(data.msg.action === 'remove' ? '取消待办' : (data.msg.action === 'done' ? '完成' : '设待办'))}] ${$A.getMsgSimpleDesc(data.msg.data)}`
case 'notice':
return data.msg.notice
return $A.L(data.msg.notice)
case 'template':
return $A.templateMsgSimpleDesc(data.msg)
default:

View File

@ -325,7 +325,7 @@ export default {
"project_flow_item": [
{
"id": -10,
"name": "待处理",
"name": this.$L("待处理"),
"status": "start",
"turns": [-10, -11, -12, -13, -14],
"userids": [],
@ -335,7 +335,7 @@ export default {
},
{
"id": -11,
"name": "进行中",
"name": this.$L("进行中"),
"status": "progress",
"turns": [-10, -11, -12, -13, -14],
"userids": [],
@ -345,7 +345,7 @@ export default {
},
{
"id": -12,
"name": "待测试",
"name": this.$L("待测试"),
"status": "test",
"turns": [-10, -11, -12, -13, -14],
"userids": [],
@ -355,7 +355,7 @@ export default {
},
{
"id": -13,
"name": "已完成",
"name": this.$L("已完成"),
"status": "end",
"turns": [-10, -11, -12, -13, -14],
"userids": [],
@ -365,7 +365,7 @@ export default {
},
{
"id": -14,
"name": "已取消",
"name": this.$L("已取消"),
"status": "end",
"turns": [-10, -11, -12, -13, -14],
"userids": [],

View File

@ -88,6 +88,9 @@ export default {
key: 'type',
align: 'center',
width: 90,
render: (h, {row}) => {
return h('AutoTip', this.$L(row.type === 'daily' ? '日报' : '周报'))
}
}, {
title: this.$L("汇报时间"),
key: 'created_at',

View File

@ -132,6 +132,9 @@ export default {
key: 'type',
sortable: true,
width: 90,
render: (h, {row}) => {
return h('AutoTip', this.$L(row.type === 'daily' ? '日报' : '周报'))
}
}, {
title: this.$L("接收时间"),
key: 'receive_at',

View File

@ -199,12 +199,16 @@
}
.browse-list {
max-height: 540px;
display: grid;
grid-template-columns: repeat(auto-fill, minmax(64px, 1fr));
gap: 20px;
max-height: 520px;
overflow: auto;
.browse-item {
margin: 10px 15px;
display: inline-block;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
cursor: pointer;
position: relative;

View File

@ -190,6 +190,7 @@
.report-users {
display: flex;
flex-wrap: wrap;
align-items: flex-start;
line-height: 34px;

View File

@ -549,6 +549,9 @@ body {
margin-top: 20px;
.select-box {
margin-right: 12px;
display: flex;
flex-wrap: wrap;
gap: 4px 2px;
.ivu-select {
width: auto;
max-width: 200px;

View File

@ -35,6 +35,9 @@
.item {
display: flex;
align-items: center;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
> i {
flex-shrink: 0;