Compare commits

...

16 Commits

Author SHA1 Message Date
Coki
e3a43d0062 feat: improve the advanced editor of model edit page (#3427) 2024-12-15 02:07:02 +08:00
DacongDA
0cf281cac0 feat: fix record's password regex bug (#3421) 2024-12-11 08:43:03 +08:00
XIAOZHUOWU
7322f67ae0 feat: add model, adapter and enforcer to the dashboard page chart (#3413)
* [feature] Add more data (Model, Adapter, Enforcer) to the dashboard page chart #3379

* feat: add model, adapter, enforcer to dashboard
2024-12-09 16:07:39 +08:00
Xin-Fax
b927c6d7b4 feat: support LDAP's SetPassword (#3395)
* fix: Resolve the issue mentioned in #3392

* fix: Change checkLdapUserPassword to CheckLdapUserPassword.

* fix: the issue mentioned by hsluoyz.

* fix: Check if the user parameter is nil

* fix: use existing i18n message
2024-12-09 16:06:24 +08:00
nohup
01212cd1f3 feat: add AiAssistantUrl to frontend config (#3385) 2024-12-08 20:44:28 +08:00
Xinyu Ge
bf55f94d41 feat: support CUCloud OSS storage provider (#3400) 2024-12-08 20:24:38 +08:00
Yang Luo
f14711d315 feat: fix frontend bug 2024-12-07 21:53:01 +08:00
DacongDA
58e1c28f7c feat: support LDAPS protocol (#3390)
* feat: support ldaps

* fix: unencrypted port 389 not work after enable SSL
fix: remove useless conf and set ldapsCertId to empty
fix: return and log getTLSconfig error

* fix: remove unused setting

* fix: check nil condition

* fix: not log fail when certId is empty
2024-12-07 21:26:07 +08:00
Yang Luo
922b19c64b feat: reduce i18n items 2024-12-07 21:22:57 +08:00
DacongDA
1d21c3fa90 feat: fix issue that introspectionResponse uses Bearer instead of raw tokenType (#3399) 2024-12-05 20:59:30 +08:00
DacongDA
6175fd6764 feat: make token_type_hint optional (#3397) 2024-12-04 20:10:15 +08:00
Luckery
2ceb54f058 feat: support most popular currencies (#3388) 2024-12-01 21:46:44 +08:00
DacongDA
aaeaa7fefa feat: update go sms sender (#3386) 2024-11-29 23:00:34 +08:00
DacongDA
d522247552 feat: fix countryCode param bug in MFA login (#3384) 2024-11-29 21:46:06 +08:00
DacongDA
79dbdab6c9 feat: fix "dest is missing" bug in MFA login (#3383)
* feat: support stateless mfa setup

* Revert "feat: support stateless mfa setup"

This reverts commit bd843b2ff3.

* feat: use new implement

* fix: missing set field on login
2024-11-29 19:59:30 +08:00
DacongDA
fe40910e3b feat: support stateless MFA setup (#3382) 2024-11-29 19:50:10 +08:00
60 changed files with 1032 additions and 260 deletions

View File

@@ -25,6 +25,8 @@ enableErrorMask = false
enableGzip = true
inactiveTimeoutMinutes =
ldapServerPort = 389
ldapsCertId = ""
ldapsServerPort = 636
radiusServerPort = 1812
radiusSecret = "secret"
quota = {"organization": -1, "user": -1, "application": -1, "provider": -1}

View File

@@ -22,13 +22,6 @@ import (
"github.com/google/uuid"
)
const (
MfaRecoveryCodesSession = "mfa_recovery_codes"
MfaCountryCodeSession = "mfa_country_code"
MfaDestSession = "mfa_dest"
MfaTotpSecretSession = "mfa_totp_secret"
)
// MfaSetupInitiate
// @Title MfaSetupInitiate
// @Tag MFA API
@@ -72,11 +65,6 @@ func (c *ApiController) MfaSetupInitiate() {
}
recoveryCode := uuid.NewString()
c.SetSession(MfaRecoveryCodesSession, recoveryCode)
if mfaType == object.TotpType {
c.SetSession(MfaTotpSecretSession, mfaProps.Secret)
}
mfaProps.RecoveryCodes = []string{recoveryCode}
resp := mfaProps
@@ -94,6 +82,9 @@ func (c *ApiController) MfaSetupInitiate() {
func (c *ApiController) MfaSetupVerify() {
mfaType := c.Ctx.Request.Form.Get("mfaType")
passcode := c.Ctx.Request.Form.Get("passcode")
secret := c.Ctx.Request.Form.Get("secret")
dest := c.Ctx.Request.Form.Get("dest")
countryCode := c.Ctx.Request.Form.Get("countryCode")
if mfaType == "" || passcode == "" {
c.ResponseError("missing auth type or passcode")
@@ -104,32 +95,28 @@ func (c *ApiController) MfaSetupVerify() {
MfaType: mfaType,
}
if mfaType == object.TotpType {
secret := c.GetSession(MfaTotpSecretSession)
if secret == nil {
if secret == "" {
c.ResponseError("totp secret is missing")
return
}
config.Secret = secret.(string)
config.Secret = secret
} else if mfaType == object.SmsType {
dest := c.GetSession(MfaDestSession)
if dest == nil {
if dest == "" {
c.ResponseError("destination is missing")
return
}
config.Secret = dest.(string)
countryCode := c.GetSession(MfaCountryCodeSession)
if countryCode == nil {
config.Secret = dest
if countryCode == "" {
c.ResponseError("country code is missing")
return
}
config.CountryCode = countryCode.(string)
config.CountryCode = countryCode
} else if mfaType == object.EmailType {
dest := c.GetSession(MfaDestSession)
if dest == nil {
if dest == "" {
c.ResponseError("destination is missing")
return
}
config.Secret = dest.(string)
config.Secret = dest
}
mfaUtil := object.GetMfaUtil(mfaType, config)
@@ -159,6 +146,10 @@ func (c *ApiController) MfaSetupEnable() {
owner := c.Ctx.Request.Form.Get("owner")
name := c.Ctx.Request.Form.Get("name")
mfaType := c.Ctx.Request.Form.Get("mfaType")
secret := c.Ctx.Request.Form.Get("secret")
dest := c.Ctx.Request.Form.Get("dest")
countryCode := c.Ctx.Request.Form.Get("secret")
recoveryCodes := c.Ctx.Request.Form.Get("recoveryCodes")
user, err := object.GetUser(util.GetId(owner, name))
if err != nil {
@@ -176,43 +167,39 @@ func (c *ApiController) MfaSetupEnable() {
}
if mfaType == object.TotpType {
secret := c.GetSession(MfaTotpSecretSession)
if secret == nil {
if secret == "" {
c.ResponseError("totp secret is missing")
return
}
config.Secret = secret.(string)
config.Secret = secret
} else if mfaType == object.EmailType {
if user.Email == "" {
dest := c.GetSession(MfaDestSession)
if dest == nil {
if dest == "" {
c.ResponseError("destination is missing")
return
}
user.Email = dest.(string)
user.Email = dest
}
} else if mfaType == object.SmsType {
if user.Phone == "" {
dest := c.GetSession(MfaDestSession)
if dest == nil {
if dest == "" {
c.ResponseError("destination is missing")
return
}
user.Phone = dest.(string)
countryCode := c.GetSession(MfaCountryCodeSession)
if countryCode == nil {
user.Phone = dest
if countryCode == "" {
c.ResponseError("country code is missing")
return
}
user.CountryCode = countryCode.(string)
user.CountryCode = countryCode
}
}
recoveryCodes := c.GetSession(MfaRecoveryCodesSession)
if recoveryCodes == nil {
if recoveryCodes == "" {
c.ResponseError("recovery codes is missing")
return
}
config.RecoveryCodes = []string{recoveryCodes.(string)}
config.RecoveryCodes = []string{recoveryCodes}
mfaUtil := object.GetMfaUtil(mfaType, config)
if mfaUtil == nil {
@@ -226,14 +213,6 @@ func (c *ApiController) MfaSetupEnable() {
return
}
c.DelSession(MfaRecoveryCodesSession)
if mfaType == object.TotpType {
c.DelSession(MfaTotpSecretSession)
} else {
c.DelSession(MfaCountryCodeSession)
c.DelSession(MfaDestSession)
}
c.ResponseOk(http.StatusText(http.StatusOK))
}

View File

@@ -322,17 +322,22 @@ func (c *ApiController) IntrospectToken() {
}
tokenTypeHint := c.Input().Get("token_type_hint")
token, err := object.GetTokenByTokenValue(tokenValue, tokenTypeHint)
if err != nil {
c.ResponseTokenError(err.Error())
return
}
if token == nil {
c.Data["json"] = &object.IntrospectionResponse{Active: false}
c.ServeJSON()
return
var token *object.Token
if tokenTypeHint != "" {
token, err = object.GetTokenByTokenValue(tokenValue, tokenTypeHint)
if err != nil {
c.ResponseTokenError(err.Error())
return
}
if token == nil {
c.Data["json"] = &object.IntrospectionResponse{Active: false}
c.ServeJSON()
return
}
}
var introspectionResponse object.IntrospectionResponse
if application.TokenFormat == "JWT-Standard" {
jwtToken, err := object.ParseStandardJwtTokenByApplication(tokenValue, application)
if err != nil || jwtToken.Valid() != nil {
@@ -344,12 +349,37 @@ func (c *ApiController) IntrospectToken() {
return
}
c.Data["json"] = &object.IntrospectionResponse{
introspectionResponse = object.IntrospectionResponse{
Active: true,
Scope: jwtToken.Scope,
ClientId: clientId,
Username: token.User,
TokenType: token.TokenType,
Username: jwtToken.Name,
TokenType: jwtToken.TokenType,
Exp: jwtToken.ExpiresAt.Unix(),
Iat: jwtToken.IssuedAt.Unix(),
Nbf: jwtToken.NotBefore.Unix(),
Sub: jwtToken.Subject,
Aud: jwtToken.Audience,
Iss: jwtToken.Issuer,
Jti: jwtToken.ID,
}
} else {
jwtToken, err := object.ParseJwtTokenByApplication(tokenValue, application)
if err != nil || jwtToken.Valid() != nil {
// and token revoked case. but we not implement
// TODO: 2022-03-03 add token revoked check, when we implemented the Token Revocation(rfc7009) Specs.
// refs: https://tools.ietf.org/html/rfc7009
c.Data["json"] = &object.IntrospectionResponse{Active: false}
c.ServeJSON()
return
}
introspectionResponse = object.IntrospectionResponse{
Active: true,
Scope: jwtToken.Scope,
ClientId: clientId,
Username: jwtToken.Name,
TokenType: jwtToken.TokenType,
Exp: jwtToken.ExpiresAt.Unix(),
Iat: jwtToken.IssuedAt.Unix(),
Nbf: jwtToken.NotBefore.Unix(),
@@ -358,33 +388,22 @@ func (c *ApiController) IntrospectToken() {
Iss: jwtToken.Issuer,
Jti: jwtToken.ID,
}
c.ServeJSON()
return
}
jwtToken, err := object.ParseJwtTokenByApplication(tokenValue, application)
if err != nil || jwtToken.Valid() != nil {
// and token revoked case. but we not implement
// TODO: 2022-03-03 add token revoked check, when we implemented the Token Revocation(rfc7009) Specs.
// refs: https://tools.ietf.org/html/rfc7009
c.Data["json"] = &object.IntrospectionResponse{Active: false}
c.ServeJSON()
return
if tokenTypeHint == "" {
token, err = object.GetTokenByTokenValue(tokenValue, introspectionResponse.TokenType)
if err != nil {
c.ResponseTokenError(err.Error())
return
}
if token == nil {
c.Data["json"] = &object.IntrospectionResponse{Active: false}
c.ServeJSON()
return
}
}
introspectionResponse.TokenType = token.TokenType
c.Data["json"] = &object.IntrospectionResponse{
Active: true,
Scope: jwtToken.Scope,
ClientId: clientId,
Username: token.User,
TokenType: token.TokenType,
Exp: jwtToken.ExpiresAt.Unix(),
Iat: jwtToken.IssuedAt.Unix(),
Nbf: jwtToken.NotBefore.Unix(),
Sub: jwtToken.Subject,
Aud: jwtToken.Audience,
Iss: jwtToken.Issuer,
Jti: jwtToken.ID,
}
c.Data["json"] = introspectionResponse
c.ServeJSON()
}

View File

@@ -475,6 +475,16 @@ func (c *ApiController) SetPassword() {
userId := util.GetId(userOwner, userName)
user, err := object.GetUser(userId)
if err != nil {
c.ResponseError(err.Error())
return
}
if user == nil {
c.ResponseError(fmt.Sprintf(c.T("general:The user: %s doesn't exist"), userId))
return
}
requestUserId := c.GetSessionUsername()
if requestUserId == "" && code == "" {
c.ResponseError(c.T("general:Please login first"), "Please login first")
@@ -518,7 +528,11 @@ func (c *ApiController) SetPassword() {
}
}
} else if code == "" {
err = object.CheckPassword(targetUser, oldPassword, c.GetAcceptLanguage())
if user.Ldap == "" {
err = object.CheckPassword(targetUser, oldPassword, c.GetAcceptLanguage())
} else {
err = object.CheckLdapUserPassword(targetUser, oldPassword, c.GetAcceptLanguage())
}
if err != nil {
c.ResponseError(err.Error())
return
@@ -563,7 +577,12 @@ func (c *ApiController) SetPassword() {
targetUser.NeedUpdatePassword = false
targetUser.LastChangePasswordTime = util.GetCurrentTime()
_, err = object.UpdateUser(userId, targetUser, []string{"password", "need_update_password", "password_type", "last_change_password_time"}, false)
if user.Ldap == "" {
_, err = object.UpdateUser(userId, targetUser, []string{"password", "need_update_password", "password_type", "last_change_password_time"}, false)
} else {
err = object.ResetLdapPassword(targetUser, newPassword, c.GetAcceptLanguage())
}
if err != nil {
c.ResponseError(err.Error())
return

View File

@@ -246,8 +246,6 @@ func (c *ApiController) SendVerificationCode() {
if user != nil && util.GetMaskedEmail(mfaProps.Secret) == vform.Dest {
vform.Dest = mfaProps.Secret
}
} else if vform.Method == MfaSetupVerification {
c.SetSession(MfaDestSession, vform.Dest)
}
provider, err = application.GetEmailProvider(vform.Method)
@@ -282,11 +280,6 @@ func (c *ApiController) SendVerificationCode() {
vform.CountryCode = user.GetCountryCode(vform.CountryCode)
}
}
if vform.Method == MfaSetupVerification {
c.SetSession(MfaCountryCodeSession, vform.CountryCode)
c.SetSession(MfaDestSession, vform.Dest)
}
} else if vform.Method == MfaAuthVerification {
mfaProps := user.GetPreferredMfaProps(false)
if user != nil && util.GetMaskedPhone(mfaProps.Secret) == vform.Dest {

3
go.mod
View File

@@ -9,7 +9,7 @@ require (
github.com/beego/beego v1.12.12
github.com/beevik/etree v1.1.0
github.com/casbin/casbin/v2 v2.77.2
github.com/casdoor/go-sms-sender v0.24.0
github.com/casdoor/go-sms-sender v0.25.0
github.com/casdoor/gomail/v2 v2.0.1
github.com/casdoor/ldapserver v1.2.0
github.com/casdoor/notify v0.45.0
@@ -63,6 +63,7 @@ require (
golang.org/x/crypto v0.21.0
golang.org/x/net v0.21.0
golang.org/x/oauth2 v0.17.0
golang.org/x/text v0.14.0
google.golang.org/api v0.150.0
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/square/go-jose.v2 v2.6.0

4
go.sum
View File

@@ -1087,8 +1087,8 @@ github.com/casdoor/casdoor-go-sdk v0.50.0 h1:bUYbz/MzJuWfLKJbJM0+U0YpYewAur+THp5
github.com/casdoor/casdoor-go-sdk v0.50.0/go.mod h1:cMnkCQJgMYpgAlgEx8reSt1AVaDIQLcJ1zk5pzBaz+4=
github.com/casdoor/go-reddit/v2 v2.1.0 h1:kIbfdJ7AA7H0uTQ8s0q4GGZqSS5V9wVE74RrXyD9XPs=
github.com/casdoor/go-reddit/v2 v2.1.0/go.mod h1:eagkvwlZ4Hcsuc/uQsLHYEulz5jN65SVSwV/AIE7zsc=
github.com/casdoor/go-sms-sender v0.24.0 h1:LNLsce3EG/87I3JS6UiajF3LlQmdIiCgebEu0IE4wSM=
github.com/casdoor/go-sms-sender v0.24.0/go.mod h1:bOm4H8/YfJmEHjBatEVQFOnAf0OOn1B0Wi5B7zDhws0=
github.com/casdoor/go-sms-sender v0.25.0 h1:eF4cOCSbjVg7+0uLlJQnna/FQ0BWW+Fp/x4cXhzQu1Y=
github.com/casdoor/go-sms-sender v0.25.0/go.mod h1:bOm4H8/YfJmEHjBatEVQFOnAf0OOn1B0Wi5B7zDhws0=
github.com/casdoor/gomail/v2 v2.0.1 h1:J+FG6x80s9e5lBHUn8Sv0Y56mud34KiWih5YdmudR/w=
github.com/casdoor/gomail/v2 v2.0.1/go.mod h1:VnGPslEAtpix5FjHisR/WKB1qvZDBaujbikxDe9d+2Q=
github.com/casdoor/ldapserver v1.2.0 h1:HdSYe+ULU6z9K+2BqgTrJKQRR4//ERAXB64ttOun6Ow=

View File

@@ -15,6 +15,7 @@
package ldap
import (
"crypto/tls"
"fmt"
"hash/fnv"
"log"
@@ -27,21 +28,68 @@ import (
func StartLdapServer() {
ldapServerPort := conf.GetConfigString("ldapServerPort")
if ldapServerPort == "" || ldapServerPort == "0" {
return
}
ldapsServerPort := conf.GetConfigString("ldapsServerPort")
server := ldap.NewServer()
serverSsl := ldap.NewServer()
routes := ldap.NewRouteMux()
routes.Bind(handleBind)
routes.Search(handleSearch).Label(" SEARCH****")
server.Handle(routes)
err := server.ListenAndServe("0.0.0.0:" + ldapServerPort)
serverSsl.Handle(routes)
go func() {
if ldapServerPort == "" || ldapServerPort == "0" {
return
}
err := server.ListenAndServe("0.0.0.0:" + ldapServerPort)
if err != nil {
log.Printf("StartLdapServer() failed, err = %s", err.Error())
}
}()
go func() {
if ldapsServerPort == "" || ldapsServerPort == "0" {
return
}
ldapsCertId := conf.GetConfigString("ldapsCertId")
if ldapsCertId == "" {
return
}
config, err := getTLSconfig(ldapsCertId)
if err != nil {
log.Printf("StartLdapsServer() failed, err = %s", err.Error())
return
}
secureConn := func(s *ldap.Server) {
s.Listener = tls.NewListener(s.Listener, config)
}
err = serverSsl.ListenAndServe("0.0.0.0:"+ldapsServerPort, secureConn)
if err != nil {
log.Printf("StartLdapsServer() failed, err = %s", err.Error())
}
}()
}
func getTLSconfig(ldapsCertId string) (*tls.Config, error) {
rawCert, err := object.GetCert(ldapsCertId)
if err != nil {
log.Printf("StartLdapServer() failed, err = %s", err.Error())
return nil, err
}
if rawCert == nil {
return nil, fmt.Errorf("cert is empty")
}
cert, err := tls.X509KeyPair([]byte(rawCert.Certificate), []byte(rawCert.PrivateKey))
if err != nil {
return &tls.Config{}, err
}
return &tls.Config{
MinVersion: tls.VersionTLS10,
MaxVersion: tls.VersionTLS13,
Certificates: []tls.Certificate{cert},
}, nil
}
func handleBind(w ldap.ResponseWriter, m *ldap.Message) {

View File

@@ -273,7 +273,7 @@ func CheckPasswordComplexity(user *User, password string) string {
return CheckPasswordComplexityByOrg(organization, password)
}
func checkLdapUserPassword(user *User, password string, lang string) error {
func CheckLdapUserPassword(user *User, password string, lang string) error {
ldaps, err := GetLdaps(user.Owner)
if err != nil {
return err
@@ -368,7 +368,7 @@ func CheckUserPassword(organization string, username string, password string, la
}
// only for LDAP users
err = checkLdapUserPassword(user, password, lang)
err = CheckLdapUserPassword(user, password, lang)
if err != nil {
if err.Error() == "user not exist" {
return nil, fmt.Errorf(i18n.Translate(lang, "check:The user: %s doesn't exist in LDAP server"), username)

View File

@@ -31,6 +31,9 @@ type Dashboard struct {
CertCounts []int `json:"certCounts"`
PermissionCounts []int `json:"permissionCounts"`
TransactionCounts []int `json:"transactionCounts"`
ModelCounts []int `json:"modelCounts"`
AdapterCounts []int `json:"adapterCounts"`
EnforcerCounts []int `json:"enforcerCounts"`
}
func GetDashboard(owner string) (*Dashboard, error) {
@@ -50,6 +53,9 @@ func GetDashboard(owner string) (*Dashboard, error) {
CertCounts: make([]int, 31),
PermissionCounts: make([]int, 31),
TransactionCounts: make([]int, 31),
ModelCounts: make([]int, 31),
AdapterCounts: make([]int, 31),
EnforcerCounts: make([]int, 31),
}
organizations := []Organization{}
@@ -63,9 +69,12 @@ func GetDashboard(owner string) (*Dashboard, error) {
certs := []Cert{}
permissions := []Permission{}
transactions := []Transaction{}
models := []Model{}
adapters := []Adapter{}
enforcers := []Enforcer{}
var wg sync.WaitGroup
wg.Add(11)
wg.Add(14)
go func() {
defer wg.Done()
if err := ormer.Engine.Find(&organizations, &Organization{Owner: owner}); err != nil {
@@ -148,6 +157,27 @@ func GetDashboard(owner string) (*Dashboard, error) {
panic(err)
}
}()
go func() {
defer wg.Done()
if err := ormer.Engine.Find(&models, &Model{Owner: owner}); err != nil {
panic(err)
}
}()
go func() {
defer wg.Done()
if err := ormer.Engine.Find(&adapters, &Adapter{Owner: owner}); err != nil {
panic(err)
}
}()
go func() {
defer wg.Done()
if err := ormer.Engine.Find(&enforcers, &Enforcer{Owner: owner}); err != nil {
panic(err)
}
}()
wg.Wait()
nowTime := time.Now()
@@ -164,6 +194,9 @@ func GetDashboard(owner string) (*Dashboard, error) {
dashboard.CertCounts[30-i] = countCreatedBefore(certs, cutTime)
dashboard.PermissionCounts[30-i] = countCreatedBefore(permissions, cutTime)
dashboard.TransactionCounts[30-i] = countCreatedBefore(transactions, cutTime)
dashboard.ModelCounts[30-i] = countCreatedBefore(models, cutTime)
dashboard.AdapterCounts[30-i] = countCreatedBefore(adapters, cutTime)
dashboard.EnforcerCounts[30-i] = countCreatedBefore(enforcers, cutTime)
}
return dashboard, nil
}
@@ -248,6 +281,27 @@ func countCreatedBefore(objects interface{}, before time.Time) int {
count++
}
}
case []Model:
for _, m := range obj {
createdTime, _ := time.Parse("2006-01-02T15:04:05-07:00", m.CreatedTime)
if createdTime.Before(before) {
count++
}
}
case []Adapter:
for _, a := range obj {
createdTime, _ := time.Parse("2006-01-02T15:04:05-07:00", a.CreatedTime)
if createdTime.Before(before) {
count++
}
}
case []Enforcer:
for _, e := range obj {
createdTime, _ := time.Parse("2006-01-02T15:04:05-07:00", e.CreatedTime)
if createdTime.Before(before) {
count++
}
}
}
return count
}

View File

@@ -20,9 +20,11 @@ import (
"strings"
"github.com/casdoor/casdoor/conf"
"github.com/casdoor/casdoor/i18n"
"github.com/casdoor/casdoor/util"
goldap "github.com/go-ldap/ldap/v3"
"github.com/thanhpk/randstr"
"golang.org/x/text/encoding/unicode"
)
type LdapConn struct {
@@ -371,6 +373,64 @@ func GetExistUuids(owner string, uuids []string) ([]string, error) {
return existUuids, nil
}
func ResetLdapPassword(user *User, newPassword string, lang string) error {
ldaps, err := GetLdaps(user.Owner)
if err != nil {
return err
}
for _, ldapServer := range ldaps {
conn, err := ldapServer.GetLdapConn()
if err != nil {
continue
}
searchReq := goldap.NewSearchRequest(ldapServer.BaseDn, goldap.ScopeWholeSubtree, goldap.NeverDerefAliases,
0, 0, false, ldapServer.buildAuthFilterString(user), []string{}, nil)
searchResult, err := conn.Conn.Search(searchReq)
if err != nil {
conn.Close()
return err
}
if len(searchResult.Entries) == 0 {
conn.Close()
continue
}
if len(searchResult.Entries) > 1 {
conn.Close()
return fmt.Errorf(i18n.Translate(lang, "check:Multiple accounts with same uid, please check your ldap server"))
}
userDn := searchResult.Entries[0].DN
var pwdEncoded string
modifyPasswordRequest := goldap.NewModifyRequest(userDn, nil)
if conn.IsAD {
utf16 := unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM)
pwdEncoded, err := utf16.NewEncoder().String("\"" + newPassword + "\"")
if err != nil {
conn.Close()
return err
}
modifyPasswordRequest.Replace("unicodePwd", []string{pwdEncoded})
modifyPasswordRequest.Replace("userAccountControl", []string{"512"})
} else {
pwdEncoded = newPassword
modifyPasswordRequest.Replace("userPassword", []string{pwdEncoded})
}
err = conn.Conn.Modify(modifyPasswordRequest)
if err != nil {
conn.Close()
return err
}
conn.Close()
}
return nil
}
func (ldapUser *LdapUser) buildLdapUserName(owner string) (string, error) {
user := User{}
uidWithNumber := fmt.Sprintf("%s_%s", ldapUser.Uid, ldapUser.UidNumber)

View File

@@ -33,7 +33,7 @@ var (
func init() {
logPostOnly = conf.GetConfigBool("logPostOnly")
passwordRegex = regexp.MustCompile("\"password\":\".+\"")
passwordRegex = regexp.MustCompile("\"password\":\"([^\"]*?)\"")
}
type Record struct {

View File

@@ -124,6 +124,7 @@ func GetTokenByRefreshToken(refreshToken string) (*Token, error) {
func GetTokenByTokenValue(tokenValue, tokenTypeHint string) (*Token, error) {
switch tokenTypeHint {
case "access_token":
case "access-token":
token, err := GetTokenByAccessToken(tokenValue)
if err != nil {
return nil, err
@@ -132,6 +133,7 @@ func GetTokenByTokenValue(tokenValue, tokenTypeHint string) (*Token, error) {
return token, nil
}
case "refresh_token":
case "refresh-token":
token, err := GetTokenByRefreshToken(tokenValue)
if err != nil {
return nil, err

View File

@@ -504,7 +504,7 @@ func GetPasswordToken(application *Application, username string, password string
}
if user.Ldap != "" {
err = checkLdapUserPassword(user, password, "en")
err = CheckLdapUserPassword(user, password, "en")
} else {
err = CheckPassword(user, password, "en")
}

21
storage/cucloud_oss.go Normal file
View File

@@ -0,0 +1,21 @@
package storage
import (
awss3 "github.com/aws/aws-sdk-go/service/s3"
"github.com/casdoor/oss"
"github.com/casdoor/oss/s3"
)
func NewCUCloudOssStorageProvider(clientId string, clientSecret string, region string, bucket string, endpoint string) oss.StorageInterface {
sp := s3.New(&s3.Config{
AccessID: clientId,
AccessKey: clientSecret,
Region: region,
Bucket: bucket,
Endpoint: endpoint,
S3Endpoint: endpoint,
ACL: awss3.BucketCannedACLPublicRead,
})
return sp
}

View File

@@ -38,6 +38,8 @@ func GetStorageProvider(providerType string, clientId string, clientSecret strin
return NewSynologyNasStorageProvider(clientId, clientSecret, endpoint), nil
case "Casdoor":
return NewCasdoorStorageProvider(providerType, clientId, clientSecret, region, bucket, endpoint, cert, content), nil
case "CUCloud OSS":
return NewCUCloudOssStorageProvider(clientId, clientSecret, region, bucket, endpoint), nil
}
return nil, nil

View File

@@ -308,7 +308,7 @@ class App extends Component {
AI Assistant
</a>
</Tooltip>
<a className="custom-link" style={{float: "right", marginTop: "2px"}} target="_blank" rel="noreferrer" href={"https://ai.casbin.com"}>
<a className="custom-link" style={{float: "right", marginTop: "2px"}} target="_blank" rel="noreferrer" href={`${Conf.AiAssistantUrl}`}>
<ShareAltOutlined className="custom-link" style={{fontSize: "20px", color: "rgb(140,140,140)"}} />
</a>
<a className="custom-link" style={{float: "right", marginRight: "30px", marginTop: "2px"}} target="_blank" rel="noreferrer" href={"https://github.com/casibase/casibase"}>
@@ -326,7 +326,7 @@ class App extends Component {
}}
visible={this.state.isAiAssistantOpen}
>
<iframe id="iframeHelper" title={"iframeHelper"} src={"https://ai.casbin.com/?isRaw=1"} width="100%" height="100%" scrolling="no" frameBorder="no" />
<iframe id="iframeHelper" title={"iframeHelper"} src={`${Conf.AiAssistantUrl}/?isRaw=1`} width="100%" height="100%" scrolling="no" frameBorder="no" />
</Drawer>
);
}

View File

@@ -31,3 +31,6 @@ export const ThemeDefault = {
};
export const CustomFooter = null;
// Blank or null to hide Ai Assistant button
export const AiAssistantUrl = "https://ai.casbin.com";

View File

@@ -26,10 +26,12 @@ const IframeEditor = forwardRef(({initialModelText, onModelTextChange}, ref) =>
onModelTextChange(event.data.modelText);
} else if (event.data.type === "iframeReady") {
setIframeReady(true);
iframeRef.current?.contentWindow.postMessage({
type: "initializeModel",
modelText: initialModelText,
}, "*");
if (initialModelText && iframeRef.current?.contentWindow) {
iframeRef.current.contentWindow.postMessage({
type: "initializeModel",
modelText: initialModelText,
}, "*");
}
}
};
@@ -39,11 +41,15 @@ const IframeEditor = forwardRef(({initialModelText, onModelTextChange}, ref) =>
useImperativeHandle(ref, () => ({
getModelText: () => {
iframeRef.current?.contentWindow.postMessage({type: "getModelText"}, "*");
if (iframeRef.current?.contentWindow) {
iframeRef.current.contentWindow.postMessage({
type: "getModelText",
}, "*");
}
},
updateModelText: (newModelText) => {
if (iframeReady) {
iframeRef.current?.contentWindow.postMessage({
if (iframeReady && iframeRef.current?.contentWindow) {
iframeRef.current.contentWindow.postMessage({
type: "updateModelText",
modelText: newModelText,
}, "*");

View File

@@ -192,11 +192,15 @@ function ManagementPage(props) {
themeAlgorithm={props.themeAlgorithm}
onChange={props.setLogoAndThemeAlgorithm} />
<LanguageSelect languages={props.account.organization.languages} />
<Tooltip title="Click to open AI assitant">
<div className="select-box" onClick={props.openAiAssistant}>
<DeploymentUnitOutlined style={{fontSize: "24px"}} />
</div>
</Tooltip>
{
Conf.AiAssistantUrl?.trim() && (
<Tooltip title="Click to open AI assistant">
<div className="select-box" onClick={props.openAiAssistant}>
<DeploymentUnitOutlined style={{fontSize: "24px"}} />
</div>
</Tooltip>
)
}
<OpenTour />
{Setting.isAdminUser(props.account) && (props.uri.indexOf("/trees") === -1) &&
<OrganizationSelect

View File

@@ -123,6 +123,22 @@ class ProductBuyPage extends React.Component {
return "$";
} else if (product?.currency === "CNY") {
return "¥";
} else if (product?.currency === "EUR") {
return "€";
} else if (product?.currency === "JPY") {
return "¥";
} else if (product?.currency === "GBP") {
return "£";
} else if (product?.currency === "AUD") {
return "A$";
} else if (product?.currency === "CAD") {
return "C$";
} else if (product?.currency === "CHF") {
return "CHF";
} else if (product?.currency === "HKD") {
return "HK$";
} else if (product?.currency === "SGD") {
return "S$";
} else {
return "(Unknown currency)";
}

View File

@@ -209,6 +209,14 @@ class ProductEditPage extends React.Component {
[
{id: "USD", name: "USD"},
{id: "CNY", name: "CNY"},
{id: "EUR", name: "EUR"},
{id: "JPY", name: "JPY"},
{id: "GBP", name: "GBP"},
{id: "AUD", name: "AUD"},
{id: "CAD", name: "CAD"},
{id: "CHF", name: "CHF"},
{id: "HKD", name: "HKD"},
{id: "SGD", name: "SGD"},
].map((item, index) => <Option key={index} value={item.id}>{item.name}</Option>)
}
</Select>

View File

@@ -932,7 +932,7 @@ class ProviderEditPage extends React.Component {
</Col>
</Row>
) : null}
{["AWS S3", "Tencent Cloud COS", "Qiniu Cloud Kodo", "Casdoor"].includes(this.state.provider.type) ? (
{["AWS S3", "Tencent Cloud COS", "Qiniu Cloud Kodo", "Casdoor", "CUCloud OSS"].includes(this.state.provider.type) ? (
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={2}>
{["Casdoor"].includes(this.state.provider.type) ?

View File

@@ -233,6 +233,10 @@ export const OtherProviderInfo = {
logo: `${StaticBaseUrl}/img/casdoor.png`,
url: "https://casdoor.org/docs/provider/storage/overview",
},
"CUCloud OSS": {
logo: `${StaticBaseUrl}/img/social_cucloud.png`,
url: "https://www.cucloud.cn/product/oss.html",
},
},
SAML: {
"Aliyun IDaaS": {
@@ -920,7 +924,7 @@ export function getClickable(text) {
return (
<a onClick={() => {
copy(text);
showMessage("success", "Copied to clipboard");
showMessage("success", i18next.t("general:Copied to clipboard successfully"));
}}>
{text}
</a>
@@ -1078,6 +1082,7 @@ export function getProviderTypeOptions(category) {
{id: "Google Cloud Storage", name: "Google Cloud Storage"},
{id: "Synology", name: "Synology"},
{id: "Casdoor", name: "Casdoor"},
{id: "CUCloud OSS", name: "CUCloud OSS"},
]
);
} else if (category === "SAML") {
@@ -1171,7 +1176,7 @@ export function renderLogo(application) {
function isSigninMethodEnabled(application, signinMethod) {
if (application && application.signinMethods) {
return application.signinMethods.filter(item => item.name === signinMethod && item.rule !== "Hide-Password").length > 0;
return application.signinMethods.filter(item => item.name === signinMethod && item.rule !== "Hide password").length > 0;
} else {
return false;
}
@@ -1550,9 +1555,25 @@ export function getDefaultHtmlEmailContent() {
export function getCurrencyText(product) {
if (product?.currency === "USD") {
return i18next.t("product:USD");
return i18next.t("currency:USD");
} else if (product?.currency === "CNY") {
return i18next.t("product:CNY");
return i18next.t("currency:CNY");
} else if (product?.currency === "EUR") {
return i18next.t("currency:EUR");
} else if (product?.currency === "JPY") {
return i18next.t("currency:JPY");
} else if (product?.currency === "GBP") {
return i18next.t("currency:GBP");
} else if (product?.currency === "AUD") {
return i18next.t("currency:AUD");
} else if (product?.currency === "CAD") {
return i18next.t("currency:CAD");
} else if (product?.currency === "CHF") {
return i18next.t("currency:CHF");
} else if (product?.currency === "HKD") {
return i18next.t("currency:HKD");
} else if (product?.currency === "SGD") {
return i18next.t("currency:SGD");
} else {
return "(Unknown currency)";
}

View File

@@ -1150,7 +1150,7 @@ class LoginPage extends React.Component {
]);
application?.signinMethods?.forEach((signinMethod) => {
if (signinMethod.rule === "Hide-Password") {
if (signinMethod.rule === "Hide password") {
return;
}
const item = itemsMap.get(generateItemKey(signinMethod.name, signinMethod.rule));

View File

@@ -179,8 +179,10 @@ class MfaSetupPage extends React.Component {
mfaProps={this.state.mfaProps}
application={this.state.application}
user={this.props.account}
onSuccess={() => {
onSuccess={(res) => {
this.setState({
dest: res.dest,
countryCode: res.countryCode,
current: this.state.current + 1,
});
}}
@@ -195,7 +197,7 @@ class MfaSetupPage extends React.Component {
);
case 2:
return (
<MfaEnableForm user={this.getUser()} mfaType={this.state.mfaType} recoveryCodes={this.state.mfaProps.recoveryCodes}
<MfaEnableForm user={this.getUser()} mfaType={this.state.mfaType} secret={this.state.mfaProps.secret} recoveryCodes={this.state.mfaProps.recoveryCodes} dest={this.state.dest} countryCode={this.state.countryCode}
onSuccess={() => {
Setting.showMessage("success", i18next.t("general:Enabled successfully"));
this.props.onfinish();

View File

@@ -13,7 +13,6 @@
// limitations under the License.
import CryptoJS from "crypto-js";
import i18next from "i18next";
import {Buffer} from "buffer";
export function getRandomKeyForObfuscator(obfuscatorType) {
@@ -46,17 +45,17 @@ function encrypt(cipher, key, iv, password) {
export function checkPasswordObfuscator(passwordObfuscatorType, passwordObfuscatorKey) {
if (passwordObfuscatorType === undefined) {
return i18next.t("organization:failed to get password obfuscator");
return "passwordObfuscatorType should not be undefined";
} else if (passwordObfuscatorType === "Plain" || passwordObfuscatorType === "") {
return "";
} else if (passwordObfuscatorType === "AES" || passwordObfuscatorType === "DES") {
if (passwordObfuscatorKeyRegexes[passwordObfuscatorType].test(passwordObfuscatorKey)) {
return "";
} else {
return `${i18next.t("organization:The password obfuscator key doesn't match the regex")}: ${passwordObfuscatorKeyRegexes[passwordObfuscatorType].source}`;
return `The password obfuscator key doesn't match the regex: ${passwordObfuscatorKeyRegexes[passwordObfuscatorType].source}`;
}
} else {
return `${i18next.t("organization:unsupported password obfuscator type")}: ${passwordObfuscatorType}`;
return `unsupported password obfuscator type: ${passwordObfuscatorType}`;
}
}

View File

@@ -3,11 +3,15 @@ import i18next from "i18next";
import React, {useState} from "react";
import * as MfaBackend from "../../backend/MfaBackend";
export function MfaEnableForm({user, mfaType, recoveryCodes, onSuccess, onFail}) {
export function MfaEnableForm({user, mfaType, secret, recoveryCodes, dest, countryCode, onSuccess, onFail}) {
const [loading, setLoading] = useState(false);
const requestEnableMfa = () => {
const data = {
mfaType,
secret,
recoveryCodes,
dest,
countryCode,
...user,
};
setLoading(true);

View File

@@ -26,11 +26,13 @@ export const mfaSetup = "mfaSetup";
export function MfaVerifyForm({mfaProps, application, user, onSuccess, onFail}) {
const [form] = Form.useForm();
const onFinish = ({passcode}) => {
const data = {passcode, mfaType: mfaProps.mfaType, ...user};
const onFinish = ({passcode, countryCode, dest}) => {
const data = {passcode, mfaType: mfaProps.mfaType, secret: mfaProps.secret, dest: dest, countryCode: countryCode, ...user};
MfaBackend.MfaSetupVerify(data)
.then((res) => {
if (res.status === "ok") {
res.dest = dest;
res.countryCode = countryCode;
onSuccess(res);
} else {
onFail(res);

View File

@@ -1,5 +1,5 @@
import {UserOutlined} from "@ant-design/icons";
import {Button, Form, Input} from "antd";
import {Button, Form, Input, Space} from "antd";
import i18next from "i18next";
import React, {useEffect} from "react";
import {CountryCodeSelect} from "../../common/select/CountryCodeSelect";
@@ -15,15 +15,18 @@ export const MfaVerifySmsForm = ({mfaProps, application, onFinish, method, user}
useEffect(() => {
if (method === mfaAuth) {
setDest(mfaProps.secret);
form.setFieldValue("dest", mfaProps.secret);
return;
}
if (mfaProps.mfaType === SmsMfaType) {
setDest(user.phone);
form.setFieldValue("dest", user.phone);
return;
}
if (mfaProps.mfaType === EmailMfaType) {
setDest(user.email);
form.setFieldValue("dest", user.email);
}
}, [mfaProps.mfaType]);
@@ -57,45 +60,44 @@ export const MfaVerifySmsForm = ({mfaProps, application, onFinish, method, user}
<div style={{marginBottom: 20, textAlign: "left", gap: 8}}>
{isEmail() ? i18next.t("mfa:Your email is") : i18next.t("mfa:Your phone is")} {dest}
</div> :
(<React.Fragment>
(
<p>{isEmail() ? i18next.t("mfa:Please bind your email first, the system will automatically uses the mail for multi-factor authentication") :
i18next.t("mfa:Please bind your phone first, the system automatically uses the phone for multi-factor authentication")}
</p>
<Input.Group compact style={{width: "300Px", marginBottom: "30px"}}>
{isEmail() ? null :
<Form.Item
name="countryCode"
noStyle
rules={[
{
required: false,
message: i18next.t("signup:Please select your country code!"),
},
]}
>
<CountryCodeSelect
initValue={mfaProps.countryCode}
style={{width: "30%"}}
countryCodes={application.organizationObj.countryCodes}
/>
</Form.Item>
}
<Form.Item
name="dest"
noStyle
rules={[{required: true, message: i18next.t("login:Please input your Email or Phone!")}]}
>
<Input
style={{width: isEmail() ? "100% " : "70%"}}
onChange={(e) => {setDest(e.target.value);}}
prefix={<UserOutlined />}
placeholder={isEmail() ? i18next.t("general:Email") : i18next.t("general:Phone")}
/>
</Form.Item>
</Input.Group>
</React.Fragment>
)
}
<Space.Compact style={{width: "300Px", marginBottom: "30px", display: isShowText() ? "none" : ""}}>
{isEmail() || isShowText() ? null :
<Form.Item
name="countryCode"
noStyle
rules={[
{
required: false,
message: i18next.t("signup:Please select your country code!"),
},
]}
>
<CountryCodeSelect
initValue={mfaProps.countryCode}
style={{width: "30%"}}
countryCodes={application.organizationObj.countryCodes}
/>
</Form.Item>
}
<Form.Item
name="dest"
noStyle
rules={[{required: true, message: i18next.t("login:Please input your Email or Phone!")}]}
>
<Input
style={{width: isEmail() ? "100% " : "70%"}}
onChange={(e) => {setDest(e.target.value);}}
prefix={<UserOutlined />}
placeholder={isEmail() ? i18next.t("general:Email") : i18next.t("general:Phone")}
/>
</Form.Item>
</Space.Compact>
<Form.Item
name="passcode"
rules={[{required: true, message: i18next.t("login:Please input your code!")}]}

View File

@@ -32,6 +32,9 @@ export function MfaSetupVerify(values) {
formData.append("name", values.name);
formData.append("mfaType", values.mfaType);
formData.append("passcode", values.passcode);
formData.append("secret", values.secret);
formData.append("dest", values.dest);
formData.append("countryCode", values.countryCode);
return fetch(`${Setting.ServerUrl}/api/mfa/setup/verify`, {
method: "POST",
credentials: "include",
@@ -44,6 +47,10 @@ export function MfaSetupEnable(values) {
formData.append("mfaType", values.mfaType);
formData.append("owner", values.owner);
formData.append("name", values.name);
formData.append("secret", values.secret);
formData.append("recoveryCodes", values.recoveryCodes);
formData.append("dest", values.dest);
formData.append("countryCode", values.countryCode);
return fetch(`${Setting.ServerUrl}/api/mfa/setup/enable`, {
method: "POST",
credentials: "include",

View File

@@ -141,6 +141,9 @@ const Dashboard = (props) => {
i18next.t("general:Certs"),
i18next.t("general:Permissions"),
i18next.t("general:Transactions"),
i18next.t("general:Models"),
i18next.t("general:Adapters"),
i18next.t("general:Enforcers"),
], top: "10%"},
grid: {left: "3%", right: "4%", bottom: "0", top: "25%", containLabel: true},
xAxis: {type: "category", boundaryGap: false, data: dateArray},
@@ -157,6 +160,9 @@ const Dashboard = (props) => {
{name: i18next.t("general:Certs"), type: "line", data: dashboardData.certCounts},
{name: i18next.t("general:Permissions"), type: "line", data: dashboardData.permissionCounts},
{name: i18next.t("general:Transactions"), type: "line", data: dashboardData.transactionCounts},
{name: i18next.t("general:Models"), type: "line", data: dashboardData.modelCounts},
{name: i18next.t("general:Adapters"), type: "line", data: dashboardData.adapterCounts},
{name: i18next.t("general:Enforcers"), type: "line", data: dashboardData.enforcerCounts},
],
};
myChart.setOption(option);

View File

@@ -14,6 +14,7 @@
import React from "react";
import {Alert, Button, QRCode} from "antd";
import copy from "copy-to-clipboard";
import * as Setting from "../Setting";
import i18next from "i18next";
@@ -62,12 +63,8 @@ export const CasdoorAppUrl = ({accessToken}) => {
return;
}
try {
await navigator.clipboard.writeText(qrUrl);
Setting.showMessage("success", i18next.t("general:Copied to clipboard"));
} catch (err) {
Setting.showMessage("error", i18next.t("general:Failed to copy"));
}
copy(qrUrl);
Setting.showMessage("success", i18next.t("general:Copied to clipboard successfully"));
};
if (error) {
@@ -82,14 +79,9 @@ export const CasdoorAppUrl = ({accessToken}) => {
alignItems: "center",
marginBottom: "10px",
}}>
<span>{i18next.t("general:URL String")}</span>
{window.isSecureContext && (
<Button
size="small"
onClick={handleCopyUrl}
style={{marginLeft: "10px"}}
>
{i18next.t("general:Copy URL")}
<Button size="small" type="primary" onClick={handleCopyUrl} style={{marginLeft: "10px"}}>
{i18next.t("resource:Copy Link")}
</Button>
)}
</div>

View File

@@ -161,6 +161,18 @@
"Sending": "Sending",
"Submit and complete": "Submit and complete"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "Go to writable demo site?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Home",
"Home - Tooltip": "Home page of the application",
"ID": "ID",
"ID - Tooltip": "Unique random string",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Is enabled",
@@ -312,6 +327,10 @@
"Password - Tooltip": "Make sure the password is correct",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Different combinations of password complexity options",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Random parameter used for password encryption",
"Password type": "Password type",
@@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "Modify rule",
"New Organization": "New Organization",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Soft deletion",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "Buy",
"Buy Product": "Buy Product",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail of product",
"Dummy": "Dummy",
@@ -740,7 +759,6 @@
"Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.",
"This product is currently not in sale.": "This product is currently not in sale.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Custom HTML for replacing the default signup page style",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site key",
"Site key - Tooltip": "Site key",
@@ -1157,6 +1176,7 @@
"Keys": "Keys",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Location",
"Location - Tooltip": "City of residence",

View File

@@ -161,6 +161,18 @@
"Sending": "Odesílání",
"Submit and complete": "Odeslat a dokončit"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Upravit Enforcer",
"New Enforcer": "Nový Enforcer"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "Přejít na zapisovatelnou demo stránku?",
"Groups": "Skupiny",
"Groups - Tooltip": "Skupiny - Tooltip",
"Hide password": "Hide password",
"Home": "Domů",
"Home - Tooltip": "Domovská stránka aplikace",
"ID": "ID",
"ID - Tooltip": "Unikátní náhodný řetězec",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identita",
"Invitations": "Pozvánky",
"Is enabled": "Je povoleno",
@@ -312,6 +327,10 @@
"Password - Tooltip": "Ujistěte se, že heslo je správné",
"Password complexity options": "Možnosti složitosti hesla",
"Password complexity options - Tooltip": "Různé kombinace možností složitosti hesla",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Heslová sůl",
"Password salt - Tooltip": "Náhodný parametr použitý pro šifrování hesla",
"Password type": "Typ hesla",
@@ -559,7 +578,6 @@
"Use SMS": "Použít SMS",
"Use SMS verification code": "Použít ověřovací kód SMS",
"Use a recovery code": "Použít obnovovací kód",
"Verification failed": "Ověření selhalo",
"Verify Code": "Ověřit kód",
"Verify Password": "Ověřit heslo",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "Upravit pravidlo",
"New Organization": "Nová organizace",
"Optional": "Volitelný",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Výzva",
"Required": "Povinné",
"Soft deletion": "Měkké smazání",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "Koupit",
"Buy Product": "Koupit produkt",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail produktu",
"Dummy": "Dummy",
@@ -740,7 +759,6 @@
"Test buy page..": "Testovací stránka nákupu..",
"There is no payment channel for this product.": "Pro tento produkt neexistuje žádný platební kanál.",
"This product is currently not in sale.": "Tento produkt není momentálně v prodeji.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "Upravit HTML pro registraci",
"Signup HTML - Tooltip": "Vlastní HTML pro nahrazení výchozího stylu registrační stránky",
"Signup group": "Skupina pro registraci",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Tiché",
"Site key": "Klíč stránky",
"Site key - Tooltip": "Nápověda ke klíči stránky",
@@ -1157,6 +1176,7 @@
"Keys": "Klíče",
"Language": "Jazyk",
"Language - Tooltip": "Jazyk - Nápověda",
"Last change password time": "Last change password time",
"Link": "Odkaz",
"Location": "Místo",
"Location - Tooltip": "Město bydliště",

View File

@@ -161,6 +161,18 @@
"Sending": "Sendet",
"Submit and complete": "Einreichen und abschließen"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "Gehe zur beschreibbaren Demo-Website?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Zuhause",
"Home - Tooltip": "Homepage der Anwendung",
"ID": "ID",
"ID - Tooltip": "Einzigartiger Zufallsstring",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Ist aktiviert",
@@ -312,6 +327,10 @@
"Password - Tooltip": "Stellen Sie sicher, dass das Passwort korrekt ist",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Password complexity options - Tooltip",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Passwort-Salt",
"Password salt - Tooltip": "Zufälliger Parameter, der für die Verschlüsselung von Passwörtern verwendet wird",
"Password type": "Passworttyp",
@@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "Regel ändern",
"New Organization": "Neue Organisation",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Softe Löschung",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "Kaufen",
"Buy Product": "Produkt kaufen",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail des Produkts",
"Dummy": "Dummy",
@@ -740,7 +759,6 @@
"Test buy page..": "Testkaufseite.",
"There is no payment channel for this product.": "Es gibt keinen Zahlungskanal für dieses Produkt.",
"This product is currently not in sale.": "Dieses Produkt steht derzeit nicht zum Verkauf.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "Registrierung HTML - Bearbeiten",
"Signup HTML - Tooltip": "Benutzerdefiniertes HTML zur Ersetzung des Standard-Registrierungs-Seitenstils",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site-Key",
"Site key - Tooltip": "Seitenschlüssel",
@@ -1157,6 +1176,7 @@
"Keys": "Schlüssel",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Ort",
"Location - Tooltip": "Stadt des Wohnsitzes",

View File

@@ -161,6 +161,18 @@
"Sending": "Sending",
"Submit and complete": "Submit and complete"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "Go to writable demo site?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Home",
"Home - Tooltip": "Home page of the application",
"ID": "ID",
"ID - Tooltip": "Unique random string",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Is enabled",
@@ -312,6 +327,10 @@
"Password - Tooltip": "Make sure the password is correct",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Different combinations of password complexity options",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Random parameter used for password encryption",
"Password type": "Password type",
@@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "Modify rule",
"New Organization": "New Organization",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Soft deletion",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "Buy",
"Buy Product": "Buy Product",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail of product",
"Dummy": "Dummy",
@@ -740,7 +759,6 @@
"Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.",
"This product is currently not in sale.": "This product is currently not in sale.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Custom HTML for replacing the default signup page style",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site key",
"Site key - Tooltip": "Site key",
@@ -1157,6 +1176,7 @@
"Keys": "Keys",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Location",
"Location - Tooltip": "City of residence",

View File

@@ -161,6 +161,18 @@
"Sending": "Envío",
"Submit and complete": "Enviar y completar"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "¿Ir al sitio demo editable?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Hogar",
"Home - Tooltip": "Página de inicio de la aplicación",
"ID": "identificación",
"ID - Tooltip": "Cadena aleatoria única",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Está habilitado",
@@ -312,6 +327,10 @@
"Password - Tooltip": "Asegúrate de que la contraseña sea correcta",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Password complexity options - Tooltip",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Sal de contraseña",
"Password salt - Tooltip": "Parámetro aleatorio utilizado para la encriptación de contraseñas",
"Password type": "Tipo de contraseña",
@@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "Modificar regla",
"New Organization": "Nueva organización",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Eliminación suave",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "Comprar",
"Buy Product": "Comprar producto",
"CNY": "Año Nuevo Chino (ANC)",
"Detail": "Detalle",
"Detail - Tooltip": "Detalle del producto",
"Dummy": "Dummy",
@@ -740,7 +759,6 @@
"Test buy page..": "Página de compra de prueba.",
"There is no payment channel for this product.": "No hay canal de pago para este producto.",
"This product is currently not in sale.": "Este producto actualmente no está a la venta.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "Registro HTML - Editar",
"Signup HTML - Tooltip": "HTML personalizado para reemplazar el estilo predeterminado de la página de registro",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Clave del sitio",
"Site key - Tooltip": "Clave del sitio",
@@ -1157,6 +1176,7 @@
"Keys": "Claves",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Enlace",
"Location": "Ubicación",
"Location - Tooltip": "Ciudad de residencia",

View File

@@ -81,7 +81,7 @@
"Only signup": "فقط ثبت‌نام",
"Org choice mode": "حالت انتخاب سازمان",
"Org choice mode - Tooltip": "حالت انتخاب سازمان - راهنمای ابزار",
"Please enable \"Signin session\" first before enabling \"Auto signin\"": "لطفاً قبل از فعال‌سازی \"ورود خودکار\"، ابتدا \"جلسه ورود\" را فعال کنید",
"Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"",
"Please input your application!": "لطفاً برنامه خود را وارد کنید!",
"Please input your organization!": "لطفاً سازمان خود را وارد کنید!",
"Please select a HTML file": "لطفاً یک فایل HTML انتخاب کنید",
@@ -161,6 +161,18 @@
"Sending": "در حال ارسال",
"Submit and complete": "ارسال و تکمیل"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "ویرایش Enforcer",
"New Enforcer": "Enforcer جدید"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "به سایت دمو قابل نوشتن بروید؟",
"Groups": "گروه‌ها",
"Groups - Tooltip": "گروه‌ها - راهنمای ابزار",
"Hide password": "Hide password",
"Home": "خانه",
"Home - Tooltip": "صفحه اصلی برنامه",
"ID": "شناسه",
"ID - Tooltip": "رشته تصادفی منحصربه‌فرد",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "هویت",
"Invitations": "دعوت‌ها",
"Is enabled": "فعال است",
@@ -312,6 +327,10 @@
"Password - Tooltip": "مطمئن شوید که رمز عبور صحیح است",
"Password complexity options": "گزینه‌های پیچیدگی رمز عبور",
"Password complexity options - Tooltip": "ترکیبات مختلف گزینه‌های پیچیدگی رمز عبور",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "نمک رمز عبور",
"Password salt - Tooltip": "پارامتر تصادفی مورد استفاده برای رمزگذاری رمز عبور",
"Password type": "نوع رمز عبور",
@@ -559,7 +578,6 @@
"Use SMS": "استفاده از پیامک",
"Use SMS verification code": "استفاده از کد تأیید پیامک",
"Use a recovery code": "استفاده از کد بازیابی",
"Verification failed": "تأیید ناموفق بود",
"Verify Code": "تأیید کد",
"Verify Password": "تأیید رمز عبور",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "شما احراز هویت چندعاملی را فعال کرده‌اید، لطفاً برای ادامه روی 'ارسال کد' کلیک کنید",
@@ -592,6 +610,8 @@
"Modify rule": "قانون اصلاح",
"New Organization": "سازمان جدید",
"Optional": "اختیاری",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "اعلان",
"Required": "الزامی",
"Soft deletion": "حذف نرم",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "خرید",
"Buy Product": "خرید محصول",
"CNY": "یوان چین",
"Detail": "جزئیات",
"Detail - Tooltip": "جزئیات محصول",
"Dummy": "فرضی",
@@ -740,7 +759,6 @@
"Test buy page..": "صفحه تست خرید..",
"There is no payment channel for this product.": "برای این محصول کانال پرداختی وجود ندارد.",
"This product is currently not in sale.": "این محصول در حال حاضر در فروش نیست.",
"USD": "دلار آمریکا",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "ویرایش HTML ثبت‌نام",
"Signup HTML - Tooltip": "HTML سفارشی برای جایگزینی سبک صفحه ثبت‌نام پیش‌فرض",
"Signup group": "گروه ثبت‌نام",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "بی‌صدا",
"Site key": "کلید سایت",
"Site key - Tooltip": "کلید سایت",
@@ -1157,6 +1176,7 @@
"Keys": "کلیدها",
"Language": "زبان",
"Language - Tooltip": "زبان - راهنمای ابزار",
"Last change password time": "Last change password time",
"Link": "اتصال",
"Location": "مکان",
"Location - Tooltip": "شهر محل سکونت",

View File

@@ -161,6 +161,18 @@
"Sending": "Sending",
"Submit and complete": "Submit and complete"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "Go to writable demo site?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Home",
"Home - Tooltip": "Home page of the application",
"ID": "ID",
"ID - Tooltip": "Unique random string",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Is enabled",
@@ -312,6 +327,10 @@
"Password - Tooltip": "Make sure the password is correct",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Different combinations of password complexity options",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Random parameter used for password encryption",
"Password type": "Password type",
@@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "Modify rule",
"New Organization": "New Organization",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Soft deletion",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "Buy",
"Buy Product": "Buy Product",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail of product",
"Dummy": "Dummy",
@@ -740,7 +759,6 @@
"Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.",
"This product is currently not in sale.": "This product is currently not in sale.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Custom HTML for replacing the default signup page style",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site key",
"Site key - Tooltip": "Site key",
@@ -1157,6 +1176,7 @@
"Keys": "Keys",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Location",
"Location - Tooltip": "City of residence",

View File

@@ -161,6 +161,18 @@
"Sending": "Envoi en cours",
"Submit and complete": "Soumettre et compléter"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Éditer l'exécuteur",
"New Enforcer": "Ajouter un exécuteur"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "Allez sur le site de démonstration modifiable ?",
"Groups": "Groupes",
"Groups - Tooltip": "Groupes - infobulle",
"Hide password": "Hide password",
"Home": "Accueil",
"Home - Tooltip": "Page d'accueil de l'application",
"ID": "ID",
"ID - Tooltip": "Chaîne unique aléatoire",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identité",
"Invitations": "Invitations",
"Is enabled": "Est activé",
@@ -312,6 +327,10 @@
"Password - Tooltip": "Assurez-vous que le mot de passe soit correct",
"Password complexity options": "Options de complexité du mot de passe",
"Password complexity options - Tooltip": "Différentes combinaisons d'options de complexité de mot de passe",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Sel de mot de passe",
"Password salt - Tooltip": "Paramètre aléatoire utilisé pour le chiffrement des mots de passe",
"Password type": "Type de mot de passe",
@@ -559,7 +578,6 @@
"Use SMS": "Utiliser les SMS",
"Use SMS verification code": "Utiliser la vérification par code SMS",
"Use a recovery code": "Utiliser un code de récupération",
"Verification failed": "Échec de la vérification",
"Verify Code": "Vérifier le code",
"Verify Password": "Confirmez le mot de passe",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "Règle de modification",
"New Organization": "Nouvelle organisation",
"Optional": "Optionnel",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Requis",
"Soft deletion": "Suppression douce",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "Acheter",
"Buy Product": "Acheter un produit",
"CNY": "CNY",
"Detail": "Détail",
"Detail - Tooltip": "Détail du produit",
"Dummy": "Exemple",
@@ -740,7 +759,6 @@
"Test buy page..": "Page d'achat de test.",
"There is no payment channel for this product.": "Il n'y a aucun canal de paiement pour ce produit.",
"This product is currently not in sale.": "Ce produit n'est actuellement pas en vente.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "HTML de la page d'inscription - Modifier",
"Signup HTML - Tooltip": "HTML personnalisé pour remplacer le style par défaut de la page d'inscription",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silencieux",
"Site key": "Clé de site",
"Site key - Tooltip": "Clé de site",
@@ -1157,6 +1176,7 @@
"Keys": "Clés",
"Language": "Langue",
"Language - Tooltip": "Langue - Infobulle",
"Last change password time": "Last change password time",
"Link": "Lier",
"Location": "Localisation",
"Location - Tooltip": "Ville de résidence",

View File

@@ -161,6 +161,18 @@
"Sending": "Sending",
"Submit and complete": "Submit and complete"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "Go to writable demo site?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Home",
"Home - Tooltip": "Home page of the application",
"ID": "ID",
"ID - Tooltip": "Unique random string",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Is enabled",
@@ -312,6 +327,10 @@
"Password - Tooltip": "Make sure the password is correct",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Different combinations of password complexity options",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Random parameter used for password encryption",
"Password type": "Password type",
@@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "Modify rule",
"New Organization": "New Organization",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Soft deletion",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "Buy",
"Buy Product": "Buy Product",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail of product",
"Dummy": "Dummy",
@@ -740,7 +759,6 @@
"Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.",
"This product is currently not in sale.": "This product is currently not in sale.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Custom HTML for replacing the default signup page style",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site key",
"Site key - Tooltip": "Site key",
@@ -1157,6 +1176,7 @@
"Keys": "Keys",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Location",
"Location - Tooltip": "City of residence",

View File

@@ -161,6 +161,18 @@
"Sending": "Mengirimkan",
"Submit and complete": "Kirim dan selesaikan"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "Pergi ke situs demo yang dapat ditulis?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Rumah",
"Home - Tooltip": "Halaman utama aplikasi",
"ID": "ID",
"ID - Tooltip": "Karakter acak unik",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Diaktifkan",
@@ -312,6 +327,10 @@
"Password - Tooltip": "Pastikan kata sandi yang benar",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Password complexity options - Tooltip",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Garam sandi",
"Password salt - Tooltip": "Parameter acak yang digunakan untuk enkripsi kata sandi",
"Password type": "Jenis kata sandi",
@@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "Mengubah aturan",
"New Organization": "Organisasi baru",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Penghapusan lunak",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "Beli",
"Buy Product": "Beli Produk",
"CNY": "CNY",
"Detail": "Rincian",
"Detail - Tooltip": "Detail produk",
"Dummy": "Dummy",
@@ -740,7 +759,6 @@
"Test buy page..": "Halaman pembelian uji coba.",
"There is no payment channel for this product.": "Tidak ada saluran pembayaran untuk produk ini.",
"This product is currently not in sale.": "Produk ini saat ini tidak dijual.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "Pendaftaran HTML - Sunting",
"Signup HTML - Tooltip": "HTML khusus untuk mengganti gaya halaman pendaftaran bawaan",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Kunci situs",
"Site key - Tooltip": "Kunci situs atau kunci halaman web",
@@ -1157,6 +1176,7 @@
"Keys": "Kunci",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Tautan",
"Location": "Lokasi",
"Location - Tooltip": "Kota tempat tinggal",

View File

@@ -161,6 +161,18 @@
"Sending": "Sending",
"Submit and complete": "Submit and complete"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "Go to writable demo site?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Home",
"Home - Tooltip": "Home page of the application",
"ID": "ID",
"ID - Tooltip": "Unique random string",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Is enabled",
@@ -312,6 +327,10 @@
"Password - Tooltip": "Make sure the password is correct",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Different combinations of password complexity options",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Random parameter used for password encryption",
"Password type": "Password type",
@@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "Modify rule",
"New Organization": "New Organization",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Soft deletion",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "Buy",
"Buy Product": "Buy Product",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail of product",
"Dummy": "Dummy",
@@ -740,7 +759,6 @@
"Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.",
"This product is currently not in sale.": "This product is currently not in sale.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Custom HTML for replacing the default signup page style",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site key",
"Site key - Tooltip": "Site key",
@@ -1157,6 +1176,7 @@
"Keys": "Keys",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Location",
"Location - Tooltip": "City of residence",

View File

@@ -161,6 +161,18 @@
"Sending": "送信",
"Submit and complete": "提出して完了してください"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "書き込み可能なデモサイトに移動しますか?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "ホーム",
"Home - Tooltip": "アプリケーションのホームページ",
"ID": "ID",
"ID - Tooltip": "ユニークなランダム文字列",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "可能になっています",
@@ -312,6 +327,10 @@
"Password - Tooltip": "パスワードが正しいことを確認してください",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Password complexity options - Tooltip",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "パスワードのソルト",
"Password salt - Tooltip": "ランダムパラメーターは、パスワードの暗号化に使用されます",
"Password type": "パスワードタイプ",
@@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "ルールを変更する",
"New Organization": "新しい組織",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "ソフト削除",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "購入",
"Buy Product": "製品を購入する",
"CNY": "CNY",
"Detail": "詳細",
"Detail - Tooltip": "製品の詳細",
"Dummy": "Dummy",
@@ -740,7 +759,6 @@
"Test buy page..": "テスト購入ページ。",
"There is no payment channel for this product.": "この製品には支払いチャネルがありません。",
"This product is currently not in sale.": "この製品は現在販売されていません。",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "サインアップ HTML - 編集",
"Signup HTML - Tooltip": "デフォルトのサインアップページスタイルを置き換えるためのカスタムHTML",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "サイトキー",
"Site key - Tooltip": "サイトキー",
@@ -1157,6 +1176,7 @@
"Keys": "鍵",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "リンク",
"Location": "場所",
"Location - Tooltip": "居住都市",

View File

@@ -161,6 +161,18 @@
"Sending": "Sending",
"Submit and complete": "Submit and complete"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "Go to writable demo site?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Home",
"Home - Tooltip": "Home page of the application",
"ID": "ID",
"ID - Tooltip": "Unique random string",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Is enabled",
@@ -312,6 +327,10 @@
"Password - Tooltip": "Make sure the password is correct",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Different combinations of password complexity options",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Random parameter used for password encryption",
"Password type": "Password type",
@@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "Modify rule",
"New Organization": "New Organization",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Soft deletion",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "Buy",
"Buy Product": "Buy Product",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail of product",
"Dummy": "Dummy",
@@ -740,7 +759,6 @@
"Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.",
"This product is currently not in sale.": "This product is currently not in sale.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Custom HTML for replacing the default signup page style",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site key",
"Site key - Tooltip": "Site key",
@@ -1157,6 +1176,7 @@
"Keys": "Keys",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Location",
"Location - Tooltip": "City of residence",

View File

@@ -161,6 +161,18 @@
"Sending": "전송하기",
"Submit and complete": "제출하고 완료하십시오"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "쓰기 가능한 데모 사이트로 이동하시겠습니까?",
"Groups": "그룹",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "집",
"Home - Tooltip": "어플리케이션 홈 페이지",
"ID": "ID",
"ID - Tooltip": "유일한 랜덤 문자열",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "활성화됩니다",
@@ -312,6 +327,10 @@
"Password - Tooltip": "비밀번호가 올바른지 확인하세요",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Password complexity options - Tooltip",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "비밀번호 솔트",
"Password salt - Tooltip": "암호화에 사용되는 임의 매개변수",
"Password type": "암호 유형",
@@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "규칙 수정",
"New Organization": "새로운 조직",
"Optional": "선택사항",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "소프트 삭제",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "구매하다",
"Buy Product": "제품을 구입하세요",
"CNY": "CNY",
"Detail": "세부사항",
"Detail - Tooltip": "제품의 세부사항",
"Dummy": "Dummy",
@@ -740,7 +759,6 @@
"Test buy page..": "시험 구매 페이지.",
"There is no payment channel for this product.": "이 제품에 대한 결제 채널이 없습니다.",
"This product is currently not in sale.": "이 제품은 현재 판매되지 않고 있습니다.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "가입 HTML - 수정",
"Signup HTML - Tooltip": "기본 가입 페이지 스타일을 바꾸기 위한 사용자 지정 HTML",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "사이트 키",
"Site key - Tooltip": "사이트 키",
@@ -1157,6 +1176,7 @@
"Keys": "열쇠",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "링크",
"Location": "장소",
"Location - Tooltip": "거주 도시",

View File

@@ -161,6 +161,18 @@
"Sending": "Sending",
"Submit and complete": "Submit and complete"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "Go to writable demo site?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Home",
"Home - Tooltip": "Home page of the application",
"ID": "ID",
"ID - Tooltip": "Unique random string",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Is enabled",
@@ -312,6 +327,10 @@
"Password - Tooltip": "Make sure the password is correct",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Different combinations of password complexity options",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Random parameter used for password encryption",
"Password type": "Password type",
@@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "Modify rule",
"New Organization": "New Organization",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Soft deletion",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "Buy",
"Buy Product": "Buy Product",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail of product",
"Dummy": "Dummy",
@@ -740,7 +759,6 @@
"Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.",
"This product is currently not in sale.": "This product is currently not in sale.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Custom HTML for replacing the default signup page style",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site key",
"Site key - Tooltip": "Site key",
@@ -1157,6 +1176,7 @@
"Keys": "Keys",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Location",
"Location - Tooltip": "City of residence",

View File

@@ -161,6 +161,18 @@
"Sending": "Sending",
"Submit and complete": "Submit and complete"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "Go to writable demo site?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Home",
"Home - Tooltip": "Home page of the application",
"ID": "ID",
"ID - Tooltip": "Unique random string",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Is enabled",
@@ -312,6 +327,10 @@
"Password - Tooltip": "Make sure the password is correct",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Different combinations of password complexity options",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Random parameter used for password encryption",
"Password type": "Password type",
@@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "Modify rule",
"New Organization": "New Organization",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Soft deletion",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "Buy",
"Buy Product": "Buy Product",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail of product",
"Dummy": "Dummy",
@@ -740,7 +759,6 @@
"Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.",
"This product is currently not in sale.": "This product is currently not in sale.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Custom HTML for replacing the default signup page style",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site key",
"Site key - Tooltip": "Site key",
@@ -1157,6 +1176,7 @@
"Keys": "Keys",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Location",
"Location - Tooltip": "City of residence",

View File

@@ -161,6 +161,18 @@
"Sending": "Sending",
"Submit and complete": "Submit and complete"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "Go to writable demo site?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Home",
"Home - Tooltip": "Home page of the application",
"ID": "ID",
"ID - Tooltip": "Unique random string",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Is enabled",
@@ -312,6 +327,10 @@
"Password - Tooltip": "Make sure the password is correct",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Different combinations of password complexity options",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Random parameter used for password encryption",
"Password type": "Password type",
@@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "Modify rule",
"New Organization": "New Organization",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Soft deletion",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "Buy",
"Buy Product": "Buy Product",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail of product",
"Dummy": "Dummy",
@@ -740,7 +759,6 @@
"Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.",
"This product is currently not in sale.": "This product is currently not in sale.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Custom HTML for replacing the default signup page style",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site key",
"Site key - Tooltip": "Site key",
@@ -1157,6 +1176,7 @@
"Keys": "Keys",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Location",
"Location - Tooltip": "City of residence",

View File

@@ -161,6 +161,18 @@
"Sending": "Enviando",
"Submit and complete": "Enviar e concluir"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Editar Executor",
"New Enforcer": "Novo Executor"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "Acessar o site de demonstração gravável?",
"Groups": "Grupos",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Página Inicial",
"Home - Tooltip": "Página inicial do aplicativo",
"ID": "ID",
"ID - Tooltip": "String única aleatória",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identidade",
"Invitations": "Invitations",
"Is enabled": "Está habilitado",
@@ -312,6 +327,10 @@
"Password - Tooltip": "Certifique-se de que a senha está correta",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Password complexity options - Tooltip",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Salt de senha",
"Password salt - Tooltip": "Parâmetro aleatório usado para criptografia de senha",
"Password type": "Tipo de senha",
@@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "Modificar regra",
"New Organization": "Nova Organização",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Exclusão suave",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "Comprar",
"Buy Product": "Comprar Produto",
"CNY": "CNY",
"Detail": "Detalhe",
"Detail - Tooltip": "Detalhes do produto",
"Dummy": "Dummy",
@@ -740,7 +759,6 @@
"Test buy page..": "Página de teste de compra...",
"There is no payment channel for this product.": "Não há canal de pagamento disponível para este produto.",
"This product is currently not in sale.": "Este produto não está disponível para venda no momento.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "Editar HTML de inscrição",
"Signup HTML - Tooltip": "HTML personalizado para substituir o estilo padrão da página de inscrição",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silencioso",
"Site key": "Chave do site",
"Site key - Tooltip": "Chave do site",
@@ -1157,6 +1176,7 @@
"Keys": "Chaves",
"Language": "Idioma",
"Language - Tooltip": "Idioma - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Localização",
"Location - Tooltip": "Cidade de residência",

View File

@@ -161,6 +161,18 @@
"Sending": "Отправка",
"Submit and complete": "Отправить и завершить"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Редактировать контролёра доступа",
"New Enforcer": "Новый контролёр доступа"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "Перейти на демонстрационный сайт для записи данных?",
"Groups": "Группы",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Дом",
"Home - Tooltip": "Главная страница приложения",
"ID": "ID",
"ID - Tooltip": "Уникальная случайная строка",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Включен",
@@ -312,6 +327,10 @@
"Password - Tooltip": "Убедитесь, что пароль правильный",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Password complexity options - Tooltip",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Соль пароля",
"Password salt - Tooltip": "Случайный параметр, используемый для шифрования пароля",
"Password type": "Тип пароля",
@@ -559,7 +578,6 @@
"Use SMS": "Использовать SMS",
"Use SMS verification code": "Использовать SMS код для проверки",
"Use a recovery code": "Использовать код восстановления",
"Verification failed": "Проверка не удалась",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "Изменить правило",
"New Organization": "Новая организация",
"Optional": "Опционально",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Мягкое удаление",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "Купить",
"Buy Product": "Купить продукт",
"CNY": "CNY",
"Detail": "Деталь",
"Detail - Tooltip": "Деталь продукта",
"Dummy": "Dummy",
@@ -740,7 +759,6 @@
"Test buy page..": "Страница для тестовой покупки.",
"There is no payment channel for this product.": "Для этого продукта нет канала оплаты.",
"This product is currently not in sale.": "Этот продукт в настоящее время не продается.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "Регистрационная форма HTML - Редактировать",
"Signup HTML - Tooltip": "Пользовательский HTML для замены стиля стандартной страницы регистрации",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Ключ сайта",
"Site key - Tooltip": "Ключ сайта",
@@ -1157,6 +1176,7 @@
"Keys": "Ключи",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Ссылка",
"Location": "Местоположение",
"Location - Tooltip": "Город проживания",

View File

@@ -161,6 +161,18 @@
"Sending": "Odosielanie",
"Submit and complete": "Odoslať a dokončiť"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Upraviť vynútiteľa",
"New Enforcer": "Nový vynútiteľ"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "Prejsť na zapisovateľnú demo stránku?",
"Groups": "Skupiny",
"Groups - Tooltip": "Skupiny",
"Hide password": "Hide password",
"Home": "Domov",
"Home - Tooltip": "Domovská stránka aplikácie",
"ID": "ID",
"ID - Tooltip": "Jedinečný náhodný reťazec",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identita",
"Invitations": "Pozvánky",
"Is enabled": "Je povolené",
@@ -312,6 +327,10 @@
"Password - Tooltip": "Uistite sa, že heslo je správne",
"Password complexity options": "Možnosti zložitosti hesla",
"Password complexity options - Tooltip": "Rôzne kombinácie možností zložitosti hesla",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Soľ hesla",
"Password salt - Tooltip": "Náhodný parameter používaný na šifrovanie hesla",
"Password type": "Typ hesla",
@@ -559,7 +578,6 @@
"Use SMS": "Použiť SMS",
"Use SMS verification code": "Použiť overovací kód SMS",
"Use a recovery code": "Použiť obnovovací kód",
"Verification failed": "Overenie zlyhalo",
"Verify Code": "Overiť kód",
"Verify Password": "Overiť heslo",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "Upraviť pravidlo",
"New Organization": "Nová organizácia",
"Optional": "Voliteľné",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Výzva",
"Required": "Povinné",
"Soft deletion": "Mäkké vymazanie",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "Kúpiť",
"Buy Product": "Kúpiť produkt",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail produktu",
"Dummy": "Vzorkový",
@@ -740,7 +759,6 @@
"Test buy page..": "Testovať stránku nákupu..",
"There is no payment channel for this product.": "Pre tento produkt neexistuje platobný kanál.",
"This product is currently not in sale.": "Tento produkt momentálne nie je v predaji.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "Upraviť HTML registrácie",
"Signup HTML - Tooltip": "Vlastné HTML na nahradenie predvoleného štýlu registračnej stránky",
"Signup group": "Skupina registrácie",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Tichý",
"Site key": "Kľúč stránky",
"Site key - Tooltip": "Kľúč stránky",
@@ -1157,6 +1176,7 @@
"Keys": "Kľúče",
"Language": "Jazyk",
"Language - Tooltip": "Jazyk - Tooltip",
"Last change password time": "Last change password time",
"Link": "Odkaz",
"Location": "Miesto",
"Location - Tooltip": "Mesto bydliska",

View File

@@ -161,6 +161,18 @@
"Sending": "Sending",
"Submit and complete": "Submit and complete"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "Go to writable demo site?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Home",
"Home - Tooltip": "Home page of the application",
"ID": "ID",
"ID - Tooltip": "Unique random string",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Is enabled",
@@ -312,6 +327,10 @@
"Password - Tooltip": "Make sure the password is correct",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Different combinations of password complexity options",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Random parameter used for password encryption",
"Password type": "Password type",
@@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "Modify rule",
"New Organization": "New Organization",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Soft deletion",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "Buy",
"Buy Product": "Buy Product",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail of product",
"Dummy": "Dummy",
@@ -740,7 +759,6 @@
"Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.",
"This product is currently not in sale.": "This product is currently not in sale.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Custom HTML for replacing the default signup page style",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site key",
"Site key - Tooltip": "Site key",
@@ -1157,6 +1176,7 @@
"Keys": "Keys",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Location",
"Location - Tooltip": "City of residence",

View File

@@ -161,6 +161,18 @@
"Sending": "Gönderiliyor",
"Submit and complete": "Gönder ve Tamamla"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "Go to writable demo site?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Ana sayfa",
"Home - Tooltip": "Home page of the application",
"ID": "ID",
"ID - Tooltip": "Unique random string",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Davetler",
"Is enabled": "Aktif Mi?",
@@ -312,6 +327,10 @@
"Password - Tooltip": "Şifrenizin doğru olduğundan emin olun",
"Password complexity options": "Şifre karmaşıklık seçenekleri",
"Password complexity options - Tooltip": "Different combinations of password complexity options",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Password salt",
"Password salt - Tooltip": "Random parameter used for password encryption",
"Password type": "Password type",
@@ -559,7 +578,6 @@
"Use SMS": "SMS kullan",
"Use SMS verification code": "SMS doğrulama kodunu kullan",
"Use a recovery code": "Kurtarma kodu kullan",
"Verification failed": "Doğrulama başarısız",
"Verify Code": "Kodu doğrula",
"Verify Password": "Parolayı Doğrula",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "Modify rule",
"New Organization": "New Organization",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Gerekli",
"Soft deletion": "Soft deletion",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "Buy",
"Buy Product": "Buy Product",
"CNY": "CNY",
"Detail": "Detail",
"Detail - Tooltip": "Detail of product",
"Dummy": "Dummy",
@@ -740,7 +759,6 @@
"Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.",
"This product is currently not in sale.": "This product is currently not in sale.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "Signup HTML - Edit",
"Signup HTML - Tooltip": "Custom HTML for replacing the default signup page style",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Silent",
"Site key": "Site key",
"Site key - Tooltip": "Site key",
@@ -1157,6 +1176,7 @@
"Keys": "Keys",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Link",
"Location": "Location",
"Location - Tooltip": "City of residence",

View File

@@ -161,6 +161,18 @@
"Sending": "Відправка",
"Submit and complete": "Надішліть і заповніть"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Редагувати Enforcer",
"New Enforcer": "Новий Enforcer"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "Перейти на демонстраційний сайт для запису?",
"Groups": "Групи",
"Groups - Tooltip": "Групи підказка",
"Hide password": "Hide password",
"Home": "додому",
"Home - Tooltip": "Домашня сторінка програми",
"ID": "ID",
"ID - Tooltip": "Унікальний випадковий рядок",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Ідентичність",
"Invitations": "Запрошення",
"Is enabled": "Увімкнено",
@@ -312,6 +327,10 @@
"Password - Tooltip": "Переконайтеся, що пароль правильний",
"Password complexity options": "Параметри складності пароля",
"Password complexity options - Tooltip": "Різні комбінації параметрів складності пароля",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Сіль пароля",
"Password salt - Tooltip": "Випадковий параметр, який використовується для шифрування пароля",
"Password type": "Тип пароля",
@@ -559,7 +578,6 @@
"Use SMS": "Використовуйте SMS",
"Use SMS verification code": "Використовуйте код підтвердження SMS",
"Use a recovery code": "Використовуйте код відновлення",
"Verification failed": "Не вдалося перевірити",
"Verify Code": "Підтвердити код",
"Verify Password": "Підтвердіть пароль",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "Змінити правило",
"New Organization": "Нова організація",
"Optional": "Додатково",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Підкажіть",
"Required": "вимагається",
"Soft deletion": "М'яке видалення",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "купити",
"Buy Product": "Купити товар",
"CNY": "CNY",
"Detail": "Деталь",
"Detail - Tooltip": "Деталь продукту",
"Dummy": "манекен",
@@ -740,7 +759,6 @@
"Test buy page..": "Сторінка тестової покупки..",
"There is no payment channel for this product.": "Для цього продукту немає платіжного каналу.",
"This product is currently not in sale.": "Цей товар наразі відсутній у продажу.",
"USD": "доларів США",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "Реєстраційний HTML - Редагувати",
"Signup HTML - Tooltip": "Спеціальний HTML для заміни стилю сторінки реєстрації за умовчанням",
"Signup group": "Група реєстрації",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Мовчазний",
"Site key": "Ключ сайту",
"Site key - Tooltip": "Ключ сайту",
@@ -1157,6 +1176,7 @@
"Keys": "Ключі",
"Language": "Мова",
"Language - Tooltip": "Мова підказка",
"Last change password time": "Last change password time",
"Link": "Посилання",
"Location": "Місцезнаходження",
"Location - Tooltip": "Місто проживання",

View File

@@ -161,6 +161,18 @@
"Sending": "Gửi",
"Submit and complete": "Nộp và hoàn thành"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "Edit Enforcer",
"New Enforcer": "New Enforcer"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "Bạn có muốn đi đến trang demo có thể viết được không?",
"Groups": "Groups",
"Groups - Tooltip": "Groups - Tooltip",
"Hide password": "Hide password",
"Home": "Nhà",
"Home - Tooltip": "Trang chủ của ứng dụng",
"ID": "ID",
"ID - Tooltip": "Chuỗi ngẫu nhiên độc nhất",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "Identity",
"Invitations": "Invitations",
"Is enabled": "Đã được kích hoạt",
@@ -312,6 +327,10 @@
"Password - Tooltip": "Hãy đảm bảo rằng mật khẩu là chính xác",
"Password complexity options": "Password complexity options",
"Password complexity options - Tooltip": "Password complexity options - Tooltip",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "Muối mật khẩu",
"Password salt - Tooltip": "Tham số ngẫu nhiên được sử dụng để mã hóa mật khẩu",
"Password type": "Loại mật khẩu",
@@ -559,7 +578,6 @@
"Use SMS": "Use SMS",
"Use SMS verification code": "Use SMS verification code",
"Use a recovery code": "Use a recovery code",
"Verification failed": "Verification failed",
"Verify Code": "Verify Code",
"Verify Password": "Verify Password",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
@@ -592,6 +610,8 @@
"Modify rule": "Sửa đổi quy tắc",
"New Organization": "Tổ chức mới",
"Optional": "Optional",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "Prompt",
"Required": "Required",
"Soft deletion": "Xóa mềm",
@@ -709,7 +729,6 @@
"Alipay": "Alipay",
"Buy": "Mua",
"Buy Product": "Mua sản phẩm",
"CNY": "CNY",
"Detail": "Chi tiết",
"Detail - Tooltip": "Chi tiết sản phẩm",
"Dummy": "Dummy",
@@ -740,7 +759,6 @@
"Test buy page..": "Trang mua thử.",
"There is no payment channel for this product.": "Không có kênh thanh toán cho sản phẩm này.",
"This product is currently not in sale.": "Sản phẩm này hiện không được bán.",
"USD": "USD",
"WeChat Pay": "WeChat Pay"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "Đăng ký HTML - Chỉnh sửa",
"Signup HTML - Tooltip": "Trang HTML tùy chỉnh để thay thế phong cách trang đăng ký mặc định",
"Signup group": "Signup group",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "Im lặng",
"Site key": "Khóa trang web",
"Site key - Tooltip": "Khóa trang web",
@@ -1157,6 +1176,7 @@
"Keys": "Chìa khóa",
"Language": "Language",
"Language - Tooltip": "Language - Tooltip",
"Last change password time": "Last change password time",
"Link": "Liên kết",
"Location": "Vị trí",
"Location - Tooltip": "Thành phố cư trú",

View File

@@ -161,6 +161,18 @@
"Sending": "发送中",
"Submit and complete": "完成提交"
},
"currency": {
"AUD": "AUD",
"CAD": "CAD",
"CHF": "CHF",
"CNY": "CNY",
"EUR": "EUR",
"GBP": "GBP",
"HKD": "HKD",
"JPY": "JPY",
"SGD": "SGD",
"USD": "USD"
},
"enforcer": {
"Edit Enforcer": "编辑Casbin执行器",
"New Enforcer": "新建Casbin执行器"
@@ -266,10 +278,13 @@
"Go to writable demo site?": "跳转至可写演示站点?",
"Groups": "群组",
"Groups - Tooltip": "组",
"Hide password": "Hide password",
"Home": "首页",
"Home - Tooltip": "应用的首页",
"ID": "ID",
"ID - Tooltip": "唯一的随机字符串",
"IP whitelist": "IP whitelist",
"IP whitelist - Tooltip": "IP whitelist - Tooltip",
"Identity": "身份认证",
"Invitations": "邀请码",
"Is enabled": "已启用",
@@ -312,6 +327,10 @@
"Password - Tooltip": "请确认密码正确",
"Password complexity options": "密码复杂度选项",
"Password complexity options - Tooltip": "密码复杂度组合,登录密码复杂度必须符合该规范",
"Password obf key": "Password obf key",
"Password obf key - Tooltip": "Password obf key - Tooltip",
"Password obfuscator": "Password obfuscator",
"Password obfuscator - Tooltip": "Password obfuscator - Tooltip",
"Password salt": "密码Salt值",
"Password salt - Tooltip": "用于密码加密的随机参数",
"Password type": "密码类型",
@@ -559,7 +578,6 @@
"Use SMS": "使用短信",
"Use SMS verification code": "使用手机或电子邮件发送验证码认证",
"Use a recovery code": "使用恢复代码",
"Verification failed": "验证失败",
"Verify Code": "验证码",
"Verify Password": "验证密码",
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "您已经启用多因素认证, 请点击 '发送验证码' 继续",
@@ -592,6 +610,8 @@
"Modify rule": "修改规则",
"New Organization": "添加组织",
"Optional": "可选",
"Password expire days": "Password expire days",
"Password expire days - Tooltip": "Password expire days - Tooltip",
"Prompt": "提示",
"Required": "必须",
"Soft deletion": "软删除",
@@ -709,7 +729,6 @@
"Alipay": "支付宝",
"Buy": "购买",
"Buy Product": "购买商品",
"CNY": "人民币",
"Detail": "详情",
"Detail - Tooltip": "商品详情",
"Dummy": "虚拟",
@@ -740,7 +759,6 @@
"Test buy page..": "测试购买页面..",
"There is no payment channel for this product.": "该商品没有付款方式。",
"This product is currently not in sale.": "该商品目前未在售。",
"USD": "美元",
"WeChat Pay": "微信支付"
},
"provider": {
@@ -893,6 +911,7 @@
"Signup HTML - Edit": "注册页面HTML - 编辑",
"Signup HTML - Tooltip": "自定义HTML用于替换默认的注册页面样式",
"Signup group": "注册后的群组",
"Signup group - Tooltip": "Signup group - Tooltip",
"Silent": "静默",
"Site key": "Site key",
"Site key - Tooltip": "站点密钥",
@@ -1157,6 +1176,7 @@
"Keys": "键",
"Language": "语言",
"Language - Tooltip": "语言 - Tooltip",
"Last change password time": "Last change password time",
"Link": "绑定",
"Location": "城市",
"Location - Tooltip": "居住地址所在的城市",

View File

@@ -176,7 +176,7 @@ class MfaAccountTable extends React.Component {
content={<CasdoorAppUrl accessToken={this.props.accessToken} />}
>
<Button type="primary" size="small">
{i18next.t("general:Show URL")}
{i18next.t("general:URL")}
</Button>
</Popover>
</div>

View File

@@ -136,7 +136,7 @@ class SigninMethodTable extends React.Component {
options = [
{id: "All", name: i18next.t("general:All")},
{id: "Non-LDAP", name: i18next.t("general:Non-LDAP")},
{id: "Hide-Password", name: i18next.t("general:Hide-Password")},
{id: "Hide password", name: i18next.t("general:Hide password")},
];
}