Merge 52956d0f6150ba041c5aba156bd2ffdc776ec2ec into c2d7f3ebc6368a15aabed3d747ec970751961d46

This commit is contained in:
william 2025-01-20 08:41:39 +00:00 committed by GitHub
commit fbf3a730f2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 679 additions and 338 deletions

View File

@ -1,12 +1,19 @@
package com.sismics.docs.core.dao; package com.sismics.docs.core.dao;
import com.google.common.base.Joiner; import java.sql.Timestamp;
import com.google.common.base.Strings; import java.util.ArrayList;
import at.favre.lib.crypto.bcrypt.BCrypt; 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.joda.time.DateTime;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; 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.AuditLogType;
import com.sismics.docs.core.constant.Constants; import com.sismics.docs.core.constant.Constants;
import com.sismics.docs.core.dao.criteria.UserCriteria; import com.sismics.docs.core.dao.criteria.UserCriteria;
@ -19,11 +26,10 @@ import com.sismics.docs.core.util.jpa.QueryUtil;
import com.sismics.docs.core.util.jpa.SortCriteria; import com.sismics.docs.core.util.jpa.SortCriteria;
import com.sismics.util.context.ThreadLocalContext; import com.sismics.util.context.ThreadLocalContext;
import at.favre.lib.crypto.bcrypt.BCrypt;
import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManager;
import jakarta.persistence.NoResultException; import jakarta.persistence.NoResultException;
import jakarta.persistence.Query; import jakarta.persistence.Query;
import java.sql.Timestamp;
import java.util.*;
/** /**
* User DAO. * User DAO.
@ -233,6 +239,23 @@ public class UserDao {
return null; 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. * Deletes a user.

View File

@ -1,8 +1,32 @@
package com.sismics.docs.core.service; 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.google.common.util.concurrent.AbstractScheduledService;
import com.sismics.docs.core.constant.ConfigType; import com.sismics.docs.core.constant.ConfigType;
import com.sismics.docs.core.dao.TagDao; 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.criteria.TagCriteria;
import com.sismics.docs.core.dao.dto.TagDto; import com.sismics.docs.core.dao.dto.TagDto;
import com.sismics.docs.core.event.DocumentCreatedAsyncEvent; import com.sismics.docs.core.event.DocumentCreatedAsyncEvent;
@ -15,16 +39,6 @@ import com.sismics.docs.core.util.TransactionUtil;
import com.sismics.docs.core.util.jpa.SortCriteria; import com.sismics.docs.core.util.jpa.SortCriteria;
import com.sismics.util.EmailUtil; import com.sismics.util.EmailUtil;
import com.sismics.util.context.ThreadLocalContext; 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. * Inbox scanning service.
@ -88,7 +102,8 @@ public class InboxService extends AbstractScheduledService {
Message[] messages = inbox.search(new FlagTerm(new Flags(Flags.Flag.SEEN), false)); Message[] messages = inbox.search(new FlagTerm(new Flags(Flags.Flag.SEEN), false));
log.info(messages.length + " messages found"); log.info(messages.length + " messages found");
for (Message message : messages) { for (Message message : messages) {
importMessage(message, tagsNameToId); InternetAddress sender = (InternetAddress) message.getFrom()[0];
importMessage(message, tagsNameToId,sender);
lastSyncMessageCount++; lastSyncMessageCount++;
} }
} catch (FolderClosedException e) { } catch (FolderClosedException e) {
@ -190,8 +205,8 @@ public class InboxService extends AbstractScheduledService {
* @param message Message * @param message Message
* @throws Exception e * @throws Exception e
*/ */
private void importMessage(Message message, Map<String, String> tags) throws Exception { private void importMessage(Message message, Map<String, String> tags,InternetAddress sender) throws Exception {
log.info("Importing message: " + message.getSubject()); log.info("Importing message: " + message.getSubject()+",sender="+sender.getAddress());
// Parse the mail // Parse the mail
EmailUtil.MailContent mailContent = new EmailUtil.MailContent(); EmailUtil.MailContent mailContent = new EmailUtil.MailContent();
@ -219,8 +234,12 @@ public class InboxService extends AbstractScheduledService {
log.debug("Tags found: " + String.join(", ", tagsFound)); log.debug("Tags found: " + String.join(", ", tagsFound));
subject = subject.trim().replaceAll(" +", " "); subject = subject.trim().replaceAll(" +", " ");
} }
UserDao userDao = new UserDao();
document.setUserId("admin"); 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.setTitle(StringUtils.abbreviate(subject, 100));
document.setDescription(StringUtils.abbreviate(mailContent.getMessage(), 4000)); document.setDescription(StringUtils.abbreviate(mailContent.getMessage(), 4000));
document.setSubject(StringUtils.abbreviate(mailContent.getSubject(), 500)); document.setSubject(StringUtils.abbreviate(mailContent.getSubject(), 500));
@ -232,9 +251,13 @@ public class InboxService extends AbstractScheduledService {
} else { } else {
document.setCreateDate(mailContent.getDate()); 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 // Add the tag
String tagId = ConfigUtil.getConfigStringValue(ConfigType.INBOX_TAG); String tagId = ConfigUtil.getConfigStringValue(ConfigType.INBOX_TAG);
@ -253,12 +276,19 @@ public class InboxService extends AbstractScheduledService {
// Raise a document created event // Raise a document created event
DocumentCreatedAsyncEvent documentCreatedAsyncEvent = new DocumentCreatedAsyncEvent(); DocumentCreatedAsyncEvent documentCreatedAsyncEvent = new DocumentCreatedAsyncEvent();
documentCreatedAsyncEvent.setUserId("admin"); if(user!=null)
documentCreatedAsyncEvent.setUserId(user.getId());
else
documentCreatedAsyncEvent.setUserId("admin");
documentCreatedAsyncEvent.setDocumentId(document.getId()); documentCreatedAsyncEvent.setDocumentId(document.getId());
ThreadLocalContext.get().addAsyncEvent(documentCreatedAsyncEvent); ThreadLocalContext.get().addAsyncEvent(documentCreatedAsyncEvent);
// Add files to the document // Add files to the document
for (EmailUtil.FileContent fileContent : mailContent.getFileContentList()) { 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(), FileUtil.createFile(fileContent.getName(), null, fileContent.getFile(), fileContent.getSize(),
document.getLanguage(), "admin", document.getId()); document.getLanguage(), "admin", document.getId());
} }

View File

@ -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-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-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-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-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-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); insert into T_VOCABULARY(VOC_ID_C, VOC_NAME_C, VOC_VALUE_C, VOC_ORDER_N) values('coverage-tha', 'coverage', 'Thailand', 220);

View File

@ -4,5 +4,5 @@
<p>${messages('email.template.route_step_validate.hello', user_name)}</p> <p>${messages('email.template.route_step_validate.hello', user_name)}</p>
<p>${messages['email.template.route_step_validate.instruction1']}</p> <p>${messages['email.template.route_step_validate.instruction1']}</p>
<p>${messages['email.template.route_step_validate.instruction2']}</p> <p>${messages['email.template.route_step_validate.instruction2']}</p>
<a href="${base_url}/#/document/${document_id}">${document_title}</a> <a href="${base_url}/#/document/view/${document_id}/content">${document_title}</a>
</@layout.email> </@layout.email>

View File

@ -1,10 +1,10 @@
email.template.password_recovery.subject=\u8ACB\u91CD\u65B0\u8A2D\u7F6E\u60A8\u7684\u5BC6\u78BC 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.hello=\u60a8\u597d{0}\uff01
email.template.password_recovery.instruction1=\u6211\u5011\u6536\u5230\u4E86\u91CD\u7F6E\u5BC6\u78BC\u7684\u8ACB\u6C42\u3002<br/>\u5982\u679C\u60A8\u6C92\u6709\u8ACB\u6C42\u5E6B\u52A9\uFF0C\u8ACB\u5FFD\u7565\u6B64\u96FB\u5B50\u90F5\u4EF6\u3002 email.template.password_recovery.instruction1=\u6211\u5011\u6536\u5230\u91cd\u7f6e\u5bc6\u78bc\u7684\u8981\u6c42\u3002<br/>\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\u93C8\u63A5\uFF1A 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.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.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.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.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\u9A57\u8B49\u5DE5\u4F5C\u6D41\u7A0B\uFF0C\u8ACB\u8A2A\u554F\u4EE5\u4E0B\u93C8\u63A5\uFF1A 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\u4E0D\u652F\u6301HTML\u683C\u5F0F\u90F5\u4EF6 email.no_html.error=\u60a8\u7684\u96fb\u5b50\u90f5\u4ef6\u5ba2\u6236\u7aef\u7a0b\u5f0f\u4e0d\u652f\u63f4HTML\u683c\u5f0f\u90f5\u4ef6

View File

