Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7f3cac3c1c | |||
| 32253e3717 | |||
| a76471a806 | |||
| d53a00611e | |||
| 2fb98be591 | |||
| 634be371b1 | |||
| ffa5c86d23 | |||
| f84f98c80f | |||
| e8ea597664 | |||
| 04af2f9433 | |||
| 96eba171d5 | |||
| 2675034b75 | |||
| 8f772c2364 | |||
| 166e48f442 | |||
| eec0b12154 | |||
| 3e290d7cb5 | |||
| 3304a55fd4 | |||
| 7cdc6bdd8f | |||
| 1fb305e7a1 | |||
| 7f81de31ab | |||
| bcfb10a6c7 |
+402
-352
@@ -1,396 +1,446 @@
|
|||||||
<a name="readme-top"></a>
|
<a name="readme-top"></a>
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [1.1.5](https://github.com/perfect-panel/ppanel-web/compare/v1.1.4...v1.1.5) (2025-07-26)
|
||||||
|
|
||||||
|
|
||||||
|
### 🐛 Bug Fixes
|
||||||
|
|
||||||
|
* **subscribe**: Filter out items that are not marked as visible in subscription list ([32253e3](https://github.com/perfect-panel/ppanel-web/commit/32253e3))
|
||||||
|
|
||||||
|
## [1.1.4](https://github.com/perfect-panel/ppanel-web/compare/v1.1.3...v1.1.4) (2025-07-25)
|
||||||
|
|
||||||
|
|
||||||
|
### 🐛 Bug Fixes
|
||||||
|
|
||||||
|
* **locales**: Simplify "show" label in subscription localization files ([d53a006](https://github.com/perfect-panel/ppanel-web/commit/d53a006))
|
||||||
|
* **order**: Preserve last successful order on error during order creation ([2fb98be](https://github.com/perfect-panel/ppanel-web/commit/2fb98be))
|
||||||
|
* **subscribe**: Filter out hidden items in subscription list display ([634be37](https://github.com/perfect-panel/ppanel-web/commit/634be37))
|
||||||
|
|
||||||
|
## [1.1.3](https://github.com/perfect-panel/ppanel-web/compare/v1.1.2...v1.1.3) (2025-07-24)
|
||||||
|
|
||||||
|
|
||||||
|
### 🐛 Bug Fixes
|
||||||
|
|
||||||
|
* **auth**: Implement user redirection to dashboard upon authentication ([f84f98c](https://github.com/perfect-panel/ppanel-web/commit/f84f98c))
|
||||||
|
|
||||||
|
## [1.1.2](https://github.com/perfect-panel/ppanel-web/compare/v1.1.1...v1.1.2) (2025-07-24)
|
||||||
|
|
||||||
|
|
||||||
|
### 🐛 Bug Fixes
|
||||||
|
|
||||||
|
* **billing**: Add display for gift amount in subscription billing ([04af2f9](https://github.com/perfect-panel/ppanel-web/commit/04af2f9))
|
||||||
|
* **order**: Update subscription cell to display name and quantity ([96eba17](https://github.com/perfect-panel/ppanel-web/commit/96eba17))
|
||||||
|
* **tool**: Added API for obtaining version, updated version information display logic ([2675034](https://github.com/perfect-panel/ppanel-web/commit/2675034))
|
||||||
|
|
||||||
|
<a name="readme-top"></a>
|
||||||
|
|
||||||
|
# Changelog
|
||||||
|
|
||||||
|
## [1.1.1](https://github.com/perfect-panel/ppanel-web/compare/v1.1.0...v1.1.1) (2025-07-20)
|
||||||
|
|
||||||
|
### 🐛 Bug Fixes
|
||||||
|
|
||||||
|
- **node-table**: Update translations for headers and no data display ([eec0b12](https://github.com/perfect-panel/ppanel-web/commit/eec0b12))
|
||||||
|
- **rules**: Change rule type from 'auto' to 'default' and update ([3e290d7](https://github.com/perfect-panel/ppanel-web/commit/3e290d7))
|
||||||
|
- **rules**: Update rule settings ([3304a55](https://github.com/perfect-panel/ppanel-web/commit/3304a55))
|
||||||
|
- **subscribe-form**: Optimize discount calculation logic and debounce updates ([166e48f](https://github.com/perfect-panel/ppanel-web/commit/166e48f))
|
||||||
|
- **tutorial**: Comment out unused getVersion function and simplify getVersionPath ([7cdc6bd](https://github.com/perfect-panel/ppanel-web/commit/7cdc6bd))
|
||||||
|
- **tutorial**: Return latest version in case of fetch error ([1fb305e](https://github.com/perfect-panel/ppanel-web/commit/1fb305e))
|
||||||
|
|
||||||
|
<a name="readme-top"></a>
|
||||||
|
|
||||||
|
# Changelog
|
||||||
|
|
||||||
|
# [1.1.0](https://github.com/perfect-panel/ppanel-web/compare/v1.0.2...v1.1.0) (2025-07-06)
|
||||||
|
|
||||||
|
### ✨ Features
|
||||||
|
|
||||||
|
- **view**: Add AnyTLS protocol support and enhance node configuration options ([bcfb10a](https://github.com/perfect-panel/ppanel-web/commit/bcfb10a))
|
||||||
|
|
||||||
|
<a name="readme-top"></a>
|
||||||
|
|
||||||
|
# Changelog
|
||||||
|
|
||||||
## [1.0.2](https://github.com/perfect-panel/ppanel-web/compare/v1.0.1...v1.0.2) (2025-06-29)
|
## [1.0.2](https://github.com/perfect-panel/ppanel-web/compare/v1.0.1...v1.0.2) (2025-06-29)
|
||||||
|
|
||||||
|
|
||||||
### 🐛 Bug Fixes
|
### 🐛 Bug Fixes
|
||||||
|
|
||||||
* **subscription**: User subscription information ([7d18ff6](https://github.com/perfect-panel/ppanel-web/commit/7d18ff6))
|
- **subscription**: User subscription information ([7d18ff6](https://github.com/perfect-panel/ppanel-web/commit/7d18ff6))
|
||||||
|
|
||||||
## [1.0.1](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0...v1.0.1) (2025-04-28)
|
## [1.0.1](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0...v1.0.1) (2025-04-28)
|
||||||
|
|
||||||
|
|
||||||
### 🐛 Bug Fixes
|
### 🐛 Bug Fixes
|
||||||
|
|
||||||
* **payment**: Disable webhook_secret field in PaymentForm component ([d323af8](https://github.com/perfect-panel/ppanel-web/commit/d323af8))
|
- **payment**: Disable webhook_secret field in PaymentForm component ([d323af8](https://github.com/perfect-panel/ppanel-web/commit/d323af8))
|
||||||
* **recharge**: Set balance prop to false in PaymentMethods component ([356ae5b](https://github.com/perfect-panel/ppanel-web/commit/356ae5b))
|
- **recharge**: Set balance prop to false in PaymentMethods component ([356ae5b](https://github.com/perfect-panel/ppanel-web/commit/356ae5b))
|
||||||
|
|
||||||
# 1.0.0 (2025-04-24)
|
# 1.0.0 (2025-04-24)
|
||||||
|
|
||||||
|
|
||||||
### ♻ Code Refactoring
|
### ♻ Code Refactoring
|
||||||
|
|
||||||
* **api**: Sort and Announcement ([38d5616](https://github.com/perfect-panel/ppanel-web/commit/38d5616))
|
- **api**: Sort and Announcement ([38d5616](https://github.com/perfect-panel/ppanel-web/commit/38d5616))
|
||||||
* **auth**: Refactor user authorization handling and improve error logging ([68bc18f](https://github.com/perfect-panel/ppanel-web/commit/68bc18f))
|
- **auth**: Refactor user authorization handling and improve error logging ([68bc18f](https://github.com/perfect-panel/ppanel-web/commit/68bc18f))
|
||||||
* **config**: GenerateMetadata ([a0bb101](https://github.com/perfect-panel/ppanel-web/commit/a0bb101))
|
- **config**: GenerateMetadata ([a0bb101](https://github.com/perfect-panel/ppanel-web/commit/a0bb101))
|
||||||
* **config**: Simplify environment variable handling and improve build script ([cf54d0f](https://github.com/perfect-panel/ppanel-web/commit/cf54d0f))
|
- **config**: Simplify environment variable handling and improve build script ([cf54d0f](https://github.com/perfect-panel/ppanel-web/commit/cf54d0f))
|
||||||
* **config**: Viewport ([24b8601](https://github.com/perfect-panel/ppanel-web/commit/24b8601))
|
- **config**: Viewport ([24b8601](https://github.com/perfect-panel/ppanel-web/commit/24b8601))
|
||||||
* **core**: Restructure project for better module separation ([9d0cb8b](https://github.com/perfect-panel/ppanel-web/commit/9d0cb8b))
|
- **core**: Restructure project for better module separation ([9d0cb8b](https://github.com/perfect-panel/ppanel-web/commit/9d0cb8b))
|
||||||
* **deps**: Update ([19837a1](https://github.com/perfect-panel/ppanel-web/commit/19837a1))
|
- **deps**: Update ([19837a1](https://github.com/perfect-panel/ppanel-web/commit/19837a1))
|
||||||
* **empty**: Content ([aa4c667](https://github.com/perfect-panel/ppanel-web/commit/aa4c667))
|
- **empty**: Content ([aa4c667](https://github.com/perfect-panel/ppanel-web/commit/aa4c667))
|
||||||
* **payment**: Reconstruct the payment page ([7109472](https://github.com/perfect-panel/ppanel-web/commit/7109472))
|
- **payment**: Reconstruct the payment page ([7109472](https://github.com/perfect-panel/ppanel-web/commit/7109472))
|
||||||
* **sbscribe**: Rename and reorganize components for better structure and clarity ([5e5e4ed](https://github.com/perfect-panel/ppanel-web/commit/5e5e4ed))
|
- **sbscribe**: Rename and reorganize components for better structure and clarity ([5e5e4ed](https://github.com/perfect-panel/ppanel-web/commit/5e5e4ed))
|
||||||
* **ui**: Dependencies ([727d779](https://github.com/perfect-panel/ppanel-web/commit/727d779))
|
- **ui**: Dependencies ([727d779](https://github.com/perfect-panel/ppanel-web/commit/727d779))
|
||||||
* **ui**: Layout ([9262d7d](https://github.com/perfect-panel/ppanel-web/commit/9262d7d))
|
- **ui**: Layout ([9262d7d](https://github.com/perfect-panel/ppanel-web/commit/9262d7d))
|
||||||
* **ui**: Optimize document display ([2ca2992](https://github.com/perfect-panel/ppanel-web/commit/2ca2992))
|
- **ui**: Optimize document display ([2ca2992](https://github.com/perfect-panel/ppanel-web/commit/2ca2992))
|
||||||
* Enhance user navigation dropdown ui and styling ([d2732e6](https://github.com/perfect-panel/ppanel-web/commit/d2732e6))
|
- Enhance user navigation dropdown ui and styling ([d2732e6](https://github.com/perfect-panel/ppanel-web/commit/d2732e6))
|
||||||
* Reduce code complexity and improve readability ([e11f18c](https://github.com/perfect-panel/ppanel-web/commit/e11f18c))
|
- Reduce code complexity and improve readability ([e11f18c](https://github.com/perfect-panel/ppanel-web/commit/e11f18c))
|
||||||
|
|
||||||
|
|
||||||
### ⚡ Performance Improvements
|
### ⚡ Performance Improvements
|
||||||
|
|
||||||
* **subscribe**: Form discount price ([059a892](https://github.com/perfect-panel/ppanel-web/commit/059a892))
|
- **subscribe**: Form discount price ([059a892](https://github.com/perfect-panel/ppanel-web/commit/059a892))
|
||||||
|
|
||||||
|
|
||||||
### ✨ Features
|
### ✨ Features
|
||||||
|
|
||||||
* **accounts**: Update third-party account binding and unbinding ([1841552](https://github.com/perfect-panel/ppanel-web/commit/1841552))
|
- **accounts**: Update third-party account binding and unbinding ([1841552](https://github.com/perfect-panel/ppanel-web/commit/1841552))
|
||||||
* **ad**: Advertise ([b1105cd](https://github.com/perfect-panel/ppanel-web/commit/b1105cd))
|
- **ad**: Advertise ([b1105cd](https://github.com/perfect-panel/ppanel-web/commit/b1105cd))
|
||||||
* **admin**: Add application and rule management entries to localization files ([8b43e69](https://github.com/perfect-panel/ppanel-web/commit/8b43e69))
|
- **admin**: Add application and rule management entries to localization files ([8b43e69](https://github.com/perfect-panel/ppanel-web/commit/8b43e69))
|
||||||
* **affiliate**: Add Affiliate component with commission display and invite link functionality ([4aea4e8](https://github.com/perfect-panel/ppanel-web/commit/4aea4e8))
|
- **affiliate**: Add Affiliate component with commission display and invite link functionality ([4aea4e8](https://github.com/perfect-panel/ppanel-web/commit/4aea4e8))
|
||||||
* **affiliate**: Affiliate Detail ([a782c17](https://github.com/perfect-panel/ppanel-web/commit/a782c17))
|
- **affiliate**: Affiliate Detail ([a782c17](https://github.com/perfect-panel/ppanel-web/commit/a782c17))
|
||||||
* **affiliate**: Commission Rate ([5eec430](https://github.com/perfect-panel/ppanel-web/commit/5eec430))
|
- **affiliate**: Commission Rate ([5eec430](https://github.com/perfect-panel/ppanel-web/commit/5eec430))
|
||||||
* **affiliate**: Update affiliate component to display total commission and improve data fetching ([cc834ca](https://github.com/perfect-panel/ppanel-web/commit/cc834ca))
|
- **affiliate**: Update affiliate component to display total commission and improve data fetching ([cc834ca](https://github.com/perfect-panel/ppanel-web/commit/cc834ca))
|
||||||
* **announcement**: Popup and pinned ([f3680a7](https://github.com/perfect-panel/ppanel-web/commit/f3680a7))
|
- **announcement**: Popup and pinned ([f3680a7](https://github.com/perfect-panel/ppanel-web/commit/f3680a7))
|
||||||
* **api**: Add an interface to obtain user subscription details, update related type definitions and localized text ([cf5c39c](https://github.com/perfect-panel/ppanel-web/commit/cf5c39c))
|
- **api**: Add an interface to obtain user subscription details, update related type definitions and localized text ([cf5c39c](https://github.com/perfect-panel/ppanel-web/commit/cf5c39c))
|
||||||
* **api**: Add CheckoutOrder request and response types, and update user purchase request parameters ([48a1b97](https://github.com/perfect-panel/ppanel-web/commit/48a1b97))
|
- **api**: Add CheckoutOrder request and response types, and update user purchase request parameters ([48a1b97](https://github.com/perfect-panel/ppanel-web/commit/48a1b97))
|
||||||
* **api**: Add CheckoutOrder request and response types, and update user purchase request parameters ([dddc21c](https://github.com/perfect-panel/ppanel-web/commit/dddc21c))
|
- **api**: Add CheckoutOrder request and response types, and update user purchase request parameters ([dddc21c](https://github.com/perfect-panel/ppanel-web/commit/dddc21c))
|
||||||
* **api**: Add new subscription properties and locale support for deduction ratios and reset cycles ([fec80f5](https://github.com/perfect-panel/ppanel-web/commit/fec80f5))
|
- **api**: Add new subscription properties and locale support for deduction ratios and reset cycles ([fec80f5](https://github.com/perfect-panel/ppanel-web/commit/fec80f5))
|
||||||
* **api**: Add Time Period Configuration ([837157c](https://github.com/perfect-panel/ppanel-web/commit/837157c))
|
- **api**: Add Time Period Configuration ([837157c](https://github.com/perfect-panel/ppanel-web/commit/837157c))
|
||||||
* **api**: Telegram ([17ce96a](https://github.com/perfect-panel/ppanel-web/commit/17ce96a))
|
- **api**: Telegram ([17ce96a](https://github.com/perfect-panel/ppanel-web/commit/17ce96a))
|
||||||
* **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**: 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-control**: Update general ([3883646](https://github.com/perfect-panel/ppanel-web/commit/3883646))
|
||||||
* **auth**: Add email and SMS code sending functionality with localization updates ([57eaa55](https://github.com/perfect-panel/ppanel-web/commit/57eaa55))
|
- **auth**: Add email and SMS code sending functionality with localization updates ([57eaa55](https://github.com/perfect-panel/ppanel-web/commit/57eaa55))
|
||||||
* **auth**: Add Oauth configuration for Telegram, Facebook, Google, Github, and Apple ([18ee600](https://github.com/perfect-panel/ppanel-web/commit/18ee600))
|
- **auth**: Add Oauth configuration for Telegram, Facebook, Google, Github, and Apple ([18ee600](https://github.com/perfect-panel/ppanel-web/commit/18ee600))
|
||||||
* **auth**: Add privacy policy link to the footer ([8e16ef1](https://github.com/perfect-panel/ppanel-web/commit/8e16ef1))
|
- **auth**: Add privacy policy link to the footer ([8e16ef1](https://github.com/perfect-panel/ppanel-web/commit/8e16ef1))
|
||||||
* **auth**: Add SMS and email configuration options to global store and update localization ([4acf7b1](https://github.com/perfect-panel/ppanel-web/commit/4acf7b1))
|
- **auth**: Add SMS and email configuration options to global store and update localization ([4acf7b1](https://github.com/perfect-panel/ppanel-web/commit/4acf7b1))
|
||||||
* **auth**: Add type parameter to SendCode and update related API typings ([4198871](https://github.com/perfect-panel/ppanel-web/commit/4198871))
|
- **auth**: Add type parameter to SendCode and update related API typings ([4198871](https://github.com/perfect-panel/ppanel-web/commit/4198871))
|
||||||
* **auth**: Enhance user registration with invite handling and logo display ([207bc24](https://github.com/perfect-panel/ppanel-web/commit/207bc24))
|
- **auth**: Enhance user registration with invite handling and logo display ([207bc24](https://github.com/perfect-panel/ppanel-web/commit/207bc24))
|
||||||
* **auth**: Redirect user after OAuth login and add logos icon collection ([aa6dda8](https://github.com/perfect-panel/ppanel-web/commit/aa6dda8))
|
- **auth**: Redirect user after OAuth login and add logos icon collection ([aa6dda8](https://github.com/perfect-panel/ppanel-web/commit/aa6dda8))
|
||||||
* **auth**: Refactor mobile authentication config to support whitelist functionality ([c761ec7](https://github.com/perfect-panel/ppanel-web/commit/c761ec7))
|
- **auth**: Refactor mobile authentication config to support whitelist functionality ([c761ec7](https://github.com/perfect-panel/ppanel-web/commit/c761ec7))
|
||||||
* **billing**: Update Billing ([078fc9d](https://github.com/perfect-panel/ppanel-web/commit/078fc9d))
|
- **billing**: Update Billing ([078fc9d](https://github.com/perfect-panel/ppanel-web/commit/078fc9d))
|
||||||
* **cdn**: Add CDN URL configuration and update related references ([0c90733](https://github.com/perfect-panel/ppanel-web/commit/0c90733))
|
- **cdn**: Add CDN URL configuration and update related references ([0c90733](https://github.com/perfect-panel/ppanel-web/commit/0c90733))
|
||||||
* **config**: Add application selection and encryption settings to configuration form ([88b3504](https://github.com/perfect-panel/ppanel-web/commit/88b3504))
|
- **config**: Add application selection and encryption settings to configuration form ([88b3504](https://github.com/perfect-panel/ppanel-web/commit/88b3504))
|
||||||
* **config**: FormatBytes ([9251a09](https://github.com/perfect-panel/ppanel-web/commit/9251a09))
|
- **config**: FormatBytes ([9251a09](https://github.com/perfect-panel/ppanel-web/commit/9251a09))
|
||||||
* **config**: Protocol type ([a3b45b4](https://github.com/perfect-panel/ppanel-web/commit/a3b45b4))
|
- **config**: Protocol type ([a3b45b4](https://github.com/perfect-panel/ppanel-web/commit/a3b45b4))
|
||||||
* **config**: Update encryption fields in configuration form and refactor OAuth callback parameters ([652e032](https://github.com/perfect-panel/ppanel-web/commit/652e032))
|
- **config**: Update encryption fields in configuration form and refactor OAuth callback parameters ([652e032](https://github.com/perfect-panel/ppanel-web/commit/652e032))
|
||||||
* **config**: Webhook Domain ([01e06c6](https://github.com/perfect-panel/ppanel-web/commit/01e06c6))
|
- **config**: Webhook Domain ([01e06c6](https://github.com/perfect-panel/ppanel-web/commit/01e06c6))
|
||||||
* **dashboard**: Optimization ([5b3f4b4](https://github.com/perfect-panel/ppanel-web/commit/5b3f4b4))
|
- **dashboard**: Optimization ([5b3f4b4](https://github.com/perfect-panel/ppanel-web/commit/5b3f4b4))
|
||||||
* **dashboard**: Statistics ([2926abc](https://github.com/perfect-panel/ppanel-web/commit/2926abc))
|
- **dashboard**: Statistics ([2926abc](https://github.com/perfect-panel/ppanel-web/commit/2926abc))
|
||||||
* **device**: Modify IMEI to device identifier support ([e3f9ef6](https://github.com/perfect-panel/ppanel-web/commit/e3f9ef6))
|
- **device**: Modify IMEI to device identifier support ([e3f9ef6](https://github.com/perfect-panel/ppanel-web/commit/e3f9ef6))
|
||||||
* **email**: Add traffic exhaustion template ([bb3bd7b](https://github.com/perfect-panel/ppanel-web/commit/bb3bd7b))
|
- **email**: Add traffic exhaustion template ([bb3bd7b](https://github.com/perfect-panel/ppanel-web/commit/bb3bd7b))
|
||||||
* **favicon**: Update SVG favicon design for admin and user interfaces ([1d91738](https://github.com/perfect-panel/ppanel-web/commit/1d91738))
|
- **favicon**: Update SVG favicon design for admin and user interfaces ([1d91738](https://github.com/perfect-panel/ppanel-web/commit/1d91738))
|
||||||
* **formatting**: Update differenceInDays function to return whole days or two decimal places ([bf58f25](https://github.com/perfect-panel/ppanel-web/commit/bf58f25))
|
- **formatting**: Update differenceInDays function to return whole days or two decimal places ([bf58f25](https://github.com/perfect-panel/ppanel-web/commit/bf58f25))
|
||||||
* **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))
|
- **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))
|
||||||
* **global**: Add custom data ([6dbebd1](https://github.com/perfect-panel/ppanel-web/commit/6dbebd1))
|
- **global**: Add custom data ([6dbebd1](https://github.com/perfect-panel/ppanel-web/commit/6dbebd1))
|
||||||
* **global**: Add SMS configuration options to global store ([39a9ce6](https://github.com/perfect-panel/ppanel-web/commit/39a9ce6))
|
- **global**: Add SMS configuration options to global store ([39a9ce6](https://github.com/perfect-panel/ppanel-web/commit/39a9ce6))
|
||||||
* **header**: Update locales ([bfb6c27](https://github.com/perfect-panel/ppanel-web/commit/bfb6c27))
|
- **header**: Update locales ([bfb6c27](https://github.com/perfect-panel/ppanel-web/commit/bfb6c27))
|
||||||
* **imei**: Add IMEI related internationalization support and menu items ([13c3337](https://github.com/perfect-panel/ppanel-web/commit/13c3337))
|
- **imei**: Add IMEI related internationalization support and menu items ([13c3337](https://github.com/perfect-panel/ppanel-web/commit/13c3337))
|
||||||
* **input**: Add minimum value constraint and enhance number handling in EnhancedInput ([ce31972](https://github.com/perfect-panel/ppanel-web/commit/ce31972))
|
- **input**: Add minimum value constraint and enhance number handling in EnhancedInput ([ce31972](https://github.com/perfect-panel/ppanel-web/commit/ce31972))
|
||||||
* **input**: Add minimum value constraint and enhance number handling in EnhancedInput ([94822d9](https://github.com/perfect-panel/ppanel-web/commit/94822d9))
|
- **input**: Add minimum value constraint and enhance number handling in EnhancedInput ([94822d9](https://github.com/perfect-panel/ppanel-web/commit/94822d9))
|
||||||
* **loading**: Add loading components and integrate them in Providers ([d5847fa](https://github.com/perfect-panel/ppanel-web/commit/d5847fa))
|
- **loading**: Add loading components and integrate them in Providers ([d5847fa](https://github.com/perfect-panel/ppanel-web/commit/d5847fa))
|
||||||
* **loading**: Replace loading animation with a simpler spinner and loading text ([f72df3a](https://github.com/perfect-panel/ppanel-web/commit/f72df3a))
|
- **loading**: Replace loading animation with a simpler spinner and loading text ([f72df3a](https://github.com/perfect-panel/ppanel-web/commit/f72df3a))
|
||||||
* **loading**: Replace loading animation with a simpler spinner and loading text ([b8316bb](https://github.com/perfect-panel/ppanel-web/commit/b8316bb))
|
- **loading**: Replace loading animation with a simpler spinner and loading text ([b8316bb](https://github.com/perfect-panel/ppanel-web/commit/b8316bb))
|
||||||
* **locale**: Add Persian ([93a0a88](https://github.com/perfect-panel/ppanel-web/commit/93a0a88))
|
- **locale**: Add Persian ([93a0a88](https://github.com/perfect-panel/ppanel-web/commit/93a0a88))
|
||||||
* **locales**: Add area code and telephone fields to user forms in multiple languages ([9b8258c](https://github.com/perfect-panel/ppanel-web/commit/9b8258c))
|
- **locales**: Add area code and telephone fields to user forms in multiple languages ([9b8258c](https://github.com/perfect-panel/ppanel-web/commit/9b8258c))
|
||||||
* **locales**: Add description information of communication keys and encryption methods to enhance client configuration capabilities ([d1f5a9b](https://github.com/perfect-panel/ppanel-web/commit/d1f5a9b))
|
- **locales**: Add description information of communication keys and encryption methods to enhance client configuration capabilities ([d1f5a9b](https://github.com/perfect-panel/ppanel-web/commit/d1f5a9b))
|
||||||
* **locales**: Add kick offline confirmation and success messages in multiple languages ([5db5343](https://github.com/perfect-panel/ppanel-web/commit/5db5343))
|
- **locales**: Add kick offline confirmation and success messages in multiple languages ([5db5343](https://github.com/perfect-panel/ppanel-web/commit/5db5343))
|
||||||
* **locales**: Add multiple languages ([b243ab9](https://github.com/perfect-panel/ppanel-web/commit/b243ab9))
|
- **locales**: Add multiple languages ([b243ab9](https://github.com/perfect-panel/ppanel-web/commit/b243ab9))
|
||||||
* **locales**: Replace 'nodeGroupId' with 'groupId' in multiple language files for consistency ([a4e9d5d](https://github.com/perfect-panel/ppanel-web/commit/a4e9d5d))
|
- **locales**: Replace 'nodeGroupId' with 'groupId' in multiple language files for consistency ([a4e9d5d](https://github.com/perfect-panel/ppanel-web/commit/a4e9d5d))
|
||||||
* **locales**: Update 'deductBalance' to 'giftAmount' across multiple languages and fix newline in announcement.json ([70497af](https://github.com/perfect-panel/ppanel-web/commit/70497af))
|
- **locales**: Update 'deductBalance' to 'giftAmount' across multiple languages and fix newline in announcement.json ([70497af](https://github.com/perfect-panel/ppanel-web/commit/70497af))
|
||||||
* **locales**: Update 'sms' to 'mobile' in authentication methods across multiple languages ([fea2171](https://github.com/perfect-panel/ppanel-web/commit/fea2171))
|
- **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))
|
- **log**: Add message log retrieval functionality and update related typings ([1c0ecae](https://github.com/perfect-panel/ppanel-web/commit/1c0ecae))
|
||||||
* **node-form**: Update number input fields to enforce step, min, and max values ([3f7b6d1](https://github.com/perfect-panel/ppanel-web/commit/3f7b6d1))
|
- **node-form**: Update number input fields to enforce step, min, and max values ([3f7b6d1](https://github.com/perfect-panel/ppanel-web/commit/3f7b6d1))
|
||||||
* **node-subscription**: Add copy functionality for columns ([3a81e37](https://github.com/perfect-panel/ppanel-web/commit/3a81e37))
|
- **node-subscription**: Add copy functionality for columns ([3a81e37](https://github.com/perfect-panel/ppanel-web/commit/3a81e37))
|
||||||
* **node**: Add NodeStatus ([c712624](https://github.com/perfect-panel/ppanel-web/commit/c712624))
|
- **node**: Add NodeStatus ([c712624](https://github.com/perfect-panel/ppanel-web/commit/c712624))
|
||||||
* **node**: Add protocol ([301b635](https://github.com/perfect-panel/ppanel-web/commit/301b635))
|
- **node**: Add protocol ([301b635](https://github.com/perfect-panel/ppanel-web/commit/301b635))
|
||||||
* **node**: Add serverKey ([25ce37e](https://github.com/perfect-panel/ppanel-web/commit/25ce37e))
|
- **node**: Add serverKey ([25ce37e](https://github.com/perfect-panel/ppanel-web/commit/25ce37e))
|
||||||
* **node**: Add status ([c06372b](https://github.com/perfect-panel/ppanel-web/commit/c06372b))
|
- **node**: Add status ([c06372b](https://github.com/perfect-panel/ppanel-web/commit/c06372b))
|
||||||
* **node**: Add tags ([f408fdf](https://github.com/perfect-panel/ppanel-web/commit/f408fdf))
|
- **node**: Add tags ([f408fdf](https://github.com/perfect-panel/ppanel-web/commit/f408fdf))
|
||||||
* **node**: Move the node configuration to the server module ([7f0f5ce](https://github.com/perfect-panel/ppanel-web/commit/7f0f5ce))
|
- **node**: Move the node configuration to the server module ([7f0f5ce](https://github.com/perfect-panel/ppanel-web/commit/7f0f5ce))
|
||||||
* **oauth**: Add certification component for handling OAuth login callbacks and improve user authentication flow ([5ed04c0](https://github.com/perfect-panel/ppanel-web/commit/5ed04c0))
|
- **oauth**: Add certification component for handling OAuth login callbacks and improve user authentication flow ([5ed04c0](https://github.com/perfect-panel/ppanel-web/commit/5ed04c0))
|
||||||
* **oauth**: Implement OAuth token retrieval and refactor login callback handling ([40a6f7c](https://github.com/perfect-panel/ppanel-web/commit/40a6f7c))
|
- **oauth**: Implement OAuth token retrieval and refactor login callback handling ([40a6f7c](https://github.com/perfect-panel/ppanel-web/commit/40a6f7c))
|
||||||
* **oauth**: Refactor platform parameter handling and improve logout redirection logic ([8346c85](https://github.com/perfect-panel/ppanel-web/commit/8346c85))
|
- **oauth**: Refactor platform parameter handling and improve logout redirection logic ([8346c85](https://github.com/perfect-panel/ppanel-web/commit/8346c85))
|
||||||
* **oauth**: Update OAuth login handling to use callback parameter and improve URL parameter retrieval ([9227411](https://github.com/perfect-panel/ppanel-web/commit/9227411))
|
- **oauth**: Update OAuth login handling to use callback parameter and improve URL parameter retrieval ([9227411](https://github.com/perfect-panel/ppanel-web/commit/9227411))
|
||||||
* **payment**: Add bank card payment ([7fa3a57](https://github.com/perfect-panel/ppanel-web/commit/7fa3a57))
|
- **payment**: Add bank card payment ([7fa3a57](https://github.com/perfect-panel/ppanel-web/commit/7fa3a57))
|
||||||
* **payment**: Add isEdit prop to PaymentForm and disable fields when editing ([85f55de](https://github.com/perfect-panel/ppanel-web/commit/85f55de))
|
- **payment**: Add isEdit prop to PaymentForm and disable fields when editing ([85f55de](https://github.com/perfect-panel/ppanel-web/commit/85f55de))
|
||||||
* **platform**: Update platform naming and add keywords and custom HTML fields ([6384237](https://github.com/perfect-panel/ppanel-web/commit/6384237))
|
- **platform**: Update platform naming and add keywords and custom HTML fields ([6384237](https://github.com/perfect-panel/ppanel-web/commit/6384237))
|
||||||
* **privacy-policy**: Add privacy policy related text and links ([baa68f0](https://github.com/perfect-panel/ppanel-web/commit/baa68f0))
|
- **privacy-policy**: Add privacy policy related text and links ([baa68f0](https://github.com/perfect-panel/ppanel-web/commit/baa68f0))
|
||||||
* **profile**: Update localization strings and enhance third-party account binding ([2d1effb](https://github.com/perfect-panel/ppanel-web/commit/2d1effb))
|
- **profile**: Update localization strings and enhance third-party account binding ([2d1effb](https://github.com/perfect-panel/ppanel-web/commit/2d1effb))
|
||||||
* **relay**: Add relay mode configuration and update related schemas ([3cc9477](https://github.com/perfect-panel/ppanel-web/commit/3cc9477))
|
- **relay**: Add relay mode configuration and update related schemas ([3cc9477](https://github.com/perfect-panel/ppanel-web/commit/3cc9477))
|
||||||
* **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))
|
- **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))
|
||||||
* **schema**: Add security field to hysteria2 and tuic schemas ([cd59d44](https://github.com/perfect-panel/ppanel-web/commit/cd59d44))
|
- **schema**: Add security field to hysteria2 and tuic schemas ([cd59d44](https://github.com/perfect-panel/ppanel-web/commit/cd59d44))
|
||||||
* **site**: Added localization support for custom HTML and keyword fields ([f9d7736](https://github.com/perfect-panel/ppanel-web/commit/f9d7736))
|
- **site**: Added localization support for custom HTML and keyword fields ([f9d7736](https://github.com/perfect-panel/ppanel-web/commit/f9d7736))
|
||||||
* **sms**: Update locales ([938363b](https://github.com/perfect-panel/ppanel-web/commit/938363b))
|
- **sms**: Update locales ([938363b](https://github.com/perfect-panel/ppanel-web/commit/938363b))
|
||||||
* **stats**: Replace dynamic stat fetching with environment constants for user, server, and location counts ([46ae166](https://github.com/perfect-panel/ppanel-web/commit/46ae166))
|
- **stats**: Replace dynamic stat fetching with environment constants for user, server, and location counts ([46ae166](https://github.com/perfect-panel/ppanel-web/commit/46ae166))
|
||||||
* **subscribe**: Add 'sold' column to SubscribeTable and update inventory terminology ([19619fd](https://github.com/perfect-panel/ppanel-web/commit/19619fd))
|
- **subscribe**: Add 'sold' column to SubscribeTable and update inventory terminology ([19619fd](https://github.com/perfect-panel/ppanel-web/commit/19619fd))
|
||||||
* **subscribe**: Add reset_time to API typings and update unsubscribe logic ([eeea165](https://github.com/perfect-panel/ppanel-web/commit/eeea165))
|
- **subscribe**: Add reset_time to API typings and update unsubscribe logic ([eeea165](https://github.com/perfect-panel/ppanel-web/commit/eeea165))
|
||||||
* **subscribe**: Add subscribe_discount type ([f99c604](https://github.com/perfect-panel/ppanel-web/commit/f99c604))
|
- **subscribe**: Add subscribe_discount type ([f99c604](https://github.com/perfect-panel/ppanel-web/commit/f99c604))
|
||||||
* **subscribe**: Add subscription credits ([5bc7905](https://github.com/perfect-panel/ppanel-web/commit/5bc7905))
|
- **subscribe**: Add subscription credits ([5bc7905](https://github.com/perfect-panel/ppanel-web/commit/5bc7905))
|
||||||
* **subscribe**: Add unit time ([39d07ec](https://github.com/perfect-panel/ppanel-web/commit/39d07ec))
|
- **subscribe**: Add unit time ([39d07ec](https://github.com/perfect-panel/ppanel-web/commit/39d07ec))
|
||||||
* **subscribe**: Add unsubscribe functionality with confirmation messages and localized strings ([b2a2f42](https://github.com/perfect-panel/ppanel-web/commit/b2a2f42))
|
- **subscribe**: Add unsubscribe functionality with confirmation messages and localized strings ([b2a2f42](https://github.com/perfect-panel/ppanel-web/commit/b2a2f42))
|
||||||
* **subscribe**: Improve error handling in subscription forms and update component props ([d28a10b](https://github.com/perfect-panel/ppanel-web/commit/d28a10b))
|
- **subscribe**: Improve error handling in subscription forms and update component props ([d28a10b](https://github.com/perfect-panel/ppanel-web/commit/d28a10b))
|
||||||
* **subscribe**: Improve layout and styling in subscription components ([5766376](https://github.com/perfect-panel/ppanel-web/commit/5766376))
|
- **subscribe**: Improve layout and styling in subscription components ([5766376](https://github.com/perfect-panel/ppanel-web/commit/5766376))
|
||||||
* **subscribe**: Move subscription configuration and application to subscription module ([f90d4d2](https://github.com/perfect-panel/ppanel-web/commit/f90d4d2))
|
- **subscribe**: Move subscription configuration and application to subscription module ([f90d4d2](https://github.com/perfect-panel/ppanel-web/commit/f90d4d2))
|
||||||
* **subscribe**: Update SubscribeTable component to use API.SubscribeItem type and ensure proper type casting ([f26f1c2](https://github.com/perfect-panel/ppanel-web/commit/f26f1c2))
|
- **subscribe**: Update SubscribeTable component to use API.SubscribeItem type and ensure proper type casting ([f26f1c2](https://github.com/perfect-panel/ppanel-web/commit/f26f1c2))
|
||||||
* **subscribe**: Update suffix from 'MB' to 'Mbps' and enhance speed limit display logic ([3547bb1](https://github.com/perfect-panel/ppanel-web/commit/3547bb1))
|
- **subscribe**: Update suffix from 'MB' to 'Mbps' and enhance speed limit display logic ([3547bb1](https://github.com/perfect-panel/ppanel-web/commit/3547bb1))
|
||||||
* **subscription**: Improve layout and organization of subscription detail tabs ([e4630f8](https://github.com/perfect-panel/ppanel-web/commit/e4630f8))
|
- **subscription**: Improve layout and organization of subscription detail tabs ([e4630f8](https://github.com/perfect-panel/ppanel-web/commit/e4630f8))
|
||||||
* **subscription**: Add delete user subscription functionality ([1fc3a10](https://github.com/perfect-panel/ppanel-web/commit/1fc3a10))
|
- **subscription**: Add delete user subscription functionality ([1fc3a10](https://github.com/perfect-panel/ppanel-web/commit/1fc3a10))
|
||||||
* **subscription**: Add localized messages for existing subscriptions and deletion restrictions ([e8a72d5](https://github.com/perfect-panel/ppanel-web/commit/e8a72d5))
|
- **subscription**: Add localized messages for existing subscriptions and deletion restrictions ([e8a72d5](https://github.com/perfect-panel/ppanel-web/commit/e8a72d5))
|
||||||
* **subscription**: Refactor subscription handling and update imports for better organization ([2215c7f](https://github.com/perfect-panel/ppanel-web/commit/2215c7f))
|
- **subscription**: Refactor subscription handling and update imports for better organization ([2215c7f](https://github.com/perfect-panel/ppanel-web/commit/2215c7f))
|
||||||
* **table**: Add sorting support for Node and subscription columns ([27924b0](https://github.com/perfect-panel/ppanel-web/commit/27924b0))
|
- **table**: Add sorting support for Node and subscription columns ([27924b0](https://github.com/perfect-panel/ppanel-web/commit/27924b0))
|
||||||
* **table**: Supports drag and drop sorting ([2f56ef5](https://github.com/perfect-panel/ppanel-web/commit/2f56ef5))
|
- **table**: Supports drag and drop sorting ([2f56ef5](https://github.com/perfect-panel/ppanel-web/commit/2f56ef5))
|
||||||
* **timeline**: Simplify timeline component layout and remove commented-out code ([fbad3b0](https://github.com/perfect-panel/ppanel-web/commit/fbad3b0))
|
- **timeline**: Simplify timeline component layout and remove commented-out code ([fbad3b0](https://github.com/perfect-panel/ppanel-web/commit/fbad3b0))
|
||||||
* **tos**: Display data ([6024454](https://github.com/perfect-panel/ppanel-web/commit/6024454))
|
- **tos**: Display data ([6024454](https://github.com/perfect-panel/ppanel-web/commit/6024454))
|
||||||
* **tutorial**: Add common tutorial list ([872252c](https://github.com/perfect-panel/ppanel-web/commit/872252c))
|
- **tutorial**: Add common tutorial list ([872252c](https://github.com/perfect-panel/ppanel-web/commit/872252c))
|
||||||
* **tutorial**: Fetch the latest tutorial version from GitHub API for dynamic URL generation ([28f8c78](https://github.com/perfect-panel/ppanel-web/commit/28f8c78))
|
- **tutorial**: Fetch the latest tutorial version from GitHub API for dynamic URL generation ([28f8c78](https://github.com/perfect-panel/ppanel-web/commit/28f8c78))
|
||||||
* **ui**: System Tool ([1836980](https://github.com/perfect-panel/ppanel-web/commit/1836980))
|
- **ui**: System Tool ([1836980](https://github.com/perfect-panel/ppanel-web/commit/1836980))
|
||||||
* **ui**: Update homepage data ([8425b13](https://github.com/perfect-panel/ppanel-web/commit/8425b13))
|
- **ui**: Update homepage data ([8425b13](https://github.com/perfect-panel/ppanel-web/commit/8425b13))
|
||||||
* **ui**: Update input components and enhance card minimum width for better layout ([8a02310](https://github.com/perfect-panel/ppanel-web/commit/8a02310))
|
- **ui**: Update input components and enhance card minimum width for better layout ([8a02310](https://github.com/perfect-panel/ppanel-web/commit/8a02310))
|
||||||
* **user**: Add 'gift_amount' field and update related references in user services and components ([b13c77e](https://github.com/perfect-panel/ppanel-web/commit/b13c77e))
|
- **user**: Add 'gift_amount' field and update related references in user services and components ([b13c77e](https://github.com/perfect-panel/ppanel-web/commit/b13c77e))
|
||||||
* **user**: Add telephone input with area code selection and update localization ([585b99c](https://github.com/perfect-panel/ppanel-web/commit/585b99c))
|
- **user**: Add telephone input with area code selection and update localization ([585b99c](https://github.com/perfect-panel/ppanel-web/commit/585b99c))
|
||||||
* **user**: Add user Detail ([3a3d223](https://github.com/perfect-panel/ppanel-web/commit/3a3d223))
|
- **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))
|
- **user**: Add User Detail ([fdaf11b](https://github.com/perfect-panel/ppanel-web/commit/fdaf11b))
|
||||||
* **user**: Integrate subscription list into user management, update request parameters and types ([8d49dac](https://github.com/perfect-panel/ppanel-web/commit/8d49dac))
|
- **user**: Integrate subscription list into user management, update request parameters and types ([8d49dac](https://github.com/perfect-panel/ppanel-web/commit/8d49dac))
|
||||||
* Update Auth Control ([c59742a](https://github.com/perfect-panel/ppanel-web/commit/c59742a))
|
- Update Auth Control ([c59742a](https://github.com/perfect-panel/ppanel-web/commit/c59742a))
|
||||||
|
|
||||||
|
|
||||||
### 🎫 Chores
|
### 🎫 Chores
|
||||||
|
|
||||||
* **config**: Entry locale ([5737331](https://github.com/perfect-panel/ppanel-web/commit/5737331))
|
- **config**: Entry locale ([5737331](https://github.com/perfect-panel/ppanel-web/commit/5737331))
|
||||||
* **deps**: Update package dependencies across multiple projects for improved stability and performance ([b01a5bc](https://github.com/perfect-panel/ppanel-web/commit/b01a5bc))
|
- **deps**: Update package dependencies across multiple projects for improved stability and performance ([b01a5bc](https://github.com/perfect-panel/ppanel-web/commit/b01a5bc))
|
||||||
* **init**: Project initialization ([829edfa](https://github.com/perfect-panel/ppanel-web/commit/829edfa))
|
- **init**: Project initialization ([829edfa](https://github.com/perfect-panel/ppanel-web/commit/829edfa))
|
||||||
* **merge**: Add advertising module and device settings ([0130e02](https://github.com/perfect-panel/ppanel-web/commit/0130e02))
|
- **merge**: Add advertising module and device settings ([0130e02](https://github.com/perfect-panel/ppanel-web/commit/0130e02))
|
||||||
* **merge**: Bump version to 1.0.0-beta.26 and update changelog ([3222016](https://github.com/perfect-panel/ppanel-web/commit/3222016))
|
- **merge**: Bump version to 1.0.0-beta.26 and update changelog ([3222016](https://github.com/perfect-panel/ppanel-web/commit/3222016))
|
||||||
* **release**: V1.0.0-beta.1 [skip ci] ([7284d1c](https://github.com/perfect-panel/ppanel-web/commit/7284d1c))
|
- **release**: V1.0.0-beta.1 [skip ci] ([7284d1c](https://github.com/perfect-panel/ppanel-web/commit/7284d1c))
|
||||||
* **release**: V1.0.0-beta.10 [skip ci] ([5cf573a](https://github.com/perfect-panel/ppanel-web/commit/5cf573a))
|
- **release**: V1.0.0-beta.10 [skip ci] ([5cf573a](https://github.com/perfect-panel/ppanel-web/commit/5cf573a))
|
||||||
* **release**: V1.0.0-beta.11 [skip ci] ([1f29506](https://github.com/perfect-panel/ppanel-web/commit/1f29506))
|
- **release**: V1.0.0-beta.11 [skip ci] ([1f29506](https://github.com/perfect-panel/ppanel-web/commit/1f29506))
|
||||||
* **release**: V1.0.0-beta.12 [skip ci] ([4418c47](https://github.com/perfect-panel/ppanel-web/commit/4418c47))
|
- **release**: V1.0.0-beta.12 [skip ci] ([4418c47](https://github.com/perfect-panel/ppanel-web/commit/4418c47))
|
||||||
* **release**: V1.0.0-beta.13 [skip ci] ([23c974a](https://github.com/perfect-panel/ppanel-web/commit/23c974a))
|
- **release**: V1.0.0-beta.13 [skip ci] ([23c974a](https://github.com/perfect-panel/ppanel-web/commit/23c974a))
|
||||||
* **release**: V1.0.0-beta.14 [skip ci] ([0fb0d8b](https://github.com/perfect-panel/ppanel-web/commit/0fb0d8b))
|
- **release**: V1.0.0-beta.14 [skip ci] ([0fb0d8b](https://github.com/perfect-panel/ppanel-web/commit/0fb0d8b))
|
||||||
* **release**: V1.0.0-beta.15 [skip ci] ([b2e8fad](https://github.com/perfect-panel/ppanel-web/commit/b2e8fad))
|
- **release**: V1.0.0-beta.15 [skip ci] ([b2e8fad](https://github.com/perfect-panel/ppanel-web/commit/b2e8fad))
|
||||||
* **release**: V1.0.0-beta.16 [skip ci] ([c3eff0a](https://github.com/perfect-panel/ppanel-web/commit/c3eff0a))
|
- **release**: V1.0.0-beta.16 [skip ci] ([c3eff0a](https://github.com/perfect-panel/ppanel-web/commit/c3eff0a))
|
||||||
* **release**: V1.0.0-beta.17 [skip ci] ([5b64389](https://github.com/perfect-panel/ppanel-web/commit/5b64389))
|
- **release**: V1.0.0-beta.17 [skip ci] ([5b64389](https://github.com/perfect-panel/ppanel-web/commit/5b64389))
|
||||||
* **release**: V1.0.0-beta.18 [skip ci] ([4a00233](https://github.com/perfect-panel/ppanel-web/commit/4a00233))
|
- **release**: V1.0.0-beta.18 [skip ci] ([4a00233](https://github.com/perfect-panel/ppanel-web/commit/4a00233))
|
||||||
* **release**: V1.0.0-beta.19 [skip ci] ([0f15fb8](https://github.com/perfect-panel/ppanel-web/commit/0f15fb8))
|
- **release**: V1.0.0-beta.19 [skip ci] ([0f15fb8](https://github.com/perfect-panel/ppanel-web/commit/0f15fb8))
|
||||||
* **release**: V1.0.0-beta.2 [skip ci] ([087c36c](https://github.com/perfect-panel/ppanel-web/commit/087c36c))
|
- **release**: V1.0.0-beta.2 [skip ci] ([087c36c](https://github.com/perfect-panel/ppanel-web/commit/087c36c))
|
||||||
* **release**: V1.0.0-beta.20 [skip ci] ([bbd44f0](https://github.com/perfect-panel/ppanel-web/commit/bbd44f0))
|
- **release**: V1.0.0-beta.20 [skip ci] ([bbd44f0](https://github.com/perfect-panel/ppanel-web/commit/bbd44f0))
|
||||||
* **release**: V1.0.0-beta.21 [skip ci] ([ca642c2](https://github.com/perfect-panel/ppanel-web/commit/ca642c2))
|
- **release**: V1.0.0-beta.21 [skip ci] ([ca642c2](https://github.com/perfect-panel/ppanel-web/commit/ca642c2))
|
||||||
* **release**: V1.0.0-beta.22 [skip ci] ([c0fb34f](https://github.com/perfect-panel/ppanel-web/commit/c0fb34f))
|
- **release**: V1.0.0-beta.22 [skip ci] ([c0fb34f](https://github.com/perfect-panel/ppanel-web/commit/c0fb34f))
|
||||||
* **release**: V1.0.0-beta.23 [skip ci] ([cf1d66d](https://github.com/perfect-panel/ppanel-web/commit/cf1d66d))
|
- **release**: V1.0.0-beta.23 [skip ci] ([cf1d66d](https://github.com/perfect-panel/ppanel-web/commit/cf1d66d))
|
||||||
* **release**: V1.0.0-beta.24 [skip ci] ([01a3aa0](https://github.com/perfect-panel/ppanel-web/commit/01a3aa0))
|
- **release**: V1.0.0-beta.24 [skip ci] ([01a3aa0](https://github.com/perfect-panel/ppanel-web/commit/01a3aa0))
|
||||||
* **release**: V1.0.0-beta.25 [skip ci] ([047a698](https://github.com/perfect-panel/ppanel-web/commit/047a698))
|
- **release**: V1.0.0-beta.25 [skip ci] ([047a698](https://github.com/perfect-panel/ppanel-web/commit/047a698))
|
||||||
* **release**: V1.0.0-beta.26 [skip ci] ([79edea7](https://github.com/perfect-panel/ppanel-web/commit/79edea7))
|
- **release**: V1.0.0-beta.26 [skip ci] ([79edea7](https://github.com/perfect-panel/ppanel-web/commit/79edea7))
|
||||||
* **release**: V1.0.0-beta.27 [skip ci] ([092477b](https://github.com/perfect-panel/ppanel-web/commit/092477b))
|
- **release**: V1.0.0-beta.27 [skip ci] ([092477b](https://github.com/perfect-panel/ppanel-web/commit/092477b))
|
||||||
* **release**: V1.0.0-beta.27 [skip ci] ([85fdc36](https://github.com/perfect-panel/ppanel-web/commit/85fdc36))
|
- **release**: V1.0.0-beta.27 [skip ci] ([85fdc36](https://github.com/perfect-panel/ppanel-web/commit/85fdc36))
|
||||||
* **release**: V1.0.0-beta.28 [skip ci] ([786ba0e](https://github.com/perfect-panel/ppanel-web/commit/786ba0e))
|
- **release**: V1.0.0-beta.28 [skip ci] ([786ba0e](https://github.com/perfect-panel/ppanel-web/commit/786ba0e))
|
||||||
* **release**: V1.0.0-beta.28 [skip ci] ([d10ecc9](https://github.com/perfect-panel/ppanel-web/commit/d10ecc9))
|
- **release**: V1.0.0-beta.28 [skip ci] ([d10ecc9](https://github.com/perfect-panel/ppanel-web/commit/d10ecc9))
|
||||||
* **release**: V1.0.0-beta.29 [skip ci] ([29bc3c7](https://github.com/perfect-panel/ppanel-web/commit/29bc3c7))
|
- **release**: V1.0.0-beta.29 [skip ci] ([29bc3c7](https://github.com/perfect-panel/ppanel-web/commit/29bc3c7))
|
||||||
* **release**: V1.0.0-beta.3 [skip ci] ([cd49427](https://github.com/perfect-panel/ppanel-web/commit/cd49427))
|
- **release**: V1.0.0-beta.3 [skip ci] ([cd49427](https://github.com/perfect-panel/ppanel-web/commit/cd49427))
|
||||||
* **release**: V1.0.0-beta.30 [skip ci] ([db0d9e0](https://github.com/perfect-panel/ppanel-web/commit/db0d9e0))
|
- **release**: V1.0.0-beta.30 [skip ci] ([db0d9e0](https://github.com/perfect-panel/ppanel-web/commit/db0d9e0))
|
||||||
* **release**: V1.0.0-beta.31 [skip ci] ([aa1d426](https://github.com/perfect-panel/ppanel-web/commit/aa1d426))
|
- **release**: V1.0.0-beta.31 [skip ci] ([aa1d426](https://github.com/perfect-panel/ppanel-web/commit/aa1d426))
|
||||||
* **release**: V1.0.0-beta.32 [skip ci] ([fa56eb8](https://github.com/perfect-panel/ppanel-web/commit/fa56eb8))
|
- **release**: V1.0.0-beta.32 [skip ci] ([fa56eb8](https://github.com/perfect-panel/ppanel-web/commit/fa56eb8))
|
||||||
* **release**: V1.0.0-beta.33 [skip ci] ([383638f](https://github.com/perfect-panel/ppanel-web/commit/383638f))
|
- **release**: V1.0.0-beta.33 [skip ci] ([383638f](https://github.com/perfect-panel/ppanel-web/commit/383638f))
|
||||||
* **release**: V1.0.0-beta.34 [skip ci] ([7023875](https://github.com/perfect-panel/ppanel-web/commit/7023875))
|
- **release**: V1.0.0-beta.34 [skip ci] ([7023875](https://github.com/perfect-panel/ppanel-web/commit/7023875))
|
||||||
* **release**: V1.0.0-beta.4 [skip ci] ([10d322f](https://github.com/perfect-panel/ppanel-web/commit/10d322f))
|
- **release**: V1.0.0-beta.4 [skip ci] ([10d322f](https://github.com/perfect-panel/ppanel-web/commit/10d322f))
|
||||||
* **release**: V1.0.0-beta.5 [skip ci] ([f275f01](https://github.com/perfect-panel/ppanel-web/commit/f275f01))
|
- **release**: V1.0.0-beta.5 [skip ci] ([f275f01](https://github.com/perfect-panel/ppanel-web/commit/f275f01))
|
||||||
* **release**: V1.0.0-beta.6 [skip ci] ([dd23279](https://github.com/perfect-panel/ppanel-web/commit/dd23279))
|
- **release**: V1.0.0-beta.6 [skip ci] ([dd23279](https://github.com/perfect-panel/ppanel-web/commit/dd23279))
|
||||||
* **release**: V1.0.0-beta.7 [skip ci] ([f60d40c](https://github.com/perfect-panel/ppanel-web/commit/f60d40c))
|
- **release**: V1.0.0-beta.7 [skip ci] ([f60d40c](https://github.com/perfect-panel/ppanel-web/commit/f60d40c))
|
||||||
* **release**: V1.0.0-beta.8 [skip ci], closes [#9](https://github.com/perfect-panel/ppanel-web/issues/9) ([a593eac](https://github.com/perfect-panel/ppanel-web/commit/a593eac))
|
- **release**: V1.0.0-beta.8 [skip ci], closes [#9](https://github.com/perfect-panel/ppanel-web/issues/9) ([a593eac](https://github.com/perfect-panel/ppanel-web/commit/a593eac))
|
||||||
* **release**: V1.0.0-beta.9 [skip ci] ([855d1b0](https://github.com/perfect-panel/ppanel-web/commit/855d1b0))
|
- **release**: V1.0.0-beta.9 [skip ci] ([855d1b0](https://github.com/perfect-panel/ppanel-web/commit/855d1b0))
|
||||||
* **ui**: Update package dependencies for improved stability and performance ([25da429](https://github.com/perfect-panel/ppanel-web/commit/25da429))
|
- **ui**: Update package dependencies for improved stability and performance ([25da429](https://github.com/perfect-panel/ppanel-web/commit/25da429))
|
||||||
* Merge branch 'beta' into develop ([f219c52](https://github.com/perfect-panel/ppanel-web/commit/f219c52))
|
- Merge branch 'beta' into develop ([f219c52](https://github.com/perfect-panel/ppanel-web/commit/f219c52))
|
||||||
* Update changelog, enhance prepare script, and add openapi command ([a93db4e](https://github.com/perfect-panel/ppanel-web/commit/a93db4e))
|
- Update changelog, enhance prepare script, and add openapi command ([a93db4e](https://github.com/perfect-panel/ppanel-web/commit/a93db4e))
|
||||||
|
|
||||||
|
|
||||||
### 🐛 Bug Fixes
|
### 🐛 Bug Fixes
|
||||||
|
|
||||||
* **admin**: Hidden versions and system upgrades ([64cd842](https://github.com/perfect-panel/ppanel-web/commit/64cd842))
|
- **admin**: Hidden versions and system upgrades ([64cd842](https://github.com/perfect-panel/ppanel-web/commit/64cd842))
|
||||||
* **admin**: Modify the label type in the rule form to a string array ([a7aa5fe](https://github.com/perfect-panel/ppanel-web/commit/a7aa5fe))
|
- **admin**: Modify the label type in the rule form to a string array ([a7aa5fe](https://github.com/perfect-panel/ppanel-web/commit/a7aa5fe))
|
||||||
* **affiliate**: Update user identifier ([35f92c9](https://github.com/perfect-panel/ppanel-web/commit/35f92c9))
|
- **affiliate**: Update user identifier ([35f92c9](https://github.com/perfect-panel/ppanel-web/commit/35f92c9))
|
||||||
* **api**: Fix type error in API request and add return URL parameter ([ee286dd](https://github.com/perfect-panel/ppanel-web/commit/ee286dd))
|
- **api**: Fix type error in API request and add return URL parameter ([ee286dd](https://github.com/perfect-panel/ppanel-web/commit/ee286dd))
|
||||||
* **api**: PreCreateOrder ([ca747f5](https://github.com/perfect-panel/ppanel-web/commit/ca747f5))
|
- **api**: PreCreateOrder ([ca747f5](https://github.com/perfect-panel/ppanel-web/commit/ca747f5))
|
||||||
* **api**: Purge ([98c1c30](https://github.com/perfect-panel/ppanel-web/commit/98c1c30))
|
- **api**: Purge ([98c1c30](https://github.com/perfect-panel/ppanel-web/commit/98c1c30))
|
||||||
* **api**: Remove redundant requestType parameter in appleLoginCallback ([0aa5d5b](https://github.com/perfect-panel/ppanel-web/commit/0aa5d5b))
|
- **api**: Remove redundant requestType parameter in appleLoginCallback ([0aa5d5b](https://github.com/perfect-panel/ppanel-web/commit/0aa5d5b))
|
||||||
* **api**: Rename app-related functions and types to application for consistency ([9d8b814](https://github.com/perfect-panel/ppanel-web/commit/9d8b814))
|
- **api**: Rename app-related functions and types to application for consistency ([9d8b814](https://github.com/perfect-panel/ppanel-web/commit/9d8b814))
|
||||||
* **api**: Replace 'deduction' with 'gift_amount' and add 'commission' field in type definitions ([77edf1d](https://github.com/perfect-panel/ppanel-web/commit/77edf1d))
|
- **api**: Replace 'deduction' with 'gift_amount' and add 'commission' field in type definitions ([77edf1d](https://github.com/perfect-panel/ppanel-web/commit/77edf1d))
|
||||||
* **api**: Server and order ([255bd82](https://github.com/perfect-panel/ppanel-web/commit/255bd82))
|
- **api**: Server and order ([255bd82](https://github.com/perfect-panel/ppanel-web/commit/255bd82))
|
||||||
* **api**: Statistics ([7962162](https://github.com/perfect-panel/ppanel-web/commit/7962162))
|
- **api**: Statistics ([7962162](https://github.com/perfect-panel/ppanel-web/commit/7962162))
|
||||||
* **api**: Subscribe token ([1932ba7](https://github.com/perfect-panel/ppanel-web/commit/1932ba7))
|
- **api**: Subscribe token ([1932ba7](https://github.com/perfect-panel/ppanel-web/commit/1932ba7))
|
||||||
* **api**: Update API type definitions to replace 'deduction' with 'gift_amount' and make 'commission' field optional ([c2af060](https://github.com/perfect-panel/ppanel-web/commit/c2af060))
|
- **api**: Update API type definitions to replace 'deduction' with 'gift_amount' and make 'commission' field optional ([c2af060](https://github.com/perfect-panel/ppanel-web/commit/c2af060))
|
||||||
* **api**: Update Model ([39aaa73](https://github.com/perfect-panel/ppanel-web/commit/39aaa73))
|
- **api**: Update Model ([39aaa73](https://github.com/perfect-panel/ppanel-web/commit/39aaa73))
|
||||||
* **api**: Update subscription_protocol to subscribe_type for consistency across services ([b6da51b](https://github.com/perfect-panel/ppanel-web/commit/b6da51b))
|
- **api**: Update subscription_protocol to subscribe_type for consistency across services ([b6da51b](https://github.com/perfect-panel/ppanel-web/commit/b6da51b))
|
||||||
* **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 ([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**: 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-control**: Rename phone_variable to phone_number in mobile verification configuration ([e5455aa](https://github.com/perfect-panel/ppanel-web/commit/e5455aa))
|
||||||
* **auth**: Add error handling to form submission and reset Turnstile on failure ([715d011](https://github.com/perfect-panel/ppanel-web/commit/715d011))
|
- **auth**: Add error handling to form submission and reset Turnstile on failure ([715d011](https://github.com/perfect-panel/ppanel-web/commit/715d011))
|
||||||
* **auth**: Change Textarea value to defaultValue for client_secret in Apple auth page ([69fc670](https://github.com/perfect-panel/ppanel-web/commit/69fc670))
|
- **auth**: Change Textarea value to defaultValue for client_secret in Apple auth page ([69fc670](https://github.com/perfect-panel/ppanel-web/commit/69fc670))
|
||||||
* **auth**: Refactor forms to use Turnstile ref for reset functionality ([320a7dc](https://github.com/perfect-panel/ppanel-web/commit/320a7dc))
|
- **auth**: Refactor forms to use Turnstile ref for reset functionality ([320a7dc](https://github.com/perfect-panel/ppanel-web/commit/320a7dc))
|
||||||
* **auth**: Refactor reset password form to simplify code input and update placeholder text ([23833b4](https://github.com/perfect-panel/ppanel-web/commit/23833b4))
|
- **auth**: Refactor reset password form to simplify code input and update placeholder text ([23833b4](https://github.com/perfect-panel/ppanel-web/commit/23833b4))
|
||||||
* **auth**: Refactor user authentication forms to remove global store dependency and improve type handling ([12026b0](https://github.com/perfect-panel/ppanel-web/commit/12026b0))
|
- **auth**: Refactor user authentication forms to remove global store dependency and improve type handling ([12026b0](https://github.com/perfect-panel/ppanel-web/commit/12026b0))
|
||||||
* **auth**: Remove unused telephone code login function and update typings for telephone login requests ([7239685](https://github.com/perfect-panel/ppanel-web/commit/7239685))
|
- **auth**: Remove unused telephone code login function and update typings for telephone login requests ([7239685](https://github.com/perfect-panel/ppanel-web/commit/7239685))
|
||||||
* **auth**: Require minimum length for invite string when forced invite is enabled ([a604f28](https://github.com/perfect-panel/ppanel-web/commit/a604f28))
|
- **auth**: Require minimum length for invite string when forced invite is enabled ([a604f28](https://github.com/perfect-panel/ppanel-web/commit/a604f28))
|
||||||
* **auth**: Simplify email verification code input rendering ([6f7bc37](https://github.com/perfect-panel/ppanel-web/commit/6f7bc37))
|
- **auth**: Simplify email verification code input rendering ([6f7bc37](https://github.com/perfect-panel/ppanel-web/commit/6f7bc37))
|
||||||
* **auth**: Update authentication configuration and localization strings ([47f2c58](https://github.com/perfect-panel/ppanel-web/commit/47f2c58))
|
- **auth**: Update authentication configuration and localization strings ([47f2c58](https://github.com/perfect-panel/ppanel-web/commit/47f2c58))
|
||||||
* **auth**: Update email verification logic to use domain suffix check ([62662bb](https://github.com/perfect-panel/ppanel-web/commit/62662bb))
|
- **auth**: Update email verification logic to use domain suffix check ([62662bb](https://github.com/perfect-panel/ppanel-web/commit/62662bb))
|
||||||
* **auth**: Update user authentication flow to include email and phone code verification ([5d078fd](https://github.com/perfect-panel/ppanel-web/commit/5d078fd))
|
- **auth**: Update user authentication flow to include email and phone code verification ([5d078fd](https://github.com/perfect-panel/ppanel-web/commit/5d078fd))
|
||||||
* **auth**: Update UserCheckForm to use setInitialValues and modify onSubmit type ([c984c0d](https://github.com/perfect-panel/ppanel-web/commit/c984c0d))
|
- **auth**: Update UserCheckForm to use setInitialValues and modify onSubmit type ([c984c0d](https://github.com/perfect-panel/ppanel-web/commit/c984c0d))
|
||||||
* **billing**: ExpiryDate ([e85e545](https://github.com/perfect-panel/ppanel-web/commit/e85e545))
|
- **billing**: ExpiryDate ([e85e545](https://github.com/perfect-panel/ppanel-web/commit/e85e545))
|
||||||
* **billing**: I18n and styles ([81e0f21](https://github.com/perfect-panel/ppanel-web/commit/81e0f21))
|
- **billing**: I18n and styles ([81e0f21](https://github.com/perfect-panel/ppanel-web/commit/81e0f21))
|
||||||
* **changelog**: Update change log style ([cfa3fc0](https://github.com/perfect-panel/ppanel-web/commit/cfa3fc0))
|
- **changelog**: Update change log style ([cfa3fc0](https://github.com/perfect-panel/ppanel-web/commit/cfa3fc0))
|
||||||
* **config**: AlipayF2F ([6c07107](https://github.com/perfect-panel/ppanel-web/commit/6c07107))
|
- **config**: AlipayF2F ([6c07107](https://github.com/perfect-panel/ppanel-web/commit/6c07107))
|
||||||
* **config**: Bugs ([f57e40c](https://github.com/perfect-panel/ppanel-web/commit/f57e40c))
|
- **config**: Bugs ([f57e40c](https://github.com/perfect-panel/ppanel-web/commit/f57e40c))
|
||||||
* **config**: Checkout Order ([a31e763](https://github.com/perfect-panel/ppanel-web/commit/a31e763))
|
- **config**: Checkout Order ([a31e763](https://github.com/perfect-panel/ppanel-web/commit/a31e763))
|
||||||
* **config**: FormatBytes ([bbc2da0](https://github.com/perfect-panel/ppanel-web/commit/bbc2da0))
|
- **config**: FormatBytes ([bbc2da0](https://github.com/perfect-panel/ppanel-web/commit/bbc2da0))
|
||||||
* **config**: NoStore ([2cc18cf](https://github.com/perfect-panel/ppanel-web/commit/2cc18cf))
|
- **config**: NoStore ([2cc18cf](https://github.com/perfect-panel/ppanel-web/commit/2cc18cf))
|
||||||
* **config**: Runtime env ([a1e4999](https://github.com/perfect-panel/ppanel-web/commit/a1e4999))
|
- **config**: Runtime env ([a1e4999](https://github.com/perfect-panel/ppanel-web/commit/a1e4999))
|
||||||
* **config**: Status Percentag ([8f322fb](https://github.com/perfect-panel/ppanel-web/commit/8f322fb))
|
- **config**: Status Percentag ([8f322fb](https://github.com/perfect-panel/ppanel-web/commit/8f322fb))
|
||||||
* **config**: SubLink ([1c61966](https://github.com/perfect-panel/ppanel-web/commit/1c61966))
|
- **config**: SubLink ([1c61966](https://github.com/perfect-panel/ppanel-web/commit/1c61966))
|
||||||
* **config**: Subscribe Link ([11ea821](https://github.com/perfect-panel/ppanel-web/commit/11ea821))
|
- **config**: Subscribe Link ([11ea821](https://github.com/perfect-panel/ppanel-web/commit/11ea821))
|
||||||
* **content**: Parse subscription description and display features with icons ([3c5542a](https://github.com/perfect-panel/ppanel-web/commit/3c5542a))
|
- **content**: Parse subscription description and display features with icons ([3c5542a](https://github.com/perfect-panel/ppanel-web/commit/3c5542a))
|
||||||
* **controller**: Order status ([8c6a097](https://github.com/perfect-panel/ppanel-web/commit/8c6a097))
|
- **controller**: Order status ([8c6a097](https://github.com/perfect-panel/ppanel-web/commit/8c6a097))
|
||||||
* **coupon**: Rename 'server' field to 'subscribe' in coupon form and update coupon update request type ([f8b6d82](https://github.com/perfect-panel/ppanel-web/commit/f8b6d82))
|
- **coupon**: Rename 'server' field to 'subscribe' in coupon form and update coupon update request type ([f8b6d82](https://github.com/perfect-panel/ppanel-web/commit/f8b6d82))
|
||||||
* **dashboard**: Improve URL encoding for subscription links and enhance success message handling ([4983c33](https://github.com/perfect-panel/ppanel-web/commit/4983c33))
|
- **dashboard**: Improve URL encoding for subscription links and enhance success message handling ([4983c33](https://github.com/perfect-panel/ppanel-web/commit/4983c33))
|
||||||
* **dashboard**: Update date display to use start_time if available ([e551232](https://github.com/perfect-panel/ppanel-web/commit/e551232))
|
- **dashboard**: Update date display to use start_time if available ([e551232](https://github.com/perfect-panel/ppanel-web/commit/e551232))
|
||||||
* **dashboard**: Correct progress value calculations and update groupId accessor ([36c7667](https://github.com/perfect-panel/ppanel-web/commit/36c7667))
|
- **dashboard**: Correct progress value calculations and update groupId accessor ([36c7667](https://github.com/perfect-panel/ppanel-web/commit/36c7667))
|
||||||
* **dashboard**: Display subscription creation date in user dashboard ([d0e6df0](https://github.com/perfect-panel/ppanel-web/commit/d0e6df0))
|
- **dashboard**: Display subscription creation date in user dashboard ([d0e6df0](https://github.com/perfect-panel/ppanel-web/commit/d0e6df0))
|
||||||
* **dashboard**: Format Bytes ([d8b0bd9](https://github.com/perfect-panel/ppanel-web/commit/d8b0bd9))
|
- **dashboard**: Format Bytes ([d8b0bd9](https://github.com/perfect-panel/ppanel-web/commit/d8b0bd9))
|
||||||
* **dashboard**: Update icon imports for platform consistency and adjust icon size ([3e8912e](https://github.com/perfect-panel/ppanel-web/commit/3e8912e))
|
- **dashboard**: Update icon imports for platform consistency and adjust icon size ([3e8912e](https://github.com/perfect-panel/ppanel-web/commit/3e8912e))
|
||||||
* **dashboard**: Update platform detection logic and improve layout responsiveness ([b0aa364](https://github.com/perfect-panel/ppanel-web/commit/b0aa364))
|
- **dashboard**: Update platform detection logic and improve layout responsiveness ([b0aa364](https://github.com/perfect-panel/ppanel-web/commit/b0aa364))
|
||||||
* **deps**: Remove outdated @iconify/react dependency and add iconify-json packages ([d6fbc38](https://github.com/perfect-panel/ppanel-web/commit/d6fbc38))
|
- **deps**: Remove outdated @iconify/react dependency and add iconify-json packages ([d6fbc38](https://github.com/perfect-panel/ppanel-web/commit/d6fbc38))
|
||||||
* **deps**: Typescript config ([34e24b8](https://github.com/perfect-panel/ppanel-web/commit/34e24b8))
|
- **deps**: Typescript config ([34e24b8](https://github.com/perfect-panel/ppanel-web/commit/34e24b8))
|
||||||
* **deps**: Update clipboard ([5572710](https://github.com/perfect-panel/ppanel-web/commit/5572710))
|
- **deps**: Update clipboard ([5572710](https://github.com/perfect-panel/ppanel-web/commit/5572710))
|
||||||
* **editor**: Change value ([4fdfeb2](https://github.com/perfect-panel/ppanel-web/commit/4fdfeb2))
|
- **editor**: Change value ([4fdfeb2](https://github.com/perfect-panel/ppanel-web/commit/4fdfeb2))
|
||||||
* **email**: Update platform configuration handling to use current ref for consistency ([c90175b](https://github.com/perfect-panel/ppanel-web/commit/c90175b))
|
- **email**: Update platform configuration handling to use current ref for consistency ([c90175b](https://github.com/perfect-panel/ppanel-web/commit/c90175b))
|
||||||
* **footer**: Email address ([a451f44](https://github.com/perfect-panel/ppanel-web/commit/a451f44))
|
- **footer**: Email address ([a451f44](https://github.com/perfect-panel/ppanel-web/commit/a451f44))
|
||||||
* **forms**: Add step attribute to number inputs for better value control ([b8f4f1e](https://github.com/perfect-panel/ppanel-web/commit/b8f4f1e))
|
- **forms**: Add step attribute to number inputs for better value control ([b8f4f1e](https://github.com/perfect-panel/ppanel-web/commit/b8f4f1e))
|
||||||
* **icon**: Comment out unused icon collection imports ([f17bf8d](https://github.com/perfect-panel/ppanel-web/commit/f17bf8d))
|
- **icon**: Comment out unused icon collection imports ([f17bf8d](https://github.com/perfect-panel/ppanel-web/commit/f17bf8d))
|
||||||
* **layout**: Remove unnecessary cookie initialization in Logout function ([3065c3a](https://github.com/perfect-panel/ppanel-web/commit/3065c3a))
|
- **layout**: Remove unnecessary cookie initialization in Logout function ([3065c3a](https://github.com/perfect-panel/ppanel-web/commit/3065c3a))
|
||||||
* **locale**: Default value ([937408f](https://github.com/perfect-panel/ppanel-web/commit/937408f))
|
- **locale**: Default value ([937408f](https://github.com/perfect-panel/ppanel-web/commit/937408f))
|
||||||
* **locale**: Document ([6f0fa20](https://github.com/perfect-panel/ppanel-web/commit/6f0fa20))
|
- **locale**: Document ([6f0fa20](https://github.com/perfect-panel/ppanel-web/commit/6f0fa20))
|
||||||
* **locale**: Empty ([3832d20](https://github.com/perfect-panel/ppanel-web/commit/3832d20))
|
- **locale**: Empty ([3832d20](https://github.com/perfect-panel/ppanel-web/commit/3832d20))
|
||||||
* **locale**: Input Placeholder Webhook Domain ([bca0935](https://github.com/perfect-panel/ppanel-web/commit/bca0935))
|
- **locale**: Input Placeholder Webhook Domain ([bca0935](https://github.com/perfect-panel/ppanel-web/commit/bca0935))
|
||||||
* **locale**: Language Select ([0befdb0](https://github.com/perfect-panel/ppanel-web/commit/0befdb0))
|
- **locale**: Language Select ([0befdb0](https://github.com/perfect-panel/ppanel-web/commit/0befdb0))
|
||||||
* **locales**: Add error message for incorrect user information ([52c1d1f](https://github.com/perfect-panel/ppanel-web/commit/52c1d1f))
|
- **locales**: Add error message for incorrect user information ([52c1d1f](https://github.com/perfect-panel/ppanel-web/commit/52c1d1f))
|
||||||
* **locales**: Add error message for incorrect user information ([3d92902](https://github.com/perfect-panel/ppanel-web/commit/3d92902))
|
- **locales**: Add error message for incorrect user information ([3d92902](https://github.com/perfect-panel/ppanel-web/commit/3d92902))
|
||||||
* **locales**: Add logout message to authentication localization files ([1d0d911](https://github.com/perfect-panel/ppanel-web/commit/1d0d911))
|
- **locales**: Add logout message to authentication localization files ([1d0d911](https://github.com/perfect-panel/ppanel-web/commit/1d0d911))
|
||||||
* **locales**: Fixed description in multilingual files, updated text related to email registration functionality ([c356bc2](https://github.com/perfect-panel/ppanel-web/commit/c356bc2))
|
- **locales**: Fixed description in multilingual files, updated text related to email registration functionality ([c356bc2](https://github.com/perfect-panel/ppanel-web/commit/c356bc2))
|
||||||
* **locales**: Order recharge related fields ([35210fe](https://github.com/perfect-panel/ppanel-web/commit/35210fe))
|
- **locales**: Order recharge related fields ([35210fe](https://github.com/perfect-panel/ppanel-web/commit/35210fe))
|
||||||
* **locales**: Removed language file import to clean up unnecessary language support ([68f6ab2](https://github.com/perfect-panel/ppanel-web/commit/68f6ab2))
|
- **locales**: Removed language file import to clean up unnecessary language support ([68f6ab2](https://github.com/perfect-panel/ppanel-web/commit/68f6ab2))
|
||||||
* **locales**: Removed multilingual files to clean up unnecessary language support ([5b151cd](https://github.com/perfect-panel/ppanel-web/commit/5b151cd))
|
- **locales**: Removed multilingual files to clean up unnecessary language support ([5b151cd](https://github.com/perfect-panel/ppanel-web/commit/5b151cd))
|
||||||
* **locale**: Subscription Path Description ([4c67387](https://github.com/perfect-panel/ppanel-web/commit/4c67387))
|
- **locale**: Subscription Path Description ([4c67387](https://github.com/perfect-panel/ppanel-web/commit/4c67387))
|
||||||
* **locales**: Update custom HTML description for clarity across multiple languages ([557c5cd](https://github.com/perfect-panel/ppanel-web/commit/557c5cd))
|
- **locales**: Update custom HTML description for clarity across multiple languages ([557c5cd](https://github.com/perfect-panel/ppanel-web/commit/557c5cd))
|
||||||
* **locales**: Update custom HTML description in language file, ([87381da](https://github.com/perfect-panel/ppanel-web/commit/87381da))
|
- **locales**: Update custom HTML description in language file, ([87381da](https://github.com/perfect-panel/ppanel-web/commit/87381da))
|
||||||
* **locales**: Update expiration time description from minutes to seconds in multiple languages ([5bac933](https://github.com/perfect-panel/ppanel-web/commit/5bac933))
|
- **locales**: Update expiration time description from minutes to seconds in multiple languages ([5bac933](https://github.com/perfect-panel/ppanel-web/commit/5bac933))
|
||||||
* **locales**: Update Hong Kong ([6d0d069](https://github.com/perfect-panel/ppanel-web/commit/6d0d069))
|
- **locales**: Update Hong Kong ([6d0d069](https://github.com/perfect-panel/ppanel-web/commit/6d0d069))
|
||||||
* **locales**: Update invite code text to indicate it's optional ([6a34bfb](https://github.com/perfect-panel/ppanel-web/commit/6a34bfb))
|
- **locales**: Update invite code text to indicate it's optional ([6a34bfb](https://github.com/perfect-panel/ppanel-web/commit/6a34bfb))
|
||||||
* **logs**: Update log display to render key-value pairs and remove badge ([5ea6489](https://github.com/perfect-panel/ppanel-web/commit/5ea6489))
|
- **logs**: Update log display to render key-value pairs and remove badge ([5ea6489](https://github.com/perfect-panel/ppanel-web/commit/5ea6489))
|
||||||
* **metadata**: Global metadata ([15d5ecf](https://github.com/perfect-panel/ppanel-web/commit/15d5ecf))
|
- **metadata**: Global metadata ([15d5ecf](https://github.com/perfect-panel/ppanel-web/commit/15d5ecf))
|
||||||
* **nav**: Comment out unused social login options to simplify navigation configuration ([cefcb31](https://github.com/perfect-panel/ppanel-web/commit/cefcb31))
|
- **nav**: Comment out unused social login options to simplify navigation configuration ([cefcb31](https://github.com/perfect-panel/ppanel-web/commit/cefcb31))
|
||||||
* **node-config**: Add null checks for time slots and ensure proper handling of undefined values ([1cdb7e7](https://github.com/perfect-panel/ppanel-web/commit/1cdb7e7))
|
- **node-config**: Add null checks for time slots and ensure proper handling of undefined values ([1cdb7e7](https://github.com/perfect-panel/ppanel-web/commit/1cdb7e7))
|
||||||
* **node**: Add country and city fields to the form schema and localization files ([8775fb6](https://github.com/perfect-panel/ppanel-web/commit/8775fb6))
|
- **node**: Add country and city fields to the form schema and localization files ([8775fb6](https://github.com/perfect-panel/ppanel-web/commit/8775fb6))
|
||||||
* **node**: Handle potential null value for online users count ([fa2fb28](https://github.com/perfect-panel/ppanel-web/commit/fa2fb28))
|
- **node**: Handle potential null value for online users count ([fa2fb28](https://github.com/perfect-panel/ppanel-web/commit/fa2fb28))
|
||||||
* **node**: Locale and form ([38be4d5](https://github.com/perfect-panel/ppanel-web/commit/38be4d5))
|
- **node**: Locale and form ([38be4d5](https://github.com/perfect-panel/ppanel-web/commit/38be4d5))
|
||||||
* **node**: Port config ([a20834a](https://github.com/perfect-panel/ppanel-web/commit/a20834a))
|
- **node**: Port config ([a20834a](https://github.com/perfect-panel/ppanel-web/commit/a20834a))
|
||||||
* **node**: Reality config ([fadd17f](https://github.com/perfect-panel/ppanel-web/commit/fadd17f))
|
- **node**: Reality config ([fadd17f](https://github.com/perfect-panel/ppanel-web/commit/fadd17f))
|
||||||
* **node**: Service Name config ([d0be685](https://github.com/perfect-panel/ppanel-web/commit/d0be685))
|
- **node**: Service Name config ([d0be685](https://github.com/perfect-panel/ppanel-web/commit/d0be685))
|
||||||
* **node**: TLS config ([57fae12](https://github.com/perfect-panel/ppanel-web/commit/57fae12))
|
- **node**: TLS config ([57fae12](https://github.com/perfect-panel/ppanel-web/commit/57fae12))
|
||||||
* **node**: Trojan protocol config ([7e1eb90](https://github.com/perfect-panel/ppanel-web/commit/7e1eb90))
|
- **node**: Trojan protocol config ([7e1eb90](https://github.com/perfect-panel/ppanel-web/commit/7e1eb90))
|
||||||
* **notify**: Ensure user info is updated after notification settings submission ([9bc3a94](https://github.com/perfect-panel/ppanel-web/commit/9bc3a94))
|
- **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))
|
- **notify**: Set default values for notification settings to false ([3652819](https://github.com/perfect-panel/ppanel-web/commit/3652819))
|
||||||
* **oauth**: Refactor OAuth configuration types and update related API methods ([6227ba9](https://github.com/perfect-panel/ppanel-web/commit/6227ba9))
|
- **oauth**: Refactor OAuth configuration types and update related API methods ([6227ba9](https://github.com/perfect-panel/ppanel-web/commit/6227ba9))
|
||||||
* **oauth**: Remove redundant checks when updating configuration to simplify logic ([9140b8a](https://github.com/perfect-panel/ppanel-web/commit/9140b8a))
|
- **oauth**: Remove redundant checks when updating configuration to simplify logic ([9140b8a](https://github.com/perfect-panel/ppanel-web/commit/9140b8a))
|
||||||
* **payment**: Add notification URL field to payment management interface ([5c710e1](https://github.com/perfect-panel/ppanel-web/commit/5c710e1))
|
- **payment**: Add notification URL field to payment management interface ([5c710e1](https://github.com/perfect-panel/ppanel-web/commit/5c710e1))
|
||||||
* **payment**: Config and types ([b0c87fb](https://github.com/perfect-panel/ppanel-web/commit/b0c87fb))
|
- **payment**: Config and types ([b0c87fb](https://github.com/perfect-panel/ppanel-web/commit/b0c87fb))
|
||||||
* **payment**: Fix payment related type definitions and update payment method references ([c3138a8](https://github.com/perfect-panel/ppanel-web/commit/c3138a8))
|
- **payment**: Fix payment related type definitions and update payment method references ([c3138a8](https://github.com/perfect-panel/ppanel-web/commit/c3138a8))
|
||||||
* **payment**: Qrcode ([a9a535b](https://github.com/perfect-panel/ppanel-web/commit/a9a535b))
|
- **payment**: Qrcode ([a9a535b](https://github.com/perfect-panel/ppanel-web/commit/a9a535b))
|
||||||
* **payment**: Refactor payment form placeholder and update localization files ([4a4d364](https://github.com/perfect-panel/ppanel-web/commit/4a4d364))
|
- **payment**: Refactor payment form placeholder and update localization files ([4a4d364](https://github.com/perfect-panel/ppanel-web/commit/4a4d364))
|
||||||
* **payment**: Refactor purchaseCheckout usage and remove redundant code ([a5e2079](https://github.com/perfect-panel/ppanel-web/commit/a5e2079))
|
- **payment**: Refactor purchaseCheckout usage and remove redundant code ([a5e2079](https://github.com/perfect-panel/ppanel-web/commit/a5e2079))
|
||||||
* **payment**: Replace window.open with window.location.href for checkout links ([1d8c765](https://github.com/perfect-panel/ppanel-web/commit/1d8c765))
|
- **payment**: Replace window.open with window.location.href for checkout links ([1d8c765](https://github.com/perfect-panel/ppanel-web/commit/1d8c765))
|
||||||
* **payment**: Update checkout type from 'link' to 'url' for consistency ([136a1ab](https://github.com/perfect-panel/ppanel-web/commit/136a1ab))
|
- **payment**: Update checkout type from 'link' to 'url' for consistency ([136a1ab](https://github.com/perfect-panel/ppanel-web/commit/136a1ab))
|
||||||
* **payment**: Update payment information ([70d6a38](https://github.com/perfect-panel/ppanel-web/commit/70d6a38))
|
- **payment**: Update payment information ([70d6a38](https://github.com/perfect-panel/ppanel-web/commit/70d6a38))
|
||||||
* **payment**: Update payment method update logic to include row data ([6752420](https://github.com/perfect-panel/ppanel-web/commit/6752420))
|
- **payment**: Update payment method update logic to include row data ([6752420](https://github.com/perfect-panel/ppanel-web/commit/6752420))
|
||||||
* **phone**: Update SMS expiration time field to use 'sms_expire_time' with default value of 300 ([18b07c7](https://github.com/perfect-panel/ppanel-web/commit/18b07c7))
|
- **phone**: Update SMS expiration time field to use 'sms_expire_time' with default value of 300 ([18b07c7](https://github.com/perfect-panel/ppanel-web/commit/18b07c7))
|
||||||
* **profile**: Restore filter to ensure only valid OAuth accounts are shown ([315c8f9](https://github.com/perfect-panel/ppanel-web/commit/315c8f9))
|
- **profile**: Restore filter to ensure only valid OAuth accounts are shown ([315c8f9](https://github.com/perfect-panel/ppanel-web/commit/315c8f9))
|
||||||
* **purchasing**: Update payment type to lowercase and add optional chaining for discounts ([c06ea49](https://github.com/perfect-panel/ppanel-web/commit/c06ea49))
|
- **purchasing**: Update payment type to lowercase and add optional chaining for discounts ([c06ea49](https://github.com/perfect-panel/ppanel-web/commit/c06ea49))
|
||||||
* **redirect**: Simplify redirect URL logic by removing unnecessary condition for sessionStorage ([c53ac61](https://github.com/perfect-panel/ppanel-web/commit/c53ac61))
|
- **redirect**: Simplify redirect URL logic by removing unnecessary condition for sessionStorage ([c53ac61](https://github.com/perfect-panel/ppanel-web/commit/c53ac61))
|
||||||
* **redirect**: Update redirect URL logic to ensure proper handling of OAuth and auth paths ([7954762](https://github.com/perfect-panel/ppanel-web/commit/7954762))
|
- **redirect**: Update redirect URL logic to ensure proper handling of OAuth and auth paths ([7954762](https://github.com/perfect-panel/ppanel-web/commit/7954762))
|
||||||
* **register**: Adjust user email verification logic to handle domain suffix checks correctly ([686aa2d](https://github.com/perfect-panel/ppanel-web/commit/686aa2d))
|
- **register**: Adjust user email verification logic to handle domain suffix checks correctly ([686aa2d](https://github.com/perfect-panel/ppanel-web/commit/686aa2d))
|
||||||
* **request**: Add error code 40005 to trigger logout ([71bf002](https://github.com/perfect-panel/ppanel-web/commit/71bf002))
|
- **request**: Add error code 40005 to trigger logout ([71bf002](https://github.com/perfect-panel/ppanel-web/commit/71bf002))
|
||||||
* **request**: Locale ([37d408f](https://github.com/perfect-panel/ppanel-web/commit/37d408f))
|
- **request**: Locale ([37d408f](https://github.com/perfect-panel/ppanel-web/commit/37d408f))
|
||||||
* **rule-form**: Remove redundant rule set display ([6e0c9b6](https://github.com/perfect-panel/ppanel-web/commit/6e0c9b6))
|
- **rule-form**: Remove redundant rule set display ([6e0c9b6](https://github.com/perfect-panel/ppanel-web/commit/6e0c9b6))
|
||||||
* **rules**: Remove unused MATCH rule ([674a01c](https://github.com/perfect-panel/ppanel-web/commit/674a01c))
|
- **rules**: Remove unused MATCH rule ([674a01c](https://github.com/perfect-panel/ppanel-web/commit/674a01c))
|
||||||
* **site**: Add image upload functionality for site logo configuration ([4ea6e4a](https://github.com/perfect-panel/ppanel-web/commit/4ea6e4a))
|
- **site**: Add image upload functionality for site logo configuration ([4ea6e4a](https://github.com/perfect-panel/ppanel-web/commit/4ea6e4a))
|
||||||
* **site**: Se ref to store site configuration for updates ([0c8f091](https://github.com/perfect-panel/ppanel-web/commit/0c8f091))
|
- **site**: Se ref to store site configuration for updates ([0c8f091](https://github.com/perfect-panel/ppanel-web/commit/0c8f091))
|
||||||
* **sort**: Refactor sorting logic in NodeTable and SubscribeTable components for improved clarity and performance ([331bbea](https://github.com/perfect-panel/ppanel-web/commit/331bbea))
|
- **sort**: Refactor sorting logic in NodeTable and SubscribeTable components for improved clarity and performance ([331bbea](https://github.com/perfect-panel/ppanel-web/commit/331bbea))
|
||||||
* **subscribe**: Add value prop to field in subscription form for proper state management ([328838d](https://github.com/perfect-panel/ppanel-web/commit/328838d))
|
- **subscribe**: Add value prop to field in subscription form for proper state management ([328838d](https://github.com/perfect-panel/ppanel-web/commit/328838d))
|
||||||
* **subscribe**: Discount ([35a9f69](https://github.com/perfect-panel/ppanel-web/commit/35a9f69))
|
- **subscribe**: Discount ([35a9f69](https://github.com/perfect-panel/ppanel-web/commit/35a9f69))
|
||||||
* **subscribe**: Extract Domain ([40d61a9](https://github.com/perfect-panel/ppanel-web/commit/40d61a9))
|
- **subscribe**: Extract Domain ([40d61a9](https://github.com/perfect-panel/ppanel-web/commit/40d61a9))
|
||||||
* **subscribe**: Handle optional values in price and discount calculations ([5939763](https://github.com/perfect-panel/ppanel-web/commit/5939763))
|
- **subscribe**: Handle optional values in price and discount calculations ([5939763](https://github.com/perfect-panel/ppanel-web/commit/5939763))
|
||||||
* **subscribe**: Jumps and internationalization ([13fdec3](https://github.com/perfect-panel/ppanel-web/commit/13fdec3))
|
- **subscribe**: Jumps and internationalization ([13fdec3](https://github.com/perfect-panel/ppanel-web/commit/13fdec3))
|
||||||
* **subscribe**: Refactor discount calculations and default selection logic in subscription forms ([423b240](https://github.com/perfect-panel/ppanel-web/commit/423b240))
|
- **subscribe**: Refactor discount calculations and default selection logic in subscription forms ([423b240](https://github.com/perfect-panel/ppanel-web/commit/423b240))
|
||||||
* **subscribe**: Server group id ([90e6764](https://github.com/perfect-panel/ppanel-web/commit/90e6764))
|
- **subscribe**: Server group id ([90e6764](https://github.com/perfect-panel/ppanel-web/commit/90e6764))
|
||||||
* **subscribe**: Update default selection logic in subscription form to ensure proper state management ([ef15374](https://github.com/perfect-panel/ppanel-web/commit/ef15374))
|
- **subscribe**: Update default selection logic in subscription form to ensure proper state management ([ef15374](https://github.com/perfect-panel/ppanel-web/commit/ef15374))
|
||||||
* **subscribe**: Update forms to include refetch functionality and improve toast messages ([fc55e95](https://github.com/perfect-panel/ppanel-web/commit/fc55e95))
|
- **subscribe**: Update forms to include refetch functionality and improve toast messages ([fc55e95](https://github.com/perfect-panel/ppanel-web/commit/fc55e95))
|
||||||
* **subscribe**: Update payment return URL ([2b80496](https://github.com/perfect-panel/ppanel-web/commit/2b80496))
|
- **subscribe**: Update payment return URL ([2b80496](https://github.com/perfect-panel/ppanel-web/commit/2b80496))
|
||||||
* **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))
|
- **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))
|
||||||
* **subscribe**: Update value validation to check for number type in subscribe form ([6de29d5](https://github.com/perfect-panel/ppanel-web/commit/6de29d5))
|
- **subscribe**: Update value validation to check for number type in subscribe form ([6de29d5](https://github.com/perfect-panel/ppanel-web/commit/6de29d5))
|
||||||
* **subscription**: Add reset functionality for user subscription token ([39e89bf](https://github.com/perfect-panel/ppanel-web/commit/39e89bf))
|
- **subscription**: Add reset functionality for user subscription token ([39e89bf](https://github.com/perfect-panel/ppanel-web/commit/39e89bf))
|
||||||
* **table**: Update privacy policy tab translation key and remove unnecessary requestType from OAuth callback ([14b3af5](https://github.com/perfect-panel/ppanel-web/commit/14b3af5))
|
- **table**: Update privacy policy tab translation key and remove unnecessary requestType from OAuth callback ([14b3af5](https://github.com/perfect-panel/ppanel-web/commit/14b3af5))
|
||||||
* **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**: 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))
|
- **third-party-accounts**: Update redirect property name in binding response handling ([012e83a](https://github.com/perfect-panel/ppanel-web/commit/012e83a))
|
||||||
* **turnstile**: Turnstile_site_key ([0327b73](https://github.com/perfect-panel/ppanel-web/commit/0327b73))
|
- **turnstile**: Turnstile_site_key ([0327b73](https://github.com/perfect-panel/ppanel-web/commit/0327b73))
|
||||||
* **type**: Fix ts type check error ([3cb0629](https://github.com/perfect-panel/ppanel-web/commit/3cb0629))
|
- **type**: Fix ts type check error ([3cb0629](https://github.com/perfect-panel/ppanel-web/commit/3cb0629))
|
||||||
* **types**: Add 'gift_amount' field to API type definitions ([8f8a12a](https://github.com/perfect-panel/ppanel-web/commit/8f8a12a))
|
- **types**: Add 'gift_amount' field to API type definitions ([8f8a12a](https://github.com/perfect-panel/ppanel-web/commit/8f8a12a))
|
||||||
* **types**: Checking ([2992824](https://github.com/perfect-panel/ppanel-web/commit/2992824))
|
- **types**: Checking ([2992824](https://github.com/perfect-panel/ppanel-web/commit/2992824))
|
||||||
* **types**: Order type ([c7e50a9](https://github.com/perfect-panel/ppanel-web/commit/c7e50a9))
|
- **types**: Order type ([c7e50a9](https://github.com/perfect-panel/ppanel-web/commit/c7e50a9))
|
||||||
* **ui**: Bugs ([b023d0f](https://github.com/perfect-panel/ppanel-web/commit/b023d0f))
|
- **ui**: Bugs ([b023d0f](https://github.com/perfect-panel/ppanel-web/commit/b023d0f))
|
||||||
* **ui**: Components ([a7927d7](https://github.com/perfect-panel/ppanel-web/commit/a7927d7))
|
- **ui**: Components ([a7927d7](https://github.com/perfect-panel/ppanel-web/commit/a7927d7))
|
||||||
* **ui**: Fix json formatting ([e1ddd94](https://github.com/perfect-panel/ppanel-web/commit/e1ddd94))
|
- **ui**: Fix json formatting ([e1ddd94](https://github.com/perfect-panel/ppanel-web/commit/e1ddd94))
|
||||||
* **ui**: Improve dashboard layout and enhance button functionality; open checkout URLs in a new tab ([fc0da76](https://github.com/perfect-panel/ppanel-web/commit/fc0da76))
|
- **ui**: Improve dashboard layout and enhance button functionality; open checkout URLs in a new tab ([fc0da76](https://github.com/perfect-panel/ppanel-web/commit/fc0da76))
|
||||||
* **ui**: Multiple display bugs ([f5d8fd3](https://github.com/perfect-panel/ppanel-web/commit/f5d8fd3))
|
- **ui**: Multiple display bugs ([f5d8fd3](https://github.com/perfect-panel/ppanel-web/commit/f5d8fd3))
|
||||||
* **user-nav**: Update user avatar and label to display telephone if email is not available ([7b6bb7b](https://github.com/perfect-panel/ppanel-web/commit/7b6bb7b))
|
- **user-nav**: Update user avatar and label to display telephone if email is not available ([7b6bb7b](https://github.com/perfect-panel/ppanel-web/commit/7b6bb7b))
|
||||||
* **user**: Add the 'gift_amount' field to the user service's type definition ([6301409](https://github.com/perfect-panel/ppanel-web/commit/6301409))
|
- **user**: Add the 'gift_amount' field to the user service's type definition ([6301409](https://github.com/perfect-panel/ppanel-web/commit/6301409))
|
||||||
* **user**: Refactor user form validation and reset password fields ([6733fc2](https://github.com/perfect-panel/ppanel-web/commit/6733fc2))
|
- **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 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))
|
- **user**: Update notification and verify code settings ([574b043](https://github.com/perfect-panel/ppanel-web/commit/574b043))
|
||||||
* **user**: Update user identifier field and localizations ([1b6befa](https://github.com/perfect-panel/ppanel-web/commit/1b6befa))
|
- **user**: Update user identifier field and localizations ([1b6befa](https://github.com/perfect-panel/ppanel-web/commit/1b6befa))
|
||||||
* **user**: Update user subscribe display ([3bb714d](https://github.com/perfect-panel/ppanel-web/commit/3bb714d))
|
- **user**: Update user subscribe display ([3bb714d](https://github.com/perfect-panel/ppanel-web/commit/3bb714d))
|
||||||
* **utils**: Login redirect url ([cbe5f0d](https://github.com/perfect-panel/ppanel-web/commit/cbe5f0d))
|
- **utils**: Login redirect url ([cbe5f0d](https://github.com/perfect-panel/ppanel-web/commit/cbe5f0d))
|
||||||
* More bugs ([2d88a3a](https://github.com/perfect-panel/ppanel-web/commit/2d88a3a))
|
- More bugs ([2d88a3a](https://github.com/perfect-panel/ppanel-web/commit/2d88a3a))
|
||||||
|
|
||||||
|
|
||||||
### 👷 Build System
|
### 👷 Build System
|
||||||
|
|
||||||
* **config**: Update pm2 config ([d95b425](https://github.com/perfect-panel/ppanel-web/commit/d95b425))
|
- **config**: Update pm2 config ([d95b425](https://github.com/perfect-panel/ppanel-web/commit/d95b425))
|
||||||
|
|
||||||
|
|
||||||
### 💄 Styles
|
### 💄 Styles
|
||||||
|
|
||||||
* **dashboard**: Adjust grid layout and update image dimensions in application display ([f3204b7](https://github.com/perfect-panel/ppanel-web/commit/f3204b7))
|
- **dashboard**: Adjust grid layout and update image dimensions in application display ([f3204b7](https://github.com/perfect-panel/ppanel-web/commit/f3204b7))
|
||||||
* **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))
|
||||||
* **document**: Update ([0a8109b](https://github.com/perfect-panel/ppanel-web/commit/0a8109b))
|
- **document**: Update ([0a8109b](https://github.com/perfect-panel/ppanel-web/commit/0a8109b))
|
||||||
* **globals**: Refactor delete confirmation button and update badge styles in node and subscribe tables ([30ae781](https://github.com/perfect-panel/ppanel-web/commit/30ae781))
|
- **globals**: Refactor delete confirmation button and update badge styles in node and subscribe tables ([30ae781](https://github.com/perfect-panel/ppanel-web/commit/30ae781))
|
||||||
* **locales**: Remove unused subscription labels from multiple locale files ([fb0c510](https://github.com/perfect-panel/ppanel-web/commit/fb0c510))
|
- **locales**: Remove unused subscription labels from multiple locale files ([fb0c510](https://github.com/perfect-panel/ppanel-web/commit/fb0c510))
|
||||||
* **locales**: Update server.json to reorganize relay mode options and improve labels ([701cdee](https://github.com/perfect-panel/ppanel-web/commit/701cdee))
|
- **locales**: Update server.json to reorganize relay mode options and improve labels ([701cdee](https://github.com/perfect-panel/ppanel-web/commit/701cdee))
|
||||||
* **node**: Form ([d5f5add](https://github.com/perfect-panel/ppanel-web/commit/d5f5add))
|
- **node**: Form ([d5f5add](https://github.com/perfect-panel/ppanel-web/commit/d5f5add))
|
||||||
* **node**: Improve layout and spacing in NodeStatusCell component ([136287d](https://github.com/perfect-panel/ppanel-web/commit/136287d))
|
- **node**: Improve layout and spacing in NodeStatusCell component ([136287d](https://github.com/perfect-panel/ppanel-web/commit/136287d))
|
||||||
* **node**: Protocol Tab ([2bcb925](https://github.com/perfect-panel/ppanel-web/commit/2bcb925))
|
- **node**: Protocol Tab ([2bcb925](https://github.com/perfect-panel/ppanel-web/commit/2bcb925))
|
||||||
* **time-slot**: Add chart display ([c44ad47](https://github.com/perfect-panel/ppanel-web/commit/c44ad47))
|
- **time-slot**: Add chart display ([c44ad47](https://github.com/perfect-panel/ppanel-web/commit/c44ad47))
|
||||||
* **ui**: Update mobile style ([eda18bc](https://github.com/perfect-panel/ppanel-web/commit/eda18bc))
|
- **ui**: Update mobile style ([eda18bc](https://github.com/perfect-panel/ppanel-web/commit/eda18bc))
|
||||||
* Update node secret UI and add telephone code field to authentication form ([770932e](https://github.com/perfect-panel/ppanel-web/commit/770932e))
|
- Update node secret UI and add telephone code field to authentication form ([770932e](https://github.com/perfect-panel/ppanel-web/commit/770932e))
|
||||||
|
|
||||||
|
|
||||||
### 📝 Documentation
|
### 📝 Documentation
|
||||||
|
|
||||||
* **readme**: License name ([74cb16b](https://github.com/perfect-panel/ppanel-web/commit/74cb16b))
|
- **readme**: License name ([74cb16b](https://github.com/perfect-panel/ppanel-web/commit/74cb16b))
|
||||||
|
|
||||||
|
|
||||||
### 🔧 Continuous Integration
|
### 🔧 Continuous Integration
|
||||||
|
|
||||||
* **github**: Release docker ([5af60aa](https://github.com/perfect-panel/ppanel-web/commit/5af60aa))
|
- **github**: Release docker ([5af60aa](https://github.com/perfect-panel/ppanel-web/commit/5af60aa))
|
||||||
* **step**: Update step name ([9eca618](https://github.com/perfect-panel/ppanel-web/commit/9eca618))
|
- **step**: Update step name ([9eca618](https://github.com/perfect-panel/ppanel-web/commit/9eca618))
|
||||||
|
|
||||||
<a name="readme-top"></a>
|
<a name="readme-top"></a>
|
||||||
|
|
||||||
|
|||||||
@@ -8,13 +8,22 @@ import LoginLottie from '@workspace/ui/lotties/login.json';
|
|||||||
import { useTranslations } from 'next-intl';
|
import { useTranslations } from 'next-intl';
|
||||||
import Image from 'next/legacy/image';
|
import Image from 'next/legacy/image';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
|
import { useRouter } from 'next/navigation';
|
||||||
|
import { useEffect } from 'react';
|
||||||
import EmailAuthForm from './email/auth-form';
|
import EmailAuthForm from './email/auth-form';
|
||||||
|
|
||||||
export default function Page() {
|
export default function Page() {
|
||||||
const t = useTranslations('auth');
|
const t = useTranslations('auth');
|
||||||
const { common } = useGlobalStore();
|
const { common, user } = useGlobalStore();
|
||||||
const { site } = common;
|
const { site } = common;
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
useEffect(() => {
|
||||||
|
if (user) {
|
||||||
|
router.replace('/dashboard');
|
||||||
|
}
|
||||||
|
}, [router, user]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<main className='bg-muted/50 flex h-full min-h-screen items-center'>
|
<main className='bg-muted/50 flex h-full min-h-screen items-center'>
|
||||||
<div className='flex size-full flex-auto flex-col justify-center lg:flex-row'>
|
<div className='flex size-full flex-auto flex-col justify-center lg:flex-row'>
|
||||||
|
|||||||
@@ -136,14 +136,14 @@ export function Register() {
|
|||||||
/>
|
/>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
<TableRow>
|
<TableRow className='flex flex-col'>
|
||||||
<TableCell>
|
<TableCell className='w-full'>
|
||||||
<Label>{t('trialSubscribePlan')}</Label>
|
<Label>{t('trialSubscribePlan')}</Label>
|
||||||
<p className='text-muted-foreground text-xs'>
|
<p className='text-muted-foreground text-xs'>
|
||||||
{t('trialSubscribePlanDescription')}
|
{t('trialSubscribePlanDescription')}
|
||||||
</p>
|
</p>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell className='text-right'>
|
<TableCell className='max-w-96'>
|
||||||
<EnhancedInput
|
<EnhancedInput
|
||||||
placeholder={t('trialDuration')}
|
placeholder={t('trialDuration')}
|
||||||
type='number'
|
type='number'
|
||||||
|
|||||||
@@ -57,8 +57,13 @@ export default function Page(props: any) {
|
|||||||
{
|
{
|
||||||
accessorKey: 'subscribe_id',
|
accessorKey: 'subscribe_id',
|
||||||
header: t('subscribe'),
|
header: t('subscribe'),
|
||||||
cell: ({ row }) =>
|
cell: ({ row }) => {
|
||||||
subscribeList?.find((item) => item.id === row.getValue('subscribe_id'))?.name,
|
const name = subscribeList?.find(
|
||||||
|
(item) => item.id === row.getValue('subscribe_id'),
|
||||||
|
)?.name;
|
||||||
|
const quantity = row.original.quantity;
|
||||||
|
return name ? `${name} × ${quantity}` : '';
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
accessorKey: 'amount',
|
accessorKey: 'amount',
|
||||||
|
|||||||
@@ -88,12 +88,32 @@ export default function ImportYamlRules({ onImportSuccess }: ImportYamlRulesProp
|
|||||||
if (!groups[policyGroup]) {
|
if (!groups[policyGroup]) {
|
||||||
groups[policyGroup] = [];
|
groups[policyGroup] = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 不插入 MATCH 规则,只用于标识默认规则组
|
||||||
|
if (!rule.trim().startsWith('MATCH,')) {
|
||||||
groups[policyGroup].push(cleanRule);
|
groups[policyGroup].push(cleanRule);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return groups;
|
return groups;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const checkIfDefaultRule = (originalRules: string[], groupName: string): boolean => {
|
||||||
|
return originalRules.some((rule) => {
|
||||||
|
const trimmedRule = rule.trim();
|
||||||
|
if (!trimmedRule.startsWith('MATCH,')) return false;
|
||||||
|
|
||||||
|
// 检查 MATCH 规则是否属于当前组
|
||||||
|
const parts = trimmedRule.split(',');
|
||||||
|
if (parts.length >= 3) {
|
||||||
|
const ruleGroup = parts[2]?.trim();
|
||||||
|
return ruleGroup === groupName;
|
||||||
|
}
|
||||||
|
|
||||||
|
return groupName === 'default';
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
const handleImport = async () => {
|
const handleImport = async () => {
|
||||||
if (!yamlContent) {
|
if (!yamlContent) {
|
||||||
toast.error(t('pleaseUploadFile'));
|
toast.error(t('pleaseUploadFile'));
|
||||||
@@ -130,12 +150,17 @@ export default function ImportYamlRules({ onImportSuccess }: ImportYamlRulesProp
|
|||||||
for (let i = 0; i < groups.length; i++) {
|
for (let i = 0; i < groups.length; i++) {
|
||||||
const group = groups[i];
|
const group = groups[i];
|
||||||
if (!group?.name || !group?.rules.length) continue;
|
if (!group?.name || !group?.rules.length) continue;
|
||||||
|
|
||||||
|
const isDefault = checkIfDefaultRule(allRules, group.name);
|
||||||
|
|
||||||
await createRuleGroup({
|
await createRuleGroup({
|
||||||
name: group.name,
|
name: group.name,
|
||||||
rules: group?.rules.join('\n'),
|
rules: group?.rules.join('\n'),
|
||||||
enable: false,
|
enable: false,
|
||||||
tags: [],
|
tags: [],
|
||||||
icon: '',
|
icon: '',
|
||||||
|
type: 'default',
|
||||||
|
default: isDefault,
|
||||||
});
|
});
|
||||||
setImportProgress(i + 1);
|
setImportProgress(i + 1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,6 +50,8 @@ export default function Page() {
|
|||||||
enable: false,
|
enable: false,
|
||||||
tags: values.tags || [],
|
tags: values.tags || [],
|
||||||
icon: values.icon || '',
|
icon: values.icon || '',
|
||||||
|
type: values.type || 'default',
|
||||||
|
default: false,
|
||||||
});
|
});
|
||||||
toast.success(t('createSuccess'));
|
toast.success(t('createSuccess'));
|
||||||
ref.current?.refresh();
|
ref.current?.refresh();
|
||||||
@@ -100,27 +102,55 @@ export default function Page() {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
accessorKey: 'icon',
|
accessorKey: 'default',
|
||||||
header: t('appIcon'),
|
header: t('defaultRule'),
|
||||||
cell: ({ row }) =>
|
cell: ({ row }) => (
|
||||||
row.getValue('icon') ? (
|
<Switch
|
||||||
<Image
|
defaultChecked={row.original.default}
|
||||||
src={row.getValue('icon')}
|
onCheckedChange={async (checked) => {
|
||||||
alt={row.getValue('name')}
|
await updateRuleGroup({
|
||||||
className='h-8 w-8 rounded-md'
|
...row.original,
|
||||||
width={32}
|
default: checked,
|
||||||
height={32}
|
} as API.UpdateRuleGroupRequest);
|
||||||
|
ref.current?.refresh();
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
) : (
|
|
||||||
<div className='bg-muted flex h-8 w-8 items-center justify-center rounded-md'>
|
|
||||||
{row.original.name?.slice(0, 2)}
|
|
||||||
</div>
|
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
accessorKey: 'type',
|
||||||
|
header: t('type'),
|
||||||
|
cell: ({ row }) => {
|
||||||
|
const type = row.original.type || 'default';
|
||||||
|
if (type === 'default') {
|
||||||
|
return <Badge variant='default'>{t('default')}</Badge>;
|
||||||
|
}
|
||||||
|
if (type === 'reject') {
|
||||||
|
return <Badge variant='destructive'>{t('reject')}</Badge>;
|
||||||
|
}
|
||||||
|
if (type === 'direct') {
|
||||||
|
return <Badge variant='secondary'>{t('direct')}</Badge>;
|
||||||
|
}
|
||||||
|
return <Badge variant='default'>{t('default')}</Badge>;
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
accessorKey: 'name',
|
accessorKey: 'name',
|
||||||
header: t('name'),
|
header: t('name'),
|
||||||
|
cell: ({ row }) => (
|
||||||
|
<div className='flex items-center gap-2'>
|
||||||
|
{row.original.icon && (
|
||||||
|
<Image
|
||||||
|
src={row.original.icon}
|
||||||
|
alt={row.original.name}
|
||||||
|
className='h-6 w-6 rounded-md'
|
||||||
|
width={24}
|
||||||
|
height={24}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
<span>{row.original.name}</span>
|
||||||
|
</div>
|
||||||
|
),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
accessorKey: 'tags',
|
accessorKey: 'tags',
|
||||||
@@ -163,6 +193,8 @@ export default function Page() {
|
|||||||
rules: values.rules,
|
rules: values.rules,
|
||||||
enable: row.enable,
|
enable: row.enable,
|
||||||
icon: values.icon,
|
icon: values.icon,
|
||||||
|
type: values.type,
|
||||||
|
default: row.default,
|
||||||
});
|
});
|
||||||
toast.success(t('updateSuccess'));
|
toast.success(t('updateSuccess'));
|
||||||
ref.current?.refresh();
|
ref.current?.refresh();
|
||||||
|
|||||||
@@ -13,6 +13,13 @@ import {
|
|||||||
FormMessage,
|
FormMessage,
|
||||||
} from '@workspace/ui/components/form';
|
} from '@workspace/ui/components/form';
|
||||||
import { ScrollArea } from '@workspace/ui/components/scroll-area';
|
import { ScrollArea } from '@workspace/ui/components/scroll-area';
|
||||||
|
import {
|
||||||
|
Select,
|
||||||
|
SelectContent,
|
||||||
|
SelectItem,
|
||||||
|
SelectTrigger,
|
||||||
|
SelectValue,
|
||||||
|
} from '@workspace/ui/components/select';
|
||||||
import {
|
import {
|
||||||
Sheet,
|
Sheet,
|
||||||
SheetContent,
|
SheetContent,
|
||||||
@@ -36,6 +43,7 @@ const formSchema = z.object({
|
|||||||
tags: z.array(z.string()).default([]),
|
tags: z.array(z.string()).default([]),
|
||||||
rules: z.string().default(''),
|
rules: z.string().default(''),
|
||||||
icon: z.string().default(''),
|
icon: z.string().default(''),
|
||||||
|
type: z.string().default('default'),
|
||||||
});
|
});
|
||||||
|
|
||||||
interface RuleFormProps<T> {
|
interface RuleFormProps<T> {
|
||||||
@@ -147,6 +155,33 @@ export default function RuleForm<T extends Record<string, any>>({
|
|||||||
</FormItem>
|
</FormItem>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
<FormField
|
||||||
|
control={form.control}
|
||||||
|
name='type'
|
||||||
|
render={({ field }) => (
|
||||||
|
<FormItem>
|
||||||
|
<FormLabel>{t('type')}</FormLabel>
|
||||||
|
<FormControl>
|
||||||
|
<Select
|
||||||
|
value={field.value}
|
||||||
|
onValueChange={(value) => {
|
||||||
|
form.setValue(field.name, value);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<SelectTrigger>
|
||||||
|
<SelectValue placeholder={t('selectType')} />
|
||||||
|
</SelectTrigger>
|
||||||
|
<SelectContent>
|
||||||
|
<SelectItem value='default'>{t('default')}</SelectItem>
|
||||||
|
<SelectItem value='reject'>{t('reject')}</SelectItem>
|
||||||
|
<SelectItem value='direct'>{t('direct')}</SelectItem>
|
||||||
|
</SelectContent>
|
||||||
|
</Select>
|
||||||
|
</FormControl>
|
||||||
|
<FormMessage />
|
||||||
|
</FormItem>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
name='tags'
|
name='tags'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
|
|
||||||
export const protocols = ['shadowsocks', 'vmess', 'vless', 'trojan', 'hysteria2', 'tuic'];
|
export const protocols = ['shadowsocks', 'vmess', 'vless', 'trojan', 'hysteria2', 'tuic', 'anytls'];
|
||||||
|
|
||||||
const nullableString = z.string().nullish();
|
const nullableString = z.string().nullish();
|
||||||
const portSchema = z.number().max(65535).nullish();
|
const portSchema = z.number().max(65535).nullish();
|
||||||
@@ -58,7 +58,15 @@ const hysteria2Schema = z.object({
|
|||||||
|
|
||||||
const tuicSchema = z.object({
|
const tuicSchema = z.object({
|
||||||
port: portSchema,
|
port: portSchema,
|
||||||
security: z.string(),
|
disable_sni: z.boolean().default(false),
|
||||||
|
reduce_rtt: z.boolean().default(false),
|
||||||
|
udp_relay_mode: z.string().default('native'),
|
||||||
|
congestion_controller: z.string().default('bbr'),
|
||||||
|
security_config: securityConfigSchema,
|
||||||
|
});
|
||||||
|
|
||||||
|
const anytlsSchema = z.object({
|
||||||
|
port: portSchema,
|
||||||
security_config: securityConfigSchema,
|
security_config: securityConfigSchema,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -87,6 +95,10 @@ const protocolConfigSchema = z.discriminatedUnion('protocol', [
|
|||||||
protocol: z.literal('tuic'),
|
protocol: z.literal('tuic'),
|
||||||
config: tuicSchema,
|
config: tuicSchema,
|
||||||
}),
|
}),
|
||||||
|
z.object({
|
||||||
|
protocol: z.literal('anytls'),
|
||||||
|
config: anytlsSchema,
|
||||||
|
}),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const baseFormSchema = z.object({
|
const baseFormSchema = z.object({
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ export default function NodeForm<T extends { [x: string]: any }>({
|
|||||||
{trigger}
|
{trigger}
|
||||||
</Button>
|
</Button>
|
||||||
</SheetTrigger>
|
</SheetTrigger>
|
||||||
<SheetContent className='w-[520px] max-w-full md:max-w-screen-md'>
|
<SheetContent className='w-[580px] max-w-full md:max-w-screen-md'>
|
||||||
<SheetHeader>
|
<SheetHeader>
|
||||||
<SheetTitle>{title}</SheetTitle>
|
<SheetTitle>{title}</SheetTitle>
|
||||||
</SheetHeader>
|
</SheetHeader>
|
||||||
@@ -290,7 +290,7 @@ export default function NodeForm<T extends { [x: string]: any }>({
|
|||||||
value={field.value}
|
value={field.value}
|
||||||
onValueChange={(value) => {
|
onValueChange={(value) => {
|
||||||
form.setValue(field.name, value);
|
form.setValue(field.name, value);
|
||||||
if (['trojan', 'hysteria2', 'tuic'].includes(value)) {
|
if (['trojan', 'hysteria2', 'tuic', 'anytls'].includes(value)) {
|
||||||
form.setValue('config.security', 'tls');
|
form.setValue('config.security', 'tls');
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
@@ -402,11 +402,11 @@ export default function NodeForm<T extends { [x: string]: any }>({
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{['vmess', 'vless', 'trojan', 'hysteria2', 'tuic'].includes(protocol) && (
|
{['vmess', 'vless', 'trojan', 'hysteria2', 'tuic', 'anytls'].includes(protocol) && (
|
||||||
<div className='grid gap-4'>
|
<div className='grid gap-4'>
|
||||||
<div
|
<div
|
||||||
className={cn('flex gap-4 *:flex-1', {
|
className={cn('flex gap-4 *:flex-1', {
|
||||||
'grid grid-cols-2': ['hysteria2'].includes(protocol),
|
'grid grid-cols-2': ['hysteria2', 'tuic'].includes(protocol),
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
<FormField
|
<FormField
|
||||||
@@ -524,6 +524,109 @@ export default function NodeForm<T extends { [x: string]: any }>({
|
|||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
{protocol === 'tuic' && (
|
||||||
|
<>
|
||||||
|
<FormField
|
||||||
|
control={form.control}
|
||||||
|
name='config.udp_relay_mode'
|
||||||
|
render={({ field }) => (
|
||||||
|
<FormItem>
|
||||||
|
<FormLabel>{t('form.udpRelayMode')}</FormLabel>
|
||||||
|
<FormControl>
|
||||||
|
<Select
|
||||||
|
value={field.value}
|
||||||
|
onValueChange={(value) => {
|
||||||
|
form.setValue(field.name, value);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<FormControl>
|
||||||
|
<SelectTrigger>
|
||||||
|
<SelectValue placeholder={t('form.pleaseSelect')} />
|
||||||
|
</SelectTrigger>
|
||||||
|
</FormControl>
|
||||||
|
<SelectContent>
|
||||||
|
<SelectItem value='native'>Native</SelectItem>
|
||||||
|
<SelectItem value='quic'>QUIC</SelectItem>
|
||||||
|
</SelectContent>
|
||||||
|
</Select>
|
||||||
|
</FormControl>
|
||||||
|
<FormMessage />
|
||||||
|
</FormItem>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
<FormField
|
||||||
|
control={form.control}
|
||||||
|
name='config.congestion_controller'
|
||||||
|
render={({ field }) => (
|
||||||
|
<FormItem>
|
||||||
|
<FormLabel>{t('form.congestionController')}</FormLabel>
|
||||||
|
<FormControl>
|
||||||
|
<Select
|
||||||
|
value={field.value}
|
||||||
|
onValueChange={(value) => {
|
||||||
|
form.setValue(field.name, value);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<FormControl>
|
||||||
|
<SelectTrigger>
|
||||||
|
<SelectValue placeholder={t('form.pleaseSelect')} />
|
||||||
|
</SelectTrigger>
|
||||||
|
</FormControl>
|
||||||
|
<SelectContent>
|
||||||
|
<SelectItem value='bbr'>BBR</SelectItem>
|
||||||
|
<SelectItem value='cubic'>Cubic</SelectItem>
|
||||||
|
<SelectItem value='reno'>Reno</SelectItem>
|
||||||
|
</SelectContent>
|
||||||
|
</Select>
|
||||||
|
</FormControl>
|
||||||
|
<FormMessage />
|
||||||
|
</FormItem>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
<div className='flex gap-2'>
|
||||||
|
<FormField
|
||||||
|
control={form.control}
|
||||||
|
name='config.disable_sni'
|
||||||
|
render={({ field }) => (
|
||||||
|
<FormItem>
|
||||||
|
<FormLabel>{t('form.disableSni')}</FormLabel>
|
||||||
|
<FormControl>
|
||||||
|
<div className='pt-2'>
|
||||||
|
<Switch
|
||||||
|
checked={field.value}
|
||||||
|
onCheckedChange={(checked) => {
|
||||||
|
form.setValue(field.name, checked);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</FormControl>
|
||||||
|
<FormMessage />
|
||||||
|
</FormItem>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
<FormField
|
||||||
|
control={form.control}
|
||||||
|
name='config.reduce_rtt'
|
||||||
|
render={({ field }) => (
|
||||||
|
<FormItem>
|
||||||
|
<FormLabel>{t('form.reduceRtt')}</FormLabel>
|
||||||
|
<FormControl>
|
||||||
|
<div className='pt-2'>
|
||||||
|
<Switch
|
||||||
|
checked={field.value}
|
||||||
|
onCheckedChange={(checked) => {
|
||||||
|
form.setValue(field.name, checked);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</FormControl>
|
||||||
|
<FormMessage />
|
||||||
|
</FormItem>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
{['vmess', 'vless', 'trojan'].includes(protocol) && (
|
{['vmess', 'vless', 'trojan'].includes(protocol) && (
|
||||||
<Card>
|
<Card>
|
||||||
@@ -630,9 +733,12 @@ export default function NodeForm<T extends { [x: string]: any }>({
|
|||||||
)}
|
)}
|
||||||
</Card>
|
</Card>
|
||||||
)}
|
)}
|
||||||
|
{(['vmess', 'vless', 'trojan'].includes(protocol) ||
|
||||||
|
['anytls', 'tuic', 'hysteria2'].includes(protocol)) && (
|
||||||
<Card>
|
<Card>
|
||||||
<CardHeader className='flex flex-row items-center justify-between p-3'>
|
<CardHeader className='flex flex-row items-center justify-between p-3'>
|
||||||
<CardTitle>{t('form.securityConfig')}</CardTitle>
|
<CardTitle>{t('form.securityConfig')}</CardTitle>
|
||||||
|
{['vmess', 'vless', 'trojan'].includes(protocol) && (
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
name='config.security'
|
name='config.security'
|
||||||
@@ -663,8 +769,11 @@ export default function NodeForm<T extends { [x: string]: any }>({
|
|||||||
</FormItem>
|
</FormItem>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
)}
|
||||||
</CardHeader>
|
</CardHeader>
|
||||||
{security !== 'none' && (
|
{(['anytls', 'tuic', 'hysteria2'].includes(protocol) ||
|
||||||
|
(['vmess', 'vless', 'trojan'].includes(protocol) &&
|
||||||
|
security !== 'none')) && (
|
||||||
<CardContent className='grid grid-cols-2 gap-4 p-3'>
|
<CardContent className='grid grid-cols-2 gap-4 p-3'>
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
@@ -684,6 +793,8 @@ export default function NodeForm<T extends { [x: string]: any }>({
|
|||||||
</FormItem>
|
</FormItem>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
{/* Reality 特殊配置只在 vless + reality 时显示 */}
|
||||||
{protocol === 'vless' && security === 'reality' && (
|
{protocol === 'vless' && security === 'reality' && (
|
||||||
<>
|
<>
|
||||||
<FormField
|
<FormField
|
||||||
@@ -719,7 +830,9 @@ export default function NodeForm<T extends { [x: string]: any }>({
|
|||||||
type='number'
|
type='number'
|
||||||
min={1}
|
min={1}
|
||||||
max={65535}
|
max={65535}
|
||||||
placeholder={t('form.security_config.serverPortPlaceholder')}
|
placeholder={t(
|
||||||
|
'form.security_config.serverPortPlaceholder',
|
||||||
|
)}
|
||||||
onValueChange={(value) => {
|
onValueChange={(value) => {
|
||||||
form.setValue(field.name, value);
|
form.setValue(field.name, value);
|
||||||
}}
|
}}
|
||||||
@@ -738,7 +851,9 @@ export default function NodeForm<T extends { [x: string]: any }>({
|
|||||||
<FormControl>
|
<FormControl>
|
||||||
<EnhancedInput
|
<EnhancedInput
|
||||||
{...field}
|
{...field}
|
||||||
placeholder={t('form.security_config.privateKeyPlaceholder')}
|
placeholder={t(
|
||||||
|
'form.security_config.privateKeyPlaceholder',
|
||||||
|
)}
|
||||||
onValueChange={(value) => {
|
onValueChange={(value) => {
|
||||||
form.setValue(field.name, value);
|
form.setValue(field.name, value);
|
||||||
}}
|
}}
|
||||||
@@ -788,6 +903,7 @@ export default function NodeForm<T extends { [x: string]: any }>({
|
|||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{protocol === 'vless' && (
|
{protocol === 'vless' && (
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
@@ -818,11 +934,11 @@ export default function NodeForm<T extends { [x: string]: any }>({
|
|||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
<FormMessage />
|
<FormMessage />
|
||||||
<FormMessage />
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
name='config.security_config.allow_insecure'
|
name='config.security_config.allow_insecure'
|
||||||
@@ -833,8 +949,8 @@ export default function NodeForm<T extends { [x: string]: any }>({
|
|||||||
<div className='pt-2'>
|
<div className='pt-2'>
|
||||||
<Switch
|
<Switch
|
||||||
checked={!!field.value}
|
checked={!!field.value}
|
||||||
onCheckedChange={(value) => {
|
onCheckedChange={(checked) => {
|
||||||
form.setValue(field.name, value);
|
form.setValue(field.name, checked);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -846,6 +962,7 @@ export default function NodeForm<T extends { [x: string]: any }>({
|
|||||||
</CardContent>
|
</CardContent>
|
||||||
)}
|
)}
|
||||||
</Card>
|
</Card>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ export default function NodeTable() {
|
|||||||
columns={[
|
columns={[
|
||||||
{
|
{
|
||||||
accessorKey: 'id',
|
accessorKey: 'id',
|
||||||
header: 'ID',
|
header: t('id'),
|
||||||
cell: ({ row }) => (
|
cell: ({ row }) => (
|
||||||
<TooltipProvider>
|
<TooltipProvider>
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
@@ -87,6 +87,7 @@ export default function NodeTable() {
|
|||||||
'bg-yellow-500': row.original.protocol === 'trojan',
|
'bg-yellow-500': row.original.protocol === 'trojan',
|
||||||
'bg-purple-500': row.original.protocol === 'hysteria2',
|
'bg-purple-500': row.original.protocol === 'hysteria2',
|
||||||
'bg-cyan-500': row.original.protocol === 'tuic',
|
'bg-cyan-500': row.original.protocol === 'tuic',
|
||||||
|
'bg-gray-500': row.original.protocol === 'anytls',
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
{row.getValue('id')}
|
{row.getValue('id')}
|
||||||
@@ -159,7 +160,7 @@ export default function NodeTable() {
|
|||||||
header: t('nodeGroup'),
|
header: t('nodeGroup'),
|
||||||
cell: ({ row }) => {
|
cell: ({ row }) => {
|
||||||
const name = groups?.find((group) => group.id === row.getValue('group_id'))?.name;
|
const name = groups?.find((group) => group.id === row.getValue('group_id'))?.name;
|
||||||
return name ? <Badge variant='outline'>{name}</Badge> : '--';
|
return name ? <Badge variant='outline'>{name}</Badge> : t('noData');
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -176,7 +177,7 @@ export default function NodeTable() {
|
|||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
'--'
|
t('noData')
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -272,17 +273,17 @@ export default function NodeTable() {
|
|||||||
<ConfirmButton
|
<ConfirmButton
|
||||||
key='delete'
|
key='delete'
|
||||||
trigger={<Button variant='destructive'>{t('delete')}</Button>}
|
trigger={<Button variant='destructive'>{t('delete')}</Button>}
|
||||||
title={t('group.confirmDelete')}
|
title={t('confirmDelete')}
|
||||||
description={t('group.deleteWarning')}
|
description={t('deleteWarning')}
|
||||||
onConfirm={async () => {
|
onConfirm={async () => {
|
||||||
await batchDeleteNode({
|
await batchDeleteNode({
|
||||||
ids: rows.map((item) => item.id),
|
ids: rows.map((item) => item.id),
|
||||||
});
|
});
|
||||||
toast.success(t('group.deleteSuccess'));
|
toast.success(t('deleteSuccess'));
|
||||||
ref.current?.refresh();
|
ref.current?.refresh();
|
||||||
}}
|
}}
|
||||||
cancelText={t('group.cancel')}
|
cancelText={t('cancel')}
|
||||||
confirmText={t('group.confirm')}
|
confirmText={t('confirm')}
|
||||||
/>,
|
/>,
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ import { evaluateWithPrecision, unitConversion } from '@workspace/ui/utils';
|
|||||||
import { CreditCard, Server, Settings } from 'lucide-react';
|
import { CreditCard, Server, Settings } from 'lucide-react';
|
||||||
import { useTranslations } from 'next-intl';
|
import { useTranslations } from 'next-intl';
|
||||||
import { assign, shake } from 'radash';
|
import { assign, shake } from 'radash';
|
||||||
import { useEffect, useState } from 'react';
|
import { useCallback, useEffect, useRef, useState } from 'react';
|
||||||
import { useForm } from 'react-hook-form';
|
import { useForm } from 'react-hook-form';
|
||||||
import { toast } from 'sonner';
|
import { toast } from 'sonner';
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
@@ -81,6 +81,7 @@ export default function SubscribeForm<T extends Record<string, any>>({
|
|||||||
}: Readonly<SubscribeFormProps<T>>) {
|
}: Readonly<SubscribeFormProps<T>>) {
|
||||||
const t = useTranslations('subscribe');
|
const t = useTranslations('subscribe');
|
||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
|
const updateTimeoutRef = useRef<NodeJS.Timeout | null>(null);
|
||||||
|
|
||||||
const formSchema = z.object({
|
const formSchema = z.object({
|
||||||
name: z.string(),
|
name: z.string(),
|
||||||
@@ -118,12 +119,111 @@ export default function SubscribeForm<T extends Record<string, any>>({
|
|||||||
),
|
),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const debouncedCalculateDiscount = useCallback(
|
||||||
|
(values: any[], fieldName: string, lastChangedField?: string, changedIndex?: number) => {
|
||||||
|
if (updateTimeoutRef.current) {
|
||||||
|
clearTimeout(updateTimeoutRef.current);
|
||||||
|
}
|
||||||
|
|
||||||
|
updateTimeoutRef.current = setTimeout(() => {
|
||||||
|
const { unit_price } = form.getValues();
|
||||||
|
if (!unit_price || !values?.length) return;
|
||||||
|
|
||||||
|
let hasChanges = false;
|
||||||
|
const calculatedValues = values.map((item: any, index: number) => {
|
||||||
|
const result = { ...item };
|
||||||
|
|
||||||
|
if (changedIndex !== undefined && index !== changedIndex) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
const quantity = Number(item.quantity) || 0;
|
||||||
|
const discount = Number(item.discount) || 0;
|
||||||
|
const price = Number(item.price) || 0;
|
||||||
|
|
||||||
|
switch (lastChangedField) {
|
||||||
|
case 'quantity':
|
||||||
|
case 'discount':
|
||||||
|
if (quantity > 0 && discount > 0) {
|
||||||
|
const newPrice = evaluateWithPrecision(
|
||||||
|
`${unit_price} * ${quantity} * ${discount} / 100`,
|
||||||
|
);
|
||||||
|
if (Math.abs(newPrice - price) > 0.01) {
|
||||||
|
result.price = newPrice;
|
||||||
|
hasChanges = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'price':
|
||||||
|
if (quantity > 0 && price > 0) {
|
||||||
|
const newDiscount = evaluateWithPrecision(
|
||||||
|
`${price} / ${quantity} / ${unit_price} * 100`,
|
||||||
|
);
|
||||||
|
if (Math.abs(newDiscount - discount) > 0.01) {
|
||||||
|
result.discount = Math.min(100, Math.max(0, newDiscount));
|
||||||
|
hasChanges = true;
|
||||||
|
}
|
||||||
|
} else if (discount > 0 && price > 0) {
|
||||||
|
const newQuantity = evaluateWithPrecision(
|
||||||
|
`${price} / ${unit_price} / ${discount} * 100`,
|
||||||
|
);
|
||||||
|
if (Math.abs(newQuantity - quantity) > 0.01 && newQuantity > 0) {
|
||||||
|
result.quantity = Math.max(1, Math.round(newQuantity));
|
||||||
|
hasChanges = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
if (quantity > 0 && discount > 0 && price === 0) {
|
||||||
|
result.price = evaluateWithPrecision(
|
||||||
|
`${unit_price} * ${quantity} * ${discount} / 100`,
|
||||||
|
);
|
||||||
|
hasChanges = true;
|
||||||
|
} else if (quantity > 0 && price > 0 && discount === 0) {
|
||||||
|
const newDiscount = evaluateWithPrecision(
|
||||||
|
`${price} / ${quantity} / ${unit_price} * 100`,
|
||||||
|
);
|
||||||
|
result.discount = Math.min(100, Math.max(0, newDiscount));
|
||||||
|
hasChanges = true;
|
||||||
|
} else if (discount > 0 && price > 0 && quantity === 0) {
|
||||||
|
const newQuantity = evaluateWithPrecision(
|
||||||
|
`${price} / ${unit_price} / ${discount} * 100`,
|
||||||
|
);
|
||||||
|
if (newQuantity > 0) {
|
||||||
|
result.quantity = Math.max(1, Math.round(newQuantity));
|
||||||
|
hasChanges = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (hasChanges) {
|
||||||
|
form.setValue(fieldName, calculatedValues, { shouldDirty: true });
|
||||||
|
}
|
||||||
|
}, 300);
|
||||||
|
},
|
||||||
|
[form],
|
||||||
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
form?.reset(
|
form?.reset(
|
||||||
assign(defaultValues, shake(initialValues, (value) => value === null) as Record<string, any>),
|
assign(defaultValues, shake(initialValues, (value) => value === null) as Record<string, any>),
|
||||||
);
|
);
|
||||||
}, [form, initialValues]);
|
}, [form, initialValues]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
return () => {
|
||||||
|
if (updateTimeoutRef.current) {
|
||||||
|
clearTimeout(updateTimeoutRef.current);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}, []);
|
||||||
|
|
||||||
async function handleSubmit(data: { [x: string]: any }) {
|
async function handleSubmit(data: { [x: string]: any }) {
|
||||||
const bool = await onSubmit(data as T);
|
const bool = await onSubmit(data as T);
|
||||||
if (bool) setOpen(false);
|
if (bool) setOpen(false);
|
||||||
@@ -158,31 +258,6 @@ export default function SubscribeForm<T extends Record<string, any>>({
|
|||||||
|
|
||||||
const unit_time = form.watch('unit_time');
|
const unit_time = form.watch('unit_time');
|
||||||
const unit_price = form.watch('unit_price');
|
const unit_price = form.watch('unit_price');
|
||||||
const discounts = form.watch('discount');
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (!discounts?.length || !unit_price) return;
|
|
||||||
|
|
||||||
const calculatedValues = discounts.map((item: any) => {
|
|
||||||
const result = { ...item };
|
|
||||||
|
|
||||||
if (item.quantity && item.discount) {
|
|
||||||
result.price = evaluateWithPrecision(
|
|
||||||
`${unit_price || 0} * ${item.quantity} * ${item.discount} / 100`,
|
|
||||||
);
|
|
||||||
} else if (item.quantity && item.price && !item.discount) {
|
|
||||||
result.discount = evaluateWithPrecision(
|
|
||||||
`${item.price} / ${item.quantity} / ${unit_price} * 100`,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
});
|
|
||||||
|
|
||||||
if (JSON.stringify(calculatedValues) !== JSON.stringify(discounts)) {
|
|
||||||
form.setValue('discount', calculatedValues);
|
|
||||||
}
|
|
||||||
}, [unit_price, discounts, form]);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Sheet open={open} onOpenChange={setOpen}>
|
<Sheet open={open} onOpenChange={setOpen}>
|
||||||
@@ -581,8 +656,9 @@ export default function SubscribeForm<T extends Record<string, any>>({
|
|||||||
{
|
{
|
||||||
name: 'discount',
|
name: 'discount',
|
||||||
type: 'number',
|
type: 'number',
|
||||||
min: 1,
|
min: 0.01,
|
||||||
max: 100,
|
max: 100,
|
||||||
|
step: 0.01,
|
||||||
placeholder: t('form.discountPercent'),
|
placeholder: t('form.discountPercent'),
|
||||||
suffix: '%',
|
suffix: '%',
|
||||||
},
|
},
|
||||||
@@ -590,51 +666,53 @@ export default function SubscribeForm<T extends Record<string, any>>({
|
|||||||
name: 'price',
|
name: 'price',
|
||||||
placeholder: t('form.discount_price'),
|
placeholder: t('form.discount_price'),
|
||||||
type: 'number',
|
type: 'number',
|
||||||
|
min: 0,
|
||||||
|
step: 0.01,
|
||||||
formatInput: (value) => unitConversion('centsToDollars', value),
|
formatInput: (value) => unitConversion('centsToDollars', value),
|
||||||
formatOutput: (value) => unitConversion('dollarsToCents', value),
|
formatOutput: (value) => unitConversion('dollarsToCents', value),
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
value={field.value}
|
value={field.value}
|
||||||
onChange={(newValues) => {
|
onChange={(
|
||||||
|
newValues: (API.SubscribeDiscount & { price?: number })[],
|
||||||
|
) => {
|
||||||
const oldValues = field.value || [];
|
const oldValues = field.value || [];
|
||||||
const { unit_price } = form.getValues();
|
let lastChangedField: string | undefined;
|
||||||
|
let changedIndex: number | undefined;
|
||||||
|
|
||||||
const calculatedValues = newValues.map((newItem, index) => {
|
for (
|
||||||
const oldItem = oldValues[index] || {};
|
let i = 0;
|
||||||
|
i < Math.max(newValues.length, oldValues.length);
|
||||||
const result = { ...newItem };
|
i++
|
||||||
|
|
||||||
const quantityChanged = newItem.quantity !== oldItem.quantity;
|
|
||||||
const discountChanged = newItem.discount !== oldItem.discount;
|
|
||||||
const priceChanged = newItem.price !== oldItem.price;
|
|
||||||
|
|
||||||
if (
|
|
||||||
(quantityChanged || discountChanged) &&
|
|
||||||
!priceChanged &&
|
|
||||||
newItem.quantity &&
|
|
||||||
newItem.discount
|
|
||||||
) {
|
) {
|
||||||
result.price = evaluateWithPrecision(
|
const newItem = newValues[i] || {};
|
||||||
`${unit_price || 0} * ${newItem.quantity} * ${newItem.discount} / 100`,
|
const oldItem = oldValues[i] || {};
|
||||||
|
|
||||||
|
if ((newItem as any).quantity !== (oldItem as any).quantity) {
|
||||||
|
lastChangedField = 'quantity';
|
||||||
|
changedIndex = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if ((newItem as any).discount !== (oldItem as any).discount) {
|
||||||
|
lastChangedField = 'discount';
|
||||||
|
changedIndex = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if ((newItem as any).price !== (oldItem as any).price) {
|
||||||
|
lastChangedField = 'price';
|
||||||
|
changedIndex = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
form.setValue(field.name, newValues, { shouldDirty: true });
|
||||||
|
if (newValues?.length > 0) {
|
||||||
|
debouncedCalculateDiscount(
|
||||||
|
newValues,
|
||||||
|
field.name,
|
||||||
|
lastChangedField,
|
||||||
|
changedIndex,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
|
||||||
priceChanged &&
|
|
||||||
!discountChanged &&
|
|
||||||
newItem.price &&
|
|
||||||
newItem.quantity &&
|
|
||||||
unit_price
|
|
||||||
) {
|
|
||||||
result.discount = evaluateWithPrecision(
|
|
||||||
`${newItem.price} / ${newItem.quantity} / ${unit_price} * 100`,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
});
|
|
||||||
|
|
||||||
form.setValue(field.name, calculatedValues);
|
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { getSystemLog, restartSystem } from '@/services/admin/tool';
|
import { getSystemLog, getVersion, restartSystem } from '@/services/admin/tool';
|
||||||
import { useQuery } from '@tanstack/react-query';
|
import { useQuery } from '@tanstack/react-query';
|
||||||
import {
|
import {
|
||||||
Accordion,
|
Accordion,
|
||||||
@@ -18,6 +18,7 @@ import {
|
|||||||
AlertDialogTitle,
|
AlertDialogTitle,
|
||||||
AlertDialogTrigger,
|
AlertDialogTrigger,
|
||||||
} from '@workspace/ui/components/alert-dialog';
|
} from '@workspace/ui/components/alert-dialog';
|
||||||
|
import { Badge } from '@workspace/ui/components/badge';
|
||||||
import { Button } from '@workspace/ui/components/button';
|
import { Button } from '@workspace/ui/components/button';
|
||||||
import {
|
import {
|
||||||
Card,
|
Card,
|
||||||
@@ -28,8 +29,10 @@ import {
|
|||||||
} from '@workspace/ui/components/card';
|
} from '@workspace/ui/components/card';
|
||||||
import { ScrollArea } from '@workspace/ui/components/scroll-area';
|
import { ScrollArea } from '@workspace/ui/components/scroll-area';
|
||||||
import { Icon } from '@workspace/ui/custom-components/icon';
|
import { Icon } from '@workspace/ui/custom-components/icon';
|
||||||
|
import { formatDate } from '@workspace/ui/utils';
|
||||||
import { useTranslations } from 'next-intl';
|
import { useTranslations } from 'next-intl';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
|
import packageJson from '../../../../../package.json';
|
||||||
|
|
||||||
const getLogLevelColor = (level: string) => {
|
const getLogLevelColor = (level: string) => {
|
||||||
const colorMap: { [key: string]: string } = {
|
const colorMap: { [key: string]: string } = {
|
||||||
@@ -57,6 +60,91 @@ export default function Page() {
|
|||||||
const [openRestart, setOpenRestart] = useState(false);
|
const [openRestart, setOpenRestart] = useState(false);
|
||||||
const [isRestarting, setIsRestarting] = useState(false);
|
const [isRestarting, setIsRestarting] = useState(false);
|
||||||
|
|
||||||
|
const { data: latestReleases } = useQuery({
|
||||||
|
queryKey: ['getLatestReleases'],
|
||||||
|
queryFn: async () => {
|
||||||
|
try {
|
||||||
|
const [webResponse, serverResponse] = await Promise.all([
|
||||||
|
fetch('https://api.github.com/repos/perfect-panel/ppanel-web/releases/latest'),
|
||||||
|
fetch('https://api.github.com/repos/perfect-panel/server/releases/latest'),
|
||||||
|
]);
|
||||||
|
|
||||||
|
const webData = webResponse.ok ? await webResponse.json() : null;
|
||||||
|
const serverData = serverResponse.ok ? await serverResponse.json() : null;
|
||||||
|
|
||||||
|
return {
|
||||||
|
web: webData
|
||||||
|
? {
|
||||||
|
version: webData.tag_name,
|
||||||
|
url: webData.html_url,
|
||||||
|
publishedAt: webData.published_at,
|
||||||
|
}
|
||||||
|
: null,
|
||||||
|
server: serverData
|
||||||
|
? {
|
||||||
|
version: serverData.tag_name,
|
||||||
|
url: serverData.html_url,
|
||||||
|
publishedAt: serverData.published_at,
|
||||||
|
}
|
||||||
|
: null,
|
||||||
|
};
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to fetch latest releases:', error);
|
||||||
|
return { web: null, server: null };
|
||||||
|
}
|
||||||
|
},
|
||||||
|
staleTime: 60 * 60 * 1000,
|
||||||
|
retry: 1,
|
||||||
|
retryDelay: 10000,
|
||||||
|
});
|
||||||
|
|
||||||
|
// 检查是否有新版本
|
||||||
|
const hasNewVersion =
|
||||||
|
latestReleases?.web && packageJson.version !== latestReleases.web.version.replace(/^v/, '');
|
||||||
|
|
||||||
|
const { data: systemInfo } = useQuery({
|
||||||
|
queryKey: ['getVersion'],
|
||||||
|
queryFn: async () => {
|
||||||
|
const { data } = await getVersion();
|
||||||
|
|
||||||
|
const versionString = data.data?.version || '';
|
||||||
|
const releaseVersionRegex = /^[Vv]?\d+\.\d+\.\d+$/;
|
||||||
|
const timeMatch = versionString.match(/\(([^)]+)\)/);
|
||||||
|
const timeInBrackets = timeMatch ? timeMatch[1] : '';
|
||||||
|
|
||||||
|
const versionWithoutTime = versionString.replace(/\([^)]*\)/, '').trim();
|
||||||
|
const isDevelopment = !releaseVersionRegex.test(versionWithoutTime);
|
||||||
|
|
||||||
|
let baseVersion = versionWithoutTime;
|
||||||
|
let versionSuffix = '';
|
||||||
|
let lastUpdated = '';
|
||||||
|
|
||||||
|
if (isDevelopment && versionWithoutTime.includes('-')) {
|
||||||
|
const parts = versionWithoutTime.split('-');
|
||||||
|
baseVersion = parts[0] || versionWithoutTime;
|
||||||
|
versionSuffix = parts.slice(1).join('-');
|
||||||
|
}
|
||||||
|
|
||||||
|
lastUpdated = formatDate(new Date(timeInBrackets || Date.now())) || '';
|
||||||
|
|
||||||
|
const displayVersion =
|
||||||
|
baseVersion.startsWith('V') || baseVersion.startsWith('v')
|
||||||
|
? baseVersion
|
||||||
|
: `V${baseVersion}`;
|
||||||
|
|
||||||
|
return {
|
||||||
|
isRelease: !isDevelopment,
|
||||||
|
version: displayVersion,
|
||||||
|
lastUpdated,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const hasServerNewVersion =
|
||||||
|
latestReleases?.server &&
|
||||||
|
systemInfo &&
|
||||||
|
systemInfo.version.replace(/^V/, '') !== latestReleases.server.version.replace(/^v/, '');
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Card className='border-none'>
|
<Card className='border-none'>
|
||||||
<CardHeader className='flex flex-col items-start justify-between sm:flex-row sm:items-center'>
|
<CardHeader className='flex flex-col items-start justify-between sm:flex-row sm:items-center'>
|
||||||
@@ -110,15 +198,90 @@ export default function Page() {
|
|||||||
</div>
|
</div>
|
||||||
</CardHeader>
|
</CardHeader>
|
||||||
<CardContent>
|
<CardContent>
|
||||||
<div className='space-y-6'>
|
<div className='space-y-4'>
|
||||||
{/* <div className='flex items-center justify-between'>
|
{/* 版本信息紧凑显示 */}
|
||||||
<div className='text-lg font-semibold'>
|
<div className='flex flex-col space-y-2 sm:flex-row sm:space-x-3 sm:space-y-0'>
|
||||||
{t('currentVersion')} <span>V1.0.0</span>
|
{/* 用户端/管理端版本 */}
|
||||||
|
<div className='bg-muted/30 flex flex-1 items-center justify-between rounded-md p-2'>
|
||||||
|
<div className='flex items-center'>
|
||||||
|
<Icon icon='mdi:web' className='mr-2 h-4 w-4 text-green-600' />
|
||||||
|
<div className='flex items-center space-x-2'>
|
||||||
|
<span className='text-xs font-medium'>{t('webVersion')}</span>
|
||||||
|
<Badge variant='default' className='px-1.5 py-0.5 text-xs'>
|
||||||
|
V{packageJson.version}
|
||||||
|
</Badge>
|
||||||
|
{hasNewVersion && (
|
||||||
|
<Badge variant='destructive' className='animate-pulse px-1.5 py-0.5 text-xs'>
|
||||||
|
{t('newVersionAvailable')}
|
||||||
|
</Badge>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{hasNewVersion && (
|
||||||
|
<Button
|
||||||
|
variant='outline'
|
||||||
|
size='sm'
|
||||||
|
className='h-6 px-2 text-xs'
|
||||||
|
onClick={() =>
|
||||||
|
window.open(
|
||||||
|
latestReleases?.web?.url ||
|
||||||
|
'https://github.com/perfect-panel/ppanel-web/releases',
|
||||||
|
'_blank',
|
||||||
|
)
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<Icon icon='mdi:open-in-new' className='mr-1 h-3 w-3' />
|
||||||
|
{t('viewNewVersion')}
|
||||||
|
</Button>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 服务端版本 */}
|
||||||
|
<div className='bg-muted/30 flex flex-1 items-center justify-between rounded-md p-2'>
|
||||||
|
<div className='flex items-center'>
|
||||||
|
<Icon icon='mdi:server' className='mr-2 h-4 w-4 text-blue-600' />
|
||||||
|
<div className='flex items-center space-x-2'>
|
||||||
|
<span className='text-xs font-medium'>{t('serverVersion')}</span>
|
||||||
|
<Badge
|
||||||
|
variant={!systemInfo?.isRelease ? 'destructive' : 'default'}
|
||||||
|
className='px-1.5 py-0.5 text-xs'
|
||||||
|
>
|
||||||
|
{systemInfo?.version || 'V1.0.0'}
|
||||||
|
{!systemInfo?.isRelease && (
|
||||||
|
<span className='ml-1'>{t('developmentVersion')}</span>
|
||||||
|
)}
|
||||||
|
</Badge>
|
||||||
|
{hasServerNewVersion && (
|
||||||
|
<Badge variant='destructive' className='animate-pulse px-1.5 py-0.5 text-xs'>
|
||||||
|
{t('newVersionAvailable')}
|
||||||
|
</Badge>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className='flex items-center space-x-2'>
|
||||||
|
{hasServerNewVersion && (
|
||||||
|
<Button
|
||||||
|
variant='outline'
|
||||||
|
size='sm'
|
||||||
|
className='h-6 px-2 text-xs'
|
||||||
|
onClick={() =>
|
||||||
|
window.open(
|
||||||
|
latestReleases?.server?.url ||
|
||||||
|
'https://github.com/perfect-panel/server/releases',
|
||||||
|
'_blank',
|
||||||
|
)
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<Icon icon='mdi:open-in-new' className='mr-1 h-3 w-3' />
|
||||||
|
{t('viewNewVersion')}
|
||||||
|
</Button>
|
||||||
|
)}
|
||||||
|
<div className='text-muted-foreground hidden text-right text-xs sm:block'>
|
||||||
|
<div className='font-mono'>{systemInfo?.lastUpdated || '--'}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className='text-muted-foreground text-sm'>
|
|
||||||
{t('lastUpdated')} <span>2024-12-16 12:00:00</span>
|
|
||||||
</div>
|
</div>
|
||||||
</div> */}
|
|
||||||
<Card className='overflow-hidden'>
|
<Card className='overflow-hidden'>
|
||||||
<CardHeader className='bg-secondary py-1'>
|
<CardHeader className='bg-secondary py-1'>
|
||||||
<div className='flex items-center justify-between'>
|
<div className='flex items-center justify-between'>
|
||||||
@@ -148,10 +311,7 @@ export default function Page() {
|
|||||||
</div>
|
</div>
|
||||||
</AccordionTrigger>
|
</AccordionTrigger>
|
||||||
<AccordionContent className='px-2'>
|
<AccordionContent className='px-2'>
|
||||||
{
|
{Object.entries(log).map(([key, value]) => (
|
||||||
// 直接渲染 key: value
|
|
||||||
|
|
||||||
Object.entries(log).map(([key, value]) => (
|
|
||||||
<div
|
<div
|
||||||
key={key}
|
key={key}
|
||||||
className='grid grid-cols-1 gap-2 text-xs sm:grid-cols-2 sm:text-sm'
|
className='grid grid-cols-1 gap-2 text-xs sm:grid-cols-2 sm:text-sm'
|
||||||
@@ -159,8 +319,7 @@ export default function Page() {
|
|||||||
<span className='font-medium'>{key}:</span>
|
<span className='font-medium'>{key}:</span>
|
||||||
<span className='break-all'>{value as string}</span>
|
<span className='break-all'>{value as string}</span>
|
||||||
</div>
|
</div>
|
||||||
))
|
))}
|
||||||
}
|
|
||||||
{/* <div className='grid grid-cols-1 gap-2 text-xs sm:grid-cols-2 sm:text-sm'>
|
{/* <div className='grid grid-cols-1 gap-2 text-xs sm:grid-cols-2 sm:text-sm'>
|
||||||
<div className='font-medium'>{t('ip')}:</div>
|
<div className='font-medium'>{t('ip')}:</div>
|
||||||
<div>{log.ip}</div>
|
<div>{log.ip}</div>
|
||||||
|
|||||||
+11
-10
@@ -9,20 +9,20 @@ import { NextIntlClientProvider } from 'next-intl';
|
|||||||
import { getLocale, getMessages } from 'next-intl/server';
|
import { getLocale, getMessages } from 'next-intl/server';
|
||||||
import { PublicEnvScript } from 'next-runtime-env';
|
import { PublicEnvScript } from 'next-runtime-env';
|
||||||
import { unstable_noStore as noStore } from 'next/cache';
|
import { unstable_noStore as noStore } from 'next/cache';
|
||||||
import { Geist, Geist_Mono } from 'next/font/google';
|
// import { Geist, Geist_Mono } from 'next/font/google';
|
||||||
import { cookies } from 'next/headers';
|
import { cookies } from 'next/headers';
|
||||||
import NextTopLoader from 'nextjs-toploader';
|
import NextTopLoader from 'nextjs-toploader';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
const fontSans = Geist({
|
// const fontSans = Geist({
|
||||||
subsets: ['latin'],
|
// subsets: ['latin'],
|
||||||
variable: '--font-sans',
|
// variable: '--font-sans',
|
||||||
});
|
// });
|
||||||
|
|
||||||
const fontMono = Geist_Mono({
|
// const fontMono = Geist_Mono({
|
||||||
subsets: ['latin'],
|
// subsets: ['latin'],
|
||||||
variable: '--font-mono',
|
// variable: '--font-mono',
|
||||||
});
|
// });
|
||||||
|
|
||||||
export async function generateMetadata(): Promise<Metadata> {
|
export async function generateMetadata(): Promise<Metadata> {
|
||||||
noStore();
|
noStore();
|
||||||
@@ -111,7 +111,8 @@ export default async function RootLayout({
|
|||||||
</head>
|
</head>
|
||||||
<body
|
<body
|
||||||
suppressHydrationWarning
|
suppressHydrationWarning
|
||||||
className={`${fontSans.variable} ${fontMono.variable} size-full min-h-[calc(100dvh-env(safe-area-inset-top))] font-sans antialiased`}
|
// ${fontSans.variable} ${fontMono.variable}
|
||||||
|
className={`size-full min-h-[calc(100dvh-env(safe-area-inset-top))] font-sans antialiased`}
|
||||||
>
|
>
|
||||||
<NextIntlClientProvider messages={messages}>
|
<NextIntlClientProvider messages={messages}>
|
||||||
<NextTopLoader showSpinner={false} />
|
<NextTopLoader showSpinner={false} />
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
"delete": "Smazat",
|
"delete": "Smazat",
|
||||||
"deleteSuccess": "Pravidlo bylo úspěšně smazáno",
|
"deleteSuccess": "Pravidlo bylo úspěšně smazáno",
|
||||||
"deleteWarning": "Opravdu chcete smazat toto pravidlo? Tato akce není vratná.",
|
"deleteWarning": "Opravdu chcete smazat toto pravidlo? Tato akce není vratná.",
|
||||||
"description": "Popis pravidla",
|
|
||||||
"downloadTemplate": "Stáhnout šablonu",
|
"downloadTemplate": "Stáhnout šablonu",
|
||||||
"edit": "Upravit",
|
"edit": "Upravit",
|
||||||
"editRule": "Upravit pravidlo",
|
"editRule": "Upravit pravidlo",
|
||||||
@@ -22,7 +21,6 @@
|
|||||||
"import": "Importovat",
|
"import": "Importovat",
|
||||||
"importFailed": "Import se nezdařil",
|
"importFailed": "Import se nezdařil",
|
||||||
"importSuccess": "Import byl úspěšný",
|
"importSuccess": "Import byl úspěšný",
|
||||||
"importYaml": "Importovat YAML",
|
|
||||||
"importYamlDescription": "Importujte pravidla ze souboru YAML, systém automaticky vytvoří skupiny pravidel na základě názvů skupin politiky",
|
"importYamlDescription": "Importujte pravidla ze souboru YAML, systém automaticky vytvoří skupiny pravidel na základě názvů skupin politiky",
|
||||||
"importYamlRules": "Importovat YAML pravidla",
|
"importYamlRules": "Importovat YAML pravidla",
|
||||||
"importing": "Importuji...",
|
"importing": "Importuji...",
|
||||||
@@ -31,11 +29,9 @@
|
|||||||
"noValidRules": "Nebyly nalezeny žádné platné pravidla",
|
"noValidRules": "Nebyly nalezeny žádné platné pravidla",
|
||||||
"pleaseUploadFile": "Prosím, nahrajte soubor YAML",
|
"pleaseUploadFile": "Prosím, nahrajte soubor YAML",
|
||||||
"preview": "Náhled",
|
"preview": "Náhled",
|
||||||
"rules": "Obsah pravidla",
|
|
||||||
"rulesFormat": "Formát pravidla: typ pravidla, obsah shody, [politika], kde politika je volitelná.\nPokud politika není specifikována, bude automaticky použito aktuální jméno skupiny pravidel. Příklady:",
|
"rulesFormat": "Formát pravidla: typ pravidla, obsah shody, [politika], kde politika je volitelná.\nPokud politika není specifikována, bude automaticky použito aktuální jméno skupiny pravidel. Příklady:",
|
||||||
"rulesLabel": "Obsah pravidla",
|
"rulesLabel": "Obsah pravidla",
|
||||||
"searchRule": "Hledat název pravidla",
|
"searchRule": "Hledat název pravidla",
|
||||||
"selectFile": "Vybrat soubor",
|
|
||||||
"selectTags": "Vybrat značky uzlu",
|
"selectTags": "Vybrat značky uzlu",
|
||||||
"tags": "Značky uzlu",
|
"tags": "Značky uzlu",
|
||||||
"tagsLabel": "Značky uzlu",
|
"tagsLabel": "Značky uzlu",
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "Limit na nákup/čas",
|
"quota": "Limit na nákup/čas",
|
||||||
"replacement": "Obnovení ceny/krát",
|
"replacement": "Obnovení ceny/krát",
|
||||||
"sell": "Prodej",
|
"sell": "Prodej",
|
||||||
"show": "Zobrazit na hlavní stránce",
|
"show": "Zobrazit",
|
||||||
"sold": "Počet předplatných",
|
"sold": "Počet předplatných",
|
||||||
"subscribe": "Předplatit",
|
"subscribe": "Předplatit",
|
||||||
"subscribeGroup": "Přihlásit se ke skupině",
|
"subscribeGroup": "Přihlásit se ke skupině",
|
||||||
|
|||||||
@@ -6,15 +6,18 @@
|
|||||||
"confirmSystemUpgrade": "Potvrdit aktualizaci systému",
|
"confirmSystemUpgrade": "Potvrdit aktualizaci systému",
|
||||||
"confirmUpgrade": "Potvrdit aktualizaci",
|
"confirmUpgrade": "Potvrdit aktualizaci",
|
||||||
"currentVersion": "Aktuální verze systému:",
|
"currentVersion": "Aktuální verze systému:",
|
||||||
|
"developmentVersion": "Vývojová verze",
|
||||||
"errors": "Chyby",
|
"errors": "Chyby",
|
||||||
"ip": "IP",
|
"ip": "IP adresa",
|
||||||
"lastUpdated": "Poslední aktualizace:",
|
"lastUpdated": "Poslední aktualizace:",
|
||||||
|
"newVersionAvailable": "Nová verze",
|
||||||
"none": "Žádný",
|
"none": "Žádný",
|
||||||
"query": "Dotaz",
|
"query": "Dotaz",
|
||||||
"rebootDescription": "Opravdu chcete restartovat systém? Tato akce způsobí krátké přerušení služby.",
|
"rebootDescription": "Opravdu chcete restartovat systém? Tato akce způsobí krátké přerušení služby.",
|
||||||
"rebooting": "Systém se restartuje...",
|
"rebooting": "Systém se restartuje...",
|
||||||
"refreshLogs": "Obnovit protokoly",
|
"refreshLogs": "Obnovit protokoly",
|
||||||
"request": "Žádost",
|
"request": "Žádost",
|
||||||
|
"serverVersion": "Server",
|
||||||
"status": "Stav",
|
"status": "Stav",
|
||||||
"systemLogs": "Systémové protokoly",
|
"systemLogs": "Systémové protokoly",
|
||||||
"systemReboot": "Restart systému",
|
"systemReboot": "Restart systému",
|
||||||
@@ -22,5 +25,8 @@
|
|||||||
"systemUpgrade": "Aktualizace systému",
|
"systemUpgrade": "Aktualizace systému",
|
||||||
"upgradeDescription": "Jste si jisti, že chcete provést aktualizaci systému? Tato operace může trvat několik minut a během ní může být systém neodpovídající.",
|
"upgradeDescription": "Jste si jisti, že chcete provést aktualizaci systému? Tato operace může trvat několik minut a během ní může být systém neodpovídající.",
|
||||||
"userAgent": "Uživatelský agent",
|
"userAgent": "Uživatelský agent",
|
||||||
"viewLogsAndManage": "Zobrazit systémové protokoly, provádět aktualizace systému a restartovat operace"
|
"versionInfo": "Informace o verzi",
|
||||||
|
"viewLogsAndManage": "Zobrazit systémové protokoly, provádět aktualizace systému a restartovat operace",
|
||||||
|
"viewNewVersion": "Zobrazit novou verzi",
|
||||||
|
"webVersion": "Web/Admin"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
"delete": "Löschen",
|
"delete": "Löschen",
|
||||||
"deleteSuccess": "Regel erfolgreich gelöscht",
|
"deleteSuccess": "Regel erfolgreich gelöscht",
|
||||||
"deleteWarning": "Sind Sie sicher, dass Sie diese Regel löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.",
|
"deleteWarning": "Sind Sie sicher, dass Sie diese Regel löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.",
|
||||||
"description": "Regelbeschreibung",
|
|
||||||
"downloadTemplate": "Vorlage herunterladen",
|
"downloadTemplate": "Vorlage herunterladen",
|
||||||
"edit": "Bearbeiten",
|
"edit": "Bearbeiten",
|
||||||
"editRule": "Regel bearbeiten",
|
"editRule": "Regel bearbeiten",
|
||||||
@@ -22,7 +21,6 @@
|
|||||||
"import": "Importieren",
|
"import": "Importieren",
|
||||||
"importFailed": "Import fehlgeschlagen",
|
"importFailed": "Import fehlgeschlagen",
|
||||||
"importSuccess": "Import erfolgreich",
|
"importSuccess": "Import erfolgreich",
|
||||||
"importYaml": "YAML importieren",
|
|
||||||
"importYamlDescription": "Regeln aus einer YAML-Datei importieren, das System erstellt automatisch Regelgruppen basierend auf den Namen der Richtliniengruppen",
|
"importYamlDescription": "Regeln aus einer YAML-Datei importieren, das System erstellt automatisch Regelgruppen basierend auf den Namen der Richtliniengruppen",
|
||||||
"importYamlRules": "YAML-Regeln importieren",
|
"importYamlRules": "YAML-Regeln importieren",
|
||||||
"importing": "Importiere...",
|
"importing": "Importiere...",
|
||||||
@@ -31,11 +29,9 @@
|
|||||||
"noValidRules": "Keine gültigen Regeln gefunden",
|
"noValidRules": "Keine gültigen Regeln gefunden",
|
||||||
"pleaseUploadFile": "Bitte laden Sie eine YAML-Datei hoch",
|
"pleaseUploadFile": "Bitte laden Sie eine YAML-Datei hoch",
|
||||||
"preview": "Vorschau",
|
"preview": "Vorschau",
|
||||||
"rules": "Regelinhalt",
|
|
||||||
"rulesFormat": "Regelformat: Regeltyp, Übereinstimmungsinhalt, [Richtlinie], wobei die Richtlinie optional ist.\nWenn keine Richtlinie angegeben ist, wird automatisch der aktuelle Regelgruppenname verwendet. Beispiele:",
|
"rulesFormat": "Regelformat: Regeltyp, Übereinstimmungsinhalt, [Richtlinie], wobei die Richtlinie optional ist.\nWenn keine Richtlinie angegeben ist, wird automatisch der aktuelle Regelgruppenname verwendet. Beispiele:",
|
||||||
"rulesLabel": "Regelinhalt",
|
"rulesLabel": "Regelinhalt",
|
||||||
"searchRule": "Regelname suchen",
|
"searchRule": "Regelname suchen",
|
||||||
"selectFile": "Datei auswählen",
|
|
||||||
"selectTags": "Knoten-Tags auswählen",
|
"selectTags": "Knoten-Tags auswählen",
|
||||||
"tags": "Knoten-Tags",
|
"tags": "Knoten-Tags",
|
||||||
"tagsLabel": "Knoten-Tags",
|
"tagsLabel": "Knoten-Tags",
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "Kaufbeschränkung/pro Einkauf",
|
"quota": "Kaufbeschränkung/pro Einkauf",
|
||||||
"replacement": "Preis pro Zurücksetzung",
|
"replacement": "Preis pro Zurücksetzung",
|
||||||
"sell": "Verkauf",
|
"sell": "Verkauf",
|
||||||
"show": "Startseite anzeigen",
|
"show": "Anzeigen",
|
||||||
"sold": "Abonnentenzahl",
|
"sold": "Abonnentenzahl",
|
||||||
"subscribe": "Abonnieren",
|
"subscribe": "Abonnieren",
|
||||||
"subscribeGroup": "Gruppe abonnieren",
|
"subscribeGroup": "Gruppe abonnieren",
|
||||||
|
|||||||
@@ -6,15 +6,18 @@
|
|||||||
"confirmSystemUpgrade": "Systemaktualisierung bestätigen",
|
"confirmSystemUpgrade": "Systemaktualisierung bestätigen",
|
||||||
"confirmUpgrade": "Upgrade bestätigen",
|
"confirmUpgrade": "Upgrade bestätigen",
|
||||||
"currentVersion": "Aktuelle Systemversion:",
|
"currentVersion": "Aktuelle Systemversion:",
|
||||||
|
"developmentVersion": "Entwicklungsversion",
|
||||||
"errors": "Fehler",
|
"errors": "Fehler",
|
||||||
"ip": "IP",
|
"ip": "IP-Adresse",
|
||||||
"lastUpdated": "Zuletzt aktualisiert:",
|
"lastUpdated": "Zuletzt aktualisiert:",
|
||||||
|
"newVersionAvailable": "Neue Version",
|
||||||
"none": "Keine",
|
"none": "Keine",
|
||||||
"query": "Abfrage",
|
"query": "Abfrage",
|
||||||
"rebootDescription": "Möchten Sie das System wirklich neu starten? Dieser Vorgang führt zu einer kurzen Unterbrechung des Dienstes.",
|
"rebootDescription": "Möchten Sie das System wirklich neu starten? Dieser Vorgang führt zu einer kurzen Unterbrechung des Dienstes.",
|
||||||
"rebooting": "System wird neu gestartet...",
|
"rebooting": "System wird neu gestartet...",
|
||||||
"refreshLogs": "Protokolle aktualisieren",
|
"refreshLogs": "Protokolle aktualisieren",
|
||||||
"request": "Anfrage",
|
"request": "Anfrage",
|
||||||
|
"serverVersion": "Server",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"systemLogs": "Systemprotokolle",
|
"systemLogs": "Systemprotokolle",
|
||||||
"systemReboot": "Systemneustart",
|
"systemReboot": "Systemneustart",
|
||||||
@@ -22,5 +25,8 @@
|
|||||||
"systemUpgrade": "Systemaktualisierung",
|
"systemUpgrade": "Systemaktualisierung",
|
||||||
"upgradeDescription": "Möchten Sie das System-Upgrade wirklich durchführen? Dieser Vorgang kann einige Minuten dauern, währenddessen das System möglicherweise nicht reagiert.",
|
"upgradeDescription": "Möchten Sie das System-Upgrade wirklich durchführen? Dieser Vorgang kann einige Minuten dauern, währenddessen das System möglicherweise nicht reagiert.",
|
||||||
"userAgent": "Benutzeragent",
|
"userAgent": "Benutzeragent",
|
||||||
"viewLogsAndManage": "Systemprotokolle anzeigen, Systemaktualisierungen durchführen und Neustartvorgänge ausführen"
|
"versionInfo": "Versionsinformationen",
|
||||||
|
"viewLogsAndManage": "Systemprotokolle anzeigen, Systemaktualisierungen durchführen und Neustartvorgänge ausführen",
|
||||||
|
"viewNewVersion": "Neue Version anzeigen",
|
||||||
|
"webVersion": "Web/Admin"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,10 +8,12 @@
|
|||||||
"createRule": "Add Rule",
|
"createRule": "Add Rule",
|
||||||
"createSuccess": "Rule created successfully",
|
"createSuccess": "Rule created successfully",
|
||||||
"createdAt": "Created At",
|
"createdAt": "Created At",
|
||||||
|
"default": "Default",
|
||||||
|
"defaultRule": "Default Rule",
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"deleteSuccess": "Rule deleted successfully",
|
"deleteSuccess": "Rule deleted successfully",
|
||||||
"deleteWarning": "Are you sure you want to delete this rule? This action cannot be undone.",
|
"deleteWarning": "Are you sure you want to delete this rule? This action cannot be undone.",
|
||||||
"description": "Rule Description",
|
"direct": "Direct",
|
||||||
"downloadTemplate": "Download Template",
|
"downloadTemplate": "Download Template",
|
||||||
"edit": "Edit",
|
"edit": "Edit",
|
||||||
"editRule": "Edit Rule",
|
"editRule": "Edit Rule",
|
||||||
@@ -22,7 +24,6 @@
|
|||||||
"import": "Import",
|
"import": "Import",
|
||||||
"importFailed": "Import failed",
|
"importFailed": "Import failed",
|
||||||
"importSuccess": "Import successful",
|
"importSuccess": "Import successful",
|
||||||
"importYaml": "Import YAML",
|
|
||||||
"importYamlDescription": "Import rules from YAML file, the system will automatically create rule groups based on policy group names",
|
"importYamlDescription": "Import rules from YAML file, the system will automatically create rule groups based on policy group names",
|
||||||
"importYamlRules": "Import YAML Rules",
|
"importYamlRules": "Import YAML Rules",
|
||||||
"importing": "Importing...",
|
"importing": "Importing...",
|
||||||
@@ -31,13 +32,14 @@
|
|||||||
"noValidRules": "No valid rules found",
|
"noValidRules": "No valid rules found",
|
||||||
"pleaseUploadFile": "Please upload a YAML file",
|
"pleaseUploadFile": "Please upload a YAML file",
|
||||||
"preview": "Preview",
|
"preview": "Preview",
|
||||||
"rules": "Rule Content",
|
"reject": "Reject",
|
||||||
"rulesFormat": "Rule format: rule type,match content,[policy], where policy is optional.\nIf policy is not specified, the current rule group name will be used automatically. Examples:",
|
"rulesFormat": "Rule format: rule type,match content,[policy], where policy is optional.\nIf policy is not specified, the current rule group name will be used automatically. Examples:",
|
||||||
"rulesLabel": "Rule Content",
|
"rulesLabel": "Rule Content",
|
||||||
"searchRule": "Search rule name",
|
"searchRule": "Search rule name",
|
||||||
"selectFile": "Select File",
|
|
||||||
"selectTags": "Select node tags",
|
"selectTags": "Select node tags",
|
||||||
|
"selectType": "Select rule type",
|
||||||
"tags": "Node Tags",
|
"tags": "Node Tags",
|
||||||
"tagsLabel": "Node Tags",
|
"tagsLabel": "Node Tags",
|
||||||
|
"type": "Rule Type",
|
||||||
"updateSuccess": "Rule updated successfully"
|
"updateSuccess": "Rule updated successfully"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,16 +63,20 @@
|
|||||||
"edit": "Edit",
|
"edit": "Edit",
|
||||||
"editNode": "Edit Node",
|
"editNode": "Edit Node",
|
||||||
"enable": "Enable",
|
"enable": "Enable",
|
||||||
|
"id": "ID",
|
||||||
"form": {
|
"form": {
|
||||||
"allowInsecure": "Allow Insecure",
|
"allowInsecure": "Allow Insecure",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"city": "City",
|
"city": "City",
|
||||||
"confirm": "Confirm",
|
"confirm": "Confirm",
|
||||||
|
"congestionController": "Congestion Controller",
|
||||||
"country": "Country",
|
"country": "Country",
|
||||||
|
"disableSni": "Disable SNI",
|
||||||
"edit": "Edit",
|
"edit": "Edit",
|
||||||
"editSecurity": "Edit Security Configuration",
|
"editSecurity": "Edit Security Configuration",
|
||||||
"enableTLS": "Enable TLS",
|
"enableTLS": "Enable TLS",
|
||||||
"encryptionMethod": "Encryption Method",
|
"encryptionMethod": "Encryption Method",
|
||||||
|
"fingerprint": "Fingerprint",
|
||||||
"flow": "Flow Control Algorithm",
|
"flow": "Flow Control Algorithm",
|
||||||
"groupId": "Node Group",
|
"groupId": "Node Group",
|
||||||
"hopInterval": "Hop Interval",
|
"hopInterval": "Hop Interval",
|
||||||
@@ -85,6 +89,7 @@
|
|||||||
"pleaseSelect": "Please Select",
|
"pleaseSelect": "Please Select",
|
||||||
"port": "Server Port",
|
"port": "Server Port",
|
||||||
"protocol": "Protocol",
|
"protocol": "Protocol",
|
||||||
|
"reduceRtt": "Reduce RTT",
|
||||||
"relayHost": "Relay Host",
|
"relayHost": "Relay Host",
|
||||||
"relayMode": "Relay Mode",
|
"relayMode": "Relay Mode",
|
||||||
"relayModeOptions": {
|
"relayModeOptions": {
|
||||||
@@ -128,6 +133,7 @@
|
|||||||
"transport": "Transport Protocol Configuration",
|
"transport": "Transport Protocol Configuration",
|
||||||
"transportConfig": "Transport Protocol Configuration",
|
"transportConfig": "Transport Protocol Configuration",
|
||||||
"transportHost": "Transport Server Address",
|
"transportHost": "Transport Server Address",
|
||||||
|
"udpRelayMode": "UDP Relay Mode",
|
||||||
"transportPath": "Transport Path",
|
"transportPath": "Transport Path",
|
||||||
"transportServerName": "Transport Server Name"
|
"transportServerName": "Transport Server Name"
|
||||||
},
|
},
|
||||||
@@ -136,6 +142,7 @@
|
|||||||
"name": "Name",
|
"name": "Name",
|
||||||
"node": "Node",
|
"node": "Node",
|
||||||
"nodeGroup": "Node Group",
|
"nodeGroup": "Node Group",
|
||||||
|
"noData": "--",
|
||||||
"normal": "Normal",
|
"normal": "Normal",
|
||||||
"onlineCount": "Online users",
|
"onlineCount": "Online users",
|
||||||
"onlineUsers": "Online Users",
|
"onlineUsers": "Online Users",
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "Purchase Limit/Time",
|
"quota": "Purchase Limit/Time",
|
||||||
"replacement": "Reset Price/Time",
|
"replacement": "Reset Price/Time",
|
||||||
"sell": "Sell",
|
"sell": "Sell",
|
||||||
"show": "Home display",
|
"show": "Display",
|
||||||
"sold": "Subscription Count",
|
"sold": "Subscription Count",
|
||||||
"subscribe": "Subscribe",
|
"subscribe": "Subscribe",
|
||||||
"subscribeGroup": "Subscription Group",
|
"subscribeGroup": "Subscription Group",
|
||||||
|
|||||||
@@ -6,15 +6,18 @@
|
|||||||
"confirmSystemUpgrade": "Confirm System Upgrade",
|
"confirmSystemUpgrade": "Confirm System Upgrade",
|
||||||
"confirmUpgrade": "Confirm Upgrade",
|
"confirmUpgrade": "Confirm Upgrade",
|
||||||
"currentVersion": "Current System Version:",
|
"currentVersion": "Current System Version:",
|
||||||
|
"developmentVersion": "Dev",
|
||||||
"errors": "Errors",
|
"errors": "Errors",
|
||||||
"ip": "IP",
|
"ip": "IP",
|
||||||
"lastUpdated": "Last Updated:",
|
"lastUpdated": "Last Updated:",
|
||||||
|
"newVersionAvailable": "New Version",
|
||||||
"none": "None",
|
"none": "None",
|
||||||
"query": "Query",
|
"query": "Query",
|
||||||
"rebootDescription": "Are you sure you want to reboot the system? This operation will cause a brief service interruption.",
|
"rebootDescription": "Are you sure you want to reboot the system? This operation will cause a brief service interruption.",
|
||||||
"rebooting": "Rebooting system...",
|
"rebooting": "Rebooting system...",
|
||||||
"refreshLogs": "Refresh Logs",
|
"refreshLogs": "Refresh Logs",
|
||||||
"request": "Request",
|
"request": "Request",
|
||||||
|
"serverVersion": "Server",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"systemLogs": "System Logs",
|
"systemLogs": "System Logs",
|
||||||
"systemReboot": "System Reboot",
|
"systemReboot": "System Reboot",
|
||||||
@@ -22,5 +25,8 @@
|
|||||||
"systemUpgrade": "System Upgrade",
|
"systemUpgrade": "System Upgrade",
|
||||||
"upgradeDescription": "Are you sure you want to perform a system upgrade? This operation may take a few minutes, during which the system may be unresponsive.",
|
"upgradeDescription": "Are you sure you want to perform a system upgrade? This operation may take a few minutes, during which the system may be unresponsive.",
|
||||||
"userAgent": "User Agent",
|
"userAgent": "User Agent",
|
||||||
"viewLogsAndManage": "View system logs, perform system upgrade and reboot operations"
|
"versionInfo": "Version Information",
|
||||||
|
"viewLogsAndManage": "View system logs, perform system upgrade and reboot operations",
|
||||||
|
"viewNewVersion": "View New Version",
|
||||||
|
"webVersion": "Web/Admin"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
"delete": "Eliminar",
|
"delete": "Eliminar",
|
||||||
"deleteSuccess": "Regla eliminada con éxito",
|
"deleteSuccess": "Regla eliminada con éxito",
|
||||||
"deleteWarning": "¿Está seguro de que desea eliminar esta regla? Esta acción no se puede deshacer.",
|
"deleteWarning": "¿Está seguro de que desea eliminar esta regla? Esta acción no se puede deshacer.",
|
||||||
"description": "Descripción de la Regla",
|
|
||||||
"downloadTemplate": "Descargar Plantilla",
|
"downloadTemplate": "Descargar Plantilla",
|
||||||
"edit": "Editar",
|
"edit": "Editar",
|
||||||
"editRule": "Editar Regla",
|
"editRule": "Editar Regla",
|
||||||
@@ -22,7 +21,6 @@
|
|||||||
"import": "Importar",
|
"import": "Importar",
|
||||||
"importFailed": "Importación fallida",
|
"importFailed": "Importación fallida",
|
||||||
"importSuccess": "Importación exitosa",
|
"importSuccess": "Importación exitosa",
|
||||||
"importYaml": "Importar YAML",
|
|
||||||
"importYamlDescription": "Importar reglas desde un archivo YAML, el sistema creará automáticamente grupos de reglas basados en los nombres de los grupos de políticas",
|
"importYamlDescription": "Importar reglas desde un archivo YAML, el sistema creará automáticamente grupos de reglas basados en los nombres de los grupos de políticas",
|
||||||
"importYamlRules": "Importar Reglas YAML",
|
"importYamlRules": "Importar Reglas YAML",
|
||||||
"importing": "Importando...",
|
"importing": "Importando...",
|
||||||
@@ -31,11 +29,9 @@
|
|||||||
"noValidRules": "No se encontraron reglas válidas",
|
"noValidRules": "No se encontraron reglas válidas",
|
||||||
"pleaseUploadFile": "Por favor, suba un archivo YAML",
|
"pleaseUploadFile": "Por favor, suba un archivo YAML",
|
||||||
"preview": "Vista Previa",
|
"preview": "Vista Previa",
|
||||||
"rules": "Contenido de la Regla",
|
|
||||||
"rulesFormat": "Formato de regla: tipo de regla, contenido de coincidencia, [política], donde la política es opcional.\nSi no se especifica la política, se utilizará automáticamente el nombre del grupo de reglas actual. Ejemplos:",
|
"rulesFormat": "Formato de regla: tipo de regla, contenido de coincidencia, [política], donde la política es opcional.\nSi no se especifica la política, se utilizará automáticamente el nombre del grupo de reglas actual. Ejemplos:",
|
||||||
"rulesLabel": "Contenido de la Regla",
|
"rulesLabel": "Contenido de la Regla",
|
||||||
"searchRule": "Buscar nombre de regla",
|
"searchRule": "Buscar nombre de regla",
|
||||||
"selectFile": "Seleccionar Archivo",
|
|
||||||
"selectTags": "Seleccionar etiquetas de nodo",
|
"selectTags": "Seleccionar etiquetas de nodo",
|
||||||
"tags": "Etiquetas de Nodo",
|
"tags": "Etiquetas de Nodo",
|
||||||
"tagsLabel": "Etiquetas de Nodo",
|
"tagsLabel": "Etiquetas de Nodo",
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "Límite de compra/vez",
|
"quota": "Límite de compra/vez",
|
||||||
"replacement": "Restablecer precio/vez",
|
"replacement": "Restablecer precio/vez",
|
||||||
"sell": "Venta",
|
"sell": "Venta",
|
||||||
"show": "Mostrar en la página de inicio",
|
"show": "Mostrar",
|
||||||
"sold": "Conteo de Suscripciones",
|
"sold": "Conteo de Suscripciones",
|
||||||
"subscribe": "Suscribirse",
|
"subscribe": "Suscribirse",
|
||||||
"subscribeGroup": "Suscribirse al grupo",
|
"subscribeGroup": "Suscribirse al grupo",
|
||||||
|
|||||||
@@ -6,15 +6,18 @@
|
|||||||
"confirmSystemUpgrade": "Confirmar actualización del sistema",
|
"confirmSystemUpgrade": "Confirmar actualización del sistema",
|
||||||
"confirmUpgrade": "Confirmar actualización",
|
"confirmUpgrade": "Confirmar actualización",
|
||||||
"currentVersion": "Versión actual del sistema:",
|
"currentVersion": "Versión actual del sistema:",
|
||||||
|
"developmentVersion": "Versión de desarrollo",
|
||||||
"errors": "Errores",
|
"errors": "Errores",
|
||||||
"ip": "IP",
|
"ip": "Dirección IP",
|
||||||
"lastUpdated": "Última actualización:",
|
"lastUpdated": "Última actualización:",
|
||||||
|
"newVersionAvailable": "Nueva versión",
|
||||||
"none": "Ninguno",
|
"none": "Ninguno",
|
||||||
"query": "Consulta",
|
"query": "Consulta",
|
||||||
"rebootDescription": "¿Está seguro de que desea reiniciar el sistema? Esta acción provocará una breve interrupción del servicio.",
|
"rebootDescription": "¿Está seguro de que desea reiniciar el sistema? Esta acción provocará una breve interrupción del servicio.",
|
||||||
"rebooting": "Reiniciando el sistema...",
|
"rebooting": "Reiniciando el sistema...",
|
||||||
"refreshLogs": "Actualizar registros",
|
"refreshLogs": "Actualizar registros",
|
||||||
"request": "Solicitud",
|
"request": "Solicitud",
|
||||||
|
"serverVersion": "Servidor",
|
||||||
"status": "Estado",
|
"status": "Estado",
|
||||||
"systemLogs": "Registros del sistema",
|
"systemLogs": "Registros del sistema",
|
||||||
"systemReboot": "Reinicio del sistema",
|
"systemReboot": "Reinicio del sistema",
|
||||||
@@ -22,5 +25,8 @@
|
|||||||
"systemUpgrade": "Actualización del sistema",
|
"systemUpgrade": "Actualización del sistema",
|
||||||
"upgradeDescription": "¿Está seguro de que desea realizar la actualización del sistema? Esta operación puede tardar unos minutos, durante los cuales el sistema podría no responder.",
|
"upgradeDescription": "¿Está seguro de que desea realizar la actualización del sistema? Esta operación puede tardar unos minutos, durante los cuales el sistema podría no responder.",
|
||||||
"userAgent": "Agente de Usuario",
|
"userAgent": "Agente de Usuario",
|
||||||
"viewLogsAndManage": "Ver los registros del sistema, realizar actualizaciones del sistema y reiniciar operaciones"
|
"versionInfo": "Información de versión",
|
||||||
|
"viewLogsAndManage": "Ver los registros del sistema, realizar actualizaciones del sistema y reiniciar operaciones",
|
||||||
|
"viewNewVersion": "Ver nueva versión",
|
||||||
|
"webVersion": "Web/Admin"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
"delete": "Eliminar",
|
"delete": "Eliminar",
|
||||||
"deleteSuccess": "Regla eliminada con éxito",
|
"deleteSuccess": "Regla eliminada con éxito",
|
||||||
"deleteWarning": "¿Está seguro de que desea eliminar esta regla? Esta acción no se puede deshacer.",
|
"deleteWarning": "¿Está seguro de que desea eliminar esta regla? Esta acción no se puede deshacer.",
|
||||||
"description": "Descripción de la Regla",
|
|
||||||
"downloadTemplate": "Descargar Plantilla",
|
"downloadTemplate": "Descargar Plantilla",
|
||||||
"edit": "Editar",
|
"edit": "Editar",
|
||||||
"editRule": "Editar Regla",
|
"editRule": "Editar Regla",
|
||||||
@@ -22,7 +21,6 @@
|
|||||||
"import": "Importar",
|
"import": "Importar",
|
||||||
"importFailed": "Importación fallida",
|
"importFailed": "Importación fallida",
|
||||||
"importSuccess": "Importación exitosa",
|
"importSuccess": "Importación exitosa",
|
||||||
"importYaml": "Importar YAML",
|
|
||||||
"importYamlDescription": "Importar reglas desde un archivo YAML, el sistema creará automáticamente grupos de reglas basados en los nombres de los grupos de políticas",
|
"importYamlDescription": "Importar reglas desde un archivo YAML, el sistema creará automáticamente grupos de reglas basados en los nombres de los grupos de políticas",
|
||||||
"importYamlRules": "Importar Reglas YAML",
|
"importYamlRules": "Importar Reglas YAML",
|
||||||
"importing": "Importando...",
|
"importing": "Importando...",
|
||||||
@@ -31,11 +29,9 @@
|
|||||||
"noValidRules": "No se encontraron reglas válidas",
|
"noValidRules": "No se encontraron reglas válidas",
|
||||||
"pleaseUploadFile": "Por favor, suba un archivo YAML",
|
"pleaseUploadFile": "Por favor, suba un archivo YAML",
|
||||||
"preview": "Vista Previa",
|
"preview": "Vista Previa",
|
||||||
"rules": "Contenido de la Regla",
|
|
||||||
"rulesFormat": "Formato de regla: tipo de regla, contenido de coincidencia, [política], donde la política es opcional.\nSi no se especifica la política, se utilizará automáticamente el nombre del grupo de reglas actual. Ejemplos:",
|
"rulesFormat": "Formato de regla: tipo de regla, contenido de coincidencia, [política], donde la política es opcional.\nSi no se especifica la política, se utilizará automáticamente el nombre del grupo de reglas actual. Ejemplos:",
|
||||||
"rulesLabel": "Contenido de la Regla",
|
"rulesLabel": "Contenido de la Regla",
|
||||||
"searchRule": "Buscar nombre de regla",
|
"searchRule": "Buscar nombre de regla",
|
||||||
"selectFile": "Seleccionar Archivo",
|
|
||||||
"selectTags": "Seleccionar etiquetas de nodo",
|
"selectTags": "Seleccionar etiquetas de nodo",
|
||||||
"tags": "Etiquetas de Nodo",
|
"tags": "Etiquetas de Nodo",
|
||||||
"tagsLabel": "Etiquetas de Nodo",
|
"tagsLabel": "Etiquetas de Nodo",
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "Límite de compra/vez",
|
"quota": "Límite de compra/vez",
|
||||||
"replacement": "Restablecer precio/vez",
|
"replacement": "Restablecer precio/vez",
|
||||||
"sell": "venta",
|
"sell": "venta",
|
||||||
"show": "Mostrar en la página de inicio",
|
"show": "Mostrar",
|
||||||
"sold": "Conteo de Suscripciones",
|
"sold": "Conteo de Suscripciones",
|
||||||
"subscribe": "Suscribirse",
|
"subscribe": "Suscribirse",
|
||||||
"subscribeGroup": "Suscribirse al grupo",
|
"subscribeGroup": "Suscribirse al grupo",
|
||||||
|
|||||||
@@ -6,15 +6,18 @@
|
|||||||
"confirmSystemUpgrade": "Confirmar actualización del sistema",
|
"confirmSystemUpgrade": "Confirmar actualización del sistema",
|
||||||
"confirmUpgrade": "Confirmar actualización",
|
"confirmUpgrade": "Confirmar actualización",
|
||||||
"currentVersion": "Versión actual del sistema:",
|
"currentVersion": "Versión actual del sistema:",
|
||||||
|
"developmentVersion": "Versión de desarrollo",
|
||||||
"errors": "Errores",
|
"errors": "Errores",
|
||||||
"ip": "IP",
|
"ip": "Dirección IP",
|
||||||
"lastUpdated": "Última actualización:",
|
"lastUpdated": "Última actualización:",
|
||||||
|
"newVersionAvailable": "Nueva versión",
|
||||||
"none": "Ninguno",
|
"none": "Ninguno",
|
||||||
"query": "Consulta",
|
"query": "Consulta",
|
||||||
"rebootDescription": "¿Está seguro de que desea reiniciar el sistema? Esta acción provocará una breve interrupción del servicio.",
|
"rebootDescription": "¿Está seguro de que desea reiniciar el sistema? Esta acción provocará una breve interrupción del servicio.",
|
||||||
"rebooting": "Reiniciando el sistema...",
|
"rebooting": "Reiniciando el sistema...",
|
||||||
"refreshLogs": "Actualizar registros",
|
"refreshLogs": "Actualizar registros",
|
||||||
"request": "Solicitud",
|
"request": "Solicitud",
|
||||||
|
"serverVersion": "Servidor",
|
||||||
"status": "Estado",
|
"status": "Estado",
|
||||||
"systemLogs": "Registros del sistema",
|
"systemLogs": "Registros del sistema",
|
||||||
"systemReboot": "Reinicio del sistema",
|
"systemReboot": "Reinicio del sistema",
|
||||||
@@ -22,5 +25,8 @@
|
|||||||
"systemUpgrade": "Actualización del sistema",
|
"systemUpgrade": "Actualización del sistema",
|
||||||
"upgradeDescription": "¿Está seguro de que desea realizar la actualización del sistema? Esta operación puede tardar unos minutos, durante los cuales el sistema podría no responder.",
|
"upgradeDescription": "¿Está seguro de que desea realizar la actualización del sistema? Esta operación puede tardar unos minutos, durante los cuales el sistema podría no responder.",
|
||||||
"userAgent": "Agente de Usuario",
|
"userAgent": "Agente de Usuario",
|
||||||
"viewLogsAndManage": "Ver los registros del sistema, realizar actualizaciones del sistema y reiniciar operaciones"
|
"versionInfo": "Información de versión",
|
||||||
|
"viewLogsAndManage": "Ver los registros del sistema, realizar actualizaciones del sistema y reiniciar operaciones",
|
||||||
|
"viewNewVersion": "Ver nueva versión",
|
||||||
|
"webVersion": "Web/Admin"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
"delete": "حذف",
|
"delete": "حذف",
|
||||||
"deleteSuccess": "قانون با موفقیت حذف شد",
|
"deleteSuccess": "قانون با موفقیت حذف شد",
|
||||||
"deleteWarning": "آیا مطمئن هستید که میخواهید این قانون را حذف کنید؟ این عمل قابل بازگشت نیست.",
|
"deleteWarning": "آیا مطمئن هستید که میخواهید این قانون را حذف کنید؟ این عمل قابل بازگشت نیست.",
|
||||||
"description": "توضیحات قانون",
|
|
||||||
"downloadTemplate": "دانلود الگو",
|
"downloadTemplate": "دانلود الگو",
|
||||||
"edit": "ویرایش",
|
"edit": "ویرایش",
|
||||||
"editRule": "ویرایش قانون",
|
"editRule": "ویرایش قانون",
|
||||||
@@ -22,7 +21,6 @@
|
|||||||
"import": "وارد کردن",
|
"import": "وارد کردن",
|
||||||
"importFailed": "وارد کردن ناموفق بود",
|
"importFailed": "وارد کردن ناموفق بود",
|
||||||
"importSuccess": "وارد کردن با موفقیت انجام شد",
|
"importSuccess": "وارد کردن با موفقیت انجام شد",
|
||||||
"importYaml": "وارد کردن YAML",
|
|
||||||
"importYamlDescription": "وارد کردن قوانین از فایل YAML، سیستم به طور خودکار گروههای قانونی را بر اساس نامهای گروه سیاست ایجاد خواهد کرد",
|
"importYamlDescription": "وارد کردن قوانین از فایل YAML، سیستم به طور خودکار گروههای قانونی را بر اساس نامهای گروه سیاست ایجاد خواهد کرد",
|
||||||
"importYamlRules": "وارد کردن قوانین YAML",
|
"importYamlRules": "وارد کردن قوانین YAML",
|
||||||
"importing": "در حال وارد کردن...",
|
"importing": "در حال وارد کردن...",
|
||||||
@@ -31,11 +29,9 @@
|
|||||||
"noValidRules": "هیچ قانونی یافت نشد",
|
"noValidRules": "هیچ قانونی یافت نشد",
|
||||||
"pleaseUploadFile": "لطفاً یک فایل YAML بارگذاری کنید",
|
"pleaseUploadFile": "لطفاً یک فایل YAML بارگذاری کنید",
|
||||||
"preview": "پیشنمایش",
|
"preview": "پیشنمایش",
|
||||||
"rules": "محتوای قانون",
|
|
||||||
"rulesFormat": "فرمت قانون: نوع قانون، محتوای تطابق، [سیاست]، که سیاست اختیاری است.\nاگر سیاست مشخص نشود، نام گروه قانونی فعلی به طور خودکار استفاده خواهد شد. مثالها:",
|
"rulesFormat": "فرمت قانون: نوع قانون، محتوای تطابق، [سیاست]، که سیاست اختیاری است.\nاگر سیاست مشخص نشود، نام گروه قانونی فعلی به طور خودکار استفاده خواهد شد. مثالها:",
|
||||||
"rulesLabel": "محتوای قانون",
|
"rulesLabel": "محتوای قانون",
|
||||||
"searchRule": "جستجوی نام قانون",
|
"searchRule": "جستجوی نام قانون",
|
||||||
"selectFile": "انتخاب فایل",
|
|
||||||
"selectTags": "انتخاب برچسبهای گره",
|
"selectTags": "انتخاب برچسبهای گره",
|
||||||
"tags": "برچسبهای گره",
|
"tags": "برچسبهای گره",
|
||||||
"tagsLabel": "برچسبهای گره",
|
"tagsLabel": "برچسبهای گره",
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "محدودیت خرید/زمان",
|
"quota": "محدودیت خرید/زمان",
|
||||||
"replacement": "تنظیم مجدد قیمت/زمان",
|
"replacement": "تنظیم مجدد قیمت/زمان",
|
||||||
"sell": "فروش",
|
"sell": "فروش",
|
||||||
"show": "نمایش خانه",
|
"show": "نمایش",
|
||||||
"sold": "تعداد اشتراک",
|
"sold": "تعداد اشتراک",
|
||||||
"subscribe": "اشتراک",
|
"subscribe": "اشتراک",
|
||||||
"subscribeGroup": "گروه اشتراک",
|
"subscribeGroup": "گروه اشتراک",
|
||||||
|
|||||||
@@ -6,15 +6,18 @@
|
|||||||
"confirmSystemUpgrade": "تأیید ارتقاء سیستم",
|
"confirmSystemUpgrade": "تأیید ارتقاء سیستم",
|
||||||
"confirmUpgrade": "تأیید ارتقاء",
|
"confirmUpgrade": "تأیید ارتقاء",
|
||||||
"currentVersion": "نسخه فعلی سیستم:",
|
"currentVersion": "نسخه فعلی سیستم:",
|
||||||
|
"developmentVersion": "نسخه توسعه",
|
||||||
"errors": "خطاها",
|
"errors": "خطاها",
|
||||||
"ip": "آیپی",
|
"ip": "آدرس آیپی",
|
||||||
"lastUpdated": "آخرین بهروزرسانی:",
|
"lastUpdated": "آخرین بهروزرسانی:",
|
||||||
|
"newVersionAvailable": "نسخه جدید",
|
||||||
"none": "هیچ",
|
"none": "هیچ",
|
||||||
"query": "پرس و جو",
|
"query": "پرس و جو",
|
||||||
"rebootDescription": "آیا مطمئن هستید که میخواهید سیستم را راهاندازی مجدد کنید؟ این عملیات باعث وقفه کوتاهی در خدمات خواهد شد.",
|
"rebootDescription": "آیا مطمئن هستید که میخواهید سیستم را راهاندازی مجدد کنید؟ این عملیات باعث وقفه کوتاهی در خدمات خواهد شد.",
|
||||||
"rebooting": "در حال راهاندازی مجدد سیستم...",
|
"rebooting": "در حال راهاندازی مجدد سیستم...",
|
||||||
"refreshLogs": "تازهسازی گزارشها",
|
"refreshLogs": "تازهسازی گزارشها",
|
||||||
"request": "درخواست",
|
"request": "درخواست",
|
||||||
|
"serverVersion": "سرور",
|
||||||
"status": "وضعیت",
|
"status": "وضعیت",
|
||||||
"systemLogs": "گزارشهای سیستم",
|
"systemLogs": "گزارشهای سیستم",
|
||||||
"systemReboot": "راهاندازی مجدد سیستم",
|
"systemReboot": "راهاندازی مجدد سیستم",
|
||||||
@@ -22,5 +25,8 @@
|
|||||||
"systemUpgrade": "ارتقاء سیستم",
|
"systemUpgrade": "ارتقاء سیستم",
|
||||||
"upgradeDescription": "آیا مطمئن هستید که میخواهید ارتقاء سیستم را انجام دهید؟ این عملیات ممکن است چند دقیقه طول بکشد و در این مدت سیستم ممکن است پاسخگو نباشد.",
|
"upgradeDescription": "آیا مطمئن هستید که میخواهید ارتقاء سیستم را انجام دهید؟ این عملیات ممکن است چند دقیقه طول بکشد و در این مدت سیستم ممکن است پاسخگو نباشد.",
|
||||||
"userAgent": "عامل کاربر",
|
"userAgent": "عامل کاربر",
|
||||||
"viewLogsAndManage": "مشاهده گزارشهای سیستم، انجام ارتقاء سیستم و عملیات راهاندازی مجدد"
|
"versionInfo": "اطلاعات نسخه",
|
||||||
|
"viewLogsAndManage": "مشاهده گزارشهای سیستم، انجام ارتقاء سیستم و عملیات راهاندازی مجدد",
|
||||||
|
"viewNewVersion": "مشاهده نسخه جدید",
|
||||||
|
"webVersion": "وب/مدیریت"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
"delete": "Poista",
|
"delete": "Poista",
|
||||||
"deleteSuccess": "Sääntö poistettiin onnistuneesti",
|
"deleteSuccess": "Sääntö poistettiin onnistuneesti",
|
||||||
"deleteWarning": "Oletko varma, että haluat poistaa tämän säännön? Tätä toimintoa ei voi peruuttaa.",
|
"deleteWarning": "Oletko varma, että haluat poistaa tämän säännön? Tätä toimintoa ei voi peruuttaa.",
|
||||||
"description": "Säännön kuvaus",
|
|
||||||
"downloadTemplate": "Lataa malli",
|
"downloadTemplate": "Lataa malli",
|
||||||
"edit": "Muokkaa",
|
"edit": "Muokkaa",
|
||||||
"editRule": "Muokkaa sääntöä",
|
"editRule": "Muokkaa sääntöä",
|
||||||
@@ -22,7 +21,6 @@
|
|||||||
"import": "Tuoda",
|
"import": "Tuoda",
|
||||||
"importFailed": "Tuonti epäonnistui",
|
"importFailed": "Tuonti epäonnistui",
|
||||||
"importSuccess": "Tuonti onnistui",
|
"importSuccess": "Tuonti onnistui",
|
||||||
"importYaml": "Tuo YAML",
|
|
||||||
"importYamlDescription": "Tuo sääntöjä YAML-tiedostosta, järjestelmä luo automaattisesti sääntöryhmiä politiikkaryhmän nimien perusteella",
|
"importYamlDescription": "Tuo sääntöjä YAML-tiedostosta, järjestelmä luo automaattisesti sääntöryhmiä politiikkaryhmän nimien perusteella",
|
||||||
"importYamlRules": "Tuo YAML-säännöt",
|
"importYamlRules": "Tuo YAML-säännöt",
|
||||||
"importing": "Tuodaan...",
|
"importing": "Tuodaan...",
|
||||||
@@ -31,11 +29,9 @@
|
|||||||
"noValidRules": "Ei voimassa olevia sääntöjä löytynyt",
|
"noValidRules": "Ei voimassa olevia sääntöjä löytynyt",
|
||||||
"pleaseUploadFile": "Lataa YAML-tiedosto",
|
"pleaseUploadFile": "Lataa YAML-tiedosto",
|
||||||
"preview": "Esikatselu",
|
"preview": "Esikatselu",
|
||||||
"rules": "Säännön sisältö",
|
|
||||||
"rulesFormat": "Sääntömuoto: sääntötyyppi, vastaavuus, [politiikka], jossa politiikka on valinnainen.\nJos politiikkaa ei ole määritelty, nykyistä sääntöryhmän nimeä käytetään automaattisesti. Esimerkkejä:",
|
"rulesFormat": "Sääntömuoto: sääntötyyppi, vastaavuus, [politiikka], jossa politiikka on valinnainen.\nJos politiikkaa ei ole määritelty, nykyistä sääntöryhmän nimeä käytetään automaattisesti. Esimerkkejä:",
|
||||||
"rulesLabel": "Säännön sisältö",
|
"rulesLabel": "Säännön sisältö",
|
||||||
"searchRule": "Etsi säännön nimeä",
|
"searchRule": "Etsi säännön nimeä",
|
||||||
"selectFile": "Valitse tiedosto",
|
|
||||||
"selectTags": "Valitse solmun tunnisteet",
|
"selectTags": "Valitse solmun tunnisteet",
|
||||||
"tags": "Solmun tunnisteet",
|
"tags": "Solmun tunnisteet",
|
||||||
"tagsLabel": "Solmun tunnisteet",
|
"tagsLabel": "Solmun tunnisteet",
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "Ostorajoitus/kerta",
|
"quota": "Ostorajoitus/kerta",
|
||||||
"replacement": "Nollaa hinta/kerta",
|
"replacement": "Nollaa hinta/kerta",
|
||||||
"sell": "myydä",
|
"sell": "myydä",
|
||||||
"show": "Etusivun näyttö",
|
"show": "Näytä",
|
||||||
"sold": "Tilausmäärä",
|
"sold": "Tilausmäärä",
|
||||||
"subscribe": "Tilaa",
|
"subscribe": "Tilaa",
|
||||||
"subscribeGroup": "Tilaa ryhmä",
|
"subscribeGroup": "Tilaa ryhmä",
|
||||||
|
|||||||
@@ -6,15 +6,18 @@
|
|||||||
"confirmSystemUpgrade": "Vahvista järjestelmän päivitys",
|
"confirmSystemUpgrade": "Vahvista järjestelmän päivitys",
|
||||||
"confirmUpgrade": "Vahvista päivitys",
|
"confirmUpgrade": "Vahvista päivitys",
|
||||||
"currentVersion": "Nykyinen järjestelmäversio:",
|
"currentVersion": "Nykyinen järjestelmäversio:",
|
||||||
|
"developmentVersion": "Kehitysversio",
|
||||||
"errors": "Virheet",
|
"errors": "Virheet",
|
||||||
"ip": "IP",
|
"ip": "IP-osoite",
|
||||||
"lastUpdated": "Viimeksi päivitetty:",
|
"lastUpdated": "Viimeksi päivitetty:",
|
||||||
|
"newVersionAvailable": "Uusi versio",
|
||||||
"none": "Ei mitään",
|
"none": "Ei mitään",
|
||||||
"query": "Kysely",
|
"query": "Kysely",
|
||||||
"rebootDescription": "Oletko varma, että haluat käynnistää järjestelmän uudelleen? Tämä toimenpide aiheuttaa lyhyen palvelukatkon.",
|
"rebootDescription": "Oletko varma, että haluat käynnistää järjestelmän uudelleen? Tämä toimenpide aiheuttaa lyhyen palvelukatkon.",
|
||||||
"rebooting": "Järjestelmä käynnistyy uudelleen...",
|
"rebooting": "Järjestelmä käynnistyy uudelleen...",
|
||||||
"refreshLogs": "Päivitä lokit",
|
"refreshLogs": "Päivitä lokit",
|
||||||
"request": "Pyyntö",
|
"request": "Pyyntö",
|
||||||
|
"serverVersion": "Palvelin",
|
||||||
"status": "Tila",
|
"status": "Tila",
|
||||||
"systemLogs": "Järjestelmän lokit",
|
"systemLogs": "Järjestelmän lokit",
|
||||||
"systemReboot": "Järjestelmän uudelleenkäynnistys",
|
"systemReboot": "Järjestelmän uudelleenkäynnistys",
|
||||||
@@ -22,5 +25,8 @@
|
|||||||
"systemUpgrade": "Järjestelmän päivitys",
|
"systemUpgrade": "Järjestelmän päivitys",
|
||||||
"upgradeDescription": "Haluatko varmasti suorittaa järjestelmäpäivityksen? Tämä toimenpide voi kestää muutaman minuutin, ja sen aikana järjestelmä ei välttämättä vastaa.",
|
"upgradeDescription": "Haluatko varmasti suorittaa järjestelmäpäivityksen? Tämä toimenpide voi kestää muutaman minuutin, ja sen aikana järjestelmä ei välttämättä vastaa.",
|
||||||
"userAgent": "Käyttäjäagentti",
|
"userAgent": "Käyttäjäagentti",
|
||||||
"viewLogsAndManage": "Tarkastele järjestelmän lokitietoja, suorita järjestelmäpäivityksiä ja uudelleenkäynnistyksiä"
|
"versionInfo": "Versiotiedot",
|
||||||
|
"viewLogsAndManage": "Tarkastele järjestelmän lokitietoja, suorita järjestelmäpäivityksiä ja uudelleenkäynnistyksiä",
|
||||||
|
"viewNewVersion": "Näytä uusi versio",
|
||||||
|
"webVersion": "Web/Admin"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
"delete": "Supprimer",
|
"delete": "Supprimer",
|
||||||
"deleteSuccess": "Règle supprimée avec succès",
|
"deleteSuccess": "Règle supprimée avec succès",
|
||||||
"deleteWarning": "Êtes-vous sûr de vouloir supprimer cette règle ? Cette action ne peut pas être annulée.",
|
"deleteWarning": "Êtes-vous sûr de vouloir supprimer cette règle ? Cette action ne peut pas être annulée.",
|
||||||
"description": "Description de la règle",
|
|
||||||
"downloadTemplate": "Télécharger le modèle",
|
"downloadTemplate": "Télécharger le modèle",
|
||||||
"edit": "Modifier",
|
"edit": "Modifier",
|
||||||
"editRule": "Modifier la règle",
|
"editRule": "Modifier la règle",
|
||||||
@@ -22,7 +21,6 @@
|
|||||||
"import": "Importer",
|
"import": "Importer",
|
||||||
"importFailed": "Échec de l'importation",
|
"importFailed": "Échec de l'importation",
|
||||||
"importSuccess": "Importation réussie",
|
"importSuccess": "Importation réussie",
|
||||||
"importYaml": "Importer YAML",
|
|
||||||
"importYamlDescription": "Importer des règles à partir d'un fichier YAML, le système créera automatiquement des groupes de règles en fonction des noms de groupes de politiques",
|
"importYamlDescription": "Importer des règles à partir d'un fichier YAML, le système créera automatiquement des groupes de règles en fonction des noms de groupes de politiques",
|
||||||
"importYamlRules": "Importer des règles YAML",
|
"importYamlRules": "Importer des règles YAML",
|
||||||
"importing": "Importation en cours...",
|
"importing": "Importation en cours...",
|
||||||
@@ -31,11 +29,9 @@
|
|||||||
"noValidRules": "Aucune règle valide trouvée",
|
"noValidRules": "Aucune règle valide trouvée",
|
||||||
"pleaseUploadFile": "Veuillez télécharger un fichier YAML",
|
"pleaseUploadFile": "Veuillez télécharger un fichier YAML",
|
||||||
"preview": "Aperçu",
|
"preview": "Aperçu",
|
||||||
"rules": "Contenu de la règle",
|
|
||||||
"rulesFormat": "Format de la règle : type de règle, contenu de correspondance, [politique], où la politique est optionnelle.\nSi la politique n'est pas spécifiée, le nom du groupe de règles actuel sera utilisé automatiquement. Exemples :",
|
"rulesFormat": "Format de la règle : type de règle, contenu de correspondance, [politique], où la politique est optionnelle.\nSi la politique n'est pas spécifiée, le nom du groupe de règles actuel sera utilisé automatiquement. Exemples :",
|
||||||
"rulesLabel": "Contenu de la règle",
|
"rulesLabel": "Contenu de la règle",
|
||||||
"searchRule": "Rechercher le nom de la règle",
|
"searchRule": "Rechercher le nom de la règle",
|
||||||
"selectFile": "Sélectionner un fichier",
|
|
||||||
"selectTags": "Sélectionner des balises de nœud",
|
"selectTags": "Sélectionner des balises de nœud",
|
||||||
"tags": "Balises de nœud",
|
"tags": "Balises de nœud",
|
||||||
"tagsLabel": "Balises de nœud",
|
"tagsLabel": "Balises de nœud",
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "Limite d'achat/par fois",
|
"quota": "Limite d'achat/par fois",
|
||||||
"replacement": "Réinitialiser le prix/par fois",
|
"replacement": "Réinitialiser le prix/par fois",
|
||||||
"sell": "Vente",
|
"sell": "Vente",
|
||||||
"show": "Afficher sur la page d'accueil",
|
"show": "Afficher",
|
||||||
"sold": "Nombre d'abonnements",
|
"sold": "Nombre d'abonnements",
|
||||||
"subscribe": "S'abonner",
|
"subscribe": "S'abonner",
|
||||||
"subscribeGroup": "S'abonner au groupe",
|
"subscribeGroup": "S'abonner au groupe",
|
||||||
|
|||||||
@@ -6,15 +6,18 @@
|
|||||||
"confirmSystemUpgrade": "Confirmer la mise à niveau du système",
|
"confirmSystemUpgrade": "Confirmer la mise à niveau du système",
|
||||||
"confirmUpgrade": "Confirmer la mise à niveau",
|
"confirmUpgrade": "Confirmer la mise à niveau",
|
||||||
"currentVersion": "Version actuelle du système :",
|
"currentVersion": "Version actuelle du système :",
|
||||||
|
"developmentVersion": "Version de développement",
|
||||||
"errors": "Erreurs",
|
"errors": "Erreurs",
|
||||||
"ip": "IP",
|
"ip": "Adresse IP",
|
||||||
"lastUpdated": "Dernière mise à jour :",
|
"lastUpdated": "Dernière mise à jour :",
|
||||||
|
"newVersionAvailable": "Nouvelle version",
|
||||||
"none": "Aucun",
|
"none": "Aucun",
|
||||||
"query": "Requête",
|
"query": "Requête",
|
||||||
"rebootDescription": "Êtes-vous sûr de vouloir redémarrer le système ? Cette opération entraînera une interruption temporaire du service.",
|
"rebootDescription": "Êtes-vous sûr de vouloir redémarrer le système ? Cette opération entraînera une interruption temporaire du service.",
|
||||||
"rebooting": "Redémarrage du système...",
|
"rebooting": "Redémarrage du système...",
|
||||||
"refreshLogs": "Rafraîchir les journaux",
|
"refreshLogs": "Rafraîchir les journaux",
|
||||||
"request": "Demande",
|
"request": "Demande",
|
||||||
|
"serverVersion": "Serveur",
|
||||||
"status": "Statut",
|
"status": "Statut",
|
||||||
"systemLogs": "Journaux système",
|
"systemLogs": "Journaux système",
|
||||||
"systemReboot": "Redémarrage du système",
|
"systemReboot": "Redémarrage du système",
|
||||||
@@ -22,5 +25,8 @@
|
|||||||
"systemUpgrade": "Mise à niveau du système",
|
"systemUpgrade": "Mise à niveau du système",
|
||||||
"upgradeDescription": "Êtes-vous sûr de vouloir effectuer la mise à niveau du système ? Cette opération peut prendre quelques minutes, pendant lesquelles le système peut ne pas répondre.",
|
"upgradeDescription": "Êtes-vous sûr de vouloir effectuer la mise à niveau du système ? Cette opération peut prendre quelques minutes, pendant lesquelles le système peut ne pas répondre.",
|
||||||
"userAgent": "Agent utilisateur",
|
"userAgent": "Agent utilisateur",
|
||||||
"viewLogsAndManage": "Afficher les journaux système, effectuer des mises à niveau et redémarrer le système"
|
"versionInfo": "Informations de version",
|
||||||
|
"viewLogsAndManage": "Afficher les journaux système, effectuer des mises à niveau et redémarrer le système",
|
||||||
|
"viewNewVersion": "Voir la nouvelle version",
|
||||||
|
"webVersion": "Web/Admin"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
"delete": "हटाएं",
|
"delete": "हटाएं",
|
||||||
"deleteSuccess": "नियम सफलतापूर्वक हटाया गया",
|
"deleteSuccess": "नियम सफलतापूर्वक हटाया गया",
|
||||||
"deleteWarning": "क्या आप वाकई इस नियम को हटाना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती।",
|
"deleteWarning": "क्या आप वाकई इस नियम को हटाना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती।",
|
||||||
"description": "नियम विवरण",
|
|
||||||
"downloadTemplate": "टेम्पलेट डाउनलोड करें",
|
"downloadTemplate": "टेम्पलेट डाउनलोड करें",
|
||||||
"edit": "संपादित करें",
|
"edit": "संपादित करें",
|
||||||
"editRule": "नियम संपादित करें",
|
"editRule": "नियम संपादित करें",
|
||||||
@@ -22,7 +21,6 @@
|
|||||||
"import": "आयात करें",
|
"import": "आयात करें",
|
||||||
"importFailed": "आयात विफल",
|
"importFailed": "आयात विफल",
|
||||||
"importSuccess": "आयात सफल",
|
"importSuccess": "आयात सफल",
|
||||||
"importYaml": "YAML आयात करें",
|
|
||||||
"importYamlDescription": "YAML फ़ाइल से नियम आयात करें, प्रणाली स्वचालित रूप से नीति समूह नामों के आधार पर नियम समूह बनाएगी",
|
"importYamlDescription": "YAML फ़ाइल से नियम आयात करें, प्रणाली स्वचालित रूप से नीति समूह नामों के आधार पर नियम समूह बनाएगी",
|
||||||
"importYamlRules": "YAML नियम आयात करें",
|
"importYamlRules": "YAML नियम आयात करें",
|
||||||
"importing": "आयात कर रहा है...",
|
"importing": "आयात कर रहा है...",
|
||||||
@@ -31,11 +29,9 @@
|
|||||||
"noValidRules": "कोई मान्य नियम नहीं मिला",
|
"noValidRules": "कोई मान्य नियम नहीं मिला",
|
||||||
"pleaseUploadFile": "कृपया एक YAML फ़ाइल अपलोड करें",
|
"pleaseUploadFile": "कृपया एक YAML फ़ाइल अपलोड करें",
|
||||||
"preview": "पूर्वावलोकन",
|
"preview": "पूर्वावलोकन",
|
||||||
"rules": "नियम सामग्री",
|
|
||||||
"rulesFormat": "नियम प्रारूप: नियम प्रकार, मिलान सामग्री, [नीति], जहाँ नीति वैकल्पिक है।\nयदि नीति निर्दिष्ट नहीं की गई है, तो वर्तमान नियम समूह का नाम स्वचालित रूप से उपयोग किया जाएगा। उदाहरण:",
|
"rulesFormat": "नियम प्रारूप: नियम प्रकार, मिलान सामग्री, [नीति], जहाँ नीति वैकल्पिक है।\nयदि नीति निर्दिष्ट नहीं की गई है, तो वर्तमान नियम समूह का नाम स्वचालित रूप से उपयोग किया जाएगा। उदाहरण:",
|
||||||
"rulesLabel": "नियम सामग्री",
|
"rulesLabel": "नियम सामग्री",
|
||||||
"searchRule": "नियम नाम खोजें",
|
"searchRule": "नियम नाम खोजें",
|
||||||
"selectFile": "फ़ाइल चुनें",
|
|
||||||
"selectTags": "नोड टैग चुनें",
|
"selectTags": "नोड टैग चुनें",
|
||||||
"tags": "नोड टैग",
|
"tags": "नोड टैग",
|
||||||
"tagsLabel": "नोड टैग",
|
"tagsLabel": "नोड टैग",
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "प्रति खरीद सीमा",
|
"quota": "प्रति खरीद सीमा",
|
||||||
"replacement": "मूल्य/प्रति बार रीसेट करें",
|
"replacement": "मूल्य/प्रति बार रीसेट करें",
|
||||||
"sell": "बिक्री",
|
"sell": "बिक्री",
|
||||||
"show": "मुखपृष्ठ पर दिखाएं",
|
"show": "दिखाएं",
|
||||||
"sold": "सदस्यता गणना",
|
"sold": "सदस्यता गणना",
|
||||||
"subscribe": "सदस्यता लें",
|
"subscribe": "सदस्यता लें",
|
||||||
"subscribeGroup": "सदस्यता समूह",
|
"subscribeGroup": "सदस्यता समूह",
|
||||||
|
|||||||
@@ -6,15 +6,18 @@
|
|||||||
"confirmSystemUpgrade": "सिस्टम उन्नयन की पुष्टि करें",
|
"confirmSystemUpgrade": "सिस्टम उन्नयन की पुष्टि करें",
|
||||||
"confirmUpgrade": "उन्नयन की पुष्टि करें",
|
"confirmUpgrade": "उन्नयन की पुष्टि करें",
|
||||||
"currentVersion": "वर्तमान सिस्टम संस्करण:",
|
"currentVersion": "वर्तमान सिस्टम संस्करण:",
|
||||||
|
"developmentVersion": "विकास संस्करण",
|
||||||
"errors": "त्रुटियाँ",
|
"errors": "त्रुटियाँ",
|
||||||
"ip": "आईपी",
|
"ip": "आईपी पता",
|
||||||
"lastUpdated": "अंतिम अपडेट:",
|
"lastUpdated": "अंतिम अपडेट:",
|
||||||
|
"newVersionAvailable": "नया संस्करण",
|
||||||
"none": "कोई नहीं",
|
"none": "कोई नहीं",
|
||||||
"query": "प्रश्न",
|
"query": "प्रश्न",
|
||||||
"rebootDescription": "क्या आप वाकई सिस्टम को पुनः आरंभ करना चाहते हैं? इस क्रिया से थोड़े समय के लिए सेवा में बाधा आ सकती है।",
|
"rebootDescription": "क्या आप वाकई सिस्टम को पुनः आरंभ करना चाहते हैं? इस क्रिया से थोड़े समय के लिए सेवा में बाधा आ सकती है।",
|
||||||
"rebooting": "सिस्टम को पुनः आरंभ किया जा रहा है...",
|
"rebooting": "सिस्टम को पुनः आरंभ किया जा रहा है...",
|
||||||
"refreshLogs": "लॉग्स को ताज़ा करें",
|
"refreshLogs": "लॉग्स को ताज़ा करें",
|
||||||
"request": "अनुरोध",
|
"request": "अनुरोध",
|
||||||
|
"serverVersion": "सर्वर",
|
||||||
"status": "स्थिति",
|
"status": "स्थिति",
|
||||||
"systemLogs": "सिस्टम लॉग्स",
|
"systemLogs": "सिस्टम लॉग्स",
|
||||||
"systemReboot": "सिस्टम पुनरारंभ",
|
"systemReboot": "सिस्टम पुनरारंभ",
|
||||||
@@ -22,5 +25,8 @@
|
|||||||
"systemUpgrade": "सिस्टम उन्नयन",
|
"systemUpgrade": "सिस्टम उन्नयन",
|
||||||
"upgradeDescription": "क्या आप वाकई सिस्टम अपग्रेड करना चाहते हैं? इस प्रक्रिया में कुछ मिनट लग सकते हैं और इस दौरान सिस्टम प्रतिक्रिया नहीं दे सकता है।",
|
"upgradeDescription": "क्या आप वाकई सिस्टम अपग्रेड करना चाहते हैं? इस प्रक्रिया में कुछ मिनट लग सकते हैं और इस दौरान सिस्टम प्रतिक्रिया नहीं दे सकता है।",
|
||||||
"userAgent": "उपयोगकर्ता एजेंट",
|
"userAgent": "उपयोगकर्ता एजेंट",
|
||||||
"viewLogsAndManage": "सिस्टम लॉग देखें, सिस्टम अपग्रेड और पुनरारंभ संचालन करें"
|
"versionInfo": "संस्करण जानकारी",
|
||||||
|
"viewLogsAndManage": "सिस्टम लॉग देखें, सिस्टम अपग्रेड और पुनरारंभ संचालन करें",
|
||||||
|
"viewNewVersion": "नया संस्करण देखें",
|
||||||
|
"webVersion": "वेब/एडमिन"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
"delete": "Törlés",
|
"delete": "Törlés",
|
||||||
"deleteSuccess": "A szabály sikeresen törölve",
|
"deleteSuccess": "A szabály sikeresen törölve",
|
||||||
"deleteWarning": "Biztosan törölni szeretné ezt a szabályt? Ez a művelet nem vonható vissza.",
|
"deleteWarning": "Biztosan törölni szeretné ezt a szabályt? Ez a művelet nem vonható vissza.",
|
||||||
"description": "Szabály leírása",
|
|
||||||
"downloadTemplate": "Sablon letöltése",
|
"downloadTemplate": "Sablon letöltése",
|
||||||
"edit": "Szerkesztés",
|
"edit": "Szerkesztés",
|
||||||
"editRule": "Szabály szerkesztése",
|
"editRule": "Szabály szerkesztése",
|
||||||
@@ -22,7 +21,6 @@
|
|||||||
"import": "Importálás",
|
"import": "Importálás",
|
||||||
"importFailed": "Importálás sikertelen",
|
"importFailed": "Importálás sikertelen",
|
||||||
"importSuccess": "Importálás sikeres",
|
"importSuccess": "Importálás sikeres",
|
||||||
"importYaml": "YAML importálása",
|
|
||||||
"importYamlDescription": "Szabályok importálása YAML fájlból, a rendszer automatikusan létrehozza a szabálycsoportokat a politikai csoportnevek alapján",
|
"importYamlDescription": "Szabályok importálása YAML fájlból, a rendszer automatikusan létrehozza a szabálycsoportokat a politikai csoportnevek alapján",
|
||||||
"importYamlRules": "YAML szabályok importálása",
|
"importYamlRules": "YAML szabályok importálása",
|
||||||
"importing": "Importálás...",
|
"importing": "Importálás...",
|
||||||
@@ -31,11 +29,9 @@
|
|||||||
"noValidRules": "Nincsenek érvényes szabályok",
|
"noValidRules": "Nincsenek érvényes szabályok",
|
||||||
"pleaseUploadFile": "Kérjük, töltsön fel egy YAML fájlt",
|
"pleaseUploadFile": "Kérjük, töltsön fel egy YAML fájlt",
|
||||||
"preview": "Előnézet",
|
"preview": "Előnézet",
|
||||||
"rules": "Szabály tartalom",
|
|
||||||
"rulesFormat": "Szabály formátum: szabály típusa, egyezési tartalom, [politika], ahol a politika opcionális.\nHa a politika nincs megadva, az aktuális szabálycsoport neve automatikusan felhasználásra kerül. Példák:",
|
"rulesFormat": "Szabály formátum: szabály típusa, egyezési tartalom, [politika], ahol a politika opcionális.\nHa a politika nincs megadva, az aktuális szabálycsoport neve automatikusan felhasználásra kerül. Példák:",
|
||||||
"rulesLabel": "Szabály tartalom",
|
"rulesLabel": "Szabály tartalom",
|
||||||
"searchRule": "Szabály név keresése",
|
"searchRule": "Szabály név keresése",
|
||||||
"selectFile": "Fájl kiválasztása",
|
|
||||||
"selectTags": "Válassza ki a csomópont címkéket",
|
"selectTags": "Válassza ki a csomópont címkéket",
|
||||||
"tags": "Csomópont címkék",
|
"tags": "Csomópont címkék",
|
||||||
"tagsLabel": "Csomópont címkék",
|
"tagsLabel": "Csomópont címkék",
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "Vásárlási korlát/alkalom",
|
"quota": "Vásárlási korlát/alkalom",
|
||||||
"replacement": "Ár visszaállítása/alkalom",
|
"replacement": "Ár visszaállítása/alkalom",
|
||||||
"sell": "eladás",
|
"sell": "eladás",
|
||||||
"show": "Kezdőlap megjelenítése",
|
"show": "Megjelenítés",
|
||||||
"sold": "Előfizetések száma",
|
"sold": "Előfizetések száma",
|
||||||
"subscribe": "Feliratkozás",
|
"subscribe": "Feliratkozás",
|
||||||
"subscribeGroup": "Feliratkozási csoport",
|
"subscribeGroup": "Feliratkozási csoport",
|
||||||
|
|||||||
@@ -6,15 +6,18 @@
|
|||||||
"confirmSystemUpgrade": "Rendszerfrissítés megerősítése",
|
"confirmSystemUpgrade": "Rendszerfrissítés megerősítése",
|
||||||
"confirmUpgrade": "Megerősítés frissítése",
|
"confirmUpgrade": "Megerősítés frissítése",
|
||||||
"currentVersion": "Jelenlegi rendszerverzió:",
|
"currentVersion": "Jelenlegi rendszerverzió:",
|
||||||
|
"developmentVersion": "Fejlesztői verzió",
|
||||||
"errors": "Hibák",
|
"errors": "Hibák",
|
||||||
"ip": "IP",
|
"ip": "IP-cím",
|
||||||
"lastUpdated": "Utoljára frissítve:",
|
"lastUpdated": "Utoljára frissítve:",
|
||||||
|
"newVersionAvailable": "Új verzió",
|
||||||
"none": "Nincs",
|
"none": "Nincs",
|
||||||
"query": "Lekérdezés",
|
"query": "Lekérdezés",
|
||||||
"rebootDescription": "Biztosan újra akarja indítani a rendszert? Ez a művelet rövid idejű szolgáltatáskimaradást okoz.",
|
"rebootDescription": "Biztosan újra akarja indítani a rendszert? Ez a művelet rövid idejű szolgáltatáskimaradást okoz.",
|
||||||
"rebooting": "A rendszer újraindítása folyamatban...",
|
"rebooting": "A rendszer újraindítása folyamatban...",
|
||||||
"refreshLogs": "Naplók frissítése",
|
"refreshLogs": "Naplók frissítése",
|
||||||
"request": "Kérés",
|
"request": "Kérés",
|
||||||
|
"serverVersion": "Szerver",
|
||||||
"status": "Állapot",
|
"status": "Állapot",
|
||||||
"systemLogs": "Rendszernaplók",
|
"systemLogs": "Rendszernaplók",
|
||||||
"systemReboot": "Rendszer újraindítása",
|
"systemReboot": "Rendszer újraindítása",
|
||||||
@@ -22,5 +25,8 @@
|
|||||||
"systemUpgrade": "Rendszerfrissítés",
|
"systemUpgrade": "Rendszerfrissítés",
|
||||||
"upgradeDescription": "Biztosan végre akarja hajtani a rendszerfrissítést? Ez a művelet néhány percet vehet igénybe, és ezalatt a rendszer esetleg nem fog válaszolni.",
|
"upgradeDescription": "Biztosan végre akarja hajtani a rendszerfrissítést? Ez a művelet néhány percet vehet igénybe, és ezalatt a rendszer esetleg nem fog válaszolni.",
|
||||||
"userAgent": "Felhasználói ügynök",
|
"userAgent": "Felhasználói ügynök",
|
||||||
"viewLogsAndManage": "Tekintse meg a rendszer naplóit, hajtsa végre a rendszerfrissítéseket és az újraindítási műveleteket"
|
"versionInfo": "Verzióinformáció",
|
||||||
|
"viewLogsAndManage": "Tekintse meg a rendszer naplóit, hajtsa végre a rendszerfrissítéseket és az újraindítási műveleteket",
|
||||||
|
"viewNewVersion": "Új verzió megtekintése",
|
||||||
|
"webVersion": "Web/Admin"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,10 +8,10 @@
|
|||||||
"createRule": "ルールを追加",
|
"createRule": "ルールを追加",
|
||||||
"createSuccess": "ルールが正常に作成されました",
|
"createSuccess": "ルールが正常に作成されました",
|
||||||
"createdAt": "作成日時",
|
"createdAt": "作成日時",
|
||||||
|
"defaultRule": "デフォルトルール",
|
||||||
"delete": "削除",
|
"delete": "削除",
|
||||||
"deleteSuccess": "ルールが正常に削除されました",
|
"deleteSuccess": "ルールが正常に削除されました",
|
||||||
"deleteWarning": "このルールを削除してもよろしいですか?この操作は元に戻せません。",
|
"deleteWarning": "このルールを削除してもよろしいですか?この操作は元に戻せません。",
|
||||||
"description": "ルールの説明",
|
|
||||||
"downloadTemplate": "テンプレートをダウンロード",
|
"downloadTemplate": "テンプレートをダウンロード",
|
||||||
"edit": "編集",
|
"edit": "編集",
|
||||||
"editRule": "ルールを編集",
|
"editRule": "ルールを編集",
|
||||||
@@ -22,7 +22,6 @@
|
|||||||
"import": "インポート",
|
"import": "インポート",
|
||||||
"importFailed": "インポートに失敗しました",
|
"importFailed": "インポートに失敗しました",
|
||||||
"importSuccess": "インポートが成功しました",
|
"importSuccess": "インポートが成功しました",
|
||||||
"importYaml": "YAMLをインポート",
|
|
||||||
"importYamlDescription": "YAMLファイルからルールをインポートします。システムはポリシーグループ名に基づいてルールグループを自動的に作成します。",
|
"importYamlDescription": "YAMLファイルからルールをインポートします。システムはポリシーグループ名に基づいてルールグループを自動的に作成します。",
|
||||||
"importYamlRules": "YAMLルールをインポート",
|
"importYamlRules": "YAMLルールをインポート",
|
||||||
"importing": "インポート中...",
|
"importing": "インポート中...",
|
||||||
@@ -31,13 +30,13 @@
|
|||||||
"noValidRules": "有効なルールが見つかりません",
|
"noValidRules": "有効なルールが見つかりません",
|
||||||
"pleaseUploadFile": "YAMLファイルをアップロードしてください",
|
"pleaseUploadFile": "YAMLファイルをアップロードしてください",
|
||||||
"preview": "プレビュー",
|
"preview": "プレビュー",
|
||||||
"rules": "ルールの内容",
|
|
||||||
"rulesFormat": "ルール形式: ルールタイプ, マッチ内容, [ポリシー](ポリシーはオプションです)。\nポリシーが指定されていない場合、現在のルールグループ名が自動的に使用されます。例:",
|
"rulesFormat": "ルール形式: ルールタイプ, マッチ内容, [ポリシー](ポリシーはオプションです)。\nポリシーが指定されていない場合、現在のルールグループ名が自動的に使用されます。例:",
|
||||||
"rulesLabel": "ルールの内容",
|
"rulesLabel": "ルールの内容",
|
||||||
"searchRule": "ルール名を検索",
|
"searchRule": "ルール名を検索",
|
||||||
"selectFile": "ファイルを選択",
|
|
||||||
"selectTags": "ノードタグを選択",
|
"selectTags": "ノードタグを選択",
|
||||||
|
"selectType": "ルールタイプを選択",
|
||||||
"tags": "ノードタグ",
|
"tags": "ノードタグ",
|
||||||
"tagsLabel": "ノードタグ",
|
"tagsLabel": "ノードタグ",
|
||||||
|
"type": "ルールタイプ",
|
||||||
"updateSuccess": "ルールが正常に更新されました"
|
"updateSuccess": "ルールが正常に更新されました"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "購入制限/回",
|
"quota": "購入制限/回",
|
||||||
"replacement": "リセット価格/回",
|
"replacement": "リセット価格/回",
|
||||||
"sell": "販売",
|
"sell": "販売",
|
||||||
"show": "ホームページ表示",
|
"show": "表示",
|
||||||
"sold": "サブスクリプション数",
|
"sold": "サブスクリプション数",
|
||||||
"subscribe": "購読",
|
"subscribe": "購読",
|
||||||
"subscribeGroup": "グループを購読する",
|
"subscribeGroup": "グループを購読する",
|
||||||
|
|||||||
@@ -6,15 +6,18 @@
|
|||||||
"confirmSystemUpgrade": "システムアップグレードを確認",
|
"confirmSystemUpgrade": "システムアップグレードを確認",
|
||||||
"confirmUpgrade": "アップグレードを確認",
|
"confirmUpgrade": "アップグレードを確認",
|
||||||
"currentVersion": "現在のシステムバージョン:",
|
"currentVersion": "現在のシステムバージョン:",
|
||||||
|
"developmentVersion": "開発版",
|
||||||
"errors": "エラー",
|
"errors": "エラー",
|
||||||
"ip": "IP",
|
"ip": "IPアドレス",
|
||||||
"lastUpdated": "最終更新:",
|
"lastUpdated": "最終更新:",
|
||||||
|
"newVersionAvailable": "新版利用可能",
|
||||||
"none": "なし",
|
"none": "なし",
|
||||||
"query": "クエリ",
|
"query": "クエリ",
|
||||||
"rebootDescription": "システムを再起動してもよろしいですか?この操作は一時的なサービス中断を引き起こします。",
|
"rebootDescription": "システムを再起動してもよろしいですか?この操作は一時的なサービス中断を引き起こします。",
|
||||||
"rebooting": "システムを再起動しています...",
|
"rebooting": "システムを再起動しています...",
|
||||||
"refreshLogs": "ログを更新",
|
"refreshLogs": "ログを更新",
|
||||||
"request": "リクエスト",
|
"request": "リクエスト",
|
||||||
|
"serverVersion": "サーバー",
|
||||||
"status": "ステータス",
|
"status": "ステータス",
|
||||||
"systemLogs": "システムログ",
|
"systemLogs": "システムログ",
|
||||||
"systemReboot": "システム再起動",
|
"systemReboot": "システム再起動",
|
||||||
@@ -22,5 +25,8 @@
|
|||||||
"systemUpgrade": "システムアップグレード",
|
"systemUpgrade": "システムアップグレード",
|
||||||
"upgradeDescription": "システムのアップグレードを実行してもよろしいですか?この操作には数分かかる場合があり、その間システムが応答しない可能性があります。",
|
"upgradeDescription": "システムのアップグレードを実行してもよろしいですか?この操作には数分かかる場合があり、その間システムが応答しない可能性があります。",
|
||||||
"userAgent": "ユーザーエージェント",
|
"userAgent": "ユーザーエージェント",
|
||||||
"viewLogsAndManage": "システムログを表示し、システムのアップグレードと再起動を実行する"
|
"versionInfo": "バージョン情報",
|
||||||
|
"viewLogsAndManage": "システムログを表示し、システムのアップグレードと再起動を実行する",
|
||||||
|
"viewNewVersion": "新版を表示",
|
||||||
|
"webVersion": "ウェブ/管理者"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
"delete": "삭제",
|
"delete": "삭제",
|
||||||
"deleteSuccess": "규칙이 성공적으로 삭제되었습니다",
|
"deleteSuccess": "규칙이 성공적으로 삭제되었습니다",
|
||||||
"deleteWarning": "이 규칙을 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.",
|
"deleteWarning": "이 규칙을 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.",
|
||||||
"description": "규칙 설명",
|
|
||||||
"downloadTemplate": "템플릿 다운로드",
|
"downloadTemplate": "템플릿 다운로드",
|
||||||
"edit": "편집",
|
"edit": "편집",
|
||||||
"editRule": "규칙 편집",
|
"editRule": "규칙 편집",
|
||||||
@@ -22,7 +21,6 @@
|
|||||||
"import": "가져오기",
|
"import": "가져오기",
|
||||||
"importFailed": "가져오기에 실패했습니다",
|
"importFailed": "가져오기에 실패했습니다",
|
||||||
"importSuccess": "가져오기가 성공적으로 완료되었습니다",
|
"importSuccess": "가져오기가 성공적으로 완료되었습니다",
|
||||||
"importYaml": "YAML 가져오기",
|
|
||||||
"importYamlDescription": "YAML 파일에서 규칙을 가져오며, 시스템이 정책 그룹 이름에 따라 규칙 그룹을 자동으로 생성합니다",
|
"importYamlDescription": "YAML 파일에서 규칙을 가져오며, 시스템이 정책 그룹 이름에 따라 규칙 그룹을 자동으로 생성합니다",
|
||||||
"importYamlRules": "YAML 규칙 가져오기",
|
"importYamlRules": "YAML 규칙 가져오기",
|
||||||
"importing": "가져오는 중...",
|
"importing": "가져오는 중...",
|
||||||
@@ -31,11 +29,9 @@
|
|||||||
"noValidRules": "유효한 규칙이 없습니다",
|
"noValidRules": "유효한 규칙이 없습니다",
|
||||||
"pleaseUploadFile": "YAML 파일을 업로드해 주세요",
|
"pleaseUploadFile": "YAML 파일을 업로드해 주세요",
|
||||||
"preview": "미리보기",
|
"preview": "미리보기",
|
||||||
"rules": "규칙 내용",
|
|
||||||
"rulesFormat": "규칙 형식: 규칙 유형, 일치하는 내용, [정책], 여기서 정책은 선택 사항입니다.\n정책이 지정되지 않으면 현재 규칙 그룹 이름이 자동으로 사용됩니다. 예시:",
|
"rulesFormat": "규칙 형식: 규칙 유형, 일치하는 내용, [정책], 여기서 정책은 선택 사항입니다.\n정책이 지정되지 않으면 현재 규칙 그룹 이름이 자동으로 사용됩니다. 예시:",
|
||||||
"rulesLabel": "규칙 내용",
|
"rulesLabel": "규칙 내용",
|
||||||
"searchRule": "규칙 이름 검색",
|
"searchRule": "규칙 이름 검색",
|
||||||
"selectFile": "파일 선택",
|
|
||||||
"selectTags": "노드 태그 선택",
|
"selectTags": "노드 태그 선택",
|
||||||
"tags": "노드 태그",
|
"tags": "노드 태그",
|
||||||
"tagsLabel": "노드 태그",
|
"tagsLabel": "노드 태그",
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "구매 제한/회",
|
"quota": "구매 제한/회",
|
||||||
"replacement": "가격 재설정/회",
|
"replacement": "가격 재설정/회",
|
||||||
"sell": "판매",
|
"sell": "판매",
|
||||||
"show": "홈 화면 표시",
|
"show": "표시",
|
||||||
"sold": "구독 수",
|
"sold": "구독 수",
|
||||||
"subscribe": "구독",
|
"subscribe": "구독",
|
||||||
"subscribeGroup": "구독 그룹",
|
"subscribeGroup": "구독 그룹",
|
||||||
|
|||||||
@@ -6,15 +6,18 @@
|
|||||||
"confirmSystemUpgrade": "시스템 업그레이드를 확인",
|
"confirmSystemUpgrade": "시스템 업그레이드를 확인",
|
||||||
"confirmUpgrade": "업그레이드 확인",
|
"confirmUpgrade": "업그레이드 확인",
|
||||||
"currentVersion": "현재 시스템 버전:",
|
"currentVersion": "현재 시스템 버전:",
|
||||||
|
"developmentVersion": "개발 버전",
|
||||||
"errors": "오류",
|
"errors": "오류",
|
||||||
"ip": "IP",
|
"ip": "IP 주소",
|
||||||
"lastUpdated": "마지막 업데이트:",
|
"lastUpdated": "마지막 업데이트:",
|
||||||
|
"newVersionAvailable": "새 버전",
|
||||||
"none": "없음",
|
"none": "없음",
|
||||||
"query": "쿼리",
|
"query": "쿼리",
|
||||||
"rebootDescription": "시스템을 재부팅하시겠습니까? 이 작업은 일시적인 서비스 중단을 초래할 수 있습니다.",
|
"rebootDescription": "시스템을 재부팅하시겠습니까? 이 작업은 일시적인 서비스 중단을 초래할 수 있습니다.",
|
||||||
"rebooting": "시스템을 재부팅 중입니다...",
|
"rebooting": "시스템을 재부팅 중입니다...",
|
||||||
"refreshLogs": "로그 새로고침",
|
"refreshLogs": "로그 새로고침",
|
||||||
"request": "요청",
|
"request": "요청",
|
||||||
|
"serverVersion": "서버",
|
||||||
"status": "상태",
|
"status": "상태",
|
||||||
"systemLogs": "시스템 로그",
|
"systemLogs": "시스템 로그",
|
||||||
"systemReboot": "시스템 재부팅",
|
"systemReboot": "시스템 재부팅",
|
||||||
@@ -22,5 +25,8 @@
|
|||||||
"systemUpgrade": "시스템 업그레이드",
|
"systemUpgrade": "시스템 업그레이드",
|
||||||
"upgradeDescription": "시스템 업그레이드를 수행하시겠습니까? 이 작업은 몇 분이 소요될 수 있으며, 그 동안 시스템이 응답하지 않을 수 있습니다.",
|
"upgradeDescription": "시스템 업그레이드를 수행하시겠습니까? 이 작업은 몇 분이 소요될 수 있으며, 그 동안 시스템이 응답하지 않을 수 있습니다.",
|
||||||
"userAgent": "사용자 에이전트",
|
"userAgent": "사용자 에이전트",
|
||||||
"viewLogsAndManage": "시스템 로그를 보고 시스템 업그레이드 및 재시작 작업을 수행합니다"
|
"versionInfo": "버전 정보",
|
||||||
|
"viewLogsAndManage": "시스템 로그를 보고 시스템 업그레이드 및 재시작 작업을 수행합니다",
|
||||||
|
"viewNewVersion": "새 버전 보기",
|
||||||
|
"webVersion": "웹/관리자"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
"delete": "Slett",
|
"delete": "Slett",
|
||||||
"deleteSuccess": "Regel slettet med suksess",
|
"deleteSuccess": "Regel slettet med suksess",
|
||||||
"deleteWarning": "Er du sikker på at du vil slette denne regelen? Denne handlingen kan ikke angres.",
|
"deleteWarning": "Er du sikker på at du vil slette denne regelen? Denne handlingen kan ikke angres.",
|
||||||
"description": "Regelbeskrivelse",
|
|
||||||
"downloadTemplate": "Last ned mal",
|
"downloadTemplate": "Last ned mal",
|
||||||
"edit": "Rediger",
|
"edit": "Rediger",
|
||||||
"editRule": "Rediger regel",
|
"editRule": "Rediger regel",
|
||||||
@@ -22,7 +21,6 @@
|
|||||||
"import": "Importer",
|
"import": "Importer",
|
||||||
"importFailed": "Import mislyktes",
|
"importFailed": "Import mislyktes",
|
||||||
"importSuccess": "Import vellykket",
|
"importSuccess": "Import vellykket",
|
||||||
"importYaml": "Importer YAML",
|
|
||||||
"importYamlDescription": "Importer regler fra YAML-fil, systemet vil automatisk opprette regelgrupper basert på policygruppens navn",
|
"importYamlDescription": "Importer regler fra YAML-fil, systemet vil automatisk opprette regelgrupper basert på policygruppens navn",
|
||||||
"importYamlRules": "Importer YAML-regler",
|
"importYamlRules": "Importer YAML-regler",
|
||||||
"importing": "Importer...",
|
"importing": "Importer...",
|
||||||
@@ -31,11 +29,9 @@
|
|||||||
"noValidRules": "Ingen gyldige regler funnet",
|
"noValidRules": "Ingen gyldige regler funnet",
|
||||||
"pleaseUploadFile": "Vennligst last opp en YAML-fil",
|
"pleaseUploadFile": "Vennligst last opp en YAML-fil",
|
||||||
"preview": "Forhåndsvisning",
|
"preview": "Forhåndsvisning",
|
||||||
"rules": "Regelinnhold",
|
|
||||||
"rulesFormat": "Regelformat: regeltype, matchinnhold, [policy], der policy er valgfritt.\nHvis policy ikke er spesifisert, vil det nåværende regelgruppens navn bli brukt automatisk. Eksempler:",
|
"rulesFormat": "Regelformat: regeltype, matchinnhold, [policy], der policy er valgfritt.\nHvis policy ikke er spesifisert, vil det nåværende regelgruppens navn bli brukt automatisk. Eksempler:",
|
||||||
"rulesLabel": "Regelinnhold",
|
"rulesLabel": "Regelinnhold",
|
||||||
"searchRule": "Søk etter regelnavn",
|
"searchRule": "Søk etter regelnavn",
|
||||||
"selectFile": "Velg fil",
|
|
||||||
"selectTags": "Velg nodetagger",
|
"selectTags": "Velg nodetagger",
|
||||||
"tags": "Nodetagger",
|
"tags": "Nodetagger",
|
||||||
"tagsLabel": "Nodetagger",
|
"tagsLabel": "Nodetagger",
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "Kjøpsgrense/gang",
|
"quota": "Kjøpsgrense/gang",
|
||||||
"replacement": "Tilbakestill pris/gang",
|
"replacement": "Tilbakestill pris/gang",
|
||||||
"sell": "Salg",
|
"sell": "Salg",
|
||||||
"show": "Vis på forsiden",
|
"show": "Vis",
|
||||||
"sold": "Abonnementsantall",
|
"sold": "Abonnementsantall",
|
||||||
"subscribe": "Abonner",
|
"subscribe": "Abonner",
|
||||||
"subscribeGroup": "Abonner på gruppe",
|
"subscribeGroup": "Abonner på gruppe",
|
||||||
|
|||||||
@@ -6,15 +6,18 @@
|
|||||||
"confirmSystemUpgrade": "Bekreft systemoppgradering",
|
"confirmSystemUpgrade": "Bekreft systemoppgradering",
|
||||||
"confirmUpgrade": "Bekreft oppgradering",
|
"confirmUpgrade": "Bekreft oppgradering",
|
||||||
"currentVersion": "Nåværende systemversjon:",
|
"currentVersion": "Nåværende systemversjon:",
|
||||||
|
"developmentVersion": "Utviklingsversjon",
|
||||||
"errors": "Feil",
|
"errors": "Feil",
|
||||||
"ip": "IP",
|
"ip": "IP-adresse",
|
||||||
"lastUpdated": "Sist oppdatert:",
|
"lastUpdated": "Sist oppdatert:",
|
||||||
|
"newVersionAvailable": "Ny versjon",
|
||||||
"none": "Ingen",
|
"none": "Ingen",
|
||||||
"query": "Forespørsel",
|
"query": "Forespørsel",
|
||||||
"rebootDescription": "Er du sikker på at du vil starte systemet på nytt? Denne handlingen vil føre til et kort avbrudd i tjenesten.",
|
"rebootDescription": "Er du sikker på at du vil starte systemet på nytt? Denne handlingen vil føre til et kort avbrudd i tjenesten.",
|
||||||
"rebooting": "Starter systemet på nytt...",
|
"rebooting": "Starter systemet på nytt...",
|
||||||
"refreshLogs": "Oppdater logger",
|
"refreshLogs": "Oppdater logger",
|
||||||
"request": "Forespørsel",
|
"request": "Forespørsel",
|
||||||
|
"serverVersion": "Server",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"systemLogs": "Systemlogger",
|
"systemLogs": "Systemlogger",
|
||||||
"systemReboot": "System omstart",
|
"systemReboot": "System omstart",
|
||||||
@@ -22,5 +25,8 @@
|
|||||||
"systemUpgrade": "Systemoppgradering",
|
"systemUpgrade": "Systemoppgradering",
|
||||||
"upgradeDescription": "Er du sikker på at du vil utføre en systemoppgradering? Denne handlingen kan ta noen minutter, og systemet kan være utilgjengelig i løpet av denne tiden.",
|
"upgradeDescription": "Er du sikker på at du vil utføre en systemoppgradering? Denne handlingen kan ta noen minutter, og systemet kan være utilgjengelig i løpet av denne tiden.",
|
||||||
"userAgent": "Brukeragent",
|
"userAgent": "Brukeragent",
|
||||||
"viewLogsAndManage": "Se systemlogger, utfør systemoppgraderinger og omstart"
|
"versionInfo": "Versjonsinformasjon",
|
||||||
|
"viewLogsAndManage": "Se systemlogger, utfør systemoppgraderinger og omstart",
|
||||||
|
"viewNewVersion": "Se ny versjon",
|
||||||
|
"webVersion": "Web/Admin"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
"delete": "Usuń",
|
"delete": "Usuń",
|
||||||
"deleteSuccess": "Reguła została pomyślnie usunięta",
|
"deleteSuccess": "Reguła została pomyślnie usunięta",
|
||||||
"deleteWarning": "Czy na pewno chcesz usunąć tę regułę? Ta akcja nie może być cofnięta.",
|
"deleteWarning": "Czy na pewno chcesz usunąć tę regułę? Ta akcja nie może być cofnięta.",
|
||||||
"description": "Opis Reguły",
|
|
||||||
"downloadTemplate": "Pobierz Szablon",
|
"downloadTemplate": "Pobierz Szablon",
|
||||||
"edit": "Edytuj",
|
"edit": "Edytuj",
|
||||||
"editRule": "Edytuj Regułę",
|
"editRule": "Edytuj Regułę",
|
||||||
@@ -22,7 +21,6 @@
|
|||||||
"import": "Importuj",
|
"import": "Importuj",
|
||||||
"importFailed": "Import nie powiódł się",
|
"importFailed": "Import nie powiódł się",
|
||||||
"importSuccess": "Import zakończony sukcesem",
|
"importSuccess": "Import zakończony sukcesem",
|
||||||
"importYaml": "Importuj YAML",
|
|
||||||
"importYamlDescription": "Importuj reguły z pliku YAML, system automatycznie utworzy grupy reguł na podstawie nazw grup polityk",
|
"importYamlDescription": "Importuj reguły z pliku YAML, system automatycznie utworzy grupy reguł na podstawie nazw grup polityk",
|
||||||
"importYamlRules": "Importuj Reguły YAML",
|
"importYamlRules": "Importuj Reguły YAML",
|
||||||
"importing": "Importowanie...",
|
"importing": "Importowanie...",
|
||||||
@@ -31,11 +29,9 @@
|
|||||||
"noValidRules": "Nie znaleziono prawidłowych reguł",
|
"noValidRules": "Nie znaleziono prawidłowych reguł",
|
||||||
"pleaseUploadFile": "Proszę przesłać plik YAML",
|
"pleaseUploadFile": "Proszę przesłać plik YAML",
|
||||||
"preview": "Podgląd",
|
"preview": "Podgląd",
|
||||||
"rules": "Treść Reguły",
|
|
||||||
"rulesFormat": "Format reguły: typ reguły, treść dopasowania, [polityka], gdzie polityka jest opcjonalna.\nJeśli polityka nie jest określona, aktualna nazwa grupy reguł zostanie użyta automatycznie. Przykłady:",
|
"rulesFormat": "Format reguły: typ reguły, treść dopasowania, [polityka], gdzie polityka jest opcjonalna.\nJeśli polityka nie jest określona, aktualna nazwa grupy reguł zostanie użyta automatycznie. Przykłady:",
|
||||||
"rulesLabel": "Treść Reguły",
|
"rulesLabel": "Treść Reguły",
|
||||||
"searchRule": "Szukaj nazwy reguły",
|
"searchRule": "Szukaj nazwy reguły",
|
||||||
"selectFile": "Wybierz Plik",
|
|
||||||
"selectTags": "Wybierz tagi węzła",
|
"selectTags": "Wybierz tagi węzła",
|
||||||
"tags": "Tagi Węzła",
|
"tags": "Tagi Węzła",
|
||||||
"tagsLabel": "Tagi Węzła",
|
"tagsLabel": "Tagi Węzła",
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "Limit zakupu/raz",
|
"quota": "Limit zakupu/raz",
|
||||||
"replacement": "Zresetuj cenę/raz",
|
"replacement": "Zresetuj cenę/raz",
|
||||||
"sell": "Sprzedaż",
|
"sell": "Sprzedaż",
|
||||||
"show": "Pokaż na stronie głównej",
|
"show": "Pokaż",
|
||||||
"sold": "Liczba subskrypcji",
|
"sold": "Liczba subskrypcji",
|
||||||
"subscribe": "Subskrybuj",
|
"subscribe": "Subskrybuj",
|
||||||
"subscribeGroup": "Subskrybuj grupę",
|
"subscribeGroup": "Subskrybuj grupę",
|
||||||
|
|||||||
@@ -6,15 +6,18 @@
|
|||||||
"confirmSystemUpgrade": "Potwierdź aktualizację systemu",
|
"confirmSystemUpgrade": "Potwierdź aktualizację systemu",
|
||||||
"confirmUpgrade": "Potwierdź aktualizację",
|
"confirmUpgrade": "Potwierdź aktualizację",
|
||||||
"currentVersion": "Obecna wersja systemu:",
|
"currentVersion": "Obecna wersja systemu:",
|
||||||
|
"developmentVersion": "Wersja deweloperska",
|
||||||
"errors": "Błędy",
|
"errors": "Błędy",
|
||||||
"ip": "IP",
|
"ip": "Adres IP",
|
||||||
"lastUpdated": "Ostatnia aktualizacja:",
|
"lastUpdated": "Ostatnia aktualizacja:",
|
||||||
|
"newVersionAvailable": "Nowa wersja",
|
||||||
"none": "Brak",
|
"none": "Brak",
|
||||||
"query": "Zapytanie",
|
"query": "Zapytanie",
|
||||||
"rebootDescription": "Czy na pewno chcesz zrestartować system? Ta operacja spowoduje krótką przerwę w działaniu usług.",
|
"rebootDescription": "Czy na pewno chcesz zrestartować system? Ta operacja spowoduje krótką przerwę w działaniu usług.",
|
||||||
"rebooting": "Trwa ponowne uruchamianie systemu...",
|
"rebooting": "Trwa ponowne uruchamianie systemu...",
|
||||||
"refreshLogs": "Odśwież dzienniki",
|
"refreshLogs": "Odśwież dzienniki",
|
||||||
"request": "Prośba",
|
"request": "Prośba",
|
||||||
|
"serverVersion": "Serwer",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"systemLogs": "Dzienniki systemowe",
|
"systemLogs": "Dzienniki systemowe",
|
||||||
"systemReboot": "Restart systemu",
|
"systemReboot": "Restart systemu",
|
||||||
@@ -22,5 +25,8 @@
|
|||||||
"systemUpgrade": "Aktualizacja systemu",
|
"systemUpgrade": "Aktualizacja systemu",
|
||||||
"upgradeDescription": "Czy na pewno chcesz przeprowadzić aktualizację systemu? Ta operacja może zająć kilka minut, podczas których system może nie odpowiadać.",
|
"upgradeDescription": "Czy na pewno chcesz przeprowadzić aktualizację systemu? Ta operacja może zająć kilka minut, podczas których system może nie odpowiadać.",
|
||||||
"userAgent": "Agent użytkownika",
|
"userAgent": "Agent użytkownika",
|
||||||
"viewLogsAndManage": "Przeglądaj dzienniki systemowe, wykonuj aktualizacje systemu i operacje ponownego uruchamiania"
|
"versionInfo": "Informacje o wersji",
|
||||||
|
"viewLogsAndManage": "Przeglądaj dzienniki systemowe, wykonuj aktualizacje systemu i operacje ponownego uruchamiania",
|
||||||
|
"viewNewVersion": "Zobacz nową wersję",
|
||||||
|
"webVersion": "Web/Admin"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
"delete": "Excluir",
|
"delete": "Excluir",
|
||||||
"deleteSuccess": "Regra excluída com sucesso",
|
"deleteSuccess": "Regra excluída com sucesso",
|
||||||
"deleteWarning": "Você tem certeza de que deseja excluir esta regra? Esta ação não pode ser desfeita.",
|
"deleteWarning": "Você tem certeza de que deseja excluir esta regra? Esta ação não pode ser desfeita.",
|
||||||
"description": "Descrição da Regra",
|
|
||||||
"downloadTemplate": "Baixar Modelo",
|
"downloadTemplate": "Baixar Modelo",
|
||||||
"edit": "Editar",
|
"edit": "Editar",
|
||||||
"editRule": "Editar Regra",
|
"editRule": "Editar Regra",
|
||||||
@@ -22,7 +21,6 @@
|
|||||||
"import": "Importar",
|
"import": "Importar",
|
||||||
"importFailed": "Falha na importação",
|
"importFailed": "Falha na importação",
|
||||||
"importSuccess": "Importação bem-sucedida",
|
"importSuccess": "Importação bem-sucedida",
|
||||||
"importYaml": "Importar YAML",
|
|
||||||
"importYamlDescription": "Importar regras de um arquivo YAML, o sistema criará automaticamente grupos de regras com base nos nomes dos grupos de políticas",
|
"importYamlDescription": "Importar regras de um arquivo YAML, o sistema criará automaticamente grupos de regras com base nos nomes dos grupos de políticas",
|
||||||
"importYamlRules": "Importar Regras YAML",
|
"importYamlRules": "Importar Regras YAML",
|
||||||
"importing": "Importando...",
|
"importing": "Importando...",
|
||||||
@@ -31,11 +29,9 @@
|
|||||||
"noValidRules": "Nenhuma regra válida encontrada",
|
"noValidRules": "Nenhuma regra válida encontrada",
|
||||||
"pleaseUploadFile": "Por favor, faça upload de um arquivo YAML",
|
"pleaseUploadFile": "Por favor, faça upload de um arquivo YAML",
|
||||||
"preview": "Pré-visualização",
|
"preview": "Pré-visualização",
|
||||||
"rules": "Conteúdo da Regra",
|
|
||||||
"rulesFormat": "Formato da regra: tipo de regra, conteúdo de correspondência, [política], onde a política é opcional.\nSe a política não for especificada, o nome do grupo de regras atual será usado automaticamente. Exemplos:",
|
"rulesFormat": "Formato da regra: tipo de regra, conteúdo de correspondência, [política], onde a política é opcional.\nSe a política não for especificada, o nome do grupo de regras atual será usado automaticamente. Exemplos:",
|
||||||
"rulesLabel": "Conteúdo da Regra",
|
"rulesLabel": "Conteúdo da Regra",
|
||||||
"searchRule": "Pesquisar nome da regra",
|
"searchRule": "Pesquisar nome da regra",
|
||||||
"selectFile": "Selecionar Arquivo",
|
|
||||||
"selectTags": "Selecionar tags de nó",
|
"selectTags": "Selecionar tags de nó",
|
||||||
"tags": "Tags de Nó",
|
"tags": "Tags de Nó",
|
||||||
"tagsLabel": "Tags de Nó",
|
"tagsLabel": "Tags de Nó",
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "Limite de compra/vez",
|
"quota": "Limite de compra/vez",
|
||||||
"replacement": "Redefinir preço/vez",
|
"replacement": "Redefinir preço/vez",
|
||||||
"sell": "venda",
|
"sell": "venda",
|
||||||
"show": "Exibição na página inicial",
|
"show": "Exibir",
|
||||||
"sold": "Contagem de Assinaturas",
|
"sold": "Contagem de Assinaturas",
|
||||||
"subscribe": "Inscrever-se",
|
"subscribe": "Inscrever-se",
|
||||||
"subscribeGroup": "Inscrever-se no grupo",
|
"subscribeGroup": "Inscrever-se no grupo",
|
||||||
|
|||||||
@@ -6,15 +6,18 @@
|
|||||||
"confirmSystemUpgrade": "Confirmar atualização do sistema",
|
"confirmSystemUpgrade": "Confirmar atualização do sistema",
|
||||||
"confirmUpgrade": "Confirmar atualização",
|
"confirmUpgrade": "Confirmar atualização",
|
||||||
"currentVersion": "Versão atual do sistema:",
|
"currentVersion": "Versão atual do sistema:",
|
||||||
|
"developmentVersion": "Versão de desenvolvimento",
|
||||||
"errors": "Erros",
|
"errors": "Erros",
|
||||||
"ip": "IP",
|
"ip": "Endereço IP",
|
||||||
"lastUpdated": "Última atualização:",
|
"lastUpdated": "Última atualização:",
|
||||||
|
"newVersionAvailable": "Nova versão",
|
||||||
"none": "Nenhum",
|
"none": "Nenhum",
|
||||||
"query": "Consulta",
|
"query": "Consulta",
|
||||||
"rebootDescription": "Você tem certeza de que deseja reiniciar o sistema? Esta ação causará uma breve interrupção no serviço.",
|
"rebootDescription": "Você tem certeza de que deseja reiniciar o sistema? Esta ação causará uma breve interrupção no serviço.",
|
||||||
"rebooting": "Reiniciando o sistema...",
|
"rebooting": "Reiniciando o sistema...",
|
||||||
"refreshLogs": "Atualizar Logs",
|
"refreshLogs": "Atualizar Logs",
|
||||||
"request": "Solicitação",
|
"request": "Solicitação",
|
||||||
|
"serverVersion": "Servidor",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"systemLogs": "Logs do sistema",
|
"systemLogs": "Logs do sistema",
|
||||||
"systemReboot": "Reinicialização do sistema",
|
"systemReboot": "Reinicialização do sistema",
|
||||||
@@ -22,5 +25,8 @@
|
|||||||
"systemUpgrade": "Atualização do sistema",
|
"systemUpgrade": "Atualização do sistema",
|
||||||
"upgradeDescription": "Você tem certeza de que deseja realizar a atualização do sistema? Esta operação pode levar alguns minutos e, durante esse tempo, o sistema pode não responder.",
|
"upgradeDescription": "Você tem certeza de que deseja realizar a atualização do sistema? Esta operação pode levar alguns minutos e, durante esse tempo, o sistema pode não responder.",
|
||||||
"userAgent": "Agente do Usuário",
|
"userAgent": "Agente do Usuário",
|
||||||
"viewLogsAndManage": "Visualizar logs do sistema, executar atualizações e reiniciar o sistema"
|
"versionInfo": "Informações da versão",
|
||||||
|
"viewLogsAndManage": "Visualizar logs do sistema, executar atualizações e reiniciar o sistema",
|
||||||
|
"viewNewVersion": "Ver nova versão",
|
||||||
|
"webVersion": "Web/Admin"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
"delete": "Șterge",
|
"delete": "Șterge",
|
||||||
"deleteSuccess": "Regula a fost ștersă cu succes",
|
"deleteSuccess": "Regula a fost ștersă cu succes",
|
||||||
"deleteWarning": "Ești sigur că vrei să ștergi această regulă? Această acțiune nu poate fi anulată.",
|
"deleteWarning": "Ești sigur că vrei să ștergi această regulă? Această acțiune nu poate fi anulată.",
|
||||||
"description": "Descrierea Regulii",
|
|
||||||
"downloadTemplate": "Descarcă Șablon",
|
"downloadTemplate": "Descarcă Șablon",
|
||||||
"edit": "Editează",
|
"edit": "Editează",
|
||||||
"editRule": "Editează Regulă",
|
"editRule": "Editează Regulă",
|
||||||
@@ -22,7 +21,6 @@
|
|||||||
"import": "Importă",
|
"import": "Importă",
|
||||||
"importFailed": "Importul a eșuat",
|
"importFailed": "Importul a eșuat",
|
||||||
"importSuccess": "Importul a fost realizat cu succes",
|
"importSuccess": "Importul a fost realizat cu succes",
|
||||||
"importYaml": "Importă YAML",
|
|
||||||
"importYamlDescription": "Importă reguli din fișier YAML, sistemul va crea automat grupuri de reguli pe baza numelui grupului de politici",
|
"importYamlDescription": "Importă reguli din fișier YAML, sistemul va crea automat grupuri de reguli pe baza numelui grupului de politici",
|
||||||
"importYamlRules": "Importă Reguli YAML",
|
"importYamlRules": "Importă Reguli YAML",
|
||||||
"importing": "Se importă...",
|
"importing": "Se importă...",
|
||||||
@@ -31,11 +29,9 @@
|
|||||||
"noValidRules": "Nu au fost găsite reguli valide",
|
"noValidRules": "Nu au fost găsite reguli valide",
|
||||||
"pleaseUploadFile": "Te rugăm să încarci un fișier YAML",
|
"pleaseUploadFile": "Te rugăm să încarci un fișier YAML",
|
||||||
"preview": "Previzualizare",
|
"preview": "Previzualizare",
|
||||||
"rules": "Conținutul Regulii",
|
|
||||||
"rulesFormat": "Formatul regulii: tip regulă, conținut de potrivire, [politică], unde politica este opțională.\nDacă politica nu este specificată, numele grupului de reguli curent va fi folosit automat. Exemple:",
|
"rulesFormat": "Formatul regulii: tip regulă, conținut de potrivire, [politică], unde politica este opțională.\nDacă politica nu este specificată, numele grupului de reguli curent va fi folosit automat. Exemple:",
|
||||||
"rulesLabel": "Conținutul Regulii",
|
"rulesLabel": "Conținutul Regulii",
|
||||||
"searchRule": "Caută numele regulii",
|
"searchRule": "Caută numele regulii",
|
||||||
"selectFile": "Selectează Fișier",
|
|
||||||
"selectTags": "Selectează etichetele nodului",
|
"selectTags": "Selectează etichetele nodului",
|
||||||
"tags": "Etichete Nod",
|
"tags": "Etichete Nod",
|
||||||
"tagsLabel": "Etichete Nod",
|
"tagsLabel": "Etichete Nod",
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "Limită de achiziție/pe tranzacție",
|
"quota": "Limită de achiziție/pe tranzacție",
|
||||||
"replacement": "Resetare preț/pe utilizare",
|
"replacement": "Resetare preț/pe utilizare",
|
||||||
"sell": "Vânzare",
|
"sell": "Vânzare",
|
||||||
"show": "Afișare pe pagina principală",
|
"show": "Afișare",
|
||||||
"sold": "Număr de abonamente",
|
"sold": "Număr de abonamente",
|
||||||
"subscribe": "Abonare",
|
"subscribe": "Abonare",
|
||||||
"subscribeGroup": "Abonare grup",
|
"subscribeGroup": "Abonare grup",
|
||||||
|
|||||||
@@ -6,15 +6,18 @@
|
|||||||
"confirmSystemUpgrade": "Confirmați actualizarea sistemului",
|
"confirmSystemUpgrade": "Confirmați actualizarea sistemului",
|
||||||
"confirmUpgrade": "Confirmă actualizarea",
|
"confirmUpgrade": "Confirmă actualizarea",
|
||||||
"currentVersion": "Versiunea curentă a sistemului:",
|
"currentVersion": "Versiunea curentă a sistemului:",
|
||||||
|
"developmentVersion": "Versiunea de dezvoltare",
|
||||||
"errors": "Erori",
|
"errors": "Erori",
|
||||||
"ip": "IP",
|
"ip": "Adresă IP",
|
||||||
"lastUpdated": "Ultima actualizare:",
|
"lastUpdated": "Ultima actualizare:",
|
||||||
|
"newVersionAvailable": "Versiune nouă",
|
||||||
"none": "Niciunul",
|
"none": "Niciunul",
|
||||||
"query": "Interogare",
|
"query": "Interogare",
|
||||||
"rebootDescription": "Sunteți sigur că doriți să reporniți sistemul? Această acțiune va provoca o întrerupere temporară a serviciului.",
|
"rebootDescription": "Sunteți sigur că doriți să reporniți sistemul? Această acțiune va provoca o întrerupere temporară a serviciului.",
|
||||||
"rebooting": "Se repornește sistemul...",
|
"rebooting": "Se repornește sistemul...",
|
||||||
"refreshLogs": "Reîmprospătează jurnalele",
|
"refreshLogs": "Reîmprospătează jurnalele",
|
||||||
"request": "Cerere",
|
"request": "Cerere",
|
||||||
|
"serverVersion": "Server",
|
||||||
"status": "Stare",
|
"status": "Stare",
|
||||||
"systemLogs": "Jurnale de sistem",
|
"systemLogs": "Jurnale de sistem",
|
||||||
"systemReboot": "Repornire sistem",
|
"systemReboot": "Repornire sistem",
|
||||||
@@ -22,5 +25,8 @@
|
|||||||
"systemUpgrade": "Actualizare sistem",
|
"systemUpgrade": "Actualizare sistem",
|
||||||
"upgradeDescription": "Sunteți sigur că doriți să efectuați o actualizare a sistemului? Această operațiune poate dura câteva minute, timp în care sistemul poate să nu răspundă.",
|
"upgradeDescription": "Sunteți sigur că doriți să efectuați o actualizare a sistemului? Această operațiune poate dura câteva minute, timp în care sistemul poate să nu răspundă.",
|
||||||
"userAgent": "Agent Utilizator",
|
"userAgent": "Agent Utilizator",
|
||||||
"viewLogsAndManage": "Vizualizați jurnalele de sistem, efectuați actualizări de sistem și operațiuni de repornire"
|
"versionInfo": "Informații despre versiune",
|
||||||
|
"viewLogsAndManage": "Vizualizați jurnalele de sistem, efectuați actualizări de sistem și operațiuni de repornire",
|
||||||
|
"viewNewVersion": "Vezi versiunea nouă",
|
||||||
|
"webVersion": "Web/Admin"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
"delete": "Удалить",
|
"delete": "Удалить",
|
||||||
"deleteSuccess": "Правило успешно удалено",
|
"deleteSuccess": "Правило успешно удалено",
|
||||||
"deleteWarning": "Вы уверены, что хотите удалить это правило? Это действие нельзя отменить.",
|
"deleteWarning": "Вы уверены, что хотите удалить это правило? Это действие нельзя отменить.",
|
||||||
"description": "Описание правила",
|
|
||||||
"downloadTemplate": "Скачать шаблон",
|
"downloadTemplate": "Скачать шаблон",
|
||||||
"edit": "Редактировать",
|
"edit": "Редактировать",
|
||||||
"editRule": "Редактировать правило",
|
"editRule": "Редактировать правило",
|
||||||
@@ -22,7 +21,6 @@
|
|||||||
"import": "Импортировать",
|
"import": "Импортировать",
|
||||||
"importFailed": "Ошибка импорта",
|
"importFailed": "Ошибка импорта",
|
||||||
"importSuccess": "Импорт успешен",
|
"importSuccess": "Импорт успешен",
|
||||||
"importYaml": "Импортировать YAML",
|
|
||||||
"importYamlDescription": "Импорт правил из файла YAML, система автоматически создаст группы правил на основе имен групп политик",
|
"importYamlDescription": "Импорт правил из файла YAML, система автоматически создаст группы правил на основе имен групп политик",
|
||||||
"importYamlRules": "Импортировать правила YAML",
|
"importYamlRules": "Импортировать правила YAML",
|
||||||
"importing": "Импортирую...",
|
"importing": "Импортирую...",
|
||||||
@@ -31,11 +29,9 @@
|
|||||||
"noValidRules": "Не найдено действительных правил",
|
"noValidRules": "Не найдено действительных правил",
|
||||||
"pleaseUploadFile": "Пожалуйста, загрузите файл YAML",
|
"pleaseUploadFile": "Пожалуйста, загрузите файл YAML",
|
||||||
"preview": "Предварительный просмотр",
|
"preview": "Предварительный просмотр",
|
||||||
"rules": "Содержание правила",
|
|
||||||
"rulesFormat": "Формат правила: тип правила, содержание совпадения, [политика], где политика является необязательной.\nЕсли политика не указана, будет автоматически использовано текущее имя группы правил. Примеры:",
|
"rulesFormat": "Формат правила: тип правила, содержание совпадения, [политика], где политика является необязательной.\nЕсли политика не указана, будет автоматически использовано текущее имя группы правил. Примеры:",
|
||||||
"rulesLabel": "Содержание правила",
|
"rulesLabel": "Содержание правила",
|
||||||
"searchRule": "Поиск имени правила",
|
"searchRule": "Поиск имени правила",
|
||||||
"selectFile": "Выбрать файл",
|
|
||||||
"selectTags": "Выбрать теги узлов",
|
"selectTags": "Выбрать теги узлов",
|
||||||
"tags": "Теги узлов",
|
"tags": "Теги узлов",
|
||||||
"tagsLabel": "Теги узлов",
|
"tagsLabel": "Теги узлов",
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "Лимит/раз",
|
"quota": "Лимит/раз",
|
||||||
"replacement": "Сбросить цену/раз",
|
"replacement": "Сбросить цену/раз",
|
||||||
"sell": "Продажа",
|
"sell": "Продажа",
|
||||||
"show": "Показать на главной странице",
|
"show": "Показать",
|
||||||
"sold": "Количество подписок",
|
"sold": "Количество подписок",
|
||||||
"subscribe": "Подписаться",
|
"subscribe": "Подписаться",
|
||||||
"subscribeGroup": "Подписаться на группу",
|
"subscribeGroup": "Подписаться на группу",
|
||||||
|
|||||||
@@ -6,15 +6,18 @@
|
|||||||
"confirmSystemUpgrade": "Подтвердить обновление системы",
|
"confirmSystemUpgrade": "Подтвердить обновление системы",
|
||||||
"confirmUpgrade": "Подтвердить обновление",
|
"confirmUpgrade": "Подтвердить обновление",
|
||||||
"currentVersion": "Текущая версия системы:",
|
"currentVersion": "Текущая версия системы:",
|
||||||
|
"developmentVersion": "Версия разработки",
|
||||||
"errors": "Ошибки",
|
"errors": "Ошибки",
|
||||||
"ip": "IP",
|
"ip": "IP-адрес",
|
||||||
"lastUpdated": "Последнее обновление:",
|
"lastUpdated": "Последнее обновление:",
|
||||||
|
"newVersionAvailable": "Новая версия",
|
||||||
"none": "Нет",
|
"none": "Нет",
|
||||||
"query": "Запрос",
|
"query": "Запрос",
|
||||||
"rebootDescription": "Вы уверены, что хотите перезагрузить систему? Это действие приведет к кратковременному прерыванию обслуживания.",
|
"rebootDescription": "Вы уверены, что хотите перезагрузить систему? Это действие приведет к кратковременному прерыванию обслуживания.",
|
||||||
"rebooting": "Перезагрузка системы...",
|
"rebooting": "Перезагрузка системы...",
|
||||||
"refreshLogs": "Обновить журналы",
|
"refreshLogs": "Обновить журналы",
|
||||||
"request": "Запрос",
|
"request": "Запрос",
|
||||||
|
"serverVersion": "Сервер",
|
||||||
"status": "Статус",
|
"status": "Статус",
|
||||||
"systemLogs": "Системные журналы",
|
"systemLogs": "Системные журналы",
|
||||||
"systemReboot": "Перезагрузка системы",
|
"systemReboot": "Перезагрузка системы",
|
||||||
@@ -22,5 +25,8 @@
|
|||||||
"systemUpgrade": "Обновление системы",
|
"systemUpgrade": "Обновление системы",
|
||||||
"upgradeDescription": "Вы уверены, что хотите выполнить обновление системы? Эта операция может занять несколько минут, в течение которых система может не отвечать.",
|
"upgradeDescription": "Вы уверены, что хотите выполнить обновление системы? Эта операция может занять несколько минут, в течение которых система может не отвечать.",
|
||||||
"userAgent": "Пользовательский агент",
|
"userAgent": "Пользовательский агент",
|
||||||
"viewLogsAndManage": "Просмотр системных журналов, выполнение обновлений и перезагрузка системы"
|
"versionInfo": "Информация о версии",
|
||||||
|
"viewLogsAndManage": "Просмотр системных журналов, выполнение обновлений и перезагрузка системы",
|
||||||
|
"viewNewVersion": "Посмотреть новую версию",
|
||||||
|
"webVersion": "Веб/Админ"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
"delete": "ลบ",
|
"delete": "ลบ",
|
||||||
"deleteSuccess": "ลบกฎเรียบร้อยแล้ว",
|
"deleteSuccess": "ลบกฎเรียบร้อยแล้ว",
|
||||||
"deleteWarning": "คุณแน่ใจหรือว่าต้องการลบกฎนี้? การกระทำนี้ไม่สามารถย้อนกลับได้.",
|
"deleteWarning": "คุณแน่ใจหรือว่าต้องการลบกฎนี้? การกระทำนี้ไม่สามารถย้อนกลับได้.",
|
||||||
"description": "คำอธิบายกฎ",
|
|
||||||
"downloadTemplate": "ดาวน์โหลดเทมเพลต",
|
"downloadTemplate": "ดาวน์โหลดเทมเพลต",
|
||||||
"edit": "แก้ไข",
|
"edit": "แก้ไข",
|
||||||
"editRule": "แก้ไขกฎ",
|
"editRule": "แก้ไขกฎ",
|
||||||
@@ -22,7 +21,6 @@
|
|||||||
"import": "นำเข้า",
|
"import": "นำเข้า",
|
||||||
"importFailed": "นำเข้าล้มเหลว",
|
"importFailed": "นำเข้าล้มเหลว",
|
||||||
"importSuccess": "นำเข้าสำเร็จ",
|
"importSuccess": "นำเข้าสำเร็จ",
|
||||||
"importYaml": "นำเข้า YAML",
|
|
||||||
"importYamlDescription": "นำเข้ากฎจากไฟล์ YAML, ระบบจะสร้างกลุ่มกฎโดยอัตโนมัติตามชื่อกลุ่มนโยบาย",
|
"importYamlDescription": "นำเข้ากฎจากไฟล์ YAML, ระบบจะสร้างกลุ่มกฎโดยอัตโนมัติตามชื่อกลุ่มนโยบาย",
|
||||||
"importYamlRules": "นำเข้ากฎ YAML",
|
"importYamlRules": "นำเข้ากฎ YAML",
|
||||||
"importing": "กำลังนำเข้า...",
|
"importing": "กำลังนำเข้า...",
|
||||||
@@ -31,11 +29,9 @@
|
|||||||
"noValidRules": "ไม่พบกฎที่ถูกต้อง",
|
"noValidRules": "ไม่พบกฎที่ถูกต้อง",
|
||||||
"pleaseUploadFile": "กรุณาอัปโหลดไฟล์ YAML",
|
"pleaseUploadFile": "กรุณาอัปโหลดไฟล์ YAML",
|
||||||
"preview": "ตัวอย่าง",
|
"preview": "ตัวอย่าง",
|
||||||
"rules": "เนื้อหากฎ",
|
|
||||||
"rulesFormat": "รูปแบบกฎ: ประเภทกฎ, เนื้อหาที่ตรงกัน, [นโยบาย], โดยที่นโยบายเป็นทางเลือก.\nหากไม่ได้ระบุนโยบาย, ชื่อกลุ่มกฎปัจจุบันจะถูกใช้โดยอัตโนมัติ. ตัวอย่าง:",
|
"rulesFormat": "รูปแบบกฎ: ประเภทกฎ, เนื้อหาที่ตรงกัน, [นโยบาย], โดยที่นโยบายเป็นทางเลือก.\nหากไม่ได้ระบุนโยบาย, ชื่อกลุ่มกฎปัจจุบันจะถูกใช้โดยอัตโนมัติ. ตัวอย่าง:",
|
||||||
"rulesLabel": "เนื้อหากฎ",
|
"rulesLabel": "เนื้อหากฎ",
|
||||||
"searchRule": "ค้นหาชื่อกฎ",
|
"searchRule": "ค้นหาชื่อกฎ",
|
||||||
"selectFile": "เลือกไฟล์",
|
|
||||||
"selectTags": "เลือกแท็กโหนด",
|
"selectTags": "เลือกแท็กโหนด",
|
||||||
"tags": "แท็กโหนด",
|
"tags": "แท็กโหนด",
|
||||||
"tagsLabel": "แท็กโหนด",
|
"tagsLabel": "แท็กโหนด",
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "จำกัดการซื้อ/ครั้ง",
|
"quota": "จำกัดการซื้อ/ครั้ง",
|
||||||
"replacement": "รีเซ็ตราคา/ครั้ง",
|
"replacement": "รีเซ็ตราคา/ครั้ง",
|
||||||
"sell": "ขาย",
|
"sell": "ขาย",
|
||||||
"show": "แสดงหน้าแรก",
|
"show": "แสดง",
|
||||||
"sold": "จำนวนการสมัครสมาชิก",
|
"sold": "จำนวนการสมัครสมาชิก",
|
||||||
"subscribe": "สมัครสมาชิก",
|
"subscribe": "สมัครสมาชิก",
|
||||||
"subscribeGroup": "สมัครกลุ่ม",
|
"subscribeGroup": "สมัครกลุ่ม",
|
||||||
|
|||||||
@@ -6,15 +6,18 @@
|
|||||||
"confirmSystemUpgrade": "ยืนยันการอัปเกรดระบบ",
|
"confirmSystemUpgrade": "ยืนยันการอัปเกรดระบบ",
|
||||||
"confirmUpgrade": "ยืนยันการอัปเกรด",
|
"confirmUpgrade": "ยืนยันการอัปเกรด",
|
||||||
"currentVersion": "เวอร์ชันปัจจุบันของระบบ:",
|
"currentVersion": "เวอร์ชันปัจจุบันของระบบ:",
|
||||||
|
"developmentVersion": "เวอร์ชันการพัฒนา",
|
||||||
"errors": "ข้อผิดพลาด",
|
"errors": "ข้อผิดพลาด",
|
||||||
"ip": "IP",
|
"ip": "ที่อยู่ IP",
|
||||||
"lastUpdated": "อัปเดตล่าสุด:",
|
"lastUpdated": "อัปเดตล่าสุด:",
|
||||||
|
"newVersionAvailable": "เวอร์ชันใหม่",
|
||||||
"none": "ไม่มี",
|
"none": "ไม่มี",
|
||||||
"query": "ค้นหา",
|
"query": "ค้นหา",
|
||||||
"rebootDescription": "คุณแน่ใจหรือไม่ว่าต้องการรีบูตระบบ? การดำเนินการนี้จะทำให้บริการหยุดชะงักชั่วคราว.",
|
"rebootDescription": "คุณแน่ใจหรือไม่ว่าต้องการรีบูตระบบ? การดำเนินการนี้จะทำให้บริการหยุดชะงักชั่วคราว.",
|
||||||
"rebooting": "กำลังรีบูตระบบ...",
|
"rebooting": "กำลังรีบูตระบบ...",
|
||||||
"refreshLogs": "รีเฟรชบันทึก",
|
"refreshLogs": "รีเฟรชบันทึก",
|
||||||
"request": "คำขอ",
|
"request": "คำขอ",
|
||||||
|
"serverVersion": "เซิร์ฟเวอร์",
|
||||||
"status": "สถานะ",
|
"status": "สถานะ",
|
||||||
"systemLogs": "บันทึกระบบ",
|
"systemLogs": "บันทึกระบบ",
|
||||||
"systemReboot": "ระบบรีบูต",
|
"systemReboot": "ระบบรีบูต",
|
||||||
@@ -22,5 +25,8 @@
|
|||||||
"systemUpgrade": "ระบบอัปเกรด",
|
"systemUpgrade": "ระบบอัปเกรด",
|
||||||
"upgradeDescription": "คุณแน่ใจหรือไม่ว่าต้องการดำเนินการอัปเกรดระบบ? การดำเนินการนี้อาจใช้เวลาสักครู่ และในระหว่างนี้ระบบอาจไม่ตอบสนอง",
|
"upgradeDescription": "คุณแน่ใจหรือไม่ว่าต้องการดำเนินการอัปเกรดระบบ? การดำเนินการนี้อาจใช้เวลาสักครู่ และในระหว่างนี้ระบบอาจไม่ตอบสนอง",
|
||||||
"userAgent": "ตัวแทนผู้ใช้",
|
"userAgent": "ตัวแทนผู้ใช้",
|
||||||
"viewLogsAndManage": "ดูบันทึกของระบบ ดำเนินการอัปเกรดระบบและรีสตาร์ท"
|
"versionInfo": "ข้อมูลเวอร์ชัน",
|
||||||
|
"viewLogsAndManage": "ดูบันทึกของระบบ ดำเนินการอัปเกรดระบบและรีสตาร์ท",
|
||||||
|
"viewNewVersion": "ดูเวอร์ชันใหม่",
|
||||||
|
"webVersion": "เว็บ/ผู้ดูแล"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
"delete": "Sil",
|
"delete": "Sil",
|
||||||
"deleteSuccess": "Kural başarıyla silindi",
|
"deleteSuccess": "Kural başarıyla silindi",
|
||||||
"deleteWarning": "Bu kuralı silmek istediğinize emin misiniz? Bu işlem geri alınamaz.",
|
"deleteWarning": "Bu kuralı silmek istediğinize emin misiniz? Bu işlem geri alınamaz.",
|
||||||
"description": "Kural Açıklaması",
|
|
||||||
"downloadTemplate": "Şablonu İndir",
|
"downloadTemplate": "Şablonu İndir",
|
||||||
"edit": "Düzenle",
|
"edit": "Düzenle",
|
||||||
"editRule": "Kuralı Düzenle",
|
"editRule": "Kuralı Düzenle",
|
||||||
@@ -22,7 +21,6 @@
|
|||||||
"import": "İçe Aktar",
|
"import": "İçe Aktar",
|
||||||
"importFailed": "İçe aktarma başarısız oldu",
|
"importFailed": "İçe aktarma başarısız oldu",
|
||||||
"importSuccess": "İçe aktarma başarılı",
|
"importSuccess": "İçe aktarma başarılı",
|
||||||
"importYaml": "YAML İçe Aktar",
|
|
||||||
"importYamlDescription": "YAML dosyasından kuralları içe aktarın, sistem otomatik olarak politika grup adlarına göre kural grupları oluşturacaktır",
|
"importYamlDescription": "YAML dosyasından kuralları içe aktarın, sistem otomatik olarak politika grup adlarına göre kural grupları oluşturacaktır",
|
||||||
"importYamlRules": "YAML Kurallarını İçe Aktar",
|
"importYamlRules": "YAML Kurallarını İçe Aktar",
|
||||||
"importing": "İçe aktarılıyor...",
|
"importing": "İçe aktarılıyor...",
|
||||||
@@ -31,11 +29,9 @@
|
|||||||
"noValidRules": "Geçerli kural bulunamadı",
|
"noValidRules": "Geçerli kural bulunamadı",
|
||||||
"pleaseUploadFile": "Lütfen bir YAML dosyası yükleyin",
|
"pleaseUploadFile": "Lütfen bir YAML dosyası yükleyin",
|
||||||
"preview": "Önizleme",
|
"preview": "Önizleme",
|
||||||
"rules": "Kural İçeriği",
|
|
||||||
"rulesFormat": "Kural formatı: kural türü, eşleşme içeriği,[politika], burada politika isteğe bağlıdır.\nEğer politika belirtilmemişse, mevcut kural grup adı otomatik olarak kullanılacaktır. Örnekler:",
|
"rulesFormat": "Kural formatı: kural türü, eşleşme içeriği,[politika], burada politika isteğe bağlıdır.\nEğer politika belirtilmemişse, mevcut kural grup adı otomatik olarak kullanılacaktır. Örnekler:",
|
||||||
"rulesLabel": "Kural İçeriği",
|
"rulesLabel": "Kural İçeriği",
|
||||||
"searchRule": "Kural adını ara",
|
"searchRule": "Kural adını ara",
|
||||||
"selectFile": "Dosya Seç",
|
|
||||||
"selectTags": "Düğüm etiketlerini seç",
|
"selectTags": "Düğüm etiketlerini seç",
|
||||||
"tags": "Düğüm Etiketleri",
|
"tags": "Düğüm Etiketleri",
|
||||||
"tagsLabel": "Düğüm Etiketleri",
|
"tagsLabel": "Düğüm Etiketleri",
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "Kota/satın alma",
|
"quota": "Kota/satın alma",
|
||||||
"replacement": "Fiyatı sıfırla/kez",
|
"replacement": "Fiyatı sıfırla/kez",
|
||||||
"sell": "satış",
|
"sell": "satış",
|
||||||
"show": "Ana sayfada göster",
|
"show": "Göster",
|
||||||
"sold": "Abonelik Sayısı",
|
"sold": "Abonelik Sayısı",
|
||||||
"subscribe": "Abone Ol",
|
"subscribe": "Abone Ol",
|
||||||
"subscribeGroup": "Gruba Abone Ol",
|
"subscribeGroup": "Gruba Abone Ol",
|
||||||
|
|||||||
@@ -6,15 +6,18 @@
|
|||||||
"confirmSystemUpgrade": "Sistem yükseltmesini onayla",
|
"confirmSystemUpgrade": "Sistem yükseltmesini onayla",
|
||||||
"confirmUpgrade": "Yükseltmeyi Onayla",
|
"confirmUpgrade": "Yükseltmeyi Onayla",
|
||||||
"currentVersion": "Mevcut Sistem Sürümü:",
|
"currentVersion": "Mevcut Sistem Sürümü:",
|
||||||
|
"developmentVersion": "Geliştirme Sürümü",
|
||||||
"errors": "Hatalar",
|
"errors": "Hatalar",
|
||||||
"ip": "IP",
|
"ip": "IP Adresi",
|
||||||
"lastUpdated": "Son Güncelleme:",
|
"lastUpdated": "Son Güncelleme:",
|
||||||
|
"newVersionAvailable": "Yeni Sürüm",
|
||||||
"none": "Hiçbiri",
|
"none": "Hiçbiri",
|
||||||
"query": "Sorgu",
|
"query": "Sorgu",
|
||||||
"rebootDescription": "Sistemi yeniden başlatmak istediğinizden emin misiniz? Bu işlem kısa süreli hizmet kesintisine neden olacaktır.",
|
"rebootDescription": "Sistemi yeniden başlatmak istediğinizden emin misiniz? Bu işlem kısa süreli hizmet kesintisine neden olacaktır.",
|
||||||
"rebooting": "Sistem yeniden başlatılıyor...",
|
"rebooting": "Sistem yeniden başlatılıyor...",
|
||||||
"refreshLogs": "Günlükleri Yenile",
|
"refreshLogs": "Günlükleri Yenile",
|
||||||
"request": "İstek",
|
"request": "İstek",
|
||||||
|
"serverVersion": "Sunucu",
|
||||||
"status": "Durum",
|
"status": "Durum",
|
||||||
"systemLogs": "Sistem Günlükleri",
|
"systemLogs": "Sistem Günlükleri",
|
||||||
"systemReboot": "Sistem Yeniden Başlatma",
|
"systemReboot": "Sistem Yeniden Başlatma",
|
||||||
@@ -22,5 +25,8 @@
|
|||||||
"systemUpgrade": "Sistem Yükseltmesi",
|
"systemUpgrade": "Sistem Yükseltmesi",
|
||||||
"upgradeDescription": "Sistem yükseltmesi yapmak istediğinizden emin misiniz? Bu işlem birkaç dakika sürebilir ve bu süre zarfında sistem yanıt vermeyebilir.",
|
"upgradeDescription": "Sistem yükseltmesi yapmak istediğinizden emin misiniz? Bu işlem birkaç dakika sürebilir ve bu süre zarfında sistem yanıt vermeyebilir.",
|
||||||
"userAgent": "Kullanıcı Aracısı",
|
"userAgent": "Kullanıcı Aracısı",
|
||||||
"viewLogsAndManage": "Sistem günlüklerini görüntüleyin, sistem yükseltmelerini gerçekleştirin ve yeniden başlatma işlemlerini yönetin"
|
"versionInfo": "Sürüm Bilgisi",
|
||||||
|
"viewLogsAndManage": "Sistem günlüklerini görüntüleyin, sistem yükseltmelerini gerçekleştirin ve yeniden başlatma işlemlerini yönetin",
|
||||||
|
"viewNewVersion": "Yeni Sürümü Görüntüle",
|
||||||
|
"webVersion": "Web/Yönetici"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
"delete": "Видалити",
|
"delete": "Видалити",
|
||||||
"deleteSuccess": "Правило успішно видалено",
|
"deleteSuccess": "Правило успішно видалено",
|
||||||
"deleteWarning": "Ви впевнені, що хочете видалити це правило? Цю дію не можна скасувати.",
|
"deleteWarning": "Ви впевнені, що хочете видалити це правило? Цю дію не можна скасувати.",
|
||||||
"description": "Опис правила",
|
|
||||||
"downloadTemplate": "Завантажити шаблон",
|
"downloadTemplate": "Завантажити шаблон",
|
||||||
"edit": "Редагувати",
|
"edit": "Редагувати",
|
||||||
"editRule": "Редагувати правило",
|
"editRule": "Редагувати правило",
|
||||||
@@ -22,7 +21,6 @@
|
|||||||
"import": "Імпортувати",
|
"import": "Імпортувати",
|
||||||
"importFailed": "Імпорт не вдався",
|
"importFailed": "Імпорт не вдався",
|
||||||
"importSuccess": "Імпорт успішний",
|
"importSuccess": "Імпорт успішний",
|
||||||
"importYaml": "Імпортувати YAML",
|
|
||||||
"importYamlDescription": "Імпортуйте правила з файлу YAML, система автоматично створить групи правил на основі назв груп політик",
|
"importYamlDescription": "Імпортуйте правила з файлу YAML, система автоматично створить групи правил на основі назв груп політик",
|
||||||
"importYamlRules": "Імпортувати правила YAML",
|
"importYamlRules": "Імпортувати правила YAML",
|
||||||
"importing": "Імпортується...",
|
"importing": "Імпортується...",
|
||||||
@@ -31,11 +29,9 @@
|
|||||||
"noValidRules": "Не знайдено дійсних правил",
|
"noValidRules": "Не знайдено дійсних правил",
|
||||||
"pleaseUploadFile": "Будь ласка, завантажте файл YAML",
|
"pleaseUploadFile": "Будь ласка, завантажте файл YAML",
|
||||||
"preview": "Попередній перегляд",
|
"preview": "Попередній перегляд",
|
||||||
"rules": "Вміст правила",
|
|
||||||
"rulesFormat": "Формат правила: тип правила, вміст збігу, [політика], де політика є необов'язковою.\nЯкщо політика не вказана, автоматично буде використано назву поточної групи правил. Приклади:",
|
"rulesFormat": "Формат правила: тип правила, вміст збігу, [політика], де політика є необов'язковою.\nЯкщо політика не вказана, автоматично буде використано назву поточної групи правил. Приклади:",
|
||||||
"rulesLabel": "Вміст правила",
|
"rulesLabel": "Вміст правила",
|
||||||
"searchRule": "Шукати назву правила",
|
"searchRule": "Шукати назву правила",
|
||||||
"selectFile": "Вибрати файл",
|
|
||||||
"selectTags": "Вибрати теги вузлів",
|
"selectTags": "Вибрати теги вузлів",
|
||||||
"tags": "Теги вузлів",
|
"tags": "Теги вузлів",
|
||||||
"tagsLabel": "Теги вузлів",
|
"tagsLabel": "Теги вузлів",
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "Обмеження на покупку/раз",
|
"quota": "Обмеження на покупку/раз",
|
||||||
"replacement": "Скидання ціни/раз",
|
"replacement": "Скидання ціни/раз",
|
||||||
"sell": "продаж",
|
"sell": "продаж",
|
||||||
"show": "Показати на головній сторінці",
|
"show": "Показати",
|
||||||
"sold": "Кількість підписок",
|
"sold": "Кількість підписок",
|
||||||
"subscribe": "Підписатися",
|
"subscribe": "Підписатися",
|
||||||
"subscribeGroup": "Підписатися на групу",
|
"subscribeGroup": "Підписатися на групу",
|
||||||
|
|||||||
@@ -6,15 +6,18 @@
|
|||||||
"confirmSystemUpgrade": "Підтвердити оновлення системи",
|
"confirmSystemUpgrade": "Підтвердити оновлення системи",
|
||||||
"confirmUpgrade": "Підтвердити оновлення",
|
"confirmUpgrade": "Підтвердити оновлення",
|
||||||
"currentVersion": "Поточна версія системи:",
|
"currentVersion": "Поточна версія системи:",
|
||||||
|
"developmentVersion": "Версія розробки",
|
||||||
"errors": "Помилки",
|
"errors": "Помилки",
|
||||||
"ip": "IP",
|
"ip": "IP-адреса",
|
||||||
"lastUpdated": "Останнє оновлення:",
|
"lastUpdated": "Останнє оновлення:",
|
||||||
|
"newVersionAvailable": "Нова версія",
|
||||||
"none": "Жоден",
|
"none": "Жоден",
|
||||||
"query": "Запит",
|
"query": "Запит",
|
||||||
"rebootDescription": "Ви впевнені, що хочете перезавантажити систему? Ця дія призведе до короткочасного переривання обслуговування.",
|
"rebootDescription": "Ви впевнені, що хочете перезавантажити систему? Ця дія призведе до короткочасного переривання обслуговування.",
|
||||||
"rebooting": "Перезавантаження системи...",
|
"rebooting": "Перезавантаження системи...",
|
||||||
"refreshLogs": "Оновити журнали",
|
"refreshLogs": "Оновити журнали",
|
||||||
"request": "Запит",
|
"request": "Запит",
|
||||||
|
"serverVersion": "Сервер",
|
||||||
"status": "Статус",
|
"status": "Статус",
|
||||||
"systemLogs": "Системні журнали",
|
"systemLogs": "Системні журнали",
|
||||||
"systemReboot": "Перезавантаження системи",
|
"systemReboot": "Перезавантаження системи",
|
||||||
@@ -22,5 +25,8 @@
|
|||||||
"systemUpgrade": "Оновлення системи",
|
"systemUpgrade": "Оновлення системи",
|
||||||
"upgradeDescription": "Ви впевнені, що хочете виконати оновлення системи? Ця операція може зайняти кілька хвилин, протягом яких система може не відповідати.",
|
"upgradeDescription": "Ви впевнені, що хочете виконати оновлення системи? Ця операція може зайняти кілька хвилин, протягом яких система може не відповідати.",
|
||||||
"userAgent": "Агент користувача",
|
"userAgent": "Агент користувача",
|
||||||
"viewLogsAndManage": "Перегляд системних журналів, виконання оновлень системи та операцій перезавантаження"
|
"versionInfo": "Інформація про версію",
|
||||||
|
"viewLogsAndManage": "Перегляд системних журналів, виконання оновлень системи та операцій перезавантаження",
|
||||||
|
"viewNewVersion": "Переглянути нову версію",
|
||||||
|
"webVersion": "Веб/Адмін"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
"delete": "Xóa",
|
"delete": "Xóa",
|
||||||
"deleteSuccess": "Quy tắc đã được xóa thành công",
|
"deleteSuccess": "Quy tắc đã được xóa thành công",
|
||||||
"deleteWarning": "Bạn có chắc chắn muốn xóa quy tắc này không? Hành động này không thể hoàn tác.",
|
"deleteWarning": "Bạn có chắc chắn muốn xóa quy tắc này không? Hành động này không thể hoàn tác.",
|
||||||
"description": "Mô tả Quy tắc",
|
|
||||||
"downloadTemplate": "Tải Mẫu",
|
"downloadTemplate": "Tải Mẫu",
|
||||||
"edit": "Chỉnh sửa",
|
"edit": "Chỉnh sửa",
|
||||||
"editRule": "Chỉnh sửa Quy tắc",
|
"editRule": "Chỉnh sửa Quy tắc",
|
||||||
@@ -22,7 +21,6 @@
|
|||||||
"import": "Nhập khẩu",
|
"import": "Nhập khẩu",
|
||||||
"importFailed": "Nhập khẩu không thành công",
|
"importFailed": "Nhập khẩu không thành công",
|
||||||
"importSuccess": "Nhập khẩu thành công",
|
"importSuccess": "Nhập khẩu thành công",
|
||||||
"importYaml": "Nhập YAML",
|
|
||||||
"importYamlDescription": "Nhập quy tắc từ tệp YAML, hệ thống sẽ tự động tạo nhóm quy tắc dựa trên tên nhóm chính sách",
|
"importYamlDescription": "Nhập quy tắc từ tệp YAML, hệ thống sẽ tự động tạo nhóm quy tắc dựa trên tên nhóm chính sách",
|
||||||
"importYamlRules": "Nhập Quy tắc YAML",
|
"importYamlRules": "Nhập Quy tắc YAML",
|
||||||
"importing": "Đang nhập khẩu...",
|
"importing": "Đang nhập khẩu...",
|
||||||
@@ -31,11 +29,9 @@
|
|||||||
"noValidRules": "Không tìm thấy quy tắc hợp lệ",
|
"noValidRules": "Không tìm thấy quy tắc hợp lệ",
|
||||||
"pleaseUploadFile": "Vui lòng tải lên một tệp YAML",
|
"pleaseUploadFile": "Vui lòng tải lên một tệp YAML",
|
||||||
"preview": "Xem trước",
|
"preview": "Xem trước",
|
||||||
"rules": "Nội dung Quy tắc",
|
|
||||||
"rulesFormat": "Định dạng quy tắc: loại quy tắc, nội dung khớp, [chính sách], trong đó chính sách là tùy chọn.\nNếu không chỉ định chính sách, tên nhóm quy tắc hiện tại sẽ được sử dụng tự động. Ví dụ:",
|
"rulesFormat": "Định dạng quy tắc: loại quy tắc, nội dung khớp, [chính sách], trong đó chính sách là tùy chọn.\nNếu không chỉ định chính sách, tên nhóm quy tắc hiện tại sẽ được sử dụng tự động. Ví dụ:",
|
||||||
"rulesLabel": "Nội dung Quy tắc",
|
"rulesLabel": "Nội dung Quy tắc",
|
||||||
"searchRule": "Tìm kiếm tên quy tắc",
|
"searchRule": "Tìm kiếm tên quy tắc",
|
||||||
"selectFile": "Chọn Tệp",
|
|
||||||
"selectTags": "Chọn thẻ nút",
|
"selectTags": "Chọn thẻ nút",
|
||||||
"tags": "Thẻ Nút",
|
"tags": "Thẻ Nút",
|
||||||
"tagsLabel": "Thẻ Nút",
|
"tagsLabel": "Thẻ Nút",
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "Giới hạn mua/lần",
|
"quota": "Giới hạn mua/lần",
|
||||||
"replacement": "Đặt lại giá/lần",
|
"replacement": "Đặt lại giá/lần",
|
||||||
"sell": "Bán hàng",
|
"sell": "Bán hàng",
|
||||||
"show": "Hiển thị trang chủ",
|
"show": "Hiển thị",
|
||||||
"sold": "Số lượng đăng ký",
|
"sold": "Số lượng đăng ký",
|
||||||
"subscribe": "Đăng ký",
|
"subscribe": "Đăng ký",
|
||||||
"subscribeGroup": "Nhóm đăng ký",
|
"subscribeGroup": "Nhóm đăng ký",
|
||||||
|
|||||||
@@ -6,15 +6,18 @@
|
|||||||
"confirmSystemUpgrade": "Xác nhận nâng cấp hệ thống",
|
"confirmSystemUpgrade": "Xác nhận nâng cấp hệ thống",
|
||||||
"confirmUpgrade": "Xác nhận nâng cấp",
|
"confirmUpgrade": "Xác nhận nâng cấp",
|
||||||
"currentVersion": "Phiên bản hệ thống hiện tại:",
|
"currentVersion": "Phiên bản hệ thống hiện tại:",
|
||||||
|
"developmentVersion": "Phiên bản phát triển",
|
||||||
"errors": "Lỗi",
|
"errors": "Lỗi",
|
||||||
"ip": "IP",
|
"ip": "Địa chỉ IP",
|
||||||
"lastUpdated": "Cập nhật lần cuối:",
|
"lastUpdated": "Cập nhật lần cuối:",
|
||||||
|
"newVersionAvailable": "Phiên bản mới",
|
||||||
"none": "Không có",
|
"none": "Không có",
|
||||||
"query": "Truy vấn",
|
"query": "Truy vấn",
|
||||||
"rebootDescription": "Bạn có chắc chắn muốn khởi động lại hệ thống không? Thao tác này sẽ gây gián đoạn dịch vụ trong thời gian ngắn.",
|
"rebootDescription": "Bạn có chắc chắn muốn khởi động lại hệ thống không? Thao tác này sẽ gây gián đoạn dịch vụ trong thời gian ngắn.",
|
||||||
"rebooting": "Đang khởi động lại hệ thống...",
|
"rebooting": "Đang khởi động lại hệ thống...",
|
||||||
"refreshLogs": "Làm mới nhật ký",
|
"refreshLogs": "Làm mới nhật ký",
|
||||||
"request": "Yêu cầu",
|
"request": "Yêu cầu",
|
||||||
|
"serverVersion": "Máy chủ",
|
||||||
"status": "Trạng thái",
|
"status": "Trạng thái",
|
||||||
"systemLogs": "Nhật ký hệ thống",
|
"systemLogs": "Nhật ký hệ thống",
|
||||||
"systemReboot": "Khởi động lại hệ thống",
|
"systemReboot": "Khởi động lại hệ thống",
|
||||||
@@ -22,5 +25,8 @@
|
|||||||
"systemUpgrade": "Nâng cấp hệ thống",
|
"systemUpgrade": "Nâng cấp hệ thống",
|
||||||
"upgradeDescription": "Bạn có chắc chắn muốn thực hiện nâng cấp hệ thống không? Thao tác này có thể mất vài phút và trong thời gian đó hệ thống có thể không phản hồi.",
|
"upgradeDescription": "Bạn có chắc chắn muốn thực hiện nâng cấp hệ thống không? Thao tác này có thể mất vài phút và trong thời gian đó hệ thống có thể không phản hồi.",
|
||||||
"userAgent": "Tác nhân người dùng",
|
"userAgent": "Tác nhân người dùng",
|
||||||
"viewLogsAndManage": "Xem nhật ký hệ thống, thực hiện nâng cấp và khởi động lại hệ thống"
|
"versionInfo": "Thông tin phiên bản",
|
||||||
|
"viewLogsAndManage": "Xem nhật ký hệ thống, thực hiện nâng cấp và khởi động lại hệ thống",
|
||||||
|
"viewNewVersion": "Xem phiên bản mới",
|
||||||
|
"webVersion": "Web/Quản trị"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,10 +8,12 @@
|
|||||||
"createRule": "添加规则",
|
"createRule": "添加规则",
|
||||||
"createSuccess": "创建规则成功",
|
"createSuccess": "创建规则成功",
|
||||||
"createdAt": "创建时间",
|
"createdAt": "创建时间",
|
||||||
|
"default": "默认",
|
||||||
|
"defaultRule": "默认规则",
|
||||||
"delete": "删除",
|
"delete": "删除",
|
||||||
"deleteSuccess": "删除规则成功",
|
"deleteSuccess": "删除规则成功",
|
||||||
"deleteWarning": "确定要删除所选规则吗?此操作不可恢复。",
|
"deleteWarning": "确定要删除所选规则吗?此操作不可恢复。",
|
||||||
"description": "规则描述",
|
"direct": "直连",
|
||||||
"downloadTemplate": "下载模板",
|
"downloadTemplate": "下载模板",
|
||||||
"edit": "编辑",
|
"edit": "编辑",
|
||||||
"editRule": "编辑规则",
|
"editRule": "编辑规则",
|
||||||
@@ -22,7 +24,6 @@
|
|||||||
"import": "导入",
|
"import": "导入",
|
||||||
"importFailed": "导入失败",
|
"importFailed": "导入失败",
|
||||||
"importSuccess": "导入成功",
|
"importSuccess": "导入成功",
|
||||||
"importYaml": "导入YAML",
|
|
||||||
"importYamlDescription": "从YAML文件导入规则,系统将自动根据策略组名称分组创建规则",
|
"importYamlDescription": "从YAML文件导入规则,系统将自动根据策略组名称分组创建规则",
|
||||||
"importYamlRules": "导入YAML规则",
|
"importYamlRules": "导入YAML规则",
|
||||||
"importing": "导入中...",
|
"importing": "导入中...",
|
||||||
@@ -31,13 +32,14 @@
|
|||||||
"noValidRules": "没有找到有效的规则",
|
"noValidRules": "没有找到有效的规则",
|
||||||
"pleaseUploadFile": "请上传YAML文件",
|
"pleaseUploadFile": "请上传YAML文件",
|
||||||
"preview": "预览",
|
"preview": "预览",
|
||||||
"rules": "规则内容",
|
"reject": "拒绝",
|
||||||
"rulesFormat": "规则格式说明:规则类型,匹配内容,[策略], 其中策略为可选项。\n不指定策略时,将自动使用当前规则组名称, 示例:",
|
"rulesFormat": "规则格式说明:规则类型,匹配内容,[策略], 其中策略为可选项。\n不指定策略时,将自动使用当前规则组名称, 示例:",
|
||||||
"rulesLabel": "规则内容",
|
"rulesLabel": "规则内容",
|
||||||
"searchRule": "搜索规则名称",
|
"searchRule": "搜索规则名称",
|
||||||
"selectFile": "选择文件",
|
|
||||||
"selectTags": "选择节点标签",
|
"selectTags": "选择节点标签",
|
||||||
|
"selectType": "选择规则类型",
|
||||||
"tags": "节点标签",
|
"tags": "节点标签",
|
||||||
"tagsLabel": "节点标签",
|
"tagsLabel": "节点标签",
|
||||||
|
"type": "规则类型",
|
||||||
"updateSuccess": "更新规则成功"
|
"updateSuccess": "更新规则成功"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,16 +63,20 @@
|
|||||||
"edit": "编辑",
|
"edit": "编辑",
|
||||||
"editNode": "编辑节点",
|
"editNode": "编辑节点",
|
||||||
"enable": "启用",
|
"enable": "启用",
|
||||||
|
"id": "ID",
|
||||||
"form": {
|
"form": {
|
||||||
"allowInsecure": "允许不安全",
|
"allowInsecure": "允许不安全",
|
||||||
"cancel": "取消",
|
"cancel": "取消",
|
||||||
"city": "城市",
|
"city": "城市",
|
||||||
"confirm": "确认",
|
"confirm": "确认",
|
||||||
|
"congestionController": "拥塞控制",
|
||||||
"country": "国家",
|
"country": "国家",
|
||||||
|
"disableSni": "禁用SNI",
|
||||||
"edit": "编辑",
|
"edit": "编辑",
|
||||||
"editSecurity": "编辑安全性配置",
|
"editSecurity": "编辑安全性配置",
|
||||||
"enableTLS": "启用TLS",
|
"enableTLS": "启用TLS",
|
||||||
"encryptionMethod": "加密方法",
|
"encryptionMethod": "加密方法",
|
||||||
|
"fingerprint": "指纹",
|
||||||
"flow": "流控算法",
|
"flow": "流控算法",
|
||||||
"groupId": "节点组",
|
"groupId": "节点组",
|
||||||
"hopInterval": "跳跃间隔",
|
"hopInterval": "跳跃间隔",
|
||||||
@@ -85,6 +89,7 @@
|
|||||||
"pleaseSelect": "请选择",
|
"pleaseSelect": "请选择",
|
||||||
"port": "服务端口",
|
"port": "服务端口",
|
||||||
"protocol": "协议",
|
"protocol": "协议",
|
||||||
|
"reduceRtt": "减少RTT",
|
||||||
"relayHost": "中转地址",
|
"relayHost": "中转地址",
|
||||||
"relayMode": "中转模式",
|
"relayMode": "中转模式",
|
||||||
"relayModeOptions": {
|
"relayModeOptions": {
|
||||||
@@ -128,6 +133,7 @@
|
|||||||
"transport": "传输协议",
|
"transport": "传输协议",
|
||||||
"transportConfig": "传输协议配置",
|
"transportConfig": "传输协议配置",
|
||||||
"transportHost": "传输服务地址",
|
"transportHost": "传输服务地址",
|
||||||
|
"udpRelayMode": "UDP中继模式",
|
||||||
"transportPath": "传输路径",
|
"transportPath": "传输路径",
|
||||||
"transportServerName": "传输服务名称"
|
"transportServerName": "传输服务名称"
|
||||||
},
|
},
|
||||||
@@ -136,6 +142,7 @@
|
|||||||
"name": "名称",
|
"name": "名称",
|
||||||
"node": "节点",
|
"node": "节点",
|
||||||
"nodeGroup": "节点组",
|
"nodeGroup": "节点组",
|
||||||
|
"noData": "--",
|
||||||
"normal": "正常",
|
"normal": "正常",
|
||||||
"onlineCount": "在线人数",
|
"onlineCount": "在线人数",
|
||||||
"onlineUsers": "在线用户",
|
"onlineUsers": "在线用户",
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "限购/次",
|
"quota": "限购/次",
|
||||||
"replacement": "重置价格/次",
|
"replacement": "重置价格/次",
|
||||||
"sell": "销售",
|
"sell": "销售",
|
||||||
"show": "首页显示",
|
"show": "显示",
|
||||||
"sold": "订阅数量",
|
"sold": "订阅数量",
|
||||||
"subscribe": "订阅",
|
"subscribe": "订阅",
|
||||||
"subscribeGroup": "订阅组",
|
"subscribeGroup": "订阅组",
|
||||||
|
|||||||
@@ -1,26 +1,32 @@
|
|||||||
{
|
{
|
||||||
"caller": "Caller",
|
"caller": "调用者",
|
||||||
"cancel": "取消",
|
"cancel": "取消",
|
||||||
"confirmReboot": "确认重启",
|
"confirmReboot": "确认重启",
|
||||||
"confirmSystemReboot": "确认系统重启",
|
"confirmSystemReboot": "确认系统重启",
|
||||||
"confirmSystemUpgrade": "确认系统升级",
|
"confirmSystemUpgrade": "确认系统升级",
|
||||||
"confirmUpgrade": "确认升级",
|
"confirmUpgrade": "确认升级",
|
||||||
"currentVersion": "当前系统版本:",
|
"currentVersion": "当前系统版本:",
|
||||||
"errors": "Errors",
|
"developmentVersion": "开发版",
|
||||||
"ip": "IP",
|
"errors": "错误",
|
||||||
|
"ip": "IP地址",
|
||||||
"lastUpdated": "最后更新:",
|
"lastUpdated": "最后更新:",
|
||||||
"none": "None",
|
"newVersionAvailable": "有新版本",
|
||||||
"query": "Query",
|
"none": "无",
|
||||||
|
"query": "查询",
|
||||||
"rebootDescription": "您确定要重启系统吗?此操作将导致短暂的服务中断。",
|
"rebootDescription": "您确定要重启系统吗?此操作将导致短暂的服务中断。",
|
||||||
"rebooting": "正在重启系统...",
|
"rebooting": "正在重启系统...",
|
||||||
"refreshLogs": "刷新日志",
|
"refreshLogs": "刷新日志",
|
||||||
"request": "Request",
|
"request": "请求",
|
||||||
"status": "Status",
|
"serverVersion": "服务端",
|
||||||
|
"status": "状态",
|
||||||
"systemLogs": "系统日志",
|
"systemLogs": "系统日志",
|
||||||
"systemReboot": "系统重启",
|
"systemReboot": "系统重启",
|
||||||
"systemServices": "系统服务",
|
"systemServices": "系统服务",
|
||||||
"systemUpgrade": "系统升级",
|
"systemUpgrade": "系统升级",
|
||||||
"upgradeDescription": "您确定要执行系统升级吗?此操作可能需要几分钟时间,期间系统可能无法响应。",
|
"upgradeDescription": "您确定要执行系统升级吗?此操作可能需要几分钟时间,期间系统可能无法响应。",
|
||||||
"userAgent": "User Agent",
|
"userAgent": "用户代理",
|
||||||
"viewLogsAndManage": "查看系统日志,执行系统升级和重启操作"
|
"versionInfo": "版本信息",
|
||||||
|
"viewLogsAndManage": "查看系统日志,执行系统升级和重启操作",
|
||||||
|
"viewNewVersion": "查看新版本",
|
||||||
|
"webVersion": "用户端/管理端"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,10 +8,10 @@
|
|||||||
"createRule": "新增規則",
|
"createRule": "新增規則",
|
||||||
"createSuccess": "規則創建成功",
|
"createSuccess": "規則創建成功",
|
||||||
"createdAt": "創建於",
|
"createdAt": "創建於",
|
||||||
|
"defaultRule": "默認規則",
|
||||||
"delete": "刪除",
|
"delete": "刪除",
|
||||||
"deleteSuccess": "規則刪除成功",
|
"deleteSuccess": "規則刪除成功",
|
||||||
"deleteWarning": "您確定要刪除這條規則嗎?此操作無法撤銷。",
|
"deleteWarning": "您確定要刪除這條規則嗎?此操作無法撤銷。",
|
||||||
"description": "規則描述",
|
|
||||||
"downloadTemplate": "下載模板",
|
"downloadTemplate": "下載模板",
|
||||||
"edit": "編輯",
|
"edit": "編輯",
|
||||||
"editRule": "編輯規則",
|
"editRule": "編輯規則",
|
||||||
@@ -22,7 +22,6 @@
|
|||||||
"import": "導入",
|
"import": "導入",
|
||||||
"importFailed": "導入失敗",
|
"importFailed": "導入失敗",
|
||||||
"importSuccess": "導入成功",
|
"importSuccess": "導入成功",
|
||||||
"importYaml": "導入 YAML",
|
|
||||||
"importYamlDescription": "從 YAML 文件導入規則,系統將根據策略組名稱自動創建規則組",
|
"importYamlDescription": "從 YAML 文件導入規則,系統將根據策略組名稱自動創建規則組",
|
||||||
"importYamlRules": "導入 YAML 規則",
|
"importYamlRules": "導入 YAML 規則",
|
||||||
"importing": "導入中...",
|
"importing": "導入中...",
|
||||||
@@ -31,13 +30,13 @@
|
|||||||
"noValidRules": "未找到有效的規則",
|
"noValidRules": "未找到有效的規則",
|
||||||
"pleaseUploadFile": "請上傳 YAML 文件",
|
"pleaseUploadFile": "請上傳 YAML 文件",
|
||||||
"preview": "預覽",
|
"preview": "預覽",
|
||||||
"rules": "規則內容",
|
|
||||||
"rulesFormat": "規則格式:規則類型,匹配內容,[策略],其中策略是可選的。\n如果未指定策略,將自動使用當前規則組名稱。示例:",
|
"rulesFormat": "規則格式:規則類型,匹配內容,[策略],其中策略是可選的。\n如果未指定策略,將自動使用當前規則組名稱。示例:",
|
||||||
"rulesLabel": "規則內容",
|
"rulesLabel": "規則內容",
|
||||||
"searchRule": "搜索規則名稱",
|
"searchRule": "搜索規則名稱",
|
||||||
"selectFile": "選擇文件",
|
|
||||||
"selectTags": "選擇節點標籤",
|
"selectTags": "選擇節點標籤",
|
||||||
|
"selectType": "選擇規則類型",
|
||||||
"tags": "節點標籤",
|
"tags": "節點標籤",
|
||||||
"tagsLabel": "節點標籤",
|
"tagsLabel": "節點標籤",
|
||||||
|
"type": "規則類型",
|
||||||
"updateSuccess": "規則更新成功"
|
"updateSuccess": "規則更新成功"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
"quota": "限購/次",
|
"quota": "限購/次",
|
||||||
"replacement": "重置價格/次",
|
"replacement": "重置價格/次",
|
||||||
"sell": "銷售",
|
"sell": "銷售",
|
||||||
"show": "首頁顯示",
|
"show": "顯示",
|
||||||
"sold": "訂閱數量",
|
"sold": "訂閱數量",
|
||||||
"subscribe": "訂閱",
|
"subscribe": "訂閱",
|
||||||
"subscribeGroup": "訂閱組",
|
"subscribeGroup": "訂閱組",
|
||||||
|
|||||||
@@ -6,15 +6,18 @@
|
|||||||
"confirmSystemUpgrade": "確認系統升級",
|
"confirmSystemUpgrade": "確認系統升級",
|
||||||
"confirmUpgrade": "確認升級",
|
"confirmUpgrade": "確認升級",
|
||||||
"currentVersion": "目前系統版本:",
|
"currentVersion": "目前系統版本:",
|
||||||
|
"developmentVersion": "開發版",
|
||||||
"errors": "錯誤",
|
"errors": "錯誤",
|
||||||
"ip": "IP",
|
"ip": "IP位址",
|
||||||
"lastUpdated": "最後更新:",
|
"lastUpdated": "最後更新:",
|
||||||
|
"newVersionAvailable": "有新版本",
|
||||||
"none": "無",
|
"none": "無",
|
||||||
"query": "查詢",
|
"query": "查詢",
|
||||||
"rebootDescription": "您確定要重新啟動系統嗎?此操作將導致短暫的服務中斷。",
|
"rebootDescription": "您確定要重新啟動系統嗎?此操作將導致短暫的服務中斷。",
|
||||||
"rebooting": "正在重新啟動系統...",
|
"rebooting": "正在重新啟動系統...",
|
||||||
"refreshLogs": "重新整理日誌",
|
"refreshLogs": "重新整理日誌",
|
||||||
"request": "請求",
|
"request": "請求",
|
||||||
|
"serverVersion": "伺服器端",
|
||||||
"status": "狀態",
|
"status": "狀態",
|
||||||
"systemLogs": "系統日誌",
|
"systemLogs": "系統日誌",
|
||||||
"systemReboot": "系統重啟",
|
"systemReboot": "系統重啟",
|
||||||
@@ -22,5 +25,8 @@
|
|||||||
"systemUpgrade": "系統升級",
|
"systemUpgrade": "系統升級",
|
||||||
"upgradeDescription": "您確定要執行系統升級嗎?此操作可能需要幾分鐘時間,期間系統可能無法回應。",
|
"upgradeDescription": "您確定要執行系統升級嗎?此操作可能需要幾分鐘時間,期間系統可能無法回應。",
|
||||||
"userAgent": "使用者代理",
|
"userAgent": "使用者代理",
|
||||||
"viewLogsAndManage": "查看系統日誌,執行系統升級和重新啟動操作"
|
"versionInfo": "版本資訊",
|
||||||
|
"viewLogsAndManage": "查看系統日誌,執行系統升級和重新啟動操作",
|
||||||
|
"viewNewVersion": "查看新版本",
|
||||||
|
"webVersion": "使用者端/管理端"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9968,3 +9968,4 @@ rules:
|
|||||||
- PROCESS-NAME,Weiyun.exe,🎯 全球直连
|
- PROCESS-NAME,Weiyun.exe,🎯 全球直连
|
||||||
- PROCESS-NAME,baidunetdisk.exe,🎯 全球直连
|
- PROCESS-NAME,baidunetdisk.exe,🎯 全球直连
|
||||||
- GEOIP,CN,🎯 全球直连
|
- GEOIP,CN,🎯 全球直连
|
||||||
|
- MATCH,🚀 节点选择
|
||||||
|
|||||||
@@ -17,3 +17,11 @@ export async function restartSystem(options?: { [key: string]: any }) {
|
|||||||
...(options || {}),
|
...(options || {}),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Get Version GET /v1/admin/tool/version */
|
||||||
|
export async function getVersion(options?: { [key: string]: any }) {
|
||||||
|
return request<API.Response & { data?: API.VersionResponse }>('/v1/admin/tool/version', {
|
||||||
|
method: 'GET',
|
||||||
|
...(options || {}),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|||||||
+61
-3
@@ -28,6 +28,11 @@ declare namespace API {
|
|||||||
updated_at: number;
|
updated_at: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type AnyTLS = {
|
||||||
|
port: number;
|
||||||
|
security_config: SecurityConfig;
|
||||||
|
};
|
||||||
|
|
||||||
type Application = {
|
type Application = {
|
||||||
id: number;
|
id: number;
|
||||||
icon: string;
|
icon: string;
|
||||||
@@ -75,6 +80,40 @@ declare namespace API {
|
|||||||
is_default: boolean;
|
is_default: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type AppUserSubcbribe = {
|
||||||
|
id: number;
|
||||||
|
name: string;
|
||||||
|
upload: number;
|
||||||
|
traffic: number;
|
||||||
|
download: number;
|
||||||
|
device_limit: number;
|
||||||
|
start_time: string;
|
||||||
|
expire_time: string;
|
||||||
|
list: AppUserSubscbribeNode[];
|
||||||
|
};
|
||||||
|
|
||||||
|
type AppUserSubscbribeNode = {
|
||||||
|
id: number;
|
||||||
|
name: string;
|
||||||
|
uuid: string;
|
||||||
|
protocol: string;
|
||||||
|
relay_mode: string;
|
||||||
|
relay_node: string;
|
||||||
|
server_addr: string;
|
||||||
|
speed_limit: number;
|
||||||
|
tags: string[];
|
||||||
|
traffic: number;
|
||||||
|
traffic_ratio: number;
|
||||||
|
upload: number;
|
||||||
|
config: string;
|
||||||
|
country: string;
|
||||||
|
city: string;
|
||||||
|
latitude: string;
|
||||||
|
longitude: string;
|
||||||
|
created_at: number;
|
||||||
|
download: number;
|
||||||
|
};
|
||||||
|
|
||||||
type AuthConfig = {
|
type AuthConfig = {
|
||||||
mobile: MobileAuthenticateConfig;
|
mobile: MobileAuthenticateConfig;
|
||||||
email: EmailAuthticateConfig;
|
email: EmailAuthticateConfig;
|
||||||
@@ -257,8 +296,10 @@ declare namespace API {
|
|||||||
type CreateRuleGroupRequest = {
|
type CreateRuleGroupRequest = {
|
||||||
name: string;
|
name: string;
|
||||||
icon: string;
|
icon: string;
|
||||||
|
type: string;
|
||||||
tags: string[];
|
tags: string[];
|
||||||
rules: string;
|
rules: string;
|
||||||
|
default: boolean;
|
||||||
enable: boolean;
|
enable: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -598,7 +639,7 @@ declare namespace API {
|
|||||||
type GetNodeListParams = {
|
type GetNodeListParams = {
|
||||||
page: number;
|
page: number;
|
||||||
size: number;
|
size: number;
|
||||||
tag?: string;
|
tags?: string;
|
||||||
group_id?: number;
|
group_id?: number;
|
||||||
search?: string;
|
search?: string;
|
||||||
};
|
};
|
||||||
@@ -610,7 +651,7 @@ declare namespace API {
|
|||||||
type GetNodeServerListRequest = {
|
type GetNodeServerListRequest = {
|
||||||
page: number;
|
page: number;
|
||||||
size: number;
|
size: number;
|
||||||
tag?: string;
|
tags?: string;
|
||||||
group_id?: number;
|
group_id?: number;
|
||||||
search?: string;
|
search?: string;
|
||||||
};
|
};
|
||||||
@@ -1077,7 +1118,7 @@ declare namespace API {
|
|||||||
type PurchaseOrderRequest = {
|
type PurchaseOrderRequest = {
|
||||||
subscribe_id: number;
|
subscribe_id: number;
|
||||||
quantity: number;
|
quantity: number;
|
||||||
payment: number;
|
payment?: number;
|
||||||
coupon?: string;
|
coupon?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1130,6 +1171,11 @@ declare namespace API {
|
|||||||
total: number;
|
total: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type QueryUserAffiliateCountResponse = {
|
||||||
|
registers: number;
|
||||||
|
total_commission: number;
|
||||||
|
};
|
||||||
|
|
||||||
type QueryUserAffiliateListRequest = {
|
type QueryUserAffiliateListRequest = {
|
||||||
page: number;
|
page: number;
|
||||||
size: number;
|
size: number;
|
||||||
@@ -1239,9 +1285,11 @@ declare namespace API {
|
|||||||
id: number;
|
id: number;
|
||||||
icon: string;
|
icon: string;
|
||||||
name: string;
|
name: string;
|
||||||
|
type: string;
|
||||||
tags: string[];
|
tags: string[];
|
||||||
rules: string;
|
rules: string;
|
||||||
enable: boolean;
|
enable: boolean;
|
||||||
|
default: boolean;
|
||||||
created_at: number;
|
created_at: number;
|
||||||
updated_at: number;
|
updated_at: number;
|
||||||
};
|
};
|
||||||
@@ -1455,6 +1503,10 @@ declare namespace API {
|
|||||||
|
|
||||||
type Tuic = {
|
type Tuic = {
|
||||||
port: number;
|
port: number;
|
||||||
|
disable_sni: boolean;
|
||||||
|
reduce_rtt: boolean;
|
||||||
|
udp_relay_mode: string;
|
||||||
|
congestion_controller: string;
|
||||||
security_config: SecurityConfig;
|
security_config: SecurityConfig;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1581,9 +1633,11 @@ declare namespace API {
|
|||||||
type UpdateRuleGroupRequest = {
|
type UpdateRuleGroupRequest = {
|
||||||
id: number;
|
id: number;
|
||||||
icon: string;
|
icon: string;
|
||||||
|
type: string;
|
||||||
name: string;
|
name: string;
|
||||||
tags: string[];
|
tags: string[];
|
||||||
rules: string;
|
rules: string;
|
||||||
|
default: boolean;
|
||||||
enable: boolean;
|
enable: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1808,6 +1862,10 @@ declare namespace API {
|
|||||||
enable_reset_password_verify: boolean;
|
enable_reset_password_verify: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type VersionResponse = {
|
||||||
|
version: string;
|
||||||
|
};
|
||||||
|
|
||||||
type Vless = {
|
type Vless = {
|
||||||
port: number;
|
port: number;
|
||||||
flow: string;
|
flow: string;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
/* eslint-disable */
|
|
||||||
import request from '@/utils/request';
|
import request from '@/utils/request';
|
||||||
|
|
||||||
/** Apple Login Callback POST /v1/auth/oauth/callback/apple */
|
/** Apple Login Callback POST /v1/auth/oauth/callback/apple */
|
||||||
|
|||||||
+51
-1
@@ -28,6 +28,11 @@ declare namespace API {
|
|||||||
updated_at: number;
|
updated_at: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type AnyTLS = {
|
||||||
|
port: number;
|
||||||
|
security_config: SecurityConfig;
|
||||||
|
};
|
||||||
|
|
||||||
type AppleLoginCallbackRequest = {
|
type AppleLoginCallbackRequest = {
|
||||||
code: string;
|
code: string;
|
||||||
id_token: string;
|
id_token: string;
|
||||||
@@ -81,6 +86,40 @@ declare namespace API {
|
|||||||
is_default: boolean;
|
is_default: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type AppUserSubcbribe = {
|
||||||
|
id: number;
|
||||||
|
name: string;
|
||||||
|
upload: number;
|
||||||
|
traffic: number;
|
||||||
|
download: number;
|
||||||
|
device_limit: number;
|
||||||
|
start_time: string;
|
||||||
|
expire_time: string;
|
||||||
|
list: AppUserSubscbribeNode[];
|
||||||
|
};
|
||||||
|
|
||||||
|
type AppUserSubscbribeNode = {
|
||||||
|
id: number;
|
||||||
|
name: string;
|
||||||
|
uuid: string;
|
||||||
|
protocol: string;
|
||||||
|
relay_mode: string;
|
||||||
|
relay_node: string;
|
||||||
|
server_addr: string;
|
||||||
|
speed_limit: number;
|
||||||
|
tags: string[];
|
||||||
|
traffic: number;
|
||||||
|
traffic_ratio: number;
|
||||||
|
upload: number;
|
||||||
|
config: string;
|
||||||
|
country: string;
|
||||||
|
city: string;
|
||||||
|
latitude: string;
|
||||||
|
longitude: string;
|
||||||
|
created_at: number;
|
||||||
|
download: number;
|
||||||
|
};
|
||||||
|
|
||||||
type AuthConfig = {
|
type AuthConfig = {
|
||||||
mobile: MobileAuthenticateConfig;
|
mobile: MobileAuthenticateConfig;
|
||||||
email: EmailAuthticateConfig;
|
email: EmailAuthticateConfig;
|
||||||
@@ -473,7 +512,7 @@ declare namespace API {
|
|||||||
type PurchaseOrderRequest = {
|
type PurchaseOrderRequest = {
|
||||||
subscribe_id: number;
|
subscribe_id: number;
|
||||||
quantity: number;
|
quantity: number;
|
||||||
payment: number;
|
payment?: number;
|
||||||
coupon?: string;
|
coupon?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -526,6 +565,11 @@ declare namespace API {
|
|||||||
total: number;
|
total: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type QueryUserAffiliateCountResponse = {
|
||||||
|
registers: number;
|
||||||
|
total_commission: number;
|
||||||
|
};
|
||||||
|
|
||||||
type QueryUserAffiliateListRequest = {
|
type QueryUserAffiliateListRequest = {
|
||||||
page: number;
|
page: number;
|
||||||
size: number;
|
size: number;
|
||||||
@@ -652,9 +696,11 @@ declare namespace API {
|
|||||||
id: number;
|
id: number;
|
||||||
icon: string;
|
icon: string;
|
||||||
name: string;
|
name: string;
|
||||||
|
type: string;
|
||||||
tags: string[];
|
tags: string[];
|
||||||
rules: string;
|
rules: string;
|
||||||
enable: boolean;
|
enable: boolean;
|
||||||
|
default: boolean;
|
||||||
created_at: number;
|
created_at: number;
|
||||||
updated_at: number;
|
updated_at: number;
|
||||||
};
|
};
|
||||||
@@ -830,6 +876,10 @@ declare namespace API {
|
|||||||
|
|
||||||
type Tuic = {
|
type Tuic = {
|
||||||
port: number;
|
port: number;
|
||||||
|
disable_sni: boolean;
|
||||||
|
reduce_rtt: boolean;
|
||||||
|
udp_relay_mode: string;
|
||||||
|
congestion_controller: string;
|
||||||
security_config: SecurityConfig;
|
security_config: SecurityConfig;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ export default function Page() {
|
|||||||
)}
|
)}
|
||||||
<div className='grid gap-4 md:grid-cols-2 lg:grid-cols-2 xl:grid-cols-3'>
|
<div className='grid gap-4 md:grid-cols-2 lg:grid-cols-2 xl:grid-cols-3'>
|
||||||
{data
|
{data
|
||||||
|
?.filter((item) => item.show)
|
||||||
?.filter((item) => (group ? item.group_id === Number(group) : true))
|
?.filter((item) => (group ? item.group_id === Number(group) : true))
|
||||||
?.map((item) => (
|
?.map((item) => (
|
||||||
<Card className='flex flex-col' key={item.id}>
|
<Card className='flex flex-col' key={item.id}>
|
||||||
|
|||||||
@@ -2,8 +2,29 @@ import { GlobalMap } from '@/components/main/global-map';
|
|||||||
import { Hero } from '@/components/main/hero';
|
import { Hero } from '@/components/main/hero';
|
||||||
import { ProductShowcase } from '@/components/main/product-showcase/index';
|
import { ProductShowcase } from '@/components/main/product-showcase/index';
|
||||||
import { Stats } from '@/components/main/stats';
|
import { Stats } from '@/components/main/stats';
|
||||||
|
import { queryUserInfo } from '@/services/user/user';
|
||||||
|
import { cookies } from 'next/headers';
|
||||||
|
import { redirect } from 'next/navigation';
|
||||||
|
|
||||||
|
export default async function Home() {
|
||||||
|
const Authorization = (await cookies()).get('Authorization')?.value;
|
||||||
|
|
||||||
|
if (Authorization) {
|
||||||
|
let user = null;
|
||||||
|
try {
|
||||||
|
user = await queryUserInfo({
|
||||||
|
skipErrorHandler: true,
|
||||||
|
Authorization,
|
||||||
|
}).then((res) => res.data.data);
|
||||||
|
} catch (error) {
|
||||||
|
console.log('Token validation failed:', error);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (user) {
|
||||||
|
redirect('/dashboard');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export default function Home() {
|
|
||||||
return (
|
return (
|
||||||
<main className='container space-y-16'>
|
<main className='container space-y-16'>
|
||||||
<Hero />
|
<Hero />
|
||||||
|
|||||||
+11
-10
@@ -8,21 +8,21 @@ import { NextIntlClientProvider } from 'next-intl';
|
|||||||
import { getLocale, getMessages } from 'next-intl/server';
|
import { getLocale, getMessages } from 'next-intl/server';
|
||||||
import { PublicEnvScript } from 'next-runtime-env';
|
import { PublicEnvScript } from 'next-runtime-env';
|
||||||
import { unstable_noStore as noStore } from 'next/cache';
|
import { unstable_noStore as noStore } from 'next/cache';
|
||||||
import { Geist, Geist_Mono } from 'next/font/google';
|
// import { Geist, Geist_Mono } from 'next/font/google';
|
||||||
import { cookies } from 'next/headers';
|
import { cookies } from 'next/headers';
|
||||||
import { Metadata, Viewport } from 'next/types';
|
import { Metadata, Viewport } from 'next/types';
|
||||||
import NextTopLoader from 'nextjs-toploader';
|
import NextTopLoader from 'nextjs-toploader';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
const fontSans = Geist({
|
// const fontSans = Geist({
|
||||||
subsets: ['latin'],
|
// subsets: ['latin'],
|
||||||
variable: '--font-sans',
|
// variable: '--font-sans',
|
||||||
});
|
// });
|
||||||
|
|
||||||
const fontMono = Geist_Mono({
|
// const fontMono = Geist_Mono({
|
||||||
subsets: ['latin'],
|
// subsets: ['latin'],
|
||||||
variable: '--font-mono',
|
// variable: '--font-mono',
|
||||||
});
|
// });
|
||||||
|
|
||||||
export async function generateMetadata(): Promise<Metadata> {
|
export async function generateMetadata(): Promise<Metadata> {
|
||||||
noStore();
|
noStore();
|
||||||
@@ -106,7 +106,8 @@ export default async function RootLayout({
|
|||||||
</head>
|
</head>
|
||||||
<body
|
<body
|
||||||
suppressHydrationWarning
|
suppressHydrationWarning
|
||||||
className={`${fontSans.variable} ${fontMono.variable} size-full min-h-[calc(100dvh-env(safe-area-inset-top))] font-sans antialiased`}
|
// ${fontSans.variable} ${fontMono.variable}
|
||||||
|
className={`size-full min-h-[calc(100dvh-env(safe-area-inset-top))] font-sans antialiased`}
|
||||||
>
|
>
|
||||||
<NextIntlClientProvider messages={messages}>
|
<NextIntlClientProvider messages={messages}>
|
||||||
<NextTopLoader showSpinner={false} />
|
<NextTopLoader showSpinner={false} />
|
||||||
|
|||||||
@@ -53,6 +53,12 @@ export function SubscribeBilling({ order }: Readonly<SubscribeBillingProps>) {
|
|||||||
<Display type='currency' value={order?.fee_amount} />
|
<Display type='currency' value={order?.fee_amount} />
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<span className='text-muted-foreground'>{t('billing.gift')}</span>
|
||||||
|
<span>
|
||||||
|
<Display type='currency' value={order?.gift_amount} />
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<Separator />
|
<Separator />
|
||||||
<div className='flex items-center justify-between font-semibold'>
|
<div className='flex items-center justify-between font-semibold'>
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import { Separator } from '@workspace/ui/components/separator';
|
|||||||
import { LoaderCircle } from 'lucide-react';
|
import { LoaderCircle } from 'lucide-react';
|
||||||
import { useTranslations } from 'next-intl';
|
import { useTranslations } from 'next-intl';
|
||||||
import { useRouter } from 'next/navigation';
|
import { useRouter } from 'next/navigation';
|
||||||
import { useCallback, useEffect, useState, useTransition } from 'react';
|
import { useCallback, useEffect, useRef, useState, useTransition } from 'react';
|
||||||
import { SubscribeBilling } from './billing';
|
import { SubscribeBilling } from './billing';
|
||||||
import { SubscribeDetail } from './detail';
|
import { SubscribeDetail } from './detail';
|
||||||
|
|
||||||
@@ -33,16 +33,28 @@ export default function Purchase({ subscribe, setSubscribe }: Readonly<PurchaseP
|
|||||||
coupon: '',
|
coupon: '',
|
||||||
});
|
});
|
||||||
const [loading, startTransition] = useTransition();
|
const [loading, startTransition] = useTransition();
|
||||||
|
const lastSuccessOrderRef = useRef<any>(null);
|
||||||
|
|
||||||
const { data: order } = useQuery({
|
const { data: order } = useQuery({
|
||||||
enabled: !!subscribe?.id,
|
enabled: !!subscribe?.id,
|
||||||
queryKey: ['preCreateOrder', params],
|
queryKey: ['preCreateOrder', params],
|
||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
|
try {
|
||||||
const { data } = await preCreateOrder({
|
const { data } = await preCreateOrder({
|
||||||
...params,
|
...params,
|
||||||
subscribe_id: subscribe?.id as number,
|
subscribe_id: subscribe?.id as number,
|
||||||
} as API.PurchaseOrderRequest);
|
} as API.PurchaseOrderRequest);
|
||||||
return data.data;
|
const result = data.data;
|
||||||
|
if (result) {
|
||||||
|
lastSuccessOrderRef.current = result;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
} catch (error) {
|
||||||
|
if (lastSuccessOrderRef.current) {
|
||||||
|
return lastSuccessOrderRef.current;
|
||||||
|
}
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import { Separator } from '@workspace/ui/components/separator';
|
|||||||
import { LoaderCircle } from 'lucide-react';
|
import { LoaderCircle } from 'lucide-react';
|
||||||
import { useTranslations } from 'next-intl';
|
import { useTranslations } from 'next-intl';
|
||||||
import { useRouter } from 'next/navigation';
|
import { useRouter } from 'next/navigation';
|
||||||
import { useCallback, useEffect, useState, useTransition } from 'react';
|
import { useCallback, useEffect, useRef, useState, useTransition } from 'react';
|
||||||
import { SubscribeBilling } from './billing';
|
import { SubscribeBilling } from './billing';
|
||||||
import { SubscribeDetail } from './detail';
|
import { SubscribeDetail } from './detail';
|
||||||
|
|
||||||
@@ -40,16 +40,28 @@ export default function Renewal({ id, subscribe }: Readonly<RenewalProps>) {
|
|||||||
user_subscribe_id: id,
|
user_subscribe_id: id,
|
||||||
});
|
});
|
||||||
const [loading, startTransition] = useTransition();
|
const [loading, startTransition] = useTransition();
|
||||||
|
const lastSuccessOrderRef = useRef<any>(null);
|
||||||
|
|
||||||
const { data: order } = useQuery({
|
const { data: order } = useQuery({
|
||||||
enabled: !!subscribe.id && open,
|
enabled: !!subscribe.id && open,
|
||||||
queryKey: ['preCreateOrder', params],
|
queryKey: ['preCreateOrder', params],
|
||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
|
try {
|
||||||
const { data } = await preCreateOrder({
|
const { data } = await preCreateOrder({
|
||||||
...params,
|
...params,
|
||||||
subscribe_id: subscribe.id,
|
subscribe_id: subscribe.id,
|
||||||
} as API.PurchaseOrderRequest);
|
} as API.PurchaseOrderRequest);
|
||||||
return data.data;
|
const result = data.data;
|
||||||
|
// 请求成功时保存数据
|
||||||
|
if (result) {
|
||||||
|
lastSuccessOrderRef.current = result;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
} catch (error) {
|
||||||
|
if (lastSuccessOrderRef.current) {
|
||||||
|
return lastSuccessOrderRef.current;
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ export const NEXT_PUBLIC_DEFAULT_LANGUAGE =
|
|||||||
export const NEXT_PUBLIC_SITE_URL = env('NEXT_PUBLIC_SITE_URL') ?? process.env.NEXT_PUBLIC_SITE_URL;
|
export const NEXT_PUBLIC_SITE_URL = env('NEXT_PUBLIC_SITE_URL') ?? process.env.NEXT_PUBLIC_SITE_URL;
|
||||||
export const NEXT_PUBLIC_API_URL = env('NEXT_PUBLIC_API_URL') ?? process.env.NEXT_PUBLIC_API_URL;
|
export const NEXT_PUBLIC_API_URL = env('NEXT_PUBLIC_API_URL') ?? process.env.NEXT_PUBLIC_API_URL;
|
||||||
export const NEXT_PUBLIC_CDN_URL =
|
export const NEXT_PUBLIC_CDN_URL =
|
||||||
env('NEXT_PUBLIC_CDN_URL') || process.env.NEXT_PUBLIC_CDN_URL || 'https://fastly.jsdelivr.net';
|
env('NEXT_PUBLIC_CDN_URL') || process.env.NEXT_PUBLIC_CDN_URL || 'https://cdn.jsdelivr.net';
|
||||||
|
|
||||||
export const NEXT_PUBLIC_DEFAULT_USER_EMAIL =
|
export const NEXT_PUBLIC_DEFAULT_USER_EMAIL =
|
||||||
env('NEXT_PUBLIC_DEFAULT_USER_EMAIL') ?? process.env.NEXT_PUBLIC_DEFAULT_USER_EMAIL;
|
env('NEXT_PUBLIC_DEFAULT_USER_EMAIL') ?? process.env.NEXT_PUBLIC_DEFAULT_USER_EMAIL;
|
||||||
|
|||||||
@@ -14,7 +14,8 @@
|
|||||||
"fee": "Poplatek",
|
"fee": "Poplatek",
|
||||||
"price": "Cena",
|
"price": "Cena",
|
||||||
"productDiscount": "Sleva na zboží",
|
"productDiscount": "Sleva na zboží",
|
||||||
"total": "Celková cena"
|
"total": "Celková cena",
|
||||||
|
"gift": "Odpočet dárku"
|
||||||
},
|
},
|
||||||
"buy": "Koupit",
|
"buy": "Koupit",
|
||||||
"buyNow": "Koupit nyní",
|
"buyNow": "Koupit nyní",
|
||||||
|
|||||||
@@ -14,7 +14,8 @@
|
|||||||
"fee": "Bearbeitungsgebühr",
|
"fee": "Bearbeitungsgebühr",
|
||||||
"price": "Preis",
|
"price": "Preis",
|
||||||
"productDiscount": "Produktrabatt",
|
"productDiscount": "Produktrabatt",
|
||||||
"total": "Gesamtpreis"
|
"total": "Gesamtpreis",
|
||||||
|
"gift": "Geschenkabzug"
|
||||||
},
|
},
|
||||||
"buy": "Kaufen",
|
"buy": "Kaufen",
|
||||||
"buyNow": "Jetzt kaufen",
|
"buyNow": "Jetzt kaufen",
|
||||||
|
|||||||
@@ -14,7 +14,8 @@
|
|||||||
"fee": "Fee",
|
"fee": "Fee",
|
||||||
"price": "Price",
|
"price": "Price",
|
||||||
"productDiscount": "Product Discount",
|
"productDiscount": "Product Discount",
|
||||||
"total": "Total"
|
"total": "Total",
|
||||||
|
"gift": "gift Deduction"
|
||||||
},
|
},
|
||||||
"buy": "Buy",
|
"buy": "Buy",
|
||||||
"buyNow": "Buy Now",
|
"buyNow": "Buy Now",
|
||||||
|
|||||||
@@ -14,7 +14,8 @@
|
|||||||
"fee": "Tarifa de servicio",
|
"fee": "Tarifa de servicio",
|
||||||
"price": "Precio",
|
"price": "Precio",
|
||||||
"productDiscount": "Descuento de producto",
|
"productDiscount": "Descuento de producto",
|
||||||
"total": "Precio total"
|
"total": "Precio total",
|
||||||
|
"gift": "Deducción de Regalo"
|
||||||
},
|
},
|
||||||
"buy": "Comprar",
|
"buy": "Comprar",
|
||||||
"buyNow": "Comprar ahora",
|
"buyNow": "Comprar ahora",
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user