Compare commits

..

7 Commits

Author SHA1 Message Date
copilot-swe-agent[bot]
22d287f7a8 Use hardcoded labels instead of i18n translations for reverse proxy fields
Co-authored-by: mserico <140243407+mserico@users.noreply.github.com>
2026-02-15 17:57:27 +00:00
copilot-swe-agent[bot]
4e1c56e3cd Co-authored-by: mserico <140243407+mserico@users.noreply.github.com> 2026-02-15 17:42:41 +00:00
copilot-swe-agent[bot]
f48eccae98 Fix duplicate i18n keys by renaming to Proxy domain and Proxy SSL mode
Co-authored-by: mserico <140243407+mserico@users.noreply.github.com>
2026-02-15 17:42:03 +00:00
copilot-swe-agent[bot]
b4049e6cf4 Fix code review issues: use mediumtext for OtherDomains and remove redundant HTTP SSL mode
Co-authored-by: mserico <140243407+mserico@users.noreply.github.com>
2026-02-15 17:29:44 +00:00
copilot-swe-agent[bot]
91c17b4092 Initialize otherDomains array to prevent UI errors
Co-authored-by: mserico <140243407+mserico@users.noreply.github.com>
2026-02-15 17:26:37 +00:00
copilot-swe-agent[bot]
2cac433b9f Add reverse proxy fields to Application model and frontend
Co-authored-by: mserico <140243407+mserico@users.noreply.github.com>
2026-02-15 17:25:37 +00:00
copilot-swe-agent[bot]
ac21a6b3c9 Initial plan 2026-02-15 17:23:02 +00:00
51 changed files with 476 additions and 233 deletions

View File

@@ -1,5 +1,5 @@
<h1 align="center" style="border-bottom: none;">📦⚡️ Casdoor</h1>
<h3 align="center">An open-source AI-first Identity and Access Management (IAM) /AI MCP gateway and auth server with web UI supporting MCP, A2A, OAuth 2.1, OIDC, SAML, CAS, LDAP, SCIM, WebAuthn, TOTP, MFA, Face ID, Google Workspace, Azure AD</h3>
<h3 align="center">An open-source UI-first Identity and Access Management (IAM) / Single-Sign-On (SSO) platform with web UI supporting OAuth 2.0, OIDC, SAML, CAS, LDAP, SCIM, WebAuthn, TOTP, MFA and RADIUS</h3>
<p align="center">
<a href="#badge">
<img alt="semantic-release" src="https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg">

View File