@ -1,5 +1,21 @@
package com.sismics.docs.rest.resource; 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.base.Strings;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.io.ByteStreams; import com.google.common.io.ByteStreams;
@ -27,30 +43,27 @@ import com.sismics.util.HttpUtil;
import com.sismics.util.JsonUtil; import com.sismics.util.JsonUtil;
import com.sismics.util.context.ThreadLocalContext; import com.sismics.util.context.ThreadLocalContext;
import com.sismics.util.mime.MimeType; 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.Json;
import jakarta.json.JsonArrayBuilder; import jakarta.json.JsonArrayBuilder;
import jakarta.json.JsonObjectBuilder; 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.HttpHeaders;
import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.Response.Status; import jakarta.ws.rs.core.Response.Status;
import jakarta.ws.rs.core.StreamingOutput; 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. * File REST resources.
@ -637,7 +650,7 @@ public class FileResource extends BaseResource {
} }
Response.ResponseBuilder builder = Response.ok(stream) 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); .header(HttpHeaders.CONTENT_TYPE, mimeType);
if (decrypt) { if (decrypt) {
// Cache real files // Cache real files
@ -651,6 +664,15 @@ public class FileResource extends BaseResource {
return builder.build(); 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. * Returns all files from a document, zipped.
* *

View File

@ -39,13 +39,21 @@
"global_quota_warning": "<strong>提醒!</strong> 全球配额存储空间已经使用 {{ current | number: 0 }}MB 占总存储配额 {{ total | number: 0 }}MB 的 ({{ percent | number: 1 }}%)" "global_quota_warning": "<strong>提醒!</strong> 全球配额存储空间已经使用 {{ current | number: 0 }}MB 占总存储配额 {{ total | number: 0 }}MB 的 ({{ percent | number: 1 }}%)"
}, },
"document": { "document": {
"navigation_up": "上一层",
"toggle_navigation": "切换文件夹导航",
"display_mode_list": "在列表中显示文件",
"display_mode_grid": "以网格显示文件",
"search_simple": "简单搜索", "search_simple": "简单搜索",
"search_fulltext": "全文搜索", "search_fulltext": "全文搜索",
"search_creator": "创建者", "search_creator": "创建者",
"search_language": "语言", "search_language": "语言",
"search_before_date": "在此日期之前", "search_before_date": "在此日期之前",
"search_after_date": "在此日期之后", "search_after_date": "在此日期之后",
"search_before_update_date": "在此日期之前更新",
"search_after_update_date": "在此日期之后更新",
"search_tags": "标签", "search_tags": "标签",
"search_shared": "仅共享文件",
"search_workflow": "分配给我的工作流程",
"search_clear": "清除", "search_clear": "清除",
"any_language": "所有语言", "any_language": "所有语言",
"add_document": "添加一个文档", "add_document": "添加一个文档",
@ -56,6 +64,7 @@
"search": "搜索", "search": "搜索",
"search_empty": "无匹配 <strong>\"{{ search }}\"</strong>", "search_empty": "无匹配 <strong>\"{{ search }}\"</strong>",
"shared": "已共享", "shared": "已共享",
"current_step_name": "当前步骤",
"title": "标题", "title": "标题",
"description": "介绍", "description": "介绍",
"contributors": "贡献者", "contributors": "贡献者",
@ -67,16 +76,17 @@
"format": "格式", "format": "格式",
"source": "来源", "source": "来源",
"type": "类型", "type": "类型",
"coverage": "覆盖", "coverage": "范围",
"rights": "", "rights": "权",
"relations": "关联", "relations": "关联",
"page_size": "页面大小", "page_size": "页面大小",
"page_size_10": "10 每页", "page_size_10": "每页10列",
"page_size_20": "20 每页", "page_size_20": "每页20列",
"page_size_30": "30 每页", "page_size_30": "每页30列",
"upgrade_quota": "如需要升级您的限额, 请联系管理员", "upgrade_quota": "如需要升级您的限额, 请联系管理员",
"quota": "{{ current | number: 0 }}MB ({{ current | number: 1 }}%) 已使用 {{ total | number: 0 }}MB", "quota": "{{ current | number: 0 }}MB ({{ current | number: 1 }}%) 已使用 {{ total | number: 0 }}MB",
"count": "找到{{ count }}个文件", "count": "找到{{ count }}个文件",
"last_updated": "最后更新 {{ date | timeAgo: dateFormat }}",
"view": { "view": {
"delete_comment_title": "删除评论", "delete_comment_title": "删除评论",
"delete_comment_message": "您是否确认删除此评论?", "delete_comment_message": "您是否确认删除此评论?",
@ -106,7 +116,13 @@
"upload_error": "上传失败", "upload_error": "上传失败",
"upload_error_quota": "已达到您的限额", "upload_error_quota": "已达到您的限额",
"drop_zone": "将文件拖放至此处上传", "drop_zone": "将文件拖放至此处上传",
"add_files": "添加文件" "add_files": "添加文件",
"file_processing_indicator": "此文件正在处理中。该文件正在处理中。在处理完毕之前,将无法进行搜索。",
"reprocess_file": "重新处理该文件",
"upload_new_version": "传新版本",
"open_versions": "显示历史版本",
"display_mode_list": "以列表形式显示文件",
"display_mode_grid": "以网格方式显示文件"
}, },
"workflow": { "workflow": {
"workflow": "工作流程", "workflow": "工作流程",
@ -117,7 +133,8 @@
"full_name": "<strong>{{ name }}</strong>开始于{{ create_date | date }}", "full_name": "<strong>{{ name }}</strong>开始于{{ create_date | date }}",
"cancel_workflow": "取消当前的工作流程", "cancel_workflow": "取消当前的工作流程",
"cancel_workflow_title": "取消工作流程", "cancel_workflow_title": "取消工作流程",
"cancel_workflow_message": "你真的想取消当前的工作流程吗?" "cancel_workflow_message": "你真的想取消当前的工作流程吗?",
"no_workflow": "您不能在此文档上启动任何工作流程。"
}, },
"permissions": { "permissions": {
"permissions": "权限", "permissions": "权限",
@ -136,7 +153,6 @@
"edit": { "edit": {
"document_edited_with_errors": "文档编辑成功但部分文件没能上传", "document_edited_with_errors": "文档编辑成功但部分文件没能上传",
"document_added_with_errors": "文档成功添加但部分文件没能上传", "document_added_with_errors": "文档成功添加但部分文件没能上传",
"document_added": "文档成功上传 (与{{ count }}个文件)",
"quota_reached": "达到限额", "quota_reached": "达到限额",
"primary_metadata": "主要元数据", "primary_metadata": "主要元数据",
"title_placeholder": "资源的性质或类型", "title_placeholder": "资源的性质或类型",
@ -163,7 +179,10 @@
"latest_activity": "最新活动", "latest_activity": "最新活动",
"footer_sismics": "由<a href=\"https://www.sismics.com\" target=\"_blank\">Sismics</a>精心制作", "footer_sismics": "由<a href=\"https://www.sismics.com\" target=\"_blank\">Sismics</a>精心制作",
"api_documentation": "API 存档", "api_documentation": "API 存档",
"feedback": "欢迎提供反馈意见" "feedback": "欢迎提供反馈意见",
"workflow_document_list": "分配给您的文件",
"select_all": "全选",
"select_none": "不选"
}, },
"pdf": { "pdf": {
"export_title": "以PDF形式导出", "export_title": "以PDF形式导出",
@ -184,12 +203,22 @@
"previous": "上一个", "previous": "上一个",
"next": "下一个", "next": "下一个",
"not_found": "文件未找到" "not_found": "文件未找到"
},
"edit": {
"title": "编辑档案",
"name": "文档名称"
},
"versions": {
"title": "历史版本",
"filename": "文档名称",
"mimetype": "类型",
"create_date": "创建日期",
"version": "版本"
} }
}, },
"tag": { "tag": {
"new_tag": "新标签", "new_tag": "新标签",
"search": "搜索", "search": "搜索",
"edit_tag": "更改标签",
"default": { "default": {
"title": "标签", "title": "标签",
"message_1": "<strong>标签</strong> 是和文档相关的标示.", "message_1": "<strong>标签</strong> 是和文档相关的标示.",
@ -204,7 +233,9 @@
"name": "名称", "name": "名称",
"color": "颜色", "color": "颜色",
"parent": "母", "parent": "母",
"info": "此标记的权限也将应用于已标记的文档 <span class=\"label label-info\" ng-style=\"{ 'background': color }\">{{ name }}</span>" "info": "此标记的权限也将应用于已标记的文档 <span class=\"label label-info\" ng-style=\"{ 'background': color }\">{{ name }}</span>",
"circular_reference_title": "重复引用",
"circular_reference_message": "父标签的层级结构形成了一个循环,请选择另一个父标签。"
} }
}, },
"group": { "group": {
@ -239,6 +270,7 @@
"menu_user_account": "用户帐号", "menu_user_account": "用户帐号",
"menu_two_factor_auth": "双重身份验证", "menu_two_factor_auth": "双重身份验证",
"menu_opened_sessions": "已打开会话", "menu_opened_sessions": "已打开会话",
"menu_file_importer": "批量文件导入程序",
"menu_general_settings": "一般设置", "menu_general_settings": "一般设置",
"menu_workflow": "工作流程", "menu_workflow": "工作流程",
"menu_users": "用户", "menu_users": "用户",
@ -246,7 +278,23 @@
"menu_vocabularies": "词条", "menu_vocabularies": "词条",
"menu_configuration": "配置", "menu_configuration": "配置",
"menu_inbox": "收件箱扫描", "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": { "user": {
"title": "用户 <small>管理</small>", "title": "用户 <small>管理</small>",
"add_user": "添加用户", "add_user": "添加用户",
@ -256,6 +304,8 @@
"edit": { "edit": {
"delete_user_title": "删除用户", "delete_user_title": "删除用户",
"delete_user_message": "您是否确认删除该用户? 所有相关文档,文件和标签将被删除", "delete_user_message": "您是否确认删除该用户? 所有相关文档,文件和标签将被删除",
"user_used_title": "用户使用中",
"user_used_message": "该用户用于工作流程 \"{{ name }}\"",
"edit_user_failed_title": "用户已存在", "edit_user_failed_title": "用户已存在",
"edit_user_failed_message": "该用户名已被占用", "edit_user_failed_message": "该用户名已被占用",
"edit_user_title": "<small>编辑</small> \"{{ username }}\"", "edit_user_title": "<small>编辑</small> \"{{ username }}\"",
@ -270,7 +320,10 @@
"disabled": "禁用用户", "disabled": "禁用用户",
"password_reset_btn": "给该用户发送密码重置电子邮件", "password_reset_btn": "给该用户发送密码重置电子邮件",
"password_lost_sent_title": "密码重置邮件已发送", "password_lost_sent_title": "密码重置邮件已发送",
"password_lost_sent_message": "密码重置电子邮件已发送至 <strong>{{ username }}</strong>" "password_lost_sent_message": "密码重置电子邮件已发送至 <strong>{{ username }}</strong>",
"disable_totp_btn": "为该用户禁用双因素身份验证",
"disable_totp_title": "禁用双因素身份验证",
"disable_totp_message": "您确定要禁用该用户的双因素身份验证吗?"
} }
}, },
"workflow": { "workflow": {
@ -291,7 +344,10 @@
"type_validate": "验证", "type_validate": "验证",
"target": "分配给", "target": "分配给",
"target_help": "<strong>批准:</strong>审核并继续工作流程<strong>验证:</strong>接受或拒绝审核", "target_help": "<strong>批准:</strong>审核并继续工作流程<strong>验证:</strong>接受或拒绝审核",
"add_step": "添加工作流程步骤" "add_step": "添加工作流程步骤",
"actions": "之后会发生什么呢?",
"remove_action": "移除行动",
"acl_info": "只有在此定义的用户和组才能在文档上启动此工作流程"
} }
}, },
"security": { "security": {
@ -311,7 +367,10 @@
"message": "您的帐户将不再受双重身份验证保护.", "message": "您的帐户将不再受双重身份验证保护.",
"confirm_password": "确认您的密码", "confirm_password": "确认您的密码",
"submit": "不激活双重身份验证" "submit": "不激活双重身份验证"
} },
"test_totp": "请输入手机上显示的验证码:",
"test_code_success": "验证码 OK",
"test_code_fail": "此代码无效,请仔细检查您的手机是否正确配置或禁用双因素身份验证"
}, },
"group": { "group": {
"title": "群组 <small>管理</small>", "title": "群组 <small>管理</small>",
@ -322,6 +381,8 @@
"delete_group_message": "您是否确认删除该组?", "delete_group_message": "您是否确认删除该组?",
"edit_group_failed_title": "组已存在", "edit_group_failed_title": "组已存在",
"edit_group_failed_message": "该组名已经被占用", "edit_group_failed_message": "该组名已经被占用",
"group_used_title": "使用中的组",
"group_used_message": "组用于工作流程 \"{{ name }}\"",
"edit_group_title": "编辑 <small>\"{{ name }}\"</small>", "edit_group_title": "编辑 <small>\"{{ name }}\"</small>",
"add_group_title": "<small>添加一个</small>组", "add_group_title": "<small>添加一个</small>组",
"name": "名称", "name": "名称",
@ -359,7 +420,23 @@
"smtp_from": "发送邮件", "smtp_from": "发送邮件",
"smtp_username": "SMTP 用户名", "smtp_username": "SMTP 用户名",
"smtp_password": "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": { "inbox": {
"title": "收件箱扫描", "title": "收件箱扫描",
@ -367,6 +444,7 @@
"enabled": "启用收件箱扫描", "enabled": "启用收件箱扫描",
"hostname": "IMAP主机名", "hostname": "IMAP主机名",
"port": "IMAP端口143或993", "port": "IMAP端口143或993",
"starttls": "启用 STARTTLS",
"username": "IMAP用户名", "username": "IMAP用户名",
"password": "IMAP密码", "password": "IMAP密码",
"folder": "IMAP 件夹中", "folder": "IMAP 件夹中",
@ -374,13 +452,23 @@
"test": "测试参数", "test": "测试参数",
"last_sync": "上次同步:{{ data.date | date }}{{ data.count }}消息导入", "last_sync": "上次同步:{{ data.date | date }}{{ data.count }}消息导入",
"test_success": "与收件箱的连接成功({{count}}消息)", "test_success": "与收件箱的连接成功({{count}}消息)",
"test_fail": "连接到收件箱时发生错误,请检查参数" "test_fail": "连接到收件箱时发生错误,请检查参数",
"saved": "IMAP 配置保存成功",
"autoTagsEnabled": "从标有 # 的主题行自动添加标签",
"deleteImported": "导入后从邮箱中删除邮件"
}, },
"log": { "monitoring": {
"title": "服务器 <small>日志</small>", "background_tasks": "后台任务",
"date": "日期", "queued_tasks": "当前有 {{ count }} 队列任务。",
"tag": "标签", "queued_tasks_explain": "文件处理、缩略图创建、索引更新、光学字符识别都是后台任务。大量未处理的任务会导致搜索结果不完整。",
"message": "信息" "server_logs": "服务器日志",
"log_date": "日期",
"log_tag": "标签",
"log_message": "信息",
"indexing": "编制索引",
"indexing_info": "如果发现搜索结果存在差异,可以尝试进行全面的重新索引。在完成此操作之前,搜索结果将是不完整的。",
"start_reindexing": "开始全面重新索引",
"reindexing_started": "重新索引已开始,请等待后台任务结束。"
}, },
"session": { "session": {
"title": "打开 <small>会话</small>", "title": "打开 <small>会话</small>",
@ -401,6 +489,18 @@
"value": "值", "value": "值",
"order": "顺序", "order": "顺序",
"new_entry": "新输入" "new_entry": "新输入"
},
"fileimporter": {
"title": "批量文件导入程序",
"advanced_users": "面向高级用户!",
"need_intro": "如果您需要:",
"need_1": "一次性导入一个文件目录",
"need_2": "扫描目录以查找新文件并将其导入",
"line_1": "转到 <a href=\"https://github.com/sismics/docs/releases\">sismics/docs/releases</a> 并为你的系统下载文件导入工具。",
"line_2": "请按照<a href=\"https://github.com/sismics/docs/tree/master/docs-importer\">此处的说明</a>使用该工具。",
"line_3": "您的文件将根据文件导入器的配置导入到文档中。",
"download": "下载",
"instructions": "使用说明"
} }
}, },
"feedback": { "feedback": {
@ -437,16 +537,17 @@
"Document": "文档", "Document": "文档",
"File": "文件", "File": "文件",
"Group": "组", "Group": "组",
"RouteModel": "工作流程",
"Route": "工作流程",
"Tag": "标签", "Tag": "标签",
"User": "用户", "User": "用户",
"RouteModel": "工作流程", "Webhook": "Webhook"
"Route": "工作流程"
}, },
"selectrelation": { "selectrelation": {
"typeahead": "请输入一个文档名称" "typeahead": "请输入文档名称"
}, },
"selecttag": { "selecttag": {
"typeahead": "请输入一个标签" "typeahead": "请输入标签"
}, },
"datepicker": { "datepicker": {
"current": "今天", "current": "今天",
@ -470,7 +571,7 @@
}, },
"workflow_type": { "workflow_type": {
"VALIDATE": "验证", "VALIDATE": "验证",
"APPROVE": "赞许" "APPROVE": "批准"
}, },
"workflow_transition": { "workflow_transition": {
"APPROVED": "批准", "APPROVED": "批准",
@ -484,14 +585,44 @@
"email": "必须是一个有效邮箱地址", "email": "必须是一个有效邮箱地址",
"password_confirm": "密码和确认密码必须完全一致", "password_confirm": "密码和确认密码必须完全一致",
"number": "必须为数字", "number": "必须为数字",
"no_space": "不允许空格" "no_space": "不允许空格",
"alphanumeric": "只允许使用字母和数字"
},
"action_type": {
"ADD_TAG": "添加标签",
"REMOVE_TAG": "移除标签",
"PROCESS_FILES": "处理文件"
}, },
"pagination": { "pagination": {
"previous": "上一个", "previous": "上一个",
"next": "下一个", "next": "下一个",
"first": "第一", "first": "页首",
"last": "持续" "last": "尾页"
}, },
"onboarding": {
"step1": {
"title": "第一次来?",
"description": "如果您是第一次访问 Teedy请单击 “下一步 ”按钮,否则请随时关闭我。"
},
"step2": {
"title": "文件",
"description": "Teedy 以文件形式组织,每个文件包含多个文件。"
},
"step3": {
"title": "文档",
"description": "您可以在创建文档后或之前使用快速上传区域添加文件。"
},
"step4": {
"title": "检索",
"description": "这是找回文件的主要方法。还可以使用放大镜按钮进行高级搜索。"
},
"step5": {
"title": "标签",
"description": "您可以使用标签来模拟目录结构(如超级文件夹)。请在此处进行配置。"
}
},
"yes": "Yes",
"no": "No",
"ok": "确认", "ok": "确认",
"cancel": "取消", "cancel": "取消",
"share": "共享", "share": "共享",
@ -504,6 +635,8 @@
"export": "导出", "export": "导出",
"edit": "编辑", "edit": "编辑",
"delete": "删除", "delete": "删除",
"rename": "Rename",
"download": "Download",
"loading": "加载中...", "loading": "加载中...",
"send": "发送", "send": "发送",
"enabled": "激活", "enabled": "激活",

View File

@ -1,155 +1,171 @@
{ {
"login": { "login": {
"username": "用戶名", "username": "帳號",
"password": "密碼", "password": "密碼",
"validation_code_required": "請輸入驗證碼", "validation_code_required": "請輸入驗證碼",
"validation_code_title": "您的帳號已經激活了雙身份驗證. 請輸入您配置手機app的提供的驗證碼.", "validation_code_title": "您的帳號已經啟用雙因素驗證. 請輸入您手機app提供的驗證碼.",
"validation_code": "驗證碼", "validation_code": "驗證碼",
"remember_me": "記住我", "remember_me": "記住我",
"submit": "登", "submit": "登",
"login_as_guest": "以遊客身份登錄", "login_as_guest": "以訪客身份登入",
"login_failed_title": "登失敗", "login_failed_title": "登失敗",
"login_failed_message": "用戶名或密碼不正確", "login_failed_message": "帳號或密碼不正確",
"password_lost_btn": "密碼丟失", "password_lost_btn": "忘記密碼?",
"password_lost_sent_title": "發送密碼重置郵件", "password_lost_sent_title": "發送密碼重置郵件",
"password_lost_sent_message": "一封電子郵件已經發送到<strong>{{username}}</ strong>以重置您的密碼", "password_lost_sent_message": "一封電子郵件已經發送到<strong>{{username}}</ strong>以重置您的密碼",
"password_lost_error_title": "密碼重置錯誤", "password_lost_error_title": "密碼重置錯誤",
"password_lost_error_message": "無法發送密碼重置電子郵件,請聯繫您的管理員進行手動重置" "password_lost_error_message": "無法發送密碼重置電子郵件,請聯繫您的管理員進行手動重置"
}, },
"passwordlost": { "passwordlost": {
"title": "密碼丟失", "title": "忘記密碼",
"message": "請輸入您的用戶名以接收密碼重置鏈接。 如果您不記得您的用戶名,請聯繫您的管理員", "message": "請輸入您的帳號以接收密碼重置連結。 如果您不記得您的帳號,請聯繫您的管理員",
"submit": "重置我的密碼" "submit": "重置我的密碼"
}, },
"passwordreset": { "passwordreset": {
"message": "請輸入一個新的密碼", "message": "請輸入新的密碼",
"submit": "我的密碼", "submit": "更我的密碼",
"error_title": "更改密碼出錯", "error_title": "密碼變更錯誤",
"error_message": "您的密碼恢復請求已超時,請在登頁面上提出新的請求" "error_message": "您的密碼恢復請求已超時,請在登頁面上提出新的請求"
}, },
"index": { "index": {
"toggle_navigation": "切換導航", "toggle_navigation": "切換顯示方式",
"nav_documents": "文", "nav_documents": "文",
"nav_tags": "標籤", "nav_tags": "標籤",
"nav_users_groups": "用戶 & 群組", "nav_users_groups": "帳號 & 群組",
"error_info": "{{ count }} 新錯誤", "error_info": "{{ count }} 新錯誤",
"logged_as": "以 {{ username }}登", "logged_as": "以 {{ username }}登",
"nav_settings": "設置", "nav_settings": "設置",
"logout": "退出", "logout": "出",
"global_quota_warning": "<strong>提醒!</ strong>儲空間已經使用{{current | number: 0}} MB{{percent | number: 1}}%)總計{{total | number: 0}} MB" "global_quota_warning": "<strong>提醒!</ strong>空間已經使用{{current | number: 0}} MB{{percent | number: 1}}%)總計{{total | number: 0}} MB"
}, },
"document": { "document": {
"search_simple": "簡單搜索", "navigation_up": "上一层",
"search_fulltext": "全文搜索", "toggle_navigation": "切換資料夾顯示方式",
"search_creator": "創建者", "display_mode_list": "清單顯示",
"display_mode_grid": "網格顯示",
"search_simple": "簡易搜尋",
"search_fulltext": "全文檢索",
"search_creator": "建立者",
"search_language": "語言", "search_language": "語言",
"search_before_date": "在該日期之前", "search_before_date": "在該日期之前",
"search_after_date": "在該日期之後", "search_after_date": "在該日期之後",
"search_before_update_date": "在此日期之前更新",
"search_after_update_date": "在此日期之後更新",
"search_tags": "標籤", "search_tags": "標籤",
"search_shared": "僅共享文件",
"search_workflow": "分配給我的工作流程",
"search_clear": "清除", "search_clear": "清除",
"any_language": "任何語言", "any_language": "任何語言",
"add_document": "添加一個文檔", "add_document": "新增文件",
"import_eml": "從電子郵件EML格式", "import_eml": "從電子郵件EML格式",
"tags": "標籤", "tags": "標籤",
"no_tags": "無標籤", "no_tags": "無標籤",
"no_documents": "數據庫中無該文檔", "no_documents": "無此文件",
"search": "搜", "search": "搜",
"search_empty": "無匹配 <strong>\"{{ search }}\"</strong>", "search_empty": "搜尋不到 <strong>\"{{ search }}\"</strong>",
"shared": "分享", "shared": "分享",
"title": "標題", "current_step_name": "當前步驟",
"description": "介绍", "title": "文件名稱",
"description": "簡介",
"contributors": "貢獻者", "contributors": "貢獻者",
"language": "語言", "language": "語言",
"creation_date": "建時間", "creation_date": "時間",
"subject": "主題", "subject": "主題",
"identifier": "識別碼", "identifier": "識別碼",
"publisher": "發者", "publisher": "發者",
"format": "格式", "format": "格式",
"source": "來源", "source": "來源",
"type": "類型", "type": "類型",
"coverage": "覆蓋", "coverage": "範圍",
"rights": "", "rights": "權",
"relations": "關聯", "relations": "關聯",
"page_size": "頁面大小", "page_size": "頁面大小",
"page_size_10": "10 每頁", "page_size_10": "每頁10列",
"page_size_20": "20 每頁", "page_size_20": "每頁20列",
"page_size_30": "20 每頁", "page_size_30": "每頁30列",
"upgrade_quota": "如需要升級您的限額, 請聯繫管理員", "upgrade_quota": "如需要擴充檔案容量, 請聯繫管理員",
"quota": "{{ current | number: 0 }}MB ({{ current | number: 1 }}%) 已使用 {{ total | number: 0 }}MB", "quota": "{{ current | number: 0 }}MB ({{ current | number: 1 }}%) 已使用 {{ total | number: 0 }}MB",
"count": "{{ count }} 文檔找到", "count": "{{ count }} 文件找到",
"last_updated": "最後更新 {{ date | timeAgo: dateFormat }}",
"view": { "view": {
"delete_comment_title": "刪除評論", "delete_comment_title": "刪除留言",
"delete_comment_message": "您是否確認刪除此評論?", "delete_comment_message": "您是否確認刪除此留言?",
"delete_document_title": "刪除文", "delete_document_title": "刪除文",
"delete_document_message": "您是否確認刪除此文?", "delete_document_message": "您是否確認刪除此文?",
"shared_document_title": "共享文", "shared_document_title": "共享文",
"shared_document_message": "您可以直接通過發送該鏈接來分享該文檔. 注意:任何有該鏈接的人員均可查看該文檔.<br/><input class=\"form-control share-link\" type=\"text\" readonly=\"readonly\" value=\"{{ link }}\" onclick=\"this.select(); document.execCommand('copy');\" />", "shared_document_message": "您可以直接通過發送該連結來分享該文件. 注意:任何有該連結的人員均可查看文件.<br/><input class=\"form-control share-link\" type=\"text\" readonly=\"readonly\" value=\"{{ link }}\" onclick=\"this.select(); document.execCommand('copy');\" />",
"not_found": "文未找到", "not_found": "文未找到",
"forbidden": "無權限", "forbidden": "無權限",
"download_files": "下載文", "download_files": "下載文",
"export_pdf": "以PDF格式出", "export_pdf": "以PDF格式出",
"by_creator": "由", "by_creator": "由",
"comments": "評論", "comments": "留言",
"no_comments": "此文檔暫無評論", "no_comments": "此文件暫無留言",
"add_comment": "添加評論", "add_comment": "新增留言",
"error_loading_comments": "評論加載失敗", "error_loading_comments": "留言載入失敗",
"workflow_current": "當前工作流程步驟", "workflow_current": "目前工作流程",
"workflow_comment": "添加工作流程評論", "workflow_comment": "新增工作流程留言",
"workflow_validated_title": "工作流程步驟已驗證", "workflow_validated_title": "工作流程確認",
"workflow_validated_message": "工作流步驟已成功驗證。", "workflow_validated_message": "工作流程確認成功。",
"content": { "content": {
"content": "內容", "content": "內容",
"delete_file_title": "刪除檔", "delete_file_title": "刪除",
"delete_file_message": "您是否確認刪除此檔?", "delete_file_message": "您是否確認刪除此?",
"upload_pending": "等待中...", "upload_pending": "等待中...",
"upload_progress": "上傳中...", "upload_progress": "上傳中...",
"upload_error": "上傳失敗", "upload_error": "上傳失敗",
"upload_error_quota": "已達到您的限額", "upload_error_quota": "超過上限",
"drop_zone": "將文件拖放至此處上傳", "drop_zone": "將檔案拖放至此處上傳",
"add_files": "添加文件" "add_files": "新增檔案",
"file_processing_indicator": "該文件正在處理中。在完成之前搜尋將不可用。",
"reprocess_file": "重新更新檔案",
"upload_new_version": "上傳新的版本",
"open_versions": "顯示歷史版本",
"display_mode_list": "以列表方式顯示",
"display_mode_grid": "以網格方式顯示"
}, },
"workflow": { "workflow": {
"workflow": "工作流程", "workflow": "工作流程",
"message": "使用工作流程與您的組織的人員驗證或驗證您的文檔。", "message": "使用工作流程讓組織中的人員確認或檢閱您的文件。",
"workflow_start_label": "哪個工作流程啟動?", "workflow_start_label": "哪個工作流程啟動?",
"add_more_workflow": "添加更多工作流程", "add_more_workflow": "新增工作流程",
"start_workflow_submit": "開始工作流程", "start_workflow_submit": "開始工作流程",
"full_name": "<strong>{{ name }}</strong>開始於{{ create_date | date }}", "full_name": "<strong>{{ name }}</strong>開始於{{ create_date | date }}",
"cancel_workflow": "取消前的工作流程", "cancel_workflow": "取消前的工作流程",
"cancel_workflow_title": "取消工作流程", "cancel_workflow_title": "取消工作流程",
"cancel_workflow_message": "你真的想取消當前的工作流程嗎?" "cancel_workflow_message": "你真的想取消目前的工作流程嗎?",
"no_workflow": "您無法對此文件啟動任何工作流程。"
}, },
"permissions": { "permissions": {
"permissions": "權限", "permissions": "權限",
"message": "權限可以直接應用於此文檔, 或從 <a href=\"#/tag\">標籤</a>取.", "message": "權限可以直接套用於此文件, 或從 <a href=\"#/tag\">標籤</a>取.",
"title": "該文檔權限", "title": "文件權限",
"inherited_tags": "由標籤取的權限", "inherited_tags": "由標籤的權限",
"acl_source": "從", "acl_source": "從",
"acl_target": "為", "acl_target": "為",
"acl_permission": "權限" "acl_permission": "權限"
}, },
"activity": { "activity": {
"activity": "活動", "activity": "活動",
"message": "對該文的任何更改都將記錄於此." "message": "對該文的任何更改都將記錄於此."
} }
}, },
"edit": { "edit": {
"document_edited_with_errors": "文檔編輯成功但部分文件沒能上傳", "document_edited_with_errors": "文件編輯成功但部分文件沒能上傳",
"document_added_with_errors": "文檔成功添加但部分文件沒能上傳", "document_added_with_errors": "文件成功新增但部分文件沒能上傳",
"document_added": "文檔已成功添加 (包含 {{ count }} 文件)", "quota_reached": "達到上限",
"quota_reached": "達到限額", "primary_metadata": "主要後設資料",
"primary_metadata": "主要元數據",
"title_placeholder": "資源的性質或類型", "title_placeholder": "資源的性質或類型",
"description_placeholder": "資源的賬戶", "description_placeholder": "資源的賬戶",
"new_files": "新文件", "new_files": "新文件",
"orphan_files": "+ {{ count }} 文件", "orphan_files": "+ {{ count }} 文件",
"additional_metadata": "附加元數據", "additional_metadata": "附加後設資料",
"subject_placeholder": "資源話題", "subject_placeholder": "題",
"identifier_placeholder": "在給定的上下文中對資源的明確引用", "identifier_placeholder": "在給定的上下文中對資源的明確引用",
"publisher_placeholder": "負責提供資源的實體", "publisher_placeholder": "負責提供資源的實體",
"format_placeholder": "資源的文件格式, 物理介質或維度", "format_placeholder": "資源的文件格式、實體媒體或尺寸",
"source_placeholder": "從中出所描述的資源的相關來源", "source_placeholder": "從中出所描述的資源的相關來源",
"uploading_files": "上傳文件中..." "uploading_files": "文件上傳中..."
}, },
"default": { "default": {
"upload_pending": "等待中...", "upload_pending": "等待中...",
@ -158,24 +174,27 @@
"upload_error_quota": "達到限額", "upload_error_quota": "達到限額",
"quick_upload": "快速上傳", "quick_upload": "快速上傳",
"drop_zone": "將文件拖放至此處上傳", "drop_zone": "將文件拖放至此處上傳",
"add_files": "添加文件", "add_files": "新增檔案",
"add_new_document": "添加至新文檔", "add_new_document": "新增文件",
"latest_activity": "最新活動", "latest_activity": "最新活動",
"footer_sismics": "<span class=\"fas fa-heart\"></span> 由 <a href=\"https://www.sismics.com\" target=\"_blank\">Sismics</a> 精心製作", "footer_sismics": "<span class=\"fas fa-heart\"></span> 由 <a href=\"https://www.sismics.com\" target=\"_blank\">Sismics</a> 精心製作",
"api_documentation": "API 存檔", "api_documentation": "API 存檔",
"feedback": "歡迎提供反饋意見" "feedback": "歡迎回饋意見",
"workflow_document_list": "指派給您的文件",
"select_all": "全選",
"select_none": "不選"
}, },
"pdf": { "pdf": {
"export_title": "以PDF形式導出", "export_title": "以PDF形式出",
"export_metadata": "導出元數據", "export_metadata": "匯出後設資料",
"export_comments": "導出評論", "export_comments": "匯出留言",
"fit_to_page": "使圖像適合頁面", "fit_to_page": "合頁面",
"margin": "餘量", "margin": "頁邊",
"millimeter": "毫米" "millimeter": "公釐"
}, },
"share": { "share": {
"title": "共享文", "title": "共享文",
"message": "如果您想多次共享同一文檔,請將共享命名.", "message": "如果您想要多次共享相同文件,請為共享命名。",
"submit": "共享" "submit": "共享"
} }
}, },
@ -183,36 +202,48 @@
"view": { "view": {
"previous": "上一個", "previous": "上一個",
"next": "下一個", "next": "下一個",
"not_found": "文件未找到" "not_found": "未找到文件"
},
"edit": {
"title": "編輯檔案",
"name": "檔案名稱"
},
"versions": {
"title": "版本歷史",
"filename": "檔名",
"mimetype": "類型",
"create_date": "建立日期",
"version": "版本"
} }
}, },
"tag": { "tag": {
"new_tag": "新標籤", "new_tag": "新增",
"search": "搜索", "search": "搜尋",
"edit_tag": "更改標籤",
"default": { "default": {
"title": "標籤", "title": "標籤",
"message_1": "<strong>標籤</strong> 是和文檔相關的標示.", "message_1": "<strong>標籤</strong>是用來連結文件的標記.",
"message_2": "一個文檔可以由多個標籤標記, 同時一個標籤可以運用於多個文檔.", "message_2": "文件可以對應多個標籤, 同時標籤也可以運用於多個文件.",
"message_3": "使用該 <span class=\"fas fa-pencil-alt\"></span> 按鈕, 您可以編輯標籤的權限.", "message_3": "點選 <span class=\"fas fa-pencil-alt\"></span> 按鈕, 您可以設定標籤權限.",
"message_4": "如果一個標籤可以被另一個用戶或組讀取, 相關的文件也可以被這些人閱讀.", "message_4": "如果標籤可以被帳號或群組讀取, 相關聯的文件也可以被這些人閱讀.",
"message_5": "例如, 用一個標籤標記您公司的文檔 <span class=\"label label-info\">我的公司</span> 並同時添加權限 <strong>可讀</strong> 給一個群組的 <span class=\"btn btn-default\">員工</span>" "message_5": "例如, 用標籤標記您公司文件 <span class=\"label label-info\">我的公司</span> 並同時賦予 <strong>可讀</strong> 權限給群組\"<span class=\"btn btn-default\">員工</span>\""
}, },
"edit": { "edit": {
"delete_tag_title": "刪除標籤", "delete_tag_title": "刪除標籤",
"delete_tag_message": "是否確認刪除該標籤?", "delete_tag_message": "是否刪除?",
"name": "名稱", "name": "名稱",
"color": "顏色", "color": "顏色",
"parent": "母", "parent": "上層",
"info": "此標記的權限也將應用於已標記的文檔 <span class=\"label label-info\" ng-style=\"{ 'background': color }\">{{ name }}</span>" "info": "此標籤上的權限將套用至關聯的文件 <span class=\"label label-info\" ng-style=\"{ 'background': color }\">{{ name }}</span>",
"circular_reference_title": "重複引用",
"circular_reference_message": "上層標籤的層次結構形成循環,請選擇另一個上層標籤。"
} }
}, },
"group": { "group": {
"profile": { "profile": {
"members": "組成員", "members": "組成員",
"no_members": "無組成員", "no_members": "沒有成員",
"related_links": "相關鏈接", "related_links": "相關連結",
"edit_group": "編輯 {{ name }} 組" "edit_group": "編輯 {{ name }} 組"
} }
}, },
"user": { "user": {
@ -220,230 +251,300 @@
"groups": "群組", "groups": "群組",
"quota_used": "已使用配額", "quota_used": "已使用配額",
"percent_used": "{{ percent | number: 0 }}% 已使用", "percent_used": "{{ percent | number: 0 }}% 已使用",
"related_links": "相關接", "related_links": "相關接",
"document_created": "文檔由 {{ username }} 創建", "document_created": "文件由 {{ username }} 建立",
"edit_user": "編輯 {{ username }} 用戶" "edit_user": "編輯 {{ username }} 帳號"
} }
}, },
"usergroup": { "usergroup": {
"search_groups": "搜群組", "search_groups": "搜群組",
"search_users": "搜索用戶", "search_users": "搜尋帳號",
"you": "您", "you": "您",
"default": { "default": {
"title": "用戶 & 群組", "title": "帳號 & 群組",
"message": "此處您可以瀏覽用戶和群組信息." "message": "此處您可以瀏覽帳號和群組資訊."
} }
}, },
"settings": { "settings": {
"menu_personal_settings": "個人設置", "menu_personal_settings": "個人設定",
"menu_user_account": "用戶帳號", "menu_user_account": "帳號",
"menu_two_factor_auth": "雙重身份驗證", "menu_two_factor_auth": "雙因素驗證",
"menu_opened_sessions": "已打開會話", "menu_opened_sessions": "已開啟之連線",
"menu_general_settings": "一般設置", "menu_file_importer": "匯入大量檔案",
"menu_general_settings": "一般設定",
"menu_workflow": "工作流程", "menu_workflow": "工作流程",
"menu_users": "用戶", "menu_users": "使用者",
"menu_groups": "群組", "menu_groups": "群組",
"menu_vocabularies": "詞條", "menu_vocabularies": "詞彙",
"menu_configuration": "配置", "menu_configuration": "設定",
"menu_inbox": "收件箱掃描", "menu_inbox": "收件匣",
"menu_server_logs": "服務器日誌", "menu_ldap": "LDAP 驗證",
"menu_metadata": "自訂後置資料",
"menu_monitoring": "監控",
"ldap": {
"title": "LDAP 驗證",
"enabled": "啟用Ldap驗證",
"host": "主機名稱",
"port": "通運埠 port (389)",
"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": { "user": {
"title": "用戶 <small>管理</small>", "title": "使用者 <small>管理</small>",
"add_user": "添加用戶", "add_user": "新增使用者",
"username": "用戶名", "username": "使用者",
"create_date": "創建日期", "create_date": "日期",
"totp_enabled": "為該用戶啟用雙重身份驗證", "totp_enabled": "啟用雙因素驗證",
"edit": { "edit": {
"delete_user_title": "刪除用戶", "delete_user_title": "刪除使用者",
"delete_user_message": "您是否確認刪除該用戶? 所有相關文檔,文件和標籤將被刪除", "delete_user_message": "您是否確認刪除使用者? 所有相關文件,文件和標籤將被刪除",
"edit_user_failed_title": "用戶已經存在", "user_used_title": "正在使用中",
"edit_user_failed_message": "該用戶名已經被占用", "user_used_message": "使用者已參與工作流程 \"{{ name }}\"",
"edit_user_failed_title": "使用者已經存在",
"edit_user_failed_message": "該使用者正在使用中",
"edit_user_title": "<small>編輯</small> \"{{ username }}\"", "edit_user_title": "<small>編輯</small> \"{{ username }}\"",
"add_user_title": "<small>添加一個</small> 用戶", "add_user_title": "<small>新增</small> 使用者",
"username": "用戶名", "username": "使用者",
"email": "郵箱", "email": "郵",
"groups": "群組", "groups": "群組",
"storage_quota": "儲限額", "storage_quota": "限額",
"storage_quota_placeholder": "儲限額 (單位MB)", "storage_quota_placeholder": "限額 (單位MB)",
"password": "密碼", "password": "密碼",
"password_confirm": "密碼 (確認)", "password_confirm": "密碼 (確認)",
"disabled": "禁用用戶", "disabled": "禁用",
"password_reset_btn": "給該用戶發送密碼重置電子郵件", "password_reset_btn": "發送重置密碼電子郵件",
"password_lost_sent_title": "密碼重置郵件已發送", "password_lost_sent_title": "重置密碼郵件已發送",
"password_lost_sent_message": "密碼重置電子郵件已發送至 <strong>{{ username }}</strong>" "password_lost_sent_message": "重置密碼電子郵件已發送至 <strong>{{ username }}</strong>",
"disable_totp_btn": "停用該使用者的雙因素驗證",
"disable_totp_title": "停用雙因素驗證",
"disable_totp_message": "您確定要為此使用者停用雙因素驗證嗎?"
} }
}, },
"workflow": { "workflow": {
"title": "工作流程<small>配置</small>", "title": "工作流程<small>設定</small>",
"add_workflow": "添加工作流程", "add_workflow": "新增工作流程",
"name": "名稱", "name": "名稱",
"create_date": "建日期", "create_date": "日期",
"edit": { "edit": {
"delete_workflow_title": "刪除工作流程", "delete_workflow_title": "刪除工作流程",
"delete_workflow_message": "你真的想刪除這個工作流程嗎?前正在運行的工作流程不會被刪除", "delete_workflow_message": "你真的想刪除這個工作流程嗎?前正在運行的工作流程不會被刪除",
"edit_workflow_title": "<small>編輯</small>\"{{name}}\"", "edit_workflow_title": "<small>編輯</small>\"{{name}}\"",
"add_workflow_title": "<small>添加一個</small>工作流程", "add_workflow_title": "<small>新增</small>工作流程",
"name": "名稱", "name": "名稱",
"name_placeholder": "步驟名稱或說明", "name_placeholder": "步驟名稱或說明",
"drag_help": "拖放以重新排序步驟", "drag_help": "拖放以重新排序步驟",
"type": "步驟類型", "type": "類型",
"type_approve": "批准", "type_approve": "核准",
"type_validate": "驗證", "type_validate": "檢查",
"target": "分配給", "target": "指派",
"target_help": "<strong>批准:</strong>審核並繼續工作流程<br/><strong>驗證:</strong>接受或拒絕審核", "target_help": "<strong>檢查:</strong>檢閱並繼續工作流程<br/><strong>核准:</strong>接受或拒絕",
"add_step": "添加工作流程步驟" "add_step": "新增工作流程",
"actions": "設定下一步驟",
"remove_action": "移除步驟",
"acl_info": "只有此處定義的使用者和群組才能在文件上啟動此工作流程"
} }
}, },
"security": { "security": {
"enable_totp": "激活雙重身份驗證", "enable_totp": "啟用雙因素驗證",
"enable_totp_message": "請確保您的手機上已經擁有一個TOTP兼容的應用程序方可添加新賬戶", "enable_totp_message": "請確保您的手機上已經擁有相容TOTP的應用程序方可啟用",
"title": "雙重身份 <small>驗證</small>", "title": "雙因素 <small>驗證</small>",
"message_1": "雙重身份驗證將讓您的<strong>{{ appName }}</strong> 帳號獲得多一層的安全保障.<br/>在啟用該功能前, 請確保在您的手機上擁有一個與TOTP兼容的應用程序:", "message_1": "雙因素驗證將讓您的<strong>{{ appName }}</strong> 帳號獲得多一層的安全保障.<br/>在啟用該功能前, 請確保在您的手機上擁有TOTP相容的應用程式:",
"message_google_authenticator": "給安卓, 蘋果, 和 黑莓系統: <a href=\"https://support.google.com/accounts/answer/1066447\" target=\"_blank\">谷歌認證</a>", "message_google_authenticator": "給安卓, 蘋果, 和 黑莓系統: <a href=\"https://support.google.com/accounts/answer/1066447\" target=\"_blank\">谷歌認證</a>",
"message_duo_mobile": "給 安卓 和 蘋果系統: <a href=\"https://guide.duo.com/third-party-accounts\" target=\"_blank\">Duo Mobile</a>", "message_duo_mobile": "給 安卓 和 蘋果系統: <a href=\"https://guide.duo.com/third-party-accounts\" target=\"_blank\">Duo Mobile</a>",
"message_authenticator": "給 Windows 系統手機: <a href=\"https://www.microsoft.com/en-US/store/apps/Authenticator/9WZDNCRFJ3RJ\" target=\"_blank\">認證</a>", "message_authenticator": "給 Windows 系統手機: <a href=\"https://www.microsoft.com/en-US/store/apps/Authenticator/9WZDNCRFJ3RJ\" target=\"_blank\">認證</a>",
"message_2": "這些應用程序會自動生成一個驗證碼,且該驗證碼在一段時間內會變化.<br/>每次登錄 <strong>{{ appName }}</strong>時您都需要輸入該驗證碼.", "message_2": "這些應用程式會自動生成驗證碼,且該驗證碼在一段時間內會變化.<br/>每次登入 <strong>{{ appName }}</strong>時您都需要輸入該驗證碼.",
"secret_key": "您的鑰是: <strong>{{ secret }}</strong>", "secret_key": "您的鑰是: <strong>{{ secret }}</strong>",
"secret_key_warning": "現在用該秘鑰配置您的手機應用程序上的TOTP, 您之後將無獲取權限.", "secret_key_warning": "現在用金鑰設定您的手機應用程序上的TOTP, 您之後將無法存取本金鑰.",
"totp_enabled_message": "雙重身份驗證將確保您的帳號.<br/>每次您登錄 <strong>{{ appName }}</strong>時, 您都需要從您配置的手機應用程序的驗證碼.<br/>如果您丟失您的手機, 您將無法登錄您的帳號但有效會話將允許您重新生成密鑰.", "totp_enabled_message": "雙因素驗證將確保您的帳號.<br/>每次您登入 <strong>{{ appName }}</strong>時, 您都需要從您設定的手機應用程序的驗證碼.<br/>如果您丟失您的手機, 您將無法登入您的帳號但有效連線將允許您重新生成密鑰.",
"disable_totp": { "disable_totp": {
"disable_totp": "不激活雙重身份驗證", "disable_totp": "不啟用雙因素驗證",
"message": "您的帳戶將不再受雙重身份驗證保護.", "message": "您的帳號將不再受雙因素驗證保護.",
"confirm_password": "確認您的密碼", "confirm_password": "確認您的密碼",
"submit": "不激活雙重身份驗證" "submit": "不啟用雙因素驗證"
} },
"test_totp": "請輸入手機上顯示的驗證碼:",
"test_code_success": "驗證碼正確",
"test_code_fail": "驗證碼無效,請仔細檢查您的手機設定是否正確或停用雙因素驗證"
}, },
"group": { "group": {
"title": "群組 <small>管理</small>", "title": "群組 <small>管理</small>",
"add_group": "添加組", "add_group": "新增群組",
"name": "名稱", "name": "名稱",
"edit": { "edit": {
"delete_group_title": "刪除組", "delete_group_title": "刪除群組",
"delete_group_message": "您是否確認刪除該組?", "delete_group_message": "您是否確認刪除該群組?",
"edit_group_failed_title": "組已經存在", "edit_group_failed_title": "群組已經存在",
"edit_group_failed_message": "這個組名已經被占用", "edit_group_failed_message": "這個群組名已經被使用",
"group_used_title": "Group in use",
"group_used_message": "This group is used in the workflow \"{{ name }}\"",
"edit_group_title": "編輯 <small>\"{{ name }}\"</small>", "edit_group_title": "編輯 <small>\"{{ name }}\"</small>",
"add_group_title": "添加 <small>組</small>", "add_group_title": "新增 <small>組</small>",
"name": "名稱", "name": "名稱",
"parent_group": "群組", "parent_group": "上層群組",
"search_group": "搜組", "search_group": "搜尋群組",
"members": "成員", "members": "成員",
"new_member": "新成員", "new_member": "新成員",
"search_user": "搜索用戶" "search_user": "搜尋帳號"
} }
}, },
"account": { "account": {
"title": "用戶<small>帳戶</ small>", "title": "帳號<small>帳號</ small>",
"password": "密碼", "password": "密碼",
"password_confirm": "密碼 (確認)", "password_confirm": "密碼 (確認)",
"updated": "帳號更新成功" "updated": "帳號更新成功"
}, },
"config": { "config": {
"title_guest_access": "客 <small>權限</small>", "title_guest_access": "客 <small>權限</small>",
"message_guest_access": "遊客權限是所有人都能無需密碼即獲取 {{ appName }} 的權限模式.<br/>和其他正常用戶一樣, 遊客權限用戶也只能通過其獲取的權限來訪問其文檔.<br/>", "message_guest_access": "訪客權限是所有人都能無需密碼即可取得 {{ appName }} 的權限模式.<br/>和其他正常帳號一樣, 訪客權限帳號也只能通過其取得的權限來存取其文件.<br/>",
"enable_guest_access": "激活遊客權限", "enable_guest_access": "啟用訪客權限",
"disable_guest_access": "不激活遊客權限", "disable_guest_access": "不啟用訪客權限",
"title_theme": "主題 <small>定制</small>", "title_theme": "主題 <small>定制</small>",
"title_general": "一般配置", "title_general": "一般設定",
"default_language": "新文檔的默認語言", "default_language": "新文件預設語言",
"application_name": "申請名", "application_name": "",
"main_color": "主顏色", "main_color": "主顏色",
"custom_css": "用戶樣式表", "custom_css": "自訂CSS",
"custom_css_placeholder": "在主樣式表之後添加客戶自定義樣式表", "custom_css_placeholder": "在主要stylesheet之後新增自訂CSS",
"logo": "標 (正方形)", "logo": " (正方形)",
"background_image": "背景圖片", "background_image": "背景圖片",
"uploading_image": "上傳圖片中...", "uploading_image": "上傳圖片中...",
"title_smtp": "電子郵件<small>配置</ small>", "title_smtp": "電子郵件<small>設定</ small>",
"smtp_hostname": "SMTP主機名", "smtp_hostname": "SMTP主機名",
"smtp_port": "SMTP端口", "smtp_port": "SMTP",
"smtp_from": "發件人的電子郵件", "smtp_from": "寄件者電子郵件",
"smtp_username": "SMTP用戶名", "smtp_username": "SMTP帳號",
"smtp_password": "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": { "inbox": {
"title": "收件箱掃描", "title": "收件匣掃描",
"message": "通過啟用此功能,系統會定期掃描指定收件箱中的新電子郵件並自動導入它們。", "message": "通過啟用此功能,系統會定期掃描指定收件匣中的新電子郵件並自動匯入它們。",
"enabled": "啟用收件箱掃描", "enabled": "啟用收件匣掃描功能",
"hostname": "IMAP主機名", "hostname": "IMAP主機名稱",
"port": "IMAP端口143或993", "port": "IMAP埠143或993",
"username": "IMAP用戶名", "starttls": "啟用STARTTLS",
"username": "IMAP帳號",
"password": "IMAP密碼", "password": "IMAP密碼",
"folder": "IMAP 資料夾", "folder": "IMAP 資料夾",
"tag": "標籤添加到導入的文檔", "tag": "新增標籤到匯入的文件",
"test": "測試參數", "test": "測試參數",
"last_sync": "上次同步:{{ data.date | date }}{{data.count}}消息導入", "last_sync": "上次同步:{{ data.date | date }}{{data.count}}訊息匯入",
"test_success": "與收件箱的連接成功({{ count }} 消息)", "test_success": "與收件匣的連接成功({{ count }} 消息)",
"test_fail": "連接到收件箱時發生錯誤,請檢查參數" "test_fail": "連接到收件匣時發生錯誤,請檢查參數",
"saved": "設定成功",
"autoTagsEnabled": "自動從標有 # 的主旨新增標籤",
"deleteImported": "匯入後從郵件匣中刪除郵件"
}, },
"log": { "monitoring": {
"title": "服務器 <small>日誌</small>", "background_tasks": "背景任務",
"date": "日期", "queued_tasks": "目前有 {{ count }} 任務排列.",
"tag": "標籤", "queued_tasks_explain": "文件處理、縮圖建立、索引更新、光學字元辨識是後台任務。大量未處理的任務將導致搜尋結果不完整。",
"message": "信息" "server_logs": "伺服器日誌",
"log_date": "日期",
"log_tag": "標籤",
"log_message": "訊息",
"indexing": "索引",
"indexing_info": "如果您發現搜尋結果有差異,可以嘗試進行完整的重新索引。在完成此操作之前,搜尋結果將不完整。",
"start_reindexing": "重建全部索引",
"reindexing_started": "重建索引開始, 請耐心等待直至無任務排列"
}, },
"session": { "session": {
"title": "打開 <small>會話</small>", "title": "已開啟 <small>連線</small>",
"created_date": "創建日期", "created_date": "日期",
"last_connection_date": "最後登錄時間", "last_connection_date": "最後登時間",
"user_agent": "從", "user_agent": "從",
"current": "當前", "current": "前",
"current_session": "這是目前會話", "current_session": "這是目前連線",
"clear_message": "該帳號的所有其他連接將終止", "clear_message": "該帳號的所有其他連線將中斷",
"clear": "清除所有其他會話" "clear": "清除其他連線"
}, },
"vocabulary": { "vocabulary": {
"title": "詞 <small>輸入</small>", "title": "詞 <small>輸入</small>",
"choose_vocabulary": "選擇一個詞條編輯", "choose_vocabulary": "選擇詞彙編輯",
"type": "類型", "type": "一般類型",
"coverage": "覆蓋", "coverage": "國家地區",
"rights": "權利", "rights": "授權類",
"value": "", "value": "詞彙",
"order": "顺序", "order": "顺序",
"new_entry": "新輸入" "new_entry": "新增詞彙"
},
"fileimporter": {
"title": "匯入大量檔案",
"advanced_users": "進階使用者專用!",
"need_intro": "阿你如果要:",
"need_1": "一次性匯入整個目錄內檔案",
"need_2": "掃描目錄內新的檔案並且匯入",
"line_1": "前往 <a href=\"https://github.com/sismics/docs/releases\">sismics/docs/releases</a> 並下載適合您系統的檔案匯入工具。",
"line_2": "請依照<a href=\"https://github.com/sismics/docs/tree/master/docs-importer\">此處的說明</a>使用此工具。",
"line_3": "您的文件將根據設定匯入到文件中。",
"download": "下載",
"instructions": "匯入步驟"
} }
}, },
"feedback": { "feedback": {
"title": "歡迎提供反饋意見", "title": "歡迎提供饋意見",
"message": "對Teedy文檔管理系統有任何建議或疑問我們靜候您的反饋意見", "message": "對Teedy文件管理系統有任何建議或疑問?我們靜候您的回饋意見!",
"sent_title": "反饋已發送", "sent_title": "饋已發送",
"sent_message": "感謝您的反饋意見這將幫助我們進一步優化Teedy文檔管理系統以便更好的為您提供服務。" "sent_message": "感謝您的回饋意見這將幫助我們進一步優化Teedy文件管理系統以便更好的為您提供服務。"
}, },
"import": { "import": {
"title": "輸入", "title": "輸入",
"error_quota": "已達到配額限制,請聯繫您的管理員以增加配額", "error_quota": "已達到配額限制,請聯繫您的管理員以增加配額",
"error_general": "嘗試導入文件時發生錯誤請確保它是有效的EML文件" "error_general": "嘗試入文件時發生錯誤請確保它是有效的EML文件"
}, },
"app_share": { "app_share": {
"main": "請求一個共享的文檔鏈接來訪問該文檔", "main": "請求文件共享的連結來存取該文件",
"403": { "403": {
"title": "未經授權", "title": "未經授權",
"message": "您正在查看的文已經被取消共享" "message": "您正在查看的文已經被取消共享"
} }
}, },
"directive": { "directive": {
"acledit": { "acledit": {
"acl_target": "用於", "acl_target": "對象",
"acl_permission": "允許", "acl_permission": "權限",
"add_permission": "添加一個許可", "add_permission": "新增權限",
"search_user_group": "搜索一個用戶或組" "search_user_group": "搜尋帳號或群組"
}, },
"auditlog": { "auditlog": {
"log_created": "建", "log_created": "",
"log_updated": "更新", "log_updated": "更新",
"log_deleted": "删除", "log_deleted": "删除",
"Acl": "ACL", "Acl": "ACL",
"Comment": "評論", "Comment": "留言",
"Document": "文", "Document": "文",
"File": "文件", "File": "文件",
"Group": "組", "Group": "組",
"Tag": "標籤", "Route": "工作流程",
"User": "用戶",
"RouteModel": "工作流程", "RouteModel": "工作流程",
"Route": "工作流程" "Tag": "標籤",
"User": "帳號",
"Webhook": "Webhook"
}, },
"selectrelation": { "selectrelation": {
"typeahead": "請輸入文名稱" "typeahead": "請輸入文名稱"
}, },
"selecttag": { "selecttag": {
"typeahead": "請輸入標籤" "typeahead": "請輸入標籤"
@ -464,48 +565,80 @@
"READ": "可讀", "READ": "可讀",
"READWRITE": "可寫", "READWRITE": "可寫",
"WRITE": "可寫", "WRITE": "可寫",
"USER": "用戶", "USER": "帳號",
"GROUP": "組", "GROUP": "組",
"SHARE": "已共享" "SHARE": "已共享"
}, },
"workflow_type": { "workflow_type": {
"VALIDATE": "驗證", "VALIDATE": "檢查",
"APPROVE": "讚許" "APPROVE": "核准"
}, },
"workflow_transition": { "workflow_transition": {
"APPROVED": "准", "APPROVED": "准",
"REJECTED": "拒絕", "REJECTED": "退回",
"VALIDATED": "驗證" "VALIDATED": "確認"
}, },
"validation": { "validation": {
"required": "必填", "required": "必填",
"too_short": "過短", "too_short": "過短",
"too_long": "過長", "too_long": "過長",
"email": "必須是一個有效郵箱地址", "email": "必須是有效郵件地址",
"password_confirm": "密碼和確認密碼必須完全一致", "password_confirm": "密碼必須一致",
"number": "必須為數字", "number": "必須為數字",
"no_space": "不允許空格" "no_space": "不允許空格",
"alphanumeric": "只允許使用字母和數字"
},
"action_type": {
"ADD_TAG": "加入標籤",
"REMOVE_TAG": "移除標籤",
"PROCESS_FILES": "處理檔案"
}, },
"pagination": { "pagination": {
"previous": "以前", "previous": "上一頁",
"next": "下一個", "next": "下一",
"first": "首先", "first": "首",
"last": "最後" "last": "頁尾"
}, },
"onboarding": {
"step1": {
"title": "首次造訪?",
"description": "如果這是您第一次使用 Teedy請按「下一步」按鈕或取消本導覽。"
},
"step2": {
"title": "文件",
"description": "Teedy 以文件的形式組成,每個文件含多個檔案。"
},
"step3": {
"title": "檔案",
"description": "您可以在新增文件之後加入檔案,或使用快速上傳區域上傳檔案。"
},
"step4": {
"title": "搜尋",
"description": "這是搜尋文件方式,也可以使用放大鏡進行進階搜尋。"
},
"step5": {
"title": "標籤",
"description": "可以用利用標籤模擬目錄結構(就像超級資料夾)。請在此進行設定作業。"
}
},
"yes": "Yes",
"no": "No",
"ok": "確認", "ok": "確認",
"cancel": "取消", "cancel": "取消",
"share": "共享", "share": "共享",
"unshare": "不共享", "unshare": "不共享",
"close": "關閉", "close": "關閉",
"add": "添加", "add": "新增",
"open": "打開", "open": "打開",
"see": "查看", "see": "查看",
"save": "保存", "save": "存",
"export": "導出", "export": "出",
"edit": "編輯", "edit": "編輯",
"delete": "刪除", "delete": "刪除",
"loading": "加載中...", "rename": "修改名稱",
"download": "下載",
"loading": "載入中...",
"send": "發送", "send": "發送",
"enabled": "激活", "enabled": "啟用",
"disabled": "未激活" "disabled": "未啟用"
} }