mirror of
https://github.com/0xJacky/nginx-ui.git
synced 2026-06-19 07:36:59 +00:00
feat/dns (#1466)
* feat: dns management * refactor(dns): streamline domain management functions and enhance validation * feat(dns): add value suggestions for DNS record input with autocomplete functionality * fix(dns): handle edge case in record listing pagination * fix(dns): update credential property name for consistency and add cleanup on component unmount * feat(dns): implement DDNS management #1194, #1140
This commit is contained in:
+115
@@ -0,0 +1,115 @@
|
||||
package dns
|
||||
|
||||
import (
|
||||
"github.com/0xJacky/Nginx-UI/internal/dns"
|
||||
"github.com/0xJacky/Nginx-UI/model"
|
||||
)
|
||||
|
||||
type domainListQuery struct {
|
||||
Keyword string `form:"keyword"`
|
||||
CredentialID uint64 `form:"credential_id"`
|
||||
Page int `form:"page"`
|
||||
PerPage int `form:"per_page"`
|
||||
}
|
||||
|
||||
type domainRequest struct {
|
||||
Domain string `json:"domain" binding:"required"`
|
||||
Description string `json:"description"`
|
||||
DnsCredentialID uint64 `json:"dns_credential_id" binding:"required"`
|
||||
}
|
||||
|
||||
type recordListQuery struct {
|
||||
Type string `form:"type"`
|
||||
Name string `form:"name"`
|
||||
Page int `form:"page"`
|
||||
PerPage int `form:"per_page"`
|
||||
}
|
||||
|
||||
type recordRequest struct {
|
||||
Type string `json:"type" binding:"required"`
|
||||
Name string `json:"name" binding:"required"`
|
||||
Content string `json:"content" binding:"required"`
|
||||
TTL int `json:"ttl" binding:"required,min=1"`
|
||||
Priority *int `json:"priority"`
|
||||
Weight *int `json:"weight"`
|
||||
Proxied *bool `json:"proxied"`
|
||||
}
|
||||
|
||||
func toRecordInput(req recordRequest) dns.RecordInput {
|
||||
return dns.RecordInput{
|
||||
Type: req.Type,
|
||||
Name: req.Name,
|
||||
Content: req.Content,
|
||||
TTL: req.TTL,
|
||||
Priority: req.Priority,
|
||||
Weight: req.Weight,
|
||||
Proxied: req.Proxied,
|
||||
}
|
||||
}
|
||||
|
||||
const timeFormat = "2006-01-02T15:04:05Z07:00"
|
||||
|
||||
type ddnsConfigRequest struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
IntervalSeconds int `json:"interval_seconds" binding:"required,min=60"`
|
||||
RecordIDs []string `json:"record_ids"`
|
||||
}
|
||||
|
||||
type ddnsRecordTarget struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Type string `json:"type"`
|
||||
}
|
||||
|
||||
type ddnsConfigResponse struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
IntervalSeconds int `json:"interval_seconds"`
|
||||
Targets []ddnsRecordTarget `json:"targets"`
|
||||
LastIPv4 string `json:"last_ipv4,omitempty"`
|
||||
LastIPv6 string `json:"last_ipv6,omitempty"`
|
||||
LastRunAt string `json:"last_run_at,omitempty"`
|
||||
LastError string `json:"last_error,omitempty"`
|
||||
}
|
||||
|
||||
func toDDNSResponse(cfg *model.DDNSConfig) ddnsConfigResponse {
|
||||
resp := ddnsConfigResponse{
|
||||
Enabled: cfg != nil && cfg.Enabled,
|
||||
IntervalSeconds: dns.DefaultDDNSInterval(),
|
||||
Targets: []ddnsRecordTarget{},
|
||||
}
|
||||
|
||||
if cfg == nil {
|
||||
return resp
|
||||
}
|
||||
|
||||
interval := cfg.IntervalSeconds
|
||||
if interval <= 0 {
|
||||
interval = dns.DefaultDDNSInterval()
|
||||
}
|
||||
resp.IntervalSeconds = interval
|
||||
resp.LastIPv4 = cfg.LastIPv4
|
||||
resp.LastIPv6 = cfg.LastIPv6
|
||||
resp.LastError = cfg.LastError
|
||||
|
||||
if cfg.LastRunAt != nil {
|
||||
resp.LastRunAt = cfg.LastRunAt.Format(timeFormat)
|
||||
}
|
||||
|
||||
for _, target := range cfg.Targets {
|
||||
resp.Targets = append(resp.Targets, ddnsRecordTarget{
|
||||
ID: target.ID,
|
||||
Name: target.Name,
|
||||
Type: target.Type,
|
||||
})
|
||||
}
|
||||
|
||||
return resp
|
||||
}
|
||||
|
||||
type ddnsDomainItem struct {
|
||||
ID uint64 `json:"id"`
|
||||
Domain string `json:"domain"`
|
||||
CredentialName string `json:"credential_name,omitempty"`
|
||||
CredentialProvider string `json:"credential_provider,omitempty"`
|
||||
Config ddnsConfigResponse `json:"config"`
|
||||
}
|
||||
@@ -0,0 +1,292 @@
|
||||
package dns
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/samber/lo"
|
||||
"github.com/spf13/cast"
|
||||
"github.com/uozi-tech/cosy"
|
||||
|
||||
"github.com/0xJacky/Nginx-UI/internal/cron"
|
||||
dnsService "github.com/0xJacky/Nginx-UI/internal/dns"
|
||||
"github.com/0xJacky/Nginx-UI/model"
|
||||
)
|
||||
|
||||
func ListDomains(c *gin.Context) {
|
||||
cosy.Core[model.DnsDomain](c).
|
||||
SetPreloads("DnsCredential").
|
||||
SetFussy("domain", "description").
|
||||
PagingList()
|
||||
}
|
||||
|
||||
func GetDomain(c *gin.Context) {
|
||||
cosy.Core[model.DnsDomain](c).
|
||||
SetPreloads("DnsCredential").
|
||||
Get()
|
||||
}
|
||||
|
||||
func CreateDomain(c *gin.Context) {
|
||||
cosy.Core[model.DnsDomain](c).
|
||||
SetValidRules(gin.H{
|
||||
"domain": "required",
|
||||
"description": "omitempty",
|
||||
"dns_credential_id": "required",
|
||||
}).
|
||||
BeforeExecuteHook(domainMutationHook(dnsService.NewService(), false)).
|
||||
Create()
|
||||
}
|
||||
|
||||
func UpdateDomain(c *gin.Context) {
|
||||
cosy.Core[model.DnsDomain](c).
|
||||
SetValidRules(gin.H{
|
||||
"domain": "required",
|
||||
"description": "omitempty",
|
||||
"dns_credential_id": "required",
|
||||
}).
|
||||
BeforeExecuteHook(domainMutationHook(dnsService.NewService(), true)).
|
||||
Modify()
|
||||
}
|
||||
|
||||
func DeleteDomain(c *gin.Context) {
|
||||
cosy.Core[model.DnsDomain](c).Destroy()
|
||||
}
|
||||
|
||||
func ListRecords(c *gin.Context) {
|
||||
domainID := cast.ToUint64(c.Param("id"))
|
||||
var params recordListQuery
|
||||
_ = c.ShouldBindQuery(¶ms)
|
||||
|
||||
svc := dnsService.NewService()
|
||||
records, err := svc.ListRecords(
|
||||
c.Request.Context(),
|
||||
domainID,
|
||||
dnsService.RecordListOptions{
|
||||
Filter: dnsService.RecordFilter{
|
||||
Type: params.Type,
|
||||
Name: params.Name,
|
||||
},
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
cosy.ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
page := lo.If(params.Page < 1, 1).Else(params.Page)
|
||||
perPage := lo.If(params.PerPage <= 0, 50).Else(params.PerPage)
|
||||
|
||||
total := len(records)
|
||||
start := max((page-1)*perPage, 0)
|
||||
end := min(start+perPage, total)
|
||||
|
||||
var pagedRecords []dnsService.Record
|
||||
if total == 0 || start >= total {
|
||||
pagedRecords = []dnsService.Record{}
|
||||
} else {
|
||||
pagedRecords = records[start:end]
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"data": pagedRecords,
|
||||
"pagination": buildPagination(page, perPage, int64(total)),
|
||||
})
|
||||
}
|
||||
|
||||
func CreateRecord(c *gin.Context) {
|
||||
domainID := cast.ToUint64(c.Param("id"))
|
||||
var payload recordRequest
|
||||
if !cosy.BindAndValid(c, &payload) {
|
||||
return
|
||||
}
|
||||
|
||||
svc := dnsService.NewService()
|
||||
record, err := svc.CreateRecord(c.Request.Context(), domainID, toRecordInput(payload))
|
||||
if err != nil {
|
||||
cosy.ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusCreated, record)
|
||||
}
|
||||
|
||||
func UpdateRecord(c *gin.Context) {
|
||||
domainID := cast.ToUint64(c.Param("id"))
|
||||
recordID := c.Param("record_id")
|
||||
|
||||
var payload recordRequest
|
||||
if !cosy.BindAndValid(c, &payload) {
|
||||
return
|
||||
}
|
||||
|
||||
svc := dnsService.NewService()
|
||||
record, err := svc.UpdateRecord(c.Request.Context(), domainID, recordID, toRecordInput(payload))
|
||||
if err != nil {
|
||||
cosy.ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, record)
|
||||
}
|
||||
|
||||
func DeleteRecord(c *gin.Context) {
|
||||
domainID := cast.ToUint64(c.Param("id"))
|
||||
recordID := c.Param("record_id")
|
||||
|
||||
svc := dnsService.NewService()
|
||||
if err := svc.DeleteRecord(c.Request.Context(), domainID, recordID); err != nil {
|
||||
cosy.ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.Status(http.StatusNoContent)
|
||||
}
|
||||
|
||||
// GetDDNSConfig returns the DDNS configuration for a domain.
|
||||
func GetDDNSConfig(c *gin.Context) {
|
||||
domainID := cast.ToUint64(c.Param("id"))
|
||||
svc := dnsService.NewService()
|
||||
|
||||
cfg, err := svc.GetDDNSConfig(c.Request.Context(), domainID)
|
||||
if err != nil {
|
||||
cosy.ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, toDDNSResponse(cfg))
|
||||
}
|
||||
|
||||
// ListDDNSConfig returns DDNS overview for all domains.
|
||||
func ListDDNSConfig(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
domains, err := dnsService.ListDDNSDomains(ctx)
|
||||
if err != nil {
|
||||
cosy.ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
items := make([]ddnsDomainItem, 0, len(domains))
|
||||
for _, domain := range domains {
|
||||
cfg := domain.DDNSConfig
|
||||
if cfg == nil {
|
||||
cfg = &model.DDNSConfig{
|
||||
Enabled: false,
|
||||
IntervalSeconds: dnsService.DefaultDDNSInterval(),
|
||||
Targets: []model.DDNSRecordTarget{},
|
||||
}
|
||||
} else if cfg.IntervalSeconds <= 0 {
|
||||
cfg.IntervalSeconds = dnsService.DefaultDDNSInterval()
|
||||
}
|
||||
|
||||
credName := ""
|
||||
credProvider := ""
|
||||
if domain.DnsCredential != nil {
|
||||
credName = domain.DnsCredential.Name
|
||||
credProvider = domain.DnsCredential.Provider
|
||||
}
|
||||
|
||||
item := ddnsDomainItem{
|
||||
ID: domain.ID,
|
||||
Domain: domain.Domain,
|
||||
CredentialName: credName,
|
||||
CredentialProvider: credProvider,
|
||||
Config: toDDNSResponse(cfg),
|
||||
}
|
||||
items = append(items, item)
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"data": items,
|
||||
})
|
||||
}
|
||||
|
||||
// UpdateDDNSConfig updates DDNS settings for a domain and restarts its schedule.
|
||||
func UpdateDDNSConfig(c *gin.Context) {
|
||||
domainID := cast.ToUint64(c.Param("id"))
|
||||
|
||||
var payload ddnsConfigRequest
|
||||
if !cosy.BindAndValid(c, &payload) {
|
||||
return
|
||||
}
|
||||
|
||||
if payload.Enabled && len(payload.RecordIDs) == 0 {
|
||||
cosy.ErrHandler(c, dnsService.ErrDDNSTargetRequired)
|
||||
return
|
||||
}
|
||||
|
||||
svc := dnsService.NewService()
|
||||
cfg, err := svc.UpdateDDNSConfig(c.Request.Context(), domainID, dnsService.DDNSUpdateInput{
|
||||
Enabled: payload.Enabled,
|
||||
IntervalSeconds: payload.IntervalSeconds,
|
||||
RecordIDs: payload.RecordIDs,
|
||||
})
|
||||
if err != nil {
|
||||
cosy.ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
if cfg.Enabled {
|
||||
if err := cron.AddOrUpdateDDNSJob(domainID, cfg.IntervalSeconds); err != nil {
|
||||
cosy.ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
if err := cron.RemoveDDNSJob(domainID); err != nil {
|
||||
cosy.ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, toDDNSResponse(cfg))
|
||||
}
|
||||
|
||||
func buildPagination(page, perPage int, total int64) model.Pagination {
|
||||
page = lo.If(page < 1, 1).Else(page)
|
||||
perPage = lo.If(perPage <= 0, 50).Else(perPage)
|
||||
|
||||
totalPages := total / cast.ToInt64(perPage)
|
||||
if total%cast.ToInt64(perPage) != 0 {
|
||||
totalPages++
|
||||
}
|
||||
|
||||
return model.Pagination{
|
||||
Total: total,
|
||||
PerPage: perPage,
|
||||
CurrentPage: page,
|
||||
TotalPages: totalPages,
|
||||
}
|
||||
}
|
||||
|
||||
func domainMutationHook(svc *dnsService.Service, isUpdate bool) func(ctx *cosy.Ctx[model.DnsDomain]) {
|
||||
return func(ctx *cosy.Ctx[model.DnsDomain]) {
|
||||
normalized, err := dnsService.NormalizeDomain(ctx.Model.Domain)
|
||||
if err != nil {
|
||||
ctx.AbortWithError(err)
|
||||
return
|
||||
}
|
||||
|
||||
credential, err := dnsService.LoadCredential(ctx.Request.Context(), ctx.Model.DnsCredentialID)
|
||||
if err != nil {
|
||||
ctx.AbortWithError(err)
|
||||
return
|
||||
}
|
||||
|
||||
excludeID := uint64(0)
|
||||
if isUpdate {
|
||||
if ctx.ID == 0 {
|
||||
ctx.ID = ctx.GetParamID()
|
||||
}
|
||||
excludeID = ctx.ID
|
||||
}
|
||||
|
||||
if err := dnsService.EnsureDomainUnique(ctx.Request.Context(), normalized, credential.ID, excludeID); err != nil {
|
||||
ctx.AbortWithError(err)
|
||||
return
|
||||
}
|
||||
|
||||
ctx.Model.Domain = normalized
|
||||
ctx.Model.Description = strings.TrimSpace(ctx.Model.Description)
|
||||
ctx.Model.DnsCredentialID = credential.ID
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package dns
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
_ "github.com/0xJacky/Nginx-UI/internal/dns/providers/alidns"
|
||||
_ "github.com/0xJacky/Nginx-UI/internal/dns/providers/cloudflare"
|
||||
_ "github.com/0xJacky/Nginx-UI/internal/dns/providers/tencentcloud"
|
||||
)
|
||||
|
||||
func InitRouter(r *gin.RouterGroup) {
|
||||
group := r.Group("/dns")
|
||||
{
|
||||
group.GET("/domains", ListDomains)
|
||||
group.GET("/domains/:id", GetDomain)
|
||||
group.POST("/domains", CreateDomain)
|
||||
group.POST("/domains/:id", UpdateDomain)
|
||||
group.DELETE("/domains/:id", DeleteDomain)
|
||||
|
||||
group.GET("/domains/:id/records", ListRecords)
|
||||
group.POST("/domains/:id/records", CreateRecord)
|
||||
group.PUT("/domains/:id/records/:record_id", UpdateRecord)
|
||||
group.DELETE("/domains/:id/records/:record_id", DeleteRecord)
|
||||
|
||||
group.GET("/domains/:id/ddns", GetDDNSConfig)
|
||||
group.PUT("/domains/:id/ddns", UpdateDDNSConfig)
|
||||
|
||||
group.GET("/ddns", ListDDNSConfig)
|
||||
}
|
||||
}
|
||||
Vendored
+8
@@ -28,6 +28,8 @@ declare module 'vue' {
|
||||
ACollapsePanel: typeof import('ant-design-vue/es')['CollapsePanel']
|
||||
AComment: typeof import('ant-design-vue/es')['Comment']
|
||||
AConfigProvider: typeof import('ant-design-vue/es')['ConfigProvider']
|
||||
ADescriptions: typeof import('ant-design-vue/es')['Descriptions']
|
||||
ADescriptionsItem: typeof import('ant-design-vue/es')['DescriptionsItem']
|
||||
ADivider: typeof import('ant-design-vue/es')['Divider']
|
||||
ADrawer: typeof import('ant-design-vue/es')['Drawer']
|
||||
ADropdown: typeof import('ant-design-vue/es')['Dropdown']
|
||||
@@ -50,6 +52,7 @@ declare module 'vue' {
|
||||
AMenuDivider: typeof import('ant-design-vue/es')['MenuDivider']
|
||||
AMenuItem: typeof import('ant-design-vue/es')['MenuItem']
|
||||
AModal: typeof import('ant-design-vue/es')['Modal']
|
||||
APagination: typeof import('ant-design-vue/es')['Pagination']
|
||||
APopconfirm: typeof import('ant-design-vue/es')['Popconfirm']
|
||||
APopover: typeof import('ant-design-vue/es')['Popover']
|
||||
AppProviderAppProvider: typeof import('./src/components/AppProvider/AppProvider.vue')['default']
|
||||
@@ -64,6 +67,7 @@ declare module 'vue' {
|
||||
ASelect: typeof import('ant-design-vue/es')['Select']
|
||||
ASelectOptGroup: typeof import('ant-design-vue/es')['SelectOptGroup']
|
||||
ASelectOption: typeof import('ant-design-vue/es')['SelectOption']
|
||||
ASkeleton: typeof import('ant-design-vue/es')['Skeleton']
|
||||
ASpace: typeof import('ant-design-vue/es')['Space']
|
||||
ASpin: typeof import('ant-design-vue/es')['Spin']
|
||||
AStatistic: typeof import('ant-design-vue/es')['Statistic']
|
||||
@@ -164,6 +168,8 @@ declare global {
|
||||
const ACollapsePanel: typeof import('ant-design-vue/es')['CollapsePanel']
|
||||
const AComment: typeof import('ant-design-vue/es')['Comment']
|
||||
const AConfigProvider: typeof import('ant-design-vue/es')['ConfigProvider']
|
||||
const ADescriptions: typeof import('ant-design-vue/es')['Descriptions']
|
||||
const ADescriptionsItem: typeof import('ant-design-vue/es')['DescriptionsItem']
|
||||
const ADivider: typeof import('ant-design-vue/es')['Divider']
|
||||
const ADrawer: typeof import('ant-design-vue/es')['Drawer']
|
||||
const ADropdown: typeof import('ant-design-vue/es')['Dropdown']
|
||||
@@ -186,6 +192,7 @@ declare global {
|
||||
const AMenuDivider: typeof import('ant-design-vue/es')['MenuDivider']
|
||||
const AMenuItem: typeof import('ant-design-vue/es')['MenuItem']
|
||||
const AModal: typeof import('ant-design-vue/es')['Modal']
|
||||
const APagination: typeof import('ant-design-vue/es')['Pagination']
|
||||
const APopconfirm: typeof import('ant-design-vue/es')['Popconfirm']
|
||||
const APopover: typeof import('ant-design-vue/es')['Popover']
|
||||
const AppProviderAppProvider: typeof import('./src/components/AppProvider/AppProvider.vue')['default']
|
||||
@@ -200,6 +207,7 @@ declare global {
|
||||
const ASelect: typeof import('ant-design-vue/es')['Select']
|
||||
const ASelectOptGroup: typeof import('ant-design-vue/es')['SelectOptGroup']
|
||||
const ASelectOption: typeof import('ant-design-vue/es')['SelectOption']
|
||||
const ASkeleton: typeof import('ant-design-vue/es')['Skeleton']
|
||||
const ASpace: typeof import('ant-design-vue/es')['Space']
|
||||
const ASpin: typeof import('ant-design-vue/es')['Spin']
|
||||
const AStatistic: typeof import('ant-design-vue/es')['Statistic']
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
import type { ModelBase, Pagination } from '@/api/curd'
|
||||
import type { DnsCredential } from '@/api/dns_credential'
|
||||
import { http, useCurdApi } from '@uozi-admin/request'
|
||||
|
||||
export interface DNSDomain extends ModelBase {
|
||||
domain: string
|
||||
description?: string
|
||||
dns_credential_id: number
|
||||
dns_credential?: {
|
||||
id: number
|
||||
name: string
|
||||
provider: string
|
||||
}
|
||||
}
|
||||
|
||||
export interface DNSRecord {
|
||||
id: string
|
||||
type: string
|
||||
name: string
|
||||
content: string
|
||||
ttl: number
|
||||
priority?: number
|
||||
weight?: number
|
||||
proxied?: boolean
|
||||
}
|
||||
|
||||
export interface DDNSRecordTarget {
|
||||
id: string
|
||||
name: string
|
||||
type: string
|
||||
}
|
||||
|
||||
export interface DDNSConfig {
|
||||
enabled: boolean
|
||||
interval_seconds: number
|
||||
targets: DDNSRecordTarget[]
|
||||
last_ipv4?: string
|
||||
last_ipv6?: string
|
||||
last_run_at?: string
|
||||
last_error?: string
|
||||
}
|
||||
|
||||
export interface DDNSDomainItem {
|
||||
id: number
|
||||
domain: string
|
||||
credential_name?: string
|
||||
credential_provider?: string
|
||||
config: DDNSConfig
|
||||
}
|
||||
|
||||
export interface UpdateDDNSPayload {
|
||||
enabled: boolean
|
||||
interval_seconds: number
|
||||
record_ids: string[]
|
||||
}
|
||||
|
||||
export interface DomainListParams {
|
||||
keyword?: string
|
||||
credential_id?: number
|
||||
page?: number
|
||||
per_page?: number
|
||||
}
|
||||
|
||||
export interface RecordListParams {
|
||||
type?: string
|
||||
name?: string
|
||||
page?: number
|
||||
per_page?: number
|
||||
}
|
||||
|
||||
export interface RecordPayload {
|
||||
type: string
|
||||
name: string
|
||||
content: string
|
||||
ttl: number
|
||||
priority?: number
|
||||
weight?: number
|
||||
proxied?: boolean
|
||||
}
|
||||
|
||||
const baseDomainUrl = '/dns/domains'
|
||||
|
||||
const domainApi = useCurdApi<DNSDomain>(baseDomainUrl)
|
||||
|
||||
export const dnsApi = {
|
||||
...domainApi,
|
||||
listRecords(domainId: number, params?: RecordListParams) {
|
||||
return http.get<{ data: DNSRecord[], pagination: Pagination }>(`${baseDomainUrl}/${domainId}/records`, { params })
|
||||
},
|
||||
createRecord(domainId: number, payload: RecordPayload) {
|
||||
return http.post<DNSRecord>(`${baseDomainUrl}/${domainId}/records`, payload)
|
||||
},
|
||||
updateRecord(domainId: number, recordId: string, payload: RecordPayload) {
|
||||
return http.put<DNSRecord>(`${baseDomainUrl}/${domainId}/records/${recordId}`, payload)
|
||||
},
|
||||
deleteRecord(domainId: number, recordId: string) {
|
||||
return http.delete(`${baseDomainUrl}/${domainId}/records/${recordId}`)
|
||||
},
|
||||
getDDNSConfig(domainId: number) {
|
||||
return http.get<DDNSConfig>(`${baseDomainUrl}/${domainId}/ddns`)
|
||||
},
|
||||
updateDDNSConfig(domainId: number, payload: UpdateDDNSPayload) {
|
||||
return http.put<DDNSConfig>(`${baseDomainUrl}/${domainId}/ddns`, payload)
|
||||
},
|
||||
listDDNS() {
|
||||
return http.get<{ data: DDNSDomainItem[] }>(`/dns/ddns`)
|
||||
},
|
||||
}
|
||||
|
||||
export type { DnsCredential }
|
||||
@@ -5,6 +5,7 @@ import type { Ref } from 'vue'
|
||||
import type { AutoCertOptions, DNSProvider } from '@/api/auto_cert'
|
||||
import auto_cert from '@/api/auto_cert'
|
||||
import dns_credential from '@/api/dns_credential'
|
||||
import { filterAllowedDnsProviders } from '@/constants/dns_providers'
|
||||
|
||||
const providers = ref([]) as Ref<DNSProvider[]>
|
||||
const credentials = ref<SelectProps['options']>([])
|
||||
@@ -20,8 +21,9 @@ const code = computed(() => {
|
||||
return data.value.code
|
||||
})
|
||||
|
||||
const providerIdx = ref<number>()
|
||||
const providerIdx = ref<number | undefined>(undefined)
|
||||
function init() {
|
||||
providerIdx.value = undefined
|
||||
providers.value?.forEach((v: DNSProvider, k: number) => {
|
||||
if (v.code === code.value)
|
||||
providerIdx.value = k
|
||||
@@ -29,7 +31,12 @@ function init() {
|
||||
}
|
||||
|
||||
const current = computed(() => {
|
||||
return providers.value?.[providerIdx.value || -1]
|
||||
const idx = providerIdx.value
|
||||
if (idx === undefined || idx === null)
|
||||
return undefined
|
||||
if (idx < 0 || idx >= providers.value.length)
|
||||
return undefined
|
||||
return providers.value?.[idx]
|
||||
})
|
||||
|
||||
const mounted = ref(false)
|
||||
@@ -37,9 +44,19 @@ const mounted = ref(false)
|
||||
watch(code, init)
|
||||
|
||||
watch(current, () => {
|
||||
if (!current.value) {
|
||||
credentials.value = []
|
||||
if (mounted.value) {
|
||||
data.value.code = undefined
|
||||
data.value.provider = undefined
|
||||
data.value.dns_credential_id = undefined
|
||||
}
|
||||
return
|
||||
}
|
||||
credentials.value = []
|
||||
data.value.code = current.value.code
|
||||
data.value.provider = current.value.name
|
||||
// Keep provider consistent with credential records (prefer provider/code over display name).
|
||||
data.value.provider = current.value.provider || current.value.code || current.value.name
|
||||
if (mounted.value)
|
||||
data.value.dns_credential_id = undefined
|
||||
|
||||
@@ -55,16 +72,26 @@ watch(current, () => {
|
||||
|
||||
onMounted(async () => {
|
||||
await auto_cert.get_dns_providers().then(r => {
|
||||
providers.value = r
|
||||
providers.value = filterAllowedDnsProviders(r)
|
||||
}).then(() => {
|
||||
init()
|
||||
})
|
||||
|
||||
if (data.value.dns_credential_id) {
|
||||
await dns_credential.getItem(data.value.dns_credential_id).then(r => {
|
||||
const idx = providers.value.findIndex(v => v.code === r.code)
|
||||
if (idx > -1) {
|
||||
data.value.code = r.code
|
||||
data.value.provider = r.provider
|
||||
providerIdx.value = providers.value.findIndex(v => v.code === r.code)
|
||||
providerIdx.value = idx
|
||||
}
|
||||
else {
|
||||
// provider not supported anymore; clear existing selection to keep form consistent
|
||||
data.value.code = undefined
|
||||
data.value.provider = undefined
|
||||
data.value.dns_credential_id = undefined
|
||||
providerIdx.value = undefined
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -101,12 +128,12 @@ function filterOption(input: string, option?: DefaultOptionType) {
|
||||
/>
|
||||
</AFormItem>
|
||||
<AFormItem
|
||||
v-if="(providerIdx ?? -1) > -1"
|
||||
v-if="(providerIdx !== undefined && providerIdx !== null && providerIdx > -1)"
|
||||
:label="$gettext('Credential')"
|
||||
:rules="[{ required: true }]"
|
||||
>
|
||||
<ASelect
|
||||
v-model:value="data.dns_credential_id as any"
|
||||
v-model:value="(data.dns_credential_id as any)"
|
||||
:options="credentials"
|
||||
/>
|
||||
</AFormItem>
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
import type { DNSProvider } from '@/api/auto_cert'
|
||||
|
||||
export const ALLOWED_DNS_PROVIDER_CODES = ['alidns', 'tencentcloud', 'cloudflare'] as const
|
||||
|
||||
type DNSProviderIdentifier = Pick<DNSProvider, 'code' | 'provider' | 'name'> | null
|
||||
|
||||
const allowedProviderSet = new Set<string>(ALLOWED_DNS_PROVIDER_CODES)
|
||||
|
||||
export function normalizeProviderCode(value?: string | null) {
|
||||
return (value ?? '').trim().toLowerCase()
|
||||
}
|
||||
|
||||
export function resolveProviderCode(provider?: DNSProviderIdentifier) {
|
||||
if (!provider)
|
||||
return ''
|
||||
return normalizeProviderCode(provider.code ?? provider.provider ?? provider.name)
|
||||
}
|
||||
|
||||
export function isAllowedDnsProvider(provider?: DNSProviderIdentifier) {
|
||||
const code = resolveProviderCode(provider)
|
||||
return Boolean(code) && allowedProviderSet.has(code)
|
||||
}
|
||||
|
||||
export function isAllowedDnsProviderCode(value?: string | null) {
|
||||
const normalized = normalizeProviderCode(value)
|
||||
return Boolean(normalized) && allowedProviderSet.has(normalized)
|
||||
}
|
||||
|
||||
export function filterAllowedDnsProviders<T extends Pick<DNSProvider, 'code' | 'provider' | 'name'>>(list: T[]) {
|
||||
return list.filter(item => isAllowedDnsProvider(item))
|
||||
}
|
||||
+216
-47
@@ -187,8 +187,10 @@ msgstr "إجراء"
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:273
|
||||
#: 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:97
|
||||
#: src/views/config/configColumns.tsx:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:41
|
||||
#: src/views/dns/DDNSManager.vue:91 src/views/dns/DNSCredential.vue:71
|
||||
#: src/views/dns/DNSDomainList.vue:211 src/views/namespace/columns.ts:97
|
||||
#: src/views/nginx_log/NginxLogList.vue:338 src/views/node/nodeColumns.tsx:96
|
||||
#: src/views/notification/notificationColumns.tsx:72
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:85
|
||||
@@ -242,6 +244,10 @@ msgstr "إضافة رأس"
|
||||
msgid "Add Location"
|
||||
msgstr "أضف مكان"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:171
|
||||
msgid "Add Record"
|
||||
msgstr "إضافة سجل"
|
||||
|
||||
#: src/components/NgxConfigEditor/NgxServer.vue:92
|
||||
msgid "Add Server"
|
||||
msgstr "إضافة خادم"
|
||||
@@ -262,7 +268,7 @@ msgstr "إضافة upstream"
|
||||
msgid "Added successfully"
|
||||
msgstr "تمت الإضافة بنجاح"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:97
|
||||
#: src/views/dns/components/DNSChallenge.vue:98
|
||||
msgid "Additional"
|
||||
msgstr "إضافي"
|
||||
|
||||
@@ -299,6 +305,10 @@ msgstr "الإعدادات المتقدمة"
|
||||
msgid "Afterwards, refresh this page and click add passkey again."
|
||||
msgstr "بعد ذلك، قم بتحديث هذه الصفحة وانقر على إضافة مفتاح مرور مرة أخرى."
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:55
|
||||
msgid "All"
|
||||
msgstr "الكل"
|
||||
|
||||
#: src/views/system/Licenses.vue:152
|
||||
msgid "All Components"
|
||||
msgstr "جميع المكونات"
|
||||
@@ -340,7 +350,7 @@ msgstr "يمكن استخدام أي عنوان IP قابل للوصول مع س
|
||||
msgid "API Base Url"
|
||||
msgstr "عنوان URL الأساسي لAPI"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:70
|
||||
#: src/views/dns/components/DNSChallenge.vue:71
|
||||
msgid "API Document"
|
||||
msgstr "ملف API"
|
||||
|
||||
@@ -376,6 +386,10 @@ msgstr "هل أنت متأكد من حذف عنوان IP المحظور هذا
|
||||
msgid "Are you sure to delete this passkey immediately?"
|
||||
msgstr "هل أنت متأكد من حذف مفتاح المرور هذا على الفور؟"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:90
|
||||
msgid "Are you sure to delete this record?"
|
||||
msgstr "هل أنت متأكد من حذف هذا السجل؟"
|
||||
|
||||
#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155
|
||||
msgid "Are you sure to generate new recovery codes?"
|
||||
msgstr "هل أنت متأكد من رغبتك في إنشاء رموز استرداد جديدة؟"
|
||||
@@ -545,7 +559,7 @@ msgstr "متوسط/زيارة الصفحة"
|
||||
#: src/views/certificate/components/CertificateActions.vue:22
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:274
|
||||
#: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217
|
||||
#: src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/dns/DNSRecordManager.vue:223 src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183
|
||||
#: src/views/stream/components/StreamEditor.vue:147
|
||||
msgid "Back"
|
||||
@@ -693,6 +707,10 @@ msgstr "المتصفح"
|
||||
msgid "Browser Statistics"
|
||||
msgstr "إحصائيات المتصفح"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:257
|
||||
msgid "Business contact:"
|
||||
msgstr "اتصال تجاري:"
|
||||
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:316
|
||||
msgid ""
|
||||
"By enabling advanced indexing, you acknowledge that your system meets the "
|
||||
@@ -762,6 +780,7 @@ msgstr ""
|
||||
#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37
|
||||
#: src/views/config/components/Delete.vue:98
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:710
|
||||
#: src/views/dns/DDNSManager.vue:244 src/views/dns/DNSRecordManager.vue:212
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:102
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:33
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:59
|
||||
@@ -912,7 +931,7 @@ msgstr "نوع الشهادة"
|
||||
msgid "Certificates"
|
||||
msgstr "شهادات"
|
||||
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
msgid "Certificates List"
|
||||
msgstr "قائمة الشهادات"
|
||||
|
||||
@@ -1293,7 +1312,7 @@ msgstr "مسار التكوين فارغ"
|
||||
msgid "Config Template"
|
||||
msgstr "قالب التكوين"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:52
|
||||
#: src/views/dns/DNSCredential.vue:52
|
||||
msgid "Configuration"
|
||||
msgstr "التكوين"
|
||||
|
||||
@@ -1321,6 +1340,14 @@ msgstr "اسم التكوين"
|
||||
msgid "Configurations"
|
||||
msgstr "التكوينات"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:201
|
||||
msgid "Configure"
|
||||
msgstr "تكوين"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:211
|
||||
msgid "Configure DDNS"
|
||||
msgstr "تكوين DDNS"
|
||||
|
||||
#: src/views/site/site_add/SiteAdd.vue:81
|
||||
msgid "Configure SSL"
|
||||
msgstr "تكوين SSL"
|
||||
@@ -1442,6 +1469,10 @@ msgstr "إنشاء ملف"
|
||||
msgid "Create Folder"
|
||||
msgstr "إنشاء مجلد"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Create Record"
|
||||
msgstr "إنشاء سجل"
|
||||
|
||||
#: src/views/backup/components/BackupCreator.vue:75
|
||||
msgid ""
|
||||
"Create system backups including Nginx configuration and Nginx UI settings. "
|
||||
@@ -1467,11 +1498,12 @@ msgstr "تم الإنشاء بنجاح"
|
||||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr "يؤدي إنشاء العميل إلى تسهيل الاتصال بخادم CA"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:105
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:131
|
||||
#: src/views/dns/DDNSManager.vue:65 src/views/dns/DNSDomainList.vue:109
|
||||
msgid "Credential"
|
||||
msgstr "بيان الاعتماد"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:86
|
||||
#: src/routes/modules/dns.ts:20 src/views/dns/components/DNSChallenge.vue:87
|
||||
msgid "Credentials"
|
||||
msgstr "بيانات الاعتماد"
|
||||
|
||||
@@ -1586,6 +1618,18 @@ msgstr "أيام"
|
||||
msgid "Db file not found"
|
||||
msgstr "ملف قاعدة البيانات غير موجود"
|
||||
|
||||
#: src/routes/modules/dns.ts:36
|
||||
msgid "DDNS"
|
||||
msgstr "DDNS"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:153
|
||||
msgid "DDNS Overview"
|
||||
msgstr "نظرة عامة على DDNS"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:135
|
||||
msgid "DDNS saved"
|
||||
msgstr "تم حفظ DDNS"
|
||||
|
||||
#: src/constants/errors/geolite.ts:12
|
||||
msgid "Decompression succeeded but failed to delete compressed file: {0}"
|
||||
msgstr "تم التفكيك بنجاح لكن فشل حذف الملف المضغوط: {0}"
|
||||
@@ -1610,6 +1654,7 @@ msgstr "حدد اسم منطقة الذاكرة المشتركة والحجم،
|
||||
#: src/views/config/components/Delete.vue:65
|
||||
#: src/views/config/components/Delete.vue:97
|
||||
#: src/views/config/ConfigList.vue:199
|
||||
#: src/views/dns/components/DNSRecordTable.vue:94
|
||||
#: src/views/site/site_list/SiteList.vue:100
|
||||
#: src/views/stream/StreamList.vue:110
|
||||
msgid "Delete"
|
||||
@@ -1851,7 +1896,8 @@ msgid "Disable stream %{name} from %{node} successfully"
|
||||
msgstr "تم تعطيل الدفق %{name} من %{node} بنجاح"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:175
|
||||
#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:60
|
||||
#: src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/NodeSettings.vue:25
|
||||
#: src/views/preference/tabs/NodeSettings.vue:30
|
||||
@@ -1876,16 +1922,35 @@ msgstr "غير متصل"
|
||||
msgid "Disk IO"
|
||||
msgstr "إدخال/إخراج القرص"
|
||||
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
#: src/views/certificate/DNSCredential.vue:79
|
||||
#: src/routes/modules/dns.ts:11
|
||||
msgid "DNS"
|
||||
msgstr "DNS"
|
||||
|
||||
#: src/views/dns/DNSCredential.vue:79
|
||||
msgid "DNS Credentials"
|
||||
msgstr "بيانات اعتماد DNS"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:95
|
||||
#: src/views/certificate/components/DNSChallenge.vue:59
|
||||
#: src/routes/modules/dns.ts:28 src/views/dns/DNSDomainList.vue:228
|
||||
msgid "DNS Domains"
|
||||
msgstr "نطاقات DNS"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "DNS Only"
|
||||
msgstr "DNS فقط"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:121
|
||||
#: src/views/dns/components/DNSChallenge.vue:60
|
||||
msgid "DNS Provider"
|
||||
msgstr "مزود DNS"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:244
|
||||
msgid "DNS Provider Support"
|
||||
msgstr "دعم موفر DNS"
|
||||
|
||||
#: src/routes/modules/dns.ts:44 src/views/dns/DNSRecordManager.vue:58
|
||||
msgid "DNS Records"
|
||||
msgstr "سجلات DNS"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:678
|
||||
msgid "DNS Resolver"
|
||||
msgstr "حل DNS"
|
||||
@@ -1951,6 +2016,7 @@ msgid "Document Count"
|
||||
msgstr "عدد المستندات"
|
||||
|
||||
#: src/views/certificate/components/DNSIssueCertificate.vue:119
|
||||
#: src/views/dns/DDNSManager.vue:60 src/views/dns/DNSDomainList.vue:98
|
||||
msgid "Domain"
|
||||
msgstr "نطاق"
|
||||
|
||||
@@ -2038,7 +2104,7 @@ msgstr "مفتاح HMAC EAB"
|
||||
msgid "EAB Key ID"
|
||||
msgstr "معرف مفتاح EAB"
|
||||
|
||||
#: src/language/curd.ts:8
|
||||
#: src/language/curd.ts:8 src/views/dns/components/DNSRecordTable.vue:87
|
||||
msgid "Edit"
|
||||
msgstr "تعديل"
|
||||
|
||||
@@ -2052,6 +2118,10 @@ msgstr "تعديل %{n}"
|
||||
msgid "Edit Configuration"
|
||||
msgstr "تعديل التكوين"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Edit Record"
|
||||
msgstr "تعديل السجل"
|
||||
|
||||
#: src/routes/modules/sites.ts:34
|
||||
msgid "Edit Site"
|
||||
msgstr "تعديل الموقع"
|
||||
@@ -2102,6 +2172,10 @@ msgstr "تمكين إكمال التعليمات البرمجية"
|
||||
msgid "Enable compression for content transfer"
|
||||
msgstr "تمكين الضغط لنقل المحتوى"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:218
|
||||
msgid "Enable DDNS"
|
||||
msgstr "تمكين DDNS"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:473
|
||||
msgid "Enable Health Check"
|
||||
msgstr "تمكين فحص الصحة"
|
||||
@@ -2189,7 +2263,8 @@ msgid "Enable TOTP"
|
||||
msgstr "تفعيل TOTP"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:174
|
||||
#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:69
|
||||
#: src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:47
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:20
|
||||
@@ -3149,14 +3224,19 @@ msgstr "القيمة الأعلى تعني إعادة استخدام أفضل ل
|
||||
msgid "History"
|
||||
msgstr "السجل"
|
||||
|
||||
#: src/routes/index.ts:52
|
||||
#: src/routes/index.ts:54
|
||||
msgid "Home"
|
||||
msgstr "الصفحة الرئيسية"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:42
|
||||
#: src/views/preference/tabs/ServerSettings.vue:19
|
||||
msgid "Host"
|
||||
msgstr "المضيف"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:45
|
||||
msgid "Host, e.g. @ or www"
|
||||
msgstr "المضيف، مثل @ أو www"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:159
|
||||
#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87
|
||||
msgid "Hour"
|
||||
@@ -3228,7 +3308,7 @@ msgstr ""
|
||||
msgid "Import"
|
||||
msgstr "استيراد"
|
||||
|
||||
#: src/routes/modules/certificates.ts:54
|
||||
#: src/routes/modules/certificates.ts:46
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Import Certificate"
|
||||
msgstr "استيراد شهادة"
|
||||
@@ -3351,10 +3431,15 @@ msgstr ""
|
||||
"لا يُسمح بالتثبيت بعد 10 دقائق من بدء تشغيل النظام، يرجى إعادة تشغيل واجهة "
|
||||
"Nginx."
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:79
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:26
|
||||
msgid "Interval"
|
||||
msgstr "فترة"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:232
|
||||
msgid "Interval (seconds)"
|
||||
msgstr "الفاصل الزمني (بالثواني)"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:166
|
||||
msgid "Invalid"
|
||||
msgstr "غير صالح"
|
||||
@@ -3583,6 +3668,10 @@ msgstr "آخر فهرسة"
|
||||
msgid "Last month"
|
||||
msgstr "الشهر الماضي"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:87
|
||||
msgid "Last run"
|
||||
msgstr "آخر تشغيل"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:138
|
||||
msgid "Last update"
|
||||
msgstr "آخر تحديث"
|
||||
@@ -3849,6 +3938,10 @@ msgstr ""
|
||||
msgid "Manage Configs"
|
||||
msgstr "إدارة التكوينات"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:236
|
||||
msgid "Manage Records"
|
||||
msgstr "إدارة السجلات"
|
||||
|
||||
#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45
|
||||
msgid "Manage Sites"
|
||||
msgstr "إدارة المواقع"
|
||||
@@ -4019,7 +4112,7 @@ msgstr "تم التعديل في"
|
||||
msgid "Modify"
|
||||
msgstr "تعديل"
|
||||
|
||||
#: src/routes/modules/certificates.ts:44
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Modify Certificate"
|
||||
msgstr "تعديل الشهادة"
|
||||
@@ -4080,11 +4173,13 @@ msgstr "غير متاح"
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:44
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:58
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:70
|
||||
#: src/views/certificate/DNSCredential.vue:17
|
||||
#: src/views/config/components/ConfigRightPanel/Basic.vue:34
|
||||
#: src/views/config/components/Delete.vue:123
|
||||
#: src/views/config/components/Mkdir.vue:64
|
||||
#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/config/configColumns.tsx:17
|
||||
#: src/views/dns/components/DNSRecordForm.vue:63
|
||||
#: src/views/dns/components/DNSRecordTable.vue:17
|
||||
#: src/views/dns/DNSCredential.vue:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/nginx_log/NginxLogList.vue:155 src/views/node/nodeColumns.tsx:8
|
||||
#: src/views/preference/components/AuthSettings/AddPasskey.vue:81
|
||||
#: src/views/site/site_edit/components/RightPanel/Basic.vue:36
|
||||
@@ -4112,6 +4207,14 @@ msgstr "مساحة الاسم"
|
||||
msgid "Namespaces"
|
||||
msgstr "مساحات الأسماء"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:251
|
||||
msgid ""
|
||||
"Need more DNS providers? Support us through donations or contact us for "
|
||||
"commercial collaboration"
|
||||
msgstr ""
|
||||
"هل تحتاج إلى المزيد من موفري DNS؟ ادعمنا من خلال التبرعات أو اتصل بنا "
|
||||
"للتعاون التجاري"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:195
|
||||
msgid "Need to enable the stub_status module"
|
||||
msgstr "يجب تمكين وحدة stub_status"
|
||||
@@ -4504,6 +4607,10 @@ msgstr "غير مفهرس"
|
||||
msgid "Not Loaded"
|
||||
msgstr "غير محمل"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:102
|
||||
msgid "Not run yet"
|
||||
msgstr "لم يتم تشغيله بعد"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:230
|
||||
msgid "Not supported for IP certificates"
|
||||
msgstr "غير مدعوم لشهادات IP"
|
||||
@@ -4513,7 +4620,7 @@ msgid "Not Valid Before: %{date}"
|
||||
msgstr "غير صالح قبل: %{date}"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:150
|
||||
#: src/views/certificate/DNSCredential.vue:89
|
||||
#: src/views/dns/DNSCredential.vue:89
|
||||
msgid "Note"
|
||||
msgstr "ملاحظة"
|
||||
|
||||
@@ -4642,10 +4749,6 @@ msgstr "حسنًا"
|
||||
msgid "On"
|
||||
msgstr "تشغيل"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:99
|
||||
msgid "Once the verification is complete, the records will be removed."
|
||||
msgstr "بمجرد اكتمال التحقق، سيتم إزالة السجلات."
|
||||
|
||||
#: src/components/NamespaceTabs/NamespaceTabs.vue:164
|
||||
#: src/components/NodeCard/NodeCard.vue:51
|
||||
#: src/components/NodeSelector/NodeSelector.vue:65
|
||||
@@ -4935,7 +5038,7 @@ msgstr "يرجى ملء جميع الحقول بشكل صحيح"
|
||||
msgid "Please fill in required S3 configuration fields"
|
||||
msgstr "يرجى ملء حقول تكوين S3 المطلوبة"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:93
|
||||
#: src/views/dns/DNSCredential.vue:93
|
||||
msgid ""
|
||||
"Please fill in the API authentication credentials provided by your DNS "
|
||||
"provider."
|
||||
@@ -4994,7 +5097,7 @@ msgstr "يرجى إدخال اسم المستخدم الخاص بك!"
|
||||
msgid "Please log in."
|
||||
msgstr "الرجاء تسجيل الدخول."
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:102
|
||||
#: src/views/dns/DNSCredential.vue:96
|
||||
msgid "Please note that the unit of time configurations below are all in seconds."
|
||||
msgstr "يرجى ملاحظة أن تكوين وحدات الوقت أدناه كلها بالثواني."
|
||||
|
||||
@@ -5074,6 +5177,11 @@ msgstr "تفضيل"
|
||||
msgid "Preparing lego configurations"
|
||||
msgstr "تحضير تكوينات Lego"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:81
|
||||
#: src/views/dns/components/DNSRecordTable.vue:33
|
||||
msgid "Priority"
|
||||
msgstr "الأولوية"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:206
|
||||
msgid "Private CA:"
|
||||
msgstr "CA الخاصة:"
|
||||
@@ -5136,7 +5244,8 @@ msgstr ""
|
||||
"إعدادات البروتوكول تتأثر فقط عند الاتصال المباشر. إذا كنت تستخدم خادم وكيل "
|
||||
"عكسي، يرجى تكوين البروتوكول بشكل منفصل في خادم الوكيل العكسي."
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:26
|
||||
#: src/views/dns/DDNSManager.vue:70 src/views/dns/DNSCredential.vue:26
|
||||
#: src/views/dns/DNSDomainList.vue:177 src/views/dns/DNSDomainList.vue:198
|
||||
msgid "Provider"
|
||||
msgstr "مزود"
|
||||
|
||||
@@ -5148,6 +5257,12 @@ msgstr "لم يتم العثور على المزود: {0}"
|
||||
msgid "Province / Region"
|
||||
msgstr "المحافظة / المنطقة"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:87
|
||||
#: src/views/dns/components/DNSRecordTable.vue:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "Proxied"
|
||||
msgstr "وكيل"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:63
|
||||
msgid "Proxy"
|
||||
msgstr "وكيل"
|
||||
@@ -5242,6 +5357,22 @@ msgstr "إعادة التحقق"
|
||||
msgid "Recommended:"
|
||||
msgstr "مُوصى به:"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:113
|
||||
msgid "Record created"
|
||||
msgstr "تم إنشاء السجل"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:120
|
||||
msgid "Record deleted"
|
||||
msgstr "تم حذف السجل"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:109
|
||||
msgid "Record updated"
|
||||
msgstr "تم تحديث السجل"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:221
|
||||
msgid "Records"
|
||||
msgstr "السجلات"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:79
|
||||
msgid "Recovery"
|
||||
msgstr "استرداد"
|
||||
@@ -5271,7 +5402,8 @@ msgstr "رسائل إعادة التوجيه (3xx)"
|
||||
msgid "Referer"
|
||||
msgstr "المرجع"
|
||||
|
||||
#: src/language/curd.ts:70
|
||||
#: src/language/curd.ts:70 src/views/dns/DDNSManager.vue:161
|
||||
#: src/views/dns/DNSRecordManager.vue:165
|
||||
msgid "Refresh"
|
||||
msgstr "تحديث"
|
||||
|
||||
@@ -5511,7 +5643,7 @@ msgstr "تم الطلب باستخدام عوامل خاطئة"
|
||||
msgid "Requests Per Connection"
|
||||
msgstr "الطلبات لكل اتصال"
|
||||
|
||||
#: src/language/curd.ts:13
|
||||
#: src/language/curd.ts:13 src/views/dns/components/DNSRecordFilter.vue:65
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:214
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:745
|
||||
msgid "Reset"
|
||||
@@ -5751,6 +5883,7 @@ msgstr "السبت"
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:283
|
||||
#: src/views/config/components/ConfigName.vue:58
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:713
|
||||
#: src/views/dns/DDNSManager.vue:247 src/views/dns/DNSRecordManager.vue:215
|
||||
#: src/views/preference/components/AuthSettings/Passkey.vue:131
|
||||
#: src/views/preference/Preference.vue:124
|
||||
#: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52
|
||||
@@ -5856,12 +5989,13 @@ msgstr "الجدول الزمني"
|
||||
msgid "Schedule Type"
|
||||
msgstr "نوع الجدول"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:77
|
||||
#: src/views/dns/components/DNSChallenge.vue:78
|
||||
msgid "SDK"
|
||||
msgstr "حزمة تطوير البرمجيات SDK"
|
||||
|
||||
#: src/language/constants.ts:62 src/language/curd.ts:12
|
||||
#: src/views/config/configColumns.tsx:5
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:62
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:217
|
||||
#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13
|
||||
msgid "Search"
|
||||
@@ -5920,10 +6054,18 @@ msgstr ""
|
||||
msgid "Select all"
|
||||
msgstr "تحديد الكل"
|
||||
|
||||
#: src/language/constants.ts:68
|
||||
msgid "Select Credential"
|
||||
msgstr "حدد بيانات الاعتماد"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:45
|
||||
msgid "Select or enter a CA directory URL"
|
||||
msgstr "حدد أو أدخل عنوان URL لدليل CA"
|
||||
|
||||
#: src/language/constants.ts:67
|
||||
msgid "Select Provider"
|
||||
msgstr "اختر مزود الخدمة"
|
||||
|
||||
#: src/language/curd.ts:59
|
||||
msgid "Selected {count} files"
|
||||
msgstr "تم تحديد {count} ملفات"
|
||||
@@ -6247,6 +6389,7 @@ msgstr "ثابت"
|
||||
#: src/views/certificate/ACMEUser.vue:75
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:63
|
||||
#: src/views/dashboard/components/ModulesTable.vue:75
|
||||
#: src/views/dns/DDNSManager.vue:75
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:106
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:241
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:521
|
||||
@@ -6477,6 +6620,10 @@ msgstr "استعادة النظام"
|
||||
msgid "System restored successfully."
|
||||
msgstr "تم استعادة النظام بنجاح."
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:83
|
||||
msgid "Targets"
|
||||
msgstr "الأهداف"
|
||||
|
||||
#: src/constants/errors/self_check.ts:3
|
||||
msgid "Task is not fixable"
|
||||
msgstr "المهمة غير قابلة للإصلاح"
|
||||
@@ -7005,6 +7152,14 @@ msgstr "حاول تعديل معايير البحث أو التنقل بين ا
|
||||
msgid "Try adjusting your search criteria or time range."
|
||||
msgstr "حاول تعديل معايير البحث أو النطاق الزمني."
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:29
|
||||
msgid "TTL"
|
||||
msgstr "TTL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:78
|
||||
msgid "TTL (seconds)"
|
||||
msgstr "TTL (ثواني)"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:28
|
||||
msgid "Tuesday"
|
||||
msgstr "الثلاثاء"
|
||||
@@ -7017,6 +7172,9 @@ msgstr "يتطلب المصادقة الثنائية"
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:24
|
||||
#: src/views/config/components/Delete.vue:122
|
||||
#: src/views/dashboard/components/ModulesTable.vue:62
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:49
|
||||
#: src/views/dns/components/DNSRecordForm.vue:57
|
||||
#: src/views/dns/components/DNSRecordTable.vue:21
|
||||
#: src/views/nginx_log/NginxLogList.vue:146
|
||||
#: src/views/notification/notificationColumns.tsx:8
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:19
|
||||
@@ -7027,6 +7185,10 @@ msgstr "نوع"
|
||||
msgid "Type %{delete} to confirm"
|
||||
msgstr "اكتب %{delete} للتأكيد"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:228
|
||||
msgid "Type or select A/AAAA records"
|
||||
msgstr "اكتب أو حدد سجلات A/AAAA"
|
||||
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:142
|
||||
msgid "Type or select browser"
|
||||
msgstr "اكتب أو اختر المتصفح"
|
||||
@@ -7082,9 +7244,9 @@ msgstr "تم التحديث بنجاح"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:236
|
||||
#: 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:91
|
||||
#: src/views/config/configColumns.tsx:44 src/views/dns/DNSCredential.vue:65
|
||||
#: src/views/dns/DNSDomainList.vue:205 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
|
||||
@@ -7157,6 +7319,10 @@ msgstr "مدة التشغيل:"
|
||||
msgid "URL"
|
||||
msgstr "عنوان URL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:64
|
||||
msgid "Use @ for root"
|
||||
msgstr "استخدم @ للجذر"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:121
|
||||
msgid "Use OTP"
|
||||
msgstr "استخدم كلمة المرور لمرة واحدة"
|
||||
@@ -7222,6 +7388,8 @@ msgid "Validate SSL Certificate"
|
||||
msgstr "التحقق من صحة شهادة SSL"
|
||||
|
||||
#: src/views/dashboard/components/PerformanceTablesCard.vue:22
|
||||
#: src/views/dns/components/DNSRecordForm.vue:66
|
||||
#: src/views/dns/components/DNSRecordTable.vue:25
|
||||
msgid "Value"
|
||||
msgstr "القيمة"
|
||||
|
||||
@@ -7316,12 +7484,6 @@ msgstr ""
|
||||
msgid "We do not accept any feature requests"
|
||||
msgstr "نحن لا نقبل أي طلبات ميزات"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:96
|
||||
msgid ""
|
||||
"We will add one or more TXT records to the DNS records of your domain for "
|
||||
"ownership verification."
|
||||
msgstr "سنضيف سجل أو أكثر من سجلات TXT إلى سجلات DNS لنطاقك للتحقق من الملكية."
|
||||
|
||||
#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
|
||||
msgid ""
|
||||
"We will remove the HTTPChallenge configuration from this file and reload "
|
||||
@@ -7358,6 +7520,11 @@ msgstr "أسبوعي"
|
||||
msgid "Weekly on %{day} at %{time}"
|
||||
msgstr "أسبوعيًا يوم %{day} الساعة %{time}"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:84
|
||||
#: src/views/dns/components/DNSRecordTable.vue:37
|
||||
msgid "Weight"
|
||||
msgstr "الوزن"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:119
|
||||
msgid ""
|
||||
"When Enabled, Nginx UI will automatically re-register users upon startup. "
|
||||
@@ -7406,7 +7573,7 @@ msgstr "عمليات العامل"
|
||||
msgid "Workers"
|
||||
msgstr "العمال"
|
||||
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:63
|
||||
#: src/views/workspace/WorkSpace.vue:51
|
||||
msgid "Workspace"
|
||||
msgstr "مساحة العمل"
|
||||
@@ -7508,6 +7675,14 @@ msgstr "مفاتيح المرور الخاصة بك"
|
||||
msgid "Zero-allocation pipeline"
|
||||
msgstr "خط أنابيب بدون تخصيص"
|
||||
|
||||
#~ msgid "Once the verification is complete, the records will be removed."
|
||||
#~ msgstr "بمجرد اكتمال التحقق، سيتم إزالة السجلات."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "We will add one or more TXT records to the DNS records of your domain for "
|
||||
#~ "ownership verification."
|
||||
#~ msgstr "سنضيف سجل أو أكثر من سجلات TXT إلى سجلات DNS لنطاقك للتحقق من الملكية."
|
||||
|
||||
#~ msgid "Settings"
|
||||
#~ msgstr "الإعدادات"
|
||||
|
||||
@@ -7529,9 +7704,6 @@ msgstr "خط أنابيب بدون تخصيص"
|
||||
#~ msgid "Tested in isolated sandbox mode"
|
||||
#~ msgstr "تم الاختبار في وضع الحماية المعزول"
|
||||
|
||||
#~ msgid "All"
|
||||
#~ msgstr "الكل"
|
||||
|
||||
#~ msgid "Based on M2 Pro (12 cores) testing"
|
||||
#~ msgstr "بناءً على اختبار M2 Pro (12 نواة)"
|
||||
|
||||
@@ -7738,9 +7910,6 @@ msgstr "خط أنابيب بدون تخصيص"
|
||||
#~ msgid "Are you sure you want to delete this item permanently?"
|
||||
#~ msgstr "هل أنت متأكد أنك تريد حذف هذا العنصر نهائيًا؟"
|
||||
|
||||
#~ msgid "Are you sure you want to delete this item?"
|
||||
#~ msgstr "هل أنت متأكد أنك تريد حذف هذا العنصر؟"
|
||||
|
||||
#~ msgid "Are you sure you want to recover this item?"
|
||||
#~ msgstr "هل أنت متأكد أنك تريد استرداد هذا العنصر؟"
|
||||
|
||||
|
||||
@@ -63,4 +63,7 @@ export const msg = [
|
||||
|
||||
$gettext('Access Log'),
|
||||
$gettext('Error Log'),
|
||||
|
||||
$gettext('Select Provider'),
|
||||
$gettext('Select Credential'),
|
||||
]
|
||||
|
||||
+218
-49
@@ -187,8 +187,10 @@ msgstr "Aktion"
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:273
|
||||
#: 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:97
|
||||
#: src/views/config/configColumns.tsx:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:41
|
||||
#: src/views/dns/DDNSManager.vue:91 src/views/dns/DNSCredential.vue:71
|
||||
#: src/views/dns/DNSDomainList.vue:211 src/views/namespace/columns.ts:97
|
||||
#: src/views/nginx_log/NginxLogList.vue:338 src/views/node/nodeColumns.tsx:96
|
||||
#: src/views/notification/notificationColumns.tsx:72
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:85
|
||||
@@ -242,6 +244,10 @@ msgstr "Header hinzufügen"
|
||||
msgid "Add Location"
|
||||
msgstr "Ort hinzufügen"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:171
|
||||
msgid "Add Record"
|
||||
msgstr "Datensatz hinzufügen"
|
||||
|
||||
#: src/components/NgxConfigEditor/NgxServer.vue:92
|
||||
msgid "Add Server"
|
||||
msgstr "Server hinzufügen"
|
||||
@@ -262,7 +268,7 @@ msgstr "Upstream hinzufügen"
|
||||
msgid "Added successfully"
|
||||
msgstr "Erfolgreich hinzugefügt"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:97
|
||||
#: src/views/dns/components/DNSChallenge.vue:98
|
||||
msgid "Additional"
|
||||
msgstr "Zusätzlich"
|
||||
|
||||
@@ -305,6 +311,10 @@ msgstr ""
|
||||
"Aktualisieren Sie anschließend diese Seite und klicken Sie erneut auf "
|
||||
"\"Passkey hinzufügen\"."
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:55
|
||||
msgid "All"
|
||||
msgstr "Alle"
|
||||
|
||||
#: src/views/system/Licenses.vue:152
|
||||
msgid "All Components"
|
||||
msgstr "Alle Komponenten"
|
||||
@@ -349,7 +359,7 @@ msgstr ""
|
||||
msgid "API Base Url"
|
||||
msgstr "API-Basis-URL"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:70
|
||||
#: src/views/dns/components/DNSChallenge.vue:71
|
||||
msgid "API Document"
|
||||
msgstr "API-Dokument"
|
||||
|
||||
@@ -385,6 +395,10 @@ msgstr "Sind Sie sicher, dass Sie diese gesperrte IP sofort löschen möchten?"
|
||||
msgid "Are you sure to delete this passkey immediately?"
|
||||
msgstr "Sind Sie sicher, dass Sie diesen Passkey sofort löschen möchten?"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:90
|
||||
msgid "Are you sure to delete this record?"
|
||||
msgstr "Sind Sie sicher, dass Sie diesen Eintrag löschen möchten?"
|
||||
|
||||
#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155
|
||||
msgid "Are you sure to generate new recovery codes?"
|
||||
msgstr "Sind Sie sicher, dass Sie neue Wiederherstellungscodes generieren möchten?"
|
||||
@@ -558,7 +572,7 @@ msgstr "Durchschn./PV"
|
||||
#: src/views/certificate/components/CertificateActions.vue:22
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:274
|
||||
#: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217
|
||||
#: src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/dns/DNSRecordManager.vue:223 src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183
|
||||
#: src/views/stream/components/StreamEditor.vue:147
|
||||
msgid "Back"
|
||||
@@ -716,6 +730,10 @@ msgstr "Browser"
|
||||
msgid "Browser Statistics"
|
||||
msgstr "Browser-Statistiken"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:257
|
||||
msgid "Business contact:"
|
||||
msgstr "Geschäftskontakt:"
|
||||
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:316
|
||||
msgid ""
|
||||
"By enabling advanced indexing, you acknowledge that your system meets the "
|
||||
@@ -788,6 +806,7 @@ msgstr ""
|
||||
#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37
|
||||
#: src/views/config/components/Delete.vue:98
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:710
|
||||
#: src/views/dns/DDNSManager.vue:244 src/views/dns/DNSRecordManager.vue:212
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:102
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:33
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:59
|
||||
@@ -933,7 +952,7 @@ msgstr "Zertifikatstyp"
|
||||
msgid "Certificates"
|
||||
msgstr "Zertifikate"
|
||||
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
msgid "Certificates List"
|
||||
msgstr "Zertifikatsliste"
|
||||
|
||||
@@ -1320,7 +1339,7 @@ msgstr "Konfigurationspfad ist leer"
|
||||
msgid "Config Template"
|
||||
msgstr "Konfigurationsvorlage"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:52
|
||||
#: src/views/dns/DNSCredential.vue:52
|
||||
msgid "Configuration"
|
||||
msgstr "Konfiguration"
|
||||
|
||||
@@ -1350,6 +1369,14 @@ msgstr "Konf"
|
||||
msgid "Configurations"
|
||||
msgstr "Konfigurationen"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:201
|
||||
msgid "Configure"
|
||||
msgstr "Konfigurieren"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:211
|
||||
msgid "Configure DDNS"
|
||||
msgstr "DDNS konfigurieren"
|
||||
|
||||
#: src/views/site/site_add/SiteAdd.vue:81
|
||||
msgid "Configure SSL"
|
||||
msgstr "SSL konfigurieren"
|
||||
@@ -1473,6 +1500,10 @@ msgstr "Datei erstellen"
|
||||
msgid "Create Folder"
|
||||
msgstr "Ordner erstellen"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Create Record"
|
||||
msgstr "Datensatz erstellen"
|
||||
|
||||
#: src/views/backup/components/BackupCreator.vue:75
|
||||
msgid ""
|
||||
"Create system backups including Nginx configuration and Nginx UI settings. "
|
||||
@@ -1499,11 +1530,12 @@ msgstr "Erfolgreich erstellt"
|
||||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr "Er"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:105
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:131
|
||||
#: src/views/dns/DDNSManager.vue:65 src/views/dns/DNSDomainList.vue:109
|
||||
msgid "Credential"
|
||||
msgstr "Zugangsdaten"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:86
|
||||
#: src/routes/modules/dns.ts:20 src/views/dns/components/DNSChallenge.vue:87
|
||||
msgid "Credentials"
|
||||
msgstr "Zugangsdaten"
|
||||
|
||||
@@ -1618,6 +1650,18 @@ msgstr "Tage"
|
||||
msgid "Db file not found"
|
||||
msgstr "Datenbankdatei nicht gefunden"
|
||||
|
||||
#: src/routes/modules/dns.ts:36
|
||||
msgid "DDNS"
|
||||
msgstr "DDNS"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:153
|
||||
msgid "DDNS Overview"
|
||||
msgstr "DDNS-Übersicht"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:135
|
||||
msgid "DDNS saved"
|
||||
msgstr "DDNS gespeichert"
|
||||
|
||||
#: src/constants/errors/geolite.ts:12
|
||||
msgid "Decompression succeeded but failed to delete compressed file: {0}"
|
||||
msgstr ""
|
||||
@@ -1646,6 +1690,7 @@ msgstr ""
|
||||
#: src/views/config/components/Delete.vue:65
|
||||
#: src/views/config/components/Delete.vue:97
|
||||
#: src/views/config/ConfigList.vue:199
|
||||
#: src/views/dns/components/DNSRecordTable.vue:94
|
||||
#: src/views/site/site_list/SiteList.vue:100
|
||||
#: src/views/stream/StreamList.vue:110
|
||||
msgid "Delete"
|
||||
@@ -1887,7 +1932,8 @@ msgid "Disable stream %{name} from %{node} successfully"
|
||||
msgstr "Stream %{name} von %{node} erfolgreich deaktiviert"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:175
|
||||
#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:60
|
||||
#: src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/NodeSettings.vue:25
|
||||
#: src/views/preference/tabs/NodeSettings.vue:30
|
||||
@@ -1912,16 +1958,35 @@ msgstr "Getrennt"
|
||||
msgid "Disk IO"
|
||||
msgstr "Festplatten-IO"
|
||||
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
#: src/views/certificate/DNSCredential.vue:79
|
||||
#: src/routes/modules/dns.ts:11
|
||||
msgid "DNS"
|
||||
msgstr "DNS"
|
||||
|
||||
#: src/views/dns/DNSCredential.vue:79
|
||||
msgid "DNS Credentials"
|
||||
msgstr "DNS-Zugangsdaten"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:95
|
||||
#: src/views/certificate/components/DNSChallenge.vue:59
|
||||
#: src/routes/modules/dns.ts:28 src/views/dns/DNSDomainList.vue:228
|
||||
msgid "DNS Domains"
|
||||
msgstr "DNS-Domänen"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "DNS Only"
|
||||
msgstr "Nur DNS"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:121
|
||||
#: src/views/dns/components/DNSChallenge.vue:60
|
||||
msgid "DNS Provider"
|
||||
msgstr "DNS-Anbieter"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:244
|
||||
msgid "DNS Provider Support"
|
||||
msgstr "DNS-Anbieter-Unterstützung"
|
||||
|
||||
#: src/routes/modules/dns.ts:44 src/views/dns/DNSRecordManager.vue:58
|
||||
msgid "DNS Records"
|
||||
msgstr "DNS-Einträge"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:678
|
||||
msgid "DNS Resolver"
|
||||
msgstr "DNS-Resolver"
|
||||
@@ -1984,6 +2049,7 @@ msgid "Document Count"
|
||||
msgstr "Dokumentenanzahl"
|
||||
|
||||
#: src/views/certificate/components/DNSIssueCertificate.vue:119
|
||||
#: src/views/dns/DDNSManager.vue:60 src/views/dns/DNSDomainList.vue:98
|
||||
msgid "Domain"
|
||||
msgstr "Domain"
|
||||
|
||||
@@ -2074,7 +2140,7 @@ msgstr "EAB HMAC-Schlüssel"
|
||||
msgid "EAB Key ID"
|
||||
msgstr "EAB-Schlüssel-ID"
|
||||
|
||||
#: src/language/curd.ts:8
|
||||
#: src/language/curd.ts:8 src/views/dns/components/DNSRecordTable.vue:87
|
||||
msgid "Edit"
|
||||
msgstr "Bearbeiten"
|
||||
|
||||
@@ -2088,6 +2154,10 @@ msgstr "Bearbeiten %{n}"
|
||||
msgid "Edit Configuration"
|
||||
msgstr "Konfiguration bearbeiten"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Edit Record"
|
||||
msgstr "Datensatz bearbeiten"
|
||||
|
||||
#: src/routes/modules/sites.ts:34
|
||||
msgid "Edit Site"
|
||||
msgstr "Seite bearbeiten"
|
||||
@@ -2138,6 +2208,10 @@ msgstr "Code-Vervollständigung aktivieren"
|
||||
msgid "Enable compression for content transfer"
|
||||
msgstr "Komprimierung für die Inhaltsübertragung aktivieren"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:218
|
||||
msgid "Enable DDNS"
|
||||
msgstr "DDNS aktivieren"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:473
|
||||
msgid "Enable Health Check"
|
||||
msgstr "Health Check aktivieren"
|
||||
@@ -2225,7 +2299,8 @@ msgid "Enable TOTP"
|
||||
msgstr "TOTP aktivieren"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:174
|
||||
#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:69
|
||||
#: src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:47
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:20
|
||||
@@ -3196,14 +3271,19 @@ msgstr "Ein höherer Wert bedeutet eine bessere Wiederverwendung der Verbindung"
|
||||
msgid "History"
|
||||
msgstr "Verlauf"
|
||||
|
||||
#: src/routes/index.ts:52
|
||||
#: src/routes/index.ts:54
|
||||
msgid "Home"
|
||||
msgstr "Startseite"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:42
|
||||
#: src/views/preference/tabs/ServerSettings.vue:19
|
||||
msgid "Host"
|
||||
msgstr "Host"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:45
|
||||
msgid "Host, e.g. @ or www"
|
||||
msgstr "Host, z.B. @ oder www"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:159
|
||||
#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87
|
||||
msgid "Hour"
|
||||
@@ -3280,7 +3360,7 @@ msgstr ""
|
||||
msgid "Import"
|
||||
msgstr "Import"
|
||||
|
||||
#: src/routes/modules/certificates.ts:54
|
||||
#: src/routes/modules/certificates.ts:46
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Import Certificate"
|
||||
msgstr "Zertifikat importieren"
|
||||
@@ -3403,10 +3483,15 @@ msgstr ""
|
||||
"Die Installation ist nach 10 Minuten Systemstart nicht mehr erlaubt. Bitte "
|
||||
"starten Sie die Nginx UI neu."
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:79
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:26
|
||||
msgid "Interval"
|
||||
msgstr "Intervall"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:232
|
||||
msgid "Interval (seconds)"
|
||||
msgstr "Intervall (Sekunden)"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:166
|
||||
msgid "Invalid"
|
||||
msgstr "Ungültig"
|
||||
@@ -3635,6 +3720,10 @@ msgstr "Zuletzt indiziert"
|
||||
msgid "Last month"
|
||||
msgstr "Letzter Monat"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:87
|
||||
msgid "Last run"
|
||||
msgstr "Letzte Ausführung"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:138
|
||||
msgid "Last update"
|
||||
msgstr "Letzte Aktualisierung"
|
||||
@@ -3904,6 +3993,10 @@ msgstr ""
|
||||
msgid "Manage Configs"
|
||||
msgstr "Verwalte Konfigurationen"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:236
|
||||
msgid "Manage Records"
|
||||
msgstr "Einträge verwalten"
|
||||
|
||||
#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45
|
||||
msgid "Manage Sites"
|
||||
msgstr "Verwalte Seiten"
|
||||
@@ -4074,7 +4167,7 @@ msgstr "Geändert am"
|
||||
msgid "Modify"
|
||||
msgstr "Ändern"
|
||||
|
||||
#: src/routes/modules/certificates.ts:44
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Modify Certificate"
|
||||
msgstr "Zertifikat ändern"
|
||||
@@ -4135,11 +4228,13 @@ msgstr "N/V"
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:44
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:58
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:70
|
||||
#: src/views/certificate/DNSCredential.vue:17
|
||||
#: src/views/config/components/ConfigRightPanel/Basic.vue:34
|
||||
#: src/views/config/components/Delete.vue:123
|
||||
#: src/views/config/components/Mkdir.vue:64
|
||||
#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/config/configColumns.tsx:17
|
||||
#: src/views/dns/components/DNSRecordForm.vue:63
|
||||
#: src/views/dns/components/DNSRecordTable.vue:17
|
||||
#: src/views/dns/DNSCredential.vue:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/nginx_log/NginxLogList.vue:155 src/views/node/nodeColumns.tsx:8
|
||||
#: src/views/preference/components/AuthSettings/AddPasskey.vue:81
|
||||
#: src/views/site/site_edit/components/RightPanel/Basic.vue:36
|
||||
@@ -4167,6 +4262,14 @@ msgstr "Namensraum"
|
||||
msgid "Namespaces"
|
||||
msgstr "Namensräume"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:251
|
||||
msgid ""
|
||||
"Need more DNS providers? Support us through donations or contact us for "
|
||||
"commercial collaboration"
|
||||
msgstr ""
|
||||
"Benötigen Sie mehr DNS-Anbieter? Unterstützen Sie uns durch Spenden oder "
|
||||
"kontaktieren Sie uns für eine geschäftliche Zusammenarbeit"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:195
|
||||
msgid "Need to enable the stub_status module"
|
||||
msgstr "Das stub_status-Modul muss aktiviert werden"
|
||||
@@ -4561,6 +4664,10 @@ msgstr "Nicht indiziert"
|
||||
msgid "Not Loaded"
|
||||
msgstr "Nicht geladen"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:102
|
||||
msgid "Not run yet"
|
||||
msgstr "Noch nicht ausgeführt"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:230
|
||||
msgid "Not supported for IP certificates"
|
||||
msgstr "Nicht für IP-Zertifikate unterstützt"
|
||||
@@ -4570,7 +4677,7 @@ msgid "Not Valid Before: %{date}"
|
||||
msgstr "Nich gültig vor: %{date}"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:150
|
||||
#: src/views/certificate/DNSCredential.vue:89
|
||||
#: src/views/dns/DNSCredential.vue:89
|
||||
msgid "Note"
|
||||
msgstr "Notiz"
|
||||
|
||||
@@ -4703,10 +4810,6 @@ msgstr "OK"
|
||||
msgid "On"
|
||||
msgstr "Ein"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:99
|
||||
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:164
|
||||
#: src/components/NodeCard/NodeCard.vue:51
|
||||
#: src/components/NodeSelector/NodeSelector.vue:65
|
||||
@@ -4998,7 +5101,7 @@ msgstr "Bitte füllen Sie alle Felder korrekt aus"
|
||||
msgid "Please fill in required S3 configuration fields"
|
||||
msgstr "Bitte füllen Sie die erforderlichen S3-Konfigurationsfelder aus"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:93
|
||||
#: src/views/dns/DNSCredential.vue:93
|
||||
msgid ""
|
||||
"Please fill in the API authentication credentials provided by your DNS "
|
||||
"provider."
|
||||
@@ -5066,7 +5169,7 @@ msgstr "Bitte gib deinen Benutzernamen ein!"
|
||||
msgid "Please log in."
|
||||
msgstr "Bitte melden Sie sich an."
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:102
|
||||
#: src/views/dns/DNSCredential.vue:96
|
||||
msgid "Please note that the unit of time configurations below are all in seconds."
|
||||
msgstr ""
|
||||
"Bitte beachte, dass die Zeiteinheiten der unten aufgeführten "
|
||||
@@ -5150,6 +5253,11 @@ msgstr "Einstellungen"
|
||||
msgid "Preparing lego configurations"
|
||||
msgstr "Lego-Konfigurationen vorbereiten"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:81
|
||||
#: src/views/dns/components/DNSRecordTable.vue:33
|
||||
msgid "Priority"
|
||||
msgstr "Priorität"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:206
|
||||
msgid "Private CA:"
|
||||
msgstr "Private CA:"
|
||||
@@ -5213,7 +5321,8 @@ msgstr ""
|
||||
"eines Reverse Proxys konfigurieren Sie das Protokoll bitte separat im "
|
||||
"Reverse Proxy."
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:26
|
||||
#: src/views/dns/DDNSManager.vue:70 src/views/dns/DNSCredential.vue:26
|
||||
#: src/views/dns/DNSDomainList.vue:177 src/views/dns/DNSDomainList.vue:198
|
||||
msgid "Provider"
|
||||
msgstr "Anbieter"
|
||||
|
||||
@@ -5225,6 +5334,12 @@ msgstr "Anbieter nicht gefunden: {0}"
|
||||
msgid "Province / Region"
|
||||
msgstr "Provinz / Region"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:87
|
||||
#: src/views/dns/components/DNSRecordTable.vue:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "Proxied"
|
||||
msgstr "Proxied"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:63
|
||||
msgid "Proxy"
|
||||
msgstr "Proxy"
|
||||
@@ -5319,6 +5434,22 @@ msgstr "Erneut prüfen"
|
||||
msgid "Recommended:"
|
||||
msgstr "Empfohlen:"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:113
|
||||
msgid "Record created"
|
||||
msgstr "Datensatz erstellt"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:120
|
||||
msgid "Record deleted"
|
||||
msgstr "Eintrag gelöscht"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:109
|
||||
msgid "Record updated"
|
||||
msgstr "Datensatz aktualisiert"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:221
|
||||
msgid "Records"
|
||||
msgstr "Datensätze"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:79
|
||||
msgid "Recovery"
|
||||
msgstr "Wiederherstellung"
|
||||
@@ -5349,7 +5480,8 @@ msgstr "Umleitungsmeldungen (3xx)"
|
||||
msgid "Referer"
|
||||
msgstr "Referer"
|
||||
|
||||
#: src/language/curd.ts:70
|
||||
#: src/language/curd.ts:70 src/views/dns/DDNSManager.vue:161
|
||||
#: src/views/dns/DNSRecordManager.vue:165
|
||||
msgid "Refresh"
|
||||
msgstr "Aktualisieren"
|
||||
|
||||
@@ -5593,7 +5725,7 @@ msgstr "Forderte mit falschen Parametern an"
|
||||
msgid "Requests Per Connection"
|
||||
msgstr "Anfragen pro Verbindung"
|
||||
|
||||
#: src/language/curd.ts:13
|
||||
#: src/language/curd.ts:13 src/views/dns/components/DNSRecordFilter.vue:65
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:214
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:745
|
||||
msgid "Reset"
|
||||
@@ -5836,6 +5968,7 @@ msgstr "Samstag"
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:283
|
||||
#: src/views/config/components/ConfigName.vue:58
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:713
|
||||
#: src/views/dns/DDNSManager.vue:247 src/views/dns/DNSRecordManager.vue:215
|
||||
#: src/views/preference/components/AuthSettings/Passkey.vue:131
|
||||
#: src/views/preference/Preference.vue:124
|
||||
#: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52
|
||||
@@ -5941,12 +6074,13 @@ msgstr "Zeitplan"
|
||||
msgid "Schedule Type"
|
||||
msgstr "Zeitplantyp"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:77
|
||||
#: src/views/dns/components/DNSChallenge.vue:78
|
||||
msgid "SDK"
|
||||
msgstr "SDK"
|
||||
|
||||
#: src/language/constants.ts:62 src/language/curd.ts:12
|
||||
#: src/views/config/configColumns.tsx:5
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:62
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:217
|
||||
#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13
|
||||
msgid "Search"
|
||||
@@ -6006,10 +6140,18 @@ msgstr ""
|
||||
msgid "Select all"
|
||||
msgstr "Alle auswählen"
|
||||
|
||||
#: src/language/constants.ts:68
|
||||
msgid "Select Credential"
|
||||
msgstr "Anmeldeinformationen auswählen"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:45
|
||||
msgid "Select or enter a CA directory URL"
|
||||
msgstr "Wählen Sie eine CA-Verzeichnis-URL aus oder geben Sie sie ein"
|
||||
|
||||
#: src/language/constants.ts:67
|
||||
msgid "Select Provider"
|
||||
msgstr "Anbieter auswählen"
|
||||
|
||||
#: src/language/curd.ts:59
|
||||
msgid "Selected {count} files"
|
||||
msgstr "Ausgewählte {count} Dateien"
|
||||
@@ -6341,6 +6483,7 @@ msgstr "Statisch"
|
||||
#: src/views/certificate/ACMEUser.vue:75
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:63
|
||||
#: src/views/dashboard/components/ModulesTable.vue:75
|
||||
#: src/views/dns/DDNSManager.vue:75
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:106
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:241
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:521
|
||||
@@ -6574,6 +6717,10 @@ msgstr "Systemwiederherstellung"
|
||||
msgid "System restored successfully."
|
||||
msgstr "System erfolgreich wiederhergestellt."
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:83
|
||||
msgid "Targets"
|
||||
msgstr "Ziele"
|
||||
|
||||
#: src/constants/errors/self_check.ts:3
|
||||
msgid "Task is not fixable"
|
||||
msgstr "Aufgabe ist nicht behebbar"
|
||||
@@ -7125,6 +7272,14 @@ msgstr ""
|
||||
msgid "Try adjusting your search criteria or time range."
|
||||
msgstr "Versuchen Sie, Ihre Suchkriterien oder den Zeitraum anzupassen."
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:29
|
||||
msgid "TTL"
|
||||
msgstr "TTL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:78
|
||||
msgid "TTL (seconds)"
|
||||
msgstr "TTL (Sekunden)"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:28
|
||||
msgid "Tuesday"
|
||||
msgstr "Dienstag"
|
||||
@@ -7137,6 +7292,9 @@ msgstr "Zwei-Faktor-Authentifizierung erforderlich"
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:24
|
||||
#: src/views/config/components/Delete.vue:122
|
||||
#: src/views/dashboard/components/ModulesTable.vue:62
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:49
|
||||
#: src/views/dns/components/DNSRecordForm.vue:57
|
||||
#: src/views/dns/components/DNSRecordTable.vue:21
|
||||
#: src/views/nginx_log/NginxLogList.vue:146
|
||||
#: src/views/notification/notificationColumns.tsx:8
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:19
|
||||
@@ -7147,6 +7305,10 @@ msgstr "Typ"
|
||||
msgid "Type %{delete} to confirm"
|
||||
msgstr "Geben Sie %{delete} zur Bestätigung ein"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:228
|
||||
msgid "Type or select A/AAAA records"
|
||||
msgstr "Geben Sie A/AAAA-Datensätze ein oder wählen Sie sie aus"
|
||||
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:142
|
||||
msgid "Type or select browser"
|
||||
msgstr "Browser eingeben oder auswählen"
|
||||
@@ -7202,9 +7364,9 @@ msgstr "Erfolgreich aktualisiert"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:236
|
||||
#: 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:91
|
||||
#: src/views/config/configColumns.tsx:44 src/views/dns/DNSCredential.vue:65
|
||||
#: src/views/dns/DNSDomainList.vue:205 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
|
||||
@@ -7277,6 +7439,10 @@ msgstr "Uptime:"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:64
|
||||
msgid "Use @ for root"
|
||||
msgstr "Verwenden Sie @ für die Root-Domain"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:121
|
||||
msgid "Use OTP"
|
||||
msgstr "Benutze OTP"
|
||||
@@ -7342,6 +7508,8 @@ msgid "Validate SSL Certificate"
|
||||
msgstr "SSL-Zertifikat validieren"
|
||||
|
||||
#: src/views/dashboard/components/PerformanceTablesCard.vue:22
|
||||
#: src/views/dns/components/DNSRecordForm.vue:66
|
||||
#: src/views/dns/components/DNSRecordTable.vue:25
|
||||
msgid "Value"
|
||||
msgstr "Wert"
|
||||
|
||||
@@ -7439,14 +7607,6 @@ msgstr ""
|
||||
msgid "We do not accept any feature requests"
|
||||
msgstr "Wir akzeptieren keine Funktionsanfragen"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:96
|
||||
msgid ""
|
||||
"We will add one or more TXT records to the DNS records of your domain for "
|
||||
"ownership verification."
|
||||
msgstr ""
|
||||
"Wir werden einen oder mehrere TXT-Einträge zu den DNS-Einträgen deiner "
|
||||
"Domain hinzufügen, um die Eigentumsverifizierung durchzuführen."
|
||||
|
||||
#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
|
||||
msgid ""
|
||||
"We will remove the HTTPChallenge configuration from this file and reload "
|
||||
@@ -7483,6 +7643,11 @@ msgstr "Wöchentlich"
|
||||
msgid "Weekly on %{day} at %{time}"
|
||||
msgstr "Wöchentlich am %{day} um %{time}"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:84
|
||||
#: src/views/dns/components/DNSRecordTable.vue:37
|
||||
msgid "Weight"
|
||||
msgstr "Gewicht"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:119
|
||||
msgid ""
|
||||
"When Enabled, Nginx UI will automatically re-register users upon startup. "
|
||||
@@ -7537,7 +7702,7 @@ msgstr "Worker-Prozesse"
|
||||
msgid "Workers"
|
||||
msgstr "Worker"
|
||||
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:63
|
||||
#: src/views/workspace/WorkSpace.vue:51
|
||||
msgid "Workspace"
|
||||
msgstr "Arbeitsplatz"
|
||||
@@ -7643,6 +7808,16 @@ msgstr "Deine Passkeys"
|
||||
msgid "Zero-allocation pipeline"
|
||||
msgstr "Allokationsfreie Pipeline"
|
||||
|
||||
#~ msgid "Once the verification is complete, the records will be removed."
|
||||
#~ msgstr "Sobaöd die Überprüfung abgeschlossen ist, werden die Einträge entfernt."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "We will add one or more TXT records to the DNS records of your domain for "
|
||||
#~ "ownership verification."
|
||||
#~ msgstr ""
|
||||
#~ "Wir werden einen oder mehrere TXT-Einträge zu den DNS-Einträgen deiner "
|
||||
#~ "Domain hinzufügen, um die Eigentumsverifizierung durchzuführen."
|
||||
|
||||
#~ msgid "Settings"
|
||||
#~ msgstr "Einstellungen"
|
||||
|
||||
@@ -7664,9 +7839,6 @@ msgstr "Allokationsfreie Pipeline"
|
||||
#~ 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)"
|
||||
|
||||
@@ -7875,9 +8047,6 @@ msgstr "Allokationsfreie Pipeline"
|
||||
#~ msgid "Are you sure you want to delete this item permanently?"
|
||||
#~ msgstr "Sind Sie sicher, dass Sie diesen Artikel endgültig löschen möchten?"
|
||||
|
||||
#~ msgid "Are you sure you want to delete this item?"
|
||||
#~ msgstr "Sind Sie sicher, dass Sie dieses Element löschen möchten?"
|
||||
|
||||
#~ msgid "Are you sure you want to recover this item?"
|
||||
#~ msgstr "Sind Sie sicher, dass Sie dieses Element wiederherstellen möchten?"
|
||||
|
||||
|
||||
+206
-41
@@ -166,8 +166,10 @@ msgstr ""
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:273
|
||||
#: 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:97
|
||||
#: src/views/config/configColumns.tsx:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:41
|
||||
#: src/views/dns/DDNSManager.vue:91 src/views/dns/DNSCredential.vue:71
|
||||
#: src/views/dns/DNSDomainList.vue:211 src/views/namespace/columns.ts:97
|
||||
#: src/views/nginx_log/NginxLogList.vue:338 src/views/node/nodeColumns.tsx:96
|
||||
#: src/views/notification/notificationColumns.tsx:72
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:85
|
||||
@@ -221,6 +223,10 @@ msgstr ""
|
||||
msgid "Add Location"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:171
|
||||
msgid "Add Record"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/NgxConfigEditor/NgxServer.vue:92
|
||||
msgid "Add Server"
|
||||
msgstr ""
|
||||
@@ -241,7 +247,7 @@ msgstr ""
|
||||
msgid "Added successfully"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:97
|
||||
#: src/views/dns/components/DNSChallenge.vue:98
|
||||
msgid "Additional"
|
||||
msgstr ""
|
||||
|
||||
@@ -278,6 +284,10 @@ msgstr ""
|
||||
msgid "Afterwards, refresh this page and click add passkey again."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:55
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/system/Licenses.vue:152
|
||||
msgid "All Components"
|
||||
msgstr ""
|
||||
@@ -316,7 +326,7 @@ msgstr ""
|
||||
msgid "API Base Url"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:70
|
||||
#: src/views/dns/components/DNSChallenge.vue:71
|
||||
msgid "API Document"
|
||||
msgstr ""
|
||||
|
||||
@@ -352,6 +362,10 @@ msgstr ""
|
||||
msgid "Are you sure to delete this passkey immediately?"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:90
|
||||
msgid "Are you sure to delete this record?"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155
|
||||
msgid "Are you sure to generate new recovery codes?"
|
||||
msgstr ""
|
||||
@@ -521,7 +535,7 @@ msgstr ""
|
||||
#: src/views/certificate/components/CertificateActions.vue:22
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:274
|
||||
#: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217
|
||||
#: src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/dns/DNSRecordManager.vue:223 src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183
|
||||
#: src/views/stream/components/StreamEditor.vue:147
|
||||
msgid "Back"
|
||||
@@ -668,6 +682,10 @@ msgstr ""
|
||||
msgid "Browser Statistics"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:257
|
||||
msgid "Business contact:"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:316
|
||||
msgid ""
|
||||
"By enabling advanced indexing, you acknowledge that your system meets the "
|
||||
@@ -733,6 +751,7 @@ msgstr ""
|
||||
#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37
|
||||
#: src/views/config/components/Delete.vue:98
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:710
|
||||
#: src/views/dns/DDNSManager.vue:244 src/views/dns/DNSRecordManager.vue:212
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:102
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:33
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:59
|
||||
@@ -879,7 +898,7 @@ msgstr ""
|
||||
msgid "Certificates"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
msgid "Certificates List"
|
||||
msgstr ""
|
||||
|
||||
@@ -1222,7 +1241,7 @@ msgstr ""
|
||||
msgid "Config Template"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:52
|
||||
#: src/views/dns/DNSCredential.vue:52
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
@@ -1250,6 +1269,14 @@ msgstr ""
|
||||
msgid "Configurations"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:201
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:211
|
||||
msgid "Configure DDNS"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/site/site_add/SiteAdd.vue:81
|
||||
msgid "Configure SSL"
|
||||
msgstr ""
|
||||
@@ -1371,6 +1398,10 @@ msgstr ""
|
||||
msgid "Create Folder"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Create Record"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/backup/components/BackupCreator.vue:75
|
||||
msgid ""
|
||||
"Create system backups including Nginx configuration and Nginx UI settings. "
|
||||
@@ -1394,11 +1425,12 @@ msgstr ""
|
||||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:105
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:131
|
||||
#: src/views/dns/DDNSManager.vue:65 src/views/dns/DNSDomainList.vue:109
|
||||
msgid "Credential"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:86
|
||||
#: src/routes/modules/dns.ts:20 src/views/dns/components/DNSChallenge.vue:87
|
||||
msgid "Credentials"
|
||||
msgstr ""
|
||||
|
||||
@@ -1513,6 +1545,18 @@ msgstr ""
|
||||
msgid "Db file not found"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/modules/dns.ts:36
|
||||
msgid "DDNS"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:153
|
||||
msgid "DDNS Overview"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:135
|
||||
msgid "DDNS saved"
|
||||
msgstr ""
|
||||
|
||||
#: src/constants/errors/geolite.ts:12
|
||||
msgid "Decompression succeeded but failed to delete compressed file: {0}"
|
||||
msgstr ""
|
||||
@@ -1537,6 +1581,7 @@ msgstr ""
|
||||
#: src/views/config/components/Delete.vue:65
|
||||
#: src/views/config/components/Delete.vue:97
|
||||
#: src/views/config/ConfigList.vue:199
|
||||
#: src/views/dns/components/DNSRecordTable.vue:94
|
||||
#: src/views/site/site_list/SiteList.vue:100
|
||||
#: src/views/stream/StreamList.vue:110
|
||||
msgid "Delete"
|
||||
@@ -1778,7 +1823,8 @@ msgid "Disable stream %{name} from %{node} successfully"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:175
|
||||
#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:60
|
||||
#: src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/NodeSettings.vue:25
|
||||
#: src/views/preference/tabs/NodeSettings.vue:30
|
||||
@@ -1803,16 +1849,35 @@ msgstr ""
|
||||
msgid "Disk IO"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
#: src/views/certificate/DNSCredential.vue:79
|
||||
#: src/routes/modules/dns.ts:11
|
||||
msgid "DNS"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DNSCredential.vue:79
|
||||
msgid "DNS Credentials"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:95
|
||||
#: src/views/certificate/components/DNSChallenge.vue:59
|
||||
#: src/routes/modules/dns.ts:28 src/views/dns/DNSDomainList.vue:228
|
||||
msgid "DNS Domains"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "DNS Only"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:121
|
||||
#: src/views/dns/components/DNSChallenge.vue:60
|
||||
msgid "DNS Provider"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:244
|
||||
msgid "DNS Provider Support"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/modules/dns.ts:44 src/views/dns/DNSRecordManager.vue:58
|
||||
msgid "DNS Records"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:678
|
||||
msgid "DNS Resolver"
|
||||
msgstr ""
|
||||
@@ -1874,6 +1939,7 @@ msgid "Document Count"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/components/DNSIssueCertificate.vue:119
|
||||
#: src/views/dns/DDNSManager.vue:60 src/views/dns/DNSDomainList.vue:98
|
||||
msgid "Domain"
|
||||
msgstr ""
|
||||
|
||||
@@ -1959,7 +2025,7 @@ msgstr ""
|
||||
msgid "EAB Key ID"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/curd.ts:8
|
||||
#: src/language/curd.ts:8 src/views/dns/components/DNSRecordTable.vue:87
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
@@ -1973,6 +2039,10 @@ msgstr ""
|
||||
msgid "Edit Configuration"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Edit Record"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/modules/sites.ts:34
|
||||
msgid "Edit Site"
|
||||
msgstr ""
|
||||
@@ -2023,6 +2093,10 @@ msgstr ""
|
||||
msgid "Enable compression for content transfer"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:218
|
||||
msgid "Enable DDNS"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:473
|
||||
msgid "Enable Health Check"
|
||||
msgstr ""
|
||||
@@ -2110,7 +2184,8 @@ msgid "Enable TOTP"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:174
|
||||
#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:69
|
||||
#: src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:47
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:20
|
||||
@@ -3054,14 +3129,19 @@ msgstr ""
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:52
|
||||
#: src/routes/index.ts:54
|
||||
msgid "Home"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:42
|
||||
#: src/views/preference/tabs/ServerSettings.vue:19
|
||||
msgid "Host"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:45
|
||||
msgid "Host, e.g. @ or www"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:159
|
||||
#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87
|
||||
msgid "Hour"
|
||||
@@ -3127,7 +3207,7 @@ msgstr ""
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/modules/certificates.ts:54
|
||||
#: src/routes/modules/certificates.ts:46
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Import Certificate"
|
||||
msgstr ""
|
||||
@@ -3246,10 +3326,15 @@ msgid ""
|
||||
"restart the Nginx UI."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:79
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:26
|
||||
msgid "Interval"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:232
|
||||
msgid "Interval (seconds)"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:166
|
||||
msgid "Invalid"
|
||||
msgstr ""
|
||||
@@ -3476,6 +3561,10 @@ msgstr ""
|
||||
msgid "Last month"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:87
|
||||
msgid "Last run"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:138
|
||||
msgid "Last update"
|
||||
msgstr ""
|
||||
@@ -3731,6 +3820,10 @@ msgstr ""
|
||||
msgid "Manage Configs"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:236
|
||||
msgid "Manage Records"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45
|
||||
msgid "Manage Sites"
|
||||
msgstr ""
|
||||
@@ -3901,7 +3994,7 @@ msgstr ""
|
||||
msgid "Modify"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/modules/certificates.ts:44
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Modify Certificate"
|
||||
msgstr ""
|
||||
@@ -3962,11 +4055,13 @@ msgstr ""
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:44
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:58
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:70
|
||||
#: src/views/certificate/DNSCredential.vue:17
|
||||
#: src/views/config/components/ConfigRightPanel/Basic.vue:34
|
||||
#: src/views/config/components/Delete.vue:123
|
||||
#: src/views/config/components/Mkdir.vue:64
|
||||
#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/config/configColumns.tsx:17
|
||||
#: src/views/dns/components/DNSRecordForm.vue:63
|
||||
#: src/views/dns/components/DNSRecordTable.vue:17
|
||||
#: src/views/dns/DNSCredential.vue:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/nginx_log/NginxLogList.vue:155 src/views/node/nodeColumns.tsx:8
|
||||
#: src/views/preference/components/AuthSettings/AddPasskey.vue:81
|
||||
#: src/views/site/site_edit/components/RightPanel/Basic.vue:36
|
||||
@@ -3994,6 +4089,12 @@ msgstr ""
|
||||
msgid "Namespaces"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:251
|
||||
msgid ""
|
||||
"Need more DNS providers? Support us through donations or contact us for "
|
||||
"commercial collaboration"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:195
|
||||
msgid "Need to enable the stub_status module"
|
||||
msgstr ""
|
||||
@@ -4384,6 +4485,10 @@ msgstr ""
|
||||
msgid "Not Loaded"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:102
|
||||
msgid "Not run yet"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:230
|
||||
msgid "Not supported for IP certificates"
|
||||
msgstr ""
|
||||
@@ -4393,7 +4498,7 @@ msgid "Not Valid Before: %{date}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:150
|
||||
#: src/views/certificate/DNSCredential.vue:89
|
||||
#: src/views/dns/DNSCredential.vue:89
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
|
||||
@@ -4516,10 +4621,6 @@ msgstr ""
|
||||
msgid "On"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:99
|
||||
msgid "Once the verification is complete, the records will be removed."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/NamespaceTabs/NamespaceTabs.vue:164
|
||||
#: src/components/NodeCard/NodeCard.vue:51
|
||||
#: src/components/NodeSelector/NodeSelector.vue:65
|
||||
@@ -4804,7 +4905,7 @@ msgstr ""
|
||||
msgid "Please fill in required S3 configuration fields"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:93
|
||||
#: src/views/dns/DNSCredential.vue:93
|
||||
msgid ""
|
||||
"Please fill in the API authentication credentials provided by your DNS "
|
||||
"provider."
|
||||
@@ -4861,7 +4962,7 @@ msgstr ""
|
||||
msgid "Please log in."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:102
|
||||
#: src/views/dns/DNSCredential.vue:96
|
||||
msgid ""
|
||||
"Please note that the unit of time configurations below are all in seconds."
|
||||
msgstr ""
|
||||
@@ -4942,6 +5043,11 @@ msgstr ""
|
||||
msgid "Preparing lego configurations"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:81
|
||||
#: src/views/dns/components/DNSRecordTable.vue:33
|
||||
msgid "Priority"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:206
|
||||
msgid "Private CA:"
|
||||
msgstr ""
|
||||
@@ -5001,7 +5107,8 @@ msgid ""
|
||||
"reverse proxy, please configure the protocol separately in the reverse proxy."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:26
|
||||
#: src/views/dns/DDNSManager.vue:70 src/views/dns/DNSCredential.vue:26
|
||||
#: src/views/dns/DNSDomainList.vue:177 src/views/dns/DNSDomainList.vue:198
|
||||
msgid "Provider"
|
||||
msgstr ""
|
||||
|
||||
@@ -5013,6 +5120,12 @@ msgstr ""
|
||||
msgid "Province / Region"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:87
|
||||
#: src/views/dns/components/DNSRecordTable.vue:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "Proxied"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:63
|
||||
msgid "Proxy"
|
||||
msgstr ""
|
||||
@@ -5107,6 +5220,22 @@ msgstr ""
|
||||
msgid "Recommended:"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:113
|
||||
msgid "Record created"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:120
|
||||
msgid "Record deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:109
|
||||
msgid "Record updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:221
|
||||
msgid "Records"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:79
|
||||
msgid "Recovery"
|
||||
msgstr ""
|
||||
@@ -5134,7 +5263,8 @@ msgstr ""
|
||||
msgid "Referer"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/curd.ts:70
|
||||
#: src/language/curd.ts:70 src/views/dns/DDNSManager.vue:161
|
||||
#: src/views/dns/DNSRecordManager.vue:165
|
||||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
@@ -5374,7 +5504,7 @@ msgstr ""
|
||||
msgid "Requests Per Connection"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/curd.ts:13
|
||||
#: src/language/curd.ts:13 src/views/dns/components/DNSRecordFilter.vue:65
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:214
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:745
|
||||
msgid "Reset"
|
||||
@@ -5610,6 +5740,7 @@ msgstr ""
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:283
|
||||
#: src/views/config/components/ConfigName.vue:58
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:713
|
||||
#: src/views/dns/DDNSManager.vue:247 src/views/dns/DNSRecordManager.vue:215
|
||||
#: src/views/preference/components/AuthSettings/Passkey.vue:131
|
||||
#: src/views/preference/Preference.vue:124
|
||||
#: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52
|
||||
@@ -5715,12 +5846,13 @@ msgstr ""
|
||||
msgid "Schedule Type"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:77
|
||||
#: src/views/dns/components/DNSChallenge.vue:78
|
||||
msgid "SDK"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:62 src/language/curd.ts:12
|
||||
#: src/views/config/configColumns.tsx:5
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:62
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:217
|
||||
#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13
|
||||
msgid "Search"
|
||||
@@ -5777,10 +5909,18 @@ msgstr ""
|
||||
msgid "Select all"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:68
|
||||
msgid "Select Credential"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:45
|
||||
msgid "Select or enter a CA directory URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:67
|
||||
msgid "Select Provider"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/curd.ts:59
|
||||
msgid "Selected {count} files"
|
||||
msgstr ""
|
||||
@@ -6096,6 +6236,7 @@ msgstr ""
|
||||
#: src/views/certificate/ACMEUser.vue:75
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:63
|
||||
#: src/views/dashboard/components/ModulesTable.vue:75
|
||||
#: src/views/dns/DDNSManager.vue:75
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:106
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:241
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:521
|
||||
@@ -6321,6 +6462,10 @@ msgstr ""
|
||||
msgid "System restored successfully."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:83
|
||||
msgid "Targets"
|
||||
msgstr ""
|
||||
|
||||
#: src/constants/errors/self_check.ts:3
|
||||
msgid "Task is not fixable"
|
||||
msgstr ""
|
||||
@@ -6798,6 +6943,14 @@ msgstr ""
|
||||
msgid "Try adjusting your search criteria or time range."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:29
|
||||
msgid "TTL"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:78
|
||||
msgid "TTL (seconds)"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:28
|
||||
msgid "Tuesday"
|
||||
msgstr ""
|
||||
@@ -6810,6 +6963,9 @@ msgstr ""
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:24
|
||||
#: src/views/config/components/Delete.vue:122
|
||||
#: src/views/dashboard/components/ModulesTable.vue:62
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:49
|
||||
#: src/views/dns/components/DNSRecordForm.vue:57
|
||||
#: src/views/dns/components/DNSRecordTable.vue:21
|
||||
#: src/views/nginx_log/NginxLogList.vue:146
|
||||
#: src/views/notification/notificationColumns.tsx:8
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:19
|
||||
@@ -6820,6 +6976,10 @@ msgstr ""
|
||||
msgid "Type %{delete} to confirm"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:228
|
||||
msgid "Type or select A/AAAA records"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:142
|
||||
msgid "Type or select browser"
|
||||
msgstr ""
|
||||
@@ -6875,9 +7035,9 @@ msgstr ""
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:236
|
||||
#: 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:91
|
||||
#: src/views/config/configColumns.tsx:44 src/views/dns/DNSCredential.vue:65
|
||||
#: src/views/dns/DNSDomainList.vue:205 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
|
||||
@@ -6950,6 +7110,10 @@ msgstr ""
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:64
|
||||
msgid "Use @ for root"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:121
|
||||
msgid "Use OTP"
|
||||
msgstr ""
|
||||
@@ -7015,6 +7179,8 @@ msgid "Validate SSL Certificate"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dashboard/components/PerformanceTablesCard.vue:22
|
||||
#: src/views/dns/components/DNSRecordForm.vue:66
|
||||
#: src/views/dns/components/DNSRecordTable.vue:25
|
||||
msgid "Value"
|
||||
msgstr ""
|
||||
|
||||
@@ -7104,12 +7270,6 @@ msgstr ""
|
||||
msgid "We do not accept any feature requests"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:96
|
||||
msgid ""
|
||||
"We will add one or more TXT records to the DNS records of your domain for "
|
||||
"ownership verification."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
|
||||
msgid ""
|
||||
"We will remove the HTTPChallenge configuration from this file and reload the "
|
||||
@@ -7144,6 +7304,11 @@ msgstr ""
|
||||
msgid "Weekly on %{day} at %{time}"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:84
|
||||
#: src/views/dns/components/DNSRecordTable.vue:37
|
||||
msgid "Weight"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:119
|
||||
msgid ""
|
||||
"When Enabled, Nginx UI will automatically re-register users upon startup. "
|
||||
@@ -7187,7 +7352,7 @@ msgstr ""
|
||||
msgid "Workers"
|
||||
msgstr ""
|
||||
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:63
|
||||
#: src/views/workspace/WorkSpace.vue:51
|
||||
msgid "Workspace"
|
||||
msgstr ""
|
||||
|
||||
+218
-52
@@ -193,8 +193,10 @@ msgstr "Acción"
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:273
|
||||
#: 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:97
|
||||
#: src/views/config/configColumns.tsx:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:41
|
||||
#: src/views/dns/DDNSManager.vue:91 src/views/dns/DNSCredential.vue:71
|
||||
#: src/views/dns/DNSDomainList.vue:211 src/views/namespace/columns.ts:97
|
||||
#: src/views/nginx_log/NginxLogList.vue:338 src/views/node/nodeColumns.tsx:96
|
||||
#: src/views/notification/notificationColumns.tsx:72
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:85
|
||||
@@ -248,6 +250,10 @@ msgstr "Agregar encabezado"
|
||||
msgid "Add Location"
|
||||
msgstr "Agregar Ubicación"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:171
|
||||
msgid "Add Record"
|
||||
msgstr "Agregar registro"
|
||||
|
||||
#: src/components/NgxConfigEditor/NgxServer.vue:92
|
||||
msgid "Add Server"
|
||||
msgstr "Agregar servidor"
|
||||
@@ -268,7 +274,7 @@ msgstr "Agregar upstream"
|
||||
msgid "Added successfully"
|
||||
msgstr "Agregado exitoso"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:97
|
||||
#: src/views/dns/components/DNSChallenge.vue:98
|
||||
msgid "Additional"
|
||||
msgstr "Adicional"
|
||||
|
||||
@@ -309,6 +315,10 @@ msgstr ""
|
||||
"Después, actualice esta página y haga clic en agregar clave de acceso "
|
||||
"nuevamente."
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:55
|
||||
msgid "All"
|
||||
msgstr "Todos"
|
||||
|
||||
#: src/views/system/Licenses.vue:152
|
||||
msgid "All Components"
|
||||
msgstr "Todos los componentes"
|
||||
@@ -352,7 +362,7 @@ msgstr ""
|
||||
msgid "API Base Url"
|
||||
msgstr "URL Base de la API"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:70
|
||||
#: src/views/dns/components/DNSChallenge.vue:71
|
||||
msgid "API Document"
|
||||
msgstr "Documento de la API"
|
||||
|
||||
@@ -388,6 +398,10 @@ msgstr "¿Está seguro de eliminar esta IP bloqueada inmediatamente?"
|
||||
msgid "Are you sure to delete this passkey immediately?"
|
||||
msgstr "¿Está seguro de eliminar esta llave de acceso inmediatamente?"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:90
|
||||
msgid "Are you sure to delete this record?"
|
||||
msgstr "¿Estás seguro de eliminar este registro?"
|
||||
|
||||
#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155
|
||||
msgid "Are you sure to generate new recovery codes?"
|
||||
msgstr "¿Estás seguro de generar nuevos códigos de recuperación?"
|
||||
@@ -561,7 +575,7 @@ msgstr "Prom./PV"
|
||||
#: src/views/certificate/components/CertificateActions.vue:22
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:274
|
||||
#: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217
|
||||
#: src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/dns/DNSRecordManager.vue:223 src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183
|
||||
#: src/views/stream/components/StreamEditor.vue:147
|
||||
msgid "Back"
|
||||
@@ -721,6 +735,10 @@ msgstr "Navegador"
|
||||
msgid "Browser Statistics"
|
||||
msgstr "Estadísticas del navegador"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:257
|
||||
msgid "Business contact:"
|
||||
msgstr "Contacto comercial:"
|
||||
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:316
|
||||
msgid ""
|
||||
"By enabling advanced indexing, you acknowledge that your system meets the "
|
||||
@@ -793,6 +811,7 @@ msgstr ""
|
||||
#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37
|
||||
#: src/views/config/components/Delete.vue:98
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:710
|
||||
#: src/views/dns/DDNSManager.vue:244 src/views/dns/DNSRecordManager.vue:212
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:102
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:33
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:59
|
||||
@@ -941,7 +960,7 @@ msgstr "Tipo de certificado"
|
||||
msgid "Certificates"
|
||||
msgstr "Certificados"
|
||||
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
msgid "Certificates List"
|
||||
msgstr "Lista de Certificados"
|
||||
|
||||
@@ -1325,7 +1344,7 @@ msgstr "La ruta de configuración está vacía"
|
||||
msgid "Config Template"
|
||||
msgstr "Plantilla de configuración"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:52
|
||||
#: src/views/dns/DNSCredential.vue:52
|
||||
msgid "Configuration"
|
||||
msgstr "Configuración"
|
||||
|
||||
@@ -1355,6 +1374,14 @@ msgstr "Nombre de la configuración"
|
||||
msgid "Configurations"
|
||||
msgstr "Configuraciones"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:201
|
||||
msgid "Configure"
|
||||
msgstr "Configurar"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:211
|
||||
msgid "Configure DDNS"
|
||||
msgstr "Configurar DDNS"
|
||||
|
||||
#: src/views/site/site_add/SiteAdd.vue:81
|
||||
msgid "Configure SSL"
|
||||
msgstr "Configurar SSL"
|
||||
@@ -1478,6 +1505,10 @@ msgstr "Crear Archivo"
|
||||
msgid "Create Folder"
|
||||
msgstr "Crear carpeta"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Create Record"
|
||||
msgstr "Crear registro"
|
||||
|
||||
#: src/views/backup/components/BackupCreator.vue:75
|
||||
msgid ""
|
||||
"Create system backups including Nginx configuration and Nginx UI settings. "
|
||||
@@ -1504,11 +1535,12 @@ msgstr "Creado con éxito"
|
||||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr "La creación de un cliente facilita la comunicación con el servidor CA"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:105
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:131
|
||||
#: src/views/dns/DDNSManager.vue:65 src/views/dns/DNSDomainList.vue:109
|
||||
msgid "Credential"
|
||||
msgstr "Credencial"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:86
|
||||
#: src/routes/modules/dns.ts:20 src/views/dns/components/DNSChallenge.vue:87
|
||||
msgid "Credentials"
|
||||
msgstr "Credenciales"
|
||||
|
||||
@@ -1625,6 +1657,18 @@ msgstr "Días"
|
||||
msgid "Db file not found"
|
||||
msgstr "Archivo de base de datos no encontrado"
|
||||
|
||||
#: src/routes/modules/dns.ts:36
|
||||
msgid "DDNS"
|
||||
msgstr "DDNS"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:153
|
||||
msgid "DDNS Overview"
|
||||
msgstr "Resumen de DDNS"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:135
|
||||
msgid "DDNS saved"
|
||||
msgstr "DDNS guardado"
|
||||
|
||||
#: src/constants/errors/geolite.ts:12
|
||||
msgid "Decompression succeeded but failed to delete compressed file: {0}"
|
||||
msgstr "Descompresión exitosa pero falló al eliminar el archivo comprimido: {0}"
|
||||
@@ -1651,6 +1695,7 @@ msgstr ""
|
||||
#: src/views/config/components/Delete.vue:65
|
||||
#: src/views/config/components/Delete.vue:97
|
||||
#: src/views/config/ConfigList.vue:199
|
||||
#: src/views/dns/components/DNSRecordTable.vue:94
|
||||
#: src/views/site/site_list/SiteList.vue:100
|
||||
#: src/views/stream/StreamList.vue:110
|
||||
msgid "Delete"
|
||||
@@ -1892,7 +1937,8 @@ msgid "Disable stream %{name} from %{node} successfully"
|
||||
msgstr "Deshabilitar el flujo %{name} desde %{node} con éxito"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:175
|
||||
#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:60
|
||||
#: src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/NodeSettings.vue:25
|
||||
#: src/views/preference/tabs/NodeSettings.vue:30
|
||||
@@ -1917,16 +1963,35 @@ msgstr "Desconectado"
|
||||
msgid "Disk IO"
|
||||
msgstr "I/O del disco"
|
||||
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
#: src/views/certificate/DNSCredential.vue:79
|
||||
#: src/routes/modules/dns.ts:11
|
||||
msgid "DNS"
|
||||
msgstr "DNS"
|
||||
|
||||
#: src/views/dns/DNSCredential.vue:79
|
||||
msgid "DNS Credentials"
|
||||
msgstr "Credenciales de DNS"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:95
|
||||
#: src/views/certificate/components/DNSChallenge.vue:59
|
||||
#: src/routes/modules/dns.ts:28 src/views/dns/DNSDomainList.vue:228
|
||||
msgid "DNS Domains"
|
||||
msgstr "Dominios DNS"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "DNS Only"
|
||||
msgstr "Solo DNS"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:121
|
||||
#: src/views/dns/components/DNSChallenge.vue:60
|
||||
msgid "DNS Provider"
|
||||
msgstr "Proveedor DNS"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:244
|
||||
msgid "DNS Provider Support"
|
||||
msgstr "Soporte de proveedor de DNS"
|
||||
|
||||
#: src/routes/modules/dns.ts:44 src/views/dns/DNSRecordManager.vue:58
|
||||
msgid "DNS Records"
|
||||
msgstr "Registros DNS"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:678
|
||||
msgid "DNS Resolver"
|
||||
msgstr "Resolución DNS"
|
||||
@@ -1988,6 +2053,7 @@ msgid "Document Count"
|
||||
msgstr "Recuento de documentos"
|
||||
|
||||
#: src/views/certificate/components/DNSIssueCertificate.vue:119
|
||||
#: src/views/dns/DDNSManager.vue:60 src/views/dns/DNSDomainList.vue:98
|
||||
msgid "Domain"
|
||||
msgstr "Dominio"
|
||||
|
||||
@@ -2078,7 +2144,7 @@ msgstr "Clave HMAC EAB"
|
||||
msgid "EAB Key ID"
|
||||
msgstr "ID de clave EAB"
|
||||
|
||||
#: src/language/curd.ts:8
|
||||
#: src/language/curd.ts:8 src/views/dns/components/DNSRecordTable.vue:87
|
||||
msgid "Edit"
|
||||
msgstr "Editar"
|
||||
|
||||
@@ -2092,6 +2158,10 @@ msgstr "Editar %{n}"
|
||||
msgid "Edit Configuration"
|
||||
msgstr "Editar Configuración"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Edit Record"
|
||||
msgstr "Editar registro"
|
||||
|
||||
#: src/routes/modules/sites.ts:34
|
||||
msgid "Edit Site"
|
||||
msgstr "Editar Sitio"
|
||||
@@ -2142,6 +2212,10 @@ msgstr "Habilitar finalización de código"
|
||||
msgid "Enable compression for content transfer"
|
||||
msgstr "Habilitar compresión para transferencia de contenido"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:218
|
||||
msgid "Enable DDNS"
|
||||
msgstr "Habilitar DDNS"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:473
|
||||
msgid "Enable Health Check"
|
||||
msgstr "Habilitar verificación de salud"
|
||||
@@ -2229,7 +2303,8 @@ msgid "Enable TOTP"
|
||||
msgstr "Habilitar TOTP"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:174
|
||||
#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:69
|
||||
#: src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:47
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:20
|
||||
@@ -3203,14 +3278,19 @@ msgstr "Un valor más alto significa una mejor reutilización de la conexión"
|
||||
msgid "History"
|
||||
msgstr "Historial"
|
||||
|
||||
#: src/routes/index.ts:52
|
||||
#: src/routes/index.ts:54
|
||||
msgid "Home"
|
||||
msgstr "Inicio"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:42
|
||||
#: src/views/preference/tabs/ServerSettings.vue:19
|
||||
msgid "Host"
|
||||
msgstr "Host"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:45
|
||||
msgid "Host, e.g. @ or www"
|
||||
msgstr "Host, p. ej. @ o www"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:159
|
||||
#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87
|
||||
msgid "Hour"
|
||||
@@ -3284,7 +3364,7 @@ msgstr ""
|
||||
msgid "Import"
|
||||
msgstr "Importar"
|
||||
|
||||
#: src/routes/modules/certificates.ts:54
|
||||
#: src/routes/modules/certificates.ts:46
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Import Certificate"
|
||||
msgstr "Importar Certificado"
|
||||
@@ -3407,10 +3487,15 @@ msgstr ""
|
||||
"No se permite la instalación después de 10 minutos del inicio del sistema, "
|
||||
"por favor reinicie la interfaz de Nginx."
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:79
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:26
|
||||
msgid "Interval"
|
||||
msgstr "Intervalo"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:232
|
||||
msgid "Interval (seconds)"
|
||||
msgstr "Intervalo (segundos)"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:166
|
||||
msgid "Invalid"
|
||||
msgstr "Inválido"
|
||||
@@ -3639,6 +3724,10 @@ msgstr "Última indexación"
|
||||
msgid "Last month"
|
||||
msgstr "Mes pasado"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:87
|
||||
msgid "Last run"
|
||||
msgstr "Última ejecución"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:138
|
||||
msgid "Last update"
|
||||
msgstr "Última actualización"
|
||||
@@ -3909,6 +3998,10 @@ msgstr ""
|
||||
msgid "Manage Configs"
|
||||
msgstr "Administrar configuraciones"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:236
|
||||
msgid "Manage Records"
|
||||
msgstr "Gestionar registros"
|
||||
|
||||
#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45
|
||||
msgid "Manage Sites"
|
||||
msgstr "Administrar sitios"
|
||||
@@ -4079,7 +4172,7 @@ msgstr "Modificado el"
|
||||
msgid "Modify"
|
||||
msgstr "Modificar"
|
||||
|
||||
#: src/routes/modules/certificates.ts:44
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Modify Certificate"
|
||||
msgstr "Modificar Certificado"
|
||||
@@ -4140,11 +4233,13 @@ msgstr "N/A"
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:44
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:58
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:70
|
||||
#: src/views/certificate/DNSCredential.vue:17
|
||||
#: src/views/config/components/ConfigRightPanel/Basic.vue:34
|
||||
#: src/views/config/components/Delete.vue:123
|
||||
#: src/views/config/components/Mkdir.vue:64
|
||||
#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/config/configColumns.tsx:17
|
||||
#: src/views/dns/components/DNSRecordForm.vue:63
|
||||
#: src/views/dns/components/DNSRecordTable.vue:17
|
||||
#: src/views/dns/DNSCredential.vue:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/nginx_log/NginxLogList.vue:155 src/views/node/nodeColumns.tsx:8
|
||||
#: src/views/preference/components/AuthSettings/AddPasskey.vue:81
|
||||
#: src/views/site/site_edit/components/RightPanel/Basic.vue:36
|
||||
@@ -4172,6 +4267,14 @@ msgstr "Espacio de nombres"
|
||||
msgid "Namespaces"
|
||||
msgstr "Espacios de nombres"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:251
|
||||
msgid ""
|
||||
"Need more DNS providers? Support us through donations or contact us for "
|
||||
"commercial collaboration"
|
||||
msgstr ""
|
||||
"¿Necesita más proveedores de DNS? Apóyenos a través de donaciones o "
|
||||
"contáctenos para colaboración comercial"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:195
|
||||
msgid "Need to enable the stub_status module"
|
||||
msgstr "Es necesario habilitar el módulo stub_status"
|
||||
@@ -4567,6 +4670,10 @@ msgstr "No indexado"
|
||||
msgid "Not Loaded"
|
||||
msgstr "No cargado"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:102
|
||||
msgid "Not run yet"
|
||||
msgstr "Aún no ejecutado"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:230
|
||||
msgid "Not supported for IP certificates"
|
||||
msgstr "No compatible con certificados de IP"
|
||||
@@ -4576,7 +4683,7 @@ msgid "Not Valid Before: %{date}"
|
||||
msgstr "No válido antes: %{date}"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:150
|
||||
#: src/views/certificate/DNSCredential.vue:89
|
||||
#: src/views/dns/DNSCredential.vue:89
|
||||
msgid "Note"
|
||||
msgstr "Nota"
|
||||
|
||||
@@ -4709,10 +4816,6 @@ msgstr "OK"
|
||||
msgid "On"
|
||||
msgstr "Encendido"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:99
|
||||
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:164
|
||||
#: src/components/NodeCard/NodeCard.vue:51
|
||||
#: src/components/NodeSelector/NodeSelector.vue:65
|
||||
@@ -5007,7 +5110,7 @@ msgstr "Por favor, complete todos los campos correctamente"
|
||||
msgid "Please fill in required S3 configuration fields"
|
||||
msgstr "Por favor, complete los campos de configuración de S3 requeridos"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:93
|
||||
#: src/views/dns/DNSCredential.vue:93
|
||||
msgid ""
|
||||
"Please fill in the API authentication credentials provided by your DNS "
|
||||
"provider."
|
||||
@@ -5075,7 +5178,7 @@ msgstr "¡Por favor ingrese su nombre de usuario!"
|
||||
msgid "Please log in."
|
||||
msgstr "Por favor, inicie sesión."
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:102
|
||||
#: src/views/dns/DNSCredential.vue:96
|
||||
msgid "Please note that the unit of time configurations below are all in seconds."
|
||||
msgstr ""
|
||||
"Tenga en cuenta que las siguientes configuraciones de unidades de tiempo "
|
||||
@@ -5159,6 +5262,11 @@ msgstr "Configuración"
|
||||
msgid "Preparing lego configurations"
|
||||
msgstr "Preparar la configuración de LEGO"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:81
|
||||
#: src/views/dns/components/DNSRecordTable.vue:33
|
||||
msgid "Priority"
|
||||
msgstr "Prioridad"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:206
|
||||
msgid "Private CA:"
|
||||
msgstr "CA privada:"
|
||||
@@ -5222,7 +5330,8 @@ msgstr ""
|
||||
"directamente. Si utiliza un proxy inverso, configure el protocolo por "
|
||||
"separado en el proxy inverso."
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:26
|
||||
#: src/views/dns/DDNSManager.vue:70 src/views/dns/DNSCredential.vue:26
|
||||
#: src/views/dns/DNSDomainList.vue:177 src/views/dns/DNSDomainList.vue:198
|
||||
msgid "Provider"
|
||||
msgstr "Proveedor"
|
||||
|
||||
@@ -5234,6 +5343,12 @@ msgstr "Proveedor no encontrado: {0}"
|
||||
msgid "Province / Region"
|
||||
msgstr "Provincia / Región"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:87
|
||||
#: src/views/dns/components/DNSRecordTable.vue:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "Proxied"
|
||||
msgstr "Proxy"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:63
|
||||
msgid "Proxy"
|
||||
msgstr "Proxy"
|
||||
@@ -5328,6 +5443,22 @@ msgstr "Volver a comprobar"
|
||||
msgid "Recommended:"
|
||||
msgstr "Recomendado:"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:113
|
||||
msgid "Record created"
|
||||
msgstr "Registro creado"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:120
|
||||
msgid "Record deleted"
|
||||
msgstr "Registro eliminado"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:109
|
||||
msgid "Record updated"
|
||||
msgstr "Registro actualizado"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:221
|
||||
msgid "Records"
|
||||
msgstr "Registros"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:79
|
||||
msgid "Recovery"
|
||||
msgstr "Recuperación"
|
||||
@@ -5358,7 +5489,8 @@ msgstr "Mensajes de redirección (3xx)"
|
||||
msgid "Referer"
|
||||
msgstr "Referente"
|
||||
|
||||
#: src/language/curd.ts:70
|
||||
#: src/language/curd.ts:70 src/views/dns/DDNSManager.vue:161
|
||||
#: src/views/dns/DNSRecordManager.vue:165
|
||||
msgid "Refresh"
|
||||
msgstr "Actualizar"
|
||||
|
||||
@@ -5600,7 +5732,7 @@ msgstr "Pedido con parámetros incorrectos"
|
||||
msgid "Requests Per Connection"
|
||||
msgstr "Solicitudes por conexión"
|
||||
|
||||
#: src/language/curd.ts:13
|
||||
#: src/language/curd.ts:13 src/views/dns/components/DNSRecordFilter.vue:65
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:214
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:745
|
||||
msgid "Reset"
|
||||
@@ -5841,6 +5973,7 @@ msgstr "Sábado"
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:283
|
||||
#: src/views/config/components/ConfigName.vue:58
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:713
|
||||
#: src/views/dns/DDNSManager.vue:247 src/views/dns/DNSRecordManager.vue:215
|
||||
#: src/views/preference/components/AuthSettings/Passkey.vue:131
|
||||
#: src/views/preference/Preference.vue:124
|
||||
#: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52
|
||||
@@ -5948,12 +6081,13 @@ msgstr "Programación"
|
||||
msgid "Schedule Type"
|
||||
msgstr "Tipo de programación"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:77
|
||||
#: src/views/dns/components/DNSChallenge.vue:78
|
||||
msgid "SDK"
|
||||
msgstr "SDK"
|
||||
|
||||
#: src/language/constants.ts:62 src/language/curd.ts:12
|
||||
#: src/views/config/configColumns.tsx:5
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:62
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:217
|
||||
#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13
|
||||
msgid "Search"
|
||||
@@ -6012,10 +6146,18 @@ msgstr ""
|
||||
msgid "Select all"
|
||||
msgstr "Seleccionar todo"
|
||||
|
||||
#: src/language/constants.ts:68
|
||||
msgid "Select Credential"
|
||||
msgstr "Seleccionar credencial"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:45
|
||||
msgid "Select or enter a CA directory URL"
|
||||
msgstr "Seleccione o ingrese una URL de directorio CA"
|
||||
|
||||
#: src/language/constants.ts:67
|
||||
msgid "Select Provider"
|
||||
msgstr "Seleccionar proveedor"
|
||||
|
||||
#: src/language/curd.ts:59
|
||||
msgid "Selected {count} files"
|
||||
msgstr "Seleccionados {count} archivos"
|
||||
@@ -6347,6 +6489,7 @@ msgstr "Estático"
|
||||
#: src/views/certificate/ACMEUser.vue:75
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:63
|
||||
#: src/views/dashboard/components/ModulesTable.vue:75
|
||||
#: src/views/dns/DDNSManager.vue:75
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:106
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:241
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:521
|
||||
@@ -6578,6 +6721,10 @@ msgstr "Restauración del sistema"
|
||||
msgid "System restored successfully."
|
||||
msgstr "Sistema restaurado correctamente."
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:83
|
||||
msgid "Targets"
|
||||
msgstr "Objetivos"
|
||||
|
||||
#: src/constants/errors/self_check.ts:3
|
||||
msgid "Task is not fixable"
|
||||
msgstr "La tarea no es reparable"
|
||||
@@ -7125,6 +7272,14 @@ msgstr "Intente ajustar sus criterios de búsqueda o navegar a diferentes págin
|
||||
msgid "Try adjusting your search criteria or time range."
|
||||
msgstr "Intente ajustar sus criterios de búsqueda o el rango de tiempo."
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:29
|
||||
msgid "TTL"
|
||||
msgstr "TTL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:78
|
||||
msgid "TTL (seconds)"
|
||||
msgstr "TTL (segundos)"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:28
|
||||
msgid "Tuesday"
|
||||
msgstr "Martes"
|
||||
@@ -7137,6 +7292,9 @@ msgstr "Se requiere autenticación de dos factores"
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:24
|
||||
#: src/views/config/components/Delete.vue:122
|
||||
#: src/views/dashboard/components/ModulesTable.vue:62
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:49
|
||||
#: src/views/dns/components/DNSRecordForm.vue:57
|
||||
#: src/views/dns/components/DNSRecordTable.vue:21
|
||||
#: src/views/nginx_log/NginxLogList.vue:146
|
||||
#: src/views/notification/notificationColumns.tsx:8
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:19
|
||||
@@ -7147,6 +7305,10 @@ msgstr "Tipo"
|
||||
msgid "Type %{delete} to confirm"
|
||||
msgstr "Escriba %{delete} para confirmar"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:228
|
||||
msgid "Type or select A/AAAA records"
|
||||
msgstr "Escriba o seleccione registros A/AAAA"
|
||||
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:142
|
||||
msgid "Type or select browser"
|
||||
msgstr "Escriba o seleccione el navegador"
|
||||
@@ -7202,9 +7364,9 @@ msgstr "Actualización exitosa"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:236
|
||||
#: 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:91
|
||||
#: src/views/config/configColumns.tsx:44 src/views/dns/DNSCredential.vue:65
|
||||
#: src/views/dns/DNSDomainList.vue:205 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
|
||||
@@ -7277,6 +7439,10 @@ msgstr "Tiempo encendido:"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:64
|
||||
msgid "Use @ for root"
|
||||
msgstr "Usa @ para la raíz"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:121
|
||||
msgid "Use OTP"
|
||||
msgstr "Usar OTP"
|
||||
@@ -7342,6 +7508,8 @@ msgid "Validate SSL Certificate"
|
||||
msgstr "Validar certificado SSL"
|
||||
|
||||
#: src/views/dashboard/components/PerformanceTablesCard.vue:22
|
||||
#: src/views/dns/components/DNSRecordForm.vue:66
|
||||
#: src/views/dns/components/DNSRecordTable.vue:25
|
||||
msgid "Value"
|
||||
msgstr "Valor"
|
||||
|
||||
@@ -7438,14 +7606,6 @@ msgstr ""
|
||||
msgid "We do not accept any feature requests"
|
||||
msgstr "No aceptamos solicitudes de funciones"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:96
|
||||
msgid ""
|
||||
"We will add one or more TXT records to the DNS records of your domain for "
|
||||
"ownership verification."
|
||||
msgstr ""
|
||||
"Agregaremos uno o más registros TXT a los registros DNS de su dominio para "
|
||||
"verificar la propiedad."
|
||||
|
||||
#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
|
||||
msgid ""
|
||||
"We will remove the HTTPChallenge configuration from this file and reload "
|
||||
@@ -7482,6 +7642,11 @@ msgstr "Semanal"
|
||||
msgid "Weekly on %{day} at %{time}"
|
||||
msgstr "Semanalmente el %{day} a las %{time}"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:84
|
||||
#: src/views/dns/components/DNSRecordTable.vue:37
|
||||
msgid "Weight"
|
||||
msgstr "Peso"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:119
|
||||
msgid ""
|
||||
"When Enabled, Nginx UI will automatically re-register users upon startup. "
|
||||
@@ -7533,7 +7698,7 @@ msgstr "Procesos de trabajo"
|
||||
msgid "Workers"
|
||||
msgstr "Trabajadores"
|
||||
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:63
|
||||
#: src/views/workspace/WorkSpace.vue:51
|
||||
msgid "Workspace"
|
||||
msgstr "Espacio de trabajo"
|
||||
@@ -7640,6 +7805,16 @@ msgstr "Sus llaves de acceso"
|
||||
msgid "Zero-allocation pipeline"
|
||||
msgstr "Canalización sin asignación"
|
||||
|
||||
#~ 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."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "We will add one or more TXT records to the DNS records of your domain for "
|
||||
#~ "ownership verification."
|
||||
#~ msgstr ""
|
||||
#~ "Agregaremos uno o más registros TXT a los registros DNS de su dominio para "
|
||||
#~ "verificar la propiedad."
|
||||
|
||||
#~ msgid "Settings"
|
||||
#~ msgstr "Configuración"
|
||||
|
||||
@@ -7661,9 +7836,6 @@ msgstr "Canalización sin asignación"
|
||||
#~ 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)"
|
||||
|
||||
@@ -7869,9 +8041,6 @@ msgstr "Canalización sin asignación"
|
||||
#~ msgid "Are you sure you want to apply to all selected?"
|
||||
#~ msgstr "¿Estás seguro de que deseas aplicar a todos los seleccionados?"
|
||||
|
||||
#~ msgid "Are you sure you want to delete this item?"
|
||||
#~ msgstr "¿Está seguro de que quiere borrar este elemento?"
|
||||
|
||||
#~ msgid "Are you sure you want to recover this item?"
|
||||
#~ msgstr "¿Está seguro de que quiere recuperar este elemento?"
|
||||
|
||||
@@ -8138,9 +8307,6 @@ msgstr "Canalización sin asignación"
|
||||
#~ msgid "Dark"
|
||||
#~ msgstr "Oscuro"
|
||||
|
||||
#~ msgid "Light"
|
||||
#~ msgstr "Claro"
|
||||
|
||||
#~ msgid "Theme"
|
||||
#~ msgstr "Tema"
|
||||
|
||||
|
||||
+218
-52
@@ -194,8 +194,10 @@ msgstr "Action"
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:273
|
||||
#: 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:97
|
||||
#: src/views/config/configColumns.tsx:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:41
|
||||
#: src/views/dns/DDNSManager.vue:91 src/views/dns/DNSCredential.vue:71
|
||||
#: src/views/dns/DNSDomainList.vue:211 src/views/namespace/columns.ts:97
|
||||
#: src/views/nginx_log/NginxLogList.vue:338 src/views/node/nodeColumns.tsx:96
|
||||
#: src/views/notification/notificationColumns.tsx:72
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:85
|
||||
@@ -249,6 +251,10 @@ msgstr "Ajouter un en-tête"
|
||||
msgid "Add Location"
|
||||
msgstr "Ajouter une localisation"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:171
|
||||
msgid "Add Record"
|
||||
msgstr "Ajouter un enregistrement"
|
||||
|
||||
#: src/components/NgxConfigEditor/NgxServer.vue:92
|
||||
msgid "Add Server"
|
||||
msgstr "Ajouter un serveur"
|
||||
@@ -269,7 +275,7 @@ msgstr "Ajouter un upstream"
|
||||
msgid "Added successfully"
|
||||
msgstr "Ajouté avec succès"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:97
|
||||
#: src/views/dns/components/DNSChallenge.vue:98
|
||||
msgid "Additional"
|
||||
msgstr "Supplémentaire"
|
||||
|
||||
@@ -310,6 +316,10 @@ msgstr ""
|
||||
"Ensuite, rafraîchissez cette page et cliquez à nouveau sur ajouter une clé "
|
||||
"d'accès."
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:55
|
||||
msgid "All"
|
||||
msgstr "Tous"
|
||||
|
||||
#: src/views/system/Licenses.vue:152
|
||||
msgid "All Components"
|
||||
msgstr "Tous les composants"
|
||||
@@ -354,7 +364,7 @@ msgstr ""
|
||||
msgid "API Base Url"
|
||||
msgstr "URL de base de l'API"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:70
|
||||
#: src/views/dns/components/DNSChallenge.vue:71
|
||||
msgid "API Document"
|
||||
msgstr "Documentation API"
|
||||
|
||||
@@ -390,6 +400,10 @@ msgstr "Êtes-vous sûr de vouloir supprimer immédiatement cette IP bannie ?"
|
||||
msgid "Are you sure to delete this passkey immediately?"
|
||||
msgstr "Êtes-vous sûr de vouloir supprimer immédiatement cette clé d'accès ?"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:90
|
||||
msgid "Are you sure to delete this record?"
|
||||
msgstr "Êtes-vous sûr de vouloir supprimer cet enregistrement ?"
|
||||
|
||||
#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155
|
||||
msgid "Are you sure to generate new recovery codes?"
|
||||
msgstr "Êtes-vous sûr de vouloir générer de nouveaux codes de récupération ?"
|
||||
@@ -563,7 +577,7 @@ msgstr "Moy./PV"
|
||||
#: src/views/certificate/components/CertificateActions.vue:22
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:274
|
||||
#: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217
|
||||
#: src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/dns/DNSRecordManager.vue:223 src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183
|
||||
#: src/views/stream/components/StreamEditor.vue:147
|
||||
msgid "Back"
|
||||
@@ -721,6 +735,10 @@ msgstr "Navigateur"
|
||||
msgid "Browser Statistics"
|
||||
msgstr "Statistiques du navigateur"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:257
|
||||
msgid "Business contact:"
|
||||
msgstr "Contact commercial :"
|
||||
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:316
|
||||
msgid ""
|
||||
"By enabling advanced indexing, you acknowledge that your system meets the "
|
||||
@@ -793,6 +811,7 @@ msgstr ""
|
||||
#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37
|
||||
#: src/views/config/components/Delete.vue:98
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:710
|
||||
#: src/views/dns/DDNSManager.vue:244 src/views/dns/DNSRecordManager.vue:212
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:102
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:33
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:59
|
||||
@@ -938,7 +957,7 @@ msgstr "Type de certificat"
|
||||
msgid "Certificates"
|
||||
msgstr "Certificats"
|
||||
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
msgid "Certificates List"
|
||||
msgstr "Liste des certificats"
|
||||
|
||||
@@ -1326,7 +1345,7 @@ msgstr "Le chemin de configuration est vide"
|
||||
msgid "Config Template"
|
||||
msgstr "Modèle de configuration"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:52
|
||||
#: src/views/dns/DNSCredential.vue:52
|
||||
msgid "Configuration"
|
||||
msgstr "Configuration"
|
||||
|
||||
@@ -1356,6 +1375,14 @@ msgstr "Nom de la configuration"
|
||||
msgid "Configurations"
|
||||
msgstr "Configurations"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:201
|
||||
msgid "Configure"
|
||||
msgstr "Configurer"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:211
|
||||
msgid "Configure DDNS"
|
||||
msgstr "Configurer DDNS"
|
||||
|
||||
#: src/views/site/site_add/SiteAdd.vue:81
|
||||
msgid "Configure SSL"
|
||||
msgstr "Configurer SSL"
|
||||
@@ -1479,6 +1506,10 @@ msgstr "Créer un fichier"
|
||||
msgid "Create Folder"
|
||||
msgstr "Créer un dossier"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Create Record"
|
||||
msgstr "Créer un enregistrement"
|
||||
|
||||
#: src/views/backup/components/BackupCreator.vue:75
|
||||
msgid ""
|
||||
"Create system backups including Nginx configuration and Nginx UI settings. "
|
||||
@@ -1505,11 +1536,12 @@ msgstr "Créé avec succès"
|
||||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr "La création du client facilite la communication avec le serveur CA"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:105
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:131
|
||||
#: src/views/dns/DDNSManager.vue:65 src/views/dns/DNSDomainList.vue:109
|
||||
msgid "Credential"
|
||||
msgstr "Identifiant"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:86
|
||||
#: src/routes/modules/dns.ts:20 src/views/dns/components/DNSChallenge.vue:87
|
||||
msgid "Credentials"
|
||||
msgstr "Identifiants"
|
||||
|
||||
@@ -1626,6 +1658,18 @@ msgstr "Jours"
|
||||
msgid "Db file not found"
|
||||
msgstr "Fichier de base de données introuvable"
|
||||
|
||||
#: src/routes/modules/dns.ts:36
|
||||
msgid "DDNS"
|
||||
msgstr "DDNS"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:153
|
||||
msgid "DDNS Overview"
|
||||
msgstr "Aperçu du DDNS"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:135
|
||||
msgid "DDNS saved"
|
||||
msgstr "DDNS enregistré"
|
||||
|
||||
#: src/constants/errors/geolite.ts:12
|
||||
msgid "Decompression succeeded but failed to delete compressed file: {0}"
|
||||
msgstr ""
|
||||
@@ -1654,6 +1698,7 @@ msgstr ""
|
||||
#: src/views/config/components/Delete.vue:65
|
||||
#: src/views/config/components/Delete.vue:97
|
||||
#: src/views/config/ConfigList.vue:199
|
||||
#: src/views/dns/components/DNSRecordTable.vue:94
|
||||
#: src/views/site/site_list/SiteList.vue:100
|
||||
#: src/views/stream/StreamList.vue:110
|
||||
msgid "Delete"
|
||||
@@ -1895,7 +1940,8 @@ msgid "Disable stream %{name} from %{node} successfully"
|
||||
msgstr "Désactivation du flux %{name} depuis %{node} réussie"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:175
|
||||
#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:60
|
||||
#: src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/NodeSettings.vue:25
|
||||
#: src/views/preference/tabs/NodeSettings.vue:30
|
||||
@@ -1920,16 +1966,35 @@ msgstr "Déconnecté"
|
||||
msgid "Disk IO"
|
||||
msgstr "E/S disque"
|
||||
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
#: src/views/certificate/DNSCredential.vue:79
|
||||
#: src/routes/modules/dns.ts:11
|
||||
msgid "DNS"
|
||||
msgstr "DNS"
|
||||
|
||||
#: src/views/dns/DNSCredential.vue:79
|
||||
msgid "DNS Credentials"
|
||||
msgstr "Identifiants DNS"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:95
|
||||
#: src/views/certificate/components/DNSChallenge.vue:59
|
||||
#: src/routes/modules/dns.ts:28 src/views/dns/DNSDomainList.vue:228
|
||||
msgid "DNS Domains"
|
||||
msgstr "Domaines DNS"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "DNS Only"
|
||||
msgstr "DNS uniquement"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:121
|
||||
#: src/views/dns/components/DNSChallenge.vue:60
|
||||
msgid "DNS Provider"
|
||||
msgstr "Fournisseur DNS"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:244
|
||||
msgid "DNS Provider Support"
|
||||
msgstr "Support du fournisseur DNS"
|
||||
|
||||
#: src/routes/modules/dns.ts:44 src/views/dns/DNSRecordManager.vue:58
|
||||
msgid "DNS Records"
|
||||
msgstr "Enregistrements DNS"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:678
|
||||
msgid "DNS Resolver"
|
||||
msgstr "Résolveur DNS"
|
||||
@@ -1990,6 +2055,7 @@ msgid "Document Count"
|
||||
msgstr "Nombre de documents"
|
||||
|
||||
#: src/views/certificate/components/DNSIssueCertificate.vue:119
|
||||
#: src/views/dns/DDNSManager.vue:60 src/views/dns/DNSDomainList.vue:98
|
||||
msgid "Domain"
|
||||
msgstr "Domaine"
|
||||
|
||||
@@ -2078,7 +2144,7 @@ msgstr "Clé HMAC EAB"
|
||||
msgid "EAB Key ID"
|
||||
msgstr "ID de clé EAB"
|
||||
|
||||
#: src/language/curd.ts:8
|
||||
#: src/language/curd.ts:8 src/views/dns/components/DNSRecordTable.vue:87
|
||||
msgid "Edit"
|
||||
msgstr "Modifier"
|
||||
|
||||
@@ -2092,6 +2158,10 @@ msgstr "Modifier %{n}"
|
||||
msgid "Edit Configuration"
|
||||
msgstr "Modifier la configuration"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Edit Record"
|
||||
msgstr "Modifier l'enregistrement"
|
||||
|
||||
#: src/routes/modules/sites.ts:34
|
||||
msgid "Edit Site"
|
||||
msgstr "Modifier le site"
|
||||
@@ -2142,6 +2212,10 @@ msgstr "Activer la complétion de code"
|
||||
msgid "Enable compression for content transfer"
|
||||
msgstr "Activer la compression pour le transfert de contenu"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:218
|
||||
msgid "Enable DDNS"
|
||||
msgstr "Activer DDNS"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:473
|
||||
msgid "Enable Health Check"
|
||||
msgstr "Activer la vérification de santé"
|
||||
@@ -2229,7 +2303,8 @@ msgid "Enable TOTP"
|
||||
msgstr "Activer TOTP"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:174
|
||||
#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:69
|
||||
#: src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:47
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:20
|
||||
@@ -3203,14 +3278,19 @@ msgstr "Une valeur plus élevée signifie une meilleure réutilisation de la con
|
||||
msgid "History"
|
||||
msgstr "Historique"
|
||||
|
||||
#: src/routes/index.ts:52
|
||||
#: src/routes/index.ts:54
|
||||
msgid "Home"
|
||||
msgstr "Menu principal"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:42
|
||||
#: src/views/preference/tabs/ServerSettings.vue:19
|
||||
msgid "Host"
|
||||
msgstr "Hôte"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:45
|
||||
msgid "Host, e.g. @ or www"
|
||||
msgstr "Hôte, par ex. @ ou www"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:159
|
||||
#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87
|
||||
msgid "Hour"
|
||||
@@ -3288,7 +3368,7 @@ msgstr ""
|
||||
msgid "Import"
|
||||
msgstr "Importer"
|
||||
|
||||
#: src/routes/modules/certificates.ts:54
|
||||
#: src/routes/modules/certificates.ts:46
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Import Certificate"
|
||||
msgstr "Importer un certificat"
|
||||
@@ -3411,10 +3491,15 @@ msgstr ""
|
||||
"L'installation n'est pas autorisée après 10 minutes de démarrage du "
|
||||
"système, veuillez redémarrer l'interface Nginx."
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:79
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:26
|
||||
msgid "Interval"
|
||||
msgstr "Intervalle"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:232
|
||||
msgid "Interval (seconds)"
|
||||
msgstr "Intervalle (secondes)"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:166
|
||||
msgid "Invalid"
|
||||
msgstr "Invalide"
|
||||
@@ -3643,6 +3728,10 @@ msgstr "Dernière indexation"
|
||||
msgid "Last month"
|
||||
msgstr "Mois dernier"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:87
|
||||
msgid "Last run"
|
||||
msgstr "Dernière exécution"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:138
|
||||
msgid "Last update"
|
||||
msgstr "Dernière mise à jour"
|
||||
@@ -3913,6 +4002,10 @@ msgstr ""
|
||||
msgid "Manage Configs"
|
||||
msgstr "Gérer les configurations"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:236
|
||||
msgid "Manage Records"
|
||||
msgstr "Gérer les enregistrements"
|
||||
|
||||
#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45
|
||||
msgid "Manage Sites"
|
||||
msgstr "Gérer les sites"
|
||||
@@ -4083,7 +4176,7 @@ msgstr "Modifié le"
|
||||
msgid "Modify"
|
||||
msgstr "Modifier"
|
||||
|
||||
#: src/routes/modules/certificates.ts:44
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Modify Certificate"
|
||||
msgstr "Modifier le certificat"
|
||||
@@ -4144,11 +4237,13 @@ msgstr "N/D"
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:44
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:58
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:70
|
||||
#: src/views/certificate/DNSCredential.vue:17
|
||||
#: src/views/config/components/ConfigRightPanel/Basic.vue:34
|
||||
#: src/views/config/components/Delete.vue:123
|
||||
#: src/views/config/components/Mkdir.vue:64
|
||||
#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/config/configColumns.tsx:17
|
||||
#: src/views/dns/components/DNSRecordForm.vue:63
|
||||
#: src/views/dns/components/DNSRecordTable.vue:17
|
||||
#: src/views/dns/DNSCredential.vue:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/nginx_log/NginxLogList.vue:155 src/views/node/nodeColumns.tsx:8
|
||||
#: src/views/preference/components/AuthSettings/AddPasskey.vue:81
|
||||
#: src/views/site/site_edit/components/RightPanel/Basic.vue:36
|
||||
@@ -4176,6 +4271,14 @@ msgstr "Espace de noms"
|
||||
msgid "Namespaces"
|
||||
msgstr "Espaces de noms"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:251
|
||||
msgid ""
|
||||
"Need more DNS providers? Support us through donations or contact us for "
|
||||
"commercial collaboration"
|
||||
msgstr ""
|
||||
"Vous avez besoin de plus de fournisseurs DNS ? Soutenez-nous par des dons "
|
||||
"ou contactez-nous pour une collaboration commerciale"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:195
|
||||
msgid "Need to enable the stub_status module"
|
||||
msgstr "Il faut activer le module stub_status"
|
||||
@@ -4570,6 +4673,10 @@ msgstr "Non indexé"
|
||||
msgid "Not Loaded"
|
||||
msgstr "Non chargé"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:102
|
||||
msgid "Not run yet"
|
||||
msgstr "Pas encore exécuté"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:230
|
||||
msgid "Not supported for IP certificates"
|
||||
msgstr "Non pris en charge pour les certificats IP"
|
||||
@@ -4579,7 +4686,7 @@ msgid "Not Valid Before: %{date}"
|
||||
msgstr "Non valide avant : %{date}"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:150
|
||||
#: src/views/certificate/DNSCredential.vue:89
|
||||
#: src/views/dns/DNSCredential.vue:89
|
||||
msgid "Note"
|
||||
msgstr "Note"
|
||||
|
||||
@@ -4711,10 +4818,6 @@ msgstr "OK"
|
||||
msgid "On"
|
||||
msgstr "Activé"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:99
|
||||
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:164
|
||||
#: src/components/NodeCard/NodeCard.vue:51
|
||||
#: src/components/NodeSelector/NodeSelector.vue:65
|
||||
@@ -5009,7 +5112,7 @@ msgstr "Veuillez remplir tous les champs correctement"
|
||||
msgid "Please fill in required S3 configuration fields"
|
||||
msgstr "Veuillez remplir les champs de configuration S3 requis"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:93
|
||||
#: src/views/dns/DNSCredential.vue:93
|
||||
msgid ""
|
||||
"Please fill in the API authentication credentials provided by your DNS "
|
||||
"provider."
|
||||
@@ -5077,7 +5180,7 @@ msgstr "Veuillez saisir votre nom d'utilisateur !"
|
||||
msgid "Please log in."
|
||||
msgstr "Veuillez vous connecter."
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:102
|
||||
#: src/views/dns/DNSCredential.vue:96
|
||||
msgid "Please note that the unit of time configurations below are all in seconds."
|
||||
msgstr ""
|
||||
"Veuillez noter que les unités de temps des configurations ci-dessous sont "
|
||||
@@ -5161,6 +5264,11 @@ msgstr "Préférence"
|
||||
msgid "Preparing lego configurations"
|
||||
msgstr "Préparation des configurations Lego"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:81
|
||||
#: src/views/dns/components/DNSRecordTable.vue:33
|
||||
msgid "Priority"
|
||||
msgstr "Priorité"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:206
|
||||
msgid "Private CA:"
|
||||
msgstr "CA privée :"
|
||||
@@ -5224,7 +5332,8 @@ msgstr ""
|
||||
"directe. Si vous utilisez un proxy inverse, veuillez configurer le "
|
||||
"protocole séparément dans le proxy inverse."
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:26
|
||||
#: src/views/dns/DDNSManager.vue:70 src/views/dns/DNSCredential.vue:26
|
||||
#: src/views/dns/DNSDomainList.vue:177 src/views/dns/DNSDomainList.vue:198
|
||||
msgid "Provider"
|
||||
msgstr "Fournisseur"
|
||||
|
||||
@@ -5236,6 +5345,12 @@ msgstr "Fournisseur introuvable : {0}"
|
||||
msgid "Province / Region"
|
||||
msgstr "Province / Région"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:87
|
||||
#: src/views/dns/components/DNSRecordTable.vue:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "Proxied"
|
||||
msgstr "Proxifié"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:63
|
||||
msgid "Proxy"
|
||||
msgstr "Proxy"
|
||||
@@ -5330,6 +5445,22 @@ msgstr "Vérifier à nouveau"
|
||||
msgid "Recommended:"
|
||||
msgstr "Recommandé :"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:113
|
||||
msgid "Record created"
|
||||
msgstr "Enregistrement créé"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:120
|
||||
msgid "Record deleted"
|
||||
msgstr "Enregistrement supprimé"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:109
|
||||
msgid "Record updated"
|
||||
msgstr "Enregistrement mis à jour"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:221
|
||||
msgid "Records"
|
||||
msgstr "Enregistrements"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:79
|
||||
msgid "Recovery"
|
||||
msgstr "Récupération"
|
||||
@@ -5360,7 +5491,8 @@ msgstr "Messages de redirection (3xx)"
|
||||
msgid "Referer"
|
||||
msgstr "Référent"
|
||||
|
||||
#: src/language/curd.ts:70
|
||||
#: src/language/curd.ts:70 src/views/dns/DDNSManager.vue:161
|
||||
#: src/views/dns/DNSRecordManager.vue:165
|
||||
msgid "Refresh"
|
||||
msgstr "Actualiser"
|
||||
|
||||
@@ -5604,7 +5736,7 @@ msgstr "Demandé avec des paramètres incorrects"
|
||||
msgid "Requests Per Connection"
|
||||
msgstr "Requêtes par connexion"
|
||||
|
||||
#: src/language/curd.ts:13
|
||||
#: src/language/curd.ts:13 src/views/dns/components/DNSRecordFilter.vue:65
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:214
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:745
|
||||
msgid "Reset"
|
||||
@@ -5845,6 +5977,7 @@ msgstr "Samedi"
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:283
|
||||
#: src/views/config/components/ConfigName.vue:58
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:713
|
||||
#: src/views/dns/DDNSManager.vue:247 src/views/dns/DNSRecordManager.vue:215
|
||||
#: src/views/preference/components/AuthSettings/Passkey.vue:131
|
||||
#: src/views/preference/Preference.vue:124
|
||||
#: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52
|
||||
@@ -5952,12 +6085,13 @@ msgstr "Planification"
|
||||
msgid "Schedule Type"
|
||||
msgstr "Type de planification"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:77
|
||||
#: src/views/dns/components/DNSChallenge.vue:78
|
||||
msgid "SDK"
|
||||
msgstr "SDK"
|
||||
|
||||
#: src/language/constants.ts:62 src/language/curd.ts:12
|
||||
#: src/views/config/configColumns.tsx:5
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:62
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:217
|
||||
#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13
|
||||
msgid "Search"
|
||||
@@ -6016,10 +6150,18 @@ msgstr ""
|
||||
msgid "Select all"
|
||||
msgstr "Tout sélectionner"
|
||||
|
||||
#: src/language/constants.ts:68
|
||||
msgid "Select Credential"
|
||||
msgstr "Sélectionner les identifiants"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:45
|
||||
msgid "Select or enter a CA directory URL"
|
||||
msgstr "Sélectionnez ou entrez une URL de répertoire CA"
|
||||
|
||||
#: src/language/constants.ts:67
|
||||
msgid "Select Provider"
|
||||
msgstr "Sélectionner un fournisseur"
|
||||
|
||||
#: src/language/curd.ts:59
|
||||
msgid "Selected {count} files"
|
||||
msgstr "{count} fichiers sélectionnés"
|
||||
@@ -6351,6 +6493,7 @@ msgstr "Statique"
|
||||
#: src/views/certificate/ACMEUser.vue:75
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:63
|
||||
#: src/views/dashboard/components/ModulesTable.vue:75
|
||||
#: src/views/dns/DDNSManager.vue:75
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:106
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:241
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:521
|
||||
@@ -6584,6 +6727,10 @@ msgstr "Restauration du système"
|
||||
msgid "System restored successfully."
|
||||
msgstr "Système restauré avec succès."
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:83
|
||||
msgid "Targets"
|
||||
msgstr "Cibles"
|
||||
|
||||
#: src/constants/errors/self_check.ts:3
|
||||
msgid "Task is not fixable"
|
||||
msgstr "La tâche n'est pas réparable"
|
||||
@@ -7141,6 +7288,14 @@ msgstr ""
|
||||
msgid "Try adjusting your search criteria or time range."
|
||||
msgstr "Essayez d'ajuster vos critères de recherche ou la plage horaire."
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:29
|
||||
msgid "TTL"
|
||||
msgstr "TTL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:78
|
||||
msgid "TTL (seconds)"
|
||||
msgstr "TTL (secondes)"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:28
|
||||
msgid "Tuesday"
|
||||
msgstr "Mardi"
|
||||
@@ -7153,6 +7308,9 @@ msgstr "Authentification à deux facteurs requise"
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:24
|
||||
#: src/views/config/components/Delete.vue:122
|
||||
#: src/views/dashboard/components/ModulesTable.vue:62
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:49
|
||||
#: src/views/dns/components/DNSRecordForm.vue:57
|
||||
#: src/views/dns/components/DNSRecordTable.vue:21
|
||||
#: src/views/nginx_log/NginxLogList.vue:146
|
||||
#: src/views/notification/notificationColumns.tsx:8
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:19
|
||||
@@ -7163,6 +7321,10 @@ msgstr "Type"
|
||||
msgid "Type %{delete} to confirm"
|
||||
msgstr "Tapez %{delete} pour confirmer"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:228
|
||||
msgid "Type or select A/AAAA records"
|
||||
msgstr "Saisissez ou sélectionnez des enregistrements A/AAAA"
|
||||
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:142
|
||||
msgid "Type or select browser"
|
||||
msgstr "Saisissez ou sélectionnez un navigateur"
|
||||
@@ -7218,9 +7380,9 @@ msgstr "Mise à jour réussie"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:236
|
||||
#: 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:91
|
||||
#: src/views/config/configColumns.tsx:44 src/views/dns/DNSCredential.vue:65
|
||||
#: src/views/dns/DNSDomainList.vue:205 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
|
||||
@@ -7293,6 +7455,10 @@ msgstr "Disponibilité :"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:64
|
||||
msgid "Use @ for root"
|
||||
msgstr "Utilisez @ pour la racine"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:121
|
||||
msgid "Use OTP"
|
||||
msgstr "Utiliser OTP"
|
||||
@@ -7358,6 +7524,8 @@ msgid "Validate SSL Certificate"
|
||||
msgstr "Valider le certificat SSL"
|
||||
|
||||
#: src/views/dashboard/components/PerformanceTablesCard.vue:22
|
||||
#: src/views/dns/components/DNSRecordForm.vue:66
|
||||
#: src/views/dns/components/DNSRecordTable.vue:25
|
||||
msgid "Value"
|
||||
msgstr "Valeur"
|
||||
|
||||
@@ -7454,14 +7622,6 @@ msgstr ""
|
||||
msgid "We do not accept any feature requests"
|
||||
msgstr "Nous n'acceptons aucune demande de fonctionnalité"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:96
|
||||
msgid ""
|
||||
"We will add one or more TXT records to the DNS records of your domain for "
|
||||
"ownership verification."
|
||||
msgstr ""
|
||||
"Nous ajouterons un ou plusieurs enregistrements TXT aux enregistrements DNS "
|
||||
"de votre domaine pour vérifier la propriété."
|
||||
|
||||
#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
|
||||
msgid ""
|
||||
"We will remove the HTTPChallenge configuration from this file and reload "
|
||||
@@ -7498,6 +7658,11 @@ msgstr "Hebdomadaire"
|
||||
msgid "Weekly on %{day} at %{time}"
|
||||
msgstr "Hebdomadairement le %{day} à %{time}"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:84
|
||||
#: src/views/dns/components/DNSRecordTable.vue:37
|
||||
msgid "Weight"
|
||||
msgstr "Poids"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:119
|
||||
msgid ""
|
||||
"When Enabled, Nginx UI will automatically re-register users upon startup. "
|
||||
@@ -7552,7 +7717,7 @@ msgstr "Processus de travail"
|
||||
msgid "Workers"
|
||||
msgstr "Workers"
|
||||
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:63
|
||||
#: src/views/workspace/WorkSpace.vue:51
|
||||
msgid "Workspace"
|
||||
msgstr "Espace de travail"
|
||||
@@ -7659,6 +7824,16 @@ msgstr "Vos clés d'accès"
|
||||
msgid "Zero-allocation pipeline"
|
||||
msgstr "Pipeline sans allocation"
|
||||
|
||||
#~ msgid "Once the verification is complete, the records will be removed."
|
||||
#~ msgstr "Une fois la vérification terminée, les enregistrements seront supprimés."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "We will add one or more TXT records to the DNS records of your domain for "
|
||||
#~ "ownership verification."
|
||||
#~ msgstr ""
|
||||
#~ "Nous ajouterons un ou plusieurs enregistrements TXT aux enregistrements DNS "
|
||||
#~ "de votre domaine pour vérifier la propriété."
|
||||
|
||||
#~ msgid "Settings"
|
||||
#~ msgstr "Paramètres"
|
||||
|
||||
@@ -7680,9 +7855,6 @@ msgstr "Pipeline sans allocation"
|
||||
#~ 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)"
|
||||
|
||||
@@ -7890,9 +8062,6 @@ msgstr "Pipeline sans allocation"
|
||||
#~ msgid "Are you sure you want to apply to all selected?"
|
||||
#~ msgstr "Êtes-vous sûr de vouloir appliquer à tous les éléments sélectionnés ?"
|
||||
|
||||
#~ msgid "Are you sure you want to delete this item?"
|
||||
#~ msgstr "Êtes-vous sûr de vouloir supprimer cet élément ?"
|
||||
|
||||
#~ msgid "Are you sure you want to recover this item?"
|
||||
#~ msgstr "Êtes-vous sûr de vouloir récupérer cet élément ?"
|
||||
|
||||
@@ -8126,9 +8295,6 @@ msgstr "Pipeline sans allocation"
|
||||
#~ msgid "Dark"
|
||||
#~ msgstr "Sombre"
|
||||
|
||||
#~ msgid "Light"
|
||||
#~ msgstr "Clair"
|
||||
|
||||
#~ msgid "Theme"
|
||||
#~ msgstr "Thème"
|
||||
|
||||
|
||||
+214
-47
@@ -185,8 +185,10 @@ msgstr "操作"
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:273
|
||||
#: 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:97
|
||||
#: src/views/config/configColumns.tsx:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:41
|
||||
#: src/views/dns/DDNSManager.vue:91 src/views/dns/DNSCredential.vue:71
|
||||
#: src/views/dns/DNSDomainList.vue:211 src/views/namespace/columns.ts:97
|
||||
#: src/views/nginx_log/NginxLogList.vue:338 src/views/node/nodeColumns.tsx:96
|
||||
#: src/views/notification/notificationColumns.tsx:72
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:85
|
||||
@@ -240,6 +242,10 @@ msgstr "ヘッダーを追加"
|
||||
msgid "Add Location"
|
||||
msgstr "Locationを追加"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:171
|
||||
msgid "Add Record"
|
||||
msgstr "レコードを追加"
|
||||
|
||||
#: src/components/NgxConfigEditor/NgxServer.vue:92
|
||||
msgid "Add Server"
|
||||
msgstr "サーバーを追加"
|
||||
@@ -260,7 +266,7 @@ msgstr "アップストリームを追加"
|
||||
msgid "Added successfully"
|
||||
msgstr "正常に追加されました"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:97
|
||||
#: src/views/dns/components/DNSChallenge.vue:98
|
||||
msgid "Additional"
|
||||
msgstr "追加設定"
|
||||
|
||||
@@ -297,6 +303,10 @@ msgstr "詳細設定"
|
||||
msgid "Afterwards, refresh this page and click add passkey again."
|
||||
msgstr "その後、このページを更新し、再度パスキーを追加をクリックしてください。"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:55
|
||||
msgid "All"
|
||||
msgstr "すべて"
|
||||
|
||||
#: src/views/system/Licenses.vue:152
|
||||
msgid "All Components"
|
||||
msgstr "すべてのコンポーネント"
|
||||
@@ -336,7 +346,7 @@ msgstr "到達可能なIPアドレスは、プライベート認証局で使用
|
||||
msgid "API Base Url"
|
||||
msgstr "APIベースURL"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:70
|
||||
#: src/views/dns/components/DNSChallenge.vue:71
|
||||
msgid "API Document"
|
||||
msgstr "APIドキュメント"
|
||||
|
||||
@@ -372,6 +382,10 @@ msgstr "このIPアドレス制限を削除してもよろしいですか?"
|
||||
msgid "Are you sure to delete this passkey immediately?"
|
||||
msgstr "このパスキーをすぐに削除してもよろしいですか?"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:90
|
||||
msgid "Are you sure to delete this record?"
|
||||
msgstr "このレコードを削除してもよろしいですか?"
|
||||
|
||||
#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155
|
||||
msgid "Are you sure to generate new recovery codes?"
|
||||
msgstr "新しいリカバリーコードを生成してもよろしいですか?"
|
||||
@@ -541,7 +555,7 @@ msgstr "平均/PV"
|
||||
#: src/views/certificate/components/CertificateActions.vue:22
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:274
|
||||
#: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217
|
||||
#: src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/dns/DNSRecordManager.vue:223 src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183
|
||||
#: src/views/stream/components/StreamEditor.vue:147
|
||||
msgid "Back"
|
||||
@@ -687,6 +701,10 @@ msgstr "ブラウザ"
|
||||
msgid "Browser Statistics"
|
||||
msgstr "ブラウザ統計"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:257
|
||||
msgid "Business contact:"
|
||||
msgstr "ビジネス連絡先:"
|
||||
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:316
|
||||
msgid ""
|
||||
"By enabling advanced indexing, you acknowledge that your system meets the "
|
||||
@@ -756,6 +774,7 @@ msgstr ""
|
||||
#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37
|
||||
#: src/views/config/components/Delete.vue:98
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:710
|
||||
#: src/views/dns/DDNSManager.vue:244 src/views/dns/DNSRecordManager.vue:212
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:102
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:33
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:59
|
||||
@@ -901,7 +920,7 @@ msgstr "証明書の種類"
|
||||
msgid "Certificates"
|
||||
msgstr "証明書"
|
||||
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
msgid "Certificates List"
|
||||
msgstr "証明書リスト"
|
||||
|
||||
@@ -1266,7 +1285,7 @@ msgstr "設定パスが空です"
|
||||
msgid "Config Template"
|
||||
msgstr "設定テンプレート"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:52
|
||||
#: src/views/dns/DNSCredential.vue:52
|
||||
msgid "Configuration"
|
||||
msgstr "設定"
|
||||
|
||||
@@ -1294,6 +1313,14 @@ msgstr "設定名"
|
||||
msgid "Configurations"
|
||||
msgstr "設定"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:201
|
||||
msgid "Configure"
|
||||
msgstr "設定"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:211
|
||||
msgid "Configure DDNS"
|
||||
msgstr "DDNSを設定"
|
||||
|
||||
#: src/views/site/site_add/SiteAdd.vue:81
|
||||
msgid "Configure SSL"
|
||||
msgstr "SSLを設定する"
|
||||
@@ -1415,6 +1442,10 @@ msgstr "ファイルを作成"
|
||||
msgid "Create Folder"
|
||||
msgstr "フォルダーを作成"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Create Record"
|
||||
msgstr "レコードを作成"
|
||||
|
||||
#: src/views/backup/components/BackupCreator.vue:75
|
||||
msgid ""
|
||||
"Create system backups including Nginx configuration and Nginx UI settings. "
|
||||
@@ -1438,11 +1469,12 @@ msgstr "正常に作成されました"
|
||||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr "クライアントを作成することで CA サーバーとの通信が容易になります"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:105
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:131
|
||||
#: src/views/dns/DDNSManager.vue:65 src/views/dns/DNSDomainList.vue:109
|
||||
msgid "Credential"
|
||||
msgstr "認証情報"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:86
|
||||
#: src/routes/modules/dns.ts:20 src/views/dns/components/DNSChallenge.vue:87
|
||||
msgid "Credentials"
|
||||
msgstr "認証情報"
|
||||
|
||||
@@ -1557,6 +1589,18 @@ msgstr "日"
|
||||
msgid "Db file not found"
|
||||
msgstr "データベース ファイルが見つかりません"
|
||||
|
||||
#: src/routes/modules/dns.ts:36
|
||||
msgid "DDNS"
|
||||
msgstr "DDNS"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:153
|
||||
msgid "DDNS Overview"
|
||||
msgstr "DDNS 概要"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:135
|
||||
msgid "DDNS saved"
|
||||
msgstr "DDNSが保存されました"
|
||||
|
||||
#: src/constants/errors/geolite.ts:12
|
||||
msgid "Decompression succeeded but failed to delete compressed file: {0}"
|
||||
msgstr "解凍に成功しましたが、圧縮ファイルの削除に失敗しました: {0}"
|
||||
@@ -1581,6 +1625,7 @@ msgstr "共有メモリゾーンの名前とサイズを定義します(例: p
|
||||
#: src/views/config/components/Delete.vue:65
|
||||
#: src/views/config/components/Delete.vue:97
|
||||
#: src/views/config/ConfigList.vue:199
|
||||
#: src/views/dns/components/DNSRecordTable.vue:94
|
||||
#: src/views/site/site_list/SiteList.vue:100
|
||||
#: src/views/stream/StreamList.vue:110
|
||||
msgid "Delete"
|
||||
@@ -1822,7 +1867,8 @@ msgid "Disable stream %{name} from %{node} successfully"
|
||||
msgstr "ストリーム %{name} を %{node} から無効化しました"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:175
|
||||
#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:60
|
||||
#: src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/NodeSettings.vue:25
|
||||
#: src/views/preference/tabs/NodeSettings.vue:30
|
||||
@@ -1847,16 +1893,35 @@ msgstr "切断されました"
|
||||
msgid "Disk IO"
|
||||
msgstr "ディスク IO"
|
||||
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
#: src/views/certificate/DNSCredential.vue:79
|
||||
#: src/routes/modules/dns.ts:11
|
||||
msgid "DNS"
|
||||
msgstr "DNS"
|
||||
|
||||
#: src/views/dns/DNSCredential.vue:79
|
||||
msgid "DNS Credentials"
|
||||
msgstr "DNS 認証情報"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:95
|
||||
#: src/views/certificate/components/DNSChallenge.vue:59
|
||||
#: src/routes/modules/dns.ts:28 src/views/dns/DNSDomainList.vue:228
|
||||
msgid "DNS Domains"
|
||||
msgstr "DNS ドメイン"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "DNS Only"
|
||||
msgstr "DNSのみ"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:121
|
||||
#: src/views/dns/components/DNSChallenge.vue:60
|
||||
msgid "DNS Provider"
|
||||
msgstr "DNSプロバイダー"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:244
|
||||
msgid "DNS Provider Support"
|
||||
msgstr "DNSプロバイダーのサポート"
|
||||
|
||||
#: src/routes/modules/dns.ts:44 src/views/dns/DNSRecordManager.vue:58
|
||||
msgid "DNS Records"
|
||||
msgstr "DNSレコード"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:678
|
||||
msgid "DNS Resolver"
|
||||
msgstr "DNSリゾルバ"
|
||||
@@ -1917,6 +1982,7 @@ msgid "Document Count"
|
||||
msgstr "ドキュメント数"
|
||||
|
||||
#: src/views/certificate/components/DNSIssueCertificate.vue:119
|
||||
#: src/views/dns/DDNSManager.vue:60 src/views/dns/DNSDomainList.vue:98
|
||||
msgid "Domain"
|
||||
msgstr "ドメイン"
|
||||
|
||||
@@ -2002,7 +2068,7 @@ msgstr "EAB HMACキー"
|
||||
msgid "EAB Key ID"
|
||||
msgstr "EABキーID"
|
||||
|
||||
#: src/language/curd.ts:8
|
||||
#: src/language/curd.ts:8 src/views/dns/components/DNSRecordTable.vue:87
|
||||
msgid "Edit"
|
||||
msgstr "編集"
|
||||
|
||||
@@ -2016,6 +2082,10 @@ msgstr "%{n} を編集"
|
||||
msgid "Edit Configuration"
|
||||
msgstr "設定を編集"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Edit Record"
|
||||
msgstr "レコードを編集"
|
||||
|
||||
#: src/routes/modules/sites.ts:34
|
||||
msgid "Edit Site"
|
||||
msgstr "サイトを編集"
|
||||
@@ -2066,6 +2136,10 @@ msgstr "コード補完を有効にする"
|
||||
msgid "Enable compression for content transfer"
|
||||
msgstr "コンテンツ転送の圧縮を有効にする"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:218
|
||||
msgid "Enable DDNS"
|
||||
msgstr "DDNS を有効にする"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:473
|
||||
msgid "Enable Health Check"
|
||||
msgstr "ヘルスチェックを有効にする"
|
||||
@@ -2153,7 +2227,8 @@ msgid "Enable TOTP"
|
||||
msgstr "TOTP を有効にする"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:174
|
||||
#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:69
|
||||
#: src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:47
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:20
|
||||
@@ -3102,14 +3177,19 @@ msgstr "値が高いほど接続の再利用が効率的であることを意味
|
||||
msgid "History"
|
||||
msgstr "履歴"
|
||||
|
||||
#: src/routes/index.ts:52
|
||||
#: src/routes/index.ts:54
|
||||
msgid "Home"
|
||||
msgstr "ホーム"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:42
|
||||
#: src/views/preference/tabs/ServerSettings.vue:19
|
||||
msgid "Host"
|
||||
msgstr "ホスト"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:45
|
||||
msgid "Host, e.g. @ or www"
|
||||
msgstr "ホスト、例: @ または www"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:159
|
||||
#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87
|
||||
msgid "Hour"
|
||||
@@ -3175,7 +3255,7 @@ msgstr "ドメインにCNAMEレコードがあり、証明書を取得できな
|
||||
msgid "Import"
|
||||
msgstr "インポート"
|
||||
|
||||
#: src/routes/modules/certificates.ts:54
|
||||
#: src/routes/modules/certificates.ts:46
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Import Certificate"
|
||||
msgstr "証明書をインポート"
|
||||
@@ -3294,10 +3374,15 @@ msgid ""
|
||||
"restart the Nginx UI."
|
||||
msgstr "システム起動から10分後はインストールが許可されません。Nginx UIを再起動してください。"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:79
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:26
|
||||
msgid "Interval"
|
||||
msgstr "間隔"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:232
|
||||
msgid "Interval (seconds)"
|
||||
msgstr "間隔(秒)"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:166
|
||||
msgid "Invalid"
|
||||
msgstr "無効"
|
||||
@@ -3524,6 +3609,10 @@ msgstr "最終インデックス日時"
|
||||
msgid "Last month"
|
||||
msgstr "先月"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:87
|
||||
msgid "Last run"
|
||||
msgstr "最終実行"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:138
|
||||
msgid "Last update"
|
||||
msgstr "最終更新"
|
||||
@@ -3787,6 +3876,10 @@ msgstr ""
|
||||
msgid "Manage Configs"
|
||||
msgstr "設定管理"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:236
|
||||
msgid "Manage Records"
|
||||
msgstr "レコードの管理"
|
||||
|
||||
#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45
|
||||
msgid "Manage Sites"
|
||||
msgstr "サイト管理"
|
||||
@@ -3957,7 +4050,7 @@ msgstr "更新日時"
|
||||
msgid "Modify"
|
||||
msgstr "変更"
|
||||
|
||||
#: src/routes/modules/certificates.ts:44
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Modify Certificate"
|
||||
msgstr "証明書を変更"
|
||||
@@ -4018,11 +4111,13 @@ msgstr "該当なし"
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:44
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:58
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:70
|
||||
#: src/views/certificate/DNSCredential.vue:17
|
||||
#: src/views/config/components/ConfigRightPanel/Basic.vue:34
|
||||
#: src/views/config/components/Delete.vue:123
|
||||
#: src/views/config/components/Mkdir.vue:64
|
||||
#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/config/configColumns.tsx:17
|
||||
#: src/views/dns/components/DNSRecordForm.vue:63
|
||||
#: src/views/dns/components/DNSRecordTable.vue:17
|
||||
#: src/views/dns/DNSCredential.vue:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/nginx_log/NginxLogList.vue:155 src/views/node/nodeColumns.tsx:8
|
||||
#: src/views/preference/components/AuthSettings/AddPasskey.vue:81
|
||||
#: src/views/site/site_edit/components/RightPanel/Basic.vue:36
|
||||
@@ -4050,6 +4145,12 @@ msgstr "名前空間"
|
||||
msgid "Namespaces"
|
||||
msgstr "名前空間"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:251
|
||||
msgid ""
|
||||
"Need more DNS providers? Support us through donations or contact us for "
|
||||
"commercial collaboration"
|
||||
msgstr "さらに多くのDNSプロバイダーが必要ですか?寄付でサポートするか、商業協力のためにご連絡ください"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:195
|
||||
msgid "Need to enable the stub_status module"
|
||||
msgstr "stub_statusモジュールを有効にする必要があります"
|
||||
@@ -4440,6 +4541,10 @@ msgstr "未インデックス"
|
||||
msgid "Not Loaded"
|
||||
msgstr "ロードされていません"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:102
|
||||
msgid "Not run yet"
|
||||
msgstr "まだ実行されていません"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:230
|
||||
msgid "Not supported for IP certificates"
|
||||
msgstr "IP証明書には対応していません"
|
||||
@@ -4449,7 +4554,7 @@ msgid "Not Valid Before: %{date}"
|
||||
msgstr "有効開始日: %{date}"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:150
|
||||
#: src/views/certificate/DNSCredential.vue:89
|
||||
#: src/views/dns/DNSCredential.vue:89
|
||||
msgid "Note"
|
||||
msgstr "注記"
|
||||
|
||||
@@ -4574,10 +4679,6 @@ msgstr "OK"
|
||||
msgid "On"
|
||||
msgstr "オン"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:99
|
||||
msgid "Once the verification is complete, the records will be removed."
|
||||
msgstr "検証が完了すると、レコードは削除されます。"
|
||||
|
||||
#: src/components/NamespaceTabs/NamespaceTabs.vue:164
|
||||
#: src/components/NodeCard/NodeCard.vue:51
|
||||
#: src/components/NodeSelector/NodeSelector.vue:65
|
||||
@@ -4864,7 +4965,7 @@ msgstr "すべての項目を正しく入力してください"
|
||||
msgid "Please fill in required S3 configuration fields"
|
||||
msgstr "必要なS3設定項目を入力してください"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:93
|
||||
#: src/views/dns/DNSCredential.vue:93
|
||||
msgid ""
|
||||
"Please fill in the API authentication credentials provided by your DNS "
|
||||
"provider."
|
||||
@@ -4923,7 +5024,7 @@ msgstr "ユーザー名を入力してください!"
|
||||
msgid "Please log in."
|
||||
msgstr "ログインしてください。"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:102
|
||||
#: src/views/dns/DNSCredential.vue:96
|
||||
msgid "Please note that the unit of time configurations below are all in seconds."
|
||||
msgstr "以下の時間設定の単位はすべて秒であることに注意してください。"
|
||||
|
||||
@@ -5003,6 +5104,11 @@ msgstr "設定"
|
||||
msgid "Preparing lego configurations"
|
||||
msgstr "Lego 設定を準備中"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:81
|
||||
#: src/views/dns/components/DNSRecordTable.vue:33
|
||||
msgid "Priority"
|
||||
msgstr "優先度"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:206
|
||||
msgid "Private CA:"
|
||||
msgstr "プライベートCA:"
|
||||
@@ -5063,7 +5169,8 @@ msgid ""
|
||||
"proxy."
|
||||
msgstr "プロトコル設定は直接接続時にのみ有効です。リバースプロキシを使用している場合は、リバースプロキシで個別にプロトコルを設定してください。"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:26
|
||||
#: src/views/dns/DDNSManager.vue:70 src/views/dns/DNSCredential.vue:26
|
||||
#: src/views/dns/DNSDomainList.vue:177 src/views/dns/DNSDomainList.vue:198
|
||||
msgid "Provider"
|
||||
msgstr "プロバイダー"
|
||||
|
||||
@@ -5075,6 +5182,12 @@ msgstr "プロバイダーが見つかりません: {0}"
|
||||
msgid "Province / Region"
|
||||
msgstr "省 / 地域"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:87
|
||||
#: src/views/dns/components/DNSRecordTable.vue:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "Proxied"
|
||||
msgstr "プロキシ済み"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:63
|
||||
msgid "Proxy"
|
||||
msgstr "プロキシ"
|
||||
@@ -5169,6 +5282,22 @@ msgstr "再チェック"
|
||||
msgid "Recommended:"
|
||||
msgstr "推奨:"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:113
|
||||
msgid "Record created"
|
||||
msgstr "レコードが作成されました"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:120
|
||||
msgid "Record deleted"
|
||||
msgstr "レコードを削除しました"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:109
|
||||
msgid "Record updated"
|
||||
msgstr "レコードが更新されました"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:221
|
||||
msgid "Records"
|
||||
msgstr "レコード"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:79
|
||||
msgid "Recovery"
|
||||
msgstr "復旧"
|
||||
@@ -5196,7 +5325,8 @@ msgstr "リダイレクトメッセージ (3xx)"
|
||||
msgid "Referer"
|
||||
msgstr "リファラー"
|
||||
|
||||
#: src/language/curd.ts:70
|
||||
#: src/language/curd.ts:70 src/views/dns/DDNSManager.vue:161
|
||||
#: src/views/dns/DNSRecordManager.vue:165
|
||||
msgid "Refresh"
|
||||
msgstr "更新"
|
||||
|
||||
@@ -5436,7 +5566,7 @@ msgstr "間違ったパラメータでリクエストされました"
|
||||
msgid "Requests Per Connection"
|
||||
msgstr "接続あたりのリクエスト数"
|
||||
|
||||
#: src/language/curd.ts:13
|
||||
#: src/language/curd.ts:13 src/views/dns/components/DNSRecordFilter.vue:65
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:214
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:745
|
||||
msgid "Reset"
|
||||
@@ -5672,6 +5802,7 @@ msgstr "土曜日"
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:283
|
||||
#: src/views/config/components/ConfigName.vue:58
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:713
|
||||
#: src/views/dns/DDNSManager.vue:247 src/views/dns/DNSRecordManager.vue:215
|
||||
#: src/views/preference/components/AuthSettings/Passkey.vue:131
|
||||
#: src/views/preference/Preference.vue:124
|
||||
#: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52
|
||||
@@ -5777,12 +5908,13 @@ msgstr "スケジュール"
|
||||
msgid "Schedule Type"
|
||||
msgstr "スケジュールタイプ"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:77
|
||||
#: src/views/dns/components/DNSChallenge.vue:78
|
||||
msgid "SDK"
|
||||
msgstr "SDK"
|
||||
|
||||
#: src/language/constants.ts:62 src/language/curd.ts:12
|
||||
#: src/views/config/configColumns.tsx:5
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:62
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:217
|
||||
#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13
|
||||
msgid "Search"
|
||||
@@ -5839,10 +5971,18 @@ msgstr "事前定義されたCAディレクトリを選択するか、カスタ
|
||||
msgid "Select all"
|
||||
msgstr "すべて選択"
|
||||
|
||||
#: src/language/constants.ts:68
|
||||
msgid "Select Credential"
|
||||
msgstr "認証情報を選択"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:45
|
||||
msgid "Select or enter a CA directory URL"
|
||||
msgstr "CAディレクトリURLを選択または入力してください"
|
||||
|
||||
#: src/language/constants.ts:67
|
||||
msgid "Select Provider"
|
||||
msgstr "プロバイダーを選択"
|
||||
|
||||
#: src/language/curd.ts:59
|
||||
msgid "Selected {count} files"
|
||||
msgstr "選択された {count} ファイル"
|
||||
@@ -6162,6 +6302,7 @@ msgstr "静的"
|
||||
#: src/views/certificate/ACMEUser.vue:75
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:63
|
||||
#: src/views/dashboard/components/ModulesTable.vue:75
|
||||
#: src/views/dns/DDNSManager.vue:75
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:106
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:241
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:521
|
||||
@@ -6390,6 +6531,10 @@ msgstr "システム復元"
|
||||
msgid "System restored successfully."
|
||||
msgstr "システムの復元が完了しました。"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:83
|
||||
msgid "Targets"
|
||||
msgstr "ターゲット"
|
||||
|
||||
#: src/constants/errors/self_check.ts:3
|
||||
msgid "Task is not fixable"
|
||||
msgstr "タスクは修正不可能です"
|
||||
@@ -6884,6 +7029,14 @@ msgstr "検索条件を調整するか、別のページに移動してみてく
|
||||
msgid "Try adjusting your search criteria or time range."
|
||||
msgstr "検索条件または時間範囲を調整してみてください。"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:29
|
||||
msgid "TTL"
|
||||
msgstr "TTL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:78
|
||||
msgid "TTL (seconds)"
|
||||
msgstr "TTL (秒)"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:28
|
||||
msgid "Tuesday"
|
||||
msgstr "火曜日"
|
||||
@@ -6896,6 +7049,9 @@ msgstr "二要素認証が必要です"
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:24
|
||||
#: src/views/config/components/Delete.vue:122
|
||||
#: src/views/dashboard/components/ModulesTable.vue:62
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:49
|
||||
#: src/views/dns/components/DNSRecordForm.vue:57
|
||||
#: src/views/dns/components/DNSRecordTable.vue:21
|
||||
#: src/views/nginx_log/NginxLogList.vue:146
|
||||
#: src/views/notification/notificationColumns.tsx:8
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:19
|
||||
@@ -6906,6 +7062,10 @@ msgstr "タイプ"
|
||||
msgid "Type %{delete} to confirm"
|
||||
msgstr "確認のために %{delete} と入力してください"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:228
|
||||
msgid "Type or select A/AAAA records"
|
||||
msgstr "A/AAAAレコードを入力または選択"
|
||||
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:142
|
||||
msgid "Type or select browser"
|
||||
msgstr "ブラウザを入力または選択"
|
||||
@@ -6961,9 +7121,9 @@ msgstr "更新に成功しました"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:236
|
||||
#: 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:91
|
||||
#: src/views/config/configColumns.tsx:44 src/views/dns/DNSCredential.vue:65
|
||||
#: src/views/dns/DNSDomainList.vue:205 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
|
||||
@@ -7036,6 +7196,10 @@ msgstr "稼働時間:"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:64
|
||||
msgid "Use @ for root"
|
||||
msgstr "ルートには @ を使用"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:121
|
||||
msgid "Use OTP"
|
||||
msgstr "OTP を使用する"
|
||||
@@ -7101,6 +7265,8 @@ msgid "Validate SSL Certificate"
|
||||
msgstr "SSL証明書を検証"
|
||||
|
||||
#: src/views/dashboard/components/PerformanceTablesCard.vue:22
|
||||
#: src/views/dns/components/DNSRecordForm.vue:66
|
||||
#: src/views/dns/components/DNSRecordTable.vue:25
|
||||
msgid "Value"
|
||||
msgstr "値"
|
||||
|
||||
@@ -7193,12 +7359,6 @@ msgstr ""
|
||||
msgid "We do not accept any feature requests"
|
||||
msgstr "機能リクエストは受け付けていません"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:96
|
||||
msgid ""
|
||||
"We will add one or more TXT records to the DNS records of your domain for "
|
||||
"ownership verification."
|
||||
msgstr "所有権確認のために、お客様のドメインのDNSレコードに1つ以上のTXTレコードを追加します。"
|
||||
|
||||
#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
|
||||
msgid ""
|
||||
"We will remove the HTTPChallenge configuration from this file and reload "
|
||||
@@ -7233,6 +7393,11 @@ msgstr "毎週"
|
||||
msgid "Weekly on %{day} at %{time}"
|
||||
msgstr "毎週%{day}の%{time}"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:84
|
||||
#: src/views/dns/components/DNSRecordTable.vue:37
|
||||
msgid "Weight"
|
||||
msgstr "重み"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:119
|
||||
msgid ""
|
||||
"When Enabled, Nginx UI will automatically re-register users upon startup. "
|
||||
@@ -7278,7 +7443,7 @@ msgstr "ワーカープロセス"
|
||||
msgid "Workers"
|
||||
msgstr "ワーカー"
|
||||
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:63
|
||||
#: src/views/workspace/WorkSpace.vue:51
|
||||
msgid "Workspace"
|
||||
msgstr "ワークスペース"
|
||||
@@ -7374,6 +7539,14 @@ msgstr "あなたのパスキー"
|
||||
msgid "Zero-allocation pipeline"
|
||||
msgstr "ゼロアロケーションパイプライン"
|
||||
|
||||
#~ msgid "Once the verification is complete, the records will be removed."
|
||||
#~ msgstr "検証が完了すると、レコードは削除されます。"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "We will add one or more TXT records to the DNS records of your domain for "
|
||||
#~ "ownership verification."
|
||||
#~ msgstr "所有権確認のために、お客様のドメインのDNSレコードに1つ以上のTXTレコードを追加します。"
|
||||
|
||||
#~ msgid "Settings"
|
||||
#~ msgstr "設定"
|
||||
|
||||
@@ -7395,9 +7568,6 @@ msgstr "ゼロアロケーションパイプライン"
|
||||
#~ msgid "Tested in isolated sandbox mode"
|
||||
#~ msgstr "隔離されたサンドボックスモードでテストされました"
|
||||
|
||||
#~ msgid "All"
|
||||
#~ msgstr "すべて"
|
||||
|
||||
#~ msgid "Based on M2 Pro (12 cores) testing"
|
||||
#~ msgstr "M2 Pro(12コア)でのテストに基づく"
|
||||
|
||||
@@ -7601,9 +7771,6 @@ msgstr "ゼロアロケーションパイプライン"
|
||||
#~ msgid "Are you sure you want to apply to all selected?"
|
||||
#~ msgstr "選択したすべてに適用してもよろしいですか?"
|
||||
|
||||
#~ msgid "Are you sure you want to delete this item?"
|
||||
#~ msgstr "このアイテムを削除してもよろしいですか?"
|
||||
|
||||
#~ msgid "Are you sure you want to recover this item?"
|
||||
#~ msgstr "このアイテムを復元してもよろしいですか?"
|
||||
|
||||
|
||||
+214
-47
@@ -183,8 +183,10 @@ msgstr "작업"
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:273
|
||||
#: 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:97
|
||||
#: src/views/config/configColumns.tsx:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:41
|
||||
#: src/views/dns/DDNSManager.vue:91 src/views/dns/DNSCredential.vue:71
|
||||
#: src/views/dns/DNSDomainList.vue:211 src/views/namespace/columns.ts:97
|
||||
#: src/views/nginx_log/NginxLogList.vue:338 src/views/node/nodeColumns.tsx:96
|
||||
#: src/views/notification/notificationColumns.tsx:72
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:85
|
||||
@@ -238,6 +240,10 @@ msgstr "헤더 추가"
|
||||
msgid "Add Location"
|
||||
msgstr "위치 추가"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:171
|
||||
msgid "Add Record"
|
||||
msgstr "레코드 추가"
|
||||
|
||||
#: src/components/NgxConfigEditor/NgxServer.vue:92
|
||||
msgid "Add Server"
|
||||
msgstr "서버 추가"
|
||||
@@ -258,7 +264,7 @@ msgstr "업스트림 추가"
|
||||
msgid "Added successfully"
|
||||
msgstr "성공적으로 추가됨"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:97
|
||||
#: src/views/dns/components/DNSChallenge.vue:98
|
||||
msgid "Additional"
|
||||
msgstr "추가적인"
|
||||
|
||||
@@ -295,6 +301,10 @@ msgstr "고급 설정"
|
||||
msgid "Afterwards, refresh this page and click add passkey again."
|
||||
msgstr "이후에 이 페이지를 새로 고치고 패스키 추가를 다시 클릭하세요."
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:55
|
||||
msgid "All"
|
||||
msgstr "모두"
|
||||
|
||||
#: src/views/system/Licenses.vue:152
|
||||
msgid "All Components"
|
||||
msgstr "모든 구성 요소"
|
||||
@@ -334,7 +344,7 @@ msgstr "도달 가능한 모든 IP 주소는 개인 인증 기관과 함께 사
|
||||
msgid "API Base Url"
|
||||
msgstr "API 기본 URL"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:70
|
||||
#: src/views/dns/components/DNSChallenge.vue:71
|
||||
msgid "API Document"
|
||||
msgstr "API 문서"
|
||||
|
||||
@@ -370,6 +380,10 @@ msgstr "차단된 IP를 즉시 삭제하시겠습니까?"
|
||||
msgid "Are you sure to delete this passkey immediately?"
|
||||
msgstr "이 패스키를 즉시 삭제하시겠습니까?"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:90
|
||||
msgid "Are you sure to delete this record?"
|
||||
msgstr "이 레코드를 삭제하시겠습니까?"
|
||||
|
||||
#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155
|
||||
msgid "Are you sure to generate new recovery codes?"
|
||||
msgstr "새로운 복구 코드를 생성하시겠습니까?"
|
||||
@@ -539,7 +553,7 @@ msgstr "평균/PV"
|
||||
#: src/views/certificate/components/CertificateActions.vue:22
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:274
|
||||
#: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217
|
||||
#: src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/dns/DNSRecordManager.vue:223 src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183
|
||||
#: src/views/stream/components/StreamEditor.vue:147
|
||||
msgid "Back"
|
||||
@@ -685,6 +699,10 @@ msgstr "브라우저"
|
||||
msgid "Browser Statistics"
|
||||
msgstr "브라우저 통계"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:257
|
||||
msgid "Business contact:"
|
||||
msgstr "비즈니스 연락처:"
|
||||
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:316
|
||||
msgid ""
|
||||
"By enabling advanced indexing, you acknowledge that your system meets the "
|
||||
@@ -754,6 +772,7 @@ msgstr ""
|
||||
#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37
|
||||
#: src/views/config/components/Delete.vue:98
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:710
|
||||
#: src/views/dns/DDNSManager.vue:244 src/views/dns/DNSRecordManager.vue:212
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:102
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:33
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:59
|
||||
@@ -900,7 +919,7 @@ msgstr "인증서 유형"
|
||||
msgid "Certificates"
|
||||
msgstr "인증서"
|
||||
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
msgid "Certificates List"
|
||||
msgstr "인증서 목록"
|
||||
|
||||
@@ -1263,7 +1282,7 @@ msgstr "설정 경로가 비어 있습니다"
|
||||
msgid "Config Template"
|
||||
msgstr "설정 템플릿"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:52
|
||||
#: src/views/dns/DNSCredential.vue:52
|
||||
msgid "Configuration"
|
||||
msgstr "구성"
|
||||
|
||||
@@ -1291,6 +1310,14 @@ msgstr "구성 이름"
|
||||
msgid "Configurations"
|
||||
msgstr "구성들"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:201
|
||||
msgid "Configure"
|
||||
msgstr "구성"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:211
|
||||
msgid "Configure DDNS"
|
||||
msgstr "DDNS 구성"
|
||||
|
||||
#: src/views/site/site_add/SiteAdd.vue:81
|
||||
msgid "Configure SSL"
|
||||
msgstr "SSL 구성하기"
|
||||
@@ -1412,6 +1439,10 @@ msgstr "파일 생성"
|
||||
msgid "Create Folder"
|
||||
msgstr "폴더 생성"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Create Record"
|
||||
msgstr "레코드 생성"
|
||||
|
||||
#: src/views/backup/components/BackupCreator.vue:75
|
||||
msgid ""
|
||||
"Create system backups including Nginx configuration and Nginx UI settings. "
|
||||
@@ -1435,11 +1466,12 @@ msgstr "성공적으로 생성됨"
|
||||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr "클라이언트 생성은 CA 서버와의 통신을 용이하게 합니다"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:105
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:131
|
||||
#: src/views/dns/DDNSManager.vue:65 src/views/dns/DNSDomainList.vue:109
|
||||
msgid "Credential"
|
||||
msgstr "인증 정보"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:86
|
||||
#: src/routes/modules/dns.ts:20 src/views/dns/components/DNSChallenge.vue:87
|
||||
msgid "Credentials"
|
||||
msgstr "인증 정보들"
|
||||
|
||||
@@ -1554,6 +1586,18 @@ msgstr "일"
|
||||
msgid "Db file not found"
|
||||
msgstr "데이터베이스 파일을 찾을 수 없습니다"
|
||||
|
||||
#: src/routes/modules/dns.ts:36
|
||||
msgid "DDNS"
|
||||
msgstr "DDNS"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:153
|
||||
msgid "DDNS Overview"
|
||||
msgstr "DDNS 개요"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:135
|
||||
msgid "DDNS saved"
|
||||
msgstr "DDNS 저장됨"
|
||||
|
||||
#: src/constants/errors/geolite.ts:12
|
||||
msgid "Decompression succeeded but failed to delete compressed file: {0}"
|
||||
msgstr "압축 해제는 성공했지만 압축 파일을 삭제하는 데 실패했습니다: {0}"
|
||||
@@ -1578,6 +1622,7 @@ msgstr "공유 메모리 영역 이름과 크기를 정의합니다(예: proxy_c
|
||||
#: src/views/config/components/Delete.vue:65
|
||||
#: src/views/config/components/Delete.vue:97
|
||||
#: src/views/config/ConfigList.vue:199
|
||||
#: src/views/dns/components/DNSRecordTable.vue:94
|
||||
#: src/views/site/site_list/SiteList.vue:100
|
||||
#: src/views/stream/StreamList.vue:110
|
||||
msgid "Delete"
|
||||
@@ -1819,7 +1864,8 @@ msgid "Disable stream %{name} from %{node} successfully"
|
||||
msgstr "스트림 %{name}을(를) %{node}에서 비활성화했습니다"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:175
|
||||
#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:60
|
||||
#: src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/NodeSettings.vue:25
|
||||
#: src/views/preference/tabs/NodeSettings.vue:30
|
||||
@@ -1844,16 +1890,35 @@ msgstr "연결 끊김"
|
||||
msgid "Disk IO"
|
||||
msgstr "디스크 IO"
|
||||
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
#: src/views/certificate/DNSCredential.vue:79
|
||||
#: src/routes/modules/dns.ts:11
|
||||
msgid "DNS"
|
||||
msgstr "DNS"
|
||||
|
||||
#: src/views/dns/DNSCredential.vue:79
|
||||
msgid "DNS Credentials"
|
||||
msgstr "DNS 인증 정보"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:95
|
||||
#: src/views/certificate/components/DNSChallenge.vue:59
|
||||
#: src/routes/modules/dns.ts:28 src/views/dns/DNSDomainList.vue:228
|
||||
msgid "DNS Domains"
|
||||
msgstr "DNS 도메인"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "DNS Only"
|
||||
msgstr "DNS 전용"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:121
|
||||
#: src/views/dns/components/DNSChallenge.vue:60
|
||||
msgid "DNS Provider"
|
||||
msgstr "DNS 제공자"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:244
|
||||
msgid "DNS Provider Support"
|
||||
msgstr "DNS 공급자 지원"
|
||||
|
||||
#: src/routes/modules/dns.ts:44 src/views/dns/DNSRecordManager.vue:58
|
||||
msgid "DNS Records"
|
||||
msgstr "DNS 레코드"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:678
|
||||
msgid "DNS Resolver"
|
||||
msgstr "DNS 확인자"
|
||||
@@ -1914,6 +1979,7 @@ msgid "Document Count"
|
||||
msgstr "문서 수"
|
||||
|
||||
#: src/views/certificate/components/DNSIssueCertificate.vue:119
|
||||
#: src/views/dns/DDNSManager.vue:60 src/views/dns/DNSDomainList.vue:98
|
||||
msgid "Domain"
|
||||
msgstr "도메인"
|
||||
|
||||
@@ -2001,7 +2067,7 @@ msgstr "EAB HMAC 키"
|
||||
msgid "EAB Key ID"
|
||||
msgstr "EAB 키 ID"
|
||||
|
||||
#: src/language/curd.ts:8
|
||||
#: src/language/curd.ts:8 src/views/dns/components/DNSRecordTable.vue:87
|
||||
msgid "Edit"
|
||||
msgstr "편집"
|
||||
|
||||
@@ -2015,6 +2081,10 @@ msgstr "%{n} 편집"
|
||||
msgid "Edit Configuration"
|
||||
msgstr "구성 편집"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Edit Record"
|
||||
msgstr "레코드 편집"
|
||||
|
||||
#: src/routes/modules/sites.ts:34
|
||||
msgid "Edit Site"
|
||||
msgstr "사이트 편집"
|
||||
@@ -2065,6 +2135,10 @@ msgstr "코드 완성 활성화"
|
||||
msgid "Enable compression for content transfer"
|
||||
msgstr "콘텐츠 전송 압축 활성화"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:218
|
||||
msgid "Enable DDNS"
|
||||
msgstr "DDNS 활성화"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:473
|
||||
msgid "Enable Health Check"
|
||||
msgstr "헬스 체크 활성화"
|
||||
@@ -2152,7 +2226,8 @@ msgid "Enable TOTP"
|
||||
msgstr "TOTP 활성화"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:174
|
||||
#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:69
|
||||
#: src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:47
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:20
|
||||
@@ -3101,14 +3176,19 @@ msgstr "값이 높을수록 연결 재사용이 더 좋다는 것을 의미합
|
||||
msgid "History"
|
||||
msgstr "기록"
|
||||
|
||||
#: src/routes/index.ts:52
|
||||
#: src/routes/index.ts:54
|
||||
msgid "Home"
|
||||
msgstr "홈"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:42
|
||||
#: src/views/preference/tabs/ServerSettings.vue:19
|
||||
msgid "Host"
|
||||
msgstr "호스트"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:45
|
||||
msgid "Host, e.g. @ or www"
|
||||
msgstr "호스트, 예: @ 또는 www"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:159
|
||||
#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87
|
||||
msgid "Hour"
|
||||
@@ -3174,7 +3254,7 @@ msgstr "도메인에 CNAME 레코드가 있고 인증서를 얻을 수 없는
|
||||
msgid "Import"
|
||||
msgstr "가져오기"
|
||||
|
||||
#: src/routes/modules/certificates.ts:54
|
||||
#: src/routes/modules/certificates.ts:46
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Import Certificate"
|
||||
msgstr "인증서 가져오기"
|
||||
@@ -3293,10 +3373,15 @@ msgid ""
|
||||
"restart the Nginx UI."
|
||||
msgstr "시스템 시작 후 10분이 지나면 설치가 허용되지 않습니다. Nginx UI를 다시 시작하세요."
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:79
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:26
|
||||
msgid "Interval"
|
||||
msgstr "간격"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:232
|
||||
msgid "Interval (seconds)"
|
||||
msgstr "간격(초)"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:166
|
||||
msgid "Invalid"
|
||||
msgstr "무효"
|
||||
@@ -3523,6 +3608,10 @@ msgstr "마지막 인덱싱"
|
||||
msgid "Last month"
|
||||
msgstr "지난달"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:87
|
||||
msgid "Last run"
|
||||
msgstr "마지막 실행"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:138
|
||||
msgid "Last update"
|
||||
msgstr "마지막 업데이트"
|
||||
@@ -3783,6 +3872,10 @@ msgstr "인증서를 받기 전에 .well-known 디렉터리에 대한 역방향
|
||||
msgid "Manage Configs"
|
||||
msgstr "구성 관리"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:236
|
||||
msgid "Manage Records"
|
||||
msgstr "레코드 관리"
|
||||
|
||||
#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45
|
||||
msgid "Manage Sites"
|
||||
msgstr "사이트 관리"
|
||||
@@ -3953,7 +4046,7 @@ msgstr "수정일시"
|
||||
msgid "Modify"
|
||||
msgstr "수정"
|
||||
|
||||
#: src/routes/modules/certificates.ts:44
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Modify Certificate"
|
||||
msgstr "인증서 수정"
|
||||
@@ -4014,11 +4107,13 @@ msgstr "해당 없음"
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:44
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:58
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:70
|
||||
#: src/views/certificate/DNSCredential.vue:17
|
||||
#: src/views/config/components/ConfigRightPanel/Basic.vue:34
|
||||
#: src/views/config/components/Delete.vue:123
|
||||
#: src/views/config/components/Mkdir.vue:64
|
||||
#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/config/configColumns.tsx:17
|
||||
#: src/views/dns/components/DNSRecordForm.vue:63
|
||||
#: src/views/dns/components/DNSRecordTable.vue:17
|
||||
#: src/views/dns/DNSCredential.vue:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/nginx_log/NginxLogList.vue:155 src/views/node/nodeColumns.tsx:8
|
||||
#: src/views/preference/components/AuthSettings/AddPasskey.vue:81
|
||||
#: src/views/site/site_edit/components/RightPanel/Basic.vue:36
|
||||
@@ -4046,6 +4141,12 @@ msgstr "네임스페이스"
|
||||
msgid "Namespaces"
|
||||
msgstr "네임스페이스"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:251
|
||||
msgid ""
|
||||
"Need more DNS providers? Support us through donations or contact us for "
|
||||
"commercial collaboration"
|
||||
msgstr "더 많은 DNS 제공자가 필요하신가요? 기부를 통해 지원하거나 상업적 협력을 위해 문의해 주세요"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:195
|
||||
msgid "Need to enable the stub_status module"
|
||||
msgstr "stub_status 모듈을 활성화해야 합니다"
|
||||
@@ -4436,6 +4537,10 @@ msgstr "인덱스되지 않음"
|
||||
msgid "Not Loaded"
|
||||
msgstr "로드되지 않음"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:102
|
||||
msgid "Not run yet"
|
||||
msgstr "아직 실행되지 않음"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:230
|
||||
msgid "Not supported for IP certificates"
|
||||
msgstr "IP 인증서는 지원되지 않습니다"
|
||||
@@ -4445,7 +4550,7 @@ msgid "Not Valid Before: %{date}"
|
||||
msgstr "유효 시작일: %{date}"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:150
|
||||
#: src/views/certificate/DNSCredential.vue:89
|
||||
#: src/views/dns/DNSCredential.vue:89
|
||||
msgid "Note"
|
||||
msgstr "참고"
|
||||
|
||||
@@ -4570,10 +4675,6 @@ msgstr "확인"
|
||||
msgid "On"
|
||||
msgstr "켜짐"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:99
|
||||
msgid "Once the verification is complete, the records will be removed."
|
||||
msgstr "검증이 완료되면, 레코드는 제거됩니다."
|
||||
|
||||
#: src/components/NamespaceTabs/NamespaceTabs.vue:164
|
||||
#: src/components/NodeCard/NodeCard.vue:51
|
||||
#: src/components/NodeSelector/NodeSelector.vue:65
|
||||
@@ -4860,7 +4961,7 @@ msgstr "모든 필드를 올바르게 작성해 주세요"
|
||||
msgid "Please fill in required S3 configuration fields"
|
||||
msgstr "필수 S3 구성 필드를 입력해 주세요"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:93
|
||||
#: src/views/dns/DNSCredential.vue:93
|
||||
msgid ""
|
||||
"Please fill in the API authentication credentials provided by your DNS "
|
||||
"provider."
|
||||
@@ -4917,7 +5018,7 @@ msgstr "사용자 이름을 입력해주세요!"
|
||||
msgid "Please log in."
|
||||
msgstr "로그인해 주세요."
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:102
|
||||
#: src/views/dns/DNSCredential.vue:96
|
||||
msgid "Please note that the unit of time configurations below are all in seconds."
|
||||
msgstr "아래의 시간 설정 단위는 모두 초 단위임을 유의해주세요."
|
||||
|
||||
@@ -4997,6 +5098,11 @@ msgstr "환경설정"
|
||||
msgid "Preparing lego configurations"
|
||||
msgstr "Lego 설정 준비 중"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:81
|
||||
#: src/views/dns/components/DNSRecordTable.vue:33
|
||||
msgid "Priority"
|
||||
msgstr "우선순위"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:206
|
||||
msgid "Private CA:"
|
||||
msgstr "개인 CA:"
|
||||
@@ -5057,7 +5163,8 @@ msgid ""
|
||||
"proxy."
|
||||
msgstr "프로토콜 설정은 직접 연결할 때만 적용됩니다. 리버스 프록시를 사용하는 경우 리버스 프록시에서 별도로 프로토콜을 구성하세요."
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:26
|
||||
#: src/views/dns/DDNSManager.vue:70 src/views/dns/DNSCredential.vue:26
|
||||
#: src/views/dns/DNSDomainList.vue:177 src/views/dns/DNSDomainList.vue:198
|
||||
msgid "Provider"
|
||||
msgstr "제공자"
|
||||
|
||||
@@ -5069,6 +5176,12 @@ msgstr "공급자를 찾을 수 없음: {0}"
|
||||
msgid "Province / Region"
|
||||
msgstr "지역 / 지역"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:87
|
||||
#: src/views/dns/components/DNSRecordTable.vue:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "Proxied"
|
||||
msgstr "프록시됨"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:63
|
||||
msgid "Proxy"
|
||||
msgstr "프록시"
|
||||
@@ -5163,6 +5276,22 @@ msgstr "재확인"
|
||||
msgid "Recommended:"
|
||||
msgstr "권장:"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:113
|
||||
msgid "Record created"
|
||||
msgstr "레코드가 생성되었습니다"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:120
|
||||
msgid "Record deleted"
|
||||
msgstr "레코드 삭제됨"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:109
|
||||
msgid "Record updated"
|
||||
msgstr "레코드가 업데이트되었습니다"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:221
|
||||
msgid "Records"
|
||||
msgstr "레코드"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:79
|
||||
msgid "Recovery"
|
||||
msgstr "복구"
|
||||
@@ -5190,7 +5319,8 @@ msgstr "리디렉션 메시지 (3xx)"
|
||||
msgid "Referer"
|
||||
msgstr "리퍼러"
|
||||
|
||||
#: src/language/curd.ts:70
|
||||
#: src/language/curd.ts:70 src/views/dns/DDNSManager.vue:161
|
||||
#: src/views/dns/DNSRecordManager.vue:165
|
||||
msgid "Refresh"
|
||||
msgstr "새로 고침"
|
||||
|
||||
@@ -5430,7 +5560,7 @@ msgstr "잘못된 매개변수로 요청됨"
|
||||
msgid "Requests Per Connection"
|
||||
msgstr "연결당 요청 수"
|
||||
|
||||
#: src/language/curd.ts:13
|
||||
#: src/language/curd.ts:13 src/views/dns/components/DNSRecordFilter.vue:65
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:214
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:745
|
||||
msgid "Reset"
|
||||
@@ -5668,6 +5798,7 @@ msgstr "토요일"
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:283
|
||||
#: src/views/config/components/ConfigName.vue:58
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:713
|
||||
#: src/views/dns/DDNSManager.vue:247 src/views/dns/DNSRecordManager.vue:215
|
||||
#: src/views/preference/components/AuthSettings/Passkey.vue:131
|
||||
#: src/views/preference/Preference.vue:124
|
||||
#: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52
|
||||
@@ -5773,12 +5904,13 @@ msgstr "일정"
|
||||
msgid "Schedule Type"
|
||||
msgstr "일정 유형"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:77
|
||||
#: src/views/dns/components/DNSChallenge.vue:78
|
||||
msgid "SDK"
|
||||
msgstr "SDK"
|
||||
|
||||
#: src/language/constants.ts:62 src/language/curd.ts:12
|
||||
#: src/views/config/configColumns.tsx:5
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:62
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:217
|
||||
#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13
|
||||
msgid "Search"
|
||||
@@ -5835,10 +5967,18 @@ msgstr "미리 정의된 CA 디렉터리를 선택하거나 사용자 지정 디
|
||||
msgid "Select all"
|
||||
msgstr "모두 선택"
|
||||
|
||||
#: src/language/constants.ts:68
|
||||
msgid "Select Credential"
|
||||
msgstr "자격 증명 선택"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:45
|
||||
msgid "Select or enter a CA directory URL"
|
||||
msgstr "CA 디렉터리 URL을 선택하거나 입력하세요"
|
||||
|
||||
#: src/language/constants.ts:67
|
||||
msgid "Select Provider"
|
||||
msgstr "공급자 선택"
|
||||
|
||||
#: src/language/curd.ts:59
|
||||
msgid "Selected {count} files"
|
||||
msgstr "선택된 {count} 파일"
|
||||
@@ -6158,6 +6298,7 @@ msgstr "정적"
|
||||
#: src/views/certificate/ACMEUser.vue:75
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:63
|
||||
#: src/views/dashboard/components/ModulesTable.vue:75
|
||||
#: src/views/dns/DDNSManager.vue:75
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:106
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:241
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:521
|
||||
@@ -6386,6 +6527,10 @@ msgstr "시스템 복원"
|
||||
msgid "System restored successfully."
|
||||
msgstr "시스템이 성공적으로 복원되었습니다."
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:83
|
||||
msgid "Targets"
|
||||
msgstr "대상"
|
||||
|
||||
#: src/constants/errors/self_check.ts:3
|
||||
msgid "Task is not fixable"
|
||||
msgstr "작업을 수정할 수 없음"
|
||||
@@ -6877,6 +7022,14 @@ msgstr "검색 조건을 조정하거나 다른 페이지로 이동해 보세요
|
||||
msgid "Try adjusting your search criteria or time range."
|
||||
msgstr "검색 조건이나 시간 범위를 조정해 보세요."
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:29
|
||||
msgid "TTL"
|
||||
msgstr "TTL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:78
|
||||
msgid "TTL (seconds)"
|
||||
msgstr "TTL (초)"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:28
|
||||
msgid "Tuesday"
|
||||
msgstr "화요일"
|
||||
@@ -6889,6 +7042,9 @@ msgstr "2단계 인증이 필요합니다"
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:24
|
||||
#: src/views/config/components/Delete.vue:122
|
||||
#: src/views/dashboard/components/ModulesTable.vue:62
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:49
|
||||
#: src/views/dns/components/DNSRecordForm.vue:57
|
||||
#: src/views/dns/components/DNSRecordTable.vue:21
|
||||
#: src/views/nginx_log/NginxLogList.vue:146
|
||||
#: src/views/notification/notificationColumns.tsx:8
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:19
|
||||
@@ -6899,6 +7055,10 @@ msgstr "유형"
|
||||
msgid "Type %{delete} to confirm"
|
||||
msgstr "확인하려면 %{delete}를 입력하세요"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:228
|
||||
msgid "Type or select A/AAAA records"
|
||||
msgstr "A/AAAA 레코드 입력 또는 선택"
|
||||
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:142
|
||||
msgid "Type or select browser"
|
||||
msgstr "브라우저 입력 또는 선택"
|
||||
@@ -6954,9 +7114,9 @@ msgstr "성공적으로 업데이트되었습니다"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:236
|
||||
#: 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:91
|
||||
#: src/views/config/configColumns.tsx:44 src/views/dns/DNSCredential.vue:65
|
||||
#: src/views/dns/DNSDomainList.vue:205 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
|
||||
@@ -7029,6 +7189,10 @@ msgstr "가동 시간:"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:64
|
||||
msgid "Use @ for root"
|
||||
msgstr "루트에는 @ 사용"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:121
|
||||
msgid "Use OTP"
|
||||
msgstr "OTP 사용"
|
||||
@@ -7094,6 +7258,8 @@ msgid "Validate SSL Certificate"
|
||||
msgstr "SSL 인증서 검증"
|
||||
|
||||
#: src/views/dashboard/components/PerformanceTablesCard.vue:22
|
||||
#: src/views/dns/components/DNSRecordForm.vue:66
|
||||
#: src/views/dns/components/DNSRecordTable.vue:25
|
||||
msgid "Value"
|
||||
msgstr "값"
|
||||
|
||||
@@ -7185,12 +7351,6 @@ msgstr ""
|
||||
msgid "We do not accept any feature requests"
|
||||
msgstr "기능 요청을 받지 않습니다"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:96
|
||||
msgid ""
|
||||
"We will add one or more TXT records to the DNS records of your domain for "
|
||||
"ownership verification."
|
||||
msgstr "도메인 소유권 검증을 위해 도메인의 DNS레코드에 하나 이상의 TXT 레코드를 추가할 것입니다."
|
||||
|
||||
#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
|
||||
msgid ""
|
||||
"We will remove the HTTPChallenge configuration from this file and reload "
|
||||
@@ -7225,6 +7385,11 @@ msgstr "매주"
|
||||
msgid "Weekly on %{day} at %{time}"
|
||||
msgstr "매주 %{day} %{time}"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:84
|
||||
#: src/views/dns/components/DNSRecordTable.vue:37
|
||||
msgid "Weight"
|
||||
msgstr "가중치"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:119
|
||||
msgid ""
|
||||
"When Enabled, Nginx UI will automatically re-register users upon startup. "
|
||||
@@ -7270,7 +7435,7 @@ msgstr "작업자 프로세스"
|
||||
msgid "Workers"
|
||||
msgstr "워커"
|
||||
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:63
|
||||
#: src/views/workspace/WorkSpace.vue:51
|
||||
msgid "Workspace"
|
||||
msgstr "작업 공간"
|
||||
@@ -7368,6 +7533,14 @@ msgstr "귀하의 패스키"
|
||||
msgid "Zero-allocation pipeline"
|
||||
msgstr "할당 없는 파이프라인"
|
||||
|
||||
#~ msgid "Once the verification is complete, the records will be removed."
|
||||
#~ msgstr "검증이 완료되면, 레코드는 제거됩니다."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "We will add one or more TXT records to the DNS records of your domain for "
|
||||
#~ "ownership verification."
|
||||
#~ msgstr "도메인 소유권 검증을 위해 도메인의 DNS레코드에 하나 이상의 TXT 레코드를 추가할 것입니다."
|
||||
|
||||
#~ msgid "Settings"
|
||||
#~ msgstr "설정"
|
||||
|
||||
@@ -7389,9 +7562,6 @@ msgstr "할당 없는 파이프라인"
|
||||
#~ msgid "Tested in isolated sandbox mode"
|
||||
#~ msgstr "격리된 샌드박스 모드에서 테스트됨"
|
||||
|
||||
#~ msgid "All"
|
||||
#~ msgstr "모두"
|
||||
|
||||
#~ msgid "Based on M2 Pro (12 cores) testing"
|
||||
#~ msgstr "M2 Pro(12코어) 테스트 기반"
|
||||
|
||||
@@ -7595,9 +7765,6 @@ msgstr "할당 없는 파이프라인"
|
||||
#~ msgid "Are you sure you want to apply to all selected?"
|
||||
#~ msgstr "선택한 모든 항목에 적용하시겠습니까?"
|
||||
|
||||
#~ msgid "Are you sure you want to delete this item?"
|
||||
#~ msgstr "이 항목을 삭제하시겠습니까?"
|
||||
|
||||
#~ msgid "Are you sure you want to recover this item?"
|
||||
#~ msgstr "정말로 이 항목을 복구하시겠습니까?"
|
||||
|
||||
|
||||
+210
-30
@@ -167,8 +167,11 @@ msgstr ""
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:273
|
||||
#: 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/dns/components/DNSRecordTable.vue:41
|
||||
#: src/views/dns/DDNSManager.vue:91
|
||||
#: src/views/dns/DNSCredential.vue:71
|
||||
#: src/views/dns/DNSDomainList.vue:211
|
||||
#: src/views/namespace/columns.ts:97
|
||||
#: src/views/nginx_log/NginxLogList.vue:338
|
||||
#: src/views/node/nodeColumns.tsx:96
|
||||
@@ -227,6 +230,10 @@ msgstr ""
|
||||
msgid "Add Location"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:171
|
||||
msgid "Add Record"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/NgxConfigEditor/NgxServer.vue:92
|
||||
msgid "Add Server"
|
||||
msgstr ""
|
||||
@@ -248,7 +255,7 @@ msgstr ""
|
||||
msgid "Added successfully"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:97
|
||||
#: src/views/dns/components/DNSChallenge.vue:98
|
||||
msgid "Additional"
|
||||
msgstr ""
|
||||
|
||||
@@ -285,6 +292,10 @@ msgstr ""
|
||||
msgid "Afterwards, refresh this page and click add passkey again."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:55
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/system/Licenses.vue:152
|
||||
msgid "All Components"
|
||||
msgstr ""
|
||||
@@ -318,7 +329,7 @@ msgstr ""
|
||||
msgid "API Base Url"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:70
|
||||
#: src/views/dns/components/DNSChallenge.vue:71
|
||||
msgid "API Document"
|
||||
msgstr ""
|
||||
|
||||
@@ -354,6 +365,10 @@ msgstr ""
|
||||
msgid "Are you sure to delete this passkey immediately?"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:90
|
||||
msgid "Are you sure to delete this record?"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155
|
||||
msgid "Are you sure to generate new recovery codes?"
|
||||
msgstr ""
|
||||
@@ -526,6 +541,7 @@ msgstr ""
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:274
|
||||
#: src/views/config/ConfigList.vue:120
|
||||
#: src/views/config/ConfigList.vue:217
|
||||
#: src/views/dns/DNSRecordManager.vue:223
|
||||
#: src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183
|
||||
#: src/views/stream/components/StreamEditor.vue:147
|
||||
@@ -672,6 +688,10 @@ msgstr ""
|
||||
msgid "Browser Statistics"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:257
|
||||
msgid "Business contact:"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:316
|
||||
msgid "By enabling advanced indexing, you acknowledge that your system meets the requirements and understand the performance implications. This will start indexing existing log files immediately."
|
||||
msgstr ""
|
||||
@@ -733,6 +753,8 @@ msgstr ""
|
||||
#: src/language/curd.ts:37
|
||||
#: src/views/config/components/Delete.vue:98
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:710
|
||||
#: src/views/dns/DDNSManager.vue:244
|
||||
#: src/views/dns/DNSRecordManager.vue:212
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:102
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:33
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:59
|
||||
@@ -879,7 +901,7 @@ msgstr ""
|
||||
msgid "Certificates"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
msgid "Certificates List"
|
||||
msgstr ""
|
||||
|
||||
@@ -1189,7 +1211,7 @@ msgstr ""
|
||||
msgid "Config Template"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:52
|
||||
#: src/views/dns/DNSCredential.vue:52
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
@@ -1217,6 +1239,14 @@ msgstr ""
|
||||
msgid "Configurations"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:201
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:211
|
||||
msgid "Configure DDNS"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/site/site_add/SiteAdd.vue:81
|
||||
msgid "Configure SSL"
|
||||
msgstr ""
|
||||
@@ -1339,6 +1369,10 @@ msgstr ""
|
||||
msgid "Create Folder"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Create Record"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/backup/components/BackupCreator.vue:75
|
||||
msgid "Create system backups including Nginx configuration and Nginx UI settings. Backup files will be automatically downloaded to your computer."
|
||||
msgstr ""
|
||||
@@ -1360,11 +1394,14 @@ msgstr ""
|
||||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:105
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:131
|
||||
#: src/views/dns/DDNSManager.vue:65
|
||||
#: src/views/dns/DNSDomainList.vue:109
|
||||
msgid "Credential"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:86
|
||||
#: src/routes/modules/dns.ts:20
|
||||
#: src/views/dns/components/DNSChallenge.vue:87
|
||||
msgid "Credentials"
|
||||
msgstr ""
|
||||
|
||||
@@ -1478,6 +1515,18 @@ msgstr ""
|
||||
msgid "Db file not found"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/modules/dns.ts:36
|
||||
msgid "DDNS"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:153
|
||||
msgid "DDNS Overview"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:135
|
||||
msgid "DDNS saved"
|
||||
msgstr ""
|
||||
|
||||
#: src/constants/errors/geolite.ts:12
|
||||
msgid "Decompression succeeded but failed to delete compressed file: {0}"
|
||||
msgstr ""
|
||||
@@ -1503,6 +1552,7 @@ msgstr ""
|
||||
#: src/views/config/components/Delete.vue:65
|
||||
#: src/views/config/components/Delete.vue:97
|
||||
#: src/views/config/ConfigList.vue:199
|
||||
#: src/views/dns/components/DNSRecordTable.vue:94
|
||||
#: src/views/site/site_list/SiteList.vue:100
|
||||
#: src/views/stream/StreamList.vue:110
|
||||
msgid "Delete"
|
||||
@@ -1747,6 +1797,7 @@ msgid "Disable stream %{name} from %{node} successfully"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:175
|
||||
#: src/views/dns/DDNSManager.vue:175
|
||||
#: src/views/node/nodeColumns.tsx:60
|
||||
#: src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
@@ -1774,16 +1825,37 @@ msgstr ""
|
||||
msgid "Disk IO"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
#: src/views/certificate/DNSCredential.vue:79
|
||||
#: src/routes/modules/dns.ts:11
|
||||
msgid "DNS"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DNSCredential.vue:79
|
||||
msgid "DNS Credentials"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:95
|
||||
#: src/views/certificate/components/DNSChallenge.vue:59
|
||||
#: src/routes/modules/dns.ts:28
|
||||
#: src/views/dns/DNSDomainList.vue:228
|
||||
msgid "DNS Domains"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "DNS Only"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:121
|
||||
#: src/views/dns/components/DNSChallenge.vue:60
|
||||
msgid "DNS Provider"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:244
|
||||
msgid "DNS Provider Support"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/modules/dns.ts:44
|
||||
#: src/views/dns/DNSRecordManager.vue:58
|
||||
msgid "DNS Records"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:678
|
||||
msgid "DNS Resolver"
|
||||
msgstr ""
|
||||
@@ -1845,6 +1917,8 @@ msgid "Document Count"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/components/DNSIssueCertificate.vue:119
|
||||
#: src/views/dns/DDNSManager.vue:60
|
||||
#: src/views/dns/DNSDomainList.vue:98
|
||||
msgid "Domain"
|
||||
msgstr ""
|
||||
|
||||
@@ -1930,6 +2004,7 @@ msgid "EAB Key ID"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/curd.ts:8
|
||||
#: src/views/dns/components/DNSRecordTable.vue:87
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
@@ -1943,6 +2018,10 @@ msgstr ""
|
||||
msgid "Edit Configuration"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Edit Record"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/modules/sites.ts:34
|
||||
msgid "Edit Site"
|
||||
msgstr ""
|
||||
@@ -1993,6 +2072,10 @@ msgstr ""
|
||||
msgid "Enable compression for content transfer"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:218
|
||||
msgid "Enable DDNS"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:473
|
||||
msgid "Enable Health Check"
|
||||
msgstr ""
|
||||
@@ -2080,6 +2163,7 @@ msgid "Enable TOTP"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:174
|
||||
#: src/views/dns/DDNSManager.vue:175
|
||||
#: src/views/node/nodeColumns.tsx:69
|
||||
#: src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:47
|
||||
@@ -3010,14 +3094,19 @@ msgstr ""
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:52
|
||||
#: src/routes/index.ts:54
|
||||
msgid "Home"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:42
|
||||
#: src/views/preference/tabs/ServerSettings.vue:19
|
||||
msgid "Host"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:45
|
||||
msgid "Host, e.g. @ or www"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:159
|
||||
#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87
|
||||
msgid "Hour"
|
||||
@@ -3075,7 +3164,7 @@ msgstr ""
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/modules/certificates.ts:54
|
||||
#: src/routes/modules/certificates.ts:46
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Import Certificate"
|
||||
msgstr ""
|
||||
@@ -3191,10 +3280,15 @@ msgstr ""
|
||||
msgid "Installation is not allowed after 10 minutes of system startup, please restart the Nginx UI."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:79
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:26
|
||||
msgid "Interval"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:232
|
||||
msgid "Interval (seconds)"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:166
|
||||
msgid "Invalid"
|
||||
msgstr ""
|
||||
@@ -3419,6 +3513,10 @@ msgstr ""
|
||||
msgid "Last month"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:87
|
||||
msgid "Last run"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:138
|
||||
msgid "Last update"
|
||||
msgstr ""
|
||||
@@ -3669,6 +3767,10 @@ msgstr ""
|
||||
msgid "Manage Configs"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:236
|
||||
msgid "Manage Records"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/modules/sites.ts:10
|
||||
#: src/views/site/site_list/SiteList.vue:45
|
||||
msgid "Manage Sites"
|
||||
@@ -3843,7 +3945,7 @@ msgstr ""
|
||||
msgid "Modify"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/modules/certificates.ts:44
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Modify Certificate"
|
||||
msgstr ""
|
||||
@@ -3904,11 +4006,13 @@ msgstr ""
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:44
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:58
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:70
|
||||
#: src/views/certificate/DNSCredential.vue:17
|
||||
#: src/views/config/components/ConfigRightPanel/Basic.vue:34
|
||||
#: src/views/config/components/Delete.vue:123
|
||||
#: src/views/config/components/Mkdir.vue:64
|
||||
#: src/views/config/configColumns.tsx:17
|
||||
#: src/views/dns/components/DNSRecordForm.vue:63
|
||||
#: src/views/dns/components/DNSRecordTable.vue:17
|
||||
#: src/views/dns/DNSCredential.vue:17
|
||||
#: src/views/namespace/columns.ts:9
|
||||
#: src/views/nginx_log/NginxLogList.vue:155
|
||||
#: src/views/node/nodeColumns.tsx:8
|
||||
@@ -3942,6 +4046,10 @@ msgstr ""
|
||||
msgid "Namespaces"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:251
|
||||
msgid "Need more DNS providers? Support us through donations or contact us for commercial collaboration"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:195
|
||||
msgid "Need to enable the stub_status module"
|
||||
msgstr ""
|
||||
@@ -4335,6 +4443,10 @@ msgstr ""
|
||||
msgid "Not Loaded"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:102
|
||||
msgid "Not run yet"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:230
|
||||
msgid "Not supported for IP certificates"
|
||||
msgstr ""
|
||||
@@ -4344,7 +4456,7 @@ msgid "Not Valid Before: %{date}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:150
|
||||
#: src/views/certificate/DNSCredential.vue:89
|
||||
#: src/views/dns/DNSCredential.vue:89
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
|
||||
@@ -4463,10 +4575,6 @@ msgstr ""
|
||||
msgid "On"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:99
|
||||
msgid "Once the verification is complete, the records will be removed."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/NamespaceTabs/NamespaceTabs.vue:164
|
||||
#: src/components/NodeCard/NodeCard.vue:51
|
||||
#: src/components/NodeSelector/NodeSelector.vue:65
|
||||
@@ -4748,7 +4856,7 @@ msgstr ""
|
||||
msgid "Please fill in required S3 configuration fields"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:93
|
||||
#: src/views/dns/DNSCredential.vue:93
|
||||
msgid "Please fill in the API authentication credentials provided by your DNS provider."
|
||||
msgstr ""
|
||||
|
||||
@@ -4797,7 +4905,7 @@ msgstr ""
|
||||
msgid "Please log in."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:102
|
||||
#: src/views/dns/DNSCredential.vue:96
|
||||
msgid "Please note that the unit of time configurations below are all in seconds."
|
||||
msgstr ""
|
||||
|
||||
@@ -4882,6 +4990,11 @@ msgstr ""
|
||||
msgid "Preparing lego configurations"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:81
|
||||
#: src/views/dns/components/DNSRecordTable.vue:33
|
||||
msgid "Priority"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:206
|
||||
msgid "Private CA:"
|
||||
msgstr ""
|
||||
@@ -4939,7 +5052,10 @@ msgstr ""
|
||||
msgid "Protocol configuration only takes effect when directly connecting. If using reverse proxy, please configure the protocol separately in the reverse proxy."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:26
|
||||
#: src/views/dns/DDNSManager.vue:70
|
||||
#: src/views/dns/DNSCredential.vue:26
|
||||
#: src/views/dns/DNSDomainList.vue:177
|
||||
#: src/views/dns/DNSDomainList.vue:198
|
||||
msgid "Provider"
|
||||
msgstr ""
|
||||
|
||||
@@ -4951,6 +5067,12 @@ msgstr ""
|
||||
msgid "Province / Region"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:87
|
||||
#: src/views/dns/components/DNSRecordTable.vue:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "Proxied"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:63
|
||||
msgid "Proxy"
|
||||
msgstr ""
|
||||
@@ -5047,6 +5169,22 @@ msgstr ""
|
||||
msgid "Recommended:"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:113
|
||||
msgid "Record created"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:120
|
||||
msgid "Record deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:109
|
||||
msgid "Record updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:221
|
||||
msgid "Records"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:79
|
||||
msgid "Recovery"
|
||||
msgstr ""
|
||||
@@ -5073,6 +5211,8 @@ msgid "Referer"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/curd.ts:70
|
||||
#: src/views/dns/DDNSManager.vue:161
|
||||
#: src/views/dns/DNSRecordManager.vue:165
|
||||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
@@ -5317,6 +5457,7 @@ msgid "Requests Per Connection"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/curd.ts:13
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:65
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:214
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:745
|
||||
msgid "Reset"
|
||||
@@ -5548,6 +5689,8 @@ msgstr ""
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:283
|
||||
#: src/views/config/components/ConfigName.vue:58
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:713
|
||||
#: src/views/dns/DDNSManager.vue:247
|
||||
#: src/views/dns/DNSRecordManager.vue:215
|
||||
#: src/views/preference/components/AuthSettings/Passkey.vue:131
|
||||
#: src/views/preference/Preference.vue:124
|
||||
#: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52
|
||||
@@ -5655,13 +5798,14 @@ msgstr ""
|
||||
msgid "Schedule Type"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:77
|
||||
#: src/views/dns/components/DNSChallenge.vue:78
|
||||
msgid "SDK"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:62
|
||||
#: src/language/curd.ts:12
|
||||
#: src/views/config/configColumns.tsx:5
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:62
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:217
|
||||
#: src/views/site/site_list/columns.tsx:17
|
||||
#: src/views/stream/columns.tsx:13
|
||||
@@ -5717,10 +5861,18 @@ msgstr ""
|
||||
msgid "Select all"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:68
|
||||
msgid "Select Credential"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:45
|
||||
msgid "Select or enter a CA directory URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:67
|
||||
msgid "Select Provider"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/curd.ts:59
|
||||
msgid "Selected {count} files"
|
||||
msgstr ""
|
||||
@@ -6032,6 +6184,7 @@ msgstr ""
|
||||
#: src/views/certificate/ACMEUser.vue:75
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:63
|
||||
#: src/views/dashboard/components/ModulesTable.vue:75
|
||||
#: src/views/dns/DDNSManager.vue:75
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:106
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:241
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:521
|
||||
@@ -6260,6 +6413,10 @@ msgstr ""
|
||||
msgid "System restored successfully."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:83
|
||||
msgid "Targets"
|
||||
msgstr ""
|
||||
|
||||
#: src/constants/errors/self_check.ts:3
|
||||
msgid "Task is not fixable"
|
||||
msgstr ""
|
||||
@@ -6680,6 +6837,14 @@ msgstr ""
|
||||
msgid "Try adjusting your search criteria or time range."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:29
|
||||
msgid "TTL"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:78
|
||||
msgid "TTL (seconds)"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:28
|
||||
msgid "Tuesday"
|
||||
msgstr ""
|
||||
@@ -6692,6 +6857,9 @@ msgstr ""
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:24
|
||||
#: src/views/config/components/Delete.vue:122
|
||||
#: src/views/dashboard/components/ModulesTable.vue:62
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:49
|
||||
#: src/views/dns/components/DNSRecordForm.vue:57
|
||||
#: src/views/dns/components/DNSRecordTable.vue:21
|
||||
#: src/views/nginx_log/NginxLogList.vue:146
|
||||
#: src/views/notification/notificationColumns.tsx:8
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:19
|
||||
@@ -6702,6 +6870,10 @@ msgstr ""
|
||||
msgid "Type %{delete} to confirm"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:228
|
||||
msgid "Type or select A/AAAA records"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:142
|
||||
msgid "Type or select browser"
|
||||
msgstr ""
|
||||
@@ -6757,9 +6929,10 @@ msgstr ""
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:236
|
||||
#: 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/dns/DNSCredential.vue:65
|
||||
#: src/views/dns/DNSDomainList.vue:205
|
||||
#: src/views/namespace/columns.ts:91
|
||||
#: src/views/node/nodeColumns.tsx:89
|
||||
#: src/views/site/site_edit/components/RightPanel/Basic.vue:39
|
||||
@@ -6839,6 +7012,10 @@ msgstr ""
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:64
|
||||
msgid "Use @ for root"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:121
|
||||
msgid "Use OTP"
|
||||
msgstr ""
|
||||
@@ -6906,6 +7083,8 @@ msgid "Validate SSL Certificate"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dashboard/components/PerformanceTablesCard.vue:22
|
||||
#: src/views/dns/components/DNSRecordForm.vue:66
|
||||
#: src/views/dns/components/DNSRecordTable.vue:25
|
||||
msgid "Value"
|
||||
msgstr ""
|
||||
|
||||
@@ -6994,10 +7173,6 @@ msgstr ""
|
||||
msgid "We do not accept any feature requests"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:96
|
||||
msgid "We will add one or more TXT records to the DNS records of your domain for ownership verification."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
|
||||
msgid "We will remove the HTTPChallenge configuration from this file and reload the Nginx. Are you sure you want to continue?"
|
||||
msgstr ""
|
||||
@@ -7030,6 +7205,11 @@ msgstr ""
|
||||
msgid "Weekly on %{day} at %{time}"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:84
|
||||
#: src/views/dns/components/DNSRecordTable.vue:37
|
||||
msgid "Weight"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:119
|
||||
msgid "When Enabled, Nginx UI will automatically re-register users upon startup. Generally, do not enable this unless you are in a dev environment and using Pebble as CA."
|
||||
msgstr ""
|
||||
@@ -7067,7 +7247,7 @@ msgid "Workers"
|
||||
msgstr ""
|
||||
|
||||
#: src/layouts/HeaderLayout.vue:61
|
||||
#: src/routes/index.ts:61
|
||||
#: src/routes/index.ts:63
|
||||
#: src/views/workspace/WorkSpace.vue:51
|
||||
msgid "Workspace"
|
||||
msgstr ""
|
||||
|
||||
+218
-49
@@ -187,8 +187,10 @@ msgstr "Acção"
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:273
|
||||
#: 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:97
|
||||
#: src/views/config/configColumns.tsx:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:41
|
||||
#: src/views/dns/DDNSManager.vue:91 src/views/dns/DNSCredential.vue:71
|
||||
#: src/views/dns/DNSDomainList.vue:211 src/views/namespace/columns.ts:97
|
||||
#: src/views/nginx_log/NginxLogList.vue:338 src/views/node/nodeColumns.tsx:96
|
||||
#: src/views/notification/notificationColumns.tsx:72
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:85
|
||||
@@ -242,6 +244,10 @@ msgstr "Adicionar cabeçalho"
|
||||
msgid "Add Location"
|
||||
msgstr "Adicionar Local"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:171
|
||||
msgid "Add Record"
|
||||
msgstr "Adicionar registo"
|
||||
|
||||
#: src/components/NgxConfigEditor/NgxServer.vue:92
|
||||
msgid "Add Server"
|
||||
msgstr "Adicionar servidor"
|
||||
@@ -262,7 +268,7 @@ msgstr "Adicionar upstream"
|
||||
msgid "Added successfully"
|
||||
msgstr "Adicionado com sucesso"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:97
|
||||
#: src/views/dns/components/DNSChallenge.vue:98
|
||||
msgid "Additional"
|
||||
msgstr "Adicional"
|
||||
|
||||
@@ -303,6 +309,10 @@ msgstr ""
|
||||
"Depois, atualize esta página e clique em adicionar chave de acesso "
|
||||
"novamente."
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:55
|
||||
msgid "All"
|
||||
msgstr "Todos"
|
||||
|
||||
#: src/views/system/Licenses.vue:152
|
||||
msgid "All Components"
|
||||
msgstr "Todos os componentes"
|
||||
@@ -346,7 +356,7 @@ msgstr ""
|
||||
msgid "API Base Url"
|
||||
msgstr "Url Base da API"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:70
|
||||
#: src/views/dns/components/DNSChallenge.vue:71
|
||||
msgid "API Document"
|
||||
msgstr "Documento da API"
|
||||
|
||||
@@ -382,6 +392,10 @@ msgstr "Tem certeza que pretende eliminar este IP banido imediatamente?"
|
||||
msgid "Are you sure to delete this passkey immediately?"
|
||||
msgstr "Tem a certeza de que deseja eliminar imediatamente esta chave de acesso?"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:90
|
||||
msgid "Are you sure to delete this record?"
|
||||
msgstr "Tem a certeza de que pretende eliminar este registo?"
|
||||
|
||||
#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155
|
||||
msgid "Are you sure to generate new recovery codes?"
|
||||
msgstr "Tem a certeza que deseja gerar novos códigos de recuperação?"
|
||||
@@ -555,7 +569,7 @@ msgstr "Méd./PV"
|
||||
#: src/views/certificate/components/CertificateActions.vue:22
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:274
|
||||
#: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217
|
||||
#: src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/dns/DNSRecordManager.vue:223 src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183
|
||||
#: src/views/stream/components/StreamEditor.vue:147
|
||||
msgid "Back"
|
||||
@@ -709,6 +723,10 @@ msgstr "Navegador"
|
||||
msgid "Browser Statistics"
|
||||
msgstr "Estatísticas do navegador"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:257
|
||||
msgid "Business contact:"
|
||||
msgstr "Contacto comercial:"
|
||||
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:316
|
||||
msgid ""
|
||||
"By enabling advanced indexing, you acknowledge that your system meets the "
|
||||
@@ -779,6 +797,7 @@ msgstr ""
|
||||
#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37
|
||||
#: src/views/config/components/Delete.vue:98
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:710
|
||||
#: src/views/dns/DDNSManager.vue:244 src/views/dns/DNSRecordManager.vue:212
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:102
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:33
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:59
|
||||
@@ -927,7 +946,7 @@ msgstr "Tipo de certificado"
|
||||
msgid "Certificates"
|
||||
msgstr "Certificados"
|
||||
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
msgid "Certificates List"
|
||||
msgstr "Lista de Certificados"
|
||||
|
||||
@@ -1310,7 +1329,7 @@ msgstr "O caminho de configuração está vazio"
|
||||
msgid "Config Template"
|
||||
msgstr "Modelo de Configuração"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:52
|
||||
#: src/views/dns/DNSCredential.vue:52
|
||||
msgid "Configuration"
|
||||
msgstr "Configuração"
|
||||
|
||||
@@ -1340,6 +1359,14 @@ msgstr "Nome da Configuração"
|
||||
msgid "Configurations"
|
||||
msgstr "Configurações"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:201
|
||||
msgid "Configure"
|
||||
msgstr "Configurar"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:211
|
||||
msgid "Configure DDNS"
|
||||
msgstr "Configurar DDNS"
|
||||
|
||||
#: src/views/site/site_add/SiteAdd.vue:81
|
||||
msgid "Configure SSL"
|
||||
msgstr "Configurar SSL"
|
||||
@@ -1463,6 +1490,10 @@ msgstr "Criar Ficheiro"
|
||||
msgid "Create Folder"
|
||||
msgstr "Criar Pasta"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Create Record"
|
||||
msgstr "Criar registo"
|
||||
|
||||
#: src/views/backup/components/BackupCreator.vue:75
|
||||
msgid ""
|
||||
"Create system backups including Nginx configuration and Nginx UI settings. "
|
||||
@@ -1489,11 +1520,12 @@ msgstr "Criado com sucesso"
|
||||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr "Criar cliente facilita comunicação com o servidor CA"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:105
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:131
|
||||
#: src/views/dns/DDNSManager.vue:65 src/views/dns/DNSDomainList.vue:109
|
||||
msgid "Credential"
|
||||
msgstr "Credencial"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:86
|
||||
#: src/routes/modules/dns.ts:20 src/views/dns/components/DNSChallenge.vue:87
|
||||
msgid "Credentials"
|
||||
msgstr "Credenciais"
|
||||
|
||||
@@ -1608,6 +1640,18 @@ msgstr "Dias"
|
||||
msgid "Db file not found"
|
||||
msgstr "Ficheiro da base de dados não encontrado"
|
||||
|
||||
#: src/routes/modules/dns.ts:36
|
||||
msgid "DDNS"
|
||||
msgstr "DDNS"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:153
|
||||
msgid "DDNS Overview"
|
||||
msgstr "Visão Geral do DDNS"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:135
|
||||
msgid "DDNS saved"
|
||||
msgstr "DDNS guardado"
|
||||
|
||||
#: src/constants/errors/geolite.ts:12
|
||||
msgid "Decompression succeeded but failed to delete compressed file: {0}"
|
||||
msgstr "Descompressão bem-sucedida, mas falha ao eliminar o ficheiro comprimido: {0}"
|
||||
@@ -1634,6 +1678,7 @@ msgstr ""
|
||||
#: src/views/config/components/Delete.vue:65
|
||||
#: src/views/config/components/Delete.vue:97
|
||||
#: src/views/config/ConfigList.vue:199
|
||||
#: src/views/dns/components/DNSRecordTable.vue:94
|
||||
#: src/views/site/site_list/SiteList.vue:100
|
||||
#: src/views/stream/StreamList.vue:110
|
||||
msgid "Delete"
|
||||
@@ -1875,7 +1920,8 @@ msgid "Disable stream %{name} from %{node} successfully"
|
||||
msgstr "Desativar o fluxo %{name} de %{node} com sucesso"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:175
|
||||
#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:60
|
||||
#: src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/NodeSettings.vue:25
|
||||
#: src/views/preference/tabs/NodeSettings.vue:30
|
||||
@@ -1900,16 +1946,35 @@ msgstr "Desconectado"
|
||||
msgid "Disk IO"
|
||||
msgstr "E/S de Disco"
|
||||
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
#: src/views/certificate/DNSCredential.vue:79
|
||||
#: src/routes/modules/dns.ts:11
|
||||
msgid "DNS"
|
||||
msgstr "DNS"
|
||||
|
||||
#: src/views/dns/DNSCredential.vue:79
|
||||
msgid "DNS Credentials"
|
||||
msgstr "Credenciais DNS"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:95
|
||||
#: src/views/certificate/components/DNSChallenge.vue:59
|
||||
#: src/routes/modules/dns.ts:28 src/views/dns/DNSDomainList.vue:228
|
||||
msgid "DNS Domains"
|
||||
msgstr "Domínios DNS"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "DNS Only"
|
||||
msgstr "Apenas DNS"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:121
|
||||
#: src/views/dns/components/DNSChallenge.vue:60
|
||||
msgid "DNS Provider"
|
||||
msgstr "Provedor DNS"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:244
|
||||
msgid "DNS Provider Support"
|
||||
msgstr "Suporte de provedor de DNS"
|
||||
|
||||
#: src/routes/modules/dns.ts:44 src/views/dns/DNSRecordManager.vue:58
|
||||
msgid "DNS Records"
|
||||
msgstr "Registros DNS"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:678
|
||||
msgid "DNS Resolver"
|
||||
msgstr "Resolvedor DNS"
|
||||
@@ -1970,6 +2035,7 @@ msgid "Document Count"
|
||||
msgstr "Contagem de documentos"
|
||||
|
||||
#: src/views/certificate/components/DNSIssueCertificate.vue:119
|
||||
#: src/views/dns/DDNSManager.vue:60 src/views/dns/DNSDomainList.vue:98
|
||||
msgid "Domain"
|
||||
msgstr "Domínio"
|
||||
|
||||
@@ -2058,7 +2124,7 @@ msgstr "Chave HMAC EAB"
|
||||
msgid "EAB Key ID"
|
||||
msgstr "ID da chave EAB"
|
||||
|
||||
#: src/language/curd.ts:8
|
||||
#: src/language/curd.ts:8 src/views/dns/components/DNSRecordTable.vue:87
|
||||
msgid "Edit"
|
||||
msgstr "Editar"
|
||||
|
||||
@@ -2072,6 +2138,10 @@ msgstr "Editar %{n}"
|
||||
msgid "Edit Configuration"
|
||||
msgstr "Editar Configuração"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Edit Record"
|
||||
msgstr "Editar registo"
|
||||
|
||||
#: src/routes/modules/sites.ts:34
|
||||
msgid "Edit Site"
|
||||
msgstr "Editar Site"
|
||||
@@ -2122,6 +2192,10 @@ msgstr "Ativar conclusão de código"
|
||||
msgid "Enable compression for content transfer"
|
||||
msgstr "Ativar compressão para transferência de conteúdo"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:218
|
||||
msgid "Enable DDNS"
|
||||
msgstr "Ativar DDNS"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:473
|
||||
msgid "Enable Health Check"
|
||||
msgstr "Ativar verificação de saúde"
|
||||
@@ -2209,7 +2283,8 @@ msgid "Enable TOTP"
|
||||
msgstr "Ativar TOTP"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:174
|
||||
#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:69
|
||||
#: src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:47
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:20
|
||||
@@ -3177,14 +3252,19 @@ msgstr "Um valor mais alto significa uma melhor reutilização da conexão"
|
||||
msgid "History"
|
||||
msgstr "Histórico"
|
||||
|
||||
#: src/routes/index.ts:52
|
||||
#: src/routes/index.ts:54
|
||||
msgid "Home"
|
||||
msgstr "Início"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:42
|
||||
#: src/views/preference/tabs/ServerSettings.vue:19
|
||||
msgid "Host"
|
||||
msgstr "Host"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:45
|
||||
msgid "Host, e.g. @ or www"
|
||||
msgstr "Host, por ex. @ ou www"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:159
|
||||
#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87
|
||||
msgid "Hour"
|
||||
@@ -3259,7 +3339,7 @@ msgstr ""
|
||||
msgid "Import"
|
||||
msgstr "Importar"
|
||||
|
||||
#: src/routes/modules/certificates.ts:54
|
||||
#: src/routes/modules/certificates.ts:46
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Import Certificate"
|
||||
msgstr "Importar Certificados"
|
||||
@@ -3382,10 +3462,15 @@ msgstr ""
|
||||
"A instalação não é permitida após 10 minutos do arranque do sistema, por "
|
||||
"favor reinicie a interface Nginx."
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:79
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:26
|
||||
msgid "Interval"
|
||||
msgstr "Intervalo"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:232
|
||||
msgid "Interval (seconds)"
|
||||
msgstr "Intervalo (segundos)"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:166
|
||||
msgid "Invalid"
|
||||
msgstr "Inválido"
|
||||
@@ -3614,6 +3699,10 @@ msgstr "Última indexação"
|
||||
msgid "Last month"
|
||||
msgstr "Mês passado"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:87
|
||||
msgid "Last run"
|
||||
msgstr "Última execução"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:138
|
||||
msgid "Last update"
|
||||
msgstr "Última atualização"
|
||||
@@ -3883,6 +3972,10 @@ msgstr ""
|
||||
msgid "Manage Configs"
|
||||
msgstr "Gerir Configurações"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:236
|
||||
msgid "Manage Records"
|
||||
msgstr "Gerir registos"
|
||||
|
||||
#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45
|
||||
msgid "Manage Sites"
|
||||
msgstr "Gerir Sites"
|
||||
@@ -4053,7 +4146,7 @@ msgstr "Modificado em"
|
||||
msgid "Modify"
|
||||
msgstr "Modificar"
|
||||
|
||||
#: src/routes/modules/certificates.ts:44
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Modify Certificate"
|
||||
msgstr "Modificar Certificado"
|
||||
@@ -4114,11 +4207,13 @@ msgstr "N/D"
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:44
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:58
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:70
|
||||
#: src/views/certificate/DNSCredential.vue:17
|
||||
#: src/views/config/components/ConfigRightPanel/Basic.vue:34
|
||||
#: src/views/config/components/Delete.vue:123
|
||||
#: src/views/config/components/Mkdir.vue:64
|
||||
#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/config/configColumns.tsx:17
|
||||
#: src/views/dns/components/DNSRecordForm.vue:63
|
||||
#: src/views/dns/components/DNSRecordTable.vue:17
|
||||
#: src/views/dns/DNSCredential.vue:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/nginx_log/NginxLogList.vue:155 src/views/node/nodeColumns.tsx:8
|
||||
#: src/views/preference/components/AuthSettings/AddPasskey.vue:81
|
||||
#: src/views/site/site_edit/components/RightPanel/Basic.vue:36
|
||||
@@ -4146,6 +4241,14 @@ msgstr "Espaço de nomes"
|
||||
msgid "Namespaces"
|
||||
msgstr "Espaços de nomes"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:251
|
||||
msgid ""
|
||||
"Need more DNS providers? Support us through donations or contact us for "
|
||||
"commercial collaboration"
|
||||
msgstr ""
|
||||
"Precisa de mais fornecedores de DNS? Apoie-nos através de doações ou "
|
||||
"contacte-nos para colaboração comercial"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:195
|
||||
msgid "Need to enable the stub_status module"
|
||||
msgstr "É necessário ativar o módulo stub_status"
|
||||
@@ -4540,6 +4643,10 @@ msgstr "Não indexado"
|
||||
msgid "Not Loaded"
|
||||
msgstr "Não carregado"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:102
|
||||
msgid "Not run yet"
|
||||
msgstr "Ainda não executado"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:230
|
||||
msgid "Not supported for IP certificates"
|
||||
msgstr "Não suportado para certificados de IP"
|
||||
@@ -4549,7 +4656,7 @@ msgid "Not Valid Before: %{date}"
|
||||
msgstr "Não Válido Antes de: %{date}"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:150
|
||||
#: src/views/certificate/DNSCredential.vue:89
|
||||
#: src/views/dns/DNSCredential.vue:89
|
||||
msgid "Note"
|
||||
msgstr "Nota"
|
||||
|
||||
@@ -4681,10 +4788,6 @@ msgstr "OK"
|
||||
msgid "On"
|
||||
msgstr "Ligado"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:99
|
||||
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:164
|
||||
#: src/components/NodeCard/NodeCard.vue:51
|
||||
#: src/components/NodeSelector/NodeSelector.vue:65
|
||||
@@ -4977,7 +5080,7 @@ msgstr "Por favor, preencha todos os campos corretamente"
|
||||
msgid "Please fill in required S3 configuration fields"
|
||||
msgstr "Por favor, preencha os campos de configuração do S3 necessários"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:93
|
||||
#: src/views/dns/DNSCredential.vue:93
|
||||
msgid ""
|
||||
"Please fill in the API authentication credentials provided by your DNS "
|
||||
"provider."
|
||||
@@ -5044,7 +5147,7 @@ msgstr "Por favor introduza o seu nome de utilizador!"
|
||||
msgid "Please log in."
|
||||
msgstr "Por favor, faça login."
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:102
|
||||
#: src/views/dns/DNSCredential.vue:96
|
||||
msgid "Please note that the unit of time configurations below are all in seconds."
|
||||
msgstr "Note que as definições da unidade de tempo abaixo estão todas em segundos."
|
||||
|
||||
@@ -5126,6 +5229,11 @@ msgstr "Preferencia"
|
||||
msgid "Preparing lego configurations"
|
||||
msgstr "Preparando configurações lego"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:81
|
||||
#: src/views/dns/components/DNSRecordTable.vue:33
|
||||
msgid "Priority"
|
||||
msgstr "Prioridade"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:206
|
||||
msgid "Private CA:"
|
||||
msgstr "CA privada:"
|
||||
@@ -5189,7 +5297,8 @@ msgstr ""
|
||||
"estiver a usar um proxy inverso, configure o protocolo separadamente no "
|
||||
"proxy inverso."
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:26
|
||||
#: src/views/dns/DDNSManager.vue:70 src/views/dns/DNSCredential.vue:26
|
||||
#: src/views/dns/DNSDomainList.vue:177 src/views/dns/DNSDomainList.vue:198
|
||||
msgid "Provider"
|
||||
msgstr "Provedor"
|
||||
|
||||
@@ -5201,6 +5310,12 @@ msgstr "Fornecedor não encontrado: {0}"
|
||||
msgid "Province / Region"
|
||||
msgstr "Província / Região"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:87
|
||||
#: src/views/dns/components/DNSRecordTable.vue:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "Proxied"
|
||||
msgstr "Proxied"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:63
|
||||
msgid "Proxy"
|
||||
msgstr "Proxy"
|
||||
@@ -5295,6 +5410,22 @@ msgstr "Verificar novamente"
|
||||
msgid "Recommended:"
|
||||
msgstr "Recomendado:"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:113
|
||||
msgid "Record created"
|
||||
msgstr "Registo criado"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:120
|
||||
msgid "Record deleted"
|
||||
msgstr "Registo eliminado"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:109
|
||||
msgid "Record updated"
|
||||
msgstr "Registo atualizado"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:221
|
||||
msgid "Records"
|
||||
msgstr "Registos"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:79
|
||||
msgid "Recovery"
|
||||
msgstr "Recuperação"
|
||||
@@ -5324,7 +5455,8 @@ msgstr "Mensagens de Redirecionamento (3xx)"
|
||||
msgid "Referer"
|
||||
msgstr "Referência"
|
||||
|
||||
#: src/language/curd.ts:70
|
||||
#: src/language/curd.ts:70 src/views/dns/DDNSManager.vue:161
|
||||
#: src/views/dns/DNSRecordManager.vue:165
|
||||
msgid "Refresh"
|
||||
msgstr "Atualizar"
|
||||
|
||||
@@ -5566,7 +5698,7 @@ msgstr "Solicitado com parâmetros errados"
|
||||
msgid "Requests Per Connection"
|
||||
msgstr "Pedidos por ligação"
|
||||
|
||||
#: src/language/curd.ts:13
|
||||
#: src/language/curd.ts:13 src/views/dns/components/DNSRecordFilter.vue:65
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:214
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:745
|
||||
msgid "Reset"
|
||||
@@ -5807,6 +5939,7 @@ msgstr "Sábado"
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:283
|
||||
#: src/views/config/components/ConfigName.vue:58
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:713
|
||||
#: src/views/dns/DDNSManager.vue:247 src/views/dns/DNSRecordManager.vue:215
|
||||
#: src/views/preference/components/AuthSettings/Passkey.vue:131
|
||||
#: src/views/preference/Preference.vue:124
|
||||
#: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52
|
||||
@@ -5914,12 +6047,13 @@ msgstr "Agendamento"
|
||||
msgid "Schedule Type"
|
||||
msgstr "Tipo de agendamento"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:77
|
||||
#: src/views/dns/components/DNSChallenge.vue:78
|
||||
msgid "SDK"
|
||||
msgstr "SDK"
|
||||
|
||||
#: src/language/constants.ts:62 src/language/curd.ts:12
|
||||
#: src/views/config/configColumns.tsx:5
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:62
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:217
|
||||
#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13
|
||||
msgid "Search"
|
||||
@@ -5978,10 +6112,18 @@ msgstr ""
|
||||
msgid "Select all"
|
||||
msgstr "Selecionar tudo"
|
||||
|
||||
#: src/language/constants.ts:68
|
||||
msgid "Select Credential"
|
||||
msgstr "Selecionar credencial"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:45
|
||||
msgid "Select or enter a CA directory URL"
|
||||
msgstr "Selecione ou insira um URL de diretório CA"
|
||||
|
||||
#: src/language/constants.ts:67
|
||||
msgid "Select Provider"
|
||||
msgstr "Selecionar fornecedor"
|
||||
|
||||
#: src/language/curd.ts:59
|
||||
msgid "Selected {count} files"
|
||||
msgstr "{count} ficheiros selecionados"
|
||||
@@ -6311,6 +6453,7 @@ msgstr "Estático"
|
||||
#: src/views/certificate/ACMEUser.vue:75
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:63
|
||||
#: src/views/dashboard/components/ModulesTable.vue:75
|
||||
#: src/views/dns/DDNSManager.vue:75
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:106
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:241
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:521
|
||||
@@ -6542,6 +6685,10 @@ msgstr "Restauro do sistema"
|
||||
msgid "System restored successfully."
|
||||
msgstr "Sistema restaurado com sucesso."
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:83
|
||||
msgid "Targets"
|
||||
msgstr "Alvos"
|
||||
|
||||
#: src/constants/errors/self_check.ts:3
|
||||
msgid "Task is not fixable"
|
||||
msgstr "A tarefa não é reparável"
|
||||
@@ -7091,6 +7238,14 @@ msgstr ""
|
||||
msgid "Try adjusting your search criteria or time range."
|
||||
msgstr "Tente ajustar os seus critérios de pesquisa ou o intervalo de tempo."
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:29
|
||||
msgid "TTL"
|
||||
msgstr "TTL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:78
|
||||
msgid "TTL (seconds)"
|
||||
msgstr "TTL (segundos)"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:28
|
||||
msgid "Tuesday"
|
||||
msgstr "Terça-feira"
|
||||
@@ -7103,6 +7258,9 @@ msgstr "Autenticação de dois fatores necessária"
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:24
|
||||
#: src/views/config/components/Delete.vue:122
|
||||
#: src/views/dashboard/components/ModulesTable.vue:62
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:49
|
||||
#: src/views/dns/components/DNSRecordForm.vue:57
|
||||
#: src/views/dns/components/DNSRecordTable.vue:21
|
||||
#: src/views/nginx_log/NginxLogList.vue:146
|
||||
#: src/views/notification/notificationColumns.tsx:8
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:19
|
||||
@@ -7113,6 +7271,10 @@ msgstr "Tipo"
|
||||
msgid "Type %{delete} to confirm"
|
||||
msgstr "Digite %{delete} para confirmar"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:228
|
||||
msgid "Type or select A/AAAA records"
|
||||
msgstr "Digite ou selecione registros A/AAAA"
|
||||
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:142
|
||||
msgid "Type or select browser"
|
||||
msgstr "Digite ou selecione o navegador"
|
||||
@@ -7168,9 +7330,9 @@ msgstr "Atualização bem-sucedida"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:236
|
||||
#: 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:91
|
||||
#: src/views/config/configColumns.tsx:44 src/views/dns/DNSCredential.vue:65
|
||||
#: src/views/dns/DNSDomainList.vue:205 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
|
||||
@@ -7243,6 +7405,10 @@ msgstr "Uptime:"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:64
|
||||
msgid "Use @ for root"
|
||||
msgstr "Use @ para a raiz"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:121
|
||||
msgid "Use OTP"
|
||||
msgstr "Usar OTP"
|
||||
@@ -7308,6 +7474,8 @@ msgid "Validate SSL Certificate"
|
||||
msgstr "Validar certificado SSL"
|
||||
|
||||
#: src/views/dashboard/components/PerformanceTablesCard.vue:22
|
||||
#: src/views/dns/components/DNSRecordForm.vue:66
|
||||
#: src/views/dns/components/DNSRecordTable.vue:25
|
||||
msgid "Value"
|
||||
msgstr "Valor"
|
||||
|
||||
@@ -7404,14 +7572,6 @@ msgstr ""
|
||||
msgid "We do not accept any feature requests"
|
||||
msgstr "Não aceitamos pedidos de funcionalidades"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:96
|
||||
msgid ""
|
||||
"We will add one or more TXT records to the DNS records of your domain for "
|
||||
"ownership verification."
|
||||
msgstr ""
|
||||
"Adicionaremos um ou mais registos TXT aos registos DNS do seu domínio para "
|
||||
"verificação de propriedade."
|
||||
|
||||
#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
|
||||
msgid ""
|
||||
"We will remove the HTTPChallenge configuration from this file and reload "
|
||||
@@ -7448,6 +7608,11 @@ msgstr "Semanal"
|
||||
msgid "Weekly on %{day} at %{time}"
|
||||
msgstr "Semanalmente no %{day} às %{time}"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:84
|
||||
#: src/views/dns/components/DNSRecordTable.vue:37
|
||||
msgid "Weight"
|
||||
msgstr "Peso"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:119
|
||||
msgid ""
|
||||
"When Enabled, Nginx UI will automatically re-register users upon startup. "
|
||||
@@ -7498,7 +7663,7 @@ msgstr "Processos de trabalho"
|
||||
msgid "Workers"
|
||||
msgstr "Workers"
|
||||
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:63
|
||||
#: src/views/workspace/WorkSpace.vue:51
|
||||
msgid "Workspace"
|
||||
msgstr "Espaço de Trabalho"
|
||||
@@ -7605,6 +7770,16 @@ msgstr "As suas chaves de acesso"
|
||||
msgid "Zero-allocation pipeline"
|
||||
msgstr "Pipeline sem alocação"
|
||||
|
||||
#~ 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."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "We will add one or more TXT records to the DNS records of your domain for "
|
||||
#~ "ownership verification."
|
||||
#~ msgstr ""
|
||||
#~ "Adicionaremos um ou mais registos TXT aos registos DNS do seu domínio para "
|
||||
#~ "verificação de propriedade."
|
||||
|
||||
#~ msgid "Settings"
|
||||
#~ msgstr "Configurações"
|
||||
|
||||
@@ -7626,9 +7801,6 @@ msgstr "Pipeline sem alocação"
|
||||
#~ 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)"
|
||||
|
||||
@@ -7833,9 +8005,6 @@ msgstr "Pipeline sem alocação"
|
||||
#~ msgid "Are you sure you want to apply to all selected?"
|
||||
#~ msgstr "Tem a certeza que deseja aplicar a todos os selecionados?"
|
||||
|
||||
#~ msgid "Are you sure you want to delete this item?"
|
||||
#~ msgstr "Tem certeza que pretende eliminar este item?"
|
||||
|
||||
#~ msgid "Are you sure you want to recover this item?"
|
||||
#~ msgstr "Tem certeza que pretende recuperar este item?"
|
||||
|
||||
|
||||
+218
-52
@@ -192,8 +192,10 @@ msgstr "Действие"
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:273
|
||||
#: 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:97
|
||||
#: src/views/config/configColumns.tsx:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:41
|
||||
#: src/views/dns/DDNSManager.vue:91 src/views/dns/DNSCredential.vue:71
|
||||
#: src/views/dns/DNSDomainList.vue:211 src/views/namespace/columns.ts:97
|
||||
#: src/views/nginx_log/NginxLogList.vue:338 src/views/node/nodeColumns.tsx:96
|
||||
#: src/views/notification/notificationColumns.tsx:72
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:85
|
||||
@@ -247,6 +249,10 @@ msgstr "Добавить заголовок"
|
||||
msgid "Add Location"
|
||||
msgstr "Добавить Location"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:171
|
||||
msgid "Add Record"
|
||||
msgstr "Добавить запись"
|
||||
|
||||
#: src/components/NgxConfigEditor/NgxServer.vue:92
|
||||
msgid "Add Server"
|
||||
msgstr "Добавить сервер"
|
||||
@@ -267,7 +273,7 @@ msgstr "Добавить upstream"
|
||||
msgid "Added successfully"
|
||||
msgstr "Добавлено успешно"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:97
|
||||
#: src/views/dns/components/DNSChallenge.vue:98
|
||||
msgid "Additional"
|
||||
msgstr "Дополнительно"
|
||||
|
||||
@@ -306,6 +312,10 @@ msgstr "Дополнительные настройки"
|
||||
msgid "Afterwards, refresh this page and click add passkey again."
|
||||
msgstr "После этого обновите эту страницу и снова нажмите «Добавить ключ доступа»."
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:55
|
||||
msgid "All"
|
||||
msgstr "Все"
|
||||
|
||||
#: src/views/system/Licenses.vue:152
|
||||
msgid "All Components"
|
||||
msgstr "Все компоненты"
|
||||
@@ -347,7 +357,7 @@ msgstr "Любой доступный IP-адрес можно использо
|
||||
msgid "API Base Url"
|
||||
msgstr "Базовый URL API"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:70
|
||||
#: src/views/dns/components/DNSChallenge.vue:71
|
||||
msgid "API Document"
|
||||
msgstr "API Документ"
|
||||
|
||||
@@ -383,6 +393,10 @@ msgstr "Вы уверены, что хотите немедленно удали
|
||||
msgid "Are you sure to delete this passkey immediately?"
|
||||
msgstr "Вы уверены, что хотите немедленно удалить этот ключ доступа?"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:90
|
||||
msgid "Are you sure to delete this record?"
|
||||
msgstr "Вы уверены, что хотите удалить эту запись?"
|
||||
|
||||
#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155
|
||||
msgid "Are you sure to generate new recovery codes?"
|
||||
msgstr "Вы уверены, что хотите сгенерировать новые коды восстановления?"
|
||||
@@ -556,7 +570,7 @@ msgstr "Сред./PV"
|
||||
#: src/views/certificate/components/CertificateActions.vue:22
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:274
|
||||
#: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217
|
||||
#: src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/dns/DNSRecordManager.vue:223 src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183
|
||||
#: src/views/stream/components/StreamEditor.vue:147
|
||||
msgid "Back"
|
||||
@@ -714,6 +728,10 @@ msgstr "Браузер"
|
||||
msgid "Browser Statistics"
|
||||
msgstr "Статистика браузера"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:257
|
||||
msgid "Business contact:"
|
||||
msgstr "Деловой контакт:"
|
||||
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:316
|
||||
msgid ""
|
||||
"By enabling advanced indexing, you acknowledge that your system meets the "
|
||||
@@ -786,6 +804,7 @@ msgstr ""
|
||||
#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37
|
||||
#: src/views/config/components/Delete.vue:98
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:710
|
||||
#: src/views/dns/DDNSManager.vue:244 src/views/dns/DNSRecordManager.vue:212
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:102
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:33
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:59
|
||||
@@ -932,7 +951,7 @@ msgstr "Тип сертификата"
|
||||
msgid "Certificates"
|
||||
msgstr "Сертификаты"
|
||||
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
msgid "Certificates List"
|
||||
msgstr "Список сертификатов"
|
||||
|
||||
@@ -1313,7 +1332,7 @@ msgstr "Путь конфигурации пуст"
|
||||
msgid "Config Template"
|
||||
msgstr "Шаблон конфигурации"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:52
|
||||
#: src/views/dns/DNSCredential.vue:52
|
||||
msgid "Configuration"
|
||||
msgstr "Конфигурация"
|
||||
|
||||
@@ -1341,6 +1360,14 @@ msgstr "Название конфигурации"
|
||||
msgid "Configurations"
|
||||
msgstr "Конфигурации"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:201
|
||||
msgid "Configure"
|
||||
msgstr "Настроить"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:211
|
||||
msgid "Configure DDNS"
|
||||
msgstr "Настройка DDNS"
|
||||
|
||||
#: src/views/site/site_add/SiteAdd.vue:81
|
||||
msgid "Configure SSL"
|
||||
msgstr "Настроить SSL"
|
||||
@@ -1464,6 +1491,10 @@ msgstr "Создать файл"
|
||||
msgid "Create Folder"
|
||||
msgstr "Создать папку"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Create Record"
|
||||
msgstr "Создать запись"
|
||||
|
||||
#: src/views/backup/components/BackupCreator.vue:75
|
||||
msgid ""
|
||||
"Create system backups including Nginx configuration and Nginx UI settings. "
|
||||
@@ -1490,11 +1521,12 @@ msgstr "Создано успешно"
|
||||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr "Создание клиента облегчает связь с сервером CA"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:105
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:131
|
||||
#: src/views/dns/DDNSManager.vue:65 src/views/dns/DNSDomainList.vue:109
|
||||
msgid "Credential"
|
||||
msgstr "Учетные данные"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:86
|
||||
#: src/routes/modules/dns.ts:20 src/views/dns/components/DNSChallenge.vue:87
|
||||
msgid "Credentials"
|
||||
msgstr "Учетные данные"
|
||||
|
||||
@@ -1609,6 +1641,18 @@ msgstr "Дни"
|
||||
msgid "Db file not found"
|
||||
msgstr "Файл базы данных не найден"
|
||||
|
||||
#: src/routes/modules/dns.ts:36
|
||||
msgid "DDNS"
|
||||
msgstr "DDNS"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:153
|
||||
msgid "DDNS Overview"
|
||||
msgstr "Обзор DDNS"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:135
|
||||
msgid "DDNS saved"
|
||||
msgstr "DDNS сохранено"
|
||||
|
||||
#: src/constants/errors/geolite.ts:12
|
||||
msgid "Decompression succeeded but failed to delete compressed file: {0}"
|
||||
msgstr "Разархивирование успешно завершено, но не удалось удалить сжатый файл: {0}"
|
||||
@@ -1633,6 +1677,7 @@ msgstr "Определите имя и размер зоны общей памя
|
||||
#: src/views/config/components/Delete.vue:65
|
||||
#: src/views/config/components/Delete.vue:97
|
||||
#: src/views/config/ConfigList.vue:199
|
||||
#: src/views/dns/components/DNSRecordTable.vue:94
|
||||
#: src/views/site/site_list/SiteList.vue:100
|
||||
#: src/views/stream/StreamList.vue:110
|
||||
msgid "Delete"
|
||||
@@ -1874,7 +1919,8 @@ msgid "Disable stream %{name} from %{node} successfully"
|
||||
msgstr "Поток %{name} отключен от %{node} успешно"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:175
|
||||
#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:60
|
||||
#: src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/NodeSettings.vue:25
|
||||
#: src/views/preference/tabs/NodeSettings.vue:30
|
||||
@@ -1899,16 +1945,35 @@ msgstr "Отключено"
|
||||
msgid "Disk IO"
|
||||
msgstr "Нагрузка на Диск IO"
|
||||
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
#: src/views/certificate/DNSCredential.vue:79
|
||||
#: src/routes/modules/dns.ts:11
|
||||
msgid "DNS"
|
||||
msgstr "DNS"
|
||||
|
||||
#: src/views/dns/DNSCredential.vue:79
|
||||
msgid "DNS Credentials"
|
||||
msgstr "DNS учетные данные"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:95
|
||||
#: src/views/certificate/components/DNSChallenge.vue:59
|
||||
#: src/routes/modules/dns.ts:28 src/views/dns/DNSDomainList.vue:228
|
||||
msgid "DNS Domains"
|
||||
msgstr "Домены DNS"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "DNS Only"
|
||||
msgstr "Только DNS"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:121
|
||||
#: src/views/dns/components/DNSChallenge.vue:60
|
||||
msgid "DNS Provider"
|
||||
msgstr "Провайдер DNS"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:244
|
||||
msgid "DNS Provider Support"
|
||||
msgstr "Поддержка DNS-провайдера"
|
||||
|
||||
#: src/routes/modules/dns.ts:44 src/views/dns/DNSRecordManager.vue:58
|
||||
msgid "DNS Records"
|
||||
msgstr "DNS-записи"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:678
|
||||
msgid "DNS Resolver"
|
||||
msgstr "DNS-резолвер"
|
||||
@@ -1969,6 +2034,7 @@ msgid "Document Count"
|
||||
msgstr "Количество документов"
|
||||
|
||||
#: src/views/certificate/components/DNSIssueCertificate.vue:119
|
||||
#: src/views/dns/DDNSManager.vue:60 src/views/dns/DNSDomainList.vue:98
|
||||
msgid "Domain"
|
||||
msgstr "Домен"
|
||||
|
||||
@@ -2057,7 +2123,7 @@ msgstr "Ключ HMAC EAB"
|
||||
msgid "EAB Key ID"
|
||||
msgstr "ID ключа EAB"
|
||||
|
||||
#: src/language/curd.ts:8
|
||||
#: src/language/curd.ts:8 src/views/dns/components/DNSRecordTable.vue:87
|
||||
msgid "Edit"
|
||||
msgstr "Редактировать"
|
||||
|
||||
@@ -2071,6 +2137,10 @@ msgstr "Редактировать %{n}"
|
||||
msgid "Edit Configuration"
|
||||
msgstr "Редактировать Конфигурацию"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Edit Record"
|
||||
msgstr "Редактировать запись"
|
||||
|
||||
#: src/routes/modules/sites.ts:34
|
||||
msgid "Edit Site"
|
||||
msgstr "Редактировать Сайт"
|
||||
@@ -2121,6 +2191,10 @@ msgstr "Включить автодополнение кода"
|
||||
msgid "Enable compression for content transfer"
|
||||
msgstr "Включить сжатие для передачи контента"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:218
|
||||
msgid "Enable DDNS"
|
||||
msgstr "Включить DDNS"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:473
|
||||
msgid "Enable Health Check"
|
||||
msgstr "Включить проверку работоспособности"
|
||||
@@ -2208,7 +2282,8 @@ msgid "Enable TOTP"
|
||||
msgstr "Включить TOTP"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:174
|
||||
#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:69
|
||||
#: src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:47
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:20
|
||||
@@ -3180,14 +3255,19 @@ msgstr "Более высокое значение означает лучшее
|
||||
msgid "History"
|
||||
msgstr "История"
|
||||
|
||||
#: src/routes/index.ts:52
|
||||
#: src/routes/index.ts:54
|
||||
msgid "Home"
|
||||
msgstr "Главная"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:42
|
||||
#: src/views/preference/tabs/ServerSettings.vue:19
|
||||
msgid "Host"
|
||||
msgstr "Хост"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:45
|
||||
msgid "Host, e.g. @ or www"
|
||||
msgstr "Хост, напр. @ или www"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:159
|
||||
#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87
|
||||
msgid "Hour"
|
||||
@@ -3260,7 +3340,7 @@ msgstr ""
|
||||
msgid "Import"
|
||||
msgstr "Импорт"
|
||||
|
||||
#: src/routes/modules/certificates.ts:54
|
||||
#: src/routes/modules/certificates.ts:46
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Import Certificate"
|
||||
msgstr "Импортировать сертификат"
|
||||
@@ -3383,10 +3463,15 @@ msgstr ""
|
||||
"Установка не разрешена через 10 минут после запуска системы, пожалуйста, "
|
||||
"перезапустите Nginx UI."
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:79
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:26
|
||||
msgid "Interval"
|
||||
msgstr "Интервал"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:232
|
||||
msgid "Interval (seconds)"
|
||||
msgstr "Интервал (секунды)"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:166
|
||||
msgid "Invalid"
|
||||
msgstr "Недействительно"
|
||||
@@ -3615,6 +3700,10 @@ msgstr "Последняя индексация"
|
||||
msgid "Last month"
|
||||
msgstr "Прошлый месяц"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:87
|
||||
msgid "Last run"
|
||||
msgstr "Последний запуск"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:138
|
||||
msgid "Last update"
|
||||
msgstr "Последнее обновление"
|
||||
@@ -3884,6 +3973,10 @@ msgstr ""
|
||||
msgid "Manage Configs"
|
||||
msgstr "Конфигурации"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:236
|
||||
msgid "Manage Records"
|
||||
msgstr "Управление записями"
|
||||
|
||||
#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45
|
||||
msgid "Manage Sites"
|
||||
msgstr "Сайты"
|
||||
@@ -4054,7 +4147,7 @@ msgstr "Изменено"
|
||||
msgid "Modify"
|
||||
msgstr "Изменить"
|
||||
|
||||
#: src/routes/modules/certificates.ts:44
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Modify Certificate"
|
||||
msgstr "Изменить сертификат"
|
||||
@@ -4115,11 +4208,13 @@ msgstr "Н/Д"
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:44
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:58
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:70
|
||||
#: src/views/certificate/DNSCredential.vue:17
|
||||
#: src/views/config/components/ConfigRightPanel/Basic.vue:34
|
||||
#: src/views/config/components/Delete.vue:123
|
||||
#: src/views/config/components/Mkdir.vue:64
|
||||
#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/config/configColumns.tsx:17
|
||||
#: src/views/dns/components/DNSRecordForm.vue:63
|
||||
#: src/views/dns/components/DNSRecordTable.vue:17
|
||||
#: src/views/dns/DNSCredential.vue:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/nginx_log/NginxLogList.vue:155 src/views/node/nodeColumns.tsx:8
|
||||
#: src/views/preference/components/AuthSettings/AddPasskey.vue:81
|
||||
#: src/views/site/site_edit/components/RightPanel/Basic.vue:36
|
||||
@@ -4147,6 +4242,14 @@ msgstr "Пространство имен"
|
||||
msgid "Namespaces"
|
||||
msgstr "Пространства имен"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:251
|
||||
msgid ""
|
||||
"Need more DNS providers? Support us through donations or contact us for "
|
||||
"commercial collaboration"
|
||||
msgstr ""
|
||||
"Нужно больше DNS-провайдеров? Поддержите нас пожертвованиями или свяжитесь "
|
||||
"с нами для коммерческого сотрудничества"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:195
|
||||
msgid "Need to enable the stub_status module"
|
||||
msgstr "Необходимо включить модуль stub_status"
|
||||
@@ -4541,6 +4644,10 @@ msgstr "Не проиндексировано"
|
||||
msgid "Not Loaded"
|
||||
msgstr "Не загружено"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:102
|
||||
msgid "Not run yet"
|
||||
msgstr "Еще не запущено"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:230
|
||||
msgid "Not supported for IP certificates"
|
||||
msgstr "Не поддерживается для IP-сертификатов"
|
||||
@@ -4550,7 +4657,7 @@ msgid "Not Valid Before: %{date}"
|
||||
msgstr "Действителен до: %{date}"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:150
|
||||
#: src/views/certificate/DNSCredential.vue:89
|
||||
#: src/views/dns/DNSCredential.vue:89
|
||||
msgid "Note"
|
||||
msgstr "Заметка"
|
||||
|
||||
@@ -4682,10 +4789,6 @@ msgstr "ОК"
|
||||
msgid "On"
|
||||
msgstr "Вкл"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:99
|
||||
msgid "Once the verification is complete, the records will be removed."
|
||||
msgstr "После завершения проверки записи будут удалены."
|
||||
|
||||
#: src/components/NamespaceTabs/NamespaceTabs.vue:164
|
||||
#: src/components/NodeCard/NodeCard.vue:51
|
||||
#: src/components/NodeSelector/NodeSelector.vue:65
|
||||
@@ -4980,7 +5083,7 @@ msgstr "Пожалуйста, заполните все поля правиль
|
||||
msgid "Please fill in required S3 configuration fields"
|
||||
msgstr "Пожалуйста, заполните обязательные поля конфигурации S3"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:93
|
||||
#: src/views/dns/DNSCredential.vue:93
|
||||
msgid ""
|
||||
"Please fill in the API authentication credentials provided by your DNS "
|
||||
"provider."
|
||||
@@ -5048,7 +5151,7 @@ msgstr "Введите ваше имя пользователя!"
|
||||
msgid "Please log in."
|
||||
msgstr "Пожалуйста, войдите в систему."
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:102
|
||||
#: src/views/dns/DNSCredential.vue:96
|
||||
msgid "Please note that the unit of time configurations below are all in seconds."
|
||||
msgstr ""
|
||||
"Обратите внимание, что единица измерения времени в конфигурациях ниже "
|
||||
@@ -5132,6 +5235,11 @@ msgstr "Настройки"
|
||||
msgid "Preparing lego configurations"
|
||||
msgstr "Подготовка конфигураций Lego"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:81
|
||||
#: src/views/dns/components/DNSRecordTable.vue:33
|
||||
msgid "Priority"
|
||||
msgstr "Приоритет"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:206
|
||||
msgid "Private CA:"
|
||||
msgstr "Частный CA:"
|
||||
@@ -5195,7 +5303,8 @@ msgstr ""
|
||||
"использовании обратного прокси настройте протокол отдельно в обратном "
|
||||
"прокси."
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:26
|
||||
#: src/views/dns/DDNSManager.vue:70 src/views/dns/DNSCredential.vue:26
|
||||
#: src/views/dns/DNSDomainList.vue:177 src/views/dns/DNSDomainList.vue:198
|
||||
msgid "Provider"
|
||||
msgstr "Провайдер"
|
||||
|
||||
@@ -5207,6 +5316,12 @@ msgstr "Поставщик не найден: {0}"
|
||||
msgid "Province / Region"
|
||||
msgstr "Провинция / Регион"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:87
|
||||
#: src/views/dns/components/DNSRecordTable.vue:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "Proxied"
|
||||
msgstr "Проксированный"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:63
|
||||
msgid "Proxy"
|
||||
msgstr "Прокси"
|
||||
@@ -5301,6 +5416,22 @@ msgstr "Проверить снова"
|
||||
msgid "Recommended:"
|
||||
msgstr "Рекомендуется:"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:113
|
||||
msgid "Record created"
|
||||
msgstr "Запись создана"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:120
|
||||
msgid "Record deleted"
|
||||
msgstr "Запись удалена"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:109
|
||||
msgid "Record updated"
|
||||
msgstr "Запись обновлена"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:221
|
||||
msgid "Records"
|
||||
msgstr "Записи"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:79
|
||||
msgid "Recovery"
|
||||
msgstr "Восстановление"
|
||||
@@ -5330,7 +5461,8 @@ msgstr "Сообщения о перенаправлении (3xx)"
|
||||
msgid "Referer"
|
||||
msgstr "Реферер"
|
||||
|
||||
#: src/language/curd.ts:70
|
||||
#: src/language/curd.ts:70 src/views/dns/DDNSManager.vue:161
|
||||
#: src/views/dns/DNSRecordManager.vue:165
|
||||
msgid "Refresh"
|
||||
msgstr "Обновить"
|
||||
|
||||
@@ -5572,7 +5704,7 @@ msgstr "Запрос с неправильными параметрами"
|
||||
msgid "Requests Per Connection"
|
||||
msgstr "Запросов на соединение"
|
||||
|
||||
#: src/language/curd.ts:13
|
||||
#: src/language/curd.ts:13 src/views/dns/components/DNSRecordFilter.vue:65
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:214
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:745
|
||||
msgid "Reset"
|
||||
@@ -5813,6 +5945,7 @@ msgstr "Суббота"
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:283
|
||||
#: src/views/config/components/ConfigName.vue:58
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:713
|
||||
#: src/views/dns/DDNSManager.vue:247 src/views/dns/DNSRecordManager.vue:215
|
||||
#: src/views/preference/components/AuthSettings/Passkey.vue:131
|
||||
#: src/views/preference/Preference.vue:124
|
||||
#: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52
|
||||
@@ -5920,12 +6053,13 @@ msgstr "Расписание"
|
||||
msgid "Schedule Type"
|
||||
msgstr "Тип расписания"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:77
|
||||
#: src/views/dns/components/DNSChallenge.vue:78
|
||||
msgid "SDK"
|
||||
msgstr "SDK"
|
||||
|
||||
#: src/language/constants.ts:62 src/language/curd.ts:12
|
||||
#: src/views/config/configColumns.tsx:5
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:62
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:217
|
||||
#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13
|
||||
msgid "Search"
|
||||
@@ -5984,10 +6118,18 @@ msgstr ""
|
||||
msgid "Select all"
|
||||
msgstr "Выбрать все"
|
||||
|
||||
#: src/language/constants.ts:68
|
||||
msgid "Select Credential"
|
||||
msgstr "Выберите учетные данные"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:45
|
||||
msgid "Select or enter a CA directory URL"
|
||||
msgstr "Выберите или введите URL-адрес каталога CA"
|
||||
|
||||
#: src/language/constants.ts:67
|
||||
msgid "Select Provider"
|
||||
msgstr "Выбрать поставщика"
|
||||
|
||||
#: src/language/curd.ts:59
|
||||
msgid "Selected {count} files"
|
||||
msgstr "Выбрано {count} файлов"
|
||||
@@ -6311,6 +6453,7 @@ msgstr "Статический"
|
||||
#: src/views/certificate/ACMEUser.vue:75
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:63
|
||||
#: src/views/dashboard/components/ModulesTable.vue:75
|
||||
#: src/views/dns/DDNSManager.vue:75
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:106
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:241
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:521
|
||||
@@ -6542,6 +6685,10 @@ msgstr "Восстановление системы"
|
||||
msgid "System restored successfully."
|
||||
msgstr "Система успешно восстановлена."
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:83
|
||||
msgid "Targets"
|
||||
msgstr "Цели"
|
||||
|
||||
#: src/constants/errors/self_check.ts:3
|
||||
msgid "Task is not fixable"
|
||||
msgstr "Задача не подлежит исправлению"
|
||||
@@ -7083,6 +7230,14 @@ msgstr "Попробуйте изменить критерии поиска ил
|
||||
msgid "Try adjusting your search criteria or time range."
|
||||
msgstr "Попробуйте изменить критерии поиска или временной диапазон."
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:29
|
||||
msgid "TTL"
|
||||
msgstr "TTL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:78
|
||||
msgid "TTL (seconds)"
|
||||
msgstr "TTL (секунды)"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:28
|
||||
msgid "Tuesday"
|
||||
msgstr "Вторник"
|
||||
@@ -7095,6 +7250,9 @@ msgstr "Требуется двухфакторная аутентификаци
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:24
|
||||
#: src/views/config/components/Delete.vue:122
|
||||
#: src/views/dashboard/components/ModulesTable.vue:62
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:49
|
||||
#: src/views/dns/components/DNSRecordForm.vue:57
|
||||
#: src/views/dns/components/DNSRecordTable.vue:21
|
||||
#: src/views/nginx_log/NginxLogList.vue:146
|
||||
#: src/views/notification/notificationColumns.tsx:8
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:19
|
||||
@@ -7105,6 +7263,10 @@ msgstr "Тип"
|
||||
msgid "Type %{delete} to confirm"
|
||||
msgstr "Введите %{delete} для подтверждения"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:228
|
||||
msgid "Type or select A/AAAA records"
|
||||
msgstr "Введите или выберите записи A/AAAA"
|
||||
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:142
|
||||
msgid "Type or select browser"
|
||||
msgstr "Введите или выберите браузер"
|
||||
@@ -7160,9 +7322,9 @@ msgstr "Успешно обновлено"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:236
|
||||
#: 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:91
|
||||
#: src/views/config/configColumns.tsx:44 src/views/dns/DNSCredential.vue:65
|
||||
#: src/views/dns/DNSDomainList.vue:205 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
|
||||
@@ -7235,6 +7397,10 @@ msgstr "Аптайм:"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:64
|
||||
msgid "Use @ for root"
|
||||
msgstr "Используйте @ для корневой записи"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:121
|
||||
msgid "Use OTP"
|
||||
msgstr "Использовать OTP"
|
||||
@@ -7300,6 +7466,8 @@ msgid "Validate SSL Certificate"
|
||||
msgstr "Проверить SSL-сертификат"
|
||||
|
||||
#: src/views/dashboard/components/PerformanceTablesCard.vue:22
|
||||
#: src/views/dns/components/DNSRecordForm.vue:66
|
||||
#: src/views/dns/components/DNSRecordTable.vue:25
|
||||
msgid "Value"
|
||||
msgstr "Значение"
|
||||
|
||||
@@ -7396,14 +7564,6 @@ msgstr ""
|
||||
msgid "We do not accept any feature requests"
|
||||
msgstr "Мы не принимаем запросы на новые функции"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:96
|
||||
msgid ""
|
||||
"We will add one or more TXT records to the DNS records of your domain for "
|
||||
"ownership verification."
|
||||
msgstr ""
|
||||
"Мы добавим одну или несколько записей TXT в DNS записи вашего домена для "
|
||||
"подтверждения права собственности."
|
||||
|
||||
#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
|
||||
msgid ""
|
||||
"We will remove the HTTPChallenge configuration from this file and reload "
|
||||
@@ -7440,6 +7600,11 @@ msgstr "Еженедельно"
|
||||
msgid "Weekly on %{day} at %{time}"
|
||||
msgstr "Еженедельно по %{day} в %{time}"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:84
|
||||
#: src/views/dns/components/DNSRecordTable.vue:37
|
||||
msgid "Weight"
|
||||
msgstr "Вес"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:119
|
||||
msgid ""
|
||||
"When Enabled, Nginx UI will automatically re-register users upon startup. "
|
||||
@@ -7491,7 +7656,7 @@ msgstr "Рабочие процессы"
|
||||
msgid "Workers"
|
||||
msgstr "Рабочие процессы"
|
||||
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:63
|
||||
#: src/views/workspace/WorkSpace.vue:51
|
||||
msgid "Workspace"
|
||||
msgstr "Рабочее пространство"
|
||||
@@ -7595,6 +7760,16 @@ msgstr "Ваши ключи доступа"
|
||||
msgid "Zero-allocation pipeline"
|
||||
msgstr "Конвейер без выделения памяти"
|
||||
|
||||
#~ msgid "Once the verification is complete, the records will be removed."
|
||||
#~ msgstr "После завершения проверки записи будут удалены."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "We will add one or more TXT records to the DNS records of your domain for "
|
||||
#~ "ownership verification."
|
||||
#~ msgstr ""
|
||||
#~ "Мы добавим одну или несколько записей TXT в DNS записи вашего домена для "
|
||||
#~ "подтверждения права собственности."
|
||||
|
||||
#~ msgid "Settings"
|
||||
#~ msgstr "Настройки"
|
||||
|
||||
@@ -7616,9 +7791,6 @@ msgstr "Конвейер без выделения памяти"
|
||||
#~ msgid "Tested in isolated sandbox mode"
|
||||
#~ msgstr "Протестировано в изолированном песочнице"
|
||||
|
||||
#~ msgid "All"
|
||||
#~ msgstr "Все"
|
||||
|
||||
#~ msgid "Based on M2 Pro (12 cores) testing"
|
||||
#~ msgstr "На основе тестирования M2 Pro (12 ядер)"
|
||||
|
||||
@@ -7823,9 +7995,6 @@ msgstr "Конвейер без выделения памяти"
|
||||
#~ msgid "Are you sure you want to apply to all selected?"
|
||||
#~ msgstr "Вы уверены, что хотите применить ко всем выбранным?"
|
||||
|
||||
#~ msgid "Are you sure you want to delete this item?"
|
||||
#~ msgstr "Вы уверены, что хотите удалить этот элемент?"
|
||||
|
||||
#~ msgid "Are you sure you want to recover this item?"
|
||||
#~ msgstr "Вы уверены, что хотите восстановить этот элемент?"
|
||||
|
||||
@@ -8045,9 +8214,6 @@ msgstr "Конвейер без выделения памяти"
|
||||
#~ msgid "Dark"
|
||||
#~ msgstr "Тёмный"
|
||||
|
||||
#~ msgid "Light"
|
||||
#~ msgstr "Светлая"
|
||||
|
||||
#~ msgid "Theme"
|
||||
#~ msgstr "Тема"
|
||||
|
||||
|
||||
+218
-49
@@ -188,8 +188,10 @@ msgstr "Eylem"
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:273
|
||||
#: 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:97
|
||||
#: src/views/config/configColumns.tsx:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:41
|
||||
#: src/views/dns/DDNSManager.vue:91 src/views/dns/DNSCredential.vue:71
|
||||
#: src/views/dns/DNSDomainList.vue:211 src/views/namespace/columns.ts:97
|
||||
#: src/views/nginx_log/NginxLogList.vue:338 src/views/node/nodeColumns.tsx:96
|
||||
#: src/views/notification/notificationColumns.tsx:72
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:85
|
||||
@@ -243,6 +245,10 @@ msgstr "Başlık Ekle"
|
||||
msgid "Add Location"
|
||||
msgstr "Konum ekle"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:171
|
||||
msgid "Add Record"
|
||||
msgstr "Kayıt Ekle"
|
||||
|
||||
#: src/components/NgxConfigEditor/NgxServer.vue:92
|
||||
msgid "Add Server"
|
||||
msgstr "Sunucu Ekle"
|
||||
@@ -263,7 +269,7 @@ msgstr "Upstream ekle"
|
||||
msgid "Added successfully"
|
||||
msgstr "Başarıyla eklendi"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:97
|
||||
#: src/views/dns/components/DNSChallenge.vue:98
|
||||
msgid "Additional"
|
||||
msgstr "İlave bilgi"
|
||||
|
||||
@@ -302,6 +308,10 @@ 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/views/dns/components/DNSRecordFilter.vue:55
|
||||
msgid "All"
|
||||
msgstr "Tümü"
|
||||
|
||||
#: src/views/system/Licenses.vue:152
|
||||
msgid "All Components"
|
||||
msgstr "Tüm Bileşenler"
|
||||
@@ -345,7 +355,7 @@ msgstr ""
|
||||
msgid "API Base Url"
|
||||
msgstr "API Temel Bağlantı Adresi"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:70
|
||||
#: src/views/dns/components/DNSChallenge.vue:71
|
||||
msgid "API Document"
|
||||
msgstr "API Dökümanı"
|
||||
|
||||
@@ -381,6 +391,10 @@ msgstr "Bu yasaklı IP'yi hemen sileceğinizden emin misiniz?"
|
||||
msgid "Are you sure to delete this passkey immediately?"
|
||||
msgstr "Bu geçiş anahtarını hemen silmek istediğinizden emin misiniz?"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:90
|
||||
msgid "Are you sure to delete this record?"
|
||||
msgstr "Bu kaydı silmek istediğinizden emin misiniz?"
|
||||
|
||||
#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155
|
||||
msgid "Are you sure to generate new recovery codes?"
|
||||
msgstr "Yeni kurtarma kodları oluşturulacaktır. Emin misiniz?"
|
||||
@@ -554,7 +568,7 @@ msgstr "Ort./PV"
|
||||
#: src/views/certificate/components/CertificateActions.vue:22
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:274
|
||||
#: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217
|
||||
#: src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/dns/DNSRecordManager.vue:223 src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183
|
||||
#: src/views/stream/components/StreamEditor.vue:147
|
||||
msgid "Back"
|
||||
@@ -704,6 +718,10 @@ msgstr "Tarayıcı"
|
||||
msgid "Browser Statistics"
|
||||
msgstr "Tarayıcı İstatistikleri"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:257
|
||||
msgid "Business contact:"
|
||||
msgstr "İş iletişimi:"
|
||||
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:316
|
||||
msgid ""
|
||||
"By enabling advanced indexing, you acknowledge that your system meets the "
|
||||
@@ -774,6 +792,7 @@ msgstr ""
|
||||
#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37
|
||||
#: src/views/config/components/Delete.vue:98
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:710
|
||||
#: src/views/dns/DDNSManager.vue:244 src/views/dns/DNSRecordManager.vue:212
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:102
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:33
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:59
|
||||
@@ -920,7 +939,7 @@ msgstr "Sertifika Türü"
|
||||
msgid "Certificates"
|
||||
msgstr "Sertifikalar"
|
||||
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
msgid "Certificates List"
|
||||
msgstr "Sertifika Listesi"
|
||||
|
||||
@@ -1307,7 +1326,7 @@ msgstr "Yapılandırma yolu boş"
|
||||
msgid "Config Template"
|
||||
msgstr "Yapılandırma Şablonu"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:52
|
||||
#: src/views/dns/DNSCredential.vue:52
|
||||
msgid "Configuration"
|
||||
msgstr "Yapılandırma"
|
||||
|
||||
@@ -1335,6 +1354,14 @@ msgstr "Yapılandırma Adı"
|
||||
msgid "Configurations"
|
||||
msgstr "Yapılandırmalar"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:201
|
||||
msgid "Configure"
|
||||
msgstr "Yapılandır"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:211
|
||||
msgid "Configure DDNS"
|
||||
msgstr "DDNS Yapılandır"
|
||||
|
||||
#: src/views/site/site_add/SiteAdd.vue:81
|
||||
msgid "Configure SSL"
|
||||
msgstr "SSL'yi Yapılandırma"
|
||||
@@ -1458,6 +1485,10 @@ msgstr "Dosya Oluştur"
|
||||
msgid "Create Folder"
|
||||
msgstr "Klasör Ekle"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Create Record"
|
||||
msgstr "Kayıt Oluştur"
|
||||
|
||||
#: src/views/backup/components/BackupCreator.vue:75
|
||||
msgid ""
|
||||
"Create system backups including Nginx configuration and Nginx UI settings. "
|
||||
@@ -1483,11 +1514,12 @@ msgstr "Başarıyla oluşturuldu"
|
||||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr "İstemci oluşturmak, CA sunucusuyla iletişimi kolaylaştırır"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:105
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:131
|
||||
#: src/views/dns/DDNSManager.vue:65 src/views/dns/DNSDomainList.vue:109
|
||||
msgid "Credential"
|
||||
msgstr "Kimlik bilgisi"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:86
|
||||
#: src/routes/modules/dns.ts:20 src/views/dns/components/DNSChallenge.vue:87
|
||||
msgid "Credentials"
|
||||
msgstr "Kimlik bilgileri"
|
||||
|
||||
@@ -1602,6 +1634,18 @@ msgstr "Günler"
|
||||
msgid "Db file not found"
|
||||
msgstr "Veritabanı dosyası bulunamadı"
|
||||
|
||||
#: src/routes/modules/dns.ts:36
|
||||
msgid "DDNS"
|
||||
msgstr "DDNS"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:153
|
||||
msgid "DDNS Overview"
|
||||
msgstr "DDNS Genel Bakış"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:135
|
||||
msgid "DDNS saved"
|
||||
msgstr "DDNS kaydedildi"
|
||||
|
||||
#: src/constants/errors/geolite.ts:12
|
||||
msgid "Decompression succeeded but failed to delete compressed file: {0}"
|
||||
msgstr "Çözümleme başarılı oldu ancak sıkıştırılmış dosya silinemedi: {0}"
|
||||
@@ -1628,6 +1672,7 @@ msgstr ""
|
||||
#: src/views/config/components/Delete.vue:65
|
||||
#: src/views/config/components/Delete.vue:97
|
||||
#: src/views/config/ConfigList.vue:199
|
||||
#: src/views/dns/components/DNSRecordTable.vue:94
|
||||
#: src/views/site/site_list/SiteList.vue:100
|
||||
#: src/views/stream/StreamList.vue:110
|
||||
msgid "Delete"
|
||||
@@ -1869,7 +1914,8 @@ msgid "Disable stream %{name} from %{node} successfully"
|
||||
msgstr "Akış %{name}, %{node} üzerinden başarıyla devre dışı bırakıldı"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:175
|
||||
#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:60
|
||||
#: src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/NodeSettings.vue:25
|
||||
#: src/views/preference/tabs/NodeSettings.vue:30
|
||||
@@ -1894,16 +1940,35 @@ msgstr "Bağlantı kesildi"
|
||||
msgid "Disk IO"
|
||||
msgstr "Disk IO"
|
||||
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
#: src/views/certificate/DNSCredential.vue:79
|
||||
#: src/routes/modules/dns.ts:11
|
||||
msgid "DNS"
|
||||
msgstr "DNS"
|
||||
|
||||
#: src/views/dns/DNSCredential.vue:79
|
||||
msgid "DNS Credentials"
|
||||
msgstr "DNS Kimlik Bilgileri"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:95
|
||||
#: src/views/certificate/components/DNSChallenge.vue:59
|
||||
#: src/routes/modules/dns.ts:28 src/views/dns/DNSDomainList.vue:228
|
||||
msgid "DNS Domains"
|
||||
msgstr "DNS Alanları"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "DNS Only"
|
||||
msgstr "Yalnızca DNS"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:121
|
||||
#: src/views/dns/components/DNSChallenge.vue:60
|
||||
msgid "DNS Provider"
|
||||
msgstr "DNS Sağlayıcısı"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:244
|
||||
msgid "DNS Provider Support"
|
||||
msgstr "DNS Sağlayıcı Desteği"
|
||||
|
||||
#: src/routes/modules/dns.ts:44 src/views/dns/DNSRecordManager.vue:58
|
||||
msgid "DNS Records"
|
||||
msgstr "DNS Kayıtları"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:678
|
||||
msgid "DNS Resolver"
|
||||
msgstr "DNS Çözümleyici"
|
||||
@@ -1964,6 +2029,7 @@ msgid "Document Count"
|
||||
msgstr "Belge Sayısı"
|
||||
|
||||
#: src/views/certificate/components/DNSIssueCertificate.vue:119
|
||||
#: src/views/dns/DDNSManager.vue:60 src/views/dns/DNSDomainList.vue:98
|
||||
msgid "Domain"
|
||||
msgstr "Alan Adı"
|
||||
|
||||
@@ -2054,7 +2120,7 @@ msgstr "EAB HMAC Anahtarı"
|
||||
msgid "EAB Key ID"
|
||||
msgstr "EAB Anahtar Kimliği"
|
||||
|
||||
#: src/language/curd.ts:8
|
||||
#: src/language/curd.ts:8 src/views/dns/components/DNSRecordTable.vue:87
|
||||
msgid "Edit"
|
||||
msgstr "Düzenle"
|
||||
|
||||
@@ -2068,6 +2134,10 @@ msgstr "Düzenle %{n}"
|
||||
msgid "Edit Configuration"
|
||||
msgstr "Yapılandırmayı Düzenle"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Edit Record"
|
||||
msgstr "Kaydı Düzenle"
|
||||
|
||||
#: src/routes/modules/sites.ts:34
|
||||
msgid "Edit Site"
|
||||
msgstr "Siteyi Düzenle"
|
||||
@@ -2118,6 +2188,10 @@ msgstr "Kod Tamamlamayı Etkinleştir"
|
||||
msgid "Enable compression for content transfer"
|
||||
msgstr "İçerik transferi için sıkıştırmayı etkinleştir"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:218
|
||||
msgid "Enable DDNS"
|
||||
msgstr "DDNS'yi Etkinleştir"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:473
|
||||
msgid "Enable Health Check"
|
||||
msgstr "Sağlık Kontrolünü Etkinleştir"
|
||||
@@ -2205,7 +2279,8 @@ msgid "Enable TOTP"
|
||||
msgstr "TOTP'yi Etkinleştir"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:174
|
||||
#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:69
|
||||
#: src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:47
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:20
|
||||
@@ -3174,14 +3249,19 @@ msgstr "Daha yüksek bir değer, daha iyi bağlantı yeniden kullanımı anlamı
|
||||
msgid "History"
|
||||
msgstr "Geçmiş"
|
||||
|
||||
#: src/routes/index.ts:52
|
||||
#: src/routes/index.ts:54
|
||||
msgid "Home"
|
||||
msgstr "Anasayfa"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:42
|
||||
#: src/views/preference/tabs/ServerSettings.vue:19
|
||||
msgid "Host"
|
||||
msgstr "Host"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:45
|
||||
msgid "Host, e.g. @ or www"
|
||||
msgstr "Host, örn. @ veya www"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:159
|
||||
#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87
|
||||
msgid "Hour"
|
||||
@@ -3258,7 +3338,7 @@ msgstr ""
|
||||
msgid "Import"
|
||||
msgstr "İçe Aktar"
|
||||
|
||||
#: src/routes/modules/certificates.ts:54
|
||||
#: src/routes/modules/certificates.ts:46
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Import Certificate"
|
||||
msgstr "Sertifika İçe Aktar"
|
||||
@@ -3381,10 +3461,15 @@ msgstr ""
|
||||
"Sistem başlangıcından 10 dakika sonra kuruluma izin verilmez, lütfen Nginx "
|
||||
"UI'yi yeniden başlatın."
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:79
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:26
|
||||
msgid "Interval"
|
||||
msgstr "Aralık"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:232
|
||||
msgid "Interval (seconds)"
|
||||
msgstr "Aralık (saniye)"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:166
|
||||
msgid "Invalid"
|
||||
msgstr "Geçersiz"
|
||||
@@ -3613,6 +3698,10 @@ msgstr "Son Dizinlenme"
|
||||
msgid "Last month"
|
||||
msgstr "Geçen ay"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:87
|
||||
msgid "Last run"
|
||||
msgstr "Son çalıştırma"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:138
|
||||
msgid "Last update"
|
||||
msgstr "Son güncelleme"
|
||||
@@ -3881,6 +3970,10 @@ msgstr ""
|
||||
msgid "Manage Configs"
|
||||
msgstr "Yapılandırmaları Yönet"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:236
|
||||
msgid "Manage Records"
|
||||
msgstr "Kayıtları Yönet"
|
||||
|
||||
#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45
|
||||
msgid "Manage Sites"
|
||||
msgstr "Siteleri Yönet"
|
||||
@@ -4051,7 +4144,7 @@ msgstr "Değiştirilme Tarihi"
|
||||
msgid "Modify"
|
||||
msgstr "Değiştir"
|
||||
|
||||
#: src/routes/modules/certificates.ts:44
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Modify Certificate"
|
||||
msgstr "Sertifikayı Düzenle"
|
||||
@@ -4112,11 +4205,13 @@ msgstr "Yok"
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:44
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:58
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:70
|
||||
#: src/views/certificate/DNSCredential.vue:17
|
||||
#: src/views/config/components/ConfigRightPanel/Basic.vue:34
|
||||
#: src/views/config/components/Delete.vue:123
|
||||
#: src/views/config/components/Mkdir.vue:64
|
||||
#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/config/configColumns.tsx:17
|
||||
#: src/views/dns/components/DNSRecordForm.vue:63
|
||||
#: src/views/dns/components/DNSRecordTable.vue:17
|
||||
#: src/views/dns/DNSCredential.vue:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/nginx_log/NginxLogList.vue:155 src/views/node/nodeColumns.tsx:8
|
||||
#: src/views/preference/components/AuthSettings/AddPasskey.vue:81
|
||||
#: src/views/site/site_edit/components/RightPanel/Basic.vue:36
|
||||
@@ -4144,6 +4239,14 @@ msgstr "İsim alanı"
|
||||
msgid "Namespaces"
|
||||
msgstr "İsim Alanları"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:251
|
||||
msgid ""
|
||||
"Need more DNS providers? Support us through donations or contact us for "
|
||||
"commercial collaboration"
|
||||
msgstr ""
|
||||
"Daha fazla DNS sağlayıcıya mı ihtiyacınız var? Bağış yaparak bize destek "
|
||||
"olun veya ticari işbirliği için bizimle iletişime geçin"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:195
|
||||
msgid "Need to enable the stub_status module"
|
||||
msgstr "stub_status modülünün etkinleştirilmesi gerekiyor"
|
||||
@@ -4538,6 +4641,10 @@ msgstr "Dizine Alınmamış"
|
||||
msgid "Not Loaded"
|
||||
msgstr "Yüklenmedi"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:102
|
||||
msgid "Not run yet"
|
||||
msgstr "Henüz çalıştırılmadı"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:230
|
||||
msgid "Not supported for IP certificates"
|
||||
msgstr "IP sertifikaları için desteklenmiyor"
|
||||
@@ -4547,7 +4654,7 @@ msgid "Not Valid Before: %{date}"
|
||||
msgstr "Geçerlilik Başlangıç Tarihi: %{date}"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:150
|
||||
#: src/views/certificate/DNSCredential.vue:89
|
||||
#: src/views/dns/DNSCredential.vue:89
|
||||
msgid "Note"
|
||||
msgstr "Not"
|
||||
|
||||
@@ -4678,10 +4785,6 @@ msgstr "Tamam"
|
||||
msgid "On"
|
||||
msgstr "Açık"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:99
|
||||
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:164
|
||||
#: src/components/NodeCard/NodeCard.vue:51
|
||||
#: src/components/NodeSelector/NodeSelector.vue:65
|
||||
@@ -4973,7 +5076,7 @@ msgstr "Lütfen tüm alanları doğru şekilde doldurun"
|
||||
msgid "Please fill in required S3 configuration fields"
|
||||
msgstr "Lütfen gerekli S3 yapılandırma alanlarını doldurun"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:93
|
||||
#: src/views/dns/DNSCredential.vue:93
|
||||
msgid ""
|
||||
"Please fill in the API authentication credentials provided by your DNS "
|
||||
"provider."
|
||||
@@ -5039,7 +5142,7 @@ msgstr "Lütfen kullanıcı adınızı girin!"
|
||||
msgid "Please log in."
|
||||
msgstr "Lütfen giriş yapın."
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:102
|
||||
#: src/views/dns/DNSCredential.vue:96
|
||||
msgid "Please note that the unit of time configurations below are all in seconds."
|
||||
msgstr ""
|
||||
"Lütfen aşağıdaki zaman yapılandırmalarının birimlerinin saniye cinsinden "
|
||||
@@ -5123,6 +5226,11 @@ msgstr "Tercih"
|
||||
msgid "Preparing lego configurations"
|
||||
msgstr "Lego yapılandırmaları hazırlanıyor"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:81
|
||||
#: src/views/dns/components/DNSRecordTable.vue:33
|
||||
msgid "Priority"
|
||||
msgstr "Öncelik"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:206
|
||||
msgid "Private CA:"
|
||||
msgstr "Özel CA:"
|
||||
@@ -5185,7 +5293,8 @@ msgstr ""
|
||||
"Protokol yapılandırması yalnızca doğrudan bağlantı sırasında geçerlidir. "
|
||||
"Ters proxy kullanıyorsanız, protokolü ters proxyda ayrı olarak yapılandırın."
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:26
|
||||
#: src/views/dns/DDNSManager.vue:70 src/views/dns/DNSCredential.vue:26
|
||||
#: src/views/dns/DNSDomainList.vue:177 src/views/dns/DNSDomainList.vue:198
|
||||
msgid "Provider"
|
||||
msgstr "Sağlayıcı"
|
||||
|
||||
@@ -5197,6 +5306,12 @@ msgstr "Sağlayıcı bulunamadı: {0}"
|
||||
msgid "Province / Region"
|
||||
msgstr "İl / Bölge"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:87
|
||||
#: src/views/dns/components/DNSRecordTable.vue:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "Proxied"
|
||||
msgstr "Proxy'li"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:63
|
||||
msgid "Proxy"
|
||||
msgstr "Proxy"
|
||||
@@ -5291,6 +5406,22 @@ msgstr "Yeniden kontrol et"
|
||||
msgid "Recommended:"
|
||||
msgstr "Önerilen:"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:113
|
||||
msgid "Record created"
|
||||
msgstr "Kayıt oluşturuldu"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:120
|
||||
msgid "Record deleted"
|
||||
msgstr "Kayıt silindi"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:109
|
||||
msgid "Record updated"
|
||||
msgstr "Kayıt güncellendi"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:221
|
||||
msgid "Records"
|
||||
msgstr "Kayıtlar"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:79
|
||||
msgid "Recovery"
|
||||
msgstr "Kurtarma"
|
||||
@@ -5320,7 +5451,8 @@ msgstr "Yönlendirme Mesajları (3xx)"
|
||||
msgid "Referer"
|
||||
msgstr "Referer"
|
||||
|
||||
#: src/language/curd.ts:70
|
||||
#: src/language/curd.ts:70 src/views/dns/DDNSManager.vue:161
|
||||
#: src/views/dns/DNSRecordManager.vue:165
|
||||
msgid "Refresh"
|
||||
msgstr "Yenile"
|
||||
|
||||
@@ -5572,7 +5704,7 @@ msgstr "Yanlış parametrelerle istek yapıldı"
|
||||
msgid "Requests Per Connection"
|
||||
msgstr "Bağlantı Başına İstek Sayısı"
|
||||
|
||||
#: src/language/curd.ts:13
|
||||
#: src/language/curd.ts:13 src/views/dns/components/DNSRecordFilter.vue:65
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:214
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:745
|
||||
msgid "Reset"
|
||||
@@ -5812,6 +5944,7 @@ msgstr "Cumartesi"
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:283
|
||||
#: src/views/config/components/ConfigName.vue:58
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:713
|
||||
#: src/views/dns/DDNSManager.vue:247 src/views/dns/DNSRecordManager.vue:215
|
||||
#: src/views/preference/components/AuthSettings/Passkey.vue:131
|
||||
#: src/views/preference/Preference.vue:124
|
||||
#: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52
|
||||
@@ -5917,12 +6050,13 @@ msgstr "Zamanlama"
|
||||
msgid "Schedule Type"
|
||||
msgstr "Zamanlama Türü"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:77
|
||||
#: src/views/dns/components/DNSChallenge.vue:78
|
||||
msgid "SDK"
|
||||
msgstr "SDK"
|
||||
|
||||
#: src/language/constants.ts:62 src/language/curd.ts:12
|
||||
#: src/views/config/configColumns.tsx:5
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:62
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:217
|
||||
#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13
|
||||
msgid "Search"
|
||||
@@ -5981,10 +6115,18 @@ msgstr ""
|
||||
msgid "Select all"
|
||||
msgstr "Tümünü seç"
|
||||
|
||||
#: src/language/constants.ts:68
|
||||
msgid "Select Credential"
|
||||
msgstr "Kimlik Bilgilerini Seç"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:45
|
||||
msgid "Select or enter a CA directory URL"
|
||||
msgstr "Bir CA dizini URL'si seçin veya girin"
|
||||
|
||||
#: src/language/constants.ts:67
|
||||
msgid "Select Provider"
|
||||
msgstr "Sağlayıcı Seç"
|
||||
|
||||
#: src/language/curd.ts:59
|
||||
msgid "Selected {count} files"
|
||||
msgstr "Seçilen {count} dosya"
|
||||
@@ -6310,6 +6452,7 @@ msgstr "Statik"
|
||||
#: src/views/certificate/ACMEUser.vue:75
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:63
|
||||
#: src/views/dashboard/components/ModulesTable.vue:75
|
||||
#: src/views/dns/DDNSManager.vue:75
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:106
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:241
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:521
|
||||
@@ -6541,6 +6684,10 @@ msgstr "Sistem Geri Yükleme"
|
||||
msgid "System restored successfully."
|
||||
msgstr "Sistem başarıyla geri yüklendi."
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:83
|
||||
msgid "Targets"
|
||||
msgstr "Hedefler"
|
||||
|
||||
#: src/constants/errors/self_check.ts:3
|
||||
msgid "Task is not fixable"
|
||||
msgstr "Görev düzeltilemez"
|
||||
@@ -7080,6 +7227,14 @@ msgstr "Arama kriterlerinizi ayarlamayı veya farklı sayfalara gitmeyi deneyin.
|
||||
msgid "Try adjusting your search criteria or time range."
|
||||
msgstr "Arama kriterlerinizi veya zaman aralığınızı ayarlamayı deneyin."
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:29
|
||||
msgid "TTL"
|
||||
msgstr "TTL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:78
|
||||
msgid "TTL (seconds)"
|
||||
msgstr "TTL (saniye)"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:28
|
||||
msgid "Tuesday"
|
||||
msgstr "Salı"
|
||||
@@ -7092,6 +7247,9 @@ msgstr "İki faktörlü kimlik doğrulama gerekiyor"
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:24
|
||||
#: src/views/config/components/Delete.vue:122
|
||||
#: src/views/dashboard/components/ModulesTable.vue:62
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:49
|
||||
#: src/views/dns/components/DNSRecordForm.vue:57
|
||||
#: src/views/dns/components/DNSRecordTable.vue:21
|
||||
#: src/views/nginx_log/NginxLogList.vue:146
|
||||
#: src/views/notification/notificationColumns.tsx:8
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:19
|
||||
@@ -7102,6 +7260,10 @@ msgstr "Tür"
|
||||
msgid "Type %{delete} to confirm"
|
||||
msgstr "Onaylamak için %{delete} yazın"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:228
|
||||
msgid "Type or select A/AAAA records"
|
||||
msgstr "A/AAAA kayıtlarını yazın veya seçin"
|
||||
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:142
|
||||
msgid "Type or select browser"
|
||||
msgstr "Tarayıcı yazın veya seçin"
|
||||
@@ -7157,9 +7319,9 @@ msgstr "Başarıyla güncellendi"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:236
|
||||
#: 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:91
|
||||
#: src/views/config/configColumns.tsx:44 src/views/dns/DNSCredential.vue:65
|
||||
#: src/views/dns/DNSDomainList.vue:205 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,6 +7394,10 @@ msgstr "Çalışma Süresi:"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:64
|
||||
msgid "Use @ for root"
|
||||
msgstr "Kök için @ kullanın"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:121
|
||||
msgid "Use OTP"
|
||||
msgstr "OTP Kullan"
|
||||
@@ -7297,6 +7463,8 @@ msgid "Validate SSL Certificate"
|
||||
msgstr "SSL Sertifikasını Doğrula"
|
||||
|
||||
#: src/views/dashboard/components/PerformanceTablesCard.vue:22
|
||||
#: src/views/dns/components/DNSRecordForm.vue:66
|
||||
#: src/views/dns/components/DNSRecordTable.vue:25
|
||||
msgid "Value"
|
||||
msgstr "Değer"
|
||||
|
||||
@@ -7392,14 +7560,6 @@ msgstr ""
|
||||
msgid "We do not accept any feature requests"
|
||||
msgstr "Herhangi bir özellik talebini kabul etmiyoruz"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:96
|
||||
msgid ""
|
||||
"We will add one or more TXT records to the DNS records of your domain for "
|
||||
"ownership verification."
|
||||
msgstr ""
|
||||
"Mülkiyet doğrulaması için alan adınızın DNS kayıtlarına bir veya daha fazla "
|
||||
"TXT kaydı ekleyeceğiz."
|
||||
|
||||
#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
|
||||
msgid ""
|
||||
"We will remove the HTTPChallenge configuration from this file and reload "
|
||||
@@ -7436,6 +7596,11 @@ msgstr "Haftalık"
|
||||
msgid "Weekly on %{day} at %{time}"
|
||||
msgstr "Haftalık olarak %{day} günü %{time}"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:84
|
||||
#: src/views/dns/components/DNSRecordTable.vue:37
|
||||
msgid "Weight"
|
||||
msgstr "Ağırlık"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:119
|
||||
msgid ""
|
||||
"When Enabled, Nginx UI will automatically re-register users upon startup. "
|
||||
@@ -7487,7 +7652,7 @@ msgstr "Çalışan Süreçler"
|
||||
msgid "Workers"
|
||||
msgstr "Çalışanlar"
|
||||
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:63
|
||||
#: src/views/workspace/WorkSpace.vue:51
|
||||
msgid "Workspace"
|
||||
msgstr "Çalışma alanı"
|
||||
@@ -7592,6 +7757,16 @@ msgstr "Geçiş Anahtarlarınız"
|
||||
msgid "Zero-allocation pipeline"
|
||||
msgstr "Tahsisatsız boru hattı"
|
||||
|
||||
#~ msgid "Once the verification is complete, the records will be removed."
|
||||
#~ msgstr "Doğrulama tamamlandığında, kayıtlar kaldırılacaktır."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "We will add one or more TXT records to the DNS records of your domain for "
|
||||
#~ "ownership verification."
|
||||
#~ msgstr ""
|
||||
#~ "Mülkiyet doğrulaması için alan adınızın DNS kayıtlarına bir veya daha fazla "
|
||||
#~ "TXT kaydı ekleyeceğiz."
|
||||
|
||||
#~ msgid "Settings"
|
||||
#~ msgstr "Ayarlar"
|
||||
|
||||
@@ -7613,9 +7788,6 @@ msgstr "Tahsisatsız boru hattı"
|
||||
#~ 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ı"
|
||||
|
||||
@@ -7820,9 +7992,6 @@ msgstr "Tahsisatsız boru hattı"
|
||||
#~ msgid "Are you sure you want to apply to all selected?"
|
||||
#~ msgstr "Tüm seçilenlere uygulamak istediğinizden emin misiniz?"
|
||||
|
||||
#~ msgid "Are you sure you want to delete this item?"
|
||||
#~ msgstr "Bu öğeyi silmek istediğinizden emin misiniz?"
|
||||
|
||||
#~ msgid "Are you sure you want to recover this item?"
|
||||
#~ msgstr "Bu öğeyi kurtarmak istediğinizden emin misiniz?"
|
||||
|
||||
|
||||
+218
-49
@@ -192,8 +192,10 @@ msgstr "Дія"
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:273
|
||||
#: 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:97
|
||||
#: src/views/config/configColumns.tsx:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:41
|
||||
#: src/views/dns/DDNSManager.vue:91 src/views/dns/DNSCredential.vue:71
|
||||
#: src/views/dns/DNSDomainList.vue:211 src/views/namespace/columns.ts:97
|
||||
#: src/views/nginx_log/NginxLogList.vue:338 src/views/node/nodeColumns.tsx:96
|
||||
#: src/views/notification/notificationColumns.tsx:72
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:85
|
||||
@@ -247,6 +249,10 @@ msgstr "Додати заголовок"
|
||||
msgid "Add Location"
|
||||
msgstr "Додати локацію"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:171
|
||||
msgid "Add Record"
|
||||
msgstr "Додати запис"
|
||||
|
||||
#: src/components/NgxConfigEditor/NgxServer.vue:92
|
||||
msgid "Add Server"
|
||||
msgstr "Додати сервер"
|
||||
@@ -267,7 +273,7 @@ msgstr "Додати upstream"
|
||||
msgid "Added successfully"
|
||||
msgstr "Успішно додано"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:97
|
||||
#: src/views/dns/components/DNSChallenge.vue:98
|
||||
msgid "Additional"
|
||||
msgstr "Додатково"
|
||||
|
||||
@@ -306,6 +312,10 @@ msgstr "Розширені налаштування"
|
||||
msgid "Afterwards, refresh this page and click add passkey again."
|
||||
msgstr "Після цього оновіть цю сторінку та натисніть «Додати ключ доступу» знову."
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:55
|
||||
msgid "All"
|
||||
msgstr "Усі"
|
||||
|
||||
#: src/views/system/Licenses.vue:152
|
||||
msgid "All Components"
|
||||
msgstr "Усі компоненти"
|
||||
@@ -349,7 +359,7 @@ msgstr ""
|
||||
msgid "API Base Url"
|
||||
msgstr "Базова URL-адреса API"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:70
|
||||
#: src/views/dns/components/DNSChallenge.vue:71
|
||||
msgid "API Document"
|
||||
msgstr "API Документація"
|
||||
|
||||
@@ -385,6 +395,10 @@ msgstr "Ви впевнені, що хочите видалити цю забо
|
||||
msgid "Are you sure to delete this passkey immediately?"
|
||||
msgstr "Ви впевнені, що хочете видалити цей ключ?"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:90
|
||||
msgid "Are you sure to delete this record?"
|
||||
msgstr "Ви впевнені, що хочете видалити цей запис?"
|
||||
|
||||
#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155
|
||||
msgid "Are you sure to generate new recovery codes?"
|
||||
msgstr "Підтверджуєте генерацію нових кодів відновлення?"
|
||||
@@ -558,7 +572,7 @@ msgstr "Середн./PV"
|
||||
#: src/views/certificate/components/CertificateActions.vue:22
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:274
|
||||
#: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217
|
||||
#: src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/dns/DNSRecordManager.vue:223 src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183
|
||||
#: src/views/stream/components/StreamEditor.vue:147
|
||||
msgid "Back"
|
||||
@@ -714,6 +728,10 @@ msgstr "Браузер"
|
||||
msgid "Browser Statistics"
|
||||
msgstr "Статистика браузера"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:257
|
||||
msgid "Business contact:"
|
||||
msgstr "Діловий контакт:"
|
||||
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:316
|
||||
msgid ""
|
||||
"By enabling advanced indexing, you acknowledge that your system meets the "
|
||||
@@ -785,6 +803,7 @@ msgstr ""
|
||||
#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37
|
||||
#: src/views/config/components/Delete.vue:98
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:710
|
||||
#: src/views/dns/DDNSManager.vue:244 src/views/dns/DNSRecordManager.vue:212
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:102
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:33
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:59
|
||||
@@ -930,7 +949,7 @@ msgstr "Тип сертифіката"
|
||||
msgid "Certificates"
|
||||
msgstr "Сертифікати"
|
||||
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
msgid "Certificates List"
|
||||
msgstr "Список сертифікатів"
|
||||
|
||||
@@ -1309,7 +1328,7 @@ msgstr "Конфігурація порожній"
|
||||
msgid "Config Template"
|
||||
msgstr "Шаблон конфігурації"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:52
|
||||
#: src/views/dns/DNSCredential.vue:52
|
||||
msgid "Configuration"
|
||||
msgstr "Конфігурація"
|
||||
|
||||
@@ -1337,6 +1356,14 @@ msgstr "Назва конфігурації"
|
||||
msgid "Configurations"
|
||||
msgstr "Конфігурації"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:201
|
||||
msgid "Configure"
|
||||
msgstr "Налаштувати"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:211
|
||||
msgid "Configure DDNS"
|
||||
msgstr "Налаштувати DDNS"
|
||||
|
||||
#: src/views/site/site_add/SiteAdd.vue:81
|
||||
msgid "Configure SSL"
|
||||
msgstr "Налаштувати SSL"
|
||||
@@ -1460,6 +1487,10 @@ msgstr "Створити файл"
|
||||
msgid "Create Folder"
|
||||
msgstr "Створити папку"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Create Record"
|
||||
msgstr "Створити запис"
|
||||
|
||||
#: src/views/backup/components/BackupCreator.vue:75
|
||||
msgid ""
|
||||
"Create system backups including Nginx configuration and Nginx UI settings. "
|
||||
@@ -1486,11 +1517,12 @@ msgstr "Успішно створено"
|
||||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr "Створення клієнта сприяє комунікації з сервером CA"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:105
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:131
|
||||
#: src/views/dns/DDNSManager.vue:65 src/views/dns/DNSDomainList.vue:109
|
||||
msgid "Credential"
|
||||
msgstr "Облікові дані"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:86
|
||||
#: src/routes/modules/dns.ts:20 src/views/dns/components/DNSChallenge.vue:87
|
||||
msgid "Credentials"
|
||||
msgstr "Повноваження"
|
||||
|
||||
@@ -1641,6 +1673,18 @@ msgstr "Дні"
|
||||
msgid "Db file not found"
|
||||
msgstr "Файл бази даних не знайдено"
|
||||
|
||||
#: src/routes/modules/dns.ts:36
|
||||
msgid "DDNS"
|
||||
msgstr "DDNS"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:153
|
||||
msgid "DDNS Overview"
|
||||
msgstr "Огляд DDNS"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:135
|
||||
msgid "DDNS saved"
|
||||
msgstr "DDNS збережено"
|
||||
|
||||
#: src/constants/errors/geolite.ts:12
|
||||
msgid "Decompression succeeded but failed to delete compressed file: {0}"
|
||||
msgstr "Розпакування успішне, але не вдалося видалити стиснений файл: {0}"
|
||||
@@ -1665,6 +1709,7 @@ msgstr "Вкажіть назву та розмір зони спільної п
|
||||
#: src/views/config/components/Delete.vue:65
|
||||
#: src/views/config/components/Delete.vue:97
|
||||
#: src/views/config/ConfigList.vue:199
|
||||
#: src/views/dns/components/DNSRecordTable.vue:94
|
||||
#: src/views/site/site_list/SiteList.vue:100
|
||||
#: src/views/stream/StreamList.vue:110
|
||||
msgid "Delete"
|
||||
@@ -1942,7 +1987,8 @@ msgid "Disable stream %{name} from %{node} successfully"
|
||||
msgstr "Потік %{name} успішно вимкнено з %{node}"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:175
|
||||
#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:60
|
||||
#: src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/NodeSettings.vue:25
|
||||
#: src/views/preference/tabs/NodeSettings.vue:30
|
||||
@@ -1967,16 +2013,35 @@ msgstr "Відключено"
|
||||
msgid "Disk IO"
|
||||
msgstr "Дисковий ввід/вивід"
|
||||
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
#: src/views/certificate/DNSCredential.vue:79
|
||||
#: src/routes/modules/dns.ts:11
|
||||
msgid "DNS"
|
||||
msgstr "DNS"
|
||||
|
||||
#: src/views/dns/DNSCredential.vue:79
|
||||
msgid "DNS Credentials"
|
||||
msgstr "DNS облікові дані"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:95
|
||||
#: src/views/certificate/components/DNSChallenge.vue:59
|
||||
#: src/routes/modules/dns.ts:28 src/views/dns/DNSDomainList.vue:228
|
||||
msgid "DNS Domains"
|
||||
msgstr "Домени DNS"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "DNS Only"
|
||||
msgstr "Лише DNS"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:121
|
||||
#: src/views/dns/components/DNSChallenge.vue:60
|
||||
msgid "DNS Provider"
|
||||
msgstr "DNS-провайдер"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:244
|
||||
msgid "DNS Provider Support"
|
||||
msgstr "Підтримка DNS-провайдера"
|
||||
|
||||
#: src/routes/modules/dns.ts:44 src/views/dns/DNSRecordManager.vue:58
|
||||
msgid "DNS Records"
|
||||
msgstr "DNS-записи"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:678
|
||||
msgid "DNS Resolver"
|
||||
msgstr "DNS-резолвер"
|
||||
@@ -2037,6 +2102,7 @@ msgid "Document Count"
|
||||
msgstr "Кількість документів"
|
||||
|
||||
#: src/views/certificate/components/DNSIssueCertificate.vue:119
|
||||
#: src/views/dns/DDNSManager.vue:60 src/views/dns/DNSDomainList.vue:98
|
||||
msgid "Domain"
|
||||
msgstr "Домен"
|
||||
|
||||
@@ -2125,7 +2191,7 @@ msgstr "Ключ HMAC EAB"
|
||||
msgid "EAB Key ID"
|
||||
msgstr "ID ключа EAB"
|
||||
|
||||
#: src/language/curd.ts:8
|
||||
#: src/language/curd.ts:8 src/views/dns/components/DNSRecordTable.vue:87
|
||||
msgid "Edit"
|
||||
msgstr "Редагувати"
|
||||
|
||||
@@ -2139,6 +2205,10 @@ msgstr "Редагувати %{n}"
|
||||
msgid "Edit Configuration"
|
||||
msgstr "Редагувати конфігурацію"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Edit Record"
|
||||
msgstr "Редагувати запис"
|
||||
|
||||
#: src/routes/modules/sites.ts:34
|
||||
msgid "Edit Site"
|
||||
msgstr "Редагувати сайт"
|
||||
@@ -2189,6 +2259,10 @@ msgstr "Увімкнути автодоповнення коду"
|
||||
msgid "Enable compression for content transfer"
|
||||
msgstr "Увімкнути стиснення для передачі вмісту"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:218
|
||||
msgid "Enable DDNS"
|
||||
msgstr "Увімкнути DDNS"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:473
|
||||
msgid "Enable Health Check"
|
||||
msgstr "Увімкнути перевірку стану"
|
||||
@@ -2276,7 +2350,8 @@ msgid "Enable TOTP"
|
||||
msgstr "Увімкнути TOTP"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:174
|
||||
#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:69
|
||||
#: src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:47
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:20
|
||||
@@ -3246,14 +3321,19 @@ msgstr "Вище значення означає краще повторне в
|
||||
msgid "History"
|
||||
msgstr "Історія"
|
||||
|
||||
#: src/routes/index.ts:52
|
||||
#: src/routes/index.ts:54
|
||||
msgid "Home"
|
||||
msgstr "Головна"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:42
|
||||
#: src/views/preference/tabs/ServerSettings.vue:19
|
||||
msgid "Host"
|
||||
msgstr "Хост"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:45
|
||||
msgid "Host, e.g. @ or www"
|
||||
msgstr "Хост, напр. @ або www"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:159
|
||||
#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87
|
||||
msgid "Hour"
|
||||
@@ -3326,7 +3406,7 @@ msgstr ""
|
||||
msgid "Import"
|
||||
msgstr "Імпорт"
|
||||
|
||||
#: src/routes/modules/certificates.ts:54
|
||||
#: src/routes/modules/certificates.ts:46
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Import Certificate"
|
||||
msgstr "Імпортувати сертифікат"
|
||||
@@ -3449,10 +3529,15 @@ msgstr ""
|
||||
"Після 10 хвилин після запуску системи установка заборонена. Будь ласка, "
|
||||
"перезапустіть Nginx UI."
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:79
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:26
|
||||
msgid "Interval"
|
||||
msgstr "Інтервал"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:232
|
||||
msgid "Interval (seconds)"
|
||||
msgstr "Інтервал (секунди)"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:166
|
||||
msgid "Invalid"
|
||||
msgstr "Недійсний"
|
||||
@@ -3681,6 +3766,10 @@ msgstr "Останнє індексування"
|
||||
msgid "Last month"
|
||||
msgstr "Минулий місяць"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:87
|
||||
msgid "Last run"
|
||||
msgstr "Останній запуск"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:138
|
||||
msgid "Last update"
|
||||
msgstr "Останнє оновлення"
|
||||
@@ -3950,6 +4039,10 @@ msgstr ""
|
||||
msgid "Manage Configs"
|
||||
msgstr "Керування конфігураціями"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:236
|
||||
msgid "Manage Records"
|
||||
msgstr "Керування записами"
|
||||
|
||||
#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45
|
||||
msgid "Manage Sites"
|
||||
msgstr "Керування сайтами"
|
||||
@@ -4120,7 +4213,7 @@ msgstr "Змінено"
|
||||
msgid "Modify"
|
||||
msgstr "Змінити"
|
||||
|
||||
#: src/routes/modules/certificates.ts:44
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Modify Certificate"
|
||||
msgstr "Редагувати сертифікат"
|
||||
@@ -4181,11 +4274,13 @@ msgstr "Н/Д"
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:44
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:58
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:70
|
||||
#: src/views/certificate/DNSCredential.vue:17
|
||||
#: src/views/config/components/ConfigRightPanel/Basic.vue:34
|
||||
#: src/views/config/components/Delete.vue:123
|
||||
#: src/views/config/components/Mkdir.vue:64
|
||||
#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/config/configColumns.tsx:17
|
||||
#: src/views/dns/components/DNSRecordForm.vue:63
|
||||
#: src/views/dns/components/DNSRecordTable.vue:17
|
||||
#: src/views/dns/DNSCredential.vue:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/nginx_log/NginxLogList.vue:155 src/views/node/nodeColumns.tsx:8
|
||||
#: src/views/preference/components/AuthSettings/AddPasskey.vue:81
|
||||
#: src/views/site/site_edit/components/RightPanel/Basic.vue:36
|
||||
@@ -4213,6 +4308,14 @@ msgstr "Простір імен"
|
||||
msgid "Namespaces"
|
||||
msgstr "Простори імен"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:251
|
||||
msgid ""
|
||||
"Need more DNS providers? Support us through donations or contact us for "
|
||||
"commercial collaboration"
|
||||
msgstr ""
|
||||
"Потрібно більше DNS-провайдерів? Підтримайте нас через пожертви або "
|
||||
"зв’яжіться з нами для комерційної співпраці"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:195
|
||||
msgid "Need to enable the stub_status module"
|
||||
msgstr "Потрібно активувати модуль stub_status"
|
||||
@@ -4607,6 +4710,10 @@ msgstr "Не індексовано"
|
||||
msgid "Not Loaded"
|
||||
msgstr "Не завантажено"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:102
|
||||
msgid "Not run yet"
|
||||
msgstr "Ще не запущено"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:230
|
||||
msgid "Not supported for IP certificates"
|
||||
msgstr "Не підтримується для IP-сертифікатів"
|
||||
@@ -4616,7 +4723,7 @@ msgid "Not Valid Before: %{date}"
|
||||
msgstr "Не дійсний до: %{date}"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:150
|
||||
#: src/views/certificate/DNSCredential.vue:89
|
||||
#: src/views/dns/DNSCredential.vue:89
|
||||
msgid "Note"
|
||||
msgstr "Примітка"
|
||||
|
||||
@@ -4748,10 +4855,6 @@ msgstr "Гаразд"
|
||||
msgid "On"
|
||||
msgstr "Увімкнено"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:99
|
||||
msgid "Once the verification is complete, the records will be removed."
|
||||
msgstr "Після завершення перевірки записи будуть видалені."
|
||||
|
||||
#: src/components/NamespaceTabs/NamespaceTabs.vue:164
|
||||
#: src/components/NodeCard/NodeCard.vue:51
|
||||
#: src/components/NodeSelector/NodeSelector.vue:65
|
||||
@@ -5044,7 +5147,7 @@ msgstr "Будь ласка, заповніть усі поля правильн
|
||||
msgid "Please fill in required S3 configuration fields"
|
||||
msgstr "Будь ласка, заповніть обов’язкові поля конфігурації S3"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:93
|
||||
#: src/views/dns/DNSCredential.vue:93
|
||||
msgid ""
|
||||
"Please fill in the API authentication credentials provided by your DNS "
|
||||
"provider."
|
||||
@@ -5110,7 +5213,7 @@ msgstr "Будь ласка, введіть ваше ім'я користува
|
||||
msgid "Please log in."
|
||||
msgstr "Будь ласка, увійдіть."
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:102
|
||||
#: src/views/dns/DNSCredential.vue:96
|
||||
msgid "Please note that the unit of time configurations below are all in seconds."
|
||||
msgstr ""
|
||||
"Будь ласка, зверніть увагу, що одиницею виміру часу в наведених нижче "
|
||||
@@ -5194,6 +5297,11 @@ msgstr "Налаштування"
|
||||
msgid "Preparing lego configurations"
|
||||
msgstr "Підготовка конфігурацій Lego"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:81
|
||||
#: src/views/dns/components/DNSRecordTable.vue:33
|
||||
msgid "Priority"
|
||||
msgstr "Пріоритет"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:206
|
||||
msgid "Private CA:"
|
||||
msgstr "Приватний CA:"
|
||||
@@ -5257,7 +5365,8 @@ msgstr ""
|
||||
"використовуєте зворотний проксі, налаштуйте протокол окремо у зворотному "
|
||||
"проксі."
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:26
|
||||
#: src/views/dns/DDNSManager.vue:70 src/views/dns/DNSCredential.vue:26
|
||||
#: src/views/dns/DNSDomainList.vue:177 src/views/dns/DNSDomainList.vue:198
|
||||
msgid "Provider"
|
||||
msgstr "Провайдер"
|
||||
|
||||
@@ -5269,6 +5378,12 @@ msgstr "Постачальника не знайдено: {0}"
|
||||
msgid "Province / Region"
|
||||
msgstr "Провінція / Регіон"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:87
|
||||
#: src/views/dns/components/DNSRecordTable.vue:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "Proxied"
|
||||
msgstr "Проксі"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:63
|
||||
msgid "Proxy"
|
||||
msgstr "Проксі"
|
||||
@@ -5363,6 +5478,22 @@ msgstr "Перевірити знову"
|
||||
msgid "Recommended:"
|
||||
msgstr "Рекомендовано:"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:113
|
||||
msgid "Record created"
|
||||
msgstr "Запис створено"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:120
|
||||
msgid "Record deleted"
|
||||
msgstr "Запис видалено"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:109
|
||||
msgid "Record updated"
|
||||
msgstr "Запис оновлено"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:221
|
||||
msgid "Records"
|
||||
msgstr "Записи"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:79
|
||||
msgid "Recovery"
|
||||
msgstr "Відновлення"
|
||||
@@ -5393,7 +5524,8 @@ msgstr "Повідомлення про перенаправлення (3xx)"
|
||||
msgid "Referer"
|
||||
msgstr "Реферер"
|
||||
|
||||
#: src/language/curd.ts:70
|
||||
#: src/language/curd.ts:70 src/views/dns/DDNSManager.vue:161
|
||||
#: src/views/dns/DNSRecordManager.vue:165
|
||||
msgid "Refresh"
|
||||
msgstr "Оновити"
|
||||
|
||||
@@ -5637,7 +5769,7 @@ msgstr "Запит з неправильними параметрами"
|
||||
msgid "Requests Per Connection"
|
||||
msgstr "Запитів на зʼєднання"
|
||||
|
||||
#: src/language/curd.ts:13
|
||||
#: src/language/curd.ts:13 src/views/dns/components/DNSRecordFilter.vue:65
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:214
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:745
|
||||
msgid "Reset"
|
||||
@@ -5880,6 +6012,7 @@ msgstr "Субота"
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:283
|
||||
#: src/views/config/components/ConfigName.vue:58
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:713
|
||||
#: src/views/dns/DDNSManager.vue:247 src/views/dns/DNSRecordManager.vue:215
|
||||
#: src/views/preference/components/AuthSettings/Passkey.vue:131
|
||||
#: src/views/preference/Preference.vue:124
|
||||
#: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52
|
||||
@@ -5987,12 +6120,13 @@ msgstr "Розклад"
|
||||
msgid "Schedule Type"
|
||||
msgstr "Тип розкладу"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:77
|
||||
#: src/views/dns/components/DNSChallenge.vue:78
|
||||
msgid "SDK"
|
||||
msgstr "SDK"
|
||||
|
||||
#: src/language/constants.ts:62 src/language/curd.ts:12
|
||||
#: src/views/config/configColumns.tsx:5
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:62
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:217
|
||||
#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13
|
||||
msgid "Search"
|
||||
@@ -6051,10 +6185,18 @@ msgstr ""
|
||||
msgid "Select all"
|
||||
msgstr "Вибрати все"
|
||||
|
||||
#: src/language/constants.ts:68
|
||||
msgid "Select Credential"
|
||||
msgstr "Виберіть облікові дані"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:45
|
||||
msgid "Select or enter a CA directory URL"
|
||||
msgstr "Виберіть або введіть URL-адресу каталогу CA"
|
||||
|
||||
#: src/language/constants.ts:67
|
||||
msgid "Select Provider"
|
||||
msgstr "Виберіть постачальника"
|
||||
|
||||
#: src/language/curd.ts:59
|
||||
msgid "Selected {count} files"
|
||||
msgstr "Вибрано {count} файлів"
|
||||
@@ -6382,6 +6524,7 @@ msgstr "Статичний"
|
||||
#: src/views/certificate/ACMEUser.vue:75
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:63
|
||||
#: src/views/dashboard/components/ModulesTable.vue:75
|
||||
#: src/views/dns/DDNSManager.vue:75
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:106
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:241
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:521
|
||||
@@ -6613,6 +6756,10 @@ msgstr "Відновлення системи"
|
||||
msgid "System restored successfully."
|
||||
msgstr "Систему успішно відновлено."
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:83
|
||||
msgid "Targets"
|
||||
msgstr "Цілі"
|
||||
|
||||
#: src/constants/errors/self_check.ts:3
|
||||
msgid "Task is not fixable"
|
||||
msgstr "Завдання не підлягає виправленню"
|
||||
@@ -7152,6 +7299,14 @@ msgstr "Спробуйте змінити критерії пошуку або
|
||||
msgid "Try adjusting your search criteria or time range."
|
||||
msgstr "Спробуйте змінити критерії пошуку або часовий діапазон."
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:29
|
||||
msgid "TTL"
|
||||
msgstr "TTL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:78
|
||||
msgid "TTL (seconds)"
|
||||
msgstr "TTL (секунди)"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:28
|
||||
msgid "Tuesday"
|
||||
msgstr "Вівторок"
|
||||
@@ -7164,6 +7319,9 @@ msgstr "Потрібна двофакторна аутентифікація"
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:24
|
||||
#: src/views/config/components/Delete.vue:122
|
||||
#: src/views/dashboard/components/ModulesTable.vue:62
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:49
|
||||
#: src/views/dns/components/DNSRecordForm.vue:57
|
||||
#: src/views/dns/components/DNSRecordTable.vue:21
|
||||
#: src/views/nginx_log/NginxLogList.vue:146
|
||||
#: src/views/notification/notificationColumns.tsx:8
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:19
|
||||
@@ -7174,6 +7332,10 @@ msgstr "Тип"
|
||||
msgid "Type %{delete} to confirm"
|
||||
msgstr "Введіть %{delete} для підтвердження"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:228
|
||||
msgid "Type or select A/AAAA records"
|
||||
msgstr "Введіть або виберіть записи A/AAAA"
|
||||
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:142
|
||||
msgid "Type or select browser"
|
||||
msgstr "Введіть або виберіть браузер"
|
||||
@@ -7229,9 +7391,9 @@ msgstr "Успішно оновлено"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:236
|
||||
#: 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:91
|
||||
#: src/views/config/configColumns.tsx:44 src/views/dns/DNSCredential.vue:65
|
||||
#: src/views/dns/DNSDomainList.vue:205 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
|
||||
@@ -7304,6 +7466,10 @@ msgstr "Час роботи:"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:64
|
||||
msgid "Use @ for root"
|
||||
msgstr "Використовуйте @ для кореня"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:121
|
||||
msgid "Use OTP"
|
||||
msgstr "Використовувати OTP"
|
||||
@@ -7369,6 +7535,8 @@ msgid "Validate SSL Certificate"
|
||||
msgstr "Перевірити SSL-сертифікат"
|
||||
|
||||
#: src/views/dashboard/components/PerformanceTablesCard.vue:22
|
||||
#: src/views/dns/components/DNSRecordForm.vue:66
|
||||
#: src/views/dns/components/DNSRecordTable.vue:25
|
||||
msgid "Value"
|
||||
msgstr "Значення"
|
||||
|
||||
@@ -7465,14 +7633,6 @@ msgstr ""
|
||||
msgid "We do not accept any feature requests"
|
||||
msgstr "Ми не приймаємо жодних запитів на функції"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:96
|
||||
msgid ""
|
||||
"We will add one or more TXT records to the DNS records of your domain for "
|
||||
"ownership verification."
|
||||
msgstr ""
|
||||
"Ми додамо один або кілька TXT-записів до DNS-записів вашого домену для "
|
||||
"підтвердження власності."
|
||||
|
||||
#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
|
||||
msgid ""
|
||||
"We will remove the HTTPChallenge configuration from this file and reload "
|
||||
@@ -7509,6 +7669,11 @@ msgstr "Щотижня"
|
||||
msgid "Weekly on %{day} at %{time}"
|
||||
msgstr "Щотижня в %{day} о %{time}"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:84
|
||||
#: src/views/dns/components/DNSRecordTable.vue:37
|
||||
msgid "Weight"
|
||||
msgstr "Вага"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:119
|
||||
msgid ""
|
||||
"When Enabled, Nginx UI will automatically re-register users upon startup. "
|
||||
@@ -7559,7 +7724,7 @@ msgstr "Робочі процеси"
|
||||
msgid "Workers"
|
||||
msgstr "Робочі процеси"
|
||||
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:63
|
||||
#: src/views/workspace/WorkSpace.vue:51
|
||||
msgid "Workspace"
|
||||
msgstr "Робоча область"
|
||||
@@ -7662,6 +7827,16 @@ msgstr "Ваші ключі доступу"
|
||||
msgid "Zero-allocation pipeline"
|
||||
msgstr "Конвеєр без виділення пам’яті"
|
||||
|
||||
#~ msgid "Once the verification is complete, the records will be removed."
|
||||
#~ msgstr "Після завершення перевірки записи будуть видалені."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "We will add one or more TXT records to the DNS records of your domain for "
|
||||
#~ "ownership verification."
|
||||
#~ msgstr ""
|
||||
#~ "Ми додамо один або кілька TXT-записів до DNS-записів вашого домену для "
|
||||
#~ "підтвердження власності."
|
||||
|
||||
#~ msgid "Settings"
|
||||
#~ msgstr "Налаштування"
|
||||
|
||||
@@ -7683,9 +7858,6 @@ msgstr "Конвеєр без виділення пам’яті"
|
||||
#~ msgid "Tested in isolated sandbox mode"
|
||||
#~ msgstr "Протестовано в ізольованому пісочниці"
|
||||
|
||||
#~ msgid "All"
|
||||
#~ msgstr "Усі"
|
||||
|
||||
#~ msgid "Based on M2 Pro (12 cores) testing"
|
||||
#~ msgstr "На основі тестування M2 Pro (12 ядер)"
|
||||
|
||||
@@ -7890,9 +8062,6 @@ msgstr "Конвеєр без виділення пам’яті"
|
||||
#~ msgid "Are you sure you want to apply to all selected?"
|
||||
#~ msgstr "Ви впевнені, що бажаєте застосувати до всіх вибраних?"
|
||||
|
||||
#~ msgid "Are you sure you want to delete this item?"
|
||||
#~ msgstr "Ви впевнені, що хочете видалити цей елемент?"
|
||||
|
||||
#~ msgid "Are you sure you want to recover this item?"
|
||||
#~ msgstr "Ви впевнені, що бажаєте відновити цей елемент?"
|
||||
|
||||
|
||||
+218
-49
@@ -182,8 +182,10 @@ msgstr "Hành động"
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:273
|
||||
#: 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:97
|
||||
#: src/views/config/configColumns.tsx:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:41
|
||||
#: src/views/dns/DDNSManager.vue:91 src/views/dns/DNSCredential.vue:71
|
||||
#: src/views/dns/DNSDomainList.vue:211 src/views/namespace/columns.ts:97
|
||||
#: src/views/nginx_log/NginxLogList.vue:338 src/views/node/nodeColumns.tsx:96
|
||||
#: src/views/notification/notificationColumns.tsx:72
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:85
|
||||
@@ -237,6 +239,10 @@ msgstr "Thêm tiêu đề"
|
||||
msgid "Add Location"
|
||||
msgstr "Thêm Location"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:171
|
||||
msgid "Add Record"
|
||||
msgstr "Thêm bản ghi"
|
||||
|
||||
#: src/components/NgxConfigEditor/NgxServer.vue:92
|
||||
msgid "Add Server"
|
||||
msgstr "Thêm máy chủ"
|
||||
@@ -257,7 +263,7 @@ msgstr "Thêm upstream"
|
||||
msgid "Added successfully"
|
||||
msgstr "Đã thêm thành công"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:97
|
||||
#: src/views/dns/components/DNSChallenge.vue:98
|
||||
msgid "Additional"
|
||||
msgstr "Bổ sung"
|
||||
|
||||
@@ -296,6 +302,10 @@ 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/views/dns/components/DNSRecordFilter.vue:55
|
||||
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"
|
||||
@@ -339,7 +349,7 @@ msgstr ""
|
||||
msgid "API Base Url"
|
||||
msgstr "URL Cơ sở API"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:70
|
||||
#: src/views/dns/components/DNSChallenge.vue:71
|
||||
msgid "API Document"
|
||||
msgstr "Tài liệu API"
|
||||
|
||||
@@ -375,6 +385,10 @@ msgstr "Bạn có chắc chắn muốn xóa IP bị cấm này ngay lập tức
|
||||
msgid "Are you sure to delete this passkey immediately?"
|
||||
msgstr "Bạn có chắc chắn muốn xóa ngay lập tức khóa truy cập này không?"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:90
|
||||
msgid "Are you sure to delete this record?"
|
||||
msgstr "Bạn có chắc chắn muốn xóa bản ghi này không?"
|
||||
|
||||
#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155
|
||||
msgid "Are you sure to generate new recovery codes?"
|
||||
msgstr "Bạn có chắc chắn muốn tạo mã khôi phục mới không?"
|
||||
@@ -544,7 +558,7 @@ msgstr "TB/PV"
|
||||
#: src/views/certificate/components/CertificateActions.vue:22
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:274
|
||||
#: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217
|
||||
#: src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/dns/DNSRecordManager.vue:223 src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183
|
||||
#: src/views/stream/components/StreamEditor.vue:147
|
||||
msgid "Back"
|
||||
@@ -694,6 +708,10 @@ msgstr "Trình duyệt"
|
||||
msgid "Browser Statistics"
|
||||
msgstr "Thống kê trình duyệt"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:257
|
||||
msgid "Business contact:"
|
||||
msgstr "Liên hệ kinh doanh:"
|
||||
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:316
|
||||
msgid ""
|
||||
"By enabling advanced indexing, you acknowledge that your system meets the "
|
||||
@@ -764,6 +782,7 @@ msgstr ""
|
||||
#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37
|
||||
#: src/views/config/components/Delete.vue:98
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:710
|
||||
#: src/views/dns/DDNSManager.vue:244 src/views/dns/DNSRecordManager.vue:212
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:102
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:33
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:59
|
||||
@@ -909,7 +928,7 @@ msgstr "Loại chứng chỉ"
|
||||
msgid "Certificates"
|
||||
msgstr "Chứng chỉ"
|
||||
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
msgid "Certificates List"
|
||||
msgstr "Danh sách chứng chỉ"
|
||||
|
||||
@@ -1287,7 +1306,7 @@ msgstr "Đường dẫn cấu hình trống"
|
||||
msgid "Config Template"
|
||||
msgstr "Mẫu cấu hình"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:52
|
||||
#: src/views/dns/DNSCredential.vue:52
|
||||
msgid "Configuration"
|
||||
msgstr "Cấu hình"
|
||||
|
||||
@@ -1315,6 +1334,14 @@ msgstr "Tên cấu hình"
|
||||
msgid "Configurations"
|
||||
msgstr "Cấu hình"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:201
|
||||
msgid "Configure"
|
||||
msgstr "Cấu hình"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:211
|
||||
msgid "Configure DDNS"
|
||||
msgstr "Cấu hình DDNS"
|
||||
|
||||
#: src/views/site/site_add/SiteAdd.vue:81
|
||||
msgid "Configure SSL"
|
||||
msgstr "Cấu hình SSL"
|
||||
@@ -1436,6 +1463,10 @@ msgstr "Tạo tệp"
|
||||
msgid "Create Folder"
|
||||
msgstr "Tạo thư mục"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Create Record"
|
||||
msgstr "Tạo bản ghi"
|
||||
|
||||
#: src/views/backup/components/BackupCreator.vue:75
|
||||
msgid ""
|
||||
"Create system backups including Nginx configuration and Nginx UI settings. "
|
||||
@@ -1461,11 +1492,12 @@ msgstr "Tạo thành công"
|
||||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr "Tạo client để giao tiếp với CA server"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:105
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:131
|
||||
#: src/views/dns/DDNSManager.vue:65 src/views/dns/DNSDomainList.vue:109
|
||||
msgid "Credential"
|
||||
msgstr "Chứng chỉ"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:86
|
||||
#: src/routes/modules/dns.ts:20 src/views/dns/components/DNSChallenge.vue:87
|
||||
msgid "Credentials"
|
||||
msgstr "Chứng chỉ"
|
||||
|
||||
@@ -1580,6 +1612,18 @@ msgstr "Ngày"
|
||||
msgid "Db file not found"
|
||||
msgstr "Tệp cơ sở dữ liệu không tìm thấy"
|
||||
|
||||
#: src/routes/modules/dns.ts:36
|
||||
msgid "DDNS"
|
||||
msgstr "DDNS"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:153
|
||||
msgid "DDNS Overview"
|
||||
msgstr "Tổng quan DDNS"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:135
|
||||
msgid "DDNS saved"
|
||||
msgstr "Đã lưu DDNS"
|
||||
|
||||
#: src/constants/errors/geolite.ts:12
|
||||
msgid "Decompression succeeded but failed to delete compressed file: {0}"
|
||||
msgstr "Giải nén thành công nhưng không thể xóa tệp đã nén: {0}"
|
||||
@@ -1604,6 +1648,7 @@ msgstr "Xác định tên và kích thước vùng bộ nhớ dùng chung, ví d
|
||||
#: src/views/config/components/Delete.vue:65
|
||||
#: src/views/config/components/Delete.vue:97
|
||||
#: src/views/config/ConfigList.vue:199
|
||||
#: src/views/dns/components/DNSRecordTable.vue:94
|
||||
#: src/views/site/site_list/SiteList.vue:100
|
||||
#: src/views/stream/StreamList.vue:110
|
||||
msgid "Delete"
|
||||
@@ -1845,7 +1890,8 @@ msgid "Disable stream %{name} from %{node} successfully"
|
||||
msgstr "Đã vô hiệu hóa luồng %{name} từ %{node} thành công"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:175
|
||||
#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:60
|
||||
#: src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/NodeSettings.vue:25
|
||||
#: src/views/preference/tabs/NodeSettings.vue:30
|
||||
@@ -1870,16 +1916,35 @@ msgstr "Ngắt kết nối"
|
||||
msgid "Disk IO"
|
||||
msgstr "Disk IO"
|
||||
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
#: src/views/certificate/DNSCredential.vue:79
|
||||
#: src/routes/modules/dns.ts:11
|
||||
msgid "DNS"
|
||||
msgstr "DNS"
|
||||
|
||||
#: src/views/dns/DNSCredential.vue:79
|
||||
msgid "DNS Credentials"
|
||||
msgstr "Xác thực DNS"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:95
|
||||
#: src/views/certificate/components/DNSChallenge.vue:59
|
||||
#: src/routes/modules/dns.ts:28 src/views/dns/DNSDomainList.vue:228
|
||||
msgid "DNS Domains"
|
||||
msgstr "Tên miền DNS"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "DNS Only"
|
||||
msgstr "Chỉ DNS"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:121
|
||||
#: src/views/dns/components/DNSChallenge.vue:60
|
||||
msgid "DNS Provider"
|
||||
msgstr "Nhà cung cấp DNS"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:244
|
||||
msgid "DNS Provider Support"
|
||||
msgstr "Hỗ trợ nhà cung cấp DNS"
|
||||
|
||||
#: src/routes/modules/dns.ts:44 src/views/dns/DNSRecordManager.vue:58
|
||||
msgid "DNS Records"
|
||||
msgstr "Bản ghi DNS"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:678
|
||||
msgid "DNS Resolver"
|
||||
msgstr "Bộ phân giải DNS"
|
||||
@@ -1940,6 +2005,7 @@ msgid "Document Count"
|
||||
msgstr "Số lượng tài liệu"
|
||||
|
||||
#: src/views/certificate/components/DNSIssueCertificate.vue:119
|
||||
#: src/views/dns/DDNSManager.vue:60 src/views/dns/DNSDomainList.vue:98
|
||||
msgid "Domain"
|
||||
msgstr "Tên miền"
|
||||
|
||||
@@ -2029,7 +2095,7 @@ msgstr "Khóa HMAC EAB"
|
||||
msgid "EAB Key ID"
|
||||
msgstr "ID khóa EAB"
|
||||
|
||||
#: src/language/curd.ts:8
|
||||
#: src/language/curd.ts:8 src/views/dns/components/DNSRecordTable.vue:87
|
||||
msgid "Edit"
|
||||
msgstr "Chỉnh sửa"
|
||||
|
||||
@@ -2043,6 +2109,10 @@ msgstr "Sửa %{n}"
|
||||
msgid "Edit Configuration"
|
||||
msgstr "Sửa cấu hình"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Edit Record"
|
||||
msgstr "Chỉnh sửa bản ghi"
|
||||
|
||||
#: src/routes/modules/sites.ts:34
|
||||
msgid "Edit Site"
|
||||
msgstr "Sửa trang web"
|
||||
@@ -2093,6 +2163,10 @@ msgstr "Bật hoàn thành mã"
|
||||
msgid "Enable compression for content transfer"
|
||||
msgstr "Bật nén để chuyển nội dung"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:218
|
||||
msgid "Enable DDNS"
|
||||
msgstr "Bật DDNS"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:473
|
||||
msgid "Enable Health Check"
|
||||
msgstr "Bật kiểm tra tình trạng"
|
||||
@@ -2180,7 +2254,8 @@ msgid "Enable TOTP"
|
||||
msgstr "Bật TOTP"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:174
|
||||
#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:69
|
||||
#: src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:47
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:20
|
||||
@@ -3146,14 +3221,19 @@ msgstr "Giá trị cao hơn có nghĩa là tái sử dụng kết nối tốt h
|
||||
msgid "History"
|
||||
msgstr "Lịch sử"
|
||||
|
||||
#: src/routes/index.ts:52
|
||||
#: src/routes/index.ts:54
|
||||
msgid "Home"
|
||||
msgstr "Trang chủ"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:42
|
||||
#: src/views/preference/tabs/ServerSettings.vue:19
|
||||
msgid "Host"
|
||||
msgstr "Máy chủ"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:45
|
||||
msgid "Host, e.g. @ or www"
|
||||
msgstr "Máy chủ, vd: @ hoặc www"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:159
|
||||
#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87
|
||||
msgid "Hour"
|
||||
@@ -3225,7 +3305,7 @@ msgstr ""
|
||||
msgid "Import"
|
||||
msgstr "Nhập"
|
||||
|
||||
#: src/routes/modules/certificates.ts:54
|
||||
#: src/routes/modules/certificates.ts:46
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Import Certificate"
|
||||
msgstr "Nhập chứng chỉ"
|
||||
@@ -3348,10 +3428,15 @@ msgstr ""
|
||||
"Không được phép cài đặt sau 10 phút khởi động hệ thống, vui lòng khởi động "
|
||||
"lại Nginx UI."
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:79
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:26
|
||||
msgid "Interval"
|
||||
msgstr "Khoảng thời gian"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:232
|
||||
msgid "Interval (seconds)"
|
||||
msgstr "Khoảng thời gian (giây)"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:166
|
||||
msgid "Invalid"
|
||||
msgstr "Không hợp lệ"
|
||||
@@ -3580,6 +3665,10 @@ msgstr "Lần lập chỉ mục cuối"
|
||||
msgid "Last month"
|
||||
msgstr "Tháng trước"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:87
|
||||
msgid "Last run"
|
||||
msgstr "Lần chạy cuối"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:138
|
||||
msgid "Last update"
|
||||
msgstr "Cập nhật cuối cùng"
|
||||
@@ -3849,6 +3938,10 @@ msgstr ""
|
||||
msgid "Manage Configs"
|
||||
msgstr "Quản lý cấu hình"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:236
|
||||
msgid "Manage Records"
|
||||
msgstr "Quản lý bản ghi"
|
||||
|
||||
#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45
|
||||
msgid "Manage Sites"
|
||||
msgstr "Quản lý Website"
|
||||
@@ -4019,7 +4112,7 @@ msgstr "Đã sửa đổi lúc"
|
||||
msgid "Modify"
|
||||
msgstr "Sửa đổi"
|
||||
|
||||
#: src/routes/modules/certificates.ts:44
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Modify Certificate"
|
||||
msgstr "Sửa đổi chứng chỉ"
|
||||
@@ -4080,11 +4173,13 @@ msgstr "Không có"
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:44
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:58
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:70
|
||||
#: src/views/certificate/DNSCredential.vue:17
|
||||
#: src/views/config/components/ConfigRightPanel/Basic.vue:34
|
||||
#: src/views/config/components/Delete.vue:123
|
||||
#: src/views/config/components/Mkdir.vue:64
|
||||
#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/config/configColumns.tsx:17
|
||||
#: src/views/dns/components/DNSRecordForm.vue:63
|
||||
#: src/views/dns/components/DNSRecordTable.vue:17
|
||||
#: src/views/dns/DNSCredential.vue:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/nginx_log/NginxLogList.vue:155 src/views/node/nodeColumns.tsx:8
|
||||
#: src/views/preference/components/AuthSettings/AddPasskey.vue:81
|
||||
#: src/views/site/site_edit/components/RightPanel/Basic.vue:36
|
||||
@@ -4112,6 +4207,14 @@ msgstr "Không gian tên"
|
||||
msgid "Namespaces"
|
||||
msgstr "Không gian tên"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:251
|
||||
msgid ""
|
||||
"Need more DNS providers? Support us through donations or contact us for "
|
||||
"commercial collaboration"
|
||||
msgstr ""
|
||||
"Cần thêm nhà cung cấp DNS? Hãy hỗ trợ chúng tôi qua quyên góp hoặc liên hệ "
|
||||
"để hợp tác thương mại"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:195
|
||||
msgid "Need to enable the stub_status module"
|
||||
msgstr "Cần bật module stub_status"
|
||||
@@ -4506,6 +4609,10 @@ msgstr "Chưa được lập chỉ mục"
|
||||
msgid "Not Loaded"
|
||||
msgstr "Chưa tải"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:102
|
||||
msgid "Not run yet"
|
||||
msgstr "Chưa được chạy"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:230
|
||||
msgid "Not supported for IP certificates"
|
||||
msgstr "Không hỗ trợ cho chứng chỉ IP"
|
||||
@@ -4515,7 +4622,7 @@ msgid "Not Valid Before: %{date}"
|
||||
msgstr "Không hợp lệ trước: %{date}"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:150
|
||||
#: src/views/certificate/DNSCredential.vue:89
|
||||
#: src/views/dns/DNSCredential.vue:89
|
||||
msgid "Note"
|
||||
msgstr "Ghi chú"
|
||||
|
||||
@@ -4644,10 +4751,6 @@ msgstr "Đồng ý"
|
||||
msgid "On"
|
||||
msgstr "Bật"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:99
|
||||
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:164
|
||||
#: src/components/NodeCard/NodeCard.vue:51
|
||||
#: src/components/NodeSelector/NodeSelector.vue:65
|
||||
@@ -4940,7 +5043,7 @@ msgstr "Vui lòng điền đầy đủ và chính xác tất cả các trường
|
||||
msgid "Please fill in required S3 configuration fields"
|
||||
msgstr "Vui lòng điền vào các trường cấu hình S3 bắt buộc"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:93
|
||||
#: src/views/dns/DNSCredential.vue:93
|
||||
msgid ""
|
||||
"Please fill in the API authentication credentials provided by your DNS "
|
||||
"provider."
|
||||
@@ -5001,7 +5104,7 @@ msgstr "Vui lòng nhập username!"
|
||||
msgid "Please log in."
|
||||
msgstr "Vui lòng đăng nhập."
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:102
|
||||
#: src/views/dns/DNSCredential.vue:96
|
||||
msgid "Please note that the unit of time configurations below are all in seconds."
|
||||
msgstr "Lưu ý đơn vị cấu hình thời gian bên dưới được tính bằng giây."
|
||||
|
||||
@@ -5081,6 +5184,11 @@ msgstr "Cài đặt"
|
||||
msgid "Preparing lego configurations"
|
||||
msgstr "Chuẩn bị cấu hình Lego"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:81
|
||||
#: src/views/dns/components/DNSRecordTable.vue:33
|
||||
msgid "Priority"
|
||||
msgstr "Ưu tiên"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:206
|
||||
msgid "Private CA:"
|
||||
msgstr "CA riêng:"
|
||||
@@ -5143,7 +5251,8 @@ msgstr ""
|
||||
"Cấu hình giao thức chỉ có hiệu lực khi kết nối trực tiếp. Nếu sử dụng proxy "
|
||||
"ngược, vui lòng cấu hình giao thức riêng trong proxy ngược."
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:26
|
||||
#: src/views/dns/DDNSManager.vue:70 src/views/dns/DNSCredential.vue:26
|
||||
#: src/views/dns/DNSDomainList.vue:177 src/views/dns/DNSDomainList.vue:198
|
||||
msgid "Provider"
|
||||
msgstr "Nhà cung cấp"
|
||||
|
||||
@@ -5155,6 +5264,12 @@ msgstr "Không tìm thấy nhà cung cấp: {0}"
|
||||
msgid "Province / Region"
|
||||
msgstr "Tỉnh / Vùng"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:87
|
||||
#: src/views/dns/components/DNSRecordTable.vue:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "Proxied"
|
||||
msgstr "Được proxy"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:63
|
||||
msgid "Proxy"
|
||||
msgstr "Proxy"
|
||||
@@ -5249,6 +5364,22 @@ msgstr "Kiểm tra lại"
|
||||
msgid "Recommended:"
|
||||
msgstr "Đề xuất:"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:113
|
||||
msgid "Record created"
|
||||
msgstr "Đã tạo bản ghi"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:120
|
||||
msgid "Record deleted"
|
||||
msgstr "Đã xóa bản ghi"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:109
|
||||
msgid "Record updated"
|
||||
msgstr "Bản ghi đã được cập nhật"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:221
|
||||
msgid "Records"
|
||||
msgstr "Bản ghi"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:79
|
||||
msgid "Recovery"
|
||||
msgstr "Khôi phục"
|
||||
@@ -5278,7 +5409,8 @@ msgstr "Thông điệp chuyển hướng (3xx)"
|
||||
msgid "Referer"
|
||||
msgstr "Người giới thiệu"
|
||||
|
||||
#: src/language/curd.ts:70
|
||||
#: src/language/curd.ts:70 src/views/dns/DDNSManager.vue:161
|
||||
#: src/views/dns/DNSRecordManager.vue:165
|
||||
msgid "Refresh"
|
||||
msgstr "Làm mới"
|
||||
|
||||
@@ -5520,7 +5652,7 @@ msgstr "Yêu cầu có chứa tham số sai"
|
||||
msgid "Requests Per Connection"
|
||||
msgstr "Yêu cầu mỗi kết nối"
|
||||
|
||||
#: src/language/curd.ts:13
|
||||
#: src/language/curd.ts:13 src/views/dns/components/DNSRecordFilter.vue:65
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:214
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:745
|
||||
msgid "Reset"
|
||||
@@ -5761,6 +5893,7 @@ msgstr "Thứ Bảy"
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:283
|
||||
#: src/views/config/components/ConfigName.vue:58
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:713
|
||||
#: src/views/dns/DDNSManager.vue:247 src/views/dns/DNSRecordManager.vue:215
|
||||
#: src/views/preference/components/AuthSettings/Passkey.vue:131
|
||||
#: src/views/preference/Preference.vue:124
|
||||
#: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52
|
||||
@@ -5866,12 +5999,13 @@ msgstr "Lịch trình"
|
||||
msgid "Schedule Type"
|
||||
msgstr "Loại lịch trình"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:77
|
||||
#: src/views/dns/components/DNSChallenge.vue:78
|
||||
msgid "SDK"
|
||||
msgstr "SDK"
|
||||
|
||||
#: src/language/constants.ts:62 src/language/curd.ts:12
|
||||
#: src/views/config/configColumns.tsx:5
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:62
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:217
|
||||
#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13
|
||||
msgid "Search"
|
||||
@@ -5930,10 +6064,18 @@ msgstr ""
|
||||
msgid "Select all"
|
||||
msgstr "Chọn tất cả"
|
||||
|
||||
#: src/language/constants.ts:68
|
||||
msgid "Select Credential"
|
||||
msgstr "Chọn thông tin xác thực"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:45
|
||||
msgid "Select or enter a CA directory URL"
|
||||
msgstr "Chọn hoặc nhập URL thư mục CA"
|
||||
|
||||
#: src/language/constants.ts:67
|
||||
msgid "Select Provider"
|
||||
msgstr "Chọn nhà cung cấp"
|
||||
|
||||
#: src/language/curd.ts:59
|
||||
msgid "Selected {count} files"
|
||||
msgstr "Đã chọn {count} tệp"
|
||||
@@ -6257,6 +6399,7 @@ msgstr "Tĩnh"
|
||||
#: src/views/certificate/ACMEUser.vue:75
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:63
|
||||
#: src/views/dashboard/components/ModulesTable.vue:75
|
||||
#: src/views/dns/DDNSManager.vue:75
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:106
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:241
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:521
|
||||
@@ -6488,6 +6631,10 @@ msgstr "Khôi phục hệ thống"
|
||||
msgid "System restored successfully."
|
||||
msgstr "Hệ thống đã được khôi phục thành công."
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:83
|
||||
msgid "Targets"
|
||||
msgstr "Mục tiêu"
|
||||
|
||||
#: src/constants/errors/self_check.ts:3
|
||||
msgid "Task is not fixable"
|
||||
msgstr "Nhiệm vụ không thể sửa chữa"
|
||||
@@ -7027,6 +7174,14 @@ msgstr "Hãy thử điều chỉnh tiêu chí tìm kiếm hoặc điều hướn
|
||||
msgid "Try adjusting your search criteria or time range."
|
||||
msgstr "Hãy thử điều chỉnh tiêu chí tìm kiếm hoặc khoảng thời gian."
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:29
|
||||
msgid "TTL"
|
||||
msgstr "TTL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:78
|
||||
msgid "TTL (seconds)"
|
||||
msgstr "TTL (giây)"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:28
|
||||
msgid "Tuesday"
|
||||
msgstr "Thứ Ba"
|
||||
@@ -7039,6 +7194,9 @@ msgstr "Yêu cầu xác thực hai yếu tố"
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:24
|
||||
#: src/views/config/components/Delete.vue:122
|
||||
#: src/views/dashboard/components/ModulesTable.vue:62
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:49
|
||||
#: src/views/dns/components/DNSRecordForm.vue:57
|
||||
#: src/views/dns/components/DNSRecordTable.vue:21
|
||||
#: src/views/nginx_log/NginxLogList.vue:146
|
||||
#: src/views/notification/notificationColumns.tsx:8
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:19
|
||||
@@ -7049,6 +7207,10 @@ msgstr "Loại"
|
||||
msgid "Type %{delete} to confirm"
|
||||
msgstr "Nhập %{delete} để xác nhận"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:228
|
||||
msgid "Type or select A/AAAA records"
|
||||
msgstr "Nhập hoặc chọn bản ghi A/AAAA"
|
||||
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:142
|
||||
msgid "Type or select browser"
|
||||
msgstr "Nhập hoặc chọn trình duyệt"
|
||||
@@ -7104,9 +7266,9 @@ msgstr "Cập nhật thành công"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:236
|
||||
#: 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:91
|
||||
#: src/views/config/configColumns.tsx:44 src/views/dns/DNSCredential.vue:65
|
||||
#: src/views/dns/DNSDomainList.vue:205 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
|
||||
@@ -7179,6 +7341,10 @@ msgstr "Thời gian hoạt động:"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:64
|
||||
msgid "Use @ for root"
|
||||
msgstr "Sử dụng @ cho gốc"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:121
|
||||
msgid "Use OTP"
|
||||
msgstr "Sử dụng OTP"
|
||||
@@ -7244,6 +7410,8 @@ msgid "Validate SSL Certificate"
|
||||
msgstr "Xác thực chứng chỉ SSL"
|
||||
|
||||
#: src/views/dashboard/components/PerformanceTablesCard.vue:22
|
||||
#: src/views/dns/components/DNSRecordForm.vue:66
|
||||
#: src/views/dns/components/DNSRecordTable.vue:25
|
||||
msgid "Value"
|
||||
msgstr "Giá trị"
|
||||
|
||||
@@ -7339,14 +7507,6 @@ msgstr ""
|
||||
msgid "We do not accept any feature requests"
|
||||
msgstr "Chúng tôi không chấp nhận bất kỳ yêu cầu tính năng nào"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:96
|
||||
msgid ""
|
||||
"We will add one or more TXT records to the DNS records of your domain for "
|
||||
"ownership verification."
|
||||
msgstr ""
|
||||
"Chúng tôi sẽ thêm một hoặc nhiều bản ghi TXT để xác minh quyền sở hữu tên "
|
||||
"miền của bạn."
|
||||
|
||||
#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
|
||||
msgid ""
|
||||
"We will remove the HTTPChallenge configuration from this file and reload "
|
||||
@@ -7383,6 +7543,11 @@ msgstr "Hàng tuần"
|
||||
msgid "Weekly on %{day} at %{time}"
|
||||
msgstr "Hàng tuần vào %{day} lúc %{time}"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:84
|
||||
#: src/views/dns/components/DNSRecordTable.vue:37
|
||||
msgid "Weight"
|
||||
msgstr "Trọng lượng"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:119
|
||||
msgid ""
|
||||
"When Enabled, Nginx UI will automatically re-register users upon startup. "
|
||||
@@ -7431,7 +7596,7 @@ msgstr "Tiến trình công nhân"
|
||||
msgid "Workers"
|
||||
msgstr "Công nhân"
|
||||
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:63
|
||||
#: src/views/workspace/WorkSpace.vue:51
|
||||
msgid "Workspace"
|
||||
msgstr "Không gian làm việc"
|
||||
@@ -7534,6 +7699,16 @@ msgstr "Khóa truy cập của bạn"
|
||||
msgid "Zero-allocation pipeline"
|
||||
msgstr "Đường ống không cấp phá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."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "We will add one or more TXT records to the DNS records of your domain for "
|
||||
#~ "ownership verification."
|
||||
#~ msgstr ""
|
||||
#~ "Chúng tôi sẽ thêm một hoặc nhiều bản ghi TXT để xác minh quyền sở hữu tên "
|
||||
#~ "miền của bạn."
|
||||
|
||||
#~ msgid "Settings"
|
||||
#~ msgstr "Cài đặt"
|
||||
|
||||
@@ -7555,9 +7730,6 @@ msgstr "Đường ống không cấp phát"
|
||||
#~ 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)"
|
||||
|
||||
@@ -7762,9 +7934,6 @@ msgstr "Đường ống không cấp phát"
|
||||
#~ msgid "Are you sure you want to apply to all selected?"
|
||||
#~ msgstr "Bạn có chắc chắn muốn áp dụng cho tất cả các mục đã chọn không?"
|
||||
|
||||
#~ msgid "Are you sure you want to delete this item?"
|
||||
#~ 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 recover this item?"
|
||||
#~ msgstr "Bạn có chắc chắn muốn khôi phục mục này không?"
|
||||
|
||||
|
||||
+214
-50
@@ -182,8 +182,10 @@ msgstr "操作"
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:273
|
||||
#: 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:97
|
||||
#: src/views/config/configColumns.tsx:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:41
|
||||
#: src/views/dns/DDNSManager.vue:91 src/views/dns/DNSCredential.vue:71
|
||||
#: src/views/dns/DNSDomainList.vue:211 src/views/namespace/columns.ts:97
|
||||
#: src/views/nginx_log/NginxLogList.vue:338 src/views/node/nodeColumns.tsx:96
|
||||
#: src/views/notification/notificationColumns.tsx:72
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:85
|
||||
@@ -237,6 +239,10 @@ msgstr "添加标头"
|
||||
msgid "Add Location"
|
||||
msgstr "添加 Location"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:171
|
||||
msgid "Add Record"
|
||||
msgstr "添加记录"
|
||||
|
||||
#: src/components/NgxConfigEditor/NgxServer.vue:92
|
||||
msgid "Add Server"
|
||||
msgstr "添加服务器"
|
||||
@@ -257,7 +263,7 @@ msgstr "添加上游"
|
||||
msgid "Added successfully"
|
||||
msgstr "添加成功"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:97
|
||||
#: src/views/dns/components/DNSChallenge.vue:98
|
||||
msgid "Additional"
|
||||
msgstr "额外选项"
|
||||
|
||||
@@ -294,6 +300,10 @@ msgstr "高级设置"
|
||||
msgid "Afterwards, refresh this page and click add passkey again."
|
||||
msgstr "之后,请刷新此页面并再次点击添加通行密钥。"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:55
|
||||
msgid "All"
|
||||
msgstr "全部"
|
||||
|
||||
#: src/views/system/Licenses.vue:152
|
||||
msgid "All Components"
|
||||
msgstr "所有组件"
|
||||
@@ -331,7 +341,7 @@ msgstr "任何可访问的 IP 地址均可用于私有证书颁发机构"
|
||||
msgid "API Base Url"
|
||||
msgstr "API 地址"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:70
|
||||
#: src/views/dns/components/DNSChallenge.vue:71
|
||||
msgid "API Document"
|
||||
msgstr "API 文档"
|
||||
|
||||
@@ -367,6 +377,10 @@ msgstr "您确定要立即删除这个被禁用的 IP 吗?"
|
||||
msgid "Are you sure to delete this passkey immediately?"
|
||||
msgstr "您确定要立即删除这个 Passkey 吗?"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:90
|
||||
msgid "Are you sure to delete this record?"
|
||||
msgstr "确定要删除这条记录吗?"
|
||||
|
||||
#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155
|
||||
msgid "Are you sure to generate new recovery codes?"
|
||||
msgstr "您确定要生成新的恢复代码吗?"
|
||||
@@ -536,7 +550,7 @@ msgstr "平均/PV"
|
||||
#: src/views/certificate/components/CertificateActions.vue:22
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:274
|
||||
#: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217
|
||||
#: src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/dns/DNSRecordManager.vue:223 src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183
|
||||
#: src/views/stream/components/StreamEditor.vue:147
|
||||
msgid "Back"
|
||||
@@ -682,6 +696,10 @@ msgstr "浏览器"
|
||||
msgid "Browser Statistics"
|
||||
msgstr "浏览器统计"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:257
|
||||
msgid "Business contact:"
|
||||
msgstr "商务联系:"
|
||||
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:316
|
||||
msgid ""
|
||||
"By enabling advanced indexing, you acknowledge that your system meets the "
|
||||
@@ -747,6 +765,7 @@ msgstr "基于 worker_processes * worker_connections 计算得出。实际性能
|
||||
#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37
|
||||
#: src/views/config/components/Delete.vue:98
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:710
|
||||
#: src/views/dns/DDNSManager.vue:244 src/views/dns/DNSRecordManager.vue:212
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:102
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:33
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:59
|
||||
@@ -892,7 +911,7 @@ msgstr "证书类型"
|
||||
msgid "Certificates"
|
||||
msgstr "证书"
|
||||
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
msgid "Certificates List"
|
||||
msgstr "证书列表"
|
||||
|
||||
@@ -1250,7 +1269,7 @@ msgstr "配置路径为空"
|
||||
msgid "Config Template"
|
||||
msgstr "配置模板"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:52
|
||||
#: src/views/dns/DNSCredential.vue:52
|
||||
msgid "Configuration"
|
||||
msgstr "配置"
|
||||
|
||||
@@ -1278,6 +1297,14 @@ msgstr "配置名称"
|
||||
msgid "Configurations"
|
||||
msgstr "配置"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:201
|
||||
msgid "Configure"
|
||||
msgstr "配置"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:211
|
||||
msgid "Configure DDNS"
|
||||
msgstr "配置 DDNS"
|
||||
|
||||
#: src/views/site/site_add/SiteAdd.vue:81
|
||||
msgid "Configure SSL"
|
||||
msgstr "配置 SSL"
|
||||
@@ -1399,6 +1426,10 @@ msgstr "创建文件"
|
||||
msgid "Create Folder"
|
||||
msgstr "创建文件夹"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Create Record"
|
||||
msgstr "创建记录"
|
||||
|
||||
#: src/views/backup/components/BackupCreator.vue:75
|
||||
msgid ""
|
||||
"Create system backups including Nginx configuration and Nginx UI settings. "
|
||||
@@ -1422,11 +1453,12 @@ msgstr "创建成功"
|
||||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr "正在创建客户端用于与 CA 服务器通信"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:105
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:131
|
||||
#: src/views/dns/DDNSManager.vue:65 src/views/dns/DNSDomainList.vue:109
|
||||
msgid "Credential"
|
||||
msgstr "DNS 凭证"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:86
|
||||
#: src/routes/modules/dns.ts:20 src/views/dns/components/DNSChallenge.vue:87
|
||||
msgid "Credentials"
|
||||
msgstr "凭证"
|
||||
|
||||
@@ -1541,6 +1573,18 @@ msgstr "天"
|
||||
msgid "Db file not found"
|
||||
msgstr "数据库文件未找到"
|
||||
|
||||
#: src/routes/modules/dns.ts:36
|
||||
msgid "DDNS"
|
||||
msgstr "DDNS"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:153
|
||||
msgid "DDNS Overview"
|
||||
msgstr "DDNS 概览"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:135
|
||||
msgid "DDNS saved"
|
||||
msgstr "DDNS 已保存"
|
||||
|
||||
#: src/constants/errors/geolite.ts:12
|
||||
msgid "Decompression succeeded but failed to delete compressed file: {0}"
|
||||
msgstr "解压成功但删除压缩文件失败: {0}"
|
||||
@@ -1565,6 +1609,7 @@ msgstr "定义共享内存区名称和大小,例如 proxy_cache:10m"
|
||||
#: src/views/config/components/Delete.vue:65
|
||||
#: src/views/config/components/Delete.vue:97
|
||||
#: src/views/config/ConfigList.vue:199
|
||||
#: src/views/dns/components/DNSRecordTable.vue:94
|
||||
#: src/views/site/site_list/SiteList.vue:100
|
||||
#: src/views/stream/StreamList.vue:110
|
||||
msgid "Delete"
|
||||
@@ -1806,7 +1851,8 @@ msgid "Disable stream %{name} from %{node} successfully"
|
||||
msgstr "在 %{node} 上禁用 %{name} 成功"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:175
|
||||
#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:60
|
||||
#: src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/NodeSettings.vue:25
|
||||
#: src/views/preference/tabs/NodeSettings.vue:30
|
||||
@@ -1831,16 +1877,35 @@ msgstr "已断开连接"
|
||||
msgid "Disk IO"
|
||||
msgstr "磁盘 IO"
|
||||
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
#: src/views/certificate/DNSCredential.vue:79
|
||||
#: src/routes/modules/dns.ts:11
|
||||
msgid "DNS"
|
||||
msgstr "DNS"
|
||||
|
||||
#: src/views/dns/DNSCredential.vue:79
|
||||
msgid "DNS Credentials"
|
||||
msgstr "DNS 凭证"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:95
|
||||
#: src/views/certificate/components/DNSChallenge.vue:59
|
||||
#: src/routes/modules/dns.ts:28 src/views/dns/DNSDomainList.vue:228
|
||||
msgid "DNS Domains"
|
||||
msgstr "DNS 域名"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "DNS Only"
|
||||
msgstr "仅DNS"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:121
|
||||
#: src/views/dns/components/DNSChallenge.vue:60
|
||||
msgid "DNS Provider"
|
||||
msgstr "DNS 提供商"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:244
|
||||
msgid "DNS Provider Support"
|
||||
msgstr "DNS 提供商支持"
|
||||
|
||||
#: src/routes/modules/dns.ts:44 src/views/dns/DNSRecordManager.vue:58
|
||||
msgid "DNS Records"
|
||||
msgstr "DNS 记录"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:678
|
||||
msgid "DNS Resolver"
|
||||
msgstr "DNS 解析器"
|
||||
@@ -1901,6 +1966,7 @@ msgid "Document Count"
|
||||
msgstr "文档数量"
|
||||
|
||||
#: src/views/certificate/components/DNSIssueCertificate.vue:119
|
||||
#: src/views/dns/DDNSManager.vue:60 src/views/dns/DNSDomainList.vue:98
|
||||
msgid "Domain"
|
||||
msgstr "域名"
|
||||
|
||||
@@ -1986,7 +2052,7 @@ msgstr "EAB HMAC 密钥"
|
||||
msgid "EAB Key ID"
|
||||
msgstr "EAB 密钥 ID"
|
||||
|
||||
#: src/language/curd.ts:8
|
||||
#: src/language/curd.ts:8 src/views/dns/components/DNSRecordTable.vue:87
|
||||
msgid "Edit"
|
||||
msgstr "编辑"
|
||||
|
||||
@@ -2000,6 +2066,10 @@ msgstr "编辑 %{n}"
|
||||
msgid "Edit Configuration"
|
||||
msgstr "编辑配置"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Edit Record"
|
||||
msgstr "编辑记录"
|
||||
|
||||
#: src/routes/modules/sites.ts:34
|
||||
msgid "Edit Site"
|
||||
msgstr "编辑站点"
|
||||
@@ -2050,6 +2120,10 @@ msgstr "启动代码补全"
|
||||
msgid "Enable compression for content transfer"
|
||||
msgstr "启用内容传输压缩"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:218
|
||||
msgid "Enable DDNS"
|
||||
msgstr "启用 DDNS"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:473
|
||||
msgid "Enable Health Check"
|
||||
msgstr "启用健康检查"
|
||||
@@ -2137,7 +2211,8 @@ msgid "Enable TOTP"
|
||||
msgstr "启用 TOTP"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:174
|
||||
#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:69
|
||||
#: src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:47
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:20
|
||||
@@ -3080,14 +3155,19 @@ msgstr "更高的值意味着更好的连接再利用"
|
||||
msgid "History"
|
||||
msgstr "历史"
|
||||
|
||||
#: src/routes/index.ts:52
|
||||
#: src/routes/index.ts:54
|
||||
msgid "Home"
|
||||
msgstr "首页"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:42
|
||||
#: src/views/preference/tabs/ServerSettings.vue:19
|
||||
msgid "Host"
|
||||
msgstr "主机"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:45
|
||||
msgid "Host, e.g. @ or www"
|
||||
msgstr "主机,例如 @ 或 www"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:159
|
||||
#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87
|
||||
msgid "Hour"
|
||||
@@ -3153,7 +3233,7 @@ msgstr "如果您的域名有 CNAME 记录且无法获取证书,则需要启
|
||||
msgid "Import"
|
||||
msgstr "导入"
|
||||
|
||||
#: src/routes/modules/certificates.ts:54
|
||||
#: src/routes/modules/certificates.ts:46
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Import Certificate"
|
||||
msgstr "导入证书"
|
||||
@@ -3272,10 +3352,15 @@ msgid ""
|
||||
"restart the Nginx UI."
|
||||
msgstr "系统启动 10 分钟后不允许安装,请重启 Nginx UI。"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:79
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:26
|
||||
msgid "Interval"
|
||||
msgstr "间隔"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:232
|
||||
msgid "Interval (seconds)"
|
||||
msgstr "间隔(秒)"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:166
|
||||
msgid "Invalid"
|
||||
msgstr "无效的"
|
||||
@@ -3502,6 +3587,10 @@ msgstr "最后索引时间"
|
||||
msgid "Last month"
|
||||
msgstr "上个月"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:87
|
||||
msgid "Last run"
|
||||
msgstr "上次运行"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:138
|
||||
msgid "Last update"
|
||||
msgstr "上次更新"
|
||||
@@ -3762,6 +3851,10 @@ msgstr "在获取签发证书前,请确保配置文件中已将 .well-known
|
||||
msgid "Manage Configs"
|
||||
msgstr "配置管理"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:236
|
||||
msgid "Manage Records"
|
||||
msgstr "管理记录"
|
||||
|
||||
#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45
|
||||
msgid "Manage Sites"
|
||||
msgstr "网站管理"
|
||||
@@ -3932,7 +4025,7 @@ msgstr "修改时间"
|
||||
msgid "Modify"
|
||||
msgstr "修改"
|
||||
|
||||
#: src/routes/modules/certificates.ts:44
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Modify Certificate"
|
||||
msgstr "修改证书"
|
||||
@@ -3993,11 +4086,13 @@ msgstr "不适用"
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:44
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:58
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:70
|
||||
#: src/views/certificate/DNSCredential.vue:17
|
||||
#: src/views/config/components/ConfigRightPanel/Basic.vue:34
|
||||
#: src/views/config/components/Delete.vue:123
|
||||
#: src/views/config/components/Mkdir.vue:64
|
||||
#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/config/configColumns.tsx:17
|
||||
#: src/views/dns/components/DNSRecordForm.vue:63
|
||||
#: src/views/dns/components/DNSRecordTable.vue:17
|
||||
#: src/views/dns/DNSCredential.vue:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/nginx_log/NginxLogList.vue:155 src/views/node/nodeColumns.tsx:8
|
||||
#: src/views/preference/components/AuthSettings/AddPasskey.vue:81
|
||||
#: src/views/site/site_edit/components/RightPanel/Basic.vue:36
|
||||
@@ -4025,6 +4120,12 @@ msgstr "命名空间"
|
||||
msgid "Namespaces"
|
||||
msgstr "命名空间"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:251
|
||||
msgid ""
|
||||
"Need more DNS providers? Support us through donations or contact us for "
|
||||
"commercial collaboration"
|
||||
msgstr "需要更多 DNS 提供商?通过捐赠支持我们或联系我们进行商业合作"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:195
|
||||
msgid "Need to enable the stub_status module"
|
||||
msgstr "需要启用 stub_status 模块"
|
||||
@@ -4415,6 +4516,10 @@ msgstr "未索引"
|
||||
msgid "Not Loaded"
|
||||
msgstr "未加载"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:102
|
||||
msgid "Not run yet"
|
||||
msgstr "尚未运行"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:230
|
||||
msgid "Not supported for IP certificates"
|
||||
msgstr "不支持 IP 证书"
|
||||
@@ -4424,7 +4529,7 @@ msgid "Not Valid Before: %{date}"
|
||||
msgstr "此前无效: %{date}"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:150
|
||||
#: src/views/certificate/DNSCredential.vue:89
|
||||
#: src/views/dns/DNSCredential.vue:89
|
||||
msgid "Note"
|
||||
msgstr "注意"
|
||||
|
||||
@@ -4547,10 +4652,6 @@ msgstr "确定"
|
||||
msgid "On"
|
||||
msgstr "开启"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:99
|
||||
msgid "Once the verification is complete, the records will be removed."
|
||||
msgstr "一旦验证完成,这些记录将被删除。"
|
||||
|
||||
#: src/components/NamespaceTabs/NamespaceTabs.vue:164
|
||||
#: src/components/NodeCard/NodeCard.vue:51
|
||||
#: src/components/NodeSelector/NodeSelector.vue:65
|
||||
@@ -4835,7 +4936,7 @@ msgstr "请正确填写所有字段"
|
||||
msgid "Please fill in required S3 configuration fields"
|
||||
msgstr "请填写必填的 S3 配置字段"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:93
|
||||
#: src/views/dns/DNSCredential.vue:93
|
||||
msgid ""
|
||||
"Please fill in the API authentication credentials provided by your DNS "
|
||||
"provider."
|
||||
@@ -4892,7 +4993,7 @@ msgstr "请输入您的用户名!"
|
||||
msgid "Please log in."
|
||||
msgstr "请登录。"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:102
|
||||
#: src/views/dns/DNSCredential.vue:96
|
||||
msgid "Please note that the unit of time configurations below are all in seconds."
|
||||
msgstr "请注意,下面的时间单位配置均以秒为单位。"
|
||||
|
||||
@@ -4972,6 +5073,11 @@ msgstr "偏好设置"
|
||||
msgid "Preparing lego configurations"
|
||||
msgstr "正在准备 Lego 的配置"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:81
|
||||
#: src/views/dns/components/DNSRecordTable.vue:33
|
||||
msgid "Priority"
|
||||
msgstr "优先级"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:206
|
||||
msgid "Private CA:"
|
||||
msgstr "私有 CA:"
|
||||
@@ -5032,7 +5138,8 @@ msgid ""
|
||||
"proxy."
|
||||
msgstr "协议配置仅在直接连接时生效。如果使用反向代理,请在反向代理中单独配置协议。"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:26
|
||||
#: src/views/dns/DDNSManager.vue:70 src/views/dns/DNSCredential.vue:26
|
||||
#: src/views/dns/DNSDomainList.vue:177 src/views/dns/DNSDomainList.vue:198
|
||||
msgid "Provider"
|
||||
msgstr "提供商"
|
||||
|
||||
@@ -5044,6 +5151,12 @@ msgstr "未找到提供商:{0}"
|
||||
msgid "Province / Region"
|
||||
msgstr "省份 / 地区"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:87
|
||||
#: src/views/dns/components/DNSRecordTable.vue:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "Proxied"
|
||||
msgstr "已代理"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:63
|
||||
msgid "Proxy"
|
||||
msgstr "代理"
|
||||
@@ -5138,6 +5251,22 @@ msgstr "重新检查"
|
||||
msgid "Recommended:"
|
||||
msgstr "推荐:"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:113
|
||||
msgid "Record created"
|
||||
msgstr "记录已创建"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:120
|
||||
msgid "Record deleted"
|
||||
msgstr "记录已删除"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:109
|
||||
msgid "Record updated"
|
||||
msgstr "记录已更新"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:221
|
||||
msgid "Records"
|
||||
msgstr "记录"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:79
|
||||
msgid "Recovery"
|
||||
msgstr "恢复"
|
||||
@@ -5165,7 +5294,8 @@ msgstr "重定向消息 (3xx)"
|
||||
msgid "Referer"
|
||||
msgstr "来源"
|
||||
|
||||
#: src/language/curd.ts:70
|
||||
#: src/language/curd.ts:70 src/views/dns/DDNSManager.vue:161
|
||||
#: src/views/dns/DNSRecordManager.vue:165
|
||||
msgid "Refresh"
|
||||
msgstr "刷新"
|
||||
|
||||
@@ -5405,7 +5535,7 @@ msgstr "请求参数错误"
|
||||
msgid "Requests Per Connection"
|
||||
msgstr "每次连接请求数"
|
||||
|
||||
#: src/language/curd.ts:13
|
||||
#: src/language/curd.ts:13 src/views/dns/components/DNSRecordFilter.vue:65
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:214
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:745
|
||||
msgid "Reset"
|
||||
@@ -5641,6 +5771,7 @@ msgstr "星期六"
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:283
|
||||
#: src/views/config/components/ConfigName.vue:58
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:713
|
||||
#: src/views/dns/DDNSManager.vue:247 src/views/dns/DNSRecordManager.vue:215
|
||||
#: src/views/preference/components/AuthSettings/Passkey.vue:131
|
||||
#: src/views/preference/Preference.vue:124
|
||||
#: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52
|
||||
@@ -5746,12 +5877,13 @@ msgstr "计划"
|
||||
msgid "Schedule Type"
|
||||
msgstr "计划类型"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:77
|
||||
#: src/views/dns/components/DNSChallenge.vue:78
|
||||
msgid "SDK"
|
||||
msgstr "SDK"
|
||||
|
||||
#: src/language/constants.ts:62 src/language/curd.ts:12
|
||||
#: src/views/config/configColumns.tsx:5
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:62
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:217
|
||||
#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13
|
||||
msgid "Search"
|
||||
@@ -5808,10 +5940,18 @@ msgstr "选择一个预定义的 CA 目录或输入自定义目录。留空则
|
||||
msgid "Select all"
|
||||
msgstr "全选"
|
||||
|
||||
#: src/language/constants.ts:68
|
||||
msgid "Select Credential"
|
||||
msgstr "选择凭证"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:45
|
||||
msgid "Select or enter a CA directory URL"
|
||||
msgstr "选择或输入 CA 目录 URL"
|
||||
|
||||
#: src/language/constants.ts:67
|
||||
msgid "Select Provider"
|
||||
msgstr "选择提供商"
|
||||
|
||||
#: src/language/curd.ts:59
|
||||
msgid "Selected {count} files"
|
||||
msgstr "已选择 {count} 个文件"
|
||||
@@ -6131,6 +6271,7 @@ msgstr "静态"
|
||||
#: src/views/certificate/ACMEUser.vue:75
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:63
|
||||
#: src/views/dashboard/components/ModulesTable.vue:75
|
||||
#: src/views/dns/DDNSManager.vue:75
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:106
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:241
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:521
|
||||
@@ -6358,6 +6499,10 @@ msgstr "系统还原"
|
||||
msgid "System restored successfully."
|
||||
msgstr "系统恢复成功。"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:83
|
||||
msgid "Targets"
|
||||
msgstr "目标"
|
||||
|
||||
#: src/constants/errors/self_check.ts:3
|
||||
msgid "Task is not fixable"
|
||||
msgstr "任务不可修复"
|
||||
@@ -6839,6 +6984,14 @@ msgstr "尝试调整搜索条件或导航到其他页面。"
|
||||
msgid "Try adjusting your search criteria or time range."
|
||||
msgstr "尝试调整您的搜索条件或时间范围。"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:29
|
||||
msgid "TTL"
|
||||
msgstr "TTL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:78
|
||||
msgid "TTL (seconds)"
|
||||
msgstr "TTL(秒)"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:28
|
||||
msgid "Tuesday"
|
||||
msgstr "星期二"
|
||||
@@ -6851,6 +7004,9 @@ msgstr "需要两步验证"
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:24
|
||||
#: src/views/config/components/Delete.vue:122
|
||||
#: src/views/dashboard/components/ModulesTable.vue:62
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:49
|
||||
#: src/views/dns/components/DNSRecordForm.vue:57
|
||||
#: src/views/dns/components/DNSRecordTable.vue:21
|
||||
#: src/views/nginx_log/NginxLogList.vue:146
|
||||
#: src/views/notification/notificationColumns.tsx:8
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:19
|
||||
@@ -6861,6 +7017,10 @@ msgstr "类型"
|
||||
msgid "Type %{delete} to confirm"
|
||||
msgstr "输入 %{delete} 以确认"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:228
|
||||
msgid "Type or select A/AAAA records"
|
||||
msgstr "输入或选择 A/AAAA 记录"
|
||||
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:142
|
||||
msgid "Type or select browser"
|
||||
msgstr "输入或选择浏览器"
|
||||
@@ -6916,9 +7076,9 @@ msgstr "更新成功"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:236
|
||||
#: 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:91
|
||||
#: src/views/config/configColumns.tsx:44 src/views/dns/DNSCredential.vue:65
|
||||
#: src/views/dns/DNSDomainList.vue:205 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
|
||||
@@ -6991,6 +7151,10 @@ msgstr "运行时间:"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:64
|
||||
msgid "Use @ for root"
|
||||
msgstr "使用 @ 表示根域名"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:121
|
||||
msgid "Use OTP"
|
||||
msgstr "使用二步验证码"
|
||||
@@ -7056,6 +7220,8 @@ msgid "Validate SSL Certificate"
|
||||
msgstr "验证 SSL 证书"
|
||||
|
||||
#: src/views/dashboard/components/PerformanceTablesCard.vue:22
|
||||
#: src/views/dns/components/DNSRecordForm.vue:66
|
||||
#: src/views/dns/components/DNSRecordTable.vue:25
|
||||
msgid "Value"
|
||||
msgstr "值"
|
||||
|
||||
@@ -7147,12 +7313,6 @@ msgstr ""
|
||||
msgid "We do not accept any feature requests"
|
||||
msgstr "我们不接受任何功能请求"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:96
|
||||
msgid ""
|
||||
"We will add one or more TXT records to the DNS records of your domain for "
|
||||
"ownership verification."
|
||||
msgstr "我们将在您域名的 DNS 记录中添加一个或多个 TXT 记录,以核实域名所有权。"
|
||||
|
||||
#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
|
||||
msgid ""
|
||||
"We will remove the HTTPChallenge configuration from this file and reload "
|
||||
@@ -7187,6 +7347,11 @@ msgstr "每周"
|
||||
msgid "Weekly on %{day} at %{time}"
|
||||
msgstr "每周%{day}的%{time}"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:84
|
||||
#: src/views/dns/components/DNSRecordTable.vue:37
|
||||
msgid "Weight"
|
||||
msgstr "权重"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:119
|
||||
msgid ""
|
||||
"When Enabled, Nginx UI will automatically re-register users upon startup. "
|
||||
@@ -7230,7 +7395,7 @@ msgstr "工作进程"
|
||||
msgid "Workers"
|
||||
msgstr "Workers"
|
||||
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:63
|
||||
#: src/views/workspace/WorkSpace.vue:51
|
||||
msgid "Workspace"
|
||||
msgstr "工作区"
|
||||
@@ -7326,6 +7491,14 @@ msgstr "你的 Passkeys"
|
||||
msgid "Zero-allocation pipeline"
|
||||
msgstr "零分配管道"
|
||||
|
||||
#~ msgid "Once the verification is complete, the records will be removed."
|
||||
#~ msgstr "一旦验证完成,这些记录将被删除。"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "We will add one or more TXT records to the DNS records of your domain for "
|
||||
#~ "ownership verification."
|
||||
#~ msgstr "我们将在您域名的 DNS 记录中添加一个或多个 TXT 记录,以核实域名所有权。"
|
||||
|
||||
#~ msgid "Settings"
|
||||
#~ msgstr "设置"
|
||||
|
||||
@@ -7347,9 +7520,6 @@ msgstr "零分配管道"
|
||||
#~ msgid "Tested in isolated sandbox mode"
|
||||
#~ msgstr "已在隔离沙箱模式下测试"
|
||||
|
||||
#~ msgid "All"
|
||||
#~ msgstr "全部"
|
||||
|
||||
#~ msgid "Based on M2 Pro (12 cores) testing"
|
||||
#~ msgstr "基于 M2 Pro (12 核)测试"
|
||||
|
||||
@@ -7548,9 +7718,6 @@ msgstr "零分配管道"
|
||||
#~ msgid "Are you sure you want to apply to all selected?"
|
||||
#~ msgstr "您确定要应用于所有选定的对象吗?"
|
||||
|
||||
#~ msgid "Are you sure you want to delete this item?"
|
||||
#~ msgstr "你确定要删除这个项目吗?"
|
||||
|
||||
#~ msgid "Are you sure you want to recover this item?"
|
||||
#~ msgstr "您确定要恢复这个项目吗?"
|
||||
|
||||
@@ -7822,9 +7989,6 @@ msgstr "零分配管道"
|
||||
#~ msgid "Dark"
|
||||
#~ msgstr "深色"
|
||||
|
||||
#~ msgid "Light"
|
||||
#~ msgstr "浅色"
|
||||
|
||||
#~ msgid "Theme"
|
||||
#~ msgstr "主题"
|
||||
|
||||
|
||||
+214
-50
@@ -186,8 +186,10 @@ msgstr "操作"
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:273
|
||||
#: 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:97
|
||||
#: src/views/config/configColumns.tsx:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:41
|
||||
#: src/views/dns/DDNSManager.vue:91 src/views/dns/DNSCredential.vue:71
|
||||
#: src/views/dns/DNSDomainList.vue:211 src/views/namespace/columns.ts:97
|
||||
#: src/views/nginx_log/NginxLogList.vue:338 src/views/node/nodeColumns.tsx:96
|
||||
#: src/views/notification/notificationColumns.tsx:72
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:85
|
||||
@@ -241,6 +243,10 @@ msgstr "添加標頭"
|
||||
msgid "Add Location"
|
||||
msgstr "新增 Location"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:171
|
||||
msgid "Add Record"
|
||||
msgstr "新增記錄"
|
||||
|
||||
#: src/components/NgxConfigEditor/NgxServer.vue:92
|
||||
msgid "Add Server"
|
||||
msgstr "新增伺服器"
|
||||
@@ -261,7 +267,7 @@ msgstr "添加上游"
|
||||
msgid "Added successfully"
|
||||
msgstr "新增成功"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:97
|
||||
#: src/views/dns/components/DNSChallenge.vue:98
|
||||
msgid "Additional"
|
||||
msgstr "其他設定"
|
||||
|
||||
@@ -298,6 +304,10 @@ msgstr "進階設定"
|
||||
msgid "Afterwards, refresh this page and click add passkey again."
|
||||
msgstr "之後,請重新整理此頁面並再次點擊新增通行金鑰。"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:55
|
||||
msgid "All"
|
||||
msgstr "全部"
|
||||
|
||||
#: src/views/system/Licenses.vue:152
|
||||
msgid "All Components"
|
||||
msgstr "所有組件"
|
||||
@@ -335,7 +345,7 @@ msgstr "任何可訪問的 IP 地址均可用於私有證書頒發機構"
|
||||
msgid "API Base Url"
|
||||
msgstr "API 基礎網址"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:70
|
||||
#: src/views/dns/components/DNSChallenge.vue:71
|
||||
msgid "API Document"
|
||||
msgstr "API 文件"
|
||||
|
||||
@@ -371,6 +381,10 @@ msgstr "您確定要刪除這個被停用的 IP 嗎?"
|
||||
msgid "Are you sure to delete this passkey immediately?"
|
||||
msgstr "您確定要刪除這個被停用的通行金鑰嗎?"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:90
|
||||
msgid "Are you sure to delete this record?"
|
||||
msgstr "確定要刪除這條記錄嗎?"
|
||||
|
||||
#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155
|
||||
msgid "Are you sure to generate new recovery codes?"
|
||||
msgstr "您確定要生成新的復原代碼嗎?"
|
||||
@@ -540,7 +554,7 @@ msgstr "平均 /PV"
|
||||
#: src/views/certificate/components/CertificateActions.vue:22
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:274
|
||||
#: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217
|
||||
#: src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/dns/DNSRecordManager.vue:223 src/views/nginx_log/NginxLog.vue:129
|
||||
#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183
|
||||
#: src/views/stream/components/StreamEditor.vue:147
|
||||
msgid "Back"
|
||||
@@ -686,6 +700,10 @@ msgstr "瀏覽器"
|
||||
msgid "Browser Statistics"
|
||||
msgstr "瀏覽器統計"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:257
|
||||
msgid "Business contact:"
|
||||
msgstr "商務聯繫:"
|
||||
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:316
|
||||
msgid ""
|
||||
"By enabling advanced indexing, you acknowledge that your system meets the "
|
||||
@@ -751,6 +769,7 @@ msgstr "基於 worker_processes * worker_connections 計算得出。實際效能
|
||||
#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37
|
||||
#: src/views/config/components/Delete.vue:98
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:710
|
||||
#: src/views/dns/DDNSManager.vue:244 src/views/dns/DNSRecordManager.vue:212
|
||||
#: src/views/nginx_log/components/IndexingSettingsModal.vue:102
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:33
|
||||
#: src/views/nginx_log/indexing/IndexManagement.vue:59
|
||||
@@ -896,7 +915,7 @@ msgstr "證書類型"
|
||||
msgid "Certificates"
|
||||
msgstr "憑證"
|
||||
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
msgid "Certificates List"
|
||||
msgstr "憑證列表"
|
||||
|
||||
@@ -1254,7 +1273,7 @@ msgstr "設定路徑為空"
|
||||
msgid "Config Template"
|
||||
msgstr "配置模板"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:52
|
||||
#: src/views/dns/DNSCredential.vue:52
|
||||
msgid "Configuration"
|
||||
msgstr "配置"
|
||||
|
||||
@@ -1282,6 +1301,14 @@ msgstr "設定名稱"
|
||||
msgid "Configurations"
|
||||
msgstr "設定"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:201
|
||||
msgid "Configure"
|
||||
msgstr "配置"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:211
|
||||
msgid "Configure DDNS"
|
||||
msgstr "配置 DDNS"
|
||||
|
||||
#: src/views/site/site_add/SiteAdd.vue:81
|
||||
msgid "Configure SSL"
|
||||
msgstr "設定 SSL"
|
||||
@@ -1403,6 +1430,10 @@ msgstr "建立檔案"
|
||||
msgid "Create Folder"
|
||||
msgstr "建立資料夾"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Create Record"
|
||||
msgstr "建立記錄"
|
||||
|
||||
#: src/views/backup/components/BackupCreator.vue:75
|
||||
msgid ""
|
||||
"Create system backups including Nginx configuration and Nginx UI settings. "
|
||||
@@ -1426,11 +1457,12 @@ msgstr "建立成功"
|
||||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr "建立客戶端方便與 CA 伺服器通訊"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:105
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:131
|
||||
#: src/views/dns/DDNSManager.vue:65 src/views/dns/DNSDomainList.vue:109
|
||||
msgid "Credential"
|
||||
msgstr "認證"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:86
|
||||
#: src/routes/modules/dns.ts:20 src/views/dns/components/DNSChallenge.vue:87
|
||||
msgid "Credentials"
|
||||
msgstr "認證資訊"
|
||||
|
||||
@@ -1545,6 +1577,18 @@ msgstr "天"
|
||||
msgid "Db file not found"
|
||||
msgstr "資料庫檔案未找到"
|
||||
|
||||
#: src/routes/modules/dns.ts:36
|
||||
msgid "DDNS"
|
||||
msgstr "DDNS"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:153
|
||||
msgid "DDNS Overview"
|
||||
msgstr "DDNS 概覽"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:135
|
||||
msgid "DDNS saved"
|
||||
msgstr "DDNS 已儲存"
|
||||
|
||||
#: src/constants/errors/geolite.ts:12
|
||||
msgid "Decompression succeeded but failed to delete compressed file: {0}"
|
||||
msgstr "解壓成功但刪除壓縮檔案失敗: {0}"
|
||||
@@ -1569,6 +1613,7 @@ msgstr "定義共享記憶體區域名稱和大小,例如 proxy_cache:10m"
|
||||
#: src/views/config/components/Delete.vue:65
|
||||
#: src/views/config/components/Delete.vue:97
|
||||
#: src/views/config/ConfigList.vue:199
|
||||
#: src/views/dns/components/DNSRecordTable.vue:94
|
||||
#: src/views/site/site_list/SiteList.vue:100
|
||||
#: src/views/stream/StreamList.vue:110
|
||||
msgid "Delete"
|
||||
@@ -1810,7 +1855,8 @@ msgid "Disable stream %{name} from %{node} successfully"
|
||||
msgstr "已成功從 %{node} 停用串流 %{name}"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:175
|
||||
#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:60
|
||||
#: src/views/node/nodeColumns.tsx:78
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/NodeSettings.vue:25
|
||||
#: src/views/preference/tabs/NodeSettings.vue:30
|
||||
@@ -1835,16 +1881,35 @@ msgstr "已斷開連接"
|
||||
msgid "Disk IO"
|
||||
msgstr "磁碟 IO"
|
||||
|
||||
#: src/routes/modules/certificates.ts:28
|
||||
#: src/views/certificate/DNSCredential.vue:79
|
||||
#: src/routes/modules/dns.ts:11
|
||||
msgid "DNS"
|
||||
msgstr "DNS"
|
||||
|
||||
#: src/views/dns/DNSCredential.vue:79
|
||||
msgid "DNS Credentials"
|
||||
msgstr "DNS 認證"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:95
|
||||
#: src/views/certificate/components/DNSChallenge.vue:59
|
||||
#: src/routes/modules/dns.ts:28 src/views/dns/DNSDomainList.vue:228
|
||||
msgid "DNS Domains"
|
||||
msgstr "DNS 網域"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "DNS Only"
|
||||
msgstr "僅DNS"
|
||||
|
||||
#: src/components/AutoCertForm/DNSChallenge.vue:121
|
||||
#: src/views/dns/components/DNSChallenge.vue:60
|
||||
msgid "DNS Provider"
|
||||
msgstr "DNS 供應商"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:244
|
||||
msgid "DNS Provider Support"
|
||||
msgstr "DNS 供應商支援"
|
||||
|
||||
#: src/routes/modules/dns.ts:44 src/views/dns/DNSRecordManager.vue:58
|
||||
msgid "DNS Records"
|
||||
msgstr "DNS 記錄"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:678
|
||||
msgid "DNS Resolver"
|
||||
msgstr "DNS 解析器"
|
||||
@@ -1905,6 +1970,7 @@ msgid "Document Count"
|
||||
msgstr "文件數量"
|
||||
|
||||
#: src/views/certificate/components/DNSIssueCertificate.vue:119
|
||||
#: src/views/dns/DDNSManager.vue:60 src/views/dns/DNSDomainList.vue:98
|
||||
msgid "Domain"
|
||||
msgstr "網域"
|
||||
|
||||
@@ -1990,7 +2056,7 @@ msgstr "EAB HMAC 密鑰"
|
||||
msgid "EAB Key ID"
|
||||
msgstr "EAB 密鑰 ID"
|
||||
|
||||
#: src/language/curd.ts:8
|
||||
#: src/language/curd.ts:8 src/views/dns/components/DNSRecordTable.vue:87
|
||||
msgid "Edit"
|
||||
msgstr "編輯"
|
||||
|
||||
@@ -2004,6 +2070,10 @@ msgstr "編輯 %{n}"
|
||||
msgid "Edit Configuration"
|
||||
msgstr "編輯設定"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:200
|
||||
msgid "Edit Record"
|
||||
msgstr "編輯記錄"
|
||||
|
||||
#: src/routes/modules/sites.ts:34
|
||||
msgid "Edit Site"
|
||||
msgstr "編輯網站"
|
||||
@@ -2054,6 +2124,10 @@ msgstr "啟用代碼補全"
|
||||
msgid "Enable compression for content transfer"
|
||||
msgstr "啟用內容傳輸壓縮"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:218
|
||||
msgid "Enable DDNS"
|
||||
msgstr "啟用 DDNS"
|
||||
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:473
|
||||
msgid "Enable Health Check"
|
||||
msgstr "啟用健康檢查"
|
||||
@@ -2141,7 +2215,8 @@ msgid "Enable TOTP"
|
||||
msgstr "啟用 TOTP"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:174
|
||||
#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/dns/DDNSManager.vue:175 src/views/node/nodeColumns.tsx:69
|
||||
#: src/views/node/nodeColumns.tsx:75
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:47
|
||||
#: src/views/preference/tabs/HTTPSettings.vue:24
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:20
|
||||
@@ -3084,14 +3159,19 @@ msgstr "數值越高表示連線重複使用率越好"
|
||||
msgid "History"
|
||||
msgstr "歷史"
|
||||
|
||||
#: src/routes/index.ts:52
|
||||
#: src/routes/index.ts:54
|
||||
msgid "Home"
|
||||
msgstr "首頁"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:42
|
||||
#: src/views/preference/tabs/ServerSettings.vue:19
|
||||
msgid "Host"
|
||||
msgstr "主機"
|
||||
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:45
|
||||
msgid "Host, e.g. @ or www"
|
||||
msgstr "主機,例如 @ 或 www"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:159
|
||||
#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87
|
||||
msgid "Hour"
|
||||
@@ -3157,7 +3237,7 @@ msgstr "如果您的域名有 CNAME 記錄且無法取得證書,您需要啟
|
||||
msgid "Import"
|
||||
msgstr "匯入"
|
||||
|
||||
#: src/routes/modules/certificates.ts:54
|
||||
#: src/routes/modules/certificates.ts:46
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Import Certificate"
|
||||
msgstr "匯入憑證"
|
||||
@@ -3276,10 +3356,15 @@ msgid ""
|
||||
"restart the Nginx UI."
|
||||
msgstr "系統啟動 10 分鐘後不允許安裝,請重新啟動 Nginx UI。"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:79
|
||||
#: src/views/preference/tabs/LogrotateSettings.vue:26
|
||||
msgid "Interval"
|
||||
msgstr "間隔"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:232
|
||||
msgid "Interval (seconds)"
|
||||
msgstr "間隔(秒)"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:166
|
||||
msgid "Invalid"
|
||||
msgstr "無效"
|
||||
@@ -3506,6 +3591,10 @@ msgstr "最後索引時間"
|
||||
msgid "Last month"
|
||||
msgstr "上個月"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:87
|
||||
msgid "Last run"
|
||||
msgstr "上次執行"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:138
|
||||
msgid "Last update"
|
||||
msgstr "最後更新時間"
|
||||
@@ -3766,6 +3855,10 @@ msgstr "在取得憑證前,請確保您已將 .well-known 目錄反向代理
|
||||
msgid "Manage Configs"
|
||||
msgstr "管理設定"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:236
|
||||
msgid "Manage Records"
|
||||
msgstr "管理記錄"
|
||||
|
||||
#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45
|
||||
msgid "Manage Sites"
|
||||
msgstr "管理網站"
|
||||
@@ -3936,7 +4029,7 @@ msgstr "修改於"
|
||||
msgid "Modify"
|
||||
msgstr "修改"
|
||||
|
||||
#: src/routes/modules/certificates.ts:44
|
||||
#: src/routes/modules/certificates.ts:36
|
||||
#: src/views/certificate/CertificateEditor.vue:84
|
||||
msgid "Modify Certificate"
|
||||
msgstr "修改憑證"
|
||||
@@ -3997,11 +4090,13 @@ msgstr "不適用"
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:44
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:58
|
||||
#: src/views/certificate/components/CertificateBasicInfo.vue:70
|
||||
#: src/views/certificate/DNSCredential.vue:17
|
||||
#: src/views/config/components/ConfigRightPanel/Basic.vue:34
|
||||
#: src/views/config/components/Delete.vue:123
|
||||
#: src/views/config/components/Mkdir.vue:64
|
||||
#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/config/configColumns.tsx:17
|
||||
#: src/views/dns/components/DNSRecordForm.vue:63
|
||||
#: src/views/dns/components/DNSRecordTable.vue:17
|
||||
#: src/views/dns/DNSCredential.vue:17 src/views/namespace/columns.ts:9
|
||||
#: src/views/nginx_log/NginxLogList.vue:155 src/views/node/nodeColumns.tsx:8
|
||||
#: src/views/preference/components/AuthSettings/AddPasskey.vue:81
|
||||
#: src/views/site/site_edit/components/RightPanel/Basic.vue:36
|
||||
@@ -4029,6 +4124,12 @@ msgstr "命名空間"
|
||||
msgid "Namespaces"
|
||||
msgstr "命名空間"
|
||||
|
||||
#: src/views/dns/DNSDomainList.vue:251
|
||||
msgid ""
|
||||
"Need more DNS providers? Support us through donations or contact us for "
|
||||
"commercial collaboration"
|
||||
msgstr "需要更多DNS供應商?透過捐贈支持我們或聯繫我們進行商業合作"
|
||||
|
||||
#: src/views/dashboard/NginxDashBoard.vue:195
|
||||
msgid "Need to enable the stub_status module"
|
||||
msgstr "需要啟用 stub_status 模組"
|
||||
@@ -4419,6 +4520,10 @@ msgstr "未索引"
|
||||
msgid "Not Loaded"
|
||||
msgstr "未載入"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:102
|
||||
msgid "Not run yet"
|
||||
msgstr "尚未執行"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:230
|
||||
msgid "Not supported for IP certificates"
|
||||
msgstr "不支援 IP 證書"
|
||||
@@ -4428,7 +4533,7 @@ msgid "Not Valid Before: %{date}"
|
||||
msgstr "此前無效:%{date}"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:150
|
||||
#: src/views/certificate/DNSCredential.vue:89
|
||||
#: src/views/dns/DNSCredential.vue:89
|
||||
msgid "Note"
|
||||
msgstr "備註"
|
||||
|
||||
@@ -4551,10 +4656,6 @@ msgstr "確定"
|
||||
msgid "On"
|
||||
msgstr "開啟"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:99
|
||||
msgid "Once the verification is complete, the records will be removed."
|
||||
msgstr "驗證完成後,記錄將被刪除。"
|
||||
|
||||
#: src/components/NamespaceTabs/NamespaceTabs.vue:164
|
||||
#: src/components/NodeCard/NodeCard.vue:51
|
||||
#: src/components/NodeSelector/NodeSelector.vue:65
|
||||
@@ -4841,7 +4942,7 @@ msgstr "請正確填寫所有欄位"
|
||||
msgid "Please fill in required S3 configuration fields"
|
||||
msgstr "請填寫必填的 S3 配置欄位"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:93
|
||||
#: src/views/dns/DNSCredential.vue:93
|
||||
msgid ""
|
||||
"Please fill in the API authentication credentials provided by your DNS "
|
||||
"provider."
|
||||
@@ -4898,7 +4999,7 @@ msgstr "請輸入您的使用者名稱!"
|
||||
msgid "Please log in."
|
||||
msgstr "請登入。"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:102
|
||||
#: src/views/dns/DNSCredential.vue:96
|
||||
msgid "Please note that the unit of time configurations below are all in seconds."
|
||||
msgstr "請注意,以下時間設定單位均為秒。"
|
||||
|
||||
@@ -4978,6 +5079,11 @@ msgstr "偏好設定"
|
||||
msgid "Preparing lego configurations"
|
||||
msgstr "準備 Lego 設定"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:81
|
||||
#: src/views/dns/components/DNSRecordTable.vue:33
|
||||
msgid "Priority"
|
||||
msgstr "優先級"
|
||||
|
||||
#: src/components/AutoCertForm/AutoCertForm.vue:206
|
||||
msgid "Private CA:"
|
||||
msgstr "私有 CA:"
|
||||
@@ -5038,7 +5144,8 @@ msgid ""
|
||||
"proxy."
|
||||
msgstr "協議配置僅在直接連接時生效。如果使用反向代理,請在反向代理中單獨配置協議。"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:26
|
||||
#: src/views/dns/DDNSManager.vue:70 src/views/dns/DNSCredential.vue:26
|
||||
#: src/views/dns/DNSDomainList.vue:177 src/views/dns/DNSDomainList.vue:198
|
||||
msgid "Provider"
|
||||
msgstr "供應商"
|
||||
|
||||
@@ -5050,6 +5157,12 @@ msgstr "未找到提供者:{0}"
|
||||
msgid "Province / Region"
|
||||
msgstr "省份 / 地區"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:87
|
||||
#: src/views/dns/components/DNSRecordTable.vue:51
|
||||
#: src/views/dns/components/DNSRecordTable.vue:81
|
||||
msgid "Proxied"
|
||||
msgstr "已代理"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:63
|
||||
msgid "Proxy"
|
||||
msgstr "代理伺服器"
|
||||
@@ -5144,6 +5257,22 @@ msgstr "重新檢查"
|
||||
msgid "Recommended:"
|
||||
msgstr "推薦:"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:113
|
||||
msgid "Record created"
|
||||
msgstr "記錄已建立"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:120
|
||||
msgid "Record deleted"
|
||||
msgstr "記錄已刪除"
|
||||
|
||||
#: src/views/dns/DNSRecordManager.vue:109
|
||||
msgid "Record updated"
|
||||
msgstr "記錄已更新"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:221
|
||||
msgid "Records"
|
||||
msgstr "記錄"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:79
|
||||
msgid "Recovery"
|
||||
msgstr "恢復"
|
||||
@@ -5171,7 +5300,8 @@ msgstr "重新導向訊息 (3xx)"
|
||||
msgid "Referer"
|
||||
msgstr "來源"
|
||||
|
||||
#: src/language/curd.ts:70
|
||||
#: src/language/curd.ts:70 src/views/dns/DDNSManager.vue:161
|
||||
#: src/views/dns/DNSRecordManager.vue:165
|
||||
msgid "Refresh"
|
||||
msgstr "重新整理"
|
||||
|
||||
@@ -5411,7 +5541,7 @@ msgstr "請求參數錯誤"
|
||||
msgid "Requests Per Connection"
|
||||
msgstr "每連線請求數量"
|
||||
|
||||
#: src/language/curd.ts:13
|
||||
#: src/language/curd.ts:13 src/views/dns/components/DNSRecordFilter.vue:65
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:214
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:745
|
||||
msgid "Reset"
|
||||
@@ -5647,6 +5777,7 @@ msgstr "星期六"
|
||||
#: src/views/config/components/ConfigLeftPanel.vue:283
|
||||
#: src/views/config/components/ConfigName.vue:58
|
||||
#: src/views/dashboard/components/SiteHealthCheckModal.vue:713
|
||||
#: src/views/dns/DDNSManager.vue:247 src/views/dns/DNSRecordManager.vue:215
|
||||
#: src/views/preference/components/AuthSettings/Passkey.vue:131
|
||||
#: src/views/preference/Preference.vue:124
|
||||
#: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52
|
||||
@@ -5752,12 +5883,13 @@ msgstr "計劃"
|
||||
msgid "Schedule Type"
|
||||
msgstr "計劃類型"
|
||||
|
||||
#: src/views/certificate/components/DNSChallenge.vue:77
|
||||
#: src/views/dns/components/DNSChallenge.vue:78
|
||||
msgid "SDK"
|
||||
msgstr "SDK"
|
||||
|
||||
#: src/language/constants.ts:62 src/language/curd.ts:12
|
||||
#: src/views/config/configColumns.tsx:5
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:62
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:217
|
||||
#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13
|
||||
msgid "Search"
|
||||
@@ -5814,10 +5946,18 @@ msgstr "選擇一個預定義的 CA 目錄或輸入自訂目錄。留空則使
|
||||
msgid "Select all"
|
||||
msgstr "全選"
|
||||
|
||||
#: src/language/constants.ts:68
|
||||
msgid "Select Credential"
|
||||
msgstr "選擇憑證"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:45
|
||||
msgid "Select or enter a CA directory URL"
|
||||
msgstr "選擇或輸入 CA 目錄 URL"
|
||||
|
||||
#: src/language/constants.ts:67
|
||||
msgid "Select Provider"
|
||||
msgstr "選擇提供商"
|
||||
|
||||
#: src/language/curd.ts:59
|
||||
msgid "Selected {count} files"
|
||||
msgstr "已選擇 {count} 個檔案"
|
||||
@@ -6137,6 +6277,7 @@ msgstr "靜態"
|
||||
#: src/views/certificate/ACMEUser.vue:75
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:63
|
||||
#: src/views/dashboard/components/ModulesTable.vue:75
|
||||
#: src/views/dns/DDNSManager.vue:75
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:106
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:241
|
||||
#: src/views/nginx_log/structured/StructuredLogViewer.vue:521
|
||||
@@ -6364,6 +6505,10 @@ msgstr "系統恢復"
|
||||
msgid "System restored successfully."
|
||||
msgstr "系統已成功恢復。"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:83
|
||||
msgid "Targets"
|
||||
msgstr "目標"
|
||||
|
||||
#: src/constants/errors/self_check.ts:3
|
||||
msgid "Task is not fixable"
|
||||
msgstr "任務無法修復"
|
||||
@@ -6845,6 +6990,14 @@ msgstr "嘗試調整搜索條件或導航到其他頁面。"
|
||||
msgid "Try adjusting your search criteria or time range."
|
||||
msgstr "嘗試調整您的搜尋條件或時間範圍。"
|
||||
|
||||
#: src/views/dns/components/DNSRecordTable.vue:29
|
||||
msgid "TTL"
|
||||
msgstr "TTL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:78
|
||||
msgid "TTL (seconds)"
|
||||
msgstr "TTL(秒)"
|
||||
|
||||
#: src/views/backup/AutoBackup/components/CronEditor.vue:28
|
||||
msgid "Tuesday"
|
||||
msgstr "星期二"
|
||||
@@ -6857,6 +7010,9 @@ msgstr "需要多重因素驗證"
|
||||
#: src/views/certificate/CertificateList/certColumns.tsx:24
|
||||
#: src/views/config/components/Delete.vue:122
|
||||
#: src/views/dashboard/components/ModulesTable.vue:62
|
||||
#: src/views/dns/components/DNSRecordFilter.vue:49
|
||||
#: src/views/dns/components/DNSRecordForm.vue:57
|
||||
#: src/views/dns/components/DNSRecordTable.vue:21
|
||||
#: src/views/nginx_log/NginxLogList.vue:146
|
||||
#: src/views/notification/notificationColumns.tsx:8
|
||||
#: src/views/preference/components/ExternalNotify/columns.tsx:19
|
||||
@@ -6867,6 +7023,10 @@ msgstr "類型"
|
||||
msgid "Type %{delete} to confirm"
|
||||
msgstr "輸入 %{delete} 以確認"
|
||||
|
||||
#: src/views/dns/DDNSManager.vue:228
|
||||
msgid "Type or select A/AAAA records"
|
||||
msgstr "輸入或選擇 A/AAAA 記錄"
|
||||
|
||||
#: src/views/nginx_log/structured/components/SearchFilters.vue:142
|
||||
msgid "Type or select browser"
|
||||
msgstr "輸入或選擇瀏覽器"
|
||||
@@ -6922,9 +7082,9 @@ msgstr "更新成功"
|
||||
|
||||
#: src/views/backup/AutoBackup/AutoBackup.vue:236
|
||||
#: 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:91
|
||||
#: src/views/config/configColumns.tsx:44 src/views/dns/DNSCredential.vue:65
|
||||
#: src/views/dns/DNSDomainList.vue:205 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
|
||||
@@ -6997,6 +7157,10 @@ msgstr "運作時間:"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:64
|
||||
msgid "Use @ for root"
|
||||
msgstr "使用 @ 表示根域名"
|
||||
|
||||
#: src/components/TwoFA/Authorization.vue:121
|
||||
msgid "Use OTP"
|
||||
msgstr "使用一次性密碼"
|
||||
@@ -7062,6 +7226,8 @@ msgid "Validate SSL Certificate"
|
||||
msgstr "驗證 SSL 憑證"
|
||||
|
||||
#: src/views/dashboard/components/PerformanceTablesCard.vue:22
|
||||
#: src/views/dns/components/DNSRecordForm.vue:66
|
||||
#: src/views/dns/components/DNSRecordTable.vue:25
|
||||
msgid "Value"
|
||||
msgstr "數值"
|
||||
|
||||
@@ -7153,12 +7319,6 @@ msgstr ""
|
||||
msgid "We do not accept any feature requests"
|
||||
msgstr "我們不接受任何功能請求"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:96
|
||||
msgid ""
|
||||
"We will add one or more TXT records to the DNS records of your domain for "
|
||||
"ownership verification."
|
||||
msgstr "我們將在您的網域的 DNS 記錄中新增一個或多個 TXT 記錄以進行所有權驗證。"
|
||||
|
||||
#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
|
||||
msgid ""
|
||||
"We will remove the HTTPChallenge configuration from this file and reload "
|
||||
@@ -7193,6 +7353,11 @@ msgstr "每週"
|
||||
msgid "Weekly on %{day} at %{time}"
|
||||
msgstr "每週 %{day} 的 %{time}"
|
||||
|
||||
#: src/views/dns/components/DNSRecordForm.vue:84
|
||||
#: src/views/dns/components/DNSRecordTable.vue:37
|
||||
msgid "Weight"
|
||||
msgstr "權重"
|
||||
|
||||
#: src/views/certificate/ACMEUser.vue:119
|
||||
msgid ""
|
||||
"When Enabled, Nginx UI will automatically re-register users upon startup. "
|
||||
@@ -7236,7 +7401,7 @@ msgstr "worker 行程"
|
||||
msgid "Workers"
|
||||
msgstr "worker"
|
||||
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61
|
||||
#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:63
|
||||
#: src/views/workspace/WorkSpace.vue:51
|
||||
msgid "Workspace"
|
||||
msgstr "工作區"
|
||||
@@ -7332,6 +7497,14 @@ msgstr "您的通行金鑰"
|
||||
msgid "Zero-allocation pipeline"
|
||||
msgstr "零分配管道"
|
||||
|
||||
#~ msgid "Once the verification is complete, the records will be removed."
|
||||
#~ msgstr "驗證完成後,記錄將被刪除。"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "We will add one or more TXT records to the DNS records of your domain for "
|
||||
#~ "ownership verification."
|
||||
#~ msgstr "我們將在您的網域的 DNS 記錄中新增一個或多個 TXT 記錄以進行所有權驗證。"
|
||||
|
||||
#~ msgid "Settings"
|
||||
#~ msgstr "設定"
|
||||
|
||||
@@ -7353,9 +7526,6 @@ msgstr "零分配管道"
|
||||
#~ msgid "Tested in isolated sandbox mode"
|
||||
#~ msgstr "已在隔離沙箱模式下測試"
|
||||
|
||||
#~ msgid "All"
|
||||
#~ msgstr "全部"
|
||||
|
||||
#~ msgid "Based on M2 Pro (12 cores) testing"
|
||||
#~ msgstr "基於 M2 Pro (12 核)測試"
|
||||
|
||||
@@ -7554,9 +7724,6 @@ msgstr "零分配管道"
|
||||
#~ msgid "Are you sure you want to apply to all selected?"
|
||||
#~ msgstr "您確定要應用於所有選擇項目嗎?"
|
||||
|
||||
#~ msgid "Are you sure you want to delete this item?"
|
||||
#~ msgstr "您確定要刪除此項目嗎?"
|
||||
|
||||
#~ msgid "Are you sure you want to recover this item?"
|
||||
#~ msgstr "您確定要恢復此項目嗎?"
|
||||
|
||||
@@ -7795,9 +7962,6 @@ msgstr "零分配管道"
|
||||
#~ msgid "Dark"
|
||||
#~ msgstr "深色"
|
||||
|
||||
#~ msgid "Light"
|
||||
#~ msgstr "淺色"
|
||||
|
||||
#~ msgid "Theme"
|
||||
#~ msgstr "主題"
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { useAppStore } from './moudule/app'
|
||||
import { useDnsStore } from './moudule/dns'
|
||||
import { useGlobalStore } from './moudule/global'
|
||||
import { useProxyAvailabilityStore } from './moudule/proxyAvailability'
|
||||
import { useSettingsStore } from './moudule/settings'
|
||||
@@ -11,6 +12,7 @@ export type { EventHandler, EventSubscription, WebSocketMessage } from './moudul
|
||||
|
||||
export {
|
||||
useAppStore,
|
||||
useDnsStore,
|
||||
useGlobalStore,
|
||||
useProxyAvailabilityStore,
|
||||
useSettingsStore,
|
||||
|
||||
@@ -0,0 +1,127 @@
|
||||
import type { Pagination } from '@/api/curd'
|
||||
import type { DDNSConfig, DDNSDomainItem, DNSDomain, DNSRecord, DomainListParams, RecordListParams, RecordPayload, UpdateDDNSPayload } from '@/api/dns'
|
||||
import { defineStore } from 'pinia'
|
||||
import { dnsApi } from '@/api/dns'
|
||||
|
||||
interface DnsState {
|
||||
domains: DNSDomain[]
|
||||
pagination?: Pagination
|
||||
isLoading: boolean
|
||||
currentDomain?: DNSDomain
|
||||
records: DNSRecord[]
|
||||
recordsLoading: boolean
|
||||
recordsPagination?: Pagination
|
||||
ddnsConfig?: DDNSConfig
|
||||
ddnsLoading: boolean
|
||||
ddnsList: DDNSDomainItem[]
|
||||
ddnsListLoading: boolean
|
||||
}
|
||||
|
||||
export const useDnsStore = defineStore('dns-store', {
|
||||
state: (): DnsState => ({
|
||||
domains: [],
|
||||
pagination: undefined,
|
||||
isLoading: false,
|
||||
currentDomain: undefined,
|
||||
records: [],
|
||||
recordsLoading: false,
|
||||
recordsPagination: undefined,
|
||||
ddnsConfig: undefined,
|
||||
ddnsLoading: false,
|
||||
ddnsList: [],
|
||||
ddnsListLoading: false,
|
||||
}),
|
||||
actions: {
|
||||
async fetchDomains(params?: DomainListParams) {
|
||||
this.isLoading = true
|
||||
try {
|
||||
const response = await dnsApi.getList(params)
|
||||
this.domains = response.data
|
||||
this.pagination = response.pagination
|
||||
}
|
||||
finally {
|
||||
this.isLoading = false
|
||||
}
|
||||
},
|
||||
async fetchDomainDetail(id: number) {
|
||||
const data = await dnsApi.getItem(id)
|
||||
this.currentDomain = data
|
||||
return data
|
||||
},
|
||||
async fetchRecords(domainId: number, params?: RecordListParams) {
|
||||
this.recordsLoading = true
|
||||
try {
|
||||
const { data, pagination } = await dnsApi.listRecords(domainId, params)
|
||||
this.records = data
|
||||
this.recordsPagination = pagination
|
||||
}
|
||||
finally {
|
||||
this.recordsLoading = false
|
||||
}
|
||||
},
|
||||
async createRecord(domainId: number, payload: RecordPayload) {
|
||||
const data = await dnsApi.createRecord(domainId, payload)
|
||||
this.records.unshift(data)
|
||||
return data
|
||||
},
|
||||
async updateRecord(domainId: number, recordId: string, payload: RecordPayload) {
|
||||
const data = await dnsApi.updateRecord(domainId, recordId, payload)
|
||||
const index = this.records.findIndex(item => item.id === recordId)
|
||||
if (index !== -1)
|
||||
this.records.splice(index, 1, data)
|
||||
return data
|
||||
},
|
||||
async deleteRecord(domainId: number, recordId: string) {
|
||||
await dnsApi.deleteRecord(domainId, recordId)
|
||||
this.records = this.records.filter(item => item.id !== recordId)
|
||||
},
|
||||
async fetchDDNSConfig(domainId: number) {
|
||||
this.ddnsLoading = true
|
||||
try {
|
||||
this.ddnsConfig = await dnsApi.getDDNSConfig(domainId)
|
||||
return this.ddnsConfig
|
||||
}
|
||||
finally {
|
||||
this.ddnsLoading = false
|
||||
}
|
||||
},
|
||||
async updateDDNSConfig(domainId: number, payload: UpdateDDNSPayload) {
|
||||
this.ddnsLoading = true
|
||||
try {
|
||||
this.ddnsConfig = await dnsApi.updateDDNSConfig(domainId, payload)
|
||||
return this.ddnsConfig
|
||||
}
|
||||
finally {
|
||||
this.ddnsLoading = false
|
||||
}
|
||||
},
|
||||
resetRecords() {
|
||||
this.records = []
|
||||
this.recordsPagination = undefined
|
||||
},
|
||||
resetDDNS() {
|
||||
this.ddnsConfig = undefined
|
||||
},
|
||||
async fetchDDNSList() {
|
||||
this.ddnsListLoading = true
|
||||
try {
|
||||
const res = await dnsApi.listDDNS()
|
||||
this.ddnsList = res.data
|
||||
return res.data
|
||||
}
|
||||
finally {
|
||||
this.ddnsListLoading = false
|
||||
}
|
||||
},
|
||||
async refreshDDNSItem(domainId: number) {
|
||||
const cfg = await this.fetchDDNSConfig(domainId)
|
||||
const itemIndex = this.ddnsList.findIndex(item => item.id === domainId)
|
||||
if (itemIndex !== -1 && cfg) {
|
||||
this.ddnsList.splice(itemIndex, 1, {
|
||||
...this.ddnsList[itemIndex],
|
||||
config: cfg,
|
||||
})
|
||||
}
|
||||
},
|
||||
},
|
||||
})
|
||||
@@ -8,6 +8,7 @@ import { backupRoutes } from './modules/backup'
|
||||
import { certificatesRoutes } from './modules/certificates'
|
||||
import { configRoutes } from './modules/config'
|
||||
import { dashboardRoutes } from './modules/dashboard'
|
||||
import { dnsRoutes } from './modules/dns'
|
||||
import { errorRoutes } from './modules/error'
|
||||
import { namespacesRoutes } from './modules/namespaces'
|
||||
import { nginxLogRoutes } from './modules/nginx_log'
|
||||
@@ -30,6 +31,7 @@ const mainLayoutChildren: RouteRecordRaw[] = [
|
||||
...upstreamRoutes,
|
||||
...configRoutes,
|
||||
...certificatesRoutes,
|
||||
...dnsRoutes,
|
||||
...terminalRoutes,
|
||||
...nginxLogRoutes,
|
||||
...namespacesRoutes,
|
||||
|
||||
@@ -20,14 +20,6 @@ export const certificatesRoutes: RouteRecordRaw[] = [
|
||||
name: () => $gettext('ACME User'),
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'dns_credential',
|
||||
name: 'DNS Credentials',
|
||||
component: () => import('@/views/certificate/DNSCredential.vue'),
|
||||
meta: {
|
||||
name: () => $gettext('DNS Credentials'),
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'list',
|
||||
name: 'Certificates List',
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
import type { RouteRecordRaw } from 'vue-router'
|
||||
import { CloudServerOutlined } from '@ant-design/icons-vue'
|
||||
|
||||
export const dnsRoutes: RouteRecordRaw[] = [
|
||||
{
|
||||
path: 'dns',
|
||||
name: 'DNS',
|
||||
component: () => import('@/layouts/BaseRouterView.vue'),
|
||||
redirect: '/dns/domains',
|
||||
meta: {
|
||||
name: () => $gettext('DNS'),
|
||||
icon: CloudServerOutlined,
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: 'credentials',
|
||||
name: 'DNS Credentials',
|
||||
component: () => import('@/views/dns/DNSCredential.vue'),
|
||||
meta: {
|
||||
name: () => $gettext('Credentials'),
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'domains',
|
||||
name: 'DNS Domains',
|
||||
component: () => import('@/views/dns/DNSDomainList.vue'),
|
||||
meta: {
|
||||
name: () => $gettext('DNS Domains'),
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'ddns',
|
||||
name: 'DNS DDNS',
|
||||
component: () => import('@/views/dns/DDNSManager.vue'),
|
||||
meta: {
|
||||
name: () => $gettext('DDNS'),
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'domains/:id/records',
|
||||
name: 'DNS Domain Records',
|
||||
component: () => import('@/views/dns/DNSRecordManager.vue'),
|
||||
meta: {
|
||||
name: () => $gettext('DNS Records'),
|
||||
hiddenInSidebar: true,
|
||||
lastRouteName: 'DNS Domains',
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
]
|
||||
@@ -0,0 +1,259 @@
|
||||
<script setup lang="ts">
|
||||
import type { DDNSDomainItem, DNSRecord, UpdateDDNSPayload } from '@/api/dns'
|
||||
import { ReloadOutlined } from '@ant-design/icons-vue'
|
||||
import { message } from 'ant-design-vue'
|
||||
import dayjs from 'dayjs'
|
||||
import { computed, onMounted, ref } from 'vue'
|
||||
import { dnsApi } from '@/api/dns'
|
||||
import { useDnsStore } from '@/pinia/moudule/dns'
|
||||
|
||||
const store = useDnsStore()
|
||||
|
||||
const loading = computed(() => store.ddnsListLoading)
|
||||
const items = computed(() => store.ddnsList)
|
||||
|
||||
const drawerOpen = ref(false)
|
||||
const saving = ref(false)
|
||||
const currentDomain = ref<DDNSDomainItem | null>(null)
|
||||
const ddnsForm = ref<UpdateDDNSPayload>({
|
||||
enabled: false,
|
||||
interval_seconds: 300,
|
||||
record_ids: [],
|
||||
})
|
||||
|
||||
const records = ref<DNSRecord[]>([])
|
||||
const recordsLoading = ref(false)
|
||||
|
||||
const recordOptions = computed(() => {
|
||||
const opts = new Map<string, { value: string, label: string }>()
|
||||
records.value
|
||||
.filter(item => {
|
||||
const type = item.type?.toUpperCase?.()
|
||||
return type === 'A' || type === 'AAAA'
|
||||
})
|
||||
.forEach(item => {
|
||||
opts.set(item.id, {
|
||||
value: item.id,
|
||||
label: `${item.name} (${item.type.toUpperCase?.() ?? ''})`,
|
||||
})
|
||||
})
|
||||
|
||||
currentDomain.value?.config.targets?.forEach(target => {
|
||||
opts.set(target.id, {
|
||||
value: target.id,
|
||||
label: `${target.name} (${target.type})`,
|
||||
})
|
||||
})
|
||||
|
||||
return Array.from(opts.values())
|
||||
})
|
||||
|
||||
function filterRecordOption(input: string, option?: { label: string, value: string }) {
|
||||
if (!option)
|
||||
return false
|
||||
const keyword = input.toLowerCase()
|
||||
return option.label.toLowerCase().includes(keyword)
|
||||
}
|
||||
|
||||
const columns = [
|
||||
{
|
||||
title: $gettext('Domain'),
|
||||
dataIndex: 'domain',
|
||||
key: 'domain',
|
||||
},
|
||||
{
|
||||
title: $gettext('Credential'),
|
||||
key: 'credential',
|
||||
customRender: ({ record }: { record: DDNSDomainItem }) => record.credential_name ?? '-',
|
||||
},
|
||||
{
|
||||
title: $gettext('Provider'),
|
||||
key: 'provider',
|
||||
customRender: ({ record }: { record: DDNSDomainItem }) => record.credential_provider ?? '-',
|
||||
},
|
||||
{
|
||||
title: $gettext('Status'),
|
||||
key: 'status',
|
||||
},
|
||||
{
|
||||
title: $gettext('Interval'),
|
||||
key: 'interval',
|
||||
},
|
||||
{
|
||||
title: $gettext('Targets'),
|
||||
key: 'targets',
|
||||
},
|
||||
{
|
||||
title: $gettext('Last run'),
|
||||
key: 'last',
|
||||
},
|
||||
{
|
||||
title: $gettext('Actions'),
|
||||
key: 'actions',
|
||||
},
|
||||
]
|
||||
|
||||
async function init() {
|
||||
await store.fetchDDNSList()
|
||||
}
|
||||
|
||||
function formatTime(value?: string) {
|
||||
if (!value)
|
||||
return $gettext('Not run yet')
|
||||
return dayjs(value).format('YYYY-MM-DD HH:mm:ss')
|
||||
}
|
||||
|
||||
async function openDrawer(record: DDNSDomainItem) {
|
||||
currentDomain.value = record
|
||||
ddnsForm.value = {
|
||||
enabled: record.config.enabled,
|
||||
interval_seconds: record.config.interval_seconds,
|
||||
record_ids: record.config.targets?.map(t => t.id) ?? [],
|
||||
}
|
||||
drawerOpen.value = true
|
||||
await loadRecords(record.id)
|
||||
}
|
||||
|
||||
async function loadRecords(domainId: number) {
|
||||
recordsLoading.value = true
|
||||
try {
|
||||
const res = await dnsApi.listRecords(domainId, { per_page: 200 })
|
||||
records.value = res.data
|
||||
}
|
||||
finally {
|
||||
recordsLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
async function saveDDNS() {
|
||||
if (!currentDomain.value)
|
||||
return
|
||||
saving.value = true
|
||||
try {
|
||||
await store.updateDDNSConfig(currentDomain.value.id, ddnsForm.value)
|
||||
await store.refreshDDNSItem(currentDomain.value.id)
|
||||
message.success($gettext('DDNS saved'))
|
||||
drawerOpen.value = false
|
||||
}
|
||||
finally {
|
||||
saving.value = false
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
init()
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="ddns-page">
|
||||
<ACard>
|
||||
<template #title>
|
||||
<ASpace align="center">
|
||||
{{ $gettext('DDNS Overview') }}
|
||||
</ASpace>
|
||||
</template>
|
||||
<template #extra>
|
||||
<AButton type="link" size="small" :loading="loading" @click="init">
|
||||
<template #icon>
|
||||
<ReloadOutlined />
|
||||
</template>
|
||||
{{ $gettext('Refresh') }}
|
||||
</AButton>
|
||||
</template>
|
||||
|
||||
<ATable
|
||||
:loading="loading"
|
||||
:data-source="items"
|
||||
:columns="columns"
|
||||
row-key="id"
|
||||
:pagination="false"
|
||||
>
|
||||
<template #bodyCell="{ column, record }">
|
||||
<template v-if="column.key === 'status'">
|
||||
<ATag :color="record.config.enabled ? 'green' : 'default'">
|
||||
{{ record.config.enabled ? $gettext('Enabled') : $gettext('Disabled') }}
|
||||
</ATag>
|
||||
<div v-if="record.config.last_error" class="text-red-500 text-xs">
|
||||
{{ record.config.last_error }}
|
||||
</div>
|
||||
</template>
|
||||
<template v-else-if="column.key === 'interval'">
|
||||
{{ record.config.interval_seconds }}s
|
||||
</template>
|
||||
<template v-else-if="column.key === 'targets'">
|
||||
<ASpace wrap size="small">
|
||||
<ATag v-for="target in record.config.targets" :key="target.id">
|
||||
{{ target.name }} ({{ target.type }})
|
||||
</ATag>
|
||||
<span v-if="!record.config.targets?.length">-</span>
|
||||
</ASpace>
|
||||
</template>
|
||||
<template v-else-if="column.key === 'last'">
|
||||
<div>{{ formatTime(record.config.last_run_at) }}</div>
|
||||
<div class="text-xs text-gray-500">
|
||||
IPv4: {{ record.config.last_ipv4 || '-' }} | IPv6: {{ record.config.last_ipv6 || '-' }}
|
||||
</div>
|
||||
</template>
|
||||
<template v-else-if="column.key === 'actions'">
|
||||
<ASpace>
|
||||
<AButton size="small" type="link" @click="openDrawer(record as DDNSDomainItem)">
|
||||
{{ $gettext('Configure') }}
|
||||
</AButton>
|
||||
</ASpace>
|
||||
</template>
|
||||
</template>
|
||||
</ATable>
|
||||
</ACard>
|
||||
|
||||
<ADrawer
|
||||
:open="drawerOpen"
|
||||
:title="currentDomain ? `${$gettext('Configure DDNS')} - ${currentDomain.domain}` : ''"
|
||||
width="520"
|
||||
@close="drawerOpen = false"
|
||||
>
|
||||
<ASkeleton v-if="recordsLoading" active />
|
||||
<template v-else>
|
||||
<AForm layout="vertical">
|
||||
<AFormItem :label="$gettext('Enable DDNS')">
|
||||
<ASwitch v-model:checked="ddnsForm.enabled" />
|
||||
</AFormItem>
|
||||
<AFormItem :label="$gettext('Records')">
|
||||
<ASelect
|
||||
v-model:value="ddnsForm.record_ids"
|
||||
mode="tags"
|
||||
show-search
|
||||
:filter-option="(filterRecordOption as any)"
|
||||
:options="recordOptions"
|
||||
:placeholder="$gettext('Type or select A/AAAA records')"
|
||||
:disabled="!ddnsForm.enabled"
|
||||
/>
|
||||
</AFormItem>
|
||||
<AFormItem :label="$gettext('Interval (seconds)')">
|
||||
<AInputNumber
|
||||
v-model:value="ddnsForm.interval_seconds"
|
||||
:min="60"
|
||||
:step="60"
|
||||
:disabled="!ddnsForm.enabled"
|
||||
style="width: 200px"
|
||||
/>
|
||||
</AFormItem>
|
||||
</AForm>
|
||||
<div class="flex gap-2 mt-4">
|
||||
<AButton @click="drawerOpen = false">
|
||||
{{ $gettext('Cancel') }}
|
||||
</AButton>
|
||||
<AButton type="primary" :loading="saving" @click="saveDDNS">
|
||||
{{ $gettext('Save') }}
|
||||
</AButton>
|
||||
</div>
|
||||
</template>
|
||||
</ADrawer>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.ddns-page {
|
||||
padding-bottom: 16px;
|
||||
}
|
||||
</style>
|
||||
@@ -92,12 +92,6 @@ const columns: StdTableColumn[] = [{
|
||||
<p>
|
||||
{{ $gettext('Please fill in the API authentication credentials provided by your DNS provider.') }}
|
||||
</p>
|
||||
<p>
|
||||
{{ $gettext('We will add one or more TXT records to the DNS records of your domain for ownership verification.') }}
|
||||
</p>
|
||||
<p>
|
||||
{{ $gettext('Once the verification is complete, the records will be removed.') }}
|
||||
</p>
|
||||
<p>
|
||||
{{ $gettext('Please note that the unit of time configurations below are all in seconds.') }}
|
||||
</p>
|
||||
@@ -0,0 +1,269 @@
|
||||
<script setup lang="tsx">
|
||||
import type { CustomRenderArgs, StdTableColumn } from '@uozi-admin/curd'
|
||||
import type { SelectProps } from 'ant-design-vue'
|
||||
import type { DNSProvider } from '@/api/auto_cert'
|
||||
import type { DNSDomain } from '@/api/dns'
|
||||
import { HeartOutlined, MailOutlined, StarOutlined } from '@ant-design/icons-vue'
|
||||
import { datetimeRender, StdCurd } from '@uozi-admin/curd'
|
||||
import { FormItem, Select } from 'ant-design-vue'
|
||||
import { computed, onMounted, reactive, ref } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import auto_cert from '@/api/auto_cert'
|
||||
import { dnsApi } from '@/api/dns'
|
||||
import dns_credential from '@/api/dns_credential'
|
||||
import { filterAllowedDnsProviders } from '@/constants/dns_providers'
|
||||
|
||||
const router = useRouter()
|
||||
|
||||
type SelectOptionList = NonNullable<SelectProps['options']>
|
||||
|
||||
interface DomainForm extends Omit<DNSDomain, 'dns_credential_id'> {
|
||||
dns_credential_id?: number
|
||||
selected_provider?: string
|
||||
provider_initialized?: boolean
|
||||
}
|
||||
|
||||
const dnsProviders = ref<DNSProvider[]>([])
|
||||
const isLoadingProviders = ref(false)
|
||||
const credentialOptions = reactive<Record<string, SelectOptionList>>({})
|
||||
const credentialLoadingMap = reactive<Record<string, boolean>>({})
|
||||
|
||||
const providerOptions = computed<SelectOptionList>(() => {
|
||||
const list: SelectOptionList = []
|
||||
dnsProviders.value.forEach(provider => {
|
||||
const label = provider.name ?? provider.provider ?? ''
|
||||
if (label) {
|
||||
list.push({
|
||||
label,
|
||||
value: label,
|
||||
})
|
||||
}
|
||||
})
|
||||
return list
|
||||
})
|
||||
|
||||
onMounted(async () => {
|
||||
isLoadingProviders.value = true
|
||||
try {
|
||||
const list = await auto_cert.get_dns_providers()
|
||||
dnsProviders.value = filterAllowedDnsProviders(list)
|
||||
}
|
||||
finally {
|
||||
isLoadingProviders.value = false
|
||||
}
|
||||
})
|
||||
|
||||
function clearCredentialSelection(formData: DomainForm) {
|
||||
formData.dns_credential_id = undefined
|
||||
}
|
||||
|
||||
async function ensureCredentialOptions(provider: string) {
|
||||
if (!provider || credentialOptions[provider])
|
||||
return
|
||||
credentialLoadingMap[provider] = true
|
||||
try {
|
||||
const response = await dns_credential.getList({ provider })
|
||||
const list = response?.data ?? []
|
||||
credentialOptions[provider] = list.map(item => ({
|
||||
label: item.name,
|
||||
value: item.id,
|
||||
}))
|
||||
}
|
||||
finally {
|
||||
credentialLoadingMap[provider] = false
|
||||
}
|
||||
}
|
||||
|
||||
function filterOption(input: string, option?: { label?: string | number }) {
|
||||
if (!option?.label)
|
||||
return false
|
||||
return option.label.toString().toLowerCase().includes(input.toLowerCase())
|
||||
}
|
||||
|
||||
interface DomainEditContext {
|
||||
formData: DomainForm
|
||||
mode: 'add' | 'edit'
|
||||
}
|
||||
|
||||
function resolveProviderName(record: DomainForm) {
|
||||
return record.dns_credential?.provider
|
||||
?? ''
|
||||
}
|
||||
|
||||
function resolveCredentialName(record: DomainForm) {
|
||||
return record.dns_credential?.name ?? '-'
|
||||
}
|
||||
|
||||
const columns: StdTableColumn[] = [{
|
||||
title: () => $gettext('Domain'),
|
||||
dataIndex: 'domain',
|
||||
sorter: true,
|
||||
search: true,
|
||||
edit: {
|
||||
type: 'input',
|
||||
formItem: {
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
}, {
|
||||
title: () => $gettext('Credential'),
|
||||
dataIndex: 'dns_credential_id',
|
||||
customRender: ({ record }: CustomRenderArgs & { record: DNSDomain }) => {
|
||||
return resolveCredentialName(record as DomainForm)
|
||||
},
|
||||
edit: {
|
||||
type: (context: DomainEditContext) => {
|
||||
const formData = context.formData
|
||||
if (!formData.provider_initialized) {
|
||||
formData.selected_provider = context.mode === 'edit'
|
||||
? resolveProviderName(formData)
|
||||
: ''
|
||||
formData.provider_initialized = true
|
||||
}
|
||||
const providerRef = computed({
|
||||
get: () => {
|
||||
return formData.selected_provider ?? ''
|
||||
},
|
||||
set: (value: string) => {
|
||||
formData.selected_provider = value
|
||||
},
|
||||
})
|
||||
|
||||
const mergedProviderOptions = computed<SelectOptionList>(() => {
|
||||
const base = providerOptions.value
|
||||
if (
|
||||
providerRef.value
|
||||
&& !base.some(option => option.value === providerRef.value)
|
||||
) {
|
||||
return [
|
||||
...base,
|
||||
{
|
||||
label: providerRef.value,
|
||||
value: providerRef.value,
|
||||
},
|
||||
]
|
||||
}
|
||||
return base
|
||||
})
|
||||
|
||||
if (providerRef.value)
|
||||
ensureCredentialOptions(providerRef.value)
|
||||
|
||||
const credentialList: SelectOptionList = providerRef.value ? credentialOptions[providerRef.value] ?? [] : []
|
||||
const credentialField = providerRef.value
|
||||
? (
|
||||
<FormItem key="credential" label={$gettext('Credential')} required>
|
||||
<Select
|
||||
v-model:value={formData.dns_credential_id}
|
||||
options={credentialList}
|
||||
placeholder={$gettext('Select Credential')}
|
||||
loading={Boolean(credentialLoadingMap[providerRef.value] && !credentialList.length)}
|
||||
showSearch
|
||||
filterOption={filterOption}
|
||||
/>
|
||||
</FormItem>
|
||||
)
|
||||
: null
|
||||
|
||||
function handleProviderChange(value: string) {
|
||||
providerRef.value = value
|
||||
clearCredentialSelection(formData)
|
||||
if (value)
|
||||
ensureCredentialOptions(value)
|
||||
}
|
||||
|
||||
return (
|
||||
<div class="flex flex-col gap-4">
|
||||
<FormItem label={$gettext('Provider')} required>
|
||||
<Select
|
||||
value={providerRef.value || undefined}
|
||||
options={mergedProviderOptions.value}
|
||||
placeholder={$gettext('Select Provider')}
|
||||
showSearch
|
||||
filterOption={filterOption}
|
||||
loading={isLoadingProviders.value}
|
||||
onChange={handleProviderChange}
|
||||
/>
|
||||
</FormItem>
|
||||
{credentialField}
|
||||
</div>
|
||||
)
|
||||
},
|
||||
formItem: {
|
||||
hiddenLabelInEdit: true,
|
||||
},
|
||||
rules: [{ required: true }],
|
||||
},
|
||||
}, {
|
||||
title: () => $gettext('Provider'),
|
||||
dataIndex: 'credential.provider',
|
||||
customRender: ({ record }: CustomRenderArgs & { record: DNSDomain }) => {
|
||||
return resolveProviderName(record as DomainForm) || '--'
|
||||
},
|
||||
pure: true,
|
||||
}, {
|
||||
title: () => $gettext('Updated at'),
|
||||
dataIndex: 'updated_at',
|
||||
customRender: datetimeRender,
|
||||
sorter: true,
|
||||
pure: true,
|
||||
}, {
|
||||
title: () => $gettext('Actions'),
|
||||
dataIndex: 'actions',
|
||||
fixed: 'right',
|
||||
}]
|
||||
|
||||
function goToRecords(record: DNSDomain) {
|
||||
router.push({
|
||||
name: 'DNS Domain Records',
|
||||
params: {
|
||||
id: record.id,
|
||||
},
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<StdCurd
|
||||
:title="$gettext('DNS Domains')"
|
||||
:api="dnsApi"
|
||||
:columns
|
||||
disable-export
|
||||
disable-view
|
||||
>
|
||||
<template #beforeActions="{ record }">
|
||||
<AButton size="small" type="link" @click="goToRecords(record as DNSDomain)">
|
||||
{{ $gettext('Manage Records') }}
|
||||
</AButton>
|
||||
</template>
|
||||
|
||||
<template #afterForm>
|
||||
<div class="mt-4 p-4 bg-gray-50 dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700">
|
||||
<ATypographyTitle :level="5" class="mb-3">
|
||||
<HeartOutlined class="mr-2 text-red-500" />
|
||||
{{ $gettext('DNS Provider Support') }}
|
||||
</ATypographyTitle>
|
||||
|
||||
<div class="space-y-2">
|
||||
<div class="flex items-center space-x-2">
|
||||
<StarOutlined class="text-yellow-500 flex-shrink-0" />
|
||||
<ATypographyText class="text-sm">
|
||||
{{ $gettext('Need more DNS providers? Support us through donations or contact us for commercial collaboration') }}
|
||||
</ATypographyText>
|
||||
</div>
|
||||
<div class="flex items-center space-x-2">
|
||||
<MailOutlined class="text-blue-500 flex-shrink-0" />
|
||||
<ATypographyText class="text-sm">
|
||||
{{ $gettext('Business contact:') }}
|
||||
<a href="mailto:business@uozi.com" class="text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300">business@uozi.com</a>
|
||||
</ATypographyText>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</StdCurd>
|
||||
</template>
|
||||
|
||||
<style scoped lang="less">
|
||||
|
||||
</style>
|
||||
@@ -0,0 +1,233 @@
|
||||
<script setup lang="ts">
|
||||
import type { DNSRecord, RecordListParams, RecordPayload } from '@/api/dns'
|
||||
import { PlusOutlined, ReloadOutlined } from '@ant-design/icons-vue'
|
||||
import { message } from 'ant-design-vue'
|
||||
import { computed, onBeforeUnmount, onMounted, ref } from 'vue'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import FooterToolBar from '@/components/FooterToolbar'
|
||||
import { useDnsStore } from '@/pinia/moudule/dns'
|
||||
import DNSRecordFilter from '@/views/dns/components/DNSRecordFilter.vue'
|
||||
import DNSRecordForm from '@/views/dns/components/DNSRecordForm.vue'
|
||||
import DNSRecordTable from '@/views/dns/components/DNSRecordTable.vue'
|
||||
|
||||
const route = useRoute()
|
||||
const store = useDnsStore()
|
||||
const router = useRouter()
|
||||
|
||||
const filters = ref<RecordListParams>({
|
||||
name: '',
|
||||
type: '',
|
||||
})
|
||||
|
||||
const pagination = ref({
|
||||
current: 1,
|
||||
pageSize: 50,
|
||||
total: 0,
|
||||
})
|
||||
|
||||
const pageSizeOptions = ['20', '50', '100', '200']
|
||||
|
||||
const domainId = computed(() => Number(route.params.id))
|
||||
|
||||
const isDrawerOpen = ref(false)
|
||||
const editingRecord = ref<DNSRecord | null>(null)
|
||||
const formModel = ref<RecordPayload>({
|
||||
type: 'A',
|
||||
name: '@',
|
||||
content: '',
|
||||
ttl: 600,
|
||||
})
|
||||
|
||||
const showProxiedToggle = computed(() => {
|
||||
const provider = store.currentDomain?.dns_credential?.provider ?? ''
|
||||
return provider.toLowerCase().includes('cloudflare')
|
||||
})
|
||||
|
||||
const contentSuggestions = computed(() => {
|
||||
const unique = new Set<string>()
|
||||
store.records.forEach(record => {
|
||||
const type = record.type?.toUpperCase?.() ?? ''
|
||||
if (record.content && (type === 'A' || type === 'CNAME')) {
|
||||
unique.add(record.content)
|
||||
}
|
||||
})
|
||||
return Array.from(unique)
|
||||
})
|
||||
|
||||
const pageTitle = computed(() => {
|
||||
return store.currentDomain?.domain ?? $gettext('DNS Records')
|
||||
})
|
||||
|
||||
async function initData() {
|
||||
await store.fetchDomainDetail(domainId.value)
|
||||
pagination.value.current = 1
|
||||
await fetchRecords()
|
||||
}
|
||||
|
||||
async function fetchRecords() {
|
||||
await store.fetchRecords(domainId.value, {
|
||||
...filters.value,
|
||||
page: pagination.value.current,
|
||||
per_page: pagination.value.pageSize,
|
||||
})
|
||||
const meta = store.recordsPagination
|
||||
pagination.value = {
|
||||
current: meta?.current_page ?? pagination.value.current,
|
||||
pageSize: meta?.per_page ?? pagination.value.pageSize,
|
||||
total: meta?.total ?? 0,
|
||||
}
|
||||
}
|
||||
|
||||
function openCreateDrawer() {
|
||||
editingRecord.value = null
|
||||
formModel.value = {
|
||||
type: 'A',
|
||||
name: '@',
|
||||
content: '',
|
||||
ttl: 600,
|
||||
}
|
||||
isDrawerOpen.value = true
|
||||
}
|
||||
|
||||
function openEditDrawer(record: DNSRecord) {
|
||||
editingRecord.value = record
|
||||
formModel.value = {
|
||||
type: record.type,
|
||||
name: record.name,
|
||||
content: record.content,
|
||||
ttl: record.ttl,
|
||||
priority: record.priority,
|
||||
weight: record.weight,
|
||||
proxied: record.proxied,
|
||||
}
|
||||
isDrawerOpen.value = true
|
||||
}
|
||||
|
||||
async function handleSubmit() {
|
||||
if (editingRecord.value) {
|
||||
await store.updateRecord(domainId.value, editingRecord.value.id, formModel.value)
|
||||
message.success($gettext('Record updated'))
|
||||
}
|
||||
else {
|
||||
await store.createRecord(domainId.value, formModel.value)
|
||||
message.success($gettext('Record created'))
|
||||
}
|
||||
isDrawerOpen.value = false
|
||||
}
|
||||
|
||||
async function handleDelete(record: DNSRecord) {
|
||||
await store.deleteRecord(domainId.value, record.id)
|
||||
message.success($gettext('Record deleted'))
|
||||
}
|
||||
|
||||
function handleFilterSubmit() {
|
||||
pagination.value.current = 1
|
||||
fetchRecords()
|
||||
}
|
||||
|
||||
function handlePageChange(page: number, pageSize: number) {
|
||||
pagination.value.current = page
|
||||
pagination.value.pageSize = pageSize
|
||||
fetchRecords()
|
||||
}
|
||||
|
||||
function handlePageSizeChange(current: number, size: number) {
|
||||
pagination.value.current = current
|
||||
pagination.value.pageSize = size
|
||||
fetchRecords()
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
initData()
|
||||
})
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
store.resetRecords()
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="record-manager">
|
||||
<ACard>
|
||||
<template #title>
|
||||
<ASpace align="center">
|
||||
{{ pageTitle }}
|
||||
<ATag v-if="store.currentDomain?.dns_credential?.provider">
|
||||
{{ store.currentDomain?.dns_credential?.provider }}
|
||||
</ATag>
|
||||
</ASpace>
|
||||
</template>
|
||||
<template #extra>
|
||||
<AButton type="link" size="small" @click="fetchRecords">
|
||||
<template #icon>
|
||||
<ReloadOutlined />
|
||||
</template>
|
||||
{{ $gettext('Refresh') }}
|
||||
</AButton>
|
||||
<AButton type="link" size="small" @click="openCreateDrawer">
|
||||
<template #icon>
|
||||
<PlusOutlined />
|
||||
</template>
|
||||
{{ $gettext('Add Record') }}
|
||||
</AButton>
|
||||
</template>
|
||||
|
||||
<DNSRecordFilter v-model:filters="filters" @submit="handleFilterSubmit" />
|
||||
|
||||
<DNSRecordTable
|
||||
class="mt-4"
|
||||
:records="store.records"
|
||||
:loading="store.recordsLoading"
|
||||
:show-proxied="showProxiedToggle"
|
||||
@edit="openEditDrawer"
|
||||
@delete="handleDelete"
|
||||
/>
|
||||
<div class="mt-4 flex justify-end">
|
||||
<APagination
|
||||
:current="pagination.current"
|
||||
:page-size="pagination.pageSize"
|
||||
:total="pagination.total"
|
||||
:show-size-changer="true"
|
||||
:page-size-options="pageSizeOptions"
|
||||
@change="handlePageChange"
|
||||
@show-size-change="handlePageSizeChange"
|
||||
/>
|
||||
</div>
|
||||
</ACard>
|
||||
|
||||
<ADrawer
|
||||
:open="isDrawerOpen"
|
||||
:title="editingRecord ? $gettext('Edit Record') : $gettext('Create Record')"
|
||||
width="480"
|
||||
@close="isDrawerOpen = false"
|
||||
>
|
||||
<DNSRecordForm
|
||||
v-model:record="formModel"
|
||||
:show-proxied="showProxiedToggle"
|
||||
:value-suggestions="contentSuggestions"
|
||||
/>
|
||||
<template #footer>
|
||||
<ASpace>
|
||||
<AButton @click="isDrawerOpen = false">
|
||||
{{ $gettext('Cancel') }}
|
||||
</AButton>
|
||||
<AButton type="primary" @click="handleSubmit">
|
||||
{{ $gettext('Save') }}
|
||||
</AButton>
|
||||
</ASpace>
|
||||
</template>
|
||||
</ADrawer>
|
||||
|
||||
<FooterToolBar>
|
||||
<AButton @click="router.push('/dns/domains')">
|
||||
{{ $gettext('Back') }}
|
||||
</AButton>
|
||||
</FooterToolBar>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped lang="less">
|
||||
.record-manager {
|
||||
padding-bottom: 24px;
|
||||
}
|
||||
</style>
|
||||
+2
-1
@@ -5,6 +5,7 @@ import type { Ref } from 'vue'
|
||||
import type { DNSProvider } from '@/api/auto_cert'
|
||||
import type { DnsCredential } from '@/api/dns_credential'
|
||||
import auto_cert from '@/api/auto_cert'
|
||||
import { filterAllowedDnsProviders } from '@/constants/dns_providers'
|
||||
|
||||
const providers = ref([]) as Ref<DNSProvider[]>
|
||||
|
||||
@@ -22,7 +23,7 @@ async function init() {
|
||||
}
|
||||
|
||||
auto_cert.get_dns_providers().then(r => {
|
||||
providers.value = r
|
||||
providers.value = filterAllowedDnsProviders(r)
|
||||
}).then(() => {
|
||||
init()
|
||||
})
|
||||
@@ -0,0 +1,74 @@
|
||||
<script setup lang="ts">
|
||||
import type { RecordListParams } from '@/api/dns'
|
||||
|
||||
const emit = defineEmits<{
|
||||
(event: 'submit'): void
|
||||
}>()
|
||||
|
||||
const filters = defineModel<RecordListParams>('filters', {
|
||||
default: () => ({
|
||||
type: '',
|
||||
name: '',
|
||||
}),
|
||||
})
|
||||
|
||||
const recordTypes = [
|
||||
'',
|
||||
'A',
|
||||
'AAAA',
|
||||
'CNAME',
|
||||
'TXT',
|
||||
'MX',
|
||||
'NS',
|
||||
'SRV',
|
||||
'CAA',
|
||||
]
|
||||
|
||||
function handleSubmit() {
|
||||
emit('submit')
|
||||
}
|
||||
|
||||
function handleReset() {
|
||||
filters.value = {
|
||||
type: '',
|
||||
name: '',
|
||||
}
|
||||
emit('submit')
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<AForm layout="inline" @submit.prevent>
|
||||
<AFormItem :label="$gettext('Host')">
|
||||
<AInput
|
||||
v-model:value="filters.name"
|
||||
:placeholder="$gettext('Host, e.g. @ or www')"
|
||||
style="width: 200px;"
|
||||
/>
|
||||
</AFormItem>
|
||||
<AFormItem :label="$gettext('Type')">
|
||||
<ASelect
|
||||
v-model:value="filters.type"
|
||||
style="width: 160px;"
|
||||
>
|
||||
<ASelectOption v-for="type in recordTypes" :key="type" :value="type">
|
||||
{{ type || $gettext('All') }}
|
||||
</ASelectOption>
|
||||
</ASelect>
|
||||
</AFormItem>
|
||||
<AFormItem>
|
||||
<ASpace>
|
||||
<AButton type="primary" @click="handleSubmit">
|
||||
{{ $gettext('Search') }}
|
||||
</AButton>
|
||||
<AButton @click="handleReset">
|
||||
{{ $gettext('Reset') }}
|
||||
</AButton>
|
||||
</ASpace>
|
||||
</AFormItem>
|
||||
</AForm>
|
||||
</template>
|
||||
|
||||
<style scoped lang="less">
|
||||
|
||||
</style>
|
||||
@@ -0,0 +1,95 @@
|
||||
<script setup lang="ts">
|
||||
import type { RecordPayload } from '@/api/dns'
|
||||
import { computed } from 'vue'
|
||||
|
||||
const props = defineProps<{
|
||||
showProxied?: boolean
|
||||
valueSuggestions?: string[]
|
||||
}>()
|
||||
|
||||
const formModel = defineModel<RecordPayload>('record', {
|
||||
required: true,
|
||||
default: () => ({
|
||||
type: 'A',
|
||||
name: '@',
|
||||
content: '',
|
||||
ttl: 600,
|
||||
}),
|
||||
})
|
||||
|
||||
const recordTypes = [
|
||||
'A',
|
||||
'AAAA',
|
||||
'CNAME',
|
||||
'TXT',
|
||||
'MX',
|
||||
'NS',
|
||||
'SRV',
|
||||
'CAA',
|
||||
]
|
||||
|
||||
const showPriority = computed(() => {
|
||||
const type = formModel.value.type.toUpperCase()
|
||||
return ['MX', 'SRV'].includes(type)
|
||||
})
|
||||
|
||||
const showWeight = computed(() => {
|
||||
const type = formModel.value.type.toUpperCase()
|
||||
return ['SRV'].includes(type)
|
||||
})
|
||||
|
||||
const isValueAutocompleteEnabled = computed(() => {
|
||||
const type = formModel.value.type?.toUpperCase?.() ?? ''
|
||||
return type === 'A' || type === 'CNAME'
|
||||
})
|
||||
|
||||
function handleValueKeydown(event: KeyboardEvent) {
|
||||
if (!isValueAutocompleteEnabled.value)
|
||||
return
|
||||
if (event.key === 'Enter') {
|
||||
event.preventDefault()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<AForm layout="vertical">
|
||||
<AFormItem :label="$gettext('Type')" :rules="[{ required: true }]">
|
||||
<ASelect
|
||||
v-model:value="formModel.type"
|
||||
:options="recordTypes.map(value => ({ label: value, value }))"
|
||||
/>
|
||||
</AFormItem>
|
||||
<AFormItem :label="$gettext('Name')" :rules="[{ required: true }]">
|
||||
<AInput v-model:value="formModel.name" :placeholder="$gettext('Use @ for root')" />
|
||||
</AFormItem>
|
||||
<AFormItem :label="$gettext('Value')" :rules="[{ required: true }]">
|
||||
<AAutoComplete
|
||||
v-if="isValueAutocompleteEnabled"
|
||||
v-model:value="formModel.content"
|
||||
:options="(props.valueSuggestions ?? []).filter(Boolean).map(value => ({ value }))"
|
||||
:filter-option="(input, option) => option?.value?.toLowerCase().includes(input.toLowerCase()) ?? false"
|
||||
style="width: 100%;"
|
||||
>
|
||||
<ATextarea v-model:value="formModel.content" auto-size @keydown.enter="handleValueKeydown" />
|
||||
</AAutoComplete>
|
||||
<ATextarea v-else v-model:value="formModel.content" auto-size />
|
||||
</AFormItem>
|
||||
<AFormItem :label="$gettext('TTL (seconds)')" :rules="[{ required: true, type: 'number', min: 1 }]">
|
||||
<AInputNumber v-model:value="formModel.ttl" :min="1" :step="60" style="width: 100%;" />
|
||||
</AFormItem>
|
||||
<AFormItem v-if="showPriority" :label="$gettext('Priority')" :rules="[{ required: true, type: 'number', min: 0 }]">
|
||||
<AInputNumber v-model:value="formModel.priority" :min="0" style="width: 100%;" />
|
||||
</AFormItem>
|
||||
<AFormItem v-if="showWeight" :label="$gettext('Weight')">
|
||||
<AInputNumber v-model:value="formModel.weight" :min="0" :max="100" style="width: 100%;" />
|
||||
</AFormItem>
|
||||
<AFormItem v-if="props.showProxied" :label="$gettext('Proxied')">
|
||||
<ASwitch v-model:checked="formModel.proxied" />
|
||||
</AFormItem>
|
||||
</AForm>
|
||||
</template>
|
||||
|
||||
<style scoped lang="less">
|
||||
|
||||
</style>
|
||||
@@ -0,0 +1,110 @@
|
||||
<script setup lang="ts">
|
||||
import type { DNSRecord } from '@/api/dns'
|
||||
import { computed } from 'vue'
|
||||
|
||||
const props = defineProps<{
|
||||
records: DNSRecord[]
|
||||
loading?: boolean
|
||||
showProxied?: boolean
|
||||
}>()
|
||||
|
||||
const emit = defineEmits<{
|
||||
(event: 'edit', record: DNSRecord): void
|
||||
(event: 'delete', record: DNSRecord): void
|
||||
}>()
|
||||
|
||||
const baseColumns = [{
|
||||
title: $gettext('Name'),
|
||||
dataIndex: 'name',
|
||||
width: 160,
|
||||
}, {
|
||||
title: $gettext('Type'),
|
||||
dataIndex: 'type',
|
||||
width: 100,
|
||||
}, {
|
||||
title: $gettext('Value'),
|
||||
dataIndex: 'content',
|
||||
width: 240,
|
||||
}, {
|
||||
title: $gettext('TTL'),
|
||||
dataIndex: 'ttl',
|
||||
width: 100,
|
||||
}, {
|
||||
title: $gettext('Priority'),
|
||||
dataIndex: 'priority',
|
||||
width: 100,
|
||||
}, {
|
||||
title: $gettext('Weight'),
|
||||
dataIndex: 'weight',
|
||||
width: 100,
|
||||
}, {
|
||||
title: $gettext('Actions'),
|
||||
dataIndex: 'actions',
|
||||
width: 180,
|
||||
fixed: 'right',
|
||||
}]
|
||||
|
||||
const columns = computed(() => {
|
||||
const list = baseColumns.slice()
|
||||
if (props.showProxied) {
|
||||
list.splice(list.length - 1, 0, {
|
||||
title: $gettext('Proxied'),
|
||||
dataIndex: 'proxied',
|
||||
width: 120,
|
||||
})
|
||||
}
|
||||
return list
|
||||
})
|
||||
|
||||
function handleEdit(record: DNSRecord) {
|
||||
emit('edit', record)
|
||||
}
|
||||
|
||||
function handleDelete(record: DNSRecord) {
|
||||
emit('delete', record)
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<ATable
|
||||
class="dns-record-table"
|
||||
row-key="id"
|
||||
:columns="(columns as any)"
|
||||
:data-source="records"
|
||||
:loading
|
||||
:scroll="{ x: 'max-content' }"
|
||||
:pagination="false"
|
||||
>
|
||||
<template #bodyCell="{ column, record }">
|
||||
<template v-if="column.dataIndex === 'proxied'">
|
||||
<ATag :color="(record as DNSRecord).proxied ? 'green' : 'default'">
|
||||
{{ (record as DNSRecord).proxied ? $gettext('Proxied') : $gettext('DNS Only') }}
|
||||
</ATag>
|
||||
</template>
|
||||
<template v-else-if="column.dataIndex === 'actions'">
|
||||
<ASpace>
|
||||
<AButton type="link" size="small" @click="handleEdit(record as DNSRecord)">
|
||||
{{ $gettext('Edit') }}
|
||||
</AButton>
|
||||
<APopconfirm
|
||||
:title="$gettext('Are you sure to delete this record?')"
|
||||
@confirm="handleDelete(record as DNSRecord)"
|
||||
>
|
||||
<AButton type="link" danger size="small">
|
||||
{{ $gettext('Delete') }}
|
||||
</AButton>
|
||||
</APopconfirm>
|
||||
</ASpace>
|
||||
</template>
|
||||
</template>
|
||||
</ATable>
|
||||
</template>
|
||||
|
||||
<style scoped lang="less">
|
||||
.dns-record-table {
|
||||
:deep(.ant-table-cell) {
|
||||
white-space: normal;
|
||||
word-break: break-word;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -41,3 +41,14 @@ By default, Nginx UI will automatically renew the certificate every 7 days.
|
||||
This option is used to set the port for backend listening in the HTTP01 challenge mode when obtaining Let's Encrypt
|
||||
certificates. The HTTP01 challenge is a domain validation method used by Let's Encrypt to verify that you control the
|
||||
domain for which you're requesting a certificate.
|
||||
|
||||
## DNS Domain Management
|
||||
|
||||
- Version:`>= v2.2.2`
|
||||
- Supported providers: Alibaba Cloud DNS, Tencent Cloud DNS, Cloudflare
|
||||
|
||||
You can now register DNS domains inside Nginx-UI (Certificates → DNS Domains) and bind them to an existing DNS Credential.
|
||||
For every registered domain the UI exposes a full DNS record management experience (list, create, update, delete) that talks directly to the provider's API.
|
||||
This allows you to verify domains for certificate issuance and perform day-to-day DNS maintenance without leaving the dashboard.
|
||||
|
||||
> Make sure the selected DNS Credential contains the API tokens and permissions required by the provider to edit DNS records.
|
||||
|
||||
@@ -6,9 +6,14 @@ require (
|
||||
code.pfad.fr/risefront v1.0.0
|
||||
github.com/0xJacky/pofile v1.1.1
|
||||
github.com/BurntSushi/toml v1.5.0
|
||||
github.com/blevesearch/bleve/v2 v2.5.5
|
||||
github.com/alibabacloud-go/alidns-20150109/v4 v4.7.0
|
||||
github.com/alibabacloud-go/darabonba-openapi/v2 v2.1.13
|
||||
github.com/alibabacloud-go/tea v1.3.13
|
||||
github.com/alibabacloud-go/tea-utils/v2 v2.0.8
|
||||
github.com/blevesearch/bleve/v2 v2.5.6
|
||||
github.com/caarlos0/env/v11 v11.3.1
|
||||
github.com/casdoor/casdoor-go-sdk v1.39.0
|
||||
github.com/cloudflare/cloudflare-go v0.116.0
|
||||
github.com/creack/pty v1.1.24
|
||||
github.com/dgraph-io/ristretto/v2 v2.3.0
|
||||
github.com/docker/docker v28.5.2+incompatible
|
||||
@@ -29,7 +34,7 @@ require (
|
||||
github.com/golang-jwt/jwt/v5 v5.3.0
|
||||
github.com/google/uuid v1.6.0
|
||||
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674
|
||||
github.com/mark3labs/mcp-go v0.43.1
|
||||
github.com/mark3labs/mcp-go v0.43.2
|
||||
github.com/minio/minio-go/v7 v7.0.97
|
||||
github.com/minio/selfupdate v0.6.0
|
||||
github.com/nikoksr/notify v1.3.0
|
||||
@@ -40,10 +45,12 @@ require (
|
||||
github.com/pretty66/websocketproxy v0.0.0-20220507015215-930b3a686308
|
||||
github.com/samber/lo v1.52.0
|
||||
github.com/sashabaranov/go-openai v1.41.2
|
||||
github.com/shirou/gopsutil/v4 v4.25.10
|
||||
github.com/shirou/gopsutil/v4 v4.25.11
|
||||
github.com/spf13/afero v1.15.0
|
||||
github.com/spf13/cast v1.10.0
|
||||
github.com/stretchr/testify v1.11.1
|
||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.3.8
|
||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.3.7
|
||||
github.com/tufanbarisyildirim/gonginx v0.0.0-20250620092546-c3e307e36701
|
||||
github.com/ulikunitz/xz v0.5.15
|
||||
github.com/uozi-tech/cosy v1.27.7
|
||||
@@ -87,32 +94,29 @@ require (
|
||||
github.com/RoaringBitmap/roaring/v2 v2.14.4 // indirect
|
||||
github.com/akamai/AkamaiOPEN-edgegrid-golang/v11 v11.1.0 // indirect
|
||||
github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.5 // indirect
|
||||
github.com/alibabacloud-go/darabonba-openapi/v2 v2.1.13 // indirect
|
||||
github.com/alibabacloud-go/debug v1.0.1 // indirect
|
||||
github.com/alibabacloud-go/endpoint-util v1.1.1 // indirect
|
||||
github.com/alibabacloud-go/tea v1.3.13 // indirect
|
||||
github.com/alibabacloud-go/tea-utils/v2 v2.0.8 // indirect
|
||||
github.com/aliyun/aliyun-log-go-sdk v0.1.112 // indirect
|
||||
github.com/aliyun/credentials-go v1.4.7 // indirect
|
||||
github.com/aws/aws-sdk-go-v2 v1.40.0 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/config v1.32.2 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.19.2 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.14 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.14 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.14 // indirect
|
||||
github.com/aliyun/credentials-go v1.4.9 // indirect
|
||||
github.com/aws/aws-sdk-go-v2 v1.40.1 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/config v1.32.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.19.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.15 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.15 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.15 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.14 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/lightsail v1.50.8 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/route53 v1.61.0 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/signin v1.0.2 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.30.5 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.10 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.41.2 // indirect
|
||||
github.com/aws/smithy-go v1.23.2 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.15 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/lightsail v1.50.9 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/route53 v1.61.1 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/signin v1.0.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.30.6 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.11 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.41.3 // indirect
|
||||
github.com/aws/smithy-go v1.24.0 // indirect
|
||||
github.com/aziontech/azionapi-go-sdk v0.144.0 // indirect
|
||||
github.com/bahlo/generic-list-go v0.2.0 // indirect
|
||||
github.com/baidubce/bce-sdk-go v0.9.252 // indirect
|
||||
github.com/baidubce/bce-sdk-go v0.9.253 // indirect
|
||||
github.com/benbjohnson/clock v1.3.5 // indirect
|
||||
github.com/beorn7/perks v1.0.1 // indirect
|
||||
github.com/bits-and-blooms/bitset v1.24.4 // indirect
|
||||
@@ -166,7 +170,7 @@ require (
|
||||
github.com/gin-contrib/pprof v1.5.3 // indirect
|
||||
github.com/gin-contrib/sse v1.1.0 // indirect
|
||||
github.com/go-acme/alidns-20150109/v4 v4.7.0 // indirect
|
||||
github.com/go-acme/esa-20240910/v2 v2.40.1 // indirect
|
||||
github.com/go-acme/esa-20240910/v2 v2.40.2 // indirect
|
||||
github.com/go-acme/tencentclouddnspod v1.1.25 // indirect
|
||||
github.com/go-acme/tencentedgdeone v1.1.48 // indirect
|
||||
github.com/go-errors/errors v1.5.1 // indirect
|
||||
@@ -186,7 +190,7 @@ require (
|
||||
github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
|
||||
github.com/go-webauthn/x v0.1.26 // indirect
|
||||
github.com/goccy/go-json v0.10.5 // indirect
|
||||
github.com/goccy/go-yaml v1.18.0 // indirect
|
||||
github.com/goccy/go-yaml v1.19.0 // indirect
|
||||
github.com/gofrs/flock v0.13.0 // indirect
|
||||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/golang-jwt/jwt/v4 v4.5.2 // indirect
|
||||
@@ -194,7 +198,7 @@ require (
|
||||
github.com/golang/snappy v1.0.0 // indirect
|
||||
github.com/google/go-querystring v1.1.0 // indirect
|
||||
github.com/google/go-tpm v0.9.7 // indirect
|
||||
github.com/google/pprof v0.0.0-20251114195745-4902fdda35c8 // indirect
|
||||
github.com/google/pprof v0.0.0-20251208000136-3d256cb9ff16 // indirect
|
||||
github.com/google/s2a-go v0.1.9 // indirect
|
||||
github.com/googleapis/enterprise-certificate-proxy v0.3.7 // indirect
|
||||
github.com/googleapis/gax-go/v2 v2.15.0 // indirect
|
||||
@@ -205,7 +209,7 @@ require (
|
||||
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
||||
github.com/hashicorp/go-retryablehttp v0.7.8 // indirect
|
||||
github.com/hashicorp/go-uuid v1.0.3 // indirect
|
||||
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.178 // indirect
|
||||
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.179 // indirect
|
||||
github.com/iij/doapi v0.0.0-20190504054126-0bbf12d6d7df // indirect
|
||||
github.com/imega/luaformatter v0.0.0-20211025140405-86b0a68d6bef // indirect
|
||||
github.com/infobloxopen/infoblox-go-client/v2 v2.11.0 // indirect
|
||||
@@ -218,7 +222,7 @@ require (
|
||||
github.com/jonboulle/clockwork v0.5.0 // indirect
|
||||
github.com/json-iterator/go v1.1.13-0.20220915233716-71ac16282d12 // indirect
|
||||
github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213 // indirect
|
||||
github.com/klauspost/compress v1.18.1 // indirect
|
||||
github.com/klauspost/compress v1.18.2 // indirect
|
||||
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
|
||||
github.com/klauspost/crc32 v1.3.0 // indirect
|
||||
github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b // indirect
|
||||
@@ -280,17 +284,17 @@ require (
|
||||
github.com/prometheus/client_model v0.6.2 // indirect
|
||||
github.com/prometheus/common v0.67.4 // indirect
|
||||
github.com/prometheus/procfs v0.19.2 // indirect
|
||||
github.com/prometheus/prometheus v0.307.3 // indirect
|
||||
github.com/prometheus/prometheus v0.308.0 // indirect
|
||||
github.com/quic-go/qpack v0.6.0 // indirect
|
||||
github.com/quic-go/quic-go v0.57.0 // indirect
|
||||
github.com/redis/go-redis/v9 v9.17.0 // indirect
|
||||
github.com/quic-go/quic-go v0.57.1 // indirect
|
||||
github.com/redis/go-redis/v9 v9.17.2 // indirect
|
||||
github.com/regfish/regfish-dnsapi-go v0.1.1 // indirect
|
||||
github.com/robfig/cron/v3 v3.0.1 // indirect
|
||||
github.com/rs/xid v1.6.0 // indirect
|
||||
github.com/sacloud/api-client-go v0.3.3 // indirect
|
||||
github.com/sacloud/go-http v0.1.9 // indirect
|
||||
github.com/sacloud/iaas-api-go v1.22.0 // indirect
|
||||
github.com/sacloud/packages-go v0.0.11 // indirect
|
||||
github.com/sacloud/packages-go v0.0.12 // indirect
|
||||
github.com/sagikazarmark/locafero v0.12.0 // indirect
|
||||
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.35 // indirect
|
||||
github.com/selectel/domains-go v1.1.0 // indirect
|
||||
@@ -308,10 +312,9 @@ require (
|
||||
github.com/stretchr/objx v0.5.3 // indirect
|
||||
github.com/subosito/gotenv v1.6.0 // indirect
|
||||
github.com/technoweenie/multipartstreamer v1.0.1 // indirect
|
||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.3.3 // indirect
|
||||
github.com/timtadh/data-structures v0.6.2 // indirect
|
||||
github.com/timtadh/lexmachine v0.2.3 // indirect
|
||||
github.com/tinylib/msgp v1.5.0 // indirect
|
||||
github.com/tinylib/msgp v1.6.1 // indirect
|
||||
github.com/tjfoc/gmsm v1.4.1 // indirect
|
||||
github.com/tklauser/go-sysconf v0.3.16 // indirect
|
||||
github.com/tklauser/numcpus v0.11.0 // indirect
|
||||
@@ -319,14 +322,14 @@ require (
|
||||
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
|
||||
github.com/ugorji/go/codec v1.3.1 // indirect
|
||||
github.com/ultradns/ultradns-go-sdk v1.8.1-20250722213956-faef419 // indirect
|
||||
github.com/vinyldns/go-vinyldns v0.9.16 // indirect
|
||||
github.com/vinyldns/go-vinyldns v0.9.17 // indirect
|
||||
github.com/volcengine/volc-sdk-golang v1.0.229 // indirect
|
||||
github.com/vultr/govultr/v3 v3.25.0 // indirect
|
||||
github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect
|
||||
github.com/x448/float16 v0.8.4 // indirect
|
||||
github.com/yandex-cloud/go-genproto v0.38.0 // indirect
|
||||
github.com/yandex-cloud/go-sdk/services/dns v0.0.20 // indirect
|
||||
github.com/yandex-cloud/go-sdk/v2 v2.28.0 // indirect
|
||||
github.com/yandex-cloud/go-genproto v0.40.0 // indirect
|
||||
github.com/yandex-cloud/go-sdk/services/dns v0.0.22 // indirect
|
||||
github.com/yandex-cloud/go-sdk/v2 v2.31.0 // indirect
|
||||
github.com/yosida95/uritemplate/v3 v3.0.2 // indirect
|
||||
github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.4 // indirect
|
||||
@@ -351,12 +354,12 @@ require (
|
||||
golang.org/x/text v0.31.0 // indirect
|
||||
golang.org/x/time v0.14.0 // indirect
|
||||
golang.org/x/tools v0.39.0 // indirect
|
||||
google.golang.org/api v0.256.0 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20251111163417-95abcf5c77ba // indirect
|
||||
google.golang.org/api v0.257.0 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
|
||||
google.golang.org/protobuf v1.36.10 // indirect
|
||||
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
|
||||
gopkg.in/ns1/ns1-go.v2 v2.15.2 // indirect
|
||||
gopkg.in/ns1/ns1-go.v2 v2.16.0 // indirect
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
|
||||
@@ -705,6 +705,8 @@ github.com/alibabacloud-go/alibabacloud-gateway-pop v0.0.6/go.mod h1:4EUIoxs/do2
|
||||
github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4/go.mod h1:sCavSAvdzOjul4cEqeVtvlSaSScfNsTQ+46HwlTL1hc=
|
||||
github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.5 h1:zE8vH9C7JiZLNJJQ5OwjU9mSi4T9ef9u3BURT6LCLC8=
|
||||
github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.5/go.mod h1:tWnyE9AjF8J8qqLk645oUmVUnFybApTQWklQmi5tY6g=
|
||||
github.com/alibabacloud-go/alidns-20150109/v4 v4.7.0 h1:FbnXG/mzQRmLyMmm+77UWmERBG9WN4pEyP4RPxu0BV4=
|
||||
github.com/alibabacloud-go/alidns-20150109/v4 v4.7.0/go.mod h1:tQC0GWirFd1oSCd+gvIsECDex/nQjO8LFDZ0ZBEGOgY=
|
||||
github.com/alibabacloud-go/darabonba-array v0.1.0 h1:vR8s7b1fWAQIjEjWnuF0JiKsCvclSRTfDzZHTYqfufY=
|
||||
github.com/alibabacloud-go/darabonba-array v0.1.0/go.mod h1:BLKxr0brnggqOJPqT09DFJ8g3fsDshapUD3C3aOEFaI=
|
||||
github.com/alibabacloud-go/darabonba-encode-util v0.0.2 h1:1uJGrbsGEVqWcWxrS9MyC2NG0Ax+GpOM5gtupki31XE=
|
||||
@@ -751,6 +753,10 @@ github.com/aliyun/credentials-go v1.3.6/go.mod h1:1LxUuX7L5YrZUWzBrRyk0SwSdH4OmP
|
||||
github.com/aliyun/credentials-go v1.4.5/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U=
|
||||
github.com/aliyun/credentials-go v1.4.7 h1:T17dLqEtPUFvjDRRb5giVvLh6dFT8IcNFJJb7MeyCxw=
|
||||
github.com/aliyun/credentials-go v1.4.7/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U=
|
||||
github.com/aliyun/credentials-go v1.4.8 h1:MEfZGWGC3L1icM1nGcYF8rWdQBG2k1Sya2pq9uRwd30=
|
||||
github.com/aliyun/credentials-go v1.4.8/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U=
|
||||
github.com/aliyun/credentials-go v1.4.9 h1:E50Nu/wLHorolzVYpiwf11VK2RW5hNT9RjCiSKtRx6s=
|
||||
github.com/aliyun/credentials-go v1.4.9/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U=
|
||||
github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
|
||||
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
|
||||
github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0=
|
||||
@@ -770,60 +776,92 @@ github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm
|
||||
github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4=
|
||||
github.com/aws/aws-sdk-go-v2 v1.40.0 h1:/WMUA0kjhZExjOQN2z3oLALDREea1A7TobfuiBrKlwc=
|
||||
github.com/aws/aws-sdk-go-v2 v1.40.0/go.mod h1:c9pm7VwuW0UPxAEYGyTmyurVcNrbF6Rt/wixFqDhcjE=
|
||||
github.com/aws/aws-sdk-go-v2 v1.40.1 h1:difXb4maDZkRH0x//Qkwcfpdg1XQVXEAEs2DdXldFFc=
|
||||
github.com/aws/aws-sdk-go-v2 v1.40.1/go.mod h1:MayyLB8y+buD9hZqkCW3kX1AKq07Y5pXxtgB+rRFhz0=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.32.1 h1:iODUDLgk3q8/flEC7ymhmxjfoAnBDwEEYEVyKZ9mzjU=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.32.1/go.mod h1:xoAgo17AGrPpJBSLg81W+ikM0cpOZG8ad04T2r+d5P0=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.32.2 h1:4liUsdEpUUPZs5WVapsJLx5NPmQhQdez7nYFcovrytk=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.32.2/go.mod h1:l0hs06IFz1eCT+jTacU/qZtC33nvcnLADAPL/XyrkZI=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.32.3 h1:cpz7H2uMNTDa0h/5CYL5dLUEzPSLo2g0NkbxTRJtSSU=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.32.3/go.mod h1:srtPKaJJe3McW6T/+GMBZyIPc+SeqJsNPJsd4mOYZ6s=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.19.1 h1:JeW+EwmtTE0yXFK8SmklrFh/cGTTXsQJumgMZNlbxfM=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.19.1/go.mod h1:BOoXiStwTF+fT2XufhO0Efssbi1CNIO/ZXpZu87N0pw=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.19.2 h1:qZry8VUyTK4VIo5aEdUcBjPZHL2v4FyQ3QEOaWcFLu4=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.19.2/go.mod h1:YUqm5a1/kBnoK+/NY5WEiMocZihKSo15/tJdmdXnM5g=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.19.3 h1:01Ym72hK43hjwDeJUfi1l2oYLXBAOR8gNSZNmXmvuas=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.19.3/go.mod h1:55nWF/Sr9Zvls0bGnWkRxUdhzKqj9uRNlPvgV1vgxKc=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.14 h1:WZVR5DbDgxzA0BJeudId89Kmgy6DIU4ORpxwsVHz0qA=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.14/go.mod h1:Dadl9QO0kHgbrH1GRqGiZdYtW5w+IXXaBNCHTIaheM4=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.15 h1:utxLraaifrSBkeyII9mIbVwXXWrZdlPO7FIKmyLCEcY=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.15/go.mod h1:hW6zjYUDQwfz3icf4g2O41PHi77u10oAzJ84iSzR/lo=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.14 h1:PZHqQACxYb8mYgms4RZbhZG0a7dPW06xOjmaH0EJC/I=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.14/go.mod h1:VymhrMJUWs69D8u0/lZ7jSB6WgaG/NqHi3gX0aYf6U0=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.15 h1:Y5YXgygXwDI5P4RkteB5yF7v35neH7LfJKBG+hzIons=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.15/go.mod h1:K+/1EpG42dFSY7CBj+Fruzm8PsCGWTXJ3jdeJ659oGQ=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.14 h1:bOS19y6zlJwagBfHxs0ESzr1XCOU2KXJCWcq3E2vfjY=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.14/go.mod h1:1ipeGBMAxZ0xcTm6y6paC2C/J6f6OO7LBODV9afuAyM=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.15 h1:AvltKnW9ewxX2hFmQS0FyJH93aSvJVUEFvXfU+HWtSE=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.15/go.mod h1:3I4oCdZdmgrREhU74qS1dK9yZ62yumob+58AbFR4cQA=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 h1:WKuaxf++XKWlHWu9ECbMlha8WOEGm0OUEZqm4K/Gcfk=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4/go.mod h1:ZWy7j6v1vWGmPReu0iSGvRiise4YI5SkR3OHKTZ6Wuc=
|
||||
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3 h1:x2Ibm/Af8Fi+BH+Hsn9TXGdT+hKbDd5XOTZxTMxDk7o=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3/go.mod h1:IW1jwyrQgMdhisceG8fQLmQIydcT/jWY21rFhzgaKwo=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4 h1:0ryTNEdJbzUCEWkVXEXoqlXV72J5keC1GvILMOuD00E=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4/go.mod h1:HQ4qwNZh32C3CBeO6iJLQlgtMzqeG17ziAA/3KDJFow=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.14 h1:FIouAnCE46kyYqyhs0XEBDFFSREtdnr8HQuLPQPLCrY=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.14/go.mod h1:UTwDc5COa5+guonQU8qBikJo1ZJ4ln2r1MkF7Dqag1E=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.15 h1:3/u/4yZOffg5jdNk1sDpOQ4Y+R6Xbh+GzpDrSZjuy3U=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.15/go.mod h1:4Zkjq0FKjE78NKjabuM4tRXKFzUJWXgP0ItEZK8l7JU=
|
||||
github.com/aws/aws-sdk-go-v2/service/lightsail v1.50.7 h1:o5kT+nFYZbestjv0GWibkVS3bCf+ZijhGiMc3Xxj/hg=
|
||||
github.com/aws/aws-sdk-go-v2/service/lightsail v1.50.7/go.mod h1:x+omzRoqYYFX+H8/va+Gt2Yg4xGaHZMRowr77Y/UGIA=
|
||||
github.com/aws/aws-sdk-go-v2/service/lightsail v1.50.8 h1:jhwva7OKpYXrTQmCG4L7lF2FvB2irs1oRyGAwmQ4lmA=
|
||||
github.com/aws/aws-sdk-go-v2/service/lightsail v1.50.8/go.mod h1:x+omzRoqYYFX+H8/va+Gt2Yg4xGaHZMRowr77Y/UGIA=
|
||||
github.com/aws/aws-sdk-go-v2/service/lightsail v1.50.9 h1:AqDkPN2Q6yxpgDRSFTLQLVS/x0Vk9yoWU6CGGRkBzV8=
|
||||
github.com/aws/aws-sdk-go-v2/service/lightsail v1.50.9/go.mod h1:BupPA68GEYJPxIh3JNLDcqGRVWUEmYfYUN0A9YMW35I=
|
||||
github.com/aws/aws-sdk-go-v2/service/route53 v1.60.1 h1:dU7oc4LXR9j4mi1DtD8549D/rUtKA4rcWNY1HPoKzx8=
|
||||
github.com/aws/aws-sdk-go-v2/service/route53 v1.60.1/go.mod h1:Wa3q5R2uwIfIL3HZH+vG1/P9y7CjjfzTgcz5IWXlsZs=
|
||||
github.com/aws/aws-sdk-go-v2/service/route53 v1.61.0 h1:W3+0Cbc9awFBr9Yt7nFUkvB4N4e7vVIGtKD1qDttXn4=
|
||||
github.com/aws/aws-sdk-go-v2/service/route53 v1.61.0/go.mod h1:Wa3q5R2uwIfIL3HZH+vG1/P9y7CjjfzTgcz5IWXlsZs=
|
||||
github.com/aws/aws-sdk-go-v2/service/route53 v1.61.1 h1:ik9tMw+xWZqzffOtGH3PfV0Yy/V+QsCb1XYXXXjUskk=
|
||||
github.com/aws/aws-sdk-go-v2/service/route53 v1.61.1/go.mod h1:JRqmldxIPU6uck5bcFS8ExwwG2mUwfy+jiUmismOxJs=
|
||||
github.com/aws/aws-sdk-go-v2/service/signin v1.0.1 h1:BDgIUYGEo5TkayOWv/oBLPphWwNm/A91AebUjAu5L5g=
|
||||
github.com/aws/aws-sdk-go-v2/service/signin v1.0.1/go.mod h1:iS6EPmNeqCsGo+xQmXv0jIMjyYtQfnwg36zl2FwEouk=
|
||||
github.com/aws/aws-sdk-go-v2/service/signin v1.0.2 h1:MxMBdKTYBjPQChlJhi4qlEueqB1p1KcbTEa7tD5aqPs=
|
||||
github.com/aws/aws-sdk-go-v2/service/signin v1.0.2/go.mod h1:iS6EPmNeqCsGo+xQmXv0jIMjyYtQfnwg36zl2FwEouk=
|
||||
github.com/aws/aws-sdk-go-v2/service/signin v1.0.3 h1:d/6xOGIllc/XW1lzG9a4AUBMmpLA9PXcQnVPTuHHcik=
|
||||
github.com/aws/aws-sdk-go-v2/service/signin v1.0.3/go.mod h1:fQ7E7Qj9GiW8y0ClD7cUJk3Bz5Iw8wZkWDHsTe8vDKs=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.30.4 h1:U//SlnkE1wOQiIImxzdY5PXat4Wq+8rlfVEw4Y7J8as=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.30.4/go.mod h1:av+ArJpoYf3pgyrj6tcehSFW+y9/QvAY8kMooR9bZCw=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.30.5 h1:ksUT5KtgpZd3SAiFJNJ0AFEJVva3gjBmN7eXUZjzUwQ=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.30.5/go.mod h1:av+ArJpoYf3pgyrj6tcehSFW+y9/QvAY8kMooR9bZCw=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.30.6 h1:8sTTiw+9yuNXcfWeqKF2x01GqCF49CpP4Z9nKrrk/ts=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.30.6/go.mod h1:8WYg+Y40Sn3X2hioaaWAAIngndR8n1XFdRPPX+7QBaM=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.9 h1:LU8S9W/mPDAU9q0FjCLi0TrCheLMGwzbRpvUMwYspcA=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.9/go.mod h1:/j67Z5XBVDx8nZVp9EuFM9/BS5dvBznbqILGuu73hug=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.10 h1:GtsxyiF3Nd3JahRBJbxLCCdYW9ltGQYrFWg8XdkGDd8=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.10/go.mod h1:/j67Z5XBVDx8nZVp9EuFM9/BS5dvBznbqILGuu73hug=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.11 h1:E+KqWoVsSrj1tJ6I/fjDIu5xoS2Zacuu1zT+H7KtiIk=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.11/go.mod h1:qyWHz+4lvkXcr3+PoGlGHEI+3DLLiU6/GdrFfMaAhB0=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.41.1 h1:GdGmKtG+/Krag7VfyOXV17xjTCz0i9NT+JnqLTOI5nA=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.41.1/go.mod h1:6TxbXoDSgBQ225Qd8Q+MbxUxUh6TtNKwbRt/EPS9xso=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.41.2 h1:a5UTtD4mHBU3t0o6aHQZFJTNKVfxFWfPX7J0Lr7G+uY=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.41.2/go.mod h1:6TxbXoDSgBQ225Qd8Q+MbxUxUh6TtNKwbRt/EPS9xso=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.41.3 h1:tzMkjh0yTChUqJDgGkcDdxvZDSrJ/WB6R6ymI5ehqJI=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.41.3/go.mod h1:T270C0R5sZNLbWUe8ueiAF42XSZxxPocTaGSgs5c/60=
|
||||
github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
|
||||
github.com/aws/smithy-go v1.23.2 h1:Crv0eatJUQhaManss33hS5r40CG3ZFH+21XSkqMrIUM=
|
||||
github.com/aws/smithy-go v1.23.2/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0=
|
||||
github.com/aws/smithy-go v1.24.0 h1:LpilSUItNPFr1eY85RYgTIg5eIEPtvFbskaFcmmIUnk=
|
||||
github.com/aws/smithy-go v1.24.0/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0=
|
||||
github.com/aziontech/azionapi-go-sdk v0.144.0 h1:T+/w18o+FCiZsk3Z0ACBVVe7c/5EGLG15S3P8JfuPfo=
|
||||
github.com/aziontech/azionapi-go-sdk v0.144.0/go.mod h1:OKxP/R0iVXnJJakYwMhh2BGAXnud8Ruy55Ak9ANuWoU=
|
||||
github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk=
|
||||
github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg=
|
||||
github.com/baidubce/bce-sdk-go v0.9.252 h1:TONS/utgfEkDjvHllVZFBrTsjsNhk51rhWuj3ppcL4s=
|
||||
github.com/baidubce/bce-sdk-go v0.9.252/go.mod h1:zbYJMQwE4IZuyrJiFO8tO8NbtYiKTFTbwh4eIsqjVdg=
|
||||
github.com/baidubce/bce-sdk-go v0.9.253 h1:ZC+tW3C1cl0AjPkZYJbM52Jz9cTSLY+tU4Qg5XiBthM=
|
||||
github.com/baidubce/bce-sdk-go v0.9.253/go.mod h1:zbYJMQwE4IZuyrJiFO8tO8NbtYiKTFTbwh4eIsqjVdg=
|
||||
github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 h1:6df1vn4bBlDDo4tARvBm7l6KA9iVMnE3NWizDeWSrps=
|
||||
github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3/go.mod h1:CIWtjkly68+yqLPbvwwR/fjNJA/idrtULjZWh2v1ys0=
|
||||
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
|
||||
@@ -839,6 +877,8 @@ github.com/bits-and-blooms/bitset v1.24.4/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6
|
||||
github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
|
||||
github.com/blevesearch/bleve/v2 v2.5.5 h1:lzC89QUCco+y1qBnJxGqm4AbtsdsnlUvq0kXok8n3C8=
|
||||
github.com/blevesearch/bleve/v2 v2.5.5/go.mod h1:t5WoESS5TDteTdnjhhvpA1BpLYErOBX2IQViTMLK7wo=
|
||||
github.com/blevesearch/bleve/v2 v2.5.6 h1:YdixQmOUuZHojQRe8Te7BY2cRirbzpbcpybAFs0m2DI=
|
||||
github.com/blevesearch/bleve/v2 v2.5.6/go.mod h1:t5WoESS5TDteTdnjhhvpA1BpLYErOBX2IQViTMLK7wo=
|
||||
github.com/blevesearch/bleve_index_api v1.2.11 h1:bXQ54kVuwP8hdrXUSOnvTQfgK0KI1+f9A0ITJT8tX1s=
|
||||
github.com/blevesearch/bleve_index_api v1.2.11/go.mod h1:rKQDl4u51uwafZxFrPD1R7xFOwKnzZW7s/LSeK4lgo0=
|
||||
github.com/blevesearch/geo v0.2.4 h1:ECIGQhw+QALCZaDcogRTNSJYQXRtC8/m8IKiA706cqk=
|
||||
@@ -916,6 +956,7 @@ github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F9
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw=
|
||||
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
|
||||
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
||||
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
@@ -927,10 +968,13 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P
|
||||
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
|
||||
github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
|
||||
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
|
||||
github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I=
|
||||
github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng=
|
||||
github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME=
|
||||
github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
|
||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||
github.com/cloudflare/cloudflare-go v0.116.0 h1:iRPMnTtnswRpELO65NTwMX4+RTdxZl+Xf/zi+HPE95s=
|
||||
github.com/cloudflare/cloudflare-go v0.116.0/go.mod h1:Ds6urDwn/TF2uIU24mu7H91xkKP8gSAHxQ44DSZgVmU=
|
||||
github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M=
|
||||
github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU=
|
||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||
@@ -1067,8 +1111,8 @@ github.com/gin-gonic/gin v1.11.0 h1:OW/6PLjyusp2PPXtyxKHU0RbX6I/l28FTdDlae5ueWk=
|
||||
github.com/gin-gonic/gin v1.11.0/go.mod h1:+iq/FyxlGzII0KHiBGjuNn4UNENUlKbGlNmc+W50Dls=
|
||||
github.com/go-acme/alidns-20150109/v4 v4.7.0 h1:PqJ/wR0JTpL4v0Owu1uM7bPQ1Yww0eQLAuuSdLjjQaQ=
|
||||
github.com/go-acme/alidns-20150109/v4 v4.7.0/go.mod h1:btQvB6xZoN6ykKB74cPhiR+uvhrEE2AFVXm6RDmCHm0=
|
||||
github.com/go-acme/esa-20240910/v2 v2.40.1 h1:pog3UlF5d+3LPoo1L8u8PqB189recIXX8T7pGoEz18A=
|
||||
github.com/go-acme/esa-20240910/v2 v2.40.1/go.mod h1:ZYdN9EN9ikn26SNapxCVjZ65pHT/1qm4fzuJ7QGVX6g=
|
||||
github.com/go-acme/esa-20240910/v2 v2.40.2 h1:Hm1sADNILzLNAwp6iVCDCNllxVcDFnDwJKVoUyYSbIE=
|
||||
github.com/go-acme/esa-20240910/v2 v2.40.2/go.mod h1:ZYdN9EN9ikn26SNapxCVjZ65pHT/1qm4fzuJ7QGVX6g=
|
||||
github.com/go-acme/lego/v4 v4.28.1 h1:zt301JYF51UIEkpSXsdeGq9hRePeFzQCq070OdAmP0Q=
|
||||
github.com/go-acme/lego/v4 v4.28.1/go.mod h1:bzjilr03IgbaOwlH396hq5W56Bi0/uoRwW/JM8hP7m4=
|
||||
github.com/go-acme/lego/v4 v4.29.0 h1:vKMEtvoKb0gOO9rWO9zMBwE4CgI5A5CWDsK4QEeBqzo=
|
||||
@@ -1170,6 +1214,8 @@ github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PU
|
||||
github.com/goccy/go-yaml v1.9.8/go.mod h1:JubOolP3gh0HpiBc4BLRD4YmjEjHAmIIB2aaXKkTfoE=
|
||||
github.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw=
|
||||
github.com/goccy/go-yaml v1.18.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA=
|
||||
github.com/goccy/go-yaml v1.19.0 h1:EmkZ9RIsX+Uq4DYFowegAuJo8+xdX3T/2dwNPXbxEYE=
|
||||
github.com/goccy/go-yaml v1.19.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA=
|
||||
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||
github.com/gofrs/flock v0.13.0 h1:95JolYOvGMqeH31+FC7D2+uULf6mG61mEZ/A8dRYMzw=
|
||||
github.com/gofrs/flock v0.13.0/go.mod h1:jxeyy9R1auM5S6JYDBhDt+E2TCo7DkratH4Pgi8P+Z0=
|
||||
@@ -1284,6 +1330,8 @@ github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLe
|
||||
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||
github.com/google/pprof v0.0.0-20251114195745-4902fdda35c8 h1:3DsUAV+VNEQa2CUVLxCY3f87278uWfIDhJnbdvDjvmE=
|
||||
github.com/google/pprof v0.0.0-20251114195745-4902fdda35c8/go.mod h1:I6V7YzU0XDpsHqbsyrghnFZLO1gwK6NPTNvmetQIk9U=
|
||||
github.com/google/pprof v0.0.0-20251208000136-3d256cb9ff16 h1:ptucaU8cwiAc+/jqDblz0kb1ECLqPTeX/qQym8OBYzY=
|
||||
github.com/google/pprof v0.0.0-20251208000136-3d256cb9ff16/go.mod h1:67FPmZWbr+KDT/VlpWtw6sO9XSjpJmLuHpoLmWiTGgY=
|
||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
||||
github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A=
|
||||
github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
|
||||
@@ -1399,6 +1447,8 @@ github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.177 h1:q+VNuW4FgmA9+/+1OPjvF+W
|
||||
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.177/go.mod h1:M+yna96Fx9o5GbIUnF3OvVvQGjgfVSyeJbV9Yb1z/wI=
|
||||
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.178 h1:eNVkjzdPMgM2qih9aECiFUI8S9zgpOwXxeBPAwQqtvU=
|
||||
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.178/go.mod h1:M+yna96Fx9o5GbIUnF3OvVvQGjgfVSyeJbV9Yb1z/wI=
|
||||
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.179 h1:1RVM10qJ+vHnVzu37ltVcth5lxHjmOBbdim8X5gtAy0=
|
||||
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.179/go.mod h1:M+yna96Fx9o5GbIUnF3OvVvQGjgfVSyeJbV9Yb1z/wI=
|
||||
github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo=
|
||||
github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
|
||||
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
||||
@@ -1526,6 +1576,8 @@ github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47e
|
||||
github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
|
||||
github.com/klauspost/compress v1.18.1 h1:bcSGx7UbpBqMChDtsF28Lw6v/G94LPrrbMbdC3JH2co=
|
||||
github.com/klauspost/compress v1.18.1/go.mod h1:ZQFFVG+MdnR0P+l6wpXgIL4NTtwiKIdBnrBd8Nrxr+0=
|
||||
github.com/klauspost/compress v1.18.2 h1:iiPHWW0YrcFgpBYhsA6D1+fqHssJscY/Tm/y2Uqnapk=
|
||||
github.com/klauspost/compress v1.18.2/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4=
|
||||
github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
||||
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
||||
github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
|
||||
@@ -1586,6 +1638,8 @@ github.com/mailru/easyjson v0.9.1 h1:LbtsOm5WAswyWbvTEOqhypdPeZzHavpZx96/n553mR8
|
||||
github.com/mailru/easyjson v0.9.1/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU=
|
||||
github.com/mark3labs/mcp-go v0.43.1 h1:WXNVd+bRM/7mOzCM9zulSwn/s9YEdAxbmeh9LoRHEXY=
|
||||
github.com/mark3labs/mcp-go v0.43.1/go.mod h1:YnJfOL382MIWDx1kMY+2zsRHU/q78dBg9aFb8W6Thdw=
|
||||
github.com/mark3labs/mcp-go v0.43.2 h1:21PUSlWWiSbUPQwXIJ5WKlETixpFpq+WBpbMGDSVy/I=
|
||||
github.com/mark3labs/mcp-go v0.43.2/go.mod h1:YnJfOL382MIWDx1kMY+2zsRHU/q78dBg9aFb8W6Thdw=
|
||||
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
||||
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
|
||||
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
||||
@@ -1790,6 +1844,7 @@ github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2
|
||||
github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
|
||||
github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
|
||||
github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
|
||||
github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM=
|
||||
github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
||||
github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
|
||||
github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU=
|
||||
@@ -1860,17 +1915,26 @@ github.com/prometheus/procfs v0.19.2 h1:zUMhqEW66Ex7OXIiDkll3tl9a1ZdilUOd/F6ZXw4
|
||||
github.com/prometheus/procfs v0.19.2/go.mod h1:M0aotyiemPhBCM0z5w87kL22CxfcH05ZpYlu+b4J7mw=
|
||||
github.com/prometheus/prometheus v0.307.3 h1:zGIN3EpiKacbMatcUL2i6wC26eRWXdoXfNPjoBc2l34=
|
||||
github.com/prometheus/prometheus v0.307.3/go.mod h1:sPbNW+KTS7WmzFIafC3Inzb6oZVaGLnSvwqTdz2jxRQ=
|
||||
github.com/prometheus/prometheus v0.308.0 h1:kVh/5m1n6m4cSK9HYTDEbMxzuzCWyEdPdKSxFRxXj04=
|
||||
github.com/prometheus/prometheus v0.308.0/go.mod h1:xXYKzScyqyFHihpS0UsXpC2F3RA/CygOs7wb4mpdusE=
|
||||
github.com/prometheus/sigv4 v0.2.1 h1:hl8D3+QEzU9rRmbKIRwMKRwaFGyLkbPdH5ZerglRHY0=
|
||||
github.com/prometheus/sigv4 v0.2.1/go.mod h1:ySk6TahIlsR2sxADuHy4IBFhwEjRGGsfbbLGhFYFj6Q=
|
||||
github.com/prometheus/sigv4 v0.3.0 h1:QIG7nTbu0JTnNidGI1Uwl5AGVIChWUACxn2B/BQ1kms=
|
||||
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
||||
github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8=
|
||||
github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII=
|
||||
github.com/quic-go/quic-go v0.57.0 h1:AsSSrrMs4qI/hLrKlTH/TGQeTMY0ib1pAOX7vA3AdqE=
|
||||
github.com/quic-go/quic-go v0.57.0/go.mod h1:ly4QBAjHA2VhdnxhojRsCUOeJwKYg+taDlos92xb1+s=
|
||||
github.com/quic-go/quic-go v0.57.1 h1:25KAAR9QR8KZrCZRThWMKVAwGoiHIrNbT72ULHTuI10=
|
||||
github.com/quic-go/quic-go v0.57.1/go.mod h1:ly4QBAjHA2VhdnxhojRsCUOeJwKYg+taDlos92xb1+s=
|
||||
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
||||
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
||||
github.com/redis/go-redis/v9 v9.17.0 h1:K6E+ZlYN95KSMmZeEQPbU/c++wfmEvfFB17yEAq/VhM=
|
||||
github.com/redis/go-redis/v9 v9.17.0/go.mod h1:u410H11HMLoB+TP67dz8rL9s6QW2j76l0//kSOd3370=
|
||||
github.com/redis/go-redis/v9 v9.17.1 h1:7tl732FjYPRT9H9aNfyTwKg9iTETjWjGKEJ2t/5iWTs=
|
||||
github.com/redis/go-redis/v9 v9.17.1/go.mod h1:u410H11HMLoB+TP67dz8rL9s6QW2j76l0//kSOd3370=
|
||||
github.com/redis/go-redis/v9 v9.17.2 h1:P2EGsA4qVIM3Pp+aPocCJ7DguDHhqrXNhVcEp4ViluI=
|
||||
github.com/redis/go-redis/v9 v9.17.2/go.mod h1:u410H11HMLoB+TP67dz8rL9s6QW2j76l0//kSOd3370=
|
||||
github.com/regfish/regfish-dnsapi-go v0.1.1 h1:TJFtbePHkd47q5GZwYl1h3DIYXmoxdLjW/SBsPtB5IE=
|
||||
github.com/regfish/regfish-dnsapi-go v0.1.1/go.mod h1:ubIgXSfqarSnl3XHSn8hIFwFF3h0yrq0ZiWD93Y2VjY=
|
||||
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
|
||||
@@ -1902,6 +1966,8 @@ github.com/sacloud/iaas-api-go v1.22.0 h1:nvLQNuxcfxILvoxA6WcnTjU9A8yv8dPI1OSYHA
|
||||
github.com/sacloud/iaas-api-go v1.22.0/go.mod h1:PLcolyFlby/0ExZTOdUf9xzhkEMBuVzORadXDNN21no=
|
||||
github.com/sacloud/packages-go v0.0.11 h1:hrRWLmfPM9w7GBs6xb5/ue6pEMl8t1UuDKyR/KfteHo=
|
||||
github.com/sacloud/packages-go v0.0.11/go.mod h1:XNF5MCTWcHo9NiqWnYctVbASSSZR3ZOmmQORIzcurJ8=
|
||||
github.com/sacloud/packages-go v0.0.12 h1:MKeZNN3FQn1heqUSRBrbZw89YusZA1n4kammjMFZYvQ=
|
||||
github.com/sacloud/packages-go v0.0.12/go.mod h1:XNF5MCTWcHo9NiqWnYctVbASSSZR3ZOmmQORIzcurJ8=
|
||||
github.com/sagikazarmark/crypt v0.10.0/go.mod h1:gwTNHQVoOS3xp9Xvz5LLR+1AauC5M6880z5NWzdhOyQ=
|
||||
github.com/sagikazarmark/locafero v0.12.0 h1:/NQhBAkUb4+fH1jivKHWusDYFjMOOKU88eegjfxfHb4=
|
||||
github.com/sagikazarmark/locafero v0.12.0/go.mod h1:sZh36u/YSZ918v0Io+U9ogLYQJ9tLLBmM4eneO6WwsI=
|
||||
@@ -1919,6 +1985,8 @@ github.com/selectel/go-selvpcclient/v4 v4.1.0 h1:22lBp+rzg9g2MP4iiGhpVAcCt0kMv7I
|
||||
github.com/selectel/go-selvpcclient/v4 v4.1.0/go.mod h1:eFhL1KUW159KOJVeGO7k/Uxl0TYd/sBkWXjuF5WxmYk=
|
||||
github.com/shirou/gopsutil/v4 v4.25.10 h1:at8lk/5T1OgtuCp+AwrDofFRjnvosn0nkN2OLQ6g8tA=
|
||||
github.com/shirou/gopsutil/v4 v4.25.10/go.mod h1:+kSwyC8DRUD9XXEHCAFjK+0nuArFJM0lva+StQAcskM=
|
||||
github.com/shirou/gopsutil/v4 v4.25.11 h1:X53gB7muL9Gnwwo2evPSE+SfOrltMoR6V3xJAXZILTY=
|
||||
github.com/shirou/gopsutil/v4 v4.25.11/go.mod h1:EivAfP5x2EhLp2ovdpKSozecVXn1TmuG7SMzs/Wh4PU=
|
||||
github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
|
||||
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
|
||||
github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k=
|
||||
@@ -2016,6 +2084,13 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.3.2 h1:ChHu7L
|
||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.3.2/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
|
||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.3.3 h1:r05ohLc0LVEpiEQeOJ5QwCiKk6XM9kjTca6+UAbNR/8=
|
||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.3.3/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
|
||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.3.7/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
|
||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.3.8 h1:DdeB0VtEs8UmJSPdNCTeqMW5ifX3Phlvu0o0WJXZ6yE=
|
||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.3.8/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
|
||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.3.3 h1:UqQW9k0+cln314ziJMtIiQGKXjL/BVLzO/RekmdkrGM=
|
||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.3.3/go.mod h1:7qUfXEVLNQwbad2dSrbqCCGrE+5e/j69HbgtmMp1IlU=
|
||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.3.7 h1:lbQreENxWLI6SeKbjvbKnTgMsBPGaFeJ0OYX74utwxA=
|
||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.3.7/go.mod h1:+wjQc7L2X9CUvczJ+2pAdZiv8teqkrCfBD2x1vpKWhw=
|
||||
github.com/timtadh/data-structures v0.5.3/go.mod h1:9R4XODhJ8JdWFEI8P/HJKqxuJctfBQw6fDibMQny2oU=
|
||||
github.com/timtadh/data-structures v0.6.1/go.mod h1:uYUnI1cQi/5yMCc7s23I+x8Mn8BCMf4WgK+7/4QSEk4=
|
||||
github.com/timtadh/data-structures v0.6.2 h1:zybDnU5NLjJ7WKMDJpvVwczQuf1wSLBgdRHZ9O4AqJ0=
|
||||
@@ -2026,6 +2101,8 @@ github.com/timtadh/lexmachine v0.2.3 h1:ZqlfHnfMcAygtbNM5Gv7jQf8hmM8LfVzDjfCrq23
|
||||
github.com/timtadh/lexmachine v0.2.3/go.mod h1:oK1NW+93fQSIF6s+J6sXBFWsCPCFbNmrwKV1i0aqvW0=
|
||||
github.com/tinylib/msgp v1.5.0 h1:GWnqAE54wmnlFazjq2+vgr736Akg58iiHImh+kPY2pc=
|
||||
github.com/tinylib/msgp v1.5.0/go.mod h1:cvjFkb4RiC8qSBOPMGPSzSAx47nAsfhLVTCZZNuHv5o=
|
||||
github.com/tinylib/msgp v1.6.1 h1:ESRv8eL3u+DNHUoSAAQRE50Hm162zqAnBoGv9PzScPY=
|
||||
github.com/tinylib/msgp v1.6.1/go.mod h1:RSp0LW9oSxFut3KzESt5Voq4GVWyS+PSulT77roAqEA=
|
||||
github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w=
|
||||
github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho=
|
||||
github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE=
|
||||
@@ -2060,6 +2137,8 @@ github.com/urfave/cli/v3 v3.6.1 h1:j8Qq8NyUawj/7rTYdBGrxcH7A/j7/G8Q5LhWEW4G3Mo=
|
||||
github.com/urfave/cli/v3 v3.6.1/go.mod h1:ysVLtOEmg2tOy6PknnYVhDoouyC/6N42TMeoMzskhso=
|
||||
github.com/vinyldns/go-vinyldns v0.9.16 h1:GZJStDkcCk1F1AcRc64LuuMh+ENL8pHA0CVd4ulRMcQ=
|
||||
github.com/vinyldns/go-vinyldns v0.9.16/go.mod h1:5qIJOdmzAnatKjurI+Tl4uTus7GJKJxb+zitufjHs3Q=
|
||||
github.com/vinyldns/go-vinyldns v0.9.17 h1:hfPZfCaxcRBX6Gsgl42rLCeoal58/BH8kkvJShzjjdI=
|
||||
github.com/vinyldns/go-vinyldns v0.9.17/go.mod h1:pwWhE9K/leGDOIduVhRGvQ3ecVMHWRfEnKYUTEU3gB4=
|
||||
github.com/volcengine/volc-sdk-golang v1.0.228 h1:nbl99ln9sQBcSyMQEhhYqii3uhj8HtyiNclKJoKHHxo=
|
||||
github.com/volcengine/volc-sdk-golang v1.0.228/go.mod h1:zHJlaqiMbIB+0mcrsZPTwOb3FB7S/0MCfqlnO8R7hlM=
|
||||
github.com/volcengine/volc-sdk-golang v1.0.229 h1:gOkDltTS6Fta8OyfYrbeY9bqCHHyiJuGYNJpR5MR+Fo=
|
||||
@@ -2080,14 +2159,20 @@ github.com/yandex-cloud/go-genproto v0.37.0 h1:dbuj5qaG5+tIEKMV5fsyKtVILS9QehLcg
|
||||
github.com/yandex-cloud/go-genproto v0.37.0/go.mod h1:0LDD/IZLIUIV4iPH+YcF+jysO3jkSvADFGm4dCAuwQo=
|
||||
github.com/yandex-cloud/go-genproto v0.38.0 h1:uB3btG7mLOnu53ehYtRARCk04+80sBpxDrSkP3qC6G8=
|
||||
github.com/yandex-cloud/go-genproto v0.38.0/go.mod h1:0LDD/IZLIUIV4iPH+YcF+jysO3jkSvADFGm4dCAuwQo=
|
||||
github.com/yandex-cloud/go-genproto v0.40.0 h1:IqbMFh5Zxd/gtE/7N2VK+HExpX5m7r9C7f5t8QAOO5Q=
|
||||
github.com/yandex-cloud/go-genproto v0.40.0/go.mod h1:0LDD/IZLIUIV4iPH+YcF+jysO3jkSvADFGm4dCAuwQo=
|
||||
github.com/yandex-cloud/go-sdk/services/dns v0.0.19 h1:pyb18CWTZqjI09qQaq5Aimt4JMtr9TRzVPZa9mIquzw=
|
||||
github.com/yandex-cloud/go-sdk/services/dns v0.0.19/go.mod h1:PuDXvm5p1NC7/f1n80AjlSw9qJZJslm4tl2YF3yXkWo=
|
||||
github.com/yandex-cloud/go-sdk/services/dns v0.0.20 h1:xHBRa+IIYpTgMbTbmZf7aEKIqrJMcZGIF8ea4XIyLX0=
|
||||
github.com/yandex-cloud/go-sdk/services/dns v0.0.20/go.mod h1:8nYQULLJbbe51qdBY7Ay5v8wtDgdH7nHCMZs4XkwzLg=
|
||||
github.com/yandex-cloud/go-sdk/services/dns v0.0.22 h1:haRF2xulpDJh8rdrcnWPJA/F44vfIpxI/DpssS3C2zI=
|
||||
github.com/yandex-cloud/go-sdk/services/dns v0.0.22/go.mod h1:aUObcKIBDNfSL6HDxsKBFibpUrt2mi8hZe/LJJWAX04=
|
||||
github.com/yandex-cloud/go-sdk/v2 v2.27.0 h1:dtgU/LJw6xE+iT295JvHmZt65fx74ljPXffTF20DHtg=
|
||||
github.com/yandex-cloud/go-sdk/v2 v2.27.0/go.mod h1:nAzWojX+/ODtyFVhn9UIGPDT/cd6/BicOQWZQ49Sskg=
|
||||
github.com/yandex-cloud/go-sdk/v2 v2.28.0 h1:KDOrN75xokZBYbgjq6Pjvo+hEpu32xFhErtomLBML5s=
|
||||
github.com/yandex-cloud/go-sdk/v2 v2.28.0/go.mod h1:6vmAhqoCVYSJEb5OuhHUqIdxDy2b9uUXp1e5sqMhTmo=
|
||||
github.com/yandex-cloud/go-sdk/v2 v2.31.0 h1:XIZF7ytMjYx6mGJwPvw5FOW5FLQjlZchOg3I15z1wRE=
|
||||
github.com/yandex-cloud/go-sdk/v2 v2.31.0/go.mod h1:uZmBy4IlNI8Z9AnPsTTb8QDFs4r3oHvKdTrqAhGllTw=
|
||||
github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4=
|
||||
github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4=
|
||||
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
|
||||
@@ -2787,6 +2872,8 @@ google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45
|
||||
google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms=
|
||||
google.golang.org/api v0.256.0 h1:u6Khm8+F9sxbCTYNoBHg6/Hwv0N/i+V94MvkOSor6oI=
|
||||
google.golang.org/api v0.256.0/go.mod h1:KIgPhksXADEKJlnEoRa9qAII4rXcy40vfI8HRqcU964=
|
||||
google.golang.org/api v0.257.0 h1:8Y0lzvHlZps53PEaw+G29SsQIkuKrumGWs9puiexNAA=
|
||||
google.golang.org/api v0.257.0/go.mod h1:4eJrr+vbVaZSqs7vovFd1Jb/A6ml6iw2e6FBYf3GAO4=
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
@@ -2931,8 +3018,16 @@ google.golang.org/genproto v0.0.0-20250603155806-513f23925822 h1:rHWScKit0gvAPuO
|
||||
google.golang.org/genproto v0.0.0-20250603155806-513f23925822/go.mod h1:HubltRL7rMh0LfnQPkMH4NPDFEWp0jw3vixw7jEM53s=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba h1:B14OtaXuMaCQsl2deSvNkyPKIzq3BjfxQp8d00QyWx4=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba/go.mod h1:G5IanEx8/PgI9w6CFcYQf7jMtHQhZruvfM1i3qOqk5U=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20251124214823-79d6a2a48846 h1:ZdyUkS9po3H7G0tuh955QVyyotWvOD4W0aEapeGeUYk=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20251124214823-79d6a2a48846/go.mod h1:Fk4kyraUvqD7i5H6S43sj2W98fbZa75lpZz/eUyhfO0=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 h1:fCvbg86sFXwdrl5LgVcTEvNC+2txB5mgROGmRL5mrls=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:+rXWjjaukWZun3mLfjmVnQi18E1AsFbDN9QdJ5YXLto=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20251111163417-95abcf5c77ba h1:UKgtfRM7Yh93Sya0Fo8ZzhDP4qBckrrxEr2oF5UIVb8=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20251111163417-95abcf5c77ba/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20251124214823-79d6a2a48846 h1:Wgl1rcDNThT+Zn47YyCXOXyX/COgMTIdhJ717F0l4xk=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20251124214823-79d6a2a48846/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
||||
@@ -3020,6 +3115,8 @@ gopkg.in/ns1/ns1-go.v2 v2.15.1 h1:8rri2TzAPYcVbBGXn48+dz1Xg30PzHfZ4k8A9JOS0Z0=
|
||||
gopkg.in/ns1/ns1-go.v2 v2.15.1/go.mod h1:pfaU0vECVP7DIOr453z03HXS6dFJpXdNRwOyRzwmPSc=
|
||||
gopkg.in/ns1/ns1-go.v2 v2.15.2 h1:aBVyKeEH3rBFWwX72xPPjEuRL4+Lp5P9GlAcrzu0Y5M=
|
||||
gopkg.in/ns1/ns1-go.v2 v2.15.2/go.mod h1:pfaU0vECVP7DIOr453z03HXS6dFJpXdNRwOyRzwmPSc=
|
||||
gopkg.in/ns1/ns1-go.v2 v2.16.0 h1:mUczKFnrCystSV7yIODzVSbENoud3T7DwstmyVZfqg4=
|
||||
gopkg.in/ns1/ns1-go.v2 v2.16.0/go.mod h1:pfaU0vECVP7DIOr453z03HXS6dFJpXdNRwOyRzwmPSc=
|
||||
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||
|
||||
@@ -47,6 +47,11 @@ func InitCronJobs(ctx context.Context) {
|
||||
logger.Fatalf("AutoBackup Err: %v\n", err)
|
||||
}
|
||||
|
||||
// Initialize DDNS jobs
|
||||
if err := setupDDNSJobs(s); err != nil {
|
||||
logger.Fatalf("DDNS Err: %v\n", err)
|
||||
}
|
||||
|
||||
// Initialize upstream availability testing job
|
||||
_, err = setupUpstreamAvailabilityJob(s)
|
||||
if err != nil {
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
package cron
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/0xJacky/Nginx-UI/internal/dns"
|
||||
"github.com/go-co-op/gocron/v2"
|
||||
"github.com/uozi-tech/cosy/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
ddnsJobs = make(map[uint64]gocron.Job)
|
||||
ddnsMu sync.RWMutex
|
||||
)
|
||||
|
||||
func setupDDNSJobs(s gocron.Scheduler) error {
|
||||
schedules, err := dns.ListEnabledDDNSSchedules(context.Background())
|
||||
if err != nil {
|
||||
return fmt.Errorf("load ddns schedules: %w", err)
|
||||
}
|
||||
|
||||
for _, schedule := range schedules {
|
||||
if err := addDDNSJob(s, schedule.DomainID, schedule.IntervalSeconds); err != nil {
|
||||
logger.Errorf("Add DDNS job %d failed: %v", schedule.DomainID, err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func addDDNSJob(s gocron.Scheduler, domainID uint64, intervalSeconds int) error {
|
||||
if intervalSeconds <= 0 {
|
||||
return fmt.Errorf("invalid ddns interval for domain %d", domainID)
|
||||
}
|
||||
|
||||
ddnsMu.Lock()
|
||||
defer ddnsMu.Unlock()
|
||||
|
||||
if job, exists := ddnsJobs[domainID]; exists {
|
||||
if err := s.RemoveJob(job.ID()); err != nil {
|
||||
logger.Warnf("Remove existing DDNS job %d failed: %v", domainID, err)
|
||||
}
|
||||
delete(ddnsJobs, domainID)
|
||||
}
|
||||
|
||||
job, err := s.NewJob(
|
||||
gocron.DurationJob(time.Duration(intervalSeconds)*time.Second),
|
||||
gocron.NewTask(executeDDNSJob, domainID),
|
||||
gocron.WithName(fmt.Sprintf("ddns_%d", domainID)),
|
||||
gocron.WithSingletonMode(gocron.LimitModeReschedule),
|
||||
gocron.WithStartAt(gocron.WithStartImmediately()),
|
||||
)
|
||||
if err != nil {
|
||||
return fmt.Errorf("create ddns job: %w", err)
|
||||
}
|
||||
|
||||
ddnsJobs[domainID] = job
|
||||
logger.Infof("Added DDNS job %d with interval %ds", domainID, intervalSeconds)
|
||||
return nil
|
||||
}
|
||||
|
||||
func removeDDNSJob(s gocron.Scheduler, domainID uint64) error {
|
||||
ddnsMu.Lock()
|
||||
defer ddnsMu.Unlock()
|
||||
|
||||
if job, exists := ddnsJobs[domainID]; exists {
|
||||
if err := s.RemoveJob(job.ID()); err != nil {
|
||||
return fmt.Errorf("remove ddns job: %w", err)
|
||||
}
|
||||
delete(ddnsJobs, domainID)
|
||||
logger.Infof("Removed DDNS job %d", domainID)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// AddOrUpdateDDNSJob adds or replaces a DDNS job using the global scheduler.
|
||||
func AddOrUpdateDDNSJob(domainID uint64, intervalSeconds int) error {
|
||||
return addDDNSJob(s, domainID, intervalSeconds)
|
||||
}
|
||||
|
||||
// RemoveDDNSJob removes a DDNS job from the global scheduler.
|
||||
func RemoveDDNSJob(domainID uint64) error {
|
||||
return removeDDNSJob(s, domainID)
|
||||
}
|
||||
|
||||
func executeDDNSJob(domainID uint64) {
|
||||
if err := dns.RunDDNSUpdate(context.Background(), domainID); err != nil {
|
||||
logger.Errorf("DDNS job %d failed: %v", domainID, err)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,463 @@
|
||||
package dns
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"net"
|
||||
"net/http"
|
||||
"regexp"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/0xJacky/Nginx-UI/model"
|
||||
"github.com/0xJacky/Nginx-UI/query"
|
||||
"github.com/uozi-tech/cosy"
|
||||
)
|
||||
|
||||
const (
|
||||
minDDNSIntervalSeconds = 60
|
||||
defaultDDNSIntervalSeconds = 300
|
||||
ipDetectTimeout = 8 * time.Second
|
||||
)
|
||||
|
||||
var (
|
||||
ipv4Endpoints = []string{
|
||||
"https://api.ipify.org",
|
||||
"https://ipv4.icanhazip.com",
|
||||
"https://v4.ident.me",
|
||||
"https://ipv4.ifconfig.co",
|
||||
"https://myip.ipip.net",
|
||||
}
|
||||
ipv6Endpoints = []string{
|
||||
"https://api64.ipify.org",
|
||||
"https://ipv6.icanhazip.com",
|
||||
"https://v6.ident.me",
|
||||
"https://ipv6.ifconfig.co",
|
||||
"https://myip.ipip.net",
|
||||
}
|
||||
ipRegex = regexp.MustCompile(`(?i)(?:[0-9a-f]{0,4}:){2,7}[0-9a-f]{0,4}|(?:\d{1,3}\.){3}\d{1,3}`)
|
||||
)
|
||||
|
||||
// DefaultDDNSInterval returns the default polling interval in seconds.
|
||||
func DefaultDDNSInterval() int {
|
||||
return defaultDDNSIntervalSeconds
|
||||
}
|
||||
|
||||
// DDNSUpdateInput carries payload for updating a DDNS configuration.
|
||||
type DDNSUpdateInput struct {
|
||||
Enabled bool
|
||||
IntervalSeconds int
|
||||
RecordIDs []string
|
||||
}
|
||||
|
||||
// DDNSSchedule describes an enabled DDNS task.
|
||||
type DDNSSchedule struct {
|
||||
DomainID uint64
|
||||
IntervalSeconds int
|
||||
}
|
||||
|
||||
// GetDDNSConfig returns the current DDNS configuration for a domain with defaults applied.
|
||||
func (s *Service) GetDDNSConfig(ctx context.Context, domainID uint64) (*model.DDNSConfig, error) {
|
||||
domain, err := loadDomain(ctx, domainID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
cfg := domain.DDNSConfig
|
||||
if cfg == nil {
|
||||
return &model.DDNSConfig{
|
||||
Enabled: false,
|
||||
IntervalSeconds: defaultDDNSIntervalSeconds,
|
||||
Targets: []model.DDNSRecordTarget{},
|
||||
}, nil
|
||||
}
|
||||
|
||||
cfg.IntervalSeconds = sanitizeInterval(cfg.IntervalSeconds)
|
||||
return cfg, nil
|
||||
}
|
||||
|
||||
// UpdateDDNSConfig validates and persists DDNS configuration for the given domain.
|
||||
func (s *Service) UpdateDDNSConfig(ctx context.Context, domainID uint64, input DDNSUpdateInput) (*model.DDNSConfig, error) {
|
||||
interval := sanitizeInterval(input.IntervalSeconds)
|
||||
if interval < minDDNSIntervalSeconds {
|
||||
return nil, ErrInvalidDDNSInterval
|
||||
}
|
||||
|
||||
domain, provider, err := s.prepareProvider(ctx, domainID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
existing := domain.DDNSConfig
|
||||
|
||||
targets := []model.DDNSRecordTarget{}
|
||||
var ipSnapshot *ipSnapshot
|
||||
if input.Enabled {
|
||||
if len(input.RecordIDs) == 0 {
|
||||
return nil, ErrDDNSTargetRequired
|
||||
}
|
||||
|
||||
records, err := fetchProviderRecords(ctx, provider, domain.Domain)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
recordMap := indexRecordsByID(records)
|
||||
recordByName := indexRecordsByName(records)
|
||||
|
||||
seen := map[string]struct{}{}
|
||||
for _, id := range input.RecordIDs {
|
||||
trimmed := strings.TrimSpace(id)
|
||||
if trimmed == "" {
|
||||
continue
|
||||
}
|
||||
if _, ok := seen[trimmed]; ok {
|
||||
continue
|
||||
}
|
||||
record, ok := recordMap[trimmed]
|
||||
if !ok {
|
||||
record, ok = recordByName[strings.ToLower(trimmed)]
|
||||
}
|
||||
|
||||
if ok {
|
||||
recordType := strings.ToUpper(record.Type)
|
||||
if recordType != "A" && recordType != "AAAA" {
|
||||
return nil, cosy.WrapErrorWithParams(ErrInvalidDDNSTargetType, recordType)
|
||||
}
|
||||
targets = append(targets, model.DDNSRecordTarget{
|
||||
ID: record.ID,
|
||||
Name: record.Name,
|
||||
Type: recordType,
|
||||
})
|
||||
seen[trimmed] = struct{}{}
|
||||
continue
|
||||
}
|
||||
|
||||
// If record does not exist, create a new A/AAAA record using detected IPs.
|
||||
if ipSnapshot == nil {
|
||||
snapshot, ipErr := resolvePublicIPs(ctx)
|
||||
if ipErr != nil {
|
||||
return nil, ipErr
|
||||
}
|
||||
ipSnapshot = &snapshot
|
||||
}
|
||||
|
||||
recordType := "A"
|
||||
content := ipSnapshot.IPv4
|
||||
if content == "" && ipSnapshot.IPv6 != "" {
|
||||
recordType = "AAAA"
|
||||
content = ipSnapshot.IPv6
|
||||
}
|
||||
if content == "" {
|
||||
return nil, ErrDDNSIPUnavailable
|
||||
}
|
||||
|
||||
newRecord, err := provider.CreateRecord(ctx, domain.Domain, sanitizeRecordInput(RecordInput{
|
||||
Type: recordType,
|
||||
Name: trimmed,
|
||||
Content: content,
|
||||
TTL: 600,
|
||||
}))
|
||||
if err != nil {
|
||||
return nil, cosy.WrapErrorWithParams(ErrDDNSRecordNotFound, trimmed)
|
||||
}
|
||||
|
||||
targets = append(targets, model.DDNSRecordTarget{
|
||||
ID: newRecord.ID,
|
||||
Name: newRecord.Name,
|
||||
Type: strings.ToUpper(newRecord.Type),
|
||||
})
|
||||
seen[trimmed] = struct{}{}
|
||||
}
|
||||
|
||||
if len(targets) == 0 {
|
||||
return nil, ErrDDNSTargetRequired
|
||||
}
|
||||
}
|
||||
|
||||
cfg := &model.DDNSConfig{
|
||||
Enabled: input.Enabled,
|
||||
IntervalSeconds: interval,
|
||||
Targets: targets,
|
||||
}
|
||||
|
||||
if existing != nil {
|
||||
cfg.LastIPv4 = existing.LastIPv4
|
||||
cfg.LastIPv6 = existing.LastIPv6
|
||||
cfg.LastRunAt = existing.LastRunAt
|
||||
cfg.LastError = existing.LastError
|
||||
|
||||
// Reset runtime error when disabling
|
||||
if !input.Enabled {
|
||||
cfg.LastError = ""
|
||||
}
|
||||
}
|
||||
|
||||
if err := saveDDNSConfig(ctx, domainID, cfg); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return cfg, nil
|
||||
}
|
||||
|
||||
// ListEnabledDDNSSchedules returns schedules for enabled DDNS domains.
|
||||
func ListEnabledDDNSSchedules(ctx context.Context) ([]DDNSSchedule, error) {
|
||||
domains, err := query.DnsDomain.WithContext(ctx).Find()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
schedules := make([]DDNSSchedule, 0, len(domains))
|
||||
for _, domain := range domains {
|
||||
cfg := domain.DDNSConfig
|
||||
if cfg == nil || !cfg.Enabled || len(cfg.Targets) == 0 {
|
||||
continue
|
||||
}
|
||||
schedules = append(schedules, DDNSSchedule{
|
||||
DomainID: domain.ID,
|
||||
IntervalSeconds: sanitizeInterval(cfg.IntervalSeconds),
|
||||
})
|
||||
}
|
||||
|
||||
return schedules, nil
|
||||
}
|
||||
|
||||
// ListDDNSDomains returns all domains with DDNS configuration for overview pages.
|
||||
func ListDDNSDomains(ctx context.Context) ([]*model.DnsDomain, error) {
|
||||
dao := query.DnsDomain
|
||||
return dao.WithContext(ctx).
|
||||
Preload(dao.DnsCredential).
|
||||
Find()
|
||||
}
|
||||
|
||||
// RunDDNSUpdate executes DDNS update for the given domain ID.
|
||||
func RunDDNSUpdate(ctx context.Context, domainID uint64) error {
|
||||
return NewService().runDDNSUpdate(ctx, domainID)
|
||||
}
|
||||
|
||||
func (s *Service) runDDNSUpdate(ctx context.Context, domainID uint64) error {
|
||||
domain, provider, err := s.prepareProvider(ctx, domainID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
cfg := domain.DDNSConfig
|
||||
if cfg == nil || !cfg.Enabled || len(cfg.Targets) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
cfg.IntervalSeconds = sanitizeInterval(cfg.IntervalSeconds)
|
||||
|
||||
ipSnapshot, ipErr := resolvePublicIPs(ctx)
|
||||
if ipErr != nil {
|
||||
// keep running; errors will be recorded
|
||||
}
|
||||
|
||||
records, err := fetchProviderRecords(ctx, provider, domain.Domain)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
recordMap := indexRecordsByID(records)
|
||||
|
||||
var updateErrs []string
|
||||
|
||||
now := time.Now()
|
||||
|
||||
for _, target := range cfg.Targets {
|
||||
record, ok := recordMap[target.ID]
|
||||
if !ok {
|
||||
updateErrs = append(updateErrs, fmt.Sprintf("record %s missing", target.ID))
|
||||
continue
|
||||
}
|
||||
|
||||
recordType := strings.ToUpper(record.Type)
|
||||
var nextIP string
|
||||
switch recordType {
|
||||
case "A":
|
||||
nextIP = ipSnapshot.IPv4
|
||||
if nextIP != "" {
|
||||
cfg.LastIPv4 = nextIP
|
||||
}
|
||||
case "AAAA":
|
||||
nextIP = ipSnapshot.IPv6
|
||||
if nextIP != "" {
|
||||
cfg.LastIPv6 = nextIP
|
||||
}
|
||||
default:
|
||||
updateErrs = append(updateErrs, fmt.Sprintf("record %s has unsupported type %s", target.ID, recordType))
|
||||
continue
|
||||
}
|
||||
|
||||
if nextIP == "" {
|
||||
updateErrs = append(updateErrs, fmt.Sprintf("record %s missing detected IP", target.ID))
|
||||
continue
|
||||
}
|
||||
|
||||
if record.Content == nextIP {
|
||||
continue
|
||||
}
|
||||
|
||||
ctxWithTimeout, cancel := context.WithTimeout(ctx, providerTimeout)
|
||||
_, err = provider.UpdateRecord(ctxWithTimeout, domain.Domain, record.ID, sanitizeRecordInput(RecordInput{
|
||||
Type: recordType,
|
||||
Name: record.Name,
|
||||
Content: nextIP,
|
||||
TTL: record.TTL,
|
||||
Priority: record.Priority,
|
||||
Weight: record.Weight,
|
||||
Proxied: record.Proxied,
|
||||
}))
|
||||
cancel()
|
||||
|
||||
if err != nil {
|
||||
updateErrs = append(updateErrs, fmt.Sprintf("%s: %v", record.ID, err))
|
||||
}
|
||||
}
|
||||
|
||||
cfg.LastRunAt = &now
|
||||
if ipErr != nil {
|
||||
updateErrs = append(updateErrs, ipErr.Error())
|
||||
}
|
||||
|
||||
cfg.LastError = strings.Join(updateErrs, "; ")
|
||||
|
||||
return saveDDNSConfig(ctx, domainID, cfg)
|
||||
}
|
||||
|
||||
type ipSnapshot struct {
|
||||
IPv4 string
|
||||
IPv6 string
|
||||
}
|
||||
|
||||
func resolvePublicIPs(ctx context.Context) (ipSnapshot, error) {
|
||||
var snapshot ipSnapshot
|
||||
var errs []string
|
||||
|
||||
ipCtx, cancel := context.WithTimeout(ctx, ipDetectTimeout)
|
||||
defer cancel()
|
||||
|
||||
if ip, err := fetchAnyIP(ipCtx, ipv4Endpoints); err == nil {
|
||||
snapshot.IPv4 = ip
|
||||
} else {
|
||||
errs = append(errs, fmt.Sprintf("ipv4: %v", err))
|
||||
}
|
||||
|
||||
if ip, err := fetchAnyIP(ipCtx, ipv6Endpoints); err == nil {
|
||||
snapshot.IPv6 = ip
|
||||
} else {
|
||||
errs = append(errs, fmt.Sprintf("ipv6: %v", err))
|
||||
}
|
||||
|
||||
if len(errs) > 0 {
|
||||
return snapshot, fmt.Errorf("public ip resolve errors: %s", strings.Join(errs, "; "))
|
||||
}
|
||||
|
||||
return snapshot, nil
|
||||
}
|
||||
|
||||
func fetchIP(ctx context.Context, endpoint string) (string, error) {
|
||||
req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint, nil)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
q := req.URL.Query()
|
||||
q.Set("format", "text")
|
||||
req.URL.RawQuery = q.Encode()
|
||||
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
if err != nil && !errors.Is(err, context.Canceled) && !errors.Is(err, context.DeadlineExceeded) {
|
||||
return "", err
|
||||
}
|
||||
|
||||
ipStr := strings.TrimSpace(string(body))
|
||||
parsed, err := parseIPString(ipStr)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("invalid ip from %s: %v", endpoint, err)
|
||||
}
|
||||
return parsed, nil
|
||||
}
|
||||
|
||||
func fetchAnyIP(ctx context.Context, endpoints []string) (string, error) {
|
||||
var errs []string
|
||||
for _, ep := range endpoints {
|
||||
if ip, err := fetchIP(ctx, ep); err == nil {
|
||||
return ip, nil
|
||||
} else {
|
||||
errs = append(errs, fmt.Sprintf("%s: %v", ep, err))
|
||||
}
|
||||
}
|
||||
return "", fmt.Errorf(strings.Join(errs, "; "))
|
||||
}
|
||||
|
||||
func parseIPString(val string) (string, error) {
|
||||
trimmed := strings.TrimSpace(val)
|
||||
if trimmed == "" {
|
||||
return "", fmt.Errorf("empty ip string")
|
||||
}
|
||||
|
||||
if ip := net.ParseIP(trimmed); ip != nil {
|
||||
return ip.String(), nil
|
||||
}
|
||||
|
||||
for _, token := range strings.Fields(trimmed) {
|
||||
cleaned := strings.Trim(token, " ,;[](){}<>")
|
||||
if ip := net.ParseIP(cleaned); ip != nil {
|
||||
return ip.String(), nil
|
||||
}
|
||||
}
|
||||
|
||||
if matches := ipRegex.FindAllString(trimmed, -1); len(matches) > 0 {
|
||||
for _, candidate := range matches {
|
||||
if ip := net.ParseIP(candidate); ip != nil {
|
||||
return ip.String(), nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return "", fmt.Errorf("no valid ip found")
|
||||
}
|
||||
|
||||
func sanitizeInterval(value int) int {
|
||||
if value < minDDNSIntervalSeconds {
|
||||
return minDDNSIntervalSeconds
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
||||
func fetchProviderRecords(ctx context.Context, provider Provider, domain string) ([]Record, error) {
|
||||
ctxWithTimeout, cancel := context.WithTimeout(ctx, providerTimeout)
|
||||
defer cancel()
|
||||
return provider.ListRecords(ctxWithTimeout, domain, RecordFilter{})
|
||||
}
|
||||
|
||||
func indexRecordsByID(records []Record) map[string]Record {
|
||||
result := make(map[string]Record, len(records))
|
||||
for _, record := range records {
|
||||
result[record.ID] = record
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func indexRecordsByName(records []Record) map[string]Record {
|
||||
result := make(map[string]Record, len(records))
|
||||
for _, record := range records {
|
||||
result[strings.ToLower(record.Name)] = record
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func saveDDNSConfig(ctx context.Context, domainID uint64, cfg *model.DDNSConfig) error {
|
||||
return model.UseDB().WithContext(ctx).
|
||||
Model(&model.DnsDomain{}).
|
||||
Where("id = ?", domainID).
|
||||
Updates(&model.DnsDomain{
|
||||
DDNSConfig: cfg,
|
||||
}).Error
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package dns
|
||||
|
||||
import (
|
||||
"github.com/uozi-tech/cosy"
|
||||
)
|
||||
|
||||
// DNS domain errors
|
||||
var (
|
||||
ErrDomainNotFound = cosy.NewError(40401, "DNS domain not found")
|
||||
ErrDuplicateDomain = cosy.NewError(50001, "Domain already exists for this credential")
|
||||
ErrInvalidDomain = cosy.NewError(50002, "Invalid domain name format")
|
||||
ErrCredentialNotFound = cosy.NewError(50003, "DNS credential not found")
|
||||
ErrInvalidCredential = cosy.NewError(50004, "Invalid DNS credential configuration")
|
||||
ErrDDNSTargetRequired = cosy.NewError(40010, "DDNS requires at least one record")
|
||||
ErrInvalidDDNSTargetType = cosy.NewError(40011, "DDNS only supports A and AAAA records")
|
||||
ErrDDNSRecordNotFound = cosy.NewError(40402, "DDNS target record not found")
|
||||
ErrInvalidDDNSInterval = cosy.NewError(40012, "DDNS interval must be at least 60 seconds")
|
||||
ErrDDNSIPUnavailable = cosy.NewError(50005, "DDNS cannot detect a public IP to create records")
|
||||
)
|
||||
@@ -0,0 +1,90 @@
|
||||
package dns
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
|
||||
// Record represents a DNS record managed through a provider.
|
||||
type Record struct {
|
||||
ID string `json:"id"`
|
||||
Type string `json:"type"`
|
||||
Name string `json:"name"`
|
||||
Content string `json:"content"`
|
||||
TTL int `json:"ttl"`
|
||||
Priority *int `json:"priority,omitempty"`
|
||||
Weight *int `json:"weight,omitempty"`
|
||||
Proxied *bool `json:"proxied,omitempty"`
|
||||
}
|
||||
|
||||
// RecordFilter allows narrowing down provider queries.
|
||||
type RecordFilter struct {
|
||||
Type string
|
||||
Name string
|
||||
}
|
||||
|
||||
// RecordInput represents the payload required to create or update a DNS record.
|
||||
type RecordInput struct {
|
||||
Type string `json:"type"`
|
||||
Name string `json:"name"`
|
||||
Content string `json:"content"`
|
||||
TTL int `json:"ttl"`
|
||||
Priority *int `json:"priority,omitempty"`
|
||||
Weight *int `json:"weight,omitempty"`
|
||||
Proxied *bool `json:"proxied,omitempty"`
|
||||
}
|
||||
|
||||
// Credential holds the secrets and metadata bound to a DNS provider.
|
||||
type Credential struct {
|
||||
ID uint64
|
||||
Name string
|
||||
Provider string
|
||||
Code string
|
||||
Values map[string]string
|
||||
Additional map[string]string
|
||||
}
|
||||
|
||||
// Provider describes the CRUD contract every DNS vendor must implement.
|
||||
type Provider interface {
|
||||
ListRecords(ctx context.Context, domain string, filter RecordFilter) ([]Record, error)
|
||||
CreateRecord(ctx context.Context, domain string, input RecordInput) (Record, error)
|
||||
UpdateRecord(ctx context.Context, domain string, recordID string, input RecordInput) (Record, error)
|
||||
DeleteRecord(ctx context.Context, domain string, recordID string) error
|
||||
}
|
||||
|
||||
// Factory constructs a provider using the given credential.
|
||||
type Factory func(*Credential) (Provider, error)
|
||||
|
||||
var (
|
||||
registryMu sync.RWMutex
|
||||
registry = map[string]Factory{}
|
||||
|
||||
// ErrProviderNotRegistered indicates that the requested provider is not available.
|
||||
ErrProviderNotRegistered = errors.New("dns provider not registered")
|
||||
)
|
||||
|
||||
// RegisterProvider registers a provider factory for a given provider code.
|
||||
func RegisterProvider(code string, factory Factory) {
|
||||
registryMu.Lock()
|
||||
defer registryMu.Unlock()
|
||||
|
||||
key := strings.ToLower(code)
|
||||
registry[key] = factory
|
||||
}
|
||||
|
||||
// NewProvider returns an initialized provider for the given credential code.
|
||||
func NewProvider(code string, credential *Credential) (Provider, error) {
|
||||
registryMu.RLock()
|
||||
factory, ok := registry[strings.ToLower(code)]
|
||||
registryMu.RUnlock()
|
||||
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("%w: %s", ErrProviderNotRegistered, code)
|
||||
}
|
||||
|
||||
return factory(credential)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,288 @@
|
||||
package alidns
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
aliclient "github.com/alibabacloud-go/alidns-20150109/v4/client"
|
||||
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
|
||||
utilruntime "github.com/alibabacloud-go/tea-utils/v2/service"
|
||||
"github.com/alibabacloud-go/tea/dara"
|
||||
|
||||
"github.com/0xJacky/Nginx-UI/internal/dns"
|
||||
)
|
||||
|
||||
const (
|
||||
defaultRegion = "cn-hangzhou"
|
||||
defaultLineName = "default"
|
||||
)
|
||||
|
||||
type provider struct {
|
||||
client *aliclient.Client
|
||||
}
|
||||
|
||||
func init() {
|
||||
dns.RegisterProvider("alidns", newProvider)
|
||||
}
|
||||
|
||||
func newProvider(cred *dns.Credential) (dns.Provider, error) {
|
||||
accessKey := firstNonEmpty(
|
||||
cred.Values["ALICLOUD_ACCESS_KEY"],
|
||||
cred.Values["ALICLOUD_ACCESS_KEY_ID"],
|
||||
)
|
||||
secretKey := firstNonEmpty(
|
||||
cred.Values["ALICLOUD_SECRET_KEY"],
|
||||
cred.Values["ALICLOUD_ACCESS_KEY_SECRET"],
|
||||
)
|
||||
|
||||
if accessKey == "" || secretKey == "" {
|
||||
return nil, fmt.Errorf("alidns: missing access key or secret")
|
||||
}
|
||||
|
||||
region := firstNonEmpty(
|
||||
cred.Values["ALICLOUD_REGION_ID"],
|
||||
cred.Additional["ALICLOUD_REGION_ID"],
|
||||
defaultRegion,
|
||||
)
|
||||
|
||||
timeout := int(defaultTimeout().Milliseconds())
|
||||
|
||||
cfg := new(openapi.Config).
|
||||
SetAccessKeyId(accessKey).
|
||||
SetAccessKeySecret(secretKey).
|
||||
SetRegionId(region).
|
||||
SetReadTimeout(timeout).
|
||||
SetConnectTimeout(timeout)
|
||||
|
||||
if token := firstNonEmpty(
|
||||
cred.Values["ALICLOUD_SECURITY_TOKEN"],
|
||||
cred.Additional["ALICLOUD_SECURITY_TOKEN"],
|
||||
); token != "" {
|
||||
cfg = cfg.SetSecurityToken(token)
|
||||
}
|
||||
|
||||
client, err := aliclient.NewClient(cfg)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("alidns: new client: %w", err)
|
||||
}
|
||||
|
||||
return &provider{client: client}, nil
|
||||
}
|
||||
|
||||
func (p *provider) ListRecords(ctx context.Context, domain string, filter dns.RecordFilter) ([]dns.Record, error) {
|
||||
request := &aliclient.DescribeDomainRecordsRequest{
|
||||
DomainName: dara.String(domain),
|
||||
PageSize: dara.Int64(500),
|
||||
}
|
||||
|
||||
if filter.Name != "" {
|
||||
request.RRKeyWord = dara.String(filter.Name)
|
||||
}
|
||||
|
||||
if filter.Type != "" {
|
||||
request.TypeKeyWord = dara.String(strings.ToUpper(filter.Type))
|
||||
}
|
||||
|
||||
response, err := p.client.DescribeDomainRecordsWithOptions(request, runtimeOptions(ctx))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("alidns: list records: %w", err)
|
||||
}
|
||||
|
||||
if response.Body == nil || response.Body.DomainRecords == nil {
|
||||
return []dns.Record{}, nil
|
||||
}
|
||||
|
||||
items := response.Body.DomainRecords.Record
|
||||
result := make([]dns.Record, 0, len(items))
|
||||
for _, item := range items {
|
||||
if item == nil {
|
||||
continue
|
||||
}
|
||||
record := dns.Record{
|
||||
ID: stringValue(item.RecordId),
|
||||
Type: stringValue(item.Type),
|
||||
Name: rrToName(stringValue(item.RR)),
|
||||
Content: stringValue(item.Value),
|
||||
TTL: int(int64Value(item.TTL)),
|
||||
Weight: intPointerFrom32(item.Weight),
|
||||
}
|
||||
if item.Priority != nil {
|
||||
value := int(int64Value(item.Priority))
|
||||
record.Priority = &value
|
||||
}
|
||||
result = append(result, record)
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (p *provider) CreateRecord(ctx context.Context, domain string, input dns.RecordInput) (dns.Record, error) {
|
||||
request := &aliclient.AddDomainRecordRequest{
|
||||
DomainName: dara.String(domain),
|
||||
Type: dara.String(strings.ToUpper(strings.TrimSpace(input.Type))),
|
||||
RR: dara.String(rrFromName(input.Name)),
|
||||
Value: dara.String(strings.TrimSpace(input.Content)),
|
||||
TTL: dara.Int64(int64(input.TTL)),
|
||||
Line: dara.String(defaultLineName),
|
||||
}
|
||||
|
||||
if input.Priority != nil {
|
||||
request.Priority = dara.Int64(int64(*input.Priority))
|
||||
}
|
||||
|
||||
response, err := p.client.AddDomainRecordWithOptions(request, runtimeOptions(ctx))
|
||||
if err != nil {
|
||||
errMsg := err.Error()
|
||||
if strings.Contains(errMsg, "DomainRecordDuplicate") {
|
||||
return dns.Record{}, fmt.Errorf("alidns: a DNS record with the same name, type, and line already exists")
|
||||
}
|
||||
return dns.Record{}, fmt.Errorf("alidns: add record: %w", err)
|
||||
}
|
||||
|
||||
recordID := ""
|
||||
if response.Body != nil && response.Body.RecordId != nil {
|
||||
recordID = *response.Body.RecordId
|
||||
}
|
||||
|
||||
if recordID == "" {
|
||||
return dns.Record{}, fmt.Errorf("alidns: empty record id")
|
||||
}
|
||||
|
||||
return p.describeRecord(ctx, recordID)
|
||||
}
|
||||
|
||||
func (p *provider) UpdateRecord(ctx context.Context, _ string, recordID string, input dns.RecordInput) (dns.Record, error) {
|
||||
request := &aliclient.UpdateDomainRecordRequest{
|
||||
RecordId: dara.String(recordID),
|
||||
Type: dara.String(strings.ToUpper(strings.TrimSpace(input.Type))),
|
||||
RR: dara.String(rrFromName(input.Name)),
|
||||
Value: dara.String(strings.TrimSpace(input.Content)),
|
||||
TTL: dara.Int64(int64(input.TTL)),
|
||||
Line: dara.String(defaultLineName),
|
||||
}
|
||||
|
||||
if input.Priority != nil {
|
||||
request.Priority = dara.Int64(int64(*input.Priority))
|
||||
}
|
||||
|
||||
if _, err := p.client.UpdateDomainRecordWithOptions(request, runtimeOptions(ctx)); err != nil {
|
||||
errMsg := err.Error()
|
||||
if strings.Contains(errMsg, "DomainRecordDuplicate") {
|
||||
// If the record already exists with the same values during update,
|
||||
// treat it as success and return the current record
|
||||
return p.describeRecord(ctx, recordID)
|
||||
}
|
||||
return dns.Record{}, fmt.Errorf("alidns: update record: %w", err)
|
||||
}
|
||||
|
||||
return p.describeRecord(ctx, recordID)
|
||||
}
|
||||
|
||||
func (p *provider) DeleteRecord(ctx context.Context, _ string, recordID string) error {
|
||||
request := &aliclient.DeleteDomainRecordRequest{
|
||||
RecordId: dara.String(recordID),
|
||||
}
|
||||
|
||||
if _, err := p.client.DeleteDomainRecordWithOptions(request, runtimeOptions(ctx)); err != nil {
|
||||
return fmt.Errorf("alidns: delete record: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *provider) describeRecord(ctx context.Context, recordID string) (dns.Record, error) {
|
||||
request := &aliclient.DescribeDomainRecordInfoRequest{
|
||||
RecordId: dara.String(recordID),
|
||||
}
|
||||
|
||||
resp, err := p.client.DescribeDomainRecordInfoWithOptions(request, runtimeOptions(ctx))
|
||||
if err != nil {
|
||||
return dns.Record{}, fmt.Errorf("alidns: describe record: %w", err)
|
||||
}
|
||||
|
||||
if resp.Body == nil {
|
||||
return dns.Record{}, fmt.Errorf("alidns: describe record: empty body")
|
||||
}
|
||||
|
||||
record := dns.Record{
|
||||
ID: stringValue(resp.Body.RecordId),
|
||||
Type: stringValue(resp.Body.Type),
|
||||
Name: rrToName(stringValue(resp.Body.RR)),
|
||||
Content: stringValue(resp.Body.Value),
|
||||
TTL: int(int64Value(resp.Body.TTL)),
|
||||
}
|
||||
|
||||
if resp.Body.Priority != nil {
|
||||
value := int(int64Value(resp.Body.Priority))
|
||||
record.Priority = &value
|
||||
}
|
||||
|
||||
return record, nil
|
||||
}
|
||||
|
||||
func runtimeOptions(ctx context.Context) *utilruntime.RuntimeOptions {
|
||||
timeout := defaultTimeout()
|
||||
opts := &utilruntime.RuntimeOptions{}
|
||||
opts.SetConnectTimeout(int(timeout.Milliseconds()))
|
||||
opts.SetReadTimeout(int(timeout.Milliseconds()))
|
||||
opts.SetAutoretry(true)
|
||||
opts.SetMaxAttempts(3)
|
||||
opts.SetBackoffPolicy("exponential")
|
||||
opts.SetBackoffPeriod(1)
|
||||
return opts
|
||||
}
|
||||
|
||||
func defaultTimeout() time.Duration {
|
||||
return 10 * time.Second
|
||||
}
|
||||
|
||||
func rrFromName(name string) string {
|
||||
name = strings.TrimSpace(name)
|
||||
if name == "" || name == "@" {
|
||||
return "@"
|
||||
}
|
||||
return name
|
||||
}
|
||||
|
||||
func rrToName(rr string) string {
|
||||
if rr == "" {
|
||||
return "@"
|
||||
}
|
||||
return rr
|
||||
}
|
||||
|
||||
func stringValue(value *string) string {
|
||||
if value == nil {
|
||||
return ""
|
||||
}
|
||||
return *value
|
||||
}
|
||||
|
||||
func int64Value(value *int64) int64 {
|
||||
if value == nil {
|
||||
return 0
|
||||
}
|
||||
return *value
|
||||
}
|
||||
|
||||
func intPointerFrom32(value *int32) *int {
|
||||
if value == nil {
|
||||
return nil
|
||||
}
|
||||
v := int(*value)
|
||||
if v == 0 {
|
||||
return nil
|
||||
}
|
||||
return &v
|
||||
}
|
||||
|
||||
func firstNonEmpty(values ...string) string {
|
||||
for _, value := range values {
|
||||
if v := strings.TrimSpace(value); v != "" {
|
||||
return v
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
@@ -0,0 +1,266 @@
|
||||
package cloudflare
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
cf "github.com/cloudflare/cloudflare-go"
|
||||
|
||||
"github.com/0xJacky/Nginx-UI/internal/dns"
|
||||
)
|
||||
|
||||
const defaultTimeout = 10 * time.Second
|
||||
|
||||
type provider struct {
|
||||
client *cf.API
|
||||
zoneCache sync.Map
|
||||
}
|
||||
|
||||
func init() {
|
||||
dns.RegisterProvider("cloudflare", newProvider)
|
||||
}
|
||||
|
||||
func newProvider(cred *dns.Credential) (dns.Provider, error) {
|
||||
httpClient := &http.Client{Timeout: defaultTimeout}
|
||||
|
||||
opts := []cf.Option{
|
||||
cf.HTTPClient(httpClient),
|
||||
}
|
||||
|
||||
if baseURL := firstNonEmpty(
|
||||
cred.Additional["CLOUDFLARE_BASE_URL"],
|
||||
cred.Additional["CF_BASE_URL"],
|
||||
); baseURL != "" {
|
||||
opts = append(opts, cf.BaseURL(baseURL))
|
||||
}
|
||||
|
||||
token := firstNonEmpty(
|
||||
cred.Values["CLOUDFLARE_DNS_API_TOKEN"],
|
||||
cred.Values["CF_DNS_API_TOKEN"],
|
||||
cred.Values["CLOUDFLARE_API_TOKEN"],
|
||||
cred.Values["CF_API_TOKEN"],
|
||||
)
|
||||
|
||||
var (
|
||||
api *cf.API
|
||||
err error
|
||||
)
|
||||
|
||||
if token != "" {
|
||||
api, err = cf.NewWithAPIToken(token, opts...)
|
||||
} else {
|
||||
email := firstNonEmpty(
|
||||
cred.Values["CLOUDFLARE_EMAIL"],
|
||||
cred.Values["CF_API_EMAIL"],
|
||||
)
|
||||
key := firstNonEmpty(
|
||||
cred.Values["CLOUDFLARE_API_KEY"],
|
||||
cred.Values["CF_API_KEY"],
|
||||
)
|
||||
if email == "" || key == "" {
|
||||
return nil, fmt.Errorf("cloudflare: missing API credentials")
|
||||
}
|
||||
api, err = cf.New(key, email, opts...)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("cloudflare: %w", err)
|
||||
}
|
||||
|
||||
return &provider{
|
||||
client: api,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (p *provider) ListRecords(ctx context.Context, domain string, filter dns.RecordFilter) ([]dns.Record, error) {
|
||||
zoneID, err := p.zoneID(domain)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
params := cf.ListDNSRecordsParams{
|
||||
Type: strings.ToUpper(strings.TrimSpace(filter.Type)),
|
||||
}
|
||||
|
||||
if params.Type == "" {
|
||||
params.Type = ""
|
||||
}
|
||||
|
||||
if filter.Name != "" {
|
||||
params.Name = buildFQDN(domain, filter.Name)
|
||||
}
|
||||
|
||||
records, _, err := p.client.ListDNSRecords(ctx, cf.ZoneIdentifier(zoneID), params)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("cloudflare: list records: %w", err)
|
||||
}
|
||||
|
||||
result := make([]dns.Record, 0, len(records))
|
||||
for _, record := range records {
|
||||
result = append(result, dns.Record{
|
||||
ID: record.ID,
|
||||
Type: record.Type,
|
||||
Name: toRelativeName(record.Name, domain),
|
||||
Content: record.Content,
|
||||
TTL: record.TTL,
|
||||
Priority: toOptionalInt(record.Priority),
|
||||
Proxied: record.Proxied,
|
||||
})
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (p *provider) CreateRecord(ctx context.Context, domain string, input dns.RecordInput) (dns.Record, error) {
|
||||
zoneID, err := p.zoneID(domain)
|
||||
if err != nil {
|
||||
return dns.Record{}, err
|
||||
}
|
||||
|
||||
params := cf.CreateDNSRecordParams{
|
||||
Type: strings.ToUpper(strings.TrimSpace(input.Type)),
|
||||
Name: buildFQDN(domain, input.Name),
|
||||
Content: strings.TrimSpace(input.Content),
|
||||
TTL: input.TTL,
|
||||
Proxied: input.Proxied,
|
||||
}
|
||||
|
||||
if input.Priority != nil {
|
||||
value := uint16(max(*input.Priority, 0))
|
||||
params.Priority = &value
|
||||
}
|
||||
|
||||
record, err := p.client.CreateDNSRecord(ctx, cf.ZoneIdentifier(zoneID), params)
|
||||
if err != nil {
|
||||
return dns.Record{}, fmt.Errorf("cloudflare: create record: %w", err)
|
||||
}
|
||||
|
||||
return dns.Record{
|
||||
ID: record.ID,
|
||||
Type: record.Type,
|
||||
Name: toRelativeName(record.Name, domain),
|
||||
Content: record.Content,
|
||||
TTL: record.TTL,
|
||||
Priority: toOptionalInt(record.Priority),
|
||||
Proxied: record.Proxied,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (p *provider) UpdateRecord(ctx context.Context, domain string, recordID string, input dns.RecordInput) (dns.Record, error) {
|
||||
zoneID, err := p.zoneID(domain)
|
||||
if err != nil {
|
||||
return dns.Record{}, err
|
||||
}
|
||||
|
||||
params := cf.UpdateDNSRecordParams{
|
||||
ID: recordID,
|
||||
Type: strings.ToUpper(strings.TrimSpace(input.Type)),
|
||||
Name: buildFQDN(domain, input.Name),
|
||||
Content: strings.TrimSpace(input.Content),
|
||||
TTL: input.TTL,
|
||||
Proxied: input.Proxied,
|
||||
}
|
||||
|
||||
if input.Priority != nil {
|
||||
value := uint16(max(*input.Priority, 0))
|
||||
params.Priority = &value
|
||||
}
|
||||
|
||||
record, err := p.client.UpdateDNSRecord(ctx, cf.ZoneIdentifier(zoneID), params)
|
||||
if err != nil {
|
||||
return dns.Record{}, fmt.Errorf("cloudflare: update record: %w", err)
|
||||
}
|
||||
|
||||
return dns.Record{
|
||||
ID: record.ID,
|
||||
Type: record.Type,
|
||||
Name: toRelativeName(record.Name, domain),
|
||||
Content: record.Content,
|
||||
TTL: record.TTL,
|
||||
Priority: toOptionalInt(record.Priority),
|
||||
Proxied: record.Proxied,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (p *provider) DeleteRecord(ctx context.Context, domain string, recordID string) error {
|
||||
zoneID, err := p.zoneID(domain)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := p.client.DeleteDNSRecord(ctx, cf.ZoneIdentifier(zoneID), recordID); err != nil {
|
||||
return fmt.Errorf("cloudflare: delete record: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *provider) zoneID(domain string) (string, error) {
|
||||
normalized := strings.TrimSuffix(strings.ToLower(strings.TrimSpace(domain)), ".")
|
||||
if zoneID, ok := p.zoneCache.Load(normalized); ok {
|
||||
return zoneID.(string), nil
|
||||
}
|
||||
|
||||
id, err := p.client.ZoneIDByName(normalized)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("cloudflare: resolve zone id: %w", err)
|
||||
}
|
||||
|
||||
p.zoneCache.Store(normalized, id)
|
||||
return id, nil
|
||||
}
|
||||
|
||||
func firstNonEmpty(values ...string) string {
|
||||
for _, value := range values {
|
||||
if strings.TrimSpace(value) != "" {
|
||||
return strings.TrimSpace(value)
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func buildFQDN(domain, name string) string {
|
||||
name = strings.TrimSpace(name)
|
||||
domain = strings.TrimSuffix(strings.TrimSpace(domain), ".")
|
||||
if name == "" || name == "@" {
|
||||
return domain
|
||||
}
|
||||
if strings.HasSuffix(name, "."+domain) {
|
||||
return name
|
||||
}
|
||||
if name == domain {
|
||||
return domain
|
||||
}
|
||||
return name + "." + domain
|
||||
}
|
||||
|
||||
func toRelativeName(fqdn, domain string) string {
|
||||
fqdn = strings.TrimSuffix(strings.TrimSpace(fqdn), ".")
|
||||
domain = strings.TrimSuffix(strings.TrimSpace(domain), ".")
|
||||
if fqdn == domain {
|
||||
return "@"
|
||||
}
|
||||
if strings.HasSuffix(fqdn, "."+domain) {
|
||||
return strings.TrimSuffix(fqdn, "."+domain)
|
||||
}
|
||||
return fqdn
|
||||
}
|
||||
|
||||
func toOptionalInt(value *uint16) *int {
|
||||
if value == nil {
|
||||
return nil
|
||||
}
|
||||
v := int(*value)
|
||||
return &v
|
||||
}
|
||||
|
||||
func max(a, b int) int {
|
||||
if a > b {
|
||||
return a
|
||||
}
|
||||
return b
|
||||
}
|
||||
@@ -0,0 +1,296 @@
|
||||
package tencentcloud
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
|
||||
tcerrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
|
||||
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
|
||||
dnspod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod/v20210323"
|
||||
|
||||
"github.com/0xJacky/Nginx-UI/internal/dns"
|
||||
)
|
||||
|
||||
const (
|
||||
defaultRecordLine = "默认"
|
||||
tencentEndpoint = "dnspod.tencentcloudapi.com"
|
||||
)
|
||||
|
||||
type provider struct {
|
||||
client *dnspod.Client
|
||||
}
|
||||
|
||||
func init() {
|
||||
dns.RegisterProvider("tencentcloud", newProvider)
|
||||
}
|
||||
|
||||
func newProvider(cred *dns.Credential) (dns.Provider, error) {
|
||||
secretID := strings.TrimSpace(firstNonEmpty(
|
||||
cred.Values["TENCENTCLOUD_SECRET_ID"],
|
||||
cred.Values["QCLOUD_SECRET_ID"],
|
||||
))
|
||||
secretKey := strings.TrimSpace(firstNonEmpty(
|
||||
cred.Values["TENCENTCLOUD_SECRET_KEY"],
|
||||
cred.Values["QCLOUD_SECRET_KEY"],
|
||||
))
|
||||
|
||||
if secretID == "" || secretKey == "" {
|
||||
return nil, fmt.Errorf("tencentcloud: missing secret id or secret key")
|
||||
}
|
||||
|
||||
var credential common.CredentialIface
|
||||
if token := strings.TrimSpace(firstNonEmpty(
|
||||
cred.Values["TENCENTCLOUD_SESSION_TOKEN"],
|
||||
)); token != "" {
|
||||
credential = common.NewTokenCredential(secretID, secretKey, token)
|
||||
} else {
|
||||
credential = common.NewCredential(secretID, secretKey)
|
||||
}
|
||||
|
||||
cp := profile.NewClientProfile()
|
||||
cp.HttpProfile = &profile.HttpProfile{
|
||||
Endpoint: tencentEndpoint,
|
||||
ReqTimeout: int(defaultTimeout().Seconds()),
|
||||
}
|
||||
|
||||
client, err := dnspod.NewClient(credential, "", cp)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("tencentcloud: new client: %w", err)
|
||||
}
|
||||
|
||||
return &provider{client: client}, nil
|
||||
}
|
||||
|
||||
func (p *provider) ListRecords(ctx context.Context, domain string, filter dns.RecordFilter) ([]dns.Record, error) {
|
||||
req := dnspod.NewDescribeRecordListRequest()
|
||||
req.Domain = common.StringPtr(domain)
|
||||
req.Offset = common.Uint64Ptr(0)
|
||||
req.Limit = common.Uint64Ptr(3000)
|
||||
|
||||
if filter.Name != "" {
|
||||
req.Subdomain = common.StringPtr(filter.Name)
|
||||
}
|
||||
if filter.Type != "" {
|
||||
req.RecordType = common.StringPtr(strings.ToUpper(filter.Type))
|
||||
}
|
||||
|
||||
resp, err := p.client.DescribeRecordListWithContext(ctx, req)
|
||||
if err != nil {
|
||||
if isTencentNoDataError(err) {
|
||||
return []dns.Record{}, nil
|
||||
}
|
||||
return nil, fmt.Errorf("tencentcloud: list records: %w", err)
|
||||
}
|
||||
|
||||
if resp.Response == nil || len(resp.Response.RecordList) == 0 {
|
||||
return []dns.Record{}, nil
|
||||
}
|
||||
|
||||
result := make([]dns.Record, 0, len(resp.Response.RecordList))
|
||||
for _, item := range resp.Response.RecordList {
|
||||
if item == nil {
|
||||
continue
|
||||
}
|
||||
record := dns.Record{
|
||||
ID: uint64ToString(item.RecordId),
|
||||
Type: stringValue(item.Type),
|
||||
Name: normalizeName(stringValue(item.Name)),
|
||||
Content: stringValue(item.Value),
|
||||
TTL: int(uint64Value(item.TTL)),
|
||||
Weight: uint64Pointer(item.Weight),
|
||||
Priority: uint64Pointer(item.MX),
|
||||
}
|
||||
result = append(result, record)
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (p *provider) CreateRecord(ctx context.Context, domain string, input dns.RecordInput) (dns.Record, error) {
|
||||
req := dnspod.NewCreateRecordRequest()
|
||||
req.Domain = common.StringPtr(domain)
|
||||
req.SubDomain = common.StringPtr(normalizeSubDomain(input.Name))
|
||||
req.RecordType = common.StringPtr(strings.ToUpper(strings.TrimSpace(input.Type)))
|
||||
req.RecordLine = common.StringPtr(defaultRecordLine)
|
||||
req.Value = common.StringPtr(strings.TrimSpace(input.Content))
|
||||
req.TTL = common.Uint64Ptr(uint64(input.TTL))
|
||||
|
||||
if input.Priority != nil {
|
||||
mx := uint64(max(*input.Priority, 0))
|
||||
req.MX = &mx
|
||||
}
|
||||
|
||||
if input.Weight != nil {
|
||||
weight := uint64(max(*input.Weight, 0))
|
||||
req.Weight = &weight
|
||||
}
|
||||
|
||||
resp, err := p.client.CreateRecordWithContext(ctx, req)
|
||||
if err != nil {
|
||||
return dns.Record{}, fmt.Errorf("tencentcloud: create record: %w", err)
|
||||
}
|
||||
|
||||
if resp.Response == nil || resp.Response.RecordId == nil {
|
||||
return dns.Record{}, fmt.Errorf("tencentcloud: create record: empty response")
|
||||
}
|
||||
|
||||
return p.describeRecord(ctx, domain, strconv.FormatUint(*resp.Response.RecordId, 10))
|
||||
}
|
||||
|
||||
func (p *provider) UpdateRecord(ctx context.Context, domain string, recordID string, input dns.RecordInput) (dns.Record, error) {
|
||||
id, err := strconv.ParseUint(recordID, 10, 64)
|
||||
if err != nil {
|
||||
return dns.Record{}, fmt.Errorf("tencentcloud: invalid record id: %w", err)
|
||||
}
|
||||
|
||||
req := dnspod.NewModifyRecordRequest()
|
||||
req.Domain = common.StringPtr(domain)
|
||||
req.RecordId = common.Uint64Ptr(id)
|
||||
req.SubDomain = common.StringPtr(normalizeSubDomain(input.Name))
|
||||
req.RecordType = common.StringPtr(strings.ToUpper(strings.TrimSpace(input.Type)))
|
||||
req.RecordLine = common.StringPtr(defaultRecordLine)
|
||||
req.Value = common.StringPtr(strings.TrimSpace(input.Content))
|
||||
req.TTL = common.Uint64Ptr(uint64(input.TTL))
|
||||
|
||||
if input.Priority != nil {
|
||||
mx := uint64(max(*input.Priority, 0))
|
||||
req.MX = &mx
|
||||
}
|
||||
if input.Weight != nil {
|
||||
weight := uint64(max(*input.Weight, 0))
|
||||
req.Weight = &weight
|
||||
}
|
||||
|
||||
if _, err := p.client.ModifyRecordWithContext(ctx, req); err != nil {
|
||||
return dns.Record{}, fmt.Errorf("tencentcloud: update record: %w", err)
|
||||
}
|
||||
|
||||
return p.describeRecord(ctx, domain, recordID)
|
||||
}
|
||||
|
||||
func (p *provider) DeleteRecord(ctx context.Context, domain string, recordID string) error {
|
||||
id, err := strconv.ParseUint(recordID, 10, 64)
|
||||
if err != nil {
|
||||
return fmt.Errorf("tencentcloud: invalid record id: %w", err)
|
||||
}
|
||||
|
||||
req := dnspod.NewDeleteRecordRequest()
|
||||
req.Domain = common.StringPtr(domain)
|
||||
req.RecordId = common.Uint64Ptr(id)
|
||||
|
||||
if _, err := p.client.DeleteRecordWithContext(ctx, req); err != nil {
|
||||
return fmt.Errorf("tencentcloud: delete record: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *provider) describeRecord(ctx context.Context, domain string, recordID string) (dns.Record, error) {
|
||||
id, err := strconv.ParseUint(recordID, 10, 64)
|
||||
if err != nil {
|
||||
return dns.Record{}, fmt.Errorf("tencentcloud: invalid record id: %w", err)
|
||||
}
|
||||
|
||||
req := dnspod.NewDescribeRecordRequest()
|
||||
req.Domain = common.StringPtr(domain)
|
||||
req.RecordId = common.Uint64Ptr(id)
|
||||
|
||||
resp, err := p.client.DescribeRecordWithContext(ctx, req)
|
||||
if err != nil {
|
||||
return dns.Record{}, fmt.Errorf("tencentcloud: describe record: %w", err)
|
||||
}
|
||||
|
||||
if resp.Response == nil || resp.Response.RecordInfo == nil {
|
||||
return dns.Record{}, fmt.Errorf("tencentcloud: describe record: empty response")
|
||||
}
|
||||
|
||||
info := resp.Response.RecordInfo
|
||||
record := dns.Record{
|
||||
ID: recordID,
|
||||
Type: stringValue(info.RecordType),
|
||||
Name: normalizeName(stringValue(info.SubDomain)),
|
||||
Content: stringValue(info.Value),
|
||||
TTL: int(uint64Value(info.TTL)),
|
||||
Weight: uint64Pointer(info.Weight),
|
||||
Priority: uint64Pointer(info.MX),
|
||||
}
|
||||
|
||||
return record, nil
|
||||
}
|
||||
|
||||
func normalizeSubDomain(name string) string {
|
||||
name = strings.TrimSpace(name)
|
||||
if name == "" || name == "@" {
|
||||
return "@"
|
||||
}
|
||||
return name
|
||||
}
|
||||
|
||||
func normalizeName(name string) string {
|
||||
if name == "" {
|
||||
return "@"
|
||||
}
|
||||
return name
|
||||
}
|
||||
|
||||
func uint64ToString(value *uint64) string {
|
||||
if value == nil {
|
||||
return ""
|
||||
}
|
||||
return strconv.FormatUint(*value, 10)
|
||||
}
|
||||
|
||||
func uint64Value(value *uint64) uint64 {
|
||||
if value == nil {
|
||||
return 0
|
||||
}
|
||||
return *value
|
||||
}
|
||||
|
||||
func uint64Pointer(value *uint64) *int {
|
||||
if value == nil || *value == 0 {
|
||||
return nil
|
||||
}
|
||||
v := int(*value)
|
||||
return &v
|
||||
}
|
||||
|
||||
func stringValue(value *string) string {
|
||||
if value == nil {
|
||||
return ""
|
||||
}
|
||||
return *value
|
||||
}
|
||||
|
||||
func defaultTimeout() time.Duration {
|
||||
return 10 * time.Second
|
||||
}
|
||||
|
||||
func max(a, b int) int {
|
||||
if a > b {
|
||||
return a
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
func firstNonEmpty(values ...string) string {
|
||||
for _, value := range values {
|
||||
if v := strings.TrimSpace(value); v != "" {
|
||||
return v
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func isTencentNoDataError(err error) bool {
|
||||
var sdkErr *tcerrors.TencentCloudSDKError
|
||||
if errors.As(err, &sdkErr) {
|
||||
return sdkErr.Code == "ResourceNotFound.NoDataOfRecord"
|
||||
}
|
||||
return false
|
||||
}
|
||||
@@ -0,0 +1,336 @@
|
||||
package dns
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"regexp"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/0xJacky/Nginx-UI/model"
|
||||
"github.com/0xJacky/Nginx-UI/query"
|
||||
"github.com/samber/lo"
|
||||
"github.com/uozi-tech/cosy"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
const providerTimeout = 10 * time.Second
|
||||
|
||||
var domainPattern = regexp.MustCompile(`^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9-]{2,}$`)
|
||||
|
||||
// DomainInput represents the payload required to create or update a domain.
|
||||
type DomainInput struct {
|
||||
Domain string
|
||||
Description string
|
||||
DnsCredentialID uint64
|
||||
}
|
||||
|
||||
// DomainListOptions controls domain pagination and filtering.
|
||||
type DomainListOptions struct {
|
||||
Page int
|
||||
PerPage int
|
||||
Keyword string
|
||||
DnsCredential uint64
|
||||
}
|
||||
|
||||
// RecordListOptions wraps filters for listing DNS records.
|
||||
type RecordListOptions struct {
|
||||
Filter RecordFilter
|
||||
}
|
||||
|
||||
// NormalizeDomain trims and validates a domain value for persistence.
|
||||
func NormalizeDomain(value string) (string, error) {
|
||||
return normalizeDomain(value)
|
||||
}
|
||||
|
||||
// EnsureDomainUnique verifies the domain is unique under the given credential, excluding an existing ID when provided.
|
||||
func EnsureDomainUnique(ctx context.Context, domain string, credentialID uint64, excludeID uint64) error {
|
||||
return ensureDomainUnique(ctx, domain, credentialID, excludeID)
|
||||
}
|
||||
|
||||
// LoadCredential fetches a DNS credential by ID with consistent error mapping.
|
||||
func LoadCredential(ctx context.Context, id uint64) (*model.DnsCredential, error) {
|
||||
return loadCredential(ctx, id)
|
||||
}
|
||||
|
||||
// Service implements domain and record operations.
|
||||
type Service struct{}
|
||||
|
||||
// NewService builds a DNS service.
|
||||
func NewService() *Service {
|
||||
return &Service{}
|
||||
}
|
||||
|
||||
// ListDomains returns paginated domains with their credentials.
|
||||
func (s *Service) ListDomains(ctx context.Context, opts DomainListOptions) ([]*model.DnsDomain, int64, error) {
|
||||
page := lo.If(opts.Page < 1, 1).Else(opts.Page)
|
||||
perPage := lo.If(opts.PerPage <= 0, 50).Else(opts.PerPage)
|
||||
offset := (page - 1) * perPage
|
||||
|
||||
dao := query.DnsDomain
|
||||
d := dao.WithContext(ctx).Preload(dao.DnsCredential)
|
||||
|
||||
if opts.DnsCredential > 0 {
|
||||
d = d.Where(dao.DnsCredentialID.Eq(opts.DnsCredential))
|
||||
}
|
||||
|
||||
if opts.Keyword != "" {
|
||||
keyword := "%" + opts.Keyword + "%"
|
||||
d = d.Where(dao.Domain.Like(keyword)).
|
||||
Or(dao.Description.Like(keyword))
|
||||
}
|
||||
|
||||
return d.Order(dao.UpdatedAt.Desc()).FindByPage(offset, perPage)
|
||||
}
|
||||
|
||||
// CreateDomain stores a new domain bound to a credential.
|
||||
func (s *Service) CreateDomain(ctx context.Context, input DomainInput) (*model.DnsDomain, error) {
|
||||
validDomain, err := normalizeDomain(input.Domain)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
cred, err := loadCredential(ctx, input.DnsCredentialID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := ensureDomainUnique(ctx, validDomain, input.DnsCredentialID, 0); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
domain := &model.DnsDomain{
|
||||
Domain: validDomain,
|
||||
Description: strings.TrimSpace(input.Description),
|
||||
DnsCredentialID: cred.ID,
|
||||
}
|
||||
|
||||
if err := query.DnsDomain.WithContext(ctx).Create(domain); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
domain.DnsCredential = cred
|
||||
return domain, nil
|
||||
}
|
||||
|
||||
// GetDomain returns a single domain with credential information.
|
||||
func (s *Service) GetDomain(ctx context.Context, id uint64) (*model.DnsDomain, error) {
|
||||
return loadDomain(ctx, id)
|
||||
}
|
||||
|
||||
// UpdateDomain updates domain metadata and credential association.
|
||||
func (s *Service) UpdateDomain(ctx context.Context, id uint64, input DomainInput) (*model.DnsDomain, error) {
|
||||
domain, err := loadDomain(ctx, id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
newDomain, err := normalizeDomain(input.Domain)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
cred, err := loadCredential(ctx, input.DnsCredentialID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := ensureDomainUnique(ctx, newDomain, cred.ID, domain.ID); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
_, err = query.DnsDomain.WithContext(ctx).
|
||||
Where(query.DnsDomain.ID.Eq(domain.ID)).
|
||||
Updates(&model.DnsDomain{
|
||||
Domain: newDomain,
|
||||
Description: strings.TrimSpace(input.Description),
|
||||
DnsCredentialID: cred.ID,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return loadDomain(ctx, id)
|
||||
}
|
||||
|
||||
// DeleteDomain removes the domain entry.
|
||||
func (s *Service) DeleteDomain(ctx context.Context, id uint64) error {
|
||||
_, err := query.DnsDomain.WithContext(ctx).Where(query.DnsDomain.ID.Eq(id)).Delete()
|
||||
return err
|
||||
}
|
||||
|
||||
// ListRecords lists DNS records for the given domain.
|
||||
func (s *Service) ListRecords(ctx context.Context, domainID uint64, opts RecordListOptions) ([]Record, error) {
|
||||
domain, provider, err := s.prepareProvider(ctx, domainID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
ctxWithTimeout, cancel := context.WithTimeout(ctx, providerTimeout)
|
||||
defer cancel()
|
||||
|
||||
return provider.ListRecords(ctxWithTimeout, domain.Domain, opts.Filter)
|
||||
}
|
||||
|
||||
// CreateRecord creates a DNS record under the domain.
|
||||
func (s *Service) CreateRecord(ctx context.Context, domainID uint64, input RecordInput) (Record, error) {
|
||||
domain, provider, err := s.prepareProvider(ctx, domainID)
|
||||
if err != nil {
|
||||
return Record{}, err
|
||||
}
|
||||
|
||||
ctxWithTimeout, cancel := context.WithTimeout(ctx, providerTimeout)
|
||||
defer cancel()
|
||||
|
||||
return provider.CreateRecord(ctxWithTimeout, domain.Domain, sanitizeRecordInput(input))
|
||||
}
|
||||
|
||||
// UpdateRecord updates a DNS record.
|
||||
func (s *Service) UpdateRecord(ctx context.Context, domainID uint64, recordID string, input RecordInput) (Record, error) {
|
||||
domain, provider, err := s.prepareProvider(ctx, domainID)
|
||||
if err != nil {
|
||||
return Record{}, err
|
||||
}
|
||||
|
||||
ctxWithTimeout, cancel := context.WithTimeout(ctx, providerTimeout)
|
||||
defer cancel()
|
||||
|
||||
return provider.UpdateRecord(ctxWithTimeout, domain.Domain, recordID, sanitizeRecordInput(input))
|
||||
}
|
||||
|
||||
// DeleteRecord deletes a DNS record.
|
||||
func (s *Service) DeleteRecord(ctx context.Context, domainID uint64, recordID string) error {
|
||||
domain, provider, err := s.prepareProvider(ctx, domainID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ctxWithTimeout, cancel := context.WithTimeout(ctx, providerTimeout)
|
||||
defer cancel()
|
||||
|
||||
return provider.DeleteRecord(ctxWithTimeout, domain.Domain, recordID)
|
||||
}
|
||||
|
||||
func (s *Service) prepareProvider(ctx context.Context, domainID uint64) (*model.DnsDomain, Provider, error) {
|
||||
domain, err := loadDomain(ctx, domainID)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
cred := domain.DnsCredential
|
||||
if cred == nil {
|
||||
return nil, nil, ErrCredentialNotFound
|
||||
}
|
||||
|
||||
providerCred, err := toProviderCredential(cred)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
provider, err := NewProvider(providerCred.Code, providerCred)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
return domain, provider, nil
|
||||
}
|
||||
|
||||
func loadCredential(ctx context.Context, id uint64) (*model.DnsCredential, error) {
|
||||
credential, err := query.DnsCredential.WithContext(ctx).FirstByID(id)
|
||||
if err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return nil, ErrCredentialNotFound
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return credential, nil
|
||||
}
|
||||
|
||||
func loadDomain(ctx context.Context, id uint64) (*model.DnsDomain, error) {
|
||||
dao := query.DnsDomain
|
||||
domain, err := dao.WithContext(ctx).
|
||||
Preload(dao.DnsCredential).
|
||||
Where(dao.ID.Eq(id)).
|
||||
First()
|
||||
if err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return nil, ErrDomainNotFound
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return domain, nil
|
||||
}
|
||||
|
||||
func ensureDomainUnique(ctx context.Context, domain string, credentialID uint64, excludeID uint64) error {
|
||||
dao := query.DnsDomain
|
||||
d := dao.WithContext(ctx).Where(
|
||||
dao.DnsCredentialID.Eq(credentialID),
|
||||
dao.Domain.Eq(domain),
|
||||
)
|
||||
|
||||
if excludeID > 0 {
|
||||
d = d.Where(dao.ID.Neq(excludeID))
|
||||
}
|
||||
|
||||
count, err := d.Count()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if count > 0 {
|
||||
return ErrDuplicateDomain
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func normalizeDomain(value string) (string, error) {
|
||||
domain := strings.Trim(strings.ToLower(value), ".")
|
||||
if domain == "" || !domainPattern.MatchString(domain) {
|
||||
return "", cosy.WrapErrorWithParams(ErrInvalidDomain, value)
|
||||
}
|
||||
return domain, nil
|
||||
}
|
||||
|
||||
func toProviderCredential(credential *model.DnsCredential) (*Credential, error) {
|
||||
if credential == nil || credential.Config == nil || credential.Config.Configuration == nil {
|
||||
return nil, ErrInvalidCredential
|
||||
}
|
||||
|
||||
values := make(map[string]string)
|
||||
for key, val := range credential.Config.Configuration.Credentials {
|
||||
if trimmed := strings.TrimSpace(val); trimmed != "" {
|
||||
values[key] = trimmed
|
||||
}
|
||||
}
|
||||
if len(values) == 0 {
|
||||
return nil, ErrInvalidCredential
|
||||
}
|
||||
|
||||
additional := make(map[string]string)
|
||||
for key, val := range credential.Config.Configuration.Additional {
|
||||
if trimmed := strings.TrimSpace(val); trimmed != "" {
|
||||
additional[key] = trimmed
|
||||
}
|
||||
}
|
||||
|
||||
return &Credential{
|
||||
ID: credential.ID,
|
||||
Name: credential.Name,
|
||||
Provider: credential.Provider,
|
||||
Code: credential.Config.Code,
|
||||
Values: values,
|
||||
Additional: additional,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func sanitizeRecordInput(input RecordInput) RecordInput {
|
||||
input.Name = strings.TrimSpace(input.Name)
|
||||
input.Content = strings.TrimSpace(input.Content)
|
||||
input.Type = strings.ToUpper(strings.TrimSpace(input.Type))
|
||||
if input.TTL <= 0 {
|
||||
input.TTL = 600
|
||||
}
|
||||
return input
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
package dns_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"sync"
|
||||
"testing"
|
||||
|
||||
certdns "github.com/0xJacky/Nginx-UI/internal/cert/dns"
|
||||
dnsSvc "github.com/0xJacky/Nginx-UI/internal/dns"
|
||||
"github.com/0xJacky/Nginx-UI/model"
|
||||
"github.com/0xJacky/Nginx-UI/query"
|
||||
"github.com/stretchr/testify/require"
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func TestDomainLifecycle(t *testing.T) {
|
||||
registerMockProvider()
|
||||
|
||||
q := setupTestQuery(t)
|
||||
ctx := context.Background()
|
||||
service := dnsSvc.NewService()
|
||||
|
||||
cred := createCredential(t, q)
|
||||
|
||||
domain, err := service.CreateDomain(ctx, dnsSvc.DomainInput{
|
||||
Domain: "Example.com.",
|
||||
Description: "Test domain",
|
||||
DnsCredentialID: cred.ID,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "example.com", domain.Domain)
|
||||
|
||||
_, err = service.CreateDomain(ctx, dnsSvc.DomainInput{
|
||||
Domain: "example.com",
|
||||
Description: "duplicate",
|
||||
DnsCredentialID: cred.ID,
|
||||
})
|
||||
require.ErrorIs(t, err, dnsSvc.ErrDuplicateDomain)
|
||||
|
||||
list, total, err := service.ListDomains(ctx, dnsSvc.DomainListOptions{
|
||||
Page: 1,
|
||||
PerPage: 10,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, int64(1), total)
|
||||
require.Len(t, list, 1)
|
||||
|
||||
records, err := service.ListRecords(ctx, domain.ID, dnsSvc.RecordListOptions{})
|
||||
require.NoError(t, err)
|
||||
require.Len(t, records, 1)
|
||||
require.Equal(t, "mock", records[0].Type)
|
||||
}
|
||||
|
||||
func setupTestQuery(tb testing.TB) *query.Query {
|
||||
tb.Helper()
|
||||
|
||||
db, err := gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{})
|
||||
require.NoError(tb, err)
|
||||
|
||||
require.NoError(tb, db.AutoMigrate(&model.DnsCredential{}, &model.DnsDomain{}))
|
||||
|
||||
model.Use(db)
|
||||
q := query.Use(db)
|
||||
query.SetDefault(db)
|
||||
|
||||
return q
|
||||
}
|
||||
|
||||
func createCredential(tb testing.TB, q *query.Query) *model.DnsCredential {
|
||||
tb.Helper()
|
||||
|
||||
cred := &model.DnsCredential{
|
||||
Name: "Mock Credential",
|
||||
Provider: "Mock",
|
||||
Config: &certdns.Config{
|
||||
Code: "mock",
|
||||
Configuration: &certdns.Configuration{
|
||||
Credentials: map[string]string{
|
||||
"TOKEN": "foo",
|
||||
},
|
||||
Additional: map[string]string{},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
err := q.DnsCredential.Create(cred)
|
||||
require.NoError(tb, err)
|
||||
|
||||
return cred
|
||||
}
|
||||
|
||||
var registerOnce sync.Once
|
||||
|
||||
func registerMockProvider() {
|
||||
registerOnce.Do(func() {
|
||||
dnsSvc.RegisterProvider("mock", func(*dnsSvc.Credential) (dnsSvc.Provider, error) {
|
||||
return &mockProvider{}, nil
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
type mockProvider struct{}
|
||||
|
||||
func (m *mockProvider) ListRecords(ctx context.Context, domain string, filter dnsSvc.RecordFilter) ([]dnsSvc.Record, error) {
|
||||
return []dnsSvc.Record{{
|
||||
ID: "1",
|
||||
Type: "mock",
|
||||
Name: "@",
|
||||
Content: "127.0.0.1",
|
||||
TTL: 60,
|
||||
}}, nil
|
||||
}
|
||||
|
||||
func (m *mockProvider) CreateRecord(ctx context.Context, domain string, input dnsSvc.RecordInput) (dnsSvc.Record, error) {
|
||||
return dnsSvc.Record{
|
||||
ID: "1",
|
||||
Type: input.Type,
|
||||
Name: input.Name,
|
||||
Content: input.Content,
|
||||
TTL: input.TTL,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (m *mockProvider) UpdateRecord(ctx context.Context, domain string, recordID string, input dnsSvc.RecordInput) (dnsSvc.Record, error) {
|
||||
return dnsSvc.Record{
|
||||
ID: recordID,
|
||||
Type: input.Type,
|
||||
Name: input.Name,
|
||||
Content: input.Content,
|
||||
TTL: input.TTL,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (m *mockProvider) DeleteRecord(ctx context.Context, domain string, recordID string) error {
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package model
|
||||
|
||||
import "time"
|
||||
|
||||
// DDNSRecordTarget represents a DNS record to be managed by DDNS.
|
||||
type DDNSRecordTarget struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Type string `json:"type"`
|
||||
}
|
||||
|
||||
// DDNSConfig stores per-domain DDNS configuration and runtime status.
|
||||
type DDNSConfig struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
IntervalSeconds int `json:"interval_seconds"`
|
||||
Targets []DDNSRecordTarget `json:"targets"`
|
||||
LastIPv4 string `json:"last_ipv4,omitempty"`
|
||||
LastIPv6 string `json:"last_ipv6,omitempty"`
|
||||
LastRunAt *time.Time `json:"last_run_at,omitempty"`
|
||||
LastError string `json:"last_error,omitempty"`
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package model
|
||||
|
||||
// DnsDomain represents a managed domain bound to a DNS credential.
|
||||
type DnsDomain struct {
|
||||
Model
|
||||
|
||||
Domain string `json:"domain" gorm:"size:255;not null;uniqueIndex:idx_dns_domain_credential"`
|
||||
Description string `json:"description"`
|
||||
DnsCredentialID uint64 `json:"dns_credential_id" gorm:"not null;uniqueIndex:idx_dns_domain_credential"`
|
||||
DnsCredential *DnsCredential `json:"dns_credential,omitempty" gorm:"constraint:OnDelete:CASCADE;"`
|
||||
DDNSConfig *DDNSConfig `json:"ddns_config,omitempty" gorm:"column:ddns_config;serializer:json"`
|
||||
}
|
||||
@@ -42,6 +42,7 @@ func GenerateAllModel() []any {
|
||||
Site{},
|
||||
Stream{},
|
||||
DnsCredential{},
|
||||
DnsDomain{},
|
||||
Node{},
|
||||
Notification{},
|
||||
AcmeUser{},
|
||||
|
||||
+1
-1
@@ -3,8 +3,8 @@
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "pnpm --filter nginx-ui-app-next dev",
|
||||
"docs:dev": "pnpm --filter nginx-ui-docs docs:dev",
|
||||
"gettext:extract": "pnpm --filter nginx-ui-app-next gettext:extract",
|
||||
"docs:dev": "pnpm --filter nginx-ui-docs docs:dev",
|
||||
"typecheck": "pnpm --filter nginx-ui-app-next typecheck",
|
||||
"lint": "pnpm --filter nginx-ui-app-next lint",
|
||||
"lint:fix": "pnpm --filter nginx-ui-app-next lint:fix",
|
||||
|
||||
@@ -0,0 +1,469 @@
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
|
||||
package query
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
"gorm.io/gorm/schema"
|
||||
|
||||
"gorm.io/gen"
|
||||
"gorm.io/gen/field"
|
||||
|
||||
"gorm.io/plugin/dbresolver"
|
||||
|
||||
"github.com/0xJacky/Nginx-UI/model"
|
||||
)
|
||||
|
||||
func newDnsDomain(db *gorm.DB, opts ...gen.DOOption) dnsDomain {
|
||||
_dnsDomain := dnsDomain{}
|
||||
|
||||
_dnsDomain.dnsDomainDo.UseDB(db, opts...)
|
||||
_dnsDomain.dnsDomainDo.UseModel(&model.DnsDomain{})
|
||||
|
||||
tableName := _dnsDomain.dnsDomainDo.TableName()
|
||||
_dnsDomain.ALL = field.NewAsterisk(tableName)
|
||||
_dnsDomain.ID = field.NewUint64(tableName, "id")
|
||||
_dnsDomain.CreatedAt = field.NewTime(tableName, "created_at")
|
||||
_dnsDomain.UpdatedAt = field.NewTime(tableName, "updated_at")
|
||||
_dnsDomain.DeletedAt = field.NewField(tableName, "deleted_at")
|
||||
_dnsDomain.Domain = field.NewString(tableName, "domain")
|
||||
_dnsDomain.Description = field.NewString(tableName, "description")
|
||||
_dnsDomain.DnsCredentialID = field.NewUint64(tableName, "dns_credential_id")
|
||||
_dnsDomain.DDNSConfig = field.NewField(tableName, "ddns_config")
|
||||
_dnsDomain.DnsCredential = dnsDomainBelongsToDnsCredential{
|
||||
db: db.Session(&gorm.Session{}),
|
||||
|
||||
RelationField: field.NewRelation("DnsCredential", "model.DnsCredential"),
|
||||
}
|
||||
|
||||
_dnsDomain.fillFieldMap()
|
||||
|
||||
return _dnsDomain
|
||||
}
|
||||
|
||||
type dnsDomain struct {
|
||||
dnsDomainDo
|
||||
|
||||
ALL field.Asterisk
|
||||
ID field.Uint64
|
||||
CreatedAt field.Time
|
||||
UpdatedAt field.Time
|
||||
DeletedAt field.Field
|
||||
Domain field.String
|
||||
Description field.String
|
||||
DnsCredentialID field.Uint64
|
||||
DDNSConfig field.Field
|
||||
DnsCredential dnsDomainBelongsToDnsCredential
|
||||
|
||||
fieldMap map[string]field.Expr
|
||||
}
|
||||
|
||||
func (d dnsDomain) Table(newTableName string) *dnsDomain {
|
||||
d.dnsDomainDo.UseTable(newTableName)
|
||||
return d.updateTableName(newTableName)
|
||||
}
|
||||
|
||||
func (d dnsDomain) As(alias string) *dnsDomain {
|
||||
d.dnsDomainDo.DO = *(d.dnsDomainDo.As(alias).(*gen.DO))
|
||||
return d.updateTableName(alias)
|
||||
}
|
||||
|
||||
func (d *dnsDomain) updateTableName(table string) *dnsDomain {
|
||||
d.ALL = field.NewAsterisk(table)
|
||||
d.ID = field.NewUint64(table, "id")
|
||||
d.CreatedAt = field.NewTime(table, "created_at")
|
||||
d.UpdatedAt = field.NewTime(table, "updated_at")
|
||||
d.DeletedAt = field.NewField(table, "deleted_at")
|
||||
d.Domain = field.NewString(table, "domain")
|
||||
d.Description = field.NewString(table, "description")
|
||||
d.DnsCredentialID = field.NewUint64(table, "dns_credential_id")
|
||||
d.DDNSConfig = field.NewField(table, "ddns_config")
|
||||
|
||||
d.fillFieldMap()
|
||||
|
||||
return d
|
||||
}
|
||||
|
||||
func (d *dnsDomain) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
|
||||
_f, ok := d.fieldMap[fieldName]
|
||||
if !ok || _f == nil {
|
||||
return nil, false
|
||||
}
|
||||
_oe, ok := _f.(field.OrderExpr)
|
||||
return _oe, ok
|
||||
}
|
||||
|
||||
func (d *dnsDomain) fillFieldMap() {
|
||||
d.fieldMap = make(map[string]field.Expr, 9)
|
||||
d.fieldMap["id"] = d.ID
|
||||
d.fieldMap["created_at"] = d.CreatedAt
|
||||
d.fieldMap["updated_at"] = d.UpdatedAt
|
||||
d.fieldMap["deleted_at"] = d.DeletedAt
|
||||
d.fieldMap["domain"] = d.Domain
|
||||
d.fieldMap["description"] = d.Description
|
||||
d.fieldMap["dns_credential_id"] = d.DnsCredentialID
|
||||
d.fieldMap["ddns_config"] = d.DDNSConfig
|
||||
|
||||
}
|
||||
|
||||
func (d dnsDomain) clone(db *gorm.DB) dnsDomain {
|
||||
d.dnsDomainDo.ReplaceConnPool(db.Statement.ConnPool)
|
||||
d.DnsCredential.db = db.Session(&gorm.Session{Initialized: true})
|
||||
d.DnsCredential.db.Statement.ConnPool = db.Statement.ConnPool
|
||||
return d
|
||||
}
|
||||
|
||||
func (d dnsDomain) replaceDB(db *gorm.DB) dnsDomain {
|
||||
d.dnsDomainDo.ReplaceDB(db)
|
||||
d.DnsCredential.db = db.Session(&gorm.Session{})
|
||||
return d
|
||||
}
|
||||
|
||||
type dnsDomainBelongsToDnsCredential struct {
|
||||
db *gorm.DB
|
||||
|
||||
field.RelationField
|
||||
}
|
||||
|
||||
func (a dnsDomainBelongsToDnsCredential) Where(conds ...field.Expr) *dnsDomainBelongsToDnsCredential {
|
||||
if len(conds) == 0 {
|
||||
return &a
|
||||
}
|
||||
|
||||
exprs := make([]clause.Expression, 0, len(conds))
|
||||
for _, cond := range conds {
|
||||
exprs = append(exprs, cond.BeCond().(clause.Expression))
|
||||
}
|
||||
a.db = a.db.Clauses(clause.Where{Exprs: exprs})
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a dnsDomainBelongsToDnsCredential) WithContext(ctx context.Context) *dnsDomainBelongsToDnsCredential {
|
||||
a.db = a.db.WithContext(ctx)
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a dnsDomainBelongsToDnsCredential) Session(session *gorm.Session) *dnsDomainBelongsToDnsCredential {
|
||||
a.db = a.db.Session(session)
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a dnsDomainBelongsToDnsCredential) Model(m *model.DnsDomain) *dnsDomainBelongsToDnsCredentialTx {
|
||||
return &dnsDomainBelongsToDnsCredentialTx{a.db.Model(m).Association(a.Name())}
|
||||
}
|
||||
|
||||
func (a dnsDomainBelongsToDnsCredential) Unscoped() *dnsDomainBelongsToDnsCredential {
|
||||
a.db = a.db.Unscoped()
|
||||
return &a
|
||||
}
|
||||
|
||||
type dnsDomainBelongsToDnsCredentialTx struct{ tx *gorm.Association }
|
||||
|
||||
func (a dnsDomainBelongsToDnsCredentialTx) Find() (result *model.DnsCredential, err error) {
|
||||
return result, a.tx.Find(&result)
|
||||
}
|
||||
|
||||
func (a dnsDomainBelongsToDnsCredentialTx) Append(values ...*model.DnsCredential) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Append(targetValues...)
|
||||
}
|
||||
|
||||
func (a dnsDomainBelongsToDnsCredentialTx) Replace(values ...*model.DnsCredential) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Replace(targetValues...)
|
||||
}
|
||||
|
||||
func (a dnsDomainBelongsToDnsCredentialTx) Delete(values ...*model.DnsCredential) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Delete(targetValues...)
|
||||
}
|
||||
|
||||
func (a dnsDomainBelongsToDnsCredentialTx) Clear() error {
|
||||
return a.tx.Clear()
|
||||
}
|
||||
|
||||
func (a dnsDomainBelongsToDnsCredentialTx) Count() int64 {
|
||||
return a.tx.Count()
|
||||
}
|
||||
|
||||
func (a dnsDomainBelongsToDnsCredentialTx) Unscoped() *dnsDomainBelongsToDnsCredentialTx {
|
||||
a.tx = a.tx.Unscoped()
|
||||
return &a
|
||||
}
|
||||
|
||||
type dnsDomainDo struct{ gen.DO }
|
||||
|
||||
// FirstByID Where("id=@id")
|
||||
func (d dnsDomainDo) FirstByID(id uint64) (result *model.DnsDomain, err error) {
|
||||
var params []interface{}
|
||||
|
||||
var generateSQL strings.Builder
|
||||
params = append(params, id)
|
||||
generateSQL.WriteString("id=? ")
|
||||
|
||||
var executeSQL *gorm.DB
|
||||
executeSQL = d.UnderlyingDB().Where(generateSQL.String(), params...).Take(&result) // ignore_security_alert
|
||||
err = executeSQL.Error
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// DeleteByID update @@table set deleted_at=strftime('%Y-%m-%d %H:%M:%S','now') where id=@id
|
||||
func (d dnsDomainDo) DeleteByID(id uint64) (err error) {
|
||||
var params []interface{}
|
||||
|
||||
var generateSQL strings.Builder
|
||||
params = append(params, id)
|
||||
generateSQL.WriteString("update dns_domains set deleted_at=strftime('%Y-%m-%d %H:%M:%S','now') where id=? ")
|
||||
|
||||
var executeSQL *gorm.DB
|
||||
executeSQL = d.UnderlyingDB().Exec(generateSQL.String(), params...) // ignore_security_alert
|
||||
err = executeSQL.Error
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Debug() *dnsDomainDo {
|
||||
return d.withDO(d.DO.Debug())
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) WithContext(ctx context.Context) *dnsDomainDo {
|
||||
return d.withDO(d.DO.WithContext(ctx))
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) ReadDB() *dnsDomainDo {
|
||||
return d.Clauses(dbresolver.Read)
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) WriteDB() *dnsDomainDo {
|
||||
return d.Clauses(dbresolver.Write)
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Session(config *gorm.Session) *dnsDomainDo {
|
||||
return d.withDO(d.DO.Session(config))
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Clauses(conds ...clause.Expression) *dnsDomainDo {
|
||||
return d.withDO(d.DO.Clauses(conds...))
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Returning(value interface{}, columns ...string) *dnsDomainDo {
|
||||
return d.withDO(d.DO.Returning(value, columns...))
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Not(conds ...gen.Condition) *dnsDomainDo {
|
||||
return d.withDO(d.DO.Not(conds...))
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Or(conds ...gen.Condition) *dnsDomainDo {
|
||||
return d.withDO(d.DO.Or(conds...))
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Select(conds ...field.Expr) *dnsDomainDo {
|
||||
return d.withDO(d.DO.Select(conds...))
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Where(conds ...gen.Condition) *dnsDomainDo {
|
||||
return d.withDO(d.DO.Where(conds...))
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Order(conds ...field.Expr) *dnsDomainDo {
|
||||
return d.withDO(d.DO.Order(conds...))
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Distinct(cols ...field.Expr) *dnsDomainDo {
|
||||
return d.withDO(d.DO.Distinct(cols...))
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Omit(cols ...field.Expr) *dnsDomainDo {
|
||||
return d.withDO(d.DO.Omit(cols...))
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Join(table schema.Tabler, on ...field.Expr) *dnsDomainDo {
|
||||
return d.withDO(d.DO.Join(table, on...))
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) LeftJoin(table schema.Tabler, on ...field.Expr) *dnsDomainDo {
|
||||
return d.withDO(d.DO.LeftJoin(table, on...))
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) RightJoin(table schema.Tabler, on ...field.Expr) *dnsDomainDo {
|
||||
return d.withDO(d.DO.RightJoin(table, on...))
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Group(cols ...field.Expr) *dnsDomainDo {
|
||||
return d.withDO(d.DO.Group(cols...))
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Having(conds ...gen.Condition) *dnsDomainDo {
|
||||
return d.withDO(d.DO.Having(conds...))
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Limit(limit int) *dnsDomainDo {
|
||||
return d.withDO(d.DO.Limit(limit))
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Offset(offset int) *dnsDomainDo {
|
||||
return d.withDO(d.DO.Offset(offset))
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Scopes(funcs ...func(gen.Dao) gen.Dao) *dnsDomainDo {
|
||||
return d.withDO(d.DO.Scopes(funcs...))
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Unscoped() *dnsDomainDo {
|
||||
return d.withDO(d.DO.Unscoped())
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Create(values ...*model.DnsDomain) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return d.DO.Create(values)
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) CreateInBatches(values []*model.DnsDomain, batchSize int) error {
|
||||
return d.DO.CreateInBatches(values, batchSize)
|
||||
}
|
||||
|
||||
// Save : !!! underlying implementation is different with GORM
|
||||
// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values)
|
||||
func (d dnsDomainDo) Save(values ...*model.DnsDomain) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return d.DO.Save(values)
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) First() (*model.DnsDomain, error) {
|
||||
if result, err := d.DO.First(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.DnsDomain), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Take() (*model.DnsDomain, error) {
|
||||
if result, err := d.DO.Take(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.DnsDomain), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Last() (*model.DnsDomain, error) {
|
||||
if result, err := d.DO.Last(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.DnsDomain), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Find() ([]*model.DnsDomain, error) {
|
||||
result, err := d.DO.Find()
|
||||
return result.([]*model.DnsDomain), err
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.DnsDomain, err error) {
|
||||
buf := make([]*model.DnsDomain, 0, batchSize)
|
||||
err = d.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error {
|
||||
defer func() { results = append(results, buf...) }()
|
||||
return fc(tx, batch)
|
||||
})
|
||||
return results, err
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) FindInBatches(result *[]*model.DnsDomain, batchSize int, fc func(tx gen.Dao, batch int) error) error {
|
||||
return d.DO.FindInBatches(result, batchSize, fc)
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Attrs(attrs ...field.AssignExpr) *dnsDomainDo {
|
||||
return d.withDO(d.DO.Attrs(attrs...))
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Assign(attrs ...field.AssignExpr) *dnsDomainDo {
|
||||
return d.withDO(d.DO.Assign(attrs...))
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Joins(fields ...field.RelationField) *dnsDomainDo {
|
||||
for _, _f := range fields {
|
||||
d = *d.withDO(d.DO.Joins(_f))
|
||||
}
|
||||
return &d
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Preload(fields ...field.RelationField) *dnsDomainDo {
|
||||
for _, _f := range fields {
|
||||
d = *d.withDO(d.DO.Preload(_f))
|
||||
}
|
||||
return &d
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) FirstOrInit() (*model.DnsDomain, error) {
|
||||
if result, err := d.DO.FirstOrInit(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.DnsDomain), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) FirstOrCreate() (*model.DnsDomain, error) {
|
||||
if result, err := d.DO.FirstOrCreate(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.DnsDomain), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) FindByPage(offset int, limit int) (result []*model.DnsDomain, count int64, err error) {
|
||||
result, err = d.Offset(offset).Limit(limit).Find()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if size := len(result); 0 < limit && 0 < size && size < limit {
|
||||
count = int64(size + offset)
|
||||
return
|
||||
}
|
||||
|
||||
count, err = d.Offset(-1).Limit(-1).Count()
|
||||
return
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) {
|
||||
count, err = d.Count()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
err = d.Offset(offset).Limit(limit).Scan(result)
|
||||
return
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Scan(result interface{}) (err error) {
|
||||
return d.DO.Scan(result)
|
||||
}
|
||||
|
||||
func (d dnsDomainDo) Delete(models ...*model.DnsDomain) (result gen.ResultInfo, err error) {
|
||||
return d.DO.Delete(models)
|
||||
}
|
||||
|
||||
func (d *dnsDomainDo) withDO(do gen.Dao) *dnsDomainDo {
|
||||
d.DO = *do.(*gen.DO)
|
||||
return d
|
||||
}
|
||||
@@ -25,6 +25,7 @@ var (
|
||||
Config *config
|
||||
ConfigBackup *configBackup
|
||||
DnsCredential *dnsCredential
|
||||
DnsDomain *dnsDomain
|
||||
ExternalNotify *externalNotify
|
||||
LLMSession *lLMSession
|
||||
Namespace *namespace
|
||||
@@ -49,6 +50,7 @@ func SetDefault(db *gorm.DB, opts ...gen.DOOption) {
|
||||
Config = &Q.Config
|
||||
ConfigBackup = &Q.ConfigBackup
|
||||
DnsCredential = &Q.DnsCredential
|
||||
DnsDomain = &Q.DnsDomain
|
||||
ExternalNotify = &Q.ExternalNotify
|
||||
LLMSession = &Q.LLMSession
|
||||
Namespace = &Q.Namespace
|
||||
@@ -74,6 +76,7 @@ func Use(db *gorm.DB, opts ...gen.DOOption) *Query {
|
||||
Config: newConfig(db, opts...),
|
||||
ConfigBackup: newConfigBackup(db, opts...),
|
||||
DnsCredential: newDnsCredential(db, opts...),
|
||||
DnsDomain: newDnsDomain(db, opts...),
|
||||
ExternalNotify: newExternalNotify(db, opts...),
|
||||
LLMSession: newLLMSession(db, opts...),
|
||||
Namespace: newNamespace(db, opts...),
|
||||
@@ -100,6 +103,7 @@ type Query struct {
|
||||
Config config
|
||||
ConfigBackup configBackup
|
||||
DnsCredential dnsCredential
|
||||
DnsDomain dnsDomain
|
||||
ExternalNotify externalNotify
|
||||
LLMSession lLMSession
|
||||
Namespace namespace
|
||||
@@ -127,6 +131,7 @@ func (q *Query) clone(db *gorm.DB) *Query {
|
||||
Config: q.Config.clone(db),
|
||||
ConfigBackup: q.ConfigBackup.clone(db),
|
||||
DnsCredential: q.DnsCredential.clone(db),
|
||||
DnsDomain: q.DnsDomain.clone(db),
|
||||
ExternalNotify: q.ExternalNotify.clone(db),
|
||||
LLMSession: q.LLMSession.clone(db),
|
||||
Namespace: q.Namespace.clone(db),
|
||||
@@ -161,6 +166,7 @@ func (q *Query) ReplaceDB(db *gorm.DB) *Query {
|
||||
Config: q.Config.replaceDB(db),
|
||||
ConfigBackup: q.ConfigBackup.replaceDB(db),
|
||||
DnsCredential: q.DnsCredential.replaceDB(db),
|
||||
DnsDomain: q.DnsDomain.replaceDB(db),
|
||||
ExternalNotify: q.ExternalNotify.replaceDB(db),
|
||||
LLMSession: q.LLMSession.replaceDB(db),
|
||||
Namespace: q.Namespace.replaceDB(db),
|
||||
@@ -185,6 +191,7 @@ type queryCtx struct {
|
||||
Config *configDo
|
||||
ConfigBackup *configBackupDo
|
||||
DnsCredential *dnsCredentialDo
|
||||
DnsDomain *dnsDomainDo
|
||||
ExternalNotify *externalNotifyDo
|
||||
LLMSession *lLMSessionDo
|
||||
Namespace *namespaceDo
|
||||
@@ -209,6 +216,7 @@ func (q *Query) WithContext(ctx context.Context) *queryCtx {
|
||||
Config: q.Config.WithContext(ctx),
|
||||
ConfigBackup: q.ConfigBackup.WithContext(ctx),
|
||||
DnsCredential: q.DnsCredential.WithContext(ctx),
|
||||
DnsDomain: q.DnsDomain.WithContext(ctx),
|
||||
ExternalNotify: q.ExternalNotify.WithContext(ctx),
|
||||
LLMSession: q.LLMSession.WithContext(ctx),
|
||||
Namespace: q.Namespace.WithContext(ctx),
|
||||
|
||||
@@ -10,6 +10,7 @@ import (
|
||||
"github.com/0xJacky/Nginx-UI/api/cluster"
|
||||
"github.com/0xJacky/Nginx-UI/api/config"
|
||||
"github.com/0xJacky/Nginx-UI/api/crypto"
|
||||
dnsapi "github.com/0xJacky/Nginx-UI/api/dns"
|
||||
"github.com/0xJacky/Nginx-UI/api/event"
|
||||
"github.com/0xJacky/Nginx-UI/api/external_notify"
|
||||
"github.com/0xJacky/Nginx-UI/api/geolite"
|
||||
@@ -89,6 +90,7 @@ func InitRouter() {
|
||||
certificate.InitCertificateRouter(g)
|
||||
certificate.InitDNSCredentialRouter(g)
|
||||
certificate.InitAcmeUserRouter(g)
|
||||
dnsapi.InitRouter(g)
|
||||
system.InitPrivateRouter(g)
|
||||
settings.InitRouter(g)
|
||||
llm.InitRouter(g)
|
||||
|
||||
Reference in New Issue
Block a user