aboutsummaryrefslogtreecommitdiff
path: root/FrontEnd/src/app/locales
diff options
context:
space:
mode:
Diffstat (limited to 'FrontEnd/src/app/locales')
-rw-r--r--FrontEnd/src/app/locales/en/translation.ts202
-rw-r--r--FrontEnd/src/app/locales/scheme.ts182
-rw-r--r--FrontEnd/src/app/locales/zh/translation.ts195
3 files changed, 579 insertions, 0 deletions
diff --git a/FrontEnd/src/app/locales/en/translation.ts b/FrontEnd/src/app/locales/en/translation.ts
new file mode 100644
index 00000000..c7f33d1e
--- /dev/null
+++ b/FrontEnd/src/app/locales/en/translation.ts
@@ -0,0 +1,202 @@
+import TranslationResource from "../scheme";
+
+const translation: TranslationResource = {
+ welcome: "Welcome!",
+ search: "Search",
+ loadFailReload: "Load failed, click <1>here</1> to reload.",
+ serviceWorker: {
+ availableOffline:
+ "Timeline is now cached in your computer and you can use it offline. 🎉🎉🎉",
+ upgradePrompt: "App is getting a new version!",
+ upgradeNow: "Update Now",
+ upgradeSuccess:
+ "Congratulations! App update succeeded! Still you can use it offline. 🎉🎉🎉",
+ externalActivatedPrompt:
+ "A new version of app is activated. Please refresh the page. Or it may be broken.",
+ reloadNow: "Refresh Now",
+ },
+ nav: {
+ settings: "Settings",
+ login: "Login",
+ about: "About",
+ },
+ chooseImage: "Choose a image",
+ loadImageError: "Failed to load image.",
+ home: {
+ go: "Go!",
+ allTimeline: "All Timelines",
+ joinTimeline: "Joined Timelines",
+ ownTimeline: "Owned Timelines",
+ offlinePrompt:
+ "Oh oh, it seems you are offline. Here list some timelines cached locally. You can view them or click <1>here</1> to refresh.",
+ createButton: "Create Timeline",
+ createDialog: {
+ title: "Create Timeline!",
+ name: "Name",
+ nameFormat:
+ "Name must consist of only letter including non-English letter, digit, hyphen(-) and underline(_) and be no longer than 26.",
+ badFormat: "Bad format.",
+ noEmpty: "Empty is not allowed.",
+ tooLong: "Too long.",
+ },
+ },
+ operationDialog: {
+ retry: "Retry",
+ nextStep: "Next",
+ previousStep: "Previous",
+ confirm: "Confirm",
+ cancel: "Cancel",
+ ok: "OK!",
+ processing: "Processing...",
+ success: "Success!",
+ error: "An error occured.",
+ },
+ timeline: {
+ messageCantSee: "Sorry, you are not allowed to see this timeline.😅",
+ userNotExist: "The user does not exist!",
+ timelineNotExist: "The timeline does not exist!",
+ manage: "Manage",
+ memberButton: "Member",
+ send: "Send",
+ deletePostFailed: "Failed to delete post.",
+ sendPostFailed: "Failed to send post.",
+ visibility: {
+ public: "public to everyone",
+ register: "only registed people can see",
+ private: "only members can see",
+ },
+ visibilityTooltip: {
+ public:
+ "Everyone including those without accounts can see content of the timeline.",
+ register:
+ "Only those who have an account and logined can see content of the timeline.",
+ private: "Only members of this timeline can see content of the timeline.",
+ },
+ dialogChangeProperty: {
+ title: "Change Timeline Properties",
+ visibility: "Visibility",
+ description: "Description",
+ },
+ member: {
+ alreadyMember: "The user is already a member.",
+ add: "Add",
+ remove: "Remove",
+ },
+ manageItem: {
+ nickname: "Nickname",
+ avatar: "Avatar",
+ property: "Timeline Property",
+ member: "Timeline Member",
+ delete: "Delete Timeline",
+ },
+ deleteDialog: {
+ title: "Delete Timeline",
+ inputPrompt:
+ "This is a dangerous action. If you are sure to delete timeline<1>{{name}}</1>, please input its name below and click confirm button.",
+ notMatch: "Name does not match.",
+ },
+ postSyncState: {
+ syncing: "Syncing",
+ synced: "Synced",
+ offline: "Offline",
+ },
+ post: {
+ deleteDialog: {
+ title: "Confirm Delete",
+ prompt:
+ "Are you sure to delete the post? This operation is not recoverable.",
+ },
+ },
+ },
+ user: {
+ username: "username",
+ password: "password",
+ login: "login",
+ rememberMe: "Remember Me",
+ welcomeBack: "Welcome back!",
+ verifyTokenFailed: "User login info is expired. Please login again!",
+ verifyTokenFailedNetwork:
+ "Verifying user login info failed. Please check your network and refresh page!",
+ },
+ login: {
+ emptyUsername: "Username can't be empty.",
+ emptyPassword: "Password can't be empty.",
+ badCredential: "Username or password is invalid.",
+ alreadyLogin: "Already login! Redirect to home page in 3s!",
+ },
+ userPage: {
+ dialogChangeNickname: {
+ title: "Change Nickname",
+ inputLabel: "New nickname",
+ },
+ dialogChangeAvatar: {
+ title: "Change Avatar",
+ previewImgAlt: "preview",
+ prompt: {
+ select: "Please select a picture.",
+ crop: "Please crop the picture.",
+ processingCrop: "Cropping picture...",
+ uploading: "Uploading...",
+ preview: "Please preview avatar",
+ },
+ upload: "upload",
+ },
+ },
+ settings: {
+ subheaders: {
+ account: "Account",
+ customization: "Customization",
+ },
+ languagePrimary: "Choose display language.",
+ languageSecondary:
+ "You language preference will be saved locally. Next time you visit this page, last language option will be used.",
+ changePassword: "Change account's password.",
+ logout: "Log out this account.",
+ gotoSelf:
+ "Click here to go to timeline of myself to change nickname and avatar.",
+ dialogChangePassword: {
+ title: "Change Password",
+ prompt:
+ "You are changing your password. You need to input the correct old password. After change, you need to login again and all old login will be invalid.",
+ inputOldPassword: "Old password",
+ inputNewPassword: "New password",
+ inputRetypeNewPassword: "Retype new password",
+ errorEmptyOldPassword: "Old password can't be empty.",
+ errorEmptyNewPassword: "New password can't be empty.",
+ errorRetypeNotMatch: "Password retyped does not match.",
+ },
+ dialogConfirmLogout: {
+ title: "Confirm Logout",
+ prompt:
+ "Are you sure to log out? All cached data in the browser will be deleted.",
+ },
+ },
+ about: {
+ author: {
+ title: "Site Developer",
+ fullname: "Fullname: ",
+ nickname: "Nickname: ",
+ introduction: "Introduction: ",
+ introductionContent: "A programmer coding based on coincidence",
+ links: "Links: ",
+ },
+ site: {
+ title: "Site Information",
+ content:
+ "The name of this site is <1>Timeline</1>, which is a Web App with <3>timeline</3> as its core concept. Its frontend and backend are both developed by <5>me</5>, and open source on GitHub. It is relatively easy to deploy it on your own server, which is also one of my goals. Welcome to comment anything in GitHub repository.",
+ repo: "GitHub Repo",
+ },
+ credits: {
+ title: "Credits",
+ content:
+ "Timeline is works standing on shoulders of gaints. Special appreciation for many open source projects listed below or not. Related licenses could be found in GitHub repository.",
+ frontend: "Frontend: ",
+ backend: "Backend: ",
+ },
+ },
+ admin: {
+ title: "admin",
+ },
+};
+
+export default translation;
diff --git a/FrontEnd/src/app/locales/scheme.ts b/FrontEnd/src/app/locales/scheme.ts
new file mode 100644
index 00000000..9e3534ac
--- /dev/null
+++ b/FrontEnd/src/app/locales/scheme.ts
@@ -0,0 +1,182 @@
+export default interface TranslationResource {
+ welcome: string;
+ search: string;
+ chooseImage: string;
+ loadImageError: string;
+ loadFailReload: string;
+ serviceWorker: {
+ availableOffline: string;
+ upgradePrompt: string;
+ upgradeNow: string;
+ upgradeSuccess: string;
+ externalActivatedPrompt: string;
+ reloadNow: string;
+ };
+ nav: {
+ settings: string;
+ login: string;
+ about: string;
+ };
+ home: {
+ go: string;
+ allTimeline: string;
+ joinTimeline: string;
+ ownTimeline: string;
+ offlinePrompt: string;
+ createButton: string;
+ createDialog: {
+ title: string;
+ name: string;
+ nameFormat: string;
+ badFormat: string;
+ noEmpty: string;
+ tooLong: string;
+ };
+ };
+ operationDialog: {
+ retry: string;
+ nextStep: string;
+ previousStep: string;
+ confirm: string;
+ cancel: string;
+ ok: string;
+ processing: string;
+ success: string;
+ error: string;
+ };
+ timeline: {
+ messageCantSee: string;
+ userNotExist: string;
+ timelineNotExist: string;
+ manage: string;
+ memberButton: string;
+ send: string;
+ deletePostFailed: string;
+ sendPostFailed: string;
+ visibility: {
+ public: string;
+ register: string;
+ private: string;
+ };
+ visibilityTooltip: {
+ public: string;
+ register: string;
+ private: string;
+ };
+ dialogChangeProperty: {
+ title: string;
+ visibility: string;
+ description: string;
+ };
+ member: {
+ alreadyMember: string;
+ add: string;
+ remove: string;
+ };
+ manageItem: {
+ nickname: string;
+ avatar: string;
+ property: string;
+ member: string;
+ delete: string;
+ };
+ deleteDialog: {
+ title: string;
+ inputPrompt: string;
+ notMatch: string;
+ };
+ postSyncState: {
+ syncing: string;
+ synced: string;
+ offline: string;
+ };
+ post: {
+ deleteDialog: {
+ title: string;
+ prompt: string;
+ };
+ };
+ };
+ user: {
+ username: string;
+ password: string;
+ login: string;
+ rememberMe: string;
+ welcomeBack: string;
+ verifyTokenFailed: string;
+ verifyTokenFailedNetwork: string;
+ };
+ login: {
+ emptyUsername: string;
+ emptyPassword: string;
+ badCredential: string;
+ alreadyLogin: string;
+ };
+ userPage: {
+ dialogChangeNickname: {
+ title: string;
+ inputLabel: string;
+ };
+ dialogChangeAvatar: {
+ title: string;
+ previewImgAlt: string;
+ prompt: {
+ select: string;
+ crop: string;
+ processingCrop: string;
+ preview: string;
+ uploading: string;
+ };
+ upload: string;
+ };
+ };
+ settings: {
+ subheaders: {
+ account: string;
+ customization: string;
+ };
+ languagePrimary: string;
+ languageSecondary: string;
+ changePassword: string;
+ logout: string;
+ gotoSelf: string;
+ dialogChangePassword: {
+ title: string;
+ prompt: string;
+ inputOldPassword: string;
+ inputNewPassword: string;
+ inputRetypeNewPassword: string;
+ errorEmptyOldPassword: string;
+ errorEmptyNewPassword: string;
+ errorRetypeNotMatch: string;
+ };
+ dialogConfirmLogout: {
+ title: string;
+ prompt: string;
+ };
+ };
+ about: {
+ author: {
+ title: string;
+ fullname: string;
+ nickname: string;
+ introduction: string;
+ introductionContent: string;
+ links: string;
+ };
+ site: {
+ title: string;
+ content: string;
+ repo: string;
+ };
+ credits: {
+ title: string;
+ content: string;
+ frontend: string;
+ backend: string;
+ };
+ };
+ admin: {
+ title: string;
+ };
+}
diff --git a/FrontEnd/src/app/locales/zh/translation.ts b/FrontEnd/src/app/locales/zh/translation.ts
new file mode 100644
index 00000000..df316366
--- /dev/null
+++ b/FrontEnd/src/app/locales/zh/translation.ts
@@ -0,0 +1,195 @@
+import TranslationResource from "../scheme";
+
+const translation: TranslationResource = {
+ welcome: "欢迎!",
+ search: "搜索",
+ loadFailReload: "加载失败,<1>点击</1>重试。",
+ serviceWorker: {
+ availableOffline: "Timeline 已经缓存在本地,你可以离线使用它。🎉🎉🎉",
+ upgradePrompt: "App 有新版本!",
+ upgradeNow: "现在升级",
+ upgradeSuccess: "App 升级成功,当然,你仍可以离线使用它。 🎉🎉🎉",
+ externalActivatedPrompt:
+ "一个新的 App 版本已经激活,请刷新页面使用,否则页面可能会出现故障。",
+ reloadNow: "立刻刷新",
+ },
+ nav: {
+ settings: "设置",
+ login: "登陆",
+ about: "关于",
+ },
+ chooseImage: "选择一个图片",
+ loadImageError: "加载图片失败",
+ home: {
+ go: "冲!",
+ allTimeline: "所有的时间线",
+ joinTimeline: "加入的时间线",
+ ownTimeline: "拥有的时间线",
+ offlinePrompt:
+ "你好像处于离线状态。以下是一些缓存在本地的时间线。你可以查看它们或者<1>点击</1>重新获取在线信息。",
+ createButton: "创建时间线",
+ createDialog: {
+ title: "创建时间线!",
+ name: "名字",
+ nameFormat:
+ "名字只能由字母、汉字、数字、下划线(_)和连字符(-)构成,且长度不能超过26.",
+ badFormat: "格式错误",
+ noEmpty: "不能为空",
+ tooLong: "太长了",
+ },
+ },
+ operationDialog: {
+ retry: "重试",
+ nextStep: "下一步",
+ previousStep: "上一步",
+ confirm: "确定",
+ cancel: "取消",
+ ok: "好的!",
+ processing: "处理中...",
+ success: "成功!",
+ error: "出错啦!",
+ },
+ timeline: {
+ messageCantSee: "不好意思,你没有权限查看这个时间线。😅",
+ userNotExist: "该用户不存在!",
+ timelineNotExist: "该时间线不存在!",
+ manage: "管理",
+ memberButton: "成员",
+ send: "发送",
+ deletePostFailed: "删除消息失败。",
+ sendPostFailed: "发送消息失败。",
+ visibility: {
+ public: "对所有人公开",
+ register: "仅注册可见",
+ private: "仅成员可见",
+ },
+ visibilityTooltip: {
+ public: "所有人都可以看到这个时间线的内容,包括没有注册的人。",
+ register: "只有拥有本网站的账号且登陆了的人才能看到这个时间线的内容。",
+ private: "只有这个时间线的成员可以看到这个时间线的内容。",
+ },
+ dialogChangeProperty: {
+ title: "修改时间线属性",
+ visibility: "可见性",
+ description: "描述",
+ },
+ member: {
+ alreadyMember: "该用户已经是一个成员。",
+ add: "添加",
+ remove: "移除",
+ },
+ manageItem: {
+ nickname: "昵称",
+ avatar: "头像",
+ property: "时间线属性",
+ member: "时间线成员",
+ delete: "删除时间线",
+ },
+ deleteDialog: {
+ title: "删除时间线",
+ inputPrompt:
+ "这是一个危险的操作。如果您确认要删除时间线<1>{{name}}</1>,请在下面输入它的名字并点击确认。",
+ notMatch: "名字不匹配",
+ },
+ postSyncState: {
+ syncing: "同步中",
+ synced: "同步成功",
+ offline: "离线",
+ },
+ post: {
+ deleteDialog: {
+ title: "确认删除",
+ prompt: "确定删除这个消息?这个操作不可撤销。",
+ },
+ },
+ },
+ user: {
+ username: "用户名",
+ password: "密码",
+ login: "登录",
+ rememberMe: "记住我",
+ welcomeBack: "欢迎回来!",
+ verifyTokenFailed: "用户登录信息已过期,请重新登陆!",
+ verifyTokenFailedNetwork:
+ "验证用户登录信息失败,请检查网络连接并刷新页面!",
+ },
+ login: {
+ emptyUsername: "用户名不能为空。",
+ emptyPassword: "密码不能为空。",
+ badCredential: "用户名或密码错误。",
+ alreadyLogin: "已经登陆,三秒后导航到首页!",
+ },
+ userPage: {
+ dialogChangeNickname: {
+ title: "更改昵称",
+ inputLabel: "新昵称",
+ },
+ dialogChangeAvatar: {
+ title: "修改头像",
+ previewImgAlt: "预览",
+ prompt: {
+ select: "请选择一个图片",
+ crop: "请裁剪图片",
+ processingCrop: "正在裁剪图片",
+ uploading: "正在上传",
+ preview: "请预览图片",
+ },
+ upload: "上传",
+ },
+ },
+ settings: {
+ subheaders: {
+ account: "账户",
+ customization: "个性化",
+ },
+ languagePrimary: "选择显示的语言。",
+ languageSecondary:
+ "您的语言偏好将会存储在本地,下次浏览时将自动使用上次保存的语言选项。",
+ changePassword: "更改账号的密码。",
+ logout: "注销此账号。",
+ gotoSelf: "点击前往个人时间线修改昵称和头像!",
+ dialogChangePassword: {
+ title: "修改密码",
+ prompt:
+ "您正在修改密码,您需要输入正确的旧密码。成功修改后您需要重新登陆,而且以前所有的登录都会失效。",
+ inputOldPassword: "旧密码",
+ inputNewPassword: "新密码",
+ inputRetypeNewPassword: "再次输入新密码",
+ errorEmptyOldPassword: "旧密码不能为空。",
+ errorEmptyNewPassword: "新密码不能为空",
+ errorRetypeNotMatch: "两次输入的密码不一致",
+ },
+ dialogConfirmLogout: {
+ title: "确定注销",
+ prompt: "您确定注销此账号?这将删除所有已经缓存在浏览器的数据。",
+ },
+ },
+ about: {
+ author: {
+ title: "网站作者",
+ fullname: "姓名:",
+ nickname: "昵称:",
+ introduction: "简介:",
+ introductionContent: "一个基于巧合编程的代码爱好者。",
+ links: "链接:",
+ },
+ site: {
+ title: "网站信息",
+ content:
+ "这个网站的名字叫 <1>Timeline</1>,是一个以<3>时间线</3>为核心概念的 Web App . 它的前端和后端都是由<5>我</5>开发,并且在 GitHub 上开源。大家可以相对轻松的把它们部署在自己的服务器上,这也是我的目标之一。欢迎大家前往 GitHub 仓库提出任何意见。",
+ repo: "GitHub 仓库",
+ },
+ credits: {
+ title: "鸣谢",
+ content:
+ "Timeline 是站在巨人肩膀上的作品,感谢以下列出的和其他未列出的许多开源项目,相关 License 请在 GitHub 仓库中查看。",
+ frontend: "前端:",
+ backend: "后端:",
+ },
+ },
+ admin: {
+ title: "管理",
+ },
+};
+
+export default translation;