feat: add deploy_mode field to namespace and implement sandbox testing for nginx config #1350

This commit is contained in:
0xJacky
2025-10-04 04:51:23 +00:00
parent de0467b9e7
commit e71293cd76
44 changed files with 1448 additions and 387 deletions
+2
View File
@@ -82,6 +82,7 @@ func AddNamespace(c *gin.Context) {
"sync_node_ids": "omitempty",
"post_sync_action": "omitempty,oneof=" + model.PostSyncActionNone + " " + model.PostSyncActionReloadNginx,
"upstream_test_type": "omitempty,oneof=" + model.UpstreamTestLocal + " " + model.UpstreamTestRemote + " " + model.UpstreamTestMirror,
"deploy_mode": "omitempty,oneof=" + model.DeployModeLocal + " " + model.DeployModeRemote,
}).
Create()
}
@@ -93,6 +94,7 @@ func ModifyNamespace(c *gin.Context) {
"sync_node_ids": "omitempty",
"post_sync_action": "omitempty,oneof=" + model.PostSyncActionNone + " " + model.PostSyncActionReloadNginx,
"upstream_test_type": "omitempty,oneof=" + model.UpstreamTestLocal + " " + model.UpstreamTestRemote + " " + model.UpstreamTestMirror,
"deploy_mode": "omitempty,oneof=" + model.DeployModeLocal + " " + model.DeployModeRemote,
}).
Modify()
}
+63
View File
@@ -4,7 +4,9 @@ import (
"net/http"
"github.com/0xJacky/Nginx-UI/internal/nginx"
"github.com/0xJacky/Nginx-UI/query"
"github.com/gin-gonic/gin"
"github.com/uozi-tech/cosy"
)
// Reload reloads the nginx
@@ -21,6 +23,67 @@ func TestConfig(c *gin.Context) {
})
}
// TestConfigWithNamespace tests nginx config in isolated sandbox for a specific namespace
func TestConfigWithNamespace(c *gin.Context) {
var req struct {
NamespaceID uint64 `json:"namespace_id" form:"namespace_id"`
}
if !cosy.BindAndValid(c, &req) {
return
}
// Get namespace and related configs
var namespaceInfo *nginx.NamespaceInfo
var sitePaths []string
var streamPaths []string
if req.NamespaceID > 0 {
// Fetch namespace
ns := query.Namespace
namespace, err := ns.Where(ns.ID.Eq(req.NamespaceID)).First()
if err != nil {
cosy.ErrHandler(c, err)
return
}
namespaceInfo = &nginx.NamespaceInfo{
ID: namespace.ID,
Name: namespace.Name,
DeployMode: namespace.DeployMode,
}
// Fetch sites belonging to this namespace
s := query.Site
sites, err := s.Where(s.NamespaceID.Eq(req.NamespaceID)).Find()
if err == nil {
for _, site := range sites {
sitePaths = append(sitePaths, site.Path)
}
}
// Fetch streams belonging to this namespace
st := query.Stream
streams, err := st.Where(st.NamespaceID.Eq(req.NamespaceID)).Find()
if err == nil {
for _, stream := range streams {
streamPaths = append(streamPaths, stream.Path)
}
}
}
// Use sandbox test with namespace-specific paths
result := nginx.Control(func() (string, error) {
return nginx.SandboxTestConfigWithPaths(namespaceInfo, sitePaths, streamPaths)
})
c.JSON(http.StatusOK, gin.H{
"message": result.GetOutput(),
"level": result.GetLevel(),
"namespace_id": req.NamespaceID,
})
}
// Restart restarts the nginx
func Restart(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
+1
View File
@@ -12,6 +12,7 @@ func InitRouter(r *gin.RouterGroup) {
r.POST("nginx/reload", Reload)
r.POST("nginx/restart", Restart)
r.POST("nginx/test", TestConfig)
r.POST("nginx/test_namespace", TestConfigWithNamespace)
r.GET("nginx/status", Status)
// Get detailed Nginx status information, including connection count, process information, etc. (Issue #850)
r.GET("nginx/detail_status", GetDetailStatus)
+14 -5
View File
@@ -4,6 +4,7 @@ import (
"net/http"
"github.com/0xJacky/Nginx-UI/internal/site"
"github.com/0xJacky/Nginx-UI/model"
"github.com/0xJacky/Nginx-UI/query"
"github.com/gin-gonic/gin"
"github.com/spf13/cast"
@@ -23,12 +24,20 @@ func GetSiteList(c *gin.Context) {
// Get sites from database
s := query.Site
sTx := s.Preload(s.Namespace)
if options.NamespaceID != 0 {
sTx = sTx.Where(s.NamespaceID.Eq(options.NamespaceID))
}
db := cosy.UseDB(c)
sites, err := sTx.Find()
var sites []*model.Site
var err error
if options.NamespaceID == 0 {
// Local tab: no namespace OR deploy_mode='local'
err = db.Where("namespace_id IS NULL OR namespace_id IN (?)",
db.Model(&model.Namespace{}).Where("deploy_mode = ?", "local").Select("id"),
).Preload("Namespace").Find(&sites).Error
} else {
// Remote tab: specific namespace
sites, err = s.Where(s.NamespaceID.Eq(options.NamespaceID)).Preload(s.Namespace).Find()
}
if err != nil {
cosy.ErrHandler(c, err)
return
+16 -3
View File
@@ -93,10 +93,23 @@ func GetStreams(c *gin.Context) {
// Get streams with optional filtering
var streams []*model.Stream
if options.NamespaceID != 0 {
streams, err = s.Where(s.NamespaceID.Eq(options.NamespaceID)).Find()
if options.NamespaceID == 0 {
// Local tab: no namespace OR deploy_mode='local'
localNamespaceIDs := lo.Map(lo.Filter(namespaces, func(item *model.Namespace, _ int) bool {
return item.DeployMode == "local"
}), func(item *model.Namespace, _ int) uint64 {
return item.ID
})
db := cosy.UseDB(c)
if len(localNamespaceIDs) > 0 {
err = db.Where("namespace_id IS NULL OR namespace_id IN (?)", localNamespaceIDs).Find(&streams).Error
} else {
err = db.Where("namespace_id IS NULL").Find(&streams).Error
}
} else {
streams, err = s.Find()
// Remote tab: specific namespace
streams, err = s.Where(s.NamespaceID.Eq(options.NamespaceID)).Find()
}
if err != nil {
cosy.ErrHandler(c, err)
+25 -1
View File
@@ -10,16 +10,28 @@ declare module 'vue' {
export interface GlobalComponents {
AAlert: typeof import('ant-design-vue/es')['Alert']
AApp: typeof import('ant-design-vue/es')['App']
AAutoComplete: typeof import('ant-design-vue/es')['AutoComplete']
ABadge: typeof import('ant-design-vue/es')['Badge']
ABreadcrumb: typeof import('ant-design-vue/es')['Breadcrumb']
ABreadcrumbItem: typeof import('ant-design-vue/es')['BreadcrumbItem']
AButton: typeof import('ant-design-vue/es')['Button']
ACard: typeof import('ant-design-vue/es')['Card']
ACheckbox: typeof import('ant-design-vue/es')['Checkbox']
ACheckboxGroup: typeof import('ant-design-vue/es')['CheckboxGroup']
ACol: typeof import('ant-design-vue/es')['Col']
ACollapse: typeof import('ant-design-vue/es')['Collapse']
ACollapsePanel: typeof import('ant-design-vue/es')['CollapsePanel']
AComment: typeof import('ant-design-vue/es')['Comment']
AConfigProvider: typeof import('ant-design-vue/es')['ConfigProvider']
ADivider: typeof import('ant-design-vue/es')['Divider']
ADrawer: typeof import('ant-design-vue/es')['Drawer']
ADropdown: typeof import('ant-design-vue/es')['Dropdown']
AEmpty: typeof import('ant-design-vue/es')['Empty']
AForm: typeof import('ant-design-vue/es')['Form']
AFormItem: typeof import('ant-design-vue/es')['FormItem']
AInput: typeof import('ant-design-vue/es')['Input']
AInputGroup: typeof import('ant-design-vue/es')['InputGroup']
AInputNumber: typeof import('ant-design-vue/es')['InputNumber']
ALayout: typeof import('ant-design-vue/es')['Layout']
ALayoutContent: typeof import('ant-design-vue/es')['LayoutContent']
ALayoutFooter: typeof import('ant-design-vue/es')['LayoutFooter']
@@ -29,17 +41,28 @@ declare module 'vue' {
AListItem: typeof import('ant-design-vue/es')['ListItem']
AListItemMeta: typeof import('ant-design-vue/es')['ListItemMeta']
AMenu: typeof import('ant-design-vue/es')['Menu']
AMenuDivider: typeof import('ant-design-vue/es')['MenuDivider']
AMenuItem: typeof import('ant-design-vue/es')['MenuItem']
AModal: typeof import('ant-design-vue/es')['Modal']
APopconfirm: typeof import('ant-design-vue/es')['Popconfirm']
APopover: typeof import('ant-design-vue/es')['Popover']
AppProvider: typeof import('./src/components/AppProvider.vue')['default']
AppProviderAppProvider: typeof import('./src/components/AppProvider/AppProvider.vue')['default']
AProgress: typeof import('ant-design-vue/es')['Progress']
AResult: typeof import('ant-design-vue/es')['Result']
ARow: typeof import('ant-design-vue/es')['Row']
ASelect: typeof import('ant-design-vue/es')['Select']
ASelectOption: typeof import('ant-design-vue/es')['SelectOption']
ASpace: typeof import('ant-design-vue/es')['Space']
ASpin: typeof import('ant-design-vue/es')['Spin']
AStep: typeof import('ant-design-vue/es')['Step']
ASteps: typeof import('ant-design-vue/es')['Steps']
ASubMenu: typeof import('ant-design-vue/es')['SubMenu']
ASwitch: typeof import('ant-design-vue/es')['Switch']
ATable: typeof import('ant-design-vue/es')['Table']
ATabPane: typeof import('ant-design-vue/es')['TabPane']
ATabs: typeof import('ant-design-vue/es')['Tabs']
ATag: typeof import('ant-design-vue/es')['Tag']
ATextarea: typeof import('ant-design-vue/es')['Textarea']
ATooltip: typeof import('ant-design-vue/es')['Tooltip']
AutoCertFormAutoCertForm: typeof import('./src/components/AutoCertForm/AutoCertForm.vue')['default']
AutoCertFormDNSChallenge: typeof import('./src/components/AutoCertForm/DNSChallenge.vue')['default']
@@ -55,6 +78,7 @@ declare module 'vue' {
DevDebugPanelDevDebugPanel: typeof import('./src/components/DevDebugPanel/DevDebugPanel.vue')['default']
FooterToolbarFooterToolBar: typeof import('./src/components/FooterToolbar/FooterToolBar.vue')['default']
ICPICP: typeof import('./src/components/ICP/ICP.vue')['default']
InspectConfigInspectConfig: typeof import('./src/components/InspectConfig/InspectConfig.vue')['default']
LLMChatMessage: typeof import('./src/components/LLM/ChatMessage.vue')['default']
LLMChatMessageInput: typeof import('./src/components/LLM/ChatMessageInput.vue')['default']
LLMChatMessageList: typeof import('./src/components/LLM/ChatMessageList.vue')['default']
+1 -1
View File
@@ -4,7 +4,7 @@ import en_US from 'ant-design-vue/es/locale/en_US'
import zh_CN from 'ant-design-vue/es/locale/zh_CN'
import zh_TW from 'ant-design-vue/es/locale/zh_TW'
import loadTranslations from '@/api/translations'
import AppProvider from '@/components/AppProvider.vue'
import AppProvider from '@/components/AppProvider'
import gettext from '@/gettext'
import { useSettingsStore } from '@/pinia'
+7
View File
@@ -14,11 +14,18 @@ export const UpstreamTestType = {
Mirror: 'mirror',
}
// Deploy mode types
export const DeployMode = {
Local: 'local',
Remote: 'remote',
} as const
export interface Namespace extends ModelBase {
name: string
sync_node_ids: number[]
post_sync_action?: string
upstream_test_type?: string
deploy_mode?: string
}
const baseUrl = '/namespaces'
+4
View File
@@ -148,6 +148,10 @@ const ngx = {
return http.post('/nginx/test')
},
test_namespace(namespace_id?: number): Promise<{ message: string, level: number, namespace_id?: number }> {
return http.post('/nginx/test_namespace', { namespace_id })
},
get_directives(): Promise<DirectiveMap> {
return http.get('/nginx/directives')
},
+3
View File
@@ -0,0 +1,3 @@
import AppProvider from './AppProvider.vue'
export default AppProvider
@@ -1,25 +1,37 @@
<script setup lang="ts">
import type { CosyError } from '@/lib/http/types'
import ngx from '@/api/ngx'
import { logLevel } from '@/constants/config'
import { translateError } from '@/lib/http/error'
import { logLevel } from '@/views/config/constants'
defineProps<{
const props = defineProps<{
banner?: boolean
namespaceId?: number | string
}>()
interface TestResult extends CosyError {
message: string
level: number
namespace_id?: number
}
const data = ref<TestResult>()
const translatedError = ref<string>('')
const testLoading = ref(false)
test()
// Watch for namespace changes and auto-test
watch(() => props.namespaceId, () => {
test()
}, { immediate: true })
function test() {
ngx.test().then(r => {
testLoading.value = true
const namespaceIdNum = props.namespaceId ? Number(props.namespaceId) : 0
const testPromise = namespaceIdNum > 0
? ngx.test_namespace(namespaceIdNum)
: ngx.test()
testPromise.then(r => {
data.value = r
if (r && r.level > logLevel.Warn) {
const cosyError: CosyError = {
@@ -29,6 +41,8 @@ function test() {
translatedError.value = translated
})
}
}).finally(() => {
testLoading.value = false
})
}
@@ -39,10 +53,13 @@ defineExpose({
<template>
<div class="inspect-container">
<!-- Test Results -->
<AAlert
v-if="data && data.level <= logLevel.Info"
:banner
:message="$gettext('Configuration file is test successful')"
:message="namespaceId
? $gettext('Configuration file is test successful in isolated sandbox')
: $gettext('Configuration file is test successful')"
type="success"
show-icon
/>
@@ -0,0 +1,3 @@
import InspectConfig from './InspectConfig.vue'
export default InspectConfig
@@ -56,6 +56,14 @@ const currentNamespace = computed(() => {
return namespaces.value.find(g => g.id === Number(modelValue.value))
})
// Filter namespaces for remote tabs
const remoteNamespaces = computed(() => {
return namespaces.value.filter(ns =>
ns.deploy_mode === 'remote'
|| (ns.sync_node_ids && ns.sync_node_ids.length > 0),
)
})
// Get the list of nodes in the current group
const syncNodes = computed(() => {
if (!currentNamespace.value)
@@ -113,8 +121,12 @@ async function handleRestartNginx() {
<template>
<div>
<ATabs :active-key="modelValue" @update:active-key="modelValue = $event">
<ATabPane :key="0" :tab="$gettext('All')" />
<ATabPane v-for="c in namespaces" :key="c.id" :tab="c.name" />
<ATabPane :key="0" :tab="$gettext('Local')" />
<ATabPane
v-for="ns in remoteNamespaces"
:key="ns.id"
:tab="ns.name"
/>
</ATabs>
<!-- Display node information -->
@@ -2,8 +2,8 @@
import { ReloadOutlined } from '@ant-design/icons-vue'
import ngx from '@/api/ngx'
import { NginxStatus } from '@/constants'
import { logLevel } from '@/constants/config'
import { useGlobalStore } from '@/pinia'
import { logLevel } from '@/views/config/constants'
const global = useGlobalStore()
const { nginxStatus: status } = storeToRefs(global)
+5
View File
@@ -44,6 +44,11 @@ export const UpstreamTestTypeMask = {
mirror: () => $gettext('Mirror'),
} as const
export const DeployModeMask = {
local: () => $gettext('Local'),
remote: () => $gettext('Remote'),
} as const
export const PrivateKeyTypeMask = {
2048: 'RSA2048',
3072: 'RSA3072',
+40 -24
View File
@@ -188,7 +188,7 @@ msgstr "إجراء"
#: src/views/certificate/ACMEUser.vue:131
#: src/views/certificate/CertificateList/certColumns.tsx:92
#: src/views/certificate/DNSCredential.vue:71
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:84
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97
#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96
#: src/views/notification/notificationColumns.tsx:72
#: src/views/preference/components/ExternalNotify/columns.tsx:85
@@ -299,10 +299,6 @@ msgstr "الإعدادات المتقدمة"
msgid "Afterwards, refresh this page and click add passkey again."
msgstr "بعد ذلك، قم بتحديث هذه الصفحة وانقر على إضافة مفتاح مرور مرة أخرى."
#: src/components/NamespaceTabs/NamespaceTabs.vue:116
msgid "All"
msgstr "الكل"
#: src/views/system/Licenses.vue:152
msgid "All Components"
msgstr "جميع المكونات"
@@ -398,7 +394,7 @@ msgstr "هل أنت متأكد أنك تريد الحذف نهائيًا؟"
msgid "Are you sure you want to delete?"
msgstr "هل أنت متأكد أنك تريد الحذف؟"
#: src/components/NamespaceTabs/NamespaceTabs.vue:130
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
msgid "Are you sure you want to reload Nginx on the following sync nodes?"
msgstr "هل أنت متأكد أنك تريد إعادة تحميل Nginx على عقد المزامنة التالية؟"
@@ -414,7 +410,7 @@ msgstr "هل أنت متأكد أنك تريد إزالة هذا العنصر؟"
msgid "Are you sure you want to remove this location?"
msgstr "هل أنت متأكد أنك تريد إزالة هذا المكان؟"
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
#: src/components/NamespaceTabs/NamespaceTabs.vue:154
msgid "Are you sure you want to restart Nginx on the following sync nodes?"
msgstr "هل أنت متأكد أنك تريد إعادة تشغيل Nginx على عقد المزامنة التالية؟"
@@ -1278,10 +1274,14 @@ msgstr "قالب التكوين"
msgid "Configuration"
msgstr "التكوين"
#: src/views/config/InspectConfig.vue:45
#: src/components/InspectConfig/InspectConfig.vue:62
msgid "Configuration file is test successful"
msgstr "تم اختبار ملف التكوين بنجاح"
#: src/components/InspectConfig/InspectConfig.vue:61
msgid "Configuration file is test successful in isolated sandbox"
msgstr "تم اختبار ملف التكوين بنجاح في بيئة الرمل المعزولة"
#: src/components/ConfigHistory/ConfigHistory.vue:147
msgid "Configuration History"
msgstr "سجل التكوين"
@@ -1428,7 +1428,7 @@ msgstr ""
"سيتم تنزيل ملفات النسخ الاحتياطي تلقائيًا إلى جهاز الكمبيوتر الخاص بك."
#: src/views/backup/AutoBackup/AutoBackup.vue:229
#: src/views/namespace/columns.ts:72
#: src/views/namespace/columns.ts:85
#: src/views/notification/notificationColumns.tsx:51
#: src/views/preference/components/AuthSettings/Passkey.vue:96
#: src/views/preference/components/ExternalNotify/columns.tsx:80
@@ -1669,6 +1669,10 @@ msgstr "عرض تجريبي"
msgid "Deploy"
msgstr "نشر"
#: src/views/namespace/columns.ts:72
msgid "Deploy Mode"
msgstr "وضع النشر"
#: src/views/nginx_log/structured/StructuredLogViewer.vue:735
msgid "Descending"
msgstr "تنازلي"
@@ -2208,7 +2212,7 @@ msgstr "تكوين البيئة فارغ"
msgid "Environment variables cleaned"
msgstr "تم تنظيف متغيرات البيئة"
#: src/constants/index.ts:23 src/views/config/InspectConfig.vue:63
#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23
#: src/views/nginx_log/NginxLogList.vue:243
#: src/views/notification/notificationColumns.tsx:14
msgid "Error"
@@ -3560,9 +3564,10 @@ msgstr "جارٍ تحميل البيانات..."
msgid "Loading..."
msgstr "جاري التحميل..."
#: src/components/NamespaceTabs/NamespaceTabs.vue:124
#: src/components/NodeIndicator/NodeIndicator.vue:38
#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42
#: src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/views/backup/AutoBackup/AutoBackup.vue:83
#: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
#: src/views/preference/tabs/NginxSettings.vue:55
@@ -4238,8 +4243,8 @@ msgid "Nginx.conf includes streams-enabled directory"
msgstr "يتضمن Nginx.conf دليل streams-enabled"
#: src/components/LLM/ChatMessageInput.vue:61
#: src/components/NamespaceTabs/NamespaceTabs.vue:132
#: src/components/NamespaceTabs/NamespaceTabs.vue:144
#: src/components/NamespaceTabs/NamespaceTabs.vue:156
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102
#: src/components/NgxConfigEditor/LocationEditor.vue:89
#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40
@@ -4470,11 +4475,12 @@ msgstr "إيقاف"
msgid "Official Document"
msgstr "الوثيقة الرسمية"
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:84
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55
#: src/views/upstream/SocketList.vue:46
msgid "Offline"
msgstr "غير متصل"
@@ -4507,12 +4513,13 @@ msgstr "تشغيل"
msgid "Once the verification is complete, the records will be removed."
msgstr "بمجرد اكتمال التحقق، سيتم إزالة السجلات."
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:64
#: src/components/NodeSelector/NodeSelector.vue:78
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51
#: src/views/upstream/SocketList.vue:46
msgid "Online"
msgstr "متصل"
@@ -5188,7 +5195,7 @@ msgid "Reload"
msgstr "إعادة تحميل"
#: src/components/NamespaceRender/NamespaceRender.vue:44
#: src/components/NamespaceTabs/NamespaceTabs.vue:137 src/constants/index.ts:38
#: src/components/NamespaceTabs/NamespaceTabs.vue:149 src/constants/index.ts:38
#: src/views/node/Node.vue:208 src/views/node/Node.vue:216
msgid "Reload Nginx"
msgstr "إعادة تحميل Nginx"
@@ -5213,7 +5220,7 @@ msgstr "خطأ في إعادة تحميل Nginx البعيد"
msgid "Reload Remote Nginx Success"
msgstr "إعادة تحميل Nginx البعيد بنجاح"
#: src/components/NamespaceTabs/NamespaceTabs.vue:85
#: src/components/NamespaceTabs/NamespaceTabs.vue:93
msgid "Reload request failed, please check your network connection"
msgstr "فشل طلب إعادة التحميل، يرجى التحقق من اتصال الشبكة لديك"
@@ -5225,7 +5232,7 @@ msgstr "إعادة التحميل"
msgid "Reloading nginx"
msgstr "إعادة تحميل nginx"
#: src/constants/index.ts:43
#: src/constants/index.ts:43 src/constants/index.ts:49
msgid "Remote"
msgstr "عن بُعد"
@@ -5400,7 +5407,7 @@ msgstr "الردود"
msgid "Restart"
msgstr "إعادة تشغيل"
#: src/components/NamespaceTabs/NamespaceTabs.vue:149
#: src/components/NamespaceTabs/NamespaceTabs.vue:161
#: src/views/node/Node.vue:229 src/views/node/Node.vue:237
msgid "Restart Nginx"
msgstr "إعادة تشغيل Nginx"
@@ -5421,7 +5428,7 @@ msgstr "خطأ في إعادة تشغيل Nginx البعيد"
msgid "Restart Remote Nginx Success"
msgstr "إعادة تشغيل Nginx البعيد بنجاح"
#: src/components/NamespaceTabs/NamespaceTabs.vue:105
#: src/components/NamespaceTabs/NamespaceTabs.vue:113
msgid "Restart request failed, please check your network connection"
msgstr "فشل طلب إعادة التشغيل، يرجى التحقق من اتصال الشبكة لديك"
@@ -6272,7 +6279,7 @@ msgid "Sync Config Success"
msgstr "تمت مزامنة التكوين بنجاح"
#: src/components/NamespaceRender/NamespaceRender.vue:53
#: src/components/NamespaceTabs/NamespaceTabs.vue:123
#: src/components/NamespaceTabs/NamespaceTabs.vue:135
#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31
msgid "Sync Nodes"
msgstr "مزامنة العقد"
@@ -6917,7 +6924,7 @@ msgstr "تم التحديث بنجاح"
#: src/views/certificate/ACMEUser.vue:124
#: src/views/certificate/DNSCredential.vue:65
#: src/views/config/components/ConfigRightPanel/Basic.vue:54
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:78
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91
#: src/views/node/nodeColumns.tsx:89
#: src/views/site/site_edit/components/RightPanel/Basic.vue:39
#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80
@@ -7118,8 +7125,8 @@ msgstr "الزيارات"
msgid "Waiting processes"
msgstr "عمليات الانتظار"
#: src/constants/index.ts:24 src/views/backup/components/BackupCreator.vue:138
#: src/views/config/InspectConfig.vue:51
#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24
#: src/views/backup/components/BackupCreator.vue:138
#: src/views/notification/notificationColumns.tsx:21
#: src/views/preference/components/AuthSettings/AddPasskey.vue:88
msgid "Warning"
@@ -7269,8 +7276,8 @@ msgstr "كتابة مفتاح الشهادة الخاص إلى القرص"
msgid "Writing certificate to disk"
msgstr "كتابة الشهادة إلى القرص"
#: src/components/NamespaceTabs/NamespaceTabs.vue:131
#: src/components/NamespaceTabs/NamespaceTabs.vue:143
#: src/components/NamespaceTabs/NamespaceTabs.vue:155
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101
#: src/components/NgxConfigEditor/LocationEditor.vue:88
#: src/views/nginx_log/indexing/IndexManagement.vue:31
@@ -7345,6 +7352,15 @@ msgstr "مفاتيح المرور الخاصة بك"
msgid "Zero-allocation pipeline"
msgstr "خط أنابيب بدون تخصيص"
#~ msgid "Sandbox test successful"
#~ msgstr "اختبار الساندبوكس ناجح"
#~ msgid "Tested in isolated sandbox mode"
#~ msgstr "تم الاختبار في وضع الحماية المعزول"
#~ msgid "All"
#~ msgstr "الكل"
#~ msgid "Based on M2 Pro (12 cores) testing"
#~ msgstr "بناءً على اختبار M2 Pro (12 نواة)"
+42 -24
View File
@@ -188,7 +188,7 @@ msgstr "Aktion"
#: src/views/certificate/ACMEUser.vue:131
#: src/views/certificate/CertificateList/certColumns.tsx:92
#: src/views/certificate/DNSCredential.vue:71
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:84
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97
#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96
#: src/views/notification/notificationColumns.tsx:72
#: src/views/preference/components/ExternalNotify/columns.tsx:85
@@ -305,10 +305,6 @@ msgstr ""
"Aktualisieren Sie anschließend diese Seite und klicken Sie erneut auf "
"\"Passkey hinzufügen\"."
#: src/components/NamespaceTabs/NamespaceTabs.vue:116
msgid "All"
msgstr "Alle"
#: src/views/system/Licenses.vue:152
msgid "All Components"
msgstr "Alle Komponenten"
@@ -406,7 +402,7 @@ msgstr "Sind Sie sicher, dass Sie dauerhaft löschen möchten?"
msgid "Are you sure you want to delete?"
msgstr "Sind Sie sicher, dass Sie löschen möchten?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:130
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
msgid "Are you sure you want to reload Nginx on the following sync nodes?"
msgstr ""
"Sind Sie sicher, dass Sie Nginx auf den folgenden Sync-Knoten neu laden "
@@ -424,7 +420,7 @@ msgstr "Möchten Sie dieses Element wirklich entfernen?"
msgid "Are you sure you want to remove this location?"
msgstr "Sind Sie sicher, dass Sie diesen Standort entfernen möchten?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
#: src/components/NamespaceTabs/NamespaceTabs.vue:154
msgid "Are you sure you want to restart Nginx on the following sync nodes?"
msgstr ""
"Sind Sie sicher, dass Sie Nginx auf den folgenden Synchronisationsknoten "
@@ -1303,10 +1299,16 @@ msgstr "Konfigurationsvorlage"
msgid "Configuration"
msgstr "Konfiguration"
#: src/views/config/InspectConfig.vue:45
#: src/components/InspectConfig/InspectConfig.vue:62
msgid "Configuration file is test successful"
msgstr "Konfigurationsdatei erfolgreich getestet"
#: src/components/InspectConfig/InspectConfig.vue:61
msgid "Configuration file is test successful in isolated sandbox"
msgstr ""
"Die Konfigurationsdatei wurde erfolgreich im isolierten Sandbox-Test "
"durchgeführt"
#: src/components/ConfigHistory/ConfigHistory.vue:147
msgid "Configuration History"
msgstr "Konfigurationsverlauf"
@@ -1456,7 +1458,7 @@ msgstr ""
"Computer heruntergeladen."
#: src/views/backup/AutoBackup/AutoBackup.vue:229
#: src/views/namespace/columns.ts:72
#: src/views/namespace/columns.ts:85
#: src/views/notification/notificationColumns.tsx:51
#: src/views/preference/components/AuthSettings/Passkey.vue:96
#: src/views/preference/components/ExternalNotify/columns.tsx:80
@@ -1699,6 +1701,10 @@ msgstr "Demo"
msgid "Deploy"
msgstr "Ausführen"
#: src/views/namespace/columns.ts:72
msgid "Deploy Mode"
msgstr "Bereitstellungsmodus"
#: src/views/nginx_log/structured/StructuredLogViewer.vue:735
msgid "Descending"
msgstr "Absteigend"
@@ -2241,7 +2247,7 @@ msgstr "Die Umgebungskonfiguration ist leer"
msgid "Environment variables cleaned"
msgstr "Umgebungsvariablen gesäubert"
#: src/constants/index.ts:23 src/views/config/InspectConfig.vue:63
#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23
#: src/views/nginx_log/NginxLogList.vue:243
#: src/views/notification/notificationColumns.tsx:14
msgid "Error"
@@ -3606,9 +3612,10 @@ msgstr "Daten werden geladen..."
msgid "Loading..."
msgstr "Wird geladen..."
#: src/components/NamespaceTabs/NamespaceTabs.vue:124
#: src/components/NodeIndicator/NodeIndicator.vue:38
#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42
#: src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/views/backup/AutoBackup/AutoBackup.vue:83
#: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
#: src/views/preference/tabs/NginxSettings.vue:55
@@ -4289,8 +4296,8 @@ msgid "Nginx.conf includes streams-enabled directory"
msgstr "Nginx.conf enthält das streams-enabled-Verzeichnis"
#: src/components/LLM/ChatMessageInput.vue:61
#: src/components/NamespaceTabs/NamespaceTabs.vue:132
#: src/components/NamespaceTabs/NamespaceTabs.vue:144
#: src/components/NamespaceTabs/NamespaceTabs.vue:156
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102
#: src/components/NgxConfigEditor/LocationEditor.vue:89
#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40
@@ -4525,11 +4532,12 @@ msgstr "Aus"
msgid "Official Document"
msgstr "Offizielle Dokumentation"
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:84
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55
#: src/views/upstream/SocketList.vue:46
msgid "Offline"
msgstr "Offline"
@@ -4562,12 +4570,13 @@ msgstr "Ein"
msgid "Once the verification is complete, the records will be removed."
msgstr "Sobaöd die Überprüfung abgeschlossen ist, werden die Einträge entfernt."
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:64
#: src/components/NodeSelector/NodeSelector.vue:78
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51
#: src/views/upstream/SocketList.vue:46
msgid "Online"
msgstr "Online"
@@ -5262,7 +5271,7 @@ msgid "Reload"
msgstr "Neu laden"
#: src/components/NamespaceRender/NamespaceRender.vue:44
#: src/components/NamespaceTabs/NamespaceTabs.vue:137 src/constants/index.ts:38
#: src/components/NamespaceTabs/NamespaceTabs.vue:149 src/constants/index.ts:38
#: src/views/node/Node.vue:208 src/views/node/Node.vue:216
msgid "Reload Nginx"
msgstr "Nginx neu laden"
@@ -5287,7 +5296,7 @@ msgstr "Fehler beim Neuladen von Remote-Nginx"
msgid "Reload Remote Nginx Success"
msgstr "Neustart von Remote-Nginx erfolgreich"
#: src/components/NamespaceTabs/NamespaceTabs.vue:85
#: src/components/NamespaceTabs/NamespaceTabs.vue:93
msgid "Reload request failed, please check your network connection"
msgstr ""
"Die Neulade-Anfrage ist fehlgeschlagen, bitte überprüfen Sie Ihre "
@@ -5301,7 +5310,7 @@ msgstr "Lade neu"
msgid "Reloading nginx"
msgstr "Lade Nginx neu"
#: src/constants/index.ts:43
#: src/constants/index.ts:43 src/constants/index.ts:49
msgid "Remote"
msgstr "Remote"
@@ -5477,7 +5486,7 @@ msgstr "Antworten"
msgid "Restart"
msgstr "Neustart"
#: src/components/NamespaceTabs/NamespaceTabs.vue:149
#: src/components/NamespaceTabs/NamespaceTabs.vue:161
#: src/views/node/Node.vue:229 src/views/node/Node.vue:237
msgid "Restart Nginx"
msgstr "Nginx neu starten"
@@ -5498,7 +5507,7 @@ msgstr "Fehler beim Neustart von Remote-Nginx"
msgid "Restart Remote Nginx Success"
msgstr "Neustart von Remote-Nginx erfolgreich"
#: src/components/NamespaceTabs/NamespaceTabs.vue:105
#: src/components/NamespaceTabs/NamespaceTabs.vue:113
msgid "Restart request failed, please check your network connection"
msgstr ""
"Neustart-Anforderung fehlgeschlagen, bitte überprüfen Sie Ihre "
@@ -6363,7 +6372,7 @@ msgid "Sync Config Success"
msgstr "Konfiguration erfolgreich synchronisiert"
#: src/components/NamespaceRender/NamespaceRender.vue:53
#: src/components/NamespaceTabs/NamespaceTabs.vue:123
#: src/components/NamespaceTabs/NamespaceTabs.vue:135
#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31
msgid "Sync Nodes"
msgstr "Synchrone Knoten"
@@ -7031,7 +7040,7 @@ msgstr "Erfolgreich aktualisiert"
#: src/views/certificate/ACMEUser.vue:124
#: src/views/certificate/DNSCredential.vue:65
#: src/views/config/components/ConfigRightPanel/Basic.vue:54
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:78
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91
#: src/views/node/nodeColumns.tsx:89
#: src/views/site/site_edit/components/RightPanel/Basic.vue:39
#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80
@@ -7232,8 +7241,8 @@ msgstr "Besuche"
msgid "Waiting processes"
msgstr "Warteverfahren"
#: src/constants/index.ts:24 src/views/backup/components/BackupCreator.vue:138
#: src/views/config/InspectConfig.vue:51
#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24
#: src/views/backup/components/BackupCreator.vue:138
#: src/views/notification/notificationColumns.tsx:21
#: src/views/preference/components/AuthSettings/AddPasskey.vue:88
msgid "Warning"
@@ -7394,8 +7403,8 @@ msgstr "Scrheibe Zertifikat-Privatschlüssel auf die Festplatte"
msgid "Writing certificate to disk"
msgstr "Schreibe Zertifikat auf die Festplatte"
#: src/components/NamespaceTabs/NamespaceTabs.vue:131
#: src/components/NamespaceTabs/NamespaceTabs.vue:143
#: src/components/NamespaceTabs/NamespaceTabs.vue:155
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101
#: src/components/NgxConfigEditor/LocationEditor.vue:88
#: src/views/nginx_log/indexing/IndexManagement.vue:31
@@ -7474,6 +7483,15 @@ msgstr "Deine Passkeys"
msgid "Zero-allocation pipeline"
msgstr "Allokationsfreie Pipeline"
#~ msgid "Sandbox test successful"
#~ msgstr "Sandbox-Test erfolgreich"
#~ msgid "Tested in isolated sandbox mode"
#~ msgstr "Im isolierten Sandbox-Modus getestet"
#~ msgid "All"
#~ msgstr "Alle"
#~ msgid "Based on M2 Pro (12 cores) testing"
#~ msgstr "Basierend auf Tests mit M2 Pro (12 Kerne)"
+31 -24
View File
@@ -167,7 +167,7 @@ msgstr ""
#: src/views/certificate/ACMEUser.vue:131
#: src/views/certificate/CertificateList/certColumns.tsx:92
#: src/views/certificate/DNSCredential.vue:71
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:84
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97
#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96
#: src/views/notification/notificationColumns.tsx:72
#: src/views/preference/components/ExternalNotify/columns.tsx:85
@@ -278,10 +278,6 @@ msgstr ""
msgid "Afterwards, refresh this page and click add passkey again."
msgstr ""
#: src/components/NamespaceTabs/NamespaceTabs.vue:116
msgid "All"
msgstr ""
#: src/views/system/Licenses.vue:152
msgid "All Components"
msgstr ""
@@ -376,7 +372,7 @@ msgstr ""
msgid "Are you sure you want to delete?"
msgstr ""
#: src/components/NamespaceTabs/NamespaceTabs.vue:130
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
msgid "Are you sure you want to reload Nginx on the following sync nodes?"
msgstr ""
@@ -392,7 +388,7 @@ msgstr ""
msgid "Are you sure you want to remove this location?"
msgstr ""
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
#: src/components/NamespaceTabs/NamespaceTabs.vue:154
msgid "Are you sure you want to restart Nginx on the following sync nodes?"
msgstr ""
@@ -1213,10 +1209,14 @@ msgstr ""
msgid "Configuration"
msgstr ""
#: src/views/config/InspectConfig.vue:45
#: src/components/InspectConfig/InspectConfig.vue:62
msgid "Configuration file is test successful"
msgstr ""
#: src/components/InspectConfig/InspectConfig.vue:61
msgid "Configuration file is test successful in isolated sandbox"
msgstr ""
#: src/components/ConfigHistory/ConfigHistory.vue:147
msgid "Configuration History"
msgstr ""
@@ -1361,7 +1361,7 @@ msgid ""
msgstr ""
#: src/views/backup/AutoBackup/AutoBackup.vue:229
#: src/views/namespace/columns.ts:72
#: src/views/namespace/columns.ts:85
#: src/views/notification/notificationColumns.tsx:51
#: src/views/preference/components/AuthSettings/Passkey.vue:96
#: src/views/preference/components/ExternalNotify/columns.tsx:80
@@ -1602,6 +1602,10 @@ msgstr ""
msgid "Deploy"
msgstr ""
#: src/views/namespace/columns.ts:72
msgid "Deploy Mode"
msgstr ""
#: src/views/nginx_log/structured/StructuredLogViewer.vue:735
msgid "Descending"
msgstr ""
@@ -2132,7 +2136,7 @@ msgstr ""
msgid "Environment variables cleaned"
msgstr ""
#: src/constants/index.ts:23 src/views/config/InspectConfig.vue:63
#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23
#: src/views/nginx_log/NginxLogList.vue:243
#: src/views/notification/notificationColumns.tsx:14
msgid "Error"
@@ -3461,9 +3465,10 @@ msgstr ""
msgid "Loading..."
msgstr ""
#: src/components/NamespaceTabs/NamespaceTabs.vue:124
#: src/components/NodeIndicator/NodeIndicator.vue:38
#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42
#: src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/views/backup/AutoBackup/AutoBackup.vue:83
#: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
#: src/views/preference/tabs/NginxSettings.vue:55
@@ -4128,8 +4133,8 @@ msgid "Nginx.conf includes streams-enabled directory"
msgstr ""
#: src/components/LLM/ChatMessageInput.vue:61
#: src/components/NamespaceTabs/NamespaceTabs.vue:132
#: src/components/NamespaceTabs/NamespaceTabs.vue:144
#: src/components/NamespaceTabs/NamespaceTabs.vue:156
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102
#: src/components/NgxConfigEditor/LocationEditor.vue:89
#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40
@@ -4352,11 +4357,12 @@ msgstr ""
msgid "Official Document"
msgstr ""
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:84
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55
#: src/views/upstream/SocketList.vue:46
msgid "Offline"
msgstr ""
@@ -4389,12 +4395,13 @@ msgstr ""
msgid "Once the verification is complete, the records will be removed."
msgstr ""
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:64
#: src/components/NodeSelector/NodeSelector.vue:78
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51
#: src/views/upstream/SocketList.vue:46
msgid "Online"
msgstr ""
@@ -5059,7 +5066,7 @@ msgid "Reload"
msgstr ""
#: src/components/NamespaceRender/NamespaceRender.vue:44
#: src/components/NamespaceTabs/NamespaceTabs.vue:137 src/constants/index.ts:38
#: src/components/NamespaceTabs/NamespaceTabs.vue:149 src/constants/index.ts:38
#: src/views/node/Node.vue:208 src/views/node/Node.vue:216
msgid "Reload Nginx"
msgstr ""
@@ -5084,7 +5091,7 @@ msgstr ""
msgid "Reload Remote Nginx Success"
msgstr ""
#: src/components/NamespaceTabs/NamespaceTabs.vue:85
#: src/components/NamespaceTabs/NamespaceTabs.vue:93
msgid "Reload request failed, please check your network connection"
msgstr ""
@@ -5096,7 +5103,7 @@ msgstr ""
msgid "Reloading nginx"
msgstr ""
#: src/constants/index.ts:43
#: src/constants/index.ts:43 src/constants/index.ts:49
msgid "Remote"
msgstr ""
@@ -5269,7 +5276,7 @@ msgstr ""
msgid "Restart"
msgstr ""
#: src/components/NamespaceTabs/NamespaceTabs.vue:149
#: src/components/NamespaceTabs/NamespaceTabs.vue:161
#: src/views/node/Node.vue:229 src/views/node/Node.vue:237
msgid "Restart Nginx"
msgstr ""
@@ -5290,7 +5297,7 @@ msgstr ""
msgid "Restart Remote Nginx Success"
msgstr ""
#: src/components/NamespaceTabs/NamespaceTabs.vue:105
#: src/components/NamespaceTabs/NamespaceTabs.vue:113
msgid "Restart request failed, please check your network connection"
msgstr ""
@@ -6124,7 +6131,7 @@ msgid "Sync Config Success"
msgstr ""
#: src/components/NamespaceRender/NamespaceRender.vue:53
#: src/components/NamespaceTabs/NamespaceTabs.vue:123
#: src/components/NamespaceTabs/NamespaceTabs.vue:135
#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31
msgid "Sync Nodes"
msgstr ""
@@ -6722,7 +6729,7 @@ msgstr ""
#: src/views/certificate/ACMEUser.vue:124
#: src/views/certificate/DNSCredential.vue:65
#: src/views/config/components/ConfigRightPanel/Basic.vue:54
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:78
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91
#: src/views/node/nodeColumns.tsx:89
#: src/views/site/site_edit/components/RightPanel/Basic.vue:39
#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80
@@ -6923,8 +6930,8 @@ msgstr ""
msgid "Waiting processes"
msgstr ""
#: src/constants/index.ts:24 src/views/backup/components/BackupCreator.vue:138
#: src/views/config/InspectConfig.vue:51
#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24
#: src/views/backup/components/BackupCreator.vue:138
#: src/views/notification/notificationColumns.tsx:21
#: src/views/preference/components/AuthSettings/AddPasskey.vue:88
msgid "Warning"
@@ -7062,8 +7069,8 @@ msgstr ""
msgid "Writing certificate to disk"
msgstr ""
#: src/components/NamespaceTabs/NamespaceTabs.vue:131
#: src/components/NamespaceTabs/NamespaceTabs.vue:143
#: src/components/NamespaceTabs/NamespaceTabs.vue:155
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101
#: src/components/NgxConfigEditor/LocationEditor.vue:88
#: src/views/nginx_log/indexing/IndexManagement.vue:31
+42 -24
View File
@@ -194,7 +194,7 @@ msgstr "Acción"
#: src/views/certificate/ACMEUser.vue:131
#: src/views/certificate/CertificateList/certColumns.tsx:92
#: src/views/certificate/DNSCredential.vue:71
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:84
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97
#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96
#: src/views/notification/notificationColumns.tsx:72
#: src/views/preference/components/ExternalNotify/columns.tsx:85
@@ -309,10 +309,6 @@ msgstr ""
"Después, actualice esta página y haga clic en agregar clave de acceso "
"nuevamente."
#: src/components/NamespaceTabs/NamespaceTabs.vue:116
msgid "All"
msgstr "Todos"
#: src/views/system/Licenses.vue:152
msgid "All Components"
msgstr "Todos los componentes"
@@ -410,7 +406,7 @@ msgstr "¿Estás seguro de que quieres eliminar permanentemente?"
msgid "Are you sure you want to delete?"
msgstr "¿Está seguro de que quiere borrar?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:130
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
msgid "Are you sure you want to reload Nginx on the following sync nodes?"
msgstr ""
"¿Estás seguro de que deseas recargar Nginx en los siguientes nodos de "
@@ -428,7 +424,7 @@ msgstr "¿Está seguro de que desea eliminar este elemento?"
msgid "Are you sure you want to remove this location?"
msgstr "¿Está seguro de que quiere borrar esta ubicación?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
#: src/components/NamespaceTabs/NamespaceTabs.vue:154
msgid "Are you sure you want to restart Nginx on the following sync nodes?"
msgstr ""
"¿Estás seguro de que deseas reiniciar Nginx en los siguientes nodos de "
@@ -1309,10 +1305,16 @@ msgstr "Plantilla de configuración"
msgid "Configuration"
msgstr "Configuración"
#: src/views/config/InspectConfig.vue:45
#: src/components/InspectConfig/InspectConfig.vue:62
msgid "Configuration file is test successful"
msgstr "El archivo de configuración se probó exitosamente"
#: src/components/InspectConfig/InspectConfig.vue:61
msgid "Configuration file is test successful in isolated sandbox"
msgstr ""
"El archivo de configuración se ha probado con éxito en un entorno de "
"sandbox aislado"
#: src/components/ConfigHistory/ConfigHistory.vue:147
msgid "Configuration History"
msgstr "Historial de configuración"
@@ -1462,7 +1464,7 @@ msgstr ""
"automáticamente en tu computadora."
#: src/views/backup/AutoBackup/AutoBackup.vue:229
#: src/views/namespace/columns.ts:72
#: src/views/namespace/columns.ts:85
#: src/views/notification/notificationColumns.tsx:51
#: src/views/preference/components/AuthSettings/Passkey.vue:96
#: src/views/preference/components/ExternalNotify/columns.tsx:80
@@ -1707,6 +1709,10 @@ msgstr "Demostración"
msgid "Deploy"
msgstr "Desplegar"
#: src/views/namespace/columns.ts:72
msgid "Deploy Mode"
msgstr "Modo de despliegue"
#: src/views/nginx_log/structured/StructuredLogViewer.vue:735
msgid "Descending"
msgstr "Descendente"
@@ -2248,7 +2254,7 @@ msgstr "La configuración del entorno está vacía"
msgid "Environment variables cleaned"
msgstr "Variables de entorno limpiadas"
#: src/constants/index.ts:23 src/views/config/InspectConfig.vue:63
#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23
#: src/views/nginx_log/NginxLogList.vue:243
#: src/views/notification/notificationColumns.tsx:14
msgid "Error"
@@ -3612,9 +3618,10 @@ msgstr "Cargando datos..."
msgid "Loading..."
msgstr "Cargando..."
#: src/components/NamespaceTabs/NamespaceTabs.vue:124
#: src/components/NodeIndicator/NodeIndicator.vue:38
#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42
#: src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/views/backup/AutoBackup/AutoBackup.vue:83
#: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
#: src/views/preference/tabs/NginxSettings.vue:55
@@ -4296,8 +4303,8 @@ msgid "Nginx.conf includes streams-enabled directory"
msgstr "Nginx.conf incluye el directorio streams-enabled"
#: src/components/LLM/ChatMessageInput.vue:61
#: src/components/NamespaceTabs/NamespaceTabs.vue:132
#: src/components/NamespaceTabs/NamespaceTabs.vue:144
#: src/components/NamespaceTabs/NamespaceTabs.vue:156
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102
#: src/components/NgxConfigEditor/LocationEditor.vue:89
#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40
@@ -4533,11 +4540,12 @@ msgstr "Apagado"
msgid "Official Document"
msgstr "Documentación oficial"
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:84
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55
#: src/views/upstream/SocketList.vue:46
msgid "Offline"
msgstr "Desconectado"
@@ -4570,12 +4578,13 @@ msgstr "Encendido"
msgid "Once the verification is complete, the records will be removed."
msgstr "Una vez que se complete la verificación, los registros se eliminarán."
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:64
#: src/components/NodeSelector/NodeSelector.vue:78
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51
#: src/views/upstream/SocketList.vue:46
msgid "Online"
msgstr "En línea"
@@ -5273,7 +5282,7 @@ msgid "Reload"
msgstr "Recargar"
#: src/components/NamespaceRender/NamespaceRender.vue:44
#: src/components/NamespaceTabs/NamespaceTabs.vue:137 src/constants/index.ts:38
#: src/components/NamespaceTabs/NamespaceTabs.vue:149 src/constants/index.ts:38
#: src/views/node/Node.vue:208 src/views/node/Node.vue:216
msgid "Reload Nginx"
msgstr "Recargar Nginx"
@@ -5298,7 +5307,7 @@ msgstr "Error al recargar Nginx remoto"
msgid "Reload Remote Nginx Success"
msgstr "Reinicio remoto de Nginx exitoso"
#: src/components/NamespaceTabs/NamespaceTabs.vue:85
#: src/components/NamespaceTabs/NamespaceTabs.vue:93
msgid "Reload request failed, please check your network connection"
msgstr "La solicitud de recarga falló, por favor verifique su conexión de red"
@@ -5310,7 +5319,7 @@ msgstr "Recargando"
msgid "Reloading nginx"
msgstr "Recargando Nginx"
#: src/constants/index.ts:43
#: src/constants/index.ts:43 src/constants/index.ts:49
msgid "Remote"
msgstr "Remoto"
@@ -5486,7 +5495,7 @@ msgstr "Respuestas"
msgid "Restart"
msgstr "Reiniciar"
#: src/components/NamespaceTabs/NamespaceTabs.vue:149
#: src/components/NamespaceTabs/NamespaceTabs.vue:161
#: src/views/node/Node.vue:229 src/views/node/Node.vue:237
msgid "Restart Nginx"
msgstr "Reiniciar Nginx"
@@ -5507,7 +5516,7 @@ msgstr "Error al reiniciar Nginx remoto"
msgid "Restart Remote Nginx Success"
msgstr "Reinicio remoto de Nginx exitoso"
#: src/components/NamespaceTabs/NamespaceTabs.vue:105
#: src/components/NamespaceTabs/NamespaceTabs.vue:113
msgid "Restart request failed, please check your network connection"
msgstr "La solicitud de reinicio falló, por favor verifique su conexión de red"
@@ -6369,7 +6378,7 @@ msgid "Sync Config Success"
msgstr "Configuración de sincronización exitosa"
#: src/components/NamespaceRender/NamespaceRender.vue:53
#: src/components/NamespaceTabs/NamespaceTabs.vue:123
#: src/components/NamespaceTabs/NamespaceTabs.vue:135
#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31
msgid "Sync Nodes"
msgstr "Nodos de sincronización"
@@ -7032,7 +7041,7 @@ msgstr "Actualización exitosa"
#: src/views/certificate/ACMEUser.vue:124
#: src/views/certificate/DNSCredential.vue:65
#: src/views/config/components/ConfigRightPanel/Basic.vue:54
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:78
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91
#: src/views/node/nodeColumns.tsx:89
#: src/views/site/site_edit/components/RightPanel/Basic.vue:39
#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80
@@ -7233,8 +7242,8 @@ msgstr "Visitas"
msgid "Waiting processes"
msgstr "Procesos de espera"
#: src/constants/index.ts:24 src/views/backup/components/BackupCreator.vue:138
#: src/views/config/InspectConfig.vue:51
#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24
#: src/views/backup/components/BackupCreator.vue:138
#: src/views/notification/notificationColumns.tsx:21
#: src/views/preference/components/AuthSettings/AddPasskey.vue:88
msgid "Warning"
@@ -7391,8 +7400,8 @@ msgstr "Escribir la clave privada del certificado a disco"
msgid "Writing certificate to disk"
msgstr "Escribir certificado a disco"
#: src/components/NamespaceTabs/NamespaceTabs.vue:131
#: src/components/NamespaceTabs/NamespaceTabs.vue:143
#: src/components/NamespaceTabs/NamespaceTabs.vue:155
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101
#: src/components/NgxConfigEditor/LocationEditor.vue:88
#: src/views/nginx_log/indexing/IndexManagement.vue:31
@@ -7472,6 +7481,15 @@ msgstr "Sus llaves de acceso"
msgid "Zero-allocation pipeline"
msgstr "Canalización sin asignación"
#~ msgid "Sandbox test successful"
#~ msgstr "Prueba de sandbox exitosa"
#~ msgid "Tested in isolated sandbox mode"
#~ msgstr "Probado en modo sandbox aislado"
#~ msgid "All"
#~ msgstr "Todos"
#~ msgid "Based on M2 Pro (12 cores) testing"
#~ msgstr "Basado en pruebas con M2 Pro (12 núcleos)"
+42 -24
View File
@@ -195,7 +195,7 @@ msgstr "Action"
#: src/views/certificate/ACMEUser.vue:131
#: src/views/certificate/CertificateList/certColumns.tsx:92
#: src/views/certificate/DNSCredential.vue:71
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:84
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97
#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96
#: src/views/notification/notificationColumns.tsx:72
#: src/views/preference/components/ExternalNotify/columns.tsx:85
@@ -310,10 +310,6 @@ msgstr ""
"Ensuite, rafraîchissez cette page et cliquez à nouveau sur ajouter une clé "
"d'accès."
#: src/components/NamespaceTabs/NamespaceTabs.vue:116
msgid "All"
msgstr "Tous"
#: src/views/system/Licenses.vue:152
msgid "All Components"
msgstr "Tous les composants"
@@ -411,7 +407,7 @@ msgstr "Êtes-vous sûr de vouloir supprimer définitivement ?"
msgid "Are you sure you want to delete?"
msgstr "Etes-vous sûr que vous voulez supprimer ?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:130
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
msgid "Are you sure you want to reload Nginx on the following sync nodes?"
msgstr ""
"Êtes-vous sûr de vouloir recharger Nginx sur les nœuds de synchronisation "
@@ -429,7 +425,7 @@ msgstr "Êtes-vous sûr de vouloir supprimer cet élément ?"
msgid "Are you sure you want to remove this location?"
msgstr "Voulez-vous vraiment supprimer cette localisation ?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
#: src/components/NamespaceTabs/NamespaceTabs.vue:154
msgid "Are you sure you want to restart Nginx on the following sync nodes?"
msgstr ""
"Êtes-vous sûr de vouloir redémarrer Nginx sur les nœuds de synchronisation "
@@ -1309,10 +1305,16 @@ msgstr "Modèle de configuration"
msgid "Configuration"
msgstr "Configuration"
#: src/views/config/InspectConfig.vue:45
#: src/components/InspectConfig/InspectConfig.vue:62
msgid "Configuration file is test successful"
msgstr "Le fichier de configuration est testé avec succès"
#: src/components/InspectConfig/InspectConfig.vue:61
msgid "Configuration file is test successful in isolated sandbox"
msgstr ""
"Le fichier de configuration a été testé avec succès dans un environnement "
"de bac à sable isolé"
#: src/components/ConfigHistory/ConfigHistory.vue:147
msgid "Configuration History"
msgstr "Historique de configuration"
@@ -1462,7 +1464,7 @@ msgstr ""
"téléchargés sur votre ordinateur."
#: src/views/backup/AutoBackup/AutoBackup.vue:229
#: src/views/namespace/columns.ts:72
#: src/views/namespace/columns.ts:85
#: src/views/notification/notificationColumns.tsx:51
#: src/views/preference/components/AuthSettings/Passkey.vue:96
#: src/views/preference/components/ExternalNotify/columns.tsx:80
@@ -1707,6 +1709,10 @@ msgstr "Démo"
msgid "Deploy"
msgstr "Déployer"
#: src/views/namespace/columns.ts:72
msgid "Deploy Mode"
msgstr "Mode de déploiement"
#: src/views/nginx_log/structured/StructuredLogViewer.vue:735
msgid "Descending"
msgstr "Décroissant"
@@ -2247,7 +2253,7 @@ msgstr "La configuration de l'environnement est vide"
msgid "Environment variables cleaned"
msgstr "Variables d'environnement nettoyées"
#: src/constants/index.ts:23 src/views/config/InspectConfig.vue:63
#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23
#: src/views/nginx_log/NginxLogList.vue:243
#: src/views/notification/notificationColumns.tsx:14
msgid "Error"
@@ -3613,9 +3619,10 @@ msgstr "Chargement des données..."
msgid "Loading..."
msgstr "Chargement..."
#: src/components/NamespaceTabs/NamespaceTabs.vue:124
#: src/components/NodeIndicator/NodeIndicator.vue:38
#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42
#: src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/views/backup/AutoBackup/AutoBackup.vue:83
#: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
#: src/views/preference/tabs/NginxSettings.vue:55
@@ -4297,8 +4304,8 @@ msgid "Nginx.conf includes streams-enabled directory"
msgstr "Nginx.conf inclut le répertoire streams-enabled"
#: src/components/LLM/ChatMessageInput.vue:61
#: src/components/NamespaceTabs/NamespaceTabs.vue:132
#: src/components/NamespaceTabs/NamespaceTabs.vue:144
#: src/components/NamespaceTabs/NamespaceTabs.vue:156
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102
#: src/components/NgxConfigEditor/LocationEditor.vue:89
#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40
@@ -4532,11 +4539,12 @@ msgstr "Désactivé"
msgid "Official Document"
msgstr "Documentation officielle"
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:84
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55
#: src/views/upstream/SocketList.vue:46
msgid "Offline"
msgstr "Hors ligne"
@@ -4569,12 +4577,13 @@ msgstr "Activé"
msgid "Once the verification is complete, the records will be removed."
msgstr "Une fois la vérification terminée, les enregistrements seront supprimés."
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:64
#: src/components/NodeSelector/NodeSelector.vue:78
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51
#: src/views/upstream/SocketList.vue:46
msgid "Online"
msgstr "En ligne"
@@ -5272,7 +5281,7 @@ msgid "Reload"
msgstr "Recharger"
#: src/components/NamespaceRender/NamespaceRender.vue:44
#: src/components/NamespaceTabs/NamespaceTabs.vue:137 src/constants/index.ts:38
#: src/components/NamespaceTabs/NamespaceTabs.vue:149 src/constants/index.ts:38
#: src/views/node/Node.vue:208 src/views/node/Node.vue:216
msgid "Reload Nginx"
msgstr "Recharger nginx"
@@ -5297,7 +5306,7 @@ msgstr "Erreur de rechargement de Nginx distant"
msgid "Reload Remote Nginx Success"
msgstr "Rechargement distant de Nginx réussi"
#: src/components/NamespaceTabs/NamespaceTabs.vue:85
#: src/components/NamespaceTabs/NamespaceTabs.vue:93
msgid "Reload request failed, please check your network connection"
msgstr ""
"La demande de rechargement a échoué, veuillez vérifier votre connexion "
@@ -5311,7 +5320,7 @@ msgstr "Rechargement"
msgid "Reloading nginx"
msgstr "Rechargement de nginx"
#: src/constants/index.ts:43
#: src/constants/index.ts:43 src/constants/index.ts:49
msgid "Remote"
msgstr "Distant"
@@ -5487,7 +5496,7 @@ msgstr "Réponses"
msgid "Restart"
msgstr "Redémarrer"
#: src/components/NamespaceTabs/NamespaceTabs.vue:149
#: src/components/NamespaceTabs/NamespaceTabs.vue:161
#: src/views/node/Node.vue:229 src/views/node/Node.vue:237
msgid "Restart Nginx"
msgstr "Redémarrer Nginx"
@@ -5508,7 +5517,7 @@ msgstr "Erreur de redémarrage de Nginx distant"
msgid "Restart Remote Nginx Success"
msgstr "Redémarrage distant de Nginx réussi"
#: src/components/NamespaceTabs/NamespaceTabs.vue:105
#: src/components/NamespaceTabs/NamespaceTabs.vue:113
msgid "Restart request failed, please check your network connection"
msgstr "La demande de redémarrage a échoué, veuillez vérifier votre connexion réseau"
@@ -6372,7 +6381,7 @@ msgid "Sync Config Success"
msgstr "Synchronisation de la configuration réussie"
#: src/components/NamespaceRender/NamespaceRender.vue:53
#: src/components/NamespaceTabs/NamespaceTabs.vue:123
#: src/components/NamespaceTabs/NamespaceTabs.vue:135
#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31
msgid "Sync Nodes"
msgstr "Nœuds de synchronisation"
@@ -7044,7 +7053,7 @@ msgstr "Mise à jour réussie"
#: src/views/certificate/ACMEUser.vue:124
#: src/views/certificate/DNSCredential.vue:65
#: src/views/config/components/ConfigRightPanel/Basic.vue:54
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:78
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91
#: src/views/node/nodeColumns.tsx:89
#: src/views/site/site_edit/components/RightPanel/Basic.vue:39
#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80
@@ -7245,8 +7254,8 @@ msgstr "Visites"
msgid "Waiting processes"
msgstr "Processus d'attente"
#: src/constants/index.ts:24 src/views/backup/components/BackupCreator.vue:138
#: src/views/config/InspectConfig.vue:51
#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24
#: src/views/backup/components/BackupCreator.vue:138
#: src/views/notification/notificationColumns.tsx:21
#: src/views/preference/components/AuthSettings/AddPasskey.vue:88
msgid "Warning"
@@ -7406,8 +7415,8 @@ msgstr "Écriture de la clé privée du certificat sur le disque"
msgid "Writing certificate to disk"
msgstr "Écriture du certificat sur le disque"
#: src/components/NamespaceTabs/NamespaceTabs.vue:131
#: src/components/NamespaceTabs/NamespaceTabs.vue:143
#: src/components/NamespaceTabs/NamespaceTabs.vue:155
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101
#: src/components/NgxConfigEditor/LocationEditor.vue:88
#: src/views/nginx_log/indexing/IndexManagement.vue:31
@@ -7487,6 +7496,15 @@ msgstr "Vos clés d'accès"
msgid "Zero-allocation pipeline"
msgstr "Pipeline sans allocation"
#~ msgid "Sandbox test successful"
#~ msgstr "Test du bac à sable réussi"
#~ msgid "Tested in isolated sandbox mode"
#~ msgstr "Testé en mode sandbox isolé"
#~ msgid "All"
#~ msgstr "Tous"
#~ msgid "Based on M2 Pro (12 cores) testing"
#~ msgstr "Basé sur des tests avec M2 Pro (12 cœurs)"
+40 -24
View File
@@ -186,7 +186,7 @@ msgstr "操作"
#: src/views/certificate/ACMEUser.vue:131
#: src/views/certificate/CertificateList/certColumns.tsx:92
#: src/views/certificate/DNSCredential.vue:71
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:84
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97
#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96
#: src/views/notification/notificationColumns.tsx:72
#: src/views/preference/components/ExternalNotify/columns.tsx:85
@@ -297,10 +297,6 @@ msgstr "詳細設定"
msgid "Afterwards, refresh this page and click add passkey again."
msgstr "その後、このページを更新し、再度パスキーを追加をクリックしてください。"
#: src/components/NamespaceTabs/NamespaceTabs.vue:116
msgid "All"
msgstr "すべて"
#: src/views/system/Licenses.vue:152
msgid "All Components"
msgstr "すべてのコンポーネント"
@@ -394,7 +390,7 @@ msgstr "完全に削除してもよろしいですか?"
msgid "Are you sure you want to delete?"
msgstr "削除してもよろしいですか?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:130
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
msgid "Are you sure you want to reload Nginx on the following sync nodes?"
msgstr "以下の同期ノードでNginxを再読み込みしてもよろしいですか?"
@@ -410,7 +406,7 @@ msgstr "このアイテムを削除してもよろしいですか?"
msgid "Are you sure you want to remove this location?"
msgstr "このLocationを削除してもよろしいですか?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
#: src/components/NamespaceTabs/NamespaceTabs.vue:154
msgid "Are you sure you want to restart Nginx on the following sync nodes?"
msgstr "以下の同期ノードでNginxを再起動してもよろしいですか?"
@@ -1252,10 +1248,14 @@ msgstr "設定テンプレート"
msgid "Configuration"
msgstr "設定"
#: src/views/config/InspectConfig.vue:45
#: src/components/InspectConfig/InspectConfig.vue:62
msgid "Configuration file is test successful"
msgstr "正常に設定ファイルをテストしました"
#: src/components/InspectConfig/InspectConfig.vue:61
msgid "Configuration file is test successful in isolated sandbox"
msgstr "設定ファイルは隔離されたサンドボックスでテストに成功しました"
#: src/components/ConfigHistory/ConfigHistory.vue:147
msgid "Configuration History"
msgstr "設定履歴"
@@ -1400,7 +1400,7 @@ msgid ""
msgstr "Nginx 設定と Nginx UI 設定を含むシステムバックアップを作成します。バックアップファイルは自動的にコンピュータにダウンロードされます。"
#: src/views/backup/AutoBackup/AutoBackup.vue:229
#: src/views/namespace/columns.ts:72
#: src/views/namespace/columns.ts:85
#: src/views/notification/notificationColumns.tsx:51
#: src/views/preference/components/AuthSettings/Passkey.vue:96
#: src/views/preference/components/ExternalNotify/columns.tsx:80
@@ -1641,6 +1641,10 @@ msgstr "デモ"
msgid "Deploy"
msgstr "デプロイ"
#: src/views/namespace/columns.ts:72
msgid "Deploy Mode"
msgstr "デプロイモード"
#: src/views/nginx_log/structured/StructuredLogViewer.vue:735
msgid "Descending"
msgstr "降順"
@@ -2172,7 +2176,7 @@ msgstr "環境設定が空です"
msgid "Environment variables cleaned"
msgstr "環境変数をクリーンアップしました"
#: src/constants/index.ts:23 src/views/config/InspectConfig.vue:63
#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23
#: src/views/nginx_log/NginxLogList.vue:243
#: src/views/notification/notificationColumns.tsx:14
msgid "Error"
@@ -3502,9 +3506,10 @@ msgstr "データを読み込んでいます..."
msgid "Loading..."
msgstr "読み込み中..."
#: src/components/NamespaceTabs/NamespaceTabs.vue:124
#: src/components/NodeIndicator/NodeIndicator.vue:38
#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42
#: src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/views/backup/AutoBackup/AutoBackup.vue:83
#: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
#: src/views/preference/tabs/NginxSettings.vue:55
@@ -4177,8 +4182,8 @@ msgid "Nginx.conf includes streams-enabled directory"
msgstr "Nginx.conf には streams-enabled ディレクトリが含まれています"
#: src/components/LLM/ChatMessageInput.vue:61
#: src/components/NamespaceTabs/NamespaceTabs.vue:132
#: src/components/NamespaceTabs/NamespaceTabs.vue:144
#: src/components/NamespaceTabs/NamespaceTabs.vue:156
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102
#: src/components/NgxConfigEditor/LocationEditor.vue:89
#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40
@@ -4403,11 +4408,12 @@ msgstr "オフ"
msgid "Official Document"
msgstr "公式ドキュメント"
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:84
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55
#: src/views/upstream/SocketList.vue:46
msgid "Offline"
msgstr "オフライン"
@@ -4440,12 +4446,13 @@ msgstr "オン"
msgid "Once the verification is complete, the records will be removed."
msgstr "検証が完了すると、レコードは削除されます。"
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:64
#: src/components/NodeSelector/NodeSelector.vue:78
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51
#: src/views/upstream/SocketList.vue:46
msgid "Online"
msgstr "オンライン"
@@ -5114,7 +5121,7 @@ msgid "Reload"
msgstr "再読み込み"
#: src/components/NamespaceRender/NamespaceRender.vue:44
#: src/components/NamespaceTabs/NamespaceTabs.vue:137 src/constants/index.ts:38
#: src/components/NamespaceTabs/NamespaceTabs.vue:149 src/constants/index.ts:38
#: src/views/node/Node.vue:208 src/views/node/Node.vue:216
msgid "Reload Nginx"
msgstr "Nginx をリロード"
@@ -5139,7 +5146,7 @@ msgstr "リモートNginxの再読み込みエラー"
msgid "Reload Remote Nginx Success"
msgstr "リモートNginxのリロード成功"
#: src/components/NamespaceTabs/NamespaceTabs.vue:85
#: src/components/NamespaceTabs/NamespaceTabs.vue:93
msgid "Reload request failed, please check your network connection"
msgstr "再読み込みリクエストが失敗しました。ネットワーク接続を確認してください"
@@ -5151,7 +5158,7 @@ msgstr "再読み込み中"
msgid "Reloading nginx"
msgstr "nginx をリロード中"
#: src/constants/index.ts:43
#: src/constants/index.ts:43 src/constants/index.ts:49
msgid "Remote"
msgstr "リモート"
@@ -5324,7 +5331,7 @@ msgstr "レスポンス"
msgid "Restart"
msgstr "再起動"
#: src/components/NamespaceTabs/NamespaceTabs.vue:149
#: src/components/NamespaceTabs/NamespaceTabs.vue:161
#: src/views/node/Node.vue:229 src/views/node/Node.vue:237
msgid "Restart Nginx"
msgstr "Nginx を再起動"
@@ -5345,7 +5352,7 @@ msgstr "リモートNginxの再起動エラー"
msgid "Restart Remote Nginx Success"
msgstr "リモートNginxの再起動成功"
#: src/components/NamespaceTabs/NamespaceTabs.vue:105
#: src/components/NamespaceTabs/NamespaceTabs.vue:113
msgid "Restart request failed, please check your network connection"
msgstr "再起動リクエストが失敗しました。ネットワーク接続を確認してください"
@@ -6186,7 +6193,7 @@ msgid "Sync Config Success"
msgstr "設定の同期に成功しました"
#: src/components/NamespaceRender/NamespaceRender.vue:53
#: src/components/NamespaceTabs/NamespaceTabs.vue:123
#: src/components/NamespaceTabs/NamespaceTabs.vue:135
#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31
msgid "Sync Nodes"
msgstr "同期ノード"
@@ -6801,7 +6808,7 @@ msgstr "更新に成功しました"
#: src/views/certificate/ACMEUser.vue:124
#: src/views/certificate/DNSCredential.vue:65
#: src/views/config/components/ConfigRightPanel/Basic.vue:54
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:78
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91
#: src/views/node/nodeColumns.tsx:89
#: src/views/site/site_edit/components/RightPanel/Basic.vue:39
#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80
@@ -7002,8 +7009,8 @@ msgstr "訪問数"
msgid "Waiting processes"
msgstr "待機プロセス"
#: src/constants/index.ts:24 src/views/backup/components/BackupCreator.vue:138
#: src/views/config/InspectConfig.vue:51
#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24
#: src/views/backup/components/BackupCreator.vue:138
#: src/views/notification/notificationColumns.tsx:21
#: src/views/preference/components/AuthSettings/AddPasskey.vue:88
msgid "Warning"
@@ -7146,8 +7153,8 @@ msgstr "証明書の秘密鍵をディスクに書き込んでいます"
msgid "Writing certificate to disk"
msgstr "証明書をディスクに書き込み中"
#: src/components/NamespaceTabs/NamespaceTabs.vue:131
#: src/components/NamespaceTabs/NamespaceTabs.vue:143
#: src/components/NamespaceTabs/NamespaceTabs.vue:155
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101
#: src/components/NgxConfigEditor/LocationEditor.vue:88
#: src/views/nginx_log/indexing/IndexManagement.vue:31
@@ -7216,6 +7223,15 @@ msgstr "あなたのパスキー"
msgid "Zero-allocation pipeline"
msgstr "ゼロアロケーションパイプライン"
#~ msgid "Sandbox test successful"
#~ msgstr "サンドボックステスト成功"
#~ msgid "Tested in isolated sandbox mode"
#~ msgstr "隔離されたサンドボックスモードでテストされました"
#~ msgid "All"
#~ msgstr "すべて"
#~ msgid "Based on M2 Pro (12 cores) testing"
#~ msgstr "M2 Pro12コア)でのテストに基づく"
+40 -24
View File
@@ -184,7 +184,7 @@ msgstr "작업"
#: src/views/certificate/ACMEUser.vue:131
#: src/views/certificate/CertificateList/certColumns.tsx:92
#: src/views/certificate/DNSCredential.vue:71
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:84
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97
#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96
#: src/views/notification/notificationColumns.tsx:72
#: src/views/preference/components/ExternalNotify/columns.tsx:85
@@ -295,10 +295,6 @@ msgstr "고급 설정"
msgid "Afterwards, refresh this page and click add passkey again."
msgstr "이후에 이 페이지를 새로 고치고 패스키 추가를 다시 클릭하세요."
#: src/components/NamespaceTabs/NamespaceTabs.vue:116
msgid "All"
msgstr "모두"
#: src/views/system/Licenses.vue:152
msgid "All Components"
msgstr "모든 구성 요소"
@@ -392,7 +388,7 @@ msgstr "정말 영구적으로 삭제하시겠습니까?"
msgid "Are you sure you want to delete?"
msgstr "정말 삭제하시겠습니까?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:130
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
msgid "Are you sure you want to reload Nginx on the following sync nodes?"
msgstr "다음 동기화 노드에서 Nginx를 다시 로드하시겠습니까?"
@@ -408,7 +404,7 @@ msgstr "이 항목을 제거하시겠습니까?"
msgid "Are you sure you want to remove this location?"
msgstr "이 위치를 제거하시겠습니까?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
#: src/components/NamespaceTabs/NamespaceTabs.vue:154
msgid "Are you sure you want to restart Nginx on the following sync nodes?"
msgstr "다음 동기화 노드에서 Nginx를 다시 시작하시겠습니까?"
@@ -1249,10 +1245,14 @@ msgstr "설정 템플릿"
msgid "Configuration"
msgstr "구성"
#: src/views/config/InspectConfig.vue:45
#: src/components/InspectConfig/InspectConfig.vue:62
msgid "Configuration file is test successful"
msgstr "구성 파일 테스트 성공"
#: src/components/InspectConfig/InspectConfig.vue:61
msgid "Configuration file is test successful in isolated sandbox"
msgstr "구성 파일이 격리된 샌드박스에서 테스트에 성공했습니다"
#: src/components/ConfigHistory/ConfigHistory.vue:147
msgid "Configuration History"
msgstr "구성 기록"
@@ -1397,7 +1397,7 @@ msgid ""
msgstr "Nginx 구성 및 Nginx UI 설정을 포함한 시스템 백업을 생성합니다. 백업 파일은 자동으로 컴퓨터에 다운로드됩니다."
#: src/views/backup/AutoBackup/AutoBackup.vue:229
#: src/views/namespace/columns.ts:72
#: src/views/namespace/columns.ts:85
#: src/views/notification/notificationColumns.tsx:51
#: src/views/preference/components/AuthSettings/Passkey.vue:96
#: src/views/preference/components/ExternalNotify/columns.tsx:80
@@ -1638,6 +1638,10 @@ msgstr "데모"
msgid "Deploy"
msgstr "배포"
#: src/views/namespace/columns.ts:72
msgid "Deploy Mode"
msgstr "배포 모드"
#: src/views/nginx_log/structured/StructuredLogViewer.vue:735
msgid "Descending"
msgstr "내림차순"
@@ -2171,7 +2175,7 @@ msgstr "환경 구성이 비어 있습니다"
msgid "Environment variables cleaned"
msgstr "환경 변수가 정리되었습니다"
#: src/constants/index.ts:23 src/views/config/InspectConfig.vue:63
#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23
#: src/views/nginx_log/NginxLogList.vue:243
#: src/views/notification/notificationColumns.tsx:14
msgid "Error"
@@ -3501,9 +3505,10 @@ msgstr "데이터를 불러오는 중..."
msgid "Loading..."
msgstr "로드 중..."
#: src/components/NamespaceTabs/NamespaceTabs.vue:124
#: src/components/NodeIndicator/NodeIndicator.vue:38
#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42
#: src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/views/backup/AutoBackup/AutoBackup.vue:83
#: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
#: src/views/preference/tabs/NginxSettings.vue:55
@@ -4173,8 +4178,8 @@ msgid "Nginx.conf includes streams-enabled directory"
msgstr "Nginx.conf에는 streams-enabled 디렉토리가 포함됩니다"
#: src/components/LLM/ChatMessageInput.vue:61
#: src/components/NamespaceTabs/NamespaceTabs.vue:132
#: src/components/NamespaceTabs/NamespaceTabs.vue:144
#: src/components/NamespaceTabs/NamespaceTabs.vue:156
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102
#: src/components/NgxConfigEditor/LocationEditor.vue:89
#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40
@@ -4399,11 +4404,12 @@ msgstr "끔"
msgid "Official Document"
msgstr "공식 문서"
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:84
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55
#: src/views/upstream/SocketList.vue:46
msgid "Offline"
msgstr "오프라인"
@@ -4436,12 +4442,13 @@ msgstr "켜짐"
msgid "Once the verification is complete, the records will be removed."
msgstr "검증이 완료되면, 레코드는 제거됩니다."
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:64
#: src/components/NodeSelector/NodeSelector.vue:78
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51
#: src/views/upstream/SocketList.vue:46
msgid "Online"
msgstr "온라인"
@@ -5108,7 +5115,7 @@ msgid "Reload"
msgstr "리로드"
#: src/components/NamespaceRender/NamespaceRender.vue:44
#: src/components/NamespaceTabs/NamespaceTabs.vue:137 src/constants/index.ts:38
#: src/components/NamespaceTabs/NamespaceTabs.vue:149 src/constants/index.ts:38
#: src/views/node/Node.vue:208 src/views/node/Node.vue:216
msgid "Reload Nginx"
msgstr "Nginx 다시 로드"
@@ -5133,7 +5140,7 @@ msgstr "원격 Nginx 다시 로드 오류"
msgid "Reload Remote Nginx Success"
msgstr "원격 Nginx 다시 로드 성공"
#: src/components/NamespaceTabs/NamespaceTabs.vue:85
#: src/components/NamespaceTabs/NamespaceTabs.vue:93
msgid "Reload request failed, please check your network connection"
msgstr "다시 로드 요청이 실패했습니다. 네트워크 연결을 확인하세요"
@@ -5145,7 +5152,7 @@ msgstr "리로딩 중"
msgid "Reloading nginx"
msgstr "Nginx 리로딩 중"
#: src/constants/index.ts:43
#: src/constants/index.ts:43 src/constants/index.ts:49
msgid "Remote"
msgstr "원격"
@@ -5320,7 +5327,7 @@ msgstr "응답"
msgid "Restart"
msgstr "재시작"
#: src/components/NamespaceTabs/NamespaceTabs.vue:149
#: src/components/NamespaceTabs/NamespaceTabs.vue:161
#: src/views/node/Node.vue:229 src/views/node/Node.vue:237
msgid "Restart Nginx"
msgstr "Nginx 다시 시작"
@@ -5341,7 +5348,7 @@ msgstr "원격 Nginx 재시작 오류"
msgid "Restart Remote Nginx Success"
msgstr "원격 Nginx 재시작 성공"
#: src/components/NamespaceTabs/NamespaceTabs.vue:105
#: src/components/NamespaceTabs/NamespaceTabs.vue:113
msgid "Restart request failed, please check your network connection"
msgstr "재시작 요청이 실패했습니다. 네트워크 연결을 확인해 주세요"
@@ -6182,7 +6189,7 @@ msgid "Sync Config Success"
msgstr "구성 동기화 성공"
#: src/components/NamespaceRender/NamespaceRender.vue:53
#: src/components/NamespaceTabs/NamespaceTabs.vue:123
#: src/components/NamespaceTabs/NamespaceTabs.vue:135
#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31
msgid "Sync Nodes"
msgstr "동기화 노드"
@@ -6794,7 +6801,7 @@ msgstr "성공적으로 업데이트되었습니다"
#: src/views/certificate/ACMEUser.vue:124
#: src/views/certificate/DNSCredential.vue:65
#: src/views/config/components/ConfigRightPanel/Basic.vue:54
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:78
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91
#: src/views/node/nodeColumns.tsx:89
#: src/views/site/site_edit/components/RightPanel/Basic.vue:39
#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80
@@ -6995,8 +7002,8 @@ msgstr "방문 수"
msgid "Waiting processes"
msgstr "대기 과정"
#: src/constants/index.ts:24 src/views/backup/components/BackupCreator.vue:138
#: src/views/config/InspectConfig.vue:51
#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24
#: src/views/backup/components/BackupCreator.vue:138
#: src/views/notification/notificationColumns.tsx:21
#: src/views/preference/components/AuthSettings/AddPasskey.vue:88
msgid "Warning"
@@ -7138,8 +7145,8 @@ msgstr "인증서 개인 키를 디스크에 쓰기"
msgid "Writing certificate to disk"
msgstr "인증서를 디스크에 쓰기"
#: src/components/NamespaceTabs/NamespaceTabs.vue:131
#: src/components/NamespaceTabs/NamespaceTabs.vue:143
#: src/components/NamespaceTabs/NamespaceTabs.vue:155
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101
#: src/components/NgxConfigEditor/LocationEditor.vue:88
#: src/views/nginx_log/indexing/IndexManagement.vue:31
@@ -7210,6 +7217,15 @@ msgstr "귀하의 패스키"
msgid "Zero-allocation pipeline"
msgstr "할당 없는 파이프라인"
#~ msgid "Sandbox test successful"
#~ msgstr "샌드박스 테스트 성공"
#~ msgid "Tested in isolated sandbox mode"
#~ msgstr "격리된 샌드박스 모드에서 테스트됨"
#~ msgid "All"
#~ msgstr "모두"
#~ msgid "Based on M2 Pro (12 cores) testing"
#~ msgstr "M2 Pro(12코어) 테스트 기반"
+30 -21
View File
@@ -169,7 +169,7 @@ msgstr ""
#: src/views/certificate/CertificateList/certColumns.tsx:92
#: src/views/certificate/DNSCredential.vue:71
#: src/views/config/configColumns.tsx:51
#: src/views/namespace/columns.ts:84
#: src/views/namespace/columns.ts:97
#: src/views/nginx_log/NginxLogList.vue:332
#: src/views/node/nodeColumns.tsx:96
#: src/views/notification/notificationColumns.tsx:72
@@ -285,10 +285,6 @@ msgstr ""
msgid "Afterwards, refresh this page and click add passkey again."
msgstr ""
#: src/components/NamespaceTabs/NamespaceTabs.vue:116
msgid "All"
msgstr ""
#: src/views/system/Licenses.vue:152
msgid "All Components"
msgstr ""
@@ -381,7 +377,7 @@ msgstr ""
msgid "Are you sure you want to delete?"
msgstr ""
#: src/components/NamespaceTabs/NamespaceTabs.vue:130
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
msgid "Are you sure you want to reload Nginx on the following sync nodes?"
msgstr ""
@@ -397,7 +393,7 @@ msgstr ""
msgid "Are you sure you want to remove this location?"
msgstr ""
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
#: src/components/NamespaceTabs/NamespaceTabs.vue:154
msgid "Are you sure you want to restart Nginx on the following sync nodes?"
msgstr ""
@@ -1186,10 +1182,14 @@ msgstr ""
msgid "Configuration"
msgstr ""
#: src/views/config/InspectConfig.vue:45
#: src/components/InspectConfig/InspectConfig.vue:62
msgid "Configuration file is test successful"
msgstr ""
#: src/components/InspectConfig/InspectConfig.vue:61
msgid "Configuration file is test successful in isolated sandbox"
msgstr ""
#: src/components/ConfigHistory/ConfigHistory.vue:147
msgid "Configuration History"
msgstr ""
@@ -1333,7 +1333,7 @@ msgid "Create system backups including Nginx configuration and Nginx UI settings
msgstr ""
#: src/views/backup/AutoBackup/AutoBackup.vue:229
#: src/views/namespace/columns.ts:72
#: src/views/namespace/columns.ts:85
#: src/views/notification/notificationColumns.tsx:51
#: src/views/preference/components/AuthSettings/Passkey.vue:96
#: src/views/preference/components/ExternalNotify/columns.tsx:80
@@ -1576,6 +1576,10 @@ msgstr ""
msgid "Deploy"
msgstr ""
#: src/views/namespace/columns.ts:72
msgid "Deploy Mode"
msgstr ""
#: src/views/nginx_log/structured/StructuredLogViewer.vue:735
msgid "Descending"
msgstr ""
@@ -2107,8 +2111,8 @@ msgstr ""
msgid "Environment variables cleaned"
msgstr ""
#: src/components/InspectConfig/InspectConfig.vue:80
#: src/constants/index.ts:23
#: src/views/config/InspectConfig.vue:63
#: src/views/nginx_log/NginxLogList.vue:243
#: src/views/notification/notificationColumns.tsx:14
msgid "Error"
@@ -3413,9 +3417,11 @@ msgstr ""
msgid "Loading..."
msgstr ""
#: src/components/NamespaceTabs/NamespaceTabs.vue:124
#: src/components/NodeIndicator/NodeIndicator.vue:38
#: src/components/NodeSelector/NodeSelector.vue:61
#: src/constants/index.ts:42
#: src/constants/index.ts:48
#: src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/views/backup/AutoBackup/AutoBackup.vue:83
#: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
@@ -4084,8 +4090,8 @@ msgid "Nginx.conf includes streams-enabled directory"
msgstr ""
#: src/components/LLM/ChatMessageInput.vue:61
#: src/components/NamespaceTabs/NamespaceTabs.vue:132
#: src/components/NamespaceTabs/NamespaceTabs.vue:144
#: src/components/NamespaceTabs/NamespaceTabs.vue:156
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102
#: src/components/NgxConfigEditor/LocationEditor.vue:89
#: src/components/Notification/Notification.vue:109
@@ -4303,12 +4309,13 @@ msgstr ""
msgid "Official Document"
msgstr ""
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:84
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:159
#: src/views/node/nodeColumns.tsx:55
#: src/views/upstream/SocketList.vue:46
msgid "Offline"
msgstr ""
@@ -4342,13 +4349,14 @@ msgstr ""
msgid "Once the verification is complete, the records will be removed."
msgstr ""
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:64
#: src/components/NodeSelector/NodeSelector.vue:78
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:152
#: src/views/node/nodeColumns.tsx:51
#: src/views/upstream/SocketList.vue:46
msgid "Online"
msgstr ""
@@ -5001,7 +5009,7 @@ msgid "Reload"
msgstr ""
#: src/components/NamespaceRender/NamespaceRender.vue:44
#: src/components/NamespaceTabs/NamespaceTabs.vue:137
#: src/components/NamespaceTabs/NamespaceTabs.vue:149
#: src/constants/index.ts:38
#: src/views/node/Node.vue:208
#: src/views/node/Node.vue:216
@@ -5028,7 +5036,7 @@ msgstr ""
msgid "Reload Remote Nginx Success"
msgstr ""
#: src/components/NamespaceTabs/NamespaceTabs.vue:85
#: src/components/NamespaceTabs/NamespaceTabs.vue:93
msgid "Reload request failed, please check your network connection"
msgstr ""
@@ -5041,6 +5049,7 @@ msgid "Reloading nginx"
msgstr ""
#: src/constants/index.ts:43
#: src/constants/index.ts:49
msgid "Remote"
msgstr ""
@@ -5213,7 +5222,7 @@ msgstr ""
msgid "Restart"
msgstr ""
#: src/components/NamespaceTabs/NamespaceTabs.vue:149
#: src/components/NamespaceTabs/NamespaceTabs.vue:161
#: src/views/node/Node.vue:229
#: src/views/node/Node.vue:237
msgid "Restart Nginx"
@@ -5235,7 +5244,7 @@ msgstr ""
msgid "Restart Remote Nginx Success"
msgstr ""
#: src/components/NamespaceTabs/NamespaceTabs.vue:105
#: src/components/NamespaceTabs/NamespaceTabs.vue:113
msgid "Restart request failed, please check your network connection"
msgstr ""
@@ -6067,7 +6076,7 @@ msgid "Sync Config Success"
msgstr ""
#: src/components/NamespaceRender/NamespaceRender.vue:53
#: src/components/NamespaceTabs/NamespaceTabs.vue:123
#: src/components/NamespaceTabs/NamespaceTabs.vue:135
#: src/views/namespace/columns.ts:17
#: src/views/namespace/Namespace.vue:31
msgid "Sync Nodes"
@@ -6614,7 +6623,7 @@ msgstr ""
#: src/views/certificate/DNSCredential.vue:65
#: src/views/config/components/ConfigRightPanel/Basic.vue:54
#: src/views/config/configColumns.tsx:44
#: src/views/namespace/columns.ts:78
#: src/views/namespace/columns.ts:91
#: src/views/node/nodeColumns.tsx:89
#: src/views/site/site_edit/components/RightPanel/Basic.vue:39
#: src/views/site/site_list/columns.tsx:113
@@ -6827,9 +6836,9 @@ msgstr ""
msgid "Waiting processes"
msgstr ""
#: src/components/InspectConfig/InspectConfig.vue:68
#: src/constants/index.ts:24
#: src/views/backup/components/BackupCreator.vue:138
#: src/views/config/InspectConfig.vue:51
#: src/views/notification/notificationColumns.tsx:21
#: src/views/preference/components/AuthSettings/AddPasskey.vue:88
msgid "Warning"
@@ -6951,8 +6960,8 @@ msgstr ""
msgid "Writing certificate to disk"
msgstr ""
#: src/components/NamespaceTabs/NamespaceTabs.vue:131
#: src/components/NamespaceTabs/NamespaceTabs.vue:143
#: src/components/NamespaceTabs/NamespaceTabs.vue:155
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101
#: src/components/NgxConfigEditor/LocationEditor.vue:88
#: src/views/nginx_log/indexing/IndexManagement.vue:31
+42 -24
View File
@@ -188,7 +188,7 @@ msgstr "Acção"
#: src/views/certificate/ACMEUser.vue:131
#: src/views/certificate/CertificateList/certColumns.tsx:92
#: src/views/certificate/DNSCredential.vue:71
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:84
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97
#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96
#: src/views/notification/notificationColumns.tsx:72
#: src/views/preference/components/ExternalNotify/columns.tsx:85
@@ -303,10 +303,6 @@ msgstr ""
"Depois, atualize esta página e clique em adicionar chave de acesso "
"novamente."
#: src/components/NamespaceTabs/NamespaceTabs.vue:116
msgid "All"
msgstr "Todos"
#: src/views/system/Licenses.vue:152
msgid "All Components"
msgstr "Todos os componentes"
@@ -404,7 +400,7 @@ msgstr "Tem a certeza de que pretende eliminar permanentemente?"
msgid "Are you sure you want to delete?"
msgstr "Tem certeza que pretende eliminar?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:130
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
msgid "Are you sure you want to reload Nginx on the following sync nodes?"
msgstr ""
"Tem a certeza que pretende recarregar o Nginx nos seguintes nós de "
@@ -422,7 +418,7 @@ msgstr "Tem certeza que pretende eliminar este item?"
msgid "Are you sure you want to remove this location?"
msgstr "Tem certeza que pretende eliminar este local?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
#: src/components/NamespaceTabs/NamespaceTabs.vue:154
msgid "Are you sure you want to restart Nginx on the following sync nodes?"
msgstr ""
"Tem a certeza de que pretende reiniciar o Nginx nos seguintes nós de "
@@ -1294,10 +1290,16 @@ msgstr "Modelo de Configuração"
msgid "Configuration"
msgstr "Configuração"
#: src/views/config/InspectConfig.vue:45
#: src/components/InspectConfig/InspectConfig.vue:62
msgid "Configuration file is test successful"
msgstr "Ficheiro de configuração testado com sucesso"
#: src/components/InspectConfig/InspectConfig.vue:61
msgid "Configuration file is test successful in isolated sandbox"
msgstr ""
"O ficheiro de configuração foi testado com sucesso num ambiente de sandbox "
"isolado"
#: src/components/ConfigHistory/ConfigHistory.vue:147
msgid "Configuration History"
msgstr "Histórico de Configuração"
@@ -1447,7 +1449,7 @@ msgstr ""
"automaticamente para o seu computador."
#: src/views/backup/AutoBackup/AutoBackup.vue:229
#: src/views/namespace/columns.ts:72
#: src/views/namespace/columns.ts:85
#: src/views/notification/notificationColumns.tsx:51
#: src/views/preference/components/AuthSettings/Passkey.vue:96
#: src/views/preference/components/ExternalNotify/columns.tsx:80
@@ -1690,6 +1692,10 @@ msgstr "Demonstração"
msgid "Deploy"
msgstr "Deploy"
#: src/views/namespace/columns.ts:72
msgid "Deploy Mode"
msgstr "Modo de implantação"
#: src/views/nginx_log/structured/StructuredLogViewer.vue:735
msgid "Descending"
msgstr "Decrescente"
@@ -2225,7 +2231,7 @@ msgstr "A configuração do ambiente está vazia"
msgid "Environment variables cleaned"
msgstr "Variáveis de ambiente limpas"
#: src/constants/index.ts:23 src/views/config/InspectConfig.vue:63
#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23
#: src/views/nginx_log/NginxLogList.vue:243
#: src/views/notification/notificationColumns.tsx:14
msgid "Error"
@@ -3588,9 +3594,10 @@ msgstr "A carregar dados..."
msgid "Loading..."
msgstr "A carregar..."
#: src/components/NamespaceTabs/NamespaceTabs.vue:124
#: src/components/NodeIndicator/NodeIndicator.vue:38
#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42
#: src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/views/backup/AutoBackup/AutoBackup.vue:83
#: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
#: src/views/preference/tabs/NginxSettings.vue:55
@@ -4271,8 +4278,8 @@ msgid "Nginx.conf includes streams-enabled directory"
msgstr "Nginx.conf inclui o diretório streams-enabled"
#: src/components/LLM/ChatMessageInput.vue:61
#: src/components/NamespaceTabs/NamespaceTabs.vue:132
#: src/components/NamespaceTabs/NamespaceTabs.vue:144
#: src/components/NamespaceTabs/NamespaceTabs.vue:156
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102
#: src/components/NgxConfigEditor/LocationEditor.vue:89
#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40
@@ -4506,11 +4513,12 @@ msgstr "Desligado"
msgid "Official Document"
msgstr "Documentação oficial"
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:84
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55
#: src/views/upstream/SocketList.vue:46
msgid "Offline"
msgstr "Off-line"
@@ -4543,12 +4551,13 @@ msgstr "Ligado"
msgid "Once the verification is complete, the records will be removed."
msgstr "Assim que a verificação estiver concluída, os registos serão removidos."
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:64
#: src/components/NodeSelector/NodeSelector.vue:78
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51
#: src/views/upstream/SocketList.vue:46
msgid "Online"
msgstr "On-line"
@@ -5240,7 +5249,7 @@ msgid "Reload"
msgstr "Recarregar"
#: src/components/NamespaceRender/NamespaceRender.vue:44
#: src/components/NamespaceTabs/NamespaceTabs.vue:137 src/constants/index.ts:38
#: src/components/NamespaceTabs/NamespaceTabs.vue:149 src/constants/index.ts:38
#: src/views/node/Node.vue:208 src/views/node/Node.vue:216
msgid "Reload Nginx"
msgstr "Recarregar Nginx"
@@ -5265,7 +5274,7 @@ msgstr "Erro ao Recarregar Nginx Remoto"
msgid "Reload Remote Nginx Success"
msgstr "Recarregamento remoto do Nginx bem-sucedido"
#: src/components/NamespaceTabs/NamespaceTabs.vue:85
#: src/components/NamespaceTabs/NamespaceTabs.vue:93
msgid "Reload request failed, please check your network connection"
msgstr "O pedido de recarregamento falhou, por favor verifique a sua ligação à rede"
@@ -5277,7 +5286,7 @@ msgstr "Recarregando"
msgid "Reloading nginx"
msgstr "Recarregando Nginx"
#: src/constants/index.ts:43
#: src/constants/index.ts:43 src/constants/index.ts:49
msgid "Remote"
msgstr "Remoto"
@@ -5453,7 +5462,7 @@ msgstr "Respostas"
msgid "Restart"
msgstr "Reiniciar"
#: src/components/NamespaceTabs/NamespaceTabs.vue:149
#: src/components/NamespaceTabs/NamespaceTabs.vue:161
#: src/views/node/Node.vue:229 src/views/node/Node.vue:237
msgid "Restart Nginx"
msgstr "Reiniciar Nginx"
@@ -5474,7 +5483,7 @@ msgstr "Erro ao reiniciar Nginx remoto"
msgid "Restart Remote Nginx Success"
msgstr "Reinício remoto do Nginx bem-sucedido"
#: src/components/NamespaceTabs/NamespaceTabs.vue:105
#: src/components/NamespaceTabs/NamespaceTabs.vue:113
msgid "Restart request failed, please check your network connection"
msgstr "Pedido de reinício falhou, por favor verifique a sua ligação à rede"
@@ -6334,7 +6343,7 @@ msgid "Sync Config Success"
msgstr "Sucesso na configuração da sincronização"
#: src/components/NamespaceRender/NamespaceRender.vue:53
#: src/components/NamespaceTabs/NamespaceTabs.vue:123
#: src/components/NamespaceTabs/NamespaceTabs.vue:135
#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31
msgid "Sync Nodes"
msgstr "Nós de sincronização"
@@ -7000,7 +7009,7 @@ msgstr "Atualização bem-sucedida"
#: src/views/certificate/ACMEUser.vue:124
#: src/views/certificate/DNSCredential.vue:65
#: src/views/config/components/ConfigRightPanel/Basic.vue:54
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:78
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91
#: src/views/node/nodeColumns.tsx:89
#: src/views/site/site_edit/components/RightPanel/Basic.vue:39
#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80
@@ -7201,8 +7210,8 @@ msgstr "Visitas"
msgid "Waiting processes"
msgstr "Processos em espera"
#: src/constants/index.ts:24 src/views/backup/components/BackupCreator.vue:138
#: src/views/config/InspectConfig.vue:51
#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24
#: src/views/backup/components/BackupCreator.vue:138
#: src/views/notification/notificationColumns.tsx:21
#: src/views/preference/components/AuthSettings/AddPasskey.vue:88
msgid "Warning"
@@ -7358,8 +7367,8 @@ msgstr "Escrever chave privada do certificado ao disco"
msgid "Writing certificate to disk"
msgstr "Escrevendo certificado no disco"
#: src/components/NamespaceTabs/NamespaceTabs.vue:131
#: src/components/NamespaceTabs/NamespaceTabs.vue:143
#: src/components/NamespaceTabs/NamespaceTabs.vue:155
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101
#: src/components/NgxConfigEditor/LocationEditor.vue:88
#: src/views/nginx_log/indexing/IndexManagement.vue:31
@@ -7439,6 +7448,15 @@ msgstr "As suas chaves de acesso"
msgid "Zero-allocation pipeline"
msgstr "Pipeline sem alocação"
#~ msgid "Sandbox test successful"
#~ msgstr "Teste de sandbox bem-sucedido"
#~ msgid "Tested in isolated sandbox mode"
#~ msgstr "Testado em modo sandbox isolado"
#~ msgid "All"
#~ msgstr "Todos"
#~ msgid "Based on M2 Pro (12 cores) testing"
#~ msgstr "Com base em testes com M2 Pro (12 núcleos)"
+40 -24
View File
@@ -193,7 +193,7 @@ msgstr "Действие"
#: src/views/certificate/ACMEUser.vue:131
#: src/views/certificate/CertificateList/certColumns.tsx:92
#: src/views/certificate/DNSCredential.vue:71
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:84
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97
#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96
#: src/views/notification/notificationColumns.tsx:72
#: src/views/preference/components/ExternalNotify/columns.tsx:85
@@ -306,10 +306,6 @@ msgstr "Дополнительные настройки"
msgid "Afterwards, refresh this page and click add passkey again."
msgstr "После этого обновите эту страницу и снова нажмите «Добавить ключ доступа»."
#: src/components/NamespaceTabs/NamespaceTabs.vue:116
msgid "All"
msgstr "Все"
#: src/views/system/Licenses.vue:152
msgid "All Components"
msgstr "Все компоненты"
@@ -405,7 +401,7 @@ msgstr "Вы уверены, что хотите удалить безвозвр
msgid "Are you sure you want to delete?"
msgstr "Вы уверены, что хотите удалить?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:130
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
msgid "Are you sure you want to reload Nginx on the following sync nodes?"
msgstr ""
"Вы уверены, что хотите перезагрузить Nginx на следующих синхронизированных "
@@ -423,7 +419,7 @@ msgstr "Вы уверены, что хотите удалить этот эле
msgid "Are you sure you want to remove this location?"
msgstr "Вы уверены, что хотите удалить location?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
#: src/components/NamespaceTabs/NamespaceTabs.vue:154
msgid "Are you sure you want to restart Nginx on the following sync nodes?"
msgstr ""
"Вы уверены, что хотите перезапустить Nginx на следующих синхронизированных "
@@ -1298,10 +1294,14 @@ msgstr "Шаблон конфигурации"
msgid "Configuration"
msgstr "Конфигурация"
#: src/views/config/InspectConfig.vue:45
#: src/components/InspectConfig/InspectConfig.vue:62
msgid "Configuration file is test successful"
msgstr "Проверка конфигурации успешна"
#: src/components/InspectConfig/InspectConfig.vue:61
msgid "Configuration file is test successful in isolated sandbox"
msgstr "Файл конфигурации успешно протестирован в изолированной песочнице"
#: src/components/ConfigHistory/ConfigHistory.vue:147
msgid "Configuration History"
msgstr "История конфигурации"
@@ -1451,7 +1451,7 @@ msgstr ""
"компьютер."
#: src/views/backup/AutoBackup/AutoBackup.vue:229
#: src/views/namespace/columns.ts:72
#: src/views/namespace/columns.ts:85
#: src/views/notification/notificationColumns.tsx:51
#: src/views/preference/components/AuthSettings/Passkey.vue:96
#: src/views/preference/components/ExternalNotify/columns.tsx:80
@@ -1692,6 +1692,10 @@ msgstr "Демо"
msgid "Deploy"
msgstr "Развернуть"
#: src/views/namespace/columns.ts:72
msgid "Deploy Mode"
msgstr "Режим развертывания"
#: src/views/nginx_log/structured/StructuredLogViewer.vue:735
msgid "Descending"
msgstr "По убыванию"
@@ -2231,7 +2235,7 @@ msgstr "Конфигурация среды пуста"
msgid "Environment variables cleaned"
msgstr "Переменные окружения очищены"
#: src/constants/index.ts:23 src/views/config/InspectConfig.vue:63
#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23
#: src/views/nginx_log/NginxLogList.vue:243
#: src/views/notification/notificationColumns.tsx:14
msgid "Error"
@@ -3592,9 +3596,10 @@ msgstr "Загрузка данных..."
msgid "Loading..."
msgstr "Загрузка..."
#: src/components/NamespaceTabs/NamespaceTabs.vue:124
#: src/components/NodeIndicator/NodeIndicator.vue:38
#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42
#: src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/views/backup/AutoBackup/AutoBackup.vue:83
#: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
#: src/views/preference/tabs/NginxSettings.vue:55
@@ -4275,8 +4280,8 @@ msgid "Nginx.conf includes streams-enabled directory"
msgstr "Nginx.conf включает каталог streams-enabled"
#: src/components/LLM/ChatMessageInput.vue:61
#: src/components/NamespaceTabs/NamespaceTabs.vue:132
#: src/components/NamespaceTabs/NamespaceTabs.vue:144
#: src/components/NamespaceTabs/NamespaceTabs.vue:156
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102
#: src/components/NgxConfigEditor/LocationEditor.vue:89
#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40
@@ -4510,11 +4515,12 @@ msgstr "Выкл"
msgid "Official Document"
msgstr "Официальная документация"
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:84
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55
#: src/views/upstream/SocketList.vue:46
msgid "Offline"
msgstr "Оффлайн"
@@ -4547,12 +4553,13 @@ msgstr "Вкл"
msgid "Once the verification is complete, the records will be removed."
msgstr "После завершения проверки записи будут удалены."
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:64
#: src/components/NodeSelector/NodeSelector.vue:78
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51
#: src/views/upstream/SocketList.vue:46
msgid "Online"
msgstr "Онлайн"
@@ -5249,7 +5256,7 @@ msgid "Reload"
msgstr "Перегрузить"
#: src/components/NamespaceRender/NamespaceRender.vue:44
#: src/components/NamespaceTabs/NamespaceTabs.vue:137 src/constants/index.ts:38
#: src/components/NamespaceTabs/NamespaceTabs.vue:149 src/constants/index.ts:38
#: src/views/node/Node.vue:208 src/views/node/Node.vue:216
msgid "Reload Nginx"
msgstr "Перезагрузить Nginx"
@@ -5274,7 +5281,7 @@ msgstr "Ошибка перезагрузки удаленного Nginx"
msgid "Reload Remote Nginx Success"
msgstr "Удаленная перезагрузка Nginx успешно выполнена"
#: src/components/NamespaceTabs/NamespaceTabs.vue:85
#: src/components/NamespaceTabs/NamespaceTabs.vue:93
msgid "Reload request failed, please check your network connection"
msgstr "Не удалось выполнить запрос на перезагрузку, проверьте подключение к сети"
@@ -5286,7 +5293,7 @@ msgstr "Перезагружается"
msgid "Reloading nginx"
msgstr "Перезагружается nginx"
#: src/constants/index.ts:43
#: src/constants/index.ts:43 src/constants/index.ts:49
msgid "Remote"
msgstr "Удаленный"
@@ -5462,7 +5469,7 @@ msgstr "Ответы"
msgid "Restart"
msgstr "Перезапуск"
#: src/components/NamespaceTabs/NamespaceTabs.vue:149
#: src/components/NamespaceTabs/NamespaceTabs.vue:161
#: src/views/node/Node.vue:229 src/views/node/Node.vue:237
msgid "Restart Nginx"
msgstr "Перезапустить Nginx"
@@ -5483,7 +5490,7 @@ msgstr "Ошибка перезапуска удаленного Nginx"
msgid "Restart Remote Nginx Success"
msgstr "Удалённая перезагрузка Nginx успешно выполнена"
#: src/components/NamespaceTabs/NamespaceTabs.vue:105
#: src/components/NamespaceTabs/NamespaceTabs.vue:113
msgid "Restart request failed, please check your network connection"
msgstr "Запрос на перезапуск не выполнен, проверьте подключение к сети"
@@ -6337,7 +6344,7 @@ msgid "Sync Config Success"
msgstr "Синхронизация конфигурации успешна"
#: src/components/NamespaceRender/NamespaceRender.vue:53
#: src/components/NamespaceTabs/NamespaceTabs.vue:123
#: src/components/NamespaceTabs/NamespaceTabs.vue:135
#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31
msgid "Sync Nodes"
msgstr "Синхронизированные узлы"
@@ -6994,7 +7001,7 @@ msgstr "Успешно обновлено"
#: src/views/certificate/ACMEUser.vue:124
#: src/views/certificate/DNSCredential.vue:65
#: src/views/config/components/ConfigRightPanel/Basic.vue:54
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:78
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91
#: src/views/node/nodeColumns.tsx:89
#: src/views/site/site_edit/components/RightPanel/Basic.vue:39
#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80
@@ -7195,8 +7202,8 @@ msgstr "Посещения"
msgid "Waiting processes"
msgstr "Процессы ожидания"
#: src/constants/index.ts:24 src/views/backup/components/BackupCreator.vue:138
#: src/views/config/InspectConfig.vue:51
#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24
#: src/views/backup/components/BackupCreator.vue:138
#: src/views/notification/notificationColumns.tsx:21
#: src/views/preference/components/AuthSettings/AddPasskey.vue:88
msgid "Warning"
@@ -7353,8 +7360,8 @@ msgstr "Запись закрытого ключа сертификата на
msgid "Writing certificate to disk"
msgstr "Запись сертификата на диск"
#: src/components/NamespaceTabs/NamespaceTabs.vue:131
#: src/components/NamespaceTabs/NamespaceTabs.vue:143
#: src/components/NamespaceTabs/NamespaceTabs.vue:155
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101
#: src/components/NgxConfigEditor/LocationEditor.vue:88
#: src/views/nginx_log/indexing/IndexManagement.vue:31
@@ -7431,6 +7438,15 @@ msgstr "Ваши ключи доступа"
msgid "Zero-allocation pipeline"
msgstr "Конвейер без выделения памяти"
#~ msgid "Sandbox test successful"
#~ msgstr "Тест песочницы успешен"
#~ msgid "Tested in isolated sandbox mode"
#~ msgstr "Протестировано в изолированном песочнице"
#~ msgid "All"
#~ msgstr "Все"
#~ msgid "Based on M2 Pro (12 cores) testing"
#~ msgstr "На основе тестирования M2 Pro (12 ядер)"
+40 -24
View File
@@ -189,7 +189,7 @@ msgstr "Eylem"
#: src/views/certificate/ACMEUser.vue:131
#: src/views/certificate/CertificateList/certColumns.tsx:92
#: src/views/certificate/DNSCredential.vue:71
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:84
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97
#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96
#: src/views/notification/notificationColumns.tsx:72
#: src/views/preference/components/ExternalNotify/columns.tsx:85
@@ -302,10 +302,6 @@ msgstr "Gelişmiş Ayarlar"
msgid "Afterwards, refresh this page and click add passkey again."
msgstr "Daha sonra bu sayfayı yenileyin ve tekrar parola anahtarı ekle'ye tıklayın."
#: src/components/NamespaceTabs/NamespaceTabs.vue:116
msgid "All"
msgstr "Tümü"
#: src/views/system/Licenses.vue:152
msgid "All Components"
msgstr "Tüm Bileşenler"
@@ -403,7 +399,7 @@ msgstr "Kalıcı olarak silmek istediğinizden emin misiniz?"
msgid "Are you sure you want to delete?"
msgstr "Silmek istediğine emin misin?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:130
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
msgid "Are you sure you want to reload Nginx on the following sync nodes?"
msgstr ""
"Aşağıdaki senkronizasyon düğümlerinde Nginx'i yeniden yüklemek "
@@ -421,7 +417,7 @@ msgstr "Bu öğeyi kaldırmak istediğinizden emin misiniz?"
msgid "Are you sure you want to remove this location?"
msgstr "Bu konumu kaldırmak istediğinizden emin misiniz?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
#: src/components/NamespaceTabs/NamespaceTabs.vue:154
msgid "Are you sure you want to restart Nginx on the following sync nodes?"
msgstr ""
"Aşağıdaki senkronizasyon düğümlerinde Nginx'i yeniden başlatmak "
@@ -1291,10 +1287,14 @@ msgstr "Yapılandırma Şablonu"
msgid "Configuration"
msgstr "Yapılandırma"
#: src/views/config/InspectConfig.vue:45
#: src/components/InspectConfig/InspectConfig.vue:62
msgid "Configuration file is test successful"
msgstr "Yapılandırma dosyası başarıyla test edildi"
#: src/components/InspectConfig/InspectConfig.vue:61
msgid "Configuration file is test successful in isolated sandbox"
msgstr "Yapılandırma dosyası izole bir kum oyun alanında başarıyla test edildi"
#: src/components/ConfigHistory/ConfigHistory.vue:147
msgid "Configuration History"
msgstr "Yapılandırma Geçmişi"
@@ -1443,7 +1443,7 @@ msgstr ""
"oluşturun. Yedek dosyaları otomatik olarak bilgisayarınıza indirilecektir."
#: src/views/backup/AutoBackup/AutoBackup.vue:229
#: src/views/namespace/columns.ts:72
#: src/views/namespace/columns.ts:85
#: src/views/notification/notificationColumns.tsx:51
#: src/views/preference/components/AuthSettings/Passkey.vue:96
#: src/views/preference/components/ExternalNotify/columns.tsx:80
@@ -1686,6 +1686,10 @@ msgstr "Demo"
msgid "Deploy"
msgstr "Yayınla"
#: src/views/namespace/columns.ts:72
msgid "Deploy Mode"
msgstr "Dağıtım Modu"
#: src/views/nginx_log/structured/StructuredLogViewer.vue:735
msgid "Descending"
msgstr "Azalan"
@@ -2225,7 +2229,7 @@ msgstr "Ortam yapılandırması boş"
msgid "Environment variables cleaned"
msgstr "Ortam değişkenleri temizlendi"
#: src/constants/index.ts:23 src/views/config/InspectConfig.vue:63
#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23
#: src/views/nginx_log/NginxLogList.vue:243
#: src/views/notification/notificationColumns.tsx:14
msgid "Error"
@@ -3589,9 +3593,10 @@ msgstr "Veriler yükleniyor..."
msgid "Loading..."
msgstr "Yükleniyor..."
#: src/components/NamespaceTabs/NamespaceTabs.vue:124
#: src/components/NodeIndicator/NodeIndicator.vue:38
#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42
#: src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/views/backup/AutoBackup/AutoBackup.vue:83
#: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
#: src/views/preference/tabs/NginxSettings.vue:55
@@ -4271,8 +4276,8 @@ msgid "Nginx.conf includes streams-enabled directory"
msgstr "Nginx.conf, streams-enabled dizinini içerir"
#: src/components/LLM/ChatMessageInput.vue:61
#: src/components/NamespaceTabs/NamespaceTabs.vue:132
#: src/components/NamespaceTabs/NamespaceTabs.vue:144
#: src/components/NamespaceTabs/NamespaceTabs.vue:156
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102
#: src/components/NgxConfigEditor/LocationEditor.vue:89
#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40
@@ -4505,11 +4510,12 @@ msgstr "Kapalı"
msgid "Official Document"
msgstr "Resmi Belge"
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:84
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55
#: src/views/upstream/SocketList.vue:46
msgid "Offline"
msgstr "Çevrimdışı"
@@ -4542,12 +4548,13 @@ msgstr "Açık"
msgid "Once the verification is complete, the records will be removed."
msgstr "Doğrulama tamamlandığında, kayıtlar kaldırılacaktır."
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:64
#: src/components/NodeSelector/NodeSelector.vue:78
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51
#: src/views/upstream/SocketList.vue:46
msgid "Online"
msgstr "Çevrimiçi"
@@ -5238,7 +5245,7 @@ msgid "Reload"
msgstr "Yeniden Yükle"
#: src/components/NamespaceRender/NamespaceRender.vue:44
#: src/components/NamespaceTabs/NamespaceTabs.vue:137 src/constants/index.ts:38
#: src/components/NamespaceTabs/NamespaceTabs.vue:149 src/constants/index.ts:38
#: src/views/node/Node.vue:208 src/views/node/Node.vue:216
msgid "Reload Nginx"
msgstr "Nginx'i Yeniden Yükle"
@@ -5263,7 +5270,7 @@ msgstr "Uzak Nginx Yeniden Yükleme Hatası"
msgid "Reload Remote Nginx Success"
msgstr "Uzak Nginx Yeniden Yükleme Başarılı"
#: src/components/NamespaceTabs/NamespaceTabs.vue:85
#: src/components/NamespaceTabs/NamespaceTabs.vue:93
msgid "Reload request failed, please check your network connection"
msgstr "Yeniden yükleme isteği başarısız oldu, lütfen ağ bağlantınızı kontrol edin"
@@ -5275,7 +5282,7 @@ msgstr "Yeniden Yükleniyor"
msgid "Reloading nginx"
msgstr "nginx yeniden yükleniyor"
#: src/constants/index.ts:43
#: src/constants/index.ts:43 src/constants/index.ts:49
msgid "Remote"
msgstr "Uzak"
@@ -5460,7 +5467,7 @@ msgstr "Yanıtlar"
msgid "Restart"
msgstr "Yeniden Başlat"
#: src/components/NamespaceTabs/NamespaceTabs.vue:149
#: src/components/NamespaceTabs/NamespaceTabs.vue:161
#: src/views/node/Node.vue:229 src/views/node/Node.vue:237
msgid "Restart Nginx"
msgstr "Nginx'i Yeniden Başlat"
@@ -5481,7 +5488,7 @@ msgstr "Uzak Nginx Yeniden Başlatma Hatası"
msgid "Restart Remote Nginx Success"
msgstr "Uzak Nginx Yeniden Başlatma Başarılı"
#: src/components/NamespaceTabs/NamespaceTabs.vue:105
#: src/components/NamespaceTabs/NamespaceTabs.vue:113
msgid "Restart request failed, please check your network connection"
msgstr "Yeniden başlatma isteği başarısız oldu, lütfen ağ bağlantınızı kontrol edin"
@@ -6335,7 +6342,7 @@ msgid "Sync Config Success"
msgstr "Yapılandırma Başarıyla Senkronize Edildi"
#: src/components/NamespaceRender/NamespaceRender.vue:53
#: src/components/NamespaceTabs/NamespaceTabs.vue:123
#: src/components/NamespaceTabs/NamespaceTabs.vue:135
#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31
msgid "Sync Nodes"
msgstr "Senkronizasyon Düğümleri"
@@ -6991,7 +6998,7 @@ msgstr "Başarıyla güncellendi"
#: src/views/certificate/ACMEUser.vue:124
#: src/views/certificate/DNSCredential.vue:65
#: src/views/config/components/ConfigRightPanel/Basic.vue:54
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:78
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91
#: src/views/node/nodeColumns.tsx:89
#: src/views/site/site_edit/components/RightPanel/Basic.vue:39
#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80
@@ -7192,8 +7199,8 @@ msgstr "Ziyaretler"
msgid "Waiting processes"
msgstr "Bekleme süreçleri"
#: src/constants/index.ts:24 src/views/backup/components/BackupCreator.vue:138
#: src/views/config/InspectConfig.vue:51
#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24
#: src/views/backup/components/BackupCreator.vue:138
#: src/views/notification/notificationColumns.tsx:21
#: src/views/preference/components/AuthSettings/AddPasskey.vue:88
msgid "Warning"
@@ -7349,8 +7356,8 @@ msgstr "Sertifika özel anahtarı diske yazılıyor"
msgid "Writing certificate to disk"
msgstr "Sertifika diske yazılıyor"
#: src/components/NamespaceTabs/NamespaceTabs.vue:131
#: src/components/NamespaceTabs/NamespaceTabs.vue:143
#: src/components/NamespaceTabs/NamespaceTabs.vue:155
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101
#: src/components/NgxConfigEditor/LocationEditor.vue:88
#: src/views/nginx_log/indexing/IndexManagement.vue:31
@@ -7428,6 +7435,15 @@ msgstr "Geçiş Anahtarlarınız"
msgid "Zero-allocation pipeline"
msgstr "Tahsisatsız boru hattı"
#~ msgid "Sandbox test successful"
#~ msgstr "Sandbox testi başarılı"
#~ msgid "Tested in isolated sandbox mode"
#~ msgstr "İzole sandbox modunda test edildi"
#~ msgid "All"
#~ msgstr "Tümü"
#~ msgid "Based on M2 Pro (12 cores) testing"
#~ msgstr "M2 Pro (12 çekirdek) testlerine dayalı"
+40 -24
View File
@@ -193,7 +193,7 @@ msgstr "Дія"
#: src/views/certificate/ACMEUser.vue:131
#: src/views/certificate/CertificateList/certColumns.tsx:92
#: src/views/certificate/DNSCredential.vue:71
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:84
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97
#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96
#: src/views/notification/notificationColumns.tsx:72
#: src/views/preference/components/ExternalNotify/columns.tsx:85
@@ -306,10 +306,6 @@ msgstr "Розширені налаштування"
msgid "Afterwards, refresh this page and click add passkey again."
msgstr "Після цього оновіть цю сторінку та натисніть «Додати ключ доступу» знову."
#: src/components/NamespaceTabs/NamespaceTabs.vue:116
msgid "All"
msgstr "Усі"
#: src/views/system/Licenses.vue:152
msgid "All Components"
msgstr "Усі компоненти"
@@ -407,7 +403,7 @@ msgstr "Ви впевнені, що хочете видалити назавжд
msgid "Are you sure you want to delete?"
msgstr "Ви впевнені, що хочете видалити?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:130
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
msgid "Are you sure you want to reload Nginx on the following sync nodes?"
msgstr ""
"Ви впевнені, що бажаєте перезавантажити Nginx на наступних вузлах "
@@ -425,7 +421,7 @@ msgstr "Ви впевнені, що хочете видалити цей еле
msgid "Are you sure you want to remove this location?"
msgstr "Ви впевнені, що хочете видалити цю локацію?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
#: src/components/NamespaceTabs/NamespaceTabs.vue:154
msgid "Are you sure you want to restart Nginx on the following sync nodes?"
msgstr ""
"Ви впевнені, що хочете перезавантажити Nginx на вказаних синхронізованих "
@@ -1294,10 +1290,14 @@ msgstr "Шаблон конфігурації"
msgid "Configuration"
msgstr "Конфігурація"
#: src/views/config/InspectConfig.vue:45
#: src/components/InspectConfig/InspectConfig.vue:62
msgid "Configuration file is test successful"
msgstr "Файл конфігурації успішно протестовано"
#: src/components/InspectConfig/InspectConfig.vue:61
msgid "Configuration file is test successful in isolated sandbox"
msgstr "Файл конфігурації успішно протестовано в ізольованому пісочному ящику"
#: src/components/ConfigHistory/ConfigHistory.vue:147
msgid "Configuration History"
msgstr "Історія конфігурації"
@@ -1447,7 +1447,7 @@ msgstr ""
"комп’ютер."
#: src/views/backup/AutoBackup/AutoBackup.vue:229
#: src/views/namespace/columns.ts:72
#: src/views/namespace/columns.ts:85
#: src/views/notification/notificationColumns.tsx:51
#: src/views/preference/components/AuthSettings/Passkey.vue:96
#: src/views/preference/components/ExternalNotify/columns.tsx:80
@@ -1724,6 +1724,10 @@ msgstr "Демо"
msgid "Deploy"
msgstr "Розгорнути"
#: src/views/namespace/columns.ts:72
msgid "Deploy Mode"
msgstr "Режим розгортання"
#: src/views/nginx_log/structured/StructuredLogViewer.vue:735
msgid "Descending"
msgstr "Спадаючий"
@@ -2299,7 +2303,7 @@ msgstr "Конфігурація середовища порожня"
msgid "Environment variables cleaned"
msgstr "Змінні середовища очищено"
#: src/constants/index.ts:23 src/views/config/InspectConfig.vue:63
#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23
#: src/views/nginx_log/NginxLogList.vue:243
#: src/views/notification/notificationColumns.tsx:14
msgid "Error"
@@ -3658,9 +3662,10 @@ msgstr "Завантаження даних..."
msgid "Loading..."
msgstr "Завантаження..."
#: src/components/NamespaceTabs/NamespaceTabs.vue:124
#: src/components/NodeIndicator/NodeIndicator.vue:38
#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42
#: src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/views/backup/AutoBackup/AutoBackup.vue:83
#: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
#: src/views/preference/tabs/NginxSettings.vue:55
@@ -4341,8 +4346,8 @@ msgid "Nginx.conf includes streams-enabled directory"
msgstr "Nginx.conf включає каталог streams-enabled"
#: src/components/LLM/ChatMessageInput.vue:61
#: src/components/NamespaceTabs/NamespaceTabs.vue:132
#: src/components/NamespaceTabs/NamespaceTabs.vue:144
#: src/components/NamespaceTabs/NamespaceTabs.vue:156
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102
#: src/components/NgxConfigEditor/LocationEditor.vue:89
#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40
@@ -4576,11 +4581,12 @@ msgstr "Вимкнено"
msgid "Official Document"
msgstr "Офіційна документація"
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:84
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55
#: src/views/upstream/SocketList.vue:46
msgid "Offline"
msgstr "Офлайн"
@@ -4613,12 +4619,13 @@ msgstr "Увімкнено"
msgid "Once the verification is complete, the records will be removed."
msgstr "Після завершення перевірки записи будуть видалені."
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:64
#: src/components/NodeSelector/NodeSelector.vue:78
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51
#: src/views/upstream/SocketList.vue:46
msgid "Online"
msgstr "Онлайн"
@@ -5312,7 +5319,7 @@ msgid "Reload"
msgstr "Перезавантажити"
#: src/components/NamespaceRender/NamespaceRender.vue:44
#: src/components/NamespaceTabs/NamespaceTabs.vue:137 src/constants/index.ts:38
#: src/components/NamespaceTabs/NamespaceTabs.vue:149 src/constants/index.ts:38
#: src/views/node/Node.vue:208 src/views/node/Node.vue:216
msgid "Reload Nginx"
msgstr "Перезавантажити Nginx"
@@ -5337,7 +5344,7 @@ msgstr "Помилка перезавантаження віддаленого N
msgid "Reload Remote Nginx Success"
msgstr "Успішне перезавантаження віддаленого Nginx"
#: src/components/NamespaceTabs/NamespaceTabs.vue:85
#: src/components/NamespaceTabs/NamespaceTabs.vue:93
msgid "Reload request failed, please check your network connection"
msgstr ""
"Не вдалося виконати запит на перезавантаження, будь ласка, перевірте "
@@ -5351,7 +5358,7 @@ msgstr "Перезавантаження"
msgid "Reloading nginx"
msgstr "Перезавантаження nginx"
#: src/constants/index.ts:43
#: src/constants/index.ts:43 src/constants/index.ts:49
msgid "Remote"
msgstr "Віддалено"
@@ -5527,7 +5534,7 @@ msgstr "Відповіді"
msgid "Restart"
msgstr "Перезавантажити"
#: src/components/NamespaceTabs/NamespaceTabs.vue:149
#: src/components/NamespaceTabs/NamespaceTabs.vue:161
#: src/views/node/Node.vue:229 src/views/node/Node.vue:237
msgid "Restart Nginx"
msgstr "Перезапустити Nginx"
@@ -5548,7 +5555,7 @@ msgstr "Помилка перезапуску віддаленого Nginx"
msgid "Restart Remote Nginx Success"
msgstr "Віддалений перезапуск Nginx успішний"
#: src/components/NamespaceTabs/NamespaceTabs.vue:105
#: src/components/NamespaceTabs/NamespaceTabs.vue:113
msgid "Restart request failed, please check your network connection"
msgstr ""
"Не вдалося виконати запит на перезавантаження, будь ласка, перевірте "
@@ -6408,7 +6415,7 @@ msgid "Sync Config Success"
msgstr "Успішна синхронізація конфігурації"
#: src/components/NamespaceRender/NamespaceRender.vue:53
#: src/components/NamespaceTabs/NamespaceTabs.vue:123
#: src/components/NamespaceTabs/NamespaceTabs.vue:135
#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31
msgid "Sync Nodes"
msgstr "Синхронізовані вузли"
@@ -7064,7 +7071,7 @@ msgstr "Успішно оновлено"
#: src/views/certificate/ACMEUser.vue:124
#: src/views/certificate/DNSCredential.vue:65
#: src/views/config/components/ConfigRightPanel/Basic.vue:54
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:78
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91
#: src/views/node/nodeColumns.tsx:89
#: src/views/site/site_edit/components/RightPanel/Basic.vue:39
#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80
@@ -7265,8 +7272,8 @@ msgstr "Візити"
msgid "Waiting processes"
msgstr "Процеси очікування"
#: src/constants/index.ts:24 src/views/backup/components/BackupCreator.vue:138
#: src/views/config/InspectConfig.vue:51
#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24
#: src/views/backup/components/BackupCreator.vue:138
#: src/views/notification/notificationColumns.tsx:21
#: src/views/preference/components/AuthSettings/AddPasskey.vue:88
msgid "Warning"
@@ -7422,8 +7429,8 @@ msgstr "Запис приватного ключа сертифіката на
msgid "Writing certificate to disk"
msgstr "Запис сертифіката на диск"
#: src/components/NamespaceTabs/NamespaceTabs.vue:131
#: src/components/NamespaceTabs/NamespaceTabs.vue:143
#: src/components/NamespaceTabs/NamespaceTabs.vue:155
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101
#: src/components/NgxConfigEditor/LocationEditor.vue:88
#: src/views/nginx_log/indexing/IndexManagement.vue:31
@@ -7499,6 +7506,15 @@ msgstr "Ваші ключі доступу"
msgid "Zero-allocation pipeline"
msgstr "Конвеєр без виділення пам’яті"
#~ msgid "Sandbox test successful"
#~ msgstr "Тест пісочниці успішний"
#~ msgid "Tested in isolated sandbox mode"
#~ msgstr "Протестовано в ізольованому пісочниці"
#~ msgid "All"
#~ msgstr "Усі"
#~ msgid "Based on M2 Pro (12 cores) testing"
#~ msgstr "На основі тестування M2 Pro (12 ядер)"
+40 -24
View File
@@ -183,7 +183,7 @@ msgstr "Hành động"
#: src/views/certificate/ACMEUser.vue:131
#: src/views/certificate/CertificateList/certColumns.tsx:92
#: src/views/certificate/DNSCredential.vue:71
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:84
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97
#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96
#: src/views/notification/notificationColumns.tsx:72
#: src/views/preference/components/ExternalNotify/columns.tsx:85
@@ -296,10 +296,6 @@ msgstr "Cài đặt nâng cao"
msgid "Afterwards, refresh this page and click add passkey again."
msgstr "Sau đó, làm mới trang này và nhấp vào thêm khóa truy cập một lần nữa."
#: src/components/NamespaceTabs/NamespaceTabs.vue:116
msgid "All"
msgstr "Tất cả"
#: src/views/system/Licenses.vue:152
msgid "All Components"
msgstr "Tất cả các thành phần"
@@ -397,7 +393,7 @@ msgstr "Bạn có chắc chắn muốn xóa vĩnh viễn không?"
msgid "Are you sure you want to delete?"
msgstr "Bạn có chắc chắn muốn xóa không?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:130
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
msgid "Are you sure you want to reload Nginx on the following sync nodes?"
msgstr "Bạn có chắc chắn muốn tải lại Nginx trên các nút đồng bộ sau không?"
@@ -413,7 +409,7 @@ msgstr "Bạn có chắc chắn muốn xóa mục này không?"
msgid "Are you sure you want to remove this location?"
msgstr "Bạn có chắc chắn muốn xóa vị trí này không?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
#: src/components/NamespaceTabs/NamespaceTabs.vue:154
msgid "Are you sure you want to restart Nginx on the following sync nodes?"
msgstr "Bạn có chắc chắn muốn khởi động lại Nginx trên các nút đồng bộ sau không?"
@@ -1272,10 +1268,14 @@ msgstr "Mẫu cấu hình"
msgid "Configuration"
msgstr "Cấu hình"
#: src/views/config/InspectConfig.vue:45
#: src/components/InspectConfig/InspectConfig.vue:62
msgid "Configuration file is test successful"
msgstr "Tệp cấu hình được kiểm tra thành công"
#: src/components/InspectConfig/InspectConfig.vue:61
msgid "Configuration file is test successful in isolated sandbox"
msgstr "Tệp cấu hình đã được kiểm tra thành công trong môi trường cát cách ly"
#: src/components/ConfigHistory/ConfigHistory.vue:147
msgid "Configuration History"
msgstr "Lịch sử cấu hình"
@@ -1422,7 +1422,7 @@ msgstr ""
"tệp sao lưu sẽ tự động được tải xuống máy tính của bạn."
#: src/views/backup/AutoBackup/AutoBackup.vue:229
#: src/views/namespace/columns.ts:72
#: src/views/namespace/columns.ts:85
#: src/views/notification/notificationColumns.tsx:51
#: src/views/preference/components/AuthSettings/Passkey.vue:96
#: src/views/preference/components/ExternalNotify/columns.tsx:80
@@ -1663,6 +1663,10 @@ msgstr "Bản demo"
msgid "Deploy"
msgstr "Triển khai"
#: src/views/namespace/columns.ts:72
msgid "Deploy Mode"
msgstr "Chế độ triển khai"
#: src/views/nginx_log/structured/StructuredLogViewer.vue:735
msgid "Descending"
msgstr "Giảm dần"
@@ -2199,7 +2203,7 @@ msgstr "Cấu hình môi trường trống"
msgid "Environment variables cleaned"
msgstr "Đã dọn dẹp biến môi trường"
#: src/constants/index.ts:23 src/views/config/InspectConfig.vue:63
#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23
#: src/views/nginx_log/NginxLogList.vue:243
#: src/views/notification/notificationColumns.tsx:14
msgid "Error"
@@ -3557,9 +3561,10 @@ msgstr "Đang tải dữ liệu..."
msgid "Loading..."
msgstr "Đang tải..."
#: src/components/NamespaceTabs/NamespaceTabs.vue:124
#: src/components/NodeIndicator/NodeIndicator.vue:38
#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42
#: src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/views/backup/AutoBackup/AutoBackup.vue:83
#: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
#: src/views/preference/tabs/NginxSettings.vue:55
@@ -4240,8 +4245,8 @@ msgid "Nginx.conf includes streams-enabled directory"
msgstr "Nginx.conf bao gồm thư mục streams-enabled"
#: src/components/LLM/ChatMessageInput.vue:61
#: src/components/NamespaceTabs/NamespaceTabs.vue:132
#: src/components/NamespaceTabs/NamespaceTabs.vue:144
#: src/components/NamespaceTabs/NamespaceTabs.vue:156
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102
#: src/components/NgxConfigEditor/LocationEditor.vue:89
#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40
@@ -4472,11 +4477,12 @@ msgstr "Tắt"
msgid "Official Document"
msgstr "Tài liệu chính thức"
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:84
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55
#: src/views/upstream/SocketList.vue:46
msgid "Offline"
msgstr "Ngoại tuyến"
@@ -4509,12 +4515,13 @@ msgstr "Bật"
msgid "Once the verification is complete, the records will be removed."
msgstr "Sau khi quá trình xác minh hoàn tất, bản ghi sẽ bị xóa."
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:64
#: src/components/NodeSelector/NodeSelector.vue:78
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51
#: src/views/upstream/SocketList.vue:46
msgid "Online"
msgstr "Trực tuyến"
@@ -5197,7 +5204,7 @@ msgid "Reload"
msgstr "Tải lại"
#: src/components/NamespaceRender/NamespaceRender.vue:44
#: src/components/NamespaceTabs/NamespaceTabs.vue:137 src/constants/index.ts:38
#: src/components/NamespaceTabs/NamespaceTabs.vue:149 src/constants/index.ts:38
#: src/views/node/Node.vue:208 src/views/node/Node.vue:216
msgid "Reload Nginx"
msgstr "Tải lại Nginx"
@@ -5222,7 +5229,7 @@ msgstr "Lỗi tải lại Nginx từ xa"
msgid "Reload Remote Nginx Success"
msgstr "Tải lại Nginx từ xa thành công"
#: src/components/NamespaceTabs/NamespaceTabs.vue:85
#: src/components/NamespaceTabs/NamespaceTabs.vue:93
msgid "Reload request failed, please check your network connection"
msgstr "Yêu cầu tải lại thất bại, vui lòng kiểm tra kết nối mạng của bạn"
@@ -5234,7 +5241,7 @@ msgstr "Đang tải lại"
msgid "Reloading nginx"
msgstr "Tải lại nginx"
#: src/constants/index.ts:43
#: src/constants/index.ts:43 src/constants/index.ts:49
msgid "Remote"
msgstr "Từ xa"
@@ -5410,7 +5417,7 @@ msgstr "Phản hồi"
msgid "Restart"
msgstr "Khởi động lại"
#: src/components/NamespaceTabs/NamespaceTabs.vue:149
#: src/components/NamespaceTabs/NamespaceTabs.vue:161
#: src/views/node/Node.vue:229 src/views/node/Node.vue:237
msgid "Restart Nginx"
msgstr "Khởi động lại Nginx"
@@ -5431,7 +5438,7 @@ msgstr "Lỗi khởi động lại Nginx từ xa"
msgid "Restart Remote Nginx Success"
msgstr "Khởi động lại Nginx từ xa thành công"
#: src/components/NamespaceTabs/NamespaceTabs.vue:105
#: src/components/NamespaceTabs/NamespaceTabs.vue:113
msgid "Restart request failed, please check your network connection"
msgstr "Yêu cầu khởi động lại thất bại, vui lòng kiểm tra kết nối mạng của bạn"
@@ -6283,7 +6290,7 @@ msgid "Sync Config Success"
msgstr "Đồng bộ cấu hình thành công"
#: src/components/NamespaceRender/NamespaceRender.vue:53
#: src/components/NamespaceTabs/NamespaceTabs.vue:123
#: src/components/NamespaceTabs/NamespaceTabs.vue:135
#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31
msgid "Sync Nodes"
msgstr "Nút đồng bộ"
@@ -6939,7 +6946,7 @@ msgstr "Cập nhật thành công"
#: src/views/certificate/ACMEUser.vue:124
#: src/views/certificate/DNSCredential.vue:65
#: src/views/config/components/ConfigRightPanel/Basic.vue:54
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:78
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91
#: src/views/node/nodeColumns.tsx:89
#: src/views/site/site_edit/components/RightPanel/Basic.vue:39
#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80
@@ -7140,8 +7147,8 @@ msgstr "Lượt truy cập"
msgid "Waiting processes"
msgstr "Quá trình chờ đợi"
#: src/constants/index.ts:24 src/views/backup/components/BackupCreator.vue:138
#: src/views/config/InspectConfig.vue:51
#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24
#: src/views/backup/components/BackupCreator.vue:138
#: src/views/notification/notificationColumns.tsx:21
#: src/views/preference/components/AuthSettings/AddPasskey.vue:88
msgid "Warning"
@@ -7294,8 +7301,8 @@ msgstr "Ghi Private Key vào disk"
msgid "Writing certificate to disk"
msgstr "Ghi chứng chỉ vào disk"
#: src/components/NamespaceTabs/NamespaceTabs.vue:131
#: src/components/NamespaceTabs/NamespaceTabs.vue:143
#: src/components/NamespaceTabs/NamespaceTabs.vue:155
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101
#: src/components/NgxConfigEditor/LocationEditor.vue:88
#: src/views/nginx_log/indexing/IndexManagement.vue:31
@@ -7371,6 +7378,15 @@ msgstr "Khóa truy cập của bạn"
msgid "Zero-allocation pipeline"
msgstr "Đường ống không cấp phát"
#~ msgid "Sandbox test successful"
#~ msgstr "Kiểm tra sandbox thành công"
#~ msgid "Tested in isolated sandbox mode"
#~ msgstr "Đã kiểm tra trong chế độ sandbox cách ly"
#~ msgid "All"
#~ msgstr "Tất cả"
#~ msgid "Based on M2 Pro (12 cores) testing"
#~ msgstr "Dựa trên thử nghiệm M2 Pro (12 lõi)"
+40 -24
View File
@@ -183,7 +183,7 @@ msgstr "操作"
#: src/views/certificate/ACMEUser.vue:131
#: src/views/certificate/CertificateList/certColumns.tsx:92
#: src/views/certificate/DNSCredential.vue:71
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:84
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97
#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96
#: src/views/notification/notificationColumns.tsx:72
#: src/views/preference/components/ExternalNotify/columns.tsx:85
@@ -294,10 +294,6 @@ msgstr "高级设置"
msgid "Afterwards, refresh this page and click add passkey again."
msgstr "之后,请刷新此页面并再次点击添加通行密钥。"
#: src/components/NamespaceTabs/NamespaceTabs.vue:116
msgid "All"
msgstr "全部"
#: src/views/system/Licenses.vue:152
msgid "All Components"
msgstr "所有组件"
@@ -391,7 +387,7 @@ msgstr "确定要永久删除吗?"
msgid "Are you sure you want to delete?"
msgstr "您确定要删除吗?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:130
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
msgid "Are you sure you want to reload Nginx on the following sync nodes?"
msgstr "你确定要在以下同步节点上重载 Nginx?"
@@ -407,7 +403,7 @@ msgstr "您确定要删除这个项目吗?"
msgid "Are you sure you want to remove this location?"
msgstr "您确定要删除这个 Location"
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
#: src/components/NamespaceTabs/NamespaceTabs.vue:154
msgid "Are you sure you want to restart Nginx on the following sync nodes?"
msgstr "你确定要在以下同步节点上重启 Nginx 吗?"
@@ -1239,10 +1235,14 @@ msgstr "配置模板"
msgid "Configuration"
msgstr "配置"
#: src/views/config/InspectConfig.vue:45
#: src/components/InspectConfig/InspectConfig.vue:62
msgid "Configuration file is test successful"
msgstr "配置文件测试成功"
#: src/components/InspectConfig/InspectConfig.vue:61
msgid "Configuration file is test successful in isolated sandbox"
msgstr "配置文件在隔离的沙箱中测试成功"
#: src/components/ConfigHistory/ConfigHistory.vue:147
msgid "Configuration History"
msgstr "配置历史记录"
@@ -1387,7 +1387,7 @@ msgid ""
msgstr "创建系统备份,包括 Nginx 配置和 Nginx UI 设置。备份文件将自动下载到你的电脑。"
#: src/views/backup/AutoBackup/AutoBackup.vue:229
#: src/views/namespace/columns.ts:72
#: src/views/namespace/columns.ts:85
#: src/views/notification/notificationColumns.tsx:51
#: src/views/preference/components/AuthSettings/Passkey.vue:96
#: src/views/preference/components/ExternalNotify/columns.tsx:80
@@ -1628,6 +1628,10 @@ msgstr "Demo"
msgid "Deploy"
msgstr "部署"
#: src/views/namespace/columns.ts:72
msgid "Deploy Mode"
msgstr "部署模式"
#: src/views/nginx_log/structured/StructuredLogViewer.vue:735
msgid "Descending"
msgstr "降序"
@@ -2157,7 +2161,7 @@ msgstr "环境配置为空"
msgid "Environment variables cleaned"
msgstr "环境变量已清理"
#: src/constants/index.ts:23 src/views/config/InspectConfig.vue:63
#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23
#: src/views/nginx_log/NginxLogList.vue:243
#: src/views/notification/notificationColumns.tsx:14
msgid "Error"
@@ -3485,9 +3489,10 @@ msgstr "正在加载数据..."
msgid "Loading..."
msgstr "加载中..."
#: src/components/NamespaceTabs/NamespaceTabs.vue:124
#: src/components/NodeIndicator/NodeIndicator.vue:38
#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42
#: src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/views/backup/AutoBackup/AutoBackup.vue:83
#: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
#: src/views/preference/tabs/NginxSettings.vue:55
@@ -4157,8 +4162,8 @@ msgid "Nginx.conf includes streams-enabled directory"
msgstr "检查 nginx.conf 是否包含 streams-enabled 的目录"
#: src/components/LLM/ChatMessageInput.vue:61
#: src/components/NamespaceTabs/NamespaceTabs.vue:132
#: src/components/NamespaceTabs/NamespaceTabs.vue:144
#: src/components/NamespaceTabs/NamespaceTabs.vue:156
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102
#: src/components/NgxConfigEditor/LocationEditor.vue:89
#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40
@@ -4381,11 +4386,12 @@ msgstr "关闭"
msgid "Official Document"
msgstr "官方文档"
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:84
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55
#: src/views/upstream/SocketList.vue:46
msgid "Offline"
msgstr "离线"
@@ -4418,12 +4424,13 @@ msgstr "开启"
msgid "Once the verification is complete, the records will be removed."
msgstr "一旦验证完成,这些记录将被删除。"
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:64
#: src/components/NodeSelector/NodeSelector.vue:78
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51
#: src/views/upstream/SocketList.vue:46
msgid "Online"
msgstr "在线"
@@ -5088,7 +5095,7 @@ msgid "Reload"
msgstr "重载"
#: src/components/NamespaceRender/NamespaceRender.vue:44
#: src/components/NamespaceTabs/NamespaceTabs.vue:137 src/constants/index.ts:38
#: src/components/NamespaceTabs/NamespaceTabs.vue:149 src/constants/index.ts:38
#: src/views/node/Node.vue:208 src/views/node/Node.vue:216
msgid "Reload Nginx"
msgstr "重载 Nginx"
@@ -5113,7 +5120,7 @@ msgstr "重载远程 Nginx 错误"
msgid "Reload Remote Nginx Success"
msgstr "重载远程 Nginx 成功"
#: src/components/NamespaceTabs/NamespaceTabs.vue:85
#: src/components/NamespaceTabs/NamespaceTabs.vue:93
msgid "Reload request failed, please check your network connection"
msgstr "重载请求失败,请检查网络连接"
@@ -5125,7 +5132,7 @@ msgstr "重载中"
msgid "Reloading nginx"
msgstr "正在重载 Nginx"
#: src/constants/index.ts:43
#: src/constants/index.ts:43 src/constants/index.ts:49
msgid "Remote"
msgstr "远程"
@@ -5298,7 +5305,7 @@ msgstr "响应"
msgid "Restart"
msgstr "重启"
#: src/components/NamespaceTabs/NamespaceTabs.vue:149
#: src/components/NamespaceTabs/NamespaceTabs.vue:161
#: src/views/node/Node.vue:229 src/views/node/Node.vue:237
msgid "Restart Nginx"
msgstr "重启 Nginx"
@@ -5319,7 +5326,7 @@ msgstr "重启远程 Nginx 错误"
msgid "Restart Remote Nginx Success"
msgstr "重启远程 Nginx 成功"
#: src/components/NamespaceTabs/NamespaceTabs.vue:105
#: src/components/NamespaceTabs/NamespaceTabs.vue:113
msgid "Restart request failed, please check your network connection"
msgstr "重启请求失败,请检查网络连接"
@@ -6159,7 +6166,7 @@ msgid "Sync Config Success"
msgstr "同步配置成功"
#: src/components/NamespaceRender/NamespaceRender.vue:53
#: src/components/NamespaceTabs/NamespaceTabs.vue:123
#: src/components/NamespaceTabs/NamespaceTabs.vue:135
#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31
msgid "Sync Nodes"
msgstr "同步节点"
@@ -6761,7 +6768,7 @@ msgstr "更新成功"
#: src/views/certificate/ACMEUser.vue:124
#: src/views/certificate/DNSCredential.vue:65
#: src/views/config/components/ConfigRightPanel/Basic.vue:54
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:78
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91
#: src/views/node/nodeColumns.tsx:89
#: src/views/site/site_edit/components/RightPanel/Basic.vue:39
#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80
@@ -6962,8 +6969,8 @@ msgstr "访问量"
msgid "Waiting processes"
msgstr "等待处理"
#: src/constants/index.ts:24 src/views/backup/components/BackupCreator.vue:138
#: src/views/config/InspectConfig.vue:51
#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24
#: src/views/backup/components/BackupCreator.vue:138
#: src/views/notification/notificationColumns.tsx:21
#: src/views/preference/components/AuthSettings/AddPasskey.vue:88
msgid "Warning"
@@ -7103,8 +7110,8 @@ msgstr "正在将证书私钥写入磁盘"
msgid "Writing certificate to disk"
msgstr "正在将证书写入磁盘"
#: src/components/NamespaceTabs/NamespaceTabs.vue:131
#: src/components/NamespaceTabs/NamespaceTabs.vue:143
#: src/components/NamespaceTabs/NamespaceTabs.vue:155
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101
#: src/components/NgxConfigEditor/LocationEditor.vue:88
#: src/views/nginx_log/indexing/IndexManagement.vue:31
@@ -7173,6 +7180,15 @@ msgstr "你的 Passkeys"
msgid "Zero-allocation pipeline"
msgstr "零分配管道"
#~ msgid "Sandbox test successful"
#~ msgstr "沙盒测试成功"
#~ msgid "Tested in isolated sandbox mode"
#~ msgstr "已在隔离沙箱模式下测试"
#~ msgid "All"
#~ msgstr "全部"
#~ msgid "Based on M2 Pro (12 cores) testing"
#~ msgstr "基于 M2 Pro 12 核)测试"
+40 -24
View File
@@ -187,7 +187,7 @@ msgstr "操作"
#: src/views/certificate/ACMEUser.vue:131
#: src/views/certificate/CertificateList/certColumns.tsx:92
#: src/views/certificate/DNSCredential.vue:71
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:84
#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97
#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96
#: src/views/notification/notificationColumns.tsx:72
#: src/views/preference/components/ExternalNotify/columns.tsx:85
@@ -298,10 +298,6 @@ msgstr "進階設定"
msgid "Afterwards, refresh this page and click add passkey again."
msgstr "之後,請重新整理此頁面並再次點擊新增通行金鑰。"
#: src/components/NamespaceTabs/NamespaceTabs.vue:116
msgid "All"
msgstr "全部"
#: src/views/system/Licenses.vue:152
msgid "All Components"
msgstr "所有組件"
@@ -395,7 +391,7 @@ msgstr "確定要永久刪除嗎?"
msgid "Are you sure you want to delete?"
msgstr "您確定要刪除嗎?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:130
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
msgid "Are you sure you want to reload Nginx on the following sync nodes?"
msgstr "您確定要在以下同步節點上重新載入 Nginx 嗎?"
@@ -411,7 +407,7 @@ msgstr "您確定要刪除此項目嗎?"
msgid "Are you sure you want to remove this location?"
msgstr "您確定要刪除此 Location 嗎?"
#: src/components/NamespaceTabs/NamespaceTabs.vue:142
#: src/components/NamespaceTabs/NamespaceTabs.vue:154
msgid "Are you sure you want to restart Nginx on the following sync nodes?"
msgstr "您確定要在以下同步節點上重新啟動 Nginx 嗎?"
@@ -1243,10 +1239,14 @@ msgstr "配置模板"
msgid "Configuration"
msgstr "配置"
#: src/views/config/InspectConfig.vue:45
#: src/components/InspectConfig/InspectConfig.vue:62
msgid "Configuration file is test successful"
msgstr "設定檔案測試成功"
#: src/components/InspectConfig/InspectConfig.vue:61
msgid "Configuration file is test successful in isolated sandbox"
msgstr "組態檔案在隔離的沙箱中測試成功"
#: src/components/ConfigHistory/ConfigHistory.vue:147
msgid "Configuration History"
msgstr "設定歷史記錄"
@@ -1391,7 +1391,7 @@ msgid ""
msgstr "建立系統備份,包括 Nginx 設定與 Nginx UI 設定。備份檔案將自動下載至您的電腦。"
#: src/views/backup/AutoBackup/AutoBackup.vue:229
#: src/views/namespace/columns.ts:72
#: src/views/namespace/columns.ts:85
#: src/views/notification/notificationColumns.tsx:51
#: src/views/preference/components/AuthSettings/Passkey.vue:96
#: src/views/preference/components/ExternalNotify/columns.tsx:80
@@ -1632,6 +1632,10 @@ msgstr "演示"
msgid "Deploy"
msgstr "部署"
#: src/views/namespace/columns.ts:72
msgid "Deploy Mode"
msgstr "部署模式"
#: src/views/nginx_log/structured/StructuredLogViewer.vue:735
msgid "Descending"
msgstr "降序"
@@ -2161,7 +2165,7 @@ msgstr "環境配置為空"
msgid "Environment variables cleaned"
msgstr "環境變數已清理"
#: src/constants/index.ts:23 src/views/config/InspectConfig.vue:63
#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23
#: src/views/nginx_log/NginxLogList.vue:243
#: src/views/notification/notificationColumns.tsx:14
msgid "Error"
@@ -3489,9 +3493,10 @@ msgstr "資料載入中…"
msgid "Loading..."
msgstr "載入中..."
#: src/components/NamespaceTabs/NamespaceTabs.vue:124
#: src/components/NodeIndicator/NodeIndicator.vue:38
#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42
#: src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74
#: src/views/backup/AutoBackup/AutoBackup.vue:83
#: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
#: src/views/preference/tabs/NginxSettings.vue:55
@@ -4161,8 +4166,8 @@ msgid "Nginx.conf includes streams-enabled directory"
msgstr "Nginx.conf 包含 streams-enabled 目錄"
#: src/components/LLM/ChatMessageInput.vue:61
#: src/components/NamespaceTabs/NamespaceTabs.vue:132
#: src/components/NamespaceTabs/NamespaceTabs.vue:144
#: src/components/NamespaceTabs/NamespaceTabs.vue:156
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102
#: src/components/NgxConfigEditor/LocationEditor.vue:89
#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40
@@ -4385,11 +4390,12 @@ msgstr "關"
msgid "Official Document"
msgstr "官方文件"
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:84
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55
#: src/views/upstream/SocketList.vue:46
msgid "Offline"
msgstr "離線"
@@ -4422,12 +4428,13 @@ msgstr "開啟"
msgid "Once the verification is complete, the records will be removed."
msgstr "驗證完成後,記錄將被刪除。"
#: src/components/NamespaceTabs/NamespaceTabs.vue:160
#: src/components/NamespaceTabs/NamespaceTabs.vue:172
#: src/components/NodeCard/NodeCard.vue:51
#: src/components/NodeSelector/NodeSelector.vue:64
#: src/components/NodeSelector/NodeSelector.vue:78
#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48
#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51
#: src/views/upstream/SocketList.vue:46
msgid "Online"
msgstr "線上"
@@ -5094,7 +5101,7 @@ msgid "Reload"
msgstr "重新載入"
#: src/components/NamespaceRender/NamespaceRender.vue:44
#: src/components/NamespaceTabs/NamespaceTabs.vue:137 src/constants/index.ts:38
#: src/components/NamespaceTabs/NamespaceTabs.vue:149 src/constants/index.ts:38
#: src/views/node/Node.vue:208 src/views/node/Node.vue:216
msgid "Reload Nginx"
msgstr "重新載入 Nginx"
@@ -5119,7 +5126,7 @@ msgstr "重新載入遠端 Nginx 錯誤"
msgid "Reload Remote Nginx Success"
msgstr "遠端 Nginx 重新載入成功"
#: src/components/NamespaceTabs/NamespaceTabs.vue:85
#: src/components/NamespaceTabs/NamespaceTabs.vue:93
msgid "Reload request failed, please check your network connection"
msgstr "重新載入請求失敗,請檢查您的網路連線"
@@ -5131,7 +5138,7 @@ msgstr "重新載入中"
msgid "Reloading nginx"
msgstr "正在重新載入 Nginx"
#: src/constants/index.ts:43
#: src/constants/index.ts:43 src/constants/index.ts:49
msgid "Remote"
msgstr "遠端"
@@ -5304,7 +5311,7 @@ msgstr "回應"
msgid "Restart"
msgstr "重新啟動"
#: src/components/NamespaceTabs/NamespaceTabs.vue:149
#: src/components/NamespaceTabs/NamespaceTabs.vue:161
#: src/views/node/Node.vue:229 src/views/node/Node.vue:237
msgid "Restart Nginx"
msgstr "重新啟動 Nginx"
@@ -5325,7 +5332,7 @@ msgstr "遠端 Nginx 重啟錯誤"
msgid "Restart Remote Nginx Success"
msgstr "遠端 Nginx 重啟成功"
#: src/components/NamespaceTabs/NamespaceTabs.vue:105
#: src/components/NamespaceTabs/NamespaceTabs.vue:113
msgid "Restart request failed, please check your network connection"
msgstr "重新啟動請求失敗,請檢查您的網路連線"
@@ -6165,7 +6172,7 @@ msgid "Sync Config Success"
msgstr "同步設定成功"
#: src/components/NamespaceRender/NamespaceRender.vue:53
#: src/components/NamespaceTabs/NamespaceTabs.vue:123
#: src/components/NamespaceTabs/NamespaceTabs.vue:135
#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31
msgid "Sync Nodes"
msgstr "同步節點"
@@ -6767,7 +6774,7 @@ msgstr "更新成功"
#: src/views/certificate/ACMEUser.vue:124
#: src/views/certificate/DNSCredential.vue:65
#: src/views/config/components/ConfigRightPanel/Basic.vue:54
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:78
#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91
#: src/views/node/nodeColumns.tsx:89
#: src/views/site/site_edit/components/RightPanel/Basic.vue:39
#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80
@@ -6968,8 +6975,8 @@ msgstr "訪問量"
msgid "Waiting processes"
msgstr "等待過程"
#: src/constants/index.ts:24 src/views/backup/components/BackupCreator.vue:138
#: src/views/config/InspectConfig.vue:51
#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24
#: src/views/backup/components/BackupCreator.vue:138
#: src/views/notification/notificationColumns.tsx:21
#: src/views/preference/components/AuthSettings/AddPasskey.vue:88
msgid "Warning"
@@ -7109,8 +7116,8 @@ msgstr "將憑證私鑰寫入磁碟"
msgid "Writing certificate to disk"
msgstr "將憑證寫入磁碟"
#: src/components/NamespaceTabs/NamespaceTabs.vue:131
#: src/components/NamespaceTabs/NamespaceTabs.vue:143
#: src/components/NamespaceTabs/NamespaceTabs.vue:155
#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101
#: src/components/NgxConfigEditor/LocationEditor.vue:88
#: src/views/nginx_log/indexing/IndexManagement.vue:31
@@ -7179,6 +7186,15 @@ msgstr "您的通行金鑰"
msgid "Zero-allocation pipeline"
msgstr "零分配管道"
#~ msgid "Sandbox test successful"
#~ msgstr "沙盒測試成功"
#~ msgid "Tested in isolated sandbox mode"
#~ msgstr "已在隔離沙箱模式下測試"
#~ msgid "All"
#~ msgstr "全部"
#~ msgid "Based on M2 Pro (12 cores) testing"
#~ msgstr "基於 M2 Pro 12 核)測試"
+1 -1
View File
@@ -2,13 +2,13 @@
import { StdTable } from '@uozi-admin/curd'
import config from '@/api/config'
import FooterToolBar from '@/components/FooterToolbar'
import InspectConfig from '@/components/InspectConfig'
import { useBreadcrumbs } from '@/composables/useBreadcrumbs'
import { isProtectedPath } from '@/views/config/configUtils'
import Delete from './components/Delete.vue'
import Mkdir from './components/Mkdir.vue'
import Rename from './components/Rename.vue'
import configColumns from './configColumns'
import InspectConfig from './InspectConfig.vue'
const table = useTemplateRef('table')
const route = useRoute()
@@ -7,8 +7,8 @@ import ngx from '@/api/ngx'
import CodeEditor from '@/components/CodeEditor'
import { ConfigHistory } from '@/components/ConfigHistory'
import FooterToolbar from '@/components/FooterToolbar'
import InspectConfig from '@/components/InspectConfig'
import { useBreadcrumbs } from '@/composables/useBreadcrumbs'
import InspectConfig from '@/views/config/InspectConfig.vue'
const route = useRoute()
const router = useRouter()
+15 -2
View File
@@ -1,7 +1,7 @@
import type { StdTableColumn } from '@uozi-admin/curd'
import { datetimeRender, maskRender } from '@uozi-admin/curd'
import { PostSyncAction, UpstreamTestType } from '@/api/namespace'
import { PostSyncActionMask, UpstreamTestTypeMask } from '@/constants'
import { DeployMode, PostSyncAction, UpstreamTestType } from '@/api/namespace'
import { DeployModeMask, PostSyncActionMask, UpstreamTestTypeMask } from '@/constants'
import { useNodeAvailabilityStore } from '@/pinia/moudule/nodeAvailability'
const columns: StdTableColumn[] = [{
@@ -68,6 +68,19 @@ const columns: StdTableColumn[] = [{
},
pure: true,
width: 150,
}, {
title: () => $gettext('Deploy Mode'),
dataIndex: 'deploy_mode',
customRender: maskRender(DeployModeMask),
edit: {
type: 'select',
select: {
mask: DeployModeMask,
defaultValue: DeployMode.Local,
},
},
pure: true,
width: 120,
}, {
title: () => $gettext('Created at'),
dataIndex: 'created_at',
@@ -3,6 +3,7 @@ import { HistoryOutlined } from '@ant-design/icons-vue'
import CodeEditor from '@/components/CodeEditor/CodeEditor.vue'
import ConfigHistory from '@/components/ConfigHistory'
import FooterToolBar from '@/components/FooterToolbar'
import InspectConfig from '@/components/InspectConfig'
import NgxConfigEditor from '@/components/NgxConfigEditor'
import UpstreamCards from '@/components/UpstreamCards/UpstreamCards.vue'
import { ConfigStatus } from '@/constants'
@@ -37,6 +38,9 @@ const upstreamTargets = computed(() => {
const showHistory = ref(false)
// Use Vue 3.4+ useTemplateRef for InspectConfig component
const inspectConfigRef = useTemplateRef<InstanceType<typeof InspectConfig>>('inspectConfig')
onMounted(() => {
editorStore.init(name.value)
})
@@ -45,6 +49,8 @@ async function save() {
try {
await editorStore.save()
message.success($gettext('Saved successfully'))
// Run test after saving to verify configuration
inspectConfigRef.value?.test()
}
catch {
// do nothing
@@ -107,6 +113,13 @@ async function save() {
</ASpace>
</template>
<InspectConfig
ref="inspectConfig"
class="mb-0!"
banner
:namespace-id="data.namespace_id"
/>
<div class="card-body">
<Transition name="slide-fade">
<div
+2 -2
View File
@@ -2,9 +2,9 @@
import { StdCurd } from '@uozi-admin/curd'
import { message } from 'ant-design-vue'
import site from '@/api/site'
import InspectConfig from '@/components/InspectConfig'
import NamespaceTabs from '@/components/NamespaceTabs'
import { ConfigStatus } from '@/constants'
import InspectConfig from '@/views/config/InspectConfig.vue'
import columns from '@/views/site/site_list/columns'
import SiteDuplicate from '@/views/site/site_list/SiteDuplicate.vue'
@@ -74,7 +74,7 @@ function handle_click_duplicate(name: string) {
</AButton>
</template>
<template #beforeCardBody>
<InspectConfig ref="inspectConfig" />
<InspectConfig ref="inspectConfig" :namespace-id="namespaceId" />
<NamespaceTabs v-model:active-key="namespaceId" />
</template>
<template #afterActions="{ record }">
+4 -4
View File
@@ -1,10 +1,10 @@
<script setup lang="tsx">
import { StdCurd } from '@uozi-admin/curd'
import stream from '@/api/stream'
import InspectConfig from '@/components/InspectConfig'
import NamespaceTabs from '@/components/NamespaceTabs'
import InspectConfig from '@/views/config/InspectConfig.vue'
import columns from '@/views/stream/columns'
import StreamDuplicate from '@/views/stream/components/StreamDuplicate.vue'
import columns from './columns'
import StreamDuplicate from './components/StreamDuplicate.vue'
const route = useRoute()
const router = useRouter()
@@ -83,7 +83,7 @@ function handleAddStream() {
</template>
<template #beforeCardBody>
<InspectConfig ref="inspect_config" />
<InspectConfig ref="inspect_config" :namespace-id="namespaceId" />
<NamespaceTabs v-model:active-key="namespaceId" />
</template>
@@ -3,6 +3,7 @@ import { HistoryOutlined, LoadingOutlined } from '@ant-design/icons-vue'
import CodeEditor from '@/components/CodeEditor'
import ConfigHistory from '@/components/ConfigHistory'
import FooterToolBar from '@/components/FooterToolbar'
import InspectConfig from '@/components/InspectConfig'
import NgxConfigEditor from '@/components/NgxConfigEditor'
import UpstreamCards from '@/components/UpstreamCards/UpstreamCards.vue'
import { ConfigStatus } from '@/constants'
@@ -15,6 +16,9 @@ const store = useStreamEditorStore()
const { name, status, configText, filepath, saving, parseErrorStatus, parseErrorMessage, advanceMode, loading, data } = storeToRefs(store)
const showHistory = ref(false)
// Use Vue 3.4+ useTemplateRef for InspectConfig component
const inspectConfigRef = useTemplateRef<InstanceType<typeof InspectConfig>>('inspectConfig')
// Get upstream targets from backend API data
const upstreamTargets = computed(() => {
return data.value.proxy_targets || []
@@ -24,6 +28,8 @@ async function save() {
try {
await store.save()
message.success($gettext('Saved successfully'))
// Run test after saving to verify configuration
inspectConfigRef.value?.test()
}
catch {
// do nothing
@@ -80,6 +86,13 @@ async function save() {
</ASpace>
</template>
<InspectConfig
ref="inspectConfig"
class="mb-0!"
banner
:namespace-id="data.namespace_id"
/>
<div class="card-body">
<Transition name="slide-fade">
<div
+1 -1
View File
@@ -43,7 +43,7 @@ const columns: ColumnsType<SocketInfo> = [
}
const status = record.status
return h('div', { class: 'flex items-center' }, [
h(Tag, { color: status.online ? 'success' : 'error', class: 'mr-2' }, () => status.online ? 'Online' : 'Offline'),
h(Tag, { color: status.online ? 'success' : 'error', class: 'mr-2' }, () => status.online ? $gettext('Online') : $gettext('Offline')),
status.online ? h('span', `${status.latency.toFixed(2)}ms`) : null,
])
},
+360
View File
@@ -0,0 +1,360 @@
package nginx
import (
"fmt"
"os"
"path/filepath"
"regexp"
"strings"
"github.com/0xJacky/Nginx-UI/internal/helper"
"github.com/0xJacky/Nginx-UI/settings"
"github.com/uozi-tech/cosy/logger"
)
// Site represents minimal site info needed for sandbox testing
type SandboxSite struct {
Path string
}
// Stream represents minimal stream info needed for sandbox testing
type SandboxStream struct {
Path string
}
// NamespaceInfo represents minimal namespace info for sandbox
type NamespaceInfo struct {
ID uint64
Name string
DeployMode string
}
// SandboxTestConfigWithPaths tests nginx config in an isolated sandbox with provided paths
func SandboxTestConfigWithPaths(namespace *NamespaceInfo, sitePaths, streamPaths []string) (stdOut string, stdErr error) {
mutex.Lock()
defer mutex.Unlock()
// If custom test command is set, use it (no sandbox support)
if settings.NginxSettings.TestConfigCmd != "" {
return execShell(settings.NginxSettings.TestConfigCmd)
}
// Skip local test for remote-only namespaces
if namespace != nil && namespace.DeployMode == "remote" {
return "Config validation skipped for remote-only namespace", nil
}
// Create sandbox and test
sandbox, err := createSandbox(namespace, sitePaths, streamPaths)
if err != nil {
logger.Errorf("Failed to create sandbox: %v", err)
return TestConfig() // Fallback to normal test
}
defer sandbox.Cleanup()
// Test the sandbox config
sbin := GetSbinPath()
if sbin == "" {
sbin = "nginx"
}
return execCommand(sbin, "-t", "-c", sandbox.ConfigPath)
}
// Sandbox represents an isolated nginx test environment
type Sandbox struct {
Dir string
ConfigPath string
Namespace *NamespaceInfo
}
// createSandbox creates an isolated nginx configuration environment for testing
func createSandbox(namespace *NamespaceInfo, sitePaths, streamPaths []string) (*Sandbox, error) {
// Create temp directory for sandbox
tempDir, err := os.MkdirTemp("", "nginx-ui-sandbox-*")
if err != nil {
return nil, fmt.Errorf("failed to create sandbox temp dir: %w", err)
}
sandbox := &Sandbox{
Dir: tempDir,
Namespace: namespace,
}
// Copy necessary directories to sandbox for complete isolation
if err := copySandboxDependencies(tempDir); err != nil {
os.RemoveAll(tempDir)
return nil, fmt.Errorf("failed to copy sandbox dependencies: %w", err)
}
// Generate sandbox nginx.conf
configContent, err := generateSandboxConfig(namespace, sitePaths, streamPaths, tempDir)
if err != nil {
os.RemoveAll(tempDir)
return nil, fmt.Errorf("failed to generate sandbox config: %w", err)
}
// Write sandbox nginx.conf
sandbox.ConfigPath = filepath.Join(tempDir, "nginx.conf")
if err := os.WriteFile(sandbox.ConfigPath, []byte(configContent), 0644); err != nil {
os.RemoveAll(tempDir)
return nil, fmt.Errorf("failed to write sandbox config: %w", err)
}
logger.Debugf("Created sandbox at %s for namespace: %v", tempDir, namespace)
return sandbox, nil
}
// copySandboxDependencies copies necessary config directories to sandbox
func copySandboxDependencies(sandboxDir string) error {
confBase := GetConfPath()
// Directories to copy for complete isolation
dirsToCopy := []string{
"conf.d",
"modules-enabled",
"snippets", // Common nginx snippets directory
}
for _, dir := range dirsToCopy {
srcDir := filepath.Join(confBase, dir)
dstDir := filepath.Join(sandboxDir, dir)
// Check if source directory exists
if !helper.FileExists(srcDir) {
continue // Skip non-existent directories
}
// Create destination directory
if err := os.MkdirAll(dstDir, 0755); err != nil {
return fmt.Errorf("failed to create %s: %w", dir, err)
}
// Copy all files from source to destination
entries, err := os.ReadDir(srcDir)
if err != nil {
logger.Warnf("Failed to read %s: %v, skipping", srcDir, err)
continue
}
for _, entry := range entries {
if entry.IsDir() {
continue // Skip subdirectories for now
}
srcFile := filepath.Join(srcDir, entry.Name())
dstFile := filepath.Join(dstDir, entry.Name())
content, err := os.ReadFile(srcFile)
if err != nil {
logger.Warnf("Failed to read %s: %v, skipping", srcFile, err)
continue
}
if err := os.WriteFile(dstFile, content, 0644); err != nil {
logger.Warnf("Failed to write %s: %v, skipping", dstFile, err)
continue
}
}
logger.Debugf("Copied %s to sandbox", dir)
}
// Also copy mime.types if exists
mimeTypes := filepath.Join(confBase, "mime.types")
if helper.FileExists(mimeTypes) {
content, err := os.ReadFile(mimeTypes)
if err == nil {
os.WriteFile(filepath.Join(sandboxDir, "mime.types"), content, 0644)
}
}
return nil
}
// Cleanup removes the sandbox directory
func (s *Sandbox) Cleanup() {
if s.Dir != "" {
if err := os.RemoveAll(s.Dir); err != nil {
logger.Warnf("Failed to cleanup sandbox %s: %v", s.Dir, err)
} else {
logger.Debugf("Cleaned up sandbox: %s", s.Dir)
}
}
}
// generateSandboxConfig generates a minimal nginx.conf that only includes configs from specified paths
func generateSandboxConfig(namespace *NamespaceInfo, sitePaths, streamPaths []string, sandboxDir string) (string, error) {
// Read the main nginx.conf to get basic structure
mainConfPath := GetConfEntryPath()
mainConf, err := os.ReadFile(mainConfPath)
if err != nil {
return "", fmt.Errorf("failed to read main nginx.conf: %w", err)
}
mainConfStr := string(mainConf)
// Generate include patterns based on provided paths
var includePatterns []string
// Add site includes
for _, sitePath := range sitePaths {
siteEnabledPath := GetConfPath("sites-enabled", filepath.Base(sitePath))
if helper.FileExists(siteEnabledPath) {
includePatterns = append(includePatterns, fmt.Sprintf(" include %s;", siteEnabledPath))
}
}
// Add stream includes
for _, streamPath := range streamPaths {
streamEnabledPath := GetConfPath("streams-enabled", filepath.Base(streamPath))
if helper.FileExists(streamEnabledPath) {
includePatterns = append(includePatterns, fmt.Sprintf(" include %s;", streamEnabledPath))
}
}
// If no paths provided, test all enabled configs (original behavior)
if len(includePatterns) == 0 {
sitesEnabledDir := GetConfPath("sites-enabled")
streamsEnabledDir := GetConfPath("streams-enabled")
includePatterns = append(includePatterns, fmt.Sprintf(" include %s/*;", sitesEnabledDir))
includePatterns = append(includePatterns, fmt.Sprintf(" include %s/*;", streamsEnabledDir))
}
// Replace include directives with sandbox-specific ones
sandboxConf := replaceIncludeDirectives(mainConfStr, includePatterns, sandboxDir)
return sandboxConf, nil
}
// replaceIncludeDirectives replaces only sites-enabled and streams-enabled includes
// Rewrites other includes (conf.d, mime.types, etc.) to use sandbox paths
func replaceIncludeDirectives(mainConf string, includePatterns []string, sandboxDir string) string {
lines := strings.Split(mainConf, "\n")
var result []string
insideHTTP := false
insideStream := false
httpIncludesAdded := false
streamIncludesAdded := false
for _, line := range lines {
trimmed := strings.TrimSpace(line)
// Track http and stream blocks
if strings.HasPrefix(trimmed, "http") && strings.Contains(trimmed, "{") {
insideHTTP = true
result = append(result, line)
continue
}
if strings.HasPrefix(trimmed, "stream") && strings.Contains(trimmed, "{") {
insideStream = true
result = append(result, line)
continue
}
// Handle include directives
if strings.Contains(trimmed, "include") {
isSitesEnabled := strings.Contains(trimmed, "sites-enabled")
isStreamsEnabled := strings.Contains(trimmed, "streams-enabled")
// If it's sites-enabled or streams-enabled, replace it
if isSitesEnabled || isStreamsEnabled {
// Add our sandbox-specific includes at the first occurrence
if insideHTTP && isSitesEnabled && !httpIncludesAdded {
result = append(result, " # Sandbox-specific includes (generated for isolated testing)")
for _, pattern := range includePatterns {
if strings.Contains(pattern, "sites-enabled") {
result = append(result, pattern)
}
}
httpIncludesAdded = true
}
if insideStream && isStreamsEnabled && !streamIncludesAdded {
result = append(result, " # Sandbox-specific includes (generated for isolated testing)")
for _, pattern := range includePatterns {
if strings.Contains(pattern, "streams-enabled") {
result = append(result, pattern)
}
}
streamIncludesAdded = true
}
continue // Skip the original include line
}
// Rewrite other includes to use sandbox paths
rewrittenLine := rewriteIncludePath(line, sandboxDir)
result = append(result, rewrittenLine)
continue
}
// Detect end of http/stream block
if strings.Contains(line, "}") {
if insideHTTP {
// Add includes before closing http block if not added yet
if !httpIncludesAdded {
result = append(result, " # Sandbox-specific includes (generated for isolated testing)")
for _, pattern := range includePatterns {
if strings.Contains(pattern, "sites-enabled") {
result = append(result, pattern)
}
}
httpIncludesAdded = true
}
insideHTTP = false
}
if insideStream {
// Add includes before closing stream block if not added yet
if !streamIncludesAdded {
result = append(result, " # Sandbox-specific includes (generated for isolated testing)")
for _, pattern := range includePatterns {
if strings.Contains(pattern, "streams-enabled") {
result = append(result, pattern)
}
}
streamIncludesAdded = true
}
insideStream = false
}
}
result = append(result, line)
}
return strings.Join(result, "\n")
}
// rewriteIncludePath rewrites include paths to use sandbox directory
func rewriteIncludePath(line, sandboxDir string) string {
// Extract the include path using regex
// Match: include /path/to/file; or include /path/*.conf;
includeRegex := regexp.MustCompile(`include\s+([^;]+);`)
matches := includeRegex.FindStringSubmatch(line)
if len(matches) < 2 {
return line // No match, return original
}
origPath := strings.TrimSpace(matches[1])
confBase := GetConfPath()
// Paths to rewrite to sandbox
rewritePaths := map[string]string{
filepath.Join(confBase, "conf.d"): filepath.Join(sandboxDir, "conf.d"),
filepath.Join(confBase, "modules-enabled"): filepath.Join(sandboxDir, "modules-enabled"),
filepath.Join(confBase, "snippets"): filepath.Join(sandboxDir, "snippets"),
filepath.Join(confBase, "mime.types"): filepath.Join(sandboxDir, "mime.types"),
}
// Check if path starts with any of the rewrite paths
newPath := origPath
for oldPrefix, newPrefix := range rewritePaths {
if strings.HasPrefix(origPath, oldPrefix) {
newPath = strings.Replace(origPath, oldPrefix, newPrefix, 1)
break
}
}
// Replace in the original line
return strings.Replace(line, origPath, newPath, 1)
}
+254
View File
@@ -0,0 +1,254 @@
package nginx
import (
"os"
"strings"
"testing"
)
func TestCreateSandbox(t *testing.T) {
namespaceInfo := &NamespaceInfo{
ID: 1,
Name: "test-namespace",
}
sitePaths := []string{"site1.conf", "site2.conf"}
streamPaths := []string{"stream1.conf"}
sandbox, err := createSandbox(namespaceInfo, sitePaths, streamPaths)
if err != nil {
t.Fatalf("Failed to create sandbox: %v", err)
}
defer sandbox.Cleanup()
// Verify sandbox directory exists
if _, err := os.Stat(sandbox.Dir); os.IsNotExist(err) {
t.Errorf("Sandbox directory does not exist: %s", sandbox.Dir)
}
// Verify config file exists
if _, err := os.Stat(sandbox.ConfigPath); os.IsNotExist(err) {
t.Errorf("Sandbox config file does not exist: %s", sandbox.ConfigPath)
}
// Verify namespace info
if sandbox.Namespace.ID != 1 {
t.Errorf("Expected namespace ID 1, got %d", sandbox.Namespace.ID)
}
}
func TestSandboxCleanup(t *testing.T) {
sandbox, err := createSandbox(nil, []string{}, []string{})
if err != nil {
t.Fatalf("Failed to create sandbox: %v", err)
}
sandboxDir := sandbox.Dir
// Cleanup
sandbox.Cleanup()
// Verify directory is removed
if _, err := os.Stat(sandboxDir); !os.IsNotExist(err) {
t.Errorf("Sandbox directory still exists after cleanup: %s", sandboxDir)
}
}
func TestGenerateSandboxConfig(t *testing.T) {
// Skip this test as it requires mocking GetConfEntryPath
// The logic is tested in TestReplaceIncludeDirectives instead
t.Skip("Skipping - requires dependency injection refactoring")
}
func TestReplaceIncludeDirectives(t *testing.T) {
tests := []struct {
name string
mainConf string
includePatterns []string
expectContains []string
expectNotContain []string
}{
{
name: "Replace HTTP includes",
mainConf: `http {
include /etc/nginx/sites-enabled/*;
}`,
includePatterns: []string{
" include /etc/nginx/sites-enabled/site1.conf;",
" include /etc/nginx/sites-enabled/site2.conf;",
},
expectContains: []string{
"include /etc/nginx/sites-enabled/site1.conf",
"include /etc/nginx/sites-enabled/site2.conf",
"Sandbox-specific includes",
},
expectNotContain: []string{
"include /etc/nginx/sites-enabled/*",
},
},
{
name: "Replace Stream includes",
mainConf: `stream {
include /etc/nginx/streams-enabled/*;
}`,
includePatterns: []string{
" include /etc/nginx/streams-enabled/stream1.conf;",
},
expectContains: []string{
"include /etc/nginx/streams-enabled/stream1.conf",
"Sandbox-specific includes",
},
expectNotContain: []string{
"include /etc/nginx/streams-enabled/*",
},
},
{
name: "Rewrite other includes to sandbox",
mainConf: `http {
include /etc/nginx/mime.types;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}`,
includePatterns: []string{
" include /etc/nginx/sites-enabled/site1.conf;",
},
expectContains: []string{
"include /tmp/test-sandbox/mime.types", // Rewritten to sandbox
"include /tmp/test-sandbox/conf.d/*.conf", // Rewritten to sandbox
"include /etc/nginx/sites-enabled/site1.conf",
},
expectNotContain: []string{
"include /etc/nginx/sites-enabled/*",
"include /etc/nginx/mime.types", // Should be rewritten
"include /etc/nginx/conf.d/*.conf", // Should be rewritten
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
sandboxDir := "/tmp/test-sandbox"
result := replaceIncludeDirectives(tt.mainConf, tt.includePatterns, sandboxDir)
for _, expected := range tt.expectContains {
if !strings.Contains(result, expected) {
t.Errorf("Expected result to contain %q, but it doesn't.\nResult:\n%s", expected, result)
}
}
for _, notExpected := range tt.expectNotContain {
if strings.Contains(result, notExpected) {
t.Errorf("Expected result NOT to contain %q, but it does.\nResult:\n%s", notExpected, result)
}
}
})
}
}
func TestReplaceIncludeDirectivesEdgeCases(t *testing.T) {
t.Run("Empty include patterns", func(t *testing.T) {
mainConf := `http {
include /etc/nginx/sites-enabled/*;
}`
result := replaceIncludeDirectives(mainConf, []string{}, "/tmp/test-sandbox")
// Should still add comment but no includes
if !strings.Contains(result, "Sandbox-specific includes") {
t.Error("Expected sandbox comment even with empty patterns")
}
})
t.Run("No http or stream blocks", func(t *testing.T) {
mainConf := `events {
worker_connections 1024;
}`
includePatterns := []string{" include /etc/nginx/sites-enabled/site1.conf;"}
result := replaceIncludeDirectives(mainConf, includePatterns, "/tmp/test-sandbox")
// Should preserve original config
if !strings.Contains(result, "worker_connections 1024") {
t.Error("Original config not preserved when no http/stream blocks")
}
})
t.Run("Nested braces", func(t *testing.T) {
mainConf := `http {
server {
location / {
return 200;
}
}
include /etc/nginx/sites-enabled/*;
}`
includePatterns := []string{" include /etc/nginx/sites-enabled/site1.conf;"}
result := replaceIncludeDirectives(mainConf, includePatterns, "/tmp/test-sandbox")
// Should preserve nested structure
if !strings.Contains(result, "location /") {
t.Error("Nested location directive not preserved")
}
// Should replace include
if strings.Contains(result, "include /etc/nginx/sites-enabled/*") {
t.Error("Generic include should be replaced even with nested braces")
}
})
}
func TestSandboxTestConfigWithPaths(t *testing.T) {
// Skip this integration test - requires nginx installation and proper setup
t.Skip("Skipping integration test - requires nginx binary and proper configuration")
}
func BenchmarkCreateSandbox(b *testing.B) {
namespaceInfo := &NamespaceInfo{
ID: 1,
Name: "bench-namespace",
}
sitePaths := []string{"site1.conf", "site2.conf", "site3.conf"}
streamPaths := []string{"stream1.conf"}
b.ResetTimer()
for i := 0; i < b.N; i++ {
sandbox, err := createSandbox(namespaceInfo, sitePaths, streamPaths)
if err != nil {
b.Fatalf("Failed to create sandbox: %v", err)
}
sandbox.Cleanup()
}
}
func BenchmarkReplaceIncludeDirectives(b *testing.B) {
mainConf := `
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
server {
listen 80;
server_name default;
}
}
stream {
include /etc/nginx/streams-enabled/*;
}
`
includePatterns := []string{
" include /etc/nginx/sites-enabled/site1.conf;",
" include /etc/nginx/sites-enabled/site2.conf;",
" include /etc/nginx/sites-enabled/site3.conf;",
" include /etc/nginx/streams-enabled/stream1.conf;",
}
b.ResetTimer()
for i := 0; i < b.N; i++ {
_ = replaceIncludeDirectives(mainConf, includePatterns, "/tmp/test-sandbox")
}
}
+9
View File
@@ -18,6 +18,14 @@ const (
UpstreamTestMirror = "mirror"
)
// DeployMode defines where configs should be deployed
const (
// DeployModeLocal indicates deploy locally with optional remote sync
DeployModeLocal = "local"
// DeployModeRemote indicates deploy to remote nodes only
DeployModeRemote = "remote"
)
// Namespace represents a group of environments that can be synced across nodes
type Namespace struct {
Model
@@ -26,4 +34,5 @@ type Namespace struct {
OrderID int `json:"-" gorm:"default:0"`
PostSyncAction string `json:"post_sync_action" gorm:"default:'reload_nginx'"`
UpstreamTestType string `json:"upstream_test_type" gorm:"default:'local'"`
DeployMode string `json:"deploy_mode" gorm:"default:'local'"`
}
+5 -1
View File
@@ -37,6 +37,7 @@ func newNamespace(db *gorm.DB, opts ...gen.DOOption) namespace {
_namespace.OrderID = field.NewInt(tableName, "order_id")
_namespace.PostSyncAction = field.NewString(tableName, "post_sync_action")
_namespace.UpstreamTestType = field.NewString(tableName, "upstream_test_type")
_namespace.DeployMode = field.NewString(tableName, "deploy_mode")
_namespace.fillFieldMap()
@@ -56,6 +57,7 @@ type namespace struct {
OrderID field.Int
PostSyncAction field.String
UpstreamTestType field.String
DeployMode field.String
fieldMap map[string]field.Expr
}
@@ -81,6 +83,7 @@ func (n *namespace) updateTableName(table string) *namespace {
n.OrderID = field.NewInt(table, "order_id")
n.PostSyncAction = field.NewString(table, "post_sync_action")
n.UpstreamTestType = field.NewString(table, "upstream_test_type")
n.DeployMode = field.NewString(table, "deploy_mode")
n.fillFieldMap()
@@ -97,7 +100,7 @@ func (n *namespace) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
}
func (n *namespace) fillFieldMap() {
n.fieldMap = make(map[string]field.Expr, 9)
n.fieldMap = make(map[string]field.Expr, 10)
n.fieldMap["id"] = n.ID
n.fieldMap["created_at"] = n.CreatedAt
n.fieldMap["updated_at"] = n.UpdatedAt
@@ -107,6 +110,7 @@ func (n *namespace) fillFieldMap() {
n.fieldMap["order_id"] = n.OrderID
n.fieldMap["post_sync_action"] = n.PostSyncAction
n.fieldMap["upstream_test_type"] = n.UpstreamTestType
n.fieldMap["deploy_mode"] = n.DeployMode
}
func (n namespace) clone(db *gorm.DB) namespace {