From d0804190090b3bb0c4c325c462d5db920bb3e5a6 Mon Sep 17 00:00:00 2001 From: william Date: Wed, 8 Jan 2025 14:14:16 +0800 Subject: [PATCH 1/7] tranditional chinese translation --- .../main/resources/messages_zh_TW.properties | 20 +- .../src/main/webapp/src/locale/zh_TW.json | 494 ++++++++++-------- 2 files changed, 294 insertions(+), 220 deletions(-) diff --git a/docs-core/src/main/resources/messages_zh_TW.properties b/docs-core/src/main/resources/messages_zh_TW.properties index da961212c..b2a425b25 100644 --- a/docs-core/src/main/resources/messages_zh_TW.properties +++ b/docs-core/src/main/resources/messages_zh_TW.properties @@ -1,10 +1,10 @@ -email.template.password_recovery.subject=\u8ACB\u91CD\u65B0\u8A2D\u7F6E\u60A8\u7684\u5BC6\u78BC -email.template.password_recovery.hello=\u60A8\u597D{0}\uFF01 -email.template.password_recovery.instruction1=\u6211\u5011\u6536\u5230\u4E86\u91CD\u7F6E\u5BC6\u78BC\u7684\u8ACB\u6C42\u3002
\u5982\u679C\u60A8\u6C92\u6709\u8ACB\u6C42\u5E6B\u52A9\uFF0C\u8ACB\u5FFD\u7565\u6B64\u96FB\u5B50\u90F5\u4EF6\u3002 -email.template.password_recovery.instruction2=\u8981\u91CD\u7F6E\u60A8\u7684\u5BC6\u78BC\uFF0C\u8ACB\u8A2A\u554F\u4EE5\u4E0B\u93C8\u63A5\uFF1A -email.template.password_recovery.click_here=\u9EDE\u64CA\u9019\u88E1\u91CD\u7F6E\u60A8\u7684\u5BC6\u78BC -email.template.route_step_validate.subject=\u4E00\u4EFD\u6587\u4EF6\u9700\u8981\u4F60\u7684\u95DC\u6CE8 -email.template.route_step_validate.hello={0}\uFF0C\u60A8\u597D. -email.template.route_step_validate.instruction1=\u5DE5\u4F5C\u6D41\u6B65\u9A5F\u5DF2\u7D93\u5206\u914D\u7D66\u60A8\uFF0C\u9700\u8981\u60A8\u7684\u95DC\u6CE8\u3002 -email.template.route_step_validate.instruction2=\u8981\u67E5\u770B\u6587\u6A94\u4E26\u9A57\u8B49\u5DE5\u4F5C\u6D41\u7A0B\uFF0C\u8ACB\u8A2A\u554F\u4EE5\u4E0B\u93C8\u63A5\uFF1A -email.no_html.error=\u60A8\u7684\u96FB\u5B50\u90F5\u4EF6\u5BA2\u6236\u7AEF\u4E0D\u652F\u6301HTML\u683C\u5F0F\u90F5\u4EF6 +email.template.password_recovery.subject=\u8acb\u91cd\u65b0\u8a2d\u7f6e\u60a8\u7684\u5bc6\u78bc +email.template.password_recovery.hello=\u60a8\u597d{0}\uff01 +email.template.password_recovery.instruction1=\u6211\u5011\u6536\u5230\u91cd\u7f6e\u5bc6\u78bc\u7684\u8981\u6c42\u3002
\u5982\u679c\u60a8\u6c92\u6709\u8981\u6c42\u5354\u52a9\uff0c\u8acb\u5ffd\u7565\u6b64\u96fb\u5b50\u90f5\u4ef6\u3002 +email.template.password_recovery.instruction2=\u8981\u91cd\u7f6e\u60a8\u7684\u5bc6\u78bc\uff0c\u8acb\u8a2a\u554f\u4ee5\u4e0b\u9023\u7d50\uff1a +email.template.password_recovery.click_here=\u9ede\u64ca\u9019\u88e1\u91cd\u7f6e\u60a8\u7684\u5bc6\u78bc +email.template.route_step_validate.subject=\u4e00\u4efd\u6587\u4ef6\u9700\u8981\u4f60\u7684\u95dc\u6ce8 +email.template.route_step_validate.hello={0}\uff0c\u60a8\u597d. +email.template.route_step_validate.instruction1=\u5de5\u4f5c\u6d41\u7a0b\u5df2\u7d93\u5206\u914d\u7d66\u60a8\uff0c\u9700\u8981\u60a8\u7684\u95dc\u6ce8\u3002 +email.template.route_step_validate.instruction2=\u8981\u67e5\u770b\u6587\u6a94\u4e26\u5be9\u6838\u5de5\u4f5c\u6d41\u7a0b\uff0c\u8acb\u8a2a\u554f\u4ee5\u4e0b\u9023\u7d50\uff1a +email.no_html.error=\u60a8\u7684\u96fb\u5b50\u90f5\u4ef6\u5ba2\u6236\u7aef\u7a0b\u5f0f\u4e0d\u652f\u63f4HTML\u683c\u5f0f\u90f5\u4ef6 diff --git a/docs-web/src/main/webapp/src/locale/zh_TW.json b/docs-web/src/main/webapp/src/locale/zh_TW.json index 3fd3acbc6..64b6e0b32 100644 --- a/docs-web/src/main/webapp/src/locale/zh_TW.json +++ b/docs-web/src/main/webapp/src/locale/zh_TW.json @@ -1,24 +1,24 @@ { "login": { - "username": "用戶名", + "username": "帳號名", "password": "密碼", "validation_code_required": "請輸入驗證碼", - "validation_code_title": "您的帳號已經激活了雙身份驗證. 請輸入您配置手機app的提供的驗證碼.", + "validation_code_title": "您的帳號已經啟用雙因身份驗證. 請輸入您手機app提供的驗證碼.", "validation_code": "驗證碼", "remember_me": "記住我", "submit": "登錄", - "login_as_guest": "以遊客身份登錄", + "login_as_guest": "以訪客身份登錄", "login_failed_title": "登錄失敗", - "login_failed_message": "用戶名或密碼不正確", - "password_lost_btn": "密碼丟失?", + "login_failed_message": "帳號名或密碼不正確", + "password_lost_btn": "忘記密碼?", "password_lost_sent_title": "發送密碼重置郵件", "password_lost_sent_message": "一封電子郵件已經發送到{{username}}以重置您的密碼", "password_lost_error_title": "密碼重置錯誤", "password_lost_error_message": "無法發送密碼重置電子郵件,請聯繫您的管理員進行手動重置" }, "passwordlost": { - "title": "密碼丟失", - "message": "請輸入您的用戶名以接收密碼重置鏈接。 如果您不記得您的用戶名,請聯繫您的管理員", + "title": "忘記密碼", + "message": "請輸入您的帳號名以接收密碼重置連結。 如果您不記得您的帳號名,請聯繫您的管理員", "submit": "重置我的密碼" }, "passwordreset": { @@ -29,127 +29,127 @@ }, "index": { "toggle_navigation": "切換導航", - "nav_documents": "文檔", + "nav_documents": "文件", "nav_tags": "標籤", - "nav_users_groups": "用戶 & 群組", + "nav_users_groups": "帳號 & 群組", "error_info": "{{ count }} 新錯誤", "logged_as": "以 {{ username }}登錄", "nav_settings": "設置", "logout": "退出", - "global_quota_warning": "提醒!存儲空間已經使用{{current | number: 0}} MB({{percent | number: 1}}%)總計{{total | number: 0}} MB" + "global_quota_warning": "提醒!儲存空間已經使用{{current | number: 0}} MB({{percent | number: 1}}%)總計{{total | number: 0}} MB" }, "document": { - "search_simple": "簡單搜索", - "search_fulltext": "全文搜索", - "search_creator": "創建者", + "search_simple": "簡單搜尋", + "search_fulltext": "全文檢索", + "search_creator": "建立者", "search_language": "語言", "search_before_date": "在該日期之前", "search_after_date": "在該日期之後", "search_tags": "標籤", "search_clear": "清除", "any_language": "任何語言", - "add_document": "添加一個文檔", - "import_eml": "從電子郵件導入(EML格式)", + "add_document": "新增文件", + "import_eml": "從電子郵件匯入(EML格式)", "tags": "標籤", "no_tags": "無標籤", - "no_documents": "數據庫中無該文檔", - "search": "搜索", - "search_empty": "無匹配 \"{{ search }}\"", + "no_documents": "資料庫中無此文件", + "search": "搜尋", + "search_empty": "搜尋不到 \"{{ search }}\"", "shared": "分享", "title": "標題", - "description": "介绍", + "description": "簡介", "contributors": "貢獻者", "language": "語言", - "creation_date": "創建時間", + "creation_date": "建立時間", "subject": "主題", "identifier": "識別碼", - "publisher": "發布者", + "publisher": "發佈者", "format": "格式", "source": "來源", "type": "類型", - "coverage": "覆蓋", - "rights": "權利", + "coverage": "範圍", + "rights": "版權", "relations": "關聯", "page_size": "頁面大小", "page_size_10": "10 每頁", "page_size_20": "20 每頁", "page_size_30": "20 每頁", - "upgrade_quota": "如需要升級您的限額, 請聯繫管理員", + "upgrade_quota": "如需要擴充檔案容量, 請聯繫管理員", "quota": "{{ current | number: 0 }}MB ({{ current | number: 1 }}%) 已使用 {{ total | number: 0 }}MB", - "count": "{{ count }} 文檔找到", + "count": "{{ count }} 文件找到", "view": { - "delete_comment_title": "刪除評論", - "delete_comment_message": "您是否確認刪除此評論?", - "delete_document_title": "刪除文檔", - "delete_document_message": "您是否確認刪除此文檔?", - "shared_document_title": "共享文檔", - "shared_document_message": "您可以直接通過發送該鏈接來分享該文檔. 注意:任何有該鏈接的人員均可查看該文檔.
", - "not_found": "文檔未找到", + "delete_comment_title": "刪除留言", + "delete_comment_message": "您是否確認刪除此留言?", + "delete_document_title": "刪除文件", + "delete_document_message": "您是否確認刪除此文件?", + "shared_document_title": "共享文件", + "shared_document_message": "您可以直接通過發送該連結來分享該文件. 注意:任何有該連結的人員均可查看文件.
", + "not_found": "文件未找到", "forbidden": "無權限", - "download_files": "下載文檔", - "export_pdf": "以PDF格式導出", + "download_files": "下載文件", + "export_pdf": "以PDF格式匯出", "by_creator": "由", - "comments": "評論", - "no_comments": "此文檔暫無評論", - "add_comment": "添加評論", - "error_loading_comments": "評論加載失敗", - "workflow_current": "當前工作流程步驟", - "workflow_comment": "添加工作流程評論", - "workflow_validated_title": "工作流程步驟已驗證", - "workflow_validated_message": "工作流步驟已成功驗證。", + "comments": "留言", + "no_comments": "此文件暫無留言", + "add_comment": "新增留言", + "error_loading_comments": "留言載入失敗", + "workflow_current": "目前工作流程", + "workflow_comment": "新增工作流程留言", + "workflow_validated_title": "工作流程確認", + "workflow_validated_message": "工作流程確認成功。", "content": { "content": "內容", - "delete_file_title": "刪除文檔", - "delete_file_message": "您是否確認刪除此文檔?", + "delete_file_title": "刪除文件", + "delete_file_message": "您是否確認刪除此文件?", "upload_pending": "等待中...", "upload_progress": "上傳中...", "upload_error": "上傳失敗", - "upload_error_quota": "已達到您的限額", + "upload_error_quota": "超過上限", "drop_zone": "將文件拖放至此處上傳", - "add_files": "添加文件" + "add_files": "新增文件" }, "workflow": { "workflow": "工作流程", - "message": "使用工作流程與您的組織的人員驗證或驗證您的文檔。", + "message": "使用工作流程讓組織中的人員確認或檢閱您的文件。", "workflow_start_label": "哪個工作流程啟動?", - "add_more_workflow": "添加更多工作流程", + "add_more_workflow": "新增工作流程", "start_workflow_submit": "開始工作流程", "full_name": "{{ name }}開始於{{ create_date | date }}", - "cancel_workflow": "取消當前的工作流程", + "cancel_workflow": "取消目前的工作流程", "cancel_workflow_title": "取消工作流程", - "cancel_workflow_message": "你真的想取消當前的工作流程嗎?" + "cancel_workflow_message": "你真的想取消目前的工作流程嗎?" }, "permissions": { "permissions": "權限", - "message": "權限可以直接應用於此文檔, 或從 標籤獲取.", - "title": "該文檔權限", - "inherited_tags": "由標籤獲取的權限", + "message": "權限可以直接套用於此文件, 或從 標籤取得.", + "title": "文件權限", + "inherited_tags": "由標籤取得的權限", "acl_source": "從", "acl_target": "為", "acl_permission": "權限" }, "activity": { "activity": "活動", - "message": "對該文檔的任何更改都將記錄於此." + "message": "對該文件的任何更改都將記錄於此." } }, "edit": { - "document_edited_with_errors": "文檔編輯成功但部分文件沒能上傳", - "document_added_with_errors": "文檔成功添加但部分文件沒能上傳", - "document_added": "文檔已成功添加 (包含 {{ count }} 文件)", - "quota_reached": "達到限額", - "primary_metadata": "主要元數據", + "document_edited_with_errors": "文件編輯成功但部分文件沒能上傳", + "document_added_with_errors": "文件成功新增但部分文件沒能上傳", + "document_added": "文件已新增成功 (包含 {{ count }} 文件)", + "quota_reached": "達到上限", + "primary_metadata": "主要後設資料", "title_placeholder": "資源的性質或類型", "description_placeholder": "資源的賬戶", - "new_files": "新文件", + "new_files": "新增文件", "orphan_files": "+ {{ count }} 文件", - "additional_metadata": "附加元數據", - "subject_placeholder": "資源話題", + "additional_metadata": "附加後設資料", + "subject_placeholder": "主題", "identifier_placeholder": "在給定的上下文中對資源的明確引用", "publisher_placeholder": "負責提供資源的實體", - "format_placeholder": "資源的文件格式, 物理介質或維度", - "source_placeholder": "從中導出所描述的資源的相關來源", - "uploading_files": "上傳文件中..." + "format_placeholder": "資源的文件格式、實體媒體或尺寸", + "source_placeholder": "從中匯出所描述的資源的相關來源", + "uploading_files": "文件上傳中..." }, "default": { "upload_pending": "等待中...", @@ -158,24 +158,24 @@ "upload_error_quota": "達到限額", "quick_upload": "快速上傳", "drop_zone": "將文件拖放至此處上傳", - "add_files": "添加文件", - "add_new_document": "添加至新文檔", + "add_files": "新增檔案", + "add_new_document": "新增文件", "latest_activity": "最新活動", "footer_sismics": "Sismics 精心製作", "api_documentation": "API 存檔", - "feedback": "歡迎提供反饋意見" + "feedback": "歡迎回饋意見" }, "pdf": { - "export_title": "以PDF形式導出", - "export_metadata": "導出元數據", - "export_comments": "導出評論", - "fit_to_page": "使圖像適合頁面", - "margin": "餘量", - "millimeter": "毫米" + "export_title": "以PDF形式匯出", + "export_metadata": "匯出後設資料", + "export_comments": "匯出留言", + "fit_to_page": "符合頁面", + "margin": "頁邊", + "millimeter": "公釐" }, "share": { - "title": "共享文檔", - "message": "如果您想多次共享同一文檔,請將共享命名.", + "title": "共享文件", + "message": "如果您想要多次共享相同文件,請為共享命名。", "submit": "共享" } }, @@ -183,36 +183,36 @@ "view": { "previous": "上一個", "next": "下一個", - "not_found": "文件未找到" + "not_found": "未找到文件" } }, "tag": { - "new_tag": "新標籤", - "search": "搜索", + "new_tag": "新增", + "search": "搜尋", "edit_tag": "更改標籤", "default": { "title": "標籤", - "message_1": "標籤 是和文檔相關的標示.", - "message_2": "一個文檔可以由多個標籤標記, 同時一個標籤可以運用於多個文檔.", + "message_1": "標籤 是和文件相關的標記.", + "message_2": "一個文件可以由多個標籤標記, 同時一個標籤可以運用於多個文件.", "message_3": "使用該 按鈕, 您可以編輯標籤的權限.", - "message_4": "如果一個標籤可以被另一個用戶或組讀取, 相關的文件也可以被這些人閱讀.", - "message_5": "例如, 用一個標籤標記您公司的文檔 我的公司 並同時添加權限 可讀 給一個群組的 員工" + "message_4": "如果一個標籤可以被另一個帳號或群組讀取, 相關的文件也可以被這些人閱讀.", + "message_5": "例如, 用一個標籤標記您公司的文件 我的公司 並同時新增權限 可讀 給一個群組的 員工" }, "edit": { "delete_tag_title": "刪除標籤", "delete_tag_message": "您是否確認刪除該標籤?", "name": "名稱", "color": "顏色", - "parent": "母", - "info": "此標記的權限也將應用於已標記的文檔 {{ name }}" + "parent": "上層", + "info": "此標記的權限也將應用於已標記的文件 {{ name }}" } }, "group": { "profile": { - "members": "組成員", - "no_members": "無組成員", - "related_links": "相關鏈接", - "edit_group": "編輯 {{ name }} 組" + "members": "群組成員", + "no_members": "無群組成員", + "related_links": "相關連結", + "edit_group": "編輯 {{ name }} 群組" } }, "user": { @@ -220,230 +220,299 @@ "groups": "群組", "quota_used": "已使用配額", "percent_used": "{{ percent | number: 0 }}% 已使用", - "related_links": "相關鏈接", - "document_created": "文檔由 {{ username }} 創建", - "edit_user": "編輯 {{ username }} 用戶" + "related_links": "相關連接", + "document_created": "文件由 {{ username }} 建立", + "edit_user": "編輯 {{ username }} 帳號" } }, "usergroup": { - "search_groups": "搜索群組", - "search_users": "搜索用戶", + "search_groups": "搜尋群組", + "search_users": "搜尋帳號", "you": "您", "default": { - "title": "用戶 & 群組", - "message": "此處您可以瀏覽用戶和群組信息." + "title": "帳號 & 群組", + "message": "此處您可以瀏覽帳號和群組資訊." } }, "settings": { - "menu_personal_settings": "個人設置", - "menu_user_account": "用戶帳號", - "menu_two_factor_auth": "雙重身份驗證", - "menu_opened_sessions": "已打開會話", - "menu_general_settings": "一般設置", + "menu_personal_settings": "個人設定", + "menu_user_account": "帳號帳號", + "menu_two_factor_auth": "雙因身份驗證", + "menu_opened_sessions": "已開啟之連線", + "menu_file_importer": "匯入大量檔案", + "menu_general_settings": "一般設定", "menu_workflow": "工作流程", - "menu_users": "用戶", + "menu_users": "帳號", "menu_groups": "群組", - "menu_vocabularies": "詞條", - "menu_configuration": "配置", - "menu_inbox": "收件箱掃描", - "menu_server_logs": "服務器日誌", + "menu_vocabularies": "詞彙", + "menu_configuration": "設定", + "menu_inbox": "掃描收件匣", + "menu_server_logs": "伺服器日誌", + "menu_ldap": "LDAP 驗證", + "menu_metadata": "自訂後置資料", + "menu_monitoring": "監控", + "ldap": { + "title": "LDAP 驗證", + "enabled": "啟用Ldap驗證", + "host": "主機名稱", + "port": "通運埠 port (389 by default)", + "usessl": "使用 SSL (ldaps)", + "admin_dn": "管理帳號 DN", + "admin_password": "管理帳號密碼", + "base_dn": "Base search DN", + "filter": "過濾 (必須包含 USERNAME, 例如: \"(uid=USERNAME)\")", + "default_email": "\"EMAIL\"欄位名稱", + "default_storage": "\"可用容量\"欄位名稱", + "saved": "LDAP 設定成功" + }, "user": { - "title": "用戶 管理", - "add_user": "添加用戶", - "username": "用戶名", - "create_date": "創建日期", - "totp_enabled": "為該用戶啟用雙重身份驗證", + "title": "帳號 管理", + "add_user": "新增帳號", + "username": "帳號", + "create_date": "建立日期", + "totp_enabled": "啟用雙因身份驗證", "edit": { - "delete_user_title": "刪除用戶", - "delete_user_message": "您是否確認刪除該用戶? 所有相關文檔,文件和標籤將被刪除", - "edit_user_failed_title": "用戶已經存在", - "edit_user_failed_message": "該用戶名已經被占用", + "delete_user_title": "刪除帳號", + "delete_user_message": "您是否確認刪除該帳號? 所有相關文件,文件和標籤將被刪除", + "edit_user_failed_title": "帳號已經存在", + "edit_user_failed_message": "該帳號名已使用", "edit_user_title": "編輯 \"{{ username }}\"", - "add_user_title": "添加一個 用戶", - "username": "用戶名", + "add_user_title": "新增 帳號", + "username": "帳號名", "email": "郵箱", "groups": "群組", - "storage_quota": "存儲限額", - "storage_quota_placeholder": "存儲限額 (單位MB)", + "storage_quota": "儲存限額", + "storage_quota_placeholder": "儲存限額 (單位MB)", "password": "密碼", "password_confirm": "密碼 (確認)", - "disabled": "禁用用戶", - "password_reset_btn": "給該用戶發送密碼重置電子郵件", + "disabled": "禁用帳號", + "password_reset_btn": "給該帳號發送密碼重置電子郵件", "password_lost_sent_title": "密碼重置郵件已發送", "password_lost_sent_message": "密碼重置電子郵件已發送至 {{ username }}" } }, "workflow": { - "title": "工作流程配置", - "add_workflow": "添加工作流程", + "title": "工作流程設定", + "add_workflow": "新增工作流程", "name": "名稱", - "create_date": "創建日期", + "create_date": "建立日期", "edit": { "delete_workflow_title": "刪除工作流程", - "delete_workflow_message": "你真的想刪除這個工作流程嗎?當前正在運行的工作流程不會被刪除", + "delete_workflow_message": "你真的想刪除這個工作流程嗎?目前正在運行的工作流程不會被刪除", "edit_workflow_title": "編輯\"{{name}}\"", - "add_workflow_title": "添加一個工作流程", + "add_workflow_title": "新增一個工作流程", "name": "名稱", "name_placeholder": "步驟名稱或說明", "drag_help": "拖放以重新排序步驟", - "type": "步驟類型", - "type_approve": "批准", - "type_validate": "驗證", - "target": "分配給", - "target_help": "批准:審核並繼續工作流程
驗證:接受或拒絕審核", - "add_step": "添加工作流程步驟" + "type": "類型", + "type_approve": "核准", + "type_validate": "確認", + "target": "指派", + "target_help": "確認:檢閱並繼續工作流程
核准:接受或拒絕", + "add_step": "新增工作流程", + "acl_info": "只有此處定義的使用者和群組才能在文件上啟動此工作流程", + "actions": "設定下一步" + } }, "security": { - "enable_totp": "激活雙重身份驗證", - "enable_totp_message": "請確保您的手機上已經擁有一個TOTP兼容的應用程序方可添加新賬戶", - "title": "雙重身份 驗證", - "message_1": "雙重身份驗證將讓您的{{ appName }} 帳號獲得多一層的安全保障.
在啟用該功能前, 請確保在您的手機上擁有一個與TOTP兼容的應用程序:", + "enable_totp": "啟用雙因身份驗證", + "enable_totp_message": "請確保您的手機上已經擁有相容TOTP的應用程序方可新增帳號", + "title": "雙因身份 驗證", + "message_1": "雙因身份驗證將讓您的{{ appName }} 帳號獲得多一層的安全保障.
在啟用該功能前, 請確保在您的手機上擁有TOTP相容的應用程序:", "message_google_authenticator": "給安卓, 蘋果, 和 黑莓系統: 谷歌認證", "message_duo_mobile": "給 安卓 和 蘋果系統: Duo Mobile", "message_authenticator": "給 Windows 系統手機: 認證", "message_2": "這些應用程序會自動生成一個驗證碼,且該驗證碼在一段時間內會變化.
每次登錄 {{ appName }}時您都需要輸入該驗證碼.", - "secret_key": "您的秘鑰是: {{ secret }}", - "secret_key_warning": "現在用該秘鑰配置您的手機應用程序上的TOTP, 您之後將無獲取權限.", - "totp_enabled_message": "雙重身份驗證將確保您的帳號.
每次您登錄 {{ appName }}時, 您都需要從您配置的手機應用程序的驗證碼.
如果您丟失您的手機, 您將無法登錄您的帳號但有效會話將允許您重新生成密鑰.", + "secret_key": "您的金鑰是: {{ secret }}", + "secret_key_warning": "現在用金鑰設定您的手機應用程序上的TOTP, 您之後將無法存取本金鑰.", + "totp_enabled_message": "雙因身份驗證將確保您的帳號.
每次您登錄 {{ appName }}時, 您都需要從您設定的手機應用程序的驗證碼.
如果您丟失您的手機, 您將無法登錄您的帳號但有效連線將允許您重新生成密鑰.", "disable_totp": { - "disable_totp": "不激活雙重身份驗證", - "message": "您的帳戶將不再受雙重身份驗證保護.", + "disable_totp": "不啟用雙因身份驗證", + "message": "您的帳號將不再受雙因身份驗證保護.", "confirm_password": "確認您的密碼", - "submit": "不激活雙重身份驗證" - } + "submit": "不啟用雙因身份驗證" + }, + "test_totp": "請輸入手機上顯示的驗證碼:", + "test_code_success": "驗證碼正確", + "test_code_fail": "驗證碼無效,請仔細檢查您的手機設定是否正確或停用雙因認證" }, "group": { "title": "群組 管理", - "add_group": "添加組", + "add_group": "新增群組", "name": "名稱", "edit": { - "delete_group_title": "刪除組", - "delete_group_message": "您是否確認刪除該組?", - "edit_group_failed_title": "組已經存在", - "edit_group_failed_message": "這個組名已經被占用", + "delete_group_title": "刪除群組", + "delete_group_message": "您是否確認刪除該群組?", + "edit_group_failed_title": "群組已經存在", + "edit_group_failed_message": "這個群組名已經被使用", "edit_group_title": "編輯 \"{{ name }}\"", - "add_group_title": "添加 ", + "add_group_title": "新增 ", "name": "名稱", - "parent_group": "母群組", - "search_group": "搜索組", + "parent_group": "上層群組", + "search_group": "搜尋群組", "members": "成員", "new_member": "新成員", - "search_user": "搜索用戶" + "search_user": "搜尋帳號" } }, "account": { - "title": "用戶帳戶", + "title": "帳號帳號", "password": "密碼", "password_confirm": "密碼 (確認)", "updated": "帳號更新成功" }, "config": { - "title_guest_access": "遊客 權限", - "message_guest_access": "遊客權限是所有人都能無需密碼即獲取 {{ appName }} 的權限模式.
和其他正常用戶一樣, 遊客權限用戶也只能通過其獲取的權限來訪問其文檔.
", - "enable_guest_access": "激活遊客權限", - "disable_guest_access": "不激活遊客權限", + "title_guest_access": "訪客 權限", + "message_guest_access": "訪客權限是所有人都能無需密碼即可取得 {{ appName }} 的權限模式.
和其他正常帳號一樣, 訪客權限帳號也只能通過其取得的權限來存取其文件.
", + "enable_guest_access": "啟用訪客權限", + "disable_guest_access": "不啟用訪客權限", "title_theme": "主題 定制", - "title_general": "一般配置", - "default_language": "新文檔的默認語言", + "title_general": "一般設定", + "default_language": "新文件的預設語言", "application_name": "申請名", "main_color": "主顏色", - "custom_css": "用戶樣式表", - "custom_css_placeholder": "在主樣式表之後添加客戶自定義樣式表", + "custom_css": "帳號樣式表", + "custom_css_placeholder": "在主樣式表之後新增客戶自定義樣式表", "logo": "圖標 (正方形)", "background_image": "背景圖片", "uploading_image": "上傳圖片中...", - "title_smtp": "電子郵件配置", + "title_smtp": "電子郵件設定", "smtp_hostname": "SMTP主機名", - "smtp_port": "SMTP端口", + "smtp_port": "SMTP埠", "smtp_from": "發件人的電子郵件", - "smtp_username": "SMTP用戶名", + "smtp_username": "SMTP帳號", "smtp_password": "SMTP密碼", - "smtp_updated": "SMTP配置已成功更新" + "smtp_updated": "SMTP設定已成功更新", + "title_ocr": "光學文字辨識 (OCR)", + "message_ocr": "OCR 是一項從圖像和 PDF 文件中提取文字的功能。此功能需要在伺服器上安裝有效的 Tesseract。", + "enable_ocr": "啟用 OCR", + "disable_ocr": "停用 OCR", + "webhooks": "Webhooks觸發", + "webhooks_explain": "當指定事件發生時,將呼叫 Webhook。給定的 URL 將使用包含事件名稱和相關資源 ID 的 JSON 負載進行 POST 處理。", + "webhook_event": "事件", + "webhook_url": "URL", + "webhook_create_date": "建立日期", + "webhook_add": "新增webhook" + }, + "metadata": { + "title": "設定後置資料", + "message": "您可以在此處自訂之後置資料至文件中,例如內部識別碼或到期日。請注意,\"類型\"建立後無法變更。", + "name": "名稱", + "type": "類型" }, "inbox": { - "title": "收件箱掃描", - "message": "通過啟用此功能,系統會定期掃描指定收件箱中的新電子郵件並自動導入它們。", - "enabled": "啟用收件箱掃描", + "title": "收件匣掃描", + "message": "通過啟用此功能,系統會定期掃描指定收件匣中的新電子郵件並自動匯入它們。", + "enabled": "啟用收件匣掃描功能", "hostname": "IMAP主機名", - "port": "IMAP端口(143或993)", - "username": "IMAP用戶名", + "port": "IMAP埠(143或993)", + "starttls": "啟用STARTTLS", + "username": "IMAP帳號名", "password": "IMAP密碼", "folder": "IMAP 資料夾", - "tag": "標籤添加到導入的文檔", + "tag": "新增標籤到匯入的文件", "test": "測試參數", - "last_sync": "上次同步:{{ data.date | date }},{{data.count}}消息導入", - "test_success": "與收件箱的連接成功({{ count }} 消息)", - "test_fail": "連接到收件箱時發生錯誤,請檢查參數" + "last_sync": "上次同步:{{ data.date | date }},{{data.count}}訊息匯入", + "test_success": "與收件匣的連接成功({{ count }} 消息)", + "test_fail": "連接到收件匣時發生錯誤,請檢查參數", + "saved": "設定成功", + "autoTagsEnabled": "自動從標有 # 的主旨新增標籤", + "deleteImported": "匯入後從郵箱中刪除郵件" + }, + "monitoring": { + "background_tasks": "背景任務", + "queued_tasks": "目前有 {{ count }} 任務排列.", + "queued_tasks_explain": "文件處理、縮圖建立、索引更新、光學字元辨識是後台任務。大量未處理的任務將導致搜尋結果不完整。", + "server_logs": "伺服器日誌", + "log_date": "日期", + "log_tag": "標籤", + "log_message": "訊息", + "indexing": "索引", + "indexing_info": "如果您發現搜尋結果有差異,可以嘗試進行完整的重新索引。在完成此操作之前,搜尋結果將不完整。", + "start_reindexing": "開始重建全部索引", + "reindexing_started": "重建索引開始, 請耐心等待直至無任務排列" }, "log": { - "title": "服務器 日誌", + "title": "伺服器 日誌", "date": "日期", "tag": "標籤", - "message": "信息" + "message": "訊息" }, "session": { - "title": "打開 會話", - "created_date": "創建日期", + "title": "已開啟 連線", + "created_date": "建立日期", "last_connection_date": "最後登錄時間", "user_agent": "從", - "current": "當前", - "current_session": "這是目前會話", + "current": "目前", + "current_session": "這是目前連線", "clear_message": "該帳號的所有其他連接將終止", - "clear": "清除所有其他會話" + "clear": "清除所有其他連線" }, "vocabulary": { - "title": "詞條 輸入", - "choose_vocabulary": "選擇一個詞條編輯", + "title": "詞彙 輸入", + "choose_vocabulary": "選擇一個詞彙編輯", "type": "類型", - "coverage": "覆蓋", - "rights": "權利", + "coverage": "範圍", + "rights": "版權", "value": "值", "order": "顺序", "new_entry": "新輸入" + }, + "fileimporter": { + "title": "匯入大量檔案", + "advanced_users": "進階使用!", + "need_intro": "阿你如果要:", + "need_1": "一次性匯入整個目錄內檔案", + "need_2": "掃描目錄內新的檔案並且匯入", + "line_1": "前往 sismics/docs/releases 並下載適合您系統的檔案匯入工具。", + "line_2": "請依照此處的說明使用此工具。", + "line_3": "您的文件將根據設定匯入到文件中。", + "download": "下載", + "instructions": "匯入步驟" } }, "feedback": { "title": "歡迎提供反饋意見", - "message": "對Teedy文檔管理系統有任何建議或疑問?我們靜候您的反饋意見!", + "message": "對Teedy文件管理系統有任何建議或疑問?我們靜候您的反饋意見!", "sent_title": "反饋已發送", - "sent_message": "感謝您的反饋意見!這將幫助我們進一步優化Teedy文檔管理系統以便更好的為您提供服務。" + "sent_message": "感謝您的反饋意見!這將幫助我們進一步優化Teedy文件管理系統以便更好的為您提供服務。" }, "import": { "title": "輸入", "error_quota": "已達到配額限制,請聯繫您的管理員以增加配額", - "error_general": "嘗試導入文件時發生錯誤,請確保它是有效的EML文件" + "error_general": "嘗試匯入文件時發生錯誤,請確保它是有效的EML文件" }, "app_share": { - "main": "請求一個共享的文檔鏈接來訪問該文檔", + "main": "請求一個共享的文件鏈接來存取該文件", "403": { "title": "未經授權", - "message": "您正在查看的文檔已經被取消共享" + "message": "您正在查看的文件已經被取消共享" } }, "directive": { "acledit": { "acl_target": "用於", - "acl_permission": "允許", - "add_permission": "添加一個許可", - "search_user_group": "搜索一個用戶或組" + "acl_permission": "權限", + "add_permission": "新增權限", + "search_user_group": "搜尋帳號或群組" }, "auditlog": { - "log_created": "創建", + "log_created": "建立", "log_updated": "更新", "log_deleted": "删除", "Acl": "ACL", - "Comment": "評論", - "Document": "文檔", + "Comment": "留言", + "Document": "文件", "File": "文件", "Group": "組", "Tag": "標籤", - "User": "用戶", + "User": "帳號", "RouteModel": "工作流程", "Route": "工作流程" }, "selectrelation": { - "typeahead": "請輸入文檔名稱" + "typeahead": "請輸入文件名稱" }, "selecttag": { "typeahead": "請輸入標籤" @@ -464,28 +533,33 @@ "READ": "可讀", "READWRITE": "可寫", "WRITE": "可寫", - "USER": "用戶", + "USER": "帳號", "GROUP": "組", "SHARE": "已共享" }, "workflow_type": { - "VALIDATE": "驗證", - "APPROVE": "讚許" + "VALIDATE": "確認", + "APPROVE": "核准" }, "workflow_transition": { - "APPROVED": "批准", + "APPROVED": "核准", "REJECTED": "拒絕", - "VALIDATED": "驗證" + "VALIDATED": "確認" }, "validation": { "required": "必填", "too_short": "過短", "too_long": "過長", - "email": "必須是一個有效郵箱地址", - "password_confirm": "密碼和確認密碼必須完全一致", + "email": "必須是有效郵箱地址", + "password_confirm": "密碼和確認密碼必須一致", "number": "必須為數字", "no_space": "不允許空格" }, + "action_type": { + "ADD_TAG": "加入標籤", + "REMOVE_TAG": "移除標籤", + "PROCESS_FILES": "傳遞檔案" + }, "pagination": { "previous": "以前", "next": "下一個", @@ -497,15 +571,15 @@ "share": "共享", "unshare": "不共享", "close": "關閉", - "add": "添加", + "add": "新增", "open": "打開", "see": "查看", - "save": "保存", - "export": "導出", + "save": "儲存", + "export": "匯出", "edit": "編輯", "delete": "刪除", "loading": "加載中...", "send": "發送", - "enabled": "激活", - "disabled": "未激活" + "enabled": "啟用", + "disabled": "未啟用" } \ No newline at end of file From 7aebce5c7fc96394bc3a72259abd45300fe098fc Mon Sep 17 00:00:00 2001 From: william Date: Wed, 8 Jan 2025 16:51:05 +0800 Subject: [PATCH 2/7] update untranslated/wrong string --- docs-web/src/main/webapp/src/locale/zh_TW.json | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/docs-web/src/main/webapp/src/locale/zh_TW.json b/docs-web/src/main/webapp/src/locale/zh_TW.json index 64b6e0b32..22f48a78b 100644 --- a/docs-web/src/main/webapp/src/locale/zh_TW.json +++ b/docs-web/src/main/webapp/src/locale/zh_TW.json @@ -39,6 +39,10 @@ "global_quota_warning": "提醒!儲存空間已經使用{{current | number: 0}} MB({{percent | number: 1}}%)總計{{total | number: 0}} MB" }, "document": { + "navigation_up": "往上一層", + "toggle_navigation": "切換資料夾導航", + "display_mode_list": "以清單顯示", + "display_mode_grid": "以縮圖顯示", "search_simple": "簡單搜尋", "search_fulltext": "全文檢索", "search_creator": "建立者", @@ -56,7 +60,7 @@ "search": "搜尋", "search_empty": "搜尋不到 \"{{ search }}\"", "shared": "分享", - "title": "標題", + "title": "文件名稱", "description": "簡介", "contributors": "貢獻者", "language": "語言", @@ -99,14 +103,14 @@ "workflow_validated_message": "工作流程確認成功。", "content": { "content": "內容", - "delete_file_title": "刪除文件", - "delete_file_message": "您是否確認刪除此文件?", + "delete_file_title": "刪除檔案", + "delete_file_message": "您是否確認刪除此檔案?", "upload_pending": "等待中...", "upload_progress": "上傳中...", "upload_error": "上傳失敗", "upload_error_quota": "超過上限", - "drop_zone": "將文件拖放至此處上傳", - "add_files": "新增文件" + "drop_zone": "將檔案拖放至此處上傳", + "add_files": "新增檔案" }, "workflow": { "workflow": "工作流程", From 31dfe13b9e32a41e3655069ebf05f439ac1add3b Mon Sep 17 00:00:00 2001 From: william Date: Thu, 9 Jan 2025 16:43:26 +0800 Subject: [PATCH 3/7] update untranslated/wrong string --- .../resources/db/update/dbupdate-006-0.sql | 2 +- .../src/main/webapp/src/locale/zh_TW.json | 273 +++++++++++------- 2 files changed, 165 insertions(+), 110 deletions(-) diff --git a/docs-core/src/main/resources/db/update/dbupdate-006-0.sql b/docs-core/src/main/resources/db/update/dbupdate-006-0.sql index 56037f911..c0b2244e3 100644 --- a/docs-core/src/main/resources/db/update/dbupdate-006-0.sql +++ b/docs-core/src/main/resources/db/update/dbupdate-006-0.sql @@ -241,7 +241,7 @@ insert into T_VOCABULARY(VOC_ID_C, VOC_NAME_C, VOC_VALUE_C, VOC_ORDER_N) values( insert into T_VOCABULARY(VOC_ID_C, VOC_NAME_C, VOC_VALUE_C, VOC_ORDER_N) values('coverage-swe', 'coverage', 'Sweden', 214); insert into T_VOCABULARY(VOC_ID_C, VOC_NAME_C, VOC_VALUE_C, VOC_ORDER_N) values('coverage-che', 'coverage', 'Switzerland', 215); insert into T_VOCABULARY(VOC_ID_C, VOC_NAME_C, VOC_VALUE_C, VOC_ORDER_N) values('coverage-syr', 'coverage', 'Syrian Arab Republic', 216); -insert into T_VOCABULARY(VOC_ID_C, VOC_NAME_C, VOC_VALUE_C, VOC_ORDER_N) values('coverage-twn', 'coverage', 'Taiwan, Province of China', 217); +insert into T_VOCABULARY(VOC_ID_C, VOC_NAME_C, VOC_VALUE_C, VOC_ORDER_N) values('coverage-twn', 'coverage', 'Taiwan', 217); insert into T_VOCABULARY(VOC_ID_C, VOC_NAME_C, VOC_VALUE_C, VOC_ORDER_N) values('coverage-tjk', 'coverage', 'Tajikistan', 218); insert into T_VOCABULARY(VOC_ID_C, VOC_NAME_C, VOC_VALUE_C, VOC_ORDER_N) values('coverage-tza', 'coverage', 'Tanzania, United Republic of', 219); insert into T_VOCABULARY(VOC_ID_C, VOC_NAME_C, VOC_VALUE_C, VOC_ORDER_N) values('coverage-tha', 'coverage', 'Thailand', 220); diff --git a/docs-web/src/main/webapp/src/locale/zh_TW.json b/docs-web/src/main/webapp/src/locale/zh_TW.json index 22f48a78b..5978e7a3b 100644 --- a/docs-web/src/main/webapp/src/locale/zh_TW.json +++ b/docs-web/src/main/webapp/src/locale/zh_TW.json @@ -1,15 +1,15 @@ { "login": { - "username": "帳號名", + "username": "帳號", "password": "密碼", "validation_code_required": "請輸入驗證碼", "validation_code_title": "您的帳號已經啟用雙因身份驗證. 請輸入您手機app提供的驗證碼.", "validation_code": "驗證碼", "remember_me": "記住我", - "submit": "登錄", - "login_as_guest": "以訪客身份登錄", - "login_failed_title": "登錄失敗", - "login_failed_message": "帳號名或密碼不正確", + "submit": "登入", + "login_as_guest": "以訪客身份登入", + "login_failed_title": "登入失敗", + "login_failed_message": "帳號或密碼不正確", "password_lost_btn": "忘記密碼?", "password_lost_sent_title": "發送密碼重置郵件", "password_lost_sent_message": "一封電子郵件已經發送到{{username}}以重置您的密碼", @@ -18,48 +18,53 @@ }, "passwordlost": { "title": "忘記密碼", - "message": "請輸入您的帳號名以接收密碼重置連結。 如果您不記得您的帳號名,請聯繫您的管理員", + "message": "請輸入您的帳號以接收密碼重置連結。 如果您不記得您的帳號,請聯繫您的管理員", "submit": "重置我的密碼" }, "passwordreset": { - "message": "請輸入一個新的密碼", - "submit": "更改我的密碼", - "error_title": "更改密碼出錯", - "error_message": "您的密碼恢復請求已超時,請在登錄頁面上提出新的請求" + "message": "請輸入新的密碼", + "submit": "變更我的密碼", + "error_title": "密碼變更錯誤", + "error_message": "您的密碼恢復請求已超時,請在登入頁面上提出新的請求" }, "index": { - "toggle_navigation": "切換導航", + "toggle_navigation": "切換顯示方式", "nav_documents": "文件", "nav_tags": "標籤", "nav_users_groups": "帳號 & 群組", "error_info": "{{ count }} 新錯誤", - "logged_as": "以 {{ username }}登錄", + "logged_as": "以 {{ username }}登入", "nav_settings": "設置", - "logout": "退出", + "logout": "登出", "global_quota_warning": "提醒!儲存空間已經使用{{current | number: 0}} MB({{percent | number: 1}}%)總計{{total | number: 0}} MB" }, "document": { "navigation_up": "往上一層", - "toggle_navigation": "切換資料夾導航", + "toggle_navigation": "切換資料夾顯示方式", "display_mode_list": "以清單顯示", - "display_mode_grid": "以縮圖顯示", - "search_simple": "簡單搜尋", + "display_mode_grid": "以網格顯示", + "search_simple": "簡易搜尋", "search_fulltext": "全文檢索", "search_creator": "建立者", "search_language": "語言", "search_before_date": "在該日期之前", "search_after_date": "在該日期之後", + "search_before_update_date": "在此日期之前更新", + "search_after_update_date": "在此日期之後更新", "search_tags": "標籤", + "search_shared": "僅共享文件", + "search_workflow": "分配給我的工作流程", "search_clear": "清除", "any_language": "任何語言", "add_document": "新增文件", "import_eml": "從電子郵件匯入(EML格式)", "tags": "標籤", "no_tags": "無標籤", - "no_documents": "資料庫中無此文件", + "no_documents": "没有文件", "search": "搜尋", "search_empty": "搜尋不到 \"{{ search }}\"", "shared": "分享", + "current_step_name": "Current step", "title": "文件名稱", "description": "簡介", "contributors": "貢獻者", @@ -75,12 +80,13 @@ "rights": "版權", "relations": "關聯", "page_size": "頁面大小", - "page_size_10": "10 每頁", - "page_size_20": "20 每頁", - "page_size_30": "20 每頁", + "page_size_10": "每頁10列", + "page_size_20": "每頁20列", + "page_size_30": "每頁30列", "upgrade_quota": "如需要擴充檔案容量, 請聯繫管理員", "quota": "{{ current | number: 0 }}MB ({{ current | number: 1 }}%) 已使用 {{ total | number: 0 }}MB", "count": "{{ count }} 文件找到", + "last_updated": "最後更新 {{ date | timeAgo: dateFormat }}", "view": { "delete_comment_title": "刪除留言", "delete_comment_message": "您是否確認刪除此留言?", @@ -110,7 +116,13 @@ "upload_error": "上傳失敗", "upload_error_quota": "超過上限", "drop_zone": "將檔案拖放至此處上傳", - "add_files": "新增檔案" + "add_files": "新增檔案", + "file_processing_indicator": "該文件正在處理中。在完成之前搜尋將不可用。", + "reprocess_file": "重新更新檔案", + "upload_new_version": "上傳新的版本", + "open_versions": "顯示歷史版本", + "display_mode_list": "檔案以列表方式顯示", + "display_mode_grid": "檔案以網格方式顯示" }, "workflow": { "workflow": "工作流程", @@ -121,7 +133,8 @@ "full_name": "{{ name }}開始於{{ create_date | date }}", "cancel_workflow": "取消目前的工作流程", "cancel_workflow_title": "取消工作流程", - "cancel_workflow_message": "你真的想取消目前的工作流程嗎?" + "cancel_workflow_message": "你真的想取消目前的工作流程嗎?", + "no_workflow": "您無法對此文件啟動任何工作流程。" }, "permissions": { "permissions": "權限", @@ -140,7 +153,6 @@ "edit": { "document_edited_with_errors": "文件編輯成功但部分文件沒能上傳", "document_added_with_errors": "文件成功新增但部分文件沒能上傳", - "document_added": "文件已新增成功 (包含 {{ count }} 文件)", "quota_reached": "達到上限", "primary_metadata": "主要後設資料", "title_placeholder": "資源的性質或類型", @@ -167,7 +179,10 @@ "latest_activity": "最新活動", "footer_sismics": "Sismics 精心製作", "api_documentation": "API 存檔", - "feedback": "歡迎回饋意見" + "feedback": "歡迎回饋意見", + "workflow_document_list": "指派給您的文件", + "select_all": "全選", + "select_none": "不選" }, "pdf": { "export_title": "以PDF形式匯出", @@ -188,33 +203,45 @@ "previous": "上一個", "next": "下一個", "not_found": "未找到文件" + }, + "edit": { + "title": "編輯檔案", + "name": "檔案名稱" + }, + "versions": { + "title": "版本歷史", + "filename": "檔名", + "mimetype": "類型", + "create_date": "建立日期", + "version": "版本" } }, "tag": { "new_tag": "新增", "search": "搜尋", - "edit_tag": "更改標籤", "default": { "title": "標籤", - "message_1": "標籤 是和文件相關的標記.", - "message_2": "一個文件可以由多個標籤標記, 同時一個標籤可以運用於多個文件.", - "message_3": "使用該 按鈕, 您可以編輯標籤的權限.", - "message_4": "如果一個標籤可以被另一個帳號或群組讀取, 相關的文件也可以被這些人閱讀.", - "message_5": "例如, 用一個標籤標記您公司的文件 我的公司 並同時新增權限 可讀 給一個群組的 員工" + "message_1": "標籤是用來連結文件的標記.", + "message_2": "文件可以對應多個標籤, 同時標籤也可以運用於多個文件.", + "message_3": "點選 按鈕, 您可以設定標籤權限.", + "message_4": "如果標籤可以被帳號或群組讀取, 相關聯的文件也可以被這些人閱讀.", + "message_5": "例如, 用標籤標記您公司文件 我的公司 並同時賦予 可讀 權限給群組\"員工\"" }, "edit": { "delete_tag_title": "刪除標籤", - "delete_tag_message": "您是否確認刪除該標籤?", + "delete_tag_message": "是否刪除?", "name": "名稱", "color": "顏色", "parent": "上層", - "info": "此標記的權限也將應用於已標記的文件 {{ name }}" + "info": "此標籤上的權限將套用至關聯的文件 {{ name }}", + "circular_reference_title": "重複引用", + "circular_reference_message": "上層標籤的層次結構形成循環,請選擇另一個上層標籤。" } }, "group": { "profile": { "members": "群組成員", - "no_members": "無群組成員", + "no_members": "沒有成員", "related_links": "相關連結", "edit_group": "編輯 {{ name }} 群組" } @@ -240,18 +267,17 @@ }, "settings": { "menu_personal_settings": "個人設定", - "menu_user_account": "帳號帳號", + "menu_user_account": "帳號", "menu_two_factor_auth": "雙因身份驗證", "menu_opened_sessions": "已開啟之連線", "menu_file_importer": "匯入大量檔案", "menu_general_settings": "一般設定", "menu_workflow": "工作流程", - "menu_users": "帳號", + "menu_users": "使用者", "menu_groups": "群組", "menu_vocabularies": "詞彙", "menu_configuration": "設定", - "menu_inbox": "掃描收件匣", - "menu_server_logs": "伺服器日誌", + "menu_inbox": "收件匣", "menu_ldap": "LDAP 驗證", "menu_metadata": "自訂後置資料", "menu_monitoring": "監控", @@ -259,7 +285,7 @@ "title": "LDAP 驗證", "enabled": "啟用Ldap驗證", "host": "主機名稱", - "port": "通運埠 port (389 by default)", + "port": "通運埠 port (389)", "usessl": "使用 SSL (ldaps)", "admin_dn": "管理帳號 DN", "admin_password": "管理帳號密碼", @@ -270,29 +296,34 @@ "saved": "LDAP 設定成功" }, "user": { - "title": "帳號 管理", - "add_user": "新增帳號", - "username": "帳號", + "title": "使用者 管理", + "add_user": "新增使用者", + "username": "使用者", "create_date": "建立日期", "totp_enabled": "啟用雙因身份驗證", "edit": { - "delete_user_title": "刪除帳號", - "delete_user_message": "您是否確認刪除該帳號? 所有相關文件,文件和標籤將被刪除", - "edit_user_failed_title": "帳號已經存在", - "edit_user_failed_message": "該帳號名已使用", + "delete_user_title": "刪除使用者", + "delete_user_message": "您是否確認刪除使用者? 所有相關文件,文件和標籤將被刪除", + "user_used_title": "正在使用中", + "user_used_message": "使用者已參與工作流程 \"{{ name }}\"", + "edit_user_failed_title": "使用者已經存在", + "edit_user_failed_message": "該使用者正在使用中", "edit_user_title": "編輯 \"{{ username }}\"", - "add_user_title": "新增 帳號", - "username": "帳號名", - "email": "郵箱", + "add_user_title": "新增 使用者", + "username": "使用者", + "email": "郵件", "groups": "群組", "storage_quota": "儲存限額", "storage_quota_placeholder": "儲存限額 (單位MB)", "password": "密碼", "password_confirm": "密碼 (確認)", - "disabled": "禁用帳號", - "password_reset_btn": "給該帳號發送密碼重置電子郵件", - "password_lost_sent_title": "密碼重置郵件已發送", - "password_lost_sent_message": "密碼重置電子郵件已發送至 {{ username }}" + "disabled": "禁用", + "password_reset_btn": "發送重置密碼電子郵件", + "password_lost_sent_title": "重置密碼郵件已發送", + "password_lost_sent_message": "重置密碼電子郵件已發送至 {{ username }}", + "disable_totp_btn": "停用該使用者的雙因認證", + "disable_totp_title": "停用雙因認證", + "disable_totp_message": "您確定要為此使用者停用雙因認證嗎?" } }, "workflow": { @@ -304,33 +335,33 @@ "delete_workflow_title": "刪除工作流程", "delete_workflow_message": "你真的想刪除這個工作流程嗎?目前正在運行的工作流程不會被刪除", "edit_workflow_title": "編輯\"{{name}}\"", - "add_workflow_title": "新增一個工作流程", + "add_workflow_title": "新增工作流程", "name": "名稱", "name_placeholder": "步驟名稱或說明", "drag_help": "拖放以重新排序步驟", "type": "類型", "type_approve": "核准", - "type_validate": "確認", + "type_validate": "檢查", "target": "指派", - "target_help": "確認:檢閱並繼續工作流程
核准:接受或拒絕", + "target_help": "檢查:檢閱並繼續工作流程
核准:接受或拒絕", "add_step": "新增工作流程", - "acl_info": "只有此處定義的使用者和群組才能在文件上啟動此工作流程", - "actions": "設定下一步" - + "actions": "設定下一步驟", + "remove_action": "移除步驟", + "acl_info": "只有此處定義的使用者和群組才能在文件上啟動此工作流程" } }, "security": { "enable_totp": "啟用雙因身份驗證", - "enable_totp_message": "請確保您的手機上已經擁有相容TOTP的應用程序方可新增帳號", + "enable_totp_message": "請確保您的手機上已經擁有相容TOTP的應用程序方可啟用", "title": "雙因身份 驗證", - "message_1": "雙因身份驗證將讓您的{{ appName }} 帳號獲得多一層的安全保障.
在啟用該功能前, 請確保在您的手機上擁有TOTP相容的應用程序:", + "message_1": "雙因身份驗證將讓您的{{ appName }} 帳號獲得多一層的安全保障.
在啟用該功能前, 請確保在您的手機上擁有TOTP相容的應用程式:", "message_google_authenticator": "給安卓, 蘋果, 和 黑莓系統: 谷歌認證", "message_duo_mobile": "給 安卓 和 蘋果系統: Duo Mobile", "message_authenticator": "給 Windows 系統手機: 認證", - "message_2": "這些應用程序會自動生成一個驗證碼,且該驗證碼在一段時間內會變化.
每次登錄 {{ appName }}時您都需要輸入該驗證碼.", + "message_2": "這些應用程式會自動生成驗證碼,且該驗證碼在一段時間內會變化.
每次登入 {{ appName }}時您都需要輸入該驗證碼.", "secret_key": "您的金鑰是: {{ secret }}", "secret_key_warning": "現在用金鑰設定您的手機應用程序上的TOTP, 您之後將無法存取本金鑰.", - "totp_enabled_message": "雙因身份驗證將確保您的帳號.
每次您登錄 {{ appName }}時, 您都需要從您設定的手機應用程序的驗證碼.
如果您丟失您的手機, 您將無法登錄您的帳號但有效連線將允許您重新生成密鑰.", + "totp_enabled_message": "雙因身份驗證將確保您的帳號.
每次您登入 {{ appName }}時, 您都需要從您設定的手機應用程序的驗證碼.
如果您丟失您的手機, 您將無法登入您的帳號但有效連線將允許您重新生成密鑰.", "disable_totp": { "disable_totp": "不啟用雙因身份驗證", "message": "您的帳號將不再受雙因身份驗證保護.", @@ -350,6 +381,8 @@ "delete_group_message": "您是否確認刪除該群組?", "edit_group_failed_title": "群組已經存在", "edit_group_failed_message": "這個群組名已經被使用", + "group_used_title": "Group in use", + "group_used_message": "This group is used in the workflow \"{{ name }}\"", "edit_group_title": "編輯 \"{{ name }}\"", "add_group_title": "新增 ", "name": "名稱", @@ -373,18 +406,18 @@ "disable_guest_access": "不啟用訪客權限", "title_theme": "主題 定制", "title_general": "一般設定", - "default_language": "新文件的預設語言", - "application_name": "申請名", + "default_language": "新文件預設語言", + "application_name": "名稱", "main_color": "主顏色", - "custom_css": "帳號樣式表", - "custom_css_placeholder": "在主樣式表之後新增客戶自定義樣式表", - "logo": "圖標 (正方形)", + "custom_css": "自訂CSS", + "custom_css_placeholder": "在主要stylesheet之後新增自訂CSS", + "logo": "標誌 (正方形)", "background_image": "背景圖片", "uploading_image": "上傳圖片中...", "title_smtp": "電子郵件設定", - "smtp_hostname": "SMTP主機名", + "smtp_hostname": "SMTP主機名稱", "smtp_port": "SMTP埠", - "smtp_from": "發件人的電子郵件", + "smtp_from": "寄件者電子郵件", "smtp_username": "SMTP帳號", "smtp_password": "SMTP密碼", "smtp_updated": "SMTP設定已成功更新", @@ -409,10 +442,10 @@ "title": "收件匣掃描", "message": "通過啟用此功能,系統會定期掃描指定收件匣中的新電子郵件並自動匯入它們。", "enabled": "啟用收件匣掃描功能", - "hostname": "IMAP主機名", + "hostname": "IMAP主機名稱", "port": "IMAP埠(143或993)", "starttls": "啟用STARTTLS", - "username": "IMAP帳號名", + "username": "IMAP帳號", "password": "IMAP密碼", "folder": "IMAP 資料夾", "tag": "新增標籤到匯入的文件", @@ -422,7 +455,7 @@ "test_fail": "連接到收件匣時發生錯誤,請檢查參數", "saved": "設定成功", "autoTagsEnabled": "自動從標有 # 的主旨新增標籤", - "deleteImported": "匯入後從郵箱中刪除郵件" + "deleteImported": "匯入後從郵件匣中刪除郵件" }, "monitoring": { "background_tasks": "背景任務", @@ -434,38 +467,32 @@ "log_message": "訊息", "indexing": "索引", "indexing_info": "如果您發現搜尋結果有差異,可以嘗試進行完整的重新索引。在完成此操作之前,搜尋結果將不完整。", - "start_reindexing": "開始重建全部索引", + "start_reindexing": "重建全部索引", "reindexing_started": "重建索引開始, 請耐心等待直至無任務排列" }, - "log": { - "title": "伺服器 日誌", - "date": "日期", - "tag": "標籤", - "message": "訊息" - }, "session": { "title": "已開啟 連線", "created_date": "建立日期", - "last_connection_date": "最後登錄時間", + "last_connection_date": "最後登入時間", "user_agent": "從", "current": "目前", "current_session": "這是目前連線", - "clear_message": "該帳號的所有其他連接將終止", - "clear": "清除所有其他連線" + "clear_message": "該帳號的所有其他連線將中斷", + "clear": "清除其他連線" }, "vocabulary": { "title": "詞彙 輸入", - "choose_vocabulary": "選擇一個詞彙編輯", - "type": "類型", - "coverage": "範圍", - "rights": "版權", - "value": "值", + "choose_vocabulary": "選擇詞彙編輯", + "type": "一般類型", + "coverage": "國家地區", + "rights": "授權類", + "value": "詞彙", "order": "顺序", - "new_entry": "新輸入" + "new_entry": "新增詞彙" }, "fileimporter": { "title": "匯入大量檔案", - "advanced_users": "進階使用!", + "advanced_users": "進階使用者專用!", "need_intro": "阿你如果要:", "need_1": "一次性匯入整個目錄內檔案", "need_2": "掃描目錄內新的檔案並且匯入", @@ -477,10 +504,10 @@ } }, "feedback": { - "title": "歡迎提供反饋意見", - "message": "對Teedy文件管理系統有任何建議或疑問?我們靜候您的反饋意見!", - "sent_title": "反饋已發送", - "sent_message": "感謝您的反饋意見!這將幫助我們進一步優化Teedy文件管理系統以便更好的為您提供服務。" + "title": "歡迎提供回饋意見", + "message": "對Teedy文件管理系統有任何建議或疑問?我們靜候您的回饋意見!", + "sent_title": "回饋已發送", + "sent_message": "感謝您的回饋意見!這將幫助我們進一步優化Teedy文件管理系統以便更好的為您提供服務。" }, "import": { "title": "輸入", @@ -488,7 +515,7 @@ "error_general": "嘗試匯入文件時發生錯誤,請確保它是有效的EML文件" }, "app_share": { - "main": "請求一個共享的文件鏈接來存取該文件", + "main": "請求文件共享的連結來存取該文件", "403": { "title": "未經授權", "message": "您正在查看的文件已經被取消共享" @@ -496,7 +523,7 @@ }, "directive": { "acledit": { - "acl_target": "用於", + "acl_target": "對象", "acl_permission": "權限", "add_permission": "新增權限", "search_user_group": "搜尋帳號或群組" @@ -510,10 +537,11 @@ "Document": "文件", "File": "文件", "Group": "組", + "Route": "工作流程", + "RouteModel": "工作流程", "Tag": "標籤", "User": "帳號", - "RouteModel": "工作流程", - "Route": "工作流程" + "Webhook": "Webhook" }, "selectrelation": { "typeahead": "請輸入文件名稱" @@ -542,34 +570,59 @@ "SHARE": "已共享" }, "workflow_type": { - "VALIDATE": "確認", + "VALIDATE": "檢查", "APPROVE": "核准" }, "workflow_transition": { "APPROVED": "核准", - "REJECTED": "拒絕", + "REJECTED": "退回", "VALIDATED": "確認" }, "validation": { "required": "必填", "too_short": "過短", "too_long": "過長", - "email": "必須是有效郵箱地址", - "password_confirm": "密碼和確認密碼必須一致", + "email": "必須是有效郵件地址", + "password_confirm": "密碼必須一致", "number": "必須為數字", - "no_space": "不允許空格" + "no_space": "不允許空格", + "alphanumeric": "只允許使用字母和數字" }, "action_type": { "ADD_TAG": "加入標籤", "REMOVE_TAG": "移除標籤", - "PROCESS_FILES": "傳遞檔案" + "PROCESS_FILES": "處理檔案" }, "pagination": { - "previous": "以前", - "next": "下一個", - "first": "首先", - "last": "最後" + "previous": "上一頁", + "next": "下一頁", + "first": "頁首", + "last": "頁尾" + }, + "onboarding": { + "step1": { + "title": "首次造訪?", + "description": "如果這是您第一次使用 Teedy,請按「下一步」按鈕,或取消本導覽。" + }, + "step2": { + "title": "文件", + "description": "Teedy 以文件的形式組成,每個文件含多個檔案。" + }, + "step3": { + "title": "檔案", + "description": "您可以在新增文件之後加入檔案,或使用快速上傳區域上傳檔案。" + }, + "step4": { + "title": "搜尋", + "description": "這是搜尋文件方式,也可以使用放大鏡進行進階搜尋。" + }, + "step5": { + "title": "標籤", + "description": "可以用利用標籤模擬目錄結構(就像超級資料夾)。請在此進行設定作業。" + } }, + "yes": "Yes", + "no": "No", "ok": "確認", "cancel": "取消", "share": "共享", @@ -582,8 +635,10 @@ "export": "匯出", "edit": "編輯", "delete": "刪除", - "loading": "加載中...", + "rename": "修改名稱", + "download": "下載", + "loading": "載入中...", "send": "發送", "enabled": "啟用", "disabled": "未啟用" -} \ No newline at end of file +} From 876e17881861fe228a35d683b5490bd1d6c8ba73 Mon Sep 17 00:00:00 2001 From: william Date: Fri, 10 Jan 2025 16:10:19 +0800 Subject: [PATCH 4/7] =?UTF-8?q?update=20chinese=20(=20Tranditional?= =?UTF-8?q?=E3=80=81Simplified=20)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/webapp/src/locale/zh_CN.json | 193 +++++++++++++++--- .../src/main/webapp/src/locale/zh_TW.json | 42 ++-- 2 files changed, 184 insertions(+), 51 deletions(-) diff --git a/docs-web/src/main/webapp/src/locale/zh_CN.json b/docs-web/src/main/webapp/src/locale/zh_CN.json index 823db2440..9af514564 100644 --- a/docs-web/src/main/webapp/src/locale/zh_CN.json +++ b/docs-web/src/main/webapp/src/locale/zh_CN.json @@ -39,13 +39,21 @@ "global_quota_warning": "提醒! 全球配额存储空间已经使用 {{ current | number: 0 }}MB 占总存储配额 {{ total | number: 0 }}MB 的 ({{ percent | number: 1 }}%)" }, "document": { + "navigation_up": "上一层", + "toggle_navigation": "切换文件夹导航", + "display_mode_list": "在列表中显示文件", + "display_mode_grid": "以网格显示文件", "search_simple": "简单搜索", "search_fulltext": "全文搜索", "search_creator": "创建者", "search_language": "语言", "search_before_date": "在此日期之前", "search_after_date": "在此日期之后", + "search_before_update_date": "在此日期之前更新", + "search_after_update_date": "在此日期之后更新", "search_tags": "标签", + "search_shared": "仅共享文件", + "search_workflow": "分配给我的工作流程", "search_clear": "清除", "any_language": "所有语言", "add_document": "添加一个文档", @@ -56,6 +64,7 @@ "search": "搜索", "search_empty": "无匹配 \"{{ search }}\"", "shared": "已共享", + "current_step_name": "当前步骤", "title": "标题", "description": "介绍", "contributors": "贡献者", @@ -67,16 +76,17 @@ "format": "格式", "source": "来源", "type": "类型", - "coverage": "覆盖", - "rights": "权利", + "coverage": "范围", + "rights": "版权", "relations": "关联", "page_size": "页面大小", - "page_size_10": "10 每页", - "page_size_20": "20 每页", - "page_size_30": "30 每页", + "page_size_10": "每页10列", + "page_size_20": "每页20列", + "page_size_30": "每页30列", "upgrade_quota": "如需要升级您的限额, 请联系管理员", "quota": "{{ current | number: 0 }}MB ({{ current | number: 1 }}%) 已使用 {{ total | number: 0 }}MB", "count": "找到{{ count }}个文件", + "last_updated": "最后更新 {{ date | timeAgo: dateFormat }}", "view": { "delete_comment_title": "删除评论", "delete_comment_message": "您是否确认删除此评论?", @@ -106,7 +116,13 @@ "upload_error": "上传失败", "upload_error_quota": "已达到您的限额", "drop_zone": "将文件拖放至此处上传", - "add_files": "添加文件" + "add_files": "添加文件", + "file_processing_indicator": "此文件正在处理中。该文件正在处理中。在处理完毕之前,将无法进行搜索。", + "reprocess_file": "重新处理该文件", + "upload_new_version": "传新版本", + "open_versions": "显示历史版本", + "display_mode_list": "以列表形式显示文件", + "display_mode_grid": "以网格方式显示文件" }, "workflow": { "workflow": "工作流程", @@ -117,7 +133,8 @@ "full_name": "{{ name }}开始于{{ create_date | date }}", "cancel_workflow": "取消当前的工作流程", "cancel_workflow_title": "取消工作流程", - "cancel_workflow_message": "你真的想取消当前的工作流程吗?" + "cancel_workflow_message": "你真的想取消当前的工作流程吗?", + "no_workflow": "您不能在此文档上启动任何工作流程。" }, "permissions": { "permissions": "权限", @@ -136,7 +153,6 @@ "edit": { "document_edited_with_errors": "文档编辑成功但部分文件没能上传", "document_added_with_errors": "文档成功添加但部分文件没能上传", - "document_added": "文档成功上传 (与{{ count }}个文件)", "quota_reached": "达到限额", "primary_metadata": "主要元数据", "title_placeholder": "资源的性质或类型", @@ -163,7 +179,10 @@ "latest_activity": "最新活动", "footer_sismics": "由Sismics精心制作", "api_documentation": "API 存档", - "feedback": "欢迎提供反馈意见" + "feedback": "欢迎提供反馈意见", + "workflow_document_list": "分配给您的文件", + "select_all": "全选", + "select_none": "不选" }, "pdf": { "export_title": "以PDF形式导出", @@ -184,12 +203,22 @@ "previous": "上一个", "next": "下一个", "not_found": "文件未找到" + }, + "edit": { + "title": "编辑档案", + "name": "文档名称" + }, + "versions": { + "title": "历史版本", + "filename": "文档名称", + "mimetype": "类型", + "create_date": "创建日期", + "version": "版本" } }, "tag": { "new_tag": "新标签", "search": "搜索", - "edit_tag": "更改标签", "default": { "title": "标签", "message_1": "标签 是和文档相关的标示.", @@ -204,7 +233,9 @@ "name": "名称", "color": "颜色", "parent": "母", - "info": "此标记的权限也将应用于已标记的文档 {{ name }}" + "info": "此标记的权限也将应用于已标记的文档 {{ name }}", + "circular_reference_title": "重复引用", + "circular_reference_message": "父标签的层级结构形成了一个循环,请选择另一个父标签。" } }, "group": { @@ -239,6 +270,7 @@ "menu_user_account": "用户帐号", "menu_two_factor_auth": "双重身份验证", "menu_opened_sessions": "已打开会话", + "menu_file_importer": "批量文件导入程序", "menu_general_settings": "一般设置", "menu_workflow": "工作流程", "menu_users": "用户", @@ -246,7 +278,23 @@ "menu_vocabularies": "词条", "menu_configuration": "配置", "menu_inbox": "收件箱扫描", - "menu_server_logs": "服务器日志", + "menu_ldap": "LDAP 身份验证", + "menu_metadata": "自定义元数据", + "menu_monitoring": "监控", + "ldap": { + "title": "LDAP 身份验证", + "enabled": "启用 LDAP 身份验证", + "host": "LDAP 主机名", + "port": "LDAP 端口(默认为 389)", + "usessl": "启用 SSL (ldaps)", + "admin_dn": "管理员 DN", + "admin_password": "管理员密码", + "base_dn": "基本搜索 DN", + "filter": "搜索过滤器(必须包含 USERNAME, eg. \"(uid=USERNAME)\")", + "default_email": "LDAP 用户的默认电子邮件", + "default_storage": "LDAP 用户的默认存储空间", + "saved": "成功保存 LDAP 配置" + }, "user": { "title": "用户 管理", "add_user": "添加用户", @@ -256,6 +304,8 @@ "edit": { "delete_user_title": "删除用户", "delete_user_message": "您是否确认删除该用户? 所有相关文档,文件和标签将被删除", + "user_used_title": "用户使用中", + "user_used_message": "该用户用于工作流程 \"{{ name }}\"", "edit_user_failed_title": "用户已存在", "edit_user_failed_message": "该用户名已被占用", "edit_user_title": "编辑 \"{{ username }}\"", @@ -270,7 +320,10 @@ "disabled": "禁用用户", "password_reset_btn": "给该用户发送密码重置电子邮件", "password_lost_sent_title": "密码重置邮件已发送", - "password_lost_sent_message": "密码重置电子邮件已发送至 {{ username }}" + "password_lost_sent_message": "密码重置电子邮件已发送至 {{ username }}", + "disable_totp_btn": "为该用户禁用双因素身份验证", + "disable_totp_title": "禁用双因素身份验证", + "disable_totp_message": "您确定要禁用该用户的双因素身份验证吗?" } }, "workflow": { @@ -291,7 +344,10 @@ "type_validate": "验证", "target": "分配给", "target_help": "批准:审核并继续工作流程验证:接受或拒绝审核", - "add_step": "添加工作流程步骤" + "add_step": "添加工作流程步骤", + "actions": "之后会发生什么呢?", + "remove_action": "移除行动", + "acl_info": "只有在此定义的用户和组才能在文档上启动此工作流程" } }, "security": { @@ -311,7 +367,10 @@ "message": "您的帐户将不再受双重身份验证保护.", "confirm_password": "确认您的密码", "submit": "不激活双重身份验证" - } + }, + "test_totp": "请输入手机上显示的验证码:", + "test_code_success": "验证码 OK", + "test_code_fail": "此代码无效,请仔细检查您的手机是否正确配置或禁用双因素身份验证" }, "group": { "title": "群组 管理", @@ -322,6 +381,8 @@ "delete_group_message": "您是否确认删除该组?", "edit_group_failed_title": "组已存在", "edit_group_failed_message": "该组名已经被占用", + "group_used_title": "使用中的组", + "group_used_message": "组用于工作流程 \"{{ name }}\"", "edit_group_title": "编辑 \"{{ name }}\"", "add_group_title": "添加一个组", "name": "名称", @@ -359,7 +420,23 @@ "smtp_from": "发送邮件", "smtp_username": "SMTP 用户名", "smtp_password": "SMTP密码", - "smtp_updated": "SMTP组态更新成功" + "smtp_updated": "SMTP组态更新成功", + "title_ocr": "光学字符识别 (OCR)", + "message_ocr": "OCR 是一种从图像和 PDF 文件中提取文本的功能。该功能需要在服务器上安装一个正常运行的 Tesseract。", + "enable_ocr": "启用 OCR", + "disable_ocr": "禁用 OCR", + "webhooks": "Webhooks", + "webhooks_explain": "当指定事件发生时,Webhooks 将被调用。给定的 URL 将与包含事件名称和相关资源 ID 的 JSON 有效负载一起被 POST。", + "webhook_event": "事件", + "webhook_url": "URL", + "webhook_create_date": "创建日期", + "webhook_add": "添加 Webhook" + }, + "metadata": { + "title": "自定义元数据配置", + "message": "在这里,您可以为文档添加自定义元数据,如内部标识符或过期日期。请注意,元数据类型在创建后无法更改。", + "name": "元数据名称", + "type": "元数据类型" }, "inbox": { "title": "收件箱扫描", @@ -367,6 +444,7 @@ "enabled": "启用收件箱扫描", "hostname": "IMAP主机名", "port": "IMAP端口(143或993)", + "starttls": "启用 STARTTLS", "username": "IMAP用户名", "password": "IMAP密码", "folder": "IMAP 件夹中", @@ -374,13 +452,23 @@ "test": "测试参数", "last_sync": "上次同步:{{ data.date | date }},{{ data.count }}消息导入", "test_success": "与收件箱的连接成功({{count}}消息)", - "test_fail": "连接到收件箱时发生错误,请检查参数" + "test_fail": "连接到收件箱时发生错误,请检查参数", + "saved": "IMAP 配置保存成功", + "autoTagsEnabled": "从标有 # 的主题行自动添加标签", + "deleteImported": "导入后从邮箱中删除邮件" }, - "log": { - "title": "服务器 日志", - "date": "日期", - "tag": "标签", - "message": "信息" + "monitoring": { + "background_tasks": "后台任务", + "queued_tasks": "当前有 {{ count }} 队列任务。", + "queued_tasks_explain": "文件处理、缩略图创建、索引更新、光学字符识别都是后台任务。大量未处理的任务会导致搜索结果不完整。", + "server_logs": "服务器日志", + "log_date": "日期", + "log_tag": "标签", + "log_message": "信息", + "indexing": "编制索引", + "indexing_info": "如果发现搜索结果存在差异,可以尝试进行全面的重新索引。在完成此操作之前,搜索结果将是不完整的。", + "start_reindexing": "开始全面重新索引", + "reindexing_started": "重新索引已开始,请等待后台任务结束。" }, "session": { "title": "打开 会话", @@ -401,6 +489,18 @@ "value": "值", "order": "顺序", "new_entry": "新输入" + }, + "fileimporter": { + "title": "批量文件导入程序", + "advanced_users": "面向高级用户!", + "need_intro": "如果您需要:", + "need_1": "一次性导入一个文件目录", + "need_2": "扫描目录以查找新文件并将其导入", + "line_1": "转到 sismics/docs/releases 并为你的系统下载文件导入工具。", + "line_2": "请按照此处的说明使用该工具。", + "line_3": "您的文件将根据文件导入器的配置导入到文档中。", + "download": "下载", + "instructions": "使用说明" } }, "feedback": { @@ -437,16 +537,17 @@ "Document": "文档", "File": "文件", "Group": "组", + "RouteModel": "工作流程", + "Route": "工作流程", "Tag": "标签", "User": "用户", - "RouteModel": "工作流程", - "Route": "工作流程" + "Webhook": "Webhook" }, "selectrelation": { - "typeahead": "请输入一个文档名称" + "typeahead": "请输入文档名称" }, "selecttag": { - "typeahead": "请输入一个标签" + "typeahead": "请输入标签" }, "datepicker": { "current": "今天", @@ -470,7 +571,7 @@ }, "workflow_type": { "VALIDATE": "验证", - "APPROVE": "赞许" + "APPROVE": "批准" }, "workflow_transition": { "APPROVED": "批准", @@ -484,14 +585,44 @@ "email": "必须是一个有效邮箱地址", "password_confirm": "密码和确认密码必须完全一致", "number": "必须为数字", - "no_space": "不允许空格" + "no_space": "不允许空格", + "alphanumeric": "只允许使用字母和数字" + }, + "action_type": { + "ADD_TAG": "添加标签", + "REMOVE_TAG": "移除标签", + "PROCESS_FILES": "处理文件" }, "pagination": { "previous": "上一个", "next": "下一个", - "first": "第一", - "last": "持续" + "first": "页首", + "last": "尾页" + }, + "onboarding": { + "step1": { + "title": "第一次来?", + "description": "如果您是第一次访问 Teedy,请单击 “下一步 ”按钮,否则请随时关闭我。" + }, + "step2": { + "title": "文件", + "description": "Teedy 以文件形式组织,每个文件包含多个文件。" + }, + "step3": { + "title": "文档", + "description": "您可以在创建文档后或之前使用快速上传区域添加文件。" + }, + "step4": { + "title": "检索", + "description": "这是找回文件的主要方法。还可以使用放大镜按钮进行高级搜索。" + }, + "step5": { + "title": "标签", + "description": "您可以使用标签来模拟目录结构(如超级文件夹)。请在此处进行配置。" + } }, + "yes": "Yes", + "no": "No", "ok": "确认", "cancel": "取消", "share": "共享", @@ -504,6 +635,8 @@ "export": "导出", "edit": "编辑", "delete": "删除", + "rename": "Rename", + "download": "Download", "loading": "加载中...", "send": "发送", "enabled": "激活", diff --git a/docs-web/src/main/webapp/src/locale/zh_TW.json b/docs-web/src/main/webapp/src/locale/zh_TW.json index 5978e7a3b..03cb43c11 100644 --- a/docs-web/src/main/webapp/src/locale/zh_TW.json +++ b/docs-web/src/main/webapp/src/locale/zh_TW.json @@ -3,7 +3,7 @@ "username": "帳號", "password": "密碼", "validation_code_required": "請輸入驗證碼", - "validation_code_title": "您的帳號已經啟用雙因身份驗證. 請輸入您手機app提供的驗證碼.", + "validation_code_title": "您的帳號已經啟用雙因素驗證. 請輸入您手機app提供的驗證碼.", "validation_code": "驗證碼", "remember_me": "記住我", "submit": "登入", @@ -39,10 +39,10 @@ "global_quota_warning": "提醒!儲存空間已經使用{{current | number: 0}} MB({{percent | number: 1}}%)總計{{total | number: 0}} MB" }, "document": { - "navigation_up": "往上一層", + "navigation_up": "上一层", "toggle_navigation": "切換資料夾顯示方式", - "display_mode_list": "以清單顯示", - "display_mode_grid": "以網格顯示", + "display_mode_list": "清單顯示", + "display_mode_grid": "網格顯示", "search_simple": "簡易搜尋", "search_fulltext": "全文檢索", "search_creator": "建立者", @@ -60,11 +60,11 @@ "import_eml": "從電子郵件匯入(EML格式)", "tags": "標籤", "no_tags": "無標籤", - "no_documents": "没有文件", + "no_documents": "無此文件", "search": "搜尋", "search_empty": "搜尋不到 \"{{ search }}\"", "shared": "分享", - "current_step_name": "Current step", + "current_step_name": "當前步驟", "title": "文件名稱", "description": "簡介", "contributors": "貢獻者", @@ -121,8 +121,8 @@ "reprocess_file": "重新更新檔案", "upload_new_version": "上傳新的版本", "open_versions": "顯示歷史版本", - "display_mode_list": "檔案以列表方式顯示", - "display_mode_grid": "檔案以網格方式顯示" + "display_mode_list": "以列表方式顯示", + "display_mode_grid": "以網格方式顯示" }, "workflow": { "workflow": "工作流程", @@ -268,7 +268,7 @@ "settings": { "menu_personal_settings": "個人設定", "menu_user_account": "帳號", - "menu_two_factor_auth": "雙因身份驗證", + "menu_two_factor_auth": "雙因素驗證", "menu_opened_sessions": "已開啟之連線", "menu_file_importer": "匯入大量檔案", "menu_general_settings": "一般設定", @@ -300,7 +300,7 @@ "add_user": "新增使用者", "username": "使用者", "create_date": "建立日期", - "totp_enabled": "啟用雙因身份驗證", + "totp_enabled": "啟用雙因素驗證", "edit": { "delete_user_title": "刪除使用者", "delete_user_message": "您是否確認刪除使用者? 所有相關文件,文件和標籤將被刪除", @@ -321,9 +321,9 @@ "password_reset_btn": "發送重置密碼電子郵件", "password_lost_sent_title": "重置密碼郵件已發送", "password_lost_sent_message": "重置密碼電子郵件已發送至 {{ username }}", - "disable_totp_btn": "停用該使用者的雙因認證", - "disable_totp_title": "停用雙因認證", - "disable_totp_message": "您確定要為此使用者停用雙因認證嗎?" + "disable_totp_btn": "停用該使用者的雙因素驗證", + "disable_totp_title": "停用雙因素驗證", + "disable_totp_message": "您確定要為此使用者停用雙因素驗證嗎?" } }, "workflow": { @@ -351,26 +351,26 @@ } }, "security": { - "enable_totp": "啟用雙因身份驗證", + "enable_totp": "啟用雙因素驗證", "enable_totp_message": "請確保您的手機上已經擁有相容TOTP的應用程序方可啟用", - "title": "雙因身份 驗證", - "message_1": "雙因身份驗證將讓您的{{ appName }} 帳號獲得多一層的安全保障.
在啟用該功能前, 請確保在您的手機上擁有TOTP相容的應用程式:", + "title": "雙因素 驗證", + "message_1": "雙因素驗證將讓您的{{ appName }} 帳號獲得多一層的安全保障.
在啟用該功能前, 請確保在您的手機上擁有TOTP相容的應用程式:", "message_google_authenticator": "給安卓, 蘋果, 和 黑莓系統: 谷歌認證", "message_duo_mobile": "給 安卓 和 蘋果系統: Duo Mobile", "message_authenticator": "給 Windows 系統手機: 認證", "message_2": "這些應用程式會自動生成驗證碼,且該驗證碼在一段時間內會變化.
每次登入 {{ appName }}時您都需要輸入該驗證碼.", "secret_key": "您的金鑰是: {{ secret }}", "secret_key_warning": "現在用金鑰設定您的手機應用程序上的TOTP, 您之後將無法存取本金鑰.", - "totp_enabled_message": "雙因身份驗證將確保您的帳號.
每次您登入 {{ appName }}時, 您都需要從您設定的手機應用程序的驗證碼.
如果您丟失您的手機, 您將無法登入您的帳號但有效連線將允許您重新生成密鑰.", + "totp_enabled_message": "雙因素驗證將確保您的帳號.
每次您登入 {{ appName }}時, 您都需要從您設定的手機應用程序的驗證碼.
如果您丟失您的手機, 您將無法登入您的帳號但有效連線將允許您重新生成密鑰.", "disable_totp": { - "disable_totp": "不啟用雙因身份驗證", - "message": "您的帳號將不再受雙因身份驗證保護.", + "disable_totp": "不啟用雙因素驗證", + "message": "您的帳號將不再受雙因素驗證保護.", "confirm_password": "確認您的密碼", - "submit": "不啟用雙因身份驗證" + "submit": "不啟用雙因素驗證" }, "test_totp": "請輸入手機上顯示的驗證碼:", "test_code_success": "驗證碼正確", - "test_code_fail": "驗證碼無效,請仔細檢查您的手機設定是否正確或停用雙因認證" + "test_code_fail": "驗證碼無效,請仔細檢查您的手機設定是否正確或停用雙因素驗證" }, "group": { "title": "群組 管理", From b7cce4fa519251813b357db3bc52929917c4bbe3 Mon Sep 17 00:00:00 2001 From: william Date: Tue, 14 Jan 2025 08:16:08 +0800 Subject: [PATCH 5/7] encode download non english filename --- .../docs/rest/resource/FileResource.java | 54 +++++++++++++------ 1 file changed, 38 insertions(+), 16 deletions(-) diff --git a/docs-web/src/main/java/com/sismics/docs/rest/resource/FileResource.java b/docs-web/src/main/java/com/sismics/docs/rest/resource/FileResource.java index b7294f25d..ef7643a19 100644 --- a/docs-web/src/main/java/com/sismics/docs/rest/resource/FileResource.java +++ b/docs-web/src/main/java/com/sismics/docs/rest/resource/FileResource.java @@ -1,5 +1,21 @@ package com.sismics.docs.rest.resource; +import java.io.IOException; +import java.io.InputStream; +import java.net.URISyntaxException; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.text.MessageFormat; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +import org.glassfish.jersey.media.multipart.FormDataBodyPart; +import org.glassfish.jersey.media.multipart.FormDataParam; + import com.google.common.base.Strings; import com.google.common.collect.Lists; import com.google.common.io.ByteStreams; @@ -27,30 +43,27 @@ import com.sismics.util.JsonUtil; import com.sismics.util.context.ThreadLocalContext; import com.sismics.util.mime.MimeType; -import org.glassfish.jersey.media.multipart.FormDataBodyPart; -import org.glassfish.jersey.media.multipart.FormDataParam; import jakarta.json.Json; import jakarta.json.JsonArrayBuilder; import jakarta.json.JsonObjectBuilder; -import jakarta.ws.rs.*; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.FormParam; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.NotFoundException; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.WebApplicationException; import jakarta.ws.rs.core.HttpHeaders; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.Response.Status; import jakarta.ws.rs.core.StreamingOutput; -import java.io.IOException; -import java.io.InputStream; -import java.net.URISyntaxException; -import java.net.URLDecoder; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.nio.file.StandardCopyOption; -import java.text.MessageFormat; -import java.util.List; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; /** * File REST resources. @@ -637,7 +650,7 @@ public Response data( } Response.ResponseBuilder builder = Response.ok(stream) - .header(HttpHeaders.CONTENT_DISPOSITION, "inline; filename=\"" + file.getFullName("data") + "\"") + .header(HttpHeaders.CONTENT_DISPOSITION, "inline; filename*=utf-8''" + filenameEncode( file.getFullName("data") )) .header(HttpHeaders.CONTENT_TYPE, mimeType); if (decrypt) { // Cache real files @@ -651,6 +664,15 @@ public Response data( return builder.build(); } + private String filenameEncode(String name) { + try { + return java.net.URLEncoder.encode(name, "UTF-8").replace("+", "%20"); + } catch (java.io.UnsupportedEncodingException e) { + e.printStackTrace(); + return name; + } + } + /** * Returns all files from a document, zipped. * From 91413bd2b32bdaea73805846869d573e03da4b19 Mon Sep 17 00:00:00 2001 From: william Date: Mon, 20 Jan 2025 14:45:21 +0800 Subject: [PATCH 6/7] email sender will be owner of attached file --- .../com/sismics/docs/core/dao/UserDao.java | 33 ++++++++-- .../docs/core/service/InboxService.java | 66 ++++++++++++++----- 2 files changed, 76 insertions(+), 23 deletions(-) diff --git a/docs-core/src/main/java/com/sismics/docs/core/dao/UserDao.java b/docs-core/src/main/java/com/sismics/docs/core/dao/UserDao.java index 1107a8b9c..28636a081 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/dao/UserDao.java +++ b/docs-core/src/main/java/com/sismics/docs/core/dao/UserDao.java @@ -1,12 +1,19 @@ package com.sismics.docs.core.dao; -import com.google.common.base.Joiner; -import com.google.common.base.Strings; -import at.favre.lib.crypto.bcrypt.BCrypt; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + import org.joda.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.base.Joiner; +import com.google.common.base.Strings; import com.sismics.docs.core.constant.AuditLogType; import com.sismics.docs.core.constant.Constants; import com.sismics.docs.core.dao.criteria.UserCriteria; @@ -19,11 +26,10 @@ import com.sismics.docs.core.util.jpa.SortCriteria; import com.sismics.util.context.ThreadLocalContext; +import at.favre.lib.crypto.bcrypt.BCrypt; import jakarta.persistence.EntityManager; import jakarta.persistence.NoResultException; import jakarta.persistence.Query; -import java.sql.Timestamp; -import java.util.*; /** * User DAO. @@ -233,6 +239,23 @@ public User getActiveByUsername(String username) { return null; } } + + /** + * Gets an active user by its email. + * + * @param email User's email + * @return User + */ + public User getByEmail(String email) { + EntityManager em = ThreadLocalContext.get().getEntityManager(); + try { + Query q = em.createQuery("select u from User u where u.email = :email and u.deleteDate is null"); + q.setParameter("email", email); + return (User) q.getSingleResult(); + } catch (NoResultException e) { + return null; + } + } /** * Deletes a user. diff --git a/docs-core/src/main/java/com/sismics/docs/core/service/InboxService.java b/docs-core/src/main/java/com/sismics/docs/core/service/InboxService.java index d3bcdf5b6..f45fe96be 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/service/InboxService.java +++ b/docs-core/src/main/java/com/sismics/docs/core/service/InboxService.java @@ -1,8 +1,32 @@ package com.sismics.docs.core.service; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.mail.Flags; +import javax.mail.Folder; +import javax.mail.FolderClosedException; +import javax.mail.Message; +import javax.mail.Session; +import javax.mail.Store; +import javax.mail.internet.InternetAddress; +import javax.mail.search.FlagTerm; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.google.common.util.concurrent.AbstractScheduledService; import com.sismics.docs.core.constant.ConfigType; import com.sismics.docs.core.dao.TagDao; +import com.sismics.docs.core.dao.UserDao; import com.sismics.docs.core.dao.criteria.TagCriteria; import com.sismics.docs.core.dao.dto.TagDto; import com.sismics.docs.core.event.DocumentCreatedAsyncEvent; @@ -15,16 +39,6 @@ import com.sismics.docs.core.util.jpa.SortCriteria; import com.sismics.util.EmailUtil; import com.sismics.util.context.ThreadLocalContext; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.mail.*; -import javax.mail.search.FlagTerm; -import java.util.*; -import java.util.concurrent.TimeUnit; -import java.util.regex.Matcher; -import java.util.regex.Pattern; /** * Inbox scanning service. @@ -88,7 +102,8 @@ public void syncInbox() { Message[] messages = inbox.search(new FlagTerm(new Flags(Flags.Flag.SEEN), false)); log.info(messages.length + " messages found"); for (Message message : messages) { - importMessage(message, tagsNameToId); + InternetAddress sender = (InternetAddress) message.getFrom()[0]; + importMessage(message, tagsNameToId,sender); lastSyncMessageCount++; } } catch (FolderClosedException e) { @@ -190,8 +205,8 @@ private Folder openInbox() throws Exception { * @param message Message * @throws Exception e */ - private void importMessage(Message message, Map tags) throws Exception { - log.info("Importing message: " + message.getSubject()); + private void importMessage(Message message, Map tags,InternetAddress sender) throws Exception { + log.info("Importing message: " + message.getSubject()+",sender="+sender.getAddress()); // Parse the mail EmailUtil.MailContent mailContent = new EmailUtil.MailContent(); @@ -219,8 +234,12 @@ private void importMessage(Message message, Map tags) throws Exc log.debug("Tags found: " + String.join(", ", tagsFound)); subject = subject.trim().replaceAll(" +", " "); } - - document.setUserId("admin"); + UserDao userDao = new UserDao(); + com.sismics.docs.core.model.jpa.User user = userDao.getByEmail(sender.getAddress()); + if(user!=null) + document.setUserId(user.getId()); + else + document.setUserId("admin"); document.setTitle(StringUtils.abbreviate(subject, 100)); document.setDescription(StringUtils.abbreviate(mailContent.getMessage(), 4000)); document.setSubject(StringUtils.abbreviate(mailContent.getSubject(), 500)); @@ -232,9 +251,13 @@ private void importMessage(Message message, Map tags) throws Exc } else { document.setCreateDate(mailContent.getDate()); } + if(user!=null) + DocumentUtil.createDocument(document, user.getId()); + else{ + // Save the document, create the base ACLs + DocumentUtil.createDocument(document, "admin"); + } - // Save the document, create the base ACLs - DocumentUtil.createDocument(document, "admin"); // Add the tag String tagId = ConfigUtil.getConfigStringValue(ConfigType.INBOX_TAG); @@ -253,12 +276,19 @@ private void importMessage(Message message, Map tags) throws Exc // Raise a document created event DocumentCreatedAsyncEvent documentCreatedAsyncEvent = new DocumentCreatedAsyncEvent(); - documentCreatedAsyncEvent.setUserId("admin"); + if(user!=null) + documentCreatedAsyncEvent.setUserId(user.getId()); + else + documentCreatedAsyncEvent.setUserId("admin"); documentCreatedAsyncEvent.setDocumentId(document.getId()); ThreadLocalContext.get().addAsyncEvent(documentCreatedAsyncEvent); // Add files to the document for (EmailUtil.FileContent fileContent : mailContent.getFileContentList()) { + if(user!=null) + FileUtil.createFile(fileContent.getName(), null, fileContent.getFile(), fileContent.getSize(), + document.getLanguage(), user.getId(), document.getId()); + else FileUtil.createFile(fileContent.getName(), null, fileContent.getFile(), fileContent.getSize(), document.getLanguage(), "admin", document.getId()); } From 52956d0f6150ba041c5aba156bd2ffdc776ec2ec Mon Sep 17 00:00:00 2001 From: william Date: Mon, 20 Jan 2025 16:41:33 +0800 Subject: [PATCH 7/7] fix email wrong workflow link --- .../resources/email_template/route_step_validate/template.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs-core/src/main/resources/email_template/route_step_validate/template.ftl b/docs-core/src/main/resources/email_template/route_step_validate/template.ftl index 1a8ff96d0..59eec3dbe 100644 --- a/docs-core/src/main/resources/email_template/route_step_validate/template.ftl +++ b/docs-core/src/main/resources/email_template/route_step_validate/template.ftl @@ -4,5 +4,5 @@

${messages('email.template.route_step_validate.hello', user_name)}

${messages['email.template.route_step_validate.instruction1']}

${messages['email.template.route_step_validate.instruction2']}

- ${document_title} + ${document_title} \ No newline at end of file