From 5c88f1a73fa0030403d6e9ceb8cfe9f7d92bc4ea Mon Sep 17 00:00:00 2001 From: new985211 Date: Mon, 18 May 2026 10:27:43 +0800 Subject: [PATCH] Add full Simplified Chinese (zh-CN) i18n support - Add zh-CN locale with 1000+ translations to config/locales/i18n.yml - Add zh translations (106 keys) to submission_form Vue component - Add zh translations (221 keys) to template_builder Vue component - Unify LOCALE_OPTIONS in accounts_controller with available_locales - Add Chinese mirror sources to Dockerfile for faster builds in China - Lock PostgreSQL and Caddy versions in docker-compose.yml - Add deployment guide in Simplified Chinese --- Dockerfile | 19 +- app/controllers/accounts_controller.rb | 16 +- app/javascript/submission_form/i18n.js | 111 ++- app/javascript/template_builder/i18n.js | 226 ++++- config/application.rb | 2 +- config/locales/i18n.yml | 1070 +++++++++++++++++++++++ docker-compose.yml | 4 +- 简体中文支持部署指南.md | 397 +++++++++ 8 files changed, 1834 insertions(+), 11 deletions(-) create mode 100644 简体中文支持部署指南.md diff --git a/Dockerfile b/Dockerfile index f8c4398f..5701c6bb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,8 @@ FROM ruby:4.0.1-alpine AS download WORKDIR /fonts -RUN apk --no-cache add wget && \ +RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories && \ + apk --no-cache add wget && \ wget https://github.com/satbyy/go-noto-universal/releases/download/v7.0/GoNotoKurrent-Regular.ttf && \ wget https://github.com/satbyy/go-noto-universal/releases/download/v7.0/GoNotoKurrent-Bold.ttf && \ wget https://github.com/impallari/DancingScript/raw/master/fonts/DancingScript-Regular.otf && \ @@ -20,12 +21,16 @@ ENV NODE_ENV=production WORKDIR /app -RUN apk add --no-cache nodejs yarn git build-base && \ +RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories && \ + apk add --no-cache nodejs yarn git build-base && \ + gem sources --remove https://rubygems.org/ && \ + gem sources -a https://gems.ruby-china.com/ && \ gem install shakapacker COPY ./package.json ./yarn.lock ./ -RUN yarn install --network-timeout 1000000 +RUN yarn config set registry https://registry.npmmirror.com && \ + yarn install --network-timeout 1000000 COPY ./bin/shakapacker ./bin/shakapacker COPY ./config/webpack ./config/webpack @@ -48,7 +53,8 @@ ENV OPENSSL_CONF=/etc/openssl_legacy.cnf WORKDIR /app -RUN apk add --no-cache libpq vips redis vips-heif onnxruntime +RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories && \ + apk add --no-cache libpq vips redis vips-heif onnxruntime RUN addgroup -g 2000 docuseal && adduser -u 2000 -G docuseal -s /bin/sh -D -h /home/docuseal docuseal @@ -66,7 +72,10 @@ activate = 1' >> /etc/openssl_legacy.cnf COPY --chown=docuseal:docuseal ./Gemfile ./Gemfile.lock ./ -RUN apk add --no-cache build-base git libpq-dev yaml-dev && bundle install && apk del --no-cache build-base git libpq-dev yaml-dev && rm -rf ~/.bundle /usr/local/bundle/cache && ruby -e "puts Dir['/usr/local/bundle/**/{spec,rdoc,resources/shared,resources/collation,resources/locales,resources/unicode_data/properties}'] + Dir['/usr/local/bundle/gems/*/{test,tests,examples,sample,misc,doc,docs}'] + Dir['/usr/local/bundle/gems/*/ext/**/*.{c,h,o,S}']" | xargs rm -rf && ln -sf /usr/lib/libonnxruntime.so.1 $(ruby -e "print Dir[Gem::Specification.find_by_name('onnxruntime').gem_dir + '/vendor/*.so'].first") +RUN apk add --no-cache build-base git libpq-dev yaml-dev && \ + bundle config set --global mirror.https://rubygems.org https://gems.ruby-china.com && \ + bundle install && \ + apk del --no-cache build-base git libpq-dev yaml-dev && rm -rf ~/.bundle /usr/local/bundle/cache && ruby -e "puts Dir['/usr/local/bundle/**/{spec,rdoc,resources/shared,resources/collation,resources/locales,resources/unicode_data/properties}'] + Dir['/usr/local/bundle/gems/*/{test,tests,examples,sample,misc,doc,docs}'] + Dir['/usr/local/bundle/gems/*/ext/**/*.{c,h,o,S}']" | xargs rm -rf && ln -sf /usr/lib/libonnxruntime.so.1 $(ruby -e "print Dir[Gem::Specification.find_by_name('onnxruntime').gem_dir + '/vendor/*.so'].first") COPY --chown=docuseal:docuseal ./bin ./bin COPY --chown=docuseal:docuseal ./app ./app diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index 49314f32..d5d92ee9 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -9,7 +9,21 @@ class AccountsController < ApplicationController 'pt-PT' => 'Português', 'de-DE' => 'Deutsch', 'it-IT' => 'Italiano', - 'nl-NL' => 'Nederlands' + 'nl-NL' => 'Nederlands', + 'zh-CN' => '中文 (简体)', + 'es' => 'Español', + 'it' => 'Italiano', + 'de' => 'Deutsch', + 'fr' => 'Français', + 'nl' => 'Nederlands', + 'pl' => 'Polski', + 'uk' => 'Українська', + 'cs' => 'Čeština', + 'pt' => 'Português', + 'he' => 'עברית', + 'ar' => 'العربية', + 'ko' => '한국어', + 'ja' => '日本語' }.freeze before_action :load_account diff --git a/app/javascript/submission_form/i18n.js b/app/javascript/submission_form/i18n.js index 2a265d18..074fef2e 100644 --- a/app/javascript/submission_form/i18n.js +++ b/app/javascript/submission_form/i18n.js @@ -1524,6 +1524,115 @@ const ja = { enter_screen_reader_mode: 'スクリーンリーダーモードを有効にする' } -const i18n = { en, es, it, de, fr, pl, uk, cs, pt, he, nl, ar, ko, ja } +const zh = { + step: '步骤', + form_progress: '表单进度', + close: '关闭', + uploaded_files: '已上传文件', + signature_drawing_area: '签名绘制区域。使用鼠标或触摸来绘制您的签名。', + kba: 'KBA', + please_upload_an_image_file: '请上传图片文件', + must_be_characters_length: '必须为 {number} 个字符', + complete_all_required_fields_to_proceed_with_identity_verification: '请填写所有必填字段以继续身份验证。', + verify_id: '验证身份', + identity_verification: '身份验证', + complete: '完成', + fill_all_required_fields_to_complete: '填写所有必填字段以完成', + sign_and_complete: '签署并完成', + text: '文本', + by_clicking_you_agree_to_the: '点击"{button}"即表示您同意', + electronic_signature_disclosure: '电子签名披露', + esignature_disclosure: '电子签名披露', + signature: '签名', + initials: '首字母', + sign_on_the_touchscreen: '在触摸屏上签名', + approved: '已批准', + reviewed: '已审核', + other: '其他', + authored_by_me: '由我创作', + invite: '邀请', + email: '电子邮件', + approved_by: '批准人', + reviewed_by: '审核人', + authored_by: '创作人', + select_a_reason: '选择原因', + scan_the_qr_code_with_the_camera_app_to_open_the_form_on_mobile_and_draw_your_signature: '使用相机应用扫描二维码,在手机上打开表单并绘制签名', + date: '日期', + number: '数字', + value_is_invalid: '值无效', + verification_code_is_invalid: '验证码无效', + already_paid: '已支付', + image: '图片', + pay: '支付', + take_photo: '拍照', + number_phone_is_invalid: '{number} 电话号码无效', + file: '文件', + digitally_signed_by: '数字签名人', + reason: '原因', + select: '选择', + checkbox: '复选框', + multiple: '多选', + radio: '单选', + cells: '单元格', + stamp: '印章', + minimize: '最小化', + payment: '支付', + phone: '电话', + start_now: '立即开始', + continue: '继续', + sign_now: '立即签署', + type_here_: '在此输入...', + optional: '可选', + option: '选项', + appears_on: '显示于', + page: '页', + select_your_option: '选择您的选项', + complete_hightlighted_checkboxes_and_click: '勾选高亮的复选框并点击', + submit: '提交', + next: '下一步', + click_to_upload: '点击上传', + or_drag_and_drop_files: '或拖放文件', + send_copy_via_email: '通过电子邮件发送副本', + download: '下载', + clear: '清除', + redraw: '重绘', + draw_initials: '绘制首字母', + type_signature_here: '在此输入签名', + type_initial_here: '在此输入首字母', + form_has_been_completed: '表单已完成!', + document_has_been_signed: '文件已签署!', + documents_have_been_signed: '文件已签署!', + create_a_free_account: '创建免费账户', + powered_by: '由以下提供支持', + please_check_the_box_to_continue: '请勾选复选框以继续。', + open_source_documents_software: '开源文档软件', + verified_phone_number: '验证电话号码', + use_international_format: '使用国际格式:+1xxx', + six_digits_code: '6位数字验证码', + change_phone_number: '更改电话号码', + sending: '发送中...', + resend_code: '重新发送验证码', + verification_code_has_been_resent: '验证码已通过短信重新发送', + please_fill_all_required_fields: '请填写所有必填字段', + set_today: '设为今天', + toggle_multiline_text: '切换多行文本', + draw_signature: '绘制签名', + type_initial: '输入首字母', + draw: '绘制', + type: '输入', + type_text: '输入文本', + email_has_been_sent: '电子邮件已发送', + processing: '处理中', + pay_with_stripe: '使用 Stripe 支付', + reupload: '重新上传', + upload: '上传', + files: '文件', + signature_is_too_small_or_simple_please_redraw: '签名太小或太简单。请重新绘制。', + browser_privacy_settings_block_canvas: '您的浏览器隐私设置限制了绘图画布的使用。请使用其他浏览器或设备,或禁用阻止画布的隐私设置以进行签名。', + wait_countdown_seconds: '请等待 {countdown} 秒', + enter_screen_reader_mode: '进入屏幕阅读器模式' +} + +const i18n = { en, es, it, de, fr, pl, uk, cs, pt, he, nl, ar, ko, ja, zh } export default i18n diff --git a/app/javascript/template_builder/i18n.js b/app/javascript/template_builder/i18n.js index 19d71372..ff43048a 100644 --- a/app/javascript/template_builder/i18n.js +++ b/app/javascript/template_builder/i18n.js @@ -1566,4 +1566,228 @@ const nl = { viewing_revision_from: 'Revisie van {date} bekijken' } -export { en, es, it, pt, fr, de, nl } +const zh = { + fixed: '固定', + default: '默认', + save_as_custom_field: '保存为自定义字段', + kba: 'KBA', + analyzing_: '分析中...', + download: '下载', + downloading_: '下载中...', + view: '查看', + autodetect_fields: '自动检测字段', + payment_link: '支付链接', + strikeout: '删除线', + draw_strikethrough_the_document: '在文档上绘制删除线', + quantity: '数量', + prefillable: '可预填', + signature_id: '签名 ID', + error_message: '错误信息', + length: '长度', + min: '最小值', + max: '最大值', + font: '字体', + party: '参与方', + date_signed: '签名日期', + method: '方式', + reorder_fields: '重新排序字段', + verify_id: '验证身份', + obtain_qualified_electronic_signature_with_the_trusted_provider_click_to_learn_more: '通过可信提供商获取合格的电子签名 (QeS)。点击了解更多。', + editable: '可编辑', + recurrent: '定期', + one_off: '一次性', + search_field: '搜索字段', + field_not_found: '未找到字段', + clear: '清除', + align: '对齐', + resize: '调整大小', + width: '宽度', + height: '高度', + add_all_required_fields_to_continue: '添加所有必填字段以继续', + uploaded_pdf_contains_form_fields_keep_or_remove_them: '上传的 PDF 包含表单字段。保留还是移除?', + keep: '保留', + left: '左', + heading: '标题', + validation: '验证', + add_blank_page: '添加空白页', + right: '右', + center: '居中', + description: '描述', + display_title: '显示标题', + with_logo: '带 Logo', + unchecked: '未选中', + price: '价格', + type: '类型', + list: '列表', + no_variables: '暂无变量', + no_variables_description: '在文档中添加 [[variable]] 标记以创建动态内容变量。', + type_value: '输入值', + equal: '等于', + not_equal: '不等于', + greater_than: '大于', + less_than: '小于', + contains: '包含', + does_not_contain: '不包含', + not_empty: '非空', + empty: '为空', + select_field_: '选择字段...', + select_value_: '选择值...', + remove_condition: '移除条件', + add_condition: '添加条件', + are_you_sure_: '确定吗?', + sign_yourself: '自行签署', + set_signing_date: '设置签名日期', + signing_date: '签名日期', + signing_date_and_time: '签名日期和时间', + send: '发送', + remove: '移除', + edit: '编辑', + settings: '设置', + up: '上移', + down: '下移', + checked: '已选中', + current_date: '当前日期', + save: '保存', + cancel: '取消', + any: '任意', + drawn: '手绘', + drawn_or_typed: '手绘或输入', + drawn_or_upload: '手绘或上传', + upload: '上传', + formula: '公式', + typed: '输入', + draw_field_on_the_document: '在文档上绘制字段', + click_to_upload: '点击上传', + or_drag_and_drop_files: '或拖放文件', + uploading: '上传中', + processing_: '处理中...', + add_pdf_documents_or_images: '添加 PDF 文档或图片', + add_documents_or_images: '添加文档或图片', + add_a_new_document: '添加新文档', + replace_existing_document: '替换现有文档', + clone_and_replace_documents: '克隆并替换文档', + required: '必填', + default_value: '默认值', + format: '格式', + read_only: '只读', + page: '页', + draw_new_area: '绘制新区域', + copy_to_all_pages: '复制到所有页面', + more: '更多', + add_option: '添加选项', + option: '选项', + options: '选项', + condition: '条件', + make_dynamic: '设为动态', + first_party: '第一方', + second_party: '第二方', + third_party: '第三方', + fourth_party: '第四方', + fifth_party: '第五方', + sixth_party: '第六方', + seventh_party: '第七方', + eighth_party: '第八方', + ninth_party: '第九方', + tenth_party: '第十方', + eleventh_party: '第十一方', + twelfth_party: '第十二方', + thirteenth_party: '第十三方', + fourteenth_party: '第十四方', + fifteenth_party: '第十五方', + sixteenth_party: '第十六方', + seventeenth_party: '第十七方', + eighteenth_party: '第十八方', + nineteenth_party: '第十九方', + twentieth_party: '第二十方', + draw: '绘制', + add: '添加', + or_add_field_without_drawing: '或不绘制直接添加字段', + text: '文本', + number: '数字', + signature: '签名', + initials: '首字母', + date: '日期', + image: '图片', + file: '文件', + select: '选择', + checkbox: '复选框', + multiple: '多选', + radio: '单选', + cells: '单元格', + stamp: '印章', + payment: '支付', + phone: '电话', + text_field: '文本字段', + signature_field: '签名字段', + initials_field: '首字母字段', + date_field: '日期字段', + number_field: '数字字段', + image_field: '图片字段', + file_field: '文件字段', + select_field: '选择字段', + checkbox_field: '复选框字段', + multiple_field: '多选字段', + radio_field: '单选组字段', + cells_field: '单元格字段', + stamp_field: '印章字段', + payment_field: '支付字段', + phone_field: '电话字段', + draw_a_text_field_on_the_page_with_a_mouse: '使用鼠标在页面上绘制文本字段', + drag_and_drop_any_other_field_type_on_the_page: '将其他字段类型拖放到页面上', + click_on_the_field_type_above_to_start_drawing_it: '点击上面的字段类型开始绘制', + please_draw_fields_to_prepare_the_document: '请绘制字段以准备文档。', + only_pdf_and_images_are_supported: '仅支持 PDF 和图片。', + unlock_sms_verified_phone_number_field_with_paid_plan_use_text_field_for_phone_numbers_without_verification: '通过付费计划解锁短信验证的电话号码字段。对于不需要验证的电话号码,请使用文本字段。', + available_only_in_pro: '仅 Pro 版可用', + failed_to_download_files: '下载文件失败', + please_add_fields_for_the_submitter_name_or_remove_the_submitter_name_if_not_needed: '请为 {submitter_name} 添加字段。或者,如果不需要,请移除 {submitter_name}。', + draw_field: '绘制 {field} 字段', + replace: '替换', + uploading_: '上传中...', + add_document: '添加文档', + none: '无', + ssn: 'SSN', + ein: 'EIN', + email: '电子邮件', + url: 'URL', + zip: '邮政编码', + custom: '自定义', + numbers_only: '仅数字', + letters_only: '仅字母', + regexp_validation: '正则表达式验证', + custom_validation: '自定义验证', + length_validation: '长度验证', + number_range: '数字范围', + enter_pdf_password: '输入 PDF 密码', + wrong_password: '密码错误', + currency: '货币', + save_and_preview: '保存并预览', + preferences: '偏好设置', + available_in_pro: 'Pro 版可用', + some_fields_are_missing_in_the_formula: '公式中缺少一些字段。', + learn_more: '了解更多', + and: '和', + or: '或', + start_a_quick_tour_to_learn_how_to_create_and_send_your_first_document: '开始快速导览,学习如何创建和发送您的第一份文档', + start_tour: '开始导览', + or_add_from: '或添加自', + sync: '同步', + syncing: '同步中...', + copy: '复制', + paste: '粘贴', + select_fields: '选择字段', + draw_fields: '绘制字段', + align_left: '左对齐', + align_right: '右对齐', + align_top: '顶部对齐', + align_bottom: '底部对齐', + fields_selected: '已选择 {count} 个字段', + field_added: '已添加 {count} 个字段', + fields_added: '已添加 {count} 个字段', + revisions: '修订版本', + apply: '应用', + no_revisions_yet: '暂无修订版本', + viewing_revision_from: '查看来自 {date} 的修订版本' +} + +export { en, es, it, pt, fr, de, nl, zh } diff --git a/config/application.rb b/config/application.rb index a2bcddaf..48ccc620 100644 --- a/config/application.rb +++ b/config/application.rb @@ -25,7 +25,7 @@ module DocuSeal config.active_storage.draw_routes = ENV['MULTITENANT'] != 'true' - config.i18n.available_locales = %i[en en-US en-GB es-ES fr-FR pt-PT de-DE it-IT nl-NL + config.i18n.available_locales = %i[en en-US en-GB es-ES fr-FR pt-PT de-DE it-IT nl-NL zh-CN es it de fr nl pl uk cs pt he ar ko ja] config.i18n.fallbacks = [:en] diff --git a/config/locales/i18n.yml b/config/locales/i18n.yml index 055aa022..84174bc7 100644 --- a/config/locales/i18n.yml +++ b/config/locales/i18n.yml @@ -20,6 +20,7 @@ en: &en language_ar: العربية language_ko: 한국어 language_ja: 日本語 + language_zh-CN: 中文 (简体) add_from_google_drive: Add from Google Drive or_add_from: Or add from upload_a_new_document: Upload a New Document @@ -8084,3 +8085,1072 @@ it-IT: nl-NL: <<: *nl +zh-CN: + <<: *en + language_en: 英语 + language_en-US: 英语 (美国) + language_en-GB: 英语 (英国) + language_es-ES: 西班牙语 + language_fr-FR: 法语 + language_pt-PT: 葡萄牙语 + language_de-DE: 德语 + language_nl-NL: 荷兰语 + language_es: 西班牙语 + language_it: 意大利语 + language_de: 德语 + language_fr: 法语 + language_pl: 波兰语 + language_uk: 乌克兰语 + language_cs: 捷克语 + language_pt: 葡萄牙语 + language_he: 希伯来语 + language_nl: 荷兰语 + language_ar: 阿拉伯语 + language_ko: 韩语 + language_ja: 日语 + language_zh-CN: 中文 (简体) + add_from_google_drive: 从 Google Drive 添加 + or_add_from: 或从以下添加 + upload_a_new_document: 上传新文档 + billing: 账单 + hi_there: 您好 + templates_that_require_email_or_phone_2fa_cannot_be_used_via_a_shared_link: 需要邮件或电话双重认证的模板不能通过共享链接使用。 + pro: Pro + thanks: 谢谢 + private: 私有 + _variables: 变量 + your_email_address_has_been_released_immediately_you_can_now_be_added_to_your_company_team_without_waiting_for_the_deletion_period_to_end: 您的电子邮件地址已被立即释放。如果您要加入团队,现在可以被邀请到公司团队,无需等待删除期结束。 + make_all_newly_created_templates_private_to_their_creator_and_admins_by_default: 默认将所有新创建的模板设为创建者和管理员私有 + create_templates_with_admin_access_by_default: 默认创建具有管理员访问权限的模板 + require_email_2fa: 需要邮件双重认证 + when_checked_each_signer_must_verify_their_email_with_a_one_time_code_before_accessing_the_document: 选中后,每个签署者在访问文档之前必须使用一次性验证码验证其电子邮件。 + require_phone_2fa: 需要电话双重认证 + when_checked_each_signer_must_verify_their_phone_with_a_one_time_code_before_accessing_the_document: 选中后,每个签署者在访问文档之前必须使用一次性验证码验证其电话号码。 + select: 选择 + enabled: 已启用 + disabled: 已禁用 + party: 参与方 + make_owner: 设为所有者 + use_direct_file_attachment_links_in_the_documents: 在文档中使用直接文件附件链接 + click_here_to_send_a_reset_password_email_html: '发送重置密码邮件。' + edit_order: 编辑顺序 + expirable_file_download_links: 可过期的文件下载链接 + sender_form_fields: 发送者表单字段 + default_parties: 默认参与方 + authenticate_embedded_form_preview_with_token: 使用令牌验证嵌入式表单预览 + stripe_integration: Stripe 集成 + require_all_recipients: 需要所有收件人 + stripe_account_has_been_connected: Stripe 账户已连接。 + re_connect_stripe: 重新连接 Stripe + bcc_recipients: 密送收件人 + resend_pending: 重新发送待处理 + always_enforce_signing_order: 始终强制执行签署顺序 + create_templates_with_private_access_by_default: 默认创建具有私有访问权限的模板 + ensure_unique_recipients: 确保收件人唯一 + edit_per_party: 按参与方编辑 + reply_to: 回复 + pending_by_me: 待我处理 + partially_completed: 部分完成 + require_phone_2fa_to_open: 需要电话双重认证才能打开 + the_sender_has_requested_a_two_factor_authentication_via_one_time_password_sent_to_your_html: 发送者请求了双重认证,一次性密码已发送到您的电话号码 %{phone}。 + send_verification_code: 发送验证码 + code_has_been_resent: 验证码已重新发送 + invalid_code: 无效验证码 + signed: 已签署 + first_party: 第一方 + remove_filter: 移除筛选 + add: 添加 + adding: 添加中 + owner: 所有者 + select_user: 选择用户 + team_member_permissions: 团队成员权限 + entire_team: 整个团队 + admin_only: 仅管理员 + accessiable_by: 可访问者 + team_access: 团队访问 + document_download_filename_format: 文档下载文件名格式 + docuseal_trusted_signature: DocuSeal 可信签名 + hello_name: 您好 %{name} + you_are_invited_to_product_name: 您已被邀请加入 %{product_name} + you_have_been_invited_to_account_name_product_name_please_sign_up_using_the_link_below_: '您已被邀请加入 %{account_name} %{product_name}。请使用以下链接注册:' + sent_using_product_name_in_testing_mode_html: '使用 %{product_name} 以测试模式发送' + sent_using_product_name_free_document_signing_html: '使用 %{product_name} 免费文档签署发送。' + sent_with_docuseal_pro_html: '使用 DocuSeal Pro 发送' + show_send_with_docuseal_pro_attribution_in_emails_html: 在邮件中显示"使用 DocuSeal Pro"发送 + sign_documents_with_trusted_certificate_provided_by_docu_seal_your_documents_and_data_are_never_shared_with_docu_seal_p_d_f_checksum_is_provided_to_generate_a_trusted_signature: 使用 DocuSeal 提供的可信证书签署文档。您的文档和数据永远不会与 DocuSeal 共享。PDF 校验和用于生成可信签名。 + you_have_been_invited_to_submit_the_name_form: '您已被邀请提交"%{name}"表单。' + you_have_been_invited_to_sign_the_name: '您已被邀请签署"%{name}"。' + alternatively_you_can_review_and_download_your_copy_using_the_link_below: "或者,您可以使用以下链接查看和下载您的副本:" + please_check_the_copy_of_your_name_in_the_email_attachments: '请在电子邮件附件中查收您的"%{name}"副本。' + awaiting_completion_by_the_other_party: "等待另一方完成" + review_and_sign: 查看并签署 + review_and_submit: 查看并提交 + please_contact_us_by_replying_to_this_email_if_you_have_any_questions: "如有任何疑问,请回复此邮件联系我们。" + submitter_invitation_sms_body_sign: '{account.name} 邀请您签署文档:{submitter.link}' + verification_code_sms_body: '验证码:{code}' + you_are_invited_to_submit_a_form: 您被邀请提交表单 + you_are_invited_to_sign_a_document: 您被邀请签署文档 + you_are_invited_to_sign_documents: 您被邀请签署文档 + your_document_copy: 您的文档副本 + name_has_been_completed_by_submitters: '"%{name}" 已由 %{submitters} 完成。' + template_name_has_been_completed_by_submitters: '{template.name} 已由 {submission.submitters} 完成' + submitter_invitation_email_sign_body: | + 您好, + + 您已被邀请签署 "{template.name}"。 + + [查看并签署]({submitter.link}) + + 如有任何疑问,请回复此邮件联系我们。 + + 谢谢, + {account.name} + submitter_completed_email_body: | + 您好, + + "{template.name}" 已由 {submission.submitters} 完成 + + {submission.link} + submitter_documents_copy_email_body: | + 您好, + + 请在电子邮件附件中查收您的 "{template.name}" 副本。 + 或者,您可以使用以下链接查看和下载您的副本: + + [{template.name}]({documents.link}) + + 谢谢, + {account.name} + view: 查看 + email: 电子邮件 + form_expired_at_html: '表单已于 %{time} 过期' + verification_code_code: '验证码:%{code}' + digitally_signed_by: 数字签名人 + role: 角色 + reason: 原因 + provide_your_email_to_start: 提供您的电子邮件以开始 + provide_your_email: 提供您的电子邮件 + provide_your_name_to_start: 提供您的姓名以开始 + provide_your_name: 提供您的姓名 + provide_your_phone_in_international_format_to_start: 提供您的国际格式电话号码以开始 + provide_your_phone_in_international_format: 提供您的国际格式电话号码 + start: 开始 + enforce_recipients_order: 强制执行收件人顺序 + starting: 开始中 + invited_by_html: '由 %{name} 邀请' + you_have_been_invited_to_submit_a_form: 您已被邀请提交表单 + signed_on_time: '签署于 %{time}' + completed_on_time: '完成于 %{time}' + document_has_been_signed_already: 文档已签署 + form_has_been_submitted_already: 表单已提交 + send_copy_to_email: 发送副本到电子邮件 + sending: 发送中 + resubmit: 重新提交 + form_has_been_deleted_by_html: '表单已被 %{name} 删除。' + or: 或 + download_documents: 下载文档 + downloading: 下载中 + download: 下载 + page: 页面 + decline: 拒绝 + declined: 已拒绝 + delegate: 委派 + enter_the_email_address_of_the_person_you_want_to_delegate_to: 输入您要委派的人的电子邮件地址 + decline_reason: 拒绝原因 + provide_a_reason: 提供原因 + notify_the_sender_with_the_reason_you_declined: 通知发送者您拒绝的原因 + form_has_been_declined_on_html: '表单已于 %{time} 被拒绝' + document_has_been_delegated_on_html: '文档已于 %{time} 被委派' + name_declined_by_submitter: '"%{name}" 被 %{submitter} 拒绝' + name_declined_by_submitter_with_the_following_reason: '"%{name}" 已被 %{submitter} 拒绝,原因如下:' + completed_successfully: 成功完成 + password: 密码 + sign_in: 登录 + signing_in: 登录中 + sign_in_with_microsoft: 使用 Microsoft 登录 + sign_in_with_google: 使用 Google 登录 + forgot_your_password_: 忘记密码? + create_free_account: 创建免费账户 + already_have_an_account: 已有账户? + first_name: 名 + last_name: 姓 + sign_up: 注册 + signing_up: 注册中 + profile_details: 个人资料详情 + sign_up_with_google: 使用 Google 注册 + sign_up_with_microsoft: 使用 Microsoft 注册 + by_creating_an_account_you_agree_to_our_html: '创建账户即表示您同意我们的 隐私政策服务条款。' + enter_email_to_continue: 输入电子邮件以继续 + account: 账户 + preferences: 偏好设置 + company_name: 公司名称 + time_zone: 时区 + language: 语言 + app_url: 应用 URL + update: 更新 + updating: 更新中 + force_2fa_with_authenticator_app: 强制使用身份验证器应用进行双重认证 + add_signature_id_to_the_documents: 在文档中添加签名 ID + require_signing_reason: 要求签署原因 + allow_typed_text_signatures: 允许输入文本签名 + allow_to_resubmit_completed_forms: 允许重新提交已完成的表单 + allow_to_decline_documents: 允许拒绝文档 + allow_to_delegate_documents: 允许委派文档 + remember_and_pre_fill_signatures: 记住并预填签名 + require_authentication_for_file_download_links: 文件下载链接需要身份验证 + combine_completed_documents_and_audit_log: 合并已完成的文档和审计日志 + salesforce_integration: Salesforce 集成 + salesforce_has_been_connected: Salesforce 已连接。 + connect_salesforce_account_to_integrate_with_docuseal: 连接 Salesforce 账户以与 DocuSeal 集成 + re_connect_salesforce: 重新连接 Salesforce + connect_salesforce: 连接 Salesforce + danger_zone: 危险区域 + delete_my_account: 删除我的账户 + you_are_scheduling_your_account_for_deletion_after_deletion_your_data_will_be_permanently_removed_and_cannot_be_recovered_click_ok_if_you_would_like_to_continue: "您正在安排删除您的账户。删除后,您的数据将被永久移除且无法恢复。\n\n如果您想继续,请点击确定。" + account_information_has_been_updated: 账户信息已更新。 + should_be_a_valid_url: 应为有效 URL + your_account_will_be_permanently_deleted_within_2_months_please_contact_us_if_you_want_to_keep_your_account: 您的账户将在 2 个月内被永久删除。如果您想保留账户,请联系我们。 + test_mode: 测试模式 + copy: 复制 + copied: 已复制 + rotate: 轮换 + remove_existing_api_token_and_generated_a_new_one_are_you_sure_: 移除现有 API 令牌并生成新的。确定吗? + request_signature_multiple_submitters_with_default_values: 请求签名,多个提交者带默认值 + request_signature_single_submitter: 请求签名,单个提交者 + template_details: 模板详情 + open_full_api_reference: 打开完整 API 参考 + api_token_has_been_updated: API 令牌已更新。 + change_your_password: 更改密码 + new_password: 新密码 + minimum_password_length_characters_minimum: '最少 %{minimum_password_length} 个字符' + confirm_new_password: 确认新密码 + change_my_password: 更改我的密码 + changing_password: 更改密码中 + reset_password: 重置密码 + resetting_password: 重置密码中 + sign_in_with_name_account: '使用 %{name} 账户登录' + two_factor_code_from_authenticator_app: 来自身份验证器应用的双重认证码 + sign_up_in_docuseal_console_to_upgrade_on_premises_app_is_completely_standalone_console_is_used_only_to_manage_your_license: 在 DocuSeal Console 注册以升级。本地部署应用完全独立,Console 仅用于管理您的许可证。 + send_from_email: 发送者邮箱 + optional: 可选 + save: 保存 + saving: 保存中 + changes_have_been_saved: 更改已保存。 + unlock_with_docuseal_pro: 使用 DocuSeal Pro 解锁 + use_your_own_certificates_to_sign_and_verify_pdf_files: 使用您自己的证书签署和验证 PDF 文件。 + upload_certificate: 上传证书 + name: 名称 + file: 文件 + use_a_valid_der_p12_or_pfx_file: 使用有效的 .der、.p12 或 .pfx 文件。 + submit: 提交 + submitting: 提交中 + pdf_signature: PDF 签名 + upload_signed_pdf_file_to_validate_its_signature_: '上传已签名的 PDF 文件以验证其签名:' + analyzing: 分析中 + verify_signed_pdf: 验证已签名的 PDF + click_to_upload_or_drag_and_drop_html: '点击上传或拖放' + click_to_upload_or_drag_and_drop_files_html: '点击上传或拖放文件' + signing_certificates: 签名证书 + upload_cert: 上传证书 + valid_to: 有效期至 + status: 状态 + make_default: 设为默认 + remove: 移除 + removing: 移除中 + delete: 删除 + default: 默认 + are_you_sure_: 确定吗? + timestamp_server: 时间戳服务器 + timeserver_url: 时间服务器 URL + url_of_the_trusted_rfc_3161_timeserver_to_be_used_to_generate_timestamp_signatures: 用于生成时间戳签名的可信 RFC 3161 时间服务器 URL。 + apply_multiple_pdf_digital_signatures_in_the_document_per_each_signer: 为每个签署者在文档中应用多个 PDF 数字签名 + remove_pdf_form_fillable_fields_from_the_signed_pdf_flatten_form: 从已签名的 PDF 中删除 PDF 表单可填充字段(扁平化表单) + certificate_has_been_successfully_added: 证书已成功添加。 + default_certificate_has_been_selected: 默认证书已选择。 + certificate_has_been_removed: 证书已移除。 + already_exists: 已存在。 + welcome_to_product_name: '欢迎使用 %{product_name}' + set_password: 设置密码 + confirm_password: 确认新密码 + save_password_and_sign_in: 保存密码并登录 + use_an_authenticator_mobile_app_like_google_authenticator_or_1password_to_scan_the_qr_code_below: 使用身份验证器移动应用(如 Google Authenticator 或 1Password)扫描下方的二维码。 + remove_2fa: 移除双重认证 + setup_2fa: 设置双重认证 + 2fa_has_been_configured: 双重认证已配置。 + code_is_invalid: 验证码无效 + 2fa_has_been_removed: 双重认证已移除。 + 2fa_has_been_set_up_already: 双重认证已设置。 + developer_newsletters: 开发者通讯 + skip: 跳过 + email_notifications: 电子邮件通知 + receive_notification_emails_on_completed_submission: 提交完成时接收通知邮件 + completed_documents_notification_bcc_address: 完成文档通知密送地址 + sign_request_email_reminders: 签署请求电子邮件提醒 + send_automatic_email_reminders_to_your_recipients: 向您的收件人发送自动电子邮件提醒。 + first_reminder_in: 第一次提醒在 + second_reminder_in: 第二次提醒在 + third_reminder_in: 第三次提醒在 + learn_more: 了解更多 + unable_to_save: 无法保存。 + invalid_timeserver: 无效的时间服务器 + email_templates: 电子邮件模板 + signature_request_email: 签名请求邮件 + signature_request_reminder_email: 签名请求提醒邮件 + signature_request_sms: 签名请求短信 + verification_code_sms: 验证码短信 + completed_notification_email: 完成通知邮件 + company_logo: 公司 Logo + submission_form: 提交表单 + completed_form_message: 完成表单消息 + completed_form_redirect_button: 完成表单重定向按钮 + documents_copy_email: 文档副本邮件 + form_custom_css: 表单自定义 CSS + subject: 主题 + body: 正文 + text_message: 文本消息 + title: 标题 + button_title: 按钮标题 + button_url: 按钮 URL + upload_logo: 上传 Logo + show_confetti_on_successful_completion: 成功完成时显示彩带效果 + attach_audit_log_pdf: 附加审计日志 PDF + attach_documents: 附加文档 + settings_have_been_saved: 设置已保存。 + display_your_company_name_and_logo_when_signing_documents: 签署文档时显示您的公司名称和 Logo。 + profile: 个人资料 + signature: 签名 + update_signature: 更新签名 + unable_to_save_signature: 无法保存签名。 + signature_has_been_saved: 签名已保存。 + signature_has_been_removed: 签名已移除。 + initials: 首字母 + update_initials: 更新首字母 + unable_to_save_initials: 无法保存首字母。 + initials_has_been_saved: 首字母已保存。 + initials_has_been_removed: 首字母已移除。 + change_password: 更改密码 + two_factor_authentication: 双重认证 + 2fa_is_not_configured: 双重认证未配置 + set_up_2fa: 设置双重认证 + contact_information_has_been_update: 联系信息已更新。 + password_has_been_changed: 密码已更改。 + email_integration: 电子邮件集成 + send_via_connected_email: 通过已连接的电子邮件发送 + activate_with_docuseal_pro: 使用 DocuSeal Pro 激活 + send_signature_request_to_your_recipients_directly_from_your_email: 直接从您的电子邮件向收件人发送签名请求 + connect_gmail: 连接 Gmail + re_connect_gmail: 重新连接 Gmail + connect_microsoft: 连接 Microsoft + re_connect_microsoft: 重新连接 Microsoft + gmail_has_been_connected: Gmail 已连接。 + microsoft_account_has_been_connected: Microsoft 账户已连接。 + but_not_activated: 但未激活 + email_has_been_sent: 电子邮件已发送。 + email_has_been_sent_already: 电子邮件已发送。 + initial_setup: 初始设置 + demo_environment: 演示环境 + close: 关闭 + upgrade: 升级 + settings: 设置 + console: 控制台 + verify_pdf: 验证 PDF + sign_out: 退出登录 + page_number: '第 %{number} 页' + powered_by: 由以下提供支持 + qr_code: 二维码 + print: 打印 + scan_the_qr_code_above_with_your_phone_camera_to_open_and_sign_this_document: 使用手机相机扫描上方二维码,打开并签署此文档。 + count_documents_signed_with_html: '已使用 %{count} 份文档签署' + storage: 存储 + notifications: 通知 + e_signature: 电子签名 + personalization: 个性化 + users: 用户 + plans: 计划 + new: 新建 + embedding: 嵌入 + background_jobs: 后台任务 + need_help_ask_a_question_: '需要帮助?提问:' + exit: 退出 + leave: 离开 + impersonated_as: 模拟为 + ask_ai: 询问 AI + ai_assistant: AI 助手 + discord_community: Discord 社区 + integrations: 集成 + teams: 团队 + tenants: 租户 + send_signature_requests_via_sms: 通过短信发送签名请求 + twilio_settings: Twilio 设置 + webhook_settings: Webhook 设置 + sending_sms: 发送短信中 + from: 发件人 + account_sid: Account SID + send_sms_via_webhook: 通过 Webhook 发送短信 + webhook_integration_allows_to_send_sms_using_any_provider: Webhook 集成允许使用任何提供商发送短信 + test: 测试 + single_sign_on_with_saml_2_0: SAML 2.0 单点登录 + force_sso_disable_login_with_email_and_password: 强制 SSO(禁用邮箱和密码登录) + for_aws_s3_compatible_apis_like_minio: 用于兼容 AWS S3 的 API,如 Minio。 + store_all_files_on_disk: 将所有文件存储在磁盘上 + no_configs_are_needed_but_make_sure_your_disk_is_persistent: 无需配置,但请确保您的磁盘是持久化的 + not_suitable_for_heroku_and_other_paas: 不适用于 Heroku 和其他 PaaS + bulk_send_from_excel_xlsx_or_csv: 从 Excel XLSX 或 CSV 批量发送 + add_new: 新增 + add_recipients: 添加收件人 + add_new_recipients: 添加新收件人 + add_recipients_html: 添加 + type_emails_here: 在此输入电子邮件 + or_embed_on_your_website: 或嵌入到您的网站 + phone: 电话 + send_emails: 发送邮件 + edit_message: 编辑消息 + smtp_not_configured: SMTP 未配置 + configure_smtp_settings_in_order_to_send_emails_: '配置 SMTP 设置以发送邮件:' + go_to_smtp_settings: 前往 SMTP 设置 + save_as_default_template_message: 保存为默认模板消息 + re_send_sms: 重新发送短信 + send_sms: 发送短信 + preserve_order: 保持顺序 + when_checked_notifications_will_be_sent_to_the_second_party_once_the_form_is_completed_by_the_previous_party_uncheck_this_option_to_send_notifications_to_all_parties_simultaneously_right_away: 选中后,通知将在前一方完成表单后发送给第二方。取消此选项可立即同时向所有参与方发送通知。 + upgrade_to_send_unlimited_signature_requests: 升级以发送无限签名请求 + add_without_sending: 仅添加不发送 + upgade_now: 立即升级 + send_signature_request_emails_without_limits_with_docuseal_pro: 使用 DocuSeal Pro 无限制发送签名请求邮件 + count_emails_used: '已使用 %{count} 封邮件' + has_been_connected: 已连接 + sms_not_configured: 短信未配置 + configure_sms_settings_in_order_to_send_text_messages_: '配置短信设置以发送文本消息:' + go_to_sms_settings: 前往短信设置 + back_to_active: 返回活跃 + submissions: 提交 + templates: 模板 + document_templates_html: 模板 + archived: 已归档 + search: 搜索 + submissions_not_found: 未找到提交 + create: 创建 + view_archived: 查看已归档 + all: 全部 + pending: 待处理 + completed: 已完成 + primarily_opened_with_microsoft_excel_other_options_include_google_sheets_libreoffice_calc_and_openoffice_calc: 主要使用 Microsoft Excel 打开。其他选项包括 Google Sheets、LibreOffice Calc 和 OpenOffice Calc。 + can_be_opened_with_microsoft_excel_google_sheets_or_any_text_editor_like_notepad: 可以使用 Microsoft Excel、Google Sheets 或任何文本编辑器(如记事本)打开。 + draw_signature: 绘制签名 + clear: 清除 + signature_uploaded: 签名已上传 + submission_deletion_is_irreversible_and_will_permanently_remove_all_associated_signed_documents_with_it_are_you_sure_: '提交删除是不可逆的,将永久移除所有关联的已签署文档。确定吗?' + return_back_to_your_desktop_device_to_complete_the_form_or_continue_on_mobile_html: '返回桌面设备完成表单,或在手机上继续' + template_deletion_is_irreversible_and_will_permanently_remove_all_associated_signed_documents_with_it_are_you_sure_: 模板删除是不可逆的,将永久移除所有关联的已签署文档。确定吗? + rename_folder: 重命名文件夹 + folder_name: 文件夹名称 + rename: 重命名 + home: 首页 + templates_not_found: 未找到模板 + upload_new_document: 上传新文档 + uploading: 上传中 + expired: 已过期 + sign_now: 立即签署 + archive: 归档 + archiving: 归档中 + restore: 恢复 + restoring: 恢复中 + clone: 克隆 + edit: 编辑 + move: 移动 + moving: 移动中 + preview: 预览 + upload: 上传 + clone_template: 克隆模板 + new_document_template: 新建文档模板 + document_name: 文档名称 + change_folder: 更改文件夹 + shared: 已共享 + export: 导出 + there_are_no_submissions: 没有提交 + send_an_invitation_to_fill_and_complete_the_form: 发送邀请以填写并完成表单 + send_to_recipients: 发送给收件人 + sign_it_yourself: 自行签署 + api_and_embedding: API 和嵌入 + template_id: 模板 ID + embedding_url: 嵌入 URL + share_template_with_test_mode: 以测试模式共享模板 + share_template_with_all_tenants: 与所有租户共享模板 + use_following_placeholders_text_: '使用以下占位符文本:' + users_count_total_users_count_pro_users_limit_was_reached_to_invite_additional_users_please_purchase_more_pro_user_seats_via_the_manage_plan_button: '%{users_count}/%{total_users_count} Pro 用户限额已用完。要邀请更多用户,请通过"管理计划"按钮购买更多 Pro 用户席位。' + move_into_folder: 移入文件夹 + new_folder_name: 新文件夹名称 + new_subfolder_name: 新子文件夹名称 + change_parent_folder: 更改父文件夹 + folder: 文件夹 + create_a_new_folder: 创建新文件夹 + exit_preview: 退出预览 + general: 常规 + recipients: 收件人 + form_preferences: 表单偏好 + redirect_on_completion_url: 完成时重定向 URL + completion_message: 完成消息 + email_subject: 邮件主题 + email_body: 邮件正文 + attach_audit_log_pdf_to_the_email: 在邮件中附加审计日志 PDF + send_emails_automatically_on_completion: 完成时自动发送邮件 + attach_documents_to_the_email: 在邮件中附加文档 + not_specified: 未指定 + submission_requester: 提交请求者 + specified_email: 指定邮箱 + invite_by_name: '通过 %{name} 邀请' + invite_via_form_field: 通过表单字段邀请 + same_as_name: '与 %{name} 相同' + default_email: 默认邮箱 + processing: 处理中 + upload_initials: 上传首字母 + draw: 绘制 + upload_signature: 上传签名 + integration: 集成 + admin: 管理员 + tenant_admin: 租户管理员 + editor: 编辑者 + viewer: 查看者 + member: 成员 + agent: 代理 + superadmin: 超级管理员 + edit_user: 编辑用户 + new_user: 新建用户 + unarchive: 取消归档 + last_session: 上次会话 + unlock_more_user_roles_with_docuseal_pro: 使用 DocuSeal Pro 解锁更多用户角色。 + view_active: 查看活跃 + team_account: 团队账户 + team_accounts: 团队账户 + tenant_account: 租户账户 + tenant_accounts: 租户账户 + impersonate: 模拟 + loading: 加载中 + documents: 文档 + accounts: 账户 + edit_account: 编辑账户 + new_team: 新建团队 + new_tenant: 新建租户 + remove_team: 移除团队 + remove_tenant: 移除租户 + replace: 替换 + allow_tenant_admins_to_invite_new_users: 允许租户管理员邀请新用户 + manage_multiple_teams: 管理多个团队 + api_key: API 密钥 + logo: Logo + back: 返回 + add_secret: 添加密钥 + edit_secret: 编辑密钥 + submission_example_payload: 提交示例载荷 + there_are_no_signatures: 没有签名 + signed_with_trusted_certificate: 使用可信证书签署 + signed_with_external_certificate: 使用外部证书签署 + setup_2fa_to_continue: 设置双重认证以继续。 + create_a_new_account: 创建新账户。 + you_are_already_signed_in: 您已登录。 + please_sign_in: 请登录。 + not_found: 未找到 + new_recipients_have_been_added: 新收件人已添加。 + submission_has_been_removed: 提交已移除。 + submission_has_been_archived: 提交已归档。 + form_has_been_completed_already: 表单已完成。 + form_has_been_archived: 表单已归档。 + form_has_been_expired: 表单已过期。 + form_has_been_declined: 表单已被拒绝。 + file_is_missing: 文件缺失 + folder_name_has_been_updated: 文件夹名称已更新。 + unable_to_rename_folder: 无法重命名文件夹。 + template_has_been_removed: 模板已移除。 + template_has_been_archived: 模板已归档。 + template_has_been_cloned: 模板已克隆。 + document_template_has_been_moved: 文档模板已移动。 + unable_to_move_template_into_folder: 无法将模板移入文件夹。 + template_has_been_unarchived: 模板已取消归档。 + submission_has_been_unarchived: 提交已取消归档。 + unable_to_update_file: 无法上传文件。 + user_has_been_invited: 用户已邀请。 + unable_to_update_user: 无法更新用户。 + user_has_been_updated: 用户已更新。 + unable_to_remove_user: 无法移除用户。 + user_has_been_removed: 用户已移除。 + invalid_pdf: 无效 PDF + webhook_secret_has_been_saved: Webhook 密钥已保存。 + webhook_url_has_been_saved: Webhook URL 已保存。 + webhook_request_has_been_sent: Webhook 请求已发送。 + webhook_url_has_been_updated: Webhook URL 已更新。 + webhook_url_has_been_deleted: Webhook URL 已删除。 + unable_to_resend_webhook_request: 无法重新发送 Webhook 请求。 + new_webhook: 新建 Webhook + delete_webhook: 删除 Webhook + security: 安全 + webhook_security: Webhook 安全 + secret: 密钥 + hmac: HMAC + hmac_signing_secret: HMAC 签名密钥 + hmac_signature_header_hint_html: '每个请求使用 %{header} 头签名:<timestamp>.<sha256>。' + count_submissions_have_been_created: '已创建 %{count} 个提交。' + sms_length_cant_be_longer_than_120_bytes: 短信长度不能超过 120 字节 + connected_successfully: 连接成功。 + user_nameid_not_found: '用户 %{nameid} 未找到。' + sso_settings_have_been_updated: SSO 设置已更新。 + sms_has_been_sent: 短信已发送。 + account_has_been_created: 账户已创建。 + account_has_been_updated: 账户已更新。 + account_has_been_removed: 账户已移除。 + logo_has_been_uploaded: Logo 已上传。 + invalid_file_type: 无效的文件类型 + upload_file: 上传文件 + upgrade_your_plan_to_invite_more_users_contact_email: '升级您的计划以邀请更多用户(联系 %{email})。' + contact_your_admin_email_to_invite_more_users: '联系您的管理员 %{email} 以邀请更多用户。' + contact_your_administrator_to_add_new_users: 联系您的管理员以添加新用户 + one_hour: 1 小时 + two_hours: 2 小时 + four_hours: 4 小时 + eight_hours: 8 小时 + twelve_hours: 12 小时 + twenty_four_hours: 24 小时 + two_days: 2 天 + four_days: 4 天 + eight_days: 8 天 + fifteen_days: 15 天 + twenty_one_days: 21 天 + thirty_days: 30 天 + free: 免费 + unlimited_documents_storage: 无限文档存储 + users_management: 用户管理 + ten_field_types: 10 种字段类型 + multiple_signers: 多人签署 + automatic_esignature: 自动电子签名 + ten_signature_request_emails_per_month: 每月 10 封签名请求邮件 + unlimited_sign_yourself: 无限自行签署 + free_developer_testing_sandbox: 免费开发者测试沙盒 + continue_with_free_basic: 继续使用免费基础版 + unlimited_signature_request_emails: 无限签名请求邮件 + your_company_logo: 您的公司 Logo + connect_own_email_address: 连接自有邮箱地址 + personalize_email_content: 个性化邮件内容 + automated_reminders: 自动提醒 + bulk_send_from_spreadsheet: 从电子表格批量发送 + identify_verification_via_sms: 通过短信进行身份验证 + start_with_pro: 开始使用 Pro + user_month: 用户 / 月 + developer_sandbox: 开发者沙盒。 + upgrade_to_start_using_in_production_html: '升级以开始在生产环境中使用。' + download_combined_pdf: 下载合并的 PDF + audit_log: 审计日志 + signers: 签署者 + not_invited_yet: 尚未邀请 + not_completed_yet: 尚未完成 + declined_on_time: '于 %{time} 拒绝' + expire_on_time: '于 %{time} 过期' + sign_in_person: 本人签署 + create_a_new_template_document_form_or_submit_the_existing_one_html: 创建新模板文档表单或提交现有模板 + send_email_copy_with_completed_documents_to_a_specified_bcc_address: 将完成文档的邮件副本发送到指定的密送地址。 + re_send_email: 重新发送邮件 + send_email: 发送邮件 + copy_share_link: 复制分享链接 + copied_to_clipboard: 已复制到剪贴板 + link: 链接 + via_email: 通过邮件 + via_phone: 通过电话 + detailed: 详细 + upload_list: 上传列表 + creating: 创建中 + open_source_documents_software: 开源文档软件 + copy_link: 复制链接 + opened: 已打开 + sent: 已发送 + awaiting: 等待中 + document_id: 文档 ID + envelope_id: 信封 ID + event_log: 事件日志 + verify: 验证 + testing_log_not_for_production_use: 测试日志 - 不适用于生产环境 + original_sha256: 原始 SHA256 + result_sha256: 结果 SHA256 + generated_at: 生成时间 + email_verification: 邮件验证 + phone_verification: 电话验证 + session_id: 会话 ID + option: 选项 + text_field: 文本字段 + signature_field: 签名字段 + initials_field: 首字母字段 + date_field: 日期字段 + number_field: 数字字段 + image_field: 图片字段 + file_field: 文件字段 + select_field: 选择字段 + checkbox_field: 复选框字段 + multiple_field: 多选字段 + radio_field: 单选组字段 + cells_field: 单元格字段 + stamp_field: 印章字段 + payment_field: 支付字段 + phone_field: 电话字段 + verification_field: 身份验证 + knowledge_based_authentication: 基于知识的认证 + kba_field: KBA + passed: 已通过 + identity_verification: 身份验证 + paid_price: '已支付 %{price}' + verified: 已验证 + unverified: 未验证 + document: 文档 + completed_at: 完成于 + edit_recipient: 编辑收件人 + update_recipient: 更新收件人 + use_international_format_1xxx_: '使用国际格式:+1xxx...' + submitter_cannot_be_updated: 提交者无法更新。 + at_least_one_field_must_be_filled: 至少填写一个字段。 + archived_users: 已归档用户 + embedding_users: 嵌入用户 + view_embedding_users: 查看嵌入用户 + key: 键 + value: 值 + webhook_secret: Webhook 密钥 + author: 作者 + to: 至 + created_at: 创建于 + apply: 应用 + applying: 应用中 + today: 今天 + yesterday: 昨天 + this_week: 本周 + last_week: 上周 + this_month: 本月 + last_month: 上月 + this_year: 今年 + policy_links: 政策链接 + markdown_content_e_g: Markdown 内容,例如 + privacy_policy: 隐私政策 + the_code_has_been_sent_to_your_email: 验证码已发送到您的邮箱。 + enter_the_verification_code_from_your_email: 输入来自邮件的验证码。 + too_many_attempts: 尝试次数过多。 + verification_code: 验证码 + resend_code: 重新发送验证码 + verify_new_sign_in: 验证新的登录 + use_otp_code_to_sign_in_or_click_the_link_below_html: '使用 %{code} 验证码登录,或点击下方链接:' + complete_sign_in: 完成登录 + please_reply_to_this_email_if_you_dont_recognize_this_sign_in_attempt: 如果您不认可此次登录尝试,请回复此邮件。 + docuseal_support: DocuSeal 支持 + use_the_edit_form_to_move_it_to_another_team: 使用编辑表单将其移动到另一个团队。 + too_many_sms_attempts_try_again_in_a_few_seconds: 短信尝试次数过多。请在几秒后重试。 + number_phone_number_is_invalid: "+%{number} 电话号码无效" + make_com_integration: Make.com 集成 + zapier_integration: Zapier 集成 + seamlessly_automate_your_document_signing_process_with_make_com: 使用 Make.com 无缝自动化您的文档签署流程。 + find_suitable_zapier_templates_to_automate_your_workflow: 查找合适的 Zapier 模板以自动化您的工作流程。 + get_started: 开始使用 + click_here_to_learn_more_about_user_roles_and_permissions_html: '点击此处了解更多关于用户角色和权限的信息。' + count_10_signature_request_emails_sent_this_month_upgrade_to_pro_to_send_unlimited_signature_request_email: '%{count} / 10 封签名请求邮件本月已发送。升级到 Pro 以发送无限签名请求邮件。' + test_mode_emails_limit_will_be_reset_within_24_hours: 测试模式邮件限制将在 24 小时内重置。 + on_a_scale_of_1_to_10_how_satisfied_are_you_with_the_docuseal_product_: 以 1 到 10 分评价,您对 DocuSeal 产品的满意度如何? + tell_us_more_about_your_experience: 告诉我们更多关于您的体验 + extremely_dissatisfied: 非常不满意 + extremely_satisfied: 非常满意 + your_pro_plan_payment_is_overdue: 您的 Pro 计划付款已逾期。 + click_here_to_update_your_payment_details_and_clear_the_invoice_to_ensure_uninterrupted_service_html: 点击此处更新您的付款详情并结清账单,以确保服务不中断。 + overdue_payment: 逾期付款 + your_pro_plan_has_been_suspended_due_to_unpaid_invoices_you_can_update_your_payment_details_to_settle_the_invoice_and_continue_using_docuseal_or_cancel_your_subscription: 由于未付账单,您的 Pro 计划已被暂停。您可以更新付款详情以结清账单并继续使用 DocuSeal,或取消订阅。 + manage_subscription: 管理订阅 + submission_created_by_email_html: '提交已创建,由 %{email}' + submission_created_by_email_via_source_html: '提交已创建,由 %{email} 通过 %{source}' + submission_created_via_source_html: '提交已创建,通过 %{source}' + pro_user_seats_used: 已使用 Pro 用户席位 + manage_plan: 管理计划 + this_submission_has_multiple_signers_which_prevents_the_use_of_a_sharing_link_html: 此提交有多个签署者,这妨碍了共享链接的使用,因为无法确定哪个签署者负责特定字段。要解决此问题,请按照此指南定义默认签署者详情。 + welcome_to_docuseal: 欢迎使用 DocuSeal + start_a_quick_tour_to_learn_how_to_create_and_send_your_first_document: 开始快速导览,学习如何创建和发送您的第一份文档 + start_tour: 开始导览 + name_a_z: 名称 A-Z + recently_used: 最近使用 + newest_first: 最新优先 + none: 无 + default_expiration: 默认过期时间 + specified_date: 指定日期 + one_day: 1 天 + two_days: 2 天 + three_days: 3 天 + four_days: 4 天 + five_days: 5 天 + six_days: 6 天 + seven_days: 7 天 + eight_days: 8 天 + nine_days: 9 天 + ten_days: 10 天 + two_weeks: 2 周 + three_weeks: 3 周 + four_weeks: 4 周 + one_month: 1 个月 + two_months: 2 个月 + three_months: 3 个月 + eu_data_residency: 欧盟数据驻留 + please_enter_your_email_address_associated_with_the_completed_submission: 请输入与已完成提交关联的电子邮件地址。 + esignature_disclosure: 电子签名披露 + share_link: 分享链接 + enable_shared_link: 启用共享链接 + share_link_is_currently_disabled: 共享链接当前已禁用 + dynamic_template_with_variables_cannot_be_used_via_shared_link: 带变量的动态模板无法通过共享链接使用 + select_data_residency: 选择数据驻留 + account_name_has_invited_you_to_fill_and_sign_documents_online_effortlessly_with_a_secure_fast_and_user_friendly_digital_document_signing_solution: '%{account_name} 已邀请您在线填写和签署文档,使用安全、快速且用户友好的数字文档签署解决方案。' + review_or_download_completed_documents_fill_and_sign_documents_online_effortlessly_with_a_secure_fast_and_user_friendly_digital_document_signing_solution: 查看或下载已完成的文档。使用安全、快速且用户友好的数字文档签署解决方案在线填写和签署文档。 + link_form_fields: 链接表单字段 + at_least_one_field_must_be_displayed_in_the_form: 表单中至少显示一个字段。 + this_template_has_multiple_parties_which_prevents_the_use_of_a_sharing_link: 此模板有多个参与方,这妨碍了共享链接的使用。要解决此问题,请定义默认参与方详情。 + events_log: 事件日志 + succeeded: 成功 + failed: 失败 + there_are_no_events: 没有事件 + resend: 重新发送 + next_attempt_in_time_in_words: 下次尝试在 %{time_in_words} + request_email_otp_verification_with_shared_link: 通过共享链接请求邮件 OTP 验证 + sms_rate_limit_exceeded: 短信速率限制已超出 + invalid_phone_number: 无效的电话号码 + please_contact_the_requester_to_specify_your_phone_number_for_two_factor_authentication: 请联系请求者指定您的电话号码以进行双重认证。 + we_sent_a_one_time_verification_code_to_your_email_address_please_enter_the_code_below_to_continue: 我们已向您的邮箱发送一次性验证码。请在下方输入验证码以继续。 + re_send_code: 重新发送验证码 + email_verification: 邮件验证 + your_verification_code_to_access_the_name: '您访问"%{name}"的验证码:' + please_reply_to_this_email_if_you_didnt_request_this: 如果您没有请求此操作,请回复此邮件。 + advanced_settings: 高级设置 + text: 文本 + code: 代码 + custom_html_emails: 自定义 HTML 邮件 + connect_your_email_to_send_html_emails: 连接您的邮箱以发送 HTML 邮件 + connect_your_email_or_outlook_account_or_add_smtp_settings_to_send_custom_html_emails: 连接您的 Gmail 或 Outlook 账户,或添加 SMTP 设置以发送自定义 HTML 邮件。 + connect_gmail_or_outlook: 连接 Gmail 或 Outlook + connect_your_email_to_bulk_send: 连接您的邮箱以批量发送 + connect_your_email_or_outlook_account_or_add_smtp_settings_to_bulk_send: 连接您的 Gmail 或 Outlook 账户,或添加 SMTP 设置以批量发送。 + are_you_sure_you_want_to_add_recipients_without_sending_to_send_emails_it_requires_to_connect_gmail_or_outlook: 确定要不发送就添加收件人吗?要发送邮件,需要连接 Gmail 或 Outlook。 + template_name_has_been_completed_by_submitters_html: '"{template.name}" 已由 {submission.submitters} 完成' + please_check_the_copy_of_your_template_name_in_the_email_attachments_html: '请在电子邮件附件中查收您的 "{template.name}" 副本。' + you_have_been_invited_to_sign_the_template_name_html: '您已被邀请签署 "{template.name}"。' + reveal_api_key: 显示 API 密钥 + enter_your_password_to_reveal_the_api_key: 输入密码以显示 API 密钥 + wrong_password: 密码错误。 + current_password: 当前密码 + dont_remember_your_current_password_click_here_to_reset_it_html: '不记得当前密码?重置。' + an_email_with_password_reset_instructions_has_been_sent: 包含密码重置说明的邮件已发送。 + api_key_access_code: API 密钥访问代码 + use_otp_code_to_access_the_api_key_html: 使用 %{code} 验证码访问 API 密钥。 + please_reply_to_this_email_if_you_dont_recognize_this_request: 如果您不认可此请求,请回复此邮件。 + your_user_account_has_been_archived_contact_your_administrator_to_restore_access_to_your_account: 您的用户账户已被归档。联系您的管理员以恢复对您账户的访问。 + your_email_could_not_be_reached_this_may_happen_if_there_was_a_typo_in_your_address_or_if_your_mailbox_is_not_available_please_contact_support_email_to_log_in: 无法联系到您的邮箱。这可能是因为地址拼写错误或邮箱不可用。请联系 support@docuseal.com 登录。 + efficient_search_with_search_index: 使用搜索索引进行高效搜索 + reindex: 重新索引 + build_search_index: 构建搜索索引 + require_two_factor_authentication_2fa_with_an_authenticator_app_e_g_google_authenticator_authy_all_users_signing_documents_must_pass_the_second_factor_verification_using_a_secure_code_in_addition_to_their_password: 要求使用身份验证器应用(如 Google Authenticator、Authy)进行双重认证 (2FA)。所有签署文档的用户除密码外,还必须使用安全验证码通过第二因素验证。 + add_a_unique_signature_id_and_timestamp_to_each_signature_for_audit_and_traceability_purposes_along_with_the_timestamp_part_of_docuseals_21_cfr_part_11_compliance_settings: "为每个签名添加唯一的签名 ID 和时间戳,用于审计和追溯目的。这是 DocuSeal 21 CFR Part 11 合规设置的一部分。" + require_signer_to_provide_a_reason_for_signing_before_completing_their_signature_e_g_approvals_certifications_part_of_docuseals_21_cfr_part_11_compliance_settings: "要求签署者在完成签名前提供签署原因(例如批准、认证)。这是 DocuSeal 21 CFR Part 11 合规设置的一部分。" + allow_signers_to_create_signatures_by_typing_their_name_instead_of_drawing_or_uploading_one: 允许签署者通过输入姓名来创建签名,而不必绘制或上传签名。 + allow_signers_to_resubmit_forms_after_completion_useful_when_corrections_or_multiple_submissions_are_needed: 允许签署者在完成后重新提交表单,适用于需要更正或多次提交的情况。 + allow_recipients_to_decline_signing_a_document_the_decline_reason_notification_will_be_sent_to_the_signature_requester: 允许收件人拒绝签署文档。拒绝原因通知将发送给签名请求者。 + allow_recipients_to_delegate_documents: 允许收件人通过电子邮件将文档委派给其他人。当原始收件人需要将文档转交给授权签署者时很有用。 + save_a_users_signature_and_automatically_pre_fill_it_in_future_signing_sessions: "保存用户的签名并在未来的签署会话中自动预填。" + make_document_download_links_expire_after_40_minutes_to_prevent_long_term_access_and_enhance_security: 使文档下载链接在 40 分钟后过期,以防止长期访问并增强安全性。 + require_authentication_with_user_login_or_api_key_to_access_the_document_download_links: 要求使用用户登录或 API 密钥进行身份验证才能访问文档下载链接。 + combine_signed_documents_and_the_audit_log_into_a_single_pdf_file_for_easier_recordkeeping_and_compliance: 将已签署文档和审计日志合并为一个 PDF 文件,以便于记录保管和合规。 + require_a_jwt_authorization_to_preview_embedded_forms_ensuring_only_authorized_users_can_view_them: 需要 JWT 授权才能预览嵌入式表单,确保只有授权用户可以查看。 + make_all_newly_created_templates_private_to_their_creator_by_default: 默认将所有新创建的模板设为创建者私有。 + make_the_recipients_signing_order_always_enforced_so_that_the_second_signer_can_start_signing_their_part_only_after_the_first_signer_has_completed_signing: 始终强制执行收件人签署顺序,使第二位签署者仅在第一签署者完成签署后才能开始签署其部分。 + the_file_is_missing_make_sure_you_have_access_to_it_on_google_drive: 文件缺失。请确保您在 Google Drive 上有访问权限。 + connect_google_drive: 连接 Google Drive + google_drive_has_been_connected: Google Drive 已连接 + unable_to_identify_reset_your_password_to_sign_in: 无法识别。重置密码以登录。 + desktop: 桌面端 + mobile: 移动端 + tablet: 平板端 + reset_default: 重置默认 + send_signature_request_email: 发送签名请求邮件 + last_3_months: 最近 3 个月 + last_6_months: 最近 6 个月 + last_year: 去年 + all_time: 全部时间 + everyone: 所有人 + daily: 每日 + weekly: 每周 + monthly: 每月 + api: API + embed: 嵌入 + bulk: 批量 + invite: 邀请 + api_and_embed: API 和嵌入 + period: 时间段 + reports: 报告 + completed_submissions: 已完成提交 + sms: 短信 + require_email_2fa_to_open: 需要邮件双重认证才能打开 + verification_required_refresh_the_page_and_pass_2fa: 需要验证,请刷新页面并通过双重认证。 + the_sender_has_requested_a_two_factor_authentication_via_one_time_password_sent_to_your_email_html: 发送者请求了双重认证,一次性密码已发送到您的邮箱 %{email}。 + please_contact_the_requester_to_specify_your_email_for_two_factor_authentication: 请联系请求者指定您的邮箱以进行双重认证。 + rate_limit_exceeded: 超出速率限制 + a_confirmation_email_has_been_sent_to_the_new_email_address: 确认邮件已发送到新邮箱地址。 + email_address_is_awaiting_confirmation_follow_the_link_in_the_email_to_confirm: "%{email} 邮箱地址正在等待确认。请点击邮件中的链接进行确认。" + please_confirm_your_email_address_using_the_link_below_: '请使用以下链接确认您的邮箱地址:' + confirm_email: 确认邮箱 + please_verify_your_email_address_to_continue: 请验证您的邮箱地址以继续。 + verification_code_sent_click_link_or_enter_code: 验证码已发送到您的邮箱。点击邮件链接或输入一次性验证码以确认您的邮箱。 + use_otp_code_to_verify_email_or_click_link_below_html: '使用 %{code} 验证码验证您的邮箱,或点击下方链接:' + verify_your_email: 验证您的邮箱 + your_email_has_been_confirmed: 您的邮箱已确认。 + invalid_or_expired_verification_code: 验证码无效或已过期。 + didnt_receive_an_email: 没有收到邮件? + unconfirmed: 未确认 + you_requested_to_reset_your_password_use_the_link_below_to_continue: 您请求重置密码。请使用以下链接继续 + if_you_didnt_request_this_you_can_ignore_this_email: "如果您没有请求此操作,请忽略此邮件。" + your_password_wont_change_until_you_open_the_link_above_and_set_a_new_one: "在您打开上方链接并设置新密码之前,密码不会更改。" + too_many_requests_try_again_later: 请求过多,请稍后重试。 + bold: 粗体 + italic: 斜体 + underline: 下划线 + undo: 撤销 + redo: 重做 + add_variable: 添加变量 + enter_a_url_or_variable_name: 输入 URL 或变量名称 + new_token: 新建令牌 + token: 令牌 + mcp_server: MCP 服务器 + instructions: 说明 + please_copy_the_token_below_now_as_it_wont_be_shown_again: 请立即复制以下令牌,它将不会再次显示 + mcp_token_has_been_created: MCP 令牌已创建。 + mcp_token_has_been_removed: MCP 令牌已移除。 + enable_mcp_server: 启用 MCP 服务器 + all_existing_mcp_connections_will_be_stopped_immediately_when_this_setting_is_disabled: 禁用此设置时,所有现有的 MCP 连接将立即停止。 + connect_to_docuseal_mcp: 连接到 DocuSeal MCP + add_the_following_to_your_mcp_client_configuration: 将以下内容添加到您的 MCP 客户端配置 + works_with_claude_desktop_cursor_windsurf_vs_code_and_any_mcp_compatible_client: 适用于 Claude Desktop、Cursor、Windsurf、VS Code 以及任何 MCP 兼容客户端。 + your_email_address_has_been_changed: 您的邮箱地址已更改 + the_email_address_for_your_account_has_been_changed_to_new_email: 您账户的邮箱地址已更改为 %{new_email}。 + if_you_did_not_make_this_change_please_contact_us_by_replying_to_this_email: 如果您没有进行此更改,请回复此邮件联系我们。 + devise: + confirmations: + confirmed: 您的邮箱地址已成功确认。 + failure: + unconfirmed: 您必须先确认邮箱地址才能继续。 + mailer: + confirmation_instructions: + subject: 确认您的邮箱地址 + submission_sources: + api: API + bulk: 批量发送 + embed: 嵌入 + invite: 邀请 + link: 链接 + mcp: MCP + submission_event_names: + send_email_to_html: '邮件已发送给 %{submitter_name}' + bounce_email_html: '邮件退回 %{submitter_name}' + complaint_email_html: '垃圾邮件投诉 %{submitter_name}' + send_reminder_email_to_html: '提醒邮件已发送给 %{submitter_name}' + send_sms_to_html: '短信已发送给 %{submitter_name}' + send_2fa_sms_to_html: '验证短信已发送给 %{submitter_name}' + send_2fa_email_to_html: '验证邮件已发送给 %{submitter_name}' + open_email_by_html: '邮件已打开,由 %{submitter_name}' + click_email_by_html: '邮件链接已点击,由 %{submitter_name}' + click_sms_by_html: '短信链接已点击,由 %{submitter_name}' + phone_verified_by_html: '电话已验证,由 %{submitter_name}' + email_verified_by_html: '邮件已验证,由 %{submitter_name}' + start_form_by_html: '提交已开始,由 %{submitter_name}' + view_form_by_html: '表单已查看,由 %{submitter_name}' + invite_party_by_html: '已邀请 %{invited_submitter_name},由 %{submitter_name}' + complete_form_by_html: '提交已完成,由 %{submitter_name}' + start_verification_by_html: '身份验证已开始,由 %{submitter_name}' + complete_verification_by_html: '身份验证已完成,由 %{submitter_name} 通过 %{provider}' + start_kba_by_html: 'KBA 已开始,由 %{submitter_name}' + complete_kba_by_html: 'KBA 已完成,由 %{submitter_name}' + fail_kba_by_html: 'KBA 失败,由 %{submitter_name}' + api_complete_form_by_html: '通过 API 提交已完成,由 %{submitter_name}' + decline_form_by_html: '表单已拒绝,由 %{submitter_name}' + delegate_form_by_html: '已委派从 %{from} 给 %{to}' + import_list: + select_worksheet: 选择工作表 + open: 打开 + remove: 移除 + recipient_field: 收件人字段 + spreadsheet_column: 电子表格列 + select_field: 选择字段 + select_column: 选择列 + new_field_mapping: 新字段映射 + total_entries: 总条目数 + upload_csv_or_xlsx_spreadsheet: 上传 CSV 或 XLSX 电子表格 + click_to_upload: 点击上传 + or_drag_and_drop_files: 或拖放文件。 + or: 或 + download: 下载 + a_sample_spreadsheet_to_fill_and_import: 一个用于填写和导入的示例电子表格 + app_tour: + start: 开始 + previous: 上一步 + next: 下一步 + template_and_submissions: 模板和提交 + template_and_submissions_description: "您可以选择最适合您工作流程的视图。选择'模板'视图创建可重复使用的文档模板,或选择'提交'视图签署单个文档或查看每个签名请求的状态。" + upload_a_pdf_file: 上传 PDF 文件 + upload_a_pdf_file_description: 上传 PDF 文档以创建签署表单模板。 + select_a_signer_party: 选择签署方 + select_a_signer_party_description: 此下拉菜单允许您选择签署方角色,或为需要 2 个或更多签名的文档添加新方。 + available_parties: 可用方 + available_parties_description: 此列表包含所有可用参与方及其角色名称。选择后,您可以为该签署方添加和配置字段。 + available_field_types: 可用字段类型 + available_field_types_description: 此部分包含可以添加到文档中的所有可用字段类型,用于数据输入或签名收集。 + text_input_field: 文本输入字段 + text_input_field_description: 此字段允许用户输入文本信息,如姓名或电子邮件。 + signature_field: 签名字段 + signature_field_description: 此字段用于收集签署者的签名。 + added_fields: 已添加字段 + added_fields_description: 此列表显示已添加到文档的所有字段。您可以重新排序、编辑或移除它们。 + open_field_settings: 打开字段设置 + open_field_settings_description: 在右侧字段名称旁边有一个设置图标,点击可打开字段设置。 + field_settings: 字段设置 + field_settings_description: 每个字段都可以通过设置进行自定义以满足您的要求,例如调整字体大小、设为必填字段或添加描述。 + send_document: 发送文档进行签署 + send_document_description: 在发送文档进行签署之前,您可以配置收件人、添加他们的电子邮件地址或电话号码,以及自定义邮件内容。 + sign_yourself: 自行签署文档 + sign_yourself_description: 此按钮允许您在需要签名的文档上添加您的签名。 + copy_and_share_link: 复制并分享链接 + copy_and_share_link_description: 复制此链接以分享文档。任何拥有链接的人都可以在输入电子邮件后签署它。 + sign_the_document: 签署文档 + sign_the_document_description: 如果您是签署者之一,此按钮允许您签署文档。 + send_for_signing: 发送进行签署 + add_recipients: 添加收件人 + add_recipients_description: 通过输入电子邮件地址或电话号码,为待签署的文档添加新收件人。 + settings: 设置 + settings_account_description: 通过全面的账户设置,您可以自定义电子签署体验并邀请更多用户。 + support: 支持 + support_description: 您可以使用我们的自助 AI 助手,或发送电子邮件至 support@docuseal.com 提问。 + settings_template_description: 使用此按钮访问您的账户设置页面。 + doorkeeper: + scopes: + write: 更新您的数据 + read: 读取您的数据 + mcp: 使用 MCP + claudeai: 使用 Claude AI + pagination: + submissions: + range_with_total: "第 %{from}-%{to} 条,共 %{count} 条提交" + range_without_total: "第 %{from}-%{to} 条提交" + templates: + range_with_total: "第 %{from}-%{to} 条,共 %{count} 条模板" + range_without_total: "第 %{from}-%{to} 条模板" + template_folders: + range_with_total: "第 %{from}-%{to} 条,共 %{count} 个文件夹" + range_without_total: "第 %{from}-%{to} 个文件夹" + users: + range_with_total: "第 %{from}-%{to} 条,共 %{count} 名用户" + range_without_total: "第 %{from}-%{to} 名用户" + items: + range_with_total: "第 %{from}-%{to} 条,共 %{count} 条项目" + range_without_total: "第 %{from}-%{to} 条项目" + events: + range_with_total: "第 %{from}-%{to} 条,共 %{count} 条事件" + range_without_total: "第 %{from}-%{to} 条事件" + variables: + account_name: 账户名称 + submitter_link: 提交者链接 + template_name: 模板名称 + submission_submitters: 提交者列表 + submission_link: 提交链接 + documents_link: 文档链接 + time: + formats: + detailed: "%Y年%B%d日 %H:%M:%S" diff --git a/docker-compose.yml b/docker-compose.yml index fcc697be..56114cf3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,7 +13,7 @@ services: - DATABASE_URL=postgresql://postgres:postgres@postgres:5432/docuseal postgres: - image: postgres:18 + image: postgres:17.5 volumes: - './pg_data:/var/lib/postgresql/18/docker' environment: @@ -27,7 +27,7 @@ services: retries: 5 caddy: - image: caddy:latest + image: caddy:2.10-alpine command: caddy reverse-proxy --from $HOST --to app:3000 ports: - 80:80 diff --git a/简体中文支持部署指南.md b/简体中文支持部署指南.md new file mode 100644 index 00000000..6efb4255 --- /dev/null +++ b/简体中文支持部署指南.md @@ -0,0 +1,397 @@ +# DocuSeal 简体中文支持部署指南 + +## 概述 + +本文档记录了为 DocuSeal 开源电子签名平台添加完整简体中文(zh-CN)支持的整个过程,包括后端 Rails i18n 翻译、前端 Vue 组件翻译、Dockerfile 国内镜像源适配,以及语言选项统一。 + +## 修改文件清单 + +| 文件 | 变更量 | 说明 | +|------|--------|------| +| `config/locales/i18n.yml` | +1070 行 | 新增 zh-CN 区域,完整中文翻译 | +| `app/javascript/submission_form/i18n.js` | +111 行 | 新增前端提交表单 zh 翻译对象 | +| `app/javascript/template_builder/i18n.js` | +226 行 | 新增前端模板编辑器 zh 翻译对象 | +| `app/controllers/accounts_controller.rb` | +16 行 | 统一语言选项列表 | +| `config/application.rb` | +1 行 | 添加 zh-CN 到可用语言列表 | +| `Dockerfile` | +19 行 | 添加国内镜像源加速构建 | +| `docker-compose.yml` | 版本锁定 | 锁定 PostgreSQL 和 Caddy 版本 | + +--- + +## 一、i18n 中文翻译详情 + +### 1.1 后端 Rails 翻译(config/locales/i18n.yml) + +在文件末尾(第 8088 行)新增 `zh-CN` 语言区域,采用 YAML 锚点继承模式: + +```yaml +zh-CN: + <<: *en # 继承所有英文键作为回退 + language_zh-CN: 中文 (简体) + sign_in: 登录 + # ... 1000+ 条中文翻译 +``` + +翻译覆盖范围: +- 登录/注册/密码重置流程 +- 账户设置、偏好设置 +- 文档模板管理(创建、编辑、归档) +- 签署流程(签名请求、提醒、完成通知) +- 邮件模板(签名请求邮件、提醒邮件、完成通知) +- 表单字段类型(文本、签名、日期、选择框等) +- API 参考、嵌入集成 +- Webhook、SSO、SAML 配置 +- 应用导览、分页 +- 订阅计划、账单 +- Devise 认证系统 +- Doorkeeper OAuth 授权 +- 所有系统通知/提示消息 + +**技术要点:** +- 使用 `<<: *en` 继承英文键,未翻译的键自动回退英文 +- 配合 `config.i18n.fallbacks = [:en]` 双重保障 +- 保留了所有插值变量(`%{name}`, `%{count}` 等)和 HTML 标签 + +### 1.2 前端提交表单翻译(app/javascript/submission_form/i18n.js) + +新增 `zh` 翻译对象(107 个键),覆盖: +- 表单进度提示 +- 签名绘制操作(手绘、输入、上传) +- 字段类型名称 +- 身份验证流程(短信/邮件验证码) +- 文件上传操作 +- 支付界面 + +关键代码: +```js +const zh = { + step: '步骤', + sign_and_complete: '签署并完成', + draw_signature: '绘制签名', + // ... 107 个翻译键 +} +const i18n = { en, es, it, de, fr, pl, uk, cs, pt, he, nl, ar, ko, ja, zh } +``` + +**技术要点:** +- 前端 locale 解析:`I18n.locale.to_s.split('-').first` → `"zh"`,匹配 `i18n["zh"]` +- 回退链:`i18n[locale] → i18n[browserLang] → i18n.en → key` + +### 1.3 前端模板编辑器翻译(app/javascript/template_builder/i18n.js) + +新增 `zh` 翻译对象(221 个键),覆盖: +- 字段绘制和编辑操作 +- 参与方管理(第1-20方) +- 字段属性设置(字体、对齐、验证等) +- 条件逻辑配置 +- 公式编辑器 +- 修订版本管理 +- PDF 密码保护 + +关键代码: +```js +const zh = { + fixed: '固定', + draw_field_on_the_document: '在文档上绘制字段', + // ... 221 个翻译键 +} +export { en, es, it, pt, fr, de, nl, zh } +``` + +### 1.4 语言选项统一 + +`config/application.rb` 中 `available_locales` 包含 zh-CN(完整 22 种语言)。 + +`accounts_controller.rb` 中 `LOCALE_OPTIONS` 从原来的 9 种扩展到 22 种,与 `available_locales` 完全一致: + +```ruby +LOCALE_OPTIONS = { + 'en-US' => 'English (United States)', + 'en-GB' => 'English (United Kingdom)', + 'fr-FR' => 'Français', + 'es-ES' => 'Español', + 'pt-PT' => 'Português', + 'de-DE' => 'Deutsch', + 'it-IT' => 'Italiano', + 'nl-NL' => 'Nederlands', + 'zh-CN' => '中文 (简体)', + 'es' => 'Español', + 'it' => 'Italiano', + 'de' => 'Deutsch', + 'fr' => 'Français', + 'nl' => 'Nederlands', + 'pl' => 'Polski', + 'uk' => 'Українська', + 'cs' => 'Čeština', + 'pt' => 'Português', + 'he' => 'עברית', + 'ar' => 'العربية', + 'ko' => '한국어', + 'ja' => '日本語' +}.freeze +``` + +--- + +## 二、Dockerfile 国内镜像源适配 + +### 2.1 修改内容 + +| 构建阶段 | 包管理器 | 原地址 | 替换为国内镜像 | +|---------|---------|--------|---------------| +| download | Alpine apk | `dl-cdn.alpinelinux.org` | `mirrors.tuna.tsinghua.edu.cn` | +| webpack | Alpine apk | `dl-cdn.alpinelinux.org` | `mirrors.tuna.tsinghua.edu.cn` | +| webpack | RubyGems | `rubygems.org` | `gems.ruby-china.com` | +| webpack | Yarn/npm | `registry.yarnpkg.com` | `registry.npmmirror.com` | +| app | Alpine apk | `dl-cdn.alpinelinux.org` | `mirrors.tuna.tsinghua.edu.cn` | +| app | Bundler | `rubygems.org` | `gems.ruby-china.com` | + +### 2.2 关键代码位置 + +**Alpine apk 镜像**(3 个阶段均添加): +```dockerfile +RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories +``` + +**RubyGems 镜像**(webpack 阶段): +```dockerfile +gem sources --remove https://rubygems.org/ && \ +gem sources -a https://gems.ruby-china.com/ +``` + +**Bundler 镜像**(app 阶段): +```dockerfile +bundle config set --global mirror.https://rubygems.org https://gems.ruby-china.com +``` + +**Yarn 镜像**(webpack 阶段): +```dockerfile +yarn config set registry https://registry.npmmirror.com +``` + +### 2.3 GitHub 资源下载说明 + +以下资源仍直接从 GitHub 下载(未走镜像),因为它们通常通过 HTTPS 443 端口可以正常访问: + +| 资源 | 大小 | 用途 | +|------|------|------| +| GoNotoKurrent 字体(Regular + Bold) | ~30MB | 文档默认字体 | +| DancingScript 字体 | ~200KB | 签名字体 | +| ONNX 模型文件 | ~10MB | 表单字段自动检测 | +| PDFium 二进制包 | ~30MB | PDF 渲染引擎 | + +如果 GitHub 下载仍然超时,可手动下载后通过 Docker volume 挂载,或使用 `ghproxy.net` 等 GitHub 文件代理。 + +--- + +## 三、构建与部署 + +### 3.1 构建 Docker 镜像 + +```bash +cd /home/new211/my_project/DocuSeal/docuseal + +# 构建镜像(首次约 15-30 分钟) +docker build -t docuseal-zh:latest . + +# 如需完全重新构建(不使用缓存) +docker build -t docuseal-zh:latest . --no-cache +``` + +### 3.2 修改 docker-compose.yml + +```yaml +services: + app: + depends_on: + postgres: + condition: service_healthy + image: docuseal-zh:latest # 改为本地构建的镜像 + # image: docuseal/docuseal:latest # 原始镜像(无中文) + ports: + - 3000:3000 + volumes: + - ./docuseal:/data/docuseal + environment: + - FORCE_SSL=${HOST} + - DATABASE_URL=postgresql://postgres:postgres@postgres:5432/docuseal + + postgres: + image: postgres:17.5 + volumes: + - './pg_data:/var/lib/postgresql/18/docker' + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: docuseal + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 5s + timeout: 5s + retries: 5 +``` + +### 3.3 启动服务 + +```bash +# 创建数据目录 +mkdir -p ./docuseal ./pg_data + +# 启动 +docker compose up -d + +# 查看日志 +docker compose logs -f app +``` + +访问 `http://localhost:3000` 即可使用。 + +### 3.4 本地开发模式(不依赖 Docker) + +```bash +# 前提:已安装 Ruby 4.0+、Node.js、PostgreSQL、Yarn + +# 安装依赖 +bundle install +yarn install + +# 编译前端 +bin/shakapacker + +# 准备数据库 +bin/rails db:prepare + +# 启动 +bin/rails server +``` + +--- + +## 四、验证方法 + +### 4.1 快速验证(无需启动服务) + +```bash +# 1. 验证 YAML 格式 +ruby -ryaml -e "YAML.load_file('config/locales/i18n.yml')" && echo "YAML 格式正确" + +# 2. 验证前端 JS 翻译键数量 +node -e "import('./app/javascript/submission_form/i18n.js').then(m => console.log('zh 键数:', Object.keys(m.default.zh).length))" +node -e "import('./app/javascript/template_builder/i18n.js').then(m => console.log('zh 键数:', Object.keys(m.zh).length))" + +# 3. 确认 zh-CN 已注册到可用语言列表 +grep "zh-CN" config/application.rb +grep "zh-CN" app/controllers/accounts_controller.rb +``` + +预期输出: +- YAML 格式正确 +- submission_form zh 键数: **106** +- template_builder zh 键数: **221** +- 两个 grep 命令均有输出 + +### 4.2 功能验证清单 + +启动服务后,按以下清单验证: + +| 序号 | 页面 | 操作 | 预期结果 | +|------|------|------|---------| +| 1 | 登录页 `/` | 点击语言下拉菜单 | 显示 **中文 (简体)** 选项 | +| 2 | 登录页 | 选择中文 | 整个界面切换为中文 | +| 3 | 注册页 `/sign_up` | 查看表单 | 字段标签显示中文 | +| 4 | 登录后首页 | 查看导航 | 菜单项显示中文 | +| 5 | 模板创建 | 创建新模板 | 编辑器界面显示中文 | +| 6 | 模板编辑器 | 拖放字段 | 字段名称、设置面板显示中文 | +| 7 | 模板编辑器 | 查看参与方 | 第一方/第二方等显示中文 | +| 8 | 发送文档 | 添加收件人 | 表单和按钮显示中文 | +| 9 | 签署页面 | 以签署者身份打开 | 签名操作、按钮显示中文 | +| 10 | 账户设置 `/settings/account` | 查看语言下拉 | 包含完整 22 种语言选项 | +| 11 | 邮件模板 | 查看邮件设置 | 模板变量说明显示中文 | +| 12 | API 参考 | 查看 API 文档 | 界面显示中文 | + +--- + +## 五、翻译回退机制 + +当某个翻译键在 `zh-CN` 中未定义时,系统按以下优先级查找: + +``` +zh-CN 翻译 → 英文翻译(en)→ 原始键名 +``` + +具体实现: + +1. **后端 Rails**:`config.i18n.fallbacks = [:en]` + YAML `<<: *en` 锚点继承 +2. **前端提交表单**:`this.i18n[key] || i18n[lang]?.[key] || i18n[browserLang]?.[key] || i18n.en[key] || key` +3. **前端模板编辑器**:同上逻辑 + +--- + +## 六、常见问题 + +### Q1:切换中文后部分文字仍显示英文? + +**原因**:前端 JS 翻译键缺失。检查对应 Vue 组件的 i18n.js 文件中是否有对应的 `zh` 键。 + +**解决**:在 `app/javascript/submission_form/i18n.js` 或 `template_builder/i18n.js` 的 `zh` 对象中补充缺失的键。 + +### Q2:Docker 构建时 GitHub 下载超时? + +**原因**:国内网络访问 GitHub 不稳定。 + +**解决方案(按优先级)**: + +1. 使用代理构建: + ```bash + docker build --build-arg HTTP_PROXY=http://your-proxy:port \ + --build-arg HTTPS_PROXY=http://your-proxy:port \ + -t docuseal-zh:latest . + ``` + +2. 手动下载资源文件,修改 Dockerfile 使用 `COPY` 替代 `wget` + +3. 尝试不同的 GitHub 镜像代理(在 `wget` URL 前加前缀): + - `https://ghproxy.net/` 或 `https://ghproxy.com/` + - `https://mirror.ghproxy.com/` + +### Q3:如何添加更多中文语言变体(如 zh-TW 繁体中文)? + +```bash +# 1. 复制 zh-CN 翻译作为基础 +# 2. 修改为繁体中文 +# 3. 在 config/application.rb 的 available_locales 中添加 :'zh-TW' +# 4. 在 accounts_controller.rb 的 LOCALE_OPTIONS 中添加 +# 5. 在前端 i18n.js 中添加 zh-TW 翻译对象 +``` + +### Q4:如何只构建前端翻译(不重新构建整个 Docker 镜像)? + +```bash +# 本地开发模式重新编译前端 +bin/shakapacker + +# 或者只重编译前端资源 +yarn install && bin/shakapacker +``` + +--- + +## 七、文件变更完整差异 + +如需查看所有变更的完整差异: + +```bash +git diff HEAD -- \ + config/locales/i18n.yml \ + app/javascript/submission_form/i18n.js \ + app/javascript/template_builder/i18n.js \ + app/controllers/accounts_controller.rb \ + config/application.rb \ + Dockerfile +``` + +--- + +> **文档版本**:1.0 +> **最后更新**:2026-05-18 +> **适用版本**:DocuSeal (master branch)