mirror of
https://github.com/usememos/memos.git
synced 2024-11-10 17:02:21 +08:00
feat: update zh-Hans translations and minor fixes in locale_updater.py (#1615)
* update zh-Hans translations * minor update * update instruction part * print json_value for debugging purpose * update post requests related * machine translate with chunks to get around {{field}}
This commit is contained in:
parent
b98f85d8a7
commit
6e6aae6649
2 changed files with 458 additions and 310 deletions
|
@ -3,8 +3,8 @@
|
|||
# Date: April 9, 2023
|
||||
# Description: This script is used to patch missing translations in a locale file.
|
||||
|
||||
# The script uses 'en.json' as the reference file to find missing keys in other locale files.
|
||||
# It iterates through each field and their entries in 'en.json' and checks if the same field/entry exists in other files.
|
||||
# The script by default uses 'en.json' as the reference file to find missing keys in other locale files. You could point other reference file by passing the file path as the first argument.
|
||||
# It iterates through each field and their entries in reference locale and checks if the same field/entry exists in other files.
|
||||
# If a field/entry is missing, the script prompts the source string, reference Google translation, and asks for confirmation or correction.
|
||||
# The resulting file is saved as './*.proposed.json', and you should review it before merging and uploading.
|
||||
|
||||
|
@ -13,7 +13,9 @@
|
|||
#TODO: add other NMT system for different preference and accuracy
|
||||
|
||||
import json
|
||||
import re
|
||||
import requests
|
||||
import urllib
|
||||
|
||||
|
||||
def flatten_json(nested_json, parent_key="", sep=":"):
|
||||
|
@ -55,24 +57,68 @@ def sort_nested_json(nested_json):
|
|||
return nested_json
|
||||
|
||||
|
||||
def google_translate(
|
||||
source_text, source_language="en", target_language="zh-CN"
|
||||
):
|
||||
def __google_translate_core(src_text, src_lang='en', tgt_lang='zh-CN'):
|
||||
'''
|
||||
try to only translate text with no {{}} in the text
|
||||
'''
|
||||
|
||||
# Create post content
|
||||
new_line = "\r\n"
|
||||
post_content = "q=" + source_text.replace(new_line, " ")
|
||||
post_content = {'q': src_text}
|
||||
|
||||
# Send post request and get JSON response, using source_language and target_language
|
||||
# url = "https://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl=zh-CN&dt=t"
|
||||
url = f"https://translate.googleapis.com/translate_a/single?client=gtx&sl={source_language}&tl={target_language}&dt=t"
|
||||
headers = {"Content-type": "application/x-www-form-urlencoded"}
|
||||
response = requests.post(url, headers=headers, data=post_content.encode("utf-8"))
|
||||
url = f"https://translate.googleapis.com/translate_a/single?client=gtx&sl={src_lang}&tl={tgt_lang}&dt=t"
|
||||
headers = {
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
|
||||
}
|
||||
response = requests.post(url, headers=headers, data=post_content)
|
||||
json_value = response.json()
|
||||
|
||||
# Extract translations from JSON
|
||||
translations = [item[0] for item in json_value[0]]
|
||||
translations = [t.replace(new_line, "") for t in translations]
|
||||
target_text = translations[0]
|
||||
target_text = ''.join(translations)
|
||||
|
||||
return target_text
|
||||
|
||||
|
||||
def machine_translate(
|
||||
source_text, source_language="en", target_language="zh-CN", __core_NMT_translate=__google_translate_core
|
||||
):
|
||||
target_text = __core_NMT_translate(source_text, source_language, target_language)
|
||||
|
||||
return target_text
|
||||
|
||||
|
||||
def machine_translate_with_chunks(
|
||||
source_text, source_language="en", target_language="zh-CN", __core_NMT_translate=__google_translate_core
|
||||
):
|
||||
# if {{anything}} in text, from left to right translate each part, avoid {{anything}}. then concatentate them together with original {{anything}}
|
||||
# if no {{anything}} in text, just translate the whole text
|
||||
if "{{" in source_text:
|
||||
# index all '{{' and '}}' using finditer
|
||||
left_bracket_index = [m.start() for m in re.finditer('{{', source_text)]
|
||||
right_bracket_index = [m.start() for m in re.finditer('}}', source_text)]
|
||||
bracket_index = list(zip(left_bracket_index, right_bracket_index))
|
||||
|
||||
# translate parts by avoiding {{anything}}
|
||||
parts = []
|
||||
for i in range(len(bracket_index)):
|
||||
if i == 0:
|
||||
parts.append(source_text[:bracket_index[i][0]])
|
||||
else:
|
||||
parts.append(source_text[bracket_index[i-1][1]+2:bracket_index[i][0]]) # +2 to avoid '}}' and '{{'
|
||||
parts.append(source_text[bracket_index[-1][1]+2:]) # +2 to avoid '}}' and '{{'
|
||||
|
||||
# translate parts
|
||||
translated_parts = [__core_NMT_translate(part, source_language, target_language) for part in parts]
|
||||
|
||||
# concatenate parts together with original {{anything}}
|
||||
target_text = ""
|
||||
for i in range(len(bracket_index)):
|
||||
target_text += translated_parts[i] + source_text[bracket_index[i][0]:bracket_index[i][1]+2]
|
||||
target_text += translated_parts[-1]
|
||||
|
||||
else:
|
||||
target_text = __core_NMT_translate(source_text, source_language, target_language)
|
||||
|
||||
return target_text
|
||||
|
||||
|
@ -101,7 +147,7 @@ def get_code_name(json_filename):
|
|||
"uk": "uk",
|
||||
"vi": "vi",
|
||||
"zh-Hant": "zh-TW",
|
||||
"zh": "zh-CN",
|
||||
"zh-Hans": "zh-CN",
|
||||
}
|
||||
code_name = lang_map.get(lang_code, "")
|
||||
|
||||
|
@ -163,7 +209,7 @@ if __name__ == "__main__":
|
|||
+ "\033[0m"
|
||||
+ " | "
|
||||
+ "\033[92m"
|
||||
+ f"English: {ref_flat[key]}"
|
||||
+ f"{ref_codename}: {ref_flat[key]}"
|
||||
+ "\033[0m"
|
||||
)
|
||||
print("=============================================")
|
||||
|
@ -183,7 +229,7 @@ if __name__ == "__main__":
|
|||
print("\033[91m" + "Missing key: " + "\033[0m" + key)
|
||||
print("\033[92m" + f"{ref_codename}: " + "\033[0m" + ref_flat[key])
|
||||
# get reference translation from google translate, print in blue
|
||||
proposal_google = google_translate(ref_flat[key], ref_codename, tgt_codename)
|
||||
proposal_google = machine_translate(ref_flat[key], ref_codename, tgt_codename)
|
||||
print("\033[94m" + f"Reference {tgt_codename} translation: " + "\033[0m" + proposal_google)
|
||||
# prompt user for translation, or enter to use the reference translation, in green color
|
||||
proposal = input("\033[92m" + "Enter translation: " + "\033[0m")
|
||||
|
|
|
@ -1,329 +1,431 @@
|
|||
{
|
||||
"common": {
|
||||
"about": "关于",
|
||||
"home": "主页",
|
||||
"resources": "资源库",
|
||||
"settings": "设置",
|
||||
"daily-review": "每日回顾",
|
||||
"archived": "归档",
|
||||
"email": "邮箱",
|
||||
"password": "密码",
|
||||
"username": "用户名",
|
||||
"nickname": "昵称",
|
||||
"new-password": "新密码",
|
||||
"repeat-new-password": "重复新密码",
|
||||
"save": "保存",
|
||||
"close": "关闭",
|
||||
"cancel": "退出",
|
||||
"create": "创建",
|
||||
"change": "修改",
|
||||
"confirm": "确定",
|
||||
"reset": "重置",
|
||||
"language": "语言",
|
||||
"version": "版本",
|
||||
"pin": "置顶",
|
||||
"unpin": "取消置顶",
|
||||
"edit": "编辑",
|
||||
"restore": "恢复",
|
||||
"delete": "删除",
|
||||
"null": "空",
|
||||
"share": "分享",
|
||||
"archive": "归档",
|
||||
"basic": "基础",
|
||||
"admin": "管理员",
|
||||
"explore": "探索",
|
||||
"sign-in": "登录",
|
||||
"sign-up": "注册",
|
||||
"sign-out": "退出登录",
|
||||
"back-to-home": "回到主页",
|
||||
"type": "类型",
|
||||
"shortcuts": "捷径",
|
||||
"title": "标题",
|
||||
"filter": "过滤器",
|
||||
"tags": "全部标签",
|
||||
"yourself": "你自己",
|
||||
"archived-at": "归档于",
|
||||
"changed": "已更改",
|
||||
"update-on": "更新于",
|
||||
"fold": "折叠",
|
||||
"expand": "展开",
|
||||
"image": "图片",
|
||||
"link": "链接",
|
||||
"vacuum": "清理",
|
||||
"select": "选择",
|
||||
"database": "数据库",
|
||||
"avatar": "头像",
|
||||
"rename": "改名",
|
||||
"upload": "上传",
|
||||
"visibility": "可见性",
|
||||
"preview": "预览",
|
||||
"name": "姓名",
|
||||
"clear": "清除"
|
||||
"about": {
|
||||
"about-memos": "关于Memos",
|
||||
"memos-description": "Memos是一个基于网页的笔记应用程序,您可以使用它来编写、组织和共享笔记",
|
||||
"no-server-description": "没有为此服务器配置描述。",
|
||||
"other-projects": "其他的项目",
|
||||
"powered-by": "Powered by"
|
||||
},
|
||||
"auth": {
|
||||
"signup-as-host": "注册为 Host",
|
||||
"host-tip": "你正在注册为 Host 用户账号。",
|
||||
"not-host-tip": "如果你没有账号,请联系站点 Host",
|
||||
"new-password": "新密码",
|
||||
"repeat-new-password": "重复新密码"
|
||||
},
|
||||
"resource": {
|
||||
"description": "查看在 Memo 中的静态资源。例如:图片",
|
||||
"no-resources": "没有资源",
|
||||
"fetching-data": "请求数据中...",
|
||||
"upload": "上传",
|
||||
"preview": "预览",
|
||||
"copy-link": "复制链接",
|
||||
"delete-resource": "删除资源",
|
||||
"warning-text": "确定删除这个资源么?此操作不可逆❗",
|
||||
"linked-amount": "链接的 Memo 数量",
|
||||
"rename": "重命名",
|
||||
"clear": "清除",
|
||||
"warning-text-unused": "确定删除这些无用资源么?此操作不可逆❗",
|
||||
"no-unused-resources": "无可删除的资源",
|
||||
"name": "资源名称",
|
||||
"delete-selected-resources": "删除选中资源",
|
||||
"no-files-selected": "没有文件被选中❗",
|
||||
"upload-successfully": "上传成功",
|
||||
"file-drag-drop-prompt": "将您的文件拖放到此处以上传文件",
|
||||
"select": "选择",
|
||||
"create-dialog": {
|
||||
"external-link": {
|
||||
"type-placeholder": "文件类型",
|
||||
"link": "链接",
|
||||
"file-name": "文件名",
|
||||
"type": "类型",
|
||||
"file-name-placeholder": "文件名",
|
||||
"option": "外部链接"
|
||||
},
|
||||
"local-file": {
|
||||
"choose": "选择一个文件...",
|
||||
"option": "本地文件"
|
||||
},
|
||||
"upload-method": "上传方式",
|
||||
"title": "创建资源"
|
||||
},
|
||||
"search-bar-placeholder": "搜索资源"
|
||||
"amount-text": {
|
||||
"day_one": "DAY",
|
||||
"day_other": "DAYS",
|
||||
"memo_one": "MEMO",
|
||||
"memo_other": "MEMOS",
|
||||
"tag_one": "TAG",
|
||||
"tag_other": "TAGS"
|
||||
},
|
||||
"archived": {
|
||||
"archived-memos": "已归档的 Memo",
|
||||
"no-archived-memos": "没有归档的 Memo",
|
||||
"fetching-data": "请求数据中..."
|
||||
"archived-memos": "已归档的备忘录",
|
||||
"fetching-data": "请求数据中...",
|
||||
"no-archived-memos": "没有归档的备忘录"
|
||||
},
|
||||
"ask-ai": {
|
||||
"go-to-settings": "前往设置",
|
||||
"not-enabled": "您尚未设置 OpenAI API 密钥。",
|
||||
"placeholder": "随便问",
|
||||
"title": "问 AI"
|
||||
},
|
||||
"auth": {
|
||||
"host-tip": "你正在注册为管理员用户账号。",
|
||||
"new-password": "新密码",
|
||||
"not-host-tip": "如果你没有账号,请联系站点管理员",
|
||||
"repeat-new-password": "重复新密码",
|
||||
"signup-as-host": "注册为管理员"
|
||||
},
|
||||
"common": {
|
||||
"about": "关于",
|
||||
"admin": "管理",
|
||||
"archive": "归档",
|
||||
"archived": "归档",
|
||||
"archived-at": "归档于",
|
||||
"avatar": "头像",
|
||||
"back-to-home": "回到主页",
|
||||
"basic": "基础",
|
||||
"beta": "Beta",
|
||||
"cancel": "取消",
|
||||
"change": "修改",
|
||||
"changed": "已更改",
|
||||
"clear": "清除",
|
||||
"close": "关闭",
|
||||
"confirm": "确定",
|
||||
"create": "创建",
|
||||
"daily-review": "每日回顾",
|
||||
"database": "数据库",
|
||||
"delete": "删除",
|
||||
"e.g": "例如",
|
||||
"edit": "编辑",
|
||||
"email": "邮箱",
|
||||
"expand": "展开",
|
||||
"explore": "探索",
|
||||
"filter": "过滤器",
|
||||
"filter-period": "{{from}}到{{to}}",
|
||||
"fold": "折叠",
|
||||
"home": "主页",
|
||||
"image": "图片",
|
||||
"language": "语言",
|
||||
"learn-more": "了解更多",
|
||||
"link": "链接",
|
||||
"memos-slogan": "一个轻量级的自托管备忘录中心。开源且永远免费。",
|
||||
"name": "姓名",
|
||||
"new-password": "新密码",
|
||||
"nickname": "昵称",
|
||||
"null": "空",
|
||||
"or": "或者",
|
||||
"password": "密码",
|
||||
"pin": "置顶",
|
||||
"preview": "预览",
|
||||
"rename": "改名",
|
||||
"repeat-new-password": "重复新密码",
|
||||
"reset": "重置",
|
||||
"resources": "资源库",
|
||||
"restore": "恢复",
|
||||
"save": "保存",
|
||||
"select": "选择",
|
||||
"settings": "设置",
|
||||
"share": "分享",
|
||||
"shortcuts": "捷径",
|
||||
"sign-in": "登录",
|
||||
"sign-in-with": "使用{{provider}}登录",
|
||||
"sign-out": "注销",
|
||||
"sign-up": "注册",
|
||||
"tags": "全部标签",
|
||||
"title": "标题",
|
||||
"type": "类型",
|
||||
"unpin": "取消置顶",
|
||||
"update": "更新",
|
||||
"update-on": "更新于",
|
||||
"upload": "上传",
|
||||
"username": "用户名",
|
||||
"vacuum": "清理未使用资源",
|
||||
"version": "版本",
|
||||
"visibility": "可见度",
|
||||
"yourself": "你自己"
|
||||
},
|
||||
"daily-review": {
|
||||
"no-memos": "哎呀,空无一物。",
|
||||
"title": "每日回顾"
|
||||
},
|
||||
"days": {
|
||||
"fri": "五",
|
||||
"friday": "星期五",
|
||||
"mon": "一",
|
||||
"monday": "星期一",
|
||||
"sat": "六",
|
||||
"saturday": "星期六",
|
||||
"sun": "日",
|
||||
"sunday": "星期天",
|
||||
"thu": "四",
|
||||
"thursday": "星期四",
|
||||
"tue": "二",
|
||||
"tuesday": "星期二",
|
||||
"wed": "三",
|
||||
"wednesday": "星期三"
|
||||
},
|
||||
"editor": {
|
||||
"editing": "编辑中...",
|
||||
"cancel-edit": "退出编辑",
|
||||
"save": "记下",
|
||||
"placeholder": "现在的想法是...",
|
||||
"only-image-supported": "仅支持图片文件。",
|
||||
"cancel-edit": "取消编辑",
|
||||
"cant-empty": "内容不能为空",
|
||||
"local": "本地上传",
|
||||
"resources": "资源库"
|
||||
"editing": "编辑中...",
|
||||
"local": "本地",
|
||||
"only-image-supported": "仅支持图片文件。",
|
||||
"placeholder": "任何想法...",
|
||||
"resources": "资源库",
|
||||
"save": "保存"
|
||||
},
|
||||
"memo": {
|
||||
"view-detail": "查看详情",
|
||||
"embed-memo": {
|
||||
"copy": "复制",
|
||||
"copy-link": "复制链接",
|
||||
"visibility": {
|
||||
"private": "仅自己可见",
|
||||
"protected": "登录用户可见",
|
||||
"public": "所有人可见",
|
||||
"disabled": "公共memos已禁用"
|
||||
},
|
||||
"embed": "嵌入",
|
||||
"search-placeholder": "搜索备忘录",
|
||||
"archived-at": "存档于",
|
||||
"no-archived-memos": "没有存档的备忘录。",
|
||||
"fetching-data": "正在获取数据...",
|
||||
"archived-memos": "归档备忘录",
|
||||
"fetch-more": "点击此处获取更多"
|
||||
},
|
||||
"memo-list": {
|
||||
"fetching-data": "请求数据中...",
|
||||
"fetch-more": "点击加载更多"
|
||||
},
|
||||
"shortcut-list": {
|
||||
"shortcut-title": "捷径标题",
|
||||
"create-shortcut": "创建捷径",
|
||||
"edit-shortcut": "编辑捷径",
|
||||
"eligible-memo": "符合条件的 Memo",
|
||||
"fill-previous": "请填写之前的过滤值",
|
||||
"title-required": "标题是必填项",
|
||||
"value-required": "过滤值是必填项"
|
||||
"only-public-supported": "* 仅支持公开备忘录。",
|
||||
"text": "将以下代码复制并粘贴到您的博客或网站中。",
|
||||
"title": "嵌入备忘录"
|
||||
},
|
||||
"filter": {
|
||||
"and": "且",
|
||||
"new-filter": "新建过滤器",
|
||||
"type": {
|
||||
"tag": "标签",
|
||||
"type": "类型",
|
||||
"text": "文本",
|
||||
"display-time": "显示时间",
|
||||
"visibility": "可见性"
|
||||
},
|
||||
"operator": {
|
||||
"after": "晚于",
|
||||
"before": "早于",
|
||||
"contains": "包含",
|
||||
"not-contains": "不包含",
|
||||
"is": "是",
|
||||
"is-not": "不是",
|
||||
"before": "早于",
|
||||
"after": "晚于"
|
||||
"not-contains": "不包含"
|
||||
},
|
||||
"or": "或",
|
||||
"text-placeholder": "以 ^ 开头使用正则表达式",
|
||||
"type": {
|
||||
"display-time": "显示时间",
|
||||
"tag": "标签",
|
||||
"text": "文本",
|
||||
"type": "类型",
|
||||
"visibility": "可见度"
|
||||
},
|
||||
"value": {
|
||||
"not-tagged": "无标签",
|
||||
"has-attachment": "包含附件",
|
||||
"linked": "包含链接",
|
||||
"has-attachment": "包含附件"
|
||||
},
|
||||
"text-placeholder": "以 ^ 开头使用正则表达式"
|
||||
"not-tagged": "无标签"
|
||||
}
|
||||
},
|
||||
"tag-list": {
|
||||
"tip-text": "输入`#tag `来创建标签",
|
||||
"create-tag": "创建标签",
|
||||
"all-tags": "全部标签",
|
||||
"tag-name": "标签名称"
|
||||
"heatmap": {
|
||||
"day": "天",
|
||||
"days": "天",
|
||||
"memo-in": "{{period}} 记了 {{amount}} 条备忘录",
|
||||
"memo-on": "{{date}} 记了 {{amount}} 条备忘录",
|
||||
"memos-in": "{{period}} 记了 {{amount}} 条备忘录",
|
||||
"memos-on": "{{date}} 记了 {{amount}} 条备忘录"
|
||||
},
|
||||
"memo": {
|
||||
"archived-at": "存档于",
|
||||
"archived-memos": "归档备忘录",
|
||||
"copy": "复制",
|
||||
"copy-link": "复制链接",
|
||||
"delete-confirm": "您确定要删除此备忘录吗?\n\n此操作不可逆❗",
|
||||
"delete-memo": "删除备忘录",
|
||||
"embed": "嵌入",
|
||||
"fetch-more": "点击此处获取更多",
|
||||
"fetching-data": "正在获取数据...",
|
||||
"no-archived-memos": "无存档的备忘录。",
|
||||
"search-placeholder": "搜索备忘录",
|
||||
"view-detail": "查看详情",
|
||||
"visibility": {
|
||||
"disabled": "公共备忘录已禁用",
|
||||
"private": "仅自己可见",
|
||||
"protected": "登录用户可见",
|
||||
"public": "所有人可见"
|
||||
}
|
||||
},
|
||||
"memo-list": {
|
||||
"fetch-more": "点击加载更多",
|
||||
"fetching-data": "请求数据中..."
|
||||
},
|
||||
"message": {
|
||||
"change-memo-created-time": "更改备忘录创建时间",
|
||||
"change-memo-created-time-warning-1": "这不是正常行为。",
|
||||
"change-memo-created-time-warning-2": "请确定你真的需要这么做。",
|
||||
"change-resource-filename": "更改资源文件名",
|
||||
"click-to-save-the-image": "点击保存图片",
|
||||
"copied": "已复制",
|
||||
"count-selected-resources": "所选资源总数",
|
||||
"fill-all": "请填写所有栏目。",
|
||||
"fill-form": "请填写此表单",
|
||||
"fill-server-name": "请填写服务器名称",
|
||||
"generating-the-screenshot": "正在生成截图...",
|
||||
"image-load-failed": "图片加载失败",
|
||||
"invalid-created-datetime": "创建的日期时间无效。",
|
||||
"invalid-resource-filename": "无效的资源文件名",
|
||||
"login-failed": "登录失败",
|
||||
"memo-not-found": "找不到备忘录。",
|
||||
"memo-updated-datetime": "备忘录创建日期时间已更改。",
|
||||
"memos-ready": "所有备忘录已就绪 🎉",
|
||||
"new-password-not-match": "新密码不匹配。",
|
||||
"no-memos": "没有备忘录了 🌃",
|
||||
"no-resource": "没有资源了 🌃",
|
||||
"not-allow-chinese": "不允许包含中文",
|
||||
"not-allow-space": "不允许包含空格",
|
||||
"page-not-found": "404 - 未找到网页 😥",
|
||||
"password-changed": "密码已修改",
|
||||
"password-not-match": "密码不一致。",
|
||||
"private-only": "此备忘录仅自己可见",
|
||||
"resource-filename-updated": "资源文件名更改成功。",
|
||||
"resource-ready": "所有资源已就绪 🎉",
|
||||
"restored-successfully": "恢复成功",
|
||||
"signup-failed": "注册失败",
|
||||
"succeed-copy-code": "复制代码到剪贴板成功。",
|
||||
"succeed-copy-content": "复制内容到剪贴板成功。",
|
||||
"succeed-copy-link": "复制链接到剪贴板成功。",
|
||||
"succeed-copy-resource-link": "复制资源链接到剪贴板成功",
|
||||
"succeed-update-additional-script": "更新附加脚本成功",
|
||||
"succeed-update-additional-style": "更新附加样式成功",
|
||||
"succeed-update-customized-profile": "更新自定义配置文件成功",
|
||||
"succeed-vacuum-database": "清理数据库成功",
|
||||
"too-long": "过长",
|
||||
"too-short": "过短",
|
||||
"update-succeed": "更新成功",
|
||||
"user-not-found": "未找到该用户"
|
||||
},
|
||||
"resource": {
|
||||
"clear": "清除",
|
||||
"copy-link": "复制链接",
|
||||
"create-dialog": {
|
||||
"external-link": {
|
||||
"file-name": "文件名",
|
||||
"file-name-placeholder": "文件名",
|
||||
"link": "链接",
|
||||
"link-placeholder": "https://the.link.to/your/resource",
|
||||
"option": "外部链接",
|
||||
"type": "类型",
|
||||
"type-placeholder": "文件类型"
|
||||
},
|
||||
"local-file": {
|
||||
"choose": "选择文件...",
|
||||
"option": "本地文件"
|
||||
},
|
||||
"title": "创建资源",
|
||||
"upload-method": "上传方式"
|
||||
},
|
||||
"delete-resource": "删除资源",
|
||||
"delete-selected-resources": "删除选中资源",
|
||||
"description": "查看在备忘录中的静态资源。例如:图片",
|
||||
"fetching-data": "请求数据中...",
|
||||
"file-drag-drop-prompt": "将您的文件拖放到此处以上传文件",
|
||||
"linked-amount": "链接的备忘录数量",
|
||||
"name": "资源名称",
|
||||
"no-files-selected": "没有文件被选中❗",
|
||||
"no-resources": "没有资源",
|
||||
"no-unused-resources": "无可删除的资源",
|
||||
"preview": "预览",
|
||||
"rename": "重命名",
|
||||
"reset-link": "重置链接",
|
||||
"reset-link-prompt": "您确定要重置链接吗?\n这将打破所有当前的链接用法。\n\n此操作不可逆❗",
|
||||
"reset-resource-link": "重置资源链接",
|
||||
"search-bar-placeholder": "搜索资源",
|
||||
"select": "选择",
|
||||
"upload": "上传",
|
||||
"upload-successfully": "上传成功",
|
||||
"warning-text": "确定删除这个资源么?\n\n此操作不可逆❗",
|
||||
"warning-text-unused": "确定删除这些无用资源么?\n\n此操作不可逆❗"
|
||||
},
|
||||
"router": {
|
||||
"back-to-home": "回到首页"
|
||||
},
|
||||
"search": {
|
||||
"quickly-filter": "快速过滤"
|
||||
},
|
||||
"setting": {
|
||||
"my-account": "我的账号",
|
||||
"preference": "偏好设置",
|
||||
"storage": "存储设置",
|
||||
"member": "成员",
|
||||
"member-list": "成员列表",
|
||||
"system": "系统",
|
||||
"account-section": {
|
||||
"change-password": "修改密码",
|
||||
"email-note": "可选",
|
||||
"nickname-note": "显示在横幅中",
|
||||
"openapi-reset": "重置 OpenAPI 密钥",
|
||||
"openapi-reset-warning": "❗现有的API将失效并生成一个新的API。\n\n您确定要重置吗?",
|
||||
"openapi-sample-post": "你好 #memos 来自 {{url}}",
|
||||
"openapi-title": "OpenAPI",
|
||||
"reset-api": "重置API",
|
||||
"title": "账号信息",
|
||||
"update-information": "更新个人信息",
|
||||
"change-password": "修改密码"
|
||||
},
|
||||
"preference-section": {
|
||||
"theme": "主题",
|
||||
"default-memo-visibility": "默认 Memo 可见性",
|
||||
"enable-folding-memo": "开启折叠 Memo",
|
||||
"enable-double-click": "开启双击编辑",
|
||||
"editor-font-style": "编辑器字体样式",
|
||||
"mobile-editor-style": "移动端编辑器样式",
|
||||
"default-memo-sort-option": "Memo 显示时间",
|
||||
"created_ts": "创建时间",
|
||||
"updated_ts": "更新时间",
|
||||
"daily-review-time-offset": "每日回顾时间偏移",
|
||||
"default-resource-visibility": "默认资源可见性",
|
||||
"auto-collapse": "自动折叠"
|
||||
},
|
||||
"storage-section": {
|
||||
"storage-services-list": "存储服务列表",
|
||||
"create-a-service": "新建服务",
|
||||
"update-a-service": "更新服务",
|
||||
"delete-storage": "删除存储服务",
|
||||
"warning-text": "确定删除这个存储服务么?此操作不可逆❗"
|
||||
},
|
||||
"member-section": {
|
||||
"create-a-member": "创建成员"
|
||||
},
|
||||
"system-section": {
|
||||
"server-name": "服务名称",
|
||||
"customize-server": {
|
||||
"title": "自定义服务",
|
||||
"default": "默认为 memos",
|
||||
"icon-url": "图标 URL"
|
||||
},
|
||||
"database-file-size": "数据库文件大小",
|
||||
"allow-user-signup": "允许用户注册",
|
||||
"additional-style": "自定义样式",
|
||||
"additional-script": "自定义脚本",
|
||||
"additional-style-placeholder": "自定义 CSS 代码",
|
||||
"additional-script-placeholder": "自定义 JavaScript 代码",
|
||||
"disable-public-memos": "禁用公共memos"
|
||||
"username-note": "用于登录"
|
||||
},
|
||||
"appearance-option": {
|
||||
"system": "跟随系统",
|
||||
"dark": "总是深色",
|
||||
"light": "总是浅色",
|
||||
"dark": "总是深色"
|
||||
"system": "跟随系统"
|
||||
},
|
||||
"sso": "SSO"
|
||||
"member": "成员",
|
||||
"member-list": "成员列表",
|
||||
"member-section": {
|
||||
"archive-member": "归档成员",
|
||||
"archive-warning": "❗您确定要归档 {{username}} 吗?",
|
||||
"create-a-member": "创建成员",
|
||||
"delete-member": "删除成员",
|
||||
"delete-warning": "❗您确定要删除 {{username}} 吗?\n\n此操作不可逆❗"
|
||||
},
|
||||
"my-account": "我的账号",
|
||||
"preference": "偏好设置",
|
||||
"preference-section": {
|
||||
"auto-collapse": "自动折叠",
|
||||
"created_ts": "创建时间",
|
||||
"daily-review-time-offset": "每日回顾时间偏移",
|
||||
"default-memo-sort-option": "备忘录显示时间",
|
||||
"default-memo-visibility": "默认备忘录可见性",
|
||||
"default-resource-visibility": "默认资源可见度",
|
||||
"editor-font-style": "编辑器字体样式",
|
||||
"enable-double-click": "开启双击编辑",
|
||||
"enable-folding-memo": "开启折叠备忘录",
|
||||
"mobile-editor-style": "移动端编辑器样式",
|
||||
"theme": "主题",
|
||||
"updated_ts": "更新时间"
|
||||
},
|
||||
"sso": "单点登陆(SSO)",
|
||||
"sso-section": {
|
||||
"authorization-endpoint": "授权端点(Authorization Endpoint)",
|
||||
"client-id": "客户端ID(Client ID)",
|
||||
"client-secret": "客户端密钥(Client Secret)",
|
||||
"confirm-delete": "您确定要删除“{{name}}”单点登录配置吗?\n\n此操作不可逆❗",
|
||||
"create-sso": "创建单点登录",
|
||||
"custom": "自定义",
|
||||
"delete-sso": "确认删除",
|
||||
"display-name": "显示名称",
|
||||
"identifier": "标识符(Identifier)",
|
||||
"identifier-filter": "标识符过滤器(Identifier Filter)",
|
||||
"redirect-url": "重定向 URL",
|
||||
"scopes": "范围",
|
||||
"sso-created": "单点登录 {{name}} 已创建",
|
||||
"sso-list": "单点登录列表",
|
||||
"sso-updated": "单点登录 {{name}} 已更新",
|
||||
"template": "模板",
|
||||
"token-endpoint": "令牌端点(Token Endpoint)",
|
||||
"update-sso": "更新单点登录",
|
||||
"user-endpoint": "用户端点(User Endpoint)"
|
||||
},
|
||||
"storage": "存储设置",
|
||||
"storage-section": {
|
||||
"accesskey": "访问密钥(Access key)",
|
||||
"accesskey-placeholder": "Access key / Access ID",
|
||||
"bucket": "储存桶(Bucket)",
|
||||
"bucket-placeholder": "储存桶名",
|
||||
"create-a-service": "新建服务",
|
||||
"create-storage": "创建存储",
|
||||
"current-storage": "当前存储",
|
||||
"delete-storage": "删除存储服务",
|
||||
"endpoint": "端点(Endpoint)",
|
||||
"local-storage-path": "本地存储路径",
|
||||
"path": "存储路径",
|
||||
"path-description": "您可以使用本地存储中的相同动态变量,例如 {filename}",
|
||||
"path-placeholder": "自定义路径",
|
||||
"region": "地区",
|
||||
"region-placeholder": "区域名称",
|
||||
"s3-compatible-url": "S3 兼容 URL",
|
||||
"secretkey": "Secret key",
|
||||
"secretkey-placeholder": "Secret key / Access Key",
|
||||
"storage-services-list": "存储服务列表",
|
||||
"type-database": "数据库",
|
||||
"type-local": "本地存储",
|
||||
"update-a-service": "更新服务",
|
||||
"update-local-path": "更新本地存储路径",
|
||||
"update-local-path-description": "本地存储路径是数据库文件的相对路径",
|
||||
"update-storage": "更新存储",
|
||||
"url-prefix": "URL 前缀",
|
||||
"url-prefix-placeholder": "自定义 URL 前缀,可选",
|
||||
"url-suffix": "URL 后缀",
|
||||
"url-suffix-placeholder": "自定义 URL 后缀,可选",
|
||||
"warning-text": "确定删除这个存储服务“{{name}}”么?\n\n此操作不可逆❗"
|
||||
},
|
||||
"system": "系统",
|
||||
"system-section": {
|
||||
"additional-script": "自定义脚本",
|
||||
"additional-script-placeholder": "自定义 JavaScript 代码",
|
||||
"additional-style": "自定义样式",
|
||||
"additional-style-placeholder": "自定义 CSS 代码",
|
||||
"allow-user-signup": "允许用户注册",
|
||||
"customize-server": {
|
||||
"appearance": "服务器外观",
|
||||
"default": "默认为 memos",
|
||||
"description": "描述",
|
||||
"icon-url": "图标 URL",
|
||||
"locale": "服务器语言环境",
|
||||
"title": "自定义服务"
|
||||
},
|
||||
"database-file-size": "数据库文件大小",
|
||||
"disable-public-memos": "禁用公共备忘录",
|
||||
"ignore-version-upgrade": "忽略版本升级",
|
||||
"openai-api-host": "OpenAI:API Host",
|
||||
"openai-api-host-placeholder": "默认:https://api.openai.com/",
|
||||
"openai-api-key": "OpenAI:API 密钥",
|
||||
"openai-api-key-description": "获取 API Key",
|
||||
"openai-api-key-placeholder": "您的 OpenAI API Key",
|
||||
"server-name": "服务名称"
|
||||
}
|
||||
},
|
||||
"amount-text": {
|
||||
"memo_other": "MEMOS",
|
||||
"tag_other": "TAGS",
|
||||
"day_other": "DAYS",
|
||||
"memo_one": "MEMO",
|
||||
"tag_one": "TAG",
|
||||
"day_one": "DAY"
|
||||
"shortcut-list": {
|
||||
"create-shortcut": "创建捷径",
|
||||
"edit-shortcut": "编辑捷径",
|
||||
"eligible-memo": "符合条件的备忘录",
|
||||
"fill-previous": "请填写之前的过滤值",
|
||||
"shortcut-title": "捷径标题",
|
||||
"title-required": "标题是必填项",
|
||||
"value-required": "过滤值是必填项"
|
||||
},
|
||||
"message": {
|
||||
"no-memos": "没有 Memo 了 🌃",
|
||||
"memos-ready": "所有 Memo 已就绪 🎉",
|
||||
"no-resource": "没有 Resource 了 🌃",
|
||||
"resource-ready": "所有 Resource 已就绪 🎉",
|
||||
"restored-successfully": "恢复成功",
|
||||
"memo-updated-datetime": "Memo 创建日期时间已更改。",
|
||||
"invalid-created-datetime": "创建的日期时间无效。",
|
||||
"change-memo-created-time": "更改 Memo 创建时间",
|
||||
"memo-not-found": "找不到 Memo。",
|
||||
"fill-all": "请填写所有字段。",
|
||||
"password-not-match": "密码不一致。",
|
||||
"new-password-not-match": "新密码不匹配。",
|
||||
"image-load-failed": "图片加载失败",
|
||||
"fill-form": "请填写此表单",
|
||||
"login-failed": "登录失败",
|
||||
"signup-failed": "注册失败",
|
||||
"user-not-found": "未找到用户",
|
||||
"password-changed": "密码已修改",
|
||||
"private-only": "此 Memo 仅自己可见",
|
||||
"copied": "已复制",
|
||||
"succeed-copy-content": "复制内容到剪贴板成功。",
|
||||
"succeed-copy-code": "复制代码到剪贴板成功。",
|
||||
"succeed-copy-link": "复制链接到剪贴板成功。",
|
||||
"change-resource-filename": "更改资源文件名",
|
||||
"resource-filename-updated": "资源文件名更改成功。",
|
||||
"invalid-resource-filename": "无效的资源文件名",
|
||||
"click-to-save-the-image": "点击保存图片",
|
||||
"generating-the-screenshot": "正在生成图片...",
|
||||
"count-selected-resources": "所选资源总数",
|
||||
"too-short": "过短",
|
||||
"too-long": "过长",
|
||||
"not-allow-space": "不允许包含空格",
|
||||
"not-allow-chinese": "不允许包含中文",
|
||||
"succeed-update-additional-style": "更新附加样式成功",
|
||||
"succeed-copy-resource-link": "复制资源链接到剪贴板成功",
|
||||
"succeed-update-customized-profile": "更新自定义配置文件成功",
|
||||
"succeed-update-additional-script": "更新附加脚本成功",
|
||||
"update-succeed": "更新成功",
|
||||
"page-not-found": "404 - 未找到网页 😥",
|
||||
"succeed-vacuum-database": "清理数据库成功"
|
||||
},
|
||||
"days": {
|
||||
"monday": "星期一",
|
||||
"mon": "一",
|
||||
"tuesday": "星期二",
|
||||
"tue": "二",
|
||||
"wednesday": "星期三",
|
||||
"wed": "三",
|
||||
"thursday": "星期四",
|
||||
"thu": "四",
|
||||
"friday": "星期五",
|
||||
"fri": "五",
|
||||
"saturday": "星期六",
|
||||
"sat": "六",
|
||||
"sunday": "星期天",
|
||||
"sun": "日"
|
||||
},
|
||||
"embed-memo": {
|
||||
"title": "嵌入备忘录",
|
||||
"copy": "复制",
|
||||
"only-public-supported": "* 仅支持公开备忘录。",
|
||||
"text": "将以下代码复制并粘贴到您的博客或网站中。"
|
||||
},
|
||||
"ask-ai": {
|
||||
"placeholder": "随便问",
|
||||
"title": "Ask AI",
|
||||
"not-enabled": "您尚未设置 OpenAI API 密钥。",
|
||||
"go-to-settings": "前往设置"
|
||||
},
|
||||
"daily-review": {
|
||||
"title": "每日回顾"
|
||||
},
|
||||
"router": {
|
||||
"back-to-home": "回到首页"
|
||||
"tag-list": {
|
||||
"all-tags": "全部标签",
|
||||
"create-tag": "创建标签",
|
||||
"tag-name": "标签名称",
|
||||
"tip-text": "输入`#tag`来创建标签"
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue