Compare commits

...

37 Commits

Author SHA1 Message Date
semantic-release-bot cf1d66d07e 🔖 chore(release): v1.0.0-beta.23 [skip ci]
# [1.0.0-beta.23](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.22...v1.0.0-beta.23) (2025-02-24)

### 🐛 Bug Fixes

* **auth**: Update email verification logic to use domain suffix check ([62662bb](https://github.com/perfect-panel/ppanel-web/commit/62662bb))
2025-02-24 05:10:30 +00:00
web@ppanel 62662bb79c 🐛 fix(auth): Update email verification logic to use domain suffix check 2025-02-24 12:07:41 +07:00
semantic-release-bot c0fb34fa50 🔖 chore(release): v1.0.0-beta.22 [skip ci]
# [1.0.0-beta.22](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.21...v1.0.0-beta.22) (2025-02-23)

### 🐛 Bug Fixes

* **locales**: Removed language file import to clean up unnecessary language support ([68f6ab2](https://github.com/perfect-panel/ppanel-web/commit/68f6ab2))
2025-02-23 15:06:05 +00:00
web@ppanel 68f6ab2e6c 🐛 fix(locales): Removed language file import to clean up unnecessary language support 2025-02-23 22:03:15 +07:00
semantic-release-bot ca642c2001 🔖 chore(release): v1.0.0-beta.21 [skip ci]
# [1.0.0-beta.21](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.20...v1.0.0-beta.21) (2025-02-23)

###  Features

* **privacy-policy**: Add privacy policy related text and links ([baa68f0](https://github.com/perfect-panel/ppanel-web/commit/baa68f0))

### 🐛 Bug Fixes

* **locales**: Removed multilingual files to clean up unnecessary language support ([5b151cd](https://github.com/perfect-panel/ppanel-web/commit/5b151cd))
* **locales**: Update custom HTML description in language file, ([87381da](https://github.com/perfect-panel/ppanel-web/commit/87381da))
* **table**: Update privacy policy tab translation key and remove unnecessary requestType from OAuth callback ([14b3af5](https://github.com/perfect-panel/ppanel-web/commit/14b3af5))
2025-02-23 14:17:29 +00:00
web@ppanel 5b151cdbfc 🐛 fix(locales): Removed multilingual files to clean up unnecessary language support 2025-02-23 21:14:17 +07:00
web@ppanel 14b3af5f96 🐛 fix(table): Update privacy policy tab translation key and remove unnecessary requestType from OAuth callback 2025-02-23 20:59:48 +07:00
web@ppanel baa68f03e3 feat(privacy-policy): Add privacy policy related text and links 2025-02-23 20:54:56 +07:00
web@ppanel 87381da1e5 🐛 fix(locales): Update custom HTML description in language file, 2025-02-23 17:25:31 +07:00
semantic-release-bot bbd44f0107 🔖 chore(release): v1.0.0-beta.20 [skip ci]
# [1.0.0-beta.20](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.19...v1.0.0-beta.20) (2025-02-23)

### 🐛 Bug Fixes

* **auth**: Add error handling to form submission and reset Turnstile on failure ([715d011](https://github.com/perfect-panel/ppanel-web/commit/715d011))
* **subscribe**: Update subscription domain placeholder to include examples; improve site name retrieval in global store ([c65a44c](https://github.com/perfect-panel/ppanel-web/commit/c65a44c))
2025-02-23 06:31:01 +00:00
web@ppanel c65a44c2c7 🐛 fix(subscribe): Update subscription domain placeholder to include examples; improve site name retrieval in global store 2025-02-23 13:25:01 +07:00
web@ppanel 715d0113ca 🐛 fix(auth): Add error handling to form submission and reset Turnstile on failure 2025-02-23 13:12:25 +07:00
semantic-release-bot 0f15fb82cb 🔖 chore(release): v1.0.0-beta.19 [skip ci]
# [1.0.0-beta.19](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.18...v1.0.0-beta.19) (2025-02-23)

###  Features

* **form**: Make version field optional and set default value; update site domain placeholder for clarity ([42ba9e8](https://github.com/perfect-panel/ppanel-web/commit/42ba9e8))

### 🐛 Bug Fixes

* **auth**: Refactor forms to use Turnstile ref for reset functionality ([320a7dc](https://github.com/perfect-panel/ppanel-web/commit/320a7dc))
2025-02-23 05:58:05 +00:00
web@ppanel 320a7dc342 🐛 fix(auth): Refactor forms to use Turnstile ref for reset functionality 2025-02-23 12:55:21 +07:00
web@ppanel 42ba9e88ad feat(form): Make version field optional and set default value; update site domain placeholder for clarity 2025-02-23 12:46:29 +07:00
semantic-release-bot 4a002333d4 🔖 chore(release): v1.0.0-beta.18 [skip ci]
# [1.0.0-beta.18](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.17...v1.0.0-beta.18) (2025-02-22)

###  Features

* **platform**: Update platform naming and add keywords and custom HTML fields ([6384237](https://github.com/perfect-panel/ppanel-web/commit/6384237))
* **site**: Added localization support for custom HTML and keyword fields ([f9d7736](https://github.com/perfect-panel/ppanel-web/commit/f9d7736))

### 🐛 Bug Fixes

* **locales**: Update custom HTML description for clarity across multiple languages ([557c5cd](https://github.com/perfect-panel/ppanel-web/commit/557c5cd))
2025-02-22 16:38:46 +00:00
web@ppanel 6384237782 feat(platform): Update platform naming and add keywords and custom HTML fields 2025-02-22 23:35:30 +07:00
web@ppanel 557c5cdc29 🐛 fix(locales): Update custom HTML description for clarity across multiple languages 2025-02-22 12:51:57 +07:00
web@ppanel f9d7736e48 feat(site): Added localization support for custom HTML and keyword fields 2025-02-22 12:33:09 +07:00
semantic-release-bot 5b64389544 🔖 chore(release): v1.0.0-beta.17 [skip ci]
# [1.0.0-beta.17](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.16...v1.0.0-beta.17) (2025-02-21)

### 🐛 Bug Fixes

* **auth**: Refactor reset password form to simplify code input and update placeholder text ([23833b4](https://github.com/perfect-panel/ppanel-web/commit/23833b4))
2025-02-21 13:26:11 +00:00
web@ppanel 23833b47d1 🐛 fix(auth): Refactor reset password form to simplify code input and update placeholder text 2025-02-21 20:23:30 +07:00
semantic-release-bot c3eff0a0e7 🔖 chore(release): v1.0.0-beta.16 [skip ci]
# [1.0.0-beta.16](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.15...v1.0.0-beta.16) (2025-02-21)

### 🐛 Bug Fixes

* **auth**: Simplify email verification code input rendering ([6f7bc37](https://github.com/perfect-panel/ppanel-web/commit/6f7bc37))
2025-02-21 13:18:47 +00:00
web@ppanel 6f7bc37233 🐛 fix(auth): Simplify email verification code input rendering 2025-02-21 20:16:02 +07:00
semantic-release-bot b2e8fadaf3 🔖 chore(release): v1.0.0-beta.15 [skip ci]
# [1.0.0-beta.15](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.14...v1.0.0-beta.15) (2025-02-21)

### 🐛 Bug Fixes

* **profile**: Restore filter to ensure only valid OAuth accounts are shown ([315c8f9](https://github.com/perfect-panel/ppanel-web/commit/315c8f9))
2025-02-21 12:59:02 +00:00
web@ppanel 315c8f9afe 🐛 fix(profile): Restore filter to ensure only valid OAuth accounts are shown 2025-02-21 19:55:24 +07:00
semantic-release-bot 0fb0d8bc11 🔖 chore(release): v1.0.0-beta.14 [skip ci]
# [1.0.0-beta.14](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.13...v1.0.0-beta.14) (2025-02-21)

### 🐛 Bug Fixes

* **locales**: Fixed description in multilingual files, updated text related to email registration functionality ([c356bc2](https://github.com/perfect-panel/ppanel-web/commit/c356bc2))
2025-02-21 07:07:36 +00:00
web@ppanel c356bc26ff 🐛 fix(locales): Fixed description in multilingual files, updated text related to email registration functionality 2025-02-21 14:04:15 +07:00
semantic-release-bot 23c974a94d 🔖 chore(release): v1.0.0-beta.13 [skip ci]
# [1.0.0-beta.13](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.12...v1.0.0-beta.13) (2025-02-21)

### 🐛 Bug Fixes

* **api**: Fix type error in API request and add return URL parameter ([ee286dd](https://github.com/perfect-panel/ppanel-web/commit/ee286dd))
2025-02-21 06:03:00 +00:00
web@ppanel ee286dd629 🐛 fix(api): Fix type error in API request and add return URL parameter 2025-02-21 12:59:23 +07:00
semantic-release-bot 4418c47f4f 🔖 chore(release): v1.0.0-beta.12 [skip ci]
# [1.0.0-beta.12](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.11...v1.0.0-beta.12) (2025-02-18)

### 🐛 Bug Fixes

* More bugs ([2d88a3a](https://github.com/perfect-panel/ppanel-web/commit/2d88a3a))
2025-02-18 14:57:24 +00:00
web@ppanel 2d88a3a81d 🐛 fix: More bugs 2025-02-18 21:53:24 +07:00
semantic-release-bot 1f29506179 🔖 chore(release): v1.0.0-beta.11 [skip ci]
# [1.0.0-beta.11](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.10...v1.0.0-beta.11) (2025-02-16)

### 🐛 Bug Fixes

* **email**: Update platform configuration handling to use current ref for consistency ([c90175b](https://github.com/perfect-panel/ppanel-web/commit/c90175b))
2025-02-16 12:09:00 +00:00
web@ppanel c90175b6eb 🐛 fix(email): Update platform configuration handling to use current ref for consistency 2025-02-16 19:06:17 +07:00
semantic-release-bot 5cf573ab03 🔖 chore(release): v1.0.0-beta.10 [skip ci]
# [1.0.0-beta.10](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.9...v1.0.0-beta.10) (2025-02-16)

### 🐛 Bug Fixes

* **subscribe**: Update forms to include refetch functionality and improve toast messages ([fc55e95](https://github.com/perfect-panel/ppanel-web/commit/fc55e95))
2025-02-16 10:14:25 +00:00
web@ppanel fc55e9544d 🐛 fix(subscribe): Update forms to include refetch functionality and improve toast messages 2025-02-16 17:08:34 +07:00
semantic-release-bot 855d1b096f 🔖 chore(release): v1.0.0-beta.9 [skip ci]
# [1.0.0-beta.9](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.8...v1.0.0-beta.9) (2025-02-15)

### 🐛 Bug Fixes

* **register**: Adjust user email verification logic to handle domain suffix checks correctly ([686aa2d](https://github.com/perfect-panel/ppanel-web/commit/686aa2d))
2025-02-15 15:02:16 +00:00
web@ppanel 686aa2d0ba 🐛 fix(register): Adjust user email verification logic to handle domain suffix checks correctly 2025-02-15 21:58:25 +07:00
198 changed files with 1068 additions and 1434 deletions
+153 -34
View File
@@ -1,48 +1,167 @@
<a name="readme-top"></a>
# Changelog
# [1.0.0-beta.8](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.7...v1.0.0-beta.8) (2025-02-15)
### ✨ Features
* **accounts**: Update third-party account binding and unbinding ([1841552](https://github.com/perfect-panel/ppanel-web/commit/1841552))
* **auth-control**: Adding phone number labels to mobile verification configurations in multiple languages ([046740f](https://github.com/perfect-panel/ppanel-web/commit/046740f))
* **auth-control**: Update general ([3883646](https://github.com/perfect-panel/ppanel-web/commit/3883646))
* **auth**: Add type parameter to SendCode and update related API typings ([4198871](https://github.com/perfect-panel/ppanel-web/commit/4198871))
* **auth**: Refactor mobile authentication config to support whitelist functionality ([c761ec7](https://github.com/perfect-panel/ppanel-web/commit/c761ec7))
* **device**: Modify IMEI to device identifier support ([e3f9ef6](https://github.com/perfect-panel/ppanel-web/commit/e3f9ef6))
* **imei**: Add IMEI related internationalization support and menu items ([13c3337](https://github.com/perfect-panel/ppanel-web/commit/13c3337))
* **locales**: Add kick offline confirmation and success messages in multiple languages ([5db5343](https://github.com/perfect-panel/ppanel-web/commit/5db5343))
* **locales**: Update 'sms' to 'mobile' in authentication methods across multiple languages ([fea2171](https://github.com/perfect-panel/ppanel-web/commit/fea2171))
* **log**: Add message log retrieval functionality and update related typings ([1c0ecae](https://github.com/perfect-panel/ppanel-web/commit/1c0ecae))
* **profile**: Update localization strings and enhance third-party account binding ([2d1effb](https://github.com/perfect-panel/ppanel-web/commit/2d1effb))
* **release**: Extend supported platforms for Docker images, closes [#9](https://github.com/perfect-panel/ppanel-web/issues/9) ([e3a31eb](https://github.com/perfect-panel/ppanel-web/commit/e3a31eb))
* **subscription**: Add delete user subscription functionality ([1fc3a10](https://github.com/perfect-panel/ppanel-web/commit/1fc3a10))
* **ui**: Update input components and enhance card minimum width for better layout ([8a02310](https://github.com/perfect-panel/ppanel-web/commit/8a02310))
* **user**: Add user Detail ([3a3d223](https://github.com/perfect-panel/ppanel-web/commit/3a3d223))
* **user**: Add User Detail ([fdaf11b](https://github.com/perfect-panel/ppanel-web/commit/fdaf11b))
# [1.0.0-beta.23](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.22...v1.0.0-beta.23) (2025-02-24)
### 🐛 Bug Fixes
* **auth-control**: Fix citation error for platform values ([c940f3c](https://github.com/perfect-panel/ppanel-web/commit/c940f3c))
* **auth-control**: Fix citation error for platform values ([28813d2](https://github.com/perfect-panel/ppanel-web/commit/28813d2))
* **auth-control**: Rename phone_variable to phone_number in mobile verification configuration ([e5455aa](https://github.com/perfect-panel/ppanel-web/commit/e5455aa))
* **auth**: Update authentication configuration and localization strings ([47f2c58](https://github.com/perfect-panel/ppanel-web/commit/47f2c58))
* **locales**: Update expiration time description from minutes to seconds in multiple languages ([5bac933](https://github.com/perfect-panel/ppanel-web/commit/5bac933))
* **notify**: Ensure user info is updated after notification settings submission ([9bc3a94](https://github.com/perfect-panel/ppanel-web/commit/9bc3a94))
* **notify**: Set default values for notification settings to false ([3652819](https://github.com/perfect-panel/ppanel-web/commit/3652819))
* **third-party-accounts**: Remove mobile display logic from third-party accounts component ([b4946f7](https://github.com/perfect-panel/ppanel-web/commit/b4946f7))
* **third-party-accounts**: Update redirect property name in binding response handling ([012e83a](https://github.com/perfect-panel/ppanel-web/commit/012e83a))
* **user**: Refactor user form validation and reset password fields ([6733fc2](https://github.com/perfect-panel/ppanel-web/commit/6733fc2))
* **user**: Update locales ([4e7d249](https://github.com/perfect-panel/ppanel-web/commit/4e7d249))
* **user**: Update notification and verify code settings ([574b043](https://github.com/perfect-panel/ppanel-web/commit/574b043))
* **auth**: Update email verification logic to use domain suffix check ([62662bb](https://github.com/perfect-panel/ppanel-web/commit/62662bb))
# [1.0.0-beta.22](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.21...v1.0.0-beta.22) (2025-02-23)
### 🐛 Bug Fixes
* **locales**: Removed language file import to clean up unnecessary language support ([68f6ab2](https://github.com/perfect-panel/ppanel-web/commit/68f6ab2))
# [1.0.0-beta.21](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.20...v1.0.0-beta.21) (2025-02-23)
### ✨ Features
* **privacy-policy**: Add privacy policy related text and links ([baa68f0](https://github.com/perfect-panel/ppanel-web/commit/baa68f0))
### 🐛 Bug Fixes
* **locales**: Removed multilingual files to clean up unnecessary language support ([5b151cd](https://github.com/perfect-panel/ppanel-web/commit/5b151cd))
* **locales**: Update custom HTML description in language file, ([87381da](https://github.com/perfect-panel/ppanel-web/commit/87381da))
* **table**: Update privacy policy tab translation key and remove unnecessary requestType from OAuth callback ([14b3af5](https://github.com/perfect-panel/ppanel-web/commit/14b3af5))
<a name="readme-top"></a>
# Changelog
# [1.0.0-beta.20](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.19...v1.0.0-beta.20) (2025-02-23)
### 🐛 Bug Fixes
- **auth**: Add error handling to form submission and reset Turnstile on failure ([715d011](https://github.com/perfect-panel/ppanel-web/commit/715d011))
- **subscribe**: Update subscription domain placeholder to include examples; improve site name retrieval in global store ([c65a44c](https://github.com/perfect-panel/ppanel-web/commit/c65a44c))
# [1.0.0-beta.19](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.18...v1.0.0-beta.19) (2025-02-23)
### ✨ Features
- **form**: Make version field optional and set default value; update site domain placeholder for clarity ([42ba9e8](https://github.com/perfect-panel/ppanel-web/commit/42ba9e8))
### 🐛 Bug Fixes
- **auth**: Refactor forms to use Turnstile ref for reset functionality ([320a7dc](https://github.com/perfect-panel/ppanel-web/commit/320a7dc))
# [1.0.0-beta.18](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.17...v1.0.0-beta.18) (2025-02-22)
### ✨ Features
- **platform**: Update platform naming and add keywords and custom HTML fields ([6384237](https://github.com/perfect-panel/ppanel-web/commit/6384237))
- **site**: Added localization support for custom HTML and keyword fields ([f9d7736](https://github.com/perfect-panel/ppanel-web/commit/f9d7736))
### 🐛 Bug Fixes
- **locales**: Update custom HTML description for clarity across multiple languages ([557c5cd](https://github.com/perfect-panel/ppanel-web/commit/557c5cd))
<a name="readme-top"></a>
# Changelog
# [1.0.0-beta.17](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.16...v1.0.0-beta.17) (2025-02-21)
### 🐛 Bug Fixes
- **auth**: Refactor reset password form to simplify code input and update placeholder text ([23833b4](https://github.com/perfect-panel/ppanel-web/commit/23833b4))
# [1.0.0-beta.16](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.15...v1.0.0-beta.16) (2025-02-21)
### 🐛 Bug Fixes
- **auth**: Simplify email verification code input rendering ([6f7bc37](https://github.com/perfect-panel/ppanel-web/commit/6f7bc37))
# [1.0.0-beta.15](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.14...v1.0.0-beta.15) (2025-02-21)
### 🐛 Bug Fixes
- **profile**: Restore filter to ensure only valid OAuth accounts are shown ([315c8f9](https://github.com/perfect-panel/ppanel-web/commit/315c8f9))
# [1.0.0-beta.14](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.13...v1.0.0-beta.14) (2025-02-21)
### 🐛 Bug Fixes
- **locales**: Fixed description in multilingual files, updated text related to email registration functionality ([c356bc2](https://github.com/perfect-panel/ppanel-web/commit/c356bc2))
# [1.0.0-beta.13](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.12...v1.0.0-beta.13) (2025-02-21)
### 🐛 Bug Fixes
- **api**: Fix type error in API request and add return URL parameter ([ee286dd](https://github.com/perfect-panel/ppanel-web/commit/ee286dd))
<a name="readme-top"></a>
# Changelog
# [1.0.0-beta.12](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.11...v1.0.0-beta.12) (2025-02-18)
### 🐛 Bug Fixes
- More bugs ([2d88a3a](https://github.com/perfect-panel/ppanel-web/commit/2d88a3a))
# [1.0.0-beta.11](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.10...v1.0.0-beta.11) (2025-02-16)
### 🐛 Bug Fixes
- **email**: Update platform configuration handling to use current ref for consistency ([c90175b](https://github.com/perfect-panel/ppanel-web/commit/c90175b))
# [1.0.0-beta.10](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.9...v1.0.0-beta.10) (2025-02-16)
### 🐛 Bug Fixes
- **subscribe**: Update forms to include refetch functionality and improve toast messages ([fc55e95](https://github.com/perfect-panel/ppanel-web/commit/fc55e95))
# [1.0.0-beta.9](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.8...v1.0.0-beta.9) (2025-02-15)
### 🐛 Bug Fixes
- **register**: Adjust user email verification logic to handle domain suffix checks correctly ([686aa2d](https://github.com/perfect-panel/ppanel-web/commit/686aa2d))
# [1.0.0-beta.8](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.7...v1.0.0-beta.8) (2025-02-15)
### ✨ Features
- **accounts**: Update third-party account binding and unbinding ([1841552](https://github.com/perfect-panel/ppanel-web/commit/1841552))
- **auth-control**: Adding phone number labels to mobile verification configurations in multiple languages ([046740f](https://github.com/perfect-panel/ppanel-web/commit/046740f))
- **auth-control**: Update general ([3883646](https://github.com/perfect-panel/ppanel-web/commit/3883646))
- **auth**: Add type parameter to SendCode and update related API typings ([4198871](https://github.com/perfect-panel/ppanel-web/commit/4198871))
- **auth**: Refactor mobile authentication config to support whitelist functionality ([c761ec7](https://github.com/perfect-panel/ppanel-web/commit/c761ec7))
- **device**: Modify IMEI to device identifier support ([e3f9ef6](https://github.com/perfect-panel/ppanel-web/commit/e3f9ef6))
- **imei**: Add IMEI related internationalization support and menu items ([13c3337](https://github.com/perfect-panel/ppanel-web/commit/13c3337))
- **locales**: Add kick offline confirmation and success messages in multiple languages ([5db5343](https://github.com/perfect-panel/ppanel-web/commit/5db5343))
- **locales**: Update 'sms' to 'mobile' in authentication methods across multiple languages ([fea2171](https://github.com/perfect-panel/ppanel-web/commit/fea2171))
- **log**: Add message log retrieval functionality and update related typings ([1c0ecae](https://github.com/perfect-panel/ppanel-web/commit/1c0ecae))
- **profile**: Update localization strings and enhance third-party account binding ([2d1effb](https://github.com/perfect-panel/ppanel-web/commit/2d1effb))
- **release**: Extend supported platforms for Docker images, closes [#9](https://github.com/perfect-panel/ppanel-web/issues/9) ([e3a31eb](https://github.com/perfect-panel/ppanel-web/commit/e3a31eb))
- **subscription**: Add delete user subscription functionality ([1fc3a10](https://github.com/perfect-panel/ppanel-web/commit/1fc3a10))
- **ui**: Update input components and enhance card minimum width for better layout ([8a02310](https://github.com/perfect-panel/ppanel-web/commit/8a02310))
- **user**: Add user Detail ([3a3d223](https://github.com/perfect-panel/ppanel-web/commit/3a3d223))
- **user**: Add User Detail ([fdaf11b](https://github.com/perfect-panel/ppanel-web/commit/fdaf11b))
### 🐛 Bug Fixes
- **auth-control**: Fix citation error for platform values ([c940f3c](https://github.com/perfect-panel/ppanel-web/commit/c940f3c))
- **auth-control**: Fix citation error for platform values ([28813d2](https://github.com/perfect-panel/ppanel-web/commit/28813d2))
- **auth-control**: Rename phone_variable to phone_number in mobile verification configuration ([e5455aa](https://github.com/perfect-panel/ppanel-web/commit/e5455aa))
- **auth**: Update authentication configuration and localization strings ([47f2c58](https://github.com/perfect-panel/ppanel-web/commit/47f2c58))
- **locales**: Update expiration time description from minutes to seconds in multiple languages ([5bac933](https://github.com/perfect-panel/ppanel-web/commit/5bac933))
- **notify**: Ensure user info is updated after notification settings submission ([9bc3a94](https://github.com/perfect-panel/ppanel-web/commit/9bc3a94))
- **notify**: Set default values for notification settings to false ([3652819](https://github.com/perfect-panel/ppanel-web/commit/3652819))
- **third-party-accounts**: Remove mobile display logic from third-party accounts component ([b4946f7](https://github.com/perfect-panel/ppanel-web/commit/b4946f7))
- **third-party-accounts**: Update redirect property name in binding response handling ([012e83a](https://github.com/perfect-panel/ppanel-web/commit/012e83a))
- **user**: Refactor user form validation and reset password fields ([6733fc2](https://github.com/perfect-panel/ppanel-web/commit/6733fc2))
- **user**: Update locales ([4e7d249](https://github.com/perfect-panel/ppanel-web/commit/4e7d249))
- **user**: Update notification and verify code settings ([574b043](https://github.com/perfect-panel/ppanel-web/commit/574b043))
### 💄 Styles
* **dashboard**: Enhance card components with full height and improved empty state handling ([7e1d551](https://github.com/perfect-panel/ppanel-web/commit/7e1d551))
- **dashboard**: Enhance card components with full height and improved empty state handling ([7e1d551](https://github.com/perfect-panel/ppanel-web/commit/7e1d551))
<a name="readme-top"></a>
+13 -4
View File
@@ -5,10 +5,10 @@ import { Form, FormControl, FormField, FormItem, FormMessage } from '@workspace/
import { Input } from '@workspace/ui/components/input';
import { Icon } from '@workspace/ui/custom-components/icon';
import { useTranslations } from 'next-intl';
import { Dispatch, SetStateAction } from 'react';
import { Dispatch, SetStateAction, useRef } from 'react';
import { useForm } from 'react-hook-form';
import { z } from 'zod';
import CloudFlareTurnstile from '../turnstile';
import CloudFlareTurnstile, { TurnstileRef } from '../turnstile';
export default function LoginForm({
loading,
@@ -38,10 +38,19 @@ export default function LoginForm({
defaultValues: initialValues,
});
const turnstile = useRef<TurnstileRef>(null);
const handleSubmit = form.handleSubmit((data) => {
try {
onSubmit(data);
} catch (error) {
turnstile.current?.reset();
}
});
return (
<>
<Form {...form}>
<form onSubmit={form.handleSubmit(onSubmit)} className='grid gap-6'>
<form onSubmit={handleSubmit} className='grid gap-6'>
<FormField
control={form.control}
name='email'
@@ -73,7 +82,7 @@ export default function LoginForm({
render={({ field }) => (
<FormItem>
<FormControl>
<CloudFlareTurnstile id='login' {...field} />
<CloudFlareTurnstile id='login' {...field} ref={turnstile} />
</FormControl>
<FormMessage />
</FormItem>
+24 -10
View File
@@ -6,11 +6,11 @@ import { Input } from '@workspace/ui/components/input';
import { Icon } from '@workspace/ui/custom-components/icon';
import { Markdown } from '@workspace/ui/custom-components/markdown';
import { useTranslations } from 'next-intl';
import { Dispatch, SetStateAction } from 'react';
import { Dispatch, SetStateAction, useRef } from 'react';
import { useForm } from 'react-hook-form';
import { z } from 'zod';
import SendCode from '../send-code';
import CloudFlareTurnstile from '../turnstile';
import CloudFlareTurnstile, { TurnstileRef } from '../turnstile';
export default function RegisterForm({
loading,
@@ -31,11 +31,10 @@ export default function RegisterForm({
const handleCheckUser = async (email: string) => {
try {
if (!auth.email.enable_domain_suffix) return true;
const domain = email.split('@')[1];
const isValid =
!auth.email.enable_verify ||
auth.email?.domain_suffix_list.split('\n').includes(domain || '');
return !isValid;
const isValid = auth.email?.domain_suffix_list.split('\n').includes(domain || '');
return isValid;
} catch (error) {
console.log('Error checking user:', error);
return false;
@@ -53,7 +52,7 @@ export default function RegisterForm({
password: z.string(),
repeat_password: z.string(),
code: auth.email.enable_verify ? z.string() : z.string().nullish(),
invite: invite.forced_invite ? z.string() : z.string().nullish(),
invite: invite.forced_invite ? z.string().min(1) : z.string().nullish(),
cf_token:
verify.enable_register_verify && verify.turnstile_site_key
? z.string()
@@ -77,13 +76,22 @@ export default function RegisterForm({
},
});
const turnstile = useRef<TurnstileRef>(null);
const handleSubmit = form.handleSubmit((data) => {
try {
onSubmit(data);
} catch (error) {
turnstile.current?.reset();
}
});
return (
<>
{auth.register.stop_register ? (
<Markdown>{t('message')}</Markdown>
) : (
<Form {...form}>
<form onSubmit={form.handleSubmit(onSubmit)} className='grid gap-6'>
<form onSubmit={handleSubmit} className='grid gap-6'>
<FormField
control={form.control}
name='email'
@@ -114,7 +122,12 @@ export default function RegisterForm({
render={({ field }) => (
<FormItem>
<FormControl>
<Input placeholder='Enter password again...' type='password' {...field} />
<Input
disabled={loading}
placeholder='Enter password again...'
type='password'
{...field}
/>
</FormControl>
<FormMessage />
</FormItem>
@@ -129,6 +142,7 @@ export default function RegisterForm({
<FormControl>
<div className='flex items-center gap-2'>
<Input
disabled={loading}
placeholder='Enter code...'
type='text'
{...field}
@@ -172,7 +186,7 @@ export default function RegisterForm({
render={({ field }) => (
<FormItem>
<FormControl>
<CloudFlareTurnstile id='register' {...field} />
<CloudFlareTurnstile id='register' {...field} ref={turnstile} />
</FormControl>
<FormMessage />
</FormItem>
+42 -35
View File
@@ -5,11 +5,11 @@ import { Form, FormControl, FormField, FormItem, FormMessage } from '@workspace/
import { Input } from '@workspace/ui/components/input';
import { Icon } from '@workspace/ui/custom-components/icon';
import { useTranslations } from 'next-intl';
import { Dispatch, SetStateAction } from 'react';
import { Dispatch, SetStateAction, useRef } from 'react';
import { useForm } from 'react-hook-form';
import { z } from 'zod';
import SendCode from '../send-code';
import CloudFlareTurnstile from '../turnstile';
import CloudFlareTurnstile, { TurnstileRef } from '../turnstile';
export default function ResetForm({
loading,
@@ -43,10 +43,19 @@ export default function ResetForm({
defaultValues: initialValues,
});
const turnstile = useRef<TurnstileRef>(null);
const handleSubmit = form.handleSubmit((data) => {
try {
onSubmit(data);
} catch (error) {
turnstile.current?.reset();
}
});
return (
<>
<Form {...form}>
<form onSubmit={form.handleSubmit(onSubmit)} className='grid gap-6'>
<form onSubmit={handleSubmit} className='grid gap-6'>
<FormField
control={form.control}
name='email'
@@ -61,45 +70,43 @@ export default function ResetForm({
/>
<FormField
control={form.control}
name='password'
name='code'
render={({ field }) => (
<FormItem>
<FormControl>
<Input placeholder='Enter your password...' type='password' {...field} />
<div className='flex items-center gap-2'>
<Input
disabled={loading}
placeholder='Enter code...'
type='text'
{...field}
value={field.value as string}
/>
<SendCode
type='email'
params={{
...form.getValues(),
type: 2,
}}
/>
</div>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='password'
render={({ field }) => (
<FormItem>
<FormControl>
<Input placeholder='Enter your new password...' type='password' {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
{auth?.email?.enable_verify && (
<FormField
control={form.control}
name='code'
render={({ field }) => (
<FormItem>
<FormControl>
<div className='flex items-center gap-2'>
<Input
placeholder='Enter code...'
type='text'
{...field}
value={field.value as string}
/>
<SendCode
type='email'
params={{
...form.getValues(),
type: 2,
}}
/>
</div>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
)}
{verify.enable_reset_password_verify && (
<FormField
control={form.control}
@@ -107,7 +114,7 @@ export default function ResetForm({
render={({ field }) => (
<FormItem>
<FormControl>
<CloudFlareTurnstile id='reset' {...field} />
<CloudFlareTurnstile id='reset' {...field} ref={turnstile} />
</FormControl>
<FormMessage />
</FormItem>
+26 -12
View File
@@ -1,26 +1,38 @@
'use client';
import useGlobalStore from '@/config/use-global';
import { useLocale } from 'next-intl';
import { useTheme } from 'next-themes';
import { useEffect } from 'react';
import { forwardRef, useEffect, useImperativeHandle } from 'react';
import Turnstile, { useTurnstile } from 'react-turnstile';
export default function CloudFlareTurnstile({
id,
value,
onChange,
}: {
id?: string;
value?: null | string;
onChange: (value?: string) => void;
}) {
import useGlobalStore from '@/config/use-global';
export type TurnstileRef = {
reset: () => void;
};
const CloudFlareTurnstile = forwardRef<
TurnstileRef,
{
id?: string;
value?: null | string;
onChange: (value?: string) => void;
}
>(function CloudFlareTurnstile({ id, value, onChange }, ref) {
const { common } = useGlobalStore();
const { verify } = common;
const { resolvedTheme } = useTheme();
const locale = useLocale();
const turnstile = useTurnstile();
useImperativeHandle(
ref,
() => ({
reset: () => turnstile.reset(),
}),
[turnstile],
);
useEffect(() => {
if (value === '') {
turnstile.reset();
@@ -51,4 +63,6 @@ export default function CloudFlareTurnstile({
/>
)
);
}
});
export default CloudFlareTurnstile;
@@ -23,12 +23,12 @@ export default function Page() {
},
});
async function updateConfig(key: keyof API.UpdataAuthMethodConfigRequest, value: unknown) {
async function updateConfig(key: keyof API.UpdateAuthMethodConfigRequest, value: unknown) {
try {
await updateAuthMethodConfig({
...data,
[key]: value,
} as API.UpdataAuthMethodConfigRequest);
} as API.UpdateAuthMethodConfigRequest);
toast.success(t('saveSuccess'));
refetch();
} catch (error) {
@@ -21,12 +21,12 @@ export default function Page() {
},
});
async function updateConfig(key: keyof API.UpdataAuthMethodConfigRequest, value: unknown) {
async function updateConfig(key: keyof API.UpdateAuthMethodConfigRequest, value: unknown) {
try {
await updateAuthMethodConfig({
...data,
[key]: value,
} as API.UpdataAuthMethodConfigRequest);
} as API.UpdateAuthMethodConfigRequest);
toast.success(t('saveSuccess'));
refetch();
} catch (error) {
@@ -48,7 +48,7 @@ export default function Page() {
await updateAuthMethodConfig({
...ref.current,
[key]: value,
} as API.UpdataAuthMethodConfigRequest);
} as API.UpdateAuthMethodConfigRequest);
toast.success(t('saveSuccess'));
refetch();
} catch (error) {
@@ -159,7 +159,7 @@ export default function Page() {
updateConfig('config', {
...data?.config,
platform_config: {
...data?.platform_config,
...ref.current?.config?.platform_config,
port: value,
},
})
@@ -181,7 +181,7 @@ export default function Page() {
updateConfig('config', {
...data?.config,
platform_config: {
...data?.platform_config,
...ref.current?.config?.platform_config,
ssl: checked,
},
})
@@ -202,7 +202,7 @@ export default function Page() {
updateConfig('config', {
...data?.config,
platform_config: {
...data?.platform_config,
...ref.current?.config?.platform_config,
user: value,
},
})
@@ -224,7 +224,7 @@ export default function Page() {
updateConfig('config', {
...data?.config,
platform_config: {
...data?.platform_config,
...ref.current?.config?.platform_config,
pass: value,
},
})
@@ -245,7 +245,7 @@ export default function Page() {
updateConfig('config', {
...data?.config,
platform_config: {
...data?.platform_config,
...ref.current?.config?.platform_config,
from: value,
},
})
@@ -22,12 +22,12 @@ export default function Page() {
},
});
async function updateConfig(key: keyof API.UpdataAuthMethodConfigRequest, value: unknown) {
async function updateConfig(key: keyof API.UpdateAuthMethodConfigRequest, value: unknown) {
try {
await updateAuthMethodConfig({
...data,
[key]: value,
} as API.UpdataAuthMethodConfigRequest);
} as API.UpdateAuthMethodConfigRequest);
toast.success(t('saveSuccess'));
refetch();
} catch (error) {
@@ -51,7 +51,7 @@ export function Verify() {
<TableCell className='text-right'>
<EnhancedInput
placeholder={t('inputPlaceholder')}
defaultValue={data?.turnstile_site_key}
value={data?.turnstile_site_key}
onValueBlur={(value) => updateConfig('turnstile_site_key', value)}
/>
</TableCell>
@@ -64,7 +64,7 @@ export function Verify() {
<TableCell className='text-right'>
<EnhancedInput
placeholder={t('inputPlaceholder')}
defaultValue={data?.turnstile_secret}
value={data?.turnstile_secret}
onValueBlur={(value) => updateConfig('turnstile_secret', value)}
/>
</TableCell>
@@ -22,12 +22,12 @@ export default function Page() {
},
});
async function updateConfig(key: keyof API.UpdataAuthMethodConfigRequest, value: unknown) {
async function updateConfig(key: keyof API.UpdateAuthMethodConfigRequest, value: unknown) {
try {
await updateAuthMethodConfig({
...data,
[key]: value,
} as API.UpdataAuthMethodConfigRequest);
} as API.UpdateAuthMethodConfigRequest);
toast.success(t('saveSuccess'));
refetch();
} catch (error) {
@@ -22,12 +22,12 @@ export default function Page() {
},
});
async function updateConfig(key: keyof API.UpdataAuthMethodConfigRequest, value: unknown) {
async function updateConfig(key: keyof API.UpdateAuthMethodConfigRequest, value: unknown) {
try {
await updateAuthMethodConfig({
...data,
[key]: value,
} as API.UpdataAuthMethodConfigRequest);
} as API.UpdateAuthMethodConfigRequest);
toast.success(t('saveSuccess'));
refetch();
} catch (error) {
@@ -61,7 +61,7 @@ export default function Page() {
await updateAuthMethodConfig({
...data,
[key]: value,
} as API.UpdataAuthMethodConfigRequest);
} as API.UpdateAuthMethodConfigRequest);
toast.success(t('updateSuccess'));
refetch();
} catch (error) {
@@ -22,12 +22,12 @@ export default function Page() {
},
});
async function updateConfig(key: keyof API.UpdataAuthMethodConfigRequest, value: unknown) {
async function updateConfig(key: keyof API.UpdateAuthMethodConfigRequest, value: unknown) {
try {
await updateAuthMethodConfig({
...data,
[key]: value,
} as API.UpdataAuthMethodConfigRequest);
} as API.UpdateAuthMethodConfigRequest);
toast.success(t('saveSuccess'));
refetch();
} catch (error) {
@@ -50,7 +50,7 @@ const defaultValues = {
const versionSchema = z.object({
url: z.string(),
version: z.string(),
version: z.string().optional(),
description: z.string().optional(),
is_default: z.boolean().optional(),
});
@@ -221,6 +221,7 @@ export default function SubscribeAppForm<
name: 'version',
type: 'text',
placeholder: t('version'),
defaultValue: '1.0.0',
},
{
name: 'description',
@@ -251,7 +252,10 @@ export default function SubscribeAppForm<
]}
value={field.value}
onChange={(value) => {
form.setValue(field.name, value);
form.setValue(
field.name,
value.filter((item) => item.url),
);
}}
/>
</FormControl>
@@ -30,7 +30,7 @@ export default function SubscribeConfig() {
...data,
[key]: value,
} as API.SubscribeConfig);
toast.success(t('saveSuccess'));
toast.success(t('updateSuccess'));
refetch();
} catch (error) {
/* empty */
@@ -92,7 +92,7 @@ export default function SubscribeConfig() {
<TableCell className='text-right'>
<Textarea
className='h-52'
placeholder={t('subscriptionDomainPlaceholder')}
placeholder={`${t('subscriptionDomainPlaceholder')}\nexample.com\nwww.example.com`}
defaultValue={data?.subscribe_domain}
onBlur={(e) => {
updateConfig('subscribe_domain', e.target.value);
@@ -105,7 +105,7 @@ export default function SubscribeForm<T extends Record<string, any>>({
server_group: z.array(z.number()).optional().default([]),
server: z.array(z.number()).optional().default([]),
deduction_ratio: z.number().optional().default(0),
purchase_with_discount: z.boolean().optional().default(false),
allow_deduction: z.boolean().optional().default(false),
reset_cycle: z.number().optional().default(0),
renewal_reset: z.boolean().optional().default(false),
});
@@ -639,7 +639,7 @@ export default function SubscribeForm<T extends Record<string, any>>({
/>
<FormField
control={form.control}
name='purchase_with_discount'
name='allow_deduction'
render={({ field }) => (
<FormItem>
<div className='flex items-center justify-between'>
+5
View File
@@ -1,6 +1,7 @@
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@workspace/ui/components/tabs';
import { getTranslations } from 'next-intl/server';
import Currency from './currency';
import PrivacyPolicy from './privacy-policy';
import Site from './site';
import Tos from './tos';
@@ -13,6 +14,7 @@ export default async function Page() {
<TabsTrigger value='site'>{t('tabs.site')}</TabsTrigger>
<TabsTrigger value='currency'>{t('tabs.currency')}</TabsTrigger>
<TabsTrigger value='tos'>{t('tabs.tos')}</TabsTrigger>
<TabsTrigger value='privacy-policy'>{t('privacy-policy.title')}</TabsTrigger>
</TabsList>
<TabsContent value='site'>
<Site />
@@ -23,6 +25,9 @@ export default async function Page() {
<TabsContent value='tos'>
<Tos />
</TabsContent>
<TabsContent value='privacy-policy'>
<PrivacyPolicy />
</TabsContent>
</Tabs>
);
}
@@ -0,0 +1,48 @@
'use client';
import { getPrivacyPolicyConfig, updatePrivacyPolicyConfig } from '@/services/admin/system';
import { useQuery } from '@tanstack/react-query';
import { MarkdownEditor } from '@workspace/ui/custom-components/editor';
import { useTranslations } from 'next-intl';
import { toast } from 'sonner';
export default function PrivacyPolicy() {
const t = useTranslations('system.privacy-policy');
const { data, refetch, isFetched } = useQuery({
queryKey: ['getPrivacyPolicyConfig'],
queryFn: async () => {
const { data } = await getPrivacyPolicyConfig();
return data.data;
},
});
async function updateConfig(key: string, value: unknown) {
if (data?.[key] === value) return;
try {
await updatePrivacyPolicyConfig({
...data,
[key]: value,
} as API.PrivacyPolicyConfig);
toast.success(t('saveSuccess'));
refetch();
} catch (error) {
/* empty */
}
}
return (
isFetched && (
<div className='h-[calc(100dvh-132px-env(safe-area-inset-top))] overflow-hidden'>
<MarkdownEditor
title={t('title')}
value={data?.privacy_policy}
onBlur={(value) => {
if (data?.privacy_policy !== value) {
updateConfig('privacy_policy', value);
}
}}
/>
</div>
)
);
}
+30 -1
View File
@@ -85,6 +85,35 @@ export default function Site() {
/>
</TableCell>
</TableRow>
<TableRow>
<TableCell>
<Label>{t('keywords')}</Label>
<p className='text-muted-foreground text-xs'>{t('keywordsDescription')}</p>
</TableCell>
<TableCell className='text-right'>
<EnhancedInput
placeholder={t('keywordsDescription')}
value={data?.keywords}
onValueBlur={(value) => updateConfig('keywords', value)}
/>
</TableCell>
</TableRow>
<TableRow>
<TableCell className='align-top'>
<Label>{t('customHtml')}</Label>
<p className='text-muted-foreground text-xs'>{t('customHtmlDescription')}</p>
</TableCell>
<TableCell className='text-right'>
<Textarea
className='h-52'
placeholder={t('customHtmlDescription')}
defaultValue={data?.custom_html}
onBlur={(e) => {
updateConfig('custom_html', e.target.value);
}}
/>
</TableCell>
</TableRow>
<TableRow>
<TableCell className='align-top'>
<Label>{t('siteDomain')}</Label>
@@ -93,7 +122,7 @@ export default function Site() {
<TableCell className='text-right'>
<Textarea
className='h-52'
placeholder={t('siteDomainPlaceholder')}
placeholder={`${t('siteDomainPlaceholder')}\nexample.com\nwww.example.com`}
defaultValue={data?.host}
onBlur={(e) => {
updateConfig('host', e.target.value);
@@ -13,7 +13,7 @@ import { useTranslations } from 'next-intl';
import { useState } from 'react';
import { toast } from 'sonner';
export function AuthMethodsForm({ user }: { user: API.User }) {
export function AuthMethodsForm({ user, refetch }: { user: API.User; refetch: () => void }) {
const t = useTranslations('user');
const [emailChanges, setEmailChanges] = useState<Record<string, string>>({});
@@ -33,6 +33,7 @@ export function AuthMethodsForm({ user }: { user: API.User }) {
auth_identifier: email,
});
toast.success(t('updateSuccess'));
refetch();
};
const handleCreateEmail = async (email: string) => {
@@ -42,6 +43,7 @@ export function AuthMethodsForm({ user }: { user: API.User }) {
auth_identifier: email,
});
toast.success(t('createSuccess'));
refetch();
};
const handleEmailChange = (authType: string, value: string) => {
@@ -37,7 +37,7 @@ const basicInfoSchema = z.object({
type BasicInfoValues = z.infer<typeof basicInfoSchema>;
export function BasicInfoForm({ user }: { user: API.User }) {
export function BasicInfoForm({ user, refetch }: { user: API.User; refetch: () => void }) {
const t = useTranslations('user');
const { common } = useGlobalStore();
@@ -64,6 +64,7 @@ export function BasicInfoForm({ user }: { user: API.User }) {
...data,
} as API.UpdateUserBasiceInfoRequest);
toast.success(t('updateSuccess'));
refetch();
}
return (
@@ -10,7 +10,7 @@ import { NotifySettingsForm } from './notify-settings-form';
export function UserProfileForm() {
const { id } = useParams<{ id: string }>();
const { data: user } = useQuery({
const { data: user, refetch } = useQuery({
queryKey: ['user', id],
queryFn: async () => {
const { data } = await getUserDetail({
@@ -25,13 +25,13 @@ export function UserProfileForm() {
return (
<div className='grid gap-4 md:grid-cols-2 xl:grid-cols-3'>
<div className='md:col-span-2 xl:col-span-1'>
<BasicInfoForm user={user} />
<BasicInfoForm user={user} refetch={refetch} />
</div>
<div>
<NotifySettingsForm user={user} />
<NotifySettingsForm user={user} refetch={refetch} />
</div>
<div>
<AuthMethodsForm user={user} />
<AuthMethodsForm user={user} refetch={refetch} />
</div>
</div>
);
@@ -20,7 +20,7 @@ const notifySettingsSchema = z.object({
type NotifySettingsValues = z.infer<typeof notifySettingsSchema>;
export function NotifySettingsForm({ user }: { user: API.User }) {
export function NotifySettingsForm({ user, refetch }: { user: API.User; refetch: () => void }) {
const t = useTranslations('user');
const form = useForm<NotifySettingsValues>({
@@ -39,6 +39,7 @@ export function NotifySettingsForm({ user }: { user: API.User }) {
user_id: user.id,
});
toast.success(t('updateSuccess'));
refetch();
}
return (
@@ -143,7 +143,7 @@ export function SubscriptionDetail({
header: 'ID',
},
{
accessorKey: 'imei',
accessorKey: 'identifier',
header: 'IMEI',
},
{
@@ -182,7 +182,7 @@ export function SubscriptionDetail({
}}
actions={{
render: (row) => {
if (!row.imei) return [];
if (!row.identifier) return [];
return [
<ConfirmButton
key='offline'
+29 -4
View File
@@ -11,13 +11,38 @@ import {
} from '@workspace/ui/components/select';
import { Icon } from '@workspace/ui/custom-components/icon';
import { getCountry } from '@workspace/ui/utils';
import { useLocale, useTranslations } from 'next-intl';
import { useLocale } from 'next-intl';
import { useRouter } from 'next/navigation';
const languages = {
'cs-CZ': 'Čeština',
'de-DE': 'Deutsch',
'en-US': 'English',
'es-ES': 'Español',
'es-MX': 'Español (México)',
'fa-IR': 'فارسی',
'fi-FI': 'Suomi',
'fr-FR': 'Français',
'hi-IN': 'हिन्दी',
'hu-HU': 'Magyar',
'ja-JP': '日本語',
'ko-KR': '한국어',
'no-NO': 'Norsk',
'pl-PL': 'Polski',
'pt-BR': 'Português (Brasil)',
'ro-RO': 'Română',
'ru-RU': 'Русский',
'th-TH': 'ไทย',
'tr-TR': 'Türkçe',
'uk-UA': 'Українська',
'vi-VN': 'Tiếng Việt',
'zh-CN': '简体中文',
'zh-HK': '繁體中文',
} as const;
export default function LanguageSwitch() {
const locale = useLocale();
const country = getCountry(locale);
const t = useTranslations('language');
const router = useRouter();
const handleLanguageChange = (value: string) => {
@@ -31,7 +56,7 @@ export default function LanguageSwitch() {
<SelectValue>
<div className='flex items-center'>
<Icon icon={`flagpack:${country?.alpha2.toLowerCase()}`} className='!size-5' />
<span className='sr-only'>{t(`${locale}`)}</span>
<span className='sr-only'>{languages[locale as keyof typeof languages]}</span>
</div>
</SelectValue>
</SelectTrigger>
@@ -40,7 +65,7 @@ export default function LanguageSwitch() {
<SelectItem key={`${item?.lang}-${item?.alpha2}`} value={`${item?.lang}-${item?.alpha2}`}>
<div className='flex items-center gap-2'>
<Icon icon={`flagpack:${item?.alpha2.toLowerCase()}`} className='!size-5' />
{t(`${item?.lang}-${item?.alpha2}`)}
{languages[`${item?.lang}-${item?.alpha2}` as keyof typeof languages]}
</div>
</SelectItem>
))}
+2
View File
@@ -14,6 +14,8 @@ export const useGlobalStore = create<GlobalStore>((set) => ({
site_name: '',
site_desc: '',
site_logo: '',
keywords: '',
custom_html: '',
},
verify: {
turnstile_site_key: '',
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "Ověření e-mailu",
"emailVerificationDescription": "Když je povoleno, uživatelé budou muset ověřit svůj e-mail",
"enable": "Povolit",
"enableDescription": "Po povolení budou povoleny funkce registrace, přihlášení, připojení a odpojení mobilního telefonu",
"enableDescription": "Po aktivaci budou povoleny funkce registrace e-mailem, přihlášení, propojení a odpojení.",
"expiration_email_template": "Šablona oznámení o vypršení platnosti",
"expiration_email_templateDescription": "Zástupné symboly {after}.variable{before} budou nahrazeny skutečnými daty. Ujistěte se, že tyto proměnné zachováte.",
"failed": "Neúspěch",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "čeština",
"de-DE": "němčina",
"en-US": "angličtina",
"es-ES": "španělština",
"es-MX": "španělština (Mexiko)",
"fa-IR": "Perština",
"fi-FI": "finština",
"fr-FR": "Francouzština",
"hi-IN": "hindština",
"hu-HU": "maďarština",
"ja-JP": "Japonština",
"ko-KR": "Korejština",
"no-NO": "norština",
"pl-PL": "polština",
"pt-BR": "portugalština (Brazílie)",
"ro-RO": "rumunština",
"ru-RU": "ruština",
"th-TH": "thajština",
"tr-TR": "turečtina",
"uk-UA": "Ukrajinština",
"vi-VN": "Vietnamština",
"zh-CN": "čeština (CS)",
"zh-HK": "čínština (tradiční)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Pouze pro zobrazení, po změně se změní všechny měnové jednotky v systému",
"saveSuccess": "Úspěšně uloženo"
},
"privacy-policy": {
"saveSuccess": "Uložení bylo úspěšné",
"title": "Zásady ochrany osobních údajů"
},
"site": {
"customHtml": "Vlastní HTML",
"customHtmlDescription": "Vlastní HTML kód, který bude vložen na konec tagu body na stránce.",
"keywords": "Klíčová slova",
"keywordsDescription": "Používá se pro SEO účely",
"logo": "LOGO",
"logoDescription": "Používá se k zobrazení místa, kde je potřeba zobrazit LOGO",
"logoPlaceholder": "Zadejte URL adresu LOGA, nekončete '/'",
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "E-Mail-Verifizierung",
"emailVerificationDescription": "Wenn aktiviert, müssen Benutzer ihre E-Mail-Adresse verifizieren",
"enable": "Aktivieren",
"enableDescription": "Nach der Aktivierung werden die Funktionen zur Registrierung, Anmeldung, Bindung und Entbindung von Mobiltelefonen aktiviert",
"enableDescription": "Nach der Aktivierung werden die Funktionen zur E-Mail-Registrierung, Anmeldung, Bindung und Entbindung aktiviert.",
"expiration_email_template": "Vorlage für Ablaufbenachrichtigung",
"expiration_email_templateDescription": "Die Platzhalter {after}.variable{before} werden durch tatsächliche Daten ersetzt. Stellen Sie sicher, dass Sie diese Variablen beibehalten.",
"failed": "Fehlgeschlagen",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "Tschechisch",
"de-DE": "Deutsch",
"en-US": "Englisch",
"es-ES": "Spanisch",
"es-MX": "Spanisch (Mexiko)",
"fa-IR": "Persisch",
"fi-FI": "Finnisch",
"fr-FR": "Französisch",
"hi-IN": "Hindi",
"hu-HU": "Ungarisch",
"ja-JP": "Japanisch",
"ko-KR": "Koreanisch",
"no-NO": "Norwegisch",
"pl-PL": "Polnisch",
"pt-BR": "Portugiesisch (Brasilien)",
"ro-RO": "Rumänisch",
"ru-RU": "Russisch",
"th-TH": "Thailändisch",
"tr-TR": "Türkisch",
"uk-UA": "Ukrainisch",
"vi-VN": "Vietnamesisch",
"zh-CN": "Chinesisch (vereinfacht)",
"zh-HK": "Chinesisch (Traditionell)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Nur zur Anzeige verwendet, nach der Änderung werden alle Währungseinheiten im System geändert",
"saveSuccess": "Erfolgreich gespeichert"
},
"privacy-policy": {
"saveSuccess": "Erfolgreich gespeichert",
"title": "Datenschutzrichtlinie"
},
"site": {
"customHtml": "Benutzerdefiniertes HTML",
"customHtmlDescription": "Benutzerdefinierter HTML-Code, der am Ende des body-Tags der Seite eingefügt werden soll.",
"keywords": "Schlüsselwörter",
"keywordsDescription": "Für SEO-Zwecke verwendet",
"logo": "LOGO",
"logoDescription": "Position zur Anzeige des LOGOs",
"logoPlaceholder": "Bitte geben Sie die URL-Adresse des LOGOs ein, ohne '/' am Ende",
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "Email Verification",
"emailVerificationDescription": "When enabled, users will need to verify their email",
"enable": "Enable",
"enableDescription": "After enabling, mobile phone registration, login, binding, and unbinding functions will be enabled",
"enableDescription": "After enabling, email registration, login, binding, and unbinding functions will be enabled",
"expiration_email_template": "Expiration Notice Template",
"expiration_email_templateDescription": "The {after}.variable{before} placeholders will be replaced with actual data. Ensure to keep these variables.",
"failed": "Failed",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "Czech",
"de-DE": "German",
"en-US": "English",
"es-ES": "Spanish",
"es-MX": "Spanish (Mexico)",
"fa-IR": "Persian",
"fi-FI": "Finnish",
"fr-FR": "French",
"hi-IN": "Hindi",
"hu-HU": "Hungarian",
"ja-JP": "Japanese",
"ko-KR": "Korean",
"no-NO": "Norwegian",
"pl-PL": "Polish",
"pt-BR": "Portuguese (Brazil)",
"ro-RO": "Romanian",
"ru-RU": "Russian",
"th-TH": "Thai",
"tr-TR": "Turkish",
"uk-UA": "Ukrainian",
"vi-VN": "Vietnamese",
"zh-CN": "Chinese (Simplified)",
"zh-HK": "Chinese (Traditional)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Used for display purposes only; changing this will affect all currency units in the system",
"saveSuccess": "Save Successful"
},
"privacy-policy": {
"saveSuccess": "Save Successful",
"title": "Privacy Policy"
},
"site": {
"customHtml": "Custom HTML",
"customHtmlDescription": "Custom HTML code to be injected into the bottom of the site's body tag.",
"keywords": "Keywords",
"keywordsDescription": "Used for SEO purposes",
"logo": "Logo",
"logoDescription": "Used for displaying the logo in designated locations",
"logoPlaceholder": "Enter the URL of the logo, without ending with '/'",
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "Verificación de correo electrónico",
"emailVerificationDescription": "Cuando esté habilitado, los usuarios deberán verificar su correo electrónico",
"enable": "Habilitar",
"enableDescription": "Después de habilitar, se activarán las funciones de registro, inicio de sesión, vinculación y desvinculación de teléfonos móviles",
"enableDescription": "Después de habilitar, se activarán las funciones de registro por correo electrónico, inicio de sesión, vinculación y desvinculación.",
"expiration_email_template": "Plantilla de Aviso de Vencimiento",
"expiration_email_templateDescription": "Los marcadores de posición {after}.variable{before} serán reemplazados con datos reales. Asegúrate de mantener estas variables.",
"failed": "Fallido",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "Checo",
"de-DE": "Alemán",
"en-US": "inglés",
"es-ES": "español",
"es-MX": "Español (México)",
"fa-IR": "Persa",
"fi-FI": "Finlandés",
"fr-FR": "Francés",
"hi-IN": "hindi",
"hu-HU": "húngaro",
"ja-JP": "Japonés",
"ko-KR": "Coreano",
"no-NO": "Noruego",
"pl-PL": "Polaco",
"pt-BR": "portugués (Brasil)",
"ro-RO": "Rumano",
"ru-RU": "Ruso",
"th-TH": "Tailandés",
"tr-TR": "turco",
"uk-UA": "Ucraniano",
"vi-VN": "Vietnamita",
"zh-CN": "Español (España)",
"zh-HK": "chino (tradicional)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Solo para uso de visualización, al cambiarlo se modificarán todas las unidades monetarias en el sistema",
"saveSuccess": "Guardado exitosamente"
},
"privacy-policy": {
"saveSuccess": "Guardado con éxito",
"title": "Política de Privacidad"
},
"site": {
"customHtml": "HTML personalizado",
"customHtmlDescription": "Código HTML personalizado que se inyectará en la parte inferior de la etiqueta body del sitio.",
"keywords": "Palabras clave",
"keywordsDescription": "Utilizado para fines de SEO",
"logo": "LOGO",
"logoDescription": "Se utiliza para mostrar la ubicación donde se debe mostrar el LOGO",
"logoPlaceholder": "Por favor, introduce la URL del LOGO, no termines con '/'",
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "Verificación de Correo Electrónico",
"emailVerificationDescription": "Cuando esté habilitado, los usuarios deberán verificar su correo electrónico",
"enable": "Habilitar",
"enableDescription": "Después de habilitar, se activarán las funciones de registro, inicio de sesión, vinculación y desvinculación de teléfonos móviles",
"enableDescription": "Después de habilitar, se activarán las funciones de registro por correo electrónico, inicio de sesión, vinculación y desvinculación.",
"expiration_email_template": "Plantilla de Aviso de Vencimiento",
"expiration_email_templateDescription": "Los marcadores de posición {after}.variable{before} serán reemplazados con datos reales. Asegúrate de mantener estas variables.",
"failed": "Fallido",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "Checo",
"de-DE": "Alemán",
"en-US": "inglés",
"es-ES": "español",
"es-MX": "Español (México)",
"fa-IR": "Persa",
"fi-FI": "Finlandés",
"fr-FR": "Francés",
"hi-IN": "Hindi",
"hu-HU": "Húngaro",
"ja-JP": "Japonés",
"ko-KR": "Coreano",
"no-NO": "Noruego",
"pl-PL": "Polaco",
"pt-BR": "portugués (Brasil)",
"ro-RO": "Rumano",
"ru-RU": "Ruso",
"th-TH": "Tailandés",
"tr-TR": "turco",
"uk-UA": "Ucraniano",
"vi-VN": "Vietnamita",
"zh-CN": "español (México)",
"zh-HK": "Chino (Tradicional)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Solo para fines de visualización, cambiarlo alterará todas las unidades monetarias en el sistema",
"saveSuccess": "Guardado exitosamente"
},
"privacy-policy": {
"saveSuccess": "Guardado exitoso",
"title": "Política de Privacidad"
},
"site": {
"customHtml": "HTML personalizado",
"customHtmlDescription": "Código HTML personalizado que se inyectará al final de la etiqueta body del sitio.",
"keywords": "Palabras clave",
"keywordsDescription": "Utilizado para propósitos de SEO",
"logo": "LOGO",
"logoDescription": "Usado para mostrar la ubicación donde se debe exhibir el LOGO",
"logoPlaceholder": "Por favor, ingresa la URL del LOGO, no termines con '/'",
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "تأیید ایمیل",
"emailVerificationDescription": "هنگامی که فعال شود، کاربران باید ایمیل خود را تأیید کنند",
"enable": "فعال کردن",
"enableDescription": "پس از فعال‌سازی، عملکردهای ثبت‌نام، ورود، اتصال و قطع اتصال تلفن همراه فعال خواهند شد",
"enableDescription": "پس از فعال‌سازی، ثبت‌نام ایمیلی، ورود، پیوند و جداسازی عملکردها فعال خواهند شد",
"expiration_email_template": "قالب اطلاعیه انقضا",
"expiration_email_templateDescription": "جای‌گذاری‌های {after}.variable{before} با داده‌های واقعی جایگزین خواهند شد. اطمینان حاصل کنید که این متغیرها را حفظ کنید.",
"failed": "ناموفق",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "چکی",
"de-DE": "آلمانی",
"en-US": "انگلیسی",
"es-ES": "اسپانیایی",
"es-MX": "اسپانیایی (مکزیک)",
"fa-IR": "فارسی",
"fi-FI": "فنلاندی",
"fr-FR": "فرانسوی",
"hi-IN": "هندی",
"hu-HU": "مجاری",
"ja-JP": "ژاپنی",
"ko-KR": "کره‌ای",
"no-NO": "نروژی",
"pl-PL": "لهستانی",
"pt-BR": "پرتغالی (برزیل)",
"ro-RO": "رومانیایی",
"ru-RU": "روسی",
"th-TH": "تایلندی",
"tr-TR": "ترکی",
"uk-UA": "اوکراینی",
"vi-VN": "ویتنامی",
"zh-CN": "چینی (ساده شده)",
"zh-HK": "چینی (سنتی)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "فقط برای نمایش استفاده می‌شود؛ تغییر این مورد بر تمام واحدهای ارزی در سیستم تأثیر خواهد گذاشت",
"saveSuccess": "ذخیره‌سازی موفقیت‌آمیز"
},
"privacy-policy": {
"saveSuccess": "ذخیره با موفقیت انجام شد",
"title": "سیاست حفظ حریم خصوصی"
},
"site": {
"customHtml": "HTML سفارشی",
"customHtmlDescription": "کد HTML سفارشی که باید در انتهای تگ body سایت وارد شود.",
"keywords": "کلمات کلیدی",
"keywordsDescription": "برای اهداف سئو استفاده می‌شود",
"logo": "لوگو",
"logoDescription": "برای نمایش لوگو در مکان‌های تعیین‌شده استفاده می‌شود",
"logoPlaceholder": "آدرس URL لوگو را وارد کنید، بدون '/' در انتها",
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "Sähköpostin vahvistus",
"emailVerificationDescription": "Kun tämä on käytössä, käyttäjien on vahvistettava sähköpostinsa",
"enable": "Ota käyttöön",
"enableDescription": "Kun otat tämän käyttöön, matkapuhelimen rekisteröinti-, kirjautumis-, sitomis- ja purkutoiminnot otetaan käyttöön",
"enableDescription": "Kun tämä on otettu käyttöön, sähköpostirekisteröinti, kirjautuminen, liittäminen ja irrottaminen aktivoituvat.",
"expiration_email_template": "Vanhentumisilmoituksen malli",
"expiration_email_templateDescription": "Paikkamerkit {after}.variable{before} korvataan todellisilla tiedoilla. Varmista, että pidät nämä muuttujat.",
"failed": "Epäonnistui",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "tšekki",
"de-DE": "Saksa",
"en-US": "englanti",
"es-ES": "espanja",
"es-MX": "espanja (Meksiko)",
"fa-IR": "Persia",
"fi-FI": "suomi",
"fr-FR": "ranska",
"hi-IN": "hindi",
"hu-HU": "unkarinkieli",
"ja-JP": "japani",
"ko-KR": "Korea",
"no-NO": "norja",
"pl-PL": "puola",
"pt-BR": "portugali (Brasilia)",
"ro-RO": "romania",
"ru-RU": "Venäjä",
"th-TH": "thaikieli",
"tr-TR": "turkki",
"uk-UA": "ukrainaksi",
"vi-VN": "vietnamiksi",
"zh-CN": "kiina (yksinkertaistettu)",
"zh-HK": "kiina (perinteinen)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Käytetään vain näyttötarkoituksiin, muutoksen jälkeen kaikki järjestelmän valuuttayksiköt muuttuvat",
"saveSuccess": "Tallennus onnistui"
},
"privacy-policy": {
"saveSuccess": "Tallennus onnistui",
"title": "Tietosuojakäytäntö"
},
"site": {
"customHtml": "Mukautettu HTML",
"customHtmlDescription": "Mukautettu HTML-koodi, joka lisätään sivuston body -tagin loppuun.",
"keywords": "Avainsanat",
"keywordsDescription": "Käytetään SEO-tarkoituksiin",
"logo": "LOGO",
"logoDescription": "Näyttääksesi paikan, jossa LOGO tulee näkyä",
"logoPlaceholder": "Syötä LOGO:n URL-osoite, älä lopeta '/'-merkillä",
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "Vérification de l'email",
"emailVerificationDescription": "Lorsqu'elle est activée, les utilisateurs devront vérifier leur adresse e-mail",
"enable": "Activer",
"enableDescription": "Après activation, les fonctions d'enregistrement, de connexion, de liaison et de déliaison par téléphone mobile seront activées",
"enableDescription": "Après activation, les fonctions d'enregistrement par e-mail, de connexion, de liaison et de délégation seront activées",
"expiration_email_template": "Modèle d'avis d'expiration",
"expiration_email_templateDescription": "Les espaces réservés {after}.variable{before} seront remplacés par des données réelles. Assurez-vous de conserver ces variables.",
"failed": "Échoué",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "Tchèque",
"de-DE": "Allemand",
"en-US": "anglais",
"es-ES": "Espagnol",
"es-MX": "Espagnol (Mexique)",
"fa-IR": "Persan",
"fi-FI": "finnois",
"fr-FR": "français",
"hi-IN": "hindi",
"hu-HU": "Hongrois",
"ja-JP": "Japonais",
"ko-KR": "coréen",
"no-NO": "Norvégien",
"pl-PL": "Polonais",
"pt-BR": "portugais (Brésil)",
"ro-RO": "Roumain",
"ru-RU": "Russe",
"th-TH": "thaïlandais",
"tr-TR": "turc",
"uk-UA": "Ukrainien",
"vi-VN": "Vietnamien",
"zh-CN": "français (France)",
"zh-HK": "chinois (traditionnel)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Utilisé uniquement pour l'affichage, toute modification entraînera un changement de toutes les unités monétaires dans le système",
"saveSuccess": "Enregistrement réussi"
},
"privacy-policy": {
"saveSuccess": "Enregistrement réussi",
"title": "Politique de confidentialité"
},
"site": {
"customHtml": "HTML personnalisé",
"customHtmlDescription": "Code HTML personnalisé à injecter dans le bas de la balise body du site.",
"keywords": "Mots-clés",
"keywordsDescription": "Utilisé à des fins de référencement",
"logo": "LOGO",
"logoDescription": "Utilisé pour afficher l'emplacement où le LOGO doit être montré",
"logoPlaceholder": "Veuillez entrer l'URL du LOGO, ne pas terminer par '/'",
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "ईमेल सत्यापन",
"emailVerificationDescription": "सक्षम होने पर, उपयोगकर्ताओं को अपने ईमेल की पुष्टि करनी होगी",
"enable": "सक्षम करें",
"enableDescription": "सक्षम करने के बाद, मोबाइल फोन पंजीकरण, लॉगिन, बाइंडिंग, और अनबाइंडिंग कार्यक्षमताएँ सक्षम हो जाएँगी",
"enableDescription": "सक्षम करने के बाद, ईमेल पंजीकरण, लॉगिन, बाइंडिंग और अनबाइंडिंग कार्यक्षमताएँ सक्षम होगी",
"expiration_email_template": "समाप्ति सूचना टेम्पलेट",
"expiration_email_templateDescription": "{after}.variable{before} प्लेसहोल्डर को वास्तविक डेटा से बदला जाएगा। सुनिश्चित करें कि इन वेरिएबल्स को बनाए रखें।",
"failed": "असफल",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "चेक",
"de-DE": "जर्मन",
"en-US": "अंग्रेज़ी",
"es-ES": "स्पेनिश",
"es-MX": "स्पेनिश (मेक्सिको)",
"fa-IR": "फ़ारसी",
"fi-FI": "फिनिश",
"fr-FR": "फ्रेंच",
"hi-IN": "हिंदी",
"hu-HU": "हंगेरियन",
"ja-JP": "जापानी",
"ko-KR": "कोरियाई",
"no-NO": "नॉर्वेजियन",
"pl-PL": "पोलिश",
"pt-BR": "पुर्तगाली (ब्राज़ील)",
"ro-RO": "रोमानियाई",
"ru-RU": "रूसी",
"th-TH": "थाई",
"tr-TR": "तुर्की",
"uk-UA": "यूक्रेनी",
"vi-VN": "वियतनामी",
"zh-CN": "चीनी (सरल)",
"zh-HK": "चीनी (पारंपरिक)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "केवल प्रदर्शन के लिए उपयोग किया जाता है, परिवर्तन के बाद सिस्टम में सभी मुद्रा इकाइयाँ बदल जाएँगी",
"saveSuccess": "सफलतापूर्वक सहेजा गया"
},
"privacy-policy": {
"saveSuccess": "सफलता से सहेजा गया",
"title": "गोपनीयता नीति"
},
"site": {
"customHtml": "कस्टम HTML",
"customHtmlDescription": "साइट के bodyैग के नीचे इंजेक्ट करने के लिए कस्टम HTML कोड।",
"keywords": "कीवर्ड",
"keywordsDescription": "SEO उद्देश्यों के लिए उपयोग किया जाता है",
"logo": "लोगो",
"logoDescription": "लोगो प्रदर्शित करने के लिए आवश्यक स्थान",
"logoPlaceholder": "कृपया लोगो का URL पता दर्ज करें, '/' के साथ समाप्त न करें",
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "Email ellenőrzés",
"emailVerificationDescription": "Ha engedélyezve van, a felhasználóknak ellenőrizniük kell az e-mail címüket",
"enable": "Engedélyez",
"enableDescription": "A bekapcsolás után a mobiltelefon regisztráció, bejelentkezés, kötés és oldás funkciók elérhetővé válnak",
"enableDescription": "A funkció engedélyezése után az e-mailes regisztráció, bejelentkezés, kötés és leválasztás lehetőségei elérhetővé válnak.",
"expiration_email_template": "Lejárati Értesítő Sablon",
"expiration_email_templateDescription": "A {after}.variable{before} helyőrzőket tényleges adatokkal fogjuk helyettesíteni. Ügyeljen arra, hogy ezeket a változókat megtartsa.",
"failed": "Sikertelen",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "cseh",
"de-DE": "német",
"en-US": "angol",
"es-ES": "spanyol",
"es-MX": "spanyol (Mexikó)",
"fa-IR": "Perzsa",
"fi-FI": "finn",
"fr-FR": "francia",
"hi-IN": "hindi",
"hu-HU": "magyar",
"ja-JP": "japán",
"ko-KR": "Koreai",
"no-NO": "norvég",
"pl-PL": "lengyel",
"pt-BR": "portugál (Brazília)",
"ro-RO": "román nyelv",
"ru-RU": "Orosz",
"th-TH": "thai nyelv",
"tr-TR": "török",
"uk-UA": "ukrán",
"vi-VN": "vietnámi",
"zh-CN": "kínai (egyszerűsített)",
"zh-HK": "Kínai (hagyományos)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Csak megjelenítésre használatos, a módosítás után a rendszer összes pénznem egysége megváltozik",
"saveSuccess": "Sikeres mentés"
},
"privacy-policy": {
"saveSuccess": "Mentés sikeres",
"title": "Adatvédelmi irányelvek"
},
"site": {
"customHtml": "Egyedi HTML",
"customHtmlDescription": "Egyedi HTML kód, amelyet a webhely bodyímkéjének aljára kell beilleszteni.",
"keywords": "Kulcsszavak",
"keywordsDescription": "SEO célokra használva",
"logo": "LOGÓ",
"logoDescription": "A LOGÓ megjelenítésére szolgáló hely",
"logoPlaceholder": "Kérjük, adja meg a LOGÓ URL-címét, ne végződjön '/' jellel",
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "メール確認",
"emailVerificationDescription": "有効にすると、ユーザーはメールを確認する必要があります",
"enable": "有効にする",
"enableDescription": "有効にすると、携帯電話の登録、ログイン、バインディング、バインディング解除の機能が有効になります",
"enableDescription": "有効にすると、メールによる登録、ログイン、バインディング、およびバインディング解除の機能が有効になります",
"expiration_email_template": "有効期限通知テンプレート",
"expiration_email_templateDescription": "{after}.variable{before} のプレースホルダーは実際のデータに置き換えられます。これらの変数を必ず保持してください。",
"failed": "失敗しました",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "チェコ語",
"de-DE": "ドイツ語",
"en-US": "英語",
"es-ES": "スペイン語",
"es-MX": "スペイン語(メキシコ)",
"fa-IR": "ペルシャ語",
"fi-FI": "フィンランド語",
"fr-FR": "フランス語",
"hi-IN": "ヒンディー語",
"hu-HU": "ハンガリー語",
"ja-JP": "日本語",
"ko-KR": "韓国語",
"no-NO": "ノルウェー語",
"pl-PL": "ポーランド語",
"pt-BR": "ポルトガル語(ブラジル)",
"ro-RO": "ルーマニア語",
"ru-RU": "ロシア語",
"th-TH": "タイ語",
"tr-TR": "トルコ語",
"uk-UA": "ウクライナ語",
"vi-VN": "ベトナム語",
"zh-CN": "日本語",
"zh-HK": "中国語(繁体字)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "表示のみに使用され、変更するとシステム内のすべての通貨単位が変更されます",
"saveSuccess": "保存に成功しました"
},
"privacy-policy": {
"saveSuccess": "保存に成功しました",
"title": "プライバシーポリシー"
},
"site": {
"customHtml": "カスタムHTML",
"customHtmlDescription": "サイトの body タグの下部に挿入されるカスタム HTML コード。",
"keywords": "キーワード",
"keywordsDescription": "SEO目的で使用されます",
"logo": "LOGO",
"logoDescription": "LOGOを表示する必要がある場所に使用されます",
"logoPlaceholder": "LOGOのURLアドレスを入力してください。末尾に'/'を付けないでください",
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "이메일 인증",
"emailVerificationDescription": "활성화되면 사용자는 이메일을 인증해야 합니다",
"enable": "사용",
"enableDescription": "활성화 후, 휴대폰 등록, 로그인, 연결 및 연결 해제 기능이 활성화됩니다",
"enableDescription": "활성화하면 이메일 등록, 로그인, 바인딩 및 바인딩 해제 기능이 활성화됩니다.",
"expiration_email_template": "만료 알림 템플릿",
"expiration_email_templateDescription": "{after}.variable{before} 자리표시는 실제 데이터로 대체됩니다. 이 변수를 반드시 유지하십시오.",
"failed": "실패",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "체코어",
"de-DE": "독일어",
"en-US": "영어",
"es-ES": "스페인어",
"es-MX": "스페인어(멕시코)",
"fa-IR": "페르시아어",
"fi-FI": "핀란드어",
"fr-FR": "프랑스어",
"hi-IN": "힌디어",
"hu-HU": "헝가리어",
"ja-JP": "일본어",
"ko-KR": "한국어",
"no-NO": "노르웨이어",
"pl-PL": "폴란드어",
"pt-BR": "포르투갈어(브라질)",
"ro-RO": "루마니아어",
"ru-RU": "러시아어",
"th-TH": "태국어",
"tr-TR": "터키어",
"uk-UA": "우크라이나어",
"vi-VN": "베트남어",
"zh-CN": "중국어(간체)",
"zh-HK": "중국어(번체)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "표시용으로만 사용되며, 변경 시 시스템 내 모든 통화 단위가 변경됩니다",
"saveSuccess": "저장 성공"
},
"privacy-policy": {
"saveSuccess": "저장 성공",
"title": "개인정보 처리방침"
},
"site": {
"customHtml": "사용자 정의 HTML",
"customHtmlDescription": "사이트의 body그 하단에 삽입될 사용자 정의 HTML 코드입니다.",
"keywords": "키워드",
"keywordsDescription": "SEO 목적으로 사용됨",
"logo": "LOGO",
"logoDescription": "LOGO를 표시해야 하는 위치에 사용됩니다",
"logoPlaceholder": "LOGO의 URL 주소를 입력하세요. '/'로 끝나지 않도록 하세요",
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "E-postbekreftelse",
"emailVerificationDescription": "Når aktivert, må brukere bekrefte e-posten sin",
"enable": "Aktiver",
"enableDescription": "Etter aktivering vil funksjonene for registrering, innlogging, binding og frakobling av mobiltelefon bli aktivert",
"enableDescription": "Etter aktivering vil funksjonene for e-postregistrering, innlogging, binding og avbinding bli aktivert",
"expiration_email_template": "Utløpsvarsel Mal",
"expiration_email_templateDescription": "Plassholderne {after}.variable{before} vil bli erstattet med faktiske data. Sørg for å beholde disse variablene.",
"failed": "Mislyktes",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "Tsjekkisk",
"de-DE": "Tysk",
"en-US": "engelsk",
"es-ES": "Spansk",
"es-MX": "Spansk (Mexico)",
"fa-IR": "Persisk",
"fi-FI": "Finsk",
"fr-FR": "Fransk",
"hi-IN": "Hindi",
"hu-HU": "Ungarsk",
"ja-JP": "Japansk",
"ko-KR": "Koreansk",
"no-NO": "Norsk",
"pl-PL": "Polsk",
"pt-BR": "Portugisisk (Brasil)",
"ro-RO": "Rumensk",
"ru-RU": "Russisk",
"th-TH": "Thai",
"tr-TR": "Tyrkisk",
"uk-UA": "Ukrainsk",
"vi-VN": "Vietnamesisk",
"zh-CN": "Kinesisk (forenklet)",
"zh-HK": "Kinesisk (tradisjonell)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Kun for visningsformål, endring vil påvirke alle valutaenheter i systemet",
"saveSuccess": "Lagring vellykket"
},
"privacy-policy": {
"saveSuccess": "Lagring vellykket",
"title": "Personvernerklæring"
},
"site": {
"customHtml": "Egendefinert HTML",
"customHtmlDescription": "Egendefinert HTML-kode som skal settes inn i bunnen av nettstedets body-tag.",
"keywords": "Nøkkelord",
"keywordsDescription": "Brukes til SEO-formål",
"logo": "LOGO",
"logoDescription": "Brukes til å vise hvor LOGO skal vises",
"logoPlaceholder": "Vennligst skriv inn URL-adressen til LOGO, ikke avslutt med '/'",
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "Weryfikacja e-maila",
"emailVerificationDescription": "Po włączeniu użytkownicy będą musieli zweryfikować swój adres e-mail",
"enable": "Włącz",
"enableDescription": "Po włączeniu zostaną aktywowane funkcje rejestracji, logowania, powiązania i odwiązania telefonu komórkowego",
"enableDescription": "Po włączeniu funkcji rejestracji, logowania, powiązania i odłączenia konta e-mail będą dostępne",
"expiration_email_template": "Szablon Powiadomienia o Wygaśnięciu",
"expiration_email_templateDescription": "Elementy zastępcze {after}.variable{before} zostaną zastąpione rzeczywistymi danymi. Upewnij się, że te zmienne zostaną zachowane.",
"failed": "Niepowodzenie",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "język czeski",
"de-DE": "niemiecki",
"en-US": "angielski",
"es-ES": "hiszpański",
"es-MX": "hiszpański (Meksyk)",
"fa-IR": "perski",
"fi-FI": "fiński",
"fr-FR": "francuski",
"hi-IN": "hindi",
"hu-HU": "język węgierski",
"ja-JP": "język japoński",
"ko-KR": "Koreański",
"no-NO": "norweski",
"pl-PL": "Polski",
"pt-BR": "portugalski (Brazylia)",
"ro-RO": "rumuński",
"ru-RU": "Rosyjski",
"th-TH": "tajski",
"tr-TR": "turecki",
"uk-UA": "ukraiński",
"vi-VN": "język wietnamski",
"zh-CN": "chiński (uproszczony)",
"zh-HK": "chiński (tradycyjny)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Używane wyłącznie do celów wyświetlania, po zmianie wszystkie jednostki walutowe w systemie zostaną zmienione",
"saveSuccess": "Zapisano pomyślnie"
},
"privacy-policy": {
"saveSuccess": "Zapisano pomyślnie",
"title": "Polityka prywatności"
},
"site": {
"customHtml": "Niestandardowy HTML",
"customHtmlDescription": "Niestandardowy kod HTML, który ma być wstrzyknięty na końcu tagu bodyitryny.",
"keywords": "Słowa kluczowe",
"keywordsDescription": "Używane do celów SEO",
"logo": "LOGO",
"logoDescription": "Miejsce do wyświetlania LOGO",
"logoPlaceholder": "Wprowadź adres URL LOGO, nie kończ na '/'",
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "Verificação de Email",
"emailVerificationDescription": "Quando ativado, os usuários precisarão verificar seu e-mail",
"enable": "Habilitar",
"enableDescription": "Após a ativação, as funções de registro, login, vinculação e desvinculação de telefone celular serão ativadas",
"enableDescription": "Após a ativação, as funções de registro por e-mail, login, vinculação e desvinculação serão habilitadas",
"expiration_email_template": "Modelo de Aviso de Expiração",
"expiration_email_templateDescription": "Os marcadores {after}.variable{before} serão substituídos por dados reais. Certifique-se de manter essas variáveis.",
"failed": "Falhou",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "Tcheco",
"de-DE": "Alemão",
"en-US": "inglês",
"es-ES": "Espanhol",
"es-MX": "Espanhol (México)",
"fa-IR": "Persa",
"fi-FI": "Finlandês",
"fr-FR": "Francês",
"hi-IN": "hindi",
"hu-HU": "Húngaro",
"ja-JP": "Japonês",
"ko-KR": "Coreano",
"no-NO": "Norueguês",
"pl-PL": "Polonês",
"pt-BR": "Português (Brasil)",
"ro-RO": "Romeno",
"ru-RU": "Russo",
"th-TH": "Tailandês",
"tr-TR": "turco",
"uk-UA": "Ucraniano",
"vi-VN": "Vietnamita",
"zh-CN": "Chinês (Simplificado)",
"zh-HK": "Chinês (Tradicional)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Usado apenas para exibição, após a alteração todas as unidades monetárias no sistema serão alteradas",
"saveSuccess": "Salvo com sucesso"
},
"privacy-policy": {
"saveSuccess": "Salvo com Sucesso",
"title": "Política de Privacidade"
},
"site": {
"customHtml": "HTML Personalizado",
"customHtmlDescription": "Código HTML personalizado a ser inserido no final da tag bodyo site.",
"keywords": "Palavras-chave",
"keywordsDescription": "Usado para fins de SEO",
"logo": "LOGO",
"logoDescription": "Usado para exibir a posição onde o LOGO precisa ser mostrado",
"logoPlaceholder": "Por favor, insira o URL do LOGO, não termine com '/'",
-1
View File
@@ -10,7 +10,6 @@ export default getRequestConfig(async () => {
const locale = cookieLocale || defaultLocale || NEXT_PUBLIC_DEFAULT_LANGUAGE;
const messages = {
'language': (await import(`./${locale}/language.json`)).default,
'menu': (await import(`./${locale}/menu.json`)).default,
'auth': (await import(`./${locale}/auth.json`)).default,
'common': (await import(`./${locale}/common.json`)).default,
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "Verificare Email",
"emailVerificationDescription": "Când este activată, utilizatorii vor trebui să-și verifice emailul",
"enable": "Activează",
"enableDescription": "După activare, funcțiile de înregistrare, autentificare, asociere și disociere a telefonului mobil vor fi activate",
"enableDescription": "După activare, funcțiile de înregistrare prin email, autentificare, legare și delegare vor fi activate.",
"expiration_email_template": "Șablon de Notificare a Expirării",
"expiration_email_templateDescription": "Locurile rezervate {after}.variable{before} vor fi înlocuite cu date reale. Asigurați-vă că păstrați aceste variabile.",
"failed": "Eșuat",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "cehă",
"de-DE": "Germană",
"en-US": "engleză",
"es-ES": "Spaniolă",
"es-MX": "Spaniolă (Mexic)",
"fa-IR": "Persană",
"fi-FI": "Finlandeză",
"fr-FR": "franceză",
"hi-IN": "hindi",
"hu-HU": "Maghiară",
"ja-JP": "Japoneză",
"ko-KR": "Coreeană",
"no-NO": "norvegiană",
"pl-PL": "Poloneză",
"pt-BR": "Portugheză (Brazilia)",
"ro-RO": "Română",
"ru-RU": "Rusă",
"th-TH": "Thailandeză",
"tr-TR": "turcă",
"uk-UA": "Ucraineană",
"vi-VN": "Vietnameză",
"zh-CN": "Chineză (Simplificată)",
"zh-HK": "Chineză (tradițională)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Utilizat doar pentru afișare, după modificare toate unitățile monetare din sistem vor fi schimbate",
"saveSuccess": "Salvare reușită"
},
"privacy-policy": {
"saveSuccess": "Salvare reușită",
"title": "Politica de confidențialitate"
},
"site": {
"customHtml": "HTML personalizat",
"customHtmlDescription": "Cod HTML personalizat care va fi injectat în partea de jos a etichetei body a site-ului.",
"keywords": "Cuvinte cheie",
"keywordsDescription": "Utilizate în scopuri SEO",
"logo": "LOGO",
"logoDescription": "Utilizat pentru a afișa locația unde trebuie să fie prezentat LOGO-ul",
"logoPlaceholder": "Vă rugăm să introduceți adresa URL a LOGO-ului, fără să se termine cu '/'",
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "Подтверждение электронной почты",
"emailVerificationDescription": "Когда включено, пользователям необходимо будет подтвердить свой адрес электронной почты",
"enable": "Включить",
"enableDescription": "После включения будут доступны функции регистрации, входа, привязки и отвязки мобильного телефона",
"enableDescription": "После включения будут активированы функции регистрации по электронной почте, входа в систему, привязки и отвязки.",
"expiration_email_template": "Шаблон уведомления об истечении срока",
"expiration_email_templateDescription": "Заполнители {after}.variable{before} будут заменены фактическими данными. Убедитесь, что эти переменные сохранены.",
"failed": "Не удалось",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "Чешский",
"de-DE": "Немецкий",
"en-US": "английский",
"es-ES": "испанский",
"es-MX": "испанский (Мексика)",
"fa-IR": "Персидский",
"fi-FI": "финский",
"fr-FR": "Французский",
"hi-IN": "хинди",
"hu-HU": "Венгерский",
"ja-JP": "японский",
"ko-KR": "Корейский",
"no-NO": "Норвежский",
"pl-PL": "польский",
"pt-BR": "португальский (Бразилия)",
"ro-RO": "румынский",
"ru-RU": "Русский",
"th-TH": "тайский",
"tr-TR": "Турецкий",
"uk-UA": "Украинский",
"vi-VN": "вьетнамский",
"zh-CN": "Китайский (упрощенный)",
"zh-HK": "китайский (традиционный)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Используется только для отображения, после изменения все валютные единицы в системе будут изменены",
"saveSuccess": "Успешно сохранено"
},
"privacy-policy": {
"saveSuccess": "Сохранение успешно",
"title": "Политика конфиденциальности"
},
"site": {
"customHtml": "Пользовательский HTML",
"customHtmlDescription": "Пользовательский HTML-код, который будет вставлен в конец тега body сайта.",
"keywords": "Ключевые слова",
"keywordsDescription": "Используется для SEO",
"logo": "ЛОГОТИП",
"logoDescription": "Используется для отображения места, где необходимо показать ЛОГОТИП",
"logoPlaceholder": "Введите URL-адрес ЛОГОТИПА, не заканчивайте на '/'",
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "การยืนยันอีเมล",
"emailVerificationDescription": "เมื่อเปิดใช้งาน ผู้ใช้จะต้องยืนยันอีเมลของตน",
"enable": "เปิดใช้งาน",
"enableDescription": "หลังจากเปิดใช้งานแล้ว ฟังก์ชันการลงทะเบียน การเข้าสู่ระบบ การผูกบัญชี และการยกเลิกการผูกบัญชีด้วยโทรศัพท์มือถือจะถูกเปิดใช้งาน",
"enableDescription": "หลังจากเปิดใช้งาน ฟังก์ชันการลงทะเบียนทางอีเมล การเข้าสู่ระบบ การผูก และการยกเลิกการผูก จะถูกเปิดใช้งาน",
"expiration_email_template": "เทมเพลตแจ้งเตือนการหมดอายุ",
"expiration_email_templateDescription": "ตัวแปร {after}.variable{before} จะถูกแทนที่ด้วยข้อมูลจริง โปรดตรวจสอบให้แน่ใจว่าเก็บตัวแปรเหล่านี้ไว้",
"failed": "ล้มเหลว",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "ภาษาเช็ก",
"de-DE": "ภาษาเยอรมัน",
"en-US": "ภาษาอังกฤษ",
"es-ES": "ภาษาสเปน",
"es-MX": "สเปน (เม็กซิโก)",
"fa-IR": "เปอร์เซีย",
"fi-FI": "ภาษาฟินแลนด์",
"fr-FR": "ภาษาฝรั่งเศส",
"hi-IN": "ภาษาฮินดี",
"hu-HU": "ภาษาฮังการี",
"ja-JP": "ภาษาญี่ปุ่น",
"ko-KR": "เกาหลี",
"no-NO": "ภาษานอร์เวย์",
"pl-PL": "ภาษาโปแลนด์",
"pt-BR": "โปรตุเกส (บราซิล)",
"ro-RO": "โรมาเนีย",
"ru-RU": "ภาษารัสเซีย",
"th-TH": "ภาษาไทย",
"tr-TR": "ตุรกี",
"uk-UA": "ยูเครน",
"vi-VN": "ภาษาเวียดนาม",
"zh-CN": "ภาษาไทย",
"zh-HK": "ภาษาจีน (ตัวเต็ม)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "ใช้สำหรับการแสดงผลเท่านั้น การเปลี่ยนแปลงจะส่งผลต่อหน่วยสกุลเงินทั้งหมดในระบบ",
"saveSuccess": "บันทึกสำเร็จ"
},
"privacy-policy": {
"saveSuccess": "บันทึกสำเร็จ",
"title": "นโยบายความเป็นส่วนตัว"
},
"site": {
"customHtml": "HTML ที่กำหนดเอง",
"customHtmlDescription": "รหัส HTML ที่กำหนดเองเพื่อแทรกลงในส่วนล่างของแท็ก body ของเว็บไซต์.",
"keywords": "คำสำคัญ",
"keywordsDescription": "ใช้สำหรับวัตถุประสงค์ SEO",
"logo": "LOGO",
"logoDescription": "ใช้สำหรับแสดงตำแหน่งที่ต้องการแสดง LOGO",
"logoPlaceholder": "กรุณาใส่ URL ของ LOGO โดยไม่ต้องลงท้ายด้วย '/'",
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "E-posta Doğrulama",
"emailVerificationDescription": "Etkinleştirildiğinde, kullanıcıların e-posta adreslerini doğrulamaları gerekecek",
"enable": "Etkinleştir",
"enableDescription": "Etkinleştirildikten sonra, cep telefonu kaydı, giriş, bağlama ve bağlantı kesme işlevleri etkinleştirilecektir",
"enableDescription": "Etkinleştirildikten sonra, e-posta kaydı, giriş, bağlama ve ayırma işlevleri etkinleştirilecektir.",
"expiration_email_template": "Süre Sonu Bildirimi Şablonu",
"expiration_email_templateDescription": "{after}.variable{before} yer tutucuları gerçek verilerle değiştirilecektir. Bu değişkenleri koruduğunuzdan emin olun.",
"failed": "Başarısız",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "Çekçe",
"de-DE": "Almanca",
"en-US": "İngilizce",
"es-ES": "İspanyolca",
"es-MX": "İspanyolca (Meksika)",
"fa-IR": "Farsça",
"fi-FI": "Fince",
"fr-FR": "Fransızca",
"hi-IN": "Hintçe",
"hu-HU": "Macarca",
"ja-JP": "Japonca",
"ko-KR": "Korece",
"no-NO": "Norveççe",
"pl-PL": "Lehçe",
"pt-BR": "Portekizce (Brezilya)",
"ro-RO": "Romence",
"ru-RU": "Rusça",
"th-TH": "Tayca",
"tr-TR": "Türkçe",
"uk-UA": "Ukraynaca",
"vi-VN": "Vietnamca",
"zh-CN": "Çince (Basitleştirilmiş)",
"zh-HK": "Çince (Geleneksel)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Sadece gösterim amaçlı kullanılır, değiştirildiğinde sistemdeki tüm para birimi birimleri değişecektir",
"saveSuccess": "Başarıyla kaydedildi"
},
"privacy-policy": {
"saveSuccess": "Başarıyla Kaydedildi",
"title": "Gizlilik Politikası"
},
"site": {
"customHtml": "Özel HTML",
"customHtmlDescription": "Site'in body etiketinin altına yerleştirilecek özel HTML kodu.",
"keywords": "Anahtar Kelimeler",
"keywordsDescription": "SEO amaçları için kullanılır",
"logo": "LOGO",
"logoDescription": "LOGO'nun gösterilmesi gereken yeri belirtir",
"logoPlaceholder": "Lütfen LOGO'nun URL adresini girin, '/' ile bitmemelidir",
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "Підтвердження електронної пошти",
"emailVerificationDescription": "Коли ввімкнено, користувачам потрібно буде підтвердити свою електронну пошту",
"enable": "Увімкнути",
"enableDescription": "Після увімкнення будуть доступні функції реєстрації, входу, прив'язки та відв'язки мобільного телефону",
"enableDescription": "Після активації будуть доступні функції реєстрації електронною поштою, входу, прив'язки та відв'язки.",
"expiration_email_template": "Шаблон повідомлення про закінчення терміну дії",
"expiration_email_templateDescription": "Заповнювачі {after}.variable{before} будуть замінені на фактичні дані. Переконайтеся, що зберегли ці змінні.",
"failed": "Не вдалося",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "чеська",
"de-DE": "Німецька",
"en-US": "англійська",
"es-ES": "іспанська",
"es-MX": "іспанська (Мексика)",
"fa-IR": "Перська",
"fi-FI": "Фінська",
"fr-FR": "Французька",
"hi-IN": "гінді",
"hu-HU": "угорська",
"ja-JP": "японська",
"ko-KR": "Корейська",
"no-NO": "Норвезька",
"pl-PL": "Польська",
"pt-BR": "португальська (Бразилія)",
"ro-RO": "румунська",
"ru-RU": "Російська",
"th-TH": "тайська",
"tr-TR": "турецька",
"uk-UA": "українська мова",
"vi-VN": "В'єтнамська",
"zh-CN": "українська (Україна)",
"zh-HK": "китайська (традиційна)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Використовується лише для відображення, після зміни всі валютні одиниці в системі будуть змінені",
"saveSuccess": "Успішно збережено"
},
"privacy-policy": {
"saveSuccess": "Збережено успішно",
"title": "Політика конфіденційності"
},
"site": {
"customHtml": "Користувацький HTML",
"customHtmlDescription": "Користувацький HTML-код, який буде вставлено в кінець тегу body сайту.",
"keywords": "Ключові слова",
"keywordsDescription": "Використовується для SEO",
"logo": "ЛОГО",
"logoDescription": "Використовується для відображення місця, де потрібно показати ЛОГО",
"logoPlaceholder": "Будь ласка, введіть URL-адресу ЛОГО, не закінчуйте на '/'",
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "Xác minh Email",
"emailVerificationDescription": "Khi được bật, người dùng sẽ cần xác minh email của họ",
"enable": "Kích hoạt",
"enableDescription": "Sau khi kích hoạt, các chức năng đăng ký, đăng nhập, liên kết và hủy liên kết điện thoại di động sẽ được kích hoạt",
"enableDescription": "Sau khi kích hoạt, các chức năng đăng ký email, đăng nhập, liên kết và hủy liên kết sẽ được bật",
"expiration_email_template": "Mẫu Thông Báo Hết Hạn",
"expiration_email_templateDescription": "Các chỗ chèn {after}.variable{before} sẽ được thay thế bằng dữ liệu thực tế. Đảm bảo giữ nguyên các biến này.",
"failed": "Thất bại",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "Tiếng Séc",
"de-DE": "Tiếng Đức",
"en-US": "tiếng Anh",
"es-ES": "Tiếng Tây Ban Nha",
"es-MX": "Tiếng Tây Ban Nha (Mexico)",
"fa-IR": "Tiếng Ba Tư",
"fi-FI": "Tiếng Phần Lan",
"fr-FR": "Tiếng Pháp",
"hi-IN": "Tiếng Hindi",
"hu-HU": "Tiếng Hungary",
"ja-JP": "Tiếng Nhật",
"ko-KR": "Tiếng Hàn",
"no-NO": "Tiếng Na Uy",
"pl-PL": "Tiếng Ba Lan",
"pt-BR": "Tiếng Bồ Đào Nha (Brazil)",
"ro-RO": "Tiếng Romania",
"ru-RU": "Tiếng Nga",
"th-TH": "Tiếng Thái",
"tr-TR": "Tiếng Thổ Nhĩ Kỳ",
"uk-UA": "Tiếng Ukraina",
"vi-VN": "Tiếng Việt",
"zh-CN": "Tiếng Trung (Giản thể)",
"zh-HK": "Tiếng Trung (Phồn thể)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Chỉ sử dụng để hiển thị, sau khi thay đổi tất cả các đơn vị tiền tệ trong hệ thống sẽ thay đổi",
"saveSuccess": "Lưu thành công"
},
"privacy-policy": {
"saveSuccess": "Lưu thành công",
"title": "Chính sách bảo mật"
},
"site": {
"customHtml": "HTML tùy chỉnh",
"customHtmlDescription": "Mã HTML tùy chỉnh để được chèn vào cuối thẻ body của trang.",
"keywords": "Từ khóa",
"keywordsDescription": "Dùng cho mục đích SEO",
"logo": "LOGO",
"logoDescription": "Dùng để hiển thị vị trí cần hiển thị LOGO",
"logoPlaceholder": "Vui lòng nhập địa chỉ URL của LOGO, không kết thúc bằng '/'",
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "电子邮件验证",
"emailVerificationDescription": "启用后,用户需要验证他们的电子邮件",
"enable": "启用",
"enableDescription": "启用后,将启用手机注册、登录、绑定和解绑功能",
"enableDescription": "启用后,将启用电子邮件注册、登录、绑定和解绑功能",
"expiration_email_template": "到期通知模板",
"expiration_email_templateDescription": "{after}.variable{before} 占位符将被实际数据替换。请确保保留这些变量。",
"failed": "失败",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "捷克语",
"de-DE": "德语",
"en-US": "英语",
"es-ES": "西班牙语",
"es-MX": "西班牙语(墨西哥)",
"fa-IR": "波斯语",
"fi-FI": "芬兰语",
"fr-FR": "法语",
"hi-IN": "印地语",
"hu-HU": "匈牙利语",
"ja-JP": "日语",
"ko-KR": "韩语",
"no-NO": "挪威语",
"pl-PL": "波兰语",
"pt-BR": "葡萄牙语(巴西)",
"ro-RO": "罗马尼亚语",
"ru-RU": "俄语",
"th-TH": "泰语",
"tr-TR": "土耳其语",
"uk-UA": "乌克兰语",
"vi-VN": "越南语",
"zh-CN": "中文(简体)",
"zh-HK": "中文(繁体)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "仅用于展示使用,更改后系统中所有的货币单位都将发生变更",
"saveSuccess": "保存成功"
},
"privacy-policy": {
"saveSuccess": "保存成功",
"title": "隐私政策"
},
"site": {
"customHtml": "自定义HTML",
"customHtmlDescription": "要注入到网站 body 标签底部的自定义 HTML 代码。",
"keywords": "关键词",
"keywordsDescription": "用于搜索引擎优化",
"logo": "LOGO",
"logoDescription": "用于显示需要展示 LOGO 的位置",
"logoPlaceholder": "请输入 LOGO 的 URL 地址,不要以 '/' 结尾",
+1 -1
View File
@@ -6,7 +6,7 @@
"emailVerification": "電郵驗證",
"emailVerificationDescription": "啟用後,用戶需要驗證他們的電郵",
"enable": "啟用",
"enableDescription": "啟用後,將啟用手機註冊、登、綁定和解綁功能",
"enableDescription": "啟用後,將開啟電子郵件註冊、登、綁定及解除綁定功能",
"expiration_email_template": "到期通知範本",
"expiration_email_templateDescription": "{after}.variable{before} 佔位符將被實際數據替換。請確保保留這些變數。",
"failed": "失敗",
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "捷克語",
"de-DE": "德語",
"en-US": "英語",
"es-ES": "西班牙語",
"es-MX": "西班牙語(墨西哥)",
"fa-IR": "波斯語",
"fi-FI": "芬蘭語",
"fr-FR": "法語",
"hi-IN": "印地語",
"hu-HU": "匈牙利語",
"ja-JP": "日語",
"ko-KR": "韓語",
"no-NO": "挪威語",
"pl-PL": "波蘭語",
"pt-BR": "葡萄牙語(巴西)",
"ro-RO": "羅馬尼亞語",
"ru-RU": "俄語",
"th-TH": "泰語",
"tr-TR": "土耳其語",
"uk-UA": "烏克蘭語",
"vi-VN": "越南語",
"zh-CN": "中文(简体)",
"zh-HK": "中文(繁體)"
}
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "僅用於展示使用,更改後系統中所有的貨幣單位都將發生變更",
"saveSuccess": "保存成功"
},
"privacy-policy": {
"saveSuccess": "保存成功",
"title": "私隱政策"
},
"site": {
"customHtml": "自定義HTML",
"customHtmlDescription": "自定義 HTML 代碼,將注入到網站 body 標籤的底部。",
"keywords": "關鍵字",
"keywordsDescription": "用於SEO目的",
"logo": "LOGO",
"logoDescription": "用於顯示需要展示 LOGO 的位置",
"logoPlaceholder": "請輸入 LOGO 的 URL 地址,不要以 '/' 結尾",
+1 -1
View File
@@ -19,7 +19,7 @@ export async function getAuthMethodConfig(
/** Update auth method config PUT /v1/admin/auth-method/config */
export async function updateAuthMethodConfig(
body: API.UpdataAuthMethodConfigRequest,
body: API.UpdateAuthMethodConfigRequest,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: API.AuthMethodConfig }>('/v1/admin/auth-method/config', {
+23
View File
@@ -203,6 +203,29 @@ export async function updateNodeConfig(body: API.NodeConfig, options?: { [key: s
});
}
/** get Privacy Policy Config GET /v1/admin/system/privacy */
export async function getPrivacyPolicyConfig(options?: { [key: string]: any }) {
return request<API.Response & { data?: API.PrivacyPolicyConfig }>('/v1/admin/system/privacy', {
method: 'GET',
...(options || {}),
});
}
/** Update Privacy Policy Config PUT /v1/admin/system/privacy */
export async function updatePrivacyPolicyConfig(
body: API.PrivacyPolicyConfig,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: any }>('/v1/admin/system/privacy', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** Get register config GET /v1/admin/system/register_config */
export async function getRegisterConfig(options?: { [key: string]: any }) {
return request<API.Response & { data?: API.RegisterConfig }>('/v1/admin/system/register_config', {
+15 -9
View File
@@ -37,7 +37,7 @@ declare namespace API {
type ApplicationPlatform = {
ios?: ApplicationVersion[];
mac?: ApplicationVersion[];
macos?: ApplicationVersion[];
linux?: ApplicationVersion[];
android?: ApplicationVersion[];
windows?: ApplicationVersion[];
@@ -879,6 +879,10 @@ declare namespace API {
list: PlatformInfo[];
};
type PrivacyPolicyConfig = {
privacy_policy: string;
};
type PubilcRegisterConfig = {
stop_register: boolean;
enable_ip_register_limit: boolean;
@@ -1010,6 +1014,8 @@ declare namespace API {
site_name: string;
site_desc: string;
site_logo: string;
keywords: string;
custom_html: string;
};
type SortItem = {
@@ -1177,13 +1183,6 @@ declare namespace API {
security_config: SecurityConfig;
};
type UpdataAuthMethodConfigRequest = {
id: number;
method: string;
config: Record<string, any>;
enabled: boolean;
};
type UpdateAlipayF2fRequest = {
id: number;
name: string;
@@ -1230,6 +1229,13 @@ declare namespace API {
application_id: number;
};
type UpdateAuthMethodConfigRequest = {
id: number;
method: string;
config: Record<string, any>;
enabled: boolean;
};
type UpdateCouponRequest = {
id: number;
name: string;
@@ -1440,7 +1446,7 @@ declare namespace API {
type UserDevice = {
id: number;
ip: string;
imei: string;
identifier: string;
user_agent: string;
online: boolean;
enabled: boolean;

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