diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index 29c67e01..61b836c3 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -29,6 +29,22 @@ jobs: crowdin_branch_name: l10n_branch config: './web/crowdin.yml' + - name: crowdin backend action + uses: crowdin/github-action@1.4.8 + with: + upload_translations: true + + download_translations: true + push_translations: true + commit_message: 'refactor: New Crowdin Backend translations by Github Action' + + localization_branch_name: l10n_crowdin_action + create_pull_request: true + pull_request_title: 'refactor: New Crowdin Backend translations' + + crowdin_branch_name: l10n_branch + config: './crowdin.yml' + env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CROWDIN_PROJECT_ID: '463556' diff --git a/controllers/account.go b/controllers/account.go index 8778cf56..bff29d85 100644 --- a/controllers/account.go +++ b/controllers/account.go @@ -102,7 +102,7 @@ type Captcha struct { // @router /signup [post] func (c *ApiController) Signup() { if c.GetSessionUsername() != "" { - c.ResponseError(c.T("SignUpErr.SignOutFirst"), c.GetSessionUsername()) + c.ResponseError(c.T("account:Please sign out first before signing up"), c.GetSessionUsername()) return } @@ -115,7 +115,7 @@ func (c *ApiController) Signup() { application := object.GetApplication(fmt.Sprintf("admin/%s", form.Application)) if !application.EnableSignUp { - c.ResponseError(c.T("SignUpErr.DoNotAllowSignUp")) + c.ResponseError(c.T("account:The application does not allow to sign up new account")) return } @@ -129,7 +129,7 @@ func (c *ApiController) Signup() { if application.IsSignupItemVisible("Email") && application.GetSignupItemRule("Email") != "No verification" && form.Email != "" { checkResult := object.CheckVerificationCode(form.Email, form.EmailCode, c.GetAcceptLanguage()) if len(checkResult) != 0 { - c.ResponseError(c.T("EmailErr.EmailCheckResult"), checkResult) + c.ResponseError(c.T("account:Email: %s"), checkResult) return } } @@ -139,7 +139,7 @@ func (c *ApiController) Signup() { checkPhone = fmt.Sprintf("+%s%s", form.PhonePrefix, form.Phone) checkResult := object.CheckVerificationCode(checkPhone, form.PhoneCode, c.GetAcceptLanguage()) if len(checkResult) != 0 { - c.ResponseError(c.T("PhoneErr.PhoneCheckResult"), checkResult) + c.ResponseError(c.T("account:Phone: %s"), checkResult) return } } @@ -163,7 +163,7 @@ func (c *ApiController) Signup() { initScore, err := getInitScore() if err != nil { - c.ResponseError(fmt.Errorf(c.T("InitErr.InitScoreFailed"), err).Error()) + c.ResponseError(fmt.Errorf(c.T("account:Get init score failed, error: %w"), err).Error()) return } @@ -209,7 +209,7 @@ func (c *ApiController) Signup() { affected := object.AddUser(user) if !affected { - c.ResponseError(c.T("UserErr.InvalidInformation"), util.StructToJson(user)) + c.ResponseError(c.T("account:Invalid information"), util.StructToJson(user)) return } diff --git a/controllers/application.go b/controllers/application.go index 099641df..aeeeb2d7 100644 --- a/controllers/application.go +++ b/controllers/application.go @@ -86,7 +86,7 @@ func (c *ApiController) GetUserApplication() { id := c.Input().Get("id") user := object.GetUser(id) if user == nil { - c.ResponseError(fmt.Sprintf(c.T("UserErr.DoNotExist"), id)) + c.ResponseError(fmt.Sprintf(c.T("application:The user: %s doesn't exist"), id)) return } @@ -113,7 +113,7 @@ func (c *ApiController) GetOrganizationApplications() { sortOrder := c.Input().Get("sortOrder") if organization == "" { - c.ResponseError(c.T("ParameterErr.OrgMissingErr")) + c.ResponseError(c.T("application:Parameter organization is missing")) return } diff --git a/controllers/auth.go b/controllers/auth.go index 9e072a05..eb719064 100644 --- a/controllers/auth.go +++ b/controllers/auth.go @@ -65,7 +65,7 @@ func (c *ApiController) HandleLoggedIn(application *object.Application, user *ob return } if !allowed { - c.ResponseError(c.T("AuthErr.Unauthorized")) + c.ResponseError(c.T("auth:Unauthorized operation")) return } @@ -84,7 +84,7 @@ func (c *ApiController) HandleLoggedIn(application *object.Application, user *ob codeChallenge := c.Input().Get("code_challenge") if challengeMethod != "S256" && challengeMethod != "null" && challengeMethod != "" { - c.ResponseError(c.T("AuthErr.ChallengeMethodErr")) + c.ResponseError(c.T("auth:Challenge method should be S256")) return } code := object.GetOAuthCode(userId, clientId, responseType, redirectUri, scope, state, nonce, codeChallenge, c.Ctx.Request.Host, c.GetAcceptLanguage()) @@ -205,7 +205,7 @@ func (c *ApiController) Login() { if form.Username != "" { if form.Type == ResponseTypeLogin { if c.GetSessionUsername() != "" { - c.ResponseError(c.T("LoginErr.SignOutFirst"), c.GetSessionUsername()) + c.ResponseError(c.T("auth:Please sign out first before signing in"), c.GetSessionUsername()) return } } @@ -231,7 +231,7 @@ func (c *ApiController) Login() { } else { verificationCodeType = "phone" if len(form.PhonePrefix) == 0 { - responseText := fmt.Sprintf(c.T("PhoneErr.NoPrefix"), verificationCodeType) + responseText := fmt.Sprintf(c.T("auth:%s No phone prefix"), verificationCodeType) c.ResponseError(responseText) return } @@ -256,13 +256,13 @@ func (c *ApiController) Login() { user = object.GetUserByFields(form.Organization, form.Username) if user == nil { - c.ResponseError(fmt.Sprintf(c.T("LoginErr.UserDoNotExist"), form.Organization, form.Username)) + c.ResponseError(fmt.Sprintf(c.T("auth:The user: %s/%s doesn't exist"), form.Organization, form.Username)) return } } else { application := object.GetApplication(fmt.Sprintf("admin/%s", form.Application)) if application == nil { - c.ResponseError(fmt.Sprintf("The application: %s does not exist", form.Application)) + c.ResponseError(fmt.Sprintf(c.T("auth:The application: %s does not exist"), form.Application)) return } @@ -274,7 +274,7 @@ func (c *ApiController) Login() { } if !isHuman { - c.ResponseError("Turing test failed.") + c.ResponseError(c.T("auth:Turing test failed.")) return } } @@ -288,7 +288,7 @@ func (c *ApiController) Login() { } else { application := object.GetApplication(fmt.Sprintf("admin/%s", form.Application)) if application == nil { - c.ResponseError(fmt.Sprintf(c.T("LoginErr.AppDoNotExist"), form.Application)) + c.ResponseError(fmt.Sprintf(c.T("auth:The application: %s does not exist"), form.Application)) return } @@ -302,7 +302,7 @@ func (c *ApiController) Login() { } else if form.Provider != "" { application := object.GetApplication(fmt.Sprintf("admin/%s", form.Application)) if application == nil { - c.ResponseError(fmt.Sprintf(c.T("LoginErr.AppDoNotExist"), form.Application)) + c.ResponseError(fmt.Sprintf(c.T("auth:The application: %s does not exist"), form.Application)) return } @@ -310,7 +310,7 @@ func (c *ApiController) Login() { provider := object.GetProvider(util.GetId("admin", form.Provider)) providerItem := application.GetProviderItem(provider.Name) if !providerItem.IsProviderVisible() { - c.ResponseError(fmt.Sprintf(c.T("ProviderErr.ProviderNotEnabled"), provider.Name)) + c.ResponseError(fmt.Sprintf(c.T("auth:The provider: %s is not enabled for the application"), provider.Name)) return } @@ -334,14 +334,14 @@ func (c *ApiController) Login() { idProvider := idp.GetIdProvider(provider.Type, provider.SubType, clientId, clientSecret, provider.AppId, form.RedirectUri, provider.Domain, provider.CustomAuthUrl, provider.CustomTokenUrl, provider.CustomUserInfoUrl) if idProvider == nil { - c.ResponseError(fmt.Sprintf(c.T("ProviderErr.ProviderNotSupported"), provider.Type)) + c.ResponseError(fmt.Sprintf(c.T("auth:The provider type: %s is not supported"), provider.Type)) return } setHttpClient(idProvider, provider.Type) if form.State != conf.GetConfigString("authState") && form.State != application.Name { - c.ResponseError(fmt.Sprintf(c.T("AuthErr.AuthStateWrong"), conf.GetConfigString("authState"), form.State)) + c.ResponseError(fmt.Sprintf(c.T("auth:State expected: %s, but got: %s"), conf.GetConfigString("authState"), form.State)) return } @@ -353,13 +353,13 @@ func (c *ApiController) Login() { } if !token.Valid() { - c.ResponseError(c.T("TokenErr.InvalidToken")) + c.ResponseError(c.T("auth:Invalid token")) return } userInfo, err = idProvider.GetUserInfo(token) if err != nil { - c.ResponseError(fmt.Sprintf(c.T("LoginErr.LoginFail"), err.Error())) + c.ResponseError(fmt.Sprintf(c.T("auth:Failed to login in: %s"), err.Error())) return } } @@ -376,7 +376,7 @@ func (c *ApiController) Login() { // Sign in via OAuth (want to sign up but already have account) if user.IsForbidden { - c.ResponseError(c.T("LoginErr.UserIsForbidden")) + c.ResponseError(c.T("auth:The user is forbidden to sign in, please contact the administrator")) } resp = c.HandleLoggedIn(application, user, &form) @@ -388,12 +388,12 @@ func (c *ApiController) Login() { } else if provider.Category == "OAuth" { // Sign up via OAuth if !application.EnableSignUp { - c.ResponseError(fmt.Sprintf(c.T("LoginErr.AppNotEnableSignUp"), provider.Type, userInfo.Username, userInfo.DisplayName)) + c.ResponseError(fmt.Sprintf(c.T("auth:The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support"), provider.Type, userInfo.Username, userInfo.DisplayName)) return } if !providerItem.CanSignUp { - c.ResponseError(fmt.Sprintf(c.T("LoginErr.ProviderCanNotSignUp"), provider.Type, userInfo.Username, userInfo.DisplayName, provider.Type)) + c.ResponseError(fmt.Sprintf(c.T("auth:The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up"), provider.Type, userInfo.Username, userInfo.DisplayName, provider.Type)) return } @@ -414,7 +414,7 @@ func (c *ApiController) Login() { properties["no"] = strconv.Itoa(len(object.GetUsers(application.Organization)) + 2) initScore, err := getInitScore() if err != nil { - c.ResponseError(fmt.Errorf(c.T("InitErr.InitScoreFailed"), err).Error()) + c.ResponseError(fmt.Errorf(c.T("auth:Get init score failed, error: %w"), err).Error()) return } @@ -441,7 +441,7 @@ func (c *ApiController) Login() { affected := object.AddUser(user) if !affected { - c.ResponseError(fmt.Sprintf(c.T("LoginErr.InvalidUserInformation"), util.StructToJson(user))) + c.ResponseError(fmt.Sprintf(c.T("auth:Failed to create user, user information is invalid: %s"), util.StructToJson(user))) return } @@ -466,13 +466,13 @@ func (c *ApiController) Login() { } else { // form.Method != "signup" userId := c.GetSessionUsername() if userId == "" { - c.ResponseError(c.T("LoginErr.AccountDoNotExist"), userInfo) + c.ResponseError(c.T("auth:The account does not exist"), userInfo) return } oldUser := object.GetUserByField(application.Organization, provider.Type, userInfo.Id) if oldUser != nil { - c.ResponseError(fmt.Sprintf(c.T("LoginErr.OldUser"), provider.Type, userInfo.Username, userInfo.DisplayName, oldUser.Name, oldUser.DisplayName)) + c.ResponseError(fmt.Sprintf(c.T("auth:The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s)"), provider.Type, userInfo.Username, userInfo.DisplayName, oldUser.Name, oldUser.DisplayName)) return } @@ -493,7 +493,7 @@ func (c *ApiController) Login() { // user already signed in to Casdoor, so let the user click the avatar button to do the quick sign-in application := object.GetApplication(fmt.Sprintf("admin/%s", form.Application)) if application == nil { - c.ResponseError(fmt.Sprintf(c.T("LoginErr.AppDoNotExist"), form.Application)) + c.ResponseError(fmt.Sprintf(c.T("auth:The application: %s does not exist"), form.Application)) return } @@ -505,7 +505,7 @@ func (c *ApiController) Login() { record.User = user.Name util.SafeGoroutine(func() { object.AddRecord(record) }) } else { - c.ResponseError(fmt.Sprintf(c.T("LoginErr.UnknownAuthentication"), util.StructToJson(form))) + c.ResponseError(fmt.Sprintf(c.T("auth:Unknown authentication type (not password or provider), form = %s"), util.StructToJson(form))) return } } diff --git a/controllers/cas.go b/controllers/cas.go index dd0c21ab..f2e6bf7e 100644 --- a/controllers/cas.go +++ b/controllers/cas.go @@ -210,7 +210,7 @@ func (c *RootController) SamlValidate() { } if !strings.HasPrefix(target, service) { - c.ResponseError(fmt.Sprintf(c.T("CasErr.ServiceDoNotMatch"), target, service)) + c.ResponseError(fmt.Sprintf(c.T("cas:Service %s and %s do not match"), target, service)) return } diff --git a/controllers/enforcer.go b/controllers/enforcer.go index 86d12c60..f451ce2b 100644 --- a/controllers/enforcer.go +++ b/controllers/enforcer.go @@ -47,7 +47,7 @@ func (c *ApiController) BatchEnforce() { func (c *ApiController) GetAllObjects() { userId := c.GetSessionUsername() if userId == "" { - c.ResponseError(c.T("EnforcerErr.SignInFirst")) + c.ResponseError(c.T("enforcer:Please sign in first")) return } @@ -58,7 +58,7 @@ func (c *ApiController) GetAllObjects() { func (c *ApiController) GetAllActions() { userId := c.GetSessionUsername() if userId == "" { - c.ResponseError(c.T("EnforcerErr.SignInFirst")) + c.ResponseError(c.T("enforcer:Please sign in first")) return } @@ -69,7 +69,7 @@ func (c *ApiController) GetAllActions() { func (c *ApiController) GetAllRoles() { userId := c.GetSessionUsername() if userId == "" { - c.ResponseError(c.T("EnforcerErr.SignInFirst")) + c.ResponseError(c.T("enforcer:Please sign in first")) return } diff --git a/controllers/ldap.go b/controllers/ldap.go index cd5e1a8a..fcf8ff61 100644 --- a/controllers/ldap.go +++ b/controllers/ldap.go @@ -52,7 +52,7 @@ func (c *ApiController) GetLdapUser() { ldapServer := LdapServer{} err := json.Unmarshal(c.Ctx.Input.RequestBody, &ldapServer) if err != nil || util.IsStrsEmpty(ldapServer.Host, ldapServer.Admin, ldapServer.Passwd, ldapServer.BaseDn) { - c.ResponseError(c.T("ParameterErr.Missing")) + c.ResponseError(c.T("ldap:Missing parameter")) return } @@ -120,7 +120,7 @@ func (c *ApiController) GetLdap() { id := c.Input().Get("id") if util.IsStrsEmpty(id) { - c.ResponseError(c.T("ParameterErr.Missing")) + c.ResponseError(c.T("ldap:Missing parameter")) return } @@ -136,17 +136,17 @@ func (c *ApiController) AddLdap() { var ldap object.Ldap err := json.Unmarshal(c.Ctx.Input.RequestBody, &ldap) if err != nil { - c.ResponseError(c.T("ParameterErr.Missing")) + c.ResponseError(c.T("ldap:Missing parameter")) return } if util.IsStrsEmpty(ldap.Owner, ldap.ServerName, ldap.Host, ldap.Admin, ldap.Passwd, ldap.BaseDn) { - c.ResponseError(c.T("ParameterErr.Missing")) + c.ResponseError(c.T("ldap:Missing parameter")) return } if object.CheckLdapExist(&ldap) { - c.ResponseError(c.T("LdapErr.ServerExisted")) + c.ResponseError(c.T("ldap:Ldap server exist")) return } @@ -171,7 +171,7 @@ func (c *ApiController) UpdateLdap() { var ldap object.Ldap err := json.Unmarshal(c.Ctx.Input.RequestBody, &ldap) if err != nil || util.IsStrsEmpty(ldap.Owner, ldap.ServerName, ldap.Host, ldap.Admin, ldap.Passwd, ldap.BaseDn) { - c.ResponseError(c.T("ParameterErr.Missing")) + c.ResponseError(c.T("ldap:Missing parameter")) return } diff --git a/controllers/link.go b/controllers/link.go index c2670c25..bc26babc 100644 --- a/controllers/link.go +++ b/controllers/link.go @@ -47,7 +47,7 @@ func (c *ApiController) Unlink() { if user.Id != unlinkedUser.Id && !user.IsGlobalAdmin { // if the user is not the same as the one we are unlinking, we need to make sure the user is the global admin. - c.ResponseError(c.T("AuthErr.CanNotUnlinkUsers")) + c.ResponseError(c.T("link:You are not the global admin, you can't unlink other users")) return } @@ -55,23 +55,23 @@ func (c *ApiController) Unlink() { // if the user is unlinking themselves, should check the provider can be unlinked, if not, we should return an error. application := object.GetApplicationByUser(user) if application == nil { - c.ResponseError(c.T("AuthErr.CanNotLinkMySelf")) + c.ResponseError(c.T("link:You can't unlink yourself, you are not a member of any application")) return } if len(application.Providers) == 0 { - c.ResponseError(c.T("ApplicationErr.HasNoProviders")) + c.ResponseError(c.T("link:This application has no providers")) return } provider := application.GetProviderItemByType(providerType) if provider == nil { - c.ResponseError(c.T("ApplicationErr.HasNoProvidersOfType") + providerType) + c.ResponseError(c.T("link:This application has no providers of type") + providerType) return } if !provider.CanUnlink { - c.ResponseError(c.T("ProviderErr.CanNotBeUnlinked")) + c.ResponseError(c.T("link:This provider can't be unlinked")) return } @@ -84,7 +84,7 @@ func (c *ApiController) Unlink() { value := object.GetUserField(&unlinkedUser, providerType) if value == "" { - c.ResponseError(c.T("ProviderErr.LinkFirstErr"), value) + c.ResponseError(c.T("link:Please link first"), value) return } diff --git a/controllers/product.go b/controllers/product.go index c8c59df2..fd5fffa4 100644 --- a/controllers/product.go +++ b/controllers/product.go @@ -141,13 +141,13 @@ func (c *ApiController) BuyProduct() { userId := c.GetSessionUsername() if userId == "" { - c.ResponseError(c.T("LoginErr.LoginFirst")) + c.ResponseError(c.T("product:Please login first")) return } user := object.GetUser(userId) if user == nil { - c.ResponseError(fmt.Sprintf(c.T("UserErr.DoNotExist"), userId)) + c.ResponseError(fmt.Sprintf(c.T("product:The user: %s doesn't exist"), userId)) return } diff --git a/controllers/resource.go b/controllers/resource.go index 03465cb8..a7b5079c 100644 --- a/controllers/resource.go +++ b/controllers/resource.go @@ -154,7 +154,7 @@ func (c *ApiController) UploadResource() { defer file.Close() if username == "" || fullFilePath == "" { - c.ResponseError(fmt.Sprintf(c.T("ResourceErr.UsernameOrFilePathEmpty"), username, fullFilePath)) + c.ResponseError(fmt.Sprintf(c.T("resource:Username or fullFilePath is empty: username = %s, fullFilePath = %s"), username, fullFilePath)) return } @@ -227,7 +227,7 @@ func (c *ApiController) UploadResource() { case "avatar": user := object.GetUserNoCheck(util.GetId(owner, username)) if user == nil { - c.ResponseError(c.T("ResourceErr.UserIsNil")) + c.ResponseError(c.T("resource:User is nil for tag: avatar")) return } diff --git a/controllers/saml.go b/controllers/saml.go index 249dbf15..31f31b9b 100644 --- a/controllers/saml.go +++ b/controllers/saml.go @@ -25,7 +25,7 @@ func (c *ApiController) GetSamlMeta() { paramApp := c.Input().Get("application") application := object.GetApplication(paramApp) if application == nil { - c.ResponseError(fmt.Sprintf(c.T("ApplicationErr.AppNotFound"), paramApp)) + c.ResponseError(fmt.Sprintf(c.T("saml:Application %s not found"), paramApp)) return } metadata, _ := object.GetSamlMeta(application, host) diff --git a/controllers/service.go b/controllers/service.go index 1432d40c..3d2fa660 100644 --- a/controllers/service.go +++ b/controllers/service.go @@ -81,7 +81,7 @@ func (c *ApiController) SendEmail() { } if util.IsStrsEmpty(emailForm.Title, emailForm.Content, emailForm.Sender) { - c.ResponseError(fmt.Sprintf(c.T("EmailErr.EmptyParam"), emailForm)) + c.ResponseError(fmt.Sprintf(c.T("service:Empty parameters for emailForm: %v"), emailForm)) return } @@ -93,7 +93,7 @@ func (c *ApiController) SendEmail() { } if len(invalidReceivers) != 0 { - c.ResponseError(fmt.Sprintf(c.T("EmailErr.InvalidReceivers"), invalidReceivers)) + c.ResponseError(fmt.Sprintf(c.T("service:Invalid Email receivers: %s"), invalidReceivers)) return } @@ -141,7 +141,7 @@ func (c *ApiController) SendSms() { } if len(invalidReceivers) != 0 { - c.ResponseError(fmt.Sprintf(c.T("PhoneErr.InvalidReceivers"), invalidReceivers)) + c.ResponseError(fmt.Sprintf(c.T("service:Invalid phone receivers: %s"), invalidReceivers)) return } diff --git a/controllers/system_info.go b/controllers/system_info.go index a2a390b2..42949c2c 100644 --- a/controllers/system_info.go +++ b/controllers/system_info.go @@ -40,7 +40,7 @@ func (c *ApiController) GetSystemInfo() { user := object.GetUser(id) if user == nil || !user.IsGlobalAdmin { - c.ResponseError(c.T("ResourceErr.NotAuthorized")) + c.ResponseError(c.T("system_info:You are not authorized to access this resource")) return } diff --git a/controllers/token.go b/controllers/token.go index c86c1ccc..ffb17164 100644 --- a/controllers/token.go +++ b/controllers/token.go @@ -150,7 +150,7 @@ func (c *ApiController) GetOAuthCode() { codeChallenge := c.Input().Get("code_challenge") if challengeMethod != "S256" && challengeMethod != "null" && challengeMethod != "" { - c.ResponseError(c.T("AuthErr.ChallengeMethodErr")) + c.ResponseError(c.T("token:Challenge method should be S256")) return } host := c.Ctx.Request.Host @@ -290,7 +290,7 @@ func (c *ApiController) IntrospectToken() { clientId = c.Input().Get("client_id") clientSecret = c.Input().Get("client_secret") if clientId == "" || clientSecret == "" { - c.ResponseError(c.T("TokenErr.EmptyClientID")) + c.ResponseError(c.T("token:Empty clientId or clientSecret")) c.Data["json"] = &object.TokenError{ Error: object.InvalidRequest, } @@ -301,7 +301,7 @@ func (c *ApiController) IntrospectToken() { } application := object.GetApplicationByClientId(clientId) if application == nil || application.ClientSecret != clientSecret { - c.ResponseError(c.T("TokenErr.InvalidAppOrWrongClientSecret")) + c.ResponseError(c.T("token:Invalid application or wrong clientSecret")) c.Data["json"] = &object.TokenError{ Error: object.InvalidClient, } diff --git a/controllers/user.go b/controllers/user.go index e1ed47e7..3edb5537 100644 --- a/controllers/user.go +++ b/controllers/user.go @@ -149,7 +149,7 @@ func (c *ApiController) UpdateUser() { } if user.DisplayName == "" { - c.ResponseError(c.T("UserErr.DisplayNameCanNotBeEmpty")) + c.ResponseError(c.T("user:Display name cannot be empty")) return } @@ -236,7 +236,7 @@ func (c *ApiController) GetEmailAndPhone() { user := object.GetUserByFields(form.Organization, form.Username) if user == nil { - c.ResponseError(fmt.Sprintf(c.T("UserErr.DoNotExistInOrg"), form.Organization, form.Username)) + c.ResponseError(fmt.Sprintf(c.T("user:The user: %s/%s doesn't exist"), form.Organization, form.Username)) return } @@ -294,12 +294,12 @@ func (c *ApiController) SetPassword() { } if strings.Contains(newPassword, " ") { - c.ResponseError(c.T("SetPasswordErr.CanNotContainBlank")) + c.ResponseError(c.T("user:New password cannot contain blank space.")) return } if len(newPassword) <= 5 { - c.ResponseError(c.T("SetPasswordErr.LessThanSixCharacters")) + c.ResponseError(c.T("user:New password must have at least 6 characters")) return } diff --git a/controllers/user_upload.go b/controllers/user_upload.go index 374f8c45..121cec22 100644 --- a/controllers/user_upload.go +++ b/controllers/user_upload.go @@ -61,6 +61,6 @@ func (c *ApiController) UploadUsers() { if affected { c.ResponseOk() } else { - c.ResponseError(c.T("UserErr.FailToImportUsers")) + c.ResponseError(c.T("user_upload:Failed to import users")) } } diff --git a/controllers/util.go b/controllers/util.go index 9a3fba5e..981a03f1 100644 --- a/controllers/util.go +++ b/controllers/util.go @@ -84,7 +84,7 @@ func (c *ApiController) SetTokenErrorHttpStatus() { func (c *ApiController) RequireSignedIn() (string, bool) { userId := c.GetSessionUsername() if userId == "" { - c.ResponseError(c.T("LoginErr.LoginFirst"), "Please login first") + c.ResponseError(c.T("util:Please login first"), "util:Please login first") return "", false } return userId, true @@ -100,7 +100,7 @@ func (c *ApiController) RequireSignedInUser() (*object.User, bool) { user := object.GetUser(userId) if user == nil { c.ClearUserSession() - c.ResponseError(fmt.Sprintf(c.T("UserErr.DoNotExist"), userId)) + c.ResponseError(fmt.Sprintf(c.T("util:The user: %s doesn't exist"), userId)) return nil, false } return user, true @@ -128,7 +128,7 @@ func (c *ApiController) GetProviderFromContext(category string) (*object.Provide if providerName != "" { provider := object.GetProvider(util.GetId("admin", providerName)) if provider == nil { - c.ResponseError(c.T("ProviderErr.ProviderNotFound"), providerName) + c.ResponseError(c.T("util:The provider: %s is not found"), providerName) return nil, nil, false } return provider, nil, true @@ -141,13 +141,13 @@ func (c *ApiController) GetProviderFromContext(category string) (*object.Provide application, user := object.GetApplicationByUserId(userId) if application == nil { - c.ResponseError(fmt.Sprintf(c.T("ApplicationErr.AppNotFoundForUserID"), userId)) + c.ResponseError(fmt.Sprintf(c.T("util:No application is found for userId: %s"), userId)) return nil, nil, false } provider := application.GetProviderByCategory(category) if provider == nil { - c.ResponseError(fmt.Sprintf(c.T("ProviderErr.ProviderNotFoundForCategory"), category, application.Name)) + c.ResponseError(fmt.Sprintf(c.T("util:No provider for category: %s is found for application: %s"), category, application.Name)) return nil, nil, false } diff --git a/controllers/verification.go b/controllers/verification.go index 89ee4cd2..99e19b2d 100644 --- a/controllers/verification.go +++ b/controllers/verification.go @@ -50,23 +50,23 @@ func (c *ApiController) SendVerificationCode() { remoteAddr := util.GetIPFromRequest(c.Ctx.Request) if destType == "" { - c.ResponseError(c.T("ParameterErr.Missing") + ": type.") + c.ResponseError(c.T("verification:Missing parameter") + ": type.") return } if dest == "" { - c.ResponseError(c.T("ParameterErr.Missing") + ": dest.") + c.ResponseError(c.T("verification:Missing parameter") + ": dest.") return } if applicationId == "" { - c.ResponseError(c.T("ParameterErr.Missing") + ": applicationId.") + c.ResponseError(c.T("verification:Missing parameter") + ": applicationId.") return } if !strings.Contains(applicationId, "/") { - c.ResponseError(c.T("ParameterErr.Wrong") + ": applicationId.") + c.ResponseError(c.T("verification:Wrong parameter") + ": applicationId.") return } if checkType == "" { - c.ResponseError(c.T("ParameterErr.Missing") + ": checkType.") + c.ResponseError(c.T("verification:Missing parameter") + ": checkType.") return } @@ -74,7 +74,7 @@ func (c *ApiController) SendVerificationCode() { if captchaProvider != nil { if checkKey == "" { - c.ResponseError(c.T("ParameterErr.Missing") + ": checkKey.") + c.ResponseError(c.T("verification:Missing parameter") + ": checkKey.") return } isHuman, err := captchaProvider.VerifyCaptcha(checkKey, checkId) @@ -84,7 +84,7 @@ func (c *ApiController) SendVerificationCode() { } if !isHuman { - c.ResponseError(c.T("AuthErr.NotHuman")) + c.ResponseError(c.T("verification:Turing test failed.")) return } } @@ -93,12 +93,12 @@ func (c *ApiController) SendVerificationCode() { application := object.GetApplication(applicationId) organization := object.GetOrganization(fmt.Sprintf("%s/%s", application.Owner, application.Organization)) if organization == nil { - c.ResponseError(c.T("OrgErr.DoNotExist")) + c.ResponseError(c.T("verification:Organization does not exist")) return } if checkUser == "true" && user == nil && object.GetUserByFields(organization.Name, dest) == nil { - c.ResponseError(c.T("LoginErr.LoginFirst")) + c.ResponseError(c.T("verification:Please login first")) return } @@ -114,13 +114,13 @@ func (c *ApiController) SendVerificationCode() { dest = user.Email } if !util.IsEmailValid(dest) { - c.ResponseError(c.T("EmailErr.EmailInvalid")) + c.ResponseError(c.T("verification:Email is invalid")) return } userByEmail := object.GetUserByEmail(organization.Name, dest) if userByEmail == nil { - c.ResponseError(c.T("UserErr.DoNotExistSignUp")) + c.ResponseError(c.T("verification:the user does not exist, please sign up first")) return } @@ -131,13 +131,13 @@ func (c *ApiController) SendVerificationCode() { dest = user.Phone } if !util.IsPhoneCnValid(dest) { - c.ResponseError(c.T("PhoneErr.NumberInvalid")) + c.ResponseError(c.T("verification:Phone number is invalid")) return } userByPhone := object.GetUserByPhone(organization.Name, dest) if userByPhone == nil { - c.ResponseError(c.T("UserErr.DoNotExistSignUp")) + c.ResponseError(c.T("verification:the user does not exist, please sign up first")) return } @@ -169,7 +169,7 @@ func (c *ApiController) ResetEmailOrPhone() { dest := c.Ctx.Request.Form.Get("dest") code := c.Ctx.Request.Form.Get("code") if len(dest) == 0 || len(code) == 0 || len(destType) == 0 { - c.ResponseError(c.T("ParameterErr.Missing")) + c.ResponseError(c.T("verification:Missing parameter")) return } @@ -178,7 +178,7 @@ func (c *ApiController) ResetEmailOrPhone() { if destType == "phone" { phoneItem := object.GetAccountItemByName("Phone", org) if phoneItem == nil { - c.ResponseError(c.T("PhoneErr.UnableGetModifyRule")) + c.ResponseError(c.T("verification:Unable to get the phone modify rule.")) return } @@ -195,7 +195,7 @@ func (c *ApiController) ResetEmailOrPhone() { } else if destType == "email" { emailItem := object.GetAccountItemByName("Email", org) if emailItem == nil { - c.ResponseError(c.T("EmailErr.UnableGetModifyRule")) + c.ResponseError(c.T("verification:Unable to get the email modify rule.")) return } @@ -217,7 +217,7 @@ func (c *ApiController) ResetEmailOrPhone() { user.Phone = dest object.SetUserField(user, "phone", user.Phone) default: - c.ResponseError(c.T("ParameterErr.UnknownType")) + c.ResponseError(c.T("verification:Unknown type")) return } @@ -236,17 +236,17 @@ func (c *ApiController) VerifyCaptcha() { captchaToken := c.Ctx.Request.Form.Get("captchaToken") clientSecret := c.Ctx.Request.Form.Get("clientSecret") if captchaToken == "" { - c.ResponseError(c.T("ParameterErr.Missing") + ": captchaToken.") + c.ResponseError(c.T("verification:Missing parameter") + ": captchaToken.") return } if clientSecret == "" { - c.ResponseError(c.T("ParameterErr.Missing") + ": clientSecret.") + c.ResponseError(c.T("verification:Missing parameter") + ": clientSecret.") return } provider := captcha.GetCaptchaProvider(captchaType) if provider == nil { - c.ResponseError(c.T("ProviderErr.InvalidProvider")) + c.ResponseError(c.T("verification:Invalid captcha provider.")) return } diff --git a/controllers/webauthn.go b/controllers/webauthn.go index e32c6c6d..33778e86 100644 --- a/controllers/webauthn.go +++ b/controllers/webauthn.go @@ -35,7 +35,7 @@ func (c *ApiController) WebAuthnSignupBegin() { webauthnObj := object.GetWebAuthnObject(c.Ctx.Request.Host) user := c.getCurrentUser() if user == nil { - c.ResponseError(c.T("LoginErr.LoginFirst")) + c.ResponseError(c.T("webauthn:Please login first")) return } @@ -66,13 +66,13 @@ func (c *ApiController) WebAuthnSignupFinish() { webauthnObj := object.GetWebAuthnObject(c.Ctx.Request.Host) user := c.getCurrentUser() if user == nil { - c.ResponseError(c.T("LoginErr.LoginFirst")) + c.ResponseError(c.T("webauthn:Please login first")) return } sessionObj := c.GetSession("registration") sessionData, ok := sessionObj.(webauthn.SessionData) if !ok { - c.ResponseError(c.T("AuthErr.CallWebAuthnSigninBegin")) + c.ResponseError(c.T("webauthn:Please call WebAuthnSigninBegin first")) return } c.Ctx.Request.Body = io.NopCloser(bytes.NewBuffer(c.Ctx.Input.RequestBody)) @@ -101,11 +101,11 @@ func (c *ApiController) WebAuthnSigninBegin() { userName := c.Input().Get("name") user := object.GetUserByFields(userOwner, userName) if user == nil { - c.ResponseError(fmt.Sprintf(c.T("UserErr.DoNotExistInOrg"), userOwner, userName)) + c.ResponseError(fmt.Sprintf(c.T("webauthn:The user: %s/%s doesn't exist"), userOwner, userName)) return } if len(user.WebauthnCredentials) == 0 { - c.ResponseError(c.T("UserErr.NoWebAuthnCredential")) + c.ResponseError(c.T("webauthn:Found no credentials for this user")) return } @@ -132,7 +132,7 @@ func (c *ApiController) WebAuthnSigninFinish() { sessionObj := c.GetSession("authentication") sessionData, ok := sessionObj.(webauthn.SessionData) if !ok { - c.ResponseError(c.T("AuthErr.CallWebAuthnSigninBegin")) + c.ResponseError(c.T("webauthn:Please call WebAuthnSigninBegin first")) return } c.Ctx.Request.Body = io.NopCloser(bytes.NewBuffer(c.Ctx.Input.RequestBody)) diff --git a/crowdin.yml b/crowdin.yml new file mode 100644 index 00000000..dbcc7971 --- /dev/null +++ b/crowdin.yml @@ -0,0 +1,10 @@ +project_id: '491513' +api_token_env: 'CROWDIN_PERSONAL_TOKEN' +preserve_hierarchy: true +files: [ + # JSON translation files + { + source: '/i18n/locales/en/data.json', + translation: '/i18n/locales/%two_letters_code%/data.json', + }, +] \ No newline at end of file diff --git a/go.mod b/go.mod index 1e882050..d80c214e 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,6 @@ go 1.16 require ( github.com/RobotsAndPencils/go-saml v0.0.0-20170520135329-fb13cb52a46b - github.com/Unknwon/goconfig v1.0.0 github.com/alexedwards/argon2id v0.0.0-20211130144151-3585854a6387 github.com/aws/aws-sdk-go v1.44.4 github.com/beego/beego v1.12.11 @@ -38,7 +37,6 @@ require ( github.com/satori/go.uuid v1.2.0 github.com/shirou/gopsutil v3.21.11+incompatible github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e - github.com/smartystreets/goconvey v1.6.4 // indirect github.com/stretchr/testify v1.8.0 github.com/tealeg/xlsx v1.0.5 github.com/thanhpk/randstr v1.0.4 @@ -50,7 +48,7 @@ require ( golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df // indirect - gopkg.in/ini.v1 v1.67.0 + gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/square/go-jose.v2 v2.6.0 gopkg.in/yaml.v2 v2.3.0 // indirect xorm.io/builder v0.3.12 // indirect diff --git a/go.sum b/go.sum index 42a6748d..7c92ff7b 100644 --- a/go.sum +++ b/go.sum @@ -61,8 +61,6 @@ github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= github.com/RobotsAndPencils/go-saml v0.0.0-20170520135329-fb13cb52a46b h1:EgJ6N2S0h1WfFIjU5/VVHWbMSVYXAluop97Qxpr/lfQ= github.com/RobotsAndPencils/go-saml v0.0.0-20170520135329-fb13cb52a46b/go.mod h1:3SAoF0F5EbcOuBD5WT9nYkbIJieBS84cUQXADbXeBsU= -github.com/Unknwon/goconfig v1.0.0 h1:9IAu/BYbSLQi8puFjUQApZTxIHqSwrj5d8vpP8vTq4A= -github.com/Unknwon/goconfig v1.0.0/go.mod h1:wngxua9XCNjvHjDiTiV26DaKDT+0c63QR6H5hjVUUxw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -252,7 +250,6 @@ github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= @@ -286,7 +283,6 @@ github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA= @@ -412,11 +408,8 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= diff --git a/i18n/generate_backend.go b/i18n/generate_backend.go index 3c56afff..6cdeb281 100644 --- a/i18n/generate_backend.go +++ b/i18n/generate_backend.go @@ -15,13 +15,11 @@ package i18n import ( - "log" "os" "path/filepath" "regexp" "strings" - "github.com/Unknwon/goconfig" "github.com/casdoor/casdoor/util" ) @@ -43,7 +41,7 @@ func GetAllI18nStrings(fileContent string, path string) []string { return res } for _, match := range matches { - match := strings.Split(match[1], ",") + match := strings.SplitN(match[1], ",", 2) res = append(res, match[1][2:]) } } else { @@ -84,39 +82,34 @@ func getAllGoFilePaths() []string { return res } -func getErrName(paths []string) map[string]bool { - ErrName := make(map[string]bool) +func getErrName(paths []string) map[string]string { + ErrName := make(map[string]string) for i := 0; i < len(paths); i++ { content := util.ReadStringFromPath(paths[i]) words := GetAllI18nStrings(content, paths[i]) - for i := 0; i < len(words); i++ { - ErrName[words[i]] = true + for j := 0; j < len(words); j++ { + ErrName[words[j]] = paths[i] } } return ErrName } -func writeToAllLanguageFiles(errName map[string]bool) { - languages := "en,zh,es,fr,de,ja,ko,ru" - languageArr := strings.Split(languages, ",") - var c [10]*goconfig.ConfigFile - for i := 0; i < len(languageArr); i++ { - var err error - c[i], err = goconfig.LoadConfigFile("../i18n/languages/" + "locale_" + languageArr[i] + ".ini") - if err != nil { - log.Println(err.Error()) +func getI18nJSONData(errName map[string]string) *I18nData { + data := I18nData{} + for k, v := range errName { + var index int + if strings.Contains(v, "/") { + index = strings.LastIndex(v, "/") + } else { + index = strings.LastIndex(v, "\\") } - for j := range errName { - parts := strings.Split(j, ".") - _, err := c[i].GetValue(parts[0], parts[1]) - if err != nil { - c[i].SetValue(parts[0], parts[1], parts[1]) - } - } - c[i].SetPrettyFormat(true) - err = goconfig.SaveConfigFile(c[i], "../i18n/languages/"+"locale_"+languageArr[i]+".ini") - if err != nil { - log.Println(err) + namespace := v[index+1 : len(v)-3] + key := k[len(namespace)+1:] + // fmt.Printf("k=%s,v=%s,namespace=%s,key=%s\n", k, v, namespace, key) + if _, ok := data[namespace]; !ok { + data[namespace] = map[string]string{} } + data[namespace][key] = key } + return &data } diff --git a/i18n/generate_test.go b/i18n/generate_test.go index f0595fc1..f70104e4 100644 --- a/i18n/generate_test.go +++ b/i18n/generate_test.go @@ -44,7 +44,17 @@ func TestGenerateI18nStringsForBackend(t *testing.T) { errName := getErrName(paths) - writeToAllLanguageFiles(errName) + dataEn := getI18nJSONData(errName) + + writeI18nFile("backend_en", dataEn) + + applyToOtherLanguage(dataEn, "backend_de") + applyToOtherLanguage(dataEn, "backend_es") + applyToOtherLanguage(dataEn, "backend_fr") + applyToOtherLanguage(dataEn, "backend_ja") + applyToOtherLanguage(dataEn, "backend_ko") + applyToOtherLanguage(dataEn, "backend_ru") + applyToOtherLanguage(dataEn, "backend_zh") fmt.Println("Total Err Words:", len(errName)) diff --git a/i18n/languages/locale_de.ini b/i18n/languages/locale_de.ini deleted file mode 100644 index cc4ea179..00000000 --- a/i18n/languages/locale_de.ini +++ /dev/null @@ -1,138 +0,0 @@ -[ApplicationErr] -AppNotFound = Application %s not found -AppNotFoundForUserID = No application is found for userId: %s -GrantTypeNotSupport = Grant_type: %s is not supported in this application -HasNoProviders = This application has no providers -HasNoProvidersOfType = This application has no providers of type -InvalidID = Invalid application id - -[AuthErr] -AuthStateWrong = State expected: %s, but got: %s -ChallengeMethodErr = Challenge method should be S256 -CanNotUnlinkUsers = You are not the global admin, you can't unlink other users -CanNotLinkMySelf = You can't unlink yourself, you are not a member of any application -CallWebAuthnSigninBegin = Please call WebAuthnSigninBegin first -NotHuman = Turing test failed. -Unauthorized = Unauthorized operation -WrongPasswordManyTimes = WrongPasswordManyTimes - -[CasErr] -ServiceDoNotMatch = Service %s and %s do not match - -[EmailErr] -ExistedErr = Email already exists -EmptyErr = Email cannot be empty -EmailInvalid = Email is invalid -EmailCheckResult = Email: %s -EmptyParam = Empty parameters for emailForm: %v -InvalidReceivers = Invalid Email receivers: %s -UnableGetModifyRule = Unable to get the email modify rule. - -[EnforcerErr] -SignInFirst = Please sign in first - -[InitErr] -InitScoreFailed = Get init score failed, error: %%w - -[LdapErr] -MultipleAccounts = Multiple accounts with same uid, please check your ldap server -PasswordWrong = Ldap user name or password incorrect -ServerExisted = Ldap server exist - -[LoginErr] -AppDoNotExist = The application: %s does not exist -AppNotEnableSignUp = The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support -AccountDoNotExist = The account does not exist -InvalidUserInformation = Failed to create user, user information is invalid: %s -LoginFirst = Please login first -LoginFail = Failed to login in: %s -NoPermission = You don't have the permission to do this -OldUser = The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s) -ProviderCanNotSignUp = The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up -SessionOutdated = Session outdated, please login again -SignOutFirst = Please sign out first before signing in -UserDoNotExist = The user: %s/%s doesn't exist -UserIsForbidden = The user is forbidden to sign in, please contact the administrator -UnknownAuthentication = Unknown authentication type (not password or provider), form = %s -UnsupportedPasswordType = unsupported password type: %s - -[OrgErr] -DoNotExist = Organization does not exist -Immutable = The %s is immutable. -OnlyAdmin = Only admin can modify the %s. -UnknownModifyRule = Unknown modify rule %s. - -[ParameterErr] -OrgMissingErr = Parameter organization is missing -Missing = Missing parameter -UnknownType = Unknown type -Wrong = Wrong parameter - -[PhoneErr] -CodeNotSent = Code has not been sent yet! -CodeTimeOut = You should verify your code in %d min! -ExistedErr = Phone already exists -EmptyErr = Phone cannot be empty -InvalidReceivers = Invalid phone receivers: %s -NumberInvalid = Phone number is invalid -NoPrefix = %s No phone prefix -PhoneCheckResult = Phone: %s -UnableGetModifyRule = Unable to get the phone modify rule. - -[ProviderErr] -CanNotBeUnlinked = This provider can't be unlinked -CategoryNotSAML = provider %s's category is not SAML -DoNotExist = the provider: %s does not exist -InvalidProvider = Invalid captcha provider. -LinkFirstErr = Please link first -ProviderNotEnabled = The provider: %s is not enabled for the application -ProviderNotSupported = The provider type: %s is not supported -ProviderNotFound = The provider: %s is not found -ProviderNotFoundForCategory = No provider for category: %s is found for application: %s - -[ResourceErr] -NotAuthorized = You are not authorized to access this resource -UserIsNil = User is nil for tag: /"avatar/" -UsernameOrFilePathEmpty = Username or fullFilePath is empty: username = %s, fullFilePath = %s - -[SetPasswordErr] -CanNotContainBlank = New password cannot contain blank space. -LessThanSixCharacters = New password must have at least 6 characters - -[SignUpErr] -DoNotAllowSignUp = The application does not allow to sign up new account -SignOutFirst = Please sign out first before signing up - -[StorageErr] -ObjectKeyNotAllowed = The objectKey: %s is not allowed - -[TokenErr] -EmptyClientID = Empty clientId or clientSecret -InvalidToken = Invalid token -InvalidAppOrWrongClientSecret = Invalid application or wrong clientSecret -InvalidClientId = Invalid client_id -RedirectURIDoNotExist = Redirect URI: %s doesn't exist in the allowed Redirect URI list - -[UserErr] -AffiliationBlankErr = Affiliation cannot be blank -DisplayNameBlankErr = DisplayName cannot be blank -DisplayNameInvalid = DisplayName is not valid real name -DisplayNameCanNotBeEmpty = Display name cannot be empty -DoNotExist = The user: %s doesn't exist -DoNotExistInOrg = The user: %s/%s doesn't exist -DoNotExistSignUp = the user does not exist, please sign up first -FirstNameBlankErr = FirstName cannot be blank -FailToImportUsers = Failed to import users -LastNameBlankErr = LastName cannot be blank -NameLessThanTwoCharacters = Username must have at least 2 characters -NameStartWithADigitErr = Username cannot start with a digit -NameIsEmailErr = Username cannot be an email address -NameCantainWhitSpaceErr = Username cannot contain white spaces -NameExistedErr = Username already exists -NameEmptyErr = Empty username. -NameTooLang = Username is too long (maximum is 39 characters). -NameFormatErr = The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. -PasswordLessThanSixCharacters = Password must have at least 6 characters -InvalidInformation = Invalid information -NoWebAuthnCredential = Found no credentials for this user - diff --git a/i18n/languages/locale_en.ini b/i18n/languages/locale_en.ini deleted file mode 100644 index 9342fbf1..00000000 --- a/i18n/languages/locale_en.ini +++ /dev/null @@ -1,138 +0,0 @@ -[ApplicationErr] -AppNotFound = Application %s not found -AppNotFoundForUserID = No application is found for userId: %s -GrantTypeNotSupport = Grant_type: %s is not supported in this application -HasNoProviders = This application has no providers -HasNoProvidersOfType = This application has no providers of type -InvalidID = Invalid application id - -[AuthErr] -AuthStateWrong = State expected: %s, but got: %s -ChallengeMethodErr = Challenge method should be S256 -CanNotUnlinkUsers = You are not the global admin, you can't unlink other users -CanNotLinkMySelf = You can't unlink yourself, you are not a member of any application -CallWebAuthnSigninBegin = Please call WebAuthnSigninBegin first -NotHuman = Turing test failed. -WrongPasswordManyTimes = You have entered the wrong password too many times, please wait for %d minutes %d seconds and try again -Unauthorized = Unauthorized operation - -[CasErr] -ServiceDoNotMatch = Service %s and %s do not match - -[EmailErr] -ExistedErr = Email already exists -EmptyErr = Email cannot be empty -EmailInvalid = Email is invalid -EmailCheckResult = Email: %s -EmptyParam = Empty parameters for emailForm: %v -InvalidReceivers = Invalid Email receivers: %s -UnableGetModifyRule = Unable to get the email modify rule. - -[EnforcerErr] -SignInFirst = Please sign in first - -[InitErr] -InitScoreFailed = Get init score failed, error: %%w - -[LdapErr] -MultipleAccounts = Multiple accounts with same uid, please check your ldap server -PasswordWrong = Ldap user name or password incorrect -ServerExisted = Ldap server exist - -[LoginErr] -AppDoNotExist = The application: %s does not exist -AppNotEnableSignUp = The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support -AccountDoNotExist = The account does not exist -InvalidUserInformation = Failed to create user, user information is invalid: %s -LoginFirst = Please login first -LoginFail = Failed to login in: %s -NoPermission = You don't have the permission to do this -OldUser = The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s) -ProviderCanNotSignUp = The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up -SessionOutdated = Session outdated, please login again -SignOutFirst = Please sign out first before signing in -UserDoNotExist = The user: %s/%s doesn't exist -UserIsForbidden = The user is forbidden to sign in, please contact the administrator -UnknownAuthentication = Unknown authentication type (not password or provider), form = %s -UnsupportedPasswordType = unsupported password type: %s - -[OrgErr] -DoNotExist = Organization does not exist -Immutable = The %s is immutable. -OnlyAdmin = Only admin can modify the %s. -UnknownModifyRule = Unknown modify rule %s. - -[ParameterErr] -OrgMissingErr = Parameter organization is missing -Missing = Missing parameter -UnknownType = Unknown type -Wrong = Wrong parameter - -[PhoneErr] -CodeNotSent = Code has not been sent yet! -CodeTimeOut = You should verify your code in %d min! -ExistedErr = Phone already exists -EmptyErr = Phone cannot be empty -InvalidReceivers = Invalid phone receivers: %s -NumberInvalid = Phone number is invalid -NoPrefix = %s No phone prefix -PhoneCheckResult = Phone: %s -UnableGetModifyRule = Unable to get the phone modify rule. - -[ProviderErr] -CanNotBeUnlinked = This provider can't be unlinked -CategoryNotSAML = provider %s's category is not SAML -DoNotExist = the provider: %s does not exist -InvalidProvider = Invalid captcha provider. -LinkFirstErr = Please link first -ProviderNotEnabled = The provider: %s is not enabled for the application -ProviderNotSupported = The provider type: %s is not supported -ProviderNotFound = The provider: %s is not found -ProviderNotFoundForCategory = No provider for category: %s is found for application: %s - -[ResourceErr] -NotAuthorized = You are not authorized to access this resource -UserIsNil = User is nil for tag: /"avatar/" -UsernameOrFilePathEmpty = Username or fullFilePath is empty: username = %s, fullFilePath = %s - -[SetPasswordErr] -CanNotContainBlank = New password cannot contain blank space. -LessThanSixCharacters = New password must have at least 6 characters - -[SignUpErr] -DoNotAllowSignUp = The application does not allow to sign up new account -SignOutFirst = Please sign out first before signing up - -[StorageErr] -ObjectKeyNotAllowed = The objectKey: %s is not allowed - -[TokenErr] -EmptyClientID = Empty clientId or clientSecret -InvalidToken = Invalid token -InvalidAppOrWrongClientSecret = Invalid application or wrong clientSecret -InvalidClientId = Invalid client_id -RedirectURIDoNotExist = Redirect URI: %s doesn't exist in the allowed Redirect URI list - -[UserErr] -AffiliationBlankErr = Affiliation cannot be blank -DisplayNameBlankErr = DisplayName cannot be blank -DisplayNameInvalid = DisplayName is not valid real name -DisplayNameCanNotBeEmpty = Display name cannot be empty -DoNotExist = The user: %s doesn't exist -DoNotExistInOrg = The user: %s/%s doesn't exist -DoNotExistSignUp = the user does not exist, please sign up first -FirstNameBlankErr = FirstName cannot be blank -FailToImportUsers = Failed to import users -LastNameBlankErr = LastName cannot be blank -NameLessThanTwoCharacters = Username must have at least 2 characters -NameStartWithADigitErr = Username cannot start with a digit -NameIsEmailErr = Username cannot be an email address -NameCantainWhitSpaceErr = Username cannot contain white spaces -NameExistedErr = Username already exists -NameEmptyErr = Empty username. -NameTooLang = Username is too long (maximum is 39 characters). -NameFormatErr = The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. -PasswordLessThanSixCharacters = Password must have at least 6 characters -InvalidInformation = Invalid information -NoWebAuthnCredential = Found no credentials for this user - diff --git a/i18n/languages/locale_es.ini b/i18n/languages/locale_es.ini deleted file mode 100644 index cc4ea179..00000000 --- a/i18n/languages/locale_es.ini +++ /dev/null @@ -1,138 +0,0 @@ -[ApplicationErr] -AppNotFound = Application %s not found -AppNotFoundForUserID = No application is found for userId: %s -GrantTypeNotSupport = Grant_type: %s is not supported in this application -HasNoProviders = This application has no providers -HasNoProvidersOfType = This application has no providers of type -InvalidID = Invalid application id - -[AuthErr] -AuthStateWrong = State expected: %s, but got: %s -ChallengeMethodErr = Challenge method should be S256 -CanNotUnlinkUsers = You are not the global admin, you can't unlink other users -CanNotLinkMySelf = You can't unlink yourself, you are not a member of any application -CallWebAuthnSigninBegin = Please call WebAuthnSigninBegin first -NotHuman = Turing test failed. -Unauthorized = Unauthorized operation -WrongPasswordManyTimes = WrongPasswordManyTimes - -[CasErr] -ServiceDoNotMatch = Service %s and %s do not match - -[EmailErr] -ExistedErr = Email already exists -EmptyErr = Email cannot be empty -EmailInvalid = Email is invalid -EmailCheckResult = Email: %s -EmptyParam = Empty parameters for emailForm: %v -InvalidReceivers = Invalid Email receivers: %s -UnableGetModifyRule = Unable to get the email modify rule. - -[EnforcerErr] -SignInFirst = Please sign in first - -[InitErr] -InitScoreFailed = Get init score failed, error: %%w - -[LdapErr] -MultipleAccounts = Multiple accounts with same uid, please check your ldap server -PasswordWrong = Ldap user name or password incorrect -ServerExisted = Ldap server exist - -[LoginErr] -AppDoNotExist = The application: %s does not exist -AppNotEnableSignUp = The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support -AccountDoNotExist = The account does not exist -InvalidUserInformation = Failed to create user, user information is invalid: %s -LoginFirst = Please login first -LoginFail = Failed to login in: %s -NoPermission = You don't have the permission to do this -OldUser = The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s) -ProviderCanNotSignUp = The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up -SessionOutdated = Session outdated, please login again -SignOutFirst = Please sign out first before signing in -UserDoNotExist = The user: %s/%s doesn't exist -UserIsForbidden = The user is forbidden to sign in, please contact the administrator -UnknownAuthentication = Unknown authentication type (not password or provider), form = %s -UnsupportedPasswordType = unsupported password type: %s - -[OrgErr] -DoNotExist = Organization does not exist -Immutable = The %s is immutable. -OnlyAdmin = Only admin can modify the %s. -UnknownModifyRule = Unknown modify rule %s. - -[ParameterErr] -OrgMissingErr = Parameter organization is missing -Missing = Missing parameter -UnknownType = Unknown type -Wrong = Wrong parameter - -[PhoneErr] -CodeNotSent = Code has not been sent yet! -CodeTimeOut = You should verify your code in %d min! -ExistedErr = Phone already exists -EmptyErr = Phone cannot be empty -InvalidReceivers = Invalid phone receivers: %s -NumberInvalid = Phone number is invalid -NoPrefix = %s No phone prefix -PhoneCheckResult = Phone: %s -UnableGetModifyRule = Unable to get the phone modify rule. - -[ProviderErr] -CanNotBeUnlinked = This provider can't be unlinked -CategoryNotSAML = provider %s's category is not SAML -DoNotExist = the provider: %s does not exist -InvalidProvider = Invalid captcha provider. -LinkFirstErr = Please link first -ProviderNotEnabled = The provider: %s is not enabled for the application -ProviderNotSupported = The provider type: %s is not supported -ProviderNotFound = The provider: %s is not found -ProviderNotFoundForCategory = No provider for category: %s is found for application: %s - -[ResourceErr] -NotAuthorized = You are not authorized to access this resource -UserIsNil = User is nil for tag: /"avatar/" -UsernameOrFilePathEmpty = Username or fullFilePath is empty: username = %s, fullFilePath = %s - -[SetPasswordErr] -CanNotContainBlank = New password cannot contain blank space. -LessThanSixCharacters = New password must have at least 6 characters - -[SignUpErr] -DoNotAllowSignUp = The application does not allow to sign up new account -SignOutFirst = Please sign out first before signing up - -[StorageErr] -ObjectKeyNotAllowed = The objectKey: %s is not allowed - -[TokenErr] -EmptyClientID = Empty clientId or clientSecret -InvalidToken = Invalid token -InvalidAppOrWrongClientSecret = Invalid application or wrong clientSecret -InvalidClientId = Invalid client_id -RedirectURIDoNotExist = Redirect URI: %s doesn't exist in the allowed Redirect URI list - -[UserErr] -AffiliationBlankErr = Affiliation cannot be blank -DisplayNameBlankErr = DisplayName cannot be blank -DisplayNameInvalid = DisplayName is not valid real name -DisplayNameCanNotBeEmpty = Display name cannot be empty -DoNotExist = The user: %s doesn't exist -DoNotExistInOrg = The user: %s/%s doesn't exist -DoNotExistSignUp = the user does not exist, please sign up first -FirstNameBlankErr = FirstName cannot be blank -FailToImportUsers = Failed to import users -LastNameBlankErr = LastName cannot be blank -NameLessThanTwoCharacters = Username must have at least 2 characters -NameStartWithADigitErr = Username cannot start with a digit -NameIsEmailErr = Username cannot be an email address -NameCantainWhitSpaceErr = Username cannot contain white spaces -NameExistedErr = Username already exists -NameEmptyErr = Empty username. -NameTooLang = Username is too long (maximum is 39 characters). -NameFormatErr = The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. -PasswordLessThanSixCharacters = Password must have at least 6 characters -InvalidInformation = Invalid information -NoWebAuthnCredential = Found no credentials for this user - diff --git a/i18n/languages/locale_fr.ini b/i18n/languages/locale_fr.ini deleted file mode 100644 index cc4ea179..00000000 --- a/i18n/languages/locale_fr.ini +++ /dev/null @@ -1,138 +0,0 @@ -[ApplicationErr] -AppNotFound = Application %s not found -AppNotFoundForUserID = No application is found for userId: %s -GrantTypeNotSupport = Grant_type: %s is not supported in this application -HasNoProviders = This application has no providers -HasNoProvidersOfType = This application has no providers of type -InvalidID = Invalid application id - -[AuthErr] -AuthStateWrong = State expected: %s, but got: %s -ChallengeMethodErr = Challenge method should be S256 -CanNotUnlinkUsers = You are not the global admin, you can't unlink other users -CanNotLinkMySelf = You can't unlink yourself, you are not a member of any application -CallWebAuthnSigninBegin = Please call WebAuthnSigninBegin first -NotHuman = Turing test failed. -Unauthorized = Unauthorized operation -WrongPasswordManyTimes = WrongPasswordManyTimes - -[CasErr] -ServiceDoNotMatch = Service %s and %s do not match - -[EmailErr] -ExistedErr = Email already exists -EmptyErr = Email cannot be empty -EmailInvalid = Email is invalid -EmailCheckResult = Email: %s -EmptyParam = Empty parameters for emailForm: %v -InvalidReceivers = Invalid Email receivers: %s -UnableGetModifyRule = Unable to get the email modify rule. - -[EnforcerErr] -SignInFirst = Please sign in first - -[InitErr] -InitScoreFailed = Get init score failed, error: %%w - -[LdapErr] -MultipleAccounts = Multiple accounts with same uid, please check your ldap server -PasswordWrong = Ldap user name or password incorrect -ServerExisted = Ldap server exist - -[LoginErr] -AppDoNotExist = The application: %s does not exist -AppNotEnableSignUp = The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support -AccountDoNotExist = The account does not exist -InvalidUserInformation = Failed to create user, user information is invalid: %s -LoginFirst = Please login first -LoginFail = Failed to login in: %s -NoPermission = You don't have the permission to do this -OldUser = The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s) -ProviderCanNotSignUp = The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up -SessionOutdated = Session outdated, please login again -SignOutFirst = Please sign out first before signing in -UserDoNotExist = The user: %s/%s doesn't exist -UserIsForbidden = The user is forbidden to sign in, please contact the administrator -UnknownAuthentication = Unknown authentication type (not password or provider), form = %s -UnsupportedPasswordType = unsupported password type: %s - -[OrgErr] -DoNotExist = Organization does not exist -Immutable = The %s is immutable. -OnlyAdmin = Only admin can modify the %s. -UnknownModifyRule = Unknown modify rule %s. - -[ParameterErr] -OrgMissingErr = Parameter organization is missing -Missing = Missing parameter -UnknownType = Unknown type -Wrong = Wrong parameter - -[PhoneErr] -CodeNotSent = Code has not been sent yet! -CodeTimeOut = You should verify your code in %d min! -ExistedErr = Phone already exists -EmptyErr = Phone cannot be empty -InvalidReceivers = Invalid phone receivers: %s -NumberInvalid = Phone number is invalid -NoPrefix = %s No phone prefix -PhoneCheckResult = Phone: %s -UnableGetModifyRule = Unable to get the phone modify rule. - -[ProviderErr] -CanNotBeUnlinked = This provider can't be unlinked -CategoryNotSAML = provider %s's category is not SAML -DoNotExist = the provider: %s does not exist -InvalidProvider = Invalid captcha provider. -LinkFirstErr = Please link first -ProviderNotEnabled = The provider: %s is not enabled for the application -ProviderNotSupported = The provider type: %s is not supported -ProviderNotFound = The provider: %s is not found -ProviderNotFoundForCategory = No provider for category: %s is found for application: %s - -[ResourceErr] -NotAuthorized = You are not authorized to access this resource -UserIsNil = User is nil for tag: /"avatar/" -UsernameOrFilePathEmpty = Username or fullFilePath is empty: username = %s, fullFilePath = %s - -[SetPasswordErr] -CanNotContainBlank = New password cannot contain blank space. -LessThanSixCharacters = New password must have at least 6 characters - -[SignUpErr] -DoNotAllowSignUp = The application does not allow to sign up new account -SignOutFirst = Please sign out first before signing up - -[StorageErr] -ObjectKeyNotAllowed = The objectKey: %s is not allowed - -[TokenErr] -EmptyClientID = Empty clientId or clientSecret -InvalidToken = Invalid token -InvalidAppOrWrongClientSecret = Invalid application or wrong clientSecret -InvalidClientId = Invalid client_id -RedirectURIDoNotExist = Redirect URI: %s doesn't exist in the allowed Redirect URI list - -[UserErr] -AffiliationBlankErr = Affiliation cannot be blank -DisplayNameBlankErr = DisplayName cannot be blank -DisplayNameInvalid = DisplayName is not valid real name -DisplayNameCanNotBeEmpty = Display name cannot be empty -DoNotExist = The user: %s doesn't exist -DoNotExistInOrg = The user: %s/%s doesn't exist -DoNotExistSignUp = the user does not exist, please sign up first -FirstNameBlankErr = FirstName cannot be blank -FailToImportUsers = Failed to import users -LastNameBlankErr = LastName cannot be blank -NameLessThanTwoCharacters = Username must have at least 2 characters -NameStartWithADigitErr = Username cannot start with a digit -NameIsEmailErr = Username cannot be an email address -NameCantainWhitSpaceErr = Username cannot contain white spaces -NameExistedErr = Username already exists -NameEmptyErr = Empty username. -NameTooLang = Username is too long (maximum is 39 characters). -NameFormatErr = The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. -PasswordLessThanSixCharacters = Password must have at least 6 characters -InvalidInformation = Invalid information -NoWebAuthnCredential = Found no credentials for this user - diff --git a/i18n/languages/locale_ja.ini b/i18n/languages/locale_ja.ini deleted file mode 100644 index cc4ea179..00000000 --- a/i18n/languages/locale_ja.ini +++ /dev/null @@ -1,138 +0,0 @@ -[ApplicationErr] -AppNotFound = Application %s not found -AppNotFoundForUserID = No application is found for userId: %s -GrantTypeNotSupport = Grant_type: %s is not supported in this application -HasNoProviders = This application has no providers -HasNoProvidersOfType = This application has no providers of type -InvalidID = Invalid application id - -[AuthErr] -AuthStateWrong = State expected: %s, but got: %s -ChallengeMethodErr = Challenge method should be S256 -CanNotUnlinkUsers = You are not the global admin, you can't unlink other users -CanNotLinkMySelf = You can't unlink yourself, you are not a member of any application -CallWebAuthnSigninBegin = Please call WebAuthnSigninBegin first -NotHuman = Turing test failed. -Unauthorized = Unauthorized operation -WrongPasswordManyTimes = WrongPasswordManyTimes - -[CasErr] -ServiceDoNotMatch = Service %s and %s do not match - -[EmailErr] -ExistedErr = Email already exists -EmptyErr = Email cannot be empty -EmailInvalid = Email is invalid -EmailCheckResult = Email: %s -EmptyParam = Empty parameters for emailForm: %v -InvalidReceivers = Invalid Email receivers: %s -UnableGetModifyRule = Unable to get the email modify rule. - -[EnforcerErr] -SignInFirst = Please sign in first - -[InitErr] -InitScoreFailed = Get init score failed, error: %%w - -[LdapErr] -MultipleAccounts = Multiple accounts with same uid, please check your ldap server -PasswordWrong = Ldap user name or password incorrect -ServerExisted = Ldap server exist - -[LoginErr] -AppDoNotExist = The application: %s does not exist -AppNotEnableSignUp = The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support -AccountDoNotExist = The account does not exist -InvalidUserInformation = Failed to create user, user information is invalid: %s -LoginFirst = Please login first -LoginFail = Failed to login in: %s -NoPermission = You don't have the permission to do this -OldUser = The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s) -ProviderCanNotSignUp = The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up -SessionOutdated = Session outdated, please login again -SignOutFirst = Please sign out first before signing in -UserDoNotExist = The user: %s/%s doesn't exist -UserIsForbidden = The user is forbidden to sign in, please contact the administrator -UnknownAuthentication = Unknown authentication type (not password or provider), form = %s -UnsupportedPasswordType = unsupported password type: %s - -[OrgErr] -DoNotExist = Organization does not exist -Immutable = The %s is immutable. -OnlyAdmin = Only admin can modify the %s. -UnknownModifyRule = Unknown modify rule %s. - -[ParameterErr] -OrgMissingErr = Parameter organization is missing -Missing = Missing parameter -UnknownType = Unknown type -Wrong = Wrong parameter - -[PhoneErr] -CodeNotSent = Code has not been sent yet! -CodeTimeOut = You should verify your code in %d min! -ExistedErr = Phone already exists -EmptyErr = Phone cannot be empty -InvalidReceivers = Invalid phone receivers: %s -NumberInvalid = Phone number is invalid -NoPrefix = %s No phone prefix -PhoneCheckResult = Phone: %s -UnableGetModifyRule = Unable to get the phone modify rule. - -[ProviderErr] -CanNotBeUnlinked = This provider can't be unlinked -CategoryNotSAML = provider %s's category is not SAML -DoNotExist = the provider: %s does not exist -InvalidProvider = Invalid captcha provider. -LinkFirstErr = Please link first -ProviderNotEnabled = The provider: %s is not enabled for the application -ProviderNotSupported = The provider type: %s is not supported -ProviderNotFound = The provider: %s is not found -ProviderNotFoundForCategory = No provider for category: %s is found for application: %s - -[ResourceErr] -NotAuthorized = You are not authorized to access this resource -UserIsNil = User is nil for tag: /"avatar/" -UsernameOrFilePathEmpty = Username or fullFilePath is empty: username = %s, fullFilePath = %s - -[SetPasswordErr] -CanNotContainBlank = New password cannot contain blank space. -LessThanSixCharacters = New password must have at least 6 characters - -[SignUpErr] -DoNotAllowSignUp = The application does not allow to sign up new account -SignOutFirst = Please sign out first before signing up - -[StorageErr] -ObjectKeyNotAllowed = The objectKey: %s is not allowed - -[TokenErr] -EmptyClientID = Empty clientId or clientSecret -InvalidToken = Invalid token -InvalidAppOrWrongClientSecret = Invalid application or wrong clientSecret -InvalidClientId = Invalid client_id -RedirectURIDoNotExist = Redirect URI: %s doesn't exist in the allowed Redirect URI list - -[UserErr] -AffiliationBlankErr = Affiliation cannot be blank -DisplayNameBlankErr = DisplayName cannot be blank -DisplayNameInvalid = DisplayName is not valid real name -DisplayNameCanNotBeEmpty = Display name cannot be empty -DoNotExist = The user: %s doesn't exist -DoNotExistInOrg = The user: %s/%s doesn't exist -DoNotExistSignUp = the user does not exist, please sign up first -FirstNameBlankErr = FirstName cannot be blank -FailToImportUsers = Failed to import users -LastNameBlankErr = LastName cannot be blank -NameLessThanTwoCharacters = Username must have at least 2 characters -NameStartWithADigitErr = Username cannot start with a digit -NameIsEmailErr = Username cannot be an email address -NameCantainWhitSpaceErr = Username cannot contain white spaces -NameExistedErr = Username already exists -NameEmptyErr = Empty username. -NameTooLang = Username is too long (maximum is 39 characters). -NameFormatErr = The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. -PasswordLessThanSixCharacters = Password must have at least 6 characters -InvalidInformation = Invalid information -NoWebAuthnCredential = Found no credentials for this user - diff --git a/i18n/languages/locale_ko.ini b/i18n/languages/locale_ko.ini deleted file mode 100644 index cc4ea179..00000000 --- a/i18n/languages/locale_ko.ini +++ /dev/null @@ -1,138 +0,0 @@ -[ApplicationErr] -AppNotFound = Application %s not found -AppNotFoundForUserID = No application is found for userId: %s -GrantTypeNotSupport = Grant_type: %s is not supported in this application -HasNoProviders = This application has no providers -HasNoProvidersOfType = This application has no providers of type -InvalidID = Invalid application id - -[AuthErr] -AuthStateWrong = State expected: %s, but got: %s -ChallengeMethodErr = Challenge method should be S256 -CanNotUnlinkUsers = You are not the global admin, you can't unlink other users -CanNotLinkMySelf = You can't unlink yourself, you are not a member of any application -CallWebAuthnSigninBegin = Please call WebAuthnSigninBegin first -NotHuman = Turing test failed. -Unauthorized = Unauthorized operation -WrongPasswordManyTimes = WrongPasswordManyTimes - -[CasErr] -ServiceDoNotMatch = Service %s and %s do not match - -[EmailErr] -ExistedErr = Email already exists -EmptyErr = Email cannot be empty -EmailInvalid = Email is invalid -EmailCheckResult = Email: %s -EmptyParam = Empty parameters for emailForm: %v -InvalidReceivers = Invalid Email receivers: %s -UnableGetModifyRule = Unable to get the email modify rule. - -[EnforcerErr] -SignInFirst = Please sign in first - -[InitErr] -InitScoreFailed = Get init score failed, error: %%w - -[LdapErr] -MultipleAccounts = Multiple accounts with same uid, please check your ldap server -PasswordWrong = Ldap user name or password incorrect -ServerExisted = Ldap server exist - -[LoginErr] -AppDoNotExist = The application: %s does not exist -AppNotEnableSignUp = The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support -AccountDoNotExist = The account does not exist -InvalidUserInformation = Failed to create user, user information is invalid: %s -LoginFirst = Please login first -LoginFail = Failed to login in: %s -NoPermission = You don't have the permission to do this -OldUser = The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s) -ProviderCanNotSignUp = The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up -SessionOutdated = Session outdated, please login again -SignOutFirst = Please sign out first before signing in -UserDoNotExist = The user: %s/%s doesn't exist -UserIsForbidden = The user is forbidden to sign in, please contact the administrator -UnknownAuthentication = Unknown authentication type (not password or provider), form = %s -UnsupportedPasswordType = unsupported password type: %s - -[OrgErr] -DoNotExist = Organization does not exist -Immutable = The %s is immutable. -OnlyAdmin = Only admin can modify the %s. -UnknownModifyRule = Unknown modify rule %s. - -[ParameterErr] -OrgMissingErr = Parameter organization is missing -Missing = Missing parameter -UnknownType = Unknown type -Wrong = Wrong parameter - -[PhoneErr] -CodeNotSent = Code has not been sent yet! -CodeTimeOut = You should verify your code in %d min! -ExistedErr = Phone already exists -EmptyErr = Phone cannot be empty -InvalidReceivers = Invalid phone receivers: %s -NumberInvalid = Phone number is invalid -NoPrefix = %s No phone prefix -PhoneCheckResult = Phone: %s -UnableGetModifyRule = Unable to get the phone modify rule. - -[ProviderErr] -CanNotBeUnlinked = This provider can't be unlinked -CategoryNotSAML = provider %s's category is not SAML -DoNotExist = the provider: %s does not exist -InvalidProvider = Invalid captcha provider. -LinkFirstErr = Please link first -ProviderNotEnabled = The provider: %s is not enabled for the application -ProviderNotSupported = The provider type: %s is not supported -ProviderNotFound = The provider: %s is not found -ProviderNotFoundForCategory = No provider for category: %s is found for application: %s - -[ResourceErr] -NotAuthorized = You are not authorized to access this resource -UserIsNil = User is nil for tag: /"avatar/" -UsernameOrFilePathEmpty = Username or fullFilePath is empty: username = %s, fullFilePath = %s - -[SetPasswordErr] -CanNotContainBlank = New password cannot contain blank space. -LessThanSixCharacters = New password must have at least 6 characters - -[SignUpErr] -DoNotAllowSignUp = The application does not allow to sign up new account -SignOutFirst = Please sign out first before signing up - -[StorageErr] -ObjectKeyNotAllowed = The objectKey: %s is not allowed - -[TokenErr] -EmptyClientID = Empty clientId or clientSecret -InvalidToken = Invalid token -InvalidAppOrWrongClientSecret = Invalid application or wrong clientSecret -InvalidClientId = Invalid client_id -RedirectURIDoNotExist = Redirect URI: %s doesn't exist in the allowed Redirect URI list - -[UserErr] -AffiliationBlankErr = Affiliation cannot be blank -DisplayNameBlankErr = DisplayName cannot be blank -DisplayNameInvalid = DisplayName is not valid real name -DisplayNameCanNotBeEmpty = Display name cannot be empty -DoNotExist = The user: %s doesn't exist -DoNotExistInOrg = The user: %s/%s doesn't exist -DoNotExistSignUp = the user does not exist, please sign up first -FirstNameBlankErr = FirstName cannot be blank -FailToImportUsers = Failed to import users -LastNameBlankErr = LastName cannot be blank -NameLessThanTwoCharacters = Username must have at least 2 characters -NameStartWithADigitErr = Username cannot start with a digit -NameIsEmailErr = Username cannot be an email address -NameCantainWhitSpaceErr = Username cannot contain white spaces -NameExistedErr = Username already exists -NameEmptyErr = Empty username. -NameTooLang = Username is too long (maximum is 39 characters). -NameFormatErr = The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. -PasswordLessThanSixCharacters = Password must have at least 6 characters -InvalidInformation = Invalid information -NoWebAuthnCredential = Found no credentials for this user - diff --git a/i18n/languages/locale_ru.ini b/i18n/languages/locale_ru.ini deleted file mode 100644 index cc4ea179..00000000 --- a/i18n/languages/locale_ru.ini +++ /dev/null @@ -1,138 +0,0 @@ -[ApplicationErr] -AppNotFound = Application %s not found -AppNotFoundForUserID = No application is found for userId: %s -GrantTypeNotSupport = Grant_type: %s is not supported in this application -HasNoProviders = This application has no providers -HasNoProvidersOfType = This application has no providers of type -InvalidID = Invalid application id - -[AuthErr] -AuthStateWrong = State expected: %s, but got: %s -ChallengeMethodErr = Challenge method should be S256 -CanNotUnlinkUsers = You are not the global admin, you can't unlink other users -CanNotLinkMySelf = You can't unlink yourself, you are not a member of any application -CallWebAuthnSigninBegin = Please call WebAuthnSigninBegin first -NotHuman = Turing test failed. -Unauthorized = Unauthorized operation -WrongPasswordManyTimes = WrongPasswordManyTimes - -[CasErr] -ServiceDoNotMatch = Service %s and %s do not match - -[EmailErr] -ExistedErr = Email already exists -EmptyErr = Email cannot be empty -EmailInvalid = Email is invalid -EmailCheckResult = Email: %s -EmptyParam = Empty parameters for emailForm: %v -InvalidReceivers = Invalid Email receivers: %s -UnableGetModifyRule = Unable to get the email modify rule. - -[EnforcerErr] -SignInFirst = Please sign in first - -[InitErr] -InitScoreFailed = Get init score failed, error: %%w - -[LdapErr] -MultipleAccounts = Multiple accounts with same uid, please check your ldap server -PasswordWrong = Ldap user name or password incorrect -ServerExisted = Ldap server exist - -[LoginErr] -AppDoNotExist = The application: %s does not exist -AppNotEnableSignUp = The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support -AccountDoNotExist = The account does not exist -InvalidUserInformation = Failed to create user, user information is invalid: %s -LoginFirst = Please login first -LoginFail = Failed to login in: %s -NoPermission = You don't have the permission to do this -OldUser = The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s) -ProviderCanNotSignUp = The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up -SessionOutdated = Session outdated, please login again -SignOutFirst = Please sign out first before signing in -UserDoNotExist = The user: %s/%s doesn't exist -UserIsForbidden = The user is forbidden to sign in, please contact the administrator -UnknownAuthentication = Unknown authentication type (not password or provider), form = %s -UnsupportedPasswordType = unsupported password type: %s - -[OrgErr] -DoNotExist = Organization does not exist -Immutable = The %s is immutable. -OnlyAdmin = Only admin can modify the %s. -UnknownModifyRule = Unknown modify rule %s. - -[ParameterErr] -OrgMissingErr = Parameter organization is missing -Missing = Missing parameter -UnknownType = Unknown type -Wrong = Wrong parameter - -[PhoneErr] -CodeNotSent = Code has not been sent yet! -CodeTimeOut = You should verify your code in %d min! -ExistedErr = Phone already exists -EmptyErr = Phone cannot be empty -InvalidReceivers = Invalid phone receivers: %s -NumberInvalid = Phone number is invalid -NoPrefix = %s No phone prefix -PhoneCheckResult = Phone: %s -UnableGetModifyRule = Unable to get the phone modify rule. - -[ProviderErr] -CanNotBeUnlinked = This provider can't be unlinked -CategoryNotSAML = provider %s's category is not SAML -DoNotExist = the provider: %s does not exist -InvalidProvider = Invalid captcha provider. -LinkFirstErr = Please link first -ProviderNotEnabled = The provider: %s is not enabled for the application -ProviderNotSupported = The provider type: %s is not supported -ProviderNotFound = The provider: %s is not found -ProviderNotFoundForCategory = No provider for category: %s is found for application: %s - -[ResourceErr] -NotAuthorized = You are not authorized to access this resource -UserIsNil = User is nil for tag: /"avatar/" -UsernameOrFilePathEmpty = Username or fullFilePath is empty: username = %s, fullFilePath = %s - -[SetPasswordErr] -CanNotContainBlank = New password cannot contain blank space. -LessThanSixCharacters = New password must have at least 6 characters - -[SignUpErr] -DoNotAllowSignUp = The application does not allow to sign up new account -SignOutFirst = Please sign out first before signing up - -[StorageErr] -ObjectKeyNotAllowed = The objectKey: %s is not allowed - -[TokenErr] -EmptyClientID = Empty clientId or clientSecret -InvalidToken = Invalid token -InvalidAppOrWrongClientSecret = Invalid application or wrong clientSecret -InvalidClientId = Invalid client_id -RedirectURIDoNotExist = Redirect URI: %s doesn't exist in the allowed Redirect URI list - -[UserErr] -AffiliationBlankErr = Affiliation cannot be blank -DisplayNameBlankErr = DisplayName cannot be blank -DisplayNameInvalid = DisplayName is not valid real name -DisplayNameCanNotBeEmpty = Display name cannot be empty -DoNotExist = The user: %s doesn't exist -DoNotExistInOrg = The user: %s/%s doesn't exist -DoNotExistSignUp = the user does not exist, please sign up first -FirstNameBlankErr = FirstName cannot be blank -FailToImportUsers = Failed to import users -LastNameBlankErr = LastName cannot be blank -NameLessThanTwoCharacters = Username must have at least 2 characters -NameStartWithADigitErr = Username cannot start with a digit -NameIsEmailErr = Username cannot be an email address -NameCantainWhitSpaceErr = Username cannot contain white spaces -NameExistedErr = Username already exists -NameEmptyErr = Empty username. -NameTooLang = Username is too long (maximum is 39 characters). -NameFormatErr = The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. -PasswordLessThanSixCharacters = Password must have at least 6 characters -InvalidInformation = Invalid information -NoWebAuthnCredential = Found no credentials for this user - diff --git a/i18n/languages/locale_zh.ini b/i18n/languages/locale_zh.ini deleted file mode 100644 index a025e0b8..00000000 --- a/i18n/languages/locale_zh.ini +++ /dev/null @@ -1,138 +0,0 @@ -[ApplicationErr] -AppNotFound = 应用 %s 未找到 -AppNotFoundForUserID = 找不到该用户的应用程序 %s -GrantTypeNotSupport = 此应用中不支持此授权类型 -HasNoProviders = 该应用无提供商 -HasNoProvidersOfType = 应用没有该类型的提供商 -InvalidID = 无效的Application ID - -[AuthErr] -AuthStateWrong = 期望状态位: %s, 实际状态为: %s -ChallengeMethodErr = Challenge 方法应该为 S256 -CanNotUnlinkUsers = 您不是全局管理员,无法取消链接其他用户 -CanNotLinkMySelf = 您无法取消链接,您不是任何应用程序的成员 -CallWebAuthnSigninBegin = 请先调用WebAuthnSigninBegin -NotHuman = 真人验证失败 -Unauthorized = 未授权的操作 -WrongPasswordManyTimes = 输入密码错误次数已达上限,请在 %d 分 %d 秒后重试 - -[CasErr] -ServiceDoNotMatch = 服务 %s 与 %s 不匹配 - -[EmailErr] -ExistedErr = 该邮箱已存在 -EmptyErr = 邮箱不可为空 -EmailInvalid = 无效邮箱 -EmailCheckResult = Email: %s -EmptyParam = 邮件参数为空: %v -InvalidReceivers = 无效的邮箱接收者: %s -UnableGetModifyRule = 无法得到Email修改规则 - -[EnforcerErr] -SignInFirst = 请先登录 - -[InitErr] -InitScoreFailed = 初始化分数失败: %w - -[LdapErr] -MultipleAccounts = 多个帐户具有相同的uid,请检查您的 ldap 服务器 -PasswordWrong = Ldap密码错误 -ServerExisted = Ldap服务器已存在 - -[LoginErr] -AppDoNotExist = 应用不存在: %s -AppNotEnableSignUp = 提供商账户: %s 与用户名: %s (%s) 不存在且 不允许注册新账户, 请联系IT支持 -AccountDoNotExist = 账户不存在 -InvalidUserInformation = 创建用户失败,用户信息无效: %%s -LoginFirst = 请先登录 -LoginFail = 无法登录: %s -NoPermission = 您没有权限执行此操作 -OldUser = 提供商账户: %s 与用户名: %s (%s) 已经与其他账户绑定: %s (%s) -ProviderCanNotSignUp = 提供商账户: %s 与用户名: %s (%s) 不存在且 不允许通过 %s 注册新账户, 请使用其他方式注册 -SignOutFirst = 请在登录前登出 -SessionOutdated = Session已过期,请重新登陆 -UserDoNotExist = 用户不存在: %s/%s -UserIsForbidden = 该用户被禁止登陆,请联系管理员 -UnknownAuthentication = 未知的认证类型 (非密码或提供商认证), form = %s -UnsupportedPasswordType = 不支持此密码类型 - -[OrgErr] -DoNotExist = 组织不存在 -Immutable = %s是不可变的 -OnlyAdmin = 只有管理员用户有此权限 -UnknownModifyRule = 未知的修改规则 - -[ParameterErr] -Missing = 参数丢失 -OrgMissingErr = Organization参数丢失 -UnknownType = 未知类型 -Wrong = 参数错误 - -[PhoneErr] -CodeNotSent = 验证码还未发送 -CodeTimeOut = 验证码过期 -ExistedErr = 该电话已存在 -EmptyErr = 电话不可为空 -InvalidReceivers = 无效的电话接收者: %s -NumberInvalid = 无效电话 -PhoneCheckResult = 电话: %s -UnableGetModifyRule = 无法得到电话修改规则 -NoPrefix = %s 无此电话前缀 - -[ProviderErr] -CanNotBeUnlinked = 该提供商不可被链接 -InvalidProvider = 无效的验证码提供商 -LinkFirstErr = 请先绑定 -ProviderNotEnabled = 提供商: %s 未被启用 -ProviderNotSupported = 不支持该类型的提供商: %s -ProviderNotFound = 该提供商未找到: %s -ProviderNotFoundForCategory = 该类型的提供商: %s 在应用中未找到: %s -DoNotExist = 提供商: %s 不存在 -CategoryNotSAML = 提供商 %s类型不是SAML - -[ResourceErr] -NotAuthorized = 您无权获取此资源 -UserIsNil = 用户头像标签为空 -UsernameOrFilePathEmpty = username或FilePath为空: username = %s, fullFilePath = %s - -[SetPasswordErr] -CanNotContainBlank = 新密码不可以包含空客 -LessThanSixCharacters = 新密码至少为6位 - -[SignUpErr] -DoNotAllowSignUp = 该应用不允许注册新账户 -SignOutFirst = 请在登陆前登出 - -[TokenErr] -EmptyClientID = clientId或clientSecret为空 -InvalidAppOrWrongClientSecret = 无效应用或错误的clientSecret -InvalidToken = 无效token -InvalidClientId = 无效的ClientId -RedirectURIDoNotExist = 重定向 URI:%s 在可列表中未找到 - -[UserErr] -AffiliationBlankErr = 联系方式不可为空 -DisplayNameBlankErr = 展示名称不可为空 -DisplayNameInvalid = 展示名称无效 -DisplayNameCanNotBeEmpty = 展示名称不可为空 -DoNotExist = 用户不存在: %s -DoNotExistInOrg = 用户不存在: %s/%s -FirstNameBlankErr = 名不可以为空 -FailToImportUsers = 导入用户失败 -LastNameBlankErr = 姓不可以为空 -NameLessThanTwoCharacters = 用户名至少要有2个字符 -NameStartWithADigitErr = 用户名禁止使用数字作为第一个字符 -NameIsEmailErr = 用户名不可以是邮箱地址 -NameCantainWhitSpaceErr = 用户名不可以包含空格 -NameExistedErr = 用户名已存在 -NameEmptyErr = 用户名不可为空 -NameTooLang = 用户名过长(最大长度为39个字符) -NameFormatErr = 用户名只能包含字母数字字符、下划线或连字符,不能有连续的连字符或下划线,也不能以连字符或下划线开头或结尾 -PasswordLessThanSixCharacters = 密码至少为6字符 -DoNotExistSignUp = 用户不存在,请先注册 -InvalidInformation = 无效信息 -NoWebAuthnCredential = 该用户没有WebAuthn凭据 - -[StorageErr] -ObjectKeyNotAllowed = object key :%s 不被允许 - diff --git a/i18n/locales/de/data.json b/i18n/locales/de/data.json new file mode 100644 index 00000000..2c0a9150 --- /dev/null +++ b/i18n/locales/de/data.json @@ -0,0 +1,172 @@ +{ + "account": { + "Email: %s": "Email: %s", + "Get init score failed, error: %w": "Get init score failed, error: %w", + "Invalid information": "Invalid information", + "Phone: %s": "Phone: %s", + "Please sign out first before signing up": "Please sign out first before signing up", + "The application does not allow to sign up new account": "The application does not allow to sign up new account" + }, + "application": { + "Parameter organization is missing": "Parameter organization is missing", + "The user: %s doesn't exist": "The user: %s doesn't exist" + }, + "auth": { + "%s No phone prefix": "%s No phone prefix", + "Challenge method should be S256": "Challenge method should be S256", + "Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s", + "Failed to login in: %s": "Failed to login in: %s", + "Get init score failed, error: %w": "Get init score failed, error: %w", + "Invalid token": "Invalid token", + "Please sign out first before signing in": "Please sign out first before signing in", + "State expected: %s, but got: %s": "State expected: %s, but got: %s", + "The account does not exist": "The account does not exist", + "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up": "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up", + "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support": "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support", + "The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s)": "The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s)", + "The application: %s does not exist": "The application: %s does not exist", + "The provider type: %s is not supported": "The provider type: %s is not supported", + "The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application", + "The user is forbidden to sign in, please contact the administrator": "The user is forbidden to sign in, please contact the administrator", + "The user: %s/%s doesn't exist": "The user: %s/%s doesn't exist", + "Turing test failed.": "Turing test failed.", + "Unauthorized operation": "Unauthorized operation", + "Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s" + }, + "cas": { + "Service %s and %s do not match": "Service %s and %s do not match" + }, + "check": { + "Affiliation cannot be blank": "Affiliation cannot be blank", + "DisplayName cannot be blank": "DisplayName cannot be blank", + "DisplayName is not valid real name": "DisplayName is not valid real name", + "Email already exists": "Email already exists", + "Email cannot be empty": "Email cannot be empty", + "Email is invalid": "Email is invalid", + "Empty username.": "Empty username.", + "FirstName cannot be blank": "FirstName cannot be blank", + "LastName cannot be blank": "LastName cannot be blank", + "Ldap user name or password incorrect": "Ldap user name or password incorrect", + "Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server", + "Organization does not exist": "Organization does not exist", + "Password must have at least 6 characters": "Password must have at least 6 characters", + "Phone already exists": "Phone already exists", + "Phone cannot be empty": "Phone cannot be empty", + "Phone number is invalid": "Phone number is invalid", + "Please login first": "Please login first", + "Session outdated, please login again": "Session outdated, please login again", + "The user doesn't exist": "The user doesn't exist", + "The user is forbidden to sign in, please contact the administrator": "The user is forbidden to sign in, please contact the administrator", + "The user: %s doesn't exist": "The user: %s doesn't exist", + "The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline.": "The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline.", + "Username already exists": "Username already exists", + "Username cannot be an email address": "Username cannot be an email address", + "Username cannot contain white spaces": "Username cannot contain white spaces", + "Username cannot start with a digit": "Username cannot start with a digit", + "Username is too long (maximum is 39 characters).": "Username is too long (maximum is 39 characters).", + "Username must have at least 2 characters": "Username must have at least 2 characters", + "You don't have the permission to do this": "You don't have the permission to do this", + "You have entered the wrong password too many times, please wait for %d minutes %d seconds and try again": "You have entered the wrong password too many times, please wait for %d minutes %d seconds and try again", + "unsupported password type: %s": "unsupported password type: %s" + }, + "check_util": { + "You have entered the wrong password too many times, please wait for %d minutes and try again": "You have entered the wrong password too many times, please wait for %d minutes and try again", + "password is incorrect, you have %d remaining chances": "password is incorrect, you have %d remaining chances" + }, + "enforcer": { + "Please sign in first": "Please sign in first" + }, + "ldap": { + "Ldap server exist": "Ldap server exist", + "Missing parameter": "Missing parameter" + }, + "link": { + "Please link first": "Please link first", + "This application has no providers": "This application has no providers", + "This application has no providers of type": "This application has no providers of type", + "This provider can't be unlinked": "This provider can't be unlinked", + "You are not the global admin, you can't unlink other users": "You are not the global admin, you can't unlink other users", + "You can't unlink yourself, you are not a member of any application": "You can't unlink yourself, you are not a member of any application" + }, + "organization": { + "Only admin can modify the %s.": "Only admin can modify the %s.", + "The %s is immutable.": "The %s is immutable.", + "Unknown modify rule %s.": "Unknown modify rule %s." + }, + "product": { + "Please login first": "Please login first", + "The user: %s doesn't exist": "The user: %s doesn't exist" + }, + "provider": { + "Invalid application id": "Invalid application id", + "the provider: %s does not exist": "the provider: %s does not exist" + }, + "resource": { + "User is nil for tag: avatar": "User is nil for tag: avatar", + "Username or fullFilePath is empty: username = %s, fullFilePath = %s": "Username or fullFilePath is empty: username = %s, fullFilePath = %s" + }, + "saml": { + "Application %s not found": "Application %s not found" + }, + "saml_sp": { + "provider %s's category is not SAML": "provider %s's category is not SAML" + }, + "service": { + "Empty parameters for emailForm: %v": "Empty parameters for emailForm: %v", + "Invalid Email receivers: %s": "Invalid Email receivers: %s", + "Invalid phone receivers: %s": "Invalid phone receivers: %s" + }, + "storage": { + "The objectKey: %s is not allowed": "The objectKey: %s is not allowed", + "The provider type: %s is not supported": "The provider type: %s is not supported" + }, + "system_info": { + "You are not authorized to access this resource": "You are not authorized to access this resource" + }, + "token": { + "Challenge method should be S256": "Challenge method should be S256", + "Empty clientId or clientSecret": "Empty clientId or clientSecret", + "Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application", + "Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret", + "Invalid client_id": "Invalid client_id", + "Redirect URI: %s doesn't exist in the allowed Redirect URI list": "Redirect URI: %s doesn't exist in the allowed Redirect URI list" + }, + "user": { + "Display name cannot be empty": "Display name cannot be empty", + "New password cannot contain blank space.": "New password cannot contain blank space.", + "New password must have at least 6 characters": "New password must have at least 6 characters", + "The user: %s/%s doesn't exist": "The user: %s/%s doesn't exist" + }, + "user_upload": { + "Failed to import users": "Failed to import users" + }, + "util": { + "No application is found for userId: %s": "No application is found for userId: %s", + "No provider for category: %s is found for application: %s": "No provider for category: %s is found for application: %s", + "Please login first": "Please login first", + "The provider: %s is not found": "The provider: %s is not found", + "The user: %s doesn't exist": "The user: %s doesn't exist" + }, + "verification": { + "Code has not been sent yet!": "Code has not been sent yet!", + "Email is invalid": "Email is invalid", + "Invalid captcha provider.": "Invalid captcha provider.", + "Missing parameter": "Missing parameter", + "Organization does not exist": "Organization does not exist", + "Phone number is invalid": "Phone number is invalid", + "Please login first": "Please login first", + "Turing test failed.": "Turing test failed.", + "Unable to get the email modify rule.": "Unable to get the email modify rule.", + "Unable to get the phone modify rule.": "Unable to get the phone modify rule.", + "Unknown type": "Unknown type", + "Wrong parameter": "Wrong parameter", + "You should verify your code in %d min!": "You should verify your code in %d min!", + "the user does not exist, please sign up first": "the user does not exist, please sign up first" + }, + "webauthn": { + "Found no credentials for this user": "Found no credentials for this user", + "Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first", + "Please login first": "Please login first", + "The user: %s/%s doesn't exist": "The user: %s/%s doesn't exist" + } +} diff --git a/i18n/locales/en/data.json b/i18n/locales/en/data.json new file mode 100644 index 00000000..2c0a9150 --- /dev/null +++ b/i18n/locales/en/data.json @@ -0,0 +1,172 @@ +{ + "account": { + "Email: %s": "Email: %s", + "Get init score failed, error: %w": "Get init score failed, error: %w", + "Invalid information": "Invalid information", + "Phone: %s": "Phone: %s", + "Please sign out first before signing up": "Please sign out first before signing up", + "The application does not allow to sign up new account": "The application does not allow to sign up new account" + }, + "application": { + "Parameter organization is missing": "Parameter organization is missing", + "The user: %s doesn't exist": "The user: %s doesn't exist" + }, + "auth": { + "%s No phone prefix": "%s No phone prefix", + "Challenge method should be S256": "Challenge method should be S256", + "Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s", + "Failed to login in: %s": "Failed to login in: %s", + "Get init score failed, error: %w": "Get init score failed, error: %w", + "Invalid token": "Invalid token", + "Please sign out first before signing in": "Please sign out first before signing in", + "State expected: %s, but got: %s": "State expected: %s, but got: %s", + "The account does not exist": "The account does not exist", + "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up": "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up", + "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support": "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support", + "The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s)": "The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s)", + "The application: %s does not exist": "The application: %s does not exist", + "The provider type: %s is not supported": "The provider type: %s is not supported", + "The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application", + "The user is forbidden to sign in, please contact the administrator": "The user is forbidden to sign in, please contact the administrator", + "The user: %s/%s doesn't exist": "The user: %s/%s doesn't exist", + "Turing test failed.": "Turing test failed.", + "Unauthorized operation": "Unauthorized operation", + "Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s" + }, + "cas": { + "Service %s and %s do not match": "Service %s and %s do not match" + }, + "check": { + "Affiliation cannot be blank": "Affiliation cannot be blank", + "DisplayName cannot be blank": "DisplayName cannot be blank", + "DisplayName is not valid real name": "DisplayName is not valid real name", + "Email already exists": "Email already exists", + "Email cannot be empty": "Email cannot be empty", + "Email is invalid": "Email is invalid", + "Empty username.": "Empty username.", + "FirstName cannot be blank": "FirstName cannot be blank", + "LastName cannot be blank": "LastName cannot be blank", + "Ldap user name or password incorrect": "Ldap user name or password incorrect", + "Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server", + "Organization does not exist": "Organization does not exist", + "Password must have at least 6 characters": "Password must have at least 6 characters", + "Phone already exists": "Phone already exists", + "Phone cannot be empty": "Phone cannot be empty", + "Phone number is invalid": "Phone number is invalid", + "Please login first": "Please login first", + "Session outdated, please login again": "Session outdated, please login again", + "The user doesn't exist": "The user doesn't exist", + "The user is forbidden to sign in, please contact the administrator": "The user is forbidden to sign in, please contact the administrator", + "The user: %s doesn't exist": "The user: %s doesn't exist", + "The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline.": "The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline.", + "Username already exists": "Username already exists", + "Username cannot be an email address": "Username cannot be an email address", + "Username cannot contain white spaces": "Username cannot contain white spaces", + "Username cannot start with a digit": "Username cannot start with a digit", + "Username is too long (maximum is 39 characters).": "Username is too long (maximum is 39 characters).", + "Username must have at least 2 characters": "Username must have at least 2 characters", + "You don't have the permission to do this": "You don't have the permission to do this", + "You have entered the wrong password too many times, please wait for %d minutes %d seconds and try again": "You have entered the wrong password too many times, please wait for %d minutes %d seconds and try again", + "unsupported password type: %s": "unsupported password type: %s" + }, + "check_util": { + "You have entered the wrong password too many times, please wait for %d minutes and try again": "You have entered the wrong password too many times, please wait for %d minutes and try again", + "password is incorrect, you have %d remaining chances": "password is incorrect, you have %d remaining chances" + }, + "enforcer": { + "Please sign in first": "Please sign in first" + }, + "ldap": { + "Ldap server exist": "Ldap server exist", + "Missing parameter": "Missing parameter" + }, + "link": { + "Please link first": "Please link first", + "This application has no providers": "This application has no providers", + "This application has no providers of type": "This application has no providers of type", + "This provider can't be unlinked": "This provider can't be unlinked", + "You are not the global admin, you can't unlink other users": "You are not the global admin, you can't unlink other users", + "You can't unlink yourself, you are not a member of any application": "You can't unlink yourself, you are not a member of any application" + }, + "organization": { + "Only admin can modify the %s.": "Only admin can modify the %s.", + "The %s is immutable.": "The %s is immutable.", + "Unknown modify rule %s.": "Unknown modify rule %s." + }, + "product": { + "Please login first": "Please login first", + "The user: %s doesn't exist": "The user: %s doesn't exist" + }, + "provider": { + "Invalid application id": "Invalid application id", + "the provider: %s does not exist": "the provider: %s does not exist" + }, + "resource": { + "User is nil for tag: avatar": "User is nil for tag: avatar", + "Username or fullFilePath is empty: username = %s, fullFilePath = %s": "Username or fullFilePath is empty: username = %s, fullFilePath = %s" + }, + "saml": { + "Application %s not found": "Application %s not found" + }, + "saml_sp": { + "provider %s's category is not SAML": "provider %s's category is not SAML" + }, + "service": { + "Empty parameters for emailForm: %v": "Empty parameters for emailForm: %v", + "Invalid Email receivers: %s": "Invalid Email receivers: %s", + "Invalid phone receivers: %s": "Invalid phone receivers: %s" + }, + "storage": { + "The objectKey: %s is not allowed": "The objectKey: %s is not allowed", + "The provider type: %s is not supported": "The provider type: %s is not supported" + }, + "system_info": { + "You are not authorized to access this resource": "You are not authorized to access this resource" + }, + "token": { + "Challenge method should be S256": "Challenge method should be S256", + "Empty clientId or clientSecret": "Empty clientId or clientSecret", + "Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application", + "Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret", + "Invalid client_id": "Invalid client_id", + "Redirect URI: %s doesn't exist in the allowed Redirect URI list": "Redirect URI: %s doesn't exist in the allowed Redirect URI list" + }, + "user": { + "Display name cannot be empty": "Display name cannot be empty", + "New password cannot contain blank space.": "New password cannot contain blank space.", + "New password must have at least 6 characters": "New password must have at least 6 characters", + "The user: %s/%s doesn't exist": "The user: %s/%s doesn't exist" + }, + "user_upload": { + "Failed to import users": "Failed to import users" + }, + "util": { + "No application is found for userId: %s": "No application is found for userId: %s", + "No provider for category: %s is found for application: %s": "No provider for category: %s is found for application: %s", + "Please login first": "Please login first", + "The provider: %s is not found": "The provider: %s is not found", + "The user: %s doesn't exist": "The user: %s doesn't exist" + }, + "verification": { + "Code has not been sent yet!": "Code has not been sent yet!", + "Email is invalid": "Email is invalid", + "Invalid captcha provider.": "Invalid captcha provider.", + "Missing parameter": "Missing parameter", + "Organization does not exist": "Organization does not exist", + "Phone number is invalid": "Phone number is invalid", + "Please login first": "Please login first", + "Turing test failed.": "Turing test failed.", + "Unable to get the email modify rule.": "Unable to get the email modify rule.", + "Unable to get the phone modify rule.": "Unable to get the phone modify rule.", + "Unknown type": "Unknown type", + "Wrong parameter": "Wrong parameter", + "You should verify your code in %d min!": "You should verify your code in %d min!", + "the user does not exist, please sign up first": "the user does not exist, please sign up first" + }, + "webauthn": { + "Found no credentials for this user": "Found no credentials for this user", + "Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first", + "Please login first": "Please login first", + "The user: %s/%s doesn't exist": "The user: %s/%s doesn't exist" + } +} diff --git a/i18n/locales/es/data.json b/i18n/locales/es/data.json new file mode 100644 index 00000000..2c0a9150 --- /dev/null +++ b/i18n/locales/es/data.json @@ -0,0 +1,172 @@ +{ + "account": { + "Email: %s": "Email: %s", + "Get init score failed, error: %w": "Get init score failed, error: %w", + "Invalid information": "Invalid information", + "Phone: %s": "Phone: %s", + "Please sign out first before signing up": "Please sign out first before signing up", + "The application does not allow to sign up new account": "The application does not allow to sign up new account" + }, + "application": { + "Parameter organization is missing": "Parameter organization is missing", + "The user: %s doesn't exist": "The user: %s doesn't exist" + }, + "auth": { + "%s No phone prefix": "%s No phone prefix", + "Challenge method should be S256": "Challenge method should be S256", + "Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s", + "Failed to login in: %s": "Failed to login in: %s", + "Get init score failed, error: %w": "Get init score failed, error: %w", + "Invalid token": "Invalid token", + "Please sign out first before signing in": "Please sign out first before signing in", + "State expected: %s, but got: %s": "State expected: %s, but got: %s", + "The account does not exist": "The account does not exist", + "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up": "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up", + "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support": "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support", + "The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s)": "The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s)", + "The application: %s does not exist": "The application: %s does not exist", + "The provider type: %s is not supported": "The provider type: %s is not supported", + "The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application", + "The user is forbidden to sign in, please contact the administrator": "The user is forbidden to sign in, please contact the administrator", + "The user: %s/%s doesn't exist": "The user: %s/%s doesn't exist", + "Turing test failed.": "Turing test failed.", + "Unauthorized operation": "Unauthorized operation", + "Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s" + }, + "cas": { + "Service %s and %s do not match": "Service %s and %s do not match" + }, + "check": { + "Affiliation cannot be blank": "Affiliation cannot be blank", + "DisplayName cannot be blank": "DisplayName cannot be blank", + "DisplayName is not valid real name": "DisplayName is not valid real name", + "Email already exists": "Email already exists", + "Email cannot be empty": "Email cannot be empty", + "Email is invalid": "Email is invalid", + "Empty username.": "Empty username.", + "FirstName cannot be blank": "FirstName cannot be blank", + "LastName cannot be blank": "LastName cannot be blank", + "Ldap user name or password incorrect": "Ldap user name or password incorrect", + "Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server", + "Organization does not exist": "Organization does not exist", + "Password must have at least 6 characters": "Password must have at least 6 characters", + "Phone already exists": "Phone already exists", + "Phone cannot be empty": "Phone cannot be empty", + "Phone number is invalid": "Phone number is invalid", + "Please login first": "Please login first", + "Session outdated, please login again": "Session outdated, please login again", + "The user doesn't exist": "The user doesn't exist", + "The user is forbidden to sign in, please contact the administrator": "The user is forbidden to sign in, please contact the administrator", + "The user: %s doesn't exist": "The user: %s doesn't exist", + "The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline.": "The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline.", + "Username already exists": "Username already exists", + "Username cannot be an email address": "Username cannot be an email address", + "Username cannot contain white spaces": "Username cannot contain white spaces", + "Username cannot start with a digit": "Username cannot start with a digit", + "Username is too long (maximum is 39 characters).": "Username is too long (maximum is 39 characters).", + "Username must have at least 2 characters": "Username must have at least 2 characters", + "You don't have the permission to do this": "You don't have the permission to do this", + "You have entered the wrong password too many times, please wait for %d minutes %d seconds and try again": "You have entered the wrong password too many times, please wait for %d minutes %d seconds and try again", + "unsupported password type: %s": "unsupported password type: %s" + }, + "check_util": { + "You have entered the wrong password too many times, please wait for %d minutes and try again": "You have entered the wrong password too many times, please wait for %d minutes and try again", + "password is incorrect, you have %d remaining chances": "password is incorrect, you have %d remaining chances" + }, + "enforcer": { + "Please sign in first": "Please sign in first" + }, + "ldap": { + "Ldap server exist": "Ldap server exist", + "Missing parameter": "Missing parameter" + }, + "link": { + "Please link first": "Please link first", + "This application has no providers": "This application has no providers", + "This application has no providers of type": "This application has no providers of type", + "This provider can't be unlinked": "This provider can't be unlinked", + "You are not the global admin, you can't unlink other users": "You are not the global admin, you can't unlink other users", + "You can't unlink yourself, you are not a member of any application": "You can't unlink yourself, you are not a member of any application" + }, + "organization": { + "Only admin can modify the %s.": "Only admin can modify the %s.", + "The %s is immutable.": "The %s is immutable.", + "Unknown modify rule %s.": "Unknown modify rule %s." + }, + "product": { + "Please login first": "Please login first", + "The user: %s doesn't exist": "The user: %s doesn't exist" + }, + "provider": { + "Invalid application id": "Invalid application id", + "the provider: %s does not exist": "the provider: %s does not exist" + }, + "resource": { + "User is nil for tag: avatar": "User is nil for tag: avatar", + "Username or fullFilePath is empty: username = %s, fullFilePath = %s": "Username or fullFilePath is empty: username = %s, fullFilePath = %s" + }, + "saml": { + "Application %s not found": "Application %s not found" + }, + "saml_sp": { + "provider %s's category is not SAML": "provider %s's category is not SAML" + }, + "service": { + "Empty parameters for emailForm: %v": "Empty parameters for emailForm: %v", + "Invalid Email receivers: %s": "Invalid Email receivers: %s", + "Invalid phone receivers: %s": "Invalid phone receivers: %s" + }, + "storage": { + "The objectKey: %s is not allowed": "The objectKey: %s is not allowed", + "The provider type: %s is not supported": "The provider type: %s is not supported" + }, + "system_info": { + "You are not authorized to access this resource": "You are not authorized to access this resource" + }, + "token": { + "Challenge method should be S256": "Challenge method should be S256", + "Empty clientId or clientSecret": "Empty clientId or clientSecret", + "Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application", + "Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret", + "Invalid client_id": "Invalid client_id", + "Redirect URI: %s doesn't exist in the allowed Redirect URI list": "Redirect URI: %s doesn't exist in the allowed Redirect URI list" + }, + "user": { + "Display name cannot be empty": "Display name cannot be empty", + "New password cannot contain blank space.": "New password cannot contain blank space.", + "New password must have at least 6 characters": "New password must have at least 6 characters", + "The user: %s/%s doesn't exist": "The user: %s/%s doesn't exist" + }, + "user_upload": { + "Failed to import users": "Failed to import users" + }, + "util": { + "No application is found for userId: %s": "No application is found for userId: %s", + "No provider for category: %s is found for application: %s": "No provider for category: %s is found for application: %s", + "Please login first": "Please login first", + "The provider: %s is not found": "The provider: %s is not found", + "The user: %s doesn't exist": "The user: %s doesn't exist" + }, + "verification": { + "Code has not been sent yet!": "Code has not been sent yet!", + "Email is invalid": "Email is invalid", + "Invalid captcha provider.": "Invalid captcha provider.", + "Missing parameter": "Missing parameter", + "Organization does not exist": "Organization does not exist", + "Phone number is invalid": "Phone number is invalid", + "Please login first": "Please login first", + "Turing test failed.": "Turing test failed.", + "Unable to get the email modify rule.": "Unable to get the email modify rule.", + "Unable to get the phone modify rule.": "Unable to get the phone modify rule.", + "Unknown type": "Unknown type", + "Wrong parameter": "Wrong parameter", + "You should verify your code in %d min!": "You should verify your code in %d min!", + "the user does not exist, please sign up first": "the user does not exist, please sign up first" + }, + "webauthn": { + "Found no credentials for this user": "Found no credentials for this user", + "Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first", + "Please login first": "Please login first", + "The user: %s/%s doesn't exist": "The user: %s/%s doesn't exist" + } +} diff --git a/i18n/locales/fr/data.json b/i18n/locales/fr/data.json new file mode 100644 index 00000000..2c0a9150 --- /dev/null +++ b/i18n/locales/fr/data.json @@ -0,0 +1,172 @@ +{ + "account": { + "Email: %s": "Email: %s", + "Get init score failed, error: %w": "Get init score failed, error: %w", + "Invalid information": "Invalid information", + "Phone: %s": "Phone: %s", + "Please sign out first before signing up": "Please sign out first before signing up", + "The application does not allow to sign up new account": "The application does not allow to sign up new account" + }, + "application": { + "Parameter organization is missing": "Parameter organization is missing", + "The user: %s doesn't exist": "The user: %s doesn't exist" + }, + "auth": { + "%s No phone prefix": "%s No phone prefix", + "Challenge method should be S256": "Challenge method should be S256", + "Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s", + "Failed to login in: %s": "Failed to login in: %s", + "Get init score failed, error: %w": "Get init score failed, error: %w", + "Invalid token": "Invalid token", + "Please sign out first before signing in": "Please sign out first before signing in", + "State expected: %s, but got: %s": "State expected: %s, but got: %s", + "The account does not exist": "The account does not exist", + "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up": "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up", + "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support": "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support", + "The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s)": "The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s)", + "The application: %s does not exist": "The application: %s does not exist", + "The provider type: %s is not supported": "The provider type: %s is not supported", + "The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application", + "The user is forbidden to sign in, please contact the administrator": "The user is forbidden to sign in, please contact the administrator", + "The user: %s/%s doesn't exist": "The user: %s/%s doesn't exist", + "Turing test failed.": "Turing test failed.", + "Unauthorized operation": "Unauthorized operation", + "Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s" + }, + "cas": { + "Service %s and %s do not match": "Service %s and %s do not match" + }, + "check": { + "Affiliation cannot be blank": "Affiliation cannot be blank", + "DisplayName cannot be blank": "DisplayName cannot be blank", + "DisplayName is not valid real name": "DisplayName is not valid real name", + "Email already exists": "Email already exists", + "Email cannot be empty": "Email cannot be empty", + "Email is invalid": "Email is invalid", + "Empty username.": "Empty username.", + "FirstName cannot be blank": "FirstName cannot be blank", + "LastName cannot be blank": "LastName cannot be blank", + "Ldap user name or password incorrect": "Ldap user name or password incorrect", + "Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server", + "Organization does not exist": "Organization does not exist", + "Password must have at least 6 characters": "Password must have at least 6 characters", + "Phone already exists": "Phone already exists", + "Phone cannot be empty": "Phone cannot be empty", + "Phone number is invalid": "Phone number is invalid", + "Please login first": "Please login first", + "Session outdated, please login again": "Session outdated, please login again", + "The user doesn't exist": "The user doesn't exist", + "The user is forbidden to sign in, please contact the administrator": "The user is forbidden to sign in, please contact the administrator", + "The user: %s doesn't exist": "The user: %s doesn't exist", + "The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline.": "The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline.", + "Username already exists": "Username already exists", + "Username cannot be an email address": "Username cannot be an email address", + "Username cannot contain white spaces": "Username cannot contain white spaces", + "Username cannot start with a digit": "Username cannot start with a digit", + "Username is too long (maximum is 39 characters).": "Username is too long (maximum is 39 characters).", + "Username must have at least 2 characters": "Username must have at least 2 characters", + "You don't have the permission to do this": "You don't have the permission to do this", + "You have entered the wrong password too many times, please wait for %d minutes %d seconds and try again": "You have entered the wrong password too many times, please wait for %d minutes %d seconds and try again", + "unsupported password type: %s": "unsupported password type: %s" + }, + "check_util": { + "You have entered the wrong password too many times, please wait for %d minutes and try again": "You have entered the wrong password too many times, please wait for %d minutes and try again", + "password is incorrect, you have %d remaining chances": "password is incorrect, you have %d remaining chances" + }, + "enforcer": { + "Please sign in first": "Please sign in first" + }, + "ldap": { + "Ldap server exist": "Ldap server exist", + "Missing parameter": "Missing parameter" + }, + "link": { + "Please link first": "Please link first", + "This application has no providers": "This application has no providers", + "This application has no providers of type": "This application has no providers of type", + "This provider can't be unlinked": "This provider can't be unlinked", + "You are not the global admin, you can't unlink other users": "You are not the global admin, you can't unlink other users", + "You can't unlink yourself, you are not a member of any application": "You can't unlink yourself, you are not a member of any application" + }, + "organization": { + "Only admin can modify the %s.": "Only admin can modify the %s.", + "The %s is immutable.": "The %s is immutable.", + "Unknown modify rule %s.": "Unknown modify rule %s." + }, + "product": { + "Please login first": "Please login first", + "The user: %s doesn't exist": "The user: %s doesn't exist" + }, + "provider": { + "Invalid application id": "Invalid application id", + "the provider: %s does not exist": "the provider: %s does not exist" + }, + "resource": { + "User is nil for tag: avatar": "User is nil for tag: avatar", + "Username or fullFilePath is empty: username = %s, fullFilePath = %s": "Username or fullFilePath is empty: username = %s, fullFilePath = %s" + }, + "saml": { + "Application %s not found": "Application %s not found" + }, + "saml_sp": { + "provider %s's category is not SAML": "provider %s's category is not SAML" + }, + "service": { + "Empty parameters for emailForm: %v": "Empty parameters for emailForm: %v", + "Invalid Email receivers: %s": "Invalid Email receivers: %s", + "Invalid phone receivers: %s": "Invalid phone receivers: %s" + }, + "storage": { + "The objectKey: %s is not allowed": "The objectKey: %s is not allowed", + "The provider type: %s is not supported": "The provider type: %s is not supported" + }, + "system_info": { + "You are not authorized to access this resource": "You are not authorized to access this resource" + }, + "token": { + "Challenge method should be S256": "Challenge method should be S256", + "Empty clientId or clientSecret": "Empty clientId or clientSecret", + "Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application", + "Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret", + "Invalid client_id": "Invalid client_id", + "Redirect URI: %s doesn't exist in the allowed Redirect URI list": "Redirect URI: %s doesn't exist in the allowed Redirect URI list" + }, + "user": { + "Display name cannot be empty": "Display name cannot be empty", + "New password cannot contain blank space.": "New password cannot contain blank space.", + "New password must have at least 6 characters": "New password must have at least 6 characters", + "The user: %s/%s doesn't exist": "The user: %s/%s doesn't exist" + }, + "user_upload": { + "Failed to import users": "Failed to import users" + }, + "util": { + "No application is found for userId: %s": "No application is found for userId: %s", + "No provider for category: %s is found for application: %s": "No provider for category: %s is found for application: %s", + "Please login first": "Please login first", + "The provider: %s is not found": "The provider: %s is not found", + "The user: %s doesn't exist": "The user: %s doesn't exist" + }, + "verification": { + "Code has not been sent yet!": "Code has not been sent yet!", + "Email is invalid": "Email is invalid", + "Invalid captcha provider.": "Invalid captcha provider.", + "Missing parameter": "Missing parameter", + "Organization does not exist": "Organization does not exist", + "Phone number is invalid": "Phone number is invalid", + "Please login first": "Please login first", + "Turing test failed.": "Turing test failed.", + "Unable to get the email modify rule.": "Unable to get the email modify rule.", + "Unable to get the phone modify rule.": "Unable to get the phone modify rule.", + "Unknown type": "Unknown type", + "Wrong parameter": "Wrong parameter", + "You should verify your code in %d min!": "You should verify your code in %d min!", + "the user does not exist, please sign up first": "the user does not exist, please sign up first" + }, + "webauthn": { + "Found no credentials for this user": "Found no credentials for this user", + "Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first", + "Please login first": "Please login first", + "The user: %s/%s doesn't exist": "The user: %s/%s doesn't exist" + } +} diff --git a/i18n/locales/ja/data.json b/i18n/locales/ja/data.json new file mode 100644 index 00000000..2c0a9150 --- /dev/null +++ b/i18n/locales/ja/data.json @@ -0,0 +1,172 @@ +{ + "account": { + "Email: %s": "Email: %s", + "Get init score failed, error: %w": "Get init score failed, error: %w", + "Invalid information": "Invalid information", + "Phone: %s": "Phone: %s", + "Please sign out first before signing up": "Please sign out first before signing up", + "The application does not allow to sign up new account": "The application does not allow to sign up new account" + }, + "application": { + "Parameter organization is missing": "Parameter organization is missing", + "The user: %s doesn't exist": "The user: %s doesn't exist" + }, + "auth": { + "%s No phone prefix": "%s No phone prefix", + "Challenge method should be S256": "Challenge method should be S256", + "Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s", + "Failed to login in: %s": "Failed to login in: %s", + "Get init score failed, error: %w": "Get init score failed, error: %w", + "Invalid token": "Invalid token", + "Please sign out first before signing in": "Please sign out first before signing in", + "State expected: %s, but got: %s": "State expected: %s, but got: %s", + "The account does not exist": "The account does not exist", + "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up": "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up", + "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support": "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support", + "The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s)": "The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s)", + "The application: %s does not exist": "The application: %s does not exist", + "The provider type: %s is not supported": "The provider type: %s is not supported", + "The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application", + "The user is forbidden to sign in, please contact the administrator": "The user is forbidden to sign in, please contact the administrator", + "The user: %s/%s doesn't exist": "The user: %s/%s doesn't exist", + "Turing test failed.": "Turing test failed.", + "Unauthorized operation": "Unauthorized operation", + "Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s" + }, + "cas": { + "Service %s and %s do not match": "Service %s and %s do not match" + }, + "check": { + "Affiliation cannot be blank": "Affiliation cannot be blank", + "DisplayName cannot be blank": "DisplayName cannot be blank", + "DisplayName is not valid real name": "DisplayName is not valid real name", + "Email already exists": "Email already exists", + "Email cannot be empty": "Email cannot be empty", + "Email is invalid": "Email is invalid", + "Empty username.": "Empty username.", + "FirstName cannot be blank": "FirstName cannot be blank", + "LastName cannot be blank": "LastName cannot be blank", + "Ldap user name or password incorrect": "Ldap user name or password incorrect", + "Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server", + "Organization does not exist": "Organization does not exist", + "Password must have at least 6 characters": "Password must have at least 6 characters", + "Phone already exists": "Phone already exists", + "Phone cannot be empty": "Phone cannot be empty", + "Phone number is invalid": "Phone number is invalid", + "Please login first": "Please login first", + "Session outdated, please login again": "Session outdated, please login again", + "The user doesn't exist": "The user doesn't exist", + "The user is forbidden to sign in, please contact the administrator": "The user is forbidden to sign in, please contact the administrator", + "The user: %s doesn't exist": "The user: %s doesn't exist", + "The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline.": "The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline.", + "Username already exists": "Username already exists", + "Username cannot be an email address": "Username cannot be an email address", + "Username cannot contain white spaces": "Username cannot contain white spaces", + "Username cannot start with a digit": "Username cannot start with a digit", + "Username is too long (maximum is 39 characters).": "Username is too long (maximum is 39 characters).", + "Username must have at least 2 characters": "Username must have at least 2 characters", + "You don't have the permission to do this": "You don't have the permission to do this", + "You have entered the wrong password too many times, please wait for %d minutes %d seconds and try again": "You have entered the wrong password too many times, please wait for %d minutes %d seconds and try again", + "unsupported password type: %s": "unsupported password type: %s" + }, + "check_util": { + "You have entered the wrong password too many times, please wait for %d minutes and try again": "You have entered the wrong password too many times, please wait for %d minutes and try again", + "password is incorrect, you have %d remaining chances": "password is incorrect, you have %d remaining chances" + }, + "enforcer": { + "Please sign in first": "Please sign in first" + }, + "ldap": { + "Ldap server exist": "Ldap server exist", + "Missing parameter": "Missing parameter" + }, + "link": { + "Please link first": "Please link first", + "This application has no providers": "This application has no providers", + "This application has no providers of type": "This application has no providers of type", + "This provider can't be unlinked": "This provider can't be unlinked", + "You are not the global admin, you can't unlink other users": "You are not the global admin, you can't unlink other users", + "You can't unlink yourself, you are not a member of any application": "You can't unlink yourself, you are not a member of any application" + }, + "organization": { + "Only admin can modify the %s.": "Only admin can modify the %s.", + "The %s is immutable.": "The %s is immutable.", + "Unknown modify rule %s.": "Unknown modify rule %s." + }, + "product": { + "Please login first": "Please login first", + "The user: %s doesn't exist": "The user: %s doesn't exist" + }, + "provider": { + "Invalid application id": "Invalid application id", + "the provider: %s does not exist": "the provider: %s does not exist" + }, + "resource": { + "User is nil for tag: avatar": "User is nil for tag: avatar", + "Username or fullFilePath is empty: username = %s, fullFilePath = %s": "Username or fullFilePath is empty: username = %s, fullFilePath = %s" + }, + "saml": { + "Application %s not found": "Application %s not found" + }, + "saml_sp": { + "provider %s's category is not SAML": "provider %s's category is not SAML" + }, + "service": { + "Empty parameters for emailForm: %v": "Empty parameters for emailForm: %v", + "Invalid Email receivers: %s": "Invalid Email receivers: %s", + "Invalid phone receivers: %s": "Invalid phone receivers: %s" + }, + "storage": { + "The objectKey: %s is not allowed": "The objectKey: %s is not allowed", + "The provider type: %s is not supported": "The provider type: %s is not supported" + }, + "system_info": { + "You are not authorized to access this resource": "You are not authorized to access this resource" + }, + "token": { + "Challenge method should be S256": "Challenge method should be S256", + "Empty clientId or clientSecret": "Empty clientId or clientSecret", + "Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application", + "Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret", + "Invalid client_id": "Invalid client_id", + "Redirect URI: %s doesn't exist in the allowed Redirect URI list": "Redirect URI: %s doesn't exist in the allowed Redirect URI list" + }, + "user": { + "Display name cannot be empty": "Display name cannot be empty", + "New password cannot contain blank space.": "New password cannot contain blank space.", + "New password must have at least 6 characters": "New password must have at least 6 characters", + "The user: %s/%s doesn't exist": "The user: %s/%s doesn't exist" + }, + "user_upload": { + "Failed to import users": "Failed to import users" + }, + "util": { + "No application is found for userId: %s": "No application is found for userId: %s", + "No provider for category: %s is found for application: %s": "No provider for category: %s is found for application: %s", + "Please login first": "Please login first", + "The provider: %s is not found": "The provider: %s is not found", + "The user: %s doesn't exist": "The user: %s doesn't exist" + }, + "verification": { + "Code has not been sent yet!": "Code has not been sent yet!", + "Email is invalid": "Email is invalid", + "Invalid captcha provider.": "Invalid captcha provider.", + "Missing parameter": "Missing parameter", + "Organization does not exist": "Organization does not exist", + "Phone number is invalid": "Phone number is invalid", + "Please login first": "Please login first", + "Turing test failed.": "Turing test failed.", + "Unable to get the email modify rule.": "Unable to get the email modify rule.", + "Unable to get the phone modify rule.": "Unable to get the phone modify rule.", + "Unknown type": "Unknown type", + "Wrong parameter": "Wrong parameter", + "You should verify your code in %d min!": "You should verify your code in %d min!", + "the user does not exist, please sign up first": "the user does not exist, please sign up first" + }, + "webauthn": { + "Found no credentials for this user": "Found no credentials for this user", + "Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first", + "Please login first": "Please login first", + "The user: %s/%s doesn't exist": "The user: %s/%s doesn't exist" + } +} diff --git a/i18n/locales/ko/data.json b/i18n/locales/ko/data.json new file mode 100644 index 00000000..2c0a9150 --- /dev/null +++ b/i18n/locales/ko/data.json @@ -0,0 +1,172 @@ +{ + "account": { + "Email: %s": "Email: %s", + "Get init score failed, error: %w": "Get init score failed, error: %w", + "Invalid information": "Invalid information", + "Phone: %s": "Phone: %s", + "Please sign out first before signing up": "Please sign out first before signing up", + "The application does not allow to sign up new account": "The application does not allow to sign up new account" + }, + "application": { + "Parameter organization is missing": "Parameter organization is missing", + "The user: %s doesn't exist": "The user: %s doesn't exist" + }, + "auth": { + "%s No phone prefix": "%s No phone prefix", + "Challenge method should be S256": "Challenge method should be S256", + "Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s", + "Failed to login in: %s": "Failed to login in: %s", + "Get init score failed, error: %w": "Get init score failed, error: %w", + "Invalid token": "Invalid token", + "Please sign out first before signing in": "Please sign out first before signing in", + "State expected: %s, but got: %s": "State expected: %s, but got: %s", + "The account does not exist": "The account does not exist", + "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up": "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up", + "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support": "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support", + "The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s)": "The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s)", + "The application: %s does not exist": "The application: %s does not exist", + "The provider type: %s is not supported": "The provider type: %s is not supported", + "The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application", + "The user is forbidden to sign in, please contact the administrator": "The user is forbidden to sign in, please contact the administrator", + "The user: %s/%s doesn't exist": "The user: %s/%s doesn't exist", + "Turing test failed.": "Turing test failed.", + "Unauthorized operation": "Unauthorized operation", + "Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s" + }, + "cas": { + "Service %s and %s do not match": "Service %s and %s do not match" + }, + "check": { + "Affiliation cannot be blank": "Affiliation cannot be blank", + "DisplayName cannot be blank": "DisplayName cannot be blank", + "DisplayName is not valid real name": "DisplayName is not valid real name", + "Email already exists": "Email already exists", + "Email cannot be empty": "Email cannot be empty", + "Email is invalid": "Email is invalid", + "Empty username.": "Empty username.", + "FirstName cannot be blank": "FirstName cannot be blank", + "LastName cannot be blank": "LastName cannot be blank", + "Ldap user name or password incorrect": "Ldap user name or password incorrect", + "Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server", + "Organization does not exist": "Organization does not exist", + "Password must have at least 6 characters": "Password must have at least 6 characters", + "Phone already exists": "Phone already exists", + "Phone cannot be empty": "Phone cannot be empty", + "Phone number is invalid": "Phone number is invalid", + "Please login first": "Please login first", + "Session outdated, please login again": "Session outdated, please login again", + "The user doesn't exist": "The user doesn't exist", + "The user is forbidden to sign in, please contact the administrator": "The user is forbidden to sign in, please contact the administrator", + "The user: %s doesn't exist": "The user: %s doesn't exist", + "The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline.": "The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline.", + "Username already exists": "Username already exists", + "Username cannot be an email address": "Username cannot be an email address", + "Username cannot contain white spaces": "Username cannot contain white spaces", + "Username cannot start with a digit": "Username cannot start with a digit", + "Username is too long (maximum is 39 characters).": "Username is too long (maximum is 39 characters).", + "Username must have at least 2 characters": "Username must have at least 2 characters", + "You don't have the permission to do this": "You don't have the permission to do this", + "You have entered the wrong password too many times, please wait for %d minutes %d seconds and try again": "You have entered the wrong password too many times, please wait for %d minutes %d seconds and try again", + "unsupported password type: %s": "unsupported password type: %s" + }, + "check_util": { + "You have entered the wrong password too many times, please wait for %d minutes and try again": "You have entered the wrong password too many times, please wait for %d minutes and try again", + "password is incorrect, you have %d remaining chances": "password is incorrect, you have %d remaining chances" + }, + "enforcer": { + "Please sign in first": "Please sign in first" + }, + "ldap": { + "Ldap server exist": "Ldap server exist", + "Missing parameter": "Missing parameter" + }, + "link": { + "Please link first": "Please link first", + "This application has no providers": "This application has no providers", + "This application has no providers of type": "This application has no providers of type", + "This provider can't be unlinked": "This provider can't be unlinked", + "You are not the global admin, you can't unlink other users": "You are not the global admin, you can't unlink other users", + "You can't unlink yourself, you are not a member of any application": "You can't unlink yourself, you are not a member of any application" + }, + "organization": { + "Only admin can modify the %s.": "Only admin can modify the %s.", + "The %s is immutable.": "The %s is immutable.", + "Unknown modify rule %s.": "Unknown modify rule %s." + }, + "product": { + "Please login first": "Please login first", + "The user: %s doesn't exist": "The user: %s doesn't exist" + }, + "provider": { + "Invalid application id": "Invalid application id", + "the provider: %s does not exist": "the provider: %s does not exist" + }, + "resource": { + "User is nil for tag: avatar": "User is nil for tag: avatar", + "Username or fullFilePath is empty: username = %s, fullFilePath = %s": "Username or fullFilePath is empty: username = %s, fullFilePath = %s" + }, + "saml": { + "Application %s not found": "Application %s not found" + }, + "saml_sp": { + "provider %s's category is not SAML": "provider %s's category is not SAML" + }, + "service": { + "Empty parameters for emailForm: %v": "Empty parameters for emailForm: %v", + "Invalid Email receivers: %s": "Invalid Email receivers: %s", + "Invalid phone receivers: %s": "Invalid phone receivers: %s" + }, + "storage": { + "The objectKey: %s is not allowed": "The objectKey: %s is not allowed", + "The provider type: %s is not supported": "The provider type: %s is not supported" + }, + "system_info": { + "You are not authorized to access this resource": "You are not authorized to access this resource" + }, + "token": { + "Challenge method should be S256": "Challenge method should be S256", + "Empty clientId or clientSecret": "Empty clientId or clientSecret", + "Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application", + "Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret", + "Invalid client_id": "Invalid client_id", + "Redirect URI: %s doesn't exist in the allowed Redirect URI list": "Redirect URI: %s doesn't exist in the allowed Redirect URI list" + }, + "user": { + "Display name cannot be empty": "Display name cannot be empty", + "New password cannot contain blank space.": "New password cannot contain blank space.", + "New password must have at least 6 characters": "New password must have at least 6 characters", + "The user: %s/%s doesn't exist": "The user: %s/%s doesn't exist" + }, + "user_upload": { + "Failed to import users": "Failed to import users" + }, + "util": { + "No application is found for userId: %s": "No application is found for userId: %s", + "No provider for category: %s is found for application: %s": "No provider for category: %s is found for application: %s", + "Please login first": "Please login first", + "The provider: %s is not found": "The provider: %s is not found", + "The user: %s doesn't exist": "The user: %s doesn't exist" + }, + "verification": { + "Code has not been sent yet!": "Code has not been sent yet!", + "Email is invalid": "Email is invalid", + "Invalid captcha provider.": "Invalid captcha provider.", + "Missing parameter": "Missing parameter", + "Organization does not exist": "Organization does not exist", + "Phone number is invalid": "Phone number is invalid", + "Please login first": "Please login first", + "Turing test failed.": "Turing test failed.", + "Unable to get the email modify rule.": "Unable to get the email modify rule.", + "Unable to get the phone modify rule.": "Unable to get the phone modify rule.", + "Unknown type": "Unknown type", + "Wrong parameter": "Wrong parameter", + "You should verify your code in %d min!": "You should verify your code in %d min!", + "the user does not exist, please sign up first": "the user does not exist, please sign up first" + }, + "webauthn": { + "Found no credentials for this user": "Found no credentials for this user", + "Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first", + "Please login first": "Please login first", + "The user: %s/%s doesn't exist": "The user: %s/%s doesn't exist" + } +} diff --git a/i18n/locales/ru/data.json b/i18n/locales/ru/data.json new file mode 100644 index 00000000..2c0a9150 --- /dev/null +++ b/i18n/locales/ru/data.json @@ -0,0 +1,172 @@ +{ + "account": { + "Email: %s": "Email: %s", + "Get init score failed, error: %w": "Get init score failed, error: %w", + "Invalid information": "Invalid information", + "Phone: %s": "Phone: %s", + "Please sign out first before signing up": "Please sign out first before signing up", + "The application does not allow to sign up new account": "The application does not allow to sign up new account" + }, + "application": { + "Parameter organization is missing": "Parameter organization is missing", + "The user: %s doesn't exist": "The user: %s doesn't exist" + }, + "auth": { + "%s No phone prefix": "%s No phone prefix", + "Challenge method should be S256": "Challenge method should be S256", + "Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s", + "Failed to login in: %s": "Failed to login in: %s", + "Get init score failed, error: %w": "Get init score failed, error: %w", + "Invalid token": "Invalid token", + "Please sign out first before signing in": "Please sign out first before signing in", + "State expected: %s, but got: %s": "State expected: %s, but got: %s", + "The account does not exist": "The account does not exist", + "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up": "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up", + "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support": "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support", + "The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s)": "The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s)", + "The application: %s does not exist": "The application: %s does not exist", + "The provider type: %s is not supported": "The provider type: %s is not supported", + "The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application", + "The user is forbidden to sign in, please contact the administrator": "The user is forbidden to sign in, please contact the administrator", + "The user: %s/%s doesn't exist": "The user: %s/%s doesn't exist", + "Turing test failed.": "Turing test failed.", + "Unauthorized operation": "Unauthorized operation", + "Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s" + }, + "cas": { + "Service %s and %s do not match": "Service %s and %s do not match" + }, + "check": { + "Affiliation cannot be blank": "Affiliation cannot be blank", + "DisplayName cannot be blank": "DisplayName cannot be blank", + "DisplayName is not valid real name": "DisplayName is not valid real name", + "Email already exists": "Email already exists", + "Email cannot be empty": "Email cannot be empty", + "Email is invalid": "Email is invalid", + "Empty username.": "Empty username.", + "FirstName cannot be blank": "FirstName cannot be blank", + "LastName cannot be blank": "LastName cannot be blank", + "Ldap user name or password incorrect": "Ldap user name or password incorrect", + "Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server", + "Organization does not exist": "Organization does not exist", + "Password must have at least 6 characters": "Password must have at least 6 characters", + "Phone already exists": "Phone already exists", + "Phone cannot be empty": "Phone cannot be empty", + "Phone number is invalid": "Phone number is invalid", + "Please login first": "Please login first", + "Session outdated, please login again": "Session outdated, please login again", + "The user doesn't exist": "The user doesn't exist", + "The user is forbidden to sign in, please contact the administrator": "The user is forbidden to sign in, please contact the administrator", + "The user: %s doesn't exist": "The user: %s doesn't exist", + "The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline.": "The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline.", + "Username already exists": "Username already exists", + "Username cannot be an email address": "Username cannot be an email address", + "Username cannot contain white spaces": "Username cannot contain white spaces", + "Username cannot start with a digit": "Username cannot start with a digit", + "Username is too long (maximum is 39 characters).": "Username is too long (maximum is 39 characters).", + "Username must have at least 2 characters": "Username must have at least 2 characters", + "You don't have the permission to do this": "You don't have the permission to do this", + "You have entered the wrong password too many times, please wait for %d minutes %d seconds and try again": "You have entered the wrong password too many times, please wait for %d minutes %d seconds and try again", + "unsupported password type: %s": "unsupported password type: %s" + }, + "check_util": { + "You have entered the wrong password too many times, please wait for %d minutes and try again": "You have entered the wrong password too many times, please wait for %d minutes and try again", + "password is incorrect, you have %d remaining chances": "password is incorrect, you have %d remaining chances" + }, + "enforcer": { + "Please sign in first": "Please sign in first" + }, + "ldap": { + "Ldap server exist": "Ldap server exist", + "Missing parameter": "Missing parameter" + }, + "link": { + "Please link first": "Please link first", + "This application has no providers": "This application has no providers", + "This application has no providers of type": "This application has no providers of type", + "This provider can't be unlinked": "This provider can't be unlinked", + "You are not the global admin, you can't unlink other users": "You are not the global admin, you can't unlink other users", + "You can't unlink yourself, you are not a member of any application": "You can't unlink yourself, you are not a member of any application" + }, + "organization": { + "Only admin can modify the %s.": "Only admin can modify the %s.", + "The %s is immutable.": "The %s is immutable.", + "Unknown modify rule %s.": "Unknown modify rule %s." + }, + "product": { + "Please login first": "Please login first", + "The user: %s doesn't exist": "The user: %s doesn't exist" + }, + "provider": { + "Invalid application id": "Invalid application id", + "the provider: %s does not exist": "the provider: %s does not exist" + }, + "resource": { + "User is nil for tag: avatar": "User is nil for tag: avatar", + "Username or fullFilePath is empty: username = %s, fullFilePath = %s": "Username or fullFilePath is empty: username = %s, fullFilePath = %s" + }, + "saml": { + "Application %s not found": "Application %s not found" + }, + "saml_sp": { + "provider %s's category is not SAML": "provider %s's category is not SAML" + }, + "service": { + "Empty parameters for emailForm: %v": "Empty parameters for emailForm: %v", + "Invalid Email receivers: %s": "Invalid Email receivers: %s", + "Invalid phone receivers: %s": "Invalid phone receivers: %s" + }, + "storage": { + "The objectKey: %s is not allowed": "The objectKey: %s is not allowed", + "The provider type: %s is not supported": "The provider type: %s is not supported" + }, + "system_info": { + "You are not authorized to access this resource": "You are not authorized to access this resource" + }, + "token": { + "Challenge method should be S256": "Challenge method should be S256", + "Empty clientId or clientSecret": "Empty clientId or clientSecret", + "Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application", + "Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret", + "Invalid client_id": "Invalid client_id", + "Redirect URI: %s doesn't exist in the allowed Redirect URI list": "Redirect URI: %s doesn't exist in the allowed Redirect URI list" + }, + "user": { + "Display name cannot be empty": "Display name cannot be empty", + "New password cannot contain blank space.": "New password cannot contain blank space.", + "New password must have at least 6 characters": "New password must have at least 6 characters", + "The user: %s/%s doesn't exist": "The user: %s/%s doesn't exist" + }, + "user_upload": { + "Failed to import users": "Failed to import users" + }, + "util": { + "No application is found for userId: %s": "No application is found for userId: %s", + "No provider for category: %s is found for application: %s": "No provider for category: %s is found for application: %s", + "Please login first": "Please login first", + "The provider: %s is not found": "The provider: %s is not found", + "The user: %s doesn't exist": "The user: %s doesn't exist" + }, + "verification": { + "Code has not been sent yet!": "Code has not been sent yet!", + "Email is invalid": "Email is invalid", + "Invalid captcha provider.": "Invalid captcha provider.", + "Missing parameter": "Missing parameter", + "Organization does not exist": "Organization does not exist", + "Phone number is invalid": "Phone number is invalid", + "Please login first": "Please login first", + "Turing test failed.": "Turing test failed.", + "Unable to get the email modify rule.": "Unable to get the email modify rule.", + "Unable to get the phone modify rule.": "Unable to get the phone modify rule.", + "Unknown type": "Unknown type", + "Wrong parameter": "Wrong parameter", + "You should verify your code in %d min!": "You should verify your code in %d min!", + "the user does not exist, please sign up first": "the user does not exist, please sign up first" + }, + "webauthn": { + "Found no credentials for this user": "Found no credentials for this user", + "Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first", + "Please login first": "Please login first", + "The user: %s/%s doesn't exist": "The user: %s/%s doesn't exist" + } +} diff --git a/i18n/locales/zh/data.json b/i18n/locales/zh/data.json new file mode 100644 index 00000000..d8c767bf --- /dev/null +++ b/i18n/locales/zh/data.json @@ -0,0 +1,172 @@ +{ + "account": { + "Email: %s": "邮件: %s", + "Get init score failed, error: %w": "初始化分数失败: %w", + "Invalid information": "无效信息", + "Phone: %s": "电话: %s", + "Please sign out first before signing up": "请在登陆前登出", + "The application does not allow to sign up new account": "该应用不允许注册新账户" + }, + "application": { + "Parameter organization is missing": "Organization参数丢失", + "The user: %s doesn't exist": "用户不存在: %s" + }, + "auth": { + "%s No phone prefix": "%s 无此电话前缀", + "Challenge method should be S256": "Challenge 方法应该为 S256", + "Failed to create user, user information is invalid: %s": "创建用户失败,用户信息无效: %s", + "Failed to login in: %s": "无法登录: %s", + "Get init score failed, error: %w": "初始化分数失败: %w", + "Invalid token": "无效token", + "Please sign out first before signing in": "请在登陆前登出", + "State expected: %s, but got: %s": "期望状态位: %s, 实际状态为: %s", + "The account does not exist": "账户不存在", + "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account via %%s, please use another way to sign up": "提供商账户: %s 与用户名: %s (%s) 不存在且 不允许通过 %s 注册新账户, 请使用其他方式注册", + "The account for provider: %s and username: %s (%s) does not exist and is not allowed to sign up as new account, please contact your IT support": "提供商账户: %s 与用户名: %s (%s) 不存在且 不允许注册新账户, 请联系IT支持", + "The account for provider: %s and username: %s (%s) is already linked to another account: %s (%s)": "提供商账户: %s 与用户名: %s (%s) 已经与其他账户绑定: %s (%s)", + "The application: %s does not exist": "应用 %s 不存在", + "The provider type: %s is not supported": "不支持该类型的提供商: %s", + "The provider: %s is not enabled for the application": "提供商: %s 未被启用", + "The user is forbidden to sign in, please contact the administrator": "该用户被禁止登陆,请联系管理员", + "The user: %s/%s doesn't exist": "用户不存在: %s/%s", + "Turing test failed.": "真人验证失败", + "Unauthorized operation": "未授权的操作", + "Unknown authentication type (not password or provider), form = %s": "未授权的操作" + }, + "cas": { + "Service %s and %s do not match": "服务 %s 与 %s 不匹配" + }, + "check": { + "Affiliation cannot be blank": "联系方式不可为空", + "DisplayName cannot be blank": "展示名称不可为空", + "DisplayName is not valid real name": "展示名称无效", + "Email already exists": "该邮箱已存在", + "Email cannot be empty": "邮箱不可为空", + "Email is invalid": "无效邮箱", + "Empty username.": "用户名不可为空", + "FirstName cannot be blank": "名不可以为空", + "LastName cannot be blank": "姓不可以为空", + "Ldap user name or password incorrect": "Ldap密码错误", + "Multiple accounts with same uid, please check your ldap server": "多个帐户具有相同的uid,请检查您的 ldap 服务器", + "Organization does not exist": "组织不存在", + "Password must have at least 6 characters": "新密码至少为6位", + "Phone already exists": "该电话已存在", + "Phone cannot be empty": "电话不可为空", + "Phone number is invalid": "无效电话", + "Please login first": "请先登录", + "Session outdated, please login again": "Session已过期,请重新登陆", + "The user doesn't exist": "用户不存在", + "The user is forbidden to sign in, please contact the administrator": "该用户被禁止登陆,请联系管理员", + "The user: %s doesn't exist": "用户不存在: %s", + "The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline.": "用户名只能包含字母数字字符、下划线或连字符,不能有连续的连字符或下划线,也不能以连字符或下划线开头或结尾", + "Username already exists": "用户名已存在", + "Username cannot be an email address": "用户名不可以是邮箱地址", + "Username cannot contain white spaces": "用户名不可以包含空格", + "Username cannot start with a digit": "用户名禁止使用数字作为第一个字符", + "Username is too long (maximum is 39 characters).": "用户名过长(最大长度为39个字符)", + "Username must have at least 2 characters": "用户名至少要有2个字符", + "You don't have the permission to do this": "用户名至少要有2个字符", + "You have entered the wrong password too many times, please wait for %d minutes %d seconds and try again": "输入密码错误次数已达上限,请在 %d 分 %d 秒后重试", + "unsupported password type: %s": "不支持的密码类型: %s" + }, + "check_util": { + "You have entered the wrong password too many times, please wait for %d minutes and try again": "输入密码错误次数已达上限,请在 %d 分后重试", + "password is incorrect, you have %d remaining chances": "密码错误,您还有 %d 次尝试的机会" + }, + "enforcer": { + "Please sign in first": "请先登录" + }, + "ldap": { + "Ldap server exist": "Ldap服务器已存在", + "Missing parameter": "参数丢失" + }, + "link": { + "Please link first": "请先绑定", + "This application has no providers": "该应用无提供商", + "This application has no providers of type": "应用没有该类型的提供商", + "This provider can't be unlinked": "该提供商不可被链接", + "You are not the global admin, you can't unlink other users": "您不是全局管理员,无法取消链接其他用户", + "You can't unlink yourself, you are not a member of any application": "您无法取消链接,您不是任何应用程序的成员" + }, + "organization": { + "Only admin can modify the %s.": "您无法取消链接,您不是任何应用程序的成员", + "The %s is immutable.": "%s是不可变的", + "Unknown modify rule %s.": "未知的修改规则" + }, + "product": { + "Please login first": "请先登录", + "The user: %s doesn't exist": "用户不存在: %s" + }, + "provider": { + "Invalid application id": "无效的Application ID", + "the provider: %s does not exist": "提供商: %s 不存在" + }, + "resource": { + "User is nil for tag: avatar": "用户头像标签为空", + "Username or fullFilePath is empty: username = %s, fullFilePath = %s": "username或FilePath为空: username = %s, fullFilePath = %s" + }, + "saml": { + "Application %s not found": "应用 %s 未找到" + }, + "saml_sp": { + "provider %s's category is not SAML": "提供商 %s类型不是SAML" + }, + "service": { + "Empty parameters for emailForm: %v": "邮件参数为空: %v", + "Invalid Email receivers: %s": " 无效的邮箱接收者: %s", + "Invalid phone receivers: %s": "无效的电话接收者: %s" + }, + "storage": { + "The objectKey: %s is not allowed": "object key :%s 不被允许", + "The provider type: %s is not supported": "提供商类型: %s 尚未支持" + }, + "system_info": { + "You are not authorized to access this resource": "您无权获取此资源" + }, + "token": { + "Challenge method should be S256": "Challenge 方法应该为 S256", + "Empty clientId or clientSecret": "clientId或clientSecret为空", + "Grant_type: %s is not supported in this application": "此应用中不支持此授权类型: %s", + "Invalid application or wrong clientSecret": "无效应用或错误的clientSecret", + "Invalid client_id": "无效的ClientId", + "Redirect URI: %s doesn't exist in the allowed Redirect URI list": "重定向 URI:%s 在可列表中未找到" + }, + "user": { + "Display name cannot be empty": "展示名称不可为空", + "New password cannot contain blank space.": "新密码不可以包含空格", + "New password must have at least 6 characters": "新密码至少需要6位字符", + "The user: %s/%s doesn't exist": "用户不存在: %s/%s" + }, + "user_upload": { + "Failed to import users": "导入用户失败" + }, + "util": { + "No application is found for userId: %s": "找不到该用户的应用程序 %s", + "No provider for category: %s is found for application: %s": "找不到该用户的应用程序 %s", + "Please login first": "请先登录", + "The provider: %s is not found": "该提供商未找到: %s", + "The user: %s doesn't exist": "用户不存在: %s" + }, + "verification": { + "Code has not been sent yet!": "验证码还未发送", + "Email is invalid": "非法的邮箱", + "Invalid captcha provider.": "非法的验证码提供商", + "Missing parameter": "参数丢失", + "Organization does not exist": "组织不存在", + "Phone number is invalid": "非法的电话号码", + "Please login first": "请先登录", + "Turing test failed.": "验证码还未发送", + "Unable to get the email modify rule.": "无法得到邮箱修改规则", + "Unable to get the phone modify rule.": "无法得到电话修改规则", + "Unknown type": "未知类型", + "Wrong parameter": "参数错误", + "You should verify your code in %d min!": "请在 %d 分钟内输入正确验证码", + "the user does not exist, please sign up first": "用户不存在,请先注册" + }, + "webauthn": { + "Found no credentials for this user": "该用户没有WebAuthn凭据", + "Please call WebAuthnSigninBegin first": "请先调用 WebAuthnSigninBegi", + "Please login first": "请先登录", + "The user: %s/%s doesn't exist": "用户: %s/%s 不存在" + } +} diff --git a/i18n/util.go b/i18n/util.go index b0ec9c73..c1b789af 100644 --- a/i18n/util.go +++ b/i18n/util.go @@ -20,16 +20,21 @@ import ( "strings" "github.com/casdoor/casdoor/util" - "gopkg.in/ini.v1" ) -//go:embed languages/*.ini +//go:embed locales/*/data.json var f embed.FS -var langMapConfig = make(map[string]*ini.File) +var langMap = make(map[string]map[string]map[string]string) // for example : langMap[en][account][Invalid information] = Invalid information func getI18nFilePath(language string) string { - return fmt.Sprintf("../web/src/locales/%s/data.json", language) + if strings.Contains(language, "backend") { + // change language from 'backend_en' to 'en' + language = language[8:] + return fmt.Sprintf("../i18n/locales/%s/data.json", language) + } else { + return fmt.Sprintf("../web/src/locales/%s/data.json", language) + } } func readI18nFile(language string) *I18nData { @@ -71,16 +76,20 @@ func applyData(data1 *I18nData, data2 *I18nData) { } func Translate(lang string, error string) string { - parts := strings.Split(error, ".") - if !strings.Contains(error, ".") || len(parts) != 2 { + parts := strings.SplitN(error, ":", 2) + if !strings.Contains(error, ":") || len(parts) != 2 { return "Translate Error: " + error } - - if langMapConfig[lang] != nil { - return langMapConfig[lang].Section(parts[0]).Key(parts[1]).String() + if langMap[lang] != nil { + return langMap[lang][parts[0]][parts[1]] } else { - file, _ := f.ReadFile("languages/locale_" + lang + ".ini") - langMapConfig[lang], _ = ini.Load(file) - return langMapConfig[lang].Section(parts[0]).Key(parts[1]).String() + file, _ := f.ReadFile("locales/" + lang + "/data.json") + data := I18nData{} + err := util.JsonToStruct(string(file), &data) + if err != nil { + panic(err) + } + langMap[lang] = data + return langMap[lang][parts[0]][parts[1]] } } diff --git a/object/check.go b/object/check.go index d4609ba0..c355952e 100644 --- a/object/check.go +++ b/object/check.go @@ -44,21 +44,21 @@ func init() { func CheckUserSignup(application *Application, organization *Organization, username string, password string, displayName string, firstName string, lastName string, email string, phone string, affiliation string, lang string) string { if organization == nil { - return i18n.Translate(lang, "OrgErr.DoNotExist") + return i18n.Translate(lang, "check:Organization does not exist") } if application.IsSignupItemVisible("Username") { if len(username) <= 1 { - return i18n.Translate(lang, "UserErr.NameLessThanTwoCharacters") + return i18n.Translate(lang, "check:Username must have at least 2 characters") } if unicode.IsDigit(rune(username[0])) { - return i18n.Translate(lang, "UserErr.NameStartWithADigitErr") + return i18n.Translate(lang, "check:Username cannot start with a digit") } if util.IsEmailValid(username) { - return i18n.Translate(lang, "UserErr.NameIsEmailErr") + return i18n.Translate(lang, "check:Username cannot be an email address") } if reWhiteSpace.MatchString(username) { - return i18n.Translate(lang, "UserErr.NameCantainWhitSpaceErr") + return i18n.Translate(lang, "check:Username cannot contain white spaces") } msg := CheckUsername(username, lang) if msg != "" { @@ -66,65 +66,65 @@ func CheckUserSignup(application *Application, organization *Organization, usern } if HasUserByField(organization.Name, "name", username) { - return i18n.Translate(lang, "UserErr.NameExistedErr") + return i18n.Translate(lang, "check:Username already exists") } if HasUserByField(organization.Name, "email", email) { - return i18n.Translate(lang, "EmailErr.ExistedErr") + return i18n.Translate(lang, "check:Email already exists") } if HasUserByField(organization.Name, "phone", phone) { - return i18n.Translate(lang, "PhoneErr.ExistedErr") + return i18n.Translate(lang, "check:Phone already exists") } } if len(password) <= 5 { - return i18n.Translate(lang, "UserErr.PasswordLessThanSixCharacters") + return i18n.Translate(lang, "check:Password must have at least 6 characters") } if application.IsSignupItemVisible("Email") { if email == "" { if application.IsSignupItemRequired("Email") { - return i18n.Translate(lang, "EmailErr.EmptyErr") + return i18n.Translate(lang, "check:Email cannot be empty") } else { return "" } } if HasUserByField(organization.Name, "email", email) { - return i18n.Translate(lang, "EmailErr.ExistedErr") + return i18n.Translate(lang, "check:Email already exists") } else if !util.IsEmailValid(email) { - return i18n.Translate(lang, "EmailErr.EmailInvalid") + return i18n.Translate(lang, "check:Email is invalid") } } if application.IsSignupItemVisible("Phone") { if phone == "" { if application.IsSignupItemRequired("Phone") { - return i18n.Translate(lang, "PhoneErr.EmptyErr") + return i18n.Translate(lang, "check:Phone cannot be empty") } else { return "" } } if HasUserByField(organization.Name, "phone", phone) { - return i18n.Translate(lang, "PhoneErr.ExistedErr") + return i18n.Translate(lang, "check:Phone already exists") } else if organization.PhonePrefix == "86" && !util.IsPhoneCnValid(phone) { - return i18n.Translate(lang, "PhoneErr.NumberInvalid") + return i18n.Translate(lang, "check:Phone number is invalid") } } if application.IsSignupItemVisible("Display name") { if application.GetSignupItemRule("Display name") == "First, last" && (firstName != "" || lastName != "") { if firstName == "" { - return i18n.Translate(lang, "UserErr.FirstNameBlankErr") + return i18n.Translate(lang, "check:FirstName cannot be blank") } else if lastName == "" { - return i18n.Translate(lang, "UserErr.LastNameBlankErr") + return i18n.Translate(lang, "check:LastName cannot be blank") } } else { if displayName == "" { - return i18n.Translate(lang, "UserErr.DisplayNameBlankErr") + return i18n.Translate(lang, "check:DisplayName cannot be blank") } else if application.GetSignupItemRule("Display name") == "Real name" { if !isValidRealName(displayName) { - return i18n.Translate(lang, "UserErr.DisplayNameInvalid") + return i18n.Translate(lang, "check:DisplayName is not valid real name") } } } @@ -132,7 +132,7 @@ func CheckUserSignup(application *Application, organization *Organization, usern if application.IsSignupItemVisible("Affiliation") { if affiliation == "" { - return i18n.Translate(lang, "UserErr.AffiliationBlankErr") + return i18n.Translate(lang, "check:Affiliation cannot be blank") } } @@ -147,7 +147,7 @@ func checkSigninErrorTimes(user *User, lang string) string { // deny the login if the error times is greater than the limit and the last login time is less than the duration if seconds > 0 { - return fmt.Sprintf(i18n.Translate(lang, "AuthErr.WrongPasswordManyTimes"), seconds/60, seconds%60) + return fmt.Sprintf(i18n.Translate(lang, "check:You have entered the wrong password too many times, please wait for %d minutes %d seconds and try again"), seconds/60, seconds%60) } // reset the error times @@ -167,7 +167,7 @@ func CheckPassword(user *User, password string, lang string) string { organization := GetOrganizationByUser(user) if organization == nil { - return i18n.Translate(lang, "OrgErr.DoNotExist") + return i18n.Translate(lang, "check:Organization does not exist") } credManager := cred.GetCredManager(organization.PasswordType) @@ -184,9 +184,9 @@ func CheckPassword(user *User, password string, lang string) string { return "" } - return recordSigninErrorInfo(user) + return recordSigninErrorInfo(user, lang) } else { - return fmt.Sprintf(i18n.Translate(lang, "LoginErr.UnsupportedPasswordType"), organization.PasswordType) + return fmt.Sprintf(i18n.Translate(lang, "check:unsupported password type: %s"), organization.PasswordType) } } @@ -210,7 +210,7 @@ func checkLdapUserPassword(user *User, password string, lang string) (*User, str if len(searchResult.Entries) == 0 { continue } else if len(searchResult.Entries) > 1 { - return nil, i18n.Translate(lang, "LdapErr.MultipleAccounts") + return nil, i18n.Translate(lang, "check:Multiple accounts with same uid, please check your ldap server") } dn := searchResult.Entries[0].DN @@ -221,7 +221,7 @@ func checkLdapUserPassword(user *User, password string, lang string) (*User, str } if !ldapLoginSuccess { - return nil, i18n.Translate(lang, "LdapErr.PasswordWrong") + return nil, i18n.Translate(lang, "check:Ldap user name or password incorrect") } return user, "" } @@ -229,11 +229,11 @@ func checkLdapUserPassword(user *User, password string, lang string) (*User, str func CheckUserPassword(organization string, username string, password string, lang string) (*User, string) { user := GetUserByFields(organization, username) if user == nil || user.IsDeleted == true { - return nil, i18n.Translate(lang, "UserErr.DoNotExistSignUp") + return nil, i18n.Translate(lang, "check:The user doesn't exist") } if user.IsForbidden { - return nil, i18n.Translate(lang, "LoginErr.UserIsForbidden") + return nil, i18n.Translate(lang, "check:The user is forbidden to sign in, please contact the administrator") } if user.Ldap != "" { @@ -254,13 +254,13 @@ func filterField(field string) bool { func CheckUserPermission(requestUserId, userId, userOwner string, strict bool, lang string) (bool, error) { if requestUserId == "" { - return false, fmt.Errorf(i18n.Translate(lang, "LoginErr.LoginFirst")) + return false, fmt.Errorf(i18n.Translate(lang, "check:Please login first")) } if userId != "" { targetUser := GetUser(userId) if targetUser == nil { - return false, fmt.Errorf(i18n.Translate(lang, "UserErr.DoNotExist"), userId) + return false, fmt.Errorf(i18n.Translate(lang, "check:The user: %s doesn't exist"), userId) } userOwner = targetUser.Owner @@ -272,7 +272,7 @@ func CheckUserPermission(requestUserId, userId, userOwner string, strict bool, l } else { requestUser := GetUser(requestUserId) if requestUser == nil { - return false, fmt.Errorf(i18n.Translate(lang, "LoginErr.SessionOutdated")) + return false, fmt.Errorf(i18n.Translate(lang, "check:Session outdated, please login again")) } if requestUser.IsGlobalAdmin { hasPermission = true @@ -287,7 +287,7 @@ func CheckUserPermission(requestUserId, userId, userOwner string, strict bool, l } } - return hasPermission, fmt.Errorf(i18n.Translate(lang, "LoginErr.NoPermission")) + return hasPermission, fmt.Errorf(i18n.Translate(lang, "check:You don't have the permission to do this")) } func CheckAccessPermission(userId string, application *Application) (bool, error) { @@ -322,9 +322,9 @@ func CheckAccessPermission(userId string, application *Application) (bool, error func CheckUsername(username string, lang string) string { if username == "" { - return i18n.Translate(lang, "UserErr.NameEmptyErr") + return i18n.Translate(lang, "check:Empty username.") } else if len(username) > 39 { - return i18n.Translate(lang, "UserErr.NameTooLang") + return i18n.Translate(lang, "check:Username is too long (maximum is 39 characters).") } exclude, _ := regexp.Compile("^[\u0021-\u007E]+$") @@ -335,7 +335,7 @@ func CheckUsername(username string, lang string) string { // https://stackoverflow.com/questions/58726546/github-username-convention-using-regex re, _ := regexp.Compile("^[a-zA-Z0-9]+((?:-[a-zA-Z0-9]+)|(?:_[a-zA-Z0-9]+))*$") if !re.MatchString(username) { - return i18n.Translate(lang, "UserErr.NameFormatErr") + return i18n.Translate(lang, "check:The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline.") } return "" diff --git a/object/check_util.go b/object/check_util.go index 3bffa462..2017099c 100644 --- a/object/check_util.go +++ b/object/check_util.go @@ -18,6 +18,8 @@ import ( "fmt" "regexp" "time" + + "github.com/casdoor/casdoor/i18n" ) var reRealName *regexp.Regexp @@ -43,7 +45,7 @@ func resetUserSigninErrorTimes(user *User) { UpdateUser(user.GetId(), user, []string{"signin_wrong_times", "last_signin_wrong_time"}, user.IsGlobalAdmin) } -func recordSigninErrorInfo(user *User) string { +func recordSigninErrorInfo(user *User, lang string) string { // increase failed login count user.SigninWrongTimes++ @@ -56,9 +58,9 @@ func recordSigninErrorInfo(user *User) string { UpdateUser(user.GetId(), user, []string{"signin_wrong_times", "last_signin_wrong_time"}, user.IsGlobalAdmin) leftChances := SigninWrongTimesLimit - user.SigninWrongTimes if leftChances > 0 { - return fmt.Sprintf("password is incorrect, you have %d remaining chances", leftChances) + return fmt.Sprintf(i18n.Translate(lang, "check_util:password is incorrect, you have %d remaining chances"), leftChances) } // don't show the chance error message if the user has no chance left - return fmt.Sprintf("You have entered the wrong password too many times, please wait for %d minutes and try again", int(LastSignWrongTimeDuration.Minutes())) + return fmt.Sprintf(i18n.Translate(lang, "check_util:You have entered the wrong password too many times, please wait for %d minutes and try again"), int(LastSignWrongTimeDuration.Minutes())) } diff --git a/object/organization.go b/object/organization.go index 19ea752f..4cd5b8b2 100644 --- a/object/organization.go +++ b/object/organization.go @@ -204,14 +204,14 @@ func CheckAccountItemModifyRule(accountItem *AccountItem, user *User, lang strin switch accountItem.ModifyRule { case "Admin": if !(user.IsAdmin || user.IsGlobalAdmin) { - return false, fmt.Sprintf(i18n.Translate(lang, "OrgErr.OnlyAdmin"), accountItem.Name) + return false, fmt.Sprintf(i18n.Translate(lang, "organization:Only admin can modify the %s."), accountItem.Name) } case "Immutable": - return false, fmt.Sprintf(i18n.Translate(lang, "OrgErr.Immutable"), accountItem.Name) + return false, fmt.Sprintf(i18n.Translate(lang, "organization:The %s is immutable."), accountItem.Name) case "Self": break default: - return false, fmt.Sprintf(i18n.Translate(lang, "OrgErr.UnknownModifyRule"), accountItem.ModifyRule) + return false, fmt.Sprintf(i18n.Translate(lang, "organization:Unknown modify rule %s."), accountItem.ModifyRule) } return true, "" } diff --git a/object/provider.go b/object/provider.go index df18ebb2..d5125585 100644 --- a/object/provider.go +++ b/object/provider.go @@ -277,7 +277,7 @@ func GetCaptchaProviderByOwnerName(applicationId, lang string) (*Provider, error } if !existed { - return nil, fmt.Errorf(i18n.Translate(lang, "ProviderErr.DoNotExist"), applicationId) + return nil, fmt.Errorf(i18n.Translate(lang, "provider:the provider: %s does not exist"), applicationId) } return &provider, nil @@ -289,7 +289,7 @@ func GetCaptchaProviderByApplication(applicationId, isCurrentProvider, lang stri } application := GetApplication(applicationId) if application == nil || len(application.Providers) == 0 { - return nil, fmt.Errorf(i18n.Translate(lang, "ApplicationErr.InvalidID")) + return nil, fmt.Errorf(i18n.Translate(lang, "provider:Invalid application id")) } for _, provider := range application.Providers { if provider.Provider == nil { diff --git a/object/saml_sp.go b/object/saml_sp.go index 73a55562..3b9cab46 100644 --- a/object/saml_sp.go +++ b/object/saml_sp.go @@ -45,7 +45,7 @@ func ParseSamlResponse(samlResponse string, providerType string) (string, error) func GenerateSamlLoginUrl(id, relayState, lang string) (string, string, error) { provider := GetProvider(id) if provider.Category != "SAML" { - return "", "", fmt.Errorf(i18n.Translate(lang, "ProviderErr.CategoryNotSAML"), provider.Name) + return "", "", fmt.Errorf(i18n.Translate(lang, "saml_sp:provider %s's category is not SAML"), provider.Name) } sp, err := buildSp(provider, "") if err != nil { diff --git a/object/storage.go b/object/storage.go index 4a1fd5dd..77157c7e 100644 --- a/object/storage.go +++ b/object/storage.go @@ -130,13 +130,13 @@ func UploadFileSafe(provider *Provider, fullFilePath string, fileBuffer *bytes.B func DeleteFile(provider *Provider, objectKey string, lang string) error { // check fullFilePath is there security issue if strings.Contains(objectKey, "..") { - return fmt.Errorf(i18n.Translate(lang, "StorageErr.ObjectKeyNotAllowed"), objectKey) + return fmt.Errorf(i18n.Translate(lang, "storage:The objectKey: %s is not allowed"), objectKey) } endpoint := getProviderEndpoint(provider) storageProvider := storage.GetStorageProvider(provider.Type, provider.ClientId, provider.ClientSecret, provider.RegionId, provider.Bucket, endpoint) if storageProvider == nil { - return fmt.Errorf(i18n.Translate(lang, "ProviderErr.ProviderNotSupported"), provider.Type) + return fmt.Errorf(i18n.Translate(lang, "storage:The provider type: %s is not supported"), provider.Type) } if provider.Domain == "" { diff --git a/object/token.go b/object/token.go index e1bf6e42..578aca20 100644 --- a/object/token.go +++ b/object/token.go @@ -241,12 +241,12 @@ func GetTokenByTokenAndApplication(token string, application string) *Token { func CheckOAuthLogin(clientId string, responseType string, redirectUri string, scope string, state string, lang string) (string, *Application) { if responseType != "code" && responseType != "token" && responseType != "id_token" { - return fmt.Sprintf(i18n.Translate(lang, "ApplicationErr.GrantTypeNotSupport"), responseType), nil + return fmt.Sprintf(i18n.Translate(lang, "token:Grant_type: %s is not supported in this application"), responseType), nil } application := GetApplicationByClientId(clientId) if application == nil { - return i18n.Translate(lang, "TokenErr.InvalidClientId"), nil + return i18n.Translate(lang, "token:Invalid client_id"), nil } validUri := false @@ -257,7 +257,7 @@ func CheckOAuthLogin(clientId string, responseType string, redirectUri string, s } } if !validUri { - return fmt.Sprintf(i18n.Translate(lang, "TokenErr.RedirectURIDoNotExist"), redirectUri), application + return fmt.Sprintf(i18n.Translate(lang, "token:Redirect URI: %s doesn't exist in the allowed Redirect URI list"), redirectUri), application } // Mask application for /api/get-app-login @@ -269,7 +269,7 @@ func GetOAuthCode(userId string, clientId string, responseType string, redirectU user := GetUser(userId) if user == nil { return &Code{ - Message: fmt.Sprintf("The user: %s doesn't exist", userId), + Message: fmt.Sprintf("token:The user: %s doesn't exist", userId), Code: "", } } diff --git a/object/verification.go b/object/verification.go index 647b8e01..2f8f8396 100644 --- a/object/verification.go +++ b/object/verification.go @@ -153,7 +153,7 @@ func CheckVerificationCode(dest, code, lang string) string { record := getVerificationRecord(dest) if record == nil { - return i18n.Translate(lang, "PhoneErr.CodeNotSent") + return i18n.Translate(lang, "verification:Code has not been sent yet!") } timeout, err := conf.GetConfigInt64("verificationCodeTimeout") @@ -163,7 +163,7 @@ func CheckVerificationCode(dest, code, lang string) string { now := time.Now().Unix() if now-record.Time > timeout*60 { - return fmt.Sprintf(i18n.Translate(lang, "PhoneErr.CodeTimeOut"), timeout) + return fmt.Sprintf(i18n.Translate(lang, "verification:You should verify your code in %d min!"), timeout) } if record.Code != code {