@pmate/account-sdk 0.5.4 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +18 -20
- package/src/api/AccountService.ts +97 -0
- package/src/api/Api.ts +99 -0
- package/src/api/AppService.ts +71 -0
- package/src/api/EntityService.ts +41 -0
- package/src/api/ProfileService.ts +133 -0
- package/src/api/cacheInMem.ts +73 -0
- package/src/api/index.ts +5 -0
- package/src/atoms/accountAtom.ts +18 -0
- package/src/atoms/accountProfileAtom.ts +13 -0
- package/src/atoms/atomWithLoadable.ts +48 -0
- package/src/atoms/createProfileAtom.ts +27 -0
- package/src/atoms/index.ts +16 -0
- package/src/atoms/learningLangAtom.ts +8 -0
- package/src/atoms/localStorageAtom.ts +39 -0
- package/src/atoms/loginAtom.ts +8 -0
- package/src/atoms/motherTongueAtom.ts +8 -0
- package/src/atoms/profileAtom.ts +24 -0
- package/src/atoms/profileDraftAtom.ts +7 -0
- package/src/atoms/profilesAtom.ts +20 -0
- package/src/atoms/sessionCheckAtom.ts +10 -0
- package/src/atoms/switchProfileAtom.ts +9 -0
- package/src/atoms/updateProfileAtom.ts +35 -0
- package/src/atoms/uploadAvatarAtom.ts +49 -0
- package/src/atoms/userLogoutAtom.ts +8 -0
- package/src/atoms/userSettingsAtom.ts +58 -0
- package/src/components/AuthProviderV2.tsx +315 -0
- package/src/components/Button.tsx +39 -0
- package/src/components/Drawer.tsx +80 -0
- package/src/components/index.ts +1 -0
- package/src/constants.ts +1 -0
- package/src/hooks/index.ts +5 -0
- package/src/hooks/useAppBackgroundStyle.ts +25 -0
- package/src/hooks/useAppConfig.ts +44 -0
- package/src/hooks/useAuthApp.ts +165 -0
- package/src/hooks/useAuthSnapshot.ts +84 -0
- package/src/hooks/useIsAuthenticated.ts +19 -0
- package/src/hooks/useProfileStepFlow.ts +59 -0
- package/src/i18n/index.ts +59 -0
- package/src/index.ts +9 -0
- package/src/locales/ar-SA.json +183 -0
- package/src/locales/de-DE.json +183 -0
- package/src/locales/el-GR.json +183 -0
- package/src/locales/en.json +183 -0
- package/src/locales/es-ES.json +183 -0
- package/src/locales/fi-FI.json +183 -0
- package/src/locales/fil-PH.json +183 -0
- package/src/locales/fr-FR.json +183 -0
- package/src/locales/hi-IN.json +183 -0
- package/src/locales/ja-JP.json +183 -0
- package/src/locales/ko-KR.json +183 -0
- package/src/locales/pt-BR.json +183 -0
- package/src/locales/pt-PT.json +183 -0
- package/src/locales/ru-RU.json +183 -0
- package/src/locales/ta-IN.json +183 -0
- package/src/locales/uk-UA.json +183 -0
- package/src/locales/zh-CN.json +183 -0
- package/src/locales/zh-TW.json +183 -0
- package/src/types/account.types.ts +28 -0
- package/src/types/app.ts +22 -0
- package/src/types/profile.ts +6 -0
- package/src/utils/AccountManagerV2.ts +349 -0
- package/src/utils/Redirect.ts +17 -0
- package/src/utils/accountStorage.ts +46 -0
- package/src/utils/errors.ts +1 -0
- package/src/utils/index.ts +11 -0
- package/src/utils/location.ts +34 -0
- package/src/utils/profileStep.ts +26 -0
- package/src/utils/resolveAppId.ts +13 -0
- package/src/utils/selectedProfileStorage.ts +46 -0
- package/src/utils/tokenStorage.ts +47 -0
- package/dist/index.cjs.js +0 -22
- package/dist/index.cjs.js.map +0 -1
- package/dist/index.d.ts +0 -302
- package/dist/index.es.js +0 -8884
- package/dist/index.es.js.map +0 -1
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
{
|
|
2
|
+
"seconds": "секунд",
|
|
3
|
+
"Send Code": "Надіслати код",
|
|
4
|
+
"Add Profile": "Додати профіль",
|
|
5
|
+
"Practitioner": "Наставник",
|
|
6
|
+
"I want to practice languages and chat with others": "Хочу практикувати мови й спілкуватися з іншими",
|
|
7
|
+
"Mate": "Напарник",
|
|
8
|
+
"I can guide language learning and provide companionship": "Я можу допомагати у вивченні мов і скласти приємну компанію",
|
|
9
|
+
"Unknown error": "Сталася невідома помилка. Будь ласка, спробуйте ще раз.",
|
|
10
|
+
"English": "Англійська",
|
|
11
|
+
"Chinese": "Китайська",
|
|
12
|
+
"Spanish": "Іспанська",
|
|
13
|
+
"Korean": "Корейська",
|
|
14
|
+
"French": "Французька",
|
|
15
|
+
"Japanese": "Японська",
|
|
16
|
+
"German": "Німецька",
|
|
17
|
+
"Arabic": "Арабська",
|
|
18
|
+
"Translation": "Переклад",
|
|
19
|
+
"Interpretation": "Тлумачення",
|
|
20
|
+
"Key Vocabulary & Terms": "Ключова лексика та терміни",
|
|
21
|
+
"Grammar": "Граматика",
|
|
22
|
+
"DM_ACL_REJECT": "Будь ласка, зачекайте відповіді інших, щоб продовжити особисте повідомлення.",
|
|
23
|
+
"GROUP_ACL_REJECT": "Ви ще не приєднані до цієї групи. Будь ласка, зачекайте, поки власник схвалить ваш запит.",
|
|
24
|
+
"Tree Hole": "Секретний куточок",
|
|
25
|
+
"Chat": "Чат",
|
|
26
|
+
"Contacts": "Контакти",
|
|
27
|
+
"Remove Contact": "Видалити контакт",
|
|
28
|
+
"Exit Group": "Вийти з групи",
|
|
29
|
+
"Chat Settings": "Налаштування чату",
|
|
30
|
+
"Awaiting friend confirmation": "Чекаємо підтвердження від друга",
|
|
31
|
+
"Revision failed": "Не вдалося виконати ревізію",
|
|
32
|
+
"Please use English": "Будь ласка, використовуйте англійську",
|
|
33
|
+
"Speech recognition failed. Please try again.": "Розпізнавання мовлення не вдалося. Будь ласка, спробуйте ще раз.",
|
|
34
|
+
"analyzing...": "Аналізую...",
|
|
35
|
+
"Loading profiles...": "Завантаження профілів...",
|
|
36
|
+
"Add Friend": "Додати друга",
|
|
37
|
+
"Create Group": "Створити групу",
|
|
38
|
+
"Logout": "Вийти",
|
|
39
|
+
"Copied username to clipboard": "Ім'я користувача скопійовано в буфер обміну",
|
|
40
|
+
"Switch Identity": "Змінити обліковий запис",
|
|
41
|
+
"Function": "Функція",
|
|
42
|
+
"Quote": "Цитата",
|
|
43
|
+
"Instructions(Optional)": "Інструкції (необов'язково)",
|
|
44
|
+
"joined the room": "приєднався до кімнати",
|
|
45
|
+
"left the room": "покинув кімнату",
|
|
46
|
+
"View": "Переглянути",
|
|
47
|
+
"Recall": "Відкликати",
|
|
48
|
+
"Hide Translation": "Приховати переклад",
|
|
49
|
+
"Translate": "Перекласти",
|
|
50
|
+
"Collapse": "Згорнути",
|
|
51
|
+
"Before you accept, she won’t know you've seen any messages.": "Поки ви не приймете, вона не дізнається, що ви бачили повідомлення.",
|
|
52
|
+
"Allow {{name}} to send you messages and share your name and profile picture?": "Дозволити {{name}} надсилати вам повідомлення та бачити ваше ім'я та фото профілю?",
|
|
53
|
+
"Message": "Повідомлення",
|
|
54
|
+
"Study": "Навчання",
|
|
55
|
+
"Discover": "Відкриття",
|
|
56
|
+
"Me": "Мій профіль",
|
|
57
|
+
"coming soon": "Незабаром",
|
|
58
|
+
"This feature is under": "Ця функція знаходиться на стадії",
|
|
59
|
+
"development": "розробки",
|
|
60
|
+
"Back": "Назад",
|
|
61
|
+
"Search contacts or groups": "Шукати контакти або групи",
|
|
62
|
+
"Groups": "Групи",
|
|
63
|
+
"No Results": "Результатів не знайдено",
|
|
64
|
+
"Say Hi": "Написати привіт",
|
|
65
|
+
"Add": "Додати",
|
|
66
|
+
"Find Friend": "Знайти друга",
|
|
67
|
+
"Input Username": "Введіть ім'я користувача",
|
|
68
|
+
"my account: ": "мій акаунт: ",
|
|
69
|
+
"Already Applied": "Запит вже надіслано",
|
|
70
|
+
"User is blocked": "Користувач заблокований",
|
|
71
|
+
"Failed": "Не вдалося",
|
|
72
|
+
"Please select at least one member": "Будь ласка, виберіть принаймні одного учасника",
|
|
73
|
+
"Group created": "Групу успішно створено",
|
|
74
|
+
"Group Name": "Назва групи",
|
|
75
|
+
"Group Name is required": "Потрібно вказати назву групи",
|
|
76
|
+
"Loading...": "Завантаження...",
|
|
77
|
+
"Create": "Створити",
|
|
78
|
+
"Group updated": "Групу успішно оновлено",
|
|
79
|
+
"Update Group": "Оновити групу",
|
|
80
|
+
"Update": "Оновити",
|
|
81
|
+
"No Chats": "Немає чатів",
|
|
82
|
+
"ParrotMate": "ParrotMate",
|
|
83
|
+
"Speak Different": "Говори по-іншому",
|
|
84
|
+
"Not logged in": "Не ввійшли в систему",
|
|
85
|
+
"User Name": "Ім'я користувача",
|
|
86
|
+
"copy": "Копіювати",
|
|
87
|
+
"Network is slow, enable offline mode?": "Мережа повільна. Увімкнути офлайн-режим?",
|
|
88
|
+
"Enable offline mode": "Увімкнути офлайн-режим",
|
|
89
|
+
"PChip Reader": "PChip Reader",
|
|
90
|
+
"male": "Чоловічий",
|
|
91
|
+
"female": "Жіночий",
|
|
92
|
+
"popular neutral": "Популярно-нейтральний",
|
|
93
|
+
"Offline mode": "Офлайн-режим",
|
|
94
|
+
"Change nickname": "Змінити нікнейм",
|
|
95
|
+
"UI Language": "Мова інтерфейсу",
|
|
96
|
+
"Word": "Слово",
|
|
97
|
+
"Date": "Дата",
|
|
98
|
+
"My bookshelf": "Моя книжкова полиця",
|
|
99
|
+
"Title too short": "Заголовок надто короткий",
|
|
100
|
+
"Modification successful": "Зміни успішно застосовано",
|
|
101
|
+
"No books in your shelf yet": "На вашій полиці ще немає книг",
|
|
102
|
+
"Tap the search icon above to browse books and add them to your shelf!": "Натисніть іконку пошуку вгорі, щоб знайти книги й додати їх до своєї полиці!",
|
|
103
|
+
"Read with experts to help you understand,": "Читайте разом із експертами, щоб краще розуміти матеріал,",
|
|
104
|
+
"Comprehensive training in English listening and reading.": "Комплексна підготовка з аудіювання та читання англійською.",
|
|
105
|
+
"Hi, {{nickName}}! Welcome!": "Привіт, {{nickName}}! Ласкаво просимо!",
|
|
106
|
+
"Browse library": "Переглянути бібліотеку",
|
|
107
|
+
"Add your own TXT/PDF": "Додайте свої файли TXT/PDF",
|
|
108
|
+
"Already have an account?": "Вже маєте обліковий запис?",
|
|
109
|
+
"Click here to login": "Натисніть тут, щоб увійти",
|
|
110
|
+
"We detected this is your first time using PChip Reader. Add some books!": "Схоже, ви вперше користуєтесь PChip Reader. Додайте кілька книг!",
|
|
111
|
+
"Upload Book": "Завантажити книгу",
|
|
112
|
+
"Click here to upload local EPUB/MOBI/PDF/TXT": "Натисніть тут, щоб завантажити локальні файли EPUB/MOBI/PDF/TXT",
|
|
113
|
+
"Only EPUB/MOBI/PDF/TXT is supported": "Підтримуються лише формати EPUB, MOBI, PDF та TXT",
|
|
114
|
+
"Upload successful": "Книгу успішно завантажено",
|
|
115
|
+
"Book upload failed": "Не вдалося завантажити книгу",
|
|
116
|
+
"We only store your files locally!": "Ми зберігаємо ваші файли лише локально!",
|
|
117
|
+
"New words": "Нові слова",
|
|
118
|
+
"Total reading": "Загальний час читання",
|
|
119
|
+
"Today's reading": "Час читання сьогодні",
|
|
120
|
+
"Please choose an image file": "Будь ласка, оберіть файл зображення",
|
|
121
|
+
"Image sent": "Зображення надіслано",
|
|
122
|
+
"Failed to upload image": "Не вдалося завантажити зображення",
|
|
123
|
+
"analyzing grammar structure": "аналізую граматичну структуру",
|
|
124
|
+
"understanding pronunciation": "аналізую вимову",
|
|
125
|
+
"optimizing and restructuring": "оптимізую та переструктуровую",
|
|
126
|
+
"My QR Code": "Мій QR-код",
|
|
127
|
+
"Let friends scan to fill your username automatically": "Дайте друзям змогу відсканувати QR-код, щоб автоматично заповнити ваше ім'я користувача",
|
|
128
|
+
"Unable to load image": "Не вдається завантажити зображення",
|
|
129
|
+
"Loading image...": "Завантаження зображення...",
|
|
130
|
+
"Shared image": "Надіслане зображення",
|
|
131
|
+
"QR scanning is unavailable in this environment": "Сканування QR-кодів недоступне в цьому середовищі",
|
|
132
|
+
"Camera access is not supported on this device": "Цей пристрій не підтримує доступ до камери",
|
|
133
|
+
"Unable to access the camera": "Не вдалося отримати доступ до камери",
|
|
134
|
+
"No QR code found in the selected image": "У вибраному зображенні не знайдено QR-коду",
|
|
135
|
+
"Unable to read QR code from the selected image": "Не вдається розпізнати QR-код у вибраному зображенні",
|
|
136
|
+
"Username captured from QR code": "Ім'я користувача зчитано з QR-коду",
|
|
137
|
+
"Initializing camera...": "Підготовка камери...",
|
|
138
|
+
"Scan QR Code": "Сканувати QR-код",
|
|
139
|
+
"Align the QR code within the frame to capture a username automatically.": "Розмістіть QR-код у рамці, щоб автоматично зчитати ім'я користувача.",
|
|
140
|
+
"Login Success": "Успішний вхід",
|
|
141
|
+
"please enter your phone number": "будь ласка, введіть свій номер телефону",
|
|
142
|
+
"Please enter your phone number": "Будь ласка, введіть свій номер телефону",
|
|
143
|
+
"Login": "Увійти",
|
|
144
|
+
"Terms&Conditions": "Умови та положення",
|
|
145
|
+
"and": "та",
|
|
146
|
+
"Privacy Policy": "Політика конфіденційності",
|
|
147
|
+
"Unregistered phone numbers will automatically create an account": "Якщо номер телефону не зареєстрований, буде автоматично створено обліковий запис",
|
|
148
|
+
"Please enter the verification code": "Будь ласка, введіть код підтвердження",
|
|
149
|
+
"Send verification code": "Надіслати код підтвердження",
|
|
150
|
+
"Please enter the correct phone number": "Будь ласка, введіть правильний номер телефону",
|
|
151
|
+
"Verification code sent": "Код підтвердження надіслано",
|
|
152
|
+
"Language": "Мова",
|
|
153
|
+
"Skip": "Пропустити",
|
|
154
|
+
"Continue": "Продовжити",
|
|
155
|
+
"Are you 18 or older?": "Вам 18 років чи більше?",
|
|
156
|
+
"Yes": "Так",
|
|
157
|
+
"No": "Ні",
|
|
158
|
+
"Please select language what you want to learn": "Будь ласка, оберіть мову, яку хочете вивчати",
|
|
159
|
+
"Please enter your age": "Вкажіть, будь ласка, свій вік",
|
|
160
|
+
"Age": "Вік",
|
|
161
|
+
"Please select your gender": "Оберіть, будь ласка, свою стать",
|
|
162
|
+
"Female": "Жінка",
|
|
163
|
+
"Male": "Чоловік",
|
|
164
|
+
"Your {{langShort}} name": "Ваше {{langShort}} ім'я",
|
|
165
|
+
"Create your own name or choose from the recommendations": "Придумайте власне ім'я або оберіть із рекомендацій",
|
|
166
|
+
"Enter your nickname here...": "Введіть тут свій нік...",
|
|
167
|
+
"Learning Language": "Мова, яку ви вивчаєте",
|
|
168
|
+
"Finish": "Завершити",
|
|
169
|
+
"Nickname is required": "Нік обов'язковий",
|
|
170
|
+
"Nickname must be at least 3 characters": "Нік має містити щонайменше 3 символи",
|
|
171
|
+
"Confirm": "Підтвердити",
|
|
172
|
+
"Account Phone": "Телефон облікового запису",
|
|
173
|
+
"Gender": "Стать",
|
|
174
|
+
"Education": "Освіта",
|
|
175
|
+
"Job": "Професія",
|
|
176
|
+
"Hobby": "Хобі",
|
|
177
|
+
"Select your role": "Оберіть свою роль",
|
|
178
|
+
"Please choose your identity": "Будь ласка, оберіть свою ідентичність",
|
|
179
|
+
"Profile Step: Nickname": "Нік",
|
|
180
|
+
"Profile Step: Learning Language": "Мова, яку ви вивчаєте",
|
|
181
|
+
"Profile Step: Mother Tongue": "Рідна мова",
|
|
182
|
+
"By signing up, you agree with ": "Реєструючись, ви погоджуєтеся з "
|
|
183
|
+
}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Network is slow, enable offline mode?": "网络连接较慢,是否启用离线模式?",
|
|
3
|
+
"Enable offline mode": "启用离线模式",
|
|
4
|
+
"Modification successful": "修改成功",
|
|
5
|
+
"Failed": "操作失败",
|
|
6
|
+
"Say Hi": "Hi",
|
|
7
|
+
"Add": "添加",
|
|
8
|
+
"Please select at least one member": "请至少选择一名成员",
|
|
9
|
+
"Group created": "群组已创建",
|
|
10
|
+
"Create Group": "创建群组",
|
|
11
|
+
"Group Name": "群组名称",
|
|
12
|
+
"Group Name is required": "请填写群组名称",
|
|
13
|
+
"Loading...": "加载中...",
|
|
14
|
+
"Create": "创建",
|
|
15
|
+
"Message": "消息",
|
|
16
|
+
"Study": "学习",
|
|
17
|
+
"Discover": "发现",
|
|
18
|
+
"Me": "我",
|
|
19
|
+
"Find Friend": "查找好友",
|
|
20
|
+
"Input Username": "输入用户名",
|
|
21
|
+
"my account: ": "我的账号: ",
|
|
22
|
+
"Already Applied": "已发送申请",
|
|
23
|
+
"User is blocked": "该用户已被屏蔽",
|
|
24
|
+
"Group updated": "群组已更新",
|
|
25
|
+
"Update Group": "更新群组",
|
|
26
|
+
"Update": "更新",
|
|
27
|
+
"Tree Hole": "树洞",
|
|
28
|
+
"Chat": "聊天",
|
|
29
|
+
"Contacts": "联系人",
|
|
30
|
+
"Remove Contact": "移除联系人",
|
|
31
|
+
"Exit Group": "退出群组",
|
|
32
|
+
"Chat Settings": "聊天设置",
|
|
33
|
+
"Awaiting friend confirmation": "等待对方确认",
|
|
34
|
+
"Revision failed": "润色失败",
|
|
35
|
+
"Please use English": "请使用英语",
|
|
36
|
+
"Speech recognition failed. Please try again.": "语音识别失败,请重试。",
|
|
37
|
+
"analyzing...": "正在分析...",
|
|
38
|
+
"Loading profiles...": "正在加载个人资料...",
|
|
39
|
+
"Add Friend": "添加好友",
|
|
40
|
+
"Logout": "退出登录",
|
|
41
|
+
"Copied username to clipboard": "用户名已复制到剪贴板",
|
|
42
|
+
"Switch Identity": "切换身份",
|
|
43
|
+
"Function": "功能",
|
|
44
|
+
"Quote": "引用",
|
|
45
|
+
"Instructions(Optional)": "说明(可选)",
|
|
46
|
+
"joined the room": "已加入房间",
|
|
47
|
+
"left the room": "已离开房间",
|
|
48
|
+
"View": "查看",
|
|
49
|
+
"Recall": "撤回",
|
|
50
|
+
"Hide Translation": "隐藏翻译",
|
|
51
|
+
"Translate": "翻译",
|
|
52
|
+
"Collapse": "收起",
|
|
53
|
+
"Before you accept, she won’t know you've seen any messages.": "在你接受之前,她不会知道你已查看任何消息。",
|
|
54
|
+
"Allow {{name}} to send you messages and share your name and profile picture?": "允许 {{name}} 向你发送消息,并查看你的姓名和头像吗?",
|
|
55
|
+
"Not logged in": "未登录",
|
|
56
|
+
"User Name": "用户名",
|
|
57
|
+
"copy": "复制",
|
|
58
|
+
"PChip Reader": "PChip 阅读器",
|
|
59
|
+
"male": "男",
|
|
60
|
+
"female": "女",
|
|
61
|
+
"popular neutral": "热门(中性)",
|
|
62
|
+
"seconds": "秒",
|
|
63
|
+
"Send Code": "发送验证码",
|
|
64
|
+
"Add Profile": "添加个人资料",
|
|
65
|
+
"Practitioner": "导师",
|
|
66
|
+
"I want to practice languages and chat with others": "我想练习语言并与他人交流",
|
|
67
|
+
"Mate": "语伴",
|
|
68
|
+
"I can guide language learning and provide companionship": "我可以指导语言学习并提供陪伴",
|
|
69
|
+
"Unknown error": "未知错误",
|
|
70
|
+
"English": "英语",
|
|
71
|
+
"Chinese": "中文",
|
|
72
|
+
"Spanish": "西班牙语",
|
|
73
|
+
"Korean": "韩语",
|
|
74
|
+
"French": "法语",
|
|
75
|
+
"Japanese": "日语",
|
|
76
|
+
"German": "德语",
|
|
77
|
+
"Arabic": "阿拉伯语",
|
|
78
|
+
"Translation": "翻译",
|
|
79
|
+
"Interpretation": "释义",
|
|
80
|
+
"Key Vocabulary & Terms": "重点词汇与术语",
|
|
81
|
+
"Grammar": "语法",
|
|
82
|
+
"DM_ACL_REJECT": "请等待对方回复后再继续私信。",
|
|
83
|
+
"GROUP_ACL_REJECT": "您还未加入此群,请等待群主批准您的申请。",
|
|
84
|
+
"coming soon": "敬请期待",
|
|
85
|
+
"This feature is under": "该功能正在",
|
|
86
|
+
"development": "开发中",
|
|
87
|
+
"Back": "返回",
|
|
88
|
+
"Search contacts or groups": "搜索联系人或群组",
|
|
89
|
+
"Groups": "群组",
|
|
90
|
+
"No Results": "未找到结果",
|
|
91
|
+
"No Chats": "暂无聊天",
|
|
92
|
+
"ParrotMate": "ParrotMate",
|
|
93
|
+
"Speak Different": "说得与众不同",
|
|
94
|
+
"Offline mode": "离线模式",
|
|
95
|
+
"Change nickname": "修改昵称",
|
|
96
|
+
"UI Language": "界面语言",
|
|
97
|
+
"Word": "单词",
|
|
98
|
+
"Date": "日期",
|
|
99
|
+
"My bookshelf": "我的书架",
|
|
100
|
+
"Title too short": "标题太短",
|
|
101
|
+
"No books in your shelf yet": "书架中还没有书籍",
|
|
102
|
+
"Tap the search icon above to browse books and add them to your shelf!": "点击上方的搜索图标,浏览书籍并将它们加入书架!",
|
|
103
|
+
"Read with experts to help you understand,": "与专家一同阅读,帮助你更好地理解,",
|
|
104
|
+
"Comprehensive training in English listening and reading.": "全面提升英语听力与阅读能力。",
|
|
105
|
+
"Hi, {{nickName}}! Welcome!": "嗨,{{nickName}}!欢迎!",
|
|
106
|
+
"Browse library": "浏览书库",
|
|
107
|
+
"Add your own TXT/PDF": "添加您自己的 TXT/PDF 文件",
|
|
108
|
+
"Already have an account?": "已有账号?",
|
|
109
|
+
"Click here to login": "点击此处登录",
|
|
110
|
+
"We detected this is your first time using PChip Reader. Add some books!": "我们检测到这是您第一次使用 PChip Reader。快添加几本书吧!",
|
|
111
|
+
"Upload Book": "上传书籍",
|
|
112
|
+
"Click here to upload local EPUB/MOBI/PDF/TXT": "点击此处上传本地 EPUB/MOBI/PDF/TXT 文件",
|
|
113
|
+
"Only EPUB/MOBI/PDF/TXT is supported": "仅支持 EPUB、MOBI、PDF 和 TXT 格式",
|
|
114
|
+
"Upload successful": "上传成功",
|
|
115
|
+
"Book upload failed": "书籍上传失败",
|
|
116
|
+
"We only store your files locally!": "我们仅在本地存储您的文件!",
|
|
117
|
+
"New words": "生词",
|
|
118
|
+
"Total reading": "累计阅读",
|
|
119
|
+
"Today's reading": "今日阅读",
|
|
120
|
+
"Please choose an image file": "请选择图片文件",
|
|
121
|
+
"Image sent": "图片已发送",
|
|
122
|
+
"Failed to upload image": "图片上传失败",
|
|
123
|
+
"analyzing grammar structure": "正在分析语法结构",
|
|
124
|
+
"understanding pronunciation": "正在分析发音",
|
|
125
|
+
"optimizing and restructuring": "正在优化与重组",
|
|
126
|
+
"My QR Code": "我的二维码",
|
|
127
|
+
"Let friends scan to fill your username automatically": "让好友扫码即可自动填写你的用户名",
|
|
128
|
+
"Unable to load image": "无法加载图片",
|
|
129
|
+
"Loading image...": "正在加载图片...",
|
|
130
|
+
"Shared image": "已分享的图片",
|
|
131
|
+
"QR scanning is unavailable in this environment": "当前环境不支持二维码扫描",
|
|
132
|
+
"Camera access is not supported on this device": "此设备不支持相机访问",
|
|
133
|
+
"Unable to access the camera": "无法访问相机",
|
|
134
|
+
"No QR code found in the selected image": "所选图片中未发现二维码",
|
|
135
|
+
"Unable to read QR code from the selected image": "无法从所选图片读取二维码",
|
|
136
|
+
"Username captured from QR code": "已从二维码识别出用户名",
|
|
137
|
+
"Initializing camera...": "正在初始化相机...",
|
|
138
|
+
"Scan QR Code": "扫描二维码",
|
|
139
|
+
"Align the QR code within the frame to capture a username automatically.": "将二维码对准框内,即可自动识别并填写用户名。",
|
|
140
|
+
"Login Success": "登录成功",
|
|
141
|
+
"please enter your phone number": "请输入您的手机号码",
|
|
142
|
+
"Please enter your phone number": "请输入您的手机号码",
|
|
143
|
+
"Login": "登录",
|
|
144
|
+
"Terms&Conditions": "服务条款",
|
|
145
|
+
"and": "和",
|
|
146
|
+
"Privacy Policy": "隐私政策",
|
|
147
|
+
"Unregistered phone numbers will automatically create an account": "未注册的手机号将自动创建账号",
|
|
148
|
+
"Please enter the verification code": "请输入验证码",
|
|
149
|
+
"Send verification code": "发送验证码",
|
|
150
|
+
"Please enter the correct phone number": "请输入正确的手机号码",
|
|
151
|
+
"Verification code sent": "验证码已发送",
|
|
152
|
+
"Language": "语言",
|
|
153
|
+
"Skip": "跳过",
|
|
154
|
+
"Continue": "继续",
|
|
155
|
+
"Are you 18 or older?": "您是否已满18岁?",
|
|
156
|
+
"Yes": "是",
|
|
157
|
+
"No": "否",
|
|
158
|
+
"Please select language what you want to learn": "请选择您想学习的语言",
|
|
159
|
+
"Please enter your age": "请输入您的年龄",
|
|
160
|
+
"Age": "年龄",
|
|
161
|
+
"Please select your gender": "请选择您的性别",
|
|
162
|
+
"Female": "女性",
|
|
163
|
+
"Male": "男性",
|
|
164
|
+
"Your {{langShort}} name": "您的{{langShort}}名字",
|
|
165
|
+
"Create your own name or choose from the recommendations": "您可以自创名字,或从推荐中选择",
|
|
166
|
+
"Enter your nickname here...": "在此输入您的昵称...",
|
|
167
|
+
"Learning Language": "学习语言",
|
|
168
|
+
"Finish": "完成",
|
|
169
|
+
"Nickname is required": "请填写昵称",
|
|
170
|
+
"Nickname must be at least 3 characters": "昵称至少需要 3 个字符",
|
|
171
|
+
"Confirm": "确认",
|
|
172
|
+
"Account Phone": "账号手机号",
|
|
173
|
+
"Gender": "性别",
|
|
174
|
+
"Education": "学历",
|
|
175
|
+
"Job": "职业",
|
|
176
|
+
"Hobby": "兴趣爱好",
|
|
177
|
+
"Select your role": "请选择您的角色",
|
|
178
|
+
"Please choose your identity": "请选择您的身份",
|
|
179
|
+
"Profile Step: Nickname": "昵称",
|
|
180
|
+
"Profile Step: Learning Language": "学习的语言",
|
|
181
|
+
"Profile Step: Mother Tongue": "母语",
|
|
182
|
+
"By signing up, you agree with ": "注册即表示您同意 "
|
|
183
|
+
}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
{
|
|
2
|
+
"seconds": "秒",
|
|
3
|
+
"Send Code": "發送驗證碼",
|
|
4
|
+
"Add Profile": "新增個人檔案",
|
|
5
|
+
"Practitioner": "導師",
|
|
6
|
+
"I want to practice languages and chat with others": "我想練習語言並與他人聊天",
|
|
7
|
+
"Mate": "語言夥伴",
|
|
8
|
+
"I can guide language learning and provide companionship": "我可以協助語言學習並提供陪伴",
|
|
9
|
+
"Unknown error": "發生未知錯誤",
|
|
10
|
+
"English": "英文",
|
|
11
|
+
"Chinese": "中文",
|
|
12
|
+
"Spanish": "西班牙語",
|
|
13
|
+
"Korean": "韓語",
|
|
14
|
+
"French": "法語",
|
|
15
|
+
"Japanese": "日語",
|
|
16
|
+
"German": "德語",
|
|
17
|
+
"Arabic": "阿拉伯語",
|
|
18
|
+
"Translation": "翻譯",
|
|
19
|
+
"Interpretation": "解釋",
|
|
20
|
+
"Key Vocabulary & Terms": "重點詞彙與術語",
|
|
21
|
+
"Grammar": "文法",
|
|
22
|
+
"DM_ACL_REJECT": "請先等待對方回覆,才能繼續私訊。",
|
|
23
|
+
"GROUP_ACL_REJECT": "您還未加入此群組,請等待群主批准您的加入申請。",
|
|
24
|
+
"Tree Hole": "樹洞",
|
|
25
|
+
"Chat": "聊天",
|
|
26
|
+
"Contacts": "聯絡人",
|
|
27
|
+
"Remove Contact": "移除聯絡人",
|
|
28
|
+
"Exit Group": "離開群組",
|
|
29
|
+
"Chat Settings": "聊天設定",
|
|
30
|
+
"Awaiting friend confirmation": "等待好友確認",
|
|
31
|
+
"Revision failed": "修正失敗",
|
|
32
|
+
"Please use English": "請使用英文",
|
|
33
|
+
"Speech recognition failed. Please try again.": "語音辨識失敗,請再試一次。",
|
|
34
|
+
"analyzing...": "分析中...",
|
|
35
|
+
"Loading profiles...": "正在載入個人檔案...",
|
|
36
|
+
"Add Friend": "新增好友",
|
|
37
|
+
"Create Group": "建立群組",
|
|
38
|
+
"Logout": "登出",
|
|
39
|
+
"Copied username to clipboard": "已將使用者名稱複製到剪貼簿",
|
|
40
|
+
"Switch Identity": "切換身分",
|
|
41
|
+
"Function": "功能",
|
|
42
|
+
"Quote": "引用",
|
|
43
|
+
"Instructions(Optional)": "說明(選填)",
|
|
44
|
+
"joined the room": "已加入房間",
|
|
45
|
+
"left the room": "已離開房間",
|
|
46
|
+
"View": "查看",
|
|
47
|
+
"Recall": "收回",
|
|
48
|
+
"Hide Translation": "隱藏翻譯",
|
|
49
|
+
"Translate": "翻譯",
|
|
50
|
+
"Collapse": "收合",
|
|
51
|
+
"Before you accept, she won’t know you've seen any messages.": "在你接受前,對方不會知道你已讀任何訊息。",
|
|
52
|
+
"Allow {{name}} to send you messages and share your name and profile picture?": "允許 {{name}} 向你發送訊息,並查看你的姓名與頭像嗎?",
|
|
53
|
+
"Message": "訊息",
|
|
54
|
+
"Study": "學習",
|
|
55
|
+
"Discover": "發現",
|
|
56
|
+
"Me": "我",
|
|
57
|
+
"coming soon": "即將推出",
|
|
58
|
+
"This feature is under": "此功能正在",
|
|
59
|
+
"development": "開發中",
|
|
60
|
+
"Back": "返回",
|
|
61
|
+
"Search contacts or groups": "搜尋聯絡人或群組",
|
|
62
|
+
"Groups": "群組",
|
|
63
|
+
"No Results": "沒有搜尋結果",
|
|
64
|
+
"Say Hi": "打個招呼",
|
|
65
|
+
"Add": "加入好友",
|
|
66
|
+
"Find Friend": "搜尋好友",
|
|
67
|
+
"Input Username": "請輸入使用者名稱",
|
|
68
|
+
"my account: ": "我的帳號: ",
|
|
69
|
+
"Already Applied": "已申請",
|
|
70
|
+
"User is blocked": "該使用者已被封鎖",
|
|
71
|
+
"Failed": "操作失敗",
|
|
72
|
+
"Please select at least one member": "請至少選擇一位成員",
|
|
73
|
+
"Group created": "群組已建立",
|
|
74
|
+
"Group Name": "群組名稱",
|
|
75
|
+
"Group Name is required": "請輸入群組名稱",
|
|
76
|
+
"Loading...": "載入中...",
|
|
77
|
+
"Create": "建立",
|
|
78
|
+
"Group updated": "群組已更新",
|
|
79
|
+
"Update Group": "更新群組",
|
|
80
|
+
"Update": "更新",
|
|
81
|
+
"No Chats": "尚無對話",
|
|
82
|
+
"ParrotMate": "ParrotMate",
|
|
83
|
+
"Speak Different": "用不同的方式說話",
|
|
84
|
+
"Not logged in": "尚未登入",
|
|
85
|
+
"User Name": "使用者名稱",
|
|
86
|
+
"copy": "複製",
|
|
87
|
+
"Network is slow, enable offline mode?": "網路連線較慢,是否要啟用離線模式?",
|
|
88
|
+
"Enable offline mode": "啟用離線模式",
|
|
89
|
+
"PChip Reader": "PChip 閱讀器",
|
|
90
|
+
"male": "男性",
|
|
91
|
+
"female": "女性",
|
|
92
|
+
"popular neutral": "熱門/中性",
|
|
93
|
+
"Offline mode": "離線模式",
|
|
94
|
+
"Change nickname": "更改暱稱",
|
|
95
|
+
"UI Language": "介面語言",
|
|
96
|
+
"Word": "單字",
|
|
97
|
+
"Date": "日期",
|
|
98
|
+
"My bookshelf": "我的書架",
|
|
99
|
+
"Title too short": "標題太短",
|
|
100
|
+
"Modification successful": "修改成功",
|
|
101
|
+
"No books in your shelf yet": "你的書架尚無書籍",
|
|
102
|
+
"Tap the search icon above to browse books and add them to your shelf!": "點選上方的搜尋圖示,瀏覽書籍並加入至你的書架!",
|
|
103
|
+
"Read with experts to help you understand,": "與專家一同閱讀,幫助你理解,",
|
|
104
|
+
"Comprehensive training in English listening and reading.": "提供全方位的英語聽力與閱讀訓練。",
|
|
105
|
+
"Hi, {{nickName}}! Welcome!": "嗨,{{nickName}}!歡迎!",
|
|
106
|
+
"Browse library": "瀏覽書庫",
|
|
107
|
+
"Add your own TXT/PDF": "新增您自己的 TXT/PDF 檔案",
|
|
108
|
+
"Already have an account?": "已經有帳號了嗎?",
|
|
109
|
+
"Click here to login": "點此登入",
|
|
110
|
+
"We detected this is your first time using PChip Reader. Add some books!": "我們偵測到這是您第一次使用 PChip Reader,快新增幾本書吧!",
|
|
111
|
+
"Upload Book": "上傳書籍",
|
|
112
|
+
"Click here to upload local EPUB/MOBI/PDF/TXT": "點此上傳本機 EPUB/MOBI/PDF/TXT 檔案",
|
|
113
|
+
"Only EPUB/MOBI/PDF/TXT is supported": "僅支援 EPUB/MOBI/PDF/TXT 檔案",
|
|
114
|
+
"Upload successful": "上傳成功",
|
|
115
|
+
"Book upload failed": "書籍上傳失敗",
|
|
116
|
+
"We only store your files locally!": "我們僅在本機儲存您的檔案!",
|
|
117
|
+
"New words": "新單字",
|
|
118
|
+
"Total reading": "累計閱讀",
|
|
119
|
+
"Today's reading": "今日閱讀",
|
|
120
|
+
"Please choose an image file": "請選取圖片檔案",
|
|
121
|
+
"Image sent": "圖片已傳送",
|
|
122
|
+
"Failed to upload image": "圖片上傳失敗",
|
|
123
|
+
"analyzing grammar structure": "正在分析語法結構",
|
|
124
|
+
"understanding pronunciation": "正在分析發音",
|
|
125
|
+
"optimizing and restructuring": "正在優化與重組",
|
|
126
|
+
"My QR Code": "我的 QR 碼",
|
|
127
|
+
"Let friends scan to fill your username automatically": "讓朋友掃描即可自動填入你的使用者名稱",
|
|
128
|
+
"Unable to load image": "無法載入圖片",
|
|
129
|
+
"Loading image...": "正在載入圖片...",
|
|
130
|
+
"Shared image": "分享的圖片",
|
|
131
|
+
"QR scanning is unavailable in this environment": "此環境無法使用 QR 掃描功能",
|
|
132
|
+
"Camera access is not supported on this device": "此裝置不支援相機存取",
|
|
133
|
+
"Unable to access the camera": "無法存取相機",
|
|
134
|
+
"No QR code found in the selected image": "在所選圖片中找不到 QR 碼",
|
|
135
|
+
"Unable to read QR code from the selected image": "無法從所選圖片讀取 QR 碼",
|
|
136
|
+
"Username captured from QR code": "已從 QR 碼擷取到使用者名稱",
|
|
137
|
+
"Initializing camera...": "正在初始化相機...",
|
|
138
|
+
"Scan QR Code": "掃描 QR 碼",
|
|
139
|
+
"Align the QR code within the frame to capture a username automatically.": "將 QR 碼對準框內,即可自動擷取使用者名稱。",
|
|
140
|
+
"Login Success": "登入成功",
|
|
141
|
+
"please enter your phone number": "請輸入您的手機號碼",
|
|
142
|
+
"Please enter your phone number": "請輸入您的手機號碼",
|
|
143
|
+
"Login": "登入",
|
|
144
|
+
"Terms&Conditions": "服務條款",
|
|
145
|
+
"and": "以及",
|
|
146
|
+
"Privacy Policy": "隱私政策",
|
|
147
|
+
"Unregistered phone numbers will automatically create an account": "未註冊的手機號碼將自動建立新帳號",
|
|
148
|
+
"Please enter the verification code": "請輸入驗證碼",
|
|
149
|
+
"Send verification code": "發送驗證碼",
|
|
150
|
+
"Please enter the correct phone number": "請輸入正確的手機號碼",
|
|
151
|
+
"Verification code sent": "驗證碼已發送",
|
|
152
|
+
"Language": "語言",
|
|
153
|
+
"Skip": "跳過",
|
|
154
|
+
"Continue": "繼續",
|
|
155
|
+
"Are you 18 or older?": "您是否已滿18歲?",
|
|
156
|
+
"Yes": "是",
|
|
157
|
+
"No": "否",
|
|
158
|
+
"Please select language what you want to learn": "請選擇您想學習的語言",
|
|
159
|
+
"Please enter your age": "請輸入您的年齡",
|
|
160
|
+
"Age": "年齡",
|
|
161
|
+
"Please select your gender": "請選擇您的性別",
|
|
162
|
+
"Female": "女性",
|
|
163
|
+
"Male": "男性",
|
|
164
|
+
"Your {{langShort}} name": "您的 {{langShort}} 名稱",
|
|
165
|
+
"Create your own name or choose from the recommendations": "自訂名稱或從建議中選擇",
|
|
166
|
+
"Enter your nickname here...": "在此輸入您的暱稱...",
|
|
167
|
+
"Learning Language": "學習語言",
|
|
168
|
+
"Finish": "完成",
|
|
169
|
+
"Nickname is required": "請填寫暱稱",
|
|
170
|
+
"Nickname must be at least 3 characters": "暱稱至少需 3 個字元",
|
|
171
|
+
"Confirm": "確認",
|
|
172
|
+
"Account Phone": "帳戶電話",
|
|
173
|
+
"Gender": "性別",
|
|
174
|
+
"Education": "學歷",
|
|
175
|
+
"Job": "職業",
|
|
176
|
+
"Hobby": "興趣",
|
|
177
|
+
"Select your role": "請選擇您的角色",
|
|
178
|
+
"Please choose your identity": "請選擇您的身份",
|
|
179
|
+
"Profile Step: Nickname": "暱稱",
|
|
180
|
+
"Profile Step: Learning Language": "學習語言",
|
|
181
|
+
"Profile Step: Mother Tongue": "母語",
|
|
182
|
+
"By signing up, you agree with ": "註冊即表示您同意 "
|
|
183
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { AccountState, Profile } from "@pmate/meta"
|
|
2
|
+
|
|
3
|
+
export enum AccountLifecycleState {
|
|
4
|
+
Idle = "idle",
|
|
5
|
+
Checking = "checking",
|
|
6
|
+
Authenticated = "authenticated",
|
|
7
|
+
Unauthenticated = "unauthenticated",
|
|
8
|
+
ProfileUninitialized = "profile-uninitialized",
|
|
9
|
+
ProfileInitializing = "profile-initializing",
|
|
10
|
+
ProfileReady = "profile-ready",
|
|
11
|
+
LoggingIn = "logging-in",
|
|
12
|
+
LoggingOut = "logging-out",
|
|
13
|
+
Error = "error",
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export type AccountSnapshot = {
|
|
17
|
+
state: AccountLifecycleState
|
|
18
|
+
account: AccountState | null
|
|
19
|
+
accountId: string | null
|
|
20
|
+
error: Error | null
|
|
21
|
+
profiles: Profile[]
|
|
22
|
+
profile: Profile | null
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export type AuthBehaviors = {
|
|
26
|
+
authBehavior: "redirect" | "prompt"
|
|
27
|
+
requiresAuth: boolean
|
|
28
|
+
}
|
package/src/types/app.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type ProfileStep = {
|
|
2
|
+
type:
|
|
3
|
+
| "nickname"
|
|
4
|
+
| "learning-language"
|
|
5
|
+
| "mother-tongue"
|
|
6
|
+
| "gender"
|
|
7
|
+
| "is-adult"
|
|
8
|
+
| "age"
|
|
9
|
+
| "identity"
|
|
10
|
+
title: string
|
|
11
|
+
required: boolean
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface AppConfig {
|
|
15
|
+
id: string
|
|
16
|
+
name: string
|
|
17
|
+
icon: string
|
|
18
|
+
background: string
|
|
19
|
+
themeColor?: string
|
|
20
|
+
welcomeText: string
|
|
21
|
+
profiles: ProfileStep[]
|
|
22
|
+
}
|