@@ -739,11 +739,7 @@ func (c *ApiController) Login() {
}
} else if provider.Category == "OAuth" || provider.Category == "Web3" {
// OAuth
idpInfo, err := object.FromProviderToIdpInfo(c.Ctx, provider)
if err != nil {
c.ResponseError(err.Error())
return
}
idpInfo := object.FromProviderToIdpInfo(c.Ctx, provider)
idpInfo.CodeVerifier = authForm.CodeVerifier
var idProvider idp.IdProvider
idProvider, err = idp.GetIdProvider(idpInfo, authForm.RedirectUri)

View File

@@ -109,6 +109,7 @@
"Insufficient balance: new balance %v would be below credit limit %v": "Unzureichendes Guthaben: neues Guthaben %v wäre unter dem Kreditlimit %v",
"Insufficient balance: new organization balance %v would be below credit limit %v": "Unzureichendes Guthaben: neues Organisationsguthaben %v wäre unter dem Kreditlimit %v",
"Missing parameter": "Fehlender Parameter",
"Multiple captcha providers are not allowed in the same application: %s": "Multiple captcha providers are not allowed in the same application: %s",
"Only admin user can specify user": "Nur Administrator kann Benutzer angeben",
"Please login first": "Bitte zuerst einloggen",
"The LDAP: %s does not exist": "Das LDAP: %s existiert nicht",

View File

@@ -109,6 +109,7 @@
"Insufficient balance: new balance %v would be below credit limit %v": "Insufficient balance: new balance %v would be below credit limit %v",
"Insufficient balance: new organization balance %v would be below credit limit %v": "Insufficient balance: new organization balance %v would be below credit limit %v",
"Missing parameter": "Missing parameter",
"Multiple captcha providers are not allowed in the same application: %s": "Multiple captcha providers are not allowed in the same application: %s",
"Only admin user can specify user": "Only admin user can specify user",
"Please login first": "Please login first",
"The LDAP: %s does not exist": "The LDAP: %s does not exist",

View File

@@ -109,6 +109,7 @@
"Insufficient balance: new balance %v would be below credit limit %v": "Saldo insuficiente: el nuevo saldo %v estaría por debajo del límite de crédito %v",
"Insufficient balance: new organization balance %v would be below credit limit %v": "Saldo insuficiente: el nuevo saldo de la organización %v estaría por debajo del límite de crédito %v",
"Missing parameter": "Parámetro faltante",
"Multiple captcha providers are not allowed in the same application: %s": "Multiple captcha providers are not allowed in the same application: %s",
"Only admin user can specify user": "Solo el usuario administrador puede especificar usuario",
"Please login first": "Por favor, inicia sesión primero",
"The LDAP: %s does not exist": "El LDAP: %s no existe",

View File

@@ -109,6 +109,7 @@
"Insufficient balance: new balance %v would be below credit limit %v": "Solde insuffisant : le nouveau solde %v serait inférieur à la limite de crédit %v",
"Insufficient balance: new organization balance %v would be below credit limit %v": "Solde insuffisant : le nouveau solde de l'organisation %v serait inférieur à la limite de crédit %v",
"Missing parameter": "Paramètre manquant",
"Multiple captcha providers are not allowed in the same application: %s": "Multiple captcha providers are not allowed in the same application: %s",
"Only admin user can specify user": "Seul un administrateur peut désigner un utilisateur",
"Please login first": "Veuillez d'abord vous connecter",
"The LDAP: %s does not exist": "Le LDAP : %s n'existe pas",

View File

@@ -109,6 +109,7 @@
"Insufficient balance: new balance %v would be below credit limit %v": "残高不足:新しい残高 %v がクレジット制限 %v を下回ります",
"Insufficient balance: new organization balance %v would be below credit limit %v": "残高不足:新しい組織残高 %v がクレジット制限 %v を下回ります",
"Missing parameter": "不足しているパラメーター",
"Multiple captcha providers are not allowed in the same application: %s": "Multiple captcha providers are not allowed in the same application: %s",
"Only admin user can specify user": "管理者ユーザーのみがユーザーを指定できます",
"Please login first": "最初にログインしてください",
"The LDAP: %s does not exist": "LDAP%s は存在しません",

View File

@@ -109,6 +109,7 @@
"Insufficient balance: new balance %v would be below credit limit %v": "Niewystarczające saldo: nowe saldo %v byłoby poniżej limitu kredytowego %v",
"Insufficient balance: new organization balance %v would be below credit limit %v": "Niewystarczające saldo: nowe saldo organizacji %v byłoby poniżej limitu kredytowego %v",
"Missing parameter": "Brakujący parametr",
"Multiple captcha providers are not allowed in the same application: %s": "Multiple captcha providers are not allowed in the same application: %s",
"Only admin user can specify user": "Tylko administrator może wskazać użytkownika",
"Please login first": "Najpierw się zaloguj",
"The LDAP: %s does not exist": "LDAP: %s nie istnieje",

View File

@@ -109,6 +109,7 @@
"Insufficient balance: new balance %v would be below credit limit %v": "Saldo insuficiente: o novo saldo %v estaria abaixo do limite de crédito %v",
"Insufficient balance: new organization balance %v would be below credit limit %v": "Saldo insuficiente: o novo saldo da organização %v estaria abaixo do limite de crédito %v",
"Missing parameter": "Parâmetro ausente",
"Multiple captcha providers are not allowed in the same application: %s": "Multiple captcha providers are not allowed in the same application: %s",
"Only admin user can specify user": "Apenas um administrador pode especificar um usuário",
"Please login first": "Por favor, faça login primeiro",
"The LDAP: %s does not exist": "O LDAP: %s não existe",

View File

@@ -109,6 +109,7 @@
"Insufficient balance: new balance %v would be below credit limit %v": "Yetersiz bakiye: yeni bakiye %v kredi limitinin altında olacak %v",
"Insufficient balance: new organization balance %v would be below credit limit %v": "Yetersiz bakiye: yeni organizasyon bakiyesi %v kredi limitinin altında olacak %v",
"Missing parameter": "Eksik parametre",
"Multiple captcha providers are not allowed in the same application: %s": "Multiple captcha providers are not allowed in the same application: %s",
"Only admin user can specify user": "Yalnızca yönetici kullanıcı kullanıcı belirleyebilir",
"Please login first": "Lütfen önce giriş yapın",
"The LDAP: %s does not exist": "LDAP: %s mevcut değil",

View File

@@ -109,6 +109,7 @@
"Insufficient balance: new balance %v would be below credit limit %v": "Недостатній баланс: новий баланс %v буде нижче кредитного ліміту %v",
"Insufficient balance: new organization balance %v would be below credit limit %v": "Недостатній баланс: новий баланс організації %v буде нижче кредитного ліміту %v",
"Missing parameter": "Відсутній параметр",
"Multiple captcha providers are not allowed in the same application: %s": "Multiple captcha providers are not allowed in the same application: %s",
"Only admin user can specify user": "Лише адміністратор може вказати користувача",
"Please login first": "Спочатку увійдіть",
"The LDAP: %s does not exist": "LDAP: %s не існує",

View File

@@ -109,6 +109,7 @@
"Insufficient balance: new balance %v would be below credit limit %v": "Số dư không đủ: số dư mới %v sẽ thấp hơn giới hạn tín dụng %v",
"Insufficient balance: new organization balance %v would be below credit limit %v": "Số dư không đủ: số dư tổ chức mới %v sẽ thấp hơn giới hạn tín dụng %v",
"Missing parameter": "Thiếu tham số",
"Multiple captcha providers are not allowed in the same application: %s": "Multiple captcha providers are not allowed in the same application: %s",
"Only admin user can specify user": "Chỉ người dùng quản trị mới có thể chỉ định người dùng",
"Please login first": "Vui lòng đăng nhập trước",
"The LDAP: %s does not exist": "LDAP: %s không tồn tại",

View File

@@ -109,6 +109,7 @@
"Insufficient balance: new balance %v would be below credit limit %v": "余额不足:新余额 %v 将低于信用限额 %v",
"Insufficient balance: new organization balance %v would be below credit limit %v": "余额不足:新组织余额 %v 将低于信用限额 %v",
"Missing parameter": "缺少参数",
"Multiple captcha providers are not allowed in the same application: %s": "Multiple captcha providers are not allowed in the same application: %s",
"Only admin user can specify user": "仅管理员用户可以指定用户",
"Please login first": "请先登录",
"The LDAP: %s does not exist": "LDAP: %s 不存在",

View File

@@ -264,31 +264,27 @@ func rsaSignWithRSA256(signContent string, privateKey string) (string, error) {
// privateKey in database is a string, format it to PEM style
func formatPrivateKey(privateKey string) string {
// Check if the key is already in PEM format
if strings.HasPrefix(privateKey, "-----BEGIN PRIVATE KEY-----") ||
strings.HasPrefix(privateKey, "-----BEGIN RSA PRIVATE KEY-----") {
// Key is already in PEM format, return as is
return privateKey
}
// Remove any whitespace from the key
privateKey = strings.ReplaceAll(privateKey, "\n", "")
privateKey = strings.ReplaceAll(privateKey, "\r", "")
privateKey = strings.ReplaceAll(privateKey, " ", "")
// Format the key with line breaks every 64 characters using strings.Builder
var builder strings.Builder
for i := 0; i < len(privateKey); i += 64 {
end := i + 64
if end > len(privateKey) {
end = len(privateKey)
}
builder.WriteString(privateKey[i:end])
if end < len(privateKey) {
builder.WriteString("\n")
// each line length is 64
preFmtPrivateKey := ""
for i := 0; ; {
if i+64 <= len(privateKey) {
preFmtPrivateKey = preFmtPrivateKey + privateKey[i:i+64] + "\n"
i += 64
} else {
preFmtPrivateKey = preFmtPrivateKey + privateKey[i:]
break
}
}
privateKey = strings.Trim(preFmtPrivateKey, "\n")
// add pkcs#8 BEGIN and END
return "-----BEGIN PRIVATE KEY-----\n" + builder.String() + "\n-----END PRIVATE KEY-----"
PemBegin := "-----BEGIN PRIVATE KEY-----\n"
PemEnd := "\n-----END PRIVATE KEY-----"
if !strings.HasPrefix(privateKey, PemBegin) {
privateKey = PemBegin + privateKey
}
if !strings.HasSuffix(privateKey, PemEnd) {
privateKey = privateKey + PemEnd
}
return privateKey
}

View File

@@ -67,8 +67,6 @@
{"name": "ID", "visible": true, "viewRule": "Public", "modifyRule": "Immutable"},
{"name": "Name", "visible": true, "viewRule": "Public", "modifyRule": "Admin"},
{"name": "Display name", "visible": true, "viewRule": "Public", "modifyRule": "Self"},
{"name": "First name", "visible": true, "viewRule": "Public", "modifyRule": "Self"},
{"name": "Last name", "visible": true, "viewRule": "Public", "modifyRule": "Self"},
{"name": "Avatar", "visible": true, "viewRule": "Public", "modifyRule": "Self"},
{"name": "User type", "visible": true, "viewRule": "Public", "modifyRule": "Admin"},
{"name": "Password", "visible": true, "viewRule": "Self", "modifyRule": "Self"},
@@ -83,7 +81,6 @@
{"name": "Title", "visible": true, "viewRule": "Public", "modifyRule": "Self"},
{"name": "ID card type", "visible": true, "viewRule": "Public", "modifyRule": "Self"},
{"name": "ID card", "visible": true, "viewRule": "Public", "modifyRule": "Self"},
{"name": "ID card info", "visible": true, "viewRule": "Self", "modifyRule": "Self"},
{"name": "Real name", "visible": true, "viewRule": "Public", "modifyRule": "Self"},
{"name": "ID verification", "visible": true, "viewRule": "Self", "modifyRule": "Self"},
{"name": "Homepage", "visible": true, "viewRule": "Public", "modifyRule": "Self"},
@@ -104,7 +101,6 @@
{"name": "Signup application", "visible": true, "viewRule": "Public", "modifyRule": "Admin"},
{"name": "Register type", "visible": true, "viewRule": "Public", "modifyRule": "Admin"},
{"name": "Register source", "visible": true, "viewRule": "Public", "modifyRule": "Admin"},
{"name": "API key", "visible": true, "viewRule": "Self", "modifyRule": "Self"},
{"name": "Roles", "visible": true, "viewRule": "Public", "modifyRule": "Immutable"},
{"name": "Permissions", "visible": true, "viewRule": "Public", "modifyRule": "Immutable"},
{"name": "Groups", "visible": true, "viewRule": "Public", "modifyRule": "Admin"},
@@ -114,14 +110,9 @@
{"name": "Is forbidden", "visible": true, "viewRule": "Admin", "modifyRule": "Admin"},
{"name": "Is deleted", "visible": true, "viewRule": "Admin", "modifyRule": "Admin"},
{"name": "Multi-factor authentication", "visible": true, "viewRule": "Self", "modifyRule": "Self"},
{"name": "MFA items", "visible": true, "viewRule": "Self", "modifyRule": "Self"},
{"name": "WebAuthn credentials", "visible": true, "viewRule": "Self", "modifyRule": "Self"},
{"name": "Last change password time", "visible": true, "viewRule": "Admin", "modifyRule": "Admin"},
{"name": "Managed accounts", "visible": true, "viewRule": "Self", "modifyRule": "Self"},
{"name": "Face ID", "visible": true, "viewRule": "Self", "modifyRule": "Self"},
{"name": "MFA accounts", "visible": true, "viewRule": "Self", "modifyRule": "Self"},
{"name": "Need update password", "visible": true, "viewRule": "Admin", "modifyRule": "Admin"},
{"name": "IP whitelist", "visible": true, "viewRule": "Admin", "modifyRule": "Admin"}
{"name": "MFA accounts", "visible": true, "viewRule": "Self", "modifyRule": "Self"}
]
}
],

View File

@@ -155,9 +155,9 @@ type Application struct {
FailedSigninFrozenTime int `json:"failedSigninFrozenTime"`
CodeResendTimeout int `json:"codeResendTimeout"`
// Reverse proxy fields
// Reverse Proxy fields
Domain string `xorm:"varchar(100)" json:"domain"`
OtherDomains []string `xorm:"varchar(1000)" json:"otherDomains"`
OtherDomains []string `xorm:"mediumtext" json:"otherDomains"`
UpstreamHost string `xorm:"varchar(100)" json:"upstreamHost"`
SslMode string `xorm:"varchar(100)" json:"sslMode"`
SslCert string `xorm:"varchar(100)" json:"sslCert"`

View File

@@ -53,8 +53,6 @@ func getBuiltInAccountItems() []*AccountItem {
{Name: "ID", Visible: true, ViewRule: "Public", ModifyRule: "Immutable"},
{Name: "Name", Visible: true, ViewRule: "Public", ModifyRule: "Admin"},
{Name: "Display name", Visible: true, ViewRule: "Public", ModifyRule: "Self"},
{Name: "First name", Visible: true, ViewRule: "Public", ModifyRule: "Self"},
{Name: "Last name", Visible: true, ViewRule: "Public", ModifyRule: "Self"},
{Name: "Avatar", Visible: true, ViewRule: "Public", ModifyRule: "Self"},
{Name: "User type", Visible: true, ViewRule: "Public", ModifyRule: "Admin"},
{Name: "Password", Visible: true, ViewRule: "Self", ModifyRule: "Self"},
@@ -69,7 +67,6 @@ func getBuiltInAccountItems() []*AccountItem {
{Name: "Title", Visible: true, ViewRule: "Public", ModifyRule: "Self"},
{Name: "ID card type", Visible: true, ViewRule: "Public", ModifyRule: "Self"},
{Name: "ID card", Visible: true, ViewRule: "Public", ModifyRule: "Self"},
{Name: "ID card info", Visible: true, ViewRule: "Self", ModifyRule: "Self"},
{Name: "Real name", Visible: true, ViewRule: "Public", ModifyRule: "Self"},
{Name: "ID verification", Visible: true, ViewRule: "Self", ModifyRule: "Self"},
{Name: "Homepage", Visible: true, ViewRule: "Public", ModifyRule: "Self"},
@@ -90,7 +87,6 @@ func getBuiltInAccountItems() []*AccountItem {
{Name: "Signup application", Visible: true, ViewRule: "Public", ModifyRule: "Admin"},
{Name: "Register type", Visible: true, ViewRule: "Public", ModifyRule: "Admin"},
{Name: "Register source", Visible: true, ViewRule: "Public", ModifyRule: "Admin"},
{Name: "API key", Visible: true, ViewRule: "Self", ModifyRule: "Self"},
{Name: "Roles", Visible: true, ViewRule: "Public", ModifyRule: "Immutable"},
{Name: "Permissions", Visible: true, ViewRule: "Public", ModifyRule: "Immutable"},
{Name: "Groups", Visible: true, ViewRule: "Public", ModifyRule: "Admin"},
@@ -100,14 +96,9 @@ func getBuiltInAccountItems() []*AccountItem {
{Name: "Is forbidden", Visible: true, ViewRule: "Admin", ModifyRule: "Admin"},
{Name: "Is deleted", Visible: true, ViewRule: "Admin", ModifyRule: "Admin"},
{Name: "Multi-factor authentication", Visible: true, ViewRule: "Self", ModifyRule: "Self"},
{Name: "MFA items", Visible: true, ViewRule: "Self", ModifyRule: "Self"},
{Name: "WebAuthn credentials", Visible: true, ViewRule: "Self", ModifyRule: "Self"},
{Name: "Last change password time", Visible: true, ViewRule: "Admin", ModifyRule: "Admin"},
{Name: "Managed accounts", Visible: true, ViewRule: "Self", ModifyRule: "Self"},
{Name: "Face ID", Visible: true, ViewRule: "Self", ModifyRule: "Self"},
{Name: "MFA accounts", Visible: true, ViewRule: "Self", ModifyRule: "Self"},
{Name: "Need update password", Visible: true, ViewRule: "Admin", ModifyRule: "Admin"},
{Name: "IP whitelist", Visible: true, ViewRule: "Admin", ModifyRule: "Admin"},
}
}

View File

@@ -62,12 +62,6 @@ func InitFlag() {
configPath = *configPathPtr
exportData = *exportDataPtr
exportFilePath = *exportFilePathPtr
// Load beego config from the specified config path
err := web.LoadAppConfig("ini", configPath)
if err != nil {
panic(fmt.Sprintf("failed to load config from %s: %v", configPath, err))
}
}
func ShouldExportData() bool {

View File

@@ -33,8 +33,6 @@ type Payment struct {
// Product Info
Products []string `xorm:"varchar(1000)" json:"products"`
ProductsDisplayName string `xorm:"varchar(1000)" json:"productsDisplayName"`
ProductName string `xorm:"varchar(1000)" json:"productName"`
ProductDisplayName string `xorm:"varchar(1000)" json:"productDisplayName"`
Detail string `xorm:"varchar(255)" json:"detail"`
Currency string `xorm:"varchar(100)" json:"currency"`
Price float64 `json:"price"`

View File

@@ -564,7 +564,7 @@ func providerChangeTrigger(oldName string, newName string) error {
return session.Commit()
}
func FromProviderToIdpInfo(ctx *context.Context, provider *Provider) (*idp.ProviderInfo, error) {
func FromProviderToIdpInfo(ctx *context.Context, provider *Provider) *idp.ProviderInfo {
providerInfo := &idp.ProviderInfo{
Type: provider.Type,
SubType: provider.SubType,
@@ -588,19 +588,9 @@ func FromProviderToIdpInfo(ctx *context.Context, provider *Provider) (*idp.Provi
}
} else if provider.Type == "ADFS" || provider.Type == "AzureAD" || provider.Type == "AzureADB2C" || provider.Type == "Casdoor" || provider.Type == "Okta" {
providerInfo.HostUrl = provider.Domain
} else if provider.Type == "Alipay" && provider.Cert != "" {
// For Alipay with certificate mode, load private key from certificate
cert, err := GetCert(util.GetId(provider.Owner, provider.Cert))
if err != nil {
return nil, fmt.Errorf("failed to load certificate for Alipay provider %s: %w", provider.Name, err)
}
if cert == nil {
return nil, fmt.Errorf("certificate not found for Alipay provider %s", provider.Name)
}
providerInfo.ClientSecret = cert.PrivateKey
}
return providerInfo, nil
return providerInfo
}
func GetIdvProviderFromProvider(provider *Provider) idv.IdvProvider {

View File

@@ -158,7 +158,7 @@ class AdapterEditPage extends React.Component {
<React.Fragment>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("general:Type"), i18next.t("general:Type - Tooltip"))} :
{Setting.getLabel(i18next.t("general:Type"), i18next.t("cert:Type - Tooltip"))} :
</Col>
<Col span={22} >
<Select virtual={false} disabled={Setting.builtInObject(this.state.adapter)} style={{width: "100%"}} value={this.state.adapter.type} onChange={(value => {

View File

@@ -175,6 +175,10 @@ class ApplicationEditPage extends React.Component {
application.tags = [];
}
if (application.otherDomains === null || application.otherDomains === undefined) {
application.otherDomains = [];
}
this.setState({
application: application,
});
@@ -1378,44 +1382,47 @@ class ApplicationEditPage extends React.Component {
<React.Fragment>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 3}>
{Setting.getLabel(i18next.t("provider:Domain"), i18next.t("provider:Domain - Tooltip"))} :
{Setting.getLabel("Domain", "The public-facing domain for this application (e.g., blog.example.com)")} :
</Col>
<Col span={21} >
<Input value={this.state.application.domain} placeholder="e.g., blog.example.com" onChange={e => {
<Input value={this.state.application.domain} placeholder="blog.example.com" onChange={e => {
this.updateApplicationField("domain", e.target.value);
}} />
</Col>
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 3}>
{Setting.getLabel(i18next.t("application:Other domains"), i18next.t("application:Other domains - Tooltip"))} :
{Setting.getLabel("Other domains", "Additional domains that should also route to this application")} :
</Col>
<Col span={21} >
<UrlTable
title={i18next.t("application:Other domains")}
table={this.state.application.otherDomains}
onUpdateTable={(value) => {this.updateApplicationField("otherDomains", value);}}
<Select
mode="tags"
style={{width: "100%"}}
value={this.state.application.otherDomains}
onChange={(value) => {
this.updateApplicationField("otherDomains", value);
}}
placeholder="Please input additional domains"
/>
</Col>
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 3}>
{Setting.getLabel(i18next.t("application:Upstream host"), i18next.t("application:Upstream host - Tooltip"))} :
{Setting.getLabel("Upstream host", "The upstream backend address to forward requests to (e.g., localhost:8080 or 192.168.1.100)")} :
</Col>
<Col span={21} >
<Input value={this.state.application.upstreamHost} placeholder="e.g., localhost:8080 or 192.168.1.100:3000" onChange={e => {
<Input value={this.state.application.upstreamHost} placeholder="localhost:8080" onChange={e => {
this.updateApplicationField("upstreamHost", e.target.value);
}} />
</Col>
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 3}>
{Setting.getLabel(i18next.t("provider:SSL mode"), i18next.t("provider:SSL mode - Tooltip"))} :
{Setting.getLabel("SSL mode", "SSL/TLS mode for the reverse proxy")} :
</Col>
<Col span={21} >
<Select virtual={false} style={{width: "100%"}} value={this.state.application.sslMode} onChange={(value => {this.updateApplicationField("sslMode", value);})}>
<Option value="">{i18next.t("general:None")}</Option>
<Option value="HTTP">HTTP</Option>
<Option value="HTTPS and HTTP">HTTPS and HTTP</Option>
<Option value="HTTPS Only">HTTPS Only</Option>
</Select>
@@ -1423,7 +1430,7 @@ class ApplicationEditPage extends React.Component {
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 3}>
{Setting.getLabel(i18next.t("application:SSL cert"), i18next.t("application:SSL cert - Tooltip"))} :
{Setting.getLabel("SSL cert", "Certificate to use for TLS termination")} :
</Col>
<Col span={21} >
<Select virtual={false} style={{width: "100%"}} value={this.state.application.sslCert} onChange={(value => {this.updateApplicationField("sslCert", value);})}>
@@ -1467,7 +1474,7 @@ class ApplicationEditPage extends React.Component {
{label: i18next.t("application:Providers"), key: "providers"},
{label: i18next.t("application:UI Customization"), key: "ui-customization"},
{label: i18next.t("application:Security"), key: "security"},
{label: i18next.t("application:Reverse Proxy"), key: "reverse-proxy"},
{label: "Reverse Proxy", key: "reverse-proxy"},
]}
/>
</Header>
@@ -1491,7 +1498,7 @@ class ApplicationEditPage extends React.Component {
<Menu.Item key="providers">{i18next.t("application:Providers")}</Menu.Item>
<Menu.Item key="ui-customization">{i18next.t("application:UI Customization")}</Menu.Item>
<Menu.Item key="security">{i18next.t("application:Security")}</Menu.Item>
<Menu.Item key="reverse-proxy">{i18next.t("application:Reverse Proxy")}</Menu.Item>
<Menu.Item key="reverse-proxy">Reverse Proxy</Menu.Item>
</Menu>
</Sider>) : null
}

View File

@@ -190,15 +190,19 @@ class ApplicationListPage extends BaseListPage {
sorter: true,
...this.getColumnSearchProps("category"),
render: (text, record, index) => {
if (!text) {
text = "Default";
}
if (text === "Agent") {
return Setting.getTag("success", text);
} else {
return Setting.getTag("default", text);
}
const category = text;
const tagColor = category === "Agent" ? "green" : "blue";
return (
<span style={{
padding: "4px 8px",
borderRadius: "4px",
backgroundColor: tagColor,
color: "white",
fontWeight: "500",
}}>
{category}
</span>
);
},
},
{

View File

@@ -133,7 +133,7 @@ class CertEditPage extends React.Component {
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("provider:Scope"), i18next.t("provider:Scope - Tooltip"))} :
{Setting.getLabel(i18next.t("provider:Scope"), i18next.t("cert:Scope - Tooltip"))} :
</Col>
<Col span={22} >
<Select virtual={false} style={{width: "100%"}} value={this.state.cert.scope} onChange={(value => {
@@ -149,7 +149,7 @@ class CertEditPage extends React.Component {
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("general:Type"), i18next.t("general:Type - Tooltip"))} :
{Setting.getLabel(i18next.t("general:Type"), i18next.t("cert:Type - Tooltip"))} :
</Col>
<Col span={22} >
<Select virtual={false} style={{width: "100%"}} value={this.state.cert.type} onChange={(value => {

View File

@@ -93,7 +93,7 @@ class FormEditPage extends React.Component {
</Row>
<Row style={{marginTop: "20px"}}>
<Col style={{marginTop: "5px"}} span={Setting.isMobile() ? 22 : 2}>
{Setting.getLabel(i18next.t("general:Type"), i18next.t("general:Type - Tooltip"))} :
{Setting.getLabel(i18next.t("general:Type"), i18next.t("cert:Type - Tooltip"))} :
</Col>
<Col span={22}>
<Select

View File

@@ -148,7 +148,7 @@ class GroupEditPage extends React.Component {
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("general:Type"), i18next.t("general:Type - Tooltip"))} :
{Setting.getLabel(i18next.t("general:Type"), i18next.t("cert:Type - Tooltip"))} :
</Col>
<Col span={22} >
<Select style={{width: "100%"}}

View File

@@ -57,8 +57,6 @@ class OrganizationListPage extends BaseListPage {
{name: "ID", visible: true, viewRule: "Public", modifyRule: "Immutable"},
{name: "Name", visible: true, viewRule: "Public", modifyRule: "Admin"},
{name: "Display name", visible: true, viewRule: "Public", modifyRule: "Self"},
{name: "First name", visible: true, viewRule: "Public", modifyRule: "Self"},
{name: "Last name", visible: true, viewRule: "Public", modifyRule: "Self"},
{name: "Avatar", visible: true, viewRule: "Public", modifyRule: "Self"},
{name: "User type", visible: true, viewRule: "Public", modifyRule: "Admin"},
{name: "Password", visible: true, viewRule: "Self", modifyRule: "Self"},
@@ -68,7 +66,6 @@ class OrganizationListPage extends BaseListPage {
{name: "Country/Region", visible: true, viewRule: "Public", modifyRule: "Self"},
{name: "Location", visible: true, viewRule: "Public", modifyRule: "Self"},
{name: "Address", visible: true, viewRule: "Public", modifyRule: "Self"},
{name: "Addresses", visible: true, viewRule: "Public", modifyRule: "Self"},
{name: "Affiliation", visible: true, viewRule: "Public", modifyRule: "Self"},
{name: "Title", visible: true, viewRule: "Public", modifyRule: "Self"},
{name: "ID card type", visible: true, viewRule: "Public", modifyRule: "Self"},
@@ -89,8 +86,6 @@ class OrganizationListPage extends BaseListPage {
{name: "Balance", visible: true, viewRule: "Public", modifyRule: "Admin"},
{name: "Balance credit", visible: true, viewRule: "Public", modifyRule: "Admin"},
{name: "Balance currency", visible: true, viewRule: "Public", modifyRule: "Admin"},
{name: "Cart", visible: true, viewRule: "Self", modifyRule: "Self"},
{name: "Transactions", visible: true, viewRule: "Self", modifyRule: "Self"},
{name: "Signup application", visible: true, viewRule: "Public", modifyRule: "Admin"},
{name: "Register type", visible: true, viewRule: "Public", modifyRule: "Admin"},
{name: "Register source", visible: true, viewRule: "Public", modifyRule: "Admin"},
@@ -104,15 +99,10 @@ class OrganizationListPage extends BaseListPage {
{name: "Is admin", visible: true, viewRule: "Admin", modifyRule: "Admin"},
{name: "Is forbidden", visible: true, viewRule: "Admin", modifyRule: "Admin"},
{name: "Is deleted", visible: true, viewRule: "Admin", modifyRule: "Admin"},
{name: "Multi-factor authentication", visible: true, viewRule: "Self", modifyRule: "Self"},
{name: "MFA items", visible: true, viewRule: "Self", modifyRule: "Self"},
{name: "WebAuthn credentials", visible: true, viewRule: "Self", modifyRule: "Self"},
{name: "Last change password time", visible: true, viewRule: "Admin", modifyRule: "Admin"},
{name: "Managed accounts", visible: true, viewRule: "Self", modifyRule: "Self"},
{name: "Face ID", visible: true, viewRule: "Self", modifyRule: "Self"},
{name: "MFA accounts", visible: true, viewRule: "Self", modifyRule: "Self"},
{name: "Need update password", visible: true, viewRule: "Admin", modifyRule: "Admin"},
{name: "IP whitelist", visible: true, viewRule: "Admin", modifyRule: "Admin"},
{Name: "Multi-factor authentication", Visible: true, ViewRule: "Self", ModifyRule: "Self"},
{Name: "WebAuthn credentials", Visible: true, ViewRule: "Self", ModifyRule: "Self"},
{Name: "Managed accounts", Visible: true, ViewRule: "Self", ModifyRule: "Self"},
{Name: "MFA accounts", Visible: true, ViewRule: "Self", ModifyRule: "Self"},
],
};
}

View File

@@ -18,6 +18,7 @@ import {InfoCircleTwoTone} from "@ant-design/icons";
import * as PaymentBackend from "./backend/PaymentBackend";
import * as Setting from "./Setting";
import i18next from "i18next";
import * as ProductBackend from "./backend/ProductBackend";
const {Option} = Select;
@@ -29,6 +30,7 @@ class PaymentEditPage extends React.Component {
organizationName: props.organizationName !== undefined ? props.organizationName : props.match.params.organizationName,
paymentName: props.match.params.paymentName,
payment: null,
products: [],
isModalVisible: false,
isInvoiceLoading: false,
mode: props.location.mode !== undefined ? props.location.mode : "edit",
@@ -37,6 +39,7 @@ class PaymentEditPage extends React.Component {
UNSAFE_componentWillMount() {
this.getPayment();
this.getProducts();
}
getPayment() {
@@ -55,6 +58,19 @@ class PaymentEditPage extends React.Component {
});
}
getProducts() {
ProductBackend.getProducts(this.state.organizationName)
.then((res) => {
if (res.status === "ok") {
this.setState({
products: res.data,
});
} else {
Setting.showMessage("error", `Failed to get products: ${res.msg}`);
}
});
}
goToViewOrder() {
const payment = this.state.payment;
if (payment && payment.order) {
@@ -216,7 +232,7 @@ class PaymentEditPage extends React.Component {
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("general:Type"), i18next.t("general:Type - Tooltip"))} :
{Setting.getLabel(i18next.t("general:Type"), i18next.t("cert:Type - Tooltip"))} :
</Col>
<Col span={22} >
<Input disabled={true} value={this.state.payment.type} onChange={e => {
@@ -224,6 +240,29 @@ class PaymentEditPage extends React.Component {
}} />
</Col>
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("general:Products"), i18next.t("payment:Products - Tooltip"))} :
</Col>
<Col span={22} >
<Select
mode="multiple"
style={{width: "100%"}}
value={this.state.payment?.products || []}
disabled={isViewMode}
allowClear
options={(this.state.products || [])
.map((p) => ({
label: Setting.getLanguageText(p?.displayName) || p?.name,
value: p?.name,
}))
.filter((o) => o.value)}
onChange={(value) => {
this.updatePaymentField("products", value);
}}
/>
</Col>
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("order:Price"), i18next.t("plan:Price - Tooltip"))} :

View File

@@ -14,7 +14,7 @@
import React from "react";
import {Link} from "react-router-dom";
import {Button, Col, List, Row, Table, Tooltip} from "antd";
import {Button, List, Table, Tooltip} from "antd";
import moment from "moment";
import * as Setting from "./Setting";
import * as PaymentBackend from "./backend/PaymentBackend";
@@ -195,31 +195,21 @@ class PaymentListPage extends BaseListPage {
paddingBottom: 8,
}}
renderItem={(productInfo, i) => {
const price = productInfo.price || 0;
const number = productInfo.quantity || 1;
const price = productInfo.price * (productInfo.quantity || 1);
const currency = record.currency || "USD";
const productName = productInfo.displayName || productInfo.name;
return (
<List.Item>
<Row style={{width: "100%"}} wrap={false} gutter={[12, 0]}>
<Col flex="auto" style={{minWidth: 0}}>
<div style={{display: "flex", alignItems: "center", minWidth: 0}}>
<Tooltip placement="topLeft" title={i18next.t("general:Edit")}>
<Button style={{marginRight: "5px"}} icon={<EditOutlined />} size="small" onClick={() => Setting.goToLinkSoft(this, `/products/${record.owner}/${productInfo.name}`)} />
</Tooltip>
<Tooltip placement="topLeft" title={productName}>
<Link to={`/products/${record.owner}/${productInfo.name}`} style={{display: "inline-block", maxWidth: "100%", minWidth: 0, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap"}}>
{productName}
</Link>
</Tooltip>
</div>
</Col>
<Col flex="none" style={{whiteSpace: "nowrap"}}>
<span style={{color: "#666"}}>
{Setting.getCurrencySymbol(currency)}{price} ({Setting.getCurrencyText(currency)}) × {number}
</span>
</Col>
</Row>
<div style={{display: "inline"}}>
<Tooltip placement="topLeft" title={i18next.t("general:Edit")}>
<Button style={{marginRight: "5px"}} icon={<EditOutlined />} size="small" onClick={() => Setting.goToLinkSoft(this, `/products/${record.owner}/${productInfo.name}`)} />
</Tooltip>
<Link to={`/products/${record.owner}/${productInfo.name}`}>
{productInfo.displayName || productInfo.name}
</Link>
<span style={{marginLeft: "8px", color: "#666"}}>
{Setting.getPriceDisplay(price, currency)}
</span>
</div>
</List.Item>
);
}}

View File

@@ -309,7 +309,7 @@ class PermissionEditPage extends React.Component {
}
const data = res.data.map((role) => Setting.getOption(`${role.owner}/${role.name}`, `${role.owner}/${role.name}`));
if (args?.[1] === 1 && Array.isArray(res?.data)) {
// res.data = [{owner: i18next.t("general:All"), name: "*"}, ...res.data];
// res.data = [{owner: i18next.t("organization:All"), name: "*"}, ...res.data];
res.data = [
Setting.getOption(i18next.t("general:All"), "*"),
...data,

View File

@@ -687,7 +687,7 @@ class ProviderEditPage extends React.Component {
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("general:Category"), i18next.t("general:Category - Tooltip"))} :
{Setting.getLabel(i18next.t("provider:Category"), i18next.t("provider:Category - Tooltip"))} :
</Col>
<Col span={22} >
<Select virtual={false} style={{width: "100%"}} value={this.state.provider.category} onChange={(value => {
@@ -751,7 +751,7 @@ class ProviderEditPage extends React.Component {
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("general:Type"), i18next.t("general:Type - Tooltip"))} :
{Setting.getLabel(i18next.t("general:Type"), i18next.t("cert:Type - Tooltip"))} :
</Col>
<Col span={22} >
<Select virtual={false} style={{width: "100%"}} showSearch value={this.state.provider.type} onChange={(value => {
@@ -893,7 +893,7 @@ class ProviderEditPage extends React.Component {
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("provider:Scope"), i18next.t("provider:Scope - Tooltip"))}
{Setting.getLabel(i18next.t("provider:Scope"), i18next.t("cert:Scope - Tooltip"))}
</Col>
<Col span={22} >
<Input value={this.state.provider.scopes} onChange={e => {
@@ -924,47 +924,41 @@ class ProviderEditPage extends React.Component {
</Col>
) : null
}
{
this.state.provider.type !== "Custom HTTP SMS" && this.state.provider.type !== "Custom HTTP Email" ? (
<React.Fragment>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("provider:User mapping"), i18next.t("provider:User mapping - Tooltip"))} :
</Col>
<Col span={22} >
{this.renderUserMappingInput()}
</Col>
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("general:Favicon"), i18next.t("general:Favicon - Tooltip"))} :
</Col>
<Col span={22} >
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 1}>
{Setting.getLabel(i18next.t("general:URL"), i18next.t("general:URL - Tooltip"))} :
</Col>
<Col span={23} >
<Input prefix={<LinkOutlined />} value={this.state.provider.customLogo} onChange={e => {
this.updateProviderField("customLogo", e.target.value);
}} />
</Col>
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 1}>
{i18next.t("general:Preview")}:
</Col>
<Col span={23} >
<a target="_blank" rel="noreferrer" href={this.state.provider.customLogo}>
<img src={this.state.provider.customLogo} alt={this.state.provider.customLogo} height={90} style={{marginBottom: "20px"}} />
</a>
</Col>
</Row>
</Col>
</Row>
</React.Fragment>
) : null
}
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("provider:User mapping"), i18next.t("provider:User mapping - Tooltip"))} :
</Col>
<Col span={22} >
{this.renderUserMappingInput()}
</Col>
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("general:Favicon"), i18next.t("general:Favicon - Tooltip"))} :
</Col>
<Col span={22} >
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 1}>
{Setting.getLabel(i18next.t("general:URL"), i18next.t("general:URL - Tooltip"))} :
</Col>
<Col span={23} >
<Input prefix={<LinkOutlined />} value={this.state.provider.customLogo} onChange={e => {
this.updateProviderField("customLogo", e.target.value);
}} />
</Col>
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 1}>
{i18next.t("general:Preview")}:
</Col>
<Col span={23} >
<a target="_blank" rel="noreferrer" href={this.state.provider.customLogo}>
<img src={this.state.provider.customLogo} alt={this.state.provider.customLogo} height={90} style={{marginBottom: "20px"}} />
</a>
</Col>
</Row>
</Col>
</Row>
</React.Fragment>
) : null
}
@@ -975,7 +969,7 @@ class ProviderEditPage extends React.Component {
(this.state.provider.category === "Storage" && this.state.provider.type === "Local File System") ||
(this.state.provider.category === "SMS" && this.state.provider.type === "Custom HTTP SMS") ||
(this.state.provider.category === "Email" && this.state.provider.type === "Custom HTTP Email") ||
(this.state.provider.category === "Notification" && (this.state.provider.type === "Google Chat" || this.state.provider.type === "Custom HTTP" || this.state.provider.type === "Balance")) ? null : (
(this.state.provider.category === "Notification" && (this.state.provider.type === "Google Chat" || this.state.provider.type === "Custom HTTP") || this.state.provider.type === "Balance") ? null : (
<React.Fragment>
{
(this.state.provider.category === "Storage" && this.state.provider.type === "Google Cloud Storage") ||
@@ -1103,7 +1097,7 @@ class ProviderEditPage extends React.Component {
)
}
{
this.state.provider.type !== "ADFS" && this.state.provider.type !== "AzureAD" && this.state.provider.type !== "AzureADB2C" && (this.state.provider.type !== "Casdoor" && this.state.provider.category !== "Storage") && this.state.provider.type !== "Okta" && this.state.provider.type !== "Nextcloud" ? null : (
this.state.provider.type !== "ADFS" && this.state.provider.type !== "AzureAD" && this.state.provider.type !== "AzureADB2C" && (this.state.provider.type !== "Casdoor" && this.state.category !== "Storage") && this.state.provider.type !== "Okta" && this.state.provider.type !== "Nextcloud" ? null : (
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={2}>
{this.getDomainLabel(this.state.provider)} :
@@ -1306,9 +1300,9 @@ class ProviderEditPage extends React.Component {
<Select virtual={false} style={{width: "200px"}} value={this.state.provider.sslMode || "Auto"} onChange={value => {
this.updateProviderField("sslMode", value);
}}>
<Option value="Auto">{i18next.t("general:Auto")}</Option>
<Option value="Enable">{i18next.t("general:Enable")}</Option>
<Option value="Disable">{i18next.t("general:Disable")}</Option>
<Option value="Auto">{i18next.t("provider:Auto")}</Option>
<Option value="Enable">{i18next.t("provider:Enable")}</Option>
<Option value="Disable">{i18next.t("provider:Disable")}</Option>
</Select>
</Col>
</Row>
@@ -1489,7 +1483,7 @@ class ProviderEditPage extends React.Component {
</React.Fragment>
) : ["SMS"].includes(this.state.provider.category) ? (
<React.Fragment>
{["Custom HTTP SMS", "Twilio SMS", "Amazon SNS", "Msg91 SMS", "Infobip SMS"].includes(this.state.provider.type) ?
{["Custom HTTP SMS", "Twilio SMS", "Amazon SNS", "Azure ACS", "Msg91 SMS", "Infobip SMS"].includes(this.state.provider.type) ?
null :
(<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
@@ -1503,7 +1497,7 @@ class ProviderEditPage extends React.Component {
</Row>
)
}
{["Infobip SMS", "Custom HTTP SMS"].includes(this.state.provider.type) ?
{["Infobip SMS"].includes(this.state.provider.type) ?
null :
(<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>

View File

@@ -139,7 +139,7 @@ class ProviderListPage extends BaseListPage {
...this.getColumnSearchProps("displayName"),
},
{
title: i18next.t("general:Category"),
title: i18next.t("provider:Category"),
dataIndex: "category",
key: "category",
filterMultiple: false,

View File

@@ -457,8 +457,8 @@ export const UserFields = ["owner", "name", "password", "display_name", "id", "t
"is_admin", "homepage", "birthday", "gender", "password_type", "password_salt", "external_id", "avatar", "first_name", "last_name",
"avatar_type", "permanent_avatar", "email_verified", "region", "location", "address",
"affiliation", "title", "id_card_type", "id_card", "real_name", "is_verified", "bio", "tag", "language",
"education", "score", "karma", "ranking", "balance", "balance_credit", "balance_currency", "currency", "is_default_avatar", "is_online",
"is_forbidden", "is_deleted", "signup_application", "register_type", "register_source", "hash", "pre_hash", "access_key", "access_secret", "access_token",
"education", "score", "karma", "ranking", "balance", "currency", "is_default_avatar", "is_online",
"is_forbidden", "is_deleted", "signup_application", "hash", "pre_hash", "access_key", "access_secret", "access_token",
"created_ip", "last_signin_time", "last_signin_ip", "github", "google", "qq", "wechat", "facebook", "dingtalk",
"weibo", "gitee", "linkedin", "wecom", "lark", "gitlab", "adfs", "baidu", "alipay", "casdoor", "infoflow", "apple",
"azuread", "azureadb2c", "slack", "steam", "bilibili", "okta", "douyin", "kwai", "line", "amazon", "auth0",
@@ -469,7 +469,7 @@ export const UserFields = ["owner", "name", "password", "display_name", "id", "t
"wepay", "xero", "yahoo", "yammer", "yandex", "zoom", "metamask", "web3onboard", "custom", "webauthnCredentials",
"preferred_mfa_type", "recovery_codes", "totp_secret", "mfa_phone_enabled", "mfa_email_enabled", "invitation",
"invitation_code", "face_ids", "ldap", "properties", "roles", "permissions", "groups", "last_change_password_time",
"last_signin_wrong_time", "signin_wrong_times", "managedAccounts", "mfaAccounts", "mfaItems", "need_update_password",
"last_signin_wrong_time", "signin_wrong_times", "managedAccounts", "mfaAccounts", "need_update_password",
"created_time", "updated_time", "deleted_time",
"ip_whitelist"];
@@ -500,7 +500,6 @@ export const GetTranslatedUserItems = () => {
{name: "Country/Region", label: i18next.t("user:Country/Region")},
{name: "Location", label: i18next.t("user:Location")},
{name: "Address", label: i18next.t("user:Address")},
{name: "Addresses", label: i18next.t("user:Addresses")},
{name: "Affiliation", label: i18next.t("user:Affiliation")},
{name: "Title", label: i18next.t("general:Title")},
{name: "ID card type", label: i18next.t("user:ID card type")},
@@ -524,8 +523,6 @@ export const GetTranslatedUserItems = () => {
{name: "Karma", label: i18next.t("user:Karma")},
{name: "Ranking", label: i18next.t("user:Ranking")},
{name: "Signup application", label: i18next.t("general:Signup application")},
{name: "Register type", label: i18next.t("user:Register type")},
{name: "Register source", label: i18next.t("user:Register source")},
{name: "API key", label: i18next.t("general:API key")},
{name: "Groups", label: i18next.t("general:Groups")},
{name: "Roles", label: i18next.t("general:Roles")},
@@ -540,7 +537,6 @@ export const GetTranslatedUserItems = () => {
{name: "IP whitelist", label: i18next.t("general:IP whitelist")},
{name: "Multi-factor authentication", label: i18next.t("mfa:Multi-factor authentication")},
{name: "WebAuthn credentials", label: i18next.t("user:WebAuthn credentials")},
{name: "Last change password time", label: i18next.t("user:Last change password time")},
{name: "Managed accounts", label: i18next.t("user:Managed accounts")},
{name: "Face ID", label: i18next.t("login:Face ID")},
{name: "MFA accounts", label: i18next.t("user:MFA accounts")},
@@ -558,8 +554,6 @@ export function getUserColumns() {
transField = "Country/Region";
} else if (field === "mfaAccounts") {
transField = "MFA accounts";
} else if (field === "mfaItems") {
transField = "MFA items";
} else if (field === "face_ids") {
transField = "Face ID";
} else if (field === "managedAccounts") {
@@ -2273,7 +2267,7 @@ export function getFormTypeItems(formType) {
{name: "owner", label: "general:Organization", visible: true, width: "150"},
{name: "createdTime", label: "general:Created time", visible: true, width: "180"},
{name: "displayName", label: "general:Display name", visible: true, width: "150"},
{name: "category", label: "general:Category", visible: true, width: "110"},
{name: "category", label: "provider:Category", visible: true, width: "110"},
{name: "type", label: "general:Type", visible: true, width: "110"},
{name: "clientId", label: "provider:Client ID", visible: true, width: "100"},
{name: "providerUrl", label: "provider:Provider URL", visible: true, width: "150"},

View File

@@ -826,7 +826,7 @@ class SyncerEditPage extends React.Component {
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("general:Type"), i18next.t("general:Type - Tooltip"))} :
{Setting.getLabel(i18next.t("general:Type"), i18next.t("cert:Type - Tooltip"))} :
</Col>
<Col span={22} >
<Select virtual={false} style={{width: "100%"}} value={this.state.syncer.type} onChange={(value => {
@@ -878,7 +878,7 @@ class SyncerEditPage extends React.Component {
this.state.syncer.databaseType !== "postgres" ? null : (
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("provider:SSL mode"), i18next.t("provider:SSL mode - Tooltip"))} :
{Setting.getLabel(i18next.t("syncer:SSL mode"), i18next.t("syncer:SSL mode - Tooltip"))} :
</Col>
<Col span={22} >
<Select virtual={false} style={{width: "100%"}} value={this.state.syncer.sslMode} onChange={(value => {this.updateSyncerField("sslMode", value);})}>

View File

@@ -158,7 +158,7 @@ class TokenEditPage extends React.Component {
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("provider:Scope"), i18next.t("provider:Scope - Tooltip"))}
{Setting.getLabel(i18next.t("provider:Scope"), i18next.t("cert:Scope - Tooltip"))}
</Col>
<Col span={22} >
<Input value={this.state.token.scope} onChange={e => {

View File

@@ -261,7 +261,7 @@ class TransactionEditPage extends React.Component {
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("general:Category"), i18next.t("general:Category - Tooltip"))} :
{Setting.getLabel(i18next.t("provider:Category"), i18next.t("provider:Category - Tooltip"))} :
</Col>
<Col span={22} >
<Input disabled={true} value={this.state.transaction.category} />
@@ -269,7 +269,7 @@ class TransactionEditPage extends React.Component {
</Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("general:Type"), i18next.t("general:Type - Tooltip"))} :
{Setting.getLabel(i18next.t("general:Type"), i18next.t("cert:Type - Tooltip"))} :
</Col>
<Col span={22} >
<Input disabled={true} value={this.state.transaction.type} onChange={e => {

View File

@@ -44,15 +44,20 @@ function generateCodeChallenge(verifier) {
}
function storeCodeVerifier(state, verifier) {
localStorage.setItem(`pkce_verifier_${state}`, verifier);
localStorage.setItem("pkce_verifier", `${state}#${verifier}`);
}
export function getCodeVerifier(state) {
return localStorage.getItem(`pkce_verifier_${state}`);
const verifierStore = localStorage.getItem("pkce_verifier");
const [storedState, verifier] = verifierStore ? verifierStore.split("#") : [null, null];
if (storedState !== state) {
return null;
}
return verifier;
}
export function clearCodeVerifier(state) {
localStorage.removeItem(`pkce_verifier_${state}`);
localStorage.removeItem("pkce_verifier");
}
const authInfo = {

View File

@@ -113,12 +113,19 @@
"Order - Tooltip": "Je kleiner der Wert, desto höher rangiert er auf der Apps-Seite",
"Org choice mode": "Organisationsauswahlmodus",
"Org choice mode - Tooltip": "Organisationsauswahlmodus - Hinweis",
"Other domains": "Other domains",
"Other domains - Tooltip": "Other domains - Tooltip",
"Please enable \"Signin session\" first before enabling \"Auto signin\"": "Bitte aktivieren Sie zuerst \"Anmeldesitzung\", bevor Sie \"Automatische Anmeldung\" aktivieren.",
"Please input additional domains": "Please input additional domains",
"Please input your application!": "Bitte geben Sie Ihre Anwendung ein!",
"Please input your organization!": "Bitte geben Sie Ihre Organisation ein!",
"Please select a HTML file": "Bitte wählen Sie eine HTML-Datei aus",
"Pop up": "Pop-up",
"Providers": "Anbieter",
"Proxy SSL mode": "Proxy SSL mode",
"Proxy SSL mode - Tooltip": "Proxy SSL mode - Tooltip",
"Proxy domain": "Proxy domain",
"Proxy domain - Tooltip": "Proxy domain - Tooltip",
"Random": "Zufällig",
"Real name": "Echter Name",
"Redirect URL": "Weiterleitungs-URL",
@@ -128,6 +135,7 @@
"Refresh token expire": "Gültigkeitsdauer des Refresh-Tokens",
"Refresh token expire - Tooltip": "Angabe der Gültigkeitsdauer des Refresh Tokens",
"Reset to Empty": "Auf leer zurücksetzen",
"Reverse Proxy": "Reverse Proxy",
"Right": "Rechts",
"Rule": "Regel",
"SAML hash algorithm": "SAML-Hash-Algorithmus",
@@ -135,6 +143,8 @@
"SAML metadata": "SAML-Metadaten",
"SAML metadata - Tooltip": "Die Metadaten des SAML-Protokolls - Hinweis",
"SAML reply URL": "SAML Reply-URL",
"SSL cert": "SSL cert",
"SSL cert - Tooltip": "SSL cert - Tooltip",
"Security": "Sicherheit",
"Select": "Auswählen",
"Side panel HTML": "Sidepanel-HTML",
@@ -165,6 +175,8 @@
"Token signing method": "Token-Signaturmethode",
"Token signing method - Tooltip": "Signaturmethode des JWT-Tokens muss mit dem Zertifikat übereinstimmen",
"UI Customization": "UI-Anpassung",
"Upstream host": "Upstream host",
"Upstream host - Tooltip": "Upstream host - Tooltip",
"Use Email as NameID": "E-Mail als NameID verwenden",
"Use Email as NameID - Tooltip": "E-Mail als NameID verwenden",
"Vertical": "Vertikal",
@@ -186,7 +198,9 @@
"Expire in years - Tooltip": "Gültigkeitsdauer des Zertifikats in Jahren",
"New Cert": "Neues Zertifikat",
"Private key": "Private-Key",
"Private key - Tooltip": "Privater Schlüssel, der zum öffentlichen Schlüsselzertifikat gehört"
"Private key - Tooltip": "Privater Schlüssel, der zum öffentlichen Schlüsselzertifikat gehört",
"Scope - Tooltip": "Nutzungsszenarien des Zertifikats",
"Type - Tooltip": "Art des Zertifikats"
},
"code": {
"Code you received": "Der Code, den Sie erhalten haben",
@@ -275,7 +289,6 @@
"Applications that require authentication": "Anwendungen, die eine Authentifizierung erfordern",
"Apps": "Anwendungen",
"Authorization": "Autorisierung",
"Auto": "Auto",
"Avatar": "Profilbild",
"Avatar - Tooltip": "Öffentliches Avatarbild für den Benutzer",
"Back": "Zurück",
@@ -757,6 +770,7 @@
"Account menu - Tooltip": "Kontomenü - Tooltip",
"Admin navbar items": "Admin-Navigationsleisten-Elemente",
"Admin navbar items - Tooltip": "Admin-Navigationsleisten-Elemente - Tooltip",
"All": "All",
"Balance credit": "Guthaben (Credits)",
"Balance credit - Tooltip": "Guthaben (Credits) - Tooltip",
"Balance currency": "Guthabenwährung",
@@ -921,6 +935,7 @@
"Invalid product": "Invalid product",
"Is recharge": "Ist Aufladung",
"Is recharge - Tooltip": "Ob das Produkt zum Aufladen des Guthabens dient",
"Name": "Name",
"New Product": "Neues Produkt",
"No recharge options available": "No recharge options available",
"Order created successfully": "Bestellung erfolgreich erstellt",
@@ -933,6 +948,7 @@
"Please add at least one recharge option when custom amount is disabled": "Bitte fügen Sie mindestens eine Aufladeoption hinzu, wenn der benutzerdefinierte Betrag deaktiviert ist",
"Please select a currency": "Bitte wählen Sie eine Währung",
"Please select at least one payment provider": "Bitte wählen Sie mindestens einen Zahlungsanbieter aus",
"Price": "Price",
"Processing payment...": "Zahlung wird verarbeitet...",
"Product list cannot be empty": "Produktliste darf nicht leer sein",
"Product not found or invalid": "Product not found or invalid",
@@ -977,6 +993,7 @@
"Auth Key - Tooltip": "Authentifizierungsschlüssel für den Dienst",
"Auth URL": "Auth-URL",
"Auth URL - Tooltip": "URL für die Authentifizierung",
"Auto": "Auto",
"Base URL": "Basis-URL",
"Base URL - Tooltip": "Basis-URL des Dienstes",
"Bucket": "Eimer",
@@ -985,6 +1002,8 @@
"Can signin": "Kann sich einloggen",
"Can signup": "Kann sich registrieren",
"Can unlink": "Entlinken möglich",
"Category": "Kategorie",
"Category - Tooltip": "Kennung zur Kategorisierung und Gruppierung von Elementen oder Inhalten, erleichtert Filterung und Verwaltung",
"Channel No.": "Kanal Nr.",
"Channel No. - Tooltip": "Eindeutige Nummer zur Identifizierung eines Kommunikations- oder Datenübertragungskanals, verwendet zur Unterscheidung verschiedener Übertragungswege",
"Chat ID": "Chat-ID",
@@ -1001,6 +1020,7 @@
"Content - Tooltip": "Spezifische Informationen oder Daten in Nachrichten, Benachrichtigungen oder Dokumenten",
"DB test": "DB-Test",
"DB test - Tooltip": "DB-Test - Tooltip",
"Disable": "Disable",
"Domain": "Domäne",
"Domain - Tooltip": "Benutzerdefinierte Domain für Objektspeicher",
"Edit Provider": "Provider bearbeiten",
@@ -1010,6 +1030,7 @@
"Email regex - Tooltip": "Nur E-Mails, die diesem regulären Ausdruck entsprechen, können sich registrieren oder anmelden",
"Email title": "Email-Titel",
"Email title - Tooltip": "Betreff der E-Mail",
"Enable": "Enable",
"Enable PKCE": "PKCE aktivieren",
"Enable PKCE - Tooltip": "Enable PKCE - Tooltip",
"Enable proxy": "Proxy aktivieren",
@@ -1284,6 +1305,8 @@
"SSH password": "SSH-Passwort",
"SSH port": "SSH-Port",
"SSH user": "SSH-Benutzer",
"SSL mode": "SSL-Modus",
"SSL mode - Tooltip": "SSL-Modus",
"Service account key": "Service-Account-Schlüssel",
"Sync interval": "Synchronisierungsintervall",
"Sync interval - Tooltip": "Einheit in Sekunden",

View File

@@ -113,12 +113,19 @@
"Order - Tooltip": "The smaller the value, the higher it ranks in the Apps page",
"Org choice mode": "Org choice mode",
"Org choice mode - Tooltip": "Method used to select the organization to log in",
"Other domains": "Other domains",
"Other domains - Tooltip": "Additional domains that should also route to this application",
"Please enable \"Signin session\" first before enabling \"Auto signin\"": "Please enable \"Signin session\" first before enabling \"Auto signin\"",
"Please input additional domains": "Please input additional domains",
"Please input your application!": "Please input your application!",
"Please input your organization!": "Please input your organization!",
"Please select a HTML file": "Please select a HTML file",
"Pop up": "Pop up",
"Providers": "Providers",
"Proxy SSL mode": "Proxy SSL mode",
"Proxy SSL mode - Tooltip": "SSL/TLS mode for the reverse proxy",
"Proxy domain": "Proxy domain",
"Proxy domain - Tooltip": "The public-facing domain for this application (e.g., blog.example.com)",
"Random": "Random",
"Real name": "Real name",
"Redirect URL": "Redirect URL",
@@ -128,6 +135,7 @@
"Refresh token expire": "Refresh token expire",
"Refresh token expire - Tooltip": "Refresh token expiration time",
"Reset to Empty": "Reset to Empty",
"Reverse Proxy": "Reverse Proxy",
"Right": "Right",
"Rule": "Rule",
"SAML hash algorithm": "SAML hash algorithm",
@@ -135,6 +143,8 @@
"SAML metadata": "SAML metadata",
"SAML metadata - Tooltip": "The metadata of SAML protocol",
"SAML reply URL": "SAML reply URL",
"SSL cert": "SSL cert",
"SSL cert - Tooltip": "Certificate to use for TLS termination",
"Security": "Security",
"Select": "Select",
"Side panel HTML": "Side panel HTML",
@@ -165,6 +175,8 @@
"Token signing method": "Token signing method",
"Token signing method - Tooltip": "Signing method of JWT token, needs to be the same algorithm as the certificate",
"UI Customization": "UI Customization",
"Upstream host": "Upstream host",
"Upstream host - Tooltip": "The upstream backend address to forward requests to (e.g., localhost:8080 or 192.168.1.100)",
"Use Email as NameID": "Use Email as NameID",
"Use Email as NameID - Tooltip": "Use Email as NameID",
"Vertical": "Vertical",
@@ -186,7 +198,9 @@
"Expire in years - Tooltip": "Validity period of the certificate, in years",
"New Cert": "New Cert",
"Private key": "Private key",
"Private key - Tooltip": "Private key corresponding to the public key certificate"
"Private key - Tooltip": "Private key corresponding to the public key certificate",
"Scope - Tooltip": "Usage scenarios of the certificate",
"Type - Tooltip": "Type of certificate"
},
"code": {
"Code you received": "Code you received",
@@ -275,7 +289,6 @@
"Applications that require authentication": "Applications that require authentication",
"Apps": "Apps",
"Authorization": "Authorization",
"Auto": "Auto",
"Avatar": "Avatar",
"Avatar - Tooltip": "Public avatar image for the user",
"Back": "Back",
@@ -757,6 +770,7 @@
"Account menu - Tooltip": "Account menu - Tooltip",
"Admin navbar items": "Admin navbar items",
"Admin navbar items - Tooltip": "Admin navbar items - Tooltip",
"All": "All",
"Balance credit": "Balance credit",
"Balance credit - Tooltip": "Balance credit - Tooltip",
"Balance currency": "Balance currency",
@@ -921,6 +935,7 @@
"Invalid product": "Invalid product",
"Is recharge": "Is recharge",
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
"Name": "Name",
"New Product": "New Product",
"No recharge options available": "No recharge options available",
"Order created successfully": "Order created successfully",
@@ -933,6 +948,7 @@
"Please add at least one recharge option when custom amount is disabled": "Please add at least one recharge option when custom amount is disabled",
"Please select a currency": "Please select a currency",
"Please select at least one payment provider": "Please select at least one payment provider",
"Price": "Price",
"Processing payment...": "Processing payment...",
"Product list cannot be empty": "Product list cannot be empty",
"Product not found or invalid": "Product not found or invalid",
@@ -977,6 +993,7 @@
"Auth Key - Tooltip": "Authentication key for the service",
"Auth URL": "Auth URL",
"Auth URL - Tooltip": "URL for authentication",
"Auto": "Auto",
"Base URL": "Base URL",
"Base URL - Tooltip": "Base URL of the service",
"Bucket": "Bucket",
@@ -985,6 +1002,8 @@
"Can signin": "Can signin",
"Can signup": "Can signup",
"Can unlink": "Can unlink",
"Category": "Category",
"Category - Tooltip": "Identifier for categorizing and grouping items or content, facilitating filtering and management",
"Channel No.": "Channel No.",
"Channel No. - Tooltip": "Unique number identifying a communication or data transmission channel, used to distinguish different transmission paths",
"Chat ID": "Chat ID",
@@ -1001,6 +1020,7 @@
"Content - Tooltip": "Specific information or data contained in messages, notifications, or documents",
"DB test": "DB test",
"DB test - Tooltip": "DB test - Tooltip",
"Disable": "Disable",
"Domain": "Domain",
"Domain - Tooltip": "Custom domain for object storage",
"Edit Provider": "Edit Provider",
@@ -1010,6 +1030,7 @@
"Email regex - Tooltip": "Only emails matching this regular expression can register or sign in",
"Email title": "Email title",
"Email title - Tooltip": "Subject of the email",
"Enable": "Enable",
"Enable PKCE": "Enable PKCE",
"Enable PKCE - Tooltip": "Enable PKCE (Proof Key for Code Exchange) for enhanced OAuth 2.0 security",
"Enable proxy": "Enable proxy",
@@ -1284,6 +1305,8 @@
"SSH password": "SSH password",
"SSH port": "SSH port",
"SSH user": "SSH user",
"SSL mode": "SSL mode",
"SSL mode - Tooltip": "The SSL mode used when connecting to the database",
"Service account key": "Service account key",
"Sync interval": "Sync interval",
"Sync interval - Tooltip": "Unit in seconds",

View File

@@ -113,12 +113,19 @@
"Order - Tooltip": "Cuanto menor sea el valor, más alto se clasificará en la página de Aplicaciones",
"Org choice mode": "Modo de selección de organización",
"Org choice mode - Tooltip": "Método utilizado para seleccionar la organización para iniciar sesión - Sugerencia",
"Other domains": "Other domains",
"Other domains - Tooltip": "Other domains - Tooltip",
"Please enable \"Signin session\" first before enabling \"Auto signin\"": "Por favor, habilita \"Sesión de inicio de sesión\" primero antes de habilitar \"Inicio de sesión automático\"",
"Please input additional domains": "Please input additional domains",
"Please input your application!": "¡Por favor, ingrese su solicitud!",
"Please input your organization!": "¡Por favor, ingrese su organización!",
"Please select a HTML file": "Por favor, seleccione un archivo HTML",
"Pop up": "Ventana emergente",
"Providers": "Proveedores",
"Proxy SSL mode": "Proxy SSL mode",
"Proxy SSL mode - Tooltip": "Proxy SSL mode - Tooltip",
"Proxy domain": "Proxy domain",
"Proxy domain - Tooltip": "Proxy domain - Tooltip",
"Random": "Aleatorio",
"Real name": "Nombre real",
"Redirect URL": "Redireccionar URL",
@@ -128,6 +135,7 @@
"Refresh token expire": "Token de actualización expirado",
"Refresh token expire - Tooltip": "Tiempo de caducidad del token de actualización",
"Reset to Empty": "Restablecer a vacío",
"Reverse Proxy": "Reverse Proxy",
"Right": "Correcto",
"Rule": "Regla",
"SAML hash algorithm": "Algoritmo hash SAML",
@@ -135,6 +143,8 @@
"SAML metadata": "Metadatos de SAML",
"SAML metadata - Tooltip": "Los metadatos del protocolo SAML - Sugerencia",
"SAML reply URL": "URL de respuesta SAML",
"SSL cert": "SSL cert",
"SSL cert - Tooltip": "SSL cert - Tooltip",
"Security": "Seguridad",
"Select": "Seleccionar",
"Side panel HTML": "Panel lateral HTML",
@@ -165,6 +175,8 @@
"Token signing method": "Método de firma del token",
"Token signing method - Tooltip": "Método de firma del token JWT, debe ser el mismo algoritmo que el certificado",
"UI Customization": "Personalización de la interfaz",
"Upstream host": "Upstream host",
"Upstream host - Tooltip": "Upstream host - Tooltip",
"Use Email as NameID": "Usar correo electrónico como NameID",
"Use Email as NameID - Tooltip": "Usar correo electrónico como NameID - Información adicional",
"Vertical": "Vertical",
@@ -186,7 +198,9 @@
"Expire in years - Tooltip": "Período de validez del certificado, en años",
"New Cert": "Nuevo certificado",
"Private key": "Clave privada",
"Private key - Tooltip": "Clave privada correspondiente al certificado de clave pública"
"Private key - Tooltip": "Clave privada correspondiente al certificado de clave pública",
"Scope - Tooltip": "Escenarios de uso del certificado",
"Type - Tooltip": "Tipo de certificado"
},
"code": {
"Code you received": "Código que recibió",
@@ -275,7 +289,6 @@
"Applications that require authentication": "Aplicaciones que requieren autenticación",
"Apps": "Aplicaciones",
"Authorization": "Autorización",
"Auto": "Auto",
"Avatar": "Avatar",
"Avatar - Tooltip": "Imagen de avatar pública para el usuario",
"Back": "Atrás",
@@ -757,6 +770,7 @@
"Account menu - Tooltip": "Menú de cuenta - Tooltip",
"Admin navbar items": "Elementos de la barra de navegación del administrador",
"Admin navbar items - Tooltip": "Elementos de la barra de navegación del administrador - Tooltip",
"All": "All",
"Balance credit": "Saldo (créditos)",
"Balance credit - Tooltip": "Saldo (créditos) - Tooltip",
"Balance currency": "Moneda del saldo",
@@ -921,6 +935,7 @@
"Invalid product": "Invalid product",
"Is recharge": "Es recarga",
"Is recharge - Tooltip": "Indica si el producto actual es para recargar saldo",
"Name": "Name",
"New Product": "Nuevo producto",
"No recharge options available": "No recharge options available",
"Order created successfully": "Pedido creado con éxito",
@@ -933,6 +948,7 @@
"Please add at least one recharge option when custom amount is disabled": "Por favor, añade al menos una opción de recarga cuando el importe personalizado esté desactivado",
"Please select a currency": "Por favor, selecciona una moneda",
"Please select at least one payment provider": "Por favor, selecciona al menos un proveedor de pago",
"Price": "Price",
"Processing payment...": "Procesando el pago...",
"Product list cannot be empty": "La lista de productos no puede estar vacía",
"Product not found or invalid": "Product not found or invalid",
@@ -977,6 +993,7 @@
"Auth Key - Tooltip": "Clave de autenticación para el servicio",
"Auth URL": "URL de autenticación",
"Auth URL - Tooltip": "URL para autenticación",
"Auto": "Auto",
"Base URL": "URL base",
"Base URL - Tooltip": "URL base del servicio",
"Bucket": "Cubo",
@@ -985,6 +1002,8 @@
"Can signin": "¿Puedes iniciar sesión?",
"Can signup": "Puede registrarse",
"Can unlink": "Desvincular",
"Category": "Categoría",
"Category - Tooltip": "Identificador para categorizar y agrupar elementos o contenido, facilitando el filtrado y la gestión",
"Channel No.": "Canal No.",
"Channel No. - Tooltip": "Número único que identifica un canal de comunicación o transmisión de datos, utilizado para distinguir diferentes rutas de transmisión",
"Chat ID": "ID de chat",
@@ -1001,6 +1020,7 @@
"Content - Tooltip": "Contenido - Información adicional",
"DB test": "Prueba de BD",
"DB test - Tooltip": "Prueba de BD - Tooltip",
"Disable": "Disable",
"Domain": "Dominio",
"Domain - Tooltip": "Dominio personalizado para almacenamiento de objetos",
"Edit Provider": "Editar proveedor",
@@ -1010,6 +1030,7 @@
"Email regex - Tooltip": "Expresión regular de correo electrónico - Información adicional",
"Email title": "Título del correo electrónico",
"Email title - Tooltip": "Título del correo electrónico",
"Enable": "Enable",
"Enable PKCE": "Habilitar PKCE",
"Enable PKCE - Tooltip": "Habilitar PKCE - Tooltip",
"Enable proxy": "Habilitar proxy",
@@ -1284,6 +1305,8 @@
"SSH password": "Contraseña SSH",
"SSH port": "Puerto SSH",
"SSH user": "Usuario SSH",
"SSL mode": "Modo SSL",
"SSL mode - Tooltip": "Modo SSL",
"Service account key": "Clave de la cuenta de servicio",
"Sync interval": "Intervalo de sincronización",
"Sync interval - Tooltip": "Unidad en segundos",

View File

@@ -113,12 +113,19 @@
"Order - Tooltip": "Plus la valeur est petite, plus elle est classée haut dans la page Applications",
"Org choice mode": "Mode de choix d'organisation",
"Org choice mode - Tooltip": "Méthode utilisée pour sélectionner l'organisation pour se connecter - Info-bulle",
"Other domains": "Other domains",
"Other domains - Tooltip": "Other domains - Tooltip",
"Please enable \"Signin session\" first before enabling \"Auto signin\"": "Veuillez activer \"Session de connexion\" avant d'activer \"Connexion automatique\"",
"Please input additional domains": "Please input additional domains",
"Please input your application!": "Veuillez saisir votre application !",
"Please input your organization!": "Veuillez saisir votre organisation !",
"Please select a HTML file": "Veuillez sélectionner un fichier HTML",
"Pop up": "Fenêtre contextuelle",
"Providers": "Fournisseurs",
"Proxy SSL mode": "Proxy SSL mode",
"Proxy SSL mode - Tooltip": "Proxy SSL mode - Tooltip",
"Proxy domain": "Proxy domain",
"Proxy domain - Tooltip": "Proxy domain - Tooltip",
"Random": "Aléatoire",
"Real name": "Nom réel",
"Redirect URL": "URL de redirection",
@@ -128,6 +135,7 @@
"Refresh token expire": "Expiration du jeton de rafraîchissement",
"Refresh token expire - Tooltip": "Durée avant expiration du jeton de rafraîchissement",
"Reset to Empty": "Réinitialiser à vide",
"Reverse Proxy": "Reverse Proxy",
"Right": "Droit",
"Rule": "Règle",
"SAML hash algorithm": "Algorithme de hachage SAML",
@@ -135,6 +143,8 @@
"SAML metadata": "Métadonnées SAML",
"SAML metadata - Tooltip": "Métadonnées du protocole SAML - Info-bulle",
"SAML reply URL": "URL de réponse SAML",
"SSL cert": "SSL cert",
"SSL cert - Tooltip": "SSL cert - Tooltip",
"Security": "Sécurité",
"Select": "Sélectionner",
"Side panel HTML": "HTML du panneau latéral",
@@ -165,6 +175,8 @@
"Token signing method": "Méthode de signature du jeton",
"Token signing method - Tooltip": "Méthode de signature du jeton JWT, doit être le même algorithme que le certificat",
"UI Customization": "Personnalisation de l'interface",
"Upstream host": "Upstream host",
"Upstream host - Tooltip": "Upstream host - Tooltip",
"Use Email as NameID": "Utiliser l'e-mail comme NameID",
"Use Email as NameID - Tooltip": "Utiliser l'e-mail comme NameID - Infobulle",
"Vertical": "Vertical",
@@ -186,7 +198,9 @@
"Expire in years - Tooltip": "Période de validité du certificat, en années",
"New Cert": "Nouveau Certificat",
"Private key": "Clé privée",
"Private key - Tooltip": "Clé privée correspondant au certificat de la clé publique"
"Private key - Tooltip": "Clé privée correspondant au certificat de la clé publique",
"Scope - Tooltip": "Scénarios d'utilisation du certificat",
"Type - Tooltip": "Type de certificat"
},
"code": {
"Code you received": "Le code que vous avez reçu",
@@ -275,7 +289,6 @@
"Applications that require authentication": "Applications qui nécessitent une authentification",
"Apps": "Applications",
"Authorization": "Autorisation",
"Auto": "Auto",
"Avatar": "Avatar",
"Avatar - Tooltip": "Image d'avatar publique pour le compte",
"Back": "Retour",
@@ -757,6 +770,7 @@
"Account menu - Tooltip": "Menu du compte - Infobulle",
"Admin navbar items": "Éléments de la barre de navigation admin",
"Admin navbar items - Tooltip": "Éléments de la barre de navigation admin - Infobulle",
"All": "All",
"Balance credit": "Solde (crédits)",
"Balance credit - Tooltip": "Solde (crédits) - Infobulle",
"Balance currency": "Devise du solde",
@@ -921,6 +935,7 @@
"Invalid product": "Invalid product",
"Is recharge": "Est un rechargement",
"Is recharge - Tooltip": "Indique si le produit actuel permet de recharger le solde",
"Name": "Name",
"New Product": "Nouveau produit",
"No recharge options available": "No recharge options available",
"Order created successfully": "Commande créée avec succès",
@@ -933,6 +948,7 @@
"Please add at least one recharge option when custom amount is disabled": "Veuillez ajouter au moins une option de recharge lorsque le montant personnalisé est désactivé",
"Please select a currency": "Veuillez sélectionner une devise",
"Please select at least one payment provider": "Veuillez sélectionner au moins un fournisseur de paiement",
"Price": "Price",
"Processing payment...": "Traitement du paiement...",
"Product list cannot be empty": "La liste des produits ne peut pas être vide",
"Product not found or invalid": "Product not found or invalid",
@@ -977,6 +993,7 @@
"Auth Key - Tooltip": "Clé d'authentification - Infobulle",
"Auth URL": "URL d'authentification",
"Auth URL - Tooltip": "URL d'authentification",
"Auto": "Auto",
"Base URL": "URL de base",
"Base URL - Tooltip": "URL de base - Infobulle",
"Bucket": "seau",
@@ -985,6 +1002,8 @@
"Can signin": "Pouvez-vous vous connecter?",
"Can signup": "Peut s'inscrire",
"Can unlink": "Peut annuler le lien",
"Category": "Catégorie",
"Category - Tooltip": "Sélectionnez une catégorie",
"Channel No.": "chaîne n°",
"Channel No. - Tooltip": "Canal N°",
"Chat ID": "ID de chat",
@@ -1001,6 +1020,7 @@
"Content - Tooltip": "Contenu - Infobulle",
"DB test": "Test BD",
"DB test - Tooltip": "Test BD - Infobulle",
"Disable": "Disable",
"Domain": "Domaine",
"Domain - Tooltip": "Domaine personnalisé pour le stockage d'objets",
"Edit Provider": "Modifier le fournisseur",
@@ -1010,6 +1030,7 @@
"Email regex - Tooltip": "Regex e-mail - Infobulle",
"Email title": "Titre de l'email",
"Email title - Tooltip": "Titre de l'email",
"Enable": "Enable",
"Enable PKCE": "Activer PKCE",
"Enable PKCE - Tooltip": "Enable PKCE - Tooltip",
"Enable proxy": "Activer le proxy",
@@ -1284,6 +1305,8 @@
"SSH password": "Mot de passe SSH",
"SSH port": "Port SSH",
"SSH user": "Utilisateur SSH",
"SSL mode": "Mode SSL",
"SSL mode - Tooltip": "Mode SSL",
"Service account key": "Clé du compte de service",
"Sync interval": "Intervalle de synchronisation",
"Sync interval - Tooltip": "Unité en secondes",

View File

@@ -113,12 +113,19 @@
"Order - Tooltip": "値が小さいほど、アプリページで上位にランク付けされます",
"Org choice mode": "組織選択モード",
"Org choice mode - Tooltip": "ログインする組織を選択する方法 - ヒント",
"Other domains": "Other domains",
"Other domains - Tooltip": "Other domains - Tooltip",
"Please enable \"Signin session\" first before enabling \"Auto signin\"": "\"自動サインイン\"を有効にする前に、まず\"サインインセッション\"を有効にしてください",
"Please input additional domains": "Please input additional domains",
"Please input your application!": "あなたの申請を入力してください!",
"Please input your organization!": "あなたの組織を入力してください!",
"Please select a HTML file": "HTMLファイルを選択してください",
"Pop up": "ポップアップ",
"Providers": "プロバイダー",
"Proxy SSL mode": "Proxy SSL mode",
"Proxy SSL mode - Tooltip": "Proxy SSL mode - Tooltip",
"Proxy domain": "Proxy domain",
"Proxy domain - Tooltip": "Proxy domain - Tooltip",
"Random": "ランダム",
"Real name": "本名",
"Redirect URL": "リダイレクトURL",
@@ -128,6 +135,7 @@
"Refresh token expire": "リフレッシュトークンの有効期限が切れました",
"Refresh token expire - Tooltip": "リフレッシュトークンの有効期限時間",
"Reset to Empty": "空にリセット",
"Reverse Proxy": "Reverse Proxy",
"Right": "右",
"Rule": "ルール",
"SAML hash algorithm": "SAMLハッシュアルゴリズム",
@@ -135,6 +143,8 @@
"SAML metadata": "SAMLメタデータ",
"SAML metadata - Tooltip": "SAMLプロトコルのメタデータ - ヒント",
"SAML reply URL": "SAMLリプライURL",
"SSL cert": "SSL cert",
"SSL cert - Tooltip": "SSL cert - Tooltip",
"Security": "セキュリティ",
"Select": "選択",
"Side panel HTML": "サイドパネルのHTML",
@@ -165,6 +175,8 @@
"Token signing method": "トークン署名方法",
"Token signing method - Tooltip": "JWTトークンの署名方法。証明書と同じアルゴリズムである必要があります。",
"UI Customization": "UIのカスタマイズ",
"Upstream host": "Upstream host",
"Upstream host - Tooltip": "Upstream host - Tooltip",
"Use Email as NameID": "メールアドレスをNameIDとして使用",
"Use Email as NameID - Tooltip": "メールアドレスをNameIDとして使用 - ツールチップ",
"Vertical": "垂直",
@@ -186,7 +198,9 @@
"Expire in years - Tooltip": "証明書の有効期間、年数で",
"New Cert": "新しい証明書",
"Private key": "プライベートキー",
"Private key - Tooltip": "公開鍵証明書に対応する秘密鍵"
"Private key - Tooltip": "公開鍵証明書に対応する秘密鍵",
"Scope - Tooltip": "証明書の使用シナリオ",
"Type - Tooltip": "証明書の種類"
},
"code": {
"Code you received": "受け取ったコード",
@@ -275,7 +289,6 @@
"Applications that require authentication": "認証が必要なアプリケーション",
"Apps": "アプリ",
"Authorization": "認可",
"Auto": "Auto",
"Avatar": "アバター",
"Avatar - Tooltip": "ユーザーのパブリックアバター画像",
"Back": "戻る",
@@ -757,6 +770,7 @@
"Account menu - Tooltip": "アカウントメニュー - ツールチップ",
"Admin navbar items": "管理者ナビバー項目",
"Admin navbar items - Tooltip": "管理者ナビバー項目 - ツールチップ",
"All": "All",
"Balance credit": "残高クレジット",
"Balance credit - Tooltip": "残高クレジット - ツールチップ",
"Balance currency": "残高通貨",
@@ -921,6 +935,7 @@
"Invalid product": "Invalid product",
"Is recharge": "チャージ用か",
"Is recharge - Tooltip": "現在の製品が残高をチャージするためかどうか",
"Name": "Name",
"New Product": "新製品",
"No recharge options available": "No recharge options available",
"Order created successfully": "注文が正常に作成されました",
@@ -933,6 +948,7 @@
"Please add at least one recharge option when custom amount is disabled": "任意金額が無効な場合は、少なくとも1つのチャージオプションを追加してください",
"Please select a currency": "通貨を選択してください",
"Please select at least one payment provider": "少なくとも1つの支払いプロバイダーを選択してください",
"Price": "Price",
"Processing payment...": "支払い処理中...",
"Product list cannot be empty": "商品リストを空にできません",
"Product not found or invalid": "Product not found or invalid",
@@ -977,6 +993,7 @@
"Auth Key - Tooltip": "認証キー - ツールチップ",
"Auth URL": "認証URL",
"Auth URL - Tooltip": "認証URL",
"Auto": "Auto",
"Base URL": "ベースURL",
"Base URL - Tooltip": "ベースURL - ツールチップ",
"Bucket": "バケツ",
@@ -985,6 +1002,8 @@
"Can signin": "サインインできますか?",
"Can signup": "サインアップできますか?",
"Can unlink": "アンリンクすることができます",
"Category": "カテゴリー",
"Category - Tooltip": "カテゴリーを選択してください",
"Channel No.": "チャンネル番号",
"Channel No. - Tooltip": "チャンネル番号",
"Chat ID": "チャットID",
@@ -1001,6 +1020,7 @@
"Content - Tooltip": "コンテンツ - ツールチップ",
"DB test": "DBテスト",
"DB test - Tooltip": "DBテスト - ツールチップ",
"Disable": "Disable",
"Domain": "ドメイン",
"Domain - Tooltip": "オブジェクトストレージのカスタムドメイン",
"Edit Provider": "編集プロバイダー",
@@ -1010,6 +1030,7 @@
"Email regex - Tooltip": "メール正規表現 - ツールチップ",
"Email title": "電子メールのタイトル",
"Email title - Tooltip": "メールのタイトル",
"Enable": "Enable",
"Enable PKCE": "PKCEを有効にする",
"Enable PKCE - Tooltip": "PKCEを有効にする - ツールチップ",
"Enable proxy": "プロキシを有効にする",
@@ -1284,6 +1305,8 @@
"SSH password": "SSHパスワード",
"SSH port": "SSHポート",
"SSH user": "SSHユーザー",
"SSL mode": "SSLモード",
"SSL mode - Tooltip": "SSLモード",
"Service account key": "サービスアカウントキー",
"Sync interval": "同期の間隔",
"Sync interval - Tooltip": "単位は秒です",

View File

@@ -113,12 +113,19 @@
"Order - Tooltip": "Im mniejsza wartość, tym wyżej jest rangowana na stronie Aplikacji",
"Org choice mode": "Tryb wyboru organizacji",
"Org choice mode - Tooltip": "Metoda wyboru organizacji do logowania - Podpowiedź",
"Other domains": "Other domains",
"Other domains - Tooltip": "Other domains - Tooltip",
"Please enable \"Signin session\" first before enabling \"Auto signin\"": "Najpierw włącz \"sesję logowania\", zanim włączysz \"automatyczne logowanie\"",
"Please input additional domains": "Please input additional domains",
"Please input your application!": "Proszę wprowadzić swoją aplikację!",
"Please input your organization!": "Proszę wprowadzić swoją organizację!",
"Please select a HTML file": "Proszę wybrać plik HTML",
"Pop up": "Wyskakujące okno",
"Providers": "Dostawcy",
"Proxy SSL mode": "Proxy SSL mode",
"Proxy SSL mode - Tooltip": "Proxy SSL mode - Tooltip",
"Proxy domain": "Proxy domain",
"Proxy domain - Tooltip": "Proxy domain - Tooltip",
"Random": "Losowy",
"Real name": "Prawdziwe imię",
"Redirect URL": "URL przekierowania",
@@ -128,6 +135,7 @@
"Refresh token expire": "Czas wygaśnięcia odświeżania tokena",
"Refresh token expire - Tooltip": "Czas wygaśnięcia tokena odświeżania",
"Reset to Empty": "Resetuj do pustego",
"Reverse Proxy": "Reverse Proxy",
"Right": "Prawo",
"Rule": "Reguła",
"SAML hash algorithm": "Algorytm skrótu SAML",
@@ -135,6 +143,8 @@
"SAML metadata": "Metadane SAML",
"SAML metadata - Tooltip": "Metadane protokołu SAML - Podpowiedź",
"SAML reply URL": "URL odpowiedzi SAML",
"SSL cert": "SSL cert",
"SSL cert - Tooltip": "SSL cert - Tooltip",
"Security": "Bezpieczeństwo",
"Select": "Wybierz",
"Side panel HTML": "HTML panelu bocznego",
@@ -165,6 +175,8 @@
"Token signing method": "Metoda podpisywania tokena",
"Token signing method - Tooltip": "Metoda podpisywania tokena JWT, musi być tym samym algorytmem co certyfikat",
"UI Customization": "Dostosowanie interfejsu",
"Upstream host": "Upstream host",
"Upstream host - Tooltip": "Upstream host - Tooltip",
"Use Email as NameID": "Użyj e-maila jako NameID",
"Use Email as NameID - Tooltip": "Użyj e-maila jako NameID - Podpowiedź",
"Vertical": "Pionowy",
@@ -186,7 +198,9 @@
"Expire in years - Tooltip": "Okres ważności certyfikatu, w latach",
"New Cert": "Nowy certyfikat",
"Private key": "Klucz prywatny",
"Private key - Tooltip": "Klucz prywatny odpowiadający certyfikatowi klucza publicznego"
"Private key - Tooltip": "Klucz prywatny odpowiadający certyfikatowi klucza publicznego",
"Scope - Tooltip": "Scenariusze użycia certyfikatu",
"Type - Tooltip": "Typ certyfikatu"
},
"code": {
"Code you received": "Kod, który otrzymałeś",
@@ -275,7 +289,6 @@
"Applications that require authentication": "Aplikacje wymagające uwierzytelniania",
"Apps": "Aplikacje",
"Authorization": "Autoryzacja",
"Auto": "Auto",
"Avatar": "Awatar",
"Avatar - Tooltip": "Publiczny obraz awatara użytkownika",
"Back": "Wstecz",
@@ -757,6 +770,7 @@
"Account menu - Tooltip": "Menu konta - Podpowiedź",
"Admin navbar items": "Elementy paska nawigacji administratora",
"Admin navbar items - Tooltip": "Elementy paska nawigacji administratora - Podpowiedź",
"All": "All",
"Balance credit": "Saldo kredytów",
"Balance credit - Tooltip": "Saldo kredytów - Podpowiedź",
"Balance currency": "Waluta salda",
@@ -921,6 +935,7 @@
"Invalid product": "Invalid product",
"Is recharge": "Jest doładowaniem",
"Is recharge - Tooltip": "Czy bieżący produkt służy do doładowania salda",
"Name": "Name",
"New Product": "Nowy produkt",
"No recharge options available": "No recharge options available",
"Order created successfully": "Zamówienie utworzone pomyślnie",
@@ -933,6 +948,7 @@
"Please add at least one recharge option when custom amount is disabled": "Dodaj co najmniej jedną opcję doładowania, gdy kwota niestandardowa jest wyłączona",
"Please select a currency": "Wybierz walutę",
"Please select at least one payment provider": "Wybierz co najmniej jednego dostawcę płatności",
"Price": "Price",
"Processing payment...": "Przetwarzanie płatności...",
"Product list cannot be empty": "Lista produktów nie może być pusta",
"Product not found or invalid": "Product not found or invalid",
@@ -977,6 +993,7 @@
"Auth Key - Tooltip": "Klucz autoryzacji - Podpowiedź",
"Auth URL": "Adres URL autoryzacji",
"Auth URL - Tooltip": "Adres URL autoryzacji",
"Auto": "Auto",
"Base URL": "Podstawowy adres URL",
"Base URL - Tooltip": "Podstawowy adres URL",
"Bucket": "Wiadro",
@@ -985,6 +1002,8 @@
"Can signin": "Można się zalogować",
"Can signup": "Można się zarejestrować",
"Can unlink": "Można odłączyć",
"Category": "Kategoria",
"Category - Tooltip": "Wybierz kategorię",
"Channel No.": "Channel No.",
"Channel No. - Tooltip": "Channel No. - Tooltip",
"Chat ID": "Chat ID",
@@ -1001,6 +1020,7 @@
"Content - Tooltip": "Treść",
"DB test": "Test bazy danych",
"DB test - Tooltip": "Test bazy danych",
"Disable": "Disable",
"Domain": "Domain",
"Domain - Tooltip": "Domain - Tooltip",
"Edit Provider": "Edit Provider",
@@ -1010,6 +1030,7 @@
"Email regex - Tooltip": "Email regex - Tooltip",
"Email title": "Email title",
"Email title - Tooltip": "Email title - Tooltip",
"Enable": "Enable",
"Enable PKCE": "Enable PKCE",
"Enable PKCE - Tooltip": "Enable PKCE - Tooltip",
"Enable proxy": "Enable proxy",
@@ -1284,6 +1305,8 @@
"SSH password": "Hasło SSH",
"SSH port": "Port SSH",
"SSH user": "Użytkownik SSH",
"SSL mode": "Tryb SSL",
"SSL mode - Tooltip": "Tryb SSL - etykietka",
"Service account key": "Klucz konta usługi",
"Sync interval": "Interwał synchronizacji",
"Sync interval - Tooltip": "Jednostka w sekundach",

View File

@@ -113,12 +113,19 @@
"Order - Tooltip": "Quanto menor o valor, maior a classificação na página de Aplicativos",
"Org choice mode": "Modo de escolha da organização",
"Org choice mode - Tooltip": "Método usado para selecionar a organização para fazer login - Dica",
"Other domains": "Other domains",
"Other domains - Tooltip": "Other domains - Tooltip",
"Please enable \"Signin session\" first before enabling \"Auto signin\"": "Por favor, habilite a \"Sessão de login\" primeiro antes de habilitar o \"Login automático\"",
"Please input additional domains": "Please input additional domains",
"Please input your application!": "Por favor, insira o nome da sua aplicação!",
"Please input your organization!": "Por favor, insira o nome da sua organização!",
"Please select a HTML file": "Por favor, selecione um arquivo HTML",
"Pop up": "Abrir em pop-up",
"Providers": "Provedores",
"Proxy SSL mode": "Proxy SSL mode",
"Proxy SSL mode - Tooltip": "Proxy SSL mode - Tooltip",
"Proxy domain": "Proxy domain",
"Proxy domain - Tooltip": "Proxy domain - Tooltip",
"Random": "Aleatório",
"Real name": "Nome real",
"Redirect URL": "URL de redirecionamento",
@@ -128,6 +135,7 @@
"Refresh token expire": "Expiração do token de atualização",
"Refresh token expire - Tooltip": "Tempo de expiração do token de atualização",
"Reset to Empty": "Redefinir para vazio",
"Reverse Proxy": "Reverse Proxy",
"Right": "Direita",
"Rule": "Regra",
"SAML hash algorithm": "Algoritmo de hash SAML",
@@ -135,6 +143,8 @@
"SAML metadata": "Metadados do SAML",
"SAML metadata - Tooltip": "Os metadados do protocolo SAML - Dica",
"SAML reply URL": "URL de resposta do SAML",
"SSL cert": "SSL cert",
"SSL cert - Tooltip": "SSL cert - Tooltip",
"Security": "Segurança",
"Select": "Selecionar",
"Side panel HTML": "HTML do painel lateral",
@@ -165,6 +175,8 @@
"Token signing method": "Método de assinatura do token",
"Token signing method - Tooltip": "Método de assinatura do token JWT. Deve ser o mesmo algoritmo do certificado.",
"UI Customization": "Personalização da interface",
"Upstream host": "Upstream host",
"Upstream host - Tooltip": "Upstream host - Tooltip",
"Use Email as NameID": "Usar e-mail como NameID",
"Use Email as NameID - Tooltip": "Dica: usar e-mail como NameID",
"Vertical": "Vertical",
@@ -186,7 +198,9 @@
"Expire in years - Tooltip": "Período de validade do certificado, em anos",
"New Cert": "Novo Certificado",
"Private key": "Chave privada",
"Private key - Tooltip": "Chave privada correspondente ao certificado de chave pública"
"Private key - Tooltip": "Chave privada correspondente ao certificado de chave pública",
"Scope - Tooltip": "Cenários de uso do certificado",
"Type - Tooltip": "Tipo de certificado"
},
"code": {
"Code you received": "Código que você recebeu",
@@ -275,7 +289,6 @@
"Applications that require authentication": "Aplicações que requerem autenticação",
"Apps": "Aplicativos",
"Authorization": "Autorização",
"Auto": "Auto",
"Avatar": "Avatar",
"Avatar - Tooltip": "Imagem de avatar pública do usuário",
"Back": "Voltar",
@@ -757,6 +770,7 @@
"Account menu - Tooltip": "Dica: menu da conta",
"Admin navbar items": "Itens da barra de navegação do administrador",
"Admin navbar items - Tooltip": "Dica: itens da barra de navegação do administrador",
"All": "All",
"Balance credit": "Saldo de créditos",
"Balance credit - Tooltip": "Dica: saldo de créditos",
"Balance currency": "Moeda do saldo",
@@ -921,6 +935,7 @@
"Invalid product": "Invalid product",
"Is recharge": "É recarga",
"Is recharge - Tooltip": "Se o produto atual é para recarregar saldo",
"Name": "Name",
"New Product": "Novo Produto",
"No recharge options available": "No recharge options available",
"Order created successfully": "Pedido criado com sucesso",
@@ -933,6 +948,7 @@
"Please add at least one recharge option when custom amount is disabled": "Por favor, adicione pelo menos uma opção de recarga quando o valor personalizado estiver desativado",
"Please select a currency": "Por favor, selecione uma moeda",
"Please select at least one payment provider": "Por favor, selecione pelo menos um provedor de pagamento",
"Price": "Price",
"Processing payment...": "Processando pagamento...",
"Product list cannot be empty": "A lista de produtos não pode estar vazia",
"Product not found or invalid": "Product not found or invalid",
@@ -977,6 +993,7 @@
"Auth Key - Tooltip": "Dica: chave de autenticação",
"Auth URL": "URL de autenticação",
"Auth URL - Tooltip": "URL de autenticação",
"Auto": "Auto",
"Base URL": "URL base",
"Base URL - Tooltip": "Dica: URL base",
"Bucket": "Bucket",
@@ -985,6 +1002,8 @@
"Can signin": "Pode fazer login",
"Can signup": "Pode se inscrever",
"Can unlink": "Pode desvincular",
"Category": "Categoria",
"Category - Tooltip": "Selecione uma categoria",
"Channel No.": "Número do canal",
"Channel No. - Tooltip": "Número do canal",
"Chat ID": "ID do chat",
@@ -1001,6 +1020,7 @@
"Content - Tooltip": "Dica: conteúdo",
"DB test": "Teste do banco de dados",
"DB test - Tooltip": "Dica: teste do banco de dados",
"Disable": "Disable",
"Domain": "Domínio",
"Domain - Tooltip": "Domínio personalizado para armazenamento de objetos",
"Edit Provider": "Editar Provedor",
@@ -1010,6 +1030,7 @@
"Email regex - Tooltip": "Dica: regex de e-mail",
"Email title": "Título do e-mail",
"Email title - Tooltip": "Título do e-mail",
"Enable": "Enable",
"Enable PKCE": "Ativar PKCE",
"Enable PKCE - Tooltip": "Dica: ativar PKCE",
"Enable proxy": "Ativar proxy",
@@ -1284,6 +1305,8 @@
"SSH password": "Senha SSH",
"SSH port": "Porta SSH",
"SSH user": "Usuário SSH",
"SSL mode": "Modo SSL",
"SSL mode - Tooltip": "Dica: modo SSL",
"Service account key": "Chave da conta de serviço",
"Sync interval": "Intervalo de sincronização",
"Sync interval - Tooltip": "Unidade em segundos",

View File

@@ -113,12 +113,19 @@
"Order - Tooltip": "Değer ne kadar küçükse, Uygulamalar sayfasında o kadar yüksek sıralanır",
"Org choice mode": "Organizasyon seçim modu",
"Org choice mode - Tooltip": "Giriş yapmak için organizasyon seçme yöntemi - İpucu",
"Other domains": "Other domains",
"Other domains - Tooltip": "Other domains - Tooltip",
"Please enable \"Signin session\" first before enabling \"Auto signin\"": "Lütfen \"Oturum açma oturumu\"nu etkinleştirmeden önce \"Otomatik oturum açma\"yı etkinleştirin",
"Please input additional domains": "Please input additional domains",
"Please input your application!": "Lütfen uygulamanızı girin!",
"Please input your organization!": "Lütfen organizasyonunuzu girin!",
"Please select a HTML file": "Lütfen bir HTML dosyası seçin",
"Pop up": "Açılır pencere",
"Providers": "Sağlayıcılar",
"Proxy SSL mode": "Proxy SSL mode",
"Proxy SSL mode - Tooltip": "Proxy SSL mode - Tooltip",
"Proxy domain": "Proxy domain",
"Proxy domain - Tooltip": "Proxy domain - Tooltip",
"Random": "Rastgele",
"Real name": "Gerçek ad",
"Redirect URL": "Yönlendirme URL'si",
@@ -128,6 +135,7 @@
"Refresh token expire": "Yenileme jetonu sona erer",
"Refresh token expire - Tooltip": "Yenileme jetonunun son kullanma süresi",
"Reset to Empty": "Boşalt",
"Reverse Proxy": "Reverse Proxy",
"Right": "Sağ",
"Rule": "Kural",
"SAML hash algorithm": "SAML karma algoritması",
@@ -135,6 +143,8 @@
"SAML metadata": "SAML meta verileri",
"SAML metadata - Tooltip": "SAML protokolünün meta verileri - İpucu",
"SAML reply URL": "SAML yanıt URL'si",
"SSL cert": "SSL cert",
"SSL cert - Tooltip": "SSL cert - Tooltip",
"Security": "Güvenlik",
"Select": "Seç",
"Side panel HTML": "Yan panel HTML",
@@ -165,6 +175,8 @@
"Token signing method": "Token imzalama yöntemi",
"Token signing method - Tooltip": "JWT token'ın imzalama yöntemi, sertifika ile aynı algoritma olmalıdır",
"UI Customization": "Arayüz Özelleştirme",
"Upstream host": "Upstream host",
"Upstream host - Tooltip": "Upstream host - Tooltip",
"Use Email as NameID": "NameID olarak E-posta kullan",
"Use Email as NameID - Tooltip": "NameID olarak E-posta kullanın - Araç ipucu",
"Vertical": "Dikey",
@@ -186,7 +198,9 @@
"Expire in years - Tooltip": "Sertifikanın geçerlilik süresi, yıllarda",
"New Cert": "Yeni Sertifika",
"Private key": "Özel anahtar",
"Private key - Tooltip": "Genel anahtar sertifikasına karşılık gelen özel anahtar"
"Private key - Tooltip": "Genel anahtar sertifikasına karşılık gelen özel anahtar",
"Scope - Tooltip": "Sertifikanın kullanım senaryoları",
"Type - Tooltip": "Sertifika türü"
},
"code": {
"Code you received": "Aldığınız kod",
@@ -275,7 +289,6 @@
"Applications that require authentication": "Kimlik doğrulaması gerektiren uygulamalar",
"Apps": "Uygulamalar",
"Authorization": "Yetkilendirme",
"Auto": "Auto",
"Avatar": "Avatar",
"Avatar - Tooltip": "Kullanıcı için genel avatar resmi",
"Back": "Geri",
@@ -757,6 +770,7 @@
"Account menu - Tooltip": "Hesap menüsü - Araç ipucu",
"Admin navbar items": "Yönetici gezinme çubuğu öğeleri",
"Admin navbar items - Tooltip": "Yönetici gezinme çubuğu öğeleri - Araç ipucu",
"All": "All",
"Balance credit": "Bakiye kredisi",
"Balance credit - Tooltip": "Bakiye kredisi - Araç ipucu",
"Balance currency": "Bakiye para birimi",
@@ -921,6 +935,7 @@
"Invalid product": "Invalid product",
"Is recharge": "Yeniden yükleme mi",
"Is recharge - Tooltip": "Mevcut ürün bakiye yeniden yüklemesi ise",
"Name": "Name",
"New Product": "Yeni Ürün",
"No recharge options available": "No recharge options available",
"Order created successfully": "Sipariş başarıyla oluşturuldu",
@@ -933,6 +948,7 @@
"Please add at least one recharge option when custom amount is disabled": "Özel tutar devre dışıyken en az bir yeniden yükleme seçeneği ekleyin",
"Please select a currency": "Lütfen bir para birimi seçin",
"Please select at least one payment provider": "Lütfen en az bir ödeme sağlayıcısı seçin",
"Price": "Price",
"Processing payment...": "Ödeme işleniyor...",
"Product list cannot be empty": "Ürün listesi boş olamaz",
"Product not found or invalid": "Product not found or invalid",
@@ -977,6 +993,7 @@
"Auth Key - Tooltip": "Kimlik Doğrulama Anahtarı - Araç ipucu",
"Auth URL": "Yetkilendirme URL'si",
"Auth URL - Tooltip": "Yetkilendirme URL'si",
"Auto": "Auto",
"Base URL": "Temel URL",
"Base URL - Tooltip": "Temel URL - Araç ipucu",
"Bucket": "Bucket",
@@ -985,6 +1002,8 @@
"Can signin": "Giriş yapabilir",
"Can signup": "Kayıt yapabilir",
"Can unlink": "Bağlantıyı kesebilir",
"Category": "Kategori",
"Category - Tooltip": "Bir kategori seçin",
"Channel No.": "Kanal Numarası",
"Channel No. - Tooltip": "Kanal Numarası",
"Chat ID": "Sohbet Kimliği",
@@ -1001,6 +1020,7 @@
"Content - Tooltip": "İçerik - Araç ipucu",
"DB test": "Veritabanı testi",
"DB test - Tooltip": "Veritabanı testi - Araç ipucu",
"Disable": "Disable",
"Domain": "Alan adı",
"Domain - Tooltip": "Nesne depolama için özel alan adı",
"Edit Provider": "Sağlayıcıyı Düzenle",
@@ -1010,6 +1030,7 @@
"Email regex - Tooltip": "E-posta düzenli ifadesi - Araç ipucu",
"Email title": "E-posta başlığı",
"Email title - Tooltip": "E-posta başlığı",
"Enable": "Enable",
"Enable PKCE": "PKCE'yi etkinleştir",
"Enable PKCE - Tooltip": "PKCE'yi etkinleştir - Araç ipucu",
"Enable proxy": "Proxy'yi etkinleştir",
@@ -1284,6 +1305,8 @@
"SSH password": "SSH şifresi",
"SSH port": "SSH portu",
"SSH user": "SSH kullanıcısı",
"SSL mode": "SSL modu",
"SSL mode - Tooltip": "SSL modu - İpucu",
"Service account key": "Service account key",
"Sync interval": "Senkronizasyon aralığı",
"Sync interval - Tooltip": "Birimi saniye cinsinden",

View File

@@ -113,12 +113,19 @@
"Order - Tooltip": "Чим менше значення, тим вище воно ранжується на сторінці програм",
"Org choice mode": "Режим вибору організації",
"Org choice mode - Tooltip": "Режим вибору організації підказка",
"Other domains": "Other domains",
"Other domains - Tooltip": "Other domains - Tooltip",
"Please enable \"Signin session\" first before enabling \"Auto signin\"": "Спочатку увімкніть \"Сесію входу\", перш ніж увімкнути \"Автоматичний вхід\"",
"Please input additional domains": "Please input additional domains",
"Please input your application!": "Будь ласка, введіть свою заявку!",
"Please input your organization!": "Будь ласка, введіть вашу організацію!",
"Please select a HTML file": "Виберіть файл HTML",
"Pop up": "Вспливаюче вікно",
"Providers": "Постачальники",
"Proxy SSL mode": "Proxy SSL mode",
"Proxy SSL mode - Tooltip": "Proxy SSL mode - Tooltip",
"Proxy domain": "Proxy domain",
"Proxy domain - Tooltip": "Proxy domain - Tooltip",
"Random": "Випадковий",
"Real name": "Справжнє ім'я",
"Redirect URL": "URL-адреса перенаправлення",
@@ -128,6 +135,7 @@
"Refresh token expire": "Термін дії маркера оновлення закінчився",
"Refresh token expire - Tooltip": "Оновити термін дії маркера",
"Reset to Empty": "Скинути до порожнього",
"Reverse Proxy": "Reverse Proxy",
"Right": "правильно",
"Rule": "правило",
"SAML hash algorithm": "Хеш-алгоритм SAML",
@@ -135,6 +143,8 @@
"SAML metadata": "Метадані SAML",
"SAML metadata - Tooltip": "Метадані протоколу SAML",
"SAML reply URL": "URL-адреса відповіді SAML",
"SSL cert": "SSL cert",
"SSL cert - Tooltip": "SSL cert - Tooltip",
"Security": "Безпека",
"Select": "Виберіть",
"Side panel HTML": "HTML бічної панелі",
@@ -165,6 +175,8 @@
"Token signing method": "Метод підпису токена",
"Token signing method - Tooltip": "Метод підпису JWT-токена, повинен бути тим же алгоритмом, що і сертифікат",
"UI Customization": "Налаштування інтерфейсу",
"Upstream host": "Upstream host",
"Upstream host - Tooltip": "Upstream host - Tooltip",
"Use Email as NameID": "Використовувати Email як NameID",
"Use Email as NameID - Tooltip": "Використовувати Email як NameID - підказка",
"Vertical": "Вертикальний",
@@ -186,7 +198,9 @@
"Expire in years - Tooltip": "Термін дії сертифіката, років",
"New Cert": "Новий сертифікат",
"Private key": "Приватний ключ",
"Private key - Tooltip": "Закритий ключ, що відповідає сертифікату відкритого ключа"
"Private key - Tooltip": "Закритий ключ, що відповідає сертифікату відкритого ключа",
"Scope - Tooltip": "Сценарії використання сертифіката",
"Type - Tooltip": "Тип сертифіката"
},
"code": {
"Code you received": "Код, який ви отримали",
@@ -275,7 +289,6 @@
"Applications that require authentication": "Програми, які потребують автентифікації",
"Apps": "програми",
"Authorization": "Авторизація",
"Auto": "Auto",
"Avatar": "Аватар",
"Avatar - Tooltip": "Публічний аватар користувача",
"Back": "Назад",
@@ -757,6 +770,7 @@
"Account menu - Tooltip": "Account menu - Tooltip",
"Admin navbar items": "Admin navbar items",
"Admin navbar items - Tooltip": "Admin navbar items - Tooltip",
"All": "All",
"Balance credit": "Balance credit",
"Balance credit - Tooltip": "Balance credit - Tooltip",
"Balance currency": "Balance currency",
@@ -921,6 +935,7 @@
"Invalid product": "Invalid product",
"Is recharge": "Чи є поповненням",
"Is recharge - Tooltip": "Чи є поточний продукт для поповнення балансу",
"Name": "Name",
"New Product": "Новий продукт",
"No recharge options available": "No recharge options available",
"Order created successfully": "Order created successfully",
@@ -933,6 +948,7 @@
"Please add at least one recharge option when custom amount is disabled": "Please add at least one recharge option when custom amount is disabled",
"Please select a currency": "Please select a currency",
"Please select at least one payment provider": "Please select at least one payment provider",
"Price": "Price",
"Processing payment...": "Processing payment...",
"Product list cannot be empty": "Product list cannot be empty",
"Product not found or invalid": "Product not found or invalid",
@@ -977,6 +993,7 @@
"Auth Key - Tooltip": "Ключ автентифікації для сервісу",
"Auth URL": "URL авторизації",
"Auth URL - Tooltip": "URL для автентифікації",
"Auto": "Auto",
"Base URL": "Базовий URL",
"Base URL - Tooltip": "Базовий URL сервісу",
"Bucket": "Відро",
@@ -985,6 +1002,8 @@
"Can signin": "Можна ввійти",
"Can signup": "Можна записатися",
"Can unlink": "Можна від’єднати",
"Category": "Категорія",
"Category - Tooltip": "Ідентифікатор для категоризації та групування елементів або контенту, що полегшує фільтрацію та управління",
"Channel No.": "Номер каналу",
"Channel No. - Tooltip": "Унікальний номер, що ідентифікує канал зв'язку або передачі даних, використовується для розрізнення різних шляхів передачі",
"Chat ID": "Ідентифікатор чату",
@@ -1001,6 +1020,7 @@
"Content - Tooltip": "Вміст підказка",
"DB test": "Тест БД",
"DB test - Tooltip": "Тест бази даних - підказка",
"Disable": "Disable",
"Domain": "Домен",
"Domain - Tooltip": "Спеціальний домен для зберігання об'єктів",
"Edit Provider": "Редагувати постачальника",
@@ -1010,6 +1030,7 @@
"Email regex - Tooltip": "Email регулярний вираз - підказка",
"Email title": "Назва електронної пошти",
"Email title - Tooltip": "Заголовок електронного листа",
"Enable": "Enable",
"Enable PKCE": "Увімкнути PKCE",
"Enable PKCE - Tooltip": "Увімкнути PKCE - підказка",
"Enable proxy": "Увімкнути проксі",
@@ -1284,6 +1305,8 @@
"SSH password": "пароль SSH",
"SSH port": "порт SSH",
"SSH user": "Користувач SSH",
"SSL mode": "Режим SSL",
"SSL mode - Tooltip": "Режим SSL підказка",
"Service account key": "Service account key",
"Sync interval": "Інтервал синхронізації",
"Sync interval - Tooltip": "Одиниця в секундах",

View File

@@ -113,12 +113,19 @@
"Order - Tooltip": "Giá trị càng nhỏ, xếp hạng càng cao trong trang Ứng dụng",
"Org choice mode": "Chế độ chọn tổ chức",
"Org choice mode - Tooltip": "Phương thức chọn tổ chức để đăng nhập - Gợi ý",
"Other domains": "Other domains",
"Other domains - Tooltip": "Other domains - Tooltip",
"Please enable \"Signin session\" first before enabling \"Auto signin\"": "Vui lòng kích hoạt \"Phiên đăng nhập\" trước khi kích hoạt \"Đăng nhập tự động\"",
"Please input additional domains": "Please input additional domains",
"Please input your application!": "Vui lòng nhập ứng dụng của bạn!",
"Please input your organization!": "Vui lòng nhập tổ chức của bạn!",
"Please select a HTML file": "Vui lòng chọn tệp HTML",
"Pop up": "Bật lên",
"Providers": "Nhà cung cấp",
"Proxy SSL mode": "Proxy SSL mode",
"Proxy SSL mode - Tooltip": "Proxy SSL mode - Tooltip",
"Proxy domain": "Proxy domain",
"Proxy domain - Tooltip": "Proxy domain - Tooltip",
"Random": "Ngẫu nhiên",
"Real name": "Tên thật",
"Redirect URL": "Chuyển hướng URL",
@@ -128,6 +135,7 @@
"Refresh token expire": "Làm mới mã thông báo hết hạn",
"Refresh token expire - Tooltip": "Thời gian hết hạn của mã thông báo làm mới",
"Reset to Empty": "Đặt lại thành trống",
"Reverse Proxy": "Reverse Proxy",
"Right": "Đúng",
"Rule": "Quy tắc",
"SAML hash algorithm": "Thuật toán hash SAML",
@@ -135,6 +143,8 @@
"SAML metadata": "SAML metadata: Siêu dữ liệu SAML",
"SAML metadata - Tooltip": "Metadata của giao thức SAML - Gợi ý",
"SAML reply URL": "URL phản hồi SAML",
"SSL cert": "SSL cert",
"SSL cert - Tooltip": "SSL cert - Tooltip",
"Security": "Bảo mật",
"Select": "Chọn",
"Side panel HTML": "Bảng điều khiển HTML bên lề",
@@ -165,6 +175,8 @@
"Token signing method": "Phương thức ký token",
"Token signing method - Tooltip": "Phương thức ký token JWT, cần cùng thuật toán với chứng chỉ",
"UI Customization": "Tùy chỉnh giao diện",
"Upstream host": "Upstream host",
"Upstream host - Tooltip": "Upstream host - Tooltip",
"Use Email as NameID": "Sử dụng Email làm NameID",
"Use Email as NameID - Tooltip": "Gợi ý sử dụng Email làm NameID",
"Vertical": "Dọc",
@@ -186,7 +198,9 @@
"Expire in years - Tooltip": "Thời hạn hiệu lực của chứng chỉ, tính bằng năm",
"New Cert": "Chứng chỉ mới",
"Private key": "Khóa bí mật",
"Private key - Tooltip": "Khóa riêng tương ứng với chứng thư khóa công khai"
"Private key - Tooltip": "Khóa riêng tương ứng với chứng thư khóa công khai",
"Scope - Tooltip": "Các kịch bản sử dụng của giấy chứng nhận",
"Type - Tooltip": "Loại chứng chỉ"
},
"code": {
"Code you received": "Mã bạn nhận được",
@@ -275,7 +289,6 @@
"Applications that require authentication": "Các ứng dụng yêu cầu xác thực",
"Apps": "Ứng dụng",
"Authorization": "Ủy quyền",
"Auto": "Auto",
"Avatar": "Ảnh đại diện",
"Avatar - Tooltip": "Ảnh đại diện công khai cho người dùng",
"Back": "Quay lại",
@@ -757,6 +770,7 @@
"Account menu - Tooltip": "Menu tài khoản",
"Admin navbar items": "Mục navbar quản trị",
"Admin navbar items - Tooltip": "Mục navbar quản trị",
"All": "All",
"Balance credit": "Số dư tín dụng",
"Balance credit - Tooltip": "Số dư tín dụng",
"Balance currency": "Đơn vị tiền tệ",
@@ -921,6 +935,7 @@
"Invalid product": "Invalid product",
"Is recharge": "Là nạp tiền",
"Is recharge - Tooltip": "Sản phẩm hiện tại có phải để nạp số dư",
"Name": "Name",
"New Product": "Sản phẩm mới",
"No recharge options available": "No recharge options available",
"Order created successfully": "Tạo đơn hàng thành công",
@@ -933,6 +948,7 @@
"Please add at least one recharge option when custom amount is disabled": "Vui lòng thêm ít nhất một tùy chọn nạp tiền khi số tiền tùy chỉnh bị tắt",
"Please select a currency": "Vui lòng chọn một loại tiền tệ",
"Please select at least one payment provider": "Vui lòng chọn ít nhất một nhà cung cấp thanh toán",
"Price": "Price",
"Processing payment...": "Đang xử lý thanh toán...",
"Product list cannot be empty": "Danh sách sản phẩm không thể trống",
"Product not found or invalid": "Product not found or invalid",
@@ -977,6 +993,7 @@
"Auth Key - Tooltip": "Gợi ý khóa xác thực",
"Auth URL": "URL xác thực",
"Auth URL - Tooltip": "URL chứng thực",
"Auto": "Auto",
"Base URL": "URL cơ sở",
"Base URL - Tooltip": "Gợi ý URL cơ sở",
"Bucket": "Thùng đựng nước",
@@ -985,6 +1002,8 @@
"Can signin": "Đăng nhập được không?",
"Can signup": "Đăng ký có thể được thực hiện",
"Can unlink": "Không liên kết được",
"Category": "Thể loại",
"Category - Tooltip": "Chọn một danh mục",
"Channel No.": "Kênh số.",
"Channel No. - Tooltip": "Kênh Số.",
"Chat ID": "ID trò chuyện",
@@ -1001,6 +1020,7 @@
"Content - Tooltip": "Gợi ý nội dung",
"DB test": "DB test",
"DB test - Tooltip": "Kiểm tra DB - Gợi ý",
"Disable": "Disable",
"Domain": "Miền",
"Domain - Tooltip": "Tên miền tùy chỉnh cho lưu trữ đối tượng",
"Edit Provider": "Chỉnh sửa nhà cung cấp",
@@ -1010,6 +1030,7 @@
"Email regex - Tooltip": "Gợi ý biểu thức chính quy Email",
"Email title": "Tiêu đề email",
"Email title - Tooltip": "Tiêu đề của email",
"Enable": "Enable",
"Enable PKCE": "Enable PKCE",
"Enable PKCE - Tooltip": "Kích hoạt PKCE - Gợi ý",
"Enable proxy": "Enable proxy",
@@ -1284,6 +1305,8 @@
"SSH password": "Mật khẩu SSH",
"SSH port": "Cổng SSH",
"SSH user": "Người dùng SSH",
"SSL mode": "Chế độ SSL",
"SSL mode - Tooltip": "Chế độ kết nối SSL với cơ sở dữ liệu",
"Service account key": "Khóa tài khoản dịch vụ",
"Sync interval": "Khoảng thời gian đồng bộ",
"Sync interval - Tooltip": "Khoảng thời gian giữa các lần đồng bộ (tính bằng giây)",

View File

@@ -113,12 +113,19 @@
"Order - Tooltip": "数值越小,在应用列表页面中排序越靠前",
"Org choice mode": "组织选择模式",
"Org choice mode - Tooltip": "采用什么方式选择要登录的组织",
"Other domains": "其他域名",
"Other domains - Tooltip": "也应路由到此应用的其他域名",
"Please enable \"Signin session\" first before enabling \"Auto signin\"": "开启 \"保持登录会话\" 后才能开启 \"自动登录\"",
"Please input additional domains": "请输入其他域名",
"Please input your application!": "请输入你的应用",
"Please input your organization!": "请输入你的组织",
"Please select a HTML file": "请选择一个HTML文件",
"Pop up": "弹框",
"Providers": "提供商",
"Proxy SSL mode": "代理SSL模式",
"Proxy SSL mode - Tooltip": "反向代理的SSL/TLS模式",
"Proxy domain": "代理域名",
"Proxy domain - Tooltip": "此应用的公开访问域名例如blog.example.com",
"Random": "随机",
"Real name": "真实姓名",
"Redirect URL": "重定向 URL",
@@ -128,6 +135,7 @@
"Refresh token expire": "Refresh Token过期",
"Refresh token expire - Tooltip": "Refresh Token过期时间",
"Reset to Empty": "重置为空",
"Reverse Proxy": "反向代理",
"Right": "居右",
"Rule": "规则",
"SAML hash algorithm": "SAML哈希算法",
@@ -135,6 +143,8 @@
"SAML metadata": "SAML元数据",
"SAML metadata - Tooltip": "SAML协议的元数据Metadata信息",
"SAML reply URL": "SAML回复 URL",
"SSL cert": "SSL证书",
"SSL cert - Tooltip": "用于TLS终止的证书",
"Security": "安全设置",
"Select": "选择",
"Side panel HTML": "侧面板HTML",
@@ -165,6 +175,8 @@
"Token signing method": "Token签名算法",
"Token signing method - Tooltip": "JWT token的签名算法需要与证书算法相匹配",
"UI Customization": "界面定制",
"Upstream host": "上游主机",
"Upstream host - Tooltip": "转发请求的上游后端地址例如localhost:8080 或 192.168.1.100",
"Use Email as NameID": "使用邮箱作为NameID",
"Use Email as NameID - Tooltip": "使用邮箱作为NameID",
"Vertical": "垂直",
@@ -186,7 +198,9 @@
"Expire in years - Tooltip": "公钥证书的有效期,以年为单位",
"New Cert": "添加证书",
"Private key": "私钥",
"Private key - Tooltip": "公钥证书对应的私钥"
"Private key - Tooltip": "公钥证书对应的私钥",
"Scope - Tooltip": "公钥证书的使用场景",
"Type - Tooltip": "公钥证书的类型"
},
"code": {
"Code you received": "验证码",
@@ -275,7 +289,6 @@
"Applications that require authentication": "需要认证和鉴权的应用",
"Apps": "应用列表",
"Authorization": "Casbin权限管理",
"Auto": "Auto",
"Avatar": "头像",
"Avatar - Tooltip": "公开展示的用户头像",
"Back": "返回",
@@ -757,6 +770,7 @@
"Account menu - Tooltip": "账户相关的菜单项",
"Admin navbar items": "管理员导航栏项",
"Admin navbar items - Tooltip": "管理员导航栏中的项目",
"All": "All",
"Balance credit": "余额积分",
"Balance credit - Tooltip": "用户的余额积分信息",
"Balance currency": "余额币种",
@@ -921,6 +935,7 @@
"Invalid product": "Invalid product",
"Is recharge": "充值",
"Is recharge - Tooltip": "当前商品是否为充值商品",
"Name": "Name",
"New Product": "添加商品",
"No recharge options available": "No recharge options available",
"Order created successfully": "订单创建成功",
@@ -933,6 +948,7 @@
"Please add at least one recharge option when custom amount is disabled": "当禁用自定义金额时,请至少添加一个充值选项",
"Please select a currency": "请选择一种货币",
"Please select at least one payment provider": "请至少选择一个支付提供商",
"Price": "Price",
"Processing payment...": "正在处理支付...",
"Product list cannot be empty": "商品列表不能为空",
"Product not found or invalid": "Product not found or invalid",
@@ -977,6 +993,7 @@
"Auth Key - Tooltip": "服务的认证密钥",
"Auth URL": "认证URL",
"Auth URL - Tooltip": "用于认证的URL",
"Auto": "Auto",
"Base URL": "基本URL",
"Base URL - Tooltip": "服务的基本URL",
"Bucket": "存储桶",
@@ -985,6 +1002,8 @@
"Can signin": "可用于登录",
"Can signup": "可用于注册",
"Can unlink": "可解绑定",
"Category": "分类",
"Category - Tooltip": "用于对项目或内容进行归类分组的标识",
"Channel No.": "Channel号码",
"Channel No. - Tooltip": "标识通信或数据传输通道的唯一编号",
"Chat ID": "聊天ID",
@@ -1001,6 +1020,7 @@
"Content - Tooltip": "消息、通知或文档中包含的具体信息或数据内容",
"DB test": "数据库测试",
"DB test - Tooltip": "测试数据库连接是否正常",
"Disable": "Disable",
"Domain": "域名",
"Domain - Tooltip": "对象存储的自定义域名",
"Edit Provider": "编辑提供商",
@@ -1010,6 +1030,7 @@
"Email regex - Tooltip": "只有符合此正则表达式的Email才能进行注册或登录",
"Email title": "邮件标题",
"Email title - Tooltip": "邮件标题",
"Enable": "Enable",
"Enable PKCE": "启用PKCE",
"Enable PKCE - Tooltip": "是否启用PKCE扩展协议",
"Enable proxy": "启用代理",
@@ -1284,6 +1305,8 @@
"SSH password": "SSH密码",
"SSH port": "SSH端口",
"SSH user": "SSH用户",
"SSL mode": "SSL模式",
"SSL mode - Tooltip": "连接数据库采用哪种SSL模式",
"Service account key": "Service account key",
"Sync interval": "同步间隔",
"Sync interval - Tooltip": "单位为秒",

View File

@@ -21,7 +21,7 @@ class CartTable extends React.Component {
render() {
const columns = [
{
title: i18next.t("general:Name"),
title: i18next.t("product:Name"),
dataIndex: "displayName",
key: "displayName",
width: "200px",
@@ -43,7 +43,7 @@ class CartTable extends React.Component {
},
},
{
title: i18next.t("order:Price"),
title: i18next.t("product:Price"),
dataIndex: "price",
key: "price",
width: "120px",

View File

@@ -104,7 +104,7 @@ class ProviderTable extends React.Component {
},
},
{
title: i18next.t("general:Category"),
title: i18next.t("provider:Category"),
dataIndex: "category",
key: "category",
width: "100px",

View File

@@ -168,7 +168,7 @@ export function getTransactionTableColumns(options = {}) {
});
columns.push({
title: i18next.t("general:Category"),
title: i18next.t("provider:Category"),
dataIndex: "category",
key: "category",
width: "120px",