Compare commits

...

361 Commits

Author SHA1 Message Date
rdmclin2 ab508705b1 fix: causal chat desciption not respond to language change 2025-11-05 21:47:07 +08:00
rdmclin2 22da6d4e6b fix: login cancel experience optimization 2025-11-05 21:35:07 +08:00
rdmclin2 f3f64be9c7 fix: type error 2025-11-05 21:23:38 +08:00
rdmclin2 e8ddfc7397 fix: i18n script diff error 2025-11-05 21:22:27 +08:00
rdmclin2 ed03bebc6b chore: update setting feedback i18n 2025-11-05 20:35:59 +08:00
rdmclin2 2086f742ef feat: add mailTo function as issue feedback 2025-11-05 17:32:02 +08:00
rdmclin2 8642d3dfdb feat: open link with inner browser 2025-11-05 16:39:04 +08:00
rdmclin2 de72121617 feat: open terms and privacy page with inner web browser 2025-11-05 16:17:03 +08:00
canisminor1990 1f81dd074b feat: add NativePageContainer 2025-11-04 23:25:40 +08:00
canisminor1990 a6bc59c911 feat: update Image cache 2025-11-04 23:03:40 +08:00
canisminor1990 7d4cc1851c feat: add tool 2025-11-04 22:39:40 +08:00
rdmclin2 58e8dfb02b chore: add ios deploymentTarget restriction 2025-11-04 21:53:45 +08:00
canisminor1990 72fb1b489e feat: add cot 2025-11-04 21:25:33 +08:00
canisminor1990 13511b4d50 feat: add cot 2025-11-04 21:23:39 +08:00
canisminor1990 7a38488976 feat: add cot 2025-11-04 21:21:18 +08:00
canisminor1990 5f1a03b593 feat: add cot 2025-11-04 21:14:54 +08:00
canisminor1990 5f0079500b feat: add cot 2025-11-04 20:59:09 +08:00
canisminor1990 5c7e62b2a2 feat: add save image 2025-11-04 20:36:17 +08:00
canisminor1990 c7e86704af feat: add file list render 2025-11-04 20:03:46 +08:00
canisminor1990 f5ae77d3d8 feat: add img list render 2025-11-04 20:01:48 +08:00
canisminor1990 f9f3636659 feat: add img list render 2025-11-04 19:44:30 +08:00
canisminor1990 ed8fe88f98 feat: add edit 2025-11-04 18:18:47 +08:00
canisminor1990 54814e15e4 fix: fix emoji render in streaming 2025-11-04 17:17:41 +08:00
canisminor1990 7177ecfc4f fix: fix Image style 2025-11-04 17:09:54 +08:00
canisminor1990 da23c0fb99 refactor: chat components 2025-11-04 16:39:40 +08:00
canisminor1990 6525dd689b refactor: refactor router 2025-11-04 16:17:27 +08:00
canisminor1990 14dca36f35 fix: fix color token output 2025-11-04 15:43:15 +08:00
canisminor1990 c372183019 fix: fix color token output 2025-11-04 15:27:34 +08:00
canisminor1990 09654b9039 refacotr: refacotr layout 2025-11-04 14:59:43 +08:00
canisminor1990 e87d4595f0 refacotr: refacotr main layout 2025-11-04 14:49:39 +08:00
canisminor1990 e99f47f5ef style: fix chat LinearGradient 2025-11-04 13:07:08 +08:00
canisminor1990 8fb965fcf9 style: update loading toast 2025-11-04 13:03:15 +08:00
canisminor1990 0ce691f6ca style: update sidebar blur view 2025-11-03 18:09:18 +08:00
canisminor1990 64d6f47fc0 style: update sidebar blur view 2025-11-03 18:09:18 +08:00
Tsuki f1b0eb771b fix(mobile): topic drawer stuttering 2025-11-03 18:02:39 +08:00
canisminor1990 197c67d4c6 feat: add MaterialFileTypeIcon 2025-11-03 17:17:19 +08:00
canisminor1990 43dd8d2f0b feat: add MaterialFileTypeIcon 2025-11-03 17:13:56 +08:00
canisminor1990 3acf3fea36 fix: fix markdown inline-block 2025-11-03 16:52:47 +08:00
canisminor1990 69e2d0ff8e feat: add Video 2025-11-03 14:14:53 +08:00
canisminor1990 b62a4e7f35 feat: update LoadingDots style 2025-11-03 13:05:18 +08:00
canisminor1990 96452809c0 feat: add smooth animated Markdown in streaming 2025-11-03 12:53:18 +08:00
Rdmclin2 7d023da072 🐛 fix: fix eas custom build error (#10006)
* chore: add back pnpm version

* chore: remove custom build
2025-11-03 12:21:48 +08:00
Tsuki 9e8a1bd956 chore(mobile): update Select.tsx 2025-11-01 19:22:13 +08:00
Tsuki 2b6c6d70ae chore(mobile): update model providers 2025-11-01 19:18:36 +08:00
Tsuki 4e03b47a2c refactor(mobile): scrollable title for select 2025-11-01 19:18:11 +08:00
Tsuki 1507de6d4c refactor(mobile): migrate ai models from model-bank package 2025-11-01 16:07:56 +08:00
canisminor1990 0546dd3f37 fix: build 2025-10-31 22:30:29 +08:00
canisminor1990 3c0601bdce chore: update readme 2025-10-31 22:15:01 +08:00
canisminor1990 dcd6190c38 fix: fix style 2025-10-31 21:50:45 +08:00
canisminor1990 593f388db3 fix: fix style 2025-10-31 21:36:39 +08:00
canisminor1990 e6db53a5b7 fix: fix style 2025-10-31 21:20:10 +08:00
canisminor1990 0902d55c50 fix: fix style 2025-10-31 21:19:41 +08:00
canisminor1990 ec03e49383 chore: update readme 2025-10-31 21:13:27 +08:00
canisminor1990 a4b6520348 chore: update readme 2025-10-31 21:04:03 +08:00
canisminor1990 dd8e4124f8 chore: update readme 2025-10-31 20:59:49 +08:00
rdmclin2 0ed75c134e chore: remove ai generated docs 2025-10-31 20:57:30 +08:00
rdmclin2 720c58f351 Merge branch 'feat/mobile-app' of github.com:lobehub/lobe-chat into feat/mobile-app 2025-10-31 20:56:21 +08:00
rdmclin2 1b87a5ac95 chore: assemble md files to docs 2025-10-31 20:46:39 +08:00
canisminor1990 059f4cef02 chore: update license 2025-10-31 20:45:45 +08:00
rdmclin2 ec69abc51d chore: remove .env.mobile 2025-10-31 20:00:19 +08:00
rdmclin2 236b61de20 chore: remove and adjust unnecessary code 2025-10-31 19:48:42 +08:00
canisminor1990 16888531b0 style: update dropdown 2025-10-31 19:22:16 +08:00
canisminor1990 5664888503 style: update dropdown 2025-10-31 19:17:13 +08:00
canisminor1990 e262925384 feat: add topic rename 2025-10-31 19:01:31 +08:00
Rdmclin2 0ca4b7db24 🔨 chore: add custom build webhook & optimize update (#9955)
* chore: try ios build

* feat: support destroy message

* feat: Toast support config and destory with config

* chore: add custom build for development and try

* chore: add preview and android custom build
2025-10-31 18:24:33 +08:00
canisminor1990 b4de17f8ef feat: add session group manager 2025-10-31 17:02:34 +08:00
canisminor1990 93aa9a50ae feat: add session group 2025-10-31 15:04:12 +08:00
Tsuki 7a4ad5d133 fic(mobile): provider checker 2025-10-31 15:02:05 +08:00
canisminor1990 182873b9d2 feat: add topic group 2025-10-31 13:21:25 +08:00
canisminor1990 7329aa54aa style: fix Appearance 2025-10-31 12:57:35 +08:00
canisminor1990 3472db8110 style: fix some ui isseus 2025-10-31 12:41:43 +08:00
canisminor1990 d2f8ef804c style: updat FlashList 2025-10-31 12:06:48 +08:00
canisminor1990 e40e8cdb0d style: updat FlashList 2025-10-31 11:59:47 +08:00
canisminor1990 6effba00ed style: fix android nav bar 2025-10-31 11:06:27 +08:00
canisminor1990 9b292f34e8 style: fix android nav bar 2025-10-31 10:54:59 +08:00
canisminor1990 b201208648 style: update playground 2025-10-31 00:42:42 +08:00
canisminor1990 e20a5f49a8 style: update playground 2025-10-31 00:25:42 +08:00
canisminor1990 2ac8db3d0a style: fix border 2025-10-30 23:23:25 +08:00
canisminor1990 5baf7e0058 style: fix border 2025-10-30 23:16:37 +08:00
canisminor1990 74556d1b1f style: fix color 2025-10-30 23:09:04 +08:00
canisminor1990 f798aec8d7 style: auto close keyboard on send 2025-10-30 22:50:04 +08:00
canisminor1990 adfae9bf0f style: update sidebar style 2025-10-30 22:38:44 +08:00
canisminor1990 a241f93782 style: update sidebar style 2025-10-30 22:36:05 +08:00
Tsuki 2c27828c3c chore(mobile): i18n 2025-10-30 21:04:45 +08:00
Tsuki 34eb80faf8 fix(mobile): topic drawer stuttering 2025-10-30 21:01:16 +08:00
canisminor1990 a766ad87d7 style: fix sendbutton in preview 2025-10-30 20:49:30 +08:00
Rdmclin2 ea6c3ea81b feat: add manual update function (#9932)
* feat: manual update

* chore: add update command

* fix: avoid gesture in login page
2025-10-30 20:31:17 +08:00
canisminor1990 7bef57b0e8 style: fix style 2025-10-30 20:12:13 +08:00
Tsuki 92b5ef49be feat(mobile): add favorite functionality for topics 2025-10-30 18:55:15 +08:00
Tsuki 8fb01f595a fix(mobile): system role editor 2025-10-30 18:07:32 +08:00
Tsuki 8bac88b6d0 fix(moble): provider info section title 2025-10-30 17:03:28 +08:00
Tsuki 79fa8cc574 fix(mobile): provider section & screen 2025-10-30 17:02:26 +08:00
Tsuki ce314b693c fix(mobile): merge.ts 2025-10-30 16:52:08 +08:00
canisminor1990 78d10d5ff1 style: update topic title 2025-10-30 00:50:35 +08:00
canisminor1990 e29e4187ed style: update send button 2025-10-30 00:46:00 +08:00
canisminor1990 a16c337fae style: update setting 2025-10-30 00:04:59 +08:00
canisminor1990 73305b3922 style: update welcome message 2025-10-30 00:03:00 +08:00
canisminor1990 c5602ee74d style: update welcome message 2025-10-29 23:53:15 +08:00
canisminor1990 571e9ef4da style: fix md list 2025-10-29 23:34:45 +08:00
canisminor1990 7e42a22249 style: update sidebar style 2025-10-29 22:00:14 +08:00
canisminor1990 6a18a2f7bb style: update sidebar style 2025-10-29 22:00:14 +08:00
canisminor1990 b7ea3f3a1e style: update sidebar style 2025-10-29 22:00:14 +08:00
Rdmclin2 a44d9e1e8b 🐛 fix: android auth login callback page (#9928)
* chore: remove react-svg compatity

* fix: switch account message alert

* chore: Preferring Chrome Custom Tabs for auth session

* chore: ignore mobile branch build

* chore: remove unnecessary console log

* fix: android callback page

* chore: i18n

* chore: update i18n files

* fix: android.adaptiveIcon.backgroundColor should be a 6 character
2025-10-29 21:49:56 +08:00
canisminor1990 55a7f3f4c6 fix: fix keyboard view 2025-10-29 21:18:57 +08:00
canisminor1990 489c73db59 style: update style 2025-10-29 20:43:31 +08:00
canisminor1990 6f7c31c6d1 style: update color setting style 2025-10-29 20:37:18 +08:00
canisminor1990 553d29e644 style: update color setting style 2025-10-29 20:23:48 +08:00
canisminor1990 6f46eecc2d style: update color setting style 2025-10-29 20:17:00 +08:00
canisminor1990 33ce9175b2 style: update inbox style 2025-10-29 18:05:17 +08:00
canisminor1990 90766129e6 style: update time style 2025-10-29 18:03:51 +08:00
canisminor1990 83dd8f7bbb style: update session list 2025-10-29 18:00:40 +08:00
canisminor1990 3c07c48994 fix: fix some style problem 2025-10-29 17:52:59 +08:00
canisminor1990 d9963fc3de style: update alert style 2025-10-29 17:25:18 +08:00
canisminor1990 95ecfc0f03 fix: fix long press 2025-10-29 16:37:42 +08:00
canisminor1990 e56ff6f41d style: update list style 2025-10-29 15:54:47 +08:00
canisminor1990 85b3dd872f style: update list style 2025-10-29 15:52:38 +08:00
canisminor1990 92eb695bf9 feat: update session list style 2025-10-29 15:36:09 +08:00
canisminor1990 56a00f8359 feat: add search 2025-10-29 14:57:10 +08:00
Tsuki 63cc148aac feat(mobile): scrollable title 2025-10-29 13:37:10 +08:00
canisminor1990 d9cb5be5b0 style: remove fluent emoji webview 2025-10-29 12:36:38 +08:00
canisminor1990 c61c95b416 chore: clean 2025-10-29 00:47:36 +08:00
canisminor1990 73b0c1cf20 chore: clean 2025-10-29 00:45:38 +08:00
canisminor1990 ee70dfccd9 style: update drawerOverlay 2025-10-29 00:40:30 +08:00
canisminor1990 4c1d58102a style: topic list 2025-10-29 00:35:48 +08:00
canisminor1990 89c8180694 style: update session loading 2025-10-29 00:31:20 +08:00
canisminor1990 f34d1ffb50 style: update markdown marginBlock 2025-10-29 00:26:38 +08:00
canisminor1990 431331b38f fix: Fix Highlighter in stream 2025-10-29 00:24:16 +08:00
canisminor1990 702818c17b feat: add TaskList 2025-10-29 00:02:17 +08:00
canisminor1990 7184eeaee0 feat: add image and video support 2025-10-28 22:10:37 +08:00
Rdmclin2 7ff34439ca 🔨 chore: remove android screen restriction (#9912)
* chore: add large screen support for android

* chore: add large size compatible

* chore: remove tablet restriction
2025-10-28 21:45:20 +08:00
canisminor1990 9b8660c78f fix: fix some issues 2025-10-28 20:36:19 +08:00
canisminor1990 a1e5f23327 style: streamdown 2025-10-28 18:23:05 +08:00
canisminor1990 434caf00c3 style: remove error 2025-10-28 18:14:50 +08:00
canisminor1990 34f2c8a192 style: remove error 2025-10-28 18:10:49 +08:00
canisminor1990 b7f63d3598 style: fix some style 2025-10-28 17:42:44 +08:00
canisminor1990 6fdbc71868 style: new markdown 2025-10-28 17:08:35 +08:00
canisminor1990 22fd5cc32c style: new markdown 2025-10-28 16:05:54 +08:00
Tsuki 17ac2dffe9 feat(mobile): make pressable for system role selection 2025-10-28 15:14:37 +08:00
Tsuki a6c1c9e36f fix(mobile): cache issue 2025-10-28 13:39:42 +08:00
Tsuki a5592d205d chore(mobile): change type 2025-10-28 13:39:42 +08:00
Rdmclin2 629d846d45 chore: disable android tablet support temporarily (#9911)
* chore: trigger deployment [deploy]

* chore: trigger deployment [deploy]

* chore: disable android tablet

* fix: disable tablet

* chore: add compatible-screens
2025-10-28 13:12:25 +08:00
Tsuki cf69336aa6 feat(mobile): add new topic 2025-10-28 10:52:40 +08:00
Tsuki 6f7d8b7968 fix(mobile): token tag 2025-10-28 10:52:40 +08:00
canisminor1990 d3fd5c6267 style: fix highlighter scroll 2025-10-28 10:52:40 +08:00
Tsuki 433515691a fix(mobile): provider info section 2025-10-28 10:52:40 +08:00
canisminor1990 4e92d3e81d style: replace expo-av to expo-video 2025-10-28 10:52:40 +08:00
Tsuki bee7e0786f fix(mobile): provider setting change 2025-10-28 10:52:40 +08:00
canisminor1990 e1b3d6b818 style: fix android edge-to-edge 2025-10-28 10:52:40 +08:00
canisminor1990 a552ace21e style: fix KeyboardAvoidingView 2025-10-28 10:52:40 +08:00
canisminor1990 1f3986b72d style: fix cell 2025-10-28 10:52:40 +08:00
canisminor1990 eac2655d34 style: fix cell 2025-10-28 10:52:40 +08:00
canisminor1990 61fa81ed56 style: update icon 2025-10-28 10:52:40 +08:00
canisminor1990 c3e9d39dfa style: update markdown 2025-10-28 10:52:40 +08:00
canisminor1990 fa2e81110a style: update markdown 2025-10-28 10:52:40 +08:00
canisminor1990 a0a0b780d2 style: update markdown 2025-10-28 10:52:40 +08:00
canisminor1990 934279ab23 style: update markdown 2025-10-28 10:52:40 +08:00
canisminor1990 aa75df4be7 style: update highlight 2025-10-28 10:52:40 +08:00
canisminor1990 b3daa1a59c style: update highlight 2025-10-28 10:52:40 +08:00
canisminor1990 df1921c65e style: fix longpress effect 2025-10-28 10:52:40 +08:00
canisminor1990 ae89f18a07 style: fix longpress effect 2025-10-28 10:52:40 +08:00
Tsuki 5941025eb9 feat(mobile): enhance haptic feedback and improve session switch responsiveness 2025-10-28 10:52:39 +08:00
canisminor1990 821d3b001d style: update chatlist 2025-10-28 10:52:39 +08:00
canisminor1990 d4f6737fe9 style: update chatlist 2025-10-28 10:52:39 +08:00
canisminor1990 e45fd8fcf6 style: fix input style in anderoid 2025-10-28 10:52:39 +08:00
canisminor1990 79c74d2a0e style: fix style in anderoid 2025-10-28 10:52:39 +08:00
canisminor1990 c9f7aa0c28 style: update auto focus 2025-10-28 10:52:39 +08:00
Tsuki b4931047e0 fix(mobile): topic icon 2025-10-28 10:52:39 +08:00
canisminor1990 ddfe652eb6 style: update chat bubble 2025-10-28 10:52:39 +08:00
Tsuki 93ea3a4a90 fix(mobile): android eas build error 2025-10-28 10:52:39 +08:00
Rdmclin2 6369e8bf52 chore: optimize app performance and style (#9860)
* chore: optimize content size exchange

* chore: adjust setting item max width

* chore: claim not support tablet
2025-10-28 10:52:39 +08:00
Tsuki ec7f572c35 chore(mobile): update lock 2025-10-28 10:52:39 +08:00
canisminor1990 baf6bc10b0 style: update discover detail and chatlist 2025-10-28 10:52:39 +08:00
canisminor1990 b806270f21 style: update discover detail and chatlist 2025-10-28 10:52:39 +08:00
canisminor1990 370674b8cc style: update discover detail and chatlist 2025-10-28 10:52:39 +08:00
canisminor1990 2b5bec4e48 style: update discover detail and chatlist 2025-10-28 10:52:39 +08:00
canisminor1990 195cc12be1 style: update discover detail and chatlist 2025-10-28 10:52:39 +08:00
canisminor1990 34b05755a3 style: update discover list 2025-10-28 10:52:39 +08:00
canisminor1990 ebdd442e91 style: add liquid glass effect 2025-10-28 10:52:39 +08:00
canisminor1990 f9cd93020c style: add liquid glass effect 2025-10-28 10:52:39 +08:00
canisminor1990 46a56d809b style: update scroll style 2025-10-28 10:52:39 +08:00
canisminor1990 f602ecc3f6 style: update scroll style 2025-10-28 10:52:39 +08:00
canisminor1990 c3cebc30bf style: update scroll style 2025-10-28 10:52:38 +08:00
canisminor1990 ebc62a30cb style: update scroll style 2025-10-28 10:52:38 +08:00
canisminor1990 277799e2d5 style: add landing video 2025-10-28 10:52:38 +08:00
Rdmclin2 4703fb3703 feat: add swr and image cache & support switch account (#9844)
* chore: trigger deployment [deploy]

* chore: trigger deployment [deploy]

* chore: trigger deployment [deploy]

* chore: trigger deployment [deploy]

* chore: revert back version

* chore: add dotenv to dependencies

* fix: eas build local problem

* feat: add SWR Cache

* chore: use expo image to cache in disk

* chore: remove animation avatar and fix developer selfhost redirect

* chore: use instant switch

* chore:add release cmd

* feat: add switch account function
2025-10-28 10:52:38 +08:00
canisminor1990 9642555318 style: fix appearance 2025-10-28 10:52:38 +08:00
Tsuki f33b6f162a feat(mobile): enable instant scroll on topic switch 2025-10-28 10:52:38 +08:00
Tsuki 7d34140a91 style(mobile): AddButton.tsx 2025-10-28 10:52:38 +08:00
Tsuki af1d09da83 feat(mobile): remove topic 2025-10-28 10:52:38 +08:00
Tsuki 13166a24b1 feat(mobile): support pin session 2025-10-28 10:52:38 +08:00
Tsuki 87866ac387 fix(mobile): i18n 2025-10-28 10:52:38 +08:00
canisminor1990 014782d0ba feat: update Tag 2025-10-28 10:52:38 +08:00
canisminor1990 102e2c41e0 feat: update Tag 2025-10-28 10:52:38 +08:00
canisminor1990 d3b2c792f6 feat: add Dropdown 2025-10-28 10:52:38 +08:00
canisminor1990 cca9b04544 style: update Skeleton 2025-10-28 10:52:38 +08:00
canisminor1990 06c3f6f255 style: update session list 2025-10-28 10:52:38 +08:00
canisminor1990 4652fc2c4a style: fix setting page 2025-10-28 10:52:38 +08:00
canisminor1990 0fb69ae068 style: fix auth page 2025-10-28 10:52:37 +08:00
canisminor1990 1ff83a7e61 style: update button 2025-10-28 10:52:37 +08:00
canisminor1990 49557e202e style: update button 2025-10-28 10:52:37 +08:00
canisminor1990 9011d4169a style: update auth 2025-10-28 10:52:37 +08:00
Tsuki e9848cce2a fix(mobile): scrollbar 2025-10-28 10:52:37 +08:00
Tsuki 0fce82c42b chore(mobile): update add agent 2025-10-28 10:52:37 +08:00
Tsuki c687111769 chore(mobile): update i18n 2025-10-28 10:52:37 +08:00
Tsuki ce2ac7c849 fix(mobile): resolve stop button issues by separating loading and disabled states 2025-10-28 10:52:37 +08:00
Tsuki 49e180e88b feat(mobile): support update session meta 2025-10-28 10:52:37 +08:00
Tsuki 598646818a feat: support add agent 2025-10-28 10:52:37 +08:00
Tsuki afc87764ab fix(mobile): topic issue 2025-10-28 10:52:37 +08:00
canisminor1990 30921420dc style: update color 2025-10-28 10:52:37 +08:00
canisminor1990 1c0c5c0c72 style: add onLongPress 2025-10-28 10:52:37 +08:00
Rdmclin2 ae9ed3cd50 chore: pick version from package.json (#9758)
* chore: update pnpm-lock ymal

* chore: pick version from package.json
2025-10-28 10:52:37 +08:00
canisminor1990 d96a5792bc style: update model select 2025-10-28 10:52:37 +08:00
canisminor1990 90e48ac050 style: update chat style 2025-10-28 10:52:37 +08:00
canisminor1990 951c57518f style: update chat style 2025-10-28 10:52:37 +08:00
canisminor1990 0ef8753c75 fix: fix android custom font 2025-10-28 10:52:36 +08:00
Rdmclin2 6506cd7d8e feat: support ios 26 (#9753)
* feat: support ios 26 icon

* chore: fix lint error

* add prompts package to workspace

* chore: add node options for preview build

* chore: optimize custom server redirect
2025-10-28 10:52:36 +08:00
canisminor1990 aaff1cc950 fix: fix android style 2025-10-28 10:52:36 +08:00
canisminor1990 90c0e00e82 style: update chat style 2025-10-28 10:52:36 +08:00
canisminor1990 3d55c0dd2d feat: add BottomSheet and Select 2025-10-28 10:52:36 +08:00
canisminor1990 1ad3b438d3 fix: fix neutralColor Setting 2025-10-28 10:52:36 +08:00
canisminor1990 c8ff06211a style: update Markdown style 2025-10-28 10:52:36 +08:00
Tsuki 430d7a5138 feat: integrate BottomSheetModal & reactor Checker 2025-10-28 10:52:36 +08:00
canisminor1990 0239b38038 fix: fix KeyboardAvoidingView 2025-10-28 10:52:36 +08:00
canisminor1990 bd49a32ccf style: update style 2025-10-28 10:52:36 +08:00
canisminor1990 109013b6e3 style: update Model Setting 2025-10-28 10:52:36 +08:00
canisminor1990 23fd49bf09 style: update Model Setting 2025-10-28 10:52:36 +08:00
Rdmclin2 d4b6543220 chore: form refact with Form component (#9737)
* feat: add icons for developer page

* chore: refactor provider form page with Form component
2025-10-28 10:52:36 +08:00
canisminor1990 88b872b62f style: update Input 2025-10-28 10:52:36 +08:00
canisminor1990 8d25c95dfc style: update Input 2025-10-28 10:52:36 +08:00
Tsuki bd49702901 feat(mobile): update mobile router and dependencies 2025-10-28 10:52:36 +08:00
Tsuki bb19818f21 chore(mobile): refactor mobile router 2025-10-28 10:52:35 +08:00
canisminor1990 645ac37cdb feat: add TabView 2025-10-28 10:52:35 +08:00
canisminor1990 68a2e1a4fa style: update Switch 2025-10-28 10:52:35 +08:00
Rdmclin2 e19b6d5fe1 feat: support language display names (#9718)
* chore: remove gitignore

* chore: remove unnecessary  pkg content check

* feat: support language display names

* chore: update pnpm lock

* chore: update package yaml
2025-10-28 10:52:35 +08:00
Tsuki d4d9393789 fix(mobile): eas build 2025-10-28 10:52:35 +08:00
canisminor1990 0f7166685e upgrade 2025-10-28 10:52:35 +08:00
Tsuki 0880e4590f chore(mobile): add reinstall script 2025-10-28 10:52:35 +08:00
canisminor1990 8e861175c7 upgrade 2025-10-28 10:52:35 +08:00
canisminor1990 627dc76fe2 🐛 fix: Fix Markdown 2025-10-28 10:52:35 +08:00
canisminor1990 869ca49ba1 🔧 chore: Update pre-commit 2025-10-28 10:52:35 +08:00
canisminor1990 f7dc6be85c ♻️ refactor: Refactor FC to memo 2025-10-28 10:52:35 +08:00
Tsuki 9e2e28505e chore(mobile): update lock 2025-10-28 10:52:35 +08:00
canisminor1990 760957514b 🔧 chore: Update pre-commit 2025-10-28 10:52:35 +08:00
canisminor1990 ef4e0f3771 upgrade 2025-10-28 10:52:35 +08:00
canisminor1990 fec639349d upgrade 2025-10-28 10:52:35 +08:00
canisminor1990 335a55c44c upgrade 2025-10-28 10:52:35 +08:00
Tsuki f6c576b314 chore(mobile): update mobile router imports to use lambda 2025-10-28 10:52:35 +08:00
canisminor1990 3bd6361a55 🔧 chore: Fix type check 2025-10-28 10:52:34 +08:00
Tsuki d3554a1462 chore(mobile): migrate mmkv 2025-10-28 10:52:34 +08:00
canisminor1990 108607c15a ♻️ refactor(wip): Refactor Provider settings 2025-10-28 10:52:34 +08:00
canisminor1990 c753a60cc9 ♻️ refactor(wip): Refactor setting 2025-10-28 10:52:34 +08:00
canisminor1990 fc971d99aa 🔧 chore: Rebase 2025-10-28 10:52:34 +08:00
Tsuki 722013022a chore(mobile): upgrade to expo54 2025-10-28 10:52:34 +08:00
Tsuki 7f60e62c8a chore(mobile): update sidebar 2025-10-28 10:52:34 +08:00
canisminor1990 070a991e52 🔧 chore: Rebase 2025-10-28 10:52:34 +08:00
Tsuki 9bd1693882 chore(mobile): update deps 2025-10-28 10:52:34 +08:00
canisminor1990 08dc64b671 chore: update react 19 codemod 2025-10-28 10:52:34 +08:00
canisminor1990 48c9589a63 🔧 chore: Rebase 2025-10-28 10:52:34 +08:00
Tsuki 08914f4aa4 chore(mobile): update deps 2025-10-28 10:52:34 +08:00
canisminor1990 d4e2de81dd feat: Add Mask 2025-10-28 10:52:34 +08:00
canisminor1990 e78bdb504a 💄 style: Update playground style 2025-10-28 10:52:34 +08:00
canisminor1990 ecf4ce1e14 🔧 chore: Rebase 2025-10-28 10:52:34 +08:00
canisminor1990 04b351e0f2 🔧 chore: Rebase 2025-10-28 10:52:34 +08:00
Tsuki ce99a7980e chore(mobile): support largeTitle mode 2025-10-28 10:52:33 +08:00
canisminor1990 e2ada4d3a2 ♻️ refactor: Refactor playground to DUMI like 2025-10-28 10:52:33 +08:00
canisminor1990 6372920786 ♻️ refactor: Refactor playground 2025-10-28 10:52:33 +08:00
canisminor1990 bcbb224b58 style: add Text adn Divider 2025-10-28 10:52:33 +08:00
rdmclin2 142f14956a chore: trigger deployment [deploy] 2025-10-28 10:52:33 +08:00
Tsuki a2755798a9 chore: update mobile server routes 2025-10-28 10:52:33 +08:00
Rdmclin2 a98751e9b9 feat: support self deploy mode (#9660)
* feat: add Alert basic component

* chore: adjust input style

* feat: logout after comfirm

* feat: show developer config

* feat: add self deploy instance config and remove unnecessary style code

* chore: add self host mode switch
2025-10-28 10:52:33 +08:00
Rdmclin2 4868885aac feat: add form and card component & support custom server (#9639)
* fix: SideBar Footer align

* chore: update i18n

* fix: i18n problems

* feat: add NewAgentButton

* chore: remove group header

* chore: support inbox search

* feat: CapsuleTabs support facade effect

* chore: adjust fade effect

* feat: add developer custom server and Form Components

* feat: add Card component

* fix: ts error

* feat: add custom server
2025-10-28 10:52:33 +08:00
Tsuki 2af0fc88cd fix(mobile): white border flickering (#9622)
fix(mobile): new way to resolve drawer white border flickering issue
2025-10-28 10:52:33 +08:00
Tsuki 6e2a54f4fe chore(mobile): update lock 2025-10-28 10:52:33 +08:00
Tsuki c026f15834 fix(mobile): resolve drawer white border flickering issue 2025-10-28 10:52:33 +08:00
Tsuki 70ea380205 chore(mobile): optimized renderContent component 2025-10-28 10:52:33 +08:00
Tsuki c90b034cf3 style(mobile): text area font size 2025-10-28 10:52:33 +08:00
Tsuki d77cf05f3c fix(mobile): monorepo production build script 2025-10-28 10:52:33 +08:00
rdmclin2 84087c24e5 chore: trigger deployment [deploy] 2025-10-28 10:52:33 +08:00
Rdmclin2 8ba3ce9f96 chore: performance issues (#9471) 2025-10-28 10:52:33 +08:00
Tsuki 24606b73b0 fix(mobile): adjust zIndex and positioning for page container 2025-10-28 10:52:33 +08:00
Tsuki 64a87ccc83 fix(mobile): text area hot zone & style issues 2025-10-28 10:52:32 +08:00
canisminor1990 f88253c32e fix: fix demo 2025-10-28 10:52:32 +08:00
Tsuki f79ac666ce fix(mobile): choose agent stuck app (#9440)
fix(mobile): resolve agent selection stuck app
2025-10-28 10:52:32 +08:00
canisminor1990 3147c65d8d 🐛 fix: Fix jest type 2025-10-28 10:52:32 +08:00
canisminor1990 636a035fd1 🐛 fix: Fix some type error 2025-10-28 10:52:32 +08:00
canisminor1990 b456eef093 🔧 chore: Update @lobehub/ui-rn alias 2025-10-28 10:52:32 +08:00
Tsuki 2b2caab656 refactor(mobile): metro fix & use new module structure & build error & chatV2 2025-10-28 10:52:32 +08:00
Rdmclin2 21ad53a51b feat: support context menu bubble and fix highligter scroll (#9425)
* feat: support ContextMenu for user bubble

* chore: rename TooltipActions

* chore: add back TooltipActions

* fix: lint error

* fix: Highligher scroll fails in Mardown with Tooltip wraps

* chore: update Input TextArea style

* fix: Header import

* chore: add back lockfile
2025-10-28 10:52:32 +08:00
canisminor1990 df862e2616 🐛 fix: Fix cva 2025-10-28 10:52:32 +08:00
canisminor1990 452a2e6b5e 🐛 fix: Fix createStyles 2025-10-28 10:52:32 +08:00
canisminor1990 f7db45e392 💄 style: Fix demo 2025-10-28 10:52:32 +08:00
canisminor1990 02b1efa523 🐛 fix: Fix new components in playgroun 2025-10-28 10:52:32 +08:00
canisminor1990 8b8e5e4abd fix: fix export 2025-10-28 10:52:32 +08:00
canisminor1990 822290af9c fix: fix mono fonts 2025-10-28 10:52:32 +08:00
canisminor1990 8c11cbb818 style: update fonts 2025-10-28 10:52:32 +08:00
canisminor1990 ea7b7bd1de fix: fix createStyles 2025-10-28 10:52:31 +08:00
canisminor1990 a5e618cfcc chore: update codemod 2025-10-28 10:52:31 +08:00
Rdmclin2 8d40478b59 fix: style issues and refact components (#9404)
* fix: refresh token lost

* chore: refactor TextInput to Input

* feat: add InputText and CapsuleTabs support icon prop

* feat: CapsuleTabs support different sizes

* chore: unfied component import in demos

* chore: adjust Playground style

* style: adjust drawer style

* style: adjust Header style

* feat: add PageContainer components and refactor pages

* chore: migrate right to extra

* chore: adjust WelcomeBubble to ChatBubble

* chore: adjust Button loading effect

* chore: adjust StopLoadingButton style

* chore: adjust StopLoading Button style

* chore: update Agents.md

* fix: ChatBubble update with fontSize

* feat: Highlighter support scroll horizontally

* chore: remove ToolTipActions for AI Bubble
2025-10-28 10:52:31 +08:00
Rdmclin2 64e290b5c6 feat: development mode & chatInput style fix (#9375)
* chore: migrate discover to features

* chore: add Skeleton Button component and optimize Detail loading

* chore: adjust chat skeleton list

* chore: adjust keyboard offset

* chore: adjust keybord vertical offset

* fix: icon color

* fix: primary color bright

* chore: update Button icon size and i18n files

* fix: highlight component not respond to theme change

* chore: unified icon size

* fix: ai chatinput loading

* chore: remove forced consent

* chore: adjust Textinput size

* fix: input placeholder

* chore: adjust ChatInput style

* chore: remove style

* fix: ChatInput style

* chore: adjust styles

* feat: support developer mode

* chore: update i18n
2025-10-28 10:52:31 +08:00
Rdmclin2 cdf36079d5 fix: compacity problems (#9335)
* chore: migrate discover to features

* chore: add Skeleton Button component and optimize Detail loading

* chore: adjust chat skeleton list

* chore: adjust keyboard offset

* chore: adjust keybord vertical offset

* fix: icon color

* fix: primary color bright

* chore: update Button icon size and i18n files

* fix: highlight component not respond to theme change

* chore: unified icon size

* fix: ai chatinput loading

* chore: remove forced consent

* chore: adjust Textinput size

* fix: input placeholder

* chore: adjust ChatInput style

* chore: remove style

* fix: ChatInput style
2025-10-28 10:52:31 +08:00
rdmclin2 8f40ae5efd chore: adjust assistant skeleton style 2025-10-28 10:52:31 +08:00
rdmclin2 d05b39569c fix: Discover list and detail page loading 2025-10-28 10:52:31 +08:00
Rdmclin2 95a62e87bf chore: optimize style and add ActionIcon and icon components (#9309)
* chore: add disabled demo

* fix: button style & remove hover tokens

* chore: Markdown 字体使用默认 16 起步

* chore: unified inbox avatar

* fix: setting foooter press to setting page

* chore: adjust token colorTextLightSolid

* fix: adjust message content padding

* chore: optimize chatlist style

* chore: adjust ChatInput icons

* feat: add ActionIcon component

* feat: add ActionIcon and Icon component

* fix: icon size and style

* fix: drawer lint error

* fix: style

* fix: app submit bug (#9289)

* chore: add disabled demo

* fix: button style & remove hover tokens

* chore: Markdown 字体使用默认 16 起步

* chore: unified inbox avatar

* fix: setting foooter press to setting page

* chore: adjust token colorTextLightSolid

* fix: adjust message content padding

* chore: optimize chatlist style

* chore: adjust ChatInput icons

* feat(mobile): add programming global loading (#9303)

feat(mobile): programming loading

* chore: fix merge error

---------

Co-authored-by: Tsuki <76603360+sudongyuer@users.noreply.github.com>
2025-10-28 10:52:31 +08:00
Tsuki a6eaf00302 feat(mobile): add programming global loading (#9303)
feat(mobile): programming loading
2025-10-28 10:52:31 +08:00
Rdmclin2 b7c447ba38 fix: app submit bug (#9289)
* chore: add disabled demo

* fix: button style & remove hover tokens

* chore: Markdown 字体使用默认 16 起步

* chore: unified inbox avatar

* fix: setting foooter press to setting page

* chore: adjust token colorTextLightSolid

* fix: adjust message content padding

* chore: optimize chatlist style

* chore: adjust ChatInput icons
2025-10-28 10:52:31 +08:00
Rdmclin2 5f46880d35 feat: supoort button shape, color and varient (#9271)
* chore: update .env.example

* chore: add icon demos

* feat: support shape and dashed type

* feat: add varient and color props

* chore: migrate playgroud to features floder

* chore: migrate some components from features to components

* chore: migrage playground demos

* fix: theme-provider demo error

* fix: button demos

* fix: button variant  type error

* feat: add  button loading spin
2025-10-28 10:52:31 +08:00
Tsuki 35f8a882e8 fix(mobile): app crash (#9259) 2025-10-28 10:52:31 +08:00
Tsuki b7cf19f302 fix(mobile): add haptics effect (#9256) 2025-10-28 10:52:31 +08:00
Tsuki 9d93c95435 fix(mobile): input multiple line issue (#9258)
fix(mobile): text input multiline issue
2025-10-28 10:52:30 +08:00
Tsuki 209c436d43 fix(mobile): ui stuck issue 2025-10-28 10:52:30 +08:00
Tsuki dbbf134386 fix(mobile): remove suspense fetch option 2025-10-28 10:52:30 +08:00
Tsuki d4fc611cb2 fix(mobile): ts error 2025-10-28 10:52:30 +08:00
Rdmclin2 23d77f784e chore: prepare for build (#9204)
* chore: update .env.example

* fix: mobile app auth

* chore: adjust fontSize setting page style

* chore: update fontSize page

* fix: webworker not supported

* fix: dependency

* chore: remove update for now

* chore: dynamic loading locales

* feat: dynamic locale load

* chore: remove updates enable false
2025-10-28 10:52:30 +08:00
Tsuki 4605d32639 chore(mobile): optimized chatlist & auto scroll (#9192)
* chore(mobile): improve chat list

* fix(mobile): send message auto scroll
2025-10-28 10:52:30 +08:00
Tsuki 477dd9e8ea fix(mobile): open ai provider proxy url setting 2025-10-28 10:52:30 +08:00
Rdmclin2 e30939da9d Fix/mobile app oauth (#9174)
* chore: update .env.example

* fix: mobile app auth
2025-10-28 10:52:30 +08:00
Tsuki d7e6e2d1ce fix(mobile): chat index 2025-10-28 10:52:30 +08:00
Tsuki b95ddd990e chore(mobile): support jump to provider detail 2025-10-28 10:52:30 +08:00
Tsuki 47a8b6eb62 chore(mobile): update i18n 2025-10-28 10:52:30 +08:00
Tsuki f52ef195ba Feat/update keyboard input model switch icon (#9169)
* chore(mobile): update deps

* chore(mobile): update chat header style

* chore(mobile): update chat keyboard avoiding view

* chore(mobile): update provider item provider icon

* chore(mobile): support redirect to provider route

* chore(mobile): optimized keyboard & scroll view ux
2025-10-28 10:52:30 +08:00
rdmclin2 e20b7d4b97 fix: module resolution 2025-10-28 10:52:30 +08:00
rdmclin2 5b8574a365 chore: update pnpm lockfile 2025-10-28 10:52:30 +08:00
rdmclin2 e03040a12e chore: update package.json 2025-10-28 10:52:30 +08:00
rdmclin2 e57891a89a fix: AutoScroll logic 2025-10-28 10:52:30 +08:00
rdmclin2 37da558e71 chore: adjust ChatList styles 2025-10-28 10:52:30 +08:00
rdmclin2 2770093712 chore: add AutoScroll Component 2025-10-28 10:52:30 +08:00
rdmclin2 2e3094e4c9 chore: 调整 ChatInput 样式 2025-10-28 10:52:30 +08:00
rdmclin2 75ced15278 fix: ScrollToBottom problem 2025-10-28 10:52:29 +08:00
rdmclin2 ba8274351e chore: add back ScrollToBottom 2025-10-28 10:52:29 +08:00
rdmclin2 632f6ace3c fix: chat bubble style 2025-10-28 10:52:29 +08:00
rdmclin2 a2b11d1ee4 chore: remove chat page animation and optimize slide gesture 2025-10-28 10:52:29 +08:00
Tsuki 2b8d08ae25 fix(mobile): keyboard avoiding 2025-10-28 10:52:29 +08:00
Rdmclin2 26e407d324 chore: compatibility issues (#9142)
* chore: adjust Android TextInput Style

* feat: 封装 TextInput 组件

* feat: add TextInput Component

* chore: replace Playground and Sidebar TextInput

* feat: add TextInput.Search and Password, suffix and replace inplace

* chore: 重构项目 TextInput 使用

* feat: TextInput support varient props

* chore: adjust Android TextInput Style

* feat: 封装 TextInput 组件

* feat: add TextInput Component

* chore: replace Playground and Sidebar TextInput

* feat: add TextInput.Search and Password, suffix and replace inplace

* chore: 重构项目 TextInput 使用

* feat: TextInput support varient props

* chore: 迁移代码到  features 目录中

* chore: 调整 provider 页面 fontSize

* fix: Slider drag problem

* fix: duplicate login redirect

* chore: migrate chat code to features

* chore: update error i18n key

* chore: update i18n files

* feat: add ui_locales parameters to oidc provider

* chore: support cookie write in middleware

* chore: 一次性写入 cookies

* chore: remove oauth

* fix: Android notfound page problem

* fix: ts error

* fix: chat setting page scroll

* fix: chat and sidebar inset problem

* fix: chat bubble style

* chore: adjust chat list
2025-10-28 10:52:29 +08:00
Tsuki e3b40abc30 feat(mobile): connection check & error message & performance optimization & style change (#9111)
* chore: update

* chore(mobile): update deps

* chore(mobile): update tsconfig.json

* fix(mobile): fetchSSE.ts

* chore(mobile): update chat slice

* chore(mobile): update AgentRoleEditSection.tsx

* chore(mobile): update const

* chore(mobile: update layout

* chore(mobile): update providers flash list

* chore(mobile): update const

* chore(mobile): update tsconfig.json

* fix(mobile): chat services

* chore(mobile): update providers/[id]

* chore(mobile): update chat input sticky view

* chore(mobile): update setting

* chore(mobile): chat list

* fix(mobile): chat input keyboard view

* feat(mobile): add error content

* feat(mobile): add avatar

* chore(mobile): update i18n

* style(mobile): configuration
2025-10-28 10:52:29 +08:00
Rdmclin2 772de1ebff chore: optimize performance and style (#9057)
* chore: update developer setting

* chore:  optimize Skeleton sub component

* feat: add list marker style

* chore: update setting page

* chore: remove unnecessary env variable

* fix: Theme Preview borderRadius

* fix: remove opaccity acitve effect from SettingItem

* feat: seperate themeMode setting page

* feat: seperate fontSize setting page

* faet: support adjust chatbubble fontSize

* feat: add fontSize Preview page

* fix: unified switch track and thumb color and wrap  Switch component

* chore: add switch demo page

* fix: navigation and status bar color problem

* chore: add unified header and safeview

* chore: add settings page  SafeAreaView

* fix: provider page style

* chore: add safeareaview to all pages
2025-10-28 10:52:29 +08:00
Tsuki 486b628975 fix(mobile): i18n 2025-10-28 10:52:29 +08:00
Tsuki 32afe7d855 fix(mobile): lock 2025-10-28 10:52:29 +08:00
Rdmclin2 6514f2be5c chore: optimize mobile experience and i18n (#9026)
* chore: modify Markdown styles and  Tag style

* feat: Tag support color prop

* feat: Tag Component support preset color

* chore: 优化 playground Card style

* feat: migrate to remark

* feat: add Remark components

* feat: Toast 支持静态方法

* feat: animate loading message and simplify Toast props

* chore: optimize Toast implementation

* chore: remove unnecessary custtom renderers

* chore: optimize Markdown Render and add Slider Component

* chore: unified api with web version

* chore: remove unnecessary props for slider

* fix: accurately control step slider

* feat: support marks props

* fix: 修复 mark dot 位置

* chore: optimize Slider token usage

* feat: setting support fontSize

* chore: Playground support fontSize setting

* fix: Slider 样式

* chore: prevent slider change

* chore: update i18n keys

* chore: optimize theme provider tokens

* chore: remove unnecessary code

* fix: slider demo

* fix: theme-token type error

* fix: auth expired handle

* feat: handle auth expired redirect

* feat: add developer setting

* fix: login expired handle

* feat: add SettingGroup to automatically add isLast prop and add prevew page

* chore: adjust Preview component

* feat: move theme settings to a seperate page

* feat: 优化调整 Markdown 样式

* fix: list style

* chore: adjust markdown table style

* fix: blockquoto style

* chore: remove Markdown type

* chore: 迁移 TokenDisplay

* chore: optimize Highlight display

* feat: support katex render

* feat(Skeleton): add Skeleton.Image compound component (animated, width/height/shape); align styles with existing shimmer. Update defaults to 200x200; no visual regressions

* feat(Skeleton.Image): center antd-like image placeholder icon (react-native-svg); add iconSize/iconColor/showIcon props

* feat: Image support skeleton

* chore: optimize mathjax

* chore: handle tokens globally

* feat: Button support icon property

* chore: update provider i18n

* chore: header support ellipsis

* chore: update preview i18n

* chore: adjust button colors

* chore: update i18n
2025-10-28 10:52:29 +08:00
Tsuki cb3e5e365a feat: role edit & session context menu & expo 53 upgrade (#9024)
* chore(mobile): update welcome chat bubble

* chore(mobile): update generateAIChat toast

* chore(mobile): update

* chore(mobile): update config auth.ts

* fix(mobile): i18n

* style(mobile): list item style.ts

* fix(mobile): account logout not redirect

* feat(mobile): agent role edit

* chore(mobile): remove session & optimized

* chore(mobile): update configuration section

* chore(mobile): update

* chore(mobile): update agent role edit section

* fix(mobile): android build error

* chore(mobile): upgrade expo53 & update deps

* fix(mobile): add GestureHandlerRootView
2025-10-28 10:52:29 +08:00
Rdmclin2 3788958f28 Feat/setting screens (#9014)
* chore: modify Markdown styles and  Tag style

* feat: Tag support color prop

* feat: Tag Component support preset color

* chore: 优化 playground Card style

* feat: migrate to remark

* feat: add Remark components

* feat: Toast 支持静态方法

* feat: animate loading message and simplify Toast props

* chore: optimize Toast implementation

* chore: remove unnecessary custtom renderers

* chore: optimize Markdown Render and add Slider Component

* chore: unified api with web version

* chore: remove unnecessary props for slider

* fix: accurately control step slider

* feat: support marks props

* fix: 修复 mark dot 位置

* chore: optimize Slider token usage

* feat: setting support fontSize

* chore: Playground support fontSize setting

* fix: Slider 样式

* chore: prevent slider change

* chore: update i18n keys

* chore: optimize theme provider tokens

* chore: remove unnecessary code

* fix: slider demo

* fix: theme-token type error

* fix: auth expired handle

* feat: handle auth expired redirect

* feat: add developer setting

* fix: login expired handle

* feat: add SettingGroup to automatically add isLast prop and add prevew page

* chore: adjust Preview component

* feat: move theme settings to a seperate page

* feat: 优化调整 Markdown 样式

* fix: list style

* chore: adjust markdown table style

* fix: blockquoto style

* chore: remove Markdown type

* chore: 迁移 TokenDisplay

* chore: optimize Highlight display

* feat: support katex render
2025-10-28 10:52:29 +08:00
Tsuki 88ed461120 feat(mobile): mobile app new updates (bugs & discover & chat) (#8942)
* chore(mobile): add category tabs

* chore(mobile): update  discover

* chore(mobile): update discover hooks

* chore(mobile): update agent store

* chore(mobile): update useInitAgentConfig.ts hooks

* chore(mobile): update aiModel actions

* fix(mobile):chat service

* chore(mobile): update services

* feat(mobile): discover store

* chore(mobile): update model list skeleton

* chore(mobile): update provider list

* chore(mobile): prevent provider key

* chore(mobile): session list skeleton

* fix(mobile): session  list item

* chore(mobile): update new chat btn

* chore(mobile): message action

* chore(mobile): message skeleton

* chore(mobile): welcome message

* chore(mobile): optimized drawer

* chore(mobile): update i18n
2025-10-28 10:52:29 +08:00
Rdmclin2 4f084a6ba4 Feat/mobile remark install error (#8891)
* chore: modify Markdown styles and  Tag style

* feat: Tag support color prop

* feat: Tag Component support preset color

* chore: 优化 playground Card style

* feat: migrate to remark

* feat: add Remark components

* feat: Toast 支持静态方法

* feat: animate loading message and simplify Toast props

* chore: optimize Toast implementation
2025-10-28 10:52:28 +08:00
Tsuki a0730799e8 fix(mobile): provider icon color when change theme 2025-10-28 10:52:28 +08:00
rdmclin2 2b687eec26 feat: ColorSwatch support Conic Gradient 2025-10-28 10:52:28 +08:00
rdmclin2 f9fe24b896 fix: color token 2025-10-28 10:52:28 +08:00
Rdmclin2 c205df5cb6 Fix/token values (#8862)
* fix: detail style token and lineHeight Problem

* fix: optimize market tokens

* fix:  style token

* chore: tokenize setting style

* feat: add Button danger prop and use in setting SignOut

* chore: add static token value

* chore: optimze theme-token style

* fix: token colorWhite lost

* chore: migrage components style

* fix: Tooltip style

* fix: Tooltip ref problem

* fix: neutral colors

* fix: ListItem token
2025-10-28 10:52:28 +08:00
rdmclin2 1e7dcf3840 fix: detail style token and lineHeight Problem 2025-10-28 10:52:28 +08:00
Tsuki 85a61f628a chore(mobile): update chat input 2025-10-28 10:52:28 +08:00
Rdmclin2 434f1bffa1 Feat/mobile workflow (#8762)
* chore: add ipa ignore

* chore: update expo realted package version

* fix: production build command

* feat: add ios submit workflow

* chore: add android submit process

* fix: vitest and jest test cases

* test: fix all components test cases

* fix: test cases and lint errors

* chore: update jest config json and fix testcases

* fix: login animation

* chore: add test cases for utils

* feat: refactor theme page

* feat: move theme page to settings page

* feat: add title prop for ListGroup

* feat: add theme token playground

* fix: login asset image and setting style

* chore: remove localhost:3020

* feat: support theme token pass and add demos for playground

* fix: theme token logic

* feat:support colorPrimary and fontSize

* feat: add ColorSwatches and local ThemeProvider

* fix: color token display

* chore: move colors to theme dir

* feat: add  ColorScale  components to  show color system

* chore: update colorscales

* feat: optimize design token generate

* fix: lint error

* feat: systemly orgnize lobe ui tokens

* fix: fix playground components style

* feat: 添加 primaryColor 配置

* fix: theme token  implementation

* fix: 支持中性色配置

* feat: primaryColor and netualColor config

* fix: text icon color

* feat: optimize theme-token components

* chore: extract components rom theme-token

* chore: optimize token display

* chore: optimize theme token style

* fix: _auth redirect logic

* fix: 避免 <Stack.Screen > 和 <Slot> 混用,指定 index 首页

* fix: auth redirect on hotload

* chore: migrate @/theme import
2025-10-28 10:52:28 +08:00
Tsuki 1503ac5096 feat: connect session & chat & message & topic feature (#8755)
* chore: update mobile server routers

* chore: move original theme types

* chore(mobile): remove types files

* fix(mobile): type errors

* chore(mobile): remove useless model providers

* chore(mobile): session migrate

* chore(mobile): migrate const

* chore(mobile): add useFetchMessage hook

* chore(mobile): support package types

* chore(mobile): add utils fn

* chore(mobile): migrate user

* feat(mobile): add chat message slice

* fix(mobile): agent mobile server

* chore(mobile): update const

* chore(mobile): update fetch utils

* chore(mobile): update aiChat slice

* chore(mobile): update agent store

* chore(mobile): update tokenizer utils

* chore(mobile): update utils client

* chore(mobile): update parse.ts

* chore(mobile): update utils

* chore(mobile): update chains

* chore(mobile): update prompts chatMessages

* chore(mobile): update ChatList index loading issue

* chore(mobile): update chat header.ts

* chore(mobile): update chat relative components

* chore(mobile): update aiInfra store

* chore(mobile): update chat store

* chore(mobile): update utils

* chore(mobile): update store middleware createDevtools.ts

* chore(mobile): update global store

* chore(mobile): update services

* chore(mobile): update libs model-runtime

* chore(mobile): update i18n default

* chore(mobile): update hooks

* chore(mobile): update features

* chore(mobile): update settings const

* chore(mobile): update auth config

* chore(mobile): update ListItem component

* chore(mobile): update i18n zh-CN chat.json
2025-10-28 10:52:28 +08:00
Tsuki 3d1b513c45 feat: add provider list & model switch (#8662) 2025-10-28 10:52:28 +08:00
Rdmclin2 a2d470b9d2 feat: sidebar implementation (#8658)
* chore: migrate sidebar to features

* chore: migrate SIdeBar

* fix: add pnpm lockfile support

* chore: update .npmrc

* chore: optimize Session List

* fix:  stoploading animation

* chore: use mobile trpc

* fix: optimize consent page for mobile

* chore: optimize Consent page for mobile
2025-10-28 10:52:28 +08:00
rdmclin2 9f017cce0d feat: migrate mobile trpc api 2025-10-28 10:52:28 +08:00
rdmclin2 459ec162de fix: trpc client problem 2025-10-28 10:52:28 +08:00
rdmclin2 a65af38653 feat: add trpc services 2025-10-28 10:52:28 +08:00
rdmclin2 79dec7a8e7 fix: eas preview build env 2025-10-28 10:52:28 +08:00
rdmclin2 fb1e1ca423 chore: update locale config 2025-10-28 10:52:28 +08:00
rdmclin2 bbb7d90fc6 chore: refactor src dir 2025-10-28 10:52:27 +08:00
rdmclin2 00960c7ff6 fix: build error 2025-10-28 10:52:27 +08:00
rdmclin2 a0d5732108 feat: add mobile app 2025-10-28 10:52:27 +08:00
rdmclin2 1ead26f82a feat: add oidc config for mobile 2025-10-28 10:52:27 +08:00
1410 changed files with 134957 additions and 3 deletions
+4 -1
View File
@@ -93,7 +93,6 @@ robots.txt
.husky/prepare-commit-msg
# Documents and media
*.patch
*.pdf
# Cloud service keys
@@ -118,3 +117,7 @@ CLAUDE.local.md
prd
GEMINI.md
e2e/reports
# local eas account key for android
service-account-key.json
+6
View File
@@ -1,2 +1,8 @@
npm run type-check
# Check if there are changes in apps/mobile directory
if git diff --cached --name-only | grep -q "^apps/mobile/"; then
(cd apps/mobile && npm run type-check)
fi
npx --no-install lint-staged
@@ -0,0 +1,110 @@
---
description:
globs:
alwaysApply: false
---
# API Integration and Services
## Service Architecture
The app integrates with various APIs and services for chat functionality and data management.
### Core Services
#### Session Service
- [services/session.ts](mdc:services/session.ts) - Session management API
- [services/type.ts](mdc:services/type.ts) - Service type definitions
- [services/mock/](mdc:services/mock) - Mock data for development
- [services/mock/getGroupedSessions.json](mdc:services/mock/getGroupedSessions.json) - Mock session data
#### OpenAI Integration
- [store/openai.ts](mdc:store/openai.ts) - OpenAI configuration store
- Manages API keys and proxy settings
- Persists configuration in AsyncStorage
### API Utilities
#### HTTP Utilities
- [utils/fetchSSE.ts](mdc:utils/fetchSSE.ts) - Server-Sent Events implementation
- [utils/trpc.ts](mdc:utils/trpc.ts) - tRPC client configuration
- [utils/jwt.ts](mdc:utils/jwt.ts) - JWT token handling
#### Data Processing
- [utils/merge.ts](mdc:utils/merge.ts) - Deep merge utility
- [utils/componentScanner.ts](mdc:utils/componentScanner.ts) - Component scanning utilities
## Chat Integration
### OpenAI API
- Uses Server-Sent Events for streaming responses
- Supports multiple models and configurations
- Handles API key management and proxy settings
### Message Handling
- Real-time message streaming
- Error handling and retry logic
- Message persistence in local storage
## Data Flow Patterns
### State Management Integration
```typescript
// Store updates trigger API calls
const sendMessage = async (message: string) => {
setLoading(true);
try {
const response = await api.sendMessage(message);
updateChatState(response);
} catch (error) {
handleError(error);
} finally {
setLoading(false);
}
};
```
### Error Handling
- Implement proper error boundaries
- Show user-friendly error messages
- Retry failed requests with exponential backoff
- Log errors for debugging
### Loading States
- Show loading indicators during API calls
- Implement skeleton screens for better UX
- Handle partial loading states
## Development Patterns
### Mock Data
- Use mock services during development
- [services/mock/](mdc:services/mock) - Mock data files
- Switch between mock and real APIs easily
### Environment Configuration
- Use environment variables for API keys
- Support different environments (dev, staging, prod)
- Secure sensitive configuration
### API Versioning
- Support multiple API versions
- Implement graceful deprecation
- Maintain backward compatibility
## Security Considerations
### API Key Management
- Never commit API keys to version control
- Use secure storage for sensitive data
- Implement proper key rotation
### Data Validation
- Validate all API responses
- Use TypeScript for type safety
- Implement input sanitization
### Network Security
- Use HTTPS for all API calls
- Implement certificate pinning if needed
- Handle network errors gracefully
@@ -0,0 +1,46 @@
---
description:
globs:
alwaysApply: false
---
# App Structure and Routing
## Expo Router File Structure
The app uses Expo Router with file-based routing. Each directory represents a route group or screen.
### Main Routes
- [src/app/index.tsx](mdc:src/app/index.tsx) - Root redirect logic (signed in → session, signed out → sign-in)
- [src/app/_layout.tsx](mdc:src/app/_layout.tsx) - Root layout with providers ( Toast, Portal, ActionSheet)
### Chat Routes
- [src/app/(chat)/_layout.tsx](mdc:src/app/(chat)/_layout.tsx) - Chat layout with bottom tabs
- [src/app/(chat)/session/index.tsx](mdc:src/app/(chat)/session/index.tsx) - Session list screen
- [src/app/(chat)/session/_layout.tsx](mdc:src/app/(chat)/session/_layout.tsx) - Session layout
- [src/app/(chat)/chat/index.tsx](mdc:src/app/(chat)/chat/index.tsx) - Main chat interface
- [src/app/(chat)/chat/_layout.tsx](mdc:src/app/(chat)/chat/_layout.tsx) - Chat layout
- [src/app/(chat)/detail/index.tsx](mdc:src/app/(chat)/detail/index.tsx) - Chat detail view
- [src/app/(chat)/detail/_layout.tsx](mdc:src/app/(chat)/detail/_layout.tsx) - Detail layout
### Settings Routes
- [src/app/(setting)/_layout.tsx](mdc:src/app/(setting)/_layout.tsx) - Settings layout
- [src/app/(setting)/setting/index.tsx](mdc:src/app/(setting)/setting/index.tsx) - Settings screen
- [src/app/(setting)/setting/_layout.tsx](mdc:src/app/(setting)/setting/_layout.tsx) - Settings layout
- [src/app/(setting)/setting/provider.tsx](mdc:src/app/(setting)/setting/provider.tsx) - Settings provider
### Playground Routes
- [src/app/playground/_layout.tsx](mdc:src/app/playground/_layout.tsx) - Playground layout
- [src/app/playground/index.tsx](mdc:src/app/playground/index.tsx) - Component playground
- [src/app/playground/highlighter.tsx](mdc:src/app/playground/highlighter.tsx) - Code highlighting demo
- [src/app/playground/markdown.tsx](mdc:src/app/playground/markdown.tsx) - Markdown rendering demo
- [src/app/playground/toast.tsx](mdc:src/app/playground/toast.tsx) - Toast notifications demo
- [src/app/playground/tooltip.tsx](mdc:src/app/playground/tooltip.tsx) - Tooltip component demo
## Route Groups
- `(chat)` - Main chat functionality
- `(setting)` - App settings and configuration
- `playground` - Component development and testing
## Navigation Patterns
- Use `Redirect` component for programmatic navigation
- Use bottom tabs for main navigation in chat section
@@ -0,0 +1,288 @@
---
description: 组件导入规范 - demos 和组件内部的导入路径规范
globs: src/components/**/*.tsx,src/components/**/*.ts
---
# 组件导入规范
本规范定义了 LobeChat Mobile 组件库中不同文件类型应该如何导入依赖。
## 规范概述
### 1. Demo 文件 (`demos/*.tsx`)
**✅ 正确做法:从 `@lobehub/ui-rn` 导入所有公开组件**
```tsx
// demos/basic.tsx
import { Button, Space, Text, useTheme } from '@lobehub/ui-rn';
import React from 'react';
import { View } from 'react-native';
export default () => {
const token = useTheme();
return (
<Space gap={16}>
<Button>示例按钮</Button>
<Text>示例文本</Text>
</Space>
);
};
```
**❌ 错误做法:使用 `@/components` 路径**
```tsx
// ❌ 不要这样做
import Text from '@/components/Text';
import { useTheme } from '@/components/styles';
```
### 2. 组件主文件 (`ComponentName.tsx`)
**✅ 正确做法:使用相对路径引用其他组件**
```tsx
// Card/Card.tsx
import React from 'react';
import Block from '../Block'; // ✅ 相对路径
import Text from '../Text'; // ✅ 相对路径
import { useStyles } from './style';
import type { CardProps } from './type';
```
**❌ 错误做法:使用绝对路径 `@/components`**
```tsx
// ❌ 不要这样做
import Block from '@/components/Block';
import Text from '@/components/Text';
```
### 3. 样式文件 (`style.ts`)
**✅ 正确做法:使用 `@/components/styles` 导入主题工具**
```tsx
// style.ts
import { createStyles } from '@/components/styles'; // ✅ 允许
export const useStyles = createStyles(({ token, stylish }) => ({
root: {
backgroundColor: token.colorBgContainer,
},
}));
```
### 4. 类型文件 (`type.ts`)
**✅ 正确做法:使用相对路径引用其他组件的类型**
```tsx
// Card/type.ts
import type { BlockProps } from '../Block'; // ✅ 相对路径
import type { ViewProps } from 'react-native';
export interface CardProps extends ViewProps {
// ...
}
```
**❌ 错误做法:使用绝对路径**
```tsx
// ❌ 不要这样做
import type { BlockProps } from '@/components/Block';
```
## 导入顺序规范
遵循以下导入顺序:
```tsx
// 1. 外部库 - React 相关
import React, { useState, useCallback } from 'react';
import { View, Text } from 'react-native';
// 2. 外部库 - 第三方库
import { Lucide } from '@lobehub/ui';
import dayjs from 'dayjs';
// 3. 内部组件 (demos 使用 @lobehub/ui-rn)
import { Button, Space, Text, useTheme } from '@lobehub/ui-rn';
// 4. 相对路径导入 (组件内部使用)
import { useStyles } from './style';
import type { ComponentProps } from './type';
```
## 常见场景示例
### Demo 文件完整示例
```tsx
// demos/basic.tsx
import { Button, Space, Text } from '@lobehub/ui-rn';
import React from 'react';
export default () => {
return (
<Space gap={16}>
<Button type="primary">主要按钮</Button>
<Button type="default">默认按钮</Button>
</Space>
);
};
```
### 组件文件完整示例
```tsx
// Alert/index.tsx
import React, { memo } from 'react';
import { View } from 'react-native';
// 相对路径引用其他组件
import ActionIcon from '../ActionIcon';
import Icon from '../Icon';
import Text from '../Text';
// 本地文件
import { useStyles } from './style';
import type { AlertProps } from './type';
const Alert = memo<AlertProps>((props) => {
// ...
});
export default Alert;
```
### 包含 Theme 的示例
```tsx
// demos/advanced.tsx
import { Button, Text, useTheme } from '@lobehub/ui-rn'; // ✅ 从 @lobehub/ui-rn 导入
import React from 'react';
import { View } from 'react-native';
export default () => {
const token = useTheme(); // 使用主题 token
return (
<View style={{ padding: token.padding }}>
<Text>示例内容</Text>
</View>
);
};
```
## 特殊情况
### 1. ThemeProvider 内部文件
ThemeProvider 模块内部可以使用绝对路径引用自己的子模块:
```tsx
// ThemeProvider/getDesignToken.ts
import { lightAlgorithm } from '@/components/styles/algorithm/light'; // ✅ 允许
import type { AliasToken } from '@/components/styles/interface'; // ✅ 允许
```
### 2. 工具函数和类型
非组件的工具文件可以使用 `@/components/styles`
```tsx
// theme/createStyles.ts
import type { ThemeAppearance } from '@/components/ThemeProvider/types'; // ✅ 允许
```
## 验证命令
使用以下命令验证导入规范:
```bash
# 检查 demos 文件中的 @/components 引用(应该为 0
find src/components -path "*/demos/*.tsx" -exec grep -l "@/components" {} \;
# 检查组件间的绝对路径引用(应该很少)
grep -r "from '@/components/[A-Z]" src/components --include="*.tsx" --exclude-dir="demos"
```
## 自动修复脚本
如果发现违反规范的导入,可以使用以下脚本修复:
```javascript
// fix-imports.js
const fs = require('fs');
const path = require('path');
// 检测并修复 demos 文件
function fixDemoImports(filePath) {
let content = fs.readFileSync(filePath, 'utf-8');
// 将 @/components/ComponentName 改为从 @lobehub/ui-rn 导入
content = content.replace(
/import\s+(\w+)\s+from\s+['"]@\/components\/(\w+)['"]/g,
(match, name, component) => {
// 添加到 @lobehub/ui-rn 导入中
return `// import ${name} from '@lobehub/ui-rn'`;
}
);
fs.writeFileSync(filePath, content);
}
```
## 常见错误和解决方案
### 错误 1: Demo 文件使用 `@/components`
```tsx
// ❌ 错误
import Text from '@/components/Text';
// ✅ 修复
import { Text } from '@lobehub/ui-rn';
```
### 错误 2: 组件文件使用绝对路径引用其他组件
```tsx
// ❌ 错误
import Block from '@/components/Block';
// ✅ 修复
import Block from '../Block';
```
### 错误 3: 重复导入
```tsx
// ❌ 错误
import { Button } from '@lobehub/ui-rn';
import Button from '../../Button';
// ✅ 修复 - 只保留一个
import { Button } from '@lobehub/ui-rn'; // demos 中
// 或
import Button from '../../Button'; // 组件内部
```
## 总结
| 文件类型 | 导入其他组件 | 导入 Theme | 示例 |
|---------|------------|-----------|------|
| `demos/*.tsx` | `@lobehub/ui-rn` | `@lobehub/ui-rn` | `import { Button, useTheme } from '@lobehub/ui-rn'` |
| `ComponentName.tsx` | 相对路径 | 相对路径或 `@/components/styles` | `import Block from '../Block'` |
| `style.ts` | - | `@/components/styles` | `import { createStyles } from '@/components/styles'` |
| `type.ts` | 相对路径(类型) | 相对路径(类型) | `import type { BlockProps } from '../Block'` |
**核心原则:**
- ✅ Demos 展示公开 API,使用 `@lobehub/ui-rn`
- ✅ 组件内部保持模块化,使用相对路径
- ✅ 样式文件可以使用 `@/components/styles` 获取主题工具
- ✅ 保持导入语句的一致性和清晰性
@@ -0,0 +1,791 @@
---
globs: src/components/**
description: 组件库标准结构、样式管理和开发流程规范
---
# 组件库结构规范
本规范定义了 LobeChat Mobile 组件库的标准结构、样式管理方式和开发流程。
## 组件目录结构
每个组件应遵循以下标准目录结构:
```
src/components/ComponentName/
├── ComponentName.tsx # 组件主文件
├── index.ts # 导出文件
├── index.md # 组件文档
├── style.ts # 样式定义
├── type.ts # TypeScript 类型定义
└── demos/ # 示例目录
├── index.tsx # 示例入口
├── basic.tsx # 基础示例
└── ... # 其他示例
```
### 文件职责说明
#### 1. `ComponentName.tsx` - 组件主文件
组件的核心实现文件,命名采用 PascalCase
```tsx
import React, { memo, useMemo } from 'react';
import { cva } from '@/components/styles';
import { useStyles } from './style';
import type { ComponentNameProps } from './type';
const ComponentName = memo<ComponentNameProps>(
({ variant = 'default', children, style, ...rest }) => {
const { styles } = useStyles();
// 使用 CVA 管理样式变体
const variants = useMemo(
() =>
cva(styles.root, {
variants: {
variant: {
default: styles.default,
primary: styles.primary,
},
},
compoundVariants: [
{
variant: 'primary',
pressed: true,
style: styles.primaryActive,
},
],
defaultVariants: {
variant: 'default',
},
}),
[styles],
);
return (
<View
style={({ hovered, pressed }) => [
variants({ variant, hovered, pressed }),
style,
]}
{...rest}
>
{children}
</View>
);
},
);
ComponentName.displayName = 'ComponentName';
export default ComponentName;
```
**关键要点:**
- 使用 `memo` 包裹组件优化性能
- 从 `./style` 导入 `useStyles` 钩子
- 从 `./type` 导入类型定义
- 使用 `cva` 管理复杂的样式变体逻辑
- 使用 `useMemo` 缓存 CVA 配置,依赖 `styles`
- 设置 `displayName` 便于调试
#### 2. `style.ts` - 样式定义文件
使用 `createStyles` 创建主题感知的样式:
```tsx
import { createStyles } from '@/components/styles';
export const useStyles = createStyles(({ token, stylish }) => ({
// 基础样式
root: {
borderRadius: token.borderRadius,
position: 'relative' as const,
},
// 变体样式 - 使用 stylish 预设
default: stylish.variantFilled,
primary: stylish.variantOutlined,
// 交互状态样式
primaryActive: stylish.variantOutlinedActive,
primaryHover: stylish.variantOutlinedHover,
// 附加效果
shadow: stylish.shadow,
glass: stylish.blur,
}));
```
**关键要点:**
- 统一使用 `createStyles` 工厂函数
- 通过 `token` 访问主题变量(颜色、间距、圆角等)
- 通过 `stylish` 访问预设样式(变体、阴影、模糊等)
- 使用 `as const` 确保字面量类型
- 样式名称应语义化,便于在 CVA 中引用
#### 3. `type.ts` - 类型定义文件
定义组件的 Props 接口:
```tsx
import type { ViewProps } from 'react-native';
export interface ComponentNameProps extends ViewProps {
/**
* 样式变体
* @default 'default'
*/
variant?: 'default' | 'primary' | 'secondary';
/**
* 是否显示阴影
*/
shadow?: boolean;
/**
* 是否启用玻璃效果
*/
glass?: boolean;
/**
* 点击回调
*/
onPress?: () => void;
}
```
**关键要点:**
- 继承自基础组件的 Props(如 `ViewProps`, `FlexboxProps`
- 为每个 prop 添加 JSDoc 注释
- 使用 `@default` 标注默认值
- 使用字面量类型限制可选值
#### 4. `index.ts` - 导出文件
标准导出格式:
```tsx
export { default } from './ComponentName';
export type * from './type';
```
**关键要点:**
- 默认导出组件本身
- 使用 `export type *` 导出所有类型
#### 5. `index.md` - 组件文档
使用 YAML frontmatter 定义元数据:
```markdown
---
group: Layout
title: ComponentName
description: 组件的简短描述,说明主要功能和特点。
---
## Features
- ✅ 功能特性 1
- ✅ 功能特性 2
- ✅ TypeScript 支持
- ✅ 主题适配
## Basic Usage
\`\`\`tsx
import { ComponentName } from '@lobehub/ui-rn';
<ComponentName variant="primary">
<Text>示例内容</Text>
</ComponentName>
\`\`\`
## API
详细的 Props 说明...
```
**关键要点:**
- `group`: 组件分类(Layout、Form、Display 等)
- `title`: 组件名称
- `description`: 简短描述
- 包含功能特性、使用示例、API 文档
#### 6. `demos/` - 示例目录
demos 目录用于存放组件的交互式示例,这些示例会在 Playground 中展示。
**目录结构:**
```
demos/
├── index.tsx # Demo 配置入口(必需)
├── basic.tsx # 基础用法示例(必需)
├── variants.tsx # 变体示例
├── sizes.tsx # 尺寸示例
├── colors.tsx # 颜色示例
├── states.tsx # 状态示例
└── ... # 其他特定功能示例
```
##### 6.1 `demos/index.tsx` - Demo 配置文件
配置文件定义了所有 demo 的元数据和加载方式:
```tsx
import type { DemoConfig } from '@lobehub/ui-rn';
import React from 'react';
import BasicDemo from './basic';
import ColorsDemo from './colors';
import SizesDemo from './sizes';
import VariantsDemo from './variants';
const demos: DemoConfig = [
{ component: <BasicDemo />, key: 'basic', title: '基础用法' },
{ component: <VariantsDemo />, key: 'variants', title: '不同视觉风格' },
{ component: <SizesDemo />, key: 'sizes', title: '尺寸' },
{ component: <ColorsDemo />, key: 'colors', title: '颜色' },
];
export default demos;
```
**DemoConfig 类型定义:**
```tsx
interface DemoItem {
/** Demo 组件实例 */
component: React.ReactNode;
/** Demo 唯一标识,使用 kebab-case */
key: string;
/** Demo 标题,用于在 Playground 中显示 */
title: string;
}
type DemoConfig = DemoItem[];
```
**关键要点:**
- 从 `@lobehub/ui-rn` 导入 `DemoConfig` 类型
- 导入所有 demo 组件(使用 PascalCase + Demo 后缀)
- 配置数组按重要性排序,`basic` 应始终放在第一位
- `key` 使用 kebab-case 命名(如 `basic`, `variants`, `disabled-state`
- `title` 使用中文描述,简洁明了
- 使用默认导出导出配置数组
##### 6.2 Demo 文件规范
每个 demo 文件应遵循以下规范:
```tsx
// demos/basic.tsx
import { ComponentName, Flexbox } from '@lobehub/ui-rn';
import React from 'react';
import { Text } from 'react-native';
export default () => {
return (
<Flexbox gap={16}>
<ComponentName variant="default">
<Text>默认示例</Text>
</ComponentName>
<ComponentName variant="primary">
<Text>主要示例</Text>
</ComponentName>
</Flexbox>
);
};
```
**关键要点:**
- 使用默认导出
- 使用箭头函数组件
- 不需要包裹额外的容器组件(Playground 会自动处理)
- 使用 `Flexbox` 组件进行布局,设置合适的 `gap` 值
- 示例应简洁明了,专注于展示单一特性或相关特性组
##### 6.3 Demo 文件命名规范
推荐的 demo 文件名及其用途:
| 文件名 | 用途 | 优先级 |
|--------|------|--------|
| `basic.tsx` | 基础用法,展示最常见的使用场景 | 必需 ⭐ |
| `variants.tsx` | 展示所有样式变体(filled, outlined 等) | 推荐 |
| `sizes.tsx` | 展示不同尺寸(small, medium, large | 推荐 |
| `colors.tsx` | 展示不同颜色主题 | 可选 |
| `disabled.tsx` | 展示禁用状态 | 可选 |
| `loading.tsx` | 展示加载状态 | 可选 |
| `interactive.tsx` | 展示交互行为(点击、hover 等) | 可选 |
| `layout.tsx` | 展示布局应用场景 | 可选 |
| `advanced.tsx` | 展示高级用法或复杂场景 | 可选 |
##### 6.4 Demo 最佳实践
**✅ 推荐的做法:**
```tsx
// 1. 清晰的分组和间距
export default () => {
return (
<Flexbox gap={16}>
<Text style={{ fontWeight: 'bold' }}>默认变体</Text>
<Block variant="filled">
<Text>Filled Block</Text>
</Block>
<Text style={{ fontWeight: 'bold' }}>轮廓变体</Text>
<Block variant="outlined">
<Text>Outlined Block</Text>
</Block>
</Flexbox>
);
};
// 2. 使用状态展示交互
export default () => {
const [count, setCount] = useState(0);
return (
<Button onPress={() => setCount(c => c + 1)}>
<Text>点击次数: {count}</Text>
</Button>
);
};
// 3. 使用 Alert 或 Toast 展示反馈
export default () => {
return (
<Button onPress={() => Alert.alert('提示', '按钮被点击了')}>
<Text>点击我</Text>
</Button>
);
};
```
**❌ 避免的做法:**
```tsx
// ❌ 不要使用外部状态管理
import { useStore } from '@/store'; // 避免
// ❌ 不要使用复杂的业务逻辑
export default () => {
const data = fetchDataFromAPI(); // 避免
// ...
};
// ❌ 不要使用过多嵌套
export default () => {
return (
<View>
<View>
<View>
<View> // 过度嵌套
<Component />
</View>
</View>
</View>
</View>
);
};
// ❌ 不要在 demo 中定义复杂组件
const ComplexComponent = () => { /* 大量代码 */ }; // 应该独立文件
export default () => <ComplexComponent />;
```
##### 6.5 常见 Demo 模板
**基础用法模板:**
```tsx
import { ComponentName } from '@lobehub/ui-rn';
import React from 'react';
export default () => {
return <ComponentName>基本示例</ComponentName>;
};
```
**变体展示模板:**
```tsx
import { ComponentName, Flexbox } from '@lobehub/ui-rn';
import React from 'react';
export default () => {
return (
<Flexbox gap={16}>
<ComponentName variant="filled">Filled</ComponentName>
<ComponentName variant="outlined">Outlined</ComponentName>
<ComponentName variant="borderless">Borderless</ComponentName>
</Flexbox>
);
};
```
**交互示例模板:**
```tsx
import { ComponentName, Flexbox } from '@lobehub/ui-rn';
import React, { useState } from 'react';
import { Alert, Text } from 'react-native';
export default () => {
const [value, setValue] = useState('');
return (
<Flexbox gap={16}>
<ComponentName
value={value}
onChange={setValue}
onPress={() => Alert.alert('提示', `当前值: ${value}`)}
/>
<Text>当前值: {value}</Text>
</Flexbox>
);
};
```
## CVA (Class Variance Authority) 用法
CVA 用于管理组件的样式变体逻辑,提供类型安全的样式组合。
### 基础用法
```tsx
import { cva } from '@/components/styles';
const variants = useMemo(
() =>
cva(styles.root, {
// 定义变体
variants: {
variant: {
filled: styles.filled,
outlined: styles.outlined,
borderless: styles.borderless,
},
size: {
small: styles.small,
medium: styles.medium,
large: styles.large,
},
},
// 默认值
defaultVariants: {
variant: 'filled',
size: 'medium',
},
}),
[styles],
);
// 使用变体
<View style={variants({ variant: 'outlined', size: 'large' })} />
```
### 复合变体 (Compound Variants)
处理多个变体组合时的特殊样式:
```tsx
const variants = useMemo(
() =>
cva(styles.root, {
variants: {
variant: {
filled: styles.filled,
outlined: styles.outlined,
},
hovered: {
false: null,
true: styles.hover,
},
pressed: {
false: null,
true: styles.pressed,
},
},
// 复合变体:特定组合的特殊样式
compoundVariants: [
{
variant: 'outlined',
hovered: true,
style: styles.outlinedHover,
},
{
variant: 'outlined',
pressed: true,
style: styles.outlinedActive,
},
{
variant: 'filled',
pressed: true,
style: styles.filledActive,
},
],
defaultVariants: {
variant: 'filled',
},
}),
[styles],
);
```
### 与交互状态结合
结合 React Native 的交互状态(hovered、pressed):
```tsx
<Pressable
style={({ hovered, pressed }) => [
variants({ variant, hovered, pressed }),
style,
]}
>
{children}
</Pressable>
```
**CVA 最佳实践:**
- 始终使用 `useMemo` 缓存 CVA 配置,避免重复创建
- 将 `styles` 对象加入依赖数组
- 将交互状态(hovered、pressed)作为变体处理
- 使用 `compoundVariants` 处理组合逻辑,保持代码清晰
- 为布尔变体提供 `false: null` 选项
## 开发流程
### 添加新组件
1. **创建组件目录结构**
```bash
mkdir -p src/components/NewComponent/demos
```
2. **创建必需文件**
按以下顺序创建文件:
- `type.ts` - TypeScript 类型定义
- `style.ts` - 样式定义
- `NewComponent.tsx` - 组件实现
- `index.ts` - 导出文件
- `index.md` - 组件文档(包含 frontmatter
- `demos/basic.tsx` - 基础示例
- `demos/index.tsx` - Demo 配置文件(必需)
3. **配置 demos/index.tsx**
创建 demo 配置文件,引入所有示例:
```tsx
import type { DemoConfig } from '@lobehub/ui-rn';
import React from 'react';
import BasicDemo from './basic';
// 引入其他 demo...
const demos: DemoConfig = [
{ component: <BasicDemo />, key: 'basic', title: '基础用法' },
// 添加其他 demo 配置...
];
export default demos;
```
4. **更新组件索引**
在 [src/components/index.ts](mdc:src/components/index.ts) 中添加导出:
```tsx
export { default as NewComponent type NewComponentProps } from './NewComponent';
```
5. **生成 Playground 数据** ⚠️
添加或修改组件后,**必须**运行以下命令更新 Playground
```bash
pnpm run build:playground
```
或使用完整命令:
```bash
pnpm run workflow:playground
```
这个命令会:
- 扫描所有组件目录
- 读取 `index.md` 中的 frontmatter 元数据
- 生成 `app/playground/.data/index.json` 数据文件
- 生成 `app/playground/.data/import.ts` 导入文件
- 更新 Playground 应用的组件列表
**注意**:如果不运行此命令,新组件将不会出现在 Playground 中。
### 更新现有组件
1. **修改组件实现**
- 更新 `ComponentName.tsx` 的组件逻辑
- 更新 `style.ts` 的样式定义
- 更新 `type.ts` 的类型定义
2. **更新文档和示例**
- 更新 `index.md` 文档,确保示例代码与实际 API 一致
- 如果添加了新功能,创建对应的 demo 文件(如 `demos/newFeature.tsx`
- 在 `demos/index.tsx` 中注册新的 demo
3. **运行 Playground 更新**
- 如果修改了组件的 `group` 或 `title`,运行 `pnpm run build:playground`
- 如果添加了新的 demo,也需要运行此命令
### 测试组件
在 Playground 中测试组件:
```bash
# 启动开发服务器
pnpm start
# 在 iOS 模拟器中运行
pnpm ios
# 在 Android 模拟器中运行
pnpm android
```
导航到 Playground 页面查看和测试组件。
## 命名规范
- **组件文件**PascalCase(如 `ActionIcon.tsx`
- **样式文件**camelCase(如 `style.ts`
- **类型文件**camelCase(如 `type.ts`
- **导出文件**:固定名称 `index.ts`
- **文档文件**:固定名称 `index.md`
### Demo 命名规范
- **Demo 文件**camelCase(如 `basic.tsx`, `variants.tsx`, `disabled.tsx`
- **Demo 配置文件**:固定名称 `demos/index.tsx`
- **Demo 导入名称**PascalCase + Demo 后缀(如 `BasicDemo`, `VariantsDemo`
- **Demo key**kebab-case(如 `'basic'`, `'variants'`, `'disabled-state'`
- **Demo title**:中文描述(如 `'基础用法'`, `'不同视觉风格'`, `'禁用状态'`
**示例:**
```tsx
// demos/disabled-state.tsx
export default () => { /* ... */ };
// demos/index.tsx
import DisabledStateDemo from './disabled-state';
const demos: DemoConfig = [
{ component: <DisabledStateDemo />, key: 'disabled-state', title: '禁用状态' },
];
```
## 样式最佳实践
1. **优先使用 stylish 预设**
```tsx
filled: stylish.variantFilled, // ✅ 推荐
filled: { backgroundColor: token.colorBgContainer }, // ❌ 避免
```
2. **保持样式的可组合性**
```tsx
// ✅ 好的做法:细粒度的样式定义
root: { borderRadius: token.borderRadius },
shadow: stylish.shadow,
glass: stylish.blur,
// ❌ 避免:耦合多个效果
rootWithShadow: { ...stylish.shadow, borderRadius: token.borderRadius },
```
3. **使用语义化的样式名称**
```tsx
// ✅ 清晰的语义
variantPrimary: stylish.variantFilled,
variantPrimaryActive: stylish.variantFilledActive,
// ❌ 避免无意义的名称
style1: stylish.variantFilled,
activeStyle: stylish.variantFilledActive,
```
## 相关文件参考
### 组件结构示例
- [Block 组件实现](mdc:src/components/Block/Block.tsx) - CVA 用法示例
- [Block 样式定义](mdc:src/components/Block/style.ts) - createStyles 示例
- [Block 类型定义](mdc:src/components/Block/type.ts) - Props 接口示例
- [Block 文档](mdc:src/components/Block/index.md) - 组件文档示例
### Demo 示例
- [Block Demo 配置](mdc:src/components/Block/demos/index.tsx) - Demo 配置文件示例
- [Block 基础示例](mdc:src/components/Block/demos/basic.tsx) - 基础 demo 示例
- [Block 交互示例](mdc:src/components/Block/demos/clickable.tsx) - 交互 demo 示例
- [ActionIcon Demo 配置](mdc:src/components/ActionIcon/demos/index.tsx) - 多 demo 配置示例
### 工具和类型
- [DemoConfig 类型定义](mdc:src/components/types.ts) - Demo 配置类型
- [Playground 数据生成脚本](mdc:scripts/playground/index.ts) - 自动化流程
- [组件导出索引](mdc:src/components/index.ts) - 导出规范
## 快速检查清单
在提交新组件或更新组件之前,请确认:
### 新组件清单
- [ ] 创建了组件目录 `src/components/ComponentName/`
- [ ] 创建了 `ComponentName.tsx` 主文件
- [ ] 创建了 `type.ts` 类型定义
- [ ] 创建了 `style.ts` 样式定义
- [ ] 创建了 `index.ts` 导出文件
- [ ] 创建了 `index.md` 文档,包含正确的 frontmattergroup, title, description
- [ ] 创建了 `demos/basic.tsx` 基础示例
- [ ] 创建了 `demos/index.tsx` 配置文件
- [ ] 在 `src/components/index.ts` 中添加了导出
- [ ] 运行了 `pnpm run build:playground`
- [ ] 在 Playground 中测试了组件
### Demo 清单
- [ ] `demos/index.tsx` 从 `@lobehub/ui-rn` 导入了 `DemoConfig` 类型
- [ ] 所有 demo 文件使用默认导出箭头函数组件
- [ ] `demos/index.tsx` 中的 demo 配置使用了正确的命名:
- `key` 使用 kebab-case
- `title` 使用中文
- 导入名称使用 PascalCase + Demo 后缀
- [ ] `basic` demo 放在配置数组的第一位
- [ ] demo 代码简洁,专注于单一功能展示
### 样式清单
- [ ] 使用 `createStyles` 创建样式
- [ ] 优先使用 `stylish` 预设而非自定义样式
- [ ] 从 `token` 获取主题变量
- [ ] 如果使用 CVA,已用 `useMemo` 包裹并依赖 `styles`
- [ ] 样式名称语义化清晰
### 文档清单
- [ ] `index.md` 包含正确的 frontmatter
- [ ] 文档包含 Features 列表
- [ ] 文档包含 Basic Usage 示例
- [ ] 文档示例代码与实际 API 一致
+78
View File
@@ -0,0 +1,78 @@
---
description: 包含添加 debug 日志请求时
globs:
alwaysApply: false
---
# Debug 包使用指南
本项目使用 [debug](mdc:https:/github.com/debug-js/debug) 包进行调试日志记录。使用此规则来确保团队成员统一调试日志格式。
## 基本用法
1. 导入 debug 包:
```typescript
import debug from 'debug';
```
2. 创建一个命名空间的日志记录器:
```typescript
// 格式: lobe:[模块]:[子模块]
const log = debug('lobe-[模块名]:[子模块名]');
```
一个文件尽量只创建一个 log 命名空间,子模块名使用文件名
3. 使用日志记录器:
```typescript
log('简单消息');
log('带变量的消息: %O', object);
log('格式化数字: %d', number);
```
## 命名空间约定
- 桌面应用相关: `lobe-desktop:[模块]`
- 服务端相关: `lobe-server:[模块]`
- 客户端相关: `lobe-client:[模块]`
- 路由相关: `lobe-[类型]-router:[模块]`
## 格式说明符
- `%O` - 对象展开(推荐用于复杂对象)
- `%o` - 对象
- `%s` - 字符串
- `%d` - 数字
## 示例
查看 [market/index.ts](mdc:src/server/routers/edge/market/index.ts) 中的使用示例:
```typescript
import debug from 'debug';
const log = debug('lobe-edge-router:market');
log('getAgent input: %O', input);
```
## 启用调试
要在开发时启用调试输出,需设置环境变量:
### 在浏览器中
在控制台执行:
```javascript
localStorage.debug = 'lobe-*'
```
### 在 Node.js 环境中
```bash
DEBUG=lobe-* npm run dev
# 或者
DEBUG=lobe-* pnpm dev
```
@@ -0,0 +1,118 @@
---
description:
globs:
alwaysApply: false
---
# Development Workflow
## Package Management
### Using pnpm
- **Install dependencies**: `pnpm install`
- **Add new package**: `pnpm add <package-name>`
- **Add dev dependency**: `pnpm add -D <package-name>`
- **Run scripts**: `pnpm <script-name>`
### Available Scripts
- `pnpm start` - Start Expo development server
- `pnpm android` - Run on Android device/emulator
- `pnpm ios` - Run on iOS device/simulator
- `pnpm web` - Run in web browser
- `pnpm test` - Run Jest tests in watch mode
- `pnpm lint` - Run ESLint
- `pnpm i18n` - Generate translations for all languages
## Internationalization (i18n)
### Workflow
1. **Add translations** to `i18n/default/common.ts` (Chinese source)
2. **Use in components** with `useTranslation` hook
3. **Generate translations** with `pnpm run i18n`
4. **Test** with different languages
### Key Files
- `i18n/default/common.ts` - Source translations (Chinese)
- `locales/*/common.json` - Generated translations (18 languages)
- `scripts/i18nWorkflow/` - Translation generation scripts
### Quick Reference
```typescript
import { useTranslation } from 'react-i18next';
const { t } = useTranslation();
<Text>{t('chat.history')}</Text>
```
See [internationalization.mdc](mdc:.cursor/rules/internationalization.mdc) for detailed guidelines.
## Development Environment
### Configuration Files
- [package.json](mdc:package.json) - Dependencies and scripts
- [tsconfig.json](mdc:tsconfig.json) - TypeScript configuration
- [metro.config.js](mdc:metro.config.js) - Metro bundler configuration
- [app.config.ts](mdc:app.config.ts) - Expo app configuration (TypeScript, 类型安全)
- [eas.json](mdc:eas.json) - EAS Build configuration
### Environment Setup
- [src/polyfills.ts](mdc:src/polyfills.ts) - Polyfills for React Native
- [global.d.ts](mdc:global.d.ts) - Global TypeScript declarations
## Code Organization
### File Naming Conventions
- Components: PascalCase (e.g., `ChatBubble.tsx`)
- Hooks: camelCase with `use` prefix (e.g., `useChat.ts`)
- Utilities: camelCase (e.g., `fetchSSE.ts`)
- Types: camelCase (e.g., `session.ts`)
- Constants: UPPER_SNAKE_CASE (e.g., `DEFAULT_AGENT_META`)
### Import Patterns
- Use absolute imports with `@/` prefix
- Group imports: React, third-party, internal
- Use named exports for components
- Use default exports for main components
### TypeScript Guidelines
- Enable strict mode in [tsconfig.json](mdc:tsconfig.json)
- Define interfaces for all props and state
- Use proper type annotations
- Avoid `any` type - use `unknown` or proper types
## Testing
### Test Structure
- [components/__tests__/](mdc:components/__tests__/) - Component tests
- [components/__tests__/__snapshots__/](mdc:components/__tests__/__snapshots__/) - Jest snapshots
- Use Jest with React Native Testing Library
### Testing Patterns
- Test component rendering
- Test user interactions
- Test error states
- Use snapshots for UI regression testing
## Code Quality
### Linting
- ESLint configuration for React Native
- Prettier for code formatting
- TypeScript strict checking
### Best Practices
- Follow existing code patterns
- Don't change component styles without reason
- Implement proper error boundaries
- Use proper loading states
- Handle edge cases gracefully
## Build and Deployment
### EAS Build
- [eas.json](mdc:eas.json) - Build configuration
- Support for Android and iOS builds
- Environment-specific configurations
### Assets
- [assets/](mdc:assets/) - App icons, fonts, and images
- [assets/fonts/](mdc:assets/fonts/) - Custom fonts
- [assets/images/](mdc:assets/images/) - App images and icons
@@ -0,0 +1,192 @@
---
description:
globs:
alwaysApply: true
---
# Internationalization (i18n) Guidelines
## Overview
This project uses i18next for internationalization with a custom workflow that generates translations from a single source file.
## Architecture
- **Source**: `i18n/default` - Contains all Chinese translations as the source
- **Generated**: `locales/* - Auto-generated translations for 18 languages
- **Script**: `scripts/i18nWorkflow/` - Handles translation generation
## Supported Languages
18 languages: ar, bg-BG, de-DE, en-US, es-ES, fa-IR, fr-FR, it-IT, ja-JP, ko-KR, nl-NL, pl-PL, pt-BR, ru-RU, tr-TR, vi-VN, zh-CN, zh-TW
## Adding New Translations
### Step 1: Add to Source File
Add new translation keys to suitable file in `i18n/default` like `chat.ts` and `common.ts`:
```typescript
export default {
// ... existing translations
newSection: {
title: '新标题',
description: '新描述',
actions: {
save: '保存',
cancel: '取消'
}
}
};
```
### Step 2: Use in Components
Use the `useTranslation` hook in React components:
```typescript
import { useTranslation } from 'react-i18next';
const { t } = useTranslation();
// Usage
<Text>{t('newSection.title')}</Text>
<Text>{t('newSection.actions.save')}</Text>
```
### Step 3: Generate Translations
Run the i18n script to generate all language translations:
```bash
pnpm run i18n
```
## Translation Key Naming Convention
use simpilifed naming keys
### Structure
- Use nested objects for related translations
- Use camelCase for keys
- Group by feature/section
### Examples
```typescript
// Good
settings: {
theme: {
title: '主题设置',
light: '浅色模式',
dark: '深色模式'
}
}
// Good
chat: {
actions: {
copy: '复制',
delete: '删除',
retry: '重试'
},
messages: {
copied: '已复制',
failed: '失败'
}
}
// Avoid
settingsThemeTitle: '主题设置',
settingsThemeLight: '浅色模式'
```
## Common Translation Keys
### Chat Features
```typescript
chat: {
history: '对话历史',
messageCopied: '消息已复制',
confirmDelete: '确认删除',
copy: '复制',
retry: '重试',
delete: '删除',
send: '发送',
stop: '停止',
thinking: '思考中...',
placeholder: '输入您的消息...'
}
```
### Settings Features
```typescript
settings: {
title: '设置',
theme: {
title: '主题设置',
light: '浅色模式',
dark: '深色模式',
auto: '跟随系统',
},
locale: {
title: '语言设置',
auto: {
title: '跟随系统',
description: '跟随系统语言设置'
}
},
}
```
### Common Actions
```typescript
common: {
cancel: '取消',
confirm: '确认',
save: '保存',
delete: '删除',
edit: '编辑',
add: '添加',
search: '搜索',
loading: '加载中...',
error: '错误',
success: '成功',
warning: '警告',
info: '信息'
}
```
## Important Notes
### App Name
- **Do NOT translate** the app name "LobeChat"
- Keep it hardcoded in components: `<Text>LobeChat</Text>`
- Do not add `app.name` to translation keys
### Code Comments
- Chinese comments in code (like `{/* 状态栏 */}`) do not need translation
- Only user-facing text needs internationalization
### Error Messages
- Always use translation keys for error messages
- Provide fallback messages in English
### Placeholders
- Translate placeholder text in input fields
- Use `placeholderTextColor` for styling
## Workflow Checklist
When adding new UI text:
1. ✅ Add translation key to `i18n/default/common.ts`
2. ✅ Use `useTranslation` hook in component
3. ✅ Replace hardcoded text with `t('key.path')`
4. ✅ Run `pnpm run i18n` to generate translations
5. ✅ Test with different languages
6. ✅ Verify all 18 languages are generated correctly
## Testing
- Switch languages in settings to verify translations
- Check that all user-facing text is translated
- Ensure app name remains "LobeChat" in all languages
- Verify error messages and placeholders are translated
## Troubleshooting
- If translations don't appear, run `pnpm run i18n` again
- Check that translation keys match exactly between source and usage
- Verify `useTranslation` hook is imported and used correctly
- Ensure translation keys follow the nested object structure
@@ -0,0 +1,631 @@
---
globs: *.ts,*.tsx
description: 优先使用自定义组件规范 - 使用 Text、Flexbox、Center、Block 等自定义组件替代 React Native 原生组件
---
# 优先使用自定义组件规范
本规范定义了在 LobeChat Mobile 项目中应该优先使用自定义组件而不是 React Native 原生组件的场景和原因。
## 核心原则
**✅ 优先使用自定义组件**:项目提供了一系列增强的自定义组件,它们提供了更友好的 API、更好的类型安全、主题集成以及样式变体支持。
**❌ 避免直接使用原生组件**:除非有特殊需求,否则应避免直接使用 `Text`、`View`、`Pressable` 等 React Native 原生组件。
## 组件映射关系
| 原生组件 | 自定义组件 | 使用场景 |
|---------|----------|---------|
| `Text` | `@/components/Text` | 所有文本显示场景 |
| `View` (flex 布局) | `@/components/Flexbox` | 需要 flex 布局的容器 |
| `View` (居中布局) | `@/components/Center` | 需要内容居中的容器 |
| `View` (带样式) | `@/components/Block` | 需要背景、边框、阴影等样式的容器 |
| `Pressable` | `@/components/Flexbox` 或 `@/components/Block` | 可点击的布局容器(使用 `onPress` prop |
## 1. Text 组件
### 为什么使用 Text
`@/components/Text` 提供了比原生 `Text` 更丰富的功能:
- ✅ **语义化标题**:支持 `h1` ~ `h5` 标题级别
- ✅ **文本样式**`strong`、`italic`、`underline`、`delete`、`code` 等
- ✅ **语义化类型**`danger`、`success`、`warning`、`info`、`secondary`
- ✅ **省略号支持**:更友好的 `ellipsis` 配置
- ✅ **主题集成**:自动适配主题颜色和字体
- ✅ **更好的类型提示**:完整的 TypeScript 支持
### 使用示例
```tsx
// ❌ 避免使用原生 Text
import { Text } from 'react-native';
<Text style={{ fontWeight: 'bold', color: 'red' }}>错误信息</Text>
// ✅ 推荐使用自定义 Text
import Text from '@/components/Text';
<Text type="danger" strong>错误信息</Text>
```
### 常见用法
```tsx
import Text from '@/components/Text';
// 标题
<Text as="h1">一级标题</Text>
<Text as="h2">二级标题</Text>
// 文本样式
<Text strong>加粗文本</Text>
<Text italic>斜体文本</Text>
<Text underline>下划线文本</Text>
<Text delete>删除线文本</Text>
<Text code>代码文本</Text>
// 语义化类型
<Text type="danger">错误提示</Text>
<Text type="success">成功提示</Text>
<Text type="warning">警告提示</Text>
<Text type="info">信息提示</Text>
<Text type="secondary">次要文本</Text>
// 省略号
<Text ellipsis>这是一段很长的文本会被截断...</Text>
<Text ellipsis={{ rows: 2 }}>这是一段很长的文本,最多显示两行,超出部分会被截断...</Text>
// 组合使用
<Text type="danger" strong numberOfLines={1}>重要错误信息</Text>
```
## 2. Flexbox 组件
### 为什么使用 Flexbox
`@/components/Flexbox` 提供了比原生 `View` 更友好的 flex 布局配置:
- ✅ **简化的 API**:直观的 props 命名 (`horizontal`、`justify`、`align`、`gap`)
- ✅ **自动处理方向**`horizontal` prop 自动切换 `flexDirection`
- ✅ **内置交互**:支持 `onPress`,自动切换 `Pressable`/`View`
- ✅ **间距支持**:原生支持 `gap` prop
- ✅ **更少的样式代码**:常用布局属性作为 props 直接配置
### 使用示例
```tsx
// ❌ 避免使用原生 View
import { View, Pressable } from 'react-native';
<View style={{ flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center', gap: 16 }}>
<Text>内容 1</Text>
<Text>内容 2</Text>
</View>
// ✅ 推荐使用 Flexbox
import Flexbox from '@/components/Flexbox';
import Text from '@/components/Text';
<Flexbox horizontal justify="space-between" align="center" gap={16}>
<Text>内容 1</Text>
<Text>内容 2</Text>
</Flexbox>
```
### 常见用法
```tsx
import Flexbox from '@/components/Flexbox';
// 垂直布局(默认)
<Flexbox gap={16}>
<Text>项目 1</Text>
<Text>项目 2</Text>
</Flexbox>
// 水平布局
<Flexbox horizontal gap={8}>
<Text>项目 1</Text>
<Text>项目 2</Text>
</Flexbox>
// 对齐方式
<Flexbox justify="center" align="center">
<Text>居中内容</Text>
</Flexbox>
<Flexbox horizontal justify="space-between" align="flex-start">
<Text>左侧</Text>
<Text>右侧</Text>
</Flexbox>
// 可点击容器
<Flexbox
horizontal
gap={8}
padding={16}
onPress={() => console.log('clicked')}
>
<Icon name="home" />
<Text>首页</Text>
</Flexbox>
// 弹性布局
<Flexbox horizontal gap={8}>
<Flexbox flex={1}>
<Text>占据剩余空间</Text>
</Flexbox>
<Text>固定宽度</Text>
</Flexbox>
// 换行
<Flexbox horizontal wrap="wrap" gap={8}>
<Text>标签 1</Text>
<Text>标签 2</Text>
<Text>标签 3</Text>
</Flexbox>
```
## 3. Center 组件
### 为什么使用 Center
`@/components/Center` 是专门用于居中布局的组件:
- ✅ **语义化**:明确表达居中意图
- ✅ **简化代码**:不需要手动设置 `justify` 和 `align`
- ✅ **默认居中**`justify="center"` 和 `align="center"` 是默认值
- ✅ **基于 Flexbox**:继承所有 Flexbox 的功能
### 使用示例
```tsx
// ❌ 避免使用原生 View
import { View } from 'react-native';
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>居中内容</Text>
</View>
// ✅ 推荐使用 Center
import Center from '@/components/Center';
import Text from '@/components/Text';
<Center flex={1}>
<Text>居中内容</Text>
</Center>
```
### 常见用法
```tsx
import Center from '@/components/Center';
// 基础居中
<Center>
<Text>居中内容</Text>
</Center>
// 占满容器并居中
<Center flex={1}>
<Text>垂直和水平居中</Text>
</Center>
// 固定尺寸居中
<Center width={200} height={200}>
<Icon name="loading" />
</Center>
// 水平居中(垂直方向可以自定义)
<Center horizontal justify="flex-start" gap={8}>
<Icon name="user" />
<Text>用户名</Text>
</Center>
// 可点击的居中容器
<Center
width={100}
height={100}
onPress={() => console.log('clicked')}
>
<Icon name="add" />
<Text>添加</Text>
</Center>
```
## 4. Block 组件
### 为什么使用 Block
`@/components/Block` 是增强的样式容器组件:
- ✅ **样式变体**`filled`、`outlined`、`borderless` 三种预设样式
- ✅ **视觉效果**:内置 `shadow` 和 `glass` 效果
- ✅ **交互状态**:自动处理 hover 和 press 状态样式
- ✅ **主题集成**:使用 `stylish` 预设,自动适配主题
- ✅ **CVA 管理**:类型安全的样式组合
- ✅ **基于 Flexbox**:继承所有 Flexbox 的布局能力
### 使用示例
```tsx
// ❌ 避免使用原生 View 或 Pressable
import { Pressable } from 'react-native';
<Pressable
style={({ pressed }) => ({
backgroundColor: pressed ? '#f0f0f0' : '#fff',
borderRadius: 8,
padding: 16,
shadowColor: '#000',
shadowOpacity: 0.1,
// ... 大量样式代码
})}
onPress={handlePress}
>
<Text>卡片内容</Text>
</Pressable>
// ✅ 推荐使用 Block
import Block from '@/components/Block';
import Text from '@/components/Text';
<Block variant="filled" shadow onPress={handlePress}>
<Text>卡片内容</Text>
</Block>
```
### 常见用法
```tsx
import Block from '@/components/Block';
// 样式变体
<Block variant="filled">
<Text>填充背景</Text>
</Block>
<Block variant="outlined">
<Text>轮廓边框</Text>
</Block>
<Block variant="borderless">
<Text>无边框</Text>
</Block>
// 视觉效果
<Block variant="filled" shadow>
<Text>带阴影的卡片</Text>
</Block>
<Block variant="filled" glass>
<Text>玻璃效果背景</Text>
</Block>
// 可点击卡片
<Block
variant="outlined"
padding={16}
gap={8}
onPress={() => console.log('clicked')}
>
<Text as="h3">卡片标题</Text>
<Text type="secondary">卡片描述</Text>
</Block>
// 组合布局和样式
<Block variant="filled" shadow padding={24}>
<Flexbox gap={16}>
<Text as="h2">用户信息</Text>
<Flexbox horizontal gap={8}>
<Icon name="user" />
<Text>用户名</Text>
</Flexbox>
</Flexbox>
</Block>
```
## 5. 组件组合使用
### 完整示例:用户卡片
```tsx
import Block from '@/components/Block';
import Center from '@/components/Center';
import Flexbox from '@/components/Flexbox';
import Text from '@/components/Text';
const UserCard = ({ user }) => {
return (
<Block variant="filled" shadow padding={16} gap={12}>
{/* 头部:头像和名称 */}
<Flexbox horizontal gap={12} align="center">
<Center width={48} height={48}>
<Avatar source={user.avatar} />
</Center>
<Flexbox flex={1} gap={4}>
<Text as="h4" strong>{user.name}</Text>
<Text type="secondary" fontSize={12}>{user.email}</Text>
</Flexbox>
</Flexbox>
{/* 统计信息 */}
<Flexbox horizontal gap={24}>
<Flexbox gap={4} align="center">
<Text strong fontSize={18}>{user.posts}</Text>
<Text type="secondary" fontSize={12}>帖子</Text>
</Flexbox>
<Flexbox gap={4} align="center">
<Text strong fontSize={18}>{user.followers}</Text>
<Text type="secondary" fontSize={12}>关注者</Text>
</Flexbox>
<Flexbox gap={4} align="center">
<Text strong fontSize={18}>{user.following}</Text>
<Text type="secondary" fontSize={12}>关注中</Text>
</Flexbox>
</Flexbox>
{/* 操作按钮 */}
<Flexbox horizontal gap={8}>
<Block
flex={1}
variant="filled"
padding={12}
onPress={() => console.log('follow')}
>
<Center>
<Text>关注</Text>
</Center>
</Block>
<Block
flex={1}
variant="outlined"
padding={12}
onPress={() => console.log('message')}
>
<Center>
<Text>消息</Text>
</Center>
</Block>
</Flexbox>
</Block>
);
};
```
## 6. 何时可以使用原生组件
以下场景可以考虑使用原生组件:
### 6.1 特殊需求场景
```tsx
// ScrollView, FlatList, SectionList 等列表组件
import { FlatList } from 'react-native';
<FlatList data={data} renderItem={renderItem} />
// Image 组件
import { Image } from 'react-native';
<Image source={require('./image.png')} />
// TextInput 组件(如果没有自定义封装)
import { TextInput } from 'react-native';
<TextInput value={text} onChangeText={setText} />
// 特殊的原生组件
import { SafeAreaView, KeyboardAvoidingView, Modal } from 'react-native';
```
### 6.2 性能关键场景
在列表项等性能关键场景,如果自定义组件带来性能问题,可以考虑使用原生组件,但需要:
```tsx
// ⚠️ 性能优化场景,谨慎使用
import { View, Text } from 'react-native';
import { memo } from 'react';
const ListItem = memo(({ item }) => (
<View style={styles.item}>
<Text style={styles.text}>{item.title}</Text>
</View>
));
```
## 7. 导入规范
### 7.1 应用代码中的导入
在应用代码(`app/`、`src/features/` 等)中:
```tsx
// ✅ 推荐:使用绝对路径导入
import Block from '@/components/Block';
import Center from '@/components/Center';
import Flexbox from '@/components/Flexbox';
import Text from '@/components/Text';
```
### 7.2 组件内部的导入
在 `src/components/` 目录下的组件中:
```tsx
// ✅ 推荐:使用相对路径导入其他组件
import Block from '../Block';
import Center from '../Center';
import Flexbox from '../Flexbox';
import Text from '../Text';
```
### 7.3 Demo 文件中的导入
在组件的 `demos/` 目录下:
```tsx
// ✅ 推荐:从 @lobehub/ui-rn 导入(展示公开 API
import { Block, Center, Flexbox, Text } from '@lobehub/ui-rn';
```
## 8. 快速参考
| 需求 | 推荐组件 | 关键 Props |
|-----|---------|-----------|
| 显示普通文本 | `Text` | `children` |
| 显示标题 | `Text` | `as="h1"` ~ `as="h5"` |
| 显示错误/成功提示 | `Text` | `type="danger"` / `type="success"` |
| 垂直布局 | `Flexbox` | `gap={16}` |
| 水平布局 | `Flexbox` | `horizontal gap={8}` |
| 内容居中 | `Center` | `flex={1}` |
| 卡片容器 | `Block` | `variant="filled" shadow` |
| 可点击容器 | `Flexbox` / `Block` | `onPress={handler}` |
| 列表项 | `Block` / `Flexbox` | `horizontal align="center" gap={12}` |
## 9. 常见错误和修复
### 错误 1: 直接使用原生 Text
```tsx
// ❌ 错误
import { Text, View } from 'react-native';
<View>
<Text style={{ fontWeight: 'bold', color: '#e74c3c' }}>
错误信息
</Text>
</View>
// ✅ 修复
import Flexbox from '@/components/Flexbox';
import Text from '@/components/Text';
<Flexbox>
<Text type="danger" strong>
错误信息
</Text>
</Flexbox>
```
### 错误 2: 复杂的 View 样式
```tsx
// ❌ 错误
import { View } from 'react-native';
<View
style={{
flexDirection: 'row',
justifyContent: 'space-between',
alignItems: 'center',
gap: 16,
padding: 12,
}}
>
{children}
</View>
// ✅ 修复
import Flexbox from '@/components/Flexbox';
<Flexbox
horizontal
justify="space-between"
align="center"
gap={16}
padding={12}
>
{children}
</Flexbox>
```
### 错误 3: 手动实现居中布局
```tsx
// ❌ 错误
import { View } from 'react-native';
<View style={{
flex: 1,
justifyContent: 'center',
alignItems: 'center'
}}>
{children}
</View>
// ✅ 修复
import Center from '@/components/Center';
<Center flex={1}>
{children}
</Center>
```
### 错误 4: 复杂的 Pressable 样式
```tsx
// ❌ 错误
import { Pressable, StyleSheet } from 'react-native';
<Pressable
style={({ pressed }) => [
styles.card,
pressed && styles.cardPressed,
]}
onPress={handlePress}
>
{children}
</Pressable>
const styles = StyleSheet.create({
card: {
backgroundColor: '#fff',
borderRadius: 8,
padding: 16,
shadowColor: '#000',
shadowOpacity: 0.1,
shadowRadius: 8,
shadowOffset: { width: 0, height: 2 },
},
cardPressed: {
opacity: 0.8,
},
});
// ✅ 修复
import Block from '@/components/Block';
<Block
variant="filled"
shadow
padding={16}
onPress={handlePress}
>
{children}
</Block>
```
## 10. 总结
### 核心优势
使用自定义组件的核心优势:
1. **更少的代码**:友好的 API 减少样式代码
2. **更好的可读性**:语义化的 props 和组件名
3. **类型安全**:完整的 TypeScript 支持
4. **主题集成**:自动适配明暗主题
5. **统一风格**:使用预设样式保持 UI 一致性
6. **易于维护**:集中管理样式逻辑
### 记住这个规则
**在 LobeChat Mobile 中,优先使用:**
- ✅ `Text` 而不是 `react-native` 的 `Text`
- ✅ `Flexbox` 而不是 `react-native` 的 `View` (flex 布局)
- ✅ `Center` 而不是 `react-native` 的 `View` (居中布局)
- ✅ `Block` 而不是 `react-native` 的 `View` / `Pressable` (样式容器)
**这些组件提供了更友好的配置方式,让代码更简洁、更易维护!**
@@ -0,0 +1,45 @@
---
description:
globs:
alwaysApply: false
---
# Lobe Chat React Native - Project Overview
This is a React Native chat application built with Expo Router, featuring AI-powered conversations and modern UI components.
## Core Architecture
### Entry Points
- Main app entry: [src/app/_layout.tsx](mdc:src/app/_layout.tsx) - Root layout with providers
- App router: [src/app/index.tsx](mdc:src/app/index.tsx) - Main routing logic
- Package config: [package.json](mdc:package.json) - Dependencies and scripts
### Key Technologies
- **Expo Router**: File-based routing system
- **Zustand**: State management with persistence
- **React Native Markdown**: Rich text rendering
- **Shiki**: Syntax highlighting for code blocks
- **MathJax**: Mathematical formula rendering
### State Management
- OpenAI config: [store/openai.ts](mdc:store/openai.ts) - API key and proxy settings
- Session management: [store/session/](mdc:store/session) - Chat sessions and groups
- Chat state: [store/chat/](mdc:store/chat) - Active chat functionality
### Type Definitions
- Session types: [types/session.ts](mdc:types/session.ts) - Chat session interfaces
- Agent types: [types/agent.ts](mdc:types/agent.ts) - AI agent configurations
- Message types: [types/message.ts](mdc:types/message.ts) - Chat message structures
- Component types: [types/component.ts](mdc:types/component.ts) - UI component interfaces
### Constants and Configuration
- Session constants: [const/session.ts](mdc:const/session.ts) - Default session configurations
- Settings: [const/settings/](mdc:const/settings) - App configuration options
- Branding: [const/branding.ts](mdc:const/branding.ts) - App branding constants
## Development Guidelines
- Use pnpm as the package manager
- Follow existing code patterns and component styles
- Maintain TypeScript strict typing
- Use Expo Router for navigation
- Implement proper error handling and loading states
@@ -0,0 +1,160 @@
---
description:
globs:
alwaysApply: false
---
# Quick Reference Guide
## Essential Commands
```bash
pnpm start # Start development server
pnpm ios # Run on iOS
pnpm android # Run on Android
pnpm web # Run in browser
pnpm test # Run tests
pnpm lint # Lint code
pnpm i18n # Generate translations
```
## Internationalization (i18n)
### Quick Setup
```typescript
import { useTranslation } from 'react-i18next';
const { t } = useTranslation();
// Usage
<Text>{t('chat.history')}</Text>
<Text>{t('settings.theme.title')}</Text>
```
### Key Files
- `i18n/default/common.ts` - Add new translations here
- `locales/*/common.json` - Generated translations
- `pnpm run i18n` - Generate all languages
### Common Keys
```typescript
// Chat
t('chat.history') // 对话历史
t('chat.copy') // 复制
t('chat.delete') // 删除
// Settings
t('settings.theme.title') // 主题设置
t('settings.locale.title') // 语言设置
// Common
t('common.cancel') // 取消
t('common.confirm') // 确认
t('common.save') // 保存
```
See [internationalization.mdc](mdc:.cursor/rules/internationalization.mdc) for full guidelines.
## Key Files to Know
### Entry Points
- [src/app/_layout.tsx](mdc:src/app/_layout.tsx) - Root layout with providers
- [src/app/index.tsx](mdc:src/app/index.tsx) - Main routing logic
- [package.json](mdc:package.json) - Dependencies and scripts
### State Management
- [store/openai.ts](mdc:store/openai.ts) - OpenAI configuration
- [store/session/index.ts](mdc:store/session/index.ts) - Session management
- [store/chat/index.ts](mdc:store/chat/index.ts) - Chat state
### Type Definitions
- [types/session.ts](mdc:types/session.ts) - Session interfaces
- [types/agent.ts](mdc:types/agent.ts) - Agent configurations
- [types/message.ts](mdc:types/message.ts) - Message structures
### Core Components
- [components/Markdown/index.tsx](mdc:components/Markdown/index.tsx) - Markdown renderer
- [components/Highlighter/index.tsx](mdc:components/Highlighter/index.tsx) - Code highlighting
- [components/Toast/index.ts](mdc:components/Toast/index.ts) - Toast system
## Common Patterns
### Component Structure
```typescript
interface ComponentProps {
// Props definition
}
const Component: React.FC<ComponentProps> = ({ prop1, prop2 }) => {
const { t } = useTranslation();
const { colors, dark } = useTheme();
const styles = StyleSheet.create({
// Styles
});
return (
<View style={styles.container}>
<Text>{t('component.title')}</Text>
</View>
);
};
```
### Store Usage
```typescript
const { data, setData } = useStore();
const derivedData = useStore(selector);
```
### Theme Integration
```typescript
const { colors, dark } = useTheme();
const backgroundColor = dark ? colors.background : '#fff';
```
## Development Rules
### Code Style
- Use pnpm for package management
- Follow existing component patterns
- Don't change styles without reason
- Use TypeScript strict mode
- Implement proper error handling
- **Always use translation keys for user-facing text**
### File Organization
- Components in `components/` directory
- Types in `types/` directory
- Constants in `const/` directory
- Utilities in `utils/` directory
- Store logic in `store/` directory
- Translations in `i18n/default/common.ts`
### Import Patterns
```typescript
// React imports
import React from 'react';
import { useTranslation } from 'react-i18next';
// Internal imports (use @/ prefix)
import { Component } from '@/components/Component';
import { useStore } from '@/store/store';
```
## Troubleshooting
### Common Issues
1. **Metro bundler issues**: Clear cache with `pnpm start --clear`
2. **TypeScript errors**: Check [tsconfig.json](mdc:tsconfig.json) configuration
3. **Theme issues**: Verify [constants/Colors.ts](mdc:constants/Colors.ts) setup
4. **API errors**: Check [store/openai.ts](mdc:store/openai.ts) configuration
5. **Translation issues**: Run `pnpm run i18n` to regenerate translations
### Debug Tools
- [src/app/playground/](mdc:src/app/playground/) - Component testing playground
- React Native Debugger for debugging
- Expo DevTools for development
## Performance Tips
- Use `useMemo` and `useCallback` for expensive operations
- Implement proper list virtualization for large lists
- Use selectors to prevent unnecessary re-renders
- Optimize images and assets
@@ -0,0 +1,7 @@
---
description:
globs:
alwaysApply: true
---
1. 本项目使用 expo 框架,你是 expo 开发专家辅助我编程
2. 该项目原有 web 端,你需要辅助我将其转化为 native 端
@@ -0,0 +1,115 @@
---
description:
globs:
alwaysApply: false
---
# State Management with Zustand
## Store Architecture
The app uses Zustand for state management. Configuration data persists through **react-native-mmkv** (replacing AsyncStorage for better performance).
### Core Stores
#### Configuration Stores (with MMKV persistence)
**Settings**
- [store/setting.ts](mdc:store/setting.ts) - App settings
- Manages: Theme, font, language, developer mode
- Persistence: **MMKV** with JSON serialization (appStorage instance)
**OpenAI Configuration**
- [store/openai.ts](mdc:store/openai.ts) - OpenAI API configuration
- Manages: API key, proxy settings
- Persistence: **MMKV** with JSON serialization (appStorage instance)
**Agent Configuration**
- [store/agent/store.ts](mdc:store/agent/store.ts) - AI Agent configuration
- Manages: Agent config, initialization data
- Persistence: **MMKV** with JSON serialization (appStorage instance)
#### Runtime Stores (no persistence)
**Session Management**
- [store/session/store.ts](mdc:store/session/store.ts) - Main session store
- Manages: Current session state, session list
- Persistence: Runtime only (future: SWR + local database)
**Chat State**
- [store/chat/store.ts](mdc:store/chat/store.ts) - Active chat functionality
- Manages: Current chat state, messages, loading states
- Persistence: Runtime only (future: SWR + local database)
**User State**
- [store/user/index.ts](mdc:store/user/index.ts) - User authentication state
- Manages: Authentication state, user info
- Persistence: Runtime only (Token stored in expo-secure-store separately)
## State Patterns
### Store Structure
```typescript
interface StoreState {
// State properties
data: DataType;
// Actions
setData: (data: DataType) => void;
updateData: (updater: (data: DataType) => DataType) => void;
resetData: () => void;
}
```
### Persistence Pattern
```typescript
import { createJSONStorage, persist } from 'zustand/middleware';
import { appStorage, createMMKVStorage } from '@/utils/storage';
export const useStore = create<StoreState>()(
persist(
(set, get) => ({
// State and actions
}),
{
name: 'store-name',
storage: createJSONStorage(() => createMMKVStorage(appStorage)),
},
),
);
```
### Storage Instances
The app uses a single MMKV instance for configuration data:
- **appStorage**: Global app configuration (settings, openai, agent config)
For sensitive data (tokens, API keys), use **expo-secure-store** instead.
### Selector Pattern
- Use selectors for derived state
- Implement memoization for performance
- Keep selectors in separate files for organization
### Type Safety
- Define interfaces for all store states
- Use TypeScript for compile-time type checking
- Export types for use in components
## Usage Guidelines
### In Components
```typescript
const { data, setData } = useStore();
const derivedData = useStore(selector);
```
### Store Updates
- Use immutable updates
- Implement proper error handling
- Add loading states for async operations
### Performance
- Use selectors to prevent unnecessary re-renders
- Implement proper memoization
- Avoid storing computed values in state
@@ -0,0 +1,9 @@
build:
steps:
- eas/build
- run:
command: |
curl \
-H 'Content-Type: application/json' \
-d '{"content": "Build android development succeeded! URL: ${ eas.job.expoBuildUrl }"}' \
$DISCORD_WEBHOOK_URL
@@ -0,0 +1,9 @@
build:
steps:
- eas/build
- run:
command: |
curl \
-H 'Content-Type: application/json' \
-d '{"content": "Build ios development succeeded! URL: ${ eas.job.expoBuildUrl }"}' \
$DISCORD_WEBHOOK_URL
@@ -0,0 +1,9 @@
build:
steps:
- eas/build
- run:
command: |
curl \
-H 'Content-Type: application/json' \
-d '{"content": "Build android preview succeeded! URL: ${ eas.job.expoBuildUrl }"}' \
$DISCORD_WEBHOOK_URL
+9
View File
@@ -0,0 +1,9 @@
build:
steps:
- eas/build
- run:
command: |
curl \
-H 'Content-Type: application/json' \
-d '{"content": "Build ios preview succeeded! URL: ${ eas.job.expoBuildUrl }"}' \
$DISCORD_WEBHOOK_URL
@@ -0,0 +1,9 @@
build:
steps:
- eas/build
- run:
command: |
curl \
-H 'Content-Type: application/json' \
-d '{"content": "Build android production succeeded! URL: ${ eas.job.expoBuildUrl }"}' \
$DISCORD_WEBHOOK_URL
@@ -0,0 +1,9 @@
build:
steps:
- eas/build
- run:
command: |
curl \
-H 'Content-Type: application/json' \
-d '{"content": "Build ios production succeeded! URL: ${ eas.job.expoBuildUrl }"}' \
$DISCORD_WEBHOOK_URL
@@ -0,0 +1,21 @@
name: Create development builds
jobs:
android_development_build:
name: Build Android
type: build
params:
platform: android
profile: development
ios_device_development_build:
name: Build iOS device
type: build
params:
platform: ios
profile: development
ios_simulator_development_build:
name: Build iOS simulator
type: build
params:
platform: ios
profile: development-simulator
@@ -0,0 +1,15 @@
name: Create Production Builds
# on:
# push:
# branches: ['main']
jobs:
build_android:
type: build # This job type creates a production build for Android
params:
platform: android
build_ios:
type: build # This job type creates a production build for iOS
params:
platform: ios
@@ -0,0 +1,68 @@
name: Deploy to production
# on:
# push:
# branches: ['main']
jobs:
fingerprint:
name: Fingerprint
type: fingerprint
get_android_build:
name: Check for existing android build
needs: [fingerprint]
type: get-build
params:
fingerprint_hash: ${{ needs.fingerprint.outputs.android_fingerprint_hash }}
profile: production
get_ios_build:
name: Check for existing ios build
needs: [fingerprint]
type: get-build
params:
fingerprint_hash: ${{ needs.fingerprint.outputs.ios_fingerprint_hash }}
profile: production
build_android:
name: Build Android
needs: [get_android_build]
if: ${{ !needs.get_android_build.outputs.build_id }}
type: build
params:
platform: android
profile: production
build_ios:
name: Build iOS
needs: [get_ios_build]
if: ${{ !needs.get_ios_build.outputs.build_id }}
type: build
params:
platform: ios
profile: production
submit_android_build:
name: Submit Android Build
needs: [build_android]
type: submit
params:
build_id: ${{ needs.build_android.outputs.build_id }}
submit_ios_build:
name: Submit iOS Build
needs: [build_ios]
type: submit
params:
build_id: ${{ needs.build_ios.outputs.build_id }}
publish_android_update:
name: Publish Android update
needs: [get_android_build]
if: ${{ needs.get_android_build.outputs.build_id }}
type: update
params:
branch: production
platform: android
publish_ios_update:
name: Publish iOS update
needs: [get_ios_build]
if: ${{ needs.get_ios_build.outputs.build_id }}
type: update
params:
branch: production
platform: ios
@@ -0,0 +1,12 @@
name: Publish preview update
# on:
# push:
# branches: ['*']
jobs:
publish_preview_update:
name: Publish preview update
type: update
params:
branch: ${{ github.ref_name || 'test' }}
@@ -0,0 +1,19 @@
# on:
# push:
# branches: ['main']
jobs:
build_android:
name: Build Android app
type: build
params:
platform: android
profile: production
submit_android:
name: Submit to Google Play Store
needs: [build_android]
type: submit
params:
platform: android
build_id: ${{ needs.build_android.outputs.build_id }}
+19
View File
@@ -0,0 +1,19 @@
# on:
# push:
# branches: ['main']
jobs:
build_ios:
name: Build iOS app
type: build
params:
platform: ios
profile: production
submit_ios:
name: Submit to Apple App Store
needs: [build_ios]
type: submit
params:
platform: ios
build_id: ${{ needs.build_ios.outputs.build_id }}
+9
View File
@@ -0,0 +1,9 @@
# OAuth 2.0 OIDC 认证配置
# 客户端 ID - 从认证服务器获取
EXPO_PUBLIC_OAUTH_CLIENT_ID=lobehub-mobile
# 官方云服务器地址
EXPO_PUBLIC_OFFICIAL_CLOUD_SERVER=https://lobechat.com
# 回调地址 - 必须与认证服务器配置一致
EXPO_PUBLIC_OAUTH_REDIRECT_URI=com.lobehub.app://auth/callback
+36
View File
@@ -0,0 +1,36 @@
# Eslintignore for LobeHub
################################################################
# dependencies
node_modules
# ci
coverage
.coverage
# test
jest*
*.test.ts
*.test.tsx
# umi
.umi
.umi-production
.umi-test
.dumi/tmp*
!.dumirc.ts
# production
dist
es
lib
logs
ios
android
# misc
# add other ignore file below
.expo
polyfills.ts
temp
+55
View File
@@ -0,0 +1,55 @@
# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files
# dependencies
node_modules/
# Expo
.expo/
dist/
web-build/
expo-env.d.ts
# Native
*.orig.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
# Metro
.metro-health-check*
# debug
npm-debug.*
yarn-debug.*
yarn-error.*
# macOS
.DS_Store
*.pem
# local env files
.env*.local
package-lock.json
# pnpm-lock.yaml
# typescript
*.tsbuildinfo
app-example
android
ios
yarn.lock
repomix-output.xml
lobe-ui-repomix-output.xml
lobe-chat-repomix-output.xml
repomix-output-ant-design-theme.xml
credentials.json
build-*.aab
build-*.apk
build-*.ipa
coverage
+50
View File
@@ -0,0 +1,50 @@
const { defineConfig } = require('@lobehub/i18n-cli');
module.exports = defineConfig({
entry: 'locales/zh-CN',
entryLocale: 'zh-CN',
output: 'locales',
outputLocales: [
'ar',
'bg-BG',
'zh-TW',
'en-US',
'ru-RU',
'ja-JP',
'ko-KR',
'fr-FR',
'tr-TR',
'es-ES',
'pt-BR',
'de-DE',
'it-IT',
'nl-NL',
'pl-PL',
'vi-VN',
'fa-IR',
],
temperature: 0,
saveImmediately: true,
// chatgpt-4o-latest 和 gpt-chat 翻译效果更好
modelName: 'chatgpt-4o-latest',
experimental: {
jsonMode: true,
},
markdown: {
reference: '你需要保持 mdx 的组件格式,输出文本不需要在最外层包裹任何代码块语法',
entry: ['./README.zh-CN.md'],
entryLocale: 'zh-CN',
outputLocales: ['en-US'],
includeMatter: true,
exclude: ['./src/**/*'],
outputExtensions: (locale, { filePath }) => {
if (filePath.includes('.mdx')) {
if (locale === 'en-US') return '.mdx';
return `.${locale}.mdx`;
} else {
if (locale === 'en-US') return '.md';
return `.${locale}.md`;
}
},
},
});
+23
View File
@@ -0,0 +1,23 @@
lockfile=true
node-linker=hoisted
ignore-workspace-root-check=true
enable-pre-post-scripts=true
# Load dotenv files for all the npm scripts
node-options="--require dotenv-expand/config"
public-hoist-pattern[]=*@umijs/lint*
public-hoist-pattern[]=*changelog*
public-hoist-pattern[]=*commitlint*
public-hoist-pattern[]=*eslint*
public-hoist-pattern[]=*postcss*
public-hoist-pattern[]=*prettier*
public-hoist-pattern[]=*remark*
public-hoist-pattern[]=*semantic-release*
public-hoist-pattern[]=*stylelint*
public-hoist-pattern[]=@auth/core
public-hoist-pattern[]=@clerk/backend
public-hoist-pattern[]=@clerk/types
public-hoist-pattern[]=pdfjs-dist
+67
View File
@@ -0,0 +1,67 @@
# Prettierignore for LobeHub
################################################################
# general
.DS_Store
.editorconfig
.idea
.vscode
.history
.temp
.env.local
.husky
.npmrc
.gitkeep
venv
temp
tmp
LICENSE
# dependencies
node_modules
*.log
*.lock
package-lock.json
# ci
coverage
.coverage
.eslintcache
.stylelintcache
test-output
__snapshots__
*.snap
# production
dist
es
lib
logs
# umi
.umi
.umi-production
.umi-test
.dumi/tmp*
# ignore files
.*ignore
# docker
docker
Dockerfile*
# image
*.webp
*.gif
*.png
*.jpg
# misc
# add other ignore file below
./src/icons/MaterialFileTypeIcon/icon-map.json
*.ico
*.backup
*.mdc
*.ttf
+1
View File
@@ -0,0 +1 @@
module.exports = require('@lobehub/lint').prettier;
+1
View File
@@ -0,0 +1 @@
module.exports = require('@lobehub/lint').remarklint;
+10
View File
@@ -0,0 +1,10 @@
const config = require('@lobehub/lint').stylelint;
module.exports = {
...config,
rules: {
'custom-property-pattern': null,
'no-descending-specificity': null,
...config.rules,
},
};
+55
View File
@@ -0,0 +1,55 @@
# LobeChat Mobile Agent Guide
## Project Overview
- React Native + Expo app delivering the LobeChat AI chat experience for iOS and Android from a shared codebase.
- Core entry points: `src/app/_layout.tsx` wires global providers, while `src/app/index.tsx` (and nested routes under `src/app/(main)`) drive navigation via Expo Router.
- State flows through colocated Zustand stores such as `store/chat`, `store/session`, and `store/openai`; selectors in `store/session/selectors` keep components efficient.
- Key platform features include Markdown + math rendering (React Native Markdown, Shiki, MathJax), streaming chat transport via `utils/fetchSSE`, and tRPC clients configured in `utils/trpc`.
- Follow the domain guides in `rules/` (e.g., `project-overview.mdc`, `state-management.mdc`, `api-integration.mdc`) for deeper architecture context before implementing changes.
## Build and Test Commands
| Task | Command | Notes |
| ------------------------------ | ------------------------------------------------- | ----------------------------------------------------------------- |
| Install dependencies | `pnpm install` | Requires Node 18+ and pnpm 8+. |
| Start Expo dev server | `pnpm start` | Opens the Metro bundler with QR code pairing. |
| Run on iOS simulator/device | `pnpm ios` / `pnpm device:ios` | Uses `expo run:ios`; ensure Xcode tooling is installed. |
| Run on Android emulator/device | `pnpm android` / `pnpm device:android` | Uses `expo run:android`; start an emulator first. |
| Web preview | `pnpm web` | Launches the web bundle for quick UI checks. |
| Jest unit tests | `pnpm test` | Runs through `jest-expo` with coverage enabled. |
| Lint TypeScript/JS | `pnpm lint` | Delegates to Expo + ESLint rules defined in repo. |
| Format sources | `pnpm prettier` | Applies Prettier across the workspace. |
| Generate translations | `pnpm i18n` | Executes scripted workflow from `rules/internationalization.mdc`. |
| Production builds | `pnpm production:ios` / `pnpm production:android` | Wraps EAS build profiles from `eas.json`. |
## Code Style Guidelines
- TypeScript runs in strict mode; define interfaces/types for component props and store state, avoiding `any`. Reference `rules/app-structure.mdc` and `rules/state-management.mdc` for patterns.
- File naming: Components in PascalCase, hooks in camelCase prefixed with `use`, utilities in camelCase, constants in UPPER_SNAKE_CASE (see `rules/development-workflow.mdc`).
- Use absolute imports with the `@/` alias; group imports by React, third-party, then internal modules.
- Keep UI logic declarative; colocate styles in `styles.ts` companions and respect theming conventions from `rules/color-system.mdc`.
- Run `pnpm lint` and `pnpm prettier` before committing. Git hooks enforce Conventional Commits and formatting, so align commit messages with `feat|fix|chore` etc.
## Testing Instructions
- Place tests under `test/` or alongside components as `*.test.ts(x)` per `rules/react-native.mdc` guidance.
- Use `@testing-library/react-native` for rendering and interaction assertions; rely on user-centered queries rather than implementation details.
- Mock async integrations (SecureStore, **MMKV**, network services) using Jest mocks; reference `rules/debug-usage.mdc` for logging utilities during tests.
- MMKV is mocked in `test/utils.tsx` with an in-memory Map for test isolation.
- Prefer explicit assertions over brittle snapshots; when snapshots are required, keep them under `__snapshots__` directories.
- Run `pnpm test --watch` during iteration and ensure `pnpm test` + `pnpm lint` pass before opening a PR.
## Security Considerations
- Keep provider keys in `.env.local` (copied from `.env.example`) and load them through the secure configuration flows in `store/openai`; never commit secrets.
- Persist sensitive tokens with `expo-secure-store`; configuration data uses MMKV as outlined in `rules/state-management.mdc`.
- Validate API responses and sanitize Markdown before render—Shiki/remark plugins are already configured, but keep dependencies patched.
- Enforce HTTPS endpoints for remote calls; review EAS credentials and signing configs before production builds.
- Monitor dependency upgrades touching auth libraries (`expo-auth-session`, `jose`, `jwt-decode`) and align with guidance in `rules/development-workflow.mdc`.
## Additional References
- `rules/quick-reference.mdc` for command cheatsheets.
- `rules/internationalization.mdc` to extend locale coverage.
- `rules/debug-usage.mdc` for logging and diagnostics standards.
+407
View File
@@ -0,0 +1,407 @@
Attribution-NonCommercial 4.0 International
=======================================================================
Creative Commons Corporation ("Creative Commons") is not a law firm and
does not provide legal services or legal advice. Distribution of
Creative Commons public licenses does not create a lawyer-client or
other relationship. Creative Commons makes its licenses and related
information available on an "as-is" basis. Creative Commons gives no
warranties regarding its licenses, any material licensed under their
terms and conditions, or any related information. Creative Commons
disclaims all liability for damages resulting from their use to the
fullest extent possible.
Using Creative Commons Public Licenses
Creative Commons public licenses provide a standard set of terms and
conditions that creators and other rights holders may use to share
original works of authorship and other material subject to copyright
and certain other rights specified in the public license below. The
following considerations are for informational purposes only, are not
exhaustive, and do not form part of our licenses.
Considerations for licensors: Our public licenses are
intended for use by those authorized to give the public
permission to use material in ways otherwise restricted by
copyright and certain other rights. Our licenses are
irrevocable. Licensors should read and understand the terms
and conditions of the license they choose before applying it.
Licensors should also secure all rights necessary before
applying our licenses so that the public can reuse the
material as expected. Licensors should clearly mark any
material not subject to the license. This includes other CC-
licensed material, or material used under an exception or
limitation to copyright. More considerations for licensors:
wiki.creativecommons.org/Considerations_for_licensors
Considerations for the public: By using one of our public
licenses, a licensor grants the public permission to use the
licensed material under specified terms and conditions. If
the licensor's permission is not necessary for any reason--for
example, because of any applicable exception or limitation to
copyright--then that use is not regulated by the license. Our
licenses grant only permissions under copyright and certain
other rights that a licensor has authority to grant. Use of
the licensed material may still be restricted for other
reasons, including because others have copyright or other
rights in the material. A licensor may make special requests,
such as asking that all changes be marked or described.
Although not required by our licenses, you are encouraged to
respect those requests where reasonable. More considerations
for the public:
wiki.creativecommons.org/Considerations_for_licensees
=======================================================================
Creative Commons Attribution-NonCommercial 4.0 International Public
License
By exercising the Licensed Rights (defined below), You accept and agree
to be bound by the terms and conditions of this Creative Commons
Attribution-NonCommercial 4.0 International Public License ("Public
License"). To the extent this Public License may be interpreted as a
contract, You are granted the Licensed Rights in consideration of Your
acceptance of these terms and conditions, and the Licensor grants You
such rights in consideration of benefits the Licensor receives from
making the Licensed Material available under these terms and
conditions.
Section 1 -- Definitions.
a. Adapted Material means material subject to Copyright and Similar
Rights that is derived from or based upon the Licensed Material
and in which the Licensed Material is translated, altered,
arranged, transformed, or otherwise modified in a manner requiring
permission under the Copyright and Similar Rights held by the
Licensor. For purposes of this Public License, where the Licensed
Material is a musical work, performance, or sound recording,
Adapted Material is always produced where the Licensed Material is
synched in timed relation with a moving image.
b. Adapter's License means the license You apply to Your Copyright
and Similar Rights in Your contributions to Adapted Material in
accordance with the terms and conditions of this Public License.
c. Copyright and Similar Rights means copyright and/or similar rights
closely related to copyright including, without limitation,
performance, broadcast, sound recording, and Sui Generis Database
Rights, without regard to how the rights are labeled or
categorized. For purposes of this Public License, the rights
specified in Section 2(b)(1)-(2) are not Copyright and Similar
Rights.
d. Effective Technological Measures means those measures that, in the
absence of proper authority, may not be circumvented under laws
fulfilling obligations under Article 11 of the WIPO Copyright
Treaty adopted on December 20, 1996, and/or similar international
agreements.
e. Exceptions and Limitations means fair use, fair dealing, and/or
any other exception or limitation to Copyright and Similar Rights
that applies to Your use of the Licensed Material.
f. Licensed Material means the artistic or literary work, database,
or other material to which the Licensor applied this Public
License.
g. Licensed Rights means the rights granted to You subject to the
terms and conditions of this Public License, which are limited to
all Copyright and Similar Rights that apply to Your use of the
Licensed Material and that the Licensor has authority to license.
h. Licensor means the individual(s) or entity(ies) granting rights
under this Public License.
i. NonCommercial means not primarily intended for or directed towards
commercial advantage or monetary compensation. For purposes of
this Public License, the exchange of the Licensed Material for
other material subject to Copyright and Similar Rights by digital
file-sharing or similar means is NonCommercial provided there is
no payment of monetary compensation in connection with the
exchange.
j. Share means to provide material to the public by any means or
process that requires permission under the Licensed Rights, such
as reproduction, public display, public performance, distribution,
dissemination, communication, or importation, and to make material
available to the public including in ways that members of the
public may access the material from a place and at a time
individually chosen by them.
k. Sui Generis Database Rights means rights other than copyright
resulting from Directive 96/9/EC of the European Parliament and of
the Council of 11 March 1996 on the legal protection of databases,
as amended and/or succeeded, as well as other essentially
equivalent rights anywhere in the world.
l. You means the individual or entity exercising the Licensed Rights
under this Public License. Your has a corresponding meaning.
Section 2 -- Scope.
a. License grant.
1. Subject to the terms and conditions of this Public License,
the Licensor hereby grants You a worldwide, royalty-free,
non-sublicensable, non-exclusive, irrevocable license to
exercise the Licensed Rights in the Licensed Material to:
a. reproduce and Share the Licensed Material, in whole or
in part, for NonCommercial purposes only; and
b. produce, reproduce, and Share Adapted Material for
NonCommercial purposes only.
2. Exceptions and Limitations. For the avoidance of doubt, where
Exceptions and Limitations apply to Your use, this Public
License does not apply, and You do not need to comply with
its terms and conditions.
3. Term. The term of this Public License is specified in Section
6(a).
4. Media and formats; technical modifications allowed. The
Licensor authorizes You to exercise the Licensed Rights in
all media and formats whether now known or hereafter created,
and to make technical modifications necessary to do so. The
Licensor waives and/or agrees not to assert any right or
authority to forbid You from making technical modifications
necessary to exercise the Licensed Rights, including
technical modifications necessary to circumvent Effective
Technological Measures. For purposes of this Public License,
simply making modifications authorized by this Section 2(a)
(4) never produces Adapted Material.
5. Downstream recipients.
a. Offer from the Licensor -- Licensed Material. Every
recipient of the Licensed Material automatically
receives an offer from the Licensor to exercise the
Licensed Rights under the terms and conditions of this
Public License.
b. No downstream restrictions. You may not offer or impose
any additional or different terms or conditions on, or
apply any Effective Technological Measures to, the
Licensed Material if doing so restricts exercise of the
Licensed Rights by any recipient of the Licensed
Material.
6. No endorsement. Nothing in this Public License constitutes or
may be construed as permission to assert or imply that You
are, or that Your use of the Licensed Material is, connected
with, or sponsored, endorsed, or granted official status by,
the Licensor or others designated to receive attribution as
provided in Section 3(a)(1)(A)(i).
b. Other rights.
1. Moral rights, such as the right of integrity, are not
licensed under this Public License, nor are publicity,
privacy, and/or other similar personality rights; however, to
the extent possible, the Licensor waives and/or agrees not to
assert any such rights held by the Licensor to the limited
extent necessary to allow You to exercise the Licensed
Rights, but not otherwise.
2. Patent and trademark rights are not licensed under this
Public License.
3. To the extent possible, the Licensor waives any right to
collect royalties from You for the exercise of the Licensed
Rights, whether directly or through a collecting society
under any voluntary or waivable statutory or compulsory
licensing scheme. In all other cases the Licensor expressly
reserves any right to collect such royalties, including when
the Licensed Material is used other than for NonCommercial
purposes.
Section 3 -- License Conditions.
Your exercise of the Licensed Rights is expressly made subject to the
following conditions.
a. Attribution.
1. If You Share the Licensed Material (including in modified
form), You must:
a. retain the following if it is supplied by the Licensor
with the Licensed Material:
i. identification of the creator(s) of the Licensed
Material and any others designated to receive
attribution, in any reasonable manner requested by
the Licensor (including by pseudonym if
designated);
ii. a copyright notice;
iii. a notice that refers to this Public License;
iv. a notice that refers to the disclaimer of
warranties;
v. a URI or hyperlink to the Licensed Material to the
extent reasonably practicable;
b. indicate if You modified the Licensed Material and
retain an indication of any previous modifications; and
c. indicate the Licensed Material is licensed under this
Public License, and include the text of, or the URI or
hyperlink to, this Public License.
2. You may satisfy the conditions in Section 3(a)(1) in any
reasonable manner based on the medium, means, and context in
which You Share the Licensed Material. For example, it may be
reasonable to satisfy the conditions by providing a URI or
hyperlink to a resource that includes the required
information.
3. If requested by the Licensor, You must remove any of the
information required by Section 3(a)(1)(A) to the extent
reasonably practicable.
4. If You Share Adapted Material You produce, the Adapter's
License You apply must not prevent recipients of the Adapted
Material from complying with this Public License.
Section 4 -- Sui Generis Database Rights.
Where the Licensed Rights include Sui Generis Database Rights that
apply to Your use of the Licensed Material:
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
to extract, reuse, reproduce, and Share all or a substantial
portion of the contents of the database for NonCommercial purposes
only;
b. if You include all or a substantial portion of the database
contents in a database in which You have Sui Generis Database
Rights, then the database in which You have Sui Generis Database
Rights (but not its individual contents) is Adapted Material; and
c. You must comply with the conditions in Section 3(a) if You Share
all or a substantial portion of the contents of the database.
For the avoidance of doubt, this Section 4 supplements and does not
replace Your obligations under this Public License where the Licensed
Rights include other Copyright and Similar Rights.
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
c. The disclaimer of warranties and limitation of liability provided
above shall be interpreted in a manner that, to the extent
possible, most closely approximates an absolute disclaimer and
waiver of all liability.
Section 6 -- Term and Termination.
a. This Public License applies for the term of the Copyright and
Similar Rights licensed here. However, if You fail to comply with
this Public License, then Your rights under this Public License
terminate automatically.
b. Where Your right to use the Licensed Material has terminated under
Section 6(a), it reinstates:
1. automatically as of the date the violation is cured, provided
it is cured within 30 days of Your discovery of the
violation; or
2. upon express reinstatement by the Licensor.
For the avoidance of doubt, this Section 6(b) does not affect any
right the Licensor may have to seek remedies for Your violations
of this Public License.
c. For the avoidance of doubt, the Licensor may also offer the
Licensed Material under separate terms or conditions or stop
distributing the Licensed Material at any time; however, doing so
will not terminate this Public License.
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
License.
Section 7 -- Other Terms and Conditions.
a. The Licensor shall not be bound by any additional or different
terms or conditions communicated by You unless expressly agreed.
b. Any arrangements, understandings, or agreements regarding the
Licensed Material not stated herein are separate from and
independent of the terms and conditions of this Public License.
Section 8 -- Interpretation.
a. For the avoidance of doubt, this Public License does not, and
shall not be interpreted to, reduce, limit, restrict, or impose
conditions on any use of the Licensed Material that could lawfully
be made without permission under this Public License.
b. To the extent possible, if any provision of this Public License is
deemed unenforceable, it shall be automatically reformed to the
minimum extent necessary to make it enforceable. If the provision
cannot be reformed, it shall be severed from this Public License
without affecting the enforceability of the remaining terms and
conditions.
c. No term or condition of this Public License will be waived and no
failure to comply consented to unless expressly agreed to by the
Licensor.
d. Nothing in this Public License constitutes or may be interpreted
as a limitation upon, or waiver of, any privileges and immunities
that apply to the Licensor or You, including from the legal
processes of any jurisdiction or authority.
=======================================================================
Creative Commons is not a party to its public
licenses. Notwithstanding, Creative Commons may elect to apply one of
its public licenses to material it publishes and in those instances
will be considered the "Licensor." The text of the Creative Commons
public licenses is dedicated to the public domain under the CC0 Public
Domain Dedication. Except for the limited purpose of indicating that
material is shared under a Creative Commons public license or as
otherwise permitted by the Creative Commons policies published at
creativecommons.org/policies, Creative Commons does not authorize the
use of the trademark "Creative Commons" or any other trademark or logo
of Creative Commons without its prior written consent including,
without limitation, in connection with any unauthorized modifications
to any of its public licenses or any other arrangements,
understandings, or agreements concerning use of licensed material. For
the avoidance of doubt, this paragraph does not form part of the
public licenses.
Creative Commons may be contacted at creativecommons.org.
+558
View File
@@ -0,0 +1,558 @@
<div align="center"><a name="readme-top"></a>
<img width="128" height="128" alt="appicon" src="https://github.com/user-attachments/assets/13c89551-5dd5-4dfb-9397-1aaf467c841f" />
# LobeHub Mobile
Your Workspace, Anywhere
The LobeHub application for iOS, and Android
[Parent Project][parent-project] · [Changelog][changelog] · [Report Bug][issues-link] · [Request Feature][issues-link]
<!-- SHIELD GROUP -->
[![][expo-sdk-shield]][expo-link]
[![][react-native-shield]][react-native-link]
[![][typescript-shield]][typescript-link]<br/>
[![][license-shield]][license-link]
[![][github-stars-shield]][github-stars-link]
[![][github-forks-shield]][github-forks-link]
[![][github-issues-shield]][github-issues-link]
**Share LobeHub Mobile**
[![][share-x-shield]][share-x-link]
[![][share-telegram-shield]][share-telegram-link]
[![][share-whatsapp-shield]][share-whatsapp-link]
[![][share-reddit-shield]][share-reddit-link]
<sup>Experience AI conversations on your mobile device. Built for you, the Super Individual.</sup>
![](https://github.com/user-attachments/assets/a411daaf-11b8-4c0c-9623-1b80650aa3fa)
</div>
> \[!IMPORTANT]
>
> **📱 iOS Open Beta Now Available!**
>
> Join our TestFlight beta program and be among the first to experience LobeHub Mobile on your iPhone or iPad!
>
> 🔗 **[Join TestFlight Beta](https://testflight.apple.com/join/2ZbjX4Qp)**
>
> We'd love to hear your feedback! Share your experience with us on [Discord][discord-link] or [GitHub Issues][issues-link]. 🫰
<details>
<summary><kbd>Table of contents</kbd></summary>
#### TOC
- [👋🏻 Getting Started](#-getting-started)
- [✨ Features](#-features)
- [📱 Cross-Platform Native Experience](#-cross-platform-native-experience)
- [🎨 Modern UI Design](#-modern-ui-design)
- [🤖 Multi-Model AI Provider Support](#-multi-model-ai-provider-support)
- [💬 Rich Conversation Features](#-rich-conversation-features)
- [🔒 Privacy & Security First](#-privacy--security-first)
- [`*` What's more](#-whats-more)
- [📱 Platform Support](#-platform-support)
- [🚀 Quick Start](#-quick-start)
- [Installation](#installation)
- [Configuration](#configuration)
- [Development](#development)
- [🛠️ Tech Stack](#-tech-stack)
- [⌨️ Local Development](#-local-development)
- [Available Scripts](#available-scripts)
- [Project Structure](#project-structure)
- [Development Workflow](#development-workflow)
- [🤝 Contributing](#-contributing)
- [Contribution Workflow](#contribution-workflow)
- [Development Standards](#development-standards)
- [📦 Ecosystem](#-ecosystem)
- [❤️ Community](#-community)
####
<br/>
</details>
## 👋🏻 Getting Started
We are bringing the powerful LobeHub experience to your mobile devices! Whether you're an iOS or Android user, LobeHub Mobile provides a seamless, native AI chat experience on the go.
| [![][testflight-shield]][testflight-link] | Download the iOS beta now! Join our TestFlight program to experience LobeHub Mobile. |
| :---------------------------------------: | :----------------------------------------------------------------------------------- |
| [![][discord-shield-badge]][discord-link] | Join our Discord community! Connect with other users and share your feedback. |
> \[!IMPORTANT]
>
> **Star Us**, You will receive all release notifications from GitHub without any delay \~ ⭐️
<div align="right">
[![][back-to-top]](#readme-top)
</div>
## ✨ Features
### 📱 Cross-Platform Native Experience
**True Native Performance on Both Platforms**
Built with React Native and Expo SDK 54, LobeHub Mobile delivers genuine native performance across iOS and Android. Enjoy smooth 60fps animations, instant touch feedback, and platform-specific UI patterns that feel right at home on your device.
<div align="right">
[![][back-to-top]](#readme-top)
</div>
### 🎨 Modern UI Design
**Beautifully Crafted for Mobile**
- 💎 **Refined Interface**: Carefully crafted UI with elegant visuals and smooth interactions
- 🌗 **Adaptive Themes**: Seamless dark/light mode switching that follows system preferences
- 📱 **Mobile-First**: Optimized touch interactions and gestures for the best mobile experience
-**Fluid Animations**: Powered by React Native Reanimated for buttery-smooth 60fps animations
- 🎯 **Native Patterns**: Platform-specific UI components following iOS and Android design guidelines
<div align="right">
[![][back-to-top]](#readme-top)
</div>
### 🤖 Multi-Model AI Provider Support
**60+ AI Service Providers at Your Fingertips**
LobeHub Mobile supports an extensive range of AI service providers, giving you unparalleled flexibility to choose the best models for your needs:
**Major Providers:**
- **OpenAI**: GPT-4o, GPT-4 Turbo, GPT-3.5, and more
- **Anthropic**: Claude 3.5 Sonnet, Claude 3 Opus/Sonnet/Haiku
- **Google**: Gemini 2.0 Flash, Gemini Pro, and Vision models
- **Microsoft**: Azure OpenAI, Azure AI services
- **xAI**: Grok models
**Local & Self-Hosted:**
- Ollama, LM Studio, vLLM, Xinference
**Chinese Providers:**
- DeepSeek, Moonshot, Qwen, ZhiPu, Baichuan, Minimax
- Hunyuan, Spark, SenseNova, Wenxin, and more
**Additional Providers:**
- Groq, Perplexity, Mistral, Together AI, Fireworks AI
- OpenRouter, HuggingFace, Cloudflare Workers AI
- Bedrock, Vertex AI, and 40+ more providers
> \[!TIP]
>
> Seamlessly switch between providers and models. All API keys are stored securely using Expo SecureStore (iOS Keychain / Android Keystore).
<div align="right">
[![][back-to-top]](#readme-top)
</div>
### 💬 Rich Conversation Features
**Everything You Need for Powerful AI Conversations**
- 🗣️ **Streaming Responses**: Real-time AI replies with smooth streaming animation
- 📝 **Rich Markdown**: Full Markdown support with tables, lists, GFM, and alerts
- 🎨 **Code Highlighting**: Professional syntax highlighting powered by Shiki (100+ languages)
- 📐 **Math Rendering**: Beautiful LaTeX formula rendering with KaTeX
- 🎙️ **Voice Interaction**: Built-in TTS (Text-to-Speech) and STT (Speech-to-Text) support
- 🖼️ **Vision Models**: Upload images and chat with vision-enabled AI models
- 🎨 **Image Generation**: Create images with DALL·E, Midjourney, and more
- 💾 **Lightning Fast Storage**: MMKV-powered local storage for instant access
- 📤 **Export & Share**: Export conversations in multiple formats
- 🔄 **Multi-Session**: Manage unlimited conversations with smart organization
<div align="right">
[![][back-to-top]](#readme-top)
</div>
### 🔒 Privacy & Security First
**Your Data, Your Control**
- 🔐 **Secure Storage**: API keys protected with Expo SecureStore (iOS Keychain / Android Keystore)
- 💾 **Local First**: All data stored locally on your device using MMKV
- 🚫 **No Tracking**: Zero analytics or tracking - your conversations stay private
- 🔓 **Open Source**: Fully transparent codebase you can audit and trust
- 📴 **Offline Access**: View your chat history even without internet connection
<div align="right">
[![][back-to-top]](#readme-top)
</div>
### `*` What's more
Beyond these features, LobeHub Mobile also offers:
- [x] 🌐 **i18n Support**: Built-in support for 18 languages with auto-detection
- [x] 🎯 **Context Menu**: Long-press for quick actions (copy, delete, retry, regenerate)
- [x] 📋 **Smart Copy**: Intelligent content detection for code blocks, text, or entire messages
- [x] 🔍 **Global Search**: Quickly find messages across all conversations with full-text search
- [x] 🏷️ **Session Groups**: Organize conversations with custom groups, folders, and tags
- [x] 🗂️ **Topic Management**: Auto-create topics and organize conversations by context
- [x] ⚙️ **Advanced Customization**: Fine-tune model parameters (temperature, top-p, frequency penalty, etc.)
- [x] 📱 **Haptic Feedback**: Native haptic feedback for enhanced touch experience
- [x] 🎨 **Theme System**: Dynamic theming with dark/light modes and system preferences
- [x] 🔔 **Push Notifications**: Stay updated with conversation notifications
- [x] 📊 **Token Usage Tracking**: Monitor your API usage and costs
- [x] 🔄 **Pull to Refresh**: Natural gesture-based UI updates
- [x] ⌨️ **Keyboard Shortcuts**: Enhanced productivity with keyboard controls
- [x] 📤 **Import/Export**: Backup and restore your conversations
> ✨ More features will be added as LobeHub Mobile evolves.
---
> \[!NOTE]
>
> Check out our [Roadmap](https://github.com/lobehub/lobe-chat/projects) to see what's coming next!
<div align="right">
[![][back-to-top]](#readme-top)
</div>
## 📱 Platform Support
| Platform | Status | Recommended |
| -------- | --------------- | --------------------- |
| iOS | ✅ Fully Tested | iOS 18.0+ |
| Android | ✅ Fully Tested | Android 15.0 (API 35) |
<div align="right">
[![][back-to-top]](#readme-top)
</div>
## 🚀 Quick Start
### Installation
1. Clone the repository:
```bash
git clone https://github.com/lobehub/lobe-chat.git
cd lobe-chat/apps/mobile
```
2. Install dependencies:
```bash
pnpm install
```
### Configuration
1. Copy the environment template:
```bash
cp .env.example .env.local
```
2. Configure your API keys in `.env.local`:
```bash
# OpenAI API Key (Required)
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxx
# Optional: Custom API Base URL
# OPENAI_PROXY_URL=https://api.openai.com/v1
```
### Development
Start the development server:
```bash
# Start Expo development server
pnpm start
# Or run directly on a specific platform
pnpm ios # iOS simulator (macOS only)
pnpm android # Android emulator
pnpm web # Web browser preview
```
**Testing on Physical Devices:**
1. Install [Expo Go](https://expo.dev/client) on your device:
- [📱 iOS App Store](https://apps.apple.com/app/expo-go/id982107779)
- [🤖 Google Play Store](https://play.google.com/store/apps/details?id=host.exp.exponent)
2. Scan the QR code in the terminal with Expo Go to launch the app
> \[!TIP]
>
> For a faster development experience on physical devices, consider using [EAS Build](https://docs.expo.dev/build/introduction/) to create custom development builds.
<div align="right">
[![][back-to-top]](#readme-top)
</div>
## 🛠️ Tech Stack
Our technology choices focus on **performance**, **developer experience**, and **maintainability**:
| Technology | Version | Purpose |
| -------------------------------- | -------- | --------------------------------------- |
| **React Native** | 0.81.5 | Core framework for cross-platform apps |
| **Expo SDK** | \~54.0.0 | Development platform and native modules |
| **TypeScript** | ^5.8.2 | Type safety and better DX |
| **Expo Router** | \~4.0.17 | File-based navigation |
| **Zustand** | ^5.0.3 | Lightweight state management |
| **MMKV** | ^3.1.0 | Lightning-fast local storage |
| **React Native Reanimated** | \~3.16.7 | 60fps animations on native thread |
| **React Native Gesture Handler** | \~2.20.2 | Native touch gestures |
| **Shiki** | ^3.1.0 | Beautiful code syntax highlighting |
| **React Native Markdown** | Latest | Rich markdown rendering |
| **React i18next** | ^15.2.0 | Internationalization (18 languages) |
| **Jest** | Latest | Testing framework |
<div align="right">
[![][back-to-top]](#readme-top)
</div>
## ⌨️ Local Development
### Available Scripts
```bash
# Development
pnpm start # Start Expo dev server
pnpm ios # Run on iOS simulator
pnpm android # Run on Android emulator
pnpm web # Run in web browser
# Testing & Quality
pnpm test # Run Jest tests
pnpm test:watch # Run tests in watch mode
pnpm lint # Run ESLint
pnpm type-check # Run TypeScript compiler check
# Internationalization
pnpm i18n # Generate translations for all languages
# Production
pnpm build # Create production build
pnpm production:ios # Build iOS production app
pnpm production:android # Build Android production app
```
### Project Structure
```bash
apps/mobile/
├── app/ # Expo Router pages
│ ├── (main)/ # Main app routes
│ ├── (setting)/ # Settings routes
│ └── playground/ # Component playground
├── src/
│ ├── components/ # Reusable UI components
│ ├── features/ # Feature-based modules
│ ├── store/ # Zustand stores
│ ├── types/ # TypeScript types
│ ├── utils/ # Utility functions
│ └── locales/ # i18n source files
├── assets/ # Images, fonts, etc.
├── locales/ # Generated translations
└── test/ # Test utilities
```
### Development Workflow
1. **Feature Development**
- Create feature branch from `feat/mobile-app`
- Follow [Development Guidelines](./docs/DEVELOPMENT.md)
- Write tests for new features
2. **Code Quality**
- Run `pnpm lint` before committing
- Use TypeScript strictly (no `any`)
- Follow existing code patterns
3. **Internationalization**
- Add translations to `src/locales/default/common.ts`
- Run `pnpm i18n` to generate all languages
- Test with different locales in app settings
4. **Testing**
- Write unit tests for utilities and hooks
- Write component tests with React Native Testing Library
- Ensure `pnpm test` passes before PR
<div align="right">
[![][back-to-top]](#readme-top)
</div>
## 🤝 Contributing
Contributions of all types are more than welcome! If you are interested in contributing code, feel free to check out our GitHub [Issues](https://github.com/lobehub/lobe-chat/issues) and [Projects](https://github.com/lobehub/lobe-chat/projects).
> \[!TIP]
>
> We are building a modern mobile AI chat application. Join us in creating an amazing user experience!
>
> Whether it's **reporting bugs**, **requesting features**, **improving documentation**, or **contributing code** - we appreciate it all.
[![][pr-welcome-shield]][pr-welcome-link]
### Contribution Workflow
1. **Fork** the repository
2. **Clone** your fork: `git clone https://github.com/your-username/lobe-chat.git`
3. **Create** a feature branch: `git checkout -b feature/amazing-feature`
4. **Make** your changes
5. **Test** your changes: `pnpm test && pnpm lint`
6. **Commit** with conventional commit messages: `git commit -m 'feat: add amazing feature'`
7. **Push** to your fork: `git push origin feature/amazing-feature`
8. **Open** a Pull Request
### Development Standards
- 📝 **Commit Messages**: Follow [Conventional Commits](https://conventionalcommits.org/)
- `feat:` New features
- `fix:` Bug fixes
- `docs:` Documentation changes
- `style:` Code style changes (formatting, etc.)
- `refactor:` Code refactoring
- `test:` Adding or updating tests
- `chore:` Build process or auxiliary tool changes
- 💻 **Code Style**
- Use TypeScript strictly
- Follow ESLint and Prettier rules
- Write meaningful variable and function names
- Add comments for complex logic
- 🧪 **Testing**
- Write tests for new features
- Ensure all tests pass
- Maintain or improve code coverage
<div align="right">
[![][back-to-top]](#readme-top)
</div>
## 📦 Ecosystem
| NPM | Repository | Description | Version |
| --------------------------------- | --------------------------------------- | ------------------------------------------------------------------- | ----------------------------------------- |
| [@lobehub/ui][lobe-ui-link] | [lobehub/lobe-ui][lobe-ui-github] | Open-source UI component library for building AIGC web applications | [![][lobe-ui-shield]][lobe-ui-link] |
| [@lobehub/icons][lobe-icons-link] | [lobehub/lobe-icons][lobe-icons-github] | Popular AI / LLM Model Brand SVG Logo and Icon Collection | [![][lobe-icons-shield]][lobe-icons-link] |
| [@lobehub/tts][lobe-tts-link] | [lobehub/lobe-tts][lobe-tts-github] | High-quality & reliable TTS/STT React Hooks library | [![][lobe-tts-shield]][lobe-tts-link] |
| [@lobehub/lint][lobe-lint-link] | [lobehub/lobe-lint][lobe-lint-github] | ESlint, Stylelint, Commitlint, Prettier configurations for LobeHub | [![][lobe-lint-shield]][lobe-lint-link] |
<div align="right">
[![][back-to-top]](#readme-top)
</div>
## ❤️ Community
We are a group of e/acc design-engineers, hoping to provide modern design components and tools for AIGC. By adopting the Bootstrapping approach, we aim to provide developers and users with a more open, transparent, and user-friendly product ecosystem.
| [![][parent-shield]][parent-project] | No installation or registration necessary! Visit our website to experience the web version firsthand. |
| :---------------------------------------: | :---------------------------------------------------------------------------------------------------- |
| [![][discord-shield-badge]][discord-link] | Join our Discord community! Connect with developers and other enthusiastic users of LobeHub. |
> \[!IMPORTANT]
>
> **Star Us**, You will receive all release notifications from GitHub without any delay \~ ⭐️
<div align="right">
[![][back-to-top]](#readme-top)
</div>
---
#### 📝 License
[![][license-image]][license-link]
Copyright © 2025 [LobeHub][profile-link]. <br />
This project is licensed under a [Creative Commons Attribution-NonCommercial 4.0 International License][license-link].
<!-- LINK GROUP -->
[back-to-top]: https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square
[changelog]: https://github.com/lobehub/lobe-chat/blob/main/CHANGELOG.md
[discord-link]: https://discord.gg/AYFPHvv2jT
[discord-shield-badge]: https://img.shields.io/discord/1127171173982154893?color=5865F2&label=discord&labelColor=black&logo=discord&logoColor=white&style=for-the-badge
[expo-link]: https://expo.dev
[expo-sdk-shield]: https://img.shields.io/badge/Expo-54.0.0-000020?labelColor=black&logo=expo&style=flat-square
[github-forks-link]: https://github.com/lobehub/lobe-chat/network/members
[github-forks-shield]: https://img.shields.io/github/forks/lobehub/lobe-chat?color=8ae8ff&labelColor=black&style=flat-square
[github-issues-link]: https://github.com/lobehub/lobe-chat/issues
[github-issues-shield]: https://img.shields.io/github/issues/lobehub/lobe-chat?color=ff80eb&labelColor=black&style=flat-square
[github-stars-link]: https://github.com/lobehub/lobe-chat/network/stargazers
[github-stars-shield]: https://img.shields.io/github/stars/lobehub/lobe-chat?color=ffcb47&labelColor=black&style=flat-square
[issues-link]: https://github.com/lobehub/lobe-chat/issues/new/choose
[license-image]: https://licensebuttons.net/l/by-nc/4.0/88x31.png
[license-link]: https://creativecommons.org/licenses/by-nc/4.0/
[license-shield]: https://img.shields.io/badge/License-CC%20BY--NC%204.0-lightgrey?labelColor=black&style=flat-square
[lobe-icons-github]: https://github.com/lobehub/lobe-icons
[lobe-icons-link]: https://www.npmjs.com/package/@lobehub/icons
[lobe-icons-shield]: https://img.shields.io/npm/v/@lobehub/icons?color=369eff&labelColor=black&logo=npm&logoColor=white&style=flat-square
[lobe-lint-github]: https://github.com/lobehub/lobe-lint
[lobe-lint-link]: https://www.npmjs.com/package/@lobehub/lint
[lobe-lint-shield]: https://img.shields.io/npm/v/@lobehub/lint?color=369eff&labelColor=black&logo=npm&logoColor=white&style=flat-square
[lobe-tts-github]: https://github.com/lobehub/lobe-tts
[lobe-tts-link]: https://www.npmjs.com/package/@lobehub/tts
[lobe-tts-shield]: https://img.shields.io/npm/v/@lobehub/tts?color=369eff&labelColor=black&logo=npm&logoColor=white&style=flat-square
[lobe-ui-github]: https://github.com/lobehub/lobe-ui
[lobe-ui-link]: https://www.npmjs.com/package/@lobehub/ui
[lobe-ui-shield]: https://img.shields.io/npm/v/@lobehub/ui?color=369eff&labelColor=black&logo=npm&logoColor=white&style=flat-square
[parent-project]: https://github.com/lobehub/lobe-chat
[parent-shield]: https://img.shields.io/badge/🤯_Lobe_Chat-Web_Version-55b467?labelColor=black&style=for-the-badge
[pr-welcome-link]: https://github.com/lobehub/lobe-chat/pulls
[pr-welcome-shield]: https://img.shields.io/badge/🤯_PR_WELCOME-%E2%86%92-ffcb47?labelColor=black&style=for-the-badge
[profile-link]: https://github.com/lobehub
[react-native-link]: https://reactnative.dev
[react-native-shield]: https://img.shields.io/badge/React%20Native-0.81.5-61dafb?labelColor=black&logo=react&style=flat-square
[share-reddit-link]: https://www.reddit.com/submit?title=Check%20this%20GitHub%20repository%20out%20%F0%9F%A4%AF%20LobeHub%20Mobile%20-%20An%20open-source%2C%20modern-design%20AI%20chat%20mobile%20application.%20One-click%20FREE%20deployment%20of%20your%20private%20ChatGPT%2FClaude%2FGemini%20mobile%20app.&url=https%3A%2F%2Fgithub.com%2Flobehub%2Flobe-chat
[share-reddit-shield]: https://img.shields.io/badge/-share%20on%20reddit-black?labelColor=black&logo=reddit&logoColor=white&style=flat-square
[share-telegram-link]: https://t.me/share/url?text=Check%20this%20GitHub%20repository%20out%20%F0%9F%A4%AF%20LobeHub%20Mobile%20-%20An%20open-source%2C%20modern-design%20AI%20chat%20mobile%20application.%20One-click%20FREE%20deployment%20of%20your%20private%20ChatGPT%2FClaude%2FGemini%20mobile%20app.&url=https%3A%2F%2Fgithub.com%2Flobehub%2Flobe-chat
[share-telegram-shield]: https://img.shields.io/badge/-share%20on%20telegram-black?labelColor=black&logo=telegram&logoColor=white&style=flat-square
[share-whatsapp-link]: https://api.whatsapp.com/send?text=Check%20this%20GitHub%20repository%20out%20%F0%9F%A4%AF%20LobeHub%20Mobile%20-%20An%20open-source%2C%20modern-design%20AI%20chat%20mobile%20application.%20One-click%20FREE%20deployment%20of%20your%20private%20ChatGPT%2FClaude%2FGemini%20mobile%20app.%20https%3A%2F%2Fgithub.com%2Flobehub%2Flobe-chat
[share-whatsapp-shield]: https://img.shields.io/badge/-share%20on%20whatsapp-black?labelColor=black&logo=whatsapp&logoColor=white&style=flat-square
[share-x-link]: https://x.com/intent/tweet?hashtags=chatbot%2CchatGPT%2Cmobile%2Creactnative&text=Check%20this%20GitHub%20repository%20out%20%F0%9F%A4%AF%20LobeHub%20Mobile%20-%20An%20open-source%2C%20modern-design%20AI%20chat%20mobile%20application.%20One-click%20FREE%20deployment%20of%20your%20private%20ChatGPT%2FClaude%2FGemini%20mobile%20app.&url=https%3A%2F%2Fgithub.com%2Flobehub%2Flobe-chat
[share-x-shield]: https://img.shields.io/badge/-share%20on%20x-black?labelColor=black&logo=x&logoColor=white&style=flat-square
[testflight-link]: https://testflight.apple.com/join/2ZbjX4Qp
[testflight-shield]: https://img.shields.io/badge/TestFlight-iOS_Beta-0D96F6?labelColor=black&logo=apple&style=for-the-badge
[typescript-link]: https://www.typescriptlang.org
[typescript-shield]: https://img.shields.io/badge/TypeScript-5.8.2-3178c6?labelColor=black&logo=typescript&style=flat-square
+200
View File
@@ -0,0 +1,200 @@
import { ConfigContext, ExpoConfig } from 'expo/config';
import 'tsx/cjs';
import { version } from './package.json';
/**
* Expo 配置
* 使用 TypeScript 提供类型安全和自动补全
* @see https://docs.expo.dev/workflow/configuration/
*/
export default ({ config }: ConfigContext): ExpoConfig => ({
...config,
android: {
adaptiveIcon: {
backgroundColor: '#000000',
backgroundImage: './assets/images/icon-android-background.png',
foregroundImage: './assets/images/icon-android-foreground.png',
monochromeImage: './assets/images/icon-android-foreground.png',
},
edgeToEdgeEnabled: true,
icon: './assets/images/icon-android.png',
package: 'com.lobehub.app',
permissions: [
'android.permission.READ_EXTERNAL_STORAGE',
'android.permission.WRITE_EXTERNAL_STORAGE',
'android.permission.READ_MEDIA_IMAGES',
],
},
androidNavigationBar: {
barStyle: 'light-content',
},
androidStatusBar: {
barStyle: 'light-content',
},
experiments: {
// @ts-ignore
appDir: './src/app',
typedRoutes: true,
},
extra: {
eas: {
projectId: 'f02d6f4f-e042-4c95-ba0d-ac06bb474ef0',
},
router: {
origin: false,
},
},
icon: './assets/images/icon.png',
ios: {
appleTeamId: '4684H589ZU',
bundleIdentifier: 'com.lobehub.app',
icon: './assets/images/ios.icon',
infoPlist: {
ITSAppUsesNonExemptEncryption: false,
NSAppTransportSecurity: {
NSAllowsArbitraryLoads: true,
},
NSPhotoLibraryAddUsageDescription: '需要保存图片到相册',
NSPhotoLibraryUsageDescription: '需要访问相册以保存图片',
// 仅支持 iPhone
UIDeviceFamily: [1],
},
// 声明不支持平板
supportsTablet: false,
userInterfaceStyle: 'automatic',
},
name: 'LobeHub',
newArchEnabled: true,
orientation: 'portrait',
owner: 'lobehub',
plugins: [
['expo-build-properties', { ios: { deploymentTarget: '16.4' } }],
'expo-router',
'expo-video',
['react-native-edge-to-edge', { android: { enforceNavigationBarContrast: false } }],
[
'expo-notifications',
{
color: '#000',
icon: './assets/images/icon-android-notification.png',
},
],
[
'expo-splash-screen',
{
android: {
backgroundColor: '#f5f5f5',
dark: {
backgroundColor: '#000',
image: './assets/images/splash-icon.png',
imageWidth: 150,
},
image: './assets/images/splash-icon.png',
imageWidth: 150,
},
ios: {
backgroundColor: '#f5f5f5',
dark: {
backgroundColor: '#000',
enableFullScreenImage_legacy: true,
image: './assets/images/splash-dark.png',
resizeMode: 'cover',
},
enableFullScreenImage_legacy: true,
image: './assets/images/splash.png',
resizeMode: 'cover',
},
},
],
[
'expo-font',
{
android: {
fonts: [
{
fontDefinitions: [
{
path: './assets/fonts/Hack-Regular.ttf',
weight: 400,
},
{
path: './assets/fonts/Hack-Bold.ttf',
weight: 700,
},
{
path: './assets/fonts/Hack-Italic.ttf',
style: 'italic',
weight: 400,
},
{
path: './assets/fonts/Hack-BoldItalic.ttf',
style: 'italic',
weight: 700,
},
],
fontFamily: 'Hack',
},
{
fontDefinitions: [
{
path: './assets/fonts/HarmonyOS_Sans_SC_Regular.ttf',
weight: 400,
},
{
path: './assets/fonts/HarmonyOS_Sans_SC_Medium.ttf',
weight: 500,
},
{
path: './assets/fonts/HarmonyOS_Sans_SC_Bold.ttf',
weight: 700,
},
],
fontFamily: 'HarmonyOS-Sans-SC',
},
],
},
fonts: [
'./assets/fonts/Hack-Regular.ttf',
'./assets/fonts/Hack-Bold.ttf',
'./assets/fonts/Hack-Italic.ttf',
'./assets/fonts/Hack-BoldItalic.ttf',
'./assets/fonts/HarmonyOS_Sans_SC_Regular.ttf',
'./assets/fonts/HarmonyOS_Sans_SC_Medium.ttf',
'./assets/fonts/HarmonyOS_Sans_SC_Bold.ttf',
],
ios: {
fonts: [
'./assets/fonts/Hack-Regular.ttf',
'./assets/fonts/Hack-Bold.ttf',
'./assets/fonts/Hack-Italic.ttf',
'./assets/fonts/Hack-BoldItalic.ttf',
'./assets/fonts/HarmonyOS_Sans_SC_Regular.ttf',
'./assets/fonts/HarmonyOS_Sans_SC_Medium.ttf',
'./assets/fonts/HarmonyOS_Sans_SC_Bold.ttf',
],
},
},
],
'expo-secure-store',
'expo-localization',
'./plugins/withFbjniFix.ts',
'./plugins/withAndroidTransparentNavigation.ts',
],
runtimeVersion: {
policy: 'appVersion',
},
scheme: 'com.lobehub.app',
slug: 'lobe-chat-react-native',
updates: {
url: 'https://u.expo.dev/f02d6f4f-e042-4c95-ba0d-ac06bb474ef0',
},
userInterfaceStyle: 'automatic',
version: version,
web: {
bundler: 'metro',
favicon: './assets/images/favicon.ico',
output: 'static',
},
});
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 925 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 465 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 947 KiB

@@ -0,0 +1,44 @@
{
"fill": "automatic",
"groups": [
{
"blur-material": 1,
"hidden": false,
"layers": [
{
"glass": false,
"image-name": "dLogo.png",
"name": "dLogo",
"position": {
"scale": 0.65,
"translation-in-points": [0, 0]
}
},
{
"glass": false,
"hidden": true,
"image-name": "Group 72.png",
"name": "Group 72",
"position": {
"scale": 1.3,
"translation-in-points": [0, 0]
}
}
],
"lighting": "individual",
"shadow": {
"kind": "neutral",
"opacity": 0.5
},
"specular": true,
"translucency": {
"enabled": true,
"value": 1
}
}
],
"supported-platforms": {
"circles": ["watchOS"],
"squares": "shared"
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 606 KiB

Binary file not shown.
Binary file not shown.
+4
View File
@@ -0,0 +1,4 @@
module.exports = {
plugins: ['@babel/plugin-transform-class-static-block', 'react-native-worklets/plugin'],
presets: [['babel-preset-expo', { unstable_transformImportMeta: true }]],
};
+45
View File
@@ -0,0 +1,45 @@
{
"build": {
"development": {
"environment": "development",
"developmentClient": true,
"distribution": "internal",
"ios": {
"simulator": true,
"config": "development-ios.yml"
},
"android": {
"gradleCommand": ":app:assembleDebug",
"config": "development-android.yml"
},
"pnpm": "10.10.0",
"channel": "development"
},
"preview": {
"environment": "preview",
"distribution": "internal",
"channel": "preview",
"pnpm": "10.10.0"
},
"production": {
"environment": "production",
"autoIncrement": true,
"channel": "production",
"pnpm": "10.10.0"
}
},
"cli": {
"version": ">= 14.7.1",
"appVersionSource": "remote"
},
"submit": {
"production": {
"ios": {
"ascAppId": "6749615954"
},
"android": {
"serviceAccountKeyPath": "./service-account-key.json"
}
}
}
}
+21
View File
@@ -0,0 +1,21 @@
import 'expo-crypto';
declare global {
interface Window {
crypto: Crypto;
}
const crypto: Crypto;
/** Expo / React Native 全局开发标记 */
const __DEV__: boolean;
}
// JSON 模块声明
declare module '*.json' {
const value: any;
export default value;
}
// 确保这个文件被当作模块处理
export {};
+25
View File
@@ -0,0 +1,25 @@
{
"collectCoverage": true,
"collectCoverageFrom": [
"src/**/*.{ts,tsx,js,jsx}",
"app/**/*.{ts,tsx,js,jsx}",
"!app/playground/**",
"!**/node_modules/**"
],
"moduleFileExtensions": ["ts", "tsx", "js", "jsx"],
"moduleNameMapper": {
"^@/test/(.*)$": "<rootDir>/test/$1",
"^@/(.*)$": "<rootDir>/src/$1",
"^react-native$": "react-native-web"
},
"setupFiles": ["<rootDir>/test/jest.setup.js"],
"setupFilesAfterEnv": ["<rootDir>/test/jest.setupAfterEnv.js"],
"testEnvironment": "jsdom",
"testMatch": ["**/__tests__/**/*.(ts|tsx|js)", "**/*.(test|spec).(ts|tsx|js)"],
"transform": {
"^.+\\.(js|jsx|ts|tsx)$": "babel-jest"
},
"transformIgnorePatterns": [
"node_modules/(?!((jest-)?react-native|@react-native(-community)?)|expo(nent)?|@expo(nent)?/.*|@expo-google-fonts/.*|react-navigation|@react-navigation/.*|@sentry/react-native|native-base|react-native-svg)"
]
}
+32
View File
@@ -0,0 +1,32 @@
{
"login": {
"button": "تسجيل الدخول إلى {{appName}}",
"cancel": "إلغاء",
"loginWithLobeHub": "تسجيل الدخول باستخدام حساب {{appName}}",
"privacyPolicy": "سياسة الخصوصية",
"processing": "جارٍ تسجيل الدخول، يرجى الانتظار...",
"securityNote": "التوقيع يعني قبولك لـ",
"selfHostedButton": "استخدام نسخة مستضافة ذاتيًا",
"selfHostedContinue": "متابعة",
"selfHostedDescription": "الاتصال بخادم LobeChat الذي قمت بنشره بنفسك.",
"selfHostedHint": "سنحتفظ بعنوان هذا الخادم حتى تقوم بتبديله إلى النسخة الرسمية في الإعدادات.",
"selfHostedInvalid": "يرجى إدخال عنوان HTTP أو HTTPS صالح.",
"selfHostedPlaceholder": "https://your-lobechat-instance.com",
"selfHostedRequired": "يرجى إدخال عنوان الخادم.",
"selfHostedTitle": "أدخل عنوان الخادم المستضاف ذاتيًا",
"subtitle": "مرحبًا بعودتك! يرجى تسجيل الدخول للمتابعة",
"usePolicy": "شروط الاستخدام"
},
"logout": {
"button": "تسجيل الخروج",
"confirm": {
"cancel": "إلغاء",
"message": "هل أنت متأكد أنك تريد تسجيل الخروج؟",
"ok": "موافق",
"title": "تأكيد تسجيل الخروج"
}
},
"profile": {
"verified": "تم التحقق"
}
}
+81
View File
@@ -0,0 +1,81 @@
{
"agentDefaultMessage": "مرحبًا، أنا **{{name}}**، يمكنك البدء في المحادثة معي فورًا، أو يمكنك الذهاب إلى [إعدادات المساعد]({{url}}) لتحديث معلوماتي.",
"agentDefaultMessageWithSystemRole": "مرحبًا، أنا **{{name}}**، {{systemRole}}، هيا نبدأ المحادثة!",
"agentDefaultMessageWithoutEdit": "مرحبًا، أنا **{{name}}**، هيا نبدأ المحادثة!",
"agentList": "قائمة المساعدين",
"agentRoleEdit": {
"cancel": "إلغاء",
"confirm": "تأكيد",
"edit": "تعديل",
"editButton": "تعديل إعدادات الدور",
"placeholder": "يرجى إدخال كلمة تلميح الدور",
"roleSetting": "إعداد الدور",
"title": "إعداد الدور"
},
"confirmDelete": "تأكيد الحذف",
"confirmRemoveSessionItemAlert": "سيتم حذف هذا المساعد ولن يمكن استعادته بعد الحذف، يرجى تأكيد العملية.",
"copyFailed": "فشل النسخ",
"defaultAgent": "مساعد مخصص",
"defaultList": "القائمة الافتراضية",
"deleteMessageConfirm": "هل أنت متأكد من حذف هذه الرسالة؟",
"history": "سجل المحادثات",
"inbox": {
"desc": "فعّل مجموعة العقول لتحفيز شرارات الأفكار. مساعدك الذكي هنا للتواصل معك في كل شيء.",
"title": "دردشة عشوائية"
},
"messageCopied": "تم نسخ الرسالة",
"messageEdit": {
"placeholder": "يرجى إدخال محتوى الرسالة",
"title": "تحرير الرسالة"
},
"newAgent": "مساعد جديد",
"newChat": "محادثة جديدة",
"pin": "تثبيت",
"pinOff": "إلغاء التثبيت",
"placeholder": "أدخل رسالتك...",
"reasoning": {
"thinking": "جارٍ التفكير بعمق...",
"thought": "تم التفكير بعمق (استغرق {{duration}} ثانية)",
"thoughtWithoutDuration": "تم التفكير بعمق"
},
"regenerateFailed": "فشل في إعادة التوليد، يرجى المحاولة لاحقًا",
"send": "إرسال",
"session": {
"createFirst": "أنشئ أول جلسة دردشة لك",
"empty": "لا توجد جلسات حالياً",
"search": {
"discoverAssistants": "مساعدو السوق",
"emptyResult": "لم يتم العثور على مساعد مطابق",
"myAssistants": "مساعديّ",
"placeholder": "ابحث عن المساعد الذي تفضله...",
"recentSearches": "عمليات البحث الأخيرة",
"title": "بحث"
},
"title": "دردشة عشوائية"
},
"sessionGroup": {
"config": "إدارة المجموعات",
"confirmRemoveGroupAlert": "سيتم حذف هذه المجموعة، وبعد الحذف سيتم نقل المساعدين ضمنها إلى القائمة الافتراضية. يرجى تأكيد الإجراء.",
"createGroup": "إنشاء مجموعة",
"createSuccess": "تم إنشاء المجموعة بنجاح",
"emptyGroup": "لا توجد مجموعات حالياً",
"inputPlaceholder": "يرجى إدخال اسم المجموعة",
"moveGroup": "نقل إلى مجموعة",
"moveSuccess": "تم النقل بنجاح",
"newGroup": "مجموعة جديدة",
"removeSuccess": "تم الحذف بنجاح",
"rename": "إعادة التسمية",
"renameSuccess": "تمت إعادة التسمية بنجاح",
"tooLong": "يجب أن يتراوح طول اسم المجموعة بين 1 و20 حرفًا"
},
"setting": {
"avatar": "الصورة الرمزية",
"description": "الوصف",
"done": "تم",
"name": "الاسم",
"title": "إعدادات المحادثة"
},
"share": "مشاركة",
"stop": "إيقاف",
"thinking": "جارٍ التفكير..."
}
+50
View File
@@ -0,0 +1,50 @@
{
"actions": {
"add": "إضافة",
"cancel": "إلغاء",
"clear": "مسح",
"confirm": "تأكيد",
"continue": "متابعة",
"copy": "نسخ",
"delete": "حذف",
"edit": "تعديل",
"more": "المزيد",
"notNow": "ليس الآن",
"regenerate": "إعادة التوليد",
"retry": "إعادة المحاولة",
"save": "حفظ",
"saveImage": "حفظ الصورة"
},
"and": "و",
"assistant": {
"fetchError": "فشل في جلب قائمة المساعدين، يرجى المحاولة لاحقًا",
"noData": "لا توجد بيانات للمساعد",
"noMatch": "لم يتم العثور على مساعد مطابق",
"recentSearches": "عمليات البحث الأخيرة",
"search": "ابحث عن مساعد...",
"searchNoResult": "لم يتم العثور على مساعد مطابق",
"searchPlaceholder": "يرجى إدخال كلمات البحث"
},
"defaultSession": "مساعد مخصص",
"image": {
"permissionDenied": "يتطلب إذن الوصول إلى الألبوم لحفظ الصورة",
"permissionRequest": "يرجى السماح بالوصول إلى الألبوم من الإعدادات",
"saveFailed": "فشل الحفظ، يرجى المحاولة مرة أخرى",
"saveSuccess": "تم حفظ الصورة في الألبوم"
},
"navigation": {
"goToHomeScreen": "العودة إلى الصفحة الرئيسية"
},
"or": "أو",
"search": {
"placeholder": "بحث"
},
"status": {
"error": "خطأ",
"info": "معلومات",
"loading": "جارٍ التحميل...",
"networkRetryTip": "يرجى التحقق من اتصال الشبكة أو المحاولة مرة أخرى",
"success": "نجاح",
"warning": "تحذير"
}
}
+14
View File
@@ -0,0 +1,14 @@
{
"Highlighter": {
"cancel": "إلغاء",
"selectLanguage": "اختر اللغة"
},
"ModelSwitchPanel": {
"chooseModel": "اختر النموذج",
"emptyModel": "لا توجد نماذج مفعلة، يرجى التوجه إلى الإعدادات للتفعيل",
"emptyProvider": "لا توجد مزودين مفعّلين، يرجى التوجه إلى الإعدادات للتفعيل",
"goToSettings": "اذهب إلى الإعدادات",
"provider": "مزود الخدمة",
"title": "النموذج"
}
}
+35
View File
@@ -0,0 +1,35 @@
{
"assistant": {
"detail": {
"addAndChat": "إضافة المساعد والدردشة",
"addFailed": "فشل في إضافة المساعد",
"addFailedMessage": "فشل في إضافة المساعد، يرجى المحاولة مرة أخرى لاحقًا",
"assistantSettings": "إعدادات المساعد",
"loadFailed": "فشل في الحصول على تفاصيل المساعد، يرجى المحاولة مرة أخرى لاحقًا",
"notFoundIdentifier": "لم يتم العثور على معرف المساعد",
"share": "مشاركة",
"shareFailed": "فشل في المشاركة",
"title": "تفاصيل المساعد"
}
},
"category": {
"assistant": {
"academic": "أكاديمي",
"all": "الكل",
"career": "المهنة",
"copywriting": "كتابة الإعلانات",
"design": "تصميم",
"education": "تعليم",
"emotions": "العواطف",
"entertainment": "ترفيه",
"games": "ألعاب",
"general": "عام",
"life": "الحياة",
"marketing": "تسويق",
"office": "مكتب",
"programming": "برمجة",
"translation": "ترجمة"
}
},
"title": "اكتشف"
}
+120
View File
@@ -0,0 +1,120 @@
{
"error": {
"title": "حدث خطأ"
},
"http": {
"forbidden": "ممنوع الوصول",
"networkError": "خطأ في الشبكة",
"notFound": "غير موجود",
"serverError": "خطأ في الخادم",
"timeout": "انتهت مهلة الطلب",
"unauthorized": "غير مصرح"
},
"login": {
"accessDenied": "عذرًا، تم رفض طلب تسجيل الدخول، يرجى المحاولة لاحقًا",
"cancelled": "لقد ألغيت تسجيل الدخول",
"invalidGrant": "عذرًا، انتهت صلاحية جلسة تسجيل الدخول، يرجى المحاولة لاحقًا",
"invalidIdToken": "عذرًا، لا يمكن الحصول على معلومات حسابك في الوقت الحالي، يرجى المحاولة لاحقًا",
"invalidRequest": "عذرًا، هناك مشكلة في طلب تسجيل الدخول، يرجى المحاولة لاحقًا",
"invalidState": "عذرًا، فشل التحقق من تسجيل الدخول، يرجى المحاولة لاحقًا",
"missingCodeOrState": "عذرًا، معلومات تسجيل الدخول المطلوبة مفقودة، يرجى المحاولة لاحقًا",
"missingPkce": "عذرًا، معلومات التحقق من تسجيل الدخول مفقودة، يرجى المحاولة لاحقًا",
"networkError": "عذرًا، حدث خلل في الشبكة أثناء تسجيل الدخول، يرجى التحقق من الاتصال والمحاولة مجددًا",
"noIdToken": "عذرًا، لم يتم الحصول على معلومات تسجيل الدخول، يرجى المحاولة لاحقًا",
"serverError": "عذرًا، حدث خطأ في خدمة تسجيل الدخول، يرجى المحاولة لاحقًا",
"temporarilyUnavailable": "عذرًا، خدمة تسجيل الدخول غير متوفرة مؤقتًا، يرجى المحاولة لاحقًا",
"tokenEndpointNonJson": "عذرًا، استجابت خدمة تسجيل الدخول غير متوقعة، يرجى المحاولة لاحقًا",
"tokenExchangeFailed": "عذرًا، حدث خطأ أثناء معالجة تسجيل الدخول، يرجى المحاولة لاحقًا",
"unknown": "عذرًا، فشل تسجيل الدخول، يرجى المحاولة لاحقًا",
"unsupportedResponseType": "عذرًا، طريقة تسجيل الدخول الحالية غير مدعومة، يرجى المحاولة لاحقًا"
},
"page": {
"notFoundMessage": "هذه الصفحة غير موجودة.",
"notFoundTitle": "آه!"
},
"response": {
"400": "عذرًا، الخادم لا يفهم طلبك، يرجى التأكد من صحة معلمات الطلب",
"401": "عذرًا، رفض الخادم طلبك، قد يكون بسبب عدم كفاية الصلاحيات أو عدم تقديم مصادقة صحيحة",
"403": "عذرًا، رفض الخادم طلبك، ليس لديك صلاحية الوصول إلى هذا المحتوى",
"404": "عذرًا، لم يعثر الخادم على الصفحة أو المورد المطلوب، يرجى التأكد من صحة عنوان URL",
"405": "عذرًا، طريقة الطلب المستخدمة غير مدعومة من الخادم، يرجى التأكد من صحة طريقة الطلب",
"406": "عذرًا، الخادم لا يستطيع تلبية خصائص المحتوى المطلوبة في طلبك",
"407": "عذرًا، يجب عليك إجراء مصادقة الوكيل قبل متابعة هذا الطلب",
"408": "عذرًا، انتهت مهلة انتظار الخادم للطلب، يرجى التحقق من اتصال الشبكة والمحاولة مجددًا",
"409": "عذرًا، يوجد تعارض في الطلب ولا يمكن معالجته، قد يكون بسبب حالة المورد غير متوافقة مع الطلب",
"410": "عذرًا، المورد الذي طلبته تم إزالته نهائيًا ولا يمكن العثور عليه",
"411": "عذرًا، الخادم لا يمكنه معالجة طلب بدون طول محتوى صالح",
"412": "عذرًا، لم تستوف شروط الخادم لإكمال الطلب",
"413": "عذرًا، حجم بيانات الطلب كبير جدًا ولا يمكن معالجته",
"414": "عذرًا، عنوان URI في الطلب طويل جدًا ولا يمكن معالجته",
"415": "عذرًا، الخادم لا يدعم تنسيق الوسائط المرفق في الطلب",
"416": "عذرًا، الخادم لا يمكنه تلبية نطاق الطلب",
"417": "عذرًا، الخادم لا يمكنه تلبية توقعاتك",
"422": "عذرًا، تنسيق طلبك صحيح لكن يحتوي على أخطاء دلالية، لا يمكن الاستجابة له",
"423": "عذرًا، المورد الذي طلبته مقفل",
"424": "عذرًا، فشل الطلب السابق أدى إلى عدم إمكانية إكمال الطلب الحالي",
"426": "عذرًا، الخادم يطلب ترقية العميل إلى إصدار بروتوكول أعلى",
"428": "عذرًا، الخادم يطلب شروطًا مسبقة، يرجى تضمين رؤوس شروط صحيحة في الطلب",
"429": "عذرًا، طلباتك كثيرة جدًا، الخادم متعب قليلاً، يرجى المحاولة لاحقًا",
"431": "عذرًا، رؤوس الطلب كبيرة جدًا، الخادم لا يمكنه معالجتها",
"451": "عذرًا، لأسباب قانونية، رفض الخادم توفير هذا المورد",
"499": "عذرًا، تم قطع طلبك بشكل غير متوقع أثناء المعالجة، قد يكون بسبب إلغاء العملية أو اتصال شبكة غير مستقر. يرجى التحقق من الشبكة والمحاولة مجددًا.",
"500": "عذرًا، يبدو أن الخادم يواجه بعض الصعوبات ولا يمكن إكمال طلبك مؤقتًا، يرجى المحاولة لاحقًا",
"501": "عذرًا، الخادم لا يعرف كيفية معالجة هذا الطلب بعد، يرجى التأكد من صحة العملية",
"502": "عذرًا، يبدو أن الخادم فقد الاتجاه، لا يمكن تقديم الخدمة مؤقتًا، يرجى المحاولة لاحقًا",
"503": "عذرًا، الخادم غير قادر حاليًا على معالجة طلبك، قد يكون بسبب التحميل الزائد أو الصيانة، يرجى المحاولة لاحقًا",
"504": "عذرًا، لم يتلق الخادم ردًا من الخادم الأعلى، يرجى المحاولة لاحقًا",
"505": "عذرًا، الخادم لا يدعم إصدار HTTP المستخدم، يرجى التحديث والمحاولة مجددًا",
"506": "عذرًا، هناك مشكلة في تكوين الخادم، يرجى الاتصال بالمسؤول",
"507": "عذرًا، مساحة التخزين في الخادم غير كافية لمعالجة طلبك، يرجى المحاولة لاحقًا",
"509": "عذرًا، تم استنفاد عرض النطاق الترددي للخادم، يرجى المحاولة لاحقًا",
"510": "عذرًا، الخادم لا يدعم الوظائف الموسعة المطلوبة، يرجى الاتصال بالمسؤول",
"520": "عذرًا، واجه الخادم مشكلة غير متوقعة أدت إلى عدم إكمال طلبك. يرجى المحاولة لاحقًا، نحن نعمل على حل المشكلة.",
"522": "عذرًا، انتهت مهلة اتصال الخادم، لم يتم الرد على طلبك في الوقت المناسب. قد يكون السبب عدم استقرار الشبكة أو عدم توفر الخادم مؤقتًا. يرجى المحاولة لاحقًا، نحن نعمل على استعادة الخدمة.",
"524": "عذرًا، انتهت مهلة انتظار الخادم للرد، قد يكون السبب بطء الاستجابة، يرجى المحاولة لاحقًا",
"AgentRuntimeError": "حدث خطأ في تنفيذ Lobe AI Runtime، يرجى التحقق من المعلومات أدناه أو المحاولة مجددًا",
"ConnectionCheckFailed": "الطلب عاد فارغًا، يرجى التحقق من أن عنوان وكيل API لا ينتهي بـ `/v1`",
"CreateMessageError": "عذرًا، لم يتم إرسال الرسالة بنجاح، يرجى نسخ المحتوى وإعادة الإرسال، بعد تحديث الصفحة لن يتم الاحتفاظ بهذه الرسالة",
"ExceededContextWindow": "محتوى الطلب الحالي يتجاوز الحد الأقصى الذي يمكن للنموذج معالجته، يرجى تقليل المحتوى والمحاولة مجددًا",
"FreePlanLimit": "أنت مستخدم مجاني حاليًا، لا يمكنك استخدام هذه الميزة، يرجى الترقية إلى خطة مدفوعة للاستمرار",
"InsufficientQuota": "عذرًا، تم الوصول إلى حد الحصة (quota) للمفتاح، يرجى التحقق من رصيد الحساب أو زيادة الحصة ثم المحاولة مجددًا",
"InvalidAccessCode": "كلمة المرور غير صحيحة أو فارغة، يرجى إدخال كلمة مرور صحيحة أو إضافة مفتاح API مخصص",
"InvalidBedrockCredentials": "فشل التحقق من Bedrock، يرجى التحقق من AccessKeyId/SecretAccessKey والمحاولة مجددًا",
"InvalidClerkUser": "عذرًا، لم تقم بتسجيل الدخول بعد، يرجى تسجيل الدخول أو إنشاء حساب للمتابعة",
"InvalidGithubToken": "رمز Github PAT غير صحيح أو فارغ، يرجى التحقق والمحاولة مجددًا",
"InvalidOllamaArgs": "تكوين Ollama غير صحيح، يرجى التحقق والمحاولة مجددًا",
"InvalidProviderAPIKey": "مفتاح API الخاص بـ {{provider}} غير صحيح أو فارغ، يرجى التحقق والمحاولة مجددًا",
"InvalidVertexCredentials": "فشل التحقق من Vertex، يرجى التحقق من بيانات الاعتماد والمحاولة مجددًا",
"LocationNotSupportError": "عذرًا، منطقتك غير مدعومة لهذه الخدمة النموذجية، قد يكون بسبب قيود المنطقة أو عدم تفعيل الخدمة. يرجى التأكد من دعم منطقتك أو المحاولة في منطقة أخرى",
"ModelNotFound": "عذرًا، لا يمكن الوصول إلى النموذج المطلوب، قد يكون النموذج غير موجود أو ليس لديك صلاحية الوصول، يرجى تغيير مفتاح API أو تعديل الصلاحيات والمحاولة مجددًا",
"NoOpenAIAPIKey": "مفتاح OpenAI API غير صحيح أو فارغ، يرجى إضافة مفتاح OpenAI API مخصص",
"OllamaBizError": "حدث خطأ في طلب خدمة Ollama، يرجى التحقق من المعلومات أدناه أو المحاولة مجددًا",
"OllamaServiceUnavailable": "فشل الاتصال بخدمة Ollama، يرجى التحقق من تشغيل Ollama بشكل صحيح أو إعدادات التهيئة عبر النطاق (CORS)",
"PermissionDenied": "عذرًا، ليس لديك صلاحية الوصول إلى هذه الخدمة، يرجى التحقق من صلاحيات مفتاحك",
"PluginApiNotFound": "عذرًا، API غير موجود في ملف وصف الإضافة، يرجى التحقق من تطابق طريقة الطلب مع API في ملف الوصف",
"PluginApiParamsError": "عذرًا، فشل التحقق من معلمات طلب الإضافة، يرجى التحقق من المعلمات ومطابقتها مع وصف API",
"PluginFailToTransformArguments": "عذرًا، فشل تحليل معلمات استدعاء الإضافة، يرجى محاولة إعادة إنشاء رسالة المساعد أو استخدام نموذج AI بقدرات Tools Calling أقوى والمحاولة مجددًا",
"PluginGatewayError": "عذرًا، حدث خطأ في بوابة الإضافة، يرجى التحقق من إعدادات البوابة",
"PluginManifestInvalid": "عذرًا، فشل التحقق من ملف وصف الإضافة، يرجى التأكد من تنسيق الملف",
"PluginManifestNotFound": "عذرًا، لم يعثر الخادم على ملف وصف الإضافة (manifest.json)، يرجى التحقق من صحة عنوان الملف",
"PluginMarketIndexInvalid": "عذرًا، فشل التحقق من فهرس الإضافة، يرجى التحقق من تنسيق الملف",
"PluginMarketIndexNotFound": "عذرًا، لم يعثر الخادم على فهرس الإضافة، يرجى التحقق من صحة العنوان",
"PluginMetaInvalid": "عذرًا، فشل التحقق من بيانات تعريف الإضافة، يرجى التحقق من تنسيق البيانات",
"PluginMetaNotFound": "عذرًا، لم يتم العثور على الإضافة في الفهرس، يرجى التحقق من معلومات التكوين في الفهرس",
"PluginOpenApiInitError": "عذرًا، فشل تهيئة عميل OpenAPI، يرجى التحقق من إعدادات OpenAPI",
"PluginServerError": "حدث خطأ في استجابة خادم الإضافة، يرجى التحقق من ملف وصف الإضافة، التكوين أو تنفيذ الخادم بناءً على رسالة الخطأ أدناه",
"PluginSettingsInvalid": "تتطلب هذه الإضافة تكوينًا صحيحًا قبل الاستخدام، يرجى التحقق من إعداداتك",
"ProviderBizError": "حدث خطأ في طلب خدمة {{provider}}، يرجى التحقق من المعلومات أدناه أو المحاولة مجددًا",
"QuotaLimitReached": "عذرًا، تم الوصول إلى حد استخدام الرموز أو عدد الطلبات لمفتاحك، يرجى زيادة الحصة أو المحاولة لاحقًا",
"StreamChunkError": "خطأ في تحليل جزء من رسالة الطلب المتدفق، يرجى التحقق من توافق واجهة API أو الاتصال بمزود الخدمة",
"SubscriptionKeyMismatch": "عذرًا، بسبب خلل نظامي مؤقت، تم تعطيل اشتراكك مؤقتًا، يرجى الضغط على الزر أدناه لاستعادة الاشتراك أو الاتصال بنا عبر البريد الإلكتروني للدعم",
"SubscriptionPlanLimit": "لقد استنفدت نقاط اشتراكك، لا يمكنك استخدام هذه الميزة، يرجى الترقية إلى خطة أعلى أو تكوين API لنموذج مخصص للاستمرار",
"SystemTimeNotMatchError": "عذرًا، وقت نظامك لا يتطابق مع الخادم، يرجى التحقق من وقت النظام والمحاولة مجددًا",
"UnknownChatFetchError": "عذرًا، حدث خطأ غير معروف في الطلب، يرجى التحقق من المعلومات أدناه أو المحاولة مجددًا"
},
"sessionExpired": {
"desc": "لحماية أمان حسابك، يرجى تسجيل الدخول مجددًا",
"login": "تسجيل الدخول الآن",
"title": "انتهت صلاحية الجلسة"
}
}
+173
View File
@@ -0,0 +1,173 @@
{
"ai21": {
"description": "تقوم AI21 Labs ببناء نماذج أساسية وأنظمة ذكاء اصطناعي للشركات، لتسريع تطبيق الذكاء الاصطناعي التوليدي في الإنتاج."
},
"ai302": {
"description": "302.AI هو منصة تطبيقات ذكاء اصطناعي بنظام الدفع حسب الاستخدام، توفر أكثر واجهات برمجة التطبيقات (API) وتطبيقات الذكاء الاصطناعي شمولاً في السوق."
},
"ai360": {
"description": "360 AI هي منصة نماذج وخدمات الذكاء الاصطناعي التي أطلقتها شركة 360، تقدم مجموعة متنوعة من نماذج معالجة اللغة الطبيعية المتقدمة، بما في ذلك 360GPT2 Pro، 360GPT Pro، 360GPT Turbo و360GPT Turbo Responsibility 8K. تجمع هذه النماذج بين معلمات ضخمة وقدرات متعددة الوسائط، وتُستخدم على نطاق واسع في توليد النصوص، فهم الدلالات، أنظمة الحوار وتوليد الأكواد. من خلال استراتيجيات تسعير مرنة، تلبي 360 AI احتياجات المستخدمين المتنوعة، وتدعم دمج المطورين، وتعزز الابتكار والتطوير في التطبيقات الذكية."
},
"aihubmix": {
"description": "يوفر AiHubMix الوصول إلى مجموعة متنوعة من نماذج الذكاء الاصطناعي من خلال واجهة برمجة تطبيقات موحدة."
},
"anthropic": {
"description": "Anthropic هي شركة متخصصة في أبحاث وتطوير الذكاء الاصطناعي، تقدم مجموعة من نماذج اللغة المتقدمة مثل Claude 3.5 Sonnet، Claude 3 Sonnet، Claude 3 Opus وClaude 3 Haiku. تحقق هذه النماذج توازناً مثالياً بين الذكاء والسرعة والتكلفة، وتناسب مجموعة واسعة من سيناريوهات الاستخدام من أعباء العمل على مستوى المؤسسات إلى الاستجابات السريعة. يُعد Claude 3.5 Sonnet أحدث نماذجها، ويتميز بأداء ممتاز في العديد من التقييمات مع الحفاظ على تكلفة فعالة."
},
"azure": {
"description": "توفر Azure مجموعة من نماذج الذكاء الاصطناعي المتقدمة، بما في ذلك GPT-3.5 وسلسلة GPT-4 الأحدث، تدعم أنواع بيانات متعددة ومهام معقدة، وتركز على حلول ذكاء اصطناعي آمنة وموثوقة ومستدامة."
},
"azureai": {
"description": "توفر Azure مجموعة من نماذج الذكاء الاصطناعي المتقدمة، بما في ذلك GPT-3.5 وسلسلة GPT-4 الأحدث، تدعم أنواع بيانات متعددة ومهام معقدة، وتركز على حلول ذكاء اصطناعي آمنة وموثوقة ومستدامة."
},
"baichuan": {
"description": "تعد Baichuan Intelligent شركة متخصصة في تطوير نماذج الذكاء الاصطناعي الكبيرة، حيث تتفوق نماذجها في مهام اللغة الصينية مثل المعرفة الموسوعية، معالجة النصوص الطويلة، والإبداع التوليدي، متجاوزة النماذج العالمية الرائدة. كما تتميز بقدرات متعددة الوسائط رائدة في الصناعة، مع أداء ممتاز في العديد من التقييمات الموثوقة. تشمل نماذجها Baichuan 4، Baichuan 3 Turbo وBaichuan 3 Turbo 128k، والتي تم تحسينها لمختلف سيناريوهات الاستخدام، مقدمة حلولاً ذات تكلفة فعالة."
},
"bedrock": {
"description": "Bedrock هي خدمة تقدمها أمازون AWS تركز على توفير نماذج لغة ورؤية متقدمة للشركات. تشمل عائلة نماذجها سلسلة Claude من Anthropic، وسلسلة Llama 3.1 من Meta، مع خيارات تتراوح من خفيفة إلى عالية الأداء، تدعم مهام توليد النصوص، الحوار، ومعالجة الصور، مناسبة لتطبيقات الشركات بمختلف الأحجام والاحتياجات."
},
"cloudflare": {
"description": "تشغيل نماذج التعلم الآلي المدعومة بوحدات معالجة الرسومات بدون خادم على شبكة Cloudflare العالمية."
},
"cohere": {
"description": "تقدم Cohere أحدث نماذج متعددة اللغات، ووظائف استرجاع متقدمة، ومساحات عمل ذكاء اصطناعي مصممة خصيصاً للشركات الحديثة — كل ذلك مدمج في منصة آمنة."
},
"deepseek": {
"description": "DeepSeek هي شركة متخصصة في أبحاث وتطبيقات الذكاء الاصطناعي، حيث يتفوق نموذجها الأحدث DeepSeek-V3 في العديد من التقييمات على نماذج مفتوحة المصدر مثل Qwen2.5-72B وLlama-3.1-405B، ويقارب أداء نماذج مغلقة رائدة مثل GPT-4o وClaude-3.5-Sonnet."
},
"fal": {
"description": "منصة وسائط توليدية موجهة للمطورين."
},
"fireworksai": {
"description": "Fireworks AI هي شركة رائدة في خدمات نماذج اللغة المتقدمة، تركز على استدعاء الوظائف والمعالجة متعددة الوسائط. يعتمد نموذجها الأحدث Firefunction V2 على Llama-3، ومحسن لاستدعاء الوظائف، الحوار، وتتبع التعليمات. يدعم نموذج اللغة البصرية FireLLaVA-13B إدخال الصور والنصوص معاً. تشمل النماذج البارزة الأخرى سلسلة Llama وسلسلة Mixtral، مقدمة دعماً فعالاً لتتبع التعليمات والتوليد متعدد اللغات."
},
"giteeai": {
"description": "توفر Gitee AI واجهة برمجة تطبيقات Serverless لخدمات استدلال النماذج الكبيرة جاهزة للاستخدام لمطوري الذكاء الاصطناعي."
},
"github": {
"description": "من خلال نماذج GitHub، يمكن للمطورين أن يصبحوا مهندسي ذكاء اصطناعي ويستخدموا نماذج الذكاء الاصطناعي الرائدة في الصناعة للبناء."
},
"google": {
"description": "سلسلة Gemini من Google هي نماذج الذكاء الاصطناعي الأكثر تقدماً وشمولية، طورتها Google DeepMind، مصممة خصيصاً للوسائط المتعددة، تدعم الفهم والمعالجة السلسة للنصوص، الأكواد، الصور، الصوت والفيديو. مناسبة لمجموعة واسعة من البيئات من مراكز البيانات إلى الأجهزة المحمولة، مما يعزز كفاءة وانتشار نماذج الذكاء الاصطناعي."
},
"groq": {
"description": "محرك الاستدلال LPU من Groq يحقق أداءً متميزاً في أحدث اختبارات نماذج اللغة الكبيرة المستقلة، معاد تعريف معايير حلول الذكاء الاصطناعي بسرعته وكفاءته المذهلة. يمثل Groq سرعة استدلال فورية ويظهر أداءً جيداً في النشر السحابي."
},
"higress": {
"description": "Higress هو بوابة API سحابية أصلية، نشأت داخل علي بابا لحل مشاكل إعادة تحميل Tengine التي تؤثر على الأعمال ذات الاتصالات الطويلة، ونقص قدرات موازنة التحميل في gRPC/Dubbo."
},
"huggingface": {
"description": "توفر واجهة برمجة تطبيقات HuggingFace Inference طريقة سريعة ومجانية لاستكشاف آلاف النماذج لمهام متنوعة. سواء كنت تصمم نموذجاً أولياً لتطبيق جديد أو تستكشف إمكانيات التعلم الآلي، تتيح لك هذه الواجهة الوصول الفوري إلى نماذج عالية الأداء في مجالات متعددة."
},
"hunyuan": {
"description": "نموذج لغة كبير طورته Tencent يتميز بقدرات قوية في الإبداع باللغة الصينية، والتفكير المنطقي في سياقات معقدة، وقدرة موثوقة على تنفيذ المهام."
},
"infiniai": {
"description": "تقدم خدمات نماذج كبيرة عالية الأداء، سهلة الاستخدام، وآمنة للمطورين، تغطي كامل دورة تطوير النماذج الكبيرة إلى نشرها كخدمات."
},
"internlm": {
"description": "منظمة مفتوحة المصدر مكرسة لأبحاث النماذج الكبيرة وأدوات تطويرها. توفر منصة مفتوحة المصدر فعالة وسهلة الاستخدام لجميع مطوري الذكاء الاصطناعي، لتقريب أحدث تقنيات النماذج والخوارزميات."
},
"jina": {
"description": "تأسست Jina AI في 2020، وهي شركة رائدة في مجال البحث بالذكاء الاصطناعي. تشمل منصتها الأساسية نماذج متجهة، معيد ترتيب ونماذج لغة صغيرة، تساعد الشركات على بناء تطبيقات بحث توليدية ومتعددة الوسائط موثوقة وعالية الجودة."
},
"lmstudio": {
"description": "LM Studio هو تطبيق سطح مكتب لتطوير وتجربة نماذج اللغة الكبيرة على جهاز الكمبيوتر الخاص بك."
},
"minimax": {
"description": "تأسست MiniMax في 2021 كشركة تكنولوجيا ذكاء اصطناعي عامة، تلتزم بالابتكار الذكي مع المستخدمين. طورت MiniMax نماذج عامة متعددة الوسائط، بما في ذلك نموذج نصي MoE بمليارات المعلمات، ونماذج صوت وصورة كبيرة، وأطلقت تطبيقات مثل Conch AI."
},
"mistral": {
"description": "توفر Mistral نماذج متقدمة عامة، مهنية وبحثية، تُستخدم على نطاق واسع في الاستدلال المعقد، المهام متعددة اللغات، وتوليد الأكواد. من خلال واجهة استدعاء الوظائف، يمكن للمستخدمين دمج وظائف مخصصة لتلبية تطبيقات محددة."
},
"modelscope": {
"description": "ModelScope هي منصة نموذج كخدمة أطلقتها Alibaba Cloud، تقدم مجموعة غنية من نماذج الذكاء الاصطناعي وخدمات الاستدلال."
},
"moonshot": {
"description": "Moonshot هي منصة مفتوحة المصدر أطلقتها شركة Beijing Moon's Dark Side Technology Co., Ltd، تقدم نماذج متعددة لمعالجة اللغة الطبيعية، وتغطي مجالات واسعة مثل إنشاء المحتوى، البحث الأكاديمي، التوصية الذكية، التشخيص الطبي، وتدعم معالجة النصوص الطويلة والمهام التوليدية المعقدة."
},
"novita": {
"description": "Novita AI هي منصة خدمات API تقدم نماذج لغة كبيرة وتوليد صور بالذكاء الاصطناعي، مرنة وموثوقة وفعالة من حيث التكلفة. تدعم أحدث النماذج المفتوحة مثل Llama3 وMistral، وتوفر حلول API شاملة، سهلة الاستخدام وقابلة للتوسع تلقائياً لتطوير تطبيقات الذكاء الاصطناعي التوليدية، مناسبة للنمو السريع لشركات الذكاء الاصطناعي الناشئة."
},
"nvidia": {
"description": "توفر NVIDIA NIM™ حاويات لاستخدام خدمات استدلال معجلة بوحدات معالجة الرسومات ذاتية الاستضافة، تدعم نشر نماذج الذكاء الاصطناعي المدربة مسبقاً والمخصصة على السحابة، مراكز البيانات، أجهزة الكمبيوتر الشخصية ومحطات العمل RTX™ AI."
},
"ollama": {
"description": "تغطي نماذج Ollama مجالات توليد الأكواد، العمليات الحسابية، معالجة اللغات المتعددة والتفاعل الحواري، وتدعم احتياجات النشر المؤسسي والمحلي المتنوعة."
},
"openai": {
"description": "OpenAI هي مؤسسة رائدة عالمياً في أبحاث الذكاء الاصطناعي، حيث دفعت نماذجها مثل سلسلة GPT حدود معالجة اللغة الطبيعية. تلتزم OpenAI بتغيير الصناعات من خلال حلول ذكاء اصطناعي مبتكرة وفعالة. تتميز منتجاتها بأداء عالي وتكلفة اقتصادية، وتستخدم على نطاق واسع في البحث، الأعمال والتطبيقات الابتكارية."
},
"openrouter": {
"description": "OpenRouter هو منصة خدمات توفر واجهات لنماذج كبيرة متقدمة متعددة، تدعم OpenAI، Anthropic، LLaMA والمزيد، مناسبة لمتطلبات التطوير والتطبيق المتنوعة. يمكن للمستخدمين اختيار النماذج والأسعار المثلى حسب احتياجاتهم، لتعزيز تجربة الذكاء الاصطناعي."
},
"perplexity": {
"description": "Perplexity هي مزود رائد لنماذج توليد الحوار، تقدم نماذج Llama 3.1 متقدمة، تدعم التطبيقات عبر الإنترنت وغير المتصلة، ومناسبة بشكل خاص لمهام معالجة اللغة الطبيعية المعقدة."
},
"ppio": {
"description": "توفر PPIO خدمات API لنماذج مفتوحة المصدر مستقرة وذات تكلفة فعالة، تدعم سلسلة DeepSeek، Llama، Qwen وغيرها من النماذج الرائدة في الصناعة."
},
"qiniu": {
"description": "تعتبر Qiniu مزود خدمة سحابة قديم يقدم خدمات استدلال ذكاء اصطناعي في الوقت الحقيقي والدفعي بتكلفة فعالة واستقرار وسهولة استخدام."
},
"qwen": {
"description": "Tongyi Qianwen هو نموذج لغة ضخم طورته Alibaba Cloud، يتمتع بقدرات قوية في فهم وتوليد اللغة الطبيعية. يمكنه الإجابة على الأسئلة، إنشاء المحتوى، التعبير عن الآراء، وكتابة الأكواد، ويعمل في مجالات متعددة."
},
"sambanova": {
"description": "تتيح SambaNova Cloud للمطورين استخدام أفضل النماذج المفتوحة المصدر بسهولة والاستمتاع بأسرع سرعات الاستدلال."
},
"search1api": {
"description": "توفر Search1API وصولاً إلى نماذج سلسلة DeepSeek التي يمكن توصيلها بالشبكة حسب الحاجة، بما في ذلك النسخ القياسية والسريعة، مع دعم اختيار نماذج بأحجام معلمات مختلفة."
},
"sensenova": {
"description": "Sensenova من SenseTime تقدم خدمات نماذج كبيرة متكاملة وعالية الكفاءة وسهلة الاستخدام، مدعومة بالبنية التحتية القوية لشركة SenseTime."
},
"siliconcloud": {
"description": "SiliconCloud هي خدمة سحابية GenAI ذات تكلفة فعالة تعتمد على نماذج أساسية مفتوحة المصدر ممتازة."
},
"spark": {
"description": "توفر نماذج Xinghuo الكبيرة من iFlytek قدرات ذكاء اصطناعي قوية متعددة المجالات ومتعددة اللغات، باستخدام تقنيات معالجة اللغة الطبيعية المتقدمة، لبناء تطبيقات مبتكرة في الأجهزة الذكية، الرعاية الصحية الذكية، التمويل الذكي وغيرها من المجالات الرأسية."
},
"stepfun": {
"description": "نموذج Starry Large من StepFun يتميز بقدرات متعددة الوسائط واستدلال معقدة رائدة في الصناعة، يدعم فهم النصوص الطويلة ومحرك بحث ذاتي الجدولة قوي."
},
"taichu": {
"description": "أطلقت معهد الأتمتة التابع للأكاديمية الصينية للعلوم ومعهد ووهان للذكاء الاصطناعي نموذجاً كبيراً متعدد الوسائط من الجيل الجديد، يدعم الأسئلة المتعددة الجولات، إنشاء النصوص، توليد الصور، الفهم ثلاثي الأبعاد، تحليل الإشارات وغيرها من المهام الشاملة، مع قدرات معرفية وفهم وإبداع أقوى، لتجربة تفاعلية جديدة."
},
"tencentcloud": {
"description": "محرك المعرفة الذري (LLM Knowledge Engine Atomic Power) من Tencent Cloud يعتمد على محرك المعرفة لتوفير قدرة شاملة على الأسئلة والأجوبة المعرفية، موجه للشركات والمطورين، يتيح بناء وتطوير تطبيقات نموذجية مرنة. يمكنكم تجميع خدماتكم الخاصة باستخدام قدرات ذرية متعددة مثل تحليل المستندات، التقسيم، التضمين، إعادة الصياغة متعددة الجولات، لتخصيص أعمال الذكاء الاصطناعي الخاصة بالمؤسسات."
},
"togetherai": {
"description": "تسعى Together AI لتحقيق أداء رائد من خلال نماذج ذكاء اصطناعي مبتكرة، وتوفر قدرات تخصيص واسعة، بما في ذلك دعم التوسع السريع وعملية نشر بديهية، لتلبية احتياجات الشركات المتنوعة."
},
"upstage": {
"description": "تركز Upstage على تطوير نماذج ذكاء اصطناعي لمختلف الاحتياجات التجارية، بما في ذلك Solar LLM وDocument AI، بهدف تحقيق الذكاء الاصطناعي العام الاصطناعي (AGI). تتيح إنشاء وكلاء حوار بسيطين عبر Chat API، وتدعم استدعاء الوظائف، الترجمة، التضمين، والتطبيقات المتخصصة."
},
"v0": {
"description": "v0 هو مساعد برمجة زوجي، يكفي أن تصف أفكارك بلغة طبيعية، ليولد لك الكود وواجهة المستخدم (UI) لمشروعك."
},
"vertexai": {
"description": "سلسلة Gemini من Google هي نماذج الذكاء الاصطناعي الأكثر تقدماً وشمولية، طورتها Google DeepMind، مصممة خصيصاً للوسائط المتعددة، تدعم الفهم والمعالجة السلسة للنصوص، الأكواد، الصور، الصوت والفيديو. مناسبة لمجموعة واسعة من البيئات من مراكز البيانات إلى الأجهزة المحمولة، مما يعزز كفاءة وانتشار نماذج الذكاء الاصطناعي."
},
"vllm": {
"description": "vLLM هي مكتبة سريعة وسهلة الاستخدام للاستدلال وخدمات نماذج اللغة الكبيرة."
},
"volcengine": {
"description": "منصة تطوير خدمات النماذج الكبيرة التي أطلقتها ByteDance، تقدم خدمات استدعاء نماذج غنية الوظائف، آمنة وبأسعار تنافسية، مع توفير وظائف شاملة من بيانات النماذج، الضبط الدقيق، الاستدلال، التقييم، لضمان تطوير تطبيقات الذكاء الاصطناعي بنجاح."
},
"wenxin": {
"description": "منصة تطوير وخدمات نماذج كبيرة وذكاء اصطناعي أصلية للمؤسسات، تقدم سلسلة أدوات شاملة وسهلة الاستخدام لتطوير نماذج الذكاء الاصطناعي التوليدية وتطوير التطبيقات."
},
"xai": {
"description": "xAI هي شركة مكرسة لبناء ذكاء اصطناعي لتسريع الاكتشافات العلمية البشرية. مهمتنا هي دفع فهمنا المشترك للكون."
},
"xinference": {
"description": "Xorbits Inference (Xinference) هي منصة مفتوحة المصدر لتبسيط تشغيل ودمج نماذج الذكاء الاصطناعي المتنوعة. مع Xinference، يمكنك تشغيل استدلال أي نموذج LLM مفتوح المصدر، نموذج تضمين، ونماذج متعددة الوسائط في بيئات سحابية أو محلية، وإنشاء تطبيقات ذكاء اصطناعي قوية."
},
"zeroone": {
"description": "ZeroOne致力于推动以人为本的AI 2.0技术革命,旨在通过大语言模型创造巨大的经济和社会价值,并开创新的AI生态与商业模式。"
},
"zhipu": {
"description": "توفر Zhipu AI منصة مفتوحة للنماذج متعددة الوسائط واللغوية، تدعم مجموعة واسعة من سيناريوهات تطبيقات الذكاء الاصطناعي، بما في ذلك معالجة النصوص، فهم الصور، والمساعدة في البرمجة."
}
}
+282
View File
@@ -0,0 +1,282 @@
{
"about": "حول LobeHub",
"account": {
"group": "الحساب",
"profile": {
"email": "البريد الإلكتروني",
"name": "اسم المستخدم",
"status": "حالة الحساب",
"unverified": "غير مُحقق",
"verified": "تم التحقق"
},
"signOut": {
"confirm": "هل أنت متأكد أنك تريد تسجيل الخروج؟",
"label": "تسجيل الخروج"
},
"switchAccount": {
"action": "تبديل الحساب",
"confirm": "هل تريد بالتأكيد تبديل الحساب؟ سيؤدي ذلك إلى تسجيل الخروج من الحساب الحالي وتسجيل الدخول من جديد.",
"error": "فشل تبديل الحساب، يرجى المحاولة مرة أخرى.",
"label": "تبديل الحساب"
},
"title": "إعدادات الحساب"
},
"advanced": {
"group": "متقدم"
},
"aiProviders": {
"configuration": {
"apiKey": {
"description": "يرجى إدخال مفتاح API الخاص بـ {{name}}",
"label": "مفتاح API",
"placeholder": "يرجى إدخال مفتاح API الخاص بـ {{name}}"
},
"proxyUrl": {
"desc": "يجب أن يبدأ بـ http(s)://",
"invalid": "يرجى إدخال عنوان URL صالح يبدأ بـ http:// أو https://",
"placeholder": "https://api.example.com/v1",
"title": "عنوان وكيل API"
},
"saving": "جارٍ حفظ الإعدادات...",
"title": "الإعدادات",
"updateFailedDesc": "فشل الحفظ، يرجى المحاولة مرة أخرى",
"updateFailedTitle": "فشل الحفظ"
},
"detail": {
"loadFailed": "فشل تحميل إعدادات المزود",
"loading": "جارٍ تحميل إعدادات المزود..."
},
"info": {
"builtIn": "مزود مدمج",
"custom": "مزود مخصص"
},
"list": {
"disabled": "غير مفعل",
"emptySearch": "لم يتم العثور على مزود مطابق",
"enabled": "مفعل",
"loadFailed": "فشل تحميل قائمة المزودين"
},
"models": {
"allLoaded": "تم عرض جميع النماذج",
"copySuccess": "تم النسخ بنجاح",
"disableFailed": "فشل تعطيل النموذج",
"emptyNoSearch": "لم يتم العثور على أي نموذج، حاول التحميل من الخادم",
"emptyWithSearch": "لا توجد نماذج تطابق معايير البحث",
"enableFailed": "فشل تفعيل النموذج",
"fetch": "جلب النماذج",
"fetchFailed": "فشل جلب النماذج، يرجى المحاولة مرة أخرى",
"fetchSuccess": "تم جلب قائمة النماذج بنجاح!",
"fetching": "جارٍ الجلب...",
"loading": "جارٍ التحميل...",
"loadingMore": "جارٍ تحميل المزيد...",
"modelsAvailable": "عدد النماذج المتاحة: {{count}}",
"searchPlaceholder": "ابحث عن نموذج...",
"title": "النماذج"
},
"skeleton": {
"disabled": "غير مفعل",
"enabled": "مفعل"
}
},
"cache": {
"clear": {
"confirm": {
"action": "مسح الذاكرة المؤقتة",
"description": "سيؤدي ذلك إلى إزالة البيانات المخزنة محليًا، وسيتعين إعادة تحميل المحتوى عند فتح التطبيق مرة أخرى.",
"title": "هل تريد تأكيد مسح الذاكرة المؤقتة؟"
},
"failure": "فشل مسح الذاكرة المؤقتة",
"success": "تم مسح الذاكرة المؤقتة"
},
"description": "تُستخدم الذاكرة المؤقتة لتسريع بدء التشغيل. يمكنك مسحها لتحرير المساحة.",
"title": "مسح الذاكرة المؤقتة"
},
"changelog": "سجل التحديثات",
"color": {
"neutral": {
"description": "اختر اللون المحايد للتطبيق",
"title": "إعداد اللون المحايد"
},
"preview": "معاينة",
"previewMessages": {
"botGreat": "سعيد لأنك أحببت ذلك! تتيح لك هذه المعاينة رؤية تأثير السمة قبل تطبيقها.",
"botHowToUse": "يمكنك استخدام أداة اختيار الألوان أدناه لتعديل اللون الأساسي والمحايد، وسيتم تحديث المعاينة في الوقت الفعلي.",
"userGreat": "رائع!",
"userHowToUse": "كيف أستخدم معاينة السمة؟"
},
"primary": {
"description": "اختر اللون الأساسي للتطبيق",
"title": "إعداد اللون الأساسي"
},
"title": "إعدادات الألوان"
},
"developer": {
"auth": {
"accessToken": {
"expire": {
"success": "تم إنهاء صلاحية رمز الوصول فورًا",
"title": "انتهاء صلاحية رمز الوصول"
},
"invalidate": {
"success": "تم إدخال رمز وصول غير صالح",
"title": "رمز وصول غير صالح"
}
},
"clearAuthData": {
"success": "تم مسح بيانات المصادقة",
"title": "مسح بيانات المصادقة"
},
"error": {
"noToken": "لا يوجد رمز متاح حاليًا"
},
"group": "إعدادات المصادقة",
"refreshToken": {
"expire": {
"success": "تم إنهاء صلاحية رمز التحديث فورًا",
"title": "انتهاء صلاحية رمز التحديث"
},
"invalidate": {
"success": "تم إدخال رمز تحديث غير صالح",
"title": "رمز تحديث غير صالح"
}
}
},
"failurePrefix": "فشل العملية: ",
"mode": {
"already": "أنت بالفعل في وضع المطور",
"enabled": "تم تفعيل وضع المطور",
"remaining": "اضغط {{count}} مرة أخرى لتفعيل وضع المطور",
"title": "وضع المطور"
},
"selfHostedEntry": {
"confirmAction": "الانتقال إلى صفحة الإعدادات",
"confirmDescription": "بعد التفعيل، سيتم فتح صفحة إعدادات الاستضافة الذاتية مباشرة. هل ترغب في تسجيل الخروج والانتقال؟",
"confirmResetAction": "إعادة التعيين والانتقال إلى تسجيل الدخول",
"confirmResetDescription": "سيؤدي إيقاف وضع الاستضافة الذاتية إلى إعادة تعيين عنوان الخادم إلى النسخة الرسمية وتسجيل الخروج. هل ترغب في المتابعة؟",
"confirmResetTitle": "إيقاف وضع الاستضافة الذاتية",
"confirmTitle": "تفعيل مدخل تسجيل الدخول للاستضافة الذاتية",
"description": "التحكم في ما إذا كان زر الاستضافة الذاتية يظهر في صفحة تسجيل الدخول",
"title": "تفعيل وضع الاستضافة الذاتية"
},
"server": {
"confirmDescription": "سيؤدي تغيير عنوان الخادم إلى تسجيل الخروج وإعادة تسجيل الدخول. هل ترغب في المتابعة؟",
"confirmTitle": "تأكيد تغيير الخادم",
"current": "العنوان الحالي",
"description": "بعد التكوين، سيتم استخدام هذا العنوان لجميع الطلبات. اتركه فارغًا للعودة إلى الخادم الرسمي.",
"group": "إعدادات الخادم",
"hint": "يجب أن يبدأ بـ http:// أو https://، قد يتطلب التطبيق تسجيل الدخول من جديد.",
"invalid": "يرجى إدخال عنوان صالح يبدأ بـ http:// أو https://",
"notice": "سيتم استبدال عنوان الواجهة الافتراضي بالخادم المخصص. تأكد من أن الخدمة متاحة ومتوافقة مع بروتوكول LobeChat API. قد تحتاج إلى إعادة تسجيل الدخول أو إعادة تشغيل التطبيق بعد التبديل.",
"noticeTitle": "يرجى الملاحظة قبل التبديل",
"placeholder": "https://your-server.example.com",
"reset": "استعادة الإعدادات الافتراضية",
"resetSuccess": "تمت استعادة عنوان الخادم الرسمي",
"save": "حفظ",
"title": "مثيل مستضاف ذاتيًا",
"updated": "تم تحديث عنوان الخادم المخصص"
},
"title": "خيارات المطور"
},
"feedback": {
"email": {
"body": {
"description": "وصف المشكلة:",
"footer": "تم الإرسال من {{device}} الخاص بي",
"frequency": "معدل التكرار:",
"screenshots": "لقطات الشاشة ذات الصلة:",
"template": "يرجى وصف المشكلة التي واجهتها بالتفصيل حتى نتمكن من مساعدتك بشكل أفضل."
},
"subject": "ملاحظات - LobeChat - {{version}}"
},
"error": "فشل في فتح تطبيق البريد، يرجى المحاولة مرة أخرى لاحقًا",
"saved": "تم حفظ الملاحظات في المسودات",
"sent": "تم إرسال البريد، شكرًا لملاحظاتك!",
"title": "ملاحظات",
"unavailable": "ميزة البريد غير متوفرة، يرجى التحقق مما إذا كان قد تم إعداد حساب بريد إلكتروني أو تم تفعيل وظيفة البريد على الجهاز"
},
"fontSize": {
"preview": {
"botAnswer": "**كيف يمكنني تعديل حجم الخط؟**\n\nاستخدم شريط التمرير أدناه لتغيير حجم الخط: إلى اليسار لتصغيره، وإلى اليمين لتكبيره. سيتم عرض المعاينة في الوقت الفعلي أثناء التعديل.\n\nنصيحة: اختر \"قياسي\" للعودة إلى الحجم الافتراضي بسرعة.",
"botGreat": "سعيد لأنك أحببت ذلك! تتيح لك هذه المعاينة رؤية تأثير حجم الخط في المحادثة قبل تطبيقه.",
"userGreat": "رائع!",
"userQuestion": "أريد تكبير حجم خط المحادثة، كيف أفعل ذلك؟"
},
"standard": "قياسي",
"text": "ملاحظة: هذا الإعداد يؤثر فقط على حجم خط محتوى الرسائل",
"title": "حجم الخط"
},
"general": {
"group": "عام"
},
"help": "مساعدة الاستخدام",
"info": {
"group": "معلومات"
},
"locale": {
"auto": {
"description": "اتبع إعدادات لغة النظام",
"title": "اتبع النظام"
},
"title": "إعدادات اللغة"
},
"openai": "إعدادات OpenAI",
"openaiSettings": {
"apiKey": "مفتاح API",
"apiKeyPlaceholder": "يرجى إدخال مفتاح OpenAI API الخاص بك",
"checkApiKey": "يرجى التحقق من صحة مفتاح API",
"checkProxyAddress": "تعذر الاتصال بالخادم، يرجى التحقق من عنوان الوكيل",
"connectionSuccess": "تم الاتصال بنجاح، مفتاح API وعنوان الوكيل صحيحان",
"connectivityHint": "بعد اختبار الاتصال، سيتم التحقق من صحة مفتاح API وعنوان الوكيل",
"pleaseEnterApiKey": "يرجى إدخال مفتاح API",
"proxyAddress": "عنوان وكيل API",
"proxyPlaceholder": "يجب أن يحتوي على http(s)://",
"testConnectivity": "اختبار الاتصال",
"validationFailed": "فشل التحقق",
"validationSuccess": "تم التحقق بنجاح"
},
"providerModels": {
"config": {
"aesGcm": "سيتم تشفير مفتاحك وعنوان الوكيل باستخدام خوارزمية <1>AES-GCM</1>",
"checker": {
"button": "اختبار الاتصال",
"desc": "اختبر ما إذا كان مفتاح API وعنوان الوكيل قد تم إدخالهما بشكل صحيح",
"pass": "تم التحقق بنجاح",
"selectModel": "اختر نموذجًا لاختبار الاتصال",
"title": "اختبار الاتصال"
}
}
},
"providers": "مزودو الذكاء الاصطناعي",
"providersDetail": {
"tabs": {
"configuration": "الإعدادات",
"models": "النماذج"
}
},
"providersSearchPlaceholder": "ابحث عن مزود باستخدام الكلمات المفتاحية...",
"support": "دعم عبر البريد الإلكتروني",
"themeMode": {
"auto": "اتبع النظام",
"dark": "الوضع الداكن",
"light": "الوضع الفاتح",
"title": "وضع السمة"
},
"title": "الإعدادات",
"update": {
"check": {
"applyAction": "إعادة التشغيل الآن",
"applyDescription": "يجب إعادة تشغيل التطبيق لتطبيق التحديث الأخير. هل ترغب في إعادة التشغيل الآن؟",
"applyError": "فشل تطبيق التحديث، يرجى المحاولة لاحقًا",
"applyTitle": "تطبيق التحديث",
"applying": "جارٍ إعادة التشغيل لتطبيق التحديث...",
"checking": "جارٍ التحقق من وجود تحديثات...",
"downloaded": "تم تنزيل حزمة التحديث",
"downloading": "تم اكتشاف إصدار جديد، جارٍ تنزيل التحديث...",
"error": "فشل التحقق من التحديث، يرجى المحاولة لاحقًا",
"none": "أنت تستخدم أحدث إصدار حاليًا",
"title": "التحقق من التحديثات",
"unavailable": "البنية الحالية لا تدعم التحقق من التحديثات. يرجى استخدام النسخة الرسمية."
}
},
"version": "الإصدار الحالي"
}
+32
View File
@@ -0,0 +1,32 @@
{
"localSystem": {
"apiName": {
"listLocalFiles": "عرض قائمة الملفات",
"moveLocalFiles": "نقل الملفات",
"readLocalFile": "قراءة محتوى الملف",
"renameLocalFile": "إعادة تسمية",
"searchLocalFiles": "البحث عن الملفات",
"writeLocalFile": "كتابة الملف"
},
"title": "النظام المحلي"
},
"mobileNotSupported": "هذه الأداة غير مدعومة على الأجهزة المحمولة حاليًا، يُرجى استخدام جهاز سطح المكتب لعرض المحتوى الكامل",
"search": {
"apiName": {
"crawlMultiPages": "قراءة محتوى عدة صفحات",
"crawlSinglePage": "قراءة محتوى الصفحة",
"search": "البحث في الصفحة"
},
"crawPages": {
"crawling": "جارٍ الزحف...",
"meta": {
"crawler": "الزاحف",
"words": "عدد الكلمات"
}
},
"emptyResult": "لا توجد نتائج للبحث",
"title": "بحث الويب"
},
"title": "استدعاء الأدوات",
"unknown": "أداة غير معروفة"
}
+48
View File
@@ -0,0 +1,48 @@
{
"actions": {
"confirmRemoveAll": "سيتم حذف جميع المواضيع، ولا يمكن استعادتها بعد الحذف، يرجى توخي الحذر",
"confirmRemoveUnstarred": "سيتم حذف المواضيع غير المضافة إلى المفضلة، ولا يمكن استعادتها بعد الحذف، يرجى توخي الحذر",
"favorite": "إضافة إلى المفضلة",
"removeAll": "حذف جميع المواضيع",
"removeUnstarred": "حذف المواضيع غير المفضلة",
"unfavorite": "إزالة من المفضلة"
},
"confirmRemoveTopicItemAlert": "سيتم حذف هذا الموضوع، ولن يكون بالإمكان استعادته بعد الحذف. يرجى تأكيد الإجراء.",
"defaultTitle": "الموضوع الافتراضي",
"empty": "لا توجد مواضيع",
"favorite": "المفضلة",
"groupTitle": {
"byTime": {
"favorite": "المفضلة",
"month": "هذا الشهر",
"today": "اليوم",
"week": "هذا الأسبوع",
"yesterday": "أمس"
}
},
"guide": {
"desc": "انقر على زر الإرسال على اليسار لحفظ المحادثة الحالية كموضوع محفوظ وبدء محادثة جديدة",
"title": "قائمة المواضيع"
},
"loading": "جارٍ التحميل...",
"newTopic": "موضوع جديد",
"rename": {
"action": "إعادة التسمية",
"done": "تم",
"emptyTitle": "لا يمكن أن يكون اسم الموضوع فارغًا",
"error": "فشل في إعادة التسمية",
"placeholder": "أدخل اسم الموضوع",
"success": "تمت إعادة التسمية بنجاح",
"title": "إعادة تسمية الموضوع",
"tooLong": "اسم الموضوع طويل جدًا"
},
"search": {
"emptyResult": "لم يتم العثور على مواضيع مطابقة",
"placeholder": "ابحث عن موضوع...",
"recentSearches": "عمليات البحث الأخيرة",
"title": "البحث عن موضوع"
},
"searchPlaceholder": "ابحث عن موضوع...",
"temp": "مؤقت",
"title": "الموضوع"
}
+49
View File
@@ -0,0 +1,49 @@
{
"guide": {
"agents": {
"replaceBtn": "تغيير المجموعة",
"title": "توصيات مساعد جديدة:"
},
"defaultMessage": "أنا مساعدك الذكي الشخصي {{appName}}، كيف يمكنني مساعدتك الآن؟<br />إذا كنت بحاجة إلى مساعد أكثر تخصصًا أو مخصصًا، يمكنك النقر على <plus /> لإنشاء مساعد مخصص",
"defaultMessageWithoutCreate": "أنا مساعدك الذكي الشخصي {{appName}}، كيف يمكنني مساعدتك الآن؟",
"qa": {
"q01": "ما هو LobeHub؟",
"q02": "ما هو {{appName}}؟",
"q03": "هل لدى {{appName}} دعم مجتمعي؟",
"q04": "ما هي الميزات التي يدعمها {{appName}}؟",
"q05": "كيف يمكن نشر واستخدام {{appName}}؟",
"q06": "كيف يتم تسعير {{appName}}؟",
"q07": "هل {{appName}} مجاني؟",
"q08": "هل هناك نسخة خدمة سحابية؟",
"q09": "هل يدعم نماذج اللغة المحلية؟",
"q10": "هل يدعم التعرف على الصور وتوليدها؟",
"q11": "هل يدعم تحويل النص إلى كلام والتعرف على الصوت؟",
"q12": "هل يدعم نظام الإضافات؟",
"q13": "هل لديه سوق خاص للحصول على GPTs؟",
"q14": "هل يدعم مزودي خدمات الذكاء الاصطناعي المتعددين؟",
"q15": "ماذا أفعل إذا واجهت مشكلة أثناء الاستخدام؟"
},
"questions": {
"moreBtn": "اعرف المزيد",
"title": "الأسئلة الشائعة:"
},
"topics": {
"title": "المواضيع الأخيرة:"
},
"welcome": {
"afternoon": "مساء الخير",
"morning": "صباح الخير",
"night": "مساء الخير",
"noon": "طاب يومك"
}
},
"header": "مرحبًا بك",
"pickAgent": "أو اختر من قوالب المساعدين أدناه",
"skip": "تخطي الإنشاء",
"slogan": {
"desc1": "افتح عقول الجماعة وأشعل شرارة الأفكار. مساعدك الذكي دائمًا معك.",
"desc2": "أنشئ مساعدك الأول، هيا نبدأ~",
"title": "امنح نفسك عقلًا أكثر ذكاءً"
},
"title": "مرحبًا بك"
}
+32
View File
@@ -0,0 +1,32 @@
{
"login": {
"button": "Вход в {{appName}}",
"cancel": "Отказ",
"loginWithLobeHub": "Вход с акаунт в {{appName}}",
"privacyPolicy": "Политика за поверителност",
"processing": "Вход в системата, моля изчакайте...",
"securityNote": "Подписването означава, че приемате нашите",
"selfHostedButton": "Използвайте самостоятелен екземпляр",
"selfHostedContinue": "Продължи",
"selfHostedDescription": "Свържете се със своя самостоятелно хостван LobeChat сървър.",
"selfHostedHint": "Ще запомним този адрес на сървъра, докато не превключите обратно към официалния екземпляр в настройките.",
"selfHostedInvalid": "Моля, въведете валиден HTTP или HTTPS адрес.",
"selfHostedPlaceholder": "https://your-lobechat-instance.com",
"selfHostedRequired": "Моля, въведете адрес на сървъра.",
"selfHostedTitle": "Въведете адреса на самостоятелно хоствания сървър",
"subtitle": "Добре дошли отново! Моля, влезте, за да продължите",
"usePolicy": "Условия за ползване"
},
"logout": {
"button": "Изход",
"confirm": {
"cancel": "Отказ",
"message": "Сигурни ли сте, че искате да излезете?",
"ok": "Потвърждавам",
"title": "Потвърждение за изход"
}
},
"profile": {
"verified": "Потвърден"
}
}
+81
View File
@@ -0,0 +1,81 @@
{
"agentDefaultMessage": "Здравейте, аз съм **{{name}}**, можете веднага да започнете разговор с мен или да отидете в [Настройки на асистента]({{url}}), за да подобрите информацията ми.",
"agentDefaultMessageWithSystemRole": "Здравейте, аз съм **{{name}}**, {{systemRole}}, нека започнем разговора!",
"agentDefaultMessageWithoutEdit": "Здравейте, аз съм **{{name}}**, нека започнем разговора!",
"agentList": "Списък с асистенти",
"agentRoleEdit": {
"cancel": "Отказ",
"confirm": "Потвърждение",
"edit": "Редактиране",
"editButton": "Редактиране на ролята",
"placeholder": "Моля, въведете подсказка за ролята",
"roleSetting": "Настройка на ролята",
"title": "Настройка на ролята"
},
"confirmDelete": "Потвърдете изтриването",
"confirmRemoveSessionItemAlert": "Този асистент ще бъде изтрит и няма да може да бъде възстановен. Моля, потвърдете действието си.",
"copyFailed": "Копирането не бе успешно",
"defaultAgent": "Персонализиран асистент",
"defaultList": "Списък по подразбиране",
"deleteMessageConfirm": "Сигурни ли сте, че искате да изтриете това съобщение?",
"history": "История на разговорите",
"inbox": {
"desc": "Активирайте мозъчния клъстер и стимулирайте искрите на мисълта. Вашият интелигентен асистент е тук, за да обсъжда всичко с вас.",
"title": "Свободен разговор"
},
"messageCopied": "Съобщението е копирано",
"messageEdit": {
"placeholder": "Моля, въведете съдържанието на съобщението",
"title": "Редактиране на съобщение"
},
"newAgent": "Нов помощник",
"newChat": "Нов разговор",
"pin": "Закачане",
"pinOff": "Премахване на закачането",
"placeholder": "Въведете вашето съобщение...",
"reasoning": {
"thinking": "Задълбочено обмисляне...",
"thought": "Задълбочено обмислено (отне {{duration}} секунди)",
"thoughtWithoutDuration": "Задълбочено обмислено"
},
"regenerateFailed": "Неуспешно повторно генериране, моля опитайте по-късно",
"send": "Изпрати",
"session": {
"createFirst": "Създайте първата си чат сесия",
"empty": "Няма налични сесии",
"search": {
"discoverAssistants": "Открийте асистенти",
"emptyResult": "Няма намерени съвпадащи помощници",
"myAssistants": "Моите асистенти",
"placeholder": "Търсете любимия си асистент...",
"recentSearches": "Скорошни търсения",
"title": "Търсене"
},
"title": "Свободен разговор"
},
"sessionGroup": {
"config": "Управление на групи",
"confirmRemoveGroupAlert": "Групата ще бъде изтрита. След изтриването, асистентите в тази група ще бъдат преместени в списъка по подразбиране. Моля, потвърдете действието си.",
"createGroup": "Създаване на група",
"createSuccess": "Групата беше създадена успешно",
"emptyGroup": "Няма налични групи",
"inputPlaceholder": "Моля, въведете име на групата",
"moveGroup": "Преместване в група",
"moveSuccess": "Успешно преместване",
"newGroup": "Нова група",
"removeSuccess": "Успешно изтриване",
"rename": "Преименуване",
"renameSuccess": "Успешно преименуване",
"tooLong": "Името на групата трябва да бъде между 1 и 20 символа"
},
"setting": {
"avatar": "Аватар",
"description": "Описание",
"done": "Готово",
"name": "Име",
"title": "Настройки на разговора"
},
"share": "Сподели",
"stop": "Спри",
"thinking": "Мислене..."
}
+50
View File
@@ -0,0 +1,50 @@
{
"actions": {
"add": "Добавяне",
"cancel": "Отказ",
"clear": "Изчисти",
"confirm": "Потвърждение",
"continue": "Продължи",
"copy": "Копирай",
"delete": "Изтрий",
"edit": "Редактирай",
"more": "Още",
"notNow": "Не сега",
"regenerate": "Генерирай отново",
"retry": "Опитай отново",
"save": "Запази",
"saveImage": "Запази изображението"
},
"and": "и",
"assistant": {
"fetchError": "Неуспешно зареждане на списъка с асистенти, моля опитайте по-късно",
"noData": "Няма данни за асистенти",
"noMatch": "Не са намерени съвпадащи асистенти",
"recentSearches": "Скорошни търсения",
"search": "Търсене на асистент...",
"searchNoResult": "Няма намерени съвпадащи асистенти",
"searchPlaceholder": "Моля, въведете ключова дума за търсене"
},
"defaultSession": "Персонализиран асистент",
"image": {
"permissionDenied": "Необходим е достъп до албума, за да се запази изображението",
"permissionRequest": "Моля, разрешете достъп до албума в настройките",
"saveFailed": "Неуспешно запазване, моля опитайте отново",
"saveSuccess": "Изображението е запазено в албума"
},
"navigation": {
"goToHomeScreen": "Върни се на началния екран"
},
"or": "или",
"search": {
"placeholder": "Търсене"
},
"status": {
"error": "Грешка",
"info": "Информация",
"loading": "Зареждане...",
"networkRetryTip": "Моля, проверете мрежовата връзка или опитайте отново",
"success": "Успешно",
"warning": "Предупреждение"
}
}
+14
View File
@@ -0,0 +1,14 @@
{
"Highlighter": {
"cancel": "Отказ",
"selectLanguage": "Избор на език"
},
"ModelSwitchPanel": {
"chooseModel": "Изберете модел",
"emptyModel": "Няма активирани модели, моля отидете в настройките, за да активирате",
"emptyProvider": "Няма активирани доставчици, моля отидете в настройките, за да активирате",
"goToSettings": "Отидете в настройките",
"provider": "Доставчик",
"title": "Модел"
}
}
+35
View File
@@ -0,0 +1,35 @@
{
"assistant": {
"detail": {
"addAndChat": "Добавяне на асистент и чат",
"addFailed": "Неуспешно добавяне на асистент",
"addFailedMessage": "Неуспешно добавяне на асистент, моля опитайте по-късно",
"assistantSettings": "Настройки на асистента",
"loadFailed": "Неуспешно зареждане на детайли за асистента, моля опитайте по-късно",
"notFoundIdentifier": "Идентификаторът на асистента не е намерен",
"share": "Споделяне",
"shareFailed": "Неуспешно споделяне",
"title": "Подробности за асистента"
}
},
"category": {
"assistant": {
"academic": "Академичен",
"all": "Всички",
"career": "Кариера",
"copywriting": "Копирайтинг",
"design": "Дизайн",
"education": "Образование",
"emotions": "Емоции",
"entertainment": "Развлечение",
"games": "Игри",
"general": "Общ",
"life": "Живот",
"marketing": "Бизнес",
"office": "Офис",
"programming": "Програмиране",
"translation": "Превод"
}
},
"title": "Открийте"
}
+120
View File
@@ -0,0 +1,120 @@
{
"error": {
"title": "Възникна грешка"
},
"http": {
"forbidden": "Достъпът е забранен",
"networkError": "Грешка в мрежата",
"notFound": "Не е намерено",
"serverError": "Грешка на сървъра",
"timeout": "Времето за заявката изтече",
"unauthorized": "Неоторизиран"
},
"login": {
"accessDenied": "Съжаляваме, заявката за влизане е отказана, моля опитайте по-късно",
"cancelled": "Отказахте влизането",
"invalidGrant": "Съжаляваме, сесията за влизане е изтекла, моля опитайте по-късно",
"invalidIdToken": "Съжаляваме, временно не можем да получим информация за вашия акаунт, моля опитайте по-късно",
"invalidRequest": "Съжаляваме, има проблем със заявката за влизане, моля опитайте по-късно",
"invalidState": "Съжаляваме, проверката за влизане не е премината, моля опитайте по-късно",
"missingCodeOrState": "Съжаляваме, липсва необходимата информация за влизане, моля опитайте по-късно",
"missingPkce": "Съжаляваме, липсва информация за проверка при влизане, моля опитайте по-късно",
"networkError": "Съжаляваме, възникна мрежова грешка по време на влизане, моля проверете мрежата и опитайте отново",
"noIdToken": "Съжаляваме, не успяхме да получим информация за влизане, моля опитайте по-късно",
"serverError": "Съжаляваме, възникна проблем със сървъра за влизане, моля опитайте по-късно",
"temporarilyUnavailable": "Съжаляваме, услугата за влизане временно не е налична, моля опитайте по-късно",
"tokenEndpointNonJson": "Съжаляваме, услугата за влизане върна неочакван отговор, моля опитайте по-късно",
"tokenExchangeFailed": "Съжаляваме, възникна проблем при обработката на влизането, моля опитайте по-късно",
"unknown": "Съжаляваме, влизането не бе успешно, моля опитайте по-късно",
"unsupportedResponseType": "Съжаляваме, този метод за влизане не се поддържа в момента, моля опитайте по-късно"
},
"page": {
"notFoundMessage": "Тази страница не съществува.",
"notFoundTitle": "Опа!"
},
"response": {
"400": "Съжаляваме, сървърът не разбира вашата заявка, моля проверете дали параметрите са правилни",
"401": "Съжаляваме, сървърът отказа вашата заявка, вероятно поради липса на права или невалидна автентикация",
"403": "Съжаляваме, сървърът отказа вашата заявка, нямате достъп до това съдържание",
"404": "Съжаляваме, сървърът не намери страницата или ресурса, моля проверете дали URL адресът е правилен",
"405": "Съжаляваме, сървърът не поддържа използвания метод на заявка, моля проверете метода",
"406": "Съжаляваме, сървърът не може да изпълни заявката според характеристиките на съдържанието",
"407": "Съжаляваме, трябва да се извърши прокси автентикация, за да продължите",
"408": "Съжаляваме, сървърът изтече времето за изчакване на заявката, моля проверете мрежата и опитайте отново",
"409": "Съжаляваме, заявката е в конфликт и не може да бъде обработена, вероятно поради несъвместимо състояние на ресурса",
"410": "Съжаляваме, ресурсът, който търсите, е премахнат завинаги и не може да бъде намерен",
"411": "Съжаляваме, сървърът не може да обработи заявка без валидна дължина на съдържанието",
"412": "Съжаляваме, вашата заявка не отговаря на условията на сървъра и не може да бъде изпълнена",
"413": "Съжаляваме, заявката е твърде голяма и сървърът не може да я обработи",
"414": "Съжаляваме, URI на заявката е твърде дълъг и сървърът не може да го обработи",
"415": "Съжаляваме, сървърът не може да обработи медийния формат на заявката",
"416": "Съжаляваме, сървърът не може да удовлетвори диапазона, който искате",
"417": "Съжаляваме, сървърът не може да удовлетвори вашите очаквания",
"422": "Съжаляваме, форматът на заявката е правилен, но съдържа семантични грешки и не може да бъде обработена",
"423": "Съжаляваме, ресурсът, който искате, е заключен",
"424": "Съжаляваме, поради неуспешна предишна заявка, текущата не може да бъде изпълнена",
"426": "Съжаляваме, сървърът изисква клиентът да се актуализира до по-висока версия на протокола",
"428": "Съжаляваме, сървърът изисква предварително условие, моля включете правилните условни заглавки в заявката",
"429": "Съжаляваме, изпратихте твърде много заявки, сървърът е претоварен, моля опитайте по-късно",
"431": "Съжаляваме, заглавните полета на заявката са твърде големи и сървърът не може да ги обработи",
"451": "Съжаляваме, поради правни причини сървърът отказва достъп до този ресурс",
"499": "Съжаляваме, вашата заявка беше прекъсната неочаквано по време на обработка, вероятно поради отказана операция или нестабилна мрежа. Моля, проверете мрежата и опитайте отново.",
"500": "Съжаляваме, сървърът срещна проблем и не може да изпълни заявката ви в момента, моля опитайте по-късно",
"501": "Съжаляваме, сървърът не знае как да обработи тази заявка, моля проверете дали операцията е правилна",
"502": "Съжаляваме, сървърът изглежда е загубил посоката си и не може да предостави услуга в момента, моля опитайте по-късно",
"503": "Съжаляваме, сървърът не може да обработи заявката ви в момента, вероятно поради претоварване или поддръжка, моля опитайте по-късно",
"504": "Съжаляваме, сървърът не получи отговор от горестоящ сървър, моля опитайте по-късно",
"505": "Съжаляваме, сървърът не поддържа използваната версия на HTTP, моля обновете и опитайте отново",
"506": "Съжаляваме, възникна проблем с конфигурацията на сървъра, моля свържете се с администратора",
"507": "Съжаляваме, сървърът няма достатъчно място за съхранение, за да обработи заявката ви, моля опитайте по-късно",
"509": "Съжаляваме, пропускателната способност на сървъра е изчерпана, моля опитайте по-късно",
"510": "Съжаляваме, сървърът не поддържа разширените функции на заявката, моля свържете се с администратора",
"520": "Съжаляваме, сървърът срещна неочакван проблем и не може да изпълни заявката ви. Моля опитайте по-късно, работим по решаването на проблема.",
"522": "Съжаляваме, връзката със сървъра изтече и не получихме отговор навреме. Възможно е мрежата да е нестабилна или сървърът временно недостъпен. Моля опитайте по-късно, работим за възстановяване на услугата.",
"524": "Съжаляваме, сървърът изтече времето за изчакване на отговор, вероятно поради бавен отговор, моля опитайте по-късно",
"AgentRuntimeError": "Възникна грешка при изпълнението на Lobe AI Runtime, моля проверете информацията по-долу или опитайте отново",
"ConnectionCheckFailed": "Заявката върна празен отговор, моля проверете дали адресът на API проксито завършва с `/v1`",
"CreateMessageError": "Съжаляваме, съобщението не бе изпратено успешно, моля копирайте съдържанието и го изпратете отново. След презареждане на страницата това съобщение няма да се запази.",
"ExceededContextWindow": "Съдържанието на текущата заявка надвишава максималната дължина, която моделът може да обработи, моля намалете обема и опитайте отново",
"FreePlanLimit": "В момента използвате безплатен план и не можете да използвате тази функция, моля надградете до платен план, за да продължите",
"InsufficientQuota": "Съжаляваме, квотата на този ключ е изчерпана, моля проверете баланса на акаунта или увеличете квотата на ключа и опитайте отново",
"InvalidAccessCode": "Паролата е неправилна или празна, моля въведете правилната парола за достъп или добавете персонализиран API ключ",
"InvalidBedrockCredentials": "Проверката на Bedrock не е успешна, моля проверете AccessKeyId/SecretAccessKey и опитайте отново",
"InvalidClerkUser": "Съжаляваме, в момента не сте влезли в системата, моля влезте или регистрирайте акаунт, за да продължите",
"InvalidGithubToken": "Github PAT е неправилен или празен, моля проверете Github PAT и опитайте отново",
"InvalidOllamaArgs": "Конфигурацията на Ollama е неправилна, моля проверете настройките и опитайте отново",
"InvalidProviderAPIKey": "{{provider}} API ключът е неправилен или празен, моля проверете {{provider}} API ключа и опитайте отново",
"InvalidVertexCredentials": "Проверката на Vertex не е успешна, моля проверете удостоверителните данни и опитайте отново",
"LocationNotSupportError": "Съжаляваме, вашият регион не поддържа тази моделна услуга, вероятно поради регионални ограничения или неактивирана услуга. Моля, проверете дали вашият регион поддържа тази услуга или опитайте да превключите към друг регион и опитайте отново.",
"ModelNotFound": "Съжаляваме, не може да бъде намерен съответният модел, вероятно моделът не съществува или нямате достъп. Моля сменете API ключа или коригирайте правата за достъп и опитайте отново.",
"NoOpenAIAPIKey": "OpenAI API ключът е неправилен или празен, моля добавете персонализиран OpenAI API ключ",
"OllamaBizError": "Възникна грешка при заявка към Ollama услугата, моля проверете информацията по-долу или опитайте отново",
"OllamaServiceUnavailable": "Неуспешно свързване с Ollama услугата, моля проверете дали Ollama работи правилно и дали е конфигурирана правилно за кросдомейн достъп",
"PermissionDenied": "Съжаляваме, нямате права за достъп до тази услуга, моля проверете дали вашият ключ има необходимите права",
"PluginApiNotFound": "Съжаляваме, API-то не съществува в описанието на плъгина, моля проверете дали методът на заявката съвпада с API-то в плъгин описанието",
"PluginApiParamsError": "Съжаляваме, проверката на входните параметри за този плъгин не е успешна, моля проверете дали параметрите съвпадат с описанието на API-то",
"PluginFailToTransformArguments": "Съжаляваме, неуспешен анализ на параметрите за плъгина, моля опитайте да генерирате съобщението на асистента отново или използвайте AI модел с по-добри възможности за Tools Calling и опитайте пак",
"PluginGatewayError": "Съжаляваме, възникна грешка в шлюза на плъгина, моля проверете дали конфигурацията на шлюза е правилна",
"PluginManifestInvalid": "Съжаляваме, проверката на описанието на плъгина не е успешна, моля проверете дали форматът на описанието е валиден",
"PluginManifestNotFound": "Съжаляваме, сървърът не намери описанието на плъгина (manifest.json), моля проверете дали адресът на описанието е правилен",
"PluginMarketIndexInvalid": "Съжаляваме, проверката на индекса на плъгина не е успешна, моля проверете дали форматът на индексния файл е валиден",
"PluginMarketIndexNotFound": "Съжаляваме, сървърът не намери индексния файл на плъгина, моля проверете дали адресът на индекса е правилен",
"PluginMetaInvalid": "Съжаляваме, проверката на метаинформацията на плъгина не е успешна, моля проверете дали форматът на метаинформацията е валиден",
"PluginMetaNotFound": "Съжаляваме, плъгинът не е намерен в индекса, моля проверете конфигурацията на плъгина в индекса",
"PluginOpenApiInitError": "Съжаляваме, инициализацията на OpenAPI клиента не бе успешна, моля проверете конфигурацията на OpenAPI",
"PluginServerError": "Възникна грешка при заявка към сървъра на плъгина, моля проверете описанието на плъгина, конфигурацията или сървърната реализация според съобщението за грешка по-долу",
"PluginSettingsInvalid": "Този плъгин изисква правилна конфигурация, за да бъде използван, моля проверете дали настройките са коректни",
"ProviderBizError": "Възникна грешка при заявка към услугата {{provider}}, моля проверете информацията по-долу или опитайте отново",
"QuotaLimitReached": "Съжаляваме, текущата употреба на токени или брой заявки е достигнала квотата на този ключ, моля увеличете квотата или опитайте по-късно",
"StreamChunkError": "Грешка при анализ на блокове от съобщения в поточна заявка, моля проверете дали API интерфейсът отговаря на стандартите или се свържете с доставчика на API",
"SubscriptionKeyMismatch": "Съжаляваме, поради временна системна грешка текущата абонаментна употреба е невалидна, моля натиснете бутона по-долу за възстановяване на абонамента или се свържете с нас по имейл за поддръжка",
"SubscriptionPlanLimit": "Вашите абонаментни точки са изчерпани и не можете да използвате тази функция, моля надградете до по-висок план или конфигурирайте персонализиран модел API, за да продължите",
"SystemTimeNotMatchError": "Съжаляваме, системното ви време не съвпада с това на сървъра, моля проверете системното време и опитайте отново",
"UnknownChatFetchError": "Съжаляваме, възникна неизвестна грешка при заявката, моля проверете информацията по-долу или опитайте отново"
},
"sessionExpired": {
"desc": "За да защитим вашия акаунт, моля влезте отново",
"login": "Влезте сега",
"title": "Сесията е изтекла"
}
}
+173
View File
@@ -0,0 +1,173 @@
{
"ai21": {
"description": "AI21 Labs изгражда основни модели и системи за изкуствен интелект за предприятия, ускорявайки приложението на генеративния изкуствен интелект в производството."
},
"ai302": {
"description": "302.AI е платформа за AI приложения с плащане според нуждите, предлагаща най-пълния набор от AI API и онлайн AI приложения на пазара."
},
"ai360": {
"description": "360 AI е платформа за AI модели и услуги, разработена от компанията 360, предлагаща разнообразни усъвършенствани модели за обработка на естествен език, включително 360GPT2 Pro, 360GPT Pro, 360GPT Turbo и 360GPT Turbo Responsibility 8K. Тези модели съчетават голям брой параметри и мултимодални възможности, широко използвани в генериране на текст, семантично разбиране, диалогови системи и генериране на код. С гъвкава ценова политика 360 AI отговаря на разнообразните нужди на потребителите, поддържа интеграция за разработчици и стимулира иновациите и развитието на интелигентни приложения."
},
"aihubmix": {
"description": "AiHubMix предоставя достъп до множество AI модели чрез унифициран API интерфейс."
},
"anthropic": {
"description": "Anthropic е компания, фокусирана върху изследвания и разработка на изкуствен интелект, предлагаща серия от усъвършенствани езикови модели като Claude 3.5 Sonnet, Claude 3 Sonnet, Claude 3 Opus и Claude 3 Haiku. Тези модели постигат идеален баланс между интелигентност, скорост и разходи, подходящи за различни приложения от корпоративни натоварвания до бързи отговори. Claude 3.5 Sonnet, като най-нов модел, показва отлични резултати в множество оценки, като същевременно поддържа висока ефективност на разходите."
},
"azure": {
"description": "Azure предлага множество усъвършенствани AI модели, включително GPT-3.5 и най-новата серия GPT-4, поддържащи различни типове данни и сложни задачи, с ангажимент към сигурни, надеждни и устойчиви AI решения."
},
"azureai": {
"description": "Azure предлага множество усъвършенствани AI модели, включително GPT-3.5 и най-новата серия GPT-4, поддържащи различни типове данни и сложни задачи, с ангажимент към сигурни, надеждни и устойчиви AI решения."
},
"baichuan": {
"description": "Baichuan Intelligent е компания, специализирана в разработката на големи AI модели, чиито модели превъзхождат водещите чуждестранни модели в задачи на китайски език като енциклопедични знания, обработка на дълги текстове и творческо генериране. Baichuan Intelligent също така притежава водещи в индустрията мултимодални възможности и постига отлични резултати в множество авторитетни оценки. Моделите включват Baichuan 4, Baichuan 3 Turbo и Baichuan 3 Turbo 128k, оптимизирани за различни приложения и предлагат решения с висока ефективност на разходите."
},
"bedrock": {
"description": "Bedrock е услуга на Amazon AWS, фокусирана върху предоставянето на усъвършенствани AI езикови и визуални модели за предприятия. Семейството от модели включва серията Claude на Anthropic, серията Llama 3.1 на Meta и други, обхващащи от леки до високопроизводителни опции, поддържащи задачи като генериране на текст, диалог и обработка на изображения, подходящи за предприятия с различен мащаб и нужди."
},
"cloudflare": {
"description": "Изпълнявайте машинно обучение, задвижвано от безсървърни GPU модели, в глобалната мрежа на Cloudflare."
},
"cohere": {
"description": "Cohere предлага най-съвременни многоезични модели, усъвършенствани функции за търсене и AI работно пространство, специално създадено за съвременни предприятия — всичко интегрирано в една сигурна платформа."
},
"deepseek": {
"description": "DeepSeek е компания, специализирана в изследвания и приложения на изкуствен интелект, чиито най-нови модели DeepSeek-V3 превъзхождат отворените модели като Qwen2.5-72B и Llama-3.1-405B и се представят наравно с водещите затворени модели GPT-4o и Claude-3.5-Sonnet."
},
"fal": {
"description": "Платформа за генеративни медии, насочена към разработчици."
},
"fireworksai": {
"description": "Fireworks AI е водещ доставчик на усъвършенствани езикови модели, специализиран в извикване на функции и мултимодална обработка. Най-новият им модел Firefunction V2, базиран на Llama-3, е оптимизиран за извикване на функции, диалог и следване на инструкции. Визуалният езиков модел FireLLaVA-13B поддържа смесен вход от изображения и текст. Други забележителни модели включват серията Llama и Mixtral, които предлагат ефективна многоезична поддръжка за следване на инструкции и генериране."
},
"giteeai": {
"description": "Serverless API на Gitee AI предоставя готови за използване API услуги за големи модели за AI разработчици."
},
"github": {
"description": "С моделите на GitHub разработчиците могат да станат AI инженери и да изграждат с водещи в индустрията AI модели."
},
"google": {
"description": "Серията Gemini на Google е най-усъвършенстваният и универсален AI модел, разработен от Google DeepMind, специално проектиран за мултимодалност, поддържащ безпроблемно разбиране и обработка на текст, код, изображения, аудио и видео. Подходящ за различни среди от центрове за данни до мобилни устройства, значително повишава ефективността и приложимостта на AI моделите."
},
"groq": {
"description": "LPU изчислителният двигател на Groq постига изключителни резултати в най-новите независими тестове за големи езикови модели (LLM), преосмисляйки стандартите за AI решения с невероятна скорост и ефективност. Groq е символ на мигновена скорост на изчисление и показва отлична производителност при облачни внедрявания."
},
"higress": {
"description": "Higress е облачен API шлюз, създаден вътрешно в Alibaba за решаване на проблеми с Tengine reload, които вредят на дългосрочните връзки, както и за подобряване на балансирането на натоварването при gRPC/Dubbo."
},
"huggingface": {
"description": "HuggingFace Inference API предлага бърз и безплатен начин да изследвате хиляди модели за различни задачи. Независимо дали прототипирате ново приложение или експериментирате с машинно обучение, този API ви дава незабавен достъп до високопроизводителни модели в множество области."
},
"hunyuan": {
"description": "Голям езиков модел, разработен от Tencent, с мощни способности за създаване на съдържание на китайски, логическо разсъждение в сложни контексти и надеждно изпълнение на задачи."
},
"infiniai": {
"description": "Предоставя на разработчиците на приложения високопроизводителни, лесни за използване, сигурни и надеждни услуги с големи модели, покриващи целия процес от разработка до внедряване на модели като услуга."
},
"internlm": {
"description": "Отворена организация, посветена на изследвания и разработка на големи модели и инструменти за разработка. Предоставя ефективна и лесна за използване отворена платформа за всички AI разработчици, правейки най-съвременните големи модели и алгоритми достъпни."
},
"jina": {
"description": "Jina AI, основана през 2020 г., е водеща компания в областта на търсещия AI. Платформата им включва векторни модели, пренареждачи и малки езикови модели, които помагат на предприятията да изграждат надеждни и висококачествени генеративни AI и мултимодални търсещи приложения."
},
"lmstudio": {
"description": "LM Studio е настолно приложение за разработка и експериментиране с големи езикови модели (LLM) на вашия компютър."
},
"minimax": {
"description": "MiniMax е универсална компания за изкуствен интелект, основана през 2021 г., посветена на съвместното създаване на интелигентност с потребителите. MiniMax разработва собствени универсални големи модели с различни модалности, включително MoE текстов модел с трилиони параметри, големи модели за реч и изображения, и предлага приложения като Conch AI."
},
"mistral": {
"description": "Mistral предлага усъвършенствани универсални, професионални и изследователски модели, широко използвани в сложни разсъждения, многоезични задачи и генериране на код. Чрез интерфейс за извикване на функции потребителите могат да интегрират персонализирани функции за специфични приложения."
},
"modelscope": {
"description": "ModelScope е платформа за модели като услуга, пусната от Alibaba Cloud, предлагаща богати AI модели и услуги за извод."
},
"moonshot": {
"description": "Moonshot е отворена платформа, разработена от Beijing Moon's Dark Side Technology Co., Ltd., предлагаща множество модели за обработка на естествен език с широко приложение, включително, но не само, създаване на съдържание, академични изследвания, интелигентни препоръки и медицинска диагностика, поддържаща обработка на дълги текстове и сложни задачи за генериране."
},
"novita": {
"description": "Novita AI е платформа за API услуги, предлагаща множество големи езикови модели и AI генерация на изображения, гъвкава, надеждна и икономична. Поддържа най-новите отворени модели като Llama3 и Mistral и предоставя цялостни, удобни за потребителя и автоматично мащабируеми API решения за разработка на генеративни AI приложения, подходящи за бърз растеж на AI стартиращи компании."
},
"nvidia": {
"description": "NVIDIA NIM™ предоставя контейнери за самостоятелно хостване на GPU-ускорени микросервизи за извод, поддържащи внедряване на предварително обучени и персонализирани AI модели в облака, центрове за данни, RTX™ AI персонални компютри и работни станции."
},
"ollama": {
"description": "Ollama предлага модели, обхващащи генериране на код, математически изчисления, многоезична обработка и диалогови взаимодействия, поддържащи разнообразни нужди за корпоративно и локално внедряване."
},
"openai": {
"description": "OpenAI е водеща световна изследователска институция в областта на изкуствения интелект, чиито модели като серията GPT движат напредъка в обработката на естествен език. OpenAI се стреми да трансформира множество индустрии чрез иновативни и ефективни AI решения. Техните продукти се отличават с висока производителност и икономичност, широко използвани в изследвания, бизнес и иновации."
},
"openrouter": {
"description": "OpenRouter е платформа, предлагаща интерфейси към множество водещи големи модели, поддържащи OpenAI, Anthropic, LLaMA и други, подходяща за разнообразни нужди на разработка и приложения. Потребителите могат гъвкаво да избират оптимални модели и цени според своите изисквания, подобрявайки AI изживяването."
},
"perplexity": {
"description": "Perplexity е водещ доставчик на модели за генериране на диалог, предлагащ множество усъвършенствани Llama 3.1 модели, поддържащи онлайн и офлайн приложения, особено подходящи за сложни задачи в обработката на естествен език."
},
"ppio": {
"description": "PPIO предоставя стабилни и икономични API услуги за отворени модели, поддържащи пълната серия DeepSeek, Llama, Qwen и други водещи в индустрията големи модели."
},
"qiniu": {
"description": "Qiniu, като утвърден доставчик на облачни услуги, предлага икономични и стабилни услуги за реално време и пакетно AI извод, лесни за използване."
},
"qwen": {
"description": "Tongyi Qianwen е голям езиков модел, разработен от Alibaba Cloud, с мощни способности за разбиране и генериране на естествен език. Той може да отговаря на различни въпроси, да създава текстово съдържание, да изразява мнения и да пише код, като играе роля в множество области."
},
"sambanova": {
"description": "SambaNova Cloud позволява на разработчиците лесно да използват най-добрите отворени модели и да се възползват от най-бързата скорост на извод."
},
"search1api": {
"description": "Search1API предоставя достъп до DeepSeek серия модели, които могат да се свързват с интернет по желание, включително стандартни и бързи версии, поддържащи избор на модели с различни параметри."
},
"sensenova": {
"description": "SenseNova, базирана на мощната инфраструктура на SenseTime, предлага ефективни и лесни за използване пълноценни услуги с големи модели."
},
"siliconcloud": {
"description": "SiliconCloud е икономична GenAI облачна услуга, базирана на отлични отворени основни модели."
},
"spark": {
"description": "Големият модел Spark на iFlytek предоставя мощни AI възможности в множество области и езици, използвайки усъвършенствани технологии за обработка на естествен език, за да създаде иновативни приложения в интелигентен хардуер, умна медицина, интелигентни финанси и други вертикални сектори."
},
"stepfun": {
"description": "Големият модел Star of Classes притежава водещи в индустрията мултимодални и сложни разсъждаващи способности, поддържа разбиране на много дълги текстове и мощни функции за самостоятелно управление на търсещ двигател."
},
"taichu": {
"description": "Новото поколение мултимодален голям модел, разработен от Института по автоматизация на Китайската академия на науките и Института за изкуствен интелект в Ухан, поддържа многократни въпроси и отговори, създаване на текст, генериране на изображения, 3D разбиране, анализ на сигнали и други комплексни задачи, с по-силни когнитивни, разбиращи и творчески способности, предоставяйки ново интерактивно изживяване."
},
"tencentcloud": {
"description": "Атомната способност на Knowledge Engine (LLM Knowledge Engine Atomic Power) е цялостна способност за въпроси и отговори, разработена на базата на Knowledge Engine, насочена към предприятия и разработчици, предоставяйки гъвкави възможности за изграждане и разработка на модели и приложения. Можете да създадете персонализирани AI услуги чрез множество атомни способности, включително анализ на документи, разделяне, embedding и многократна пренаписване, за да персонализирате AI бизнес за вашето предприятие."
},
"togetherai": {
"description": "Together AI се стреми да постигне водещи резултати чрез иновативни AI модели, предоставяйки широки възможности за персонализация, включително бързо мащабиране и интуитивни процеси на внедряване, за да отговори на разнообразните нужди на предприятията."
},
"upstage": {
"description": "Upstage се фокусира върху разработването на AI модели за различни бизнес нужди, включително Solar LLM и Document AI, с цел постигане на изкуствен общ интелект (AGI). Създавайте лесни диалогови агенти чрез Chat API и поддържайте извикване на функции, превод, embedding и специфични за домейна приложения."
},
"v0": {
"description": "v0 е асистент за програмиране в двойка, който генерира код и потребителски интерфейс (UI) за вашите проекти само чрез описание на идеите с естествен език."
},
"vertexai": {
"description": "Серията Gemini на Google е най-усъвършенстваният и универсален AI модел, разработен от Google DeepMind, специално проектиран за мултимодалност, поддържащ безпроблемно разбиране и обработка на текст, код, изображения, аудио и видео. Подходящ за различни среди от центрове за данни до мобилни устройства, значително повишава ефективността и приложимостта на AI моделите."
},
"vllm": {
"description": "vLLM е бърза и лесна за използване библиотека за извод и обслужване на големи езикови модели (LLM)."
},
"volcengine": {
"description": "Платформа за разработка на услуги с големи модели, пусната от ByteDance, предлагаща богати функции, сигурност и конкурентни цени за извикване на модели, както и пълна функционалност за данни, фина настройка, извод и оценка, осигурявайки цялостна подкрепа за разработка и внедряване на AI приложения."
},
"wenxin": {
"description": "Корпоративна платформа за разработка и услуги на големи модели и AI родни приложения, предлагаща най-пълния и лесен за използване инструментариум за разработка на генеративни AI модели и приложения."
},
"xai": {
"description": "xAI е компания, посветена на изграждането на изкуствен интелект за ускоряване на човешките научни открития. Нашата мисия е да насърчим общото ни разбиране за Вселената."
},
"xinference": {
"description": "Xorbits Inference (Xinference) е отворена платформа за опростяване на изпълнението и интеграцията на различни AI модели. С Xinference можете да изпълнявате извод на всякакви отворени LLM, embedding и мултимодални модели в облак или локална среда и да създавате мощни AI приложения."
},
"zeroone": {
"description": "ZeroOne AllThings се стреми да води революцията на AI 2.0 с човекоцентричен подход, целейки да създаде огромна икономическа и социална стойност чрез големи езикови модели и да открие нови AI екосистеми и бизнес модели."
},
"zhipu": {
"description": "Zhipu AI предоставя отворена платформа за мултимодални и езикови модели, поддържаща широк спектър от AI приложения, включително обработка на текст, разбиране на изображения и помощ при програмиране."
}
}
+282
View File
@@ -0,0 +1,282 @@
{
"about": "Относно LobeHub",
"account": {
"group": "Акаунт",
"profile": {
"email": "Имейл",
"name": "Потребителско име",
"status": "Състояние на акаунта",
"unverified": "Непотвърден",
"verified": "Потвърден"
},
"signOut": {
"confirm": "Сигурни ли сте, че искате да излезете?",
"label": "Изход"
},
"switchAccount": {
"action": "Смяна на акаунт",
"confirm": "Сигурни ли сте, че искате да смените акаунта? Това ще ви изведе от текущия акаунт и ще трябва да влезете отново.",
"error": "Неуспешна смяна на акаунт. Моля, опитайте отново.",
"label": "Смяна на акаунт"
},
"title": "Настройки на акаунта"
},
"advanced": {
"group": "Разширени"
},
"aiProviders": {
"configuration": {
"apiKey": {
"description": "Моля, въведете API ключа за {{name}}",
"label": "API ключ",
"placeholder": "Въведете API ключа за {{name}}"
},
"proxyUrl": {
"desc": "Трябва да започва с http(s)://",
"invalid": "Моля, въведете валиден URL, започващ с http:// или https://",
"placeholder": "https://api.example.com/v1",
"title": "API прокси адрес"
},
"saving": "Запазване на конфигурацията...",
"title": "Конфигурация",
"updateFailedDesc": "Неуспешно запазване. Моля, опитайте отново.",
"updateFailedTitle": "Неуспешно запазване"
},
"detail": {
"loadFailed": "Неуспешно зареждане на конфигурацията на доставчика",
"loading": "Зареждане на конфигурацията на доставчика..."
},
"info": {
"builtIn": "Вграден доставчик",
"custom": "Потребителски доставчик"
},
"list": {
"disabled": "Деактивиран",
"emptySearch": "Няма намерени съвпадащи доставчици",
"enabled": "Активиран",
"loadFailed": "Неуспешно зареждане на списъка с доставчици"
},
"models": {
"allLoaded": "Всички модели са показани",
"copySuccess": "Успешно копирано",
"disableFailed": "Неуспешно деактивиране на модела",
"emptyNoSearch": "Няма намерени модели, опитайте да ги изтеглите от сървъра",
"emptyWithSearch": "Няма модели, отговарящи на търсенето",
"enableFailed": "Неуспешно активиране на модела",
"fetch": "Изтегляне на модели",
"fetchFailed": "Неуспешно изтегляне на модели. Моля, опитайте отново.",
"fetchSuccess": "Списъкът с модели е успешно изтеглен!",
"fetching": "Изтегляне...",
"loading": "Зареждане...",
"loadingMore": "Зареждане на още...",
"modelsAvailable": "Общо {{count}} налични модела",
"searchPlaceholder": "Търсене на модели...",
"title": "Модели"
},
"skeleton": {
"disabled": "Деактивиран",
"enabled": "Активиран"
}
},
"cache": {
"clear": {
"confirm": {
"action": "Изчистване на кеша",
"description": "Това ще премахне локално съхранените кеширани данни. При следващото отваряне на приложението съдържанието ще се зареди отново.",
"title": "Потвърждавате ли изчистването на кеша?"
},
"failure": "Неуспешно изчистване на кеша",
"success": "Кешът е изчистен"
},
"description": "Кешът ускорява стартирането. Можете да го изчистите, когато е необходимо да освободите място.",
"title": "Изчистване на кеша"
},
"changelog": "Дневник на промените",
"color": {
"neutral": {
"description": "Изберете неутралния тон на приложението",
"title": "Конфигурация на неутралния цвят"
},
"preview": "Преглед",
"previewMessages": {
"botGreat": "Радваме се, че ви харесва! Тази функция за преглед ви позволява да видите визуално темата преди да я приложите.",
"botHowToUse": "Можете да използвате селектора по-долу, за да промените основния и неутралния цвят. Прегледът ще се обновява в реално време.",
"userGreat": "Страхотно!",
"userHowToUse": "Как да използвам прегледа на темата?"
},
"primary": {
"description": "Изберете основния цвят на приложението",
"title": "Конфигурация на основния цвят"
},
"title": "Настройки на цветовете"
},
"developer": {
"auth": {
"accessToken": {
"expire": {
"success": "Достъпният токен е изтекъл незабавно",
"title": "Изтичане на достъпния токен"
},
"invalidate": {
"success": "Невалиден достъпен токен е записан",
"title": "Невалиден достъпен токен"
}
},
"clearAuthData": {
"success": "Данните за удостоверяване са изчистени",
"title": "Изчистване на удостоверителни данни"
},
"error": {
"noToken": "Няма наличен токен"
},
"group": "Конфигурация на удостоверяване",
"refreshToken": {
"expire": {
"success": "Токенът за обновяване е изтекъл незабавно",
"title": "Изтичане на токена за обновяване"
},
"invalidate": {
"success": "Невалиден токен за обновяване е записан",
"title": "Невалиден токен за обновяване"
}
}
},
"failurePrefix": "Неуспешна операция: ",
"mode": {
"already": "Вече сте в режим за разработчици",
"enabled": "Режимът за разработчици е активиран",
"remaining": "Остава още {{count}} натискания, за да активирате режима за разработчици",
"title": "Режим за разработчици"
},
"selfHostedEntry": {
"confirmAction": "Отидете на страницата за конфигурация",
"confirmDescription": "След активиране ще се отвори страницата за конфигурация на самостоятелно хостване. Искате ли да излезете от текущия акаунт и да продължите?",
"confirmResetAction": "Нулиране и вход",
"confirmResetDescription": "Изключването на режима за самостоятелно хостване ще възстанови адреса на сървъра към официалния и ще излезете от акаунта. Искате ли да продължите?",
"confirmResetTitle": "Изключване на режима за самостоятелно хостване",
"confirmTitle": "Активиране на вход за самостоятелно хостване",
"description": "Контролира дали на страницата за вход да се показва бутон за самостоятелно хостван екземпляр",
"title": "Активиране на режим за самостоятелно хостване"
},
"server": {
"confirmDescription": "След промяна на адреса на сървъра ще бъдете изведени от акаунта и ще трябва да влезете отново. Искате ли да продължите?",
"confirmTitle": "Потвърждение за смяна на сървъра",
"current": "Текущ адрес",
"description": "След конфигуриране всички заявки ще използват този адрес. Оставете празно, за да се върнете към официалния сървър.",
"group": "Конфигурация на сървъра",
"hint": "Трябва да започва с http:// или https://. Може да се наложи повторно влизане.",
"invalid": "Моля, въведете валиден адрес, започващ с http:// или https://",
"notice": "Персонализираният сървър ще замени стандартния API адрес. Уверете се, че е съвместим с LobeChat API. Може да се наложи повторно влизане или рестартиране на приложението.",
"noticeTitle": "Внимание преди смяна",
"placeholder": "https://your-server.example.com",
"reset": "Възстановяване по подразбиране",
"resetSuccess": "Официалният адрес на сървъра е възстановен",
"save": "Запази",
"title": "Самостоятелно хостван екземпляр",
"updated": "Персонализираният адрес на сървъра е актуализиран"
},
"title": "Опции за разработчици"
},
"feedback": {
"email": {
"body": {
"description": "Описание на проблема:",
"footer": "Изпратено от моето {{device}}",
"frequency": "Честота на възникване:",
"screenshots": "Свързани екранни снимки:",
"template": "Моля, опишете подробно проблема, за да можем да ви помогнем по-добре."
},
"subject": "Обратна връзка - LobeChat - {{version}}"
},
"error": "Неуспешно отваряне на имейл клиента. Моля, опитайте отново по-късно.",
"saved": "Обратната връзка е запазена в чернови",
"sent": "Имейлът беше изпратен. Благодарим ви за обратната връзка!",
"title": "Обратна връзка",
"unavailable": "Функцията за имейл не е налична. Моля, проверете дали устройството е конфигурирано с имейл акаунт или поддържа имейл функции."
},
"fontSize": {
"preview": {
"botAnswer": "**Как да променя размера на шрифта?**\n\nИзползвайте плъзгача по-долу, за да регулирате размера на шрифта: наляво за по-малък, надясно за по-голям. Прегледът ще се обновява в реално време.\n\nСъвет: Изберете \"Стандартен\", за да възстановите по подразбиране.",
"botGreat": "Радваме се, че ви харесва! Тази функция за преглед ви позволява да видите как ще изглежда текстът в чата преди да приложите настройката.",
"userGreat": "Страхотно!",
"userQuestion": "Искам да увелича шрифта в чата. Как да го направя?"
},
"standard": "Стандартен",
"text": "Забележка: Тази настройка влияе само на размера на шрифта в съобщенията",
"title": "Размер на шрифта"
},
"general": {
"group": "Общи"
},
"help": "Помощ",
"info": {
"group": "Информация"
},
"locale": {
"auto": {
"description": "Следване на езиковите настройки на системата",
"title": "Следване на системата"
},
"title": "Езикови настройки"
},
"openai": "OpenAI настройки",
"openaiSettings": {
"apiKey": "API ключ",
"apiKeyPlaceholder": "Моля, въведете вашия OpenAI API ключ",
"checkApiKey": "Моля, проверете дали API ключът е правилен",
"checkProxyAddress": "Неуспешна връзка със сървъра. Моля, проверете прокси адреса",
"connectionSuccess": "Успешна връзка. API ключът и прокси адресът са правилни",
"connectivityHint": "След тестване на свързаността ще се провери дали API ключът и прокси адресът са правилно въведени",
"pleaseEnterApiKey": "Моля, въведете API ключ",
"proxyAddress": "API прокси адрес",
"proxyPlaceholder": "Трябва да съдържа http(s)://",
"testConnectivity": "Тест на свързаността",
"validationFailed": "Проверката не бе успешна",
"validationSuccess": "Проверката е успешна"
},
"providerModels": {
"config": {
"aesGcm": "Вашият ключ и прокси адрес ще бъдат криптирани с <1>AES-GCM</1> алгоритъм",
"checker": {
"button": "Тест на връзката",
"desc": "Проверете дали API ключът и прокси адресът са правилно въведени",
"pass": "Проверката е успешна",
"selectModel": "Изберете модел за тестване на връзката",
"title": "Проверка на свързаността"
}
}
},
"providers": "AI доставчици",
"providersDetail": {
"tabs": {
"configuration": "Конфигурация",
"models": "Модели"
}
},
"providersSearchPlaceholder": "Търсене на доставчици по ключова дума...",
"support": "Имейл поддръжка",
"themeMode": {
"auto": "Следване на системата",
"dark": "Тъмен режим",
"light": "Светъл режим",
"title": "Режим на тема"
},
"title": "Настройки",
"update": {
"check": {
"applyAction": "Рестартиране сега",
"applyDescription": "Необходимо е рестартиране, за да се приложи последната актуализация. Искате ли да рестартирате сега?",
"applyError": "Неуспешно прилагане на актуализацията. Моля, опитайте отново по-късно.",
"applyTitle": "Прилагане на актуализация",
"applying": "Рестартиране за прилагане на актуализацията...",
"checking": "Проверка за актуализации...",
"downloaded": "Актуализацията е изтеглена",
"downloading": "Открита е нова версия. Изтегляне на актуализацията...",
"error": "Неуспешна проверка за актуализации. Моля, опитайте отново по-късно.",
"none": "Вече използвате последната версия",
"title": "Проверка за актуализации",
"unavailable": "Текущата версия не поддържа проверка за актуализации. Моля, използвайте официалната версия."
}
},
"version": "Текуща версия"
}
+32
View File
@@ -0,0 +1,32 @@
{
"localSystem": {
"apiName": {
"listLocalFiles": "Преглед на списъка с файлове",
"moveLocalFiles": "Преместване на файлове",
"readLocalFile": "Прочитане на съдържанието на файл",
"renameLocalFile": "Преименуване",
"searchLocalFiles": "Търсене на файлове",
"writeLocalFile": "Записване на файл"
},
"title": "Локална система"
},
"mobileNotSupported": "Този инструмент не се поддържа на мобилни устройства. Моля, използвайте настолен компютър, за да видите подробностите.",
"search": {
"apiName": {
"crawlMultiPages": "Прочитане на съдържание от няколко страници",
"crawlSinglePage": "Прочитане на съдържание от страница",
"search": "Търсене в страница"
},
"crawPages": {
"crawling": "Обхождане...",
"meta": {
"crawler": "Обхождащ бот",
"words": "Брой думи"
}
},
"emptyResult": "Няма намерени резултати",
"title": "Търсене в мрежата"
},
"title": "Извикване на инструменти",
"unknown": "Неизвестен инструмент"
}
+48
View File
@@ -0,0 +1,48 @@
{
"actions": {
"confirmRemoveAll": "Всички теми ще бъдат изтрити и няма да могат да бъдат възстановени. Моля, действайте внимателно.",
"confirmRemoveUnstarred": "Нестартираните теми ще бъдат изтрити и няма да могат да бъдат възстановени. Моля, действайте внимателно.",
"favorite": "Добавяне в любими",
"removeAll": "Изтрий всички теми",
"removeUnstarred": "Изтрий нестартираните теми",
"unfavorite": "Премахване от любими"
},
"confirmRemoveTopicItemAlert": "Темата ще бъде изтрита и няма да може да бъде възстановена. Моля, потвърдете действието си.",
"defaultTitle": "По подразбиране тема",
"empty": "Няма теми",
"favorite": "Любими",
"groupTitle": {
"byTime": {
"favorite": "Любими",
"month": "Този месец",
"today": "Днес",
"week": "Тази седмица",
"yesterday": "Вчера"
}
},
"guide": {
"desc": "Кликнете върху бутона вляво за изпращане, за да запазите текущия разговор като историческа тема и да започнете нов разговор",
"title": "Списък с теми"
},
"loading": "Зареждане...",
"newTopic": "Нова тема",
"rename": {
"action": "Преименуване",
"done": "Готово",
"emptyTitle": "Името на темата не може да бъде празно",
"error": "Неуспешно преименуване",
"placeholder": "Въведете име на тема",
"success": "Успешно преименуване",
"title": "Преименувай тема",
"tooLong": "Името на темата е твърде дълго"
},
"search": {
"emptyResult": "Няма намерени съвпадащи теми",
"placeholder": "Търсене на теми...",
"recentSearches": "Скорошни търсения",
"title": "Търсене на теми"
},
"searchPlaceholder": "Търсене на тема...",
"temp": "Временен",
"title": "Тема"
}
+49
View File
@@ -0,0 +1,49 @@
{
"guide": {
"agents": {
"replaceBtn": "Смени група",
"title": "Препоръки за нови асистенти:"
},
"defaultMessage": "Аз съм вашият личен интелигентен асистент {{appName}}, с какво мога да ви помогна сега?<br />Ако искате по-професионален или персонализиран асистент, можете да кликнете <plus /> за да създадете персонализиран асистент",
"defaultMessageWithoutCreate": "Аз съм вашият личен интелигентен асистент {{appName}}, с какво мога да ви помогна сега?",
"qa": {
"q01": "Какво е LobeHub?",
"q02": "Какво е {{appName}}?",
"q03": "Има ли {{appName}} поддръжка от общността?",
"q04": "Какви функции поддържа {{appName}}?",
"q05": "Как се инсталира и използва {{appName}}?",
"q06": "Каква е ценовата политика на {{appName}}?",
"q07": "Безплатен ли е {{appName}}?",
"q08": "Има ли версия с облачна услуга?",
"q09": "Поддържа ли локални езикови модели?",
"q10": "Поддържа ли разпознаване и генериране на изображения?",
"q11": "Поддържа ли синтез и разпознаване на реч?",
"q12": "Поддържа ли система с плъгини?",
"q13": "Има ли собствен пазар за получаване на GPT-та?",
"q14": "Поддържа ли множество доставчици на AI услуги?",
"q15": "Какво да направя, ако имам проблеми при използване?"
},
"questions": {
"moreBtn": "Научете повече",
"title": "Всички питат:"
},
"topics": {
"title": "Последни теми:"
},
"welcome": {
"afternoon": "Добър следобед",
"morning": "Добро утро",
"night": "Добър вечер",
"noon": "Добър ден"
}
},
"header": "Добре дошли",
"pickAgent": "Или изберете от следните шаблони за асистенти",
"skip": "Пропусни създаването",
"slogan": {
"desc1": "Активирайте мозъчния клъстер, вдъхновете мисловния пламък. Вашият интелигентен асистент винаги е с вас.",
"desc2": "Създайте първия си асистент, нека започнем~",
"title": "Дайте си по-умен мозък"
},
"title": "Добре дошли"
}
+32
View File
@@ -0,0 +1,32 @@
{
"login": {
"button": "Bei {{appName}} anmelden",
"cancel": "Abbrechen",
"loginWithLobeHub": "Mit dem {{appName}}-Konto anmelden",
"privacyPolicy": "Datenschutzrichtlinie",
"processing": "Anmeldung läuft, bitte warten...",
"securityNote": "Durch die Anmeldung stimmen Sie unseren",
"selfHostedButton": "Eigenen Server verwenden",
"selfHostedContinue": "Fortfahren",
"selfHostedDescription": "Verbinde dich mit deinem selbst gehosteten LobeChat-Server.",
"selfHostedHint": "Wir merken uns diese Serveradresse, bis du in den Einstellungen wieder zur offiziellen Instanz wechselst.",
"selfHostedInvalid": "Bitte gib eine gültige HTTP- oder HTTPS-Adresse ein.",
"selfHostedPlaceholder": "https://deine-lobechat-instanz.de",
"selfHostedRequired": "Bitte gib die Serveradresse ein.",
"selfHostedTitle": "Gib die Adresse des selbst gehosteten Servers ein",
"subtitle": "Willkommen zurück! Bitte melden Sie sich an, um fortzufahren",
"usePolicy": "Nutzungsbedingungen"
},
"logout": {
"button": "Abmelden",
"confirm": {
"cancel": "Abbrechen",
"message": "Möchten Sie sich wirklich abmelden?",
"ok": "OK",
"title": "Abmeldung bestätigen"
}
},
"profile": {
"verified": "Verifiziert"
}
}
+81
View File
@@ -0,0 +1,81 @@
{
"agentDefaultMessage": "Hallo, ich bin **{{name}}**. Du kannst sofort mit mir chatten oder unter [Assistenteneinstellungen]({{url}}) meine Informationen vervollständigen.",
"agentDefaultMessageWithSystemRole": "Hallo, ich bin **{{name}}**, {{systemRole}}. Lass uns das Gespräch beginnen!",
"agentDefaultMessageWithoutEdit": "Hallo, ich bin **{{name}}**. Lass uns das Gespräch beginnen!",
"agentList": "Assistentenliste",
"agentRoleEdit": {
"cancel": "Abbrechen",
"confirm": "Bestätigen",
"edit": "Bearbeiten",
"editButton": "Rollen-Einstellungen bearbeiten",
"placeholder": "Bitte gib den Rollen-Prompt ein",
"roleSetting": "Rollen-Einstellung",
"title": "Rollen-Einstellung"
},
"confirmDelete": "Löschen bestätigen",
"confirmRemoveSessionItemAlert": "Dieser Assistent wird gelöscht und kann nicht wiederhergestellt werden. Bitte bestätige deine Aktion.",
"copyFailed": "Kopieren fehlgeschlagen",
"defaultAgent": "Benutzerdefinierter Assistent",
"defaultList": "Standardliste",
"deleteMessageConfirm": "Möchten Sie diese Nachricht wirklich löschen?",
"history": "Chatverlauf",
"inbox": {
"desc": "Aktiviere das Gehirnnetzwerk und entfalte kreative Gedanken. Dein intelligenter Assistent ist hier, um mit dir über alles zu sprechen.",
"title": "Einfach plaudern"
},
"messageCopied": "Nachricht kopiert",
"messageEdit": {
"placeholder": "Bitte Nachrichtentext eingeben",
"title": "Nachricht bearbeiten"
},
"newAgent": "Neuer Assistent",
"newChat": "Neues Gespräch",
"pin": "Anheften",
"pinOff": "Anheften aufheben",
"placeholder": "Gib deine Nachricht ein...",
"reasoning": {
"thinking": "Tiefes Nachdenken...",
"thought": "Tief nachgedacht (Dauer: {{duration}} Sekunden)",
"thoughtWithoutDuration": "Tief nachgedacht"
},
"regenerateFailed": "Erneutes Generieren fehlgeschlagen, bitte versuche es später erneut",
"send": "Senden",
"session": {
"createFirst": "Erstelle deine erste Chat-Sitzung",
"empty": "Keine Sitzungen vorhanden",
"search": {
"discoverAssistants": "Marktplatz-Assistenten",
"emptyResult": "Keine passenden Assistenten gefunden",
"myAssistants": "Meine Assistenten",
"placeholder": "Finde deinen Lieblingsassistenten...",
"recentSearches": "Kürzliche Suchanfragen",
"title": "Suche"
},
"title": "Einfach plaudern"
},
"sessionGroup": {
"config": "Gruppenverwaltung",
"confirmRemoveGroupAlert": "Diese Gruppe wird gelöscht. Die darin enthaltenen Assistenten werden in die Standardliste verschoben. Bitte bestätigen Sie Ihre Aktion.",
"createGroup": "Gruppe erstellen",
"createSuccess": "Gruppe erfolgreich erstellt",
"emptyGroup": "Keine Gruppen vorhanden",
"inputPlaceholder": "Bitte Gruppennamen eingeben",
"moveGroup": "In Gruppe verschieben",
"moveSuccess": "Erfolgreich verschoben",
"newGroup": "Neue Gruppe",
"removeSuccess": "Erfolgreich gelöscht",
"rename": "Umbenennen",
"renameSuccess": "Erfolgreich umbenannt",
"tooLong": "Der Gruppenname muss zwischen 1 und 20 Zeichen lang sein"
},
"setting": {
"avatar": "Avatar",
"description": "Beschreibung",
"done": "Fertig",
"name": "Name",
"title": "Konversationseinstellungen"
},
"share": "Teilen",
"stop": "Stopp",
"thinking": "Denke nach..."
}
+50
View File
@@ -0,0 +1,50 @@
{
"actions": {
"add": "Hinzufügen",
"cancel": "Abbrechen",
"clear": "Löschen",
"confirm": "Bestätigen",
"continue": "Fortsetzen",
"copy": "Kopieren",
"delete": "Löschen",
"edit": "Bearbeiten",
"more": "Mehr",
"notNow": "Nicht jetzt",
"regenerate": "Erneut generieren",
"retry": "Erneut versuchen",
"save": "Speichern",
"saveImage": "Bild speichern"
},
"and": "und",
"assistant": {
"fetchError": "Fehler beim Abrufen der Assistentenliste, bitte versuchen Sie es später erneut",
"noData": "Keine Assistentendaten vorhanden",
"noMatch": "Kein passender Assistent gefunden",
"recentSearches": "Kürzliche Suchen",
"search": "Assistent suchen...",
"searchNoResult": "Kein passender Assistent gefunden",
"searchPlaceholder": "Bitte Suchbegriff eingeben"
},
"defaultSession": "Benutzerdefinierter Assistent",
"image": {
"permissionDenied": "Zugriff auf das Album erforderlich, um das Bild zu speichern",
"permissionRequest": "Bitte erlauben Sie den Zugriff auf das Album in den Einstellungen",
"saveFailed": "Speichern fehlgeschlagen, bitte erneut versuchen",
"saveSuccess": "Bild wurde im Album gespeichert"
},
"navigation": {
"goToHomeScreen": "Zur Startseite zurückkehren"
},
"or": "oder",
"search": {
"placeholder": "Suchen"
},
"status": {
"error": "Fehler",
"info": "Information",
"loading": "Wird geladen...",
"networkRetryTip": "Bitte überprüfen Sie Ihre Netzwerkverbindung oder versuchen Sie es erneut",
"success": "Erfolg",
"warning": "Warnung"
}
}
+14
View File
@@ -0,0 +1,14 @@
{
"Highlighter": {
"cancel": "Abbrechen",
"selectLanguage": "Sprache auswählen"
},
"ModelSwitchPanel": {
"chooseModel": "Modell auswählen",
"emptyModel": "Keine aktivierten Modelle, bitte aktivieren Sie welche in den Einstellungen",
"emptyProvider": "Keine aktivierten Anbieter, bitte aktivieren Sie welche in den Einstellungen",
"goToSettings": "Zu den Einstellungen",
"provider": "Anbieter",
"title": "Modell"
}
}
+35
View File
@@ -0,0 +1,35 @@
{
"assistant": {
"detail": {
"addAndChat": "Assistent hinzufügen und chatten",
"addFailed": "Assistent hinzufügen fehlgeschlagen",
"addFailedMessage": "Das Hinzufügen des Assistenten ist fehlgeschlagen, bitte versuchen Sie es später erneut",
"assistantSettings": "Assistenteneinstellungen",
"loadFailed": "Fehler beim Laden der Assistentendetails, bitte versuchen Sie es später erneut",
"notFoundIdentifier": "Assistentenkennung nicht gefunden",
"share": "Teilen",
"shareFailed": "Teilen fehlgeschlagen",
"title": "Assistent Details"
}
},
"category": {
"assistant": {
"academic": "Akademisch",
"all": "Alle",
"career": "Beruf",
"copywriting": "Textgestaltung",
"design": "Design",
"education": "Bildung",
"emotions": "Emotionen",
"entertainment": "Unterhaltung",
"games": "Spiele",
"general": "Allgemein",
"life": "Leben",
"marketing": "Marketing",
"office": "Büro",
"programming": "Programmierung",
"translation": "Übersetzung"
}
},
"title": "Entdecken"
}
+120
View File
@@ -0,0 +1,120 @@
{
"error": {
"title": "Fehler"
},
"http": {
"forbidden": "Zugriff verweigert",
"networkError": "Netzwerkfehler",
"notFound": "Nicht gefunden",
"serverError": "Serverfehler",
"timeout": "Anfragezeitüberschreitung",
"unauthorized": "Nicht autorisiert"
},
"login": {
"accessDenied": "Entschuldigung, die Anmeldung wurde abgelehnt. Bitte versuchen Sie es später erneut.",
"cancelled": "Sie haben die Anmeldung abgebrochen.",
"invalidGrant": "Entschuldigung, Ihre Sitzung ist abgelaufen. Bitte versuchen Sie es später erneut.",
"invalidIdToken": "Entschuldigung, wir können Ihre Kontoinformationen derzeit nicht abrufen. Bitte versuchen Sie es später erneut.",
"invalidRequest": "Entschuldigung, es gab ein Problem mit Ihrer Anmeldeanfrage. Bitte versuchen Sie es später erneut.",
"invalidState": "Entschuldigung, die Anmeldeüberprüfung ist fehlgeschlagen. Bitte versuchen Sie es später erneut.",
"missingCodeOrState": "Entschuldigung, erforderliche Anmeldeinformationen fehlen. Bitte versuchen Sie es später erneut.",
"missingPkce": "Entschuldigung, Anmeldeprüfinformationen fehlen. Bitte versuchen Sie es später erneut.",
"networkError": "Entschuldigung, während der Anmeldung gab es ein Netzwerkproblem. Bitte überprüfen Sie Ihre Verbindung und versuchen Sie es erneut.",
"noIdToken": "Entschuldigung, Anmeldeinformationen konnten nicht abgerufen werden. Bitte versuchen Sie es später erneut.",
"serverError": "Entschuldigung, der Anmeldedienst hat einen Fehler. Bitte versuchen Sie es später erneut.",
"temporarilyUnavailable": "Entschuldigung, der Anmeldedienst ist vorübergehend nicht verfügbar. Bitte versuchen Sie es später erneut.",
"tokenEndpointNonJson": "Entschuldigung, der Anmeldedienst hat eine unerwartete Antwort zurückgegeben. Bitte versuchen Sie es später erneut.",
"tokenExchangeFailed": "Entschuldigung, es gab ein Problem bei der Anmeldung. Bitte versuchen Sie es später erneut.",
"unknown": "Entschuldigung, die Anmeldung ist fehlgeschlagen. Bitte versuchen Sie es später erneut.",
"unsupportedResponseType": "Entschuldigung, diese Anmeldemethode wird derzeit nicht unterstützt. Bitte versuchen Sie es später erneut."
},
"page": {
"notFoundMessage": "Diese Seite existiert nicht.",
"notFoundTitle": "Hoppla!"
},
"response": {
"400": "Entschuldigung, der Server versteht Ihre Anfrage nicht. Bitte überprüfen Sie Ihre Anfrageparameter.",
"401": "Entschuldigung, der Server hat Ihre Anfrage abgelehnt. Möglicherweise fehlen Ihnen die erforderlichen Berechtigungen oder eine gültige Authentifizierung.",
"403": "Entschuldigung, der Server hat Ihre Anfrage abgelehnt. Sie haben keine Berechtigung, auf diesen Inhalt zuzugreifen.",
"404": "Entschuldigung, die angeforderte Seite oder Ressource wurde nicht gefunden. Bitte überprüfen Sie die URL.",
"405": "Entschuldigung, der Server unterstützt die verwendete Anfragemethode nicht. Bitte überprüfen Sie Ihre Methode.",
"406": "Entschuldigung, der Server kann die Anfrage basierend auf den angeforderten Inhaltseigenschaften nicht erfüllen.",
"407": "Entschuldigung, Sie müssen sich über einen Proxy authentifizieren, um fortzufahren.",
"408": "Entschuldigung, der Server hat zu lange auf die Anfrage gewartet. Bitte überprüfen Sie Ihre Netzwerkverbindung und versuchen Sie es erneut.",
"409": "Entschuldigung, die Anfrage kann aufgrund eines Konflikts nicht verarbeitet werden. Möglicherweise ist der Ressourcenstatus nicht kompatibel.",
"410": "Entschuldigung, die angeforderte Ressource wurde dauerhaft entfernt und ist nicht mehr verfügbar.",
"411": "Entschuldigung, der Server kann Anfragen ohne gültige Inhaltslänge nicht verarbeiten.",
"412": "Entschuldigung, Ihre Anfrage erfüllt nicht die vom Server geforderten Bedingungen und kann nicht abgeschlossen werden.",
"413": "Entschuldigung, Ihre Anfrage ist zu umfangreich und kann vom Server nicht verarbeitet werden.",
"414": "Entschuldigung, die URI Ihrer Anfrage ist zu lang und kann vom Server nicht verarbeitet werden.",
"415": "Entschuldigung, der Server kann das angegebene Medienformat der Anfrage nicht verarbeiten.",
"416": "Entschuldigung, der Server kann den angeforderten Bereich nicht erfüllen.",
"417": "Entschuldigung, der Server kann Ihre Erwartungen nicht erfüllen.",
"422": "Entschuldigung, die Anfrage ist syntaktisch korrekt, enthält jedoch semantische Fehler und kann nicht beantwortet werden.",
"423": "Entschuldigung, die angeforderte Ressource ist gesperrt.",
"424": "Entschuldigung, die aktuelle Anfrage kann aufgrund eines vorherigen Fehlers nicht abgeschlossen werden.",
"426": "Entschuldigung, der Server verlangt ein Upgrade Ihres Clients auf eine höhere Protokollversion.",
"428": "Entschuldigung, der Server verlangt eine Vorbedingung. Ihre Anfrage muss die korrekten Bedingungskopfzeilen enthalten.",
"429": "Entschuldigung, Sie haben zu viele Anfragen gesendet. Der Server ist überlastet. Bitte versuchen Sie es später erneut.",
"431": "Entschuldigung, die Kopfzeilen Ihrer Anfrage sind zu groß und können vom Server nicht verarbeitet werden.",
"451": "Entschuldigung, aus rechtlichen Gründen verweigert der Server den Zugriff auf diese Ressource.",
"499": "Entschuldigung, Ihre Anfrage wurde unerwartet unterbrochen, möglicherweise durch Abbruch oder instabile Netzwerkverbindung. Bitte überprüfen Sie Ihre Verbindung und versuchen Sie es erneut.",
"500": "Entschuldigung, der Server hat ein Problem und kann Ihre Anfrage derzeit nicht bearbeiten. Bitte versuchen Sie es später erneut.",
"501": "Entschuldigung, der Server weiß nicht, wie er diese Anfrage verarbeiten soll. Bitte überprüfen Sie Ihre Aktion.",
"502": "Entschuldigung, der Server ist vorübergehend nicht erreichbar. Bitte versuchen Sie es später erneut.",
"503": "Entschuldigung, der Server kann Ihre Anfrage derzeit nicht bearbeiten, möglicherweise wegen Überlastung oder Wartung. Bitte versuchen Sie es später erneut.",
"504": "Entschuldigung, der Server hat keine Antwort vom Upstream-Server erhalten. Bitte versuchen Sie es später erneut.",
"505": "Entschuldigung, der Server unterstützt die von Ihnen verwendete HTTP-Version nicht. Bitte aktualisieren Sie Ihren Client.",
"506": "Entschuldigung, es gibt ein Serverkonfigurationsproblem. Bitte kontaktieren Sie den Administrator.",
"507": "Entschuldigung, der Serverspeicher ist voll und kann Ihre Anfrage nicht verarbeiten. Bitte versuchen Sie es später erneut.",
"509": "Entschuldigung, die Serverbandbreite ist erschöpft. Bitte versuchen Sie es später erneut.",
"510": "Entschuldigung, der Server unterstützt die angeforderte Erweiterung nicht. Bitte kontaktieren Sie den Administrator.",
"520": "Entschuldigung, der Server hat ein unerwartetes Problem festgestellt und kann Ihre Anfrage nicht abschließen. Wir arbeiten an einer Lösung. Bitte versuchen Sie es später erneut.",
"522": "Entschuldigung, die Serververbindung ist zeitlich überschritten und konnte Ihre Anfrage nicht rechtzeitig beantworten. Möglicherweise ist das Netzwerk instabil oder der Server vorübergehend nicht erreichbar. Bitte versuchen Sie es später erneut.",
"524": "Entschuldigung, der Server hat beim Warten auf eine Antwort eine Zeitüberschreitung festgestellt. Bitte versuchen Sie es später erneut.",
"AgentRuntimeError": "Lobe AI Runtime Fehler. Bitte prüfen Sie die folgenden Informationen oder versuchen Sie es erneut.",
"ConnectionCheckFailed": "Leere Antwort erhalten. Bitte prüfen Sie, ob die API-Proxy-Adresse mit '/v1' endet.",
"CreateMessageError": "Entschuldigung, die Nachricht konnte nicht gesendet werden. Bitte kopieren Sie den Inhalt und senden Sie ihn erneut. Nach dem Aktualisieren der Seite wird diese Nachricht nicht gespeichert.",
"ExceededContextWindow": "Die Anfrage überschreitet die vom Modell verarbeitbare Länge. Bitte reduzieren Sie den Inhalt und versuchen Sie es erneut.",
"FreePlanLimit": "Sie sind derzeit ein kostenloser Nutzer und können diese Funktion nicht verwenden. Bitte wechseln Sie zu einem kostenpflichtigen Plan.",
"InsufficientQuota": "Entschuldigung, das Kontingent für diesen Schlüssel ist erschöpft. Bitte prüfen Sie Ihr Guthaben oder erhöhen Sie das Kontingent und versuchen Sie es erneut.",
"InvalidAccessCode": "Das Passwort ist falsch oder leer. Bitte geben Sie das korrekte Zugangspasswort ein oder fügen Sie einen benutzerdefinierten API-Schlüssel hinzu.",
"InvalidBedrockCredentials": "Bedrock-Authentifizierung fehlgeschlagen. Bitte überprüfen Sie AccessKeyId/SecretAccessKey und versuchen Sie es erneut.",
"InvalidClerkUser": "Entschuldigung, Sie sind derzeit nicht angemeldet. Bitte melden Sie sich an oder registrieren Sie sich, um fortzufahren.",
"InvalidGithubToken": "Github PAT ist falsch oder leer. Bitte überprüfen Sie den Github PAT und versuchen Sie es erneut.",
"InvalidOllamaArgs": "Ollama-Konfiguration ist fehlerhaft. Bitte überprüfen Sie die Konfiguration und versuchen Sie es erneut.",
"InvalidProviderAPIKey": "{{provider}} API-Schlüssel ist falsch oder leer. Bitte überprüfen Sie den {{provider}} API-Schlüssel und versuchen Sie es erneut.",
"InvalidVertexCredentials": "Vertex-Authentifizierung fehlgeschlagen. Bitte überprüfen Sie die Anmeldeinformationen und versuchen Sie es erneut.",
"LocationNotSupportError": "Entschuldigung, Ihr Standort unterstützt diesen Modellservice nicht, möglicherweise aufgrund von regionalen Beschränkungen oder fehlender Freischaltung. Bitte prüfen Sie, ob Ihr Gebiet den Service unterstützt, oder wechseln Sie die Region und versuchen Sie es erneut.",
"ModelNotFound": "Entschuldigung, das angeforderte Modell ist nicht verfügbar oder Sie haben keine Zugriffsrechte. Bitte wechseln Sie den API-Schlüssel oder passen Sie die Zugriffsrechte an und versuchen Sie es erneut.",
"NoOpenAIAPIKey": "OpenAI API-Schlüssel ist falsch oder leer. Bitte fügen Sie einen benutzerdefinierten OpenAI API-Schlüssel hinzu.",
"OllamaBizError": "Fehler bei der Anfrage an den Ollama-Dienst. Bitte prüfen Sie die folgenden Informationen oder versuchen Sie es erneut.",
"OllamaServiceUnavailable": "Verbindung zum Ollama-Dienst fehlgeschlagen. Bitte prüfen Sie, ob Ollama ordnungsgemäß läuft und die CORS-Konfiguration korrekt ist.",
"PermissionDenied": "Entschuldigung, Sie haben keine Berechtigung für diesen Dienst. Bitte prüfen Sie, ob Ihr Schlüssel Zugriffsrechte besitzt.",
"PluginApiNotFound": "Entschuldigung, die API ist im Plugin-Manifest nicht vorhanden. Bitte prüfen Sie, ob Ihre Anfrage mit der Plugin-API übereinstimmt.",
"PluginApiParamsError": "Entschuldigung, die Eingabeparameter der Plugin-Anfrage sind ungültig. Bitte prüfen Sie die Parameter und die API-Beschreibung.",
"PluginFailToTransformArguments": "Entschuldigung, die Parameter des Plugins konnten nicht analysiert werden. Bitte generieren Sie die Assistenten-Nachricht neu oder verwenden Sie ein KI-Modell mit besserer Tools-Calling-Fähigkeit und versuchen Sie es erneut.",
"PluginGatewayError": "Entschuldigung, es gab einen Fehler im Plugin-Gateway. Bitte prüfen Sie die Gateway-Konfiguration.",
"PluginManifestInvalid": "Entschuldigung, das Plugin-Manifest ist ungültig. Bitte prüfen Sie das Format des Manifests.",
"PluginManifestNotFound": "Entschuldigung, das Plugin-Manifest (manifest.json) wurde nicht gefunden. Bitte prüfen Sie die Adresse der Plugin-Beschreibungsdatei.",
"PluginMarketIndexInvalid": "Entschuldigung, der Plugin-Index ist ungültig. Bitte prüfen Sie das Format der Indexdatei.",
"PluginMarketIndexNotFound": "Entschuldigung, der Plugin-Index wurde nicht gefunden. Bitte prüfen Sie die Indexadresse.",
"PluginMetaInvalid": "Entschuldigung, die Metadaten des Plugins sind ungültig. Bitte prüfen Sie das Format der Metadaten.",
"PluginMetaNotFound": "Entschuldigung, das Plugin wurde im Index nicht gefunden. Bitte prüfen Sie die Konfiguration im Index.",
"PluginOpenApiInitError": "Entschuldigung, die Initialisierung des OpenAPI-Clients ist fehlgeschlagen. Bitte prüfen Sie die OpenAPI-Konfiguration.",
"PluginServerError": "Fehler bei der Plugin-Serveranfrage. Bitte prüfen Sie anhand der Fehlermeldung Ihre Plugin-Beschreibungsdatei, Konfiguration oder Serverimplementierung.",
"PluginSettingsInvalid": "Das Plugin muss korrekt konfiguriert sein, um verwendet zu werden. Bitte prüfen Sie Ihre Einstellungen.",
"ProviderBizError": "Fehler bei der Anfrage an den {{provider}}-Dienst. Bitte prüfen Sie die folgenden Informationen oder versuchen Sie es erneut.",
"QuotaLimitReached": "Entschuldigung, das Token- oder Anfragekontingent für diesen Schlüssel ist erreicht. Bitte erhöhen Sie das Kontingent oder versuchen Sie es später erneut.",
"StreamChunkError": "Fehler beim Parsen eines Nachrichtenblocks der Streaming-Anfrage. Bitte prüfen Sie, ob die API-Schnittstelle dem Standard entspricht, oder kontaktieren Sie Ihren API-Anbieter.",
"SubscriptionKeyMismatch": "Entschuldigung, aufgrund eines Systemfehlers ist Ihr Abonnement vorübergehend deaktiviert. Bitte klicken Sie auf die Schaltfläche unten, um das Abonnement wiederherzustellen, oder kontaktieren Sie uns per E-Mail für Unterstützung.",
"SubscriptionPlanLimit": "Ihr Abonnementguthaben ist aufgebraucht. Bitte wechseln Sie zu einem höheren Plan oder konfigurieren Sie ein benutzerdefiniertes Modell-API, um fortzufahren.",
"SystemTimeNotMatchError": "Entschuldigung, Ihre Systemzeit stimmt nicht mit der Serverzeit überein. Bitte überprüfen Sie Ihre Systemzeit und versuchen Sie es erneut.",
"UnknownChatFetchError": "Entschuldigung, ein unbekannter Fehler ist aufgetreten. Bitte prüfen Sie die folgenden Informationen oder versuchen Sie es erneut."
},
"sessionExpired": {
"desc": "Zum Schutz Ihres Kontos melden Sie sich bitte erneut an.",
"login": "Jetzt anmelden",
"title": "Sitzung abgelaufen"
}
}
+173
View File
@@ -0,0 +1,173 @@
{
"ai21": {
"description": "AI21 Labs entwickelt Basismodelle und KI-Systeme für Unternehmen, um den Einsatz generativer KI in der Produktion zu beschleunigen."
},
"ai302": {
"description": "302.AI ist eine Pay-per-Use KI-Anwendungsplattform, die die umfassendsten KI-APIs und Online-KI-Anwendungen auf dem Markt anbietet."
},
"ai360": {
"description": "360 AI ist eine von 360 eingeführte Plattform für KI-Modelle und -Dienste, die verschiedene fortschrittliche Modelle für die Verarbeitung natürlicher Sprache bietet, darunter 360GPT2 Pro, 360GPT Pro, 360GPT Turbo und 360GPT Turbo Responsibility 8K. Diese Modelle kombinieren umfangreiche Parameter und multimodale Fähigkeiten und werden breit eingesetzt in Textgenerierung, semantischem Verständnis, Dialogsystemen und Codegenerierung. Durch flexible Preisgestaltung erfüllt 360 AI vielfältige Nutzerbedürfnisse, unterstützt Entwickler bei der Integration und fördert Innovation und Entwicklung intelligenter Anwendungen."
},
"aihubmix": {
"description": "AiHubMix bietet über eine einheitliche API-Schnittstelle Zugang zu verschiedenen KI-Modellen."
},
"anthropic": {
"description": "Anthropic ist ein auf KI-Forschung und -Entwicklung spezialisiertes Unternehmen, das eine Reihe fortschrittlicher Sprachmodelle wie Claude 3.5 Sonnet, Claude 3 Sonnet, Claude 3 Opus und Claude 3 Haiku anbietet. Diese Modelle bieten eine ideale Balance zwischen Intelligenz, Geschwindigkeit und Kosten und eignen sich für vielfältige Anwendungen von Unternehmens-Workloads bis hin zu schnellen Reaktionsszenarien. Claude 3.5 Sonnet ist das neueste Modell und überzeugt in zahlreichen Bewertungen mit hervorragender Leistung bei gleichzeitig hoher Kosteneffizienz."
},
"azure": {
"description": "Azure bietet eine Vielzahl fortschrittlicher KI-Modelle, darunter GPT-3.5 und die neueste GPT-4-Serie, unterstützt verschiedene Datentypen und komplexe Aufgaben und engagiert sich für sichere, zuverlässige und nachhaltige KI-Lösungen."
},
"azureai": {
"description": "Azure bietet eine Vielzahl fortschrittlicher KI-Modelle, darunter GPT-3.5 und die neueste GPT-4-Serie, unterstützt verschiedene Datentypen und komplexe Aufgaben und engagiert sich für sichere, zuverlässige und nachhaltige KI-Lösungen."
},
"baichuan": {
"description": "Baichuan Intelligent ist ein Unternehmen, das sich auf die Entwicklung großer KI-Modelle spezialisiert hat. Seine Modelle zeichnen sich durch hervorragende Leistungen bei chinesischen Aufgaben wie Wissensdatenbanken, Langtextverarbeitung und kreativer Generierung aus und übertreffen internationale Modelle. Baichuan verfügt zudem über branchenführende multimodale Fähigkeiten und erzielt exzellente Ergebnisse in zahlreichen anerkannten Bewertungen. Zu den Modellen gehören Baichuan 4, Baichuan 3 Turbo und Baichuan 3 Turbo 128k, die jeweils für unterschiedliche Anwendungsfälle optimiert sind und kosteneffiziente Lösungen bieten."
},
"bedrock": {
"description": "Bedrock ist ein von Amazon AWS angebotener Dienst, der sich auf fortschrittliche KI-Sprach- und Visuelle Modelle für Unternehmen spezialisiert hat. Die Modellfamilie umfasst Anthropic's Claude-Serie, Meta's Llama 3.1-Serie und weitere, die von leichtgewichtigen bis zu leistungsstarken Optionen reichen und Aufgaben wie Textgenerierung, Dialog und Bildverarbeitung unterstützen geeignet für Unternehmen jeder Größe und Anforderung."
},
"cloudflare": {
"description": "Ausführung von serverlosen, GPU-betriebenen Machine-Learning-Modellen im globalen Netzwerk von Cloudflare."
},
"cohere": {
"description": "Cohere bietet modernste mehrsprachige Modelle, fortschrittliche Suchfunktionen und einen auf Unternehmen zugeschnittenen KI-Arbeitsbereich alles integriert in einer sicheren Plattform."
},
"deepseek": {
"description": "DeepSeek ist ein Unternehmen, das sich auf KI-Technologieforschung und -anwendung spezialisiert hat. Das neueste Modell DeepSeek-V3 übertrifft in mehreren Bewertungen Open-Source-Modelle wie Qwen2.5-72B und Llama-3.1-405B und erreicht eine Leistung, die führenden Closed-Source-Modellen wie GPT-4o und Claude-3.5-Sonnet entspricht."
},
"fal": {
"description": "Eine generative Medienplattform für Entwickler."
},
"fireworksai": {
"description": "Fireworks AI ist ein führender Anbieter fortschrittlicher Sprachmodelle, spezialisiert auf Funktionsaufrufe und multimodale Verarbeitung. Das neueste Modell Firefunction V2 basiert auf Llama-3 und ist für Funktionsaufrufe, Dialoge und Befolgung von Anweisungen optimiert. Das visuelle Sprachmodell FireLLaVA-13B unterstützt gemischte Bild- und Texteingaben. Weitere bemerkenswerte Modelle sind die Llama- und Mixtral-Serien, die effiziente mehrsprachige Anweisungsbefolgung und Generierung bieten."
},
"giteeai": {
"description": "Gitee AI bietet eine Serverless-API, die Entwicklern sofort einsatzbereite große Modell-Inferenzdienste bereitstellt."
},
"github": {
"description": "Mit GitHub-Modellen können Entwickler zu KI-Ingenieuren werden und mit branchenführenden KI-Modellen bauen."
},
"google": {
"description": "Die Gemini-Serie von Google ist das fortschrittlichste und vielseitigste KI-Modell von Google DeepMind, speziell für multimodale Anwendungen entwickelt. Es unterstützt nahtloses Verständnis und Verarbeitung von Text, Code, Bildern, Audio und Video. Geeignet für Umgebungen von Rechenzentren bis zu mobilen Geräten, steigert es Effizienz und Anwendungsvielfalt von KI-Modellen erheblich."
},
"groq": {
"description": "Der LPU-Inferenzmotor von Groq erzielt herausragende Ergebnisse in den neuesten unabhängigen Benchmarks für große Sprachmodelle (LLM) und definiert mit seiner beeindruckenden Geschwindigkeit und Effizienz neue Standards für KI-Lösungen. Groq steht für sofortige Inferenzgeschwindigkeit und zeigt in Cloud-basierten Deployments starke Leistung."
},
"higress": {
"description": "Higress ist ein cloud-nativer API-Gateway, das intern bei Alibaba entwickelt wurde, um Probleme mit Tengine Reload bei Langzeitverbindungen sowie unzureichende Lastverteilung bei gRPC/Dubbo zu lösen."
},
"huggingface": {
"description": "Die HuggingFace Inference API bietet eine schnelle und kostenlose Möglichkeit, Tausende von Modellen für verschiedenste Aufgaben zu erkunden. Egal, ob Sie Prototypen für neue Anwendungen erstellen oder maschinelles Lernen ausprobieren diese API ermöglicht sofortigen Zugriff auf leistungsstarke Modelle aus vielen Bereichen."
},
"hunyuan": {
"description": "Ein von Tencent entwickeltes großes Sprachmodell mit starker chinesischer Kreativitätsfähigkeit, logischem Denken in komplexen Kontexten und zuverlässiger Aufgabenausführung."
},
"infiniai": {
"description": "Bietet Anwendungsentwicklern leistungsstarke, benutzerfreundliche und sichere große Modell-Dienste, die den gesamten Prozess von der Modellentwicklung bis zur serviceorientierten Bereitstellung abdecken."
},
"internlm": {
"description": "Eine Open-Source-Organisation, die sich der Forschung an großen Modellen und der Entwicklung von Toolchains widmet. Sie stellt allen KI-Entwicklern eine effiziente und benutzerfreundliche Open-Source-Plattform zur Verfügung, um modernste große Modelle und Algorithmustechnologien zugänglich zu machen."
},
"jina": {
"description": "Jina AI wurde 2020 gegründet und ist ein führendes Unternehmen im Bereich Such-KI. Unsere Suchplattform umfasst Vektormodelle, Re-Ranker und kleine Sprachmodelle, die Unternehmen helfen, zuverlässige und hochwertige generative KI- und multimodale Suchanwendungen zu entwickeln."
},
"lmstudio": {
"description": "LM Studio ist eine Desktop-Anwendung zum Entwickeln und Experimentieren mit großen Sprachmodellen (LLMs) auf Ihrem eigenen Computer."
},
"minimax": {
"description": "MiniMax ist ein 2021 gegründetes Unternehmen für allgemeine KI-Technologie, das sich der gemeinsamen Schaffung von Intelligenz mit Nutzern widmet. MiniMax hat multimodale allgemeine große Modelle eigenständig entwickelt, darunter ein Billionen-Parameter MoE-Textmodell, Sprachmodelle und Bildmodelle, und bietet Anwendungen wie Conch AI an."
},
"mistral": {
"description": "Mistral bietet fortschrittliche allgemeine, professionelle und forschungsorientierte Modelle, die breit in komplexer Argumentation, mehrsprachigen Aufgaben und Codegenerierung eingesetzt werden. Über Funktionsaufruf-Schnittstellen können Nutzer benutzerdefinierte Funktionen integrieren und spezifische Anwendungen realisieren."
},
"modelscope": {
"description": "ModelScope ist eine von Alibaba Cloud eingeführte Plattform für Modell-als-Service, die eine Vielzahl von KI-Modellen und Inferenzdiensten bereitstellt."
},
"moonshot": {
"description": "Moonshot ist eine Open-Source-Plattform der Beijing Moon's Dark Side Technology Co., Ltd., die verschiedene Modelle für die Verarbeitung natürlicher Sprache anbietet. Die Anwendungsbereiche sind vielfältig, darunter Inhaltskreation, akademische Forschung, intelligente Empfehlungen und medizinische Diagnostik, mit Unterstützung für Langtextverarbeitung und komplexe Generierungsaufgaben."
},
"novita": {
"description": "Novita AI ist eine Plattform, die APIs für verschiedene große Sprachmodelle und KI-Bildgenerierung anbietet flexibel, zuverlässig und kosteneffizient. Sie unterstützt neueste Open-Source-Modelle wie Llama3 und Mistral und bietet umfassende, benutzerfreundliche und automatisch skalierende API-Lösungen für die Entwicklung generativer KI-Anwendungen, ideal für schnell wachsende KI-Startups."
},
"nvidia": {
"description": "NVIDIA NIM™ bietet Container für selbstverwaltete GPU-beschleunigte Inferenz-Mikrodienste und unterstützt die Bereitstellung vortrainierter und kundenspezifischer KI-Modelle in der Cloud, Rechenzentren, auf RTX™ AI-PCs und Workstations."
},
"ollama": {
"description": "Ollama bietet Modelle, die ein breites Spektrum abdecken, darunter Codegenerierung, mathematische Berechnungen, mehrsprachige Verarbeitung und Dialoginteraktion, und unterstützt vielfältige Anforderungen an Unternehmens- und lokale Bereitstellungen."
},
"openai": {
"description": "OpenAI ist eine weltweit führende Forschungseinrichtung im Bereich künstliche Intelligenz. Ihre Modelle wie die GPT-Serie treiben die Spitzenforschung in der Verarbeitung natürlicher Sprache voran. OpenAI engagiert sich dafür, durch innovative und effiziente KI-Lösungen verschiedene Branchen zu transformieren. Ihre Produkte zeichnen sich durch herausragende Leistung und Wirtschaftlichkeit aus und werden breit in Forschung, Wirtschaft und Innovation eingesetzt."
},
"openrouter": {
"description": "OpenRouter ist eine Plattform, die Schnittstellen zu verschiedenen fortschrittlichen großen Modellen bietet, darunter OpenAI, Anthropic, LLaMA und weitere, und eignet sich für vielfältige Entwicklungs- und Anwendungsbedürfnisse. Nutzer können je nach Bedarf das optimale Modell und Preismodell wählen, um das KI-Erlebnis zu verbessern."
},
"perplexity": {
"description": "Perplexity ist ein führender Anbieter von dialoggenerierenden Modellen und bietet verschiedene fortschrittliche Llama 3.1-Modelle, die sowohl online als auch offline eingesetzt werden können, besonders geeignet für komplexe Aufgaben der Verarbeitung natürlicher Sprache."
},
"ppio": {
"description": "PPIO bietet stabile und kosteneffiziente Open-Source-Modell-API-Dienste und unterstützt branchenführende große Modelle wie die gesamte DeepSeek-Serie, Llama und Qwen."
},
"qiniu": {
"description": "Qiniu ist ein etablierter Cloud-Service-Anbieter, der kosteneffiziente und stabile Echtzeit- und Batch-KI-Inferenzdienste anbietet, die einfach zu nutzen sind."
},
"qwen": {
"description": "Tongyi Qianwen ist ein von Alibaba Cloud eigenständig entwickeltes großskaliges Sprachmodell mit starker Fähigkeit zum Verstehen und Generieren natürlicher Sprache. Es kann Fragen beantworten, Texte erstellen, Meinungen ausdrücken und Code schreiben und ist in vielen Bereichen einsetzbar."
},
"sambanova": {
"description": "SambaNova Cloud ermöglicht Entwicklern den einfachen Zugriff auf die besten Open-Source-Modelle und bietet die schnellste Inferenzgeschwindigkeit."
},
"search1api": {
"description": "Search1API bietet Zugriff auf DeepSeek-Modelle, die bei Bedarf selbstständig online geschaltet werden können, einschließlich Standard- und Schnellversionen, mit Unterstützung für Modelle unterschiedlicher Parametergrößen."
},
"sensenova": {
"description": "SenseNova bietet auf der starken Infrastruktur von SenseTime basierende effiziente und benutzerfreundliche Full-Stack-Dienste für große Modelle."
},
"siliconcloud": {
"description": "SiliconCloud ist ein kosteneffizienter GenAI-Cloud-Service, der auf hervorragenden Open-Source-Basismodellen basiert."
},
"spark": {
"description": "Das Spark-Großmodell von iFLYTEK bietet leistungsstarke KI-Fähigkeiten in mehreren Bereichen und Sprachen und nutzt fortschrittliche Technologien der Verarbeitung natürlicher Sprache, um innovative Anwendungen in intelligenten Geräten, intelligenter Medizin, intelligentem Finanzwesen und weiteren vertikalen Szenarien zu ermöglichen."
},
"stepfun": {
"description": "Das StepFun-Großmodell verfügt über branchenführende multimodale und komplexe Argumentationsfähigkeiten, unterstützt das Verständnis sehr langer Texte und bietet eine leistungsstarke selbststeuernde Suchmaschinenfunktion."
},
"taichu": {
"description": "Das neue multimodale Großmodell, entwickelt vom Institut für Automatisierung der Chinesischen Akademie der Wissenschaften und dem Wuhan AI-Institut, unterstützt mehrstufige Fragen, Textkreation, Bildgenerierung, 3D-Verständnis, Signalanalyse und weitere umfassende Aufgaben. Es bietet stärkere kognitive, Verständnis- und Kreativitätsfähigkeiten und ermöglicht ein völlig neues interaktives Erlebnis."
},
"tencentcloud": {
"description": "Die atomare Fähigkeit der Wissensmaschine (LLM Knowledge Engine Atomic Power) basiert auf der Wissensmaschine und bietet Unternehmen und Entwicklern eine flexible Möglichkeit, Modellanwendungen zu erstellen und zu entwickeln. Sie können mit verschiedenen atomaren Fähigkeiten Ihren eigenen Modellservice zusammenstellen und Dienste wie Dokumentenparsing, Aufteilung, Einbettung und mehrstufige Umschreibung nutzen, um maßgeschneiderte KI-Geschäftsanwendungen zu erstellen."
},
"togetherai": {
"description": "Together AI setzt auf innovative KI-Modelle für führende Leistung und bietet umfangreiche Anpassungsmöglichkeiten, einschließlich schneller Skalierung und intuitiver Bereitstellungsprozesse, um die vielfältigen Anforderungen von Unternehmen zu erfüllen."
},
"upstage": {
"description": "Upstage konzentriert sich auf die Entwicklung von KI-Modellen für verschiedene geschäftliche Anforderungen, darunter Solar LLM und Dokumenten-KI, mit dem Ziel, künstliche allgemeine Intelligenz (AGI) für die Arbeit zu realisieren. Über die Chat-API können einfache Dialogagenten erstellt werden, die Funktionsaufrufe, Übersetzungen, Einbettungen und domänenspezifische Anwendungen unterstützen."
},
"v0": {
"description": "v0 ist ein Pair-Programming-Assistent, der anhand natürlicher Sprache Ihre Ideen in Code und Benutzeroberflächen (UI) für Ihr Projekt umsetzt."
},
"vertexai": {
"description": "Die Gemini-Serie von Google ist das fortschrittlichste und vielseitigste KI-Modell von Google DeepMind, speziell für multimodale Anwendungen entwickelt. Es unterstützt nahtloses Verständnis und Verarbeitung von Text, Code, Bildern, Audio und Video. Geeignet für Umgebungen von Rechenzentren bis zu mobilen Geräten, steigert es Effizienz und Anwendungsvielfalt von KI-Modellen erheblich."
},
"vllm": {
"description": "vLLM ist eine schnelle und benutzerfreundliche Bibliothek für die Inferenz und den Betrieb großer Sprachmodelle (LLM)."
},
"volcengine": {
"description": "Die von ByteDance eingeführte Entwicklungsplattform für große Modellservices bietet funktionsreiche, sichere und preislich wettbewerbsfähige Modellaufrufdienste sowie End-to-End-Funktionen wie Modelldaten, Feinabstimmung, Inferenz und Bewertung, um die Entwicklung und Umsetzung Ihrer KI-Anwendungen umfassend zu unterstützen."
},
"wenxin": {
"description": "Eine unternehmensgerechte All-in-One-Plattform für die Entwicklung großer Modelle und KI-native Anwendungen, die die umfassendsten und benutzerfreundlichsten Tools für die Entwicklung generativer KI-Modelle und Anwendungen bereitstellt."
},
"xai": {
"description": "xAI ist ein Unternehmen, das sich dem Aufbau von künstlicher Intelligenz widmet, um die wissenschaftliche Entdeckung der Menschheit zu beschleunigen. Unsere Mission ist es, unser gemeinsames Verständnis des Universums voranzutreiben."
},
"xinference": {
"description": "Xorbits Inference (Xinference) ist eine Open-Source-Plattform zur Vereinfachung des Betriebs und der Integration verschiedener KI-Modelle. Mit Xinference können Sie beliebige Open-Source-LLMs, Einbettungsmodelle und multimodale Modelle in Cloud- oder lokalen Umgebungen für Inferenz betreiben und leistungsstarke KI-Anwendungen erstellen."
},
"zeroone": {
"description": "ZeroOne widmet sich der Förderung einer menschenzentrierten KI 2.0-Technologierevolution mit dem Ziel, durch große Sprachmodelle erheblichen wirtschaftlichen und gesellschaftlichen Wert zu schaffen und neue KI-Ökosysteme und Geschäftsmodelle zu etablieren."
},
"zhipu": {
"description": "Zhipu AI bietet eine offene Plattform für multimodale und Sprachmodelle, die eine breite Palette von KI-Anwendungsszenarien unterstützt, darunter Textverarbeitung, Bildverständnis und Programmierhilfe."
}
}
+282
View File
@@ -0,0 +1,282 @@
{
"about": "Über LobeHub",
"account": {
"group": "Konto",
"profile": {
"email": "E-Mail",
"name": "Benutzername",
"status": "Kontostatus",
"unverified": "Nicht verifiziert",
"verified": "Verifiziert"
},
"signOut": {
"confirm": "Möchten Sie sich wirklich abmelden?",
"label": "Abmelden"
},
"switchAccount": {
"action": "Konto wechseln",
"confirm": "Möchten Sie das Konto wirklich wechseln? Sie werden abgemeldet und müssen sich erneut anmelden.",
"error": "Kontowechsel fehlgeschlagen. Bitte versuchen Sie es erneut.",
"label": "Konto wechseln"
},
"title": "Kontoeinstellungen"
},
"advanced": {
"group": "Erweitert"
},
"aiProviders": {
"configuration": {
"apiKey": {
"description": "Bitte geben Sie den API-Schlüssel für {{name}} ein",
"label": "API-Schlüssel",
"placeholder": "Bitte geben Sie den API-Schlüssel für {{name}} ein"
},
"proxyUrl": {
"desc": "Muss mit http(s):// beginnen",
"invalid": "Bitte geben Sie eine gültige URL ein, die mit http:// oder https:// beginnt",
"placeholder": "https://api.example.com/v1",
"title": "API-Proxy-Adresse"
},
"saving": "Speichere Konfiguration...",
"title": "Konfiguration",
"updateFailedDesc": "Speichern fehlgeschlagen. Bitte versuchen Sie es erneut.",
"updateFailedTitle": "Speichern fehlgeschlagen"
},
"detail": {
"loadFailed": "Laden der Anbieter-Konfiguration fehlgeschlagen",
"loading": "Lade Anbieter-Konfiguration..."
},
"info": {
"builtIn": "Integrierter Anbieter",
"custom": "Benutzerdefinierter Anbieter"
},
"list": {
"disabled": "Deaktiviert",
"emptySearch": "Kein passender Anbieter gefunden",
"enabled": "Aktiviert",
"loadFailed": "Laden der Anbieterliste fehlgeschlagen"
},
"models": {
"allLoaded": "Alle Modelle angezeigt",
"copySuccess": "Erfolgreich kopiert",
"disableFailed": "Deaktivieren des Modells fehlgeschlagen",
"emptyNoSearch": "Keine Modelle gefunden. Versuche, vom Server zu laden.",
"emptyWithSearch": "Keine Modelle entsprechen den Suchkriterien",
"enableFailed": "Aktivieren des Modells fehlgeschlagen",
"fetch": "Modelle abrufen",
"fetchFailed": "Abrufen der Modelle fehlgeschlagen. Bitte versuchen Sie es erneut.",
"fetchSuccess": "Modellliste erfolgreich abgerufen!",
"fetching": "Abrufen...",
"loading": "Lade...",
"loadingMore": "Lade weitere...",
"modelsAvailable": "{{count}} verfügbare Modelle",
"searchPlaceholder": "Modelle suchen...",
"title": "Modelle"
},
"skeleton": {
"disabled": "Deaktiviert",
"enabled": "Aktiviert"
}
},
"cache": {
"clear": {
"confirm": {
"action": "Cache leeren",
"description": "Dies entfernt lokal gespeicherte Cache-Daten. Beim nächsten Start müssen Inhalte neu geladen werden.",
"title": "Cache wirklich leeren?"
},
"failure": "Cache konnte nicht geleert werden",
"success": "Cache erfolgreich geleert"
},
"description": "Der Cache beschleunigt den Start. Wenn Speicherplatz benötigt wird, können Sie ihn hier leeren.",
"title": "Cache leeren"
},
"changelog": "Änderungsprotokoll",
"color": {
"neutral": {
"description": "Wählen Sie den neutralen Farbton der App",
"title": "Neutrale Farbkonfiguration"
},
"preview": "Vorschau",
"previewMessages": {
"botGreat": "Schön, dass es dir gefällt! Mit dieser Vorschau kannst du das Thema vor dem Anwenden sehen.",
"botHowToUse": "Nutze den Farbwähler unten, um Primär- und Neutralfarben anzupassen. Die Vorschau wird in Echtzeit aktualisiert.",
"userGreat": "Super!",
"userHowToUse": "Wie funktioniert die Themenvorschau?"
},
"primary": {
"description": "Wählen Sie die Primärfarbe der App",
"title": "Primärfarbkonfiguration"
},
"title": "Farbeinstellungen"
},
"developer": {
"auth": {
"accessToken": {
"expire": {
"success": "Zugriffstoken sofort abgelaufen",
"title": "Zugriffstoken abgelaufen"
},
"invalidate": {
"success": "Ungültiger Zugriffstoken gespeichert",
"title": "Ungültiger Zugriffstoken"
}
},
"clearAuthData": {
"success": "Authentifizierungsdaten gelöscht",
"title": "Authentifizierungsdaten löschen"
},
"error": {
"noToken": "Kein verfügbarer Token"
},
"group": "Authentifizierung",
"refreshToken": {
"expire": {
"success": "Aktualisierungstoken sofort abgelaufen",
"title": "Aktualisierungstoken abgelaufen"
},
"invalidate": {
"success": "Ungültiger Aktualisierungstoken gespeichert",
"title": "Ungültiger Aktualisierungstoken"
}
}
},
"failurePrefix": "Aktion fehlgeschlagen: ",
"mode": {
"already": "Entwicklermodus ist bereits aktiviert",
"enabled": "Entwicklermodus aktiviert",
"remaining": "{{count}} weitere Klicks zum Aktivieren des Entwicklermodus",
"title": "Entwicklermodus"
},
"selfHostedEntry": {
"confirmAction": "Zur Konfigurationsseite",
"confirmDescription": "Nach Aktivierung wird die Konfigurationsseite für die Selbst-Hosting-Instanz geöffnet. Möchten Sie sich abmelden und fortfahren?",
"confirmResetAction": "Zurücksetzen und anmelden",
"confirmResetDescription": "Das Deaktivieren des Selbst-Hosting-Modus setzt die Serveradresse auf die offizielle Instanz zurück und meldet Sie ab. Fortfahren?",
"confirmResetTitle": "Selbst-Hosting-Modus deaktivieren",
"confirmTitle": "Selbst-Hosting-Login aktivieren",
"description": "Steuert, ob auf der Login-Seite ein Button für selbst gehostete Instanzen angezeigt wird",
"title": "Selbst-Hosting-Modus aktivieren"
},
"server": {
"confirmDescription": "Nach Änderung der Serveradresse werden Sie abgemeldet und müssen sich erneut anmelden. Fortfahren?",
"confirmTitle": "Serverwechsel bestätigen",
"current": "Aktuelle Adresse",
"description": "Alle Anfragen verwenden diese Serveradresse. Leer lassen, um zur offiziellen Adresse zurückzukehren.",
"group": "Serverkonfiguration",
"hint": "Muss mit http:// oder https:// beginnen. Möglicherweise ist eine erneute Anmeldung erforderlich.",
"invalid": "Bitte geben Sie eine gültige Adresse ein, die mit http:// oder https:// beginnt",
"notice": "Ein benutzerdefinierter Server ersetzt die Standard-API-Adresse. Stellen Sie sicher, dass der Dienst verfügbar und mit dem LobeChat-API-Protokoll kompatibel ist. Ein Neustart oder erneutes Anmelden kann erforderlich sein.",
"noticeTitle": "Vor dem Wechsel beachten",
"placeholder": "https://your-server.example.com",
"reset": "Zurücksetzen",
"resetSuccess": "Offizielle Serveradresse wiederhergestellt",
"save": "Speichern",
"title": "Selbst gehostete Instanz",
"updated": "Benutzerdefinierte Serveradresse aktualisiert"
},
"title": "Entwickleroptionen"
},
"feedback": {
"email": {
"body": {
"description": "Problembeschreibung:",
"footer": "Gesendet von meinem {{device}}",
"frequency": "Häufigkeit des Auftretens:",
"screenshots": "Relevante Screenshots:",
"template": "Bitte beschreiben Sie das Problem so detailliert wie möglich, damit wir Ihnen besser helfen können."
},
"subject": "Feedback - LobeChat - {{version}}"
},
"error": "E-Mail-Client konnte nicht geöffnet werden. Bitte versuchen Sie es später erneut.",
"saved": "Feedback wurde im Entwurfsordner gespeichert",
"sent": "E-Mail wurde gesendet. Vielen Dank für Ihr Feedback!",
"title": "Feedback",
"unavailable": "E-Mail-Funktion nicht verfügbar. Bitte überprüfen Sie, ob auf Ihrem Gerät ein E-Mail-Konto eingerichtet ist oder die E-Mail-Funktion aktiviert wurde."
},
"fontSize": {
"preview": {
"botAnswer": "**Wie ändere ich die Schriftgröße?**\n\nVerwenden Sie den Schieberegler unten, um die Schriftgröße anzupassen: nach links für kleiner, nach rechts für größer. Die Vorschau wird in Echtzeit aktualisiert.\n\nTipp: Wählen Sie \"Standard\", um zur Standardgröße zurückzukehren.",
"botGreat": "Schön, dass es dir gefällt! Mit dieser Vorschau kannst du sehen, wie der Text im Chat aussehen wird.",
"userGreat": "Super!",
"userQuestion": "Wie kann ich die Schriftgröße im Chat vergrößern?"
},
"standard": "Standard",
"text": "Diese Einstellung beeinflusst nur die Schriftgröße der Nachrichteninhalte",
"title": "Schriftgröße"
},
"general": {
"group": "Allgemein"
},
"help": "Hilfe",
"info": {
"group": "Information"
},
"locale": {
"auto": {
"description": "Systemsprache verwenden",
"title": "Systemsprache"
},
"title": "Spracheinstellungen"
},
"openai": "OpenAI-Einstellungen",
"openaiSettings": {
"apiKey": "API-Schlüssel",
"apiKeyPlaceholder": "Bitte geben Sie Ihren OpenAI API-Schlüssel ein",
"checkApiKey": "Bitte überprüfen Sie den API-Schlüssel",
"checkProxyAddress": "Verbindung zum Server fehlgeschlagen. Bitte überprüfen Sie die Proxy-Adresse.",
"connectionSuccess": "Verbindung erfolgreich. API-Schlüssel und Proxy-Adresse sind korrekt.",
"connectivityHint": "Nach dem Verbindungstest wird überprüft, ob API-Schlüssel und Proxy-Adresse korrekt sind.",
"pleaseEnterApiKey": "Bitte geben Sie den API-Schlüssel ein",
"proxyAddress": "API-Proxy-Adresse",
"proxyPlaceholder": "Muss mit http(s):// beginnen",
"testConnectivity": "Verbindung testen",
"validationFailed": "Validierung fehlgeschlagen",
"validationSuccess": "Validierung erfolgreich"
},
"providerModels": {
"config": {
"aesGcm": "Ihr Schlüssel und die Proxy-Adresse werden mit dem <1>AES-GCM</1>-Algorithmus verschlüsselt",
"checker": {
"button": "Verbindung testen",
"desc": "Testet, ob API-Schlüssel und Proxy-Adresse korrekt sind",
"pass": "Überprüfung bestanden",
"selectModel": "Modell für Verbindungstest auswählen",
"title": "Verbindungsprüfung"
}
}
},
"providers": "KI-Anbieter",
"providersDetail": {
"tabs": {
"configuration": "Konfiguration",
"models": "Modelle"
}
},
"providersSearchPlaceholder": "Anbieter nach Stichwort suchen...",
"support": "E-Mail-Support",
"themeMode": {
"auto": "Systemeinstellung",
"dark": "Dunkelmodus",
"light": "Hellmodus",
"title": "Designmodus"
},
"title": "Einstellungen",
"update": {
"check": {
"applyAction": "Jetzt neu starten",
"applyDescription": "Die App muss neu gestartet werden, um das Update anzuwenden. Jetzt neu starten?",
"applyError": "Update konnte nicht angewendet werden. Bitte versuchen Sie es später erneut.",
"applyTitle": "Update anwenden",
"applying": "Neustart zur Anwendung des Updates...",
"checking": "Suche nach Updates...",
"downloaded": "Update heruntergeladen",
"downloading": "Neue Version gefunden. Update wird heruntergeladen...",
"error": "Updateprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.",
"none": "Sie verwenden bereits die neueste Version",
"title": "Nach Updates suchen",
"unavailable": "Diese Funktion ist in dieser Version nicht verfügbar. Bitte verwenden Sie die offizielle Version."
}
},
"version": "Aktuelle Version"
}
+32
View File
@@ -0,0 +1,32 @@
{
"localSystem": {
"apiName": {
"listLocalFiles": "Dateiliste anzeigen",
"moveLocalFiles": "Dateien verschieben",
"readLocalFile": "Dateiinhalt lesen",
"renameLocalFile": "Datei umbenennen",
"searchLocalFiles": "Dateien durchsuchen",
"writeLocalFile": "In Datei schreiben"
},
"title": "Lokales System"
},
"mobileNotSupported": "Dieses Tool wird auf Mobilgeräten derzeit nicht unterstützt. Bitte verwenden Sie einen Desktop-Computer, um alle Inhalte anzuzeigen.",
"search": {
"apiName": {
"crawlMultiPages": "Mehrere Seiteninhalte abrufen",
"crawlSinglePage": "Seiteninhalt abrufen",
"search": "Seite durchsuchen"
},
"crawPages": {
"crawling": "Wird gecrawlt...",
"meta": {
"crawler": "Crawler",
"words": "Wörter"
}
},
"emptyResult": "Keine Suchergebnisse gefunden",
"title": "Websuche"
},
"title": "Werkzeugaufruf",
"unknown": "Unbekanntes Tool"
}
+48
View File
@@ -0,0 +1,48 @@
{
"actions": {
"confirmRemoveAll": "Alle Themen werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden. Bitte seien Sie vorsichtig.",
"confirmRemoveUnstarred": "Alle nicht markierten Themen werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden. Bitte seien Sie vorsichtig.",
"favorite": "Favorisieren",
"removeAll": "Alle Themen löschen",
"removeUnstarred": "Nicht markierte Themen löschen",
"unfavorite": "Favorisierung aufheben"
},
"confirmRemoveTopicItemAlert": "Dieses Thema wird gelöscht und kann danach nicht wiederhergestellt werden. Bitte bestätigen Sie Ihre Aktion.",
"defaultTitle": "Standardthema",
"empty": "Keine Themen vorhanden",
"favorite": "Favorisieren",
"groupTitle": {
"byTime": {
"favorite": "Favoriten",
"month": "Diesen Monat",
"today": "Heute",
"week": "Diese Woche",
"yesterday": "Gestern"
}
},
"guide": {
"desc": "Klicken Sie auf die linke Schaltfläche zum Senden, um die aktuelle Unterhaltung als Verlaufsthema zu speichern und eine neue Unterhaltung zu starten",
"title": "Themenliste"
},
"loading": "Wird geladen...",
"newTopic": "Neues Thema",
"rename": {
"action": "Umbenennen",
"done": "Fertig",
"emptyTitle": "Thementitel darf nicht leer sein",
"error": "Umbenennen fehlgeschlagen",
"placeholder": "Thementitel eingeben",
"success": "Erfolgreich umbenannt",
"title": "Thema umbenennen",
"tooLong": "Thementitel ist zu lang"
},
"search": {
"emptyResult": "Keine passenden Themen gefunden",
"placeholder": "Themen suchen...",
"recentSearches": "Kürzliche Suchen",
"title": "Themen suchen"
},
"searchPlaceholder": "Themen suchen...",
"temp": "Temporär",
"title": "Thema"
}
+49
View File
@@ -0,0 +1,49 @@
{
"guide": {
"agents": {
"replaceBtn": "Ersetze eine Gruppe",
"title": "Empfohlene neue Assistenten:"
},
"defaultMessage": "Ich bin Ihr persönlicher intelligenter Assistent {{appName}}. Wie kann ich Ihnen jetzt helfen?<br />Wenn Sie einen professionelleren oder maßgeschneiderten Assistenten wünschen, klicken Sie auf <plus />, um einen benutzerdefinierten Assistenten zu erstellen.",
"defaultMessageWithoutCreate": "Ich bin Ihr persönlicher intelligenter Assistent {{appName}}. Wie kann ich Ihnen jetzt helfen?",
"qa": {
"q01": "Was ist LobeHub?",
"q02": "Was ist {{appName}}?",
"q03": "Gibt es eine Community-Unterstützung für {{appName}}?",
"q04": "Welche Funktionen unterstützt {{appName}}?",
"q05": "Wie wird {{appName}} bereitgestellt und verwendet?",
"q06": "Wie gestaltet sich die Preisgestaltung von {{appName}}?",
"q07": "Ist {{appName}} kostenlos?",
"q08": "Gibt es eine Cloud-Service-Version?",
"q09": "Wird ein lokales Sprachmodell unterstützt?",
"q10": "Unterstützt es Bilderkennung und -erzeugung?",
"q11": "Unterstützt es Sprachsynthese und Spracherkennung?",
"q12": "Gibt es ein Pluginsystem?",
"q13": "Gibt es einen eigenen Marktplatz für GPTs?",
"q14": "Unterstützt es mehrere KI-Dienstanbieter?",
"q15": "Was soll ich tun, wenn ich bei der Nutzung auf Probleme stoße?"
},
"questions": {
"moreBtn": "Mehr erfahren",
"title": "Häufig gestellte Fragen:"
},
"topics": {
"title": "Aktuelle Themen:"
},
"welcome": {
"afternoon": "Guten Nachmittag",
"morning": "Guten Morgen",
"night": "Guten Abend",
"noon": "Guten Tag"
}
},
"header": "Willkommen",
"pickAgent": "Oder wählen Sie aus den folgenden Assistentenvorlagen",
"skip": "Erstellung überspringen",
"slogan": {
"desc1": "Aktivieren Sie ein Gehirnnetzwerk und entfachen Sie Funken des Denkens. Ihr intelligenter Assistent ist immer für Sie da.",
"desc2": "Erstellen Sie Ihren ersten Assistenten, lassen Sie uns anfangen~",
"title": "Geben Sie sich ein klügeres Gehirn"
},
"title": "Willkommen"
}

Some files were not shown because too many files have changed in this diff Show More