Explorar o código

Merge pull request #1839 from visuddhinanda/agile

添加英文版多语言
visuddhinanda %!s(int64=2) %!d(string=hai) anos
pai
achega
f29e858d45

+ 1 - 1
dashboard/src/components/share/ShareModal.tsx

@@ -31,7 +31,7 @@ const ShareModalWidget = ({ resId, resType, trigger }: IWidget) => {
         open={isModalOpen}
         onOk={handleOk}
         onCancel={handleCancel}
-        footer={false}
+        footer={undefined}
       >
         <Share resId={resId} resType={resType} />
       </Modal>

+ 3 - 1
dashboard/src/components/template/SentEdit/SentCell.tsx

@@ -313,7 +313,9 @@ const SentCellWidget = ({
                     width: "100%",
                     marginBottom: 0,
                   }}
-                  placeholder="请输入"
+                  placeholder={intl.formatMessage({
+                    id: "labels.input",
+                  })}
                   html={sentData.html ? sentData.html : sentData.content}
                   wordWidget={wordWidget}
                 />

+ 3 - 1
dashboard/src/components/template/SentEdit/SentCellEditable.tsx

@@ -202,7 +202,9 @@ const SentCellEditableWidget = ({
         onChange={(value: string) => {
           setValue(value);
         }}
-        placeholder="请输入"
+        placeholder={intl.formatMessage({
+          id: "labels.input",
+        })}
         onClose={() => {
           if (typeof onClose !== "undefined") {
             onClose();

+ 15 - 3
dashboard/src/components/template/SentEdit/SentEditMenu.tsx

@@ -144,7 +144,11 @@ const SentEditMenuWidget = ({
           display: isHover ? "block" : "none",
         }}
       >
-        <Tooltip title="编辑">
+        <Tooltip
+          title={intl.formatMessage({
+            id: "buttons.edit",
+          })}
+        >
           <Button
             icon={<EditOutlined />}
             size="small"
@@ -155,7 +159,11 @@ const SentEditMenuWidget = ({
             }}
           />
         </Tooltip>
-        <Tooltip title="复制">
+        <Tooltip
+          title={intl.formatMessage({
+            id: "buttons.copy",
+          })}
+        >
           <Button
             icon={<CopyOutlined />}
             size="small"
@@ -170,7 +178,11 @@ const SentEditMenuWidget = ({
             }}
           />
         </Tooltip>
-        <Tooltip title="粘贴">
+        <Tooltip
+          title={intl.formatMessage({
+            id: "buttons.paste",
+          })}
+        >
           <Button
             icon={<PasteOutLinedIcon />}
             size="small"

+ 3 - 1
dashboard/src/components/term/TermList.tsx

@@ -194,7 +194,9 @@ const TermListWidget = ({ studioName, channelId }: IWidget) => {
                   }}
                 >
                   <TermModal
-                    trigger={"编辑"}
+                    trigger={intl.formatMessage({
+                      id: "buttons.edit",
+                    })}
                     id={row.id}
                     studioName={studioName}
                     channelId={channelId}

+ 6 - 0
dashboard/src/locales/en-US/article/index.ts

@@ -0,0 +1,6 @@
+const items = {
+	"article.lable": "文章",
+	"article.fields.article.count.label": "文章数量",
+};
+
+export default items;

+ 16 - 0
dashboard/src/locales/en-US/auth/index.ts

@@ -0,0 +1,16 @@
+const items = {
+  "auth.role.label": "角色",
+  "auth.role.owner": "拥有者",
+  "auth.role.manager": "管理员",
+  "auth.role.editor": "编辑者",
+  "auth.role.member": "成员",
+  "auth.role.student": "学生",
+  "auth.role.assistant": "助理老师",
+  "auth.role.unknown": "未知",
+  "auth.role.delete": "已删除",
+  "auth.role.reader": "阅读",
+  "auth.type.user": "用户",
+  "auth.type.group": "群组",
+};
+
+export default items;

+ 6 - 0
dashboard/src/locales/en-US/blog/index.ts

@@ -0,0 +1,6 @@
+const items = {
+	"blog.overview": "概览",
+	"blog.palicanon": "译文",
+};
+
+export default items;

+ 81 - 1
dashboard/src/locales/en-US/buttons.ts

@@ -1,3 +1,83 @@
-const items = {};
+const items = {
+  "buttons.submit": "submit",
+  "buttons.create": "create",
+  "buttons.edit": "edit",
+  "buttons.translate": "translate",
+  "buttons.read": "read",
+  "buttons.wbw": "wbw",
+  "buttons.delete": "delete",
+  "buttons.remove": "remove",
+  "buttons.delete.all": "delete all",
+  "buttons.selected": "selected",
+  "buttons.select": "select",
+  "buttons.unselect": "unselect",
+  "buttons.option": "operation",
+  "buttons.save": "save",
+  "buttons.save.publish": "save & publish",
+  "buttons.cancel": "cancel",
+  "buttons.setting": "setting",
+  "buttons.sign-in": "sign in",
+  "buttons.sign-out": "sign out",
+  "buttons.welcome": "welcome",
+  "buttons.click.upload": "click and upload",
+  "buttons.group.exit": "exit",
+  "buttons.group.add.member": "add member",
+  "buttons.lesson.add.lesson": "加入",
+  "buttons.ok": "ok",
+  "buttons.close": "close",
+  "buttons.copy": "copy",
+  "buttons.paste": "paste",
+  "buttons.copy.to": "copy to",
+  "buttons.copy.text": "copy text",
+  "buttons.copy.pali.text": "copy pali text",
+  "buttons.basic.information": "basic information",
+  "buttons.share": "share",
+  "buttons.yes": "yes",
+  "buttons.no": "no",
+  "buttons.open.in.library": "open in library",
+  "buttons.preview": "preview",
+  "buttons.view": "view",
+  "buttons.empty": "empty",
+  "buttons.basic": "basic",
+  "buttons.bookmark": "bookmark",
+  "buttons.note": "note",
+  "buttons.advance": "advance",
+  "buttons.attachments": "attachments",
+  "buttons.sim": "sim",
+  "buttons.add": "add",
+  "buttons.spell": "spell",
+  "buttons.more": "more",
+  "buttons.import": "import",
+  "buttons.export": "export",
+  "buttons.add.tag": "add tag",
+  "buttons.remove.selected": "remove selected",
+  "buttons.multiple.select": "multiple select",
+  "buttons.download": "download",
+  "buttons.download.link": "download link",
+  "buttons.lookup": "lookup",
+  "buttons.invite": "invite",
+  "buttons.relate.to": "relate to",
+  "buttons.copy.link": "copy link",
+  "buttons.copy.id": "copy id",
+  "buttons.reply": "reply",
+  "buttons.open": "open",
+  "buttons.compact": "compact",
+  "buttons.magic-dict": "magic-dict",
+  "buttons.theme.ant": "theme ant",
+  "buttons.theme.dark": "theme dark",
+  "buttons.channel.all": "all",
+  "buttons.channel.my": "my",
+  "buttons.channel.collaborator": "collaborate",
+  "buttons.channel.public": "public",
+  "buttons.refresh": "refresh",
+  "buttons.timeline": "timeline",
+  "buttons.discussion": "discussion",
+  "buttons.suggestion": "suggestion",
+  "buttons.accept": "accept",
+  "buttons.refuse": "refuse",
+  "buttons.use.as.guest": "use as guest",
+  "buttons.got.it": "I got it",
+  "buttons.statistic": "statistic",
+};
 
 export default items;

+ 19 - 0
dashboard/src/locales/en-US/channel/index.ts

@@ -0,0 +1,19 @@
+const items = {
+	"channel.title": "版本风格",
+	"channel.type": "类型",
+	"channel.name": "名称",
+	"channel.create.message.noname": "请输入版本名称",
+	"channel.type.all.title": "全部",
+	"channel.type.translation.label": "译文",
+	"channel.type.nissaya.label": "Nissaya",
+	"channel.type.commentary.label": "注疏",
+	"channel.type.original.label": "原文",
+	"channel.type.general.label": "通用",
+	"channel.type.message.required": "请输入版本类型",
+	"channel.lang": "语言",
+	"channel.fields.lang.label": "语言",
+	"channel.fields.type.label": "类型",
+	"channel.fields.name.label": "名称",
+};
+
+export default items;

+ 37 - 0
dashboard/src/locales/en-US/course/index.ts

@@ -0,0 +1,37 @@
+const items = {
+  "course.basic.info.label": "基本信息",
+  "course.exp.start.label": "起始经验",
+  "course.exp.end.label": "结束经验",
+  "course.exp.current.label": "当前经验",
+  "course.member.status.normal.label": "报名成功",
+  "course.member.status.invited.label": "已经邀请",
+  "course.member.status.sign_up.label": "已经报名",
+  "course.member.status.accepted.label": "已接受",
+  "course.member.status.accepted.message": "接受报名吗?",
+  "course.member.status.rejected.label": "已拒绝",
+  "course.member.status.rejected.message": "拒绝报名吗?",
+  "course.member.status.left.label": "已退出",
+  "course.member.status.blocked.label": "已屏蔽",
+  "course.member.status.blocked.message": "屏蔽该用户吗?",
+  "course.join.mode.invite.label": "仅限邀请",
+  "course.join.mode.invite.message": "本课程仅限内部邀请。",
+  "course.join.mode.manual.label": "人工审核",
+  "course.join.mode.manual.message":
+    "本课程为报名后人工审核课程。报名后请等待组织者审核。",
+  "course.join.mode.open.label": "开放自学",
+  "course.join.mode.open.message": "本课程为开放课程。加入后可以立即开始学习。",
+  "course.leave.message": "离开后将无法再次报名,您确定要离开吗?",
+  "course.rejected.message": "拒绝后将无法再次报名,您确定要拒绝吗?",
+  "course.exp.request.none.label": "无需",
+  "course.exp.request.none.message": " ",
+  "course.exp.request.begin-end.label": "起始和结束",
+  "course.exp.request.begin-end.message":
+    "课程组织者需要查看您的课程起始和结束的学习时长。报名意味着您同意。",
+  "course.exp.request.daily.label": "每日",
+  "course.exp.request.daily.message":
+    "课程组织者需要查看您在课程期间的每日学习时长。报名意味着您同意。",
+  "course.table.count.member.title": "成员数",
+  "course.table.count.progressing.title": "待审核",
+};
+
+export default items;

+ 166 - 0
dashboard/src/locales/en-US/dict/index.ts

@@ -0,0 +1,166 @@
+const items = {
+  dict: "字典",
+  "dict.fields.sn.label": "序号",
+  "dict.fields.word.label": "单词",
+  "dict.fields.type.label": "类型",
+  "dict.fields.grammar.label": "语法",
+  "dict.fields.case.label": "格位",
+  "dict.fields.parent.label": "词干",
+  "dict.fields.meaning.label": "意思",
+  "dict.fields.factors.label": "组份",
+  "dict.fields.factormeaning.label": "组份意思",
+  "dict.fields.note.label": "注释",
+  "dict.fields.confidence.label": "信心指数",
+  "dict.fields.dictname.label": "字典名称",
+  "dict.fields.type.n.label": "名词",
+  "dict.fields.type.n.short.label": "名",
+  "dict.fields.type.ti.label": "三性",
+  "dict.fields.type.ti.short.label": "三",
+  "dict.fields.type.v.label": "动词",
+  "dict.fields.type.v.short.label": "动",
+  "dict.fields.type.v:ind.label": "动不变",
+  "dict.fields.type.v:ind.short.label": "动不变",
+  "dict.fields.type.ind.label": "不变",
+  "dict.fields.type.ind.short.label": "不",
+  "dict.fields.type.m.label": "阳性",
+  "dict.fields.type.m.short.label": "阳",
+  "dict.fields.type.nt.label": "中性",
+  "dict.fields.type.nt.short.label": "中",
+  "dict.fields.type.f.label": "阴性",
+  "dict.fields.type.f.short.label": "阴",
+  "dict.fields.type.sg.label": "单数",
+  "dict.fields.type.sg.short.label": "单",
+  "dict.fields.type.pl.label": "复数",
+  "dict.fields.type.pl.short.label": "复",
+  "dict.fields.type.nom.label": "主格",
+  "dict.fields.type.nom.short.label": "主",
+  "dict.fields.type.acc.label": "宾格",
+  "dict.fields.type.acc.short.label": "宾",
+  "dict.fields.type.gen.label": "属格",
+  "dict.fields.type.gen.short.label": "属",
+  "dict.fields.type.dat.label": "为格",
+  "dict.fields.type.dat.short.label": "为",
+  "dict.fields.type.inst.label": "工具格",
+  "dict.fields.type.inst.short.label": "具",
+  "dict.fields.type.voc.label": "呼格",
+  "dict.fields.type.voc.short.label": "呼",
+  "dict.fields.type.abl.label": "来源格",
+  "dict.fields.type.abl.short.label": "源",
+  "dict.fields.type.loc.label": "处格",
+  "dict.fields.type.loc.short.label": "处",
+  "dict.fields.type.base.label": "词干",
+  "dict.fields.type.base.short.label": "干",
+  "dict.fields.type.imp.label": "命令",
+  "dict.fields.type.imp.short.label": "命令",
+  "dict.fields.type.cond.label": "条件",
+  "dict.fields.type.cond.short.label": "条件",
+  "dict.fields.type.opt.label": "愿望",
+  "dict.fields.type.opt.short.label": "愿望",
+  "dict.fields.type.pres.label": "现",
+  "dict.fields.type.pres.short.label": "现",
+  "dict.fields.type.aor.label": "过",
+  "dict.fields.type.aor.short.label": "过",
+  "dict.fields.type.pf.label": "完",
+  "dict.fields.type.pf.short.label": "完",
+  "dict.fields.type.fut.label": "将",
+  "dict.fields.type.fut.short.label": "将",
+  "dict.fields.type.act.label": "主动",
+  "dict.fields.type.act.short.label": "主动",
+  "dict.fields.type.refl.label": "反照",
+  "dict.fields.type.refl.short.label": "反",
+  "dict.fields.type.1p.label": "第一",
+  "dict.fields.type.1p.short.label": "一",
+  "dict.fields.type.2p.label": "第二",
+  "dict.fields.type.2p.short.label": "二",
+  "dict.fields.type.3p.label": "第三",
+  "dict.fields.type.3p.short.label": "三",
+  "dict.fields.type.prp.label": "现在分词",
+  "dict.fields.type.prp.short.label": "现分",
+  "dict.fields.type.prpp.label": "被动现在分词",
+  "dict.fields.type.prpp.short.label": "被现分",
+  "dict.fields.type.pp.label": "过去分词",
+  "dict.fields.type.pp.short.label": "过分",
+  "dict.fields.type.ppa.label": "主过分",
+  "dict.fields.type.ppa.short.label": "主过分",
+  "dict.fields.type.ppp.label": "被过分",
+  "dict.fields.type.ppp.short.label": "被过分",
+  "dict.fields.type.futp.label": "未来分词",
+  "dict.fields.type.futp.short.label": "未分",
+  "dict.fields.type.fpa.short.label": "主未分",
+  "dict.fields.type.grd.label": "义务",
+  "dict.fields.type.grd.short.label": "义务",
+  "dict.fields.type.pass.label": "被动",
+  "dict.fields.type.pass.short.label": "被动",
+  "dict.fields.type.caus.label": "使役",
+  "dict.fields.type.caus.short.label": "使役",
+  "dict.fields.type.desid.label": "意欲",
+  "dict.fields.type.desid.short.label": "意欲",
+  "dict.fields.type.intens.label": "强意",
+  "dict.fields.type.intens.short.label": "强意",
+  "dict.fields.type.denom.label": "名动",
+  "dict.fields.type.denom.short.label": "名动",
+  "dict.fields.type.ger.label": "连续",
+  "dict.fields.type.ger.short.label": "连续",
+  "dict.fields.type.abs.label": "绝对",
+  "dict.fields.type.abs.short.label": "绝对",
+  "dict.fields.type.inf.label": "不定",
+  "dict.fields.type.inf.short.label": "不定",
+  "dict.fields.type.adj.label": "形容词",
+  "dict.fields.type.adj.short.label": "形",
+  "dict.fields.type.pron.label": "代词",
+  "dict.fields.type.pron.short.label": "代",
+  "dict.fields.type.num.label": "数词",
+  "dict.fields.type.num.short.label": "数",
+  "dict.fields.type.num:base.label": "数词词干",
+  "dict.fields.type.num:base.short.label": "数干",
+  "dict.fields.type.adv.label": "副词",
+  "dict.fields.type.adv.short.label": "副",
+  "dict.fields.type.conj.label": "连词",
+  "dict.fields.type.conj.short.label": "连",
+  "dict.fields.type.prep.label": "介词",
+  "dict.fields.type.prep.short.label": "介",
+  "dict.fields.type.interj.label": "感叹",
+  "dict.fields.type.interj.short.label": "感",
+  "dict.fields.type.pre.label": "前缀",
+  "dict.fields.type.pre.short.label": "前",
+  "dict.fields.type.suf.label": "后缀",
+  "dict.fields.type.suf.short.label": "后",
+  "dict.fields.type.end.label": "语尾",
+  "dict.fields.type.end.short.label": "尾",
+  "dict.fields.type.part.label": "组份",
+  "dict.fields.type.part.short.label": "合",
+  "dict.fields.type.un.label": "连音",
+  "dict.fields.type.un.short.label": "连音",
+  "dict.fields.type.none.label": "无",
+  "dict.fields.type.none.short.label": "_",
+  "dict.fields.type.null.label": "空",
+  "dict.fields.type.null.short.label": "_",
+  "dict.fields.type.?.label": "待定",
+  "dict.fields.type.?.short.label": "待定",
+  "dict.fields.type.ti:base.label": "三性词干",
+  "dict.fields.type.ti:base.short.label": "三性词干",
+  "dict.fields.type.n:base.label": "名词干",
+  "dict.fields.type.n:base.short.label": "名词干",
+  "dict.fields.type.v:base.label": "动词干",
+  "dict.fields.type.v:base.short.label": "动词干",
+  "dict.fields.type.adj:base.label": "形词干",
+  "dict.fields.type.adj:base.short.label": "形词干",
+  "dict.fields.type.fpp.label": "未来被动分词",
+  "dict.fields.type.fpp.short.label": "未被分",
+  "dict.fields.type.cp.short.label": "合",
+  "dict.fields.type.cp.label": "复合词组分",
+  "dict.fields.type.indconj.short.label": "连",
+  "dict.fields.type.indconj.label": "连词",
+  "dict.fields.type.pron:base.short.label": "代干",
+  "dict.fields.type.pron:base.label": "代词词干",
+  "dict.fields.type.note.short.label": "注释",
+  "dict.fields.type.note.label": "注释",
+  "dict.fields.type.vind.short.label": "动不变",
+  "dict.fields.type.vind.label": "动不变",
+  "dict.fields.type.vdn.label": "衍生动名词",
+  "dict.fields.type.vdn.short.label": "动名",
+  "dict.fields.type.comp.label": "复合词",
+  "dict.fields.type.comp.short.label": "合",
+};
+
+export default items;

+ 87 - 1
dashboard/src/locales/en-US/forms.ts

@@ -1,3 +1,89 @@
-const items = {};
+const items = {
+  "forms.fields.email.label": "电子邮箱",
+  "forms.fields.email.or.username.label": "电子邮箱/用户名",
+  "forms.fields.password.label": "密码",
+  "forms.fields.confirm-password.label": "确认密码",
+  "forms.fields.id.label": "ID",
+  "forms.fields.message.label": "消息",
+  "forms.fields.created-at.label": "创建时间",
+  "forms.fields.updated-at.label": "更新时间",
+  "forms.fields.lang.label": "语言",
+  "forms.message.lang.required": "请选择一种语言",
+  "forms.fields.title.label": "标题",
+  "forms.message.title.required": "请输入标题",
+  "forms.fields.subtitle.label": "副标题",
+  "forms.fields.summary.label": "摘要",
+  "forms.fields.content.label": "内容",
+  "forms.fields.content.placeholder": "请输入内容",
+  "forms.fields.tag.label": "标签",
+  "forms.fields.power.label": "权限",
+  "forms.fields.type.label": "类型",
+  "forms.fields.publicity.label": "公开性",
+  "forms.fields.publicity.disable.label": "禁用",
+  "forms.fields.publicity.private.label": "私有",
+  "forms.fields.publicity.public.label": "公开",
+  "forms.fields.teacher.label": "主讲人",
+  "forms.fields.studentsassistant.label": "学生与助教",
+  "forms.fields.student.label": "学生",
+  "forms.fields.assistant.label": "助教",
+  "forms.fields.lesson.label": "讲",
+  "forms.fields.note.label": "注解",
+  "forms.fields.confidence.label": "信心指数",
+  "forms.fields.confidence.0.label": "不靠谱",
+  "forms.fields.confidence.25.label": "没把握",
+  "forms.fields.confidence.50.label": "一般",
+  "forms.fields.confidence.75.label": "还可以",
+  "forms.fields.confidence.100.label": "有把握",
+  "forms.fields.upload.texture": "上传封面",
+  "forms.fields.markdown.label": "markdown效果预览",
+  "forms.fields.role.label": "角色",
+  "forms.fields.name.label": "名称",
+  "forms.fields.meaning.label": "意思",
+  "forms.fields.meaning.tooltip": "最长为 256个字符",
+  "forms.message.meaning.required": "请输入意思",
+  "forms.fields.factors.label": "组份",
+  "forms.fields.factors.tooltip": "最长为 256个字符",
+  "forms.fields.factor.meaning.label": "组份意思",
+  "forms.fields.factor.meaning.tooltip": "最长为 256个字符",
+  "forms.fields.parent.label": "词典原型",
+  "forms.fields.parent.tooltip": "最长为 256个字符",
+  "forms.fields.case.label": "格位",
+  "forms.fields.case.tooltip": "语法信息参见……",
+  "forms.fields.user.label": "用户",
+  "forms.message.user.required": "请选择用户",
+  "forms.message.user.delete": "删除用户吗?此操作无法恢复。",
+  "forms.message.member.remove": "移除此成员吗?此操作无法恢复。",
+  "forms.fields.description.label": "简介",
+  "forms.fields.textbook.label": "课本",
+  "forms.fields.status.label": "状态",
+  "forms.fields.ending.label": "语尾",
+  "forms.fields.relation.label": "关系",
+  "forms.fields.from.label": "从",
+  "forms.fields.to.label": "连接到",
+  "forms.fields.count.label": "计数",
+  "forms.fields.owner.label": "拥有者",
+  "forms.message.res.remove": "将此此资源从群中移除吗?",
+  "forms.fields.parent2.label": "衍生原型",
+  "forms.fields.parent2.tooltip": "最长为 256个字符",
+  "forms.fields.username.label": "用户名(登录名)",
+  "forms.fields.nickname.label": "昵称",
+  "forms.fields.editor.label": "编辑者",
+  "forms.fields.category.label": "分类",
+  "forms.fields.match.label": "匹配方式",
+  "forms.fields.dict.name.label": "字典名",
+  "forms.fields.dict.shortname.label": "字典名",
+  "forms.fields.url.label": "url",
+  "forms.fields.fail.label": "失败",
+  "forms.fields.success.label": "成功",
+  "forms.fields.receiver.label": "接收",
+  "forms.fields.event.label": "事件",
+  "forms.message.question.required": "请输入您的问题(必填)",
+  "forms.message.question.description.option": "问题详细描述(选填)",
+  "forms.fields.replay.label": "回复",
+  "forms.status.transferred.label": "等待处理",
+  "forms.status.accept.label": "已经接受",
+  "forms.status.refuse.label": "已经拒绝",
+  "forms.status.cancel.label": "已经撤回",
+};
 
 export default items;

+ 8 - 0
dashboard/src/locales/en-US/group/index.ts

@@ -0,0 +1,8 @@
+const items = {
+  "group": "群组",
+  "group.fields.name.label": "群组名",
+  "group.files": "群文档",
+  "group.member": "群成员",
+};
+
+export default items;

+ 36 - 2
dashboard/src/locales/en-US/index.ts

@@ -1,5 +1,20 @@
+import forms from "./forms";
+import buttons from "./buttons";
+import tables from "./tables";
+import nut from "./nut";
+import channel from "./channel";
+import dict from "./dict";
+import term from "./term";
+import group from "./group";
+import article from "./article";
+import utilities from "./utilities";
+import blog from "./blog";
+import setting from "./setting";
+import auth from "./auth";
+import course from "./course";
+import message from "./message";
+import label from "./label";
 const items = {
-  "flashes.success": "success",
   "columns.library.title": "Library",
   "columns.library.community.title": "Community",
   "columns.library.palicanon.title": "Palicanon",
@@ -28,7 +43,26 @@ const items = {
   "columns.studio.collaboration.title": "Collaboration",
   "columns.studio.basic.title": "Basic",
   "columns.studio.advance.title": "Advance",
-  "columns.exp.title": "exp",
+  "columns.studio.setting.title": "Setting",
+  "columns.exp.title": "Exp",
+  "columns.studio.invite.title": "Invite",
+  "columns.studio.transfer.title": "Transfer",
+  ...buttons,
+  ...forms,
+  ...tables,
+  ...nut,
+  ...channel,
+  ...dict,
+  ...term,
+  ...group,
+  ...article,
+  ...utilities,
+  ...blog,
+  ...setting,
+  ...auth,
+  ...course,
+  ...message,
+  ...label,
 };
 
 export default items;

+ 36 - 0
dashboard/src/locales/en-US/label.ts

@@ -0,0 +1,36 @@
+const items = {
+  "labels.week.0": "Sun",
+  "labels.week.1": "Mon",
+  "labels.week.2": "Tue",
+  "labels.week.3": "Wed",
+  "labels.week.4": "Thu",
+  "labels.week.5": "Fri",
+  "labels.week.6": "Sat",
+  "labels.collaborators": "collaborators",
+  "labels.link": "link",
+  "labels.upload": "upload",
+  "labels.first-term": "first term",
+  "labels.sign-in": "sign in",
+  "labels.first-wbw": "first wbw",
+  "labels.first-translation": "first translation",
+  "labels.first-course": "first course",
+  "labels.updated-at": "updated at",
+  "labels.created-at": "created at",
+  "labels.recent-scan": "recent scan",
+  "labels.icp": "ICP:",
+  "labels.no.login": "not login",
+  "labels.page.number.type.M": "Page Number By My",
+  "labels.page.number.type.T": "Page Number By Th",
+  "labels.page.number.type.P": "Page Number By PTS",
+  "labels.page.number.type.V": "Page Number By VRI",
+  "labels.page.number.type.O": "Page Number By Other",
+  "labels.page.number.type.para": "Paragraph By CS",
+  "labels.curr.paragraph.only": "Current Paragraph",
+  "labels.curr.paragraph.open": "Open In Tab",
+  "labels.curr.paragraph.copy.tpl": "Copy Sn",
+  "labels.curr.paragraph.quote.link.tpl": "引用链接模版",
+  "labels.curr.paragraph.copy.quote.link.tpl": "复制引用模版",
+  "labels.input": "input",
+};
+
+export default items;

+ 10 - 0
dashboard/src/locales/en-US/message.ts

@@ -0,0 +1,10 @@
+const items = {
+  "flashes.success": "操作成功",
+  "message.irrevocable": "此操作不可撤销",
+  "message.delete.confirm": "确定删除吗?",
+  "message.auth.guest.alert":
+    "您尚未登录,只能查看公开数据,其他功能无法使用。",
+  "message.channel.empty.alert": "没有版本风格被选择,仅显示原文。",
+};
+
+export default items;

+ 6 - 1
dashboard/src/locales/en-US/nut/index.ts

@@ -1,3 +1,8 @@
-const items = {};
+const items = {
+  "nut.users.sign-in.title": "登录",
+  "nut.users.sign-up.title": "新用户注册",
+  "nut.users.logs.title": "日志列表",
+  "nut.users.forgot-password.title": "忘记密码",
+};
 
 export default items;

+ 37 - 0
dashboard/src/locales/en-US/setting/index.ts

@@ -0,0 +1,37 @@
+const items = {
+  "setting.display.original.label": "显示原文",
+  "setting.display.original.description": "是否显示原文(仅阅读模式)",
+  "setting.layout.direction.label": "排版方向",
+  "setting.layout.direction.description": "横向或者纵向排版",
+  "setting.layout.direction.col.label": "纵向排版",
+  "setting.layout.direction.row.label": "横向排版",
+  "setting.layout.paragraph.label": "对照方式",
+  "setting.layout.paragraph.description": "逐段或逐句对照(仅阅读模式)",
+  "setting.layout.paragraph.paragraph.label": "逐段",
+  "setting.layout.paragraph.sentence.label": "逐句",
+  "setting.pali.script.primary.label": "巴利脚本",
+  "setting.pali.script.primary.description": "首要的巴利语脚本",
+  "setting.pali.script.secondary.label": "第二巴利脚本",
+  "setting.pali.script.secondary.description": "第二个巴利语脚本",
+  "setting.pali.script.rome.label": "罗马巴利",
+  "setting.pali.script.my.label": "缅文字母",
+  "setting.pali.script.si.label": "新哈拉字母",
+  "setting.pali.script.thai.label": "泰文字母",
+  "setting.pali.script.tai.label": "傣仂文字母",
+  "setting.pali.script.none.label": "不显示",
+  "setting.search.match.label": "单词匹配",
+  "setting.search.match.complete.label": "精确",
+  "setting.search.match.case.label": "变格",
+  "setting.search.match.similar.label": "形似",
+  "setting.search.orderby.label": "排序",
+  "setting.search.orderby.rank.label": "相关度",
+  "setting.search.orderby.paragraph.label": "段落",
+  "setting.dict.lang.label": "字典语言",
+  "setting.dict.lang.description": "字典查询结果的语言排序",
+  "setting.nissaya.layout.read.label": "阅读排版方式",
+  "setting.nissaya.layout.edit.label": "阅读排版方式",
+  "setting.nissaya.layout.inline.label": "连续",
+  "setting.nissaya.layout.list.label": "列表",
+};
+
+export default items;

+ 16 - 0
dashboard/src/locales/en-US/tables.ts

@@ -0,0 +1,16 @@
+const items = {
+  "tables.publicity.all": "全部",
+  "tables.publicity.disable": "禁用",
+  "tables.publicity.private": "私有",
+  "tables.publicity.public.bylink": "链接公开",
+  "tables.publicity.public": "公开",
+  "tables.publicity.public.edit": "公开可编辑",
+  "tables.role.all": "全部",
+  "tables.role.owner": "拥有者",
+  "tables.role.manager": "管理员",
+  "tables.role.editor": "编辑",
+  "tables.role.member": "成员",
+  "tables.progress.label": "进度",
+};
+
+export default items;

+ 16 - 0
dashboard/src/locales/en-US/term/index.ts

@@ -0,0 +1,16 @@
+const items = {
+  "term.fields.sn.label": "序号",
+  "term.fields.word.label": "词头",
+  "term.fields.description.label": "标签",
+  "term.fields.description.tooltip":
+    "单词说明,可以用来区分相同拼写的不同单词。",
+  "term.fields.channel.label": "所属版本",
+  "term.fields.channel.tooltip": "该术语仅仅用于某个版本",
+  "term.fields.meaning.label": "意思",
+  "term.fields.meaning.tooltip": "单词的首选意思",
+  "term.fields.meaning2.label": "其他意思",
+  "term.fields.meaning2.tooltip": "其他意思将出现在后面的括号里",
+  "term.fields.note.label": "注释",
+};
+
+export default items;

+ 13 - 0
dashboard/src/locales/en-US/utilities.ts

@@ -0,0 +1,13 @@
+const items = {
+  "utilities.time.now": "现在",
+  "utilities.time.secs_ago": "秒之前",
+  "utilities.time.mins_ago": "分钟之前",
+  "utilities.time.hs_ago": "小时之前",
+  "utilities.time.days_ago": "天之前",
+  "utilities.time.weeks_ago": "周之前",
+  "utilities.time.months_ago": "月之前",
+  "utilities.time.year_ago": "年之前",
+  "utilities.time.years_ago": "年之前",
+};
+
+export default items;

+ 2 - 0
dashboard/src/locales/zh-Hans/buttons.ts

@@ -25,6 +25,8 @@ const items = {
   "buttons.lesson.add.lesson": "加入",
   "buttons.ok": "确定",
   "buttons.close": "关闭",
+  "buttons.copy": "复制",
+  "buttons.paste": "粘贴",
   "buttons.copy.to": "复制到",
   "buttons.copy.text": "复制文本",
   "buttons.copy.pali.text": "复制巴利语文本",

+ 1 - 0
dashboard/src/locales/zh-Hans/label.ts

@@ -30,6 +30,7 @@ const items = {
   "labels.curr.paragraph.copy.tpl": "复制句子编号",
   "labels.curr.paragraph.quote.link.tpl": "引用链接模版",
   "labels.curr.paragraph.copy.quote.link.tpl": "复制引用模版",
+  "labels.input": "请输入",
 };
 
 export default items;

+ 2 - 0
openapi/public/assets/protocol/main.yaml

@@ -8,6 +8,8 @@ servers:
     description: Internal staging server for testing
   - url: https://www.wikipali.org/api/v2
     description: Main production server
+  - url: https://www.wikipali.cc/api/v2
+    description: Main production server in china
   - url: http://127.0.0.1:8000/api/v2
     description: local dev
 paths: