aboutsummaryrefslogtreecommitdiff
path: root/Timeline/ClientApp/src/app/locales
diff options
context:
space:
mode:
Diffstat (limited to 'Timeline/ClientApp/src/app/locales')
-rw-r--r--Timeline/ClientApp/src/app/locales/en/translation.ts194
-rw-r--r--Timeline/ClientApp/src/app/locales/scheme.ts175
-rw-r--r--Timeline/ClientApp/src/app/locales/zh/translation.ts187
3 files changed, 556 insertions, 0 deletions
diff --git a/Timeline/ClientApp/src/app/locales/en/translation.ts b/Timeline/ClientApp/src/app/locales/en/translation.ts
new file mode 100644
index 00000000..6abe910e
--- /dev/null
+++ b/Timeline/ClientApp/src/app/locales/en/translation.ts
@@ -0,0 +1,194 @@
+import TranslationResource from '../scheme';
+
+const translation: TranslationResource = {
+ welcome: 'Welcome!',
+ search: 'Search',
+ 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',
+ 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.',
+ },
+ 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/Timeline/ClientApp/src/app/locales/scheme.ts b/Timeline/ClientApp/src/app/locales/scheme.ts
new file mode 100644
index 00000000..19ac6c31
--- /dev/null
+++ b/Timeline/ClientApp/src/app/locales/scheme.ts
@@ -0,0 +1,175 @@
+export default interface TranslationResource {
+ welcome: string;
+ search: string;
+ chooseImage: string;
+ loadImageError: 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;
+ 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;
+ };
+ 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/Timeline/ClientApp/src/app/locales/zh/translation.ts b/Timeline/ClientApp/src/app/locales/zh/translation.ts
new file mode 100644
index 00000000..372979c0
--- /dev/null
+++ b/Timeline/ClientApp/src/app/locales/zh/translation.ts
@@ -0,0 +1,187 @@
+import TranslationResource from '../scheme';
+
+const translation: TranslationResource = {
+ welcome: '欢迎!',
+ search: '搜索',
+ serviceWorker: {
+ availableOffline: 'Timeline 已经缓存在本地,你可以离线使用它。🎉🎉🎉',
+ upgradePrompt: 'App 有新版本!',
+ upgradeNow: '现在升级',
+ upgradeSuccess: 'App 升级成功,当然,你仍可以离线使用它。 🎉🎉🎉',
+ externalActivatedPrompt:
+ '一个新的 App 版本已经激活,请刷新页面使用,否则页面可能会出现故障。',
+ reloadNow: '立刻刷新',
+ },
+ nav: {
+ settings: '设置',
+ login: '登陆',
+ about: '关于',
+ },
+ chooseImage: '选择一个图片',
+ loadImageError: '加载图片失败',
+ home: {
+ go: '冲!',
+ allTimeline: '所有的时间线',
+ joinTimeline: '加入的时间线',
+ ownTimeline: '拥有的时间线',
+ 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: '名字不匹配',
+ },
+ 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;