feat(auth): add LDAP authentication support and related configurations (#13385)

* feat(auth): add LDAP authentication support and related configurations

* feat(ldap): implement LDAP synchronization features and enhance user import logic

* feat(auth): add authSource and authSourceStatus to user information

* feat(i18n): update LDAP synchronization error messages in multiple languages

* feat(i18n): update LDAP synchronization error messages in multiple languages

* feat(i18n): update LDAP synchronization error messages in multiple languages
This commit is contained in:
2026-07-28 14:20:42 +08:00
committed by GitHub
parent e2754b447d
commit cf37de66fc
34 changed files with 3949 additions and 11 deletions
+15 -5
View File
@@ -167,11 +167,7 @@ func CheckEntrance(entrance string) error {
}
func CheckPassword(priKey, password, passwordFromDB string) error {
privateKey, err := encrypt.ParseRSAPrivateKey(priKey)
if err != nil {
return err
}
loginPassword, err := encrypt.DecryptPassword(password, privateKey)
loginPassword, err := DecryptLoginPassword(priKey, password)
if err != nil {
return err
}
@@ -185,6 +181,18 @@ func CheckPassword(priKey, password, passwordFromDB string) error {
return nil
}
func DecryptLoginPassword(priKey, password string) (string, error) {
privateKey, err := encrypt.ParseRSAPrivateKey(priKey)
if err != nil {
return "", err
}
loginPassword, err := encrypt.DecryptPassword(password, privateKey)
if err != nil {
return "", err
}
return loginPassword, nil
}
func LoadMFA(req dto.MfaRequest) (mfa.Otp, error) {
settingRepo := repo.NewISettingRepo()
username, err := settingRepo.GetValueByKey("UserName")
@@ -248,6 +256,8 @@ func GetCurrentUserInfo() (*dto.CurrentUserInfo, error) {
info.MFAInterval, _ = strconv.Atoi(settingMap["MFAInterval"])
info.ApiKeyValidityTime, _ = strconv.Atoi(settingMap["ApiKeyValidityTime"])
info.Name = settingMap["UserName"]
info.AuthSource = "local"
info.AuthSourceStatus = "active"
info.Role = "ADMIN"
info.Permissions = []string{}
info.NodeRoles = []dto.CurrentUserNodeRole{}
+2
View File
@@ -65,6 +65,8 @@ type CurrentUserInfo struct {
MFAStatus string `json:"mfaStatus"`
MFAInterval int `json:"mfaInterval"`
ComplexitySetting string `json:"complexitySetting"`
AuthSource string `json:"authSource"`
AuthSourceStatus string `json:"authSourceStatus"`
ApiInterfaceStatus string `json:"apiInterfaceStatus"`
ApiKey string `json:"apiKey"`
+11
View File
@@ -199,6 +199,17 @@ var WebUrlMap = map[string]struct{}{
"/enterprise/users/list": {},
"/enterprise/users/roles": {},
"/enterprise/users/auth": {},
"/enterprise/users/auth/ldap": {},
"/enterprise/users/auth/passkey": {},
"/enterprise/users/auth/radius": {},
"/enterprise/users/auth/oidc": {},
"/enterprise/users/auth/saml2": {},
"/enterprise/users/auth/cas": {},
"/enterprise/users/auth/oauth2": {},
"/enterprise/users/auth/dingtalk": {},
"/enterprise/users/auth/feishu": {},
"/enterprise/users/auth/wecom": {},
"/enterprise/license": {},
"/enterprise/license-required": {},
"/enterprise/ops-report": {},
+3
View File
@@ -10,6 +10,7 @@ require (
github.com/gin-gonic/gin v1.12.0
github.com/glebarez/sqlite v1.11.0
github.com/go-gormigrate/gormigrate/v2 v2.1.6
github.com/go-ldap/ldap/v3 v3.4.13
github.com/go-playground/validator/v10 v10.30.3
github.com/go-resty/resty/v2 v2.17.2
github.com/go-webauthn/webauthn v0.17.4
@@ -43,6 +44,7 @@ require (
)
require (
github.com/Azure/go-ntlmssp v0.1.0 // indirect
github.com/KyleBanks/depth v1.2.1 // indirect
github.com/boombuler/barcode v1.1.0 // indirect
github.com/bytedance/gopkg v0.1.4 // indirect
@@ -57,6 +59,7 @@ require (
github.com/gabriel-vasile/mimetype v1.4.13 // indirect
github.com/gin-contrib/sse v1.1.1 // indirect
github.com/glebarez/go-sqlite v1.22.0 // indirect
github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/go-openapi/jsonpointer v0.23.0 // indirect
github.com/go-openapi/jsonreference v0.21.5 // indirect
+6
View File
@@ -1,5 +1,7 @@
github.com/1panel-dev/base64Captcha v1.3.8 h1:GbQ2IuGMp4ai4erpwf4BMjm5eLC8Efb+dATVwgpPIII=
github.com/1panel-dev/base64Captcha v1.3.8/go.mod h1:gVpwyGm9+g4rg3pXdYnsFAouP73qMOSBfnT3bxCFzco=
github.com/Azure/go-ntlmssp v0.1.0 h1:DjFo6YtWzNqNvQdrwEyr/e4nhU3vRiwenz5QX7sFz+A=
github.com/Azure/go-ntlmssp v0.1.0/go.mod h1:NYqdhxd/8aAct/s4qSYZEerdPuH1liG2/X9DiVTbhpk=
github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk=
github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc=
@@ -47,8 +49,12 @@ github.com/glebarez/go-sqlite v1.22.0 h1:uAcMJhaA6r3LHMTFgP0SifzgXg46yJkgxqyuyec
github.com/glebarez/go-sqlite v1.22.0/go.mod h1:PlBIdHe0+aUEFn+r2/uthrWq4FxbzugL0L8Li6yQJbc=
github.com/glebarez/sqlite v1.11.0 h1:wSG0irqzP6VurnMEpFGer5Li19RpIRi2qvQz++w0GMw=
github.com/glebarez/sqlite v1.11.0/go.mod h1:h8/o8j5wiAsqSPoWELDUdJXhjAhsVliSn7bWZjOhrgQ=
github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667 h1:BP4M0CvQ4S3TGls2FvczZtj5Re/2ZzkV9VwqPHH/3Bo=
github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
github.com/go-gormigrate/gormigrate/v2 v2.1.6 h1:VtX+l1Stj2v5RGubVQk0LS/8EPGXR+ldcOyCmlmKoyg=
github.com/go-gormigrate/gormigrate/v2 v2.1.6/go.mod h1:PZpedQc4tWaxn6kvXicwhinh3L0seLpMc5ReKRX5id4=
github.com/go-ldap/ldap/v3 v3.4.13 h1:+x1nG9h+MZN7h/lUi5Q3UZ0fJ1GyDQYbPvbuH38baDQ=
github.com/go-ldap/ldap/v3 v3.4.13/go.mod h1:LxsGZV6vbaK0sIvYfsv47rfh4ca0JXokCoKjZxsszv0=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-openapi/jsonpointer v0.23.0 h1:c25HFTJ6uWGmoe5BQI6p72p4o7KnlWYsy1MeFlAumsw=
+48
View File
@@ -424,3 +424,51 @@ ErrExpiredToken: 'Token expired. Reset and scan again.'
# command export
Name: "Name"
Command: "Command"
# LDAP
ErrLDAPConnectionTest: "LDAP connection test failed. Check the server address, bind account, and network settings."
LDAPConnectionTestSuccess: "LDAP connection test succeeded."
ErrLDAPDirectorySearch: "Failed to read LDAP users. Check the connection and search settings."
ErrLDAPConfigLoad: "Failed to load the LDAP configuration."
ErrLDAPConfigSave: "Failed to save the LDAP configuration."
ErrLDAPURLInvalid: "The LDAP server address must use ldap:// or ldaps:// and include a valid host."
ErrLDAPBindDNRequired: "The bind DN is required."
ErrLDAPBindPasswordRequired: "The bind password is required."
ErrLDAPUserOURequired: "The user OU is required."
ErrLDAPConnectTimeoutRange: "The connection timeout must be between 1 and 120 seconds."
ErrLDAPSearchPageSizeRange: "The LDAP query page size must be between 1 and 10000."
ErrLDAPResultPageSizeRange: "The result page size cannot exceed 200."
ErrLDAPAttributeMapOnlyName: "The attribute mapping supports only the name field."
ErrLDAPNameAttributeRequired: "The LDAP attribute mapped to name is required."
ErrLDAPAttributeNameInvalid: "The attribute mapping contains an invalid LDAP attribute name."
ErrLDAPUserFilterRequired: "The user filter is required."
ErrLDAPUserFilterInvalid: "The user filter is not a valid LDAP filter."
ErrLDAPAttributeMapObject: "The attribute mapping must be a valid JSON object."
ErrLDAPImportModeInvalid: "The import mode must be selected users or all users."
ErrLDAPImportSelectionRequired: "Select at least one LDAP user to import."
ErrLDAPImportSelectionInvalid: "The selected LDAP users are invalid or no longer exist. Read the directory again."
ErrLDAPConfigChanged: "The LDAP configuration has changed. Read the directory and preview the import again."
ErrLDAPRoleRequired: "Select a role for new LDAP users."
ErrLDAPImportPlanIncomplete: "An incomplete LDAP import plan cannot be executed."
ErrLDAPQueryTokenInvalid: "The LDAP query result has expired. Read the directory again."
ErrLDAPPlanTokenInvalid: "The LDAP import preview has expired. Preview the import again."
ErrLDAPOperationFailed: "The LDAP operation failed. Try again."
ErrLDAPEntryIdentityMissing: "The LDAP entry is missing a stable ID or username."
ErrLDAPDuplicateExternalID: "LDAP returned duplicate user IDs."
ErrLDAPUsernameConflict: "The username is already used by another user."
ErrLDAPUsernameSourceConflict: "The username is already used by a local user or another authentication source."
ErrLDAPUsernameConcurrentConflict: "The username was claimed by another user during import."
ErrLDAPLocalCredentialsReadonly: "LDAP usernames and passwords are managed by LDAP and cannot be changed locally."
ErrLDAPPasswordExpirationUnsupported: "LDAP users do not use the local password expiration policy."
ErrLDAPSyncSourceDisabled: "Enable AD/LDAP before enabling or running synchronization."
ErrLDAPSyncConfigSave: "Failed to save the LDAP synchronization settings."
ErrLDAPSyncSchedule: "Failed to update the LDAP synchronization schedule."
ErrLDAPSyncCronInvalid: "Enter a valid five-field Cron expression."
ErrLDAPSyncWeekdayInvalid: "Select a valid weekday."
ErrLDAPSyncCronRequired: "Enter a Cron expression."
ErrLDAPSyncScheduleTypeInvalid: "Select a valid synchronization schedule type."
ErrLDAPSyncTimeInvalid: "Enter a valid execution time."
ErrLDAPSyncRunning: "An LDAP synchronization task is already running."
ErrLDAPSyncDirectoryIncomplete: "LDAP returned an incomplete full query result. No user status was changed."
ErrLDAPSyncFailed: "LDAP user synchronization failed."
LDAPSyncSuccess: "LDAP user synchronization completed successfully."
+48
View File
@@ -424,3 +424,51 @@ ErrExpiredToken: 'El token ha expirado, por favor restablezca y escanee de nuevo
# exportación de comandos
Name: "Nombre"
Command: "Comando"
# LDAP
ErrLDAPConnectionTest: "La prueba de conexión LDAP falló. Compruebe la dirección del servidor, la cuenta de enlace y la configuración de red."
LDAPConnectionTestSuccess: "La prueba de conexión LDAP se realizó correctamente."
ErrLDAPDirectorySearch: "No se pudieron leer los usuarios LDAP. Compruebe la conexión y la configuración de búsqueda."
ErrLDAPConfigLoad: "No se pudo cargar la configuración LDAP."
ErrLDAPConfigSave: "No se pudo guardar la configuración LDAP."
ErrLDAPURLInvalid: "La dirección del servidor LDAP debe usar ldap:// o ldaps:// e incluir un host válido."
ErrLDAPBindDNRequired: "El DN de enlace es obligatorio."
ErrLDAPBindPasswordRequired: "La contraseña de enlace es obligatoria."
ErrLDAPUserOURequired: "La OU de usuarios es obligatoria."
ErrLDAPConnectTimeoutRange: "El tiempo de espera de conexión debe estar entre 1 y 120 segundos."
ErrLDAPSearchPageSizeRange: "El tamaño de página de la consulta LDAP debe estar entre 1 y 10000."
ErrLDAPResultPageSizeRange: "El tamaño de página de resultados no puede superar 200."
ErrLDAPAttributeMapOnlyName: "La asignación de atributos solo admite el campo name."
ErrLDAPNameAttributeRequired: "El atributo LDAP asignado a name es obligatorio."
ErrLDAPAttributeNameInvalid: "La asignación contiene un nombre de atributo LDAP no válido."
ErrLDAPUserFilterRequired: "El filtro de usuarios es obligatorio."
ErrLDAPUserFilterInvalid: "El filtro de usuarios no es un filtro LDAP válido."
ErrLDAPAttributeMapObject: "La asignación de atributos debe ser un objeto JSON válido."
ErrLDAPImportModeInvalid: "El modo de importación debe ser usuarios seleccionados o todos los usuarios."
ErrLDAPImportSelectionRequired: "Seleccione al menos un usuario LDAP para importar."
ErrLDAPImportSelectionInvalid: "Los usuarios LDAP seleccionados no son válidos o ya no existen. Vuelva a leer el directorio."
ErrLDAPConfigChanged: "La configuración LDAP ha cambiado. Vuelva a leer el directorio y a previsualizar la importación."
ErrLDAPRoleRequired: "Seleccione un rol para los nuevos usuarios LDAP."
ErrLDAPImportPlanIncomplete: "No se puede ejecutar un plan de importación LDAP incompleto."
ErrLDAPQueryTokenInvalid: "El resultado de la consulta LDAP ha caducado. Vuelva a leer el directorio."
ErrLDAPPlanTokenInvalid: "La vista previa de importación LDAP ha caducado. Vuelva a previsualizar la importación."
ErrLDAPOperationFailed: "La operación LDAP falló. Inténtelo de nuevo."
ErrLDAPEntryIdentityMissing: "A la entrada LDAP le falta un ID estable o un nombre de usuario."
ErrLDAPDuplicateExternalID: "LDAP devolvió IDs de usuario duplicados."
ErrLDAPUsernameConflict: "El nombre de usuario ya está siendo utilizado por otro usuario."
ErrLDAPUsernameSourceConflict: "El nombre de usuario ya está siendo utilizado por un usuario local u otra fuente de autenticación."
ErrLDAPUsernameConcurrentConflict: "Otro usuario ocupó el nombre de usuario durante la importación."
ErrLDAPLocalCredentialsReadonly: "Los nombres de usuario y contraseñas LDAP se administran en LDAP y no pueden modificarse localmente."
ErrLDAPPasswordExpirationUnsupported: "Los usuarios LDAP no utilizan la política local de caducidad de contraseñas."
ErrLDAPSyncSourceDisabled: "Habilite AD/LDAP antes de activar o ejecutar la sincronización."
ErrLDAPSyncConfigSave: "No se pudo guardar la configuración de sincronización LDAP."
ErrLDAPSyncSchedule: "No se pudo actualizar la programación de sincronización LDAP."
ErrLDAPSyncCronInvalid: "Introduzca una expresión Cron válida de cinco campos."
ErrLDAPSyncWeekdayInvalid: "Seleccione un día de la semana válido."
ErrLDAPSyncCronRequired: "Introduzca una expresión Cron."
ErrLDAPSyncScheduleTypeInvalid: "Seleccione un tipo de programación de sincronización válido."
ErrLDAPSyncTimeInvalid: "Introduzca una hora de ejecución válida."
ErrLDAPSyncRunning: "Ya hay una tarea de sincronización LDAP en ejecución."
ErrLDAPSyncDirectoryIncomplete: "LDAP devolvió un resultado incompleto de la consulta completa. No se modificó el estado de ningún usuario."
ErrLDAPSyncFailed: "La sincronización de usuarios LDAP falló."
LDAPSyncSuccess: "La sincronización de usuarios LDAP se completó correctamente."
+48
View File
@@ -424,3 +424,51 @@ ErrExpiredToken: 'توکن منقضی شده است. بازنشانی کرده
# خروجی فرمان
Name: "نام"
Command: "دستور"
# LDAP
ErrLDAPConnectionTest: "آزمایش اتصال LDAP ناموفق بود. نشانی سرور، حساب اتصال و تنظیمات شبکه را بررسی کنید."
LDAPConnectionTestSuccess: "آزمایش اتصال LDAP با موفقیت انجام شد."
ErrLDAPDirectorySearch: "خواندن کاربران LDAP ناموفق بود. تنظیمات اتصال و جستجو را بررسی کنید."
ErrLDAPConfigLoad: "بارگذاری پیکربندی LDAP ناموفق بود."
ErrLDAPConfigSave: "ذخیره پیکربندی LDAP ناموفق بود."
ErrLDAPURLInvalid: "نشانی سرور LDAP باید از ldap:// یا ldaps:// استفاده کند و شامل میزبان معتبر باشد."
ErrLDAPBindDNRequired: "DN اتصال الزامی است."
ErrLDAPBindPasswordRequired: "رمز عبور اتصال الزامی است."
ErrLDAPUserOURequired: "OU کاربران الزامی است."
ErrLDAPConnectTimeoutRange: "مهلت اتصال باید بین ۱ تا ۱۲۰ ثانیه باشد."
ErrLDAPSearchPageSizeRange: "اندازه صفحه پرس‌وجوی LDAP باید بین ۱ تا ۱۰۰۰۰ باشد."
ErrLDAPResultPageSizeRange: "اندازه صفحه نتایج نمی‌تواند بیشتر از ۲۰۰ باشد."
ErrLDAPAttributeMapOnlyName: "نگاشت ویژگی فقط از فیلد name پشتیبانی می‌کند."
ErrLDAPNameAttributeRequired: "ویژگی LDAP نگاشت‌شده به name الزامی است."
ErrLDAPAttributeNameInvalid: "نگاشت ویژگی شامل نام ویژگی LDAP نامعتبر است."
ErrLDAPUserFilterRequired: "فیلتر کاربر الزامی است."
ErrLDAPUserFilterInvalid: "فیلتر کاربر یک فیلتر LDAP معتبر نیست."
ErrLDAPAttributeMapObject: "نگاشت ویژگی باید یک شیء JSON معتبر باشد."
ErrLDAPImportModeInvalid: "حالت درون‌ریزی باید کاربران انتخاب‌شده یا همه کاربران باشد."
ErrLDAPImportSelectionRequired: "حداقل یک کاربر LDAP را برای درون‌ریزی انتخاب کنید."
ErrLDAPImportSelectionInvalid: "کاربران LDAP انتخاب‌شده نامعتبرند یا دیگر وجود ندارند. فهرست را دوباره بخوانید."
ErrLDAPConfigChanged: "پیکربندی LDAP تغییر کرده است. فهرست را دوباره بخوانید و پیش‌نمایش درون‌ریزی را تکرار کنید."
ErrLDAPRoleRequired: "برای کاربران جدید LDAP یک نقش انتخاب کنید."
ErrLDAPImportPlanIncomplete: "طرح ناقص درون‌ریزی LDAP قابل اجرا نیست."
ErrLDAPQueryTokenInvalid: "نتیجه پرس‌وجوی LDAP منقضی شده است. فهرست را دوباره بخوانید."
ErrLDAPPlanTokenInvalid: "پیش‌نمایش درون‌ریزی LDAP منقضی شده است. دوباره پیش‌نمایش بگیرید."
ErrLDAPOperationFailed: "عملیات LDAP ناموفق بود. دوباره تلاش کنید."
ErrLDAPEntryIdentityMissing: "ورودی LDAP فاقد شناسه پایدار یا نام کاربری است."
ErrLDAPDuplicateExternalID: "LDAP شناسه‌های کاربری تکراری برگرداند."
ErrLDAPUsernameConflict: "نام کاربری قبلاً توسط کاربر دیگری استفاده شده است."
ErrLDAPUsernameSourceConflict: "نام کاربری قبلاً توسط کاربر محلی یا منبع احراز هویت دیگری استفاده شده است."
ErrLDAPUsernameConcurrentConflict: "هنگام درون‌ریزی، نام کاربری توسط کاربر دیگری گرفته شد."
ErrLDAPLocalCredentialsReadonly: "نام کاربری و رمز عبور LDAP توسط LDAP مدیریت می‌شوند و به‌صورت محلی قابل تغییر نیستند."
ErrLDAPPasswordExpirationUnsupported: "کاربران LDAP از سیاست محلی انقضای رمز عبور استفاده نمی‌کنند."
ErrLDAPSyncSourceDisabled: "پیش از فعال‌سازی یا اجرای همگام‌سازی، AD/LDAP را فعال کنید."
ErrLDAPSyncConfigSave: "ذخیره تنظیمات همگام‌سازی LDAP ناموفق بود."
ErrLDAPSyncSchedule: "به‌روزرسانی زمان‌بندی همگام‌سازی LDAP ناموفق بود."
ErrLDAPSyncCronInvalid: "یک عبارت Cron معتبر پنج‌بخشی وارد کنید."
ErrLDAPSyncWeekdayInvalid: "یک روز معتبر از هفته را انتخاب کنید."
ErrLDAPSyncCronRequired: "یک عبارت Cron وارد کنید."
ErrLDAPSyncScheduleTypeInvalid: "یک نوع زمان‌بندی معتبر برای همگام‌سازی انتخاب کنید."
ErrLDAPSyncTimeInvalid: "یک زمان اجرای معتبر وارد کنید."
ErrLDAPSyncRunning: "یک وظیفه همگام‌سازی LDAP در حال اجرا است."
ErrLDAPSyncDirectoryIncomplete: "LDAP نتیجه ناقصی از پرس‌وجوی کامل برگرداند. وضعیت هیچ کاربری تغییر نکرد."
ErrLDAPSyncFailed: "همگام‌سازی کاربران LDAP ناموفق بود."
LDAPSyncSuccess: "همگام‌سازی کاربران LDAP با موفقیت انجام شد."
+48
View File
@@ -424,3 +424,51 @@ ErrExpiredToken: 'トークンの有効期限が切れました。リセット
# コマンドエクスポート
Name: "名前"
Command: "コマンド"
# LDAP
ErrLDAPConnectionTest: "LDAP 接続テストに失敗しました。サーバーアドレス、バインドアカウント、ネットワーク設定を確認してください。"
LDAPConnectionTestSuccess: "LDAP 接続テストに成功しました。"
ErrLDAPDirectorySearch: "LDAP ユーザーの読み取りに失敗しました。接続と検索設定を確認してください。"
ErrLDAPConfigLoad: "LDAP 設定の読み込みに失敗しました。"
ErrLDAPConfigSave: "LDAP 設定の保存に失敗しました。"
ErrLDAPURLInvalid: "LDAP サーバーアドレスには ldap:// または ldaps:// を使用し、有効なホストを含める必要があります。"
ErrLDAPBindDNRequired: "バインド DN は必須です。"
ErrLDAPBindPasswordRequired: "バインドパスワードは必須です。"
ErrLDAPUserOURequired: "ユーザー OU は必須です。"
ErrLDAPConnectTimeoutRange: "接続タイムアウトは 1~120 秒の範囲で指定してください。"
ErrLDAPSearchPageSizeRange: "LDAP クエリのページサイズは 1~10000 の範囲で指定してください。"
ErrLDAPResultPageSizeRange: "結果のページサイズは 200 以下にしてください。"
ErrLDAPAttributeMapOnlyName: "属性マッピングでは name フィールドのみサポートされます。"
ErrLDAPNameAttributeRequired: "name にマッピングする LDAP 属性は必須です。"
ErrLDAPAttributeNameInvalid: "属性マッピングに無効な LDAP 属性名が含まれています。"
ErrLDAPUserFilterRequired: "ユーザーフィルターは必須です。"
ErrLDAPUserFilterInvalid: "ユーザーフィルターが有効な LDAP フィルターではありません。"
ErrLDAPAttributeMapObject: "属性マッピングは有効な JSON オブジェクトである必要があります。"
ErrLDAPImportModeInvalid: "インポートモードは、選択したユーザーまたはすべてのユーザーである必要があります。"
ErrLDAPImportSelectionRequired: "インポートする LDAP ユーザーを 1 人以上選択してください。"
ErrLDAPImportSelectionInvalid: "選択した LDAP ユーザーが無効か、存在しません。ディレクトリを再度読み取ってください。"
ErrLDAPConfigChanged: "LDAP 設定が変更されました。ディレクトリを再度読み取り、インポートを再プレビューしてください。"
ErrLDAPRoleRequired: "新しい LDAP ユーザーのロールを選択してください。"
ErrLDAPImportPlanIncomplete: "不完全な LDAP インポートプランは実行できません。"
ErrLDAPQueryTokenInvalid: "LDAP クエリ結果の有効期限が切れました。ディレクトリを再度読み取ってください。"
ErrLDAPPlanTokenInvalid: "LDAP インポートプレビューの有効期限が切れました。再度プレビューしてください。"
ErrLDAPOperationFailed: "LDAP 操作に失敗しました。再試行してください。"
ErrLDAPEntryIdentityMissing: "LDAP エントリに安定した ID またはユーザー名がありません。"
ErrLDAPDuplicateExternalID: "LDAP から重複したユーザー ID が返されました。"
ErrLDAPUsernameConflict: "このユーザー名は別のユーザーが既に使用しています。"
ErrLDAPUsernameSourceConflict: "このユーザー名はローカルユーザーまたは別の認証ソースが既に使用しています。"
ErrLDAPUsernameConcurrentConflict: "インポート中に別のユーザーがこのユーザー名を使用しました。"
ErrLDAPLocalCredentialsReadonly: "LDAP のユーザー名とパスワードは LDAP で管理されるため、ローカルでは変更できません。"
ErrLDAPPasswordExpirationUnsupported: "LDAP ユーザーにはローカルのパスワード有効期限ポリシーは適用されません。"
ErrLDAPSyncSourceDisabled: "同期を有効化または実行する前に、AD/LDAP を有効にしてください。"
ErrLDAPSyncConfigSave: "LDAP 同期設定の保存に失敗しました。"
ErrLDAPSyncSchedule: "LDAP 同期スケジュールの更新に失敗しました。"
ErrLDAPSyncCronInvalid: "有効な 5 フィールドの Cron 式を入力してください。"
ErrLDAPSyncWeekdayInvalid: "有効な曜日を選択してください。"
ErrLDAPSyncCronRequired: "Cron 式を入力してください。"
ErrLDAPSyncScheduleTypeInvalid: "有効な同期スケジュールの種類を選択してください。"
ErrLDAPSyncTimeInvalid: "有効な実行時刻を入力してください。"
ErrLDAPSyncRunning: "LDAP 同期タスクはすでに実行中です。"
ErrLDAPSyncDirectoryIncomplete: "LDAP の全件クエリ結果が不完全です。ユーザーの状態は変更されませんでした。"
ErrLDAPSyncFailed: "LDAP ユーザーの同期に失敗しました。"
LDAPSyncSuccess: "LDAP ユーザーの同期が正常に完了しました。"
+48
View File
@@ -424,3 +424,51 @@ ErrExpiredToken: '토큰이 만료되었습니다. 재설정 후 다시 스캔
# 명령 내보내기
Name: "이름"
Command: "명령어"
# LDAP
ErrLDAPConnectionTest: "LDAP 연결 테스트에 실패했습니다. 서버 주소, 바인드 계정 및 네트워크 설정을 확인하세요."
LDAPConnectionTestSuccess: "LDAP 연결 테스트에 성공했습니다."
ErrLDAPDirectorySearch: "LDAP 사용자를 읽지 못했습니다. 연결 및 검색 설정을 확인하세요."
ErrLDAPConfigLoad: "LDAP 설정을 불러오지 못했습니다."
ErrLDAPConfigSave: "LDAP 설정을 저장하지 못했습니다."
ErrLDAPURLInvalid: "LDAP 서버 주소는 ldap:// 또는 ldaps://를 사용하고 유효한 호스트를 포함해야 합니다."
ErrLDAPBindDNRequired: "바인드 DN은 필수입니다."
ErrLDAPBindPasswordRequired: "바인드 비밀번호는 필수입니다."
ErrLDAPUserOURequired: "사용자 OU는 필수입니다."
ErrLDAPConnectTimeoutRange: "연결 시간 제한은 1초에서 120초 사이여야 합니다."
ErrLDAPSearchPageSizeRange: "LDAP 조회 페이지 크기는 1에서 10000 사이여야 합니다."
ErrLDAPResultPageSizeRange: "결과 페이지 크기는 200을 초과할 수 없습니다."
ErrLDAPAttributeMapOnlyName: "속성 매핑은 name 필드만 지원합니다."
ErrLDAPNameAttributeRequired: "name에 매핑할 LDAP 속성은 필수입니다."
ErrLDAPAttributeNameInvalid: "속성 매핑에 잘못된 LDAP 속성 이름이 포함되어 있습니다."
ErrLDAPUserFilterRequired: "사용자 필터는 필수입니다."
ErrLDAPUserFilterInvalid: "사용자 필터가 올바른 LDAP 필터가 아닙니다."
ErrLDAPAttributeMapObject: "속성 매핑은 올바른 JSON 객체여야 합니다."
ErrLDAPImportModeInvalid: "가져오기 모드는 선택한 사용자 또는 모든 사용자여야 합니다."
ErrLDAPImportSelectionRequired: "가져올 LDAP 사용자를 한 명 이상 선택하세요."
ErrLDAPImportSelectionInvalid: "선택한 LDAP 사용자가 잘못되었거나 더 이상 존재하지 않습니다. 디렉터리를 다시 읽으세요."
ErrLDAPConfigChanged: "LDAP 설정이 변경되었습니다. 디렉터리를 다시 읽고 가져오기를 다시 미리 보세요."
ErrLDAPRoleRequired: "새 LDAP 사용자의 역할을 선택하세요."
ErrLDAPImportPlanIncomplete: "완전하지 않은 LDAP 가져오기 계획은 실행할 수 없습니다."
ErrLDAPQueryTokenInvalid: "LDAP 조회 결과가 만료되었습니다. 디렉터리를 다시 읽으세요."
ErrLDAPPlanTokenInvalid: "LDAP 가져오기 미리 보기가 만료되었습니다. 다시 미리 보세요."
ErrLDAPOperationFailed: "LDAP 작업에 실패했습니다. 다시 시도하세요."
ErrLDAPEntryIdentityMissing: "LDAP 항목에 안정적인 ID 또는 사용자 이름이 없습니다."
ErrLDAPDuplicateExternalID: "LDAP가 중복된 사용자 ID를 반환했습니다."
ErrLDAPUsernameConflict: "이 사용자 이름은 다른 사용자가 이미 사용 중입니다."
ErrLDAPUsernameSourceConflict: "이 사용자 이름은 로컬 사용자 또는 다른 인증 소스가 이미 사용 중입니다."
ErrLDAPUsernameConcurrentConflict: "가져오는 동안 다른 사용자가 이 사용자 이름을 사용했습니다."
ErrLDAPLocalCredentialsReadonly: "LDAP 사용자 이름과 비밀번호는 LDAP에서 관리되므로 로컬에서 변경할 수 없습니다."
ErrLDAPPasswordExpirationUnsupported: "LDAP 사용자는 로컬 비밀번호 만료 정책을 사용하지 않습니다."
ErrLDAPSyncSourceDisabled: "동기화를 활성화하거나 실행하기 전에 AD/LDAP를 활성화하세요."
ErrLDAPSyncConfigSave: "LDAP 동기화 설정을 저장하지 못했습니다."
ErrLDAPSyncSchedule: "LDAP 동기화 일정을 업데이트하지 못했습니다."
ErrLDAPSyncCronInvalid: "유효한 5필드 Cron 표현식을 입력하세요."
ErrLDAPSyncWeekdayInvalid: "유효한 요일을 선택하세요."
ErrLDAPSyncCronRequired: "Cron 표현식을 입력하세요."
ErrLDAPSyncScheduleTypeInvalid: "유효한 동기화 일정 유형을 선택하세요."
ErrLDAPSyncTimeInvalid: "유효한 실행 시간을 입력하세요."
ErrLDAPSyncRunning: "LDAP 동기화 작업이 이미 실행 중입니다."
ErrLDAPSyncDirectoryIncomplete: "LDAP 전체 조회 결과가 불완전하여 사용자 상태를 변경하지 않았습니다."
ErrLDAPSyncFailed: "LDAP 사용자 동기화에 실패했습니다."
LDAPSyncSuccess: "LDAP 사용자 동기화가 완료되었습니다."
+48
View File
@@ -424,3 +424,51 @@ ErrExpiredToken: 'ໂທເຄັນໝົດອາຍຸແລ້ວ. ກະລ
# command export
Name: "ຊື່"
Command: "ຄຳສັ່ງ"
# LDAP
ErrLDAPConnectionTest: "ການທົດສອບການເຊື່ອມຕໍ່ LDAP ບໍ່ສຳເລັດ. ກະລຸນາກວດສອບທີ່ຢູ່ເຊີບເວີ, ບັນຊີຜູກມັດ ແລະການຕັ້ງຄ່າເຄືອຂ່າຍ."
LDAPConnectionTestSuccess: "ການທົດສອບການເຊື່ອມຕໍ່ LDAP ສຳເລັດແລ້ວ."
ErrLDAPDirectorySearch: "ອ່ານຜູ້ໃຊ້ LDAP ບໍ່ສຳເລັດ. ກະລຸນາກວດສອບການເຊື່ອມຕໍ່ ແລະການຕັ້ງຄ່າການຄົ້ນຫາ."
ErrLDAPConfigLoad: "ໂຫຼດການຕັ້ງຄ່າ LDAP ບໍ່ສຳເລັດ."
ErrLDAPConfigSave: "ບັນທຶກການຕັ້ງຄ່າ LDAP ບໍ່ສຳເລັດ."
ErrLDAPURLInvalid: "ທີ່ຢູ່ເຊີບເວີ LDAP ຕ້ອງໃຊ້ ldap:// ຫຼື ldaps:// ແລະມີໂຮສທີ່ຖືກຕ້ອງ."
ErrLDAPBindDNRequired: "ຈຳເປັນຕ້ອງມີ Bind DN."
ErrLDAPBindPasswordRequired: "ຈຳເປັນຕ້ອງມີລະຫັດຜ່ານສຳລັບການຜູກມັດ."
ErrLDAPUserOURequired: "ຈຳເປັນຕ້ອງມີ OU ຂອງຜູ້ໃຊ້."
ErrLDAPConnectTimeoutRange: "ໄລຍະເວລາໝົດການເຊື່ອມຕໍ່ຕ້ອງຢູ່ລະຫວ່າງ 1 ຫາ 120 ວິນາທີ."
ErrLDAPSearchPageSizeRange: "ຂະໜາດໜ້າການສອບຖາມ LDAP ຕ້ອງຢູ່ລະຫວ່າງ 1 ຫາ 10000."
ErrLDAPResultPageSizeRange: "ຂະໜາດໜ້າຜົນລັບຕ້ອງບໍ່ເກີນ 200."
ErrLDAPAttributeMapOnlyName: "ການສ້າງແຜນທີ່ຄຸນສົມບັດຮອງຮັບສະເພາະຊ່ອງຂໍ້ມູນ name."
ErrLDAPNameAttributeRequired: "ຈຳເປັນຕ້ອງລະບຸຄຸນສົມບັດ LDAP ທີ່ຈັບຄູ່ກັບ name."
ErrLDAPAttributeNameInvalid: "ການສ້າງແຜນທີ່ຄຸນສົມບັດມີຊື່ຄຸນສົມບັດ LDAP ທີ່ບໍ່ຖືກຕ້ອງ."
ErrLDAPUserFilterRequired: "ຈຳເປັນຕ້ອງມີຕົວກອງຜູ້ໃຊ້."
ErrLDAPUserFilterInvalid: "ຕົວກອງຜູ້ໃຊ້ບໍ່ແມ່ນຕົວກອງ LDAP ທີ່ຖືກຕ້ອງ."
ErrLDAPAttributeMapObject: "ການສ້າງແຜນທີ່ຄຸນສົມບັດຕ້ອງເປັນວັດຖຸ JSON ທີ່ຖືກຕ້ອງ."
ErrLDAPImportModeInvalid: "ຮູບແບບການນຳເຂົ້າຕ້ອງເປັນຜູ້ໃຊ້ທີ່ເລືອກ ຫຼືຜູ້ໃຊ້ທັງໝົດ."
ErrLDAPImportSelectionRequired: "ກະລຸນາເລືອກຜູ້ໃຊ້ LDAP ຢ່າງໜ້ອຍໜຶ່ງຄົນເພື່ອນຳເຂົ້າ."
ErrLDAPImportSelectionInvalid: "ຜູ້ໃຊ້ LDAP ທີ່ເລືອກບໍ່ຖືກຕ້ອງ ຫຼືບໍ່ມີຢູ່ແລ້ວ. ກະລຸນາອ່ານໄດເລກະທໍລີອີກຄັ້ງ."
ErrLDAPConfigChanged: "ການຕັ້ງຄ່າ LDAP ມີການປ່ຽນແປງ. ກະລຸນາອ່ານໄດເລກະທໍລີ ແລະເບິ່ງຕົວຢ່າງການນຳເຂົ້າອີກຄັ້ງ."
ErrLDAPRoleRequired: "ກະລຸນາເລືອກບົດບາດສຳລັບຜູ້ໃຊ້ LDAP ໃໝ່."
ErrLDAPImportPlanIncomplete: "ບໍ່ສາມາດດຳເນີນແຜນການນຳເຂົ້າ LDAP ທີ່ບໍ່ຄົບຖ້ວນໄດ້."
ErrLDAPQueryTokenInvalid: "ຜົນການສອບຖາມ LDAP ໝົດອາຍຸແລ້ວ. ກະລຸນາອ່ານໄດເລກະທໍລີອີກຄັ້ງ."
ErrLDAPPlanTokenInvalid: "ຕົວຢ່າງການນຳເຂົ້າ LDAP ໝົດອາຍຸແລ້ວ. ກະລຸນາເບິ່ງຕົວຢ່າງການນຳເຂົ້າອີກຄັ້ງ."
ErrLDAPOperationFailed: "ການດຳເນີນງານ LDAP ບໍ່ສຳເລັດ. ກະລຸນາລອງໃໝ່."
ErrLDAPEntryIdentityMissing: "ລາຍການ LDAP ຂາດ ID ທີ່ຄົງທີ່ ຫຼືຊື່ຜູ້ໃຊ້."
ErrLDAPDuplicateExternalID: "LDAP ສົ່ງຄືນ ID ຜູ້ໃຊ້ທີ່ຊ້ຳກັນ."
ErrLDAPUsernameConflict: "ຊື່ຜູ້ໃຊ້ນີ້ຖືກໃຊ້ໂດຍຜູ້ໃຊ້ອື່ນແລ້ວ."
ErrLDAPUsernameSourceConflict: "ຊື່ຜູ້ໃຊ້ນີ້ຖືກໃຊ້ໂດຍຜູ້ໃຊ້ພາຍໃນ ຫຼືແຫຼ່ງການພິສູດຢືນຢັນອື່ນແລ້ວ."
ErrLDAPUsernameConcurrentConflict: "ຊື່ຜູ້ໃຊ້ນີ້ຖືກຜູ້ໃຊ້ອື່ນນຳໄປໃຊ້ໃນລະຫວ່າງການນຳເຂົ້າ."
ErrLDAPLocalCredentialsReadonly: "ຊື່ຜູ້ໃຊ້ ແລະລະຫັດຜ່ານ LDAP ຖືກຈັດການໂດຍ LDAP ແລະບໍ່ສາມາດປ່ຽນແປງພາຍໃນໄດ້."
ErrLDAPPasswordExpirationUnsupported: "ຜູ້ໃຊ້ LDAP ບໍ່ໃຊ້ນະໂຍບາຍການໝົດອາຍຸລະຫັດຜ່ານພາຍໃນ."
ErrLDAPSyncSourceDisabled: "ກະລຸນາເປີດໃຊ້ AD/LDAP ກ່ອນເປີດໃຊ້ ຫຼື ດຳເນີນການຊິງຂໍ້ມູນ."
ErrLDAPSyncConfigSave: "ບັນທຶກການຕັ້ງຄ່າການຊິງຂໍ້ມູນ LDAP ບໍ່ສຳເລັດ."
ErrLDAPSyncSchedule: "ອັບເດດຕາຕະລາງການຊິງຂໍ້ມູນ LDAP ບໍ່ສຳເລັດ."
ErrLDAPSyncCronInvalid: "ກະລຸນາປ້ອນນິພົດ Cron ແບບ 5 ຊ່ອງທີ່ຖືກຕ້ອງ."
ErrLDAPSyncWeekdayInvalid: "ກະລຸນາເລືອກມື້ໃນອາທິດທີ່ຖືກຕ້ອງ."
ErrLDAPSyncCronRequired: "ກະລຸນາປ້ອນນິພົດ Cron."
ErrLDAPSyncScheduleTypeInvalid: "ກະລຸນາເລືອກປະເພດຕາຕະລາງການຊິງຂໍ້ມູນທີ່ຖືກຕ້ອງ."
ErrLDAPSyncTimeInvalid: "ກະລຸນາປ້ອນເວລາດຳເນີນການທີ່ຖືກຕ້ອງ."
ErrLDAPSyncRunning: "ມີວຽກຊິງຂໍ້ມູນ LDAP ກຳລັງເຮັດວຽກຢູ່ແລ້ວ."
ErrLDAPSyncDirectoryIncomplete: "LDAP ສົ່ງຄືນຜົນການຄົ້ນຫາທັງໝົດທີ່ບໍ່ຄົບຖ້ວນ. ບໍ່ມີການປ່ຽນແປງສະຖານະຜູ້ໃຊ້."
ErrLDAPSyncFailed: "ການຊິງຂໍ້ມູນຜູ້ໃຊ້ LDAP ບໍ່ສຳເລັດ."
LDAPSyncSuccess: "ການຊິງຂໍ້ມູນຜູ້ໃຊ້ LDAP ສຳເລັດແລ້ວ."
+48
View File
@@ -424,3 +424,51 @@ ErrExpiredToken: "Token telah tamat tempoh, sila tetapkan semula dan imbas semul
# eksport perintah
Name: "Nama"
Command: "Arahan"
# LDAP
ErrLDAPConnectionTest: "Ujian sambungan LDAP gagal. Semak alamat pelayan, akaun pengikatan dan tetapan rangkaian."
LDAPConnectionTestSuccess: "Ujian sambungan LDAP berjaya."
ErrLDAPDirectorySearch: "Gagal membaca pengguna LDAP. Semak tetapan sambungan dan carian."
ErrLDAPConfigLoad: "Gagal memuatkan konfigurasi LDAP."
ErrLDAPConfigSave: "Gagal menyimpan konfigurasi LDAP."
ErrLDAPURLInvalid: "Alamat pelayan LDAP mesti menggunakan ldap:// atau ldaps:// dan mengandungi hos yang sah."
ErrLDAPBindDNRequired: "DN pengikatan diperlukan."
ErrLDAPBindPasswordRequired: "Kata laluan pengikatan diperlukan."
ErrLDAPUserOURequired: "OU pengguna diperlukan."
ErrLDAPConnectTimeoutRange: "Had masa sambungan mestilah antara 1 hingga 120 saat."
ErrLDAPSearchPageSizeRange: "Saiz halaman pertanyaan LDAP mestilah antara 1 hingga 10000."
ErrLDAPResultPageSizeRange: "Saiz halaman hasil tidak boleh melebihi 200."
ErrLDAPAttributeMapOnlyName: "Pemetaan atribut hanya menyokong medan name."
ErrLDAPNameAttributeRequired: "Atribut LDAP yang dipetakan kepada name diperlukan."
ErrLDAPAttributeNameInvalid: "Pemetaan atribut mengandungi nama atribut LDAP yang tidak sah."
ErrLDAPUserFilterRequired: "Penapis pengguna diperlukan."
ErrLDAPUserFilterInvalid: "Penapis pengguna bukan penapis LDAP yang sah."
ErrLDAPAttributeMapObject: "Pemetaan atribut mestilah objek JSON yang sah."
ErrLDAPImportModeInvalid: "Mod import mestilah pengguna terpilih atau semua pengguna."
ErrLDAPImportSelectionRequired: "Pilih sekurang-kurangnya seorang pengguna LDAP untuk diimport."
ErrLDAPImportSelectionInvalid: "Pengguna LDAP yang dipilih tidak sah atau tidak lagi wujud. Baca semula direktori."
ErrLDAPConfigChanged: "Konfigurasi LDAP telah berubah. Baca semula direktori dan pratonton import sekali lagi."
ErrLDAPRoleRequired: "Pilih peranan untuk pengguna LDAP baharu."
ErrLDAPImportPlanIncomplete: "Pelan import LDAP yang tidak lengkap tidak boleh dilaksanakan."
ErrLDAPQueryTokenInvalid: "Hasil pertanyaan LDAP telah tamat tempoh. Baca semula direktori."
ErrLDAPPlanTokenInvalid: "Pratonton import LDAP telah tamat tempoh. Pratonton semula import."
ErrLDAPOperationFailed: "Operasi LDAP gagal. Cuba lagi."
ErrLDAPEntryIdentityMissing: "Entri LDAP tiada ID stabil atau nama pengguna."
ErrLDAPDuplicateExternalID: "LDAP mengembalikan ID pengguna yang berulang."
ErrLDAPUsernameConflict: "Nama pengguna telah digunakan oleh pengguna lain."
ErrLDAPUsernameSourceConflict: "Nama pengguna telah digunakan oleh pengguna tempatan atau sumber pengesahan lain."
ErrLDAPUsernameConcurrentConflict: "Nama pengguna telah diambil oleh pengguna lain semasa import."
ErrLDAPLocalCredentialsReadonly: "Nama pengguna dan kata laluan LDAP diurus oleh LDAP dan tidak boleh diubah secara tempatan."
ErrLDAPPasswordExpirationUnsupported: "Pengguna LDAP tidak menggunakan dasar tamat tempoh kata laluan tempatan."
ErrLDAPSyncSourceDisabled: "Dayakan AD/LDAP sebelum mendayakan atau menjalankan penyegerakan."
ErrLDAPSyncConfigSave: "Gagal menyimpan tetapan penyegerakan LDAP."
ErrLDAPSyncSchedule: "Gagal mengemas kini jadual penyegerakan LDAP."
ErrLDAPSyncCronInvalid: "Masukkan ungkapan Cron lima medan yang sah."
ErrLDAPSyncWeekdayInvalid: "Pilih hari dalam minggu yang sah."
ErrLDAPSyncCronRequired: "Masukkan ungkapan Cron."
ErrLDAPSyncScheduleTypeInvalid: "Pilih jenis jadual penyegerakan yang sah."
ErrLDAPSyncTimeInvalid: "Masukkan masa pelaksanaan yang sah."
ErrLDAPSyncRunning: "Tugas penyegerakan LDAP sedang berjalan."
ErrLDAPSyncDirectoryIncomplete: "LDAP mengembalikan hasil pertanyaan penuh yang tidak lengkap. Tiada status pengguna diubah."
ErrLDAPSyncFailed: "Penyegerakan pengguna LDAP gagal."
LDAPSyncSuccess: "Penyegerakan pengguna LDAP berjaya diselesaikan."
+50 -2
View File
@@ -422,5 +422,53 @@ ErrInvalidToken: 'Token inválido, por favor, reinicie e escaneie novamente.'
ErrExpiredToken: 'O token expirou, por favor, reinicie e escaneie novamente.'
# exportação de comandos
Name: "Название"
Command: "Команда"
Name: "Nome"
Command: "Comando"
# LDAP
ErrLDAPConnectionTest: "Falha no teste de conexão LDAP. Verifique o endereço do servidor, a conta de vinculação e as configurações de rede."
LDAPConnectionTestSuccess: "Teste de conexão LDAP concluído com sucesso."
ErrLDAPDirectorySearch: "Falha ao ler os usuários LDAP. Verifique as configurações de conexão e pesquisa."
ErrLDAPConfigLoad: "Falha ao carregar a configuração LDAP."
ErrLDAPConfigSave: "Falha ao salvar a configuração LDAP."
ErrLDAPURLInvalid: "O endereço do servidor LDAP deve usar ldap:// ou ldaps:// e incluir um host válido."
ErrLDAPBindDNRequired: "O DN de vinculação é obrigatório."
ErrLDAPBindPasswordRequired: "A senha de vinculação é obrigatória."
ErrLDAPUserOURequired: "A OU de usuários é obrigatória."
ErrLDAPConnectTimeoutRange: "O tempo limite da conexão deve estar entre 1 e 120 segundos."
ErrLDAPSearchPageSizeRange: "O tamanho da página da consulta LDAP deve estar entre 1 e 10000."
ErrLDAPResultPageSizeRange: "O tamanho da página de resultados não pode exceder 200."
ErrLDAPAttributeMapOnlyName: "O mapeamento de atributos aceita apenas o campo name."
ErrLDAPNameAttributeRequired: "O atributo LDAP mapeado para name é obrigatório."
ErrLDAPAttributeNameInvalid: "O mapeamento contém um nome de atributo LDAP inválido."
ErrLDAPUserFilterRequired: "O filtro de usuários é obrigatório."
ErrLDAPUserFilterInvalid: "O filtro de usuários não é um filtro LDAP válido."
ErrLDAPAttributeMapObject: "O mapeamento de atributos deve ser um objeto JSON válido."
ErrLDAPImportModeInvalid: "O modo de importação deve ser usuários selecionados ou todos os usuários."
ErrLDAPImportSelectionRequired: "Selecione pelo menos um usuário LDAP para importar."
ErrLDAPImportSelectionInvalid: "Os usuários LDAP selecionados são inválidos ou não existem mais. Leia o diretório novamente."
ErrLDAPConfigChanged: "A configuração LDAP foi alterada. Leia o diretório e visualize a importação novamente."
ErrLDAPRoleRequired: "Selecione uma função para os novos usuários LDAP."
ErrLDAPImportPlanIncomplete: "Um plano de importação LDAP incompleto não pode ser executado."
ErrLDAPQueryTokenInvalid: "O resultado da consulta LDAP expirou. Leia o diretório novamente."
ErrLDAPPlanTokenInvalid: "A visualização da importação LDAP expirou. Visualize a importação novamente."
ErrLDAPOperationFailed: "A operação LDAP falhou. Tente novamente."
ErrLDAPEntryIdentityMissing: "A entrada LDAP não possui um ID estável ou nome de usuário."
ErrLDAPDuplicateExternalID: "O LDAP retornou IDs de usuário duplicados."
ErrLDAPUsernameConflict: "O nome de usuário já é usado por outro usuário."
ErrLDAPUsernameSourceConflict: "O nome de usuário já é usado por um usuário local ou outra fonte de autenticação."
ErrLDAPUsernameConcurrentConflict: "O nome de usuário foi ocupado por outro usuário durante a importação."
ErrLDAPLocalCredentialsReadonly: "Os nomes de usuário e senhas LDAP são gerenciados pelo LDAP e não podem ser alterados localmente."
ErrLDAPPasswordExpirationUnsupported: "Usuários LDAP não usam a política local de expiração de senha."
ErrLDAPSyncSourceDisabled: "Ative o AD/LDAP antes de ativar ou executar a sincronização."
ErrLDAPSyncConfigSave: "Falha ao salvar as configurações de sincronização LDAP."
ErrLDAPSyncSchedule: "Falha ao atualizar o agendamento da sincronização LDAP."
ErrLDAPSyncCronInvalid: "Insira uma expressão Cron válida de cinco campos."
ErrLDAPSyncWeekdayInvalid: "Selecione um dia da semana válido."
ErrLDAPSyncCronRequired: "Insira uma expressão Cron."
ErrLDAPSyncScheduleTypeInvalid: "Selecione um tipo de agendamento de sincronização válido."
ErrLDAPSyncTimeInvalid: "Insira um horário de execução válido."
ErrLDAPSyncRunning: "Uma tarefa de sincronização LDAP já está em execução."
ErrLDAPSyncDirectoryIncomplete: "O LDAP retornou um resultado incompleto da consulta completa. Nenhum status de usuário foi alterado."
ErrLDAPSyncFailed: "Falha na sincronização de usuários LDAP."
LDAPSyncSuccess: "A sincronização de usuários LDAP foi concluída com sucesso."
+48
View File
@@ -424,3 +424,51 @@ ErrExpiredToken: 'Токен истек, пожалуйста, сбросьте
# экспорт команд
Name: "Название"
Command: "Команда"
# LDAP
ErrLDAPConnectionTest: "Не удалось выполнить проверку подключения LDAP. Проверьте адрес сервера, учетную запись привязки и настройки сети."
LDAPConnectionTestSuccess: "Проверка подключения LDAP выполнена успешно."
ErrLDAPDirectorySearch: "Не удалось прочитать пользователей LDAP. Проверьте подключение и настройки поиска."
ErrLDAPConfigLoad: "Не удалось загрузить конфигурацию LDAP."
ErrLDAPConfigSave: "Не удалось сохранить конфигурацию LDAP."
ErrLDAPURLInvalid: "Адрес сервера LDAP должен использовать ldap:// или ldaps:// и содержать допустимый хост."
ErrLDAPBindDNRequired: "Требуется DN привязки."
ErrLDAPBindPasswordRequired: "Требуется пароль привязки."
ErrLDAPUserOURequired: "Требуется OU пользователей."
ErrLDAPConnectTimeoutRange: "Время ожидания подключения должно быть от 1 до 120 секунд."
ErrLDAPSearchPageSizeRange: "Размер страницы запроса LDAP должен быть от 1 до 10000."
ErrLDAPResultPageSizeRange: "Размер страницы результатов не может превышать 200."
ErrLDAPAttributeMapOnlyName: "Сопоставление атрибутов поддерживает только поле name."
ErrLDAPNameAttributeRequired: "Требуется атрибут LDAP, сопоставленный с name."
ErrLDAPAttributeNameInvalid: "Сопоставление содержит недопустимое имя атрибута LDAP."
ErrLDAPUserFilterRequired: "Требуется фильтр пользователей."
ErrLDAPUserFilterInvalid: "Фильтр пользователей не является допустимым фильтром LDAP."
ErrLDAPAttributeMapObject: "Сопоставление атрибутов должно быть допустимым объектом JSON."
ErrLDAPImportModeInvalid: "Режим импорта должен включать выбранных или всех пользователей."
ErrLDAPImportSelectionRequired: "Выберите хотя бы одного пользователя LDAP для импорта."
ErrLDAPImportSelectionInvalid: "Выбранные пользователи LDAP недействительны или больше не существуют. Повторно прочитайте каталог."
ErrLDAPConfigChanged: "Конфигурация LDAP изменилась. Повторно прочитайте каталог и просмотрите импорт."
ErrLDAPRoleRequired: "Выберите роль для новых пользователей LDAP."
ErrLDAPImportPlanIncomplete: "Неполный план импорта LDAP нельзя выполнить."
ErrLDAPQueryTokenInvalid: "Результат запроса LDAP истек. Повторно прочитайте каталог."
ErrLDAPPlanTokenInvalid: "Предварительный просмотр импорта LDAP истек. Выполните его повторно."
ErrLDAPOperationFailed: "Операция LDAP завершилась ошибкой. Повторите попытку."
ErrLDAPEntryIdentityMissing: "В записи LDAP отсутствует стабильный идентификатор или имя пользователя."
ErrLDAPDuplicateExternalID: "LDAP вернул повторяющиеся идентификаторы пользователей."
ErrLDAPUsernameConflict: "Имя пользователя уже используется другим пользователем."
ErrLDAPUsernameSourceConflict: "Имя пользователя уже используется локальным пользователем или другим источником аутентификации."
ErrLDAPUsernameConcurrentConflict: "Во время импорта имя пользователя было занято другим пользователем."
ErrLDAPLocalCredentialsReadonly: "Имена и пароли пользователей LDAP управляются LDAP и не могут быть изменены локально."
ErrLDAPPasswordExpirationUnsupported: "Для пользователей LDAP не применяется локальная политика срока действия пароля."
ErrLDAPSyncSourceDisabled: "Включите AD/LDAP перед включением или запуском синхронизации."
ErrLDAPSyncConfigSave: "Не удалось сохранить настройки синхронизации LDAP."
ErrLDAPSyncSchedule: "Не удалось обновить расписание синхронизации LDAP."
ErrLDAPSyncCronInvalid: "Введите корректное пятикомпонентное выражение Cron."
ErrLDAPSyncWeekdayInvalid: "Выберите корректный день недели."
ErrLDAPSyncCronRequired: "Введите выражение Cron."
ErrLDAPSyncScheduleTypeInvalid: "Выберите корректный тип расписания синхронизации."
ErrLDAPSyncTimeInvalid: "Введите корректное время выполнения."
ErrLDAPSyncRunning: "Задача синхронизации LDAP уже выполняется."
ErrLDAPSyncDirectoryIncomplete: "LDAP вернул неполный результат полного запроса. Статусы пользователей не были изменены."
ErrLDAPSyncFailed: "Не удалось синхронизировать пользователей LDAP."
LDAPSyncSuccess: "Синхронизация пользователей LDAP успешно завершена."
+48
View File
@@ -424,3 +424,51 @@ ErrExpiredToken: 'Token süresi dolmuş, lütfen sıfırlayın ve tekrar tarayı
# komut dışa aktarma
Name: "Ad"
Command: "Komut"
# LDAP
ErrLDAPConnectionTest: "LDAP bağlantı testi başarısız oldu. Sunucu adresini, bağlama hesabını ve ağ ayarlarını kontrol edin."
LDAPConnectionTestSuccess: "LDAP bağlantı testi başarılı oldu."
ErrLDAPDirectorySearch: "LDAP kullanıcıları okunamadı. Bağlantı ve arama ayarlarını kontrol edin."
ErrLDAPConfigLoad: "LDAP yapılandırması yüklenemedi."
ErrLDAPConfigSave: "LDAP yapılandırması kaydedilemedi."
ErrLDAPURLInvalid: "LDAP sunucu adresi ldap:// veya ldaps:// kullanmalı ve geçerli bir ana bilgisayar içermelidir."
ErrLDAPBindDNRequired: "Bağlama DN'i gereklidir."
ErrLDAPBindPasswordRequired: "Bağlama parolası gereklidir."
ErrLDAPUserOURequired: "Kullanıcı OU'su gereklidir."
ErrLDAPConnectTimeoutRange: "Bağlantı zaman aşımı 1 ile 120 saniye arasında olmalıdır."
ErrLDAPSearchPageSizeRange: "LDAP sorgu sayfası boyutu 1 ile 10000 arasında olmalıdır."
ErrLDAPResultPageSizeRange: "Sonuç sayfası boyutu 200'ü aşamaz."
ErrLDAPAttributeMapOnlyName: "Öznitelik eşlemesi yalnızca name alanını destekler."
ErrLDAPNameAttributeRequired: "name alanına eşlenen LDAP özniteliği gereklidir."
ErrLDAPAttributeNameInvalid: "Öznitelik eşlemesi geçersiz bir LDAP öznitelik adı içeriyor."
ErrLDAPUserFilterRequired: "Kullanıcı filtresi gereklidir."
ErrLDAPUserFilterInvalid: "Kullanıcı filtresi geçerli bir LDAP filtresi değildir."
ErrLDAPAttributeMapObject: "Öznitelik eşlemesi geçerli bir JSON nesnesi olmalıdır."
ErrLDAPImportModeInvalid: "İçe aktarma modu seçili kullanıcılar veya tüm kullanıcılar olmalıdır."
ErrLDAPImportSelectionRequired: "İçe aktarmak için en az bir LDAP kullanıcısı seçin."
ErrLDAPImportSelectionInvalid: "Seçilen LDAP kullanıcıları geçersiz veya artık mevcut değil. Dizini yeniden okuyun."
ErrLDAPConfigChanged: "LDAP yapılandırması değişti. Dizini yeniden okuyun ve içe aktarmayı tekrar önizleyin."
ErrLDAPRoleRequired: "Yeni LDAP kullanıcıları için bir rol seçin."
ErrLDAPImportPlanIncomplete: "Tamamlanmamış bir LDAP içe aktarma planı çalıştırılamaz."
ErrLDAPQueryTokenInvalid: "LDAP sorgu sonucunun süresi doldu. Dizini yeniden okuyun."
ErrLDAPPlanTokenInvalid: "LDAP içe aktarma önizlemesinin süresi doldu. Yeniden önizleyin."
ErrLDAPOperationFailed: "LDAP işlemi başarısız oldu. Tekrar deneyin."
ErrLDAPEntryIdentityMissing: "LDAP girdisinde kararlı bir kimlik veya kullanıcı adı eksik."
ErrLDAPDuplicateExternalID: "LDAP yinelenen kullanıcı kimlikleri döndürdü."
ErrLDAPUsernameConflict: "Kullanıcı adı başka bir kullanıcı tarafından zaten kullanılıyor."
ErrLDAPUsernameSourceConflict: "Kullanıcı adı yerel bir kullanıcı veya başka bir kimlik doğrulama kaynağı tarafından zaten kullanılıyor."
ErrLDAPUsernameConcurrentConflict: "İçe aktarma sırasında kullanıcı adı başka bir kullanıcı tarafından alındı."
ErrLDAPLocalCredentialsReadonly: "LDAP kullanıcı adları ve parolaları LDAP tarafından yönetilir ve yerel olarak değiştirilemez."
ErrLDAPPasswordExpirationUnsupported: "LDAP kullanıcıları yerel parola sona erme politikasını kullanmaz."
ErrLDAPSyncSourceDisabled: "Senkronizasyonu etkinleştirmeden veya çalıştırmadan önce AD/LDAP'yi etkinleştirin."
ErrLDAPSyncConfigSave: "LDAP senkronizasyon ayarları kaydedilemedi."
ErrLDAPSyncSchedule: "LDAP senkronizasyon zamanlaması güncellenemedi."
ErrLDAPSyncCronInvalid: "Geçerli, beş alanlı bir Cron ifadesi girin."
ErrLDAPSyncWeekdayInvalid: "Geçerli bir hafta günü seçin."
ErrLDAPSyncCronRequired: "Bir Cron ifadesi girin."
ErrLDAPSyncScheduleTypeInvalid: "Geçerli bir senkronizasyon zamanlama türü seçin."
ErrLDAPSyncTimeInvalid: "Geçerli bir çalıştırma saati girin."
ErrLDAPSyncRunning: "Bir LDAP senkronizasyon görevi zaten çalışıyor."
ErrLDAPSyncDirectoryIncomplete: "LDAP eksik bir tam sorgu sonucu döndürdü. Hiçbir kullanıcının durumu değiştirilmedi."
ErrLDAPSyncFailed: "LDAP kullanıcı senkronizasyonu başarısız oldu."
LDAPSyncSuccess: "LDAP kullanıcı senkronizasyonu başarıyla tamamlandı."
+48
View File
@@ -424,3 +424,51 @@ ErrExpiredToken: '令牌過期,請重設後再次掃碼'
# 命令匯出
Name: "名稱"
Command: "指令"
# LDAP
ErrLDAPConnectionTest: "LDAP 連線測試失敗,請檢查服務位址、綁定帳號和網路設定。"
LDAPConnectionTestSuccess: "LDAP 連線測試成功。"
ErrLDAPDirectorySearch: "讀取 LDAP 使用者失敗,請檢查連線和搜尋設定。"
ErrLDAPConfigLoad: "載入 LDAP 設定失敗。"
ErrLDAPConfigSave: "儲存 LDAP 設定失敗。"
ErrLDAPURLInvalid: "LDAP 服務位址必須使用 ldap:// 或 ldaps://,並包含有效的主機位址。"
ErrLDAPBindDNRequired: "請輸入綁定 DN。"
ErrLDAPBindPasswordRequired: "請輸入綁定密碼。"
ErrLDAPUserOURequired: "請輸入使用者 OU。"
ErrLDAPConnectTimeoutRange: "連線逾時時間必須介於 1 到 120 秒。"
ErrLDAPSearchPageSizeRange: "LDAP 查詢分頁大小必須介於 1 到 10000。"
ErrLDAPResultPageSizeRange: "結果分頁大小不能超過 200。"
ErrLDAPAttributeMapOnlyName: "屬性對應僅支援 name 欄位。"
ErrLDAPNameAttributeRequired: "請輸入對應到 name 的 LDAP 屬性。"
ErrLDAPAttributeNameInvalid: "屬性對應中包含無效的 LDAP 屬性名稱。"
ErrLDAPUserFilterRequired: "請輸入使用者篩選器。"
ErrLDAPUserFilterInvalid: "使用者篩選器不是有效的 LDAP 篩選器。"
ErrLDAPAttributeMapObject: "屬性對應必須是有效的 JSON 物件。"
ErrLDAPImportModeInvalid: "匯入模式必須為匯入選取使用者或匯入全部使用者。"
ErrLDAPImportSelectionRequired: "請至少選取一個要匯入的 LDAP 使用者。"
ErrLDAPImportSelectionInvalid: "選取的 LDAP 使用者無效或已不存在,請重新讀取目錄。"
ErrLDAPConfigChanged: "LDAP 設定已變更,請重新讀取目錄並預覽匯入。"
ErrLDAPRoleRequired: "請選取新 LDAP 使用者的角色。"
ErrLDAPImportPlanIncomplete: "無法執行不完整的 LDAP 匯入計畫。"
ErrLDAPQueryTokenInvalid: "LDAP 查詢結果已過期,請重新讀取目錄。"
ErrLDAPPlanTokenInvalid: "LDAP 匯入預覽已過期,請重新預覽。"
ErrLDAPOperationFailed: "LDAP 操作失敗,請重試。"
ErrLDAPEntryIdentityMissing: "LDAP 項目缺少穩定 ID 或使用者名稱。"
ErrLDAPDuplicateExternalID: "LDAP 傳回了重複的使用者 ID。"
ErrLDAPUsernameConflict: "此使用者名稱已被其他使用者使用。"
ErrLDAPUsernameSourceConflict: "此使用者名稱已被本機使用者或其他驗證來源使用。"
ErrLDAPUsernameConcurrentConflict: "匯入期間此使用者名稱已被其他使用者占用。"
ErrLDAPLocalCredentialsReadonly: "LDAP 使用者名稱和密碼由 LDAP 管理,無法在本機修改。"
ErrLDAPPasswordExpirationUnsupported: "LDAP 使用者不使用本機密碼到期原則。"
ErrLDAPSyncSourceDisabled: "請先啟用 AD/LDAP,再開啟或執行同步。"
ErrLDAPSyncConfigSave: "儲存 LDAP 同步設定失敗。"
ErrLDAPSyncSchedule: "更新 LDAP 同步排程失敗。"
ErrLDAPSyncCronInvalid: "請輸入有效的五段式 Cron 運算式。"
ErrLDAPSyncWeekdayInvalid: "請選擇有效的星期。"
ErrLDAPSyncCronRequired: "請輸入 Cron 運算式。"
ErrLDAPSyncScheduleTypeInvalid: "請選擇有效的同步執行週期。"
ErrLDAPSyncTimeInvalid: "請輸入有效的執行時間。"
ErrLDAPSyncRunning: "已有 LDAP 同步工作正在執行。"
ErrLDAPSyncDirectoryIncomplete: "LDAP 全量查詢結果不完整,本次未變更任何使用者狀態。"
ErrLDAPSyncFailed: "LDAP 使用者同步失敗。"
LDAPSyncSuccess: "LDAP 使用者同步成功。"
+48
View File
@@ -424,3 +424,51 @@ ErrExpiredToken: '令牌过期,请重置后再次扫码'
# 命令导出
Name: "名称"
Command: "命令"
# LDAP
ErrLDAPConnectionTest: "LDAP 连接测试失败,请检查服务地址、绑定账号和网络设置。"
LDAPConnectionTestSuccess: "LDAP 连接测试成功。"
ErrLDAPDirectorySearch: "读取 LDAP 用户失败,请检查连接和搜索设置。"
ErrLDAPConfigLoad: "加载 LDAP 配置失败。"
ErrLDAPConfigSave: "保存 LDAP 配置失败。"
ErrLDAPURLInvalid: "LDAP 服务地址必须使用 ldap:// 或 ldaps://,并包含有效的主机地址。"
ErrLDAPBindDNRequired: "请输入绑定 DN。"
ErrLDAPBindPasswordRequired: "请输入绑定密码。"
ErrLDAPUserOURequired: "请输入用户 OU。"
ErrLDAPConnectTimeoutRange: "连接超时时间必须在 1 到 120 秒之间。"
ErrLDAPSearchPageSizeRange: "LDAP 查询分页大小必须在 1 到 10000 之间。"
ErrLDAPResultPageSizeRange: "结果分页大小不能超过 200。"
ErrLDAPAttributeMapOnlyName: "属性映射仅支持 name 字段。"
ErrLDAPNameAttributeRequired: "请输入映射到 name 的 LDAP 属性。"
ErrLDAPAttributeNameInvalid: "属性映射中包含无效的 LDAP 属性名。"
ErrLDAPUserFilterRequired: "请输入用户过滤器。"
ErrLDAPUserFilterInvalid: "用户过滤器不是有效的 LDAP 过滤器。"
ErrLDAPAttributeMapObject: "属性映射必须是有效的 JSON 对象。"
ErrLDAPImportModeInvalid: "导入模式必须为导入选中用户或导入全部用户。"
ErrLDAPImportSelectionRequired: "请至少选择一个要导入的 LDAP 用户。"
ErrLDAPImportSelectionInvalid: "选中的 LDAP 用户无效或已不存在,请重新读取目录。"
ErrLDAPConfigChanged: "LDAP 配置已变更,请重新读取目录并预览导入。"
ErrLDAPRoleRequired: "请选择新 LDAP 用户的角色。"
ErrLDAPImportPlanIncomplete: "不能执行不完整的 LDAP 导入计划。"
ErrLDAPQueryTokenInvalid: "LDAP 查询结果已过期,请重新读取目录。"
ErrLDAPPlanTokenInvalid: "LDAP 导入预览已过期,请重新预览。"
ErrLDAPOperationFailed: "LDAP 操作失败,请重试。"
ErrLDAPEntryIdentityMissing: "LDAP 条目缺少稳定 ID 或用户名。"
ErrLDAPDuplicateExternalID: "LDAP 返回了重复的用户 ID。"
ErrLDAPUsernameConflict: "该用户名已被其他用户使用。"
ErrLDAPUsernameSourceConflict: "该用户名已被本地用户或其他认证源使用。"
ErrLDAPUsernameConcurrentConflict: "导入期间该用户名已被其他用户占用。"
ErrLDAPLocalCredentialsReadonly: "LDAP 用户名和密码由 LDAP 管理,不能在本地修改。"
ErrLDAPPasswordExpirationUnsupported: "LDAP 用户不使用本地密码过期策略。"
ErrLDAPSyncSourceDisabled: "请先启用 AD/LDAP,再开启或执行同步。"
ErrLDAPSyncConfigSave: "保存 LDAP 同步设置失败。"
ErrLDAPSyncSchedule: "更新 LDAP 同步计划失败。"
ErrLDAPSyncCronInvalid: "请输入有效的五段式 Cron 表达式。"
ErrLDAPSyncWeekdayInvalid: "请选择有效的星期。"
ErrLDAPSyncCronRequired: "请输入 Cron 表达式。"
ErrLDAPSyncScheduleTypeInvalid: "请选择有效的同步执行周期。"
ErrLDAPSyncTimeInvalid: "请输入有效的执行时间。"
ErrLDAPSyncRunning: "已有 LDAP 同步任务正在执行。"
ErrLDAPSyncDirectoryIncomplete: "LDAP 全量查询结果不完整,本次未改变任何用户状态。"
ErrLDAPSyncFailed: "LDAP 用户同步失败。"
LDAPSyncSuccess: "LDAP 用户同步成功。"
+9
View File
@@ -74,6 +74,15 @@ func PasswordExpired() gin.HandlerFunc {
c.Next()
return
}
shouldCheck, err := xpack.AuthProvider.ShouldCheckPasswordExpiration(c)
if err != nil {
helper.ErrorWithDetail(c, http.StatusInternalServerError, "ErrPasswordExpired", err)
return
}
if !shouldCheck {
c.Next()
return
}
expirationTime, err := xpack.AuthProvider.LoadPasswordExpirationTime(c)
if err != nil {
helper.ErrorWithDetail(c, http.StatusInternalServerError, "ErrPasswordExpired", err)
+3
View File
@@ -76,6 +76,9 @@ func (a *authHelper) UpdateApiConfig(c *gin.Context, req baseDto.ApiInterfaceCon
func (a *authHelper) GetCurrentUserInfo(_ *gin.Context) (*baseDto.CurrentUserInfo, error) {
return auth.GetCurrentUserInfo()
}
func (a *authHelper) ShouldCheckPasswordExpiration(_ *gin.Context) (bool, error) {
return true, nil
}
func (a *authHelper) LoadPasswordExpirationTime(c *gin.Context) (string, error) {
return auth.LoadPasswordExpirationTime(c)
}
+1
View File
@@ -29,6 +29,7 @@ type AuthProvider interface {
ClearPasskeys() error
GetCurrentUserInfo(c *gin.Context) (*dto.CurrentUserInfo, error)
ShouldCheckPasswordExpiration(c *gin.Context) (bool, error)
LoadPasswordExpirationTime(c *gin.Context) (string, error)
SyncPasswordExpirationTime(expirationDays string) error
UpdateCurrentUserInfo(c *gin.Context, req dto.CurrentUserUpdate) error
+2
View File
@@ -55,6 +55,8 @@ export namespace Login {
permissions: string[];
masterOnlyPermissions?: string[];
nodeRoles: Array<{ nodeId: number; nodeName: string; roleId: number; roleName: string }>;
authSource: string;
authSourceStatus: string;
apiInterfaceStatus: string;
apiKey: string;
+276
View File
@@ -4218,6 +4218,69 @@ const message = {
noFail: 'Mount failure does not affect system startup',
},
xpack: {
ldap: {
source: 'Source',
directoryMissing: 'Not found in LDAP',
localCredentialsManaged: 'Username and password are managed by LDAP and cannot be changed locally.',
sources: {
local: 'Local',
ldap: 'LDAP',
},
importUsers: 'Import AD/LDAP users',
searchUsersPlaceholder: 'Search username',
readFromLDAP: 'Read from LDAP',
selectedUsers: '{0} selected',
queriedAt: 'Read at',
cachedResult: 'Cached result',
roleForNewUsers: 'Role for new users',
selectRole: 'Select a role',
roleOnlyForNewUsers: 'A role is required only when the import creates users.',
roleRequiredForNewUsers: 'Select a role for new LDAP users.',
changedFields: 'Changed fields',
importSelected: 'Import selected',
importAll: 'Import all',
importPreview: 'AD/LDAP import preview',
importCompleted: 'AD/LDAP import completed',
incompletePreview: 'The LDAP directory read was incomplete. Read from LDAP again.',
missingUsersWarning: 'Users missing from LDAP will be disabled by strict synchronization.',
missingUsersWarningDetail: '{0} local LDAP user(s) will no longer be able to sign in.',
action: 'Action',
reason: 'Reason',
noImportChanges: 'No import changes',
confirmImport: 'Confirm import',
created: 'Create',
updated: 'Update',
reactivated: 'Reactivate',
unchanged: 'Unchanged',
conflicts: 'Conflicts',
missing: 'Missing',
missingUsersConfirm: '{0} user(s) missing from LDAP will be disabled and signed out. Continue?',
strictSyncConfirm: 'Confirm strict synchronization',
status: {
importable: 'New user',
update_available: 'Update available',
up_to_date: 'Up to date',
conflict: 'Conflict',
},
fields: {
name: 'Username',
externalDN: 'Directory DN',
externalID: 'External ID',
authSourceStatus: 'Authentication status',
},
actions: {
created: 'Create',
updated: 'Update',
reactivated: 'Reactivate',
unchanged: 'Unchanged',
skipped: 'Skipped',
conflicts: 'Conflict',
conflict: 'Conflict',
missing: 'Disable',
errors: 'Error',
error: 'Error',
},
},
expiresEnterpriseAlert:
'Friendly reminder: Your Enterprise Edition license will expire in {0} days, and all Enterprise Edition features will no longer be accessible. Please renew promptly to ensure continued usage.',
expiresProAlert:
@@ -4778,6 +4841,219 @@ const message = {
masterOnlyPermissionHelper: 'This permission only takes effect on the master node.',
view: 'View',
manage: 'Manage',
authManage: 'Authentication',
auth: {
providerNavigation: 'Authentication providers',
providers: {
ldap: 'AD/LDAP',
passkey: 'Passkey',
radius: 'Radius',
oidc: 'OIDC',
saml2: 'SAML2',
cas: 'CAS',
oauth2: 'OAuth2',
dingtalk: 'DingTalk',
feishu: 'Feishu',
wecom: 'WeCom',
},
providerDescriptions: {
ldap: 'Compatible with Active Directory, OpenLDAP, and other LDAP services',
passkey: 'Use device credentials for passwordless sign-in',
radius: 'Authenticate network access through a Radius service',
oidc: 'Connect enterprise single sign-on with OpenID Connect',
saml2: 'Use SAML2 for enterprise identity federation',
cas: 'Connect a centralized authentication service for single sign-on',
oauth2: 'Connect a compatible OAuth2 identity service',
dingtalk: 'Use DingTalk organization identity and QR sign-in',
feishu: 'Use Feishu organization identity and account synchronization',
wecom: 'Authenticate with WeCom member identity',
},
planned: 'Planned',
plannedTitle: '{0} authentication settings',
plannedDesc: 'This authentication provider is planned and is not available yet.',
ldap: {
enable: 'Enable',
enabled: 'Enabled',
disabled: 'Disabled',
connection: 'Basic connection',
connectionDesc: 'Configure the directory service and the bind account used to search for users.',
serverURL: 'Server URL',
serverURLHelper: 'Supports ldap:// and ldaps:// URLs.',
userBaseDN: 'User Base DN',
userBaseDNHelper: 'Starting DN for LDAP user searches; it can be an OU, CN, or domain root DN.',
bindDN: 'Bind DN',
bindPassword: 'Password',
passwordSaved: 'Leave blank to keep the saved password',
userSearch: 'User search',
userSearchDesc:
'Set the user search base and filter, then map the LDAP attribute used as the 1Panel name.',
userFilter: 'User filter',
userFilterTooltip:
'Replace %(user)s with the escaped username, or with * for a full directory read.',
userFilterHelper: 'Usernames are escaped before they are inserted into the LDAP filter.',
attributeMap: 'Attribute mapping',
attributeMapTooltip: 'JSON mapping from the 1Panel name field to an LDAP attribute.',
attributeMapHelper: 'Set the LDAP attribute mapped to the 1Panel name field.',
advanced: 'Advanced settings',
advancedDesc: 'Configure TLS and LDAP query paging.',
strictSync: 'Strict synchronization',
strictSyncTooltip:
'After a complete full import, users missing from this LDAP source are disabled but not deleted.',
strictSyncHelper:
'Only applies to a complete full import. Importing selected users never disables other users.',
skipTLSVerify: 'Skip TLS verification',
skipTLSVerifyTooltip: 'Disable certificate verification for LDAPS connections.',
skipTLSVerifyHelper:
'Use only with a trusted self-signed certificate. This setting is independent of strict synchronization.',
connectTimeout: 'Connection timeout (seconds)',
searchPageSize: 'LDAP query page size',
restore: 'Restore',
testConnection: 'Test connection',
testLogin: 'Test login',
userImport: 'Import users',
saveBeforeImport: 'Save the current AD/LDAP settings before importing users.',
format: 'Format',
restoreExample: 'Restore example',
mappingValid: 'Valid JSON; name is configured.',
mappingInvalid: 'Enter valid JSON.',
mappingObject: 'The attribute mapping must be a JSON object.',
mappingOnlyName: 'Only the name mapping is supported.',
mappingStringValues: 'Every mapped attribute must be a string.',
mappingNameRequired: 'name must be a non-empty string.',
restored: 'The last saved settings were restored.',
connectionTestSuccess: 'LDAP connection test succeeded.',
recentTestSuccess: 'Last test succeeded: {0}',
recentTestFailed: 'Last test failed: {0}',
serverURLRequired: 'Enter the LDAP server URL.',
serverURLInvalid: 'Use a valid ldap:// or ldaps:// URL.',
userBaseDNRequired: 'Enter the User Base DN.',
bindDNRequired: 'Enter the Bind DN.',
passwordRequired: 'Enter the password.',
userFilterRequired: 'Enter the user filter.',
connectTimeoutRequired: 'Enter the connection timeout.',
searchPageSizeRequired: 'Enter the LDAP query page size.',
sync: {
title: 'Scheduled sync',
description:
'Read the full LDAP directory on a schedule and maintain imported LDAP users in 1Panel.',
enable: 'Enable schedule',
enableHelper:
'When disabled, automatic execution stops; manual synchronization remains available.',
schedule: 'Schedule',
daily: 'Daily',
weekly: 'Weekly',
customCron: 'Custom Cron',
preview: 'Preview',
previewTitle: 'Next 5 runs',
previewEmpty: 'No execution time available',
cronHelper: 'Use a standard five-field Cron expression: minute, hour, day, month, weekday.',
autoImport: 'Import new users',
autoImportHelper:
'When disabled, only directory identifiers and status are maintained for imported LDAP users; no new users are created.',
defaultRole: 'New user role',
defaultRolePlaceholder: 'Select a role',
defaultRoleHelper: 'Only applies to users created by scheduled synchronization.',
defaultRoleRequired: 'Select a role for new LDAP users.',
strictSyncHelper:
'Users missing from a complete full query are disabled and their sessions are cleared; users, roles, and permissions are not deleted.',
safetyTitle: 'Missing users are processed only after a complete LDAP full query',
safetyDescription:
'A failed query, timeout, or incomplete paged result never changes user status. The synchronization scope follows the User Base DN, filter, and attribute mapping.',
runNow: 'Sync now',
lastRunSuccess: 'Last sync succeeded: {0}',
lastRunFailed: 'Last sync failed: {0}',
lastRunRunning: 'Sync started: {0}',
sourceDisabled: 'Enable and save AD/LDAP before running synchronization.',
cronRequired: 'Enter a Cron expression.',
saveBeforeRun: 'Save the synchronization settings before running the task.',
runConfirmTitle: 'Run strict synchronization',
runConfirmDescription:
'LDAP users missing from a complete full query will be disabled and their active sessions cleared. Continue?',
runSuccess: 'LDAP synchronization completed.',
weekdays: {
0: 'Sunday',
1: 'Monday',
2: 'Tuesday',
3: 'Wednesday',
4: 'Thursday',
5: 'Friday',
6: 'Saturday',
},
},
syncLogs: {
title: 'Sync logs',
description: 'Review scheduled and manual LDAP synchronization results.',
startedAt: 'Start time',
trigger: 'Trigger',
manual: 'Manual',
scheduled: 'Scheduled',
success: 'Success',
failed: 'Failed',
running: 'Running',
result: 'Result',
resultSummary: 'Created {0}, updated {1}, missing {2}',
duration: 'Duration',
action: 'Action',
},
testLoginTitle: 'Test AD/LDAP login',
testLoginDesc:
'Bind with an AD/LDAP user credential to test authentication only. No 1Panel session is created.',
ldapUsername: 'LDAP username',
usernameRequired: 'Enter the LDAP username.',
startTest: 'Start test',
testLoginSuccess: 'Authentication succeeded.',
testLoginSuccessWithDN: 'Authentication succeeded. User DN: {0}',
import: {
title: 'Import AD/LDAP users',
source: 'Data source: AD/LDAP directory',
lastRead: 'Last read: {0}',
cacheHit: 'Cached result',
keywordPlaceholder: 'Search username',
search: 'Search',
refresh: 'Read from LDAP',
refreshTip: 'Ignore the short-term cache and read the LDAP directory again.',
loadFailed: 'Failed to read the LDAP directory.',
retry: 'Retry',
noData: 'No directory users found.',
username: 'Username',
status: 'Status',
changes: 'Changes',
noChanges: 'No changes',
importable: 'Ready to import',
updateAvailable: 'Update available',
upToDate: 'Up to date',
conflict: 'Name conflict',
selectedCount: '{0} selected',
totalCount: '{0} users',
newUserRole: 'New user role',
newUserRoleRequired: 'Select a role for new users.',
noNewUsers: 'There are no new users in this operation.',
roleOnlyForNewUsers: 'The selected role is applied only to newly created users.',
strictOff: 'Strict synchronization is disabled. A full import will not disable users.',
importSelected: 'Import/update selected ({0})',
importAll: 'Import/update all ({0})',
previewTitle: 'Confirm full import',
previewDesc:
'The complete LDAP directory was read. The search keyword does not limit this operation.',
created: 'Create',
updated: 'Update',
unchanged: 'Unchanged',
conflicts: 'Conflicts',
missing: 'Disable',
reactivated: 'Reactivate',
strictWarning:
'Strict synchronization is enabled. Users missing from LDAP cannot sign in, but their records, roles, and permissions are retained.',
missingUsers: 'Users missing from LDAP',
missingScope: 'Only this LDAP source is affected.',
willDisable: 'Will be disabled',
confirmAll: 'Confirm import',
confirmAllWithMissing: 'Confirm import and disable {0} users',
executeSuccess: 'LDAP users were processed successfully.',
queryExpired: 'The directory result expired. Read from LDAP again.',
planIncomplete: 'The full directory read is incomplete and cannot be executed.',
},
},
},
},
app: {
app: 'APP',
+284
View File
@@ -4266,6 +4266,72 @@ const message = {
noFail: 'El fallo de montaje no afecta al inicio del sistema',
},
xpack: {
ldap: {
source: 'Origen',
directoryMissing: 'No existe en LDAP',
localCredentialsManaged:
'El nombre de usuario y la contraseña se administran mediante LDAP y no pueden modificarse localmente.',
sources: {
local: 'Local',
ldap: 'LDAP',
},
importUsers: 'Importar usuarios de AD/LDAP',
searchUsersPlaceholder: 'Buscar nombre de usuario',
readFromLDAP: 'Leer de LDAP',
selectedUsers: '{0} seleccionados',
queriedAt: 'Leído el',
cachedResult: 'Resultado almacenado en caché',
roleForNewUsers: 'Rol para nuevos usuarios',
selectRole: 'Seleccione un rol',
roleOnlyForNewUsers: 'Solo se requiere un rol cuando la importación crea usuarios.',
roleRequiredForNewUsers: 'Seleccione un rol para los nuevos usuarios de LDAP.',
changedFields: 'Campos modificados',
importSelected: 'Importar seleccionado',
importAll: 'Importar todo',
importPreview: 'Vista previa de importación de AD/LDAP',
importCompleted: 'Importación de AD/LDAP completada',
incompletePreview: 'La lectura del directorio LDAP estuvo incompleta. Lea de LDAP nuevamente.',
missingUsersWarning:
'Los usuarios que falten en LDAP serán deshabilitados mediante sincronización estricta.',
missingUsersWarningDetail: '{0} usuarios LDAP locales ya no podrán iniciar sesión.',
action: 'Acción',
reason: 'Razón',
noImportChanges: 'Sin cambios de importación',
confirmImport: 'Confirmar importación',
created: 'Crear',
updated: 'Actualizar',
reactivated: 'Reactivar',
unchanged: 'Sin cambios',
conflicts: 'Conflictos',
missing: 'Ausentes',
missingUsersConfirm:
'{0} usuarios ausentes en LDAP serán deshabilitados y se cerrarán sus sesiones. ¿Continuar?',
strictSyncConfirm: 'Confirmar sincronización estricta',
status: {
importable: 'Nuevo usuario',
update_available: 'Actualización disponible',
up_to_date: 'Actualizado',
conflict: 'Conflicto',
},
fields: {
name: 'Nombre de usuario',
externalDN: 'Directorio DN',
externalID: 'Identificación externa',
authSourceStatus: 'Estado de autenticación',
},
actions: {
created: 'Crear',
updated: 'Actualizar',
reactivated: 'Reactivar',
unchanged: 'Sin cambios',
skipped: 'Saltado',
conflicts: 'Conflicto',
conflict: 'Conflicto',
missing: 'Desactivar',
errors: 'Error',
error: 'Error',
},
},
expiresEnterpriseAlert:
'Aviso: Tu licencia de Enterprise Edition expirará en {0} días y todas las funciones de Enterprise Edition dejarán de estar disponibles. Renueva pronto para asegurar el uso continuo.',
expiresProAlert:
@@ -4832,6 +4898,224 @@ const message = {
masterOnlyPermissionHelper: 'Este permiso solo tiene efecto en el nodo principal.',
view: 'Ver',
manage: 'Gestionar',
authManage: 'Gestión de autenticación',
auth: {
providerNavigation: 'Proveedores de autenticación',
providers: {
ldap: 'AD/LDAP',
passkey: 'Passkey',
radius: 'Radius',
oidc: 'OIDC',
saml2: 'SAML2',
cas: 'CAS',
oauth2: 'OAuth2',
dingtalk: 'DingTalk',
feishu: 'Feishu',
wecom: 'WeCom',
},
providerDescriptions: {
ldap: 'Compatible con Active Directory, OpenLDAP y otros servicios LDAP',
passkey: 'Utilice las credenciales del dispositivo para iniciar sesión sin contraseña',
radius: 'Autenticar el acceso a la red a través de un servicio Radius',
oidc: 'Conecte el inicio de sesión único empresarial con OpenID Connect',
saml2: 'Utilice SAML2 para la federación de identidades empresariales',
cas: 'Conecte un servicio de autenticación centralizado para inicio de sesión único',
oauth2: 'Conecte un servicio de identidad OAuth2 compatible',
dingtalk: 'Utilice la identidad de la organización DingTalk y el inicio de sesión QR',
feishu: 'Utilice la identidad de la organización Feishu y la sincronización de cuentas',
wecom: 'Autenticar con identidad de miembro de WeCom',
},
planned: 'Planificado',
plannedTitle: 'Configuración de autenticación {0}',
plannedDesc: 'Este proveedor de autenticación está planificado y aún no está disponible.',
ldap: {
enable: 'Habilitar',
enabled: 'Habilitado',
disabled: 'Deshabilitado',
connection: 'Conexión básica',
connectionDesc:
'Configure el servicio de directorio y la cuenta de vinculación utilizada para buscar usuarios.',
serverURL: 'URL del servidor',
serverURLHelper: 'Admite URL ldap:// y ldaps://.',
userBaseDN: 'Base DN de usuario',
userBaseDNHelper:
'DN inicial para las búsquedas de usuarios LDAP; puede ser una OU, un CN o el DN raíz del dominio.',
bindDN: 'DN de enlace',
bindPassword: 'Contraseña',
passwordSaved: 'Déjelo en blanco para conservar la contraseña guardada.',
userSearch: 'Búsqueda de usuarios',
userSearchDesc:
'Configure la base y el filtro de búsqueda, y asigne el atributo LDAP al campo name de 1Panel.',
userFilter: 'Filtro de usuario',
userFilterTooltip:
'Reemplace %(user)s con el nombre de usuario con carácter de escape o con * para leer el directorio completo.',
userFilterHelper:
'Los nombres de usuario tienen caracteres de escape antes de insertarlos en el filtro LDAP.',
attributeMap: 'Mapeo de atributos',
attributeMapTooltip: 'Mapeo JSON del campo name de 1Panel a un atributo LDAP.',
attributeMapHelper: 'Configure el atributo LDAP asignado al campo name de 1Panel.',
advanced: 'Configuraciones avanzadas',
advancedDesc: 'Configure la paginación de consultas TLS y LDAP.',
strictSync: 'Sincronización estricta',
strictSyncTooltip:
'Después de una importación completa, los usuarios que faltan en esta fuente LDAP se deshabilitan pero no se eliminan.',
strictSyncHelper:
'Solo se aplica a una importación completa. Importar usuarios seleccionados nunca deshabilita a otros usuarios.',
skipTLSVerify: 'Saltar la verificación TLS',
skipTLSVerifyTooltip: 'Deshabilite la verificación de certificados para conexiones LDAPS.',
skipTLSVerifyHelper:
'Úselo únicamente con un certificado autofirmado confiable. Esta configuración es independiente de la sincronización estricta.',
connectTimeout: 'Tiempo de espera de conexión (segundos)',
searchPageSize: 'Tamaño de página de consulta LDAP',
restore: 'Restaurar',
testConnection: 'Probar conexión',
testLogin: 'Probar inicio de sesión',
userImport: 'Importar usuarios',
saveBeforeImport: 'Guarde la configuración actual de AD/LDAP antes de importar usuarios.',
format: 'Formato',
restoreExample: 'Ejemplo de restauración',
mappingValid: 'JSON válido; el campo name está configurado.',
mappingInvalid: 'Introduzca un JSON válido.',
mappingObject: 'La asignación de atributos debe ser un objeto JSON.',
mappingOnlyName: 'Solo se admite la asignación name.',
mappingStringValues: 'Cada atributo asignado debe ser una cadena.',
mappingNameRequired: 'name debe ser una cadena que no esté vacía.',
restored: 'Se restauraron las últimas configuraciones guardadas.',
connectionTestSuccess: 'La prueba de conexión LDAP fue exitosa.',
recentTestSuccess: 'Última prueba exitosa: {0}',
recentTestFailed: 'Última prueba fallida: {0}',
serverURLRequired: 'Ingrese la URL del servidor LDAP.',
serverURLInvalid: 'Utilice una URL ldap:// o ldaps:// válida.',
userBaseDNRequired: 'Ingrese la Base DN de usuario.',
bindDNRequired: 'Ingrese el DN de enlace.',
passwordRequired: 'Ingrese la contraseña.',
userFilterRequired: 'Ingrese el filtro de usuario.',
connectTimeoutRequired: 'Introduzca el tiempo de espera de la conexión.',
searchPageSizeRequired: 'Ingrese el tamaño de la página de consulta LDAP.',
sync: {
title: 'Sincronización programada',
description:
'Lea el directorio LDAP completo de forma programada y mantenga los usuarios LDAP importados en 1Panel.',
enable: 'Habilitar horario',
enableHelper:
'Cuando está deshabilitado, la ejecución automática se detiene; la sincronización manual permanece disponible.',
schedule: 'Horario',
daily: 'Diariamente',
weekly: 'Semanal',
customCron: 'Personalizado Cron',
preview: 'Vista previa',
previewTitle: 'Próximas 5 ejecuciones',
previewEmpty: 'No hay tiempo de ejecución disponible',
cronHelper:
'Utilice una expresión Cron estándar de cinco campos: minuto, hora, día, mes y día de la semana.',
autoImport: 'Importar nuevos usuarios',
autoImportHelper:
'Cuando está deshabilitado, solo se mantienen los identificadores y el estado del directorio para los usuarios LDAP importados; no se crean nuevos usuarios.',
defaultRole: 'Nuevo rol de usuario',
defaultRolePlaceholder: 'Seleccione un rol',
defaultRoleHelper: 'Solo se aplica a usuarios creados mediante sincronización programada.',
defaultRoleRequired: 'Seleccione un rol para los nuevos usuarios de LDAP.',
strictSyncHelper:
'Los usuarios que faltan en una consulta completa se deshabilitan y sus sesiones se borran; Los usuarios, roles y permisos no se eliminan.',
safetyTitle: 'Los usuarios faltantes se procesan solo después de una consulta completa LDAP',
safetyDescription:
'Una consulta fallida, un tiempo de espera o un resultado paginado incompleto nunca cambian el estado del usuario. El alcance de la sincronización sigue el usuario Base DN, el filtro y la asignación de atributos.',
runNow: 'Sincronizar ahora',
lastRunSuccess: 'Última sincronización exitosa: {0}',
lastRunFailed: 'La última sincronización falló: {0}',
lastRunRunning: 'Sincronización iniciada: {0}',
sourceDisabled: 'Habilite y guarde AD/LDAP antes de ejecutar la sincronización.',
cronRequired: 'Introduzca una expresión Cron.',
saveBeforeRun: 'Guarde la configuración de sincronización antes de ejecutar la tarea.',
runConfirmTitle: 'Ejecutar sincronización estricta',
runConfirmDescription:
'Los usuarios de LDAP que falten en una consulta completa serán deshabilitados y sus sesiones activas se borrarán. ¿Continuar?',
runSuccess: 'Sincronización LDAP completada.',
weekdays: {
0: 'domingo',
1: 'lunes',
2: 'martes',
3: 'miércoles',
4: 'jueves',
5: 'viernes',
6: 'sábado',
},
},
syncLogs: {
title: 'Registros de sincronización',
description: 'Revise los resultados de la sincronización manual y programada de LDAP.',
startedAt: 'Hora de inicio',
trigger: 'Tipo de ejecución',
manual: 'Manual',
scheduled: 'Programado',
success: 'Éxito',
failed: 'Fallido',
running: 'En ejecución',
result: 'Resultado',
resultSummary: 'Creados {0}, actualizados {1}, ausentes {2}',
duration: 'Duración',
action: 'acción',
},
testLoginTitle: 'Probar inicio de sesión AD/LDAP',
testLoginDesc:
'Vincule con una credencial de usuario AD/LDAP para probar solo la autenticación. No se crea ninguna sesión 1Panel.',
ldapUsername: 'nombre de usuario LDAP',
usernameRequired: 'Ingrese el nombre de usuario LDAP.',
startTest: 'Iniciar prueba',
testLoginSuccess: 'La autenticación fue exitosa.',
testLoginSuccessWithDN: 'La autenticación fue exitosa. Usuario DN: {0}',
import: {
title: 'Importar usuarios de AD/LDAP',
source: 'Fuente de datos: directorio AD/LDAP',
lastRead: 'Última lectura: {0}',
cacheHit: 'Resultado almacenado en caché',
keywordPlaceholder: 'Buscar nombre de usuario',
search: 'Buscar',
refresh: 'Leer de LDAP',
refreshTip: 'Ignore el caché a corto plazo y vuelva a leer el directorio LDAP.',
loadFailed: 'No se pudo leer el directorio LDAP.',
retry: 'Reintentar',
noData: 'No se encontraron usuarios del directorio.',
username: 'Nombre de usuario',
status: 'Estado',
changes: 'Cambios',
noChanges: 'Sin cambios',
importable: 'Listo para importar',
updateAvailable: 'Actualización disponible',
upToDate: 'actualizado',
conflict: 'Conflicto de nombres',
selectedCount: '{0} seleccionado',
totalCount: '{0} usuarios',
newUserRole: 'Nuevo rol de usuario',
newUserRoleRequired: 'Seleccione un rol para nuevos usuarios.',
noNewUsers: 'No hay nuevos usuarios en esta operación.',
roleOnlyForNewUsers: 'El rol seleccionado se aplica solo a los usuarios recién creados.',
strictOff:
'La sincronización estricta está deshabilitada. Una importación completa no deshabilitará a los usuarios.',
importSelected: 'Importar/actualizar seleccionado ({0})',
importAll: 'Importar/actualizar todo ({0})',
previewTitle: 'Confirmar importación completa',
previewDesc:
'Se leyó el directorio LDAP completo. La palabra clave de búsqueda no limita esta operación.',
created: 'crear',
updated: 'Actualizar',
unchanged: 'Sin cambios',
conflicts: 'Conflictos',
missing: 'Desactivar',
reactivated: 'Reactivar',
strictWarning:
'La sincronización estricta está habilitada. Los usuarios que faltan en LDAP no pueden iniciar sesión, pero se conservan sus registros, roles y permisos.',
missingUsers: 'Usuarios que faltan en LDAP',
missingScope: 'Sólo esta fuente LDAP se ve afectada.',
willDisable: 'Estará deshabilitado',
confirmAll: 'Confirmar importación',
confirmAllWithMissing: 'Confirmar importación y deshabilitar {0} usuarios',
executeSuccess: 'Los usuarios de LDAP se procesaron exitosamente.',
queryExpired: 'El resultado del directorio expiró. Lea de LDAP nuevamente.',
planIncomplete: 'La lectura completa del directorio está incompleta y no se puede ejecutar.',
},
},
},
},
app: {
app: 'APP',
+276
View File
@@ -4187,6 +4187,70 @@ const message = {
noFail: 'شکست اتصال بر راه‌اندازی سیستم تأثیری نمی‌گذارد',
},
xpack: {
ldap: {
source: 'منبع',
directoryMissing: 'در LDAP یافت نشد',
localCredentialsManaged: 'نام کاربری و رمز عبور توسط LDAP مدیریت می‌شوند و به‌صورت محلی قابل تغییر نیستند.',
sources: {
local: 'محلی',
ldap: 'LDAP',
},
importUsers: 'وارد کردن کاربران AD/LDAP',
searchUsersPlaceholder: 'جستجوی نام کاربری',
readFromLDAP: 'از LDAP بخوانید',
selectedUsers: '{0} انتخاب شد',
queriedAt: 'زمان خواندن',
cachedResult: 'نتیجه ذخیره شده',
roleForNewUsers: 'نقش برای کاربران جدید',
selectRole: 'یک نقش را انتخاب کنید',
roleOnlyForNewUsers: 'یک نقش تنها زمانی مورد نیاز است که وارد کردن کاربران ایجاد کند.',
roleRequiredForNewUsers: 'نقشی را برای کاربران جدید LDAP انتخاب کنید.',
changedFields: 'فیلدها را تغییر داد',
importSelected: 'واردات انتخاب شد',
importAll: 'همه را وارد کنید',
importPreview: 'پیش‌نمایش وارد کردن AD/LDAP',
importCompleted: 'وارد کردن AD/LDAP تکمیل شد',
incompletePreview: 'دایرکتوری LDAP خوانده شده ناقص بود. دوباره از LDAP بخوانید.',
missingUsersWarning: 'کاربرانی که از LDAP غایب هستند با همگام سازی دقیق غیرفعال می شوند.',
missingUsersWarningDetail: '{0} کاربر محلی LDAP دیگر نمی‌توانند وارد سیستم شوند.',
action: 'اقدام',
reason: 'دلیل',
noImportChanges: 'بدون تغییر واردات',
confirmImport: 'واردات را تایید کنید',
created: 'ایجاد کنید',
updated: 'به روز رسانی',
reactivated: 'دوباره فعال کنید',
unchanged: 'بدون تغییر',
conflicts: 'درگیری ها',
missing: 'گم شده',
missingUsersConfirm:
'کاربر(های) {0} که از LDAP مفقود شده اند غیرفعال می شوند و از سیستم خارج می شوند. ادامه دهید؟',
strictSyncConfirm: 'همگام سازی دقیق را تأیید کنید',
status: {
importable: 'کاربر جدید',
update_available: 'به روز رسانی موجود است',
up_to_date: 'به روز',
conflict: 'درگیری',
},
fields: {
name: 'نام کاربری',
externalDN: 'دایرکتوری DN',
externalID: 'شناسه خارجی',
authSourceStatus: 'وضعیت احراز هویت',
},
actions: {
created: 'ایجاد کنید',
updated: 'به روز رسانی',
reactivated: 'دوباره فعال کنید',
unchanged: 'بدون تغییر',
skipped: 'رد شد',
conflicts: 'درگیری',
conflict: 'درگیری',
missing: 'غیر فعال کردن',
errors: 'خطا',
error: 'خطا',
},
},
expiresEnterpriseAlert:
'یادآوری دوستانه: مجوز نسخه سازمانی شما در {0} روز منقضی می‌شود و همه ویژگی‌های نسخه سازمانی دیگر قابل دسترسی نخواهند بود. لطفاً به موقع تمدید کنید تا استفاده ادامه یابد.',
expiresProAlert:
@@ -4745,6 +4809,218 @@ const message = {
masterOnlyPermissionHelper: 'این مجوز فقط در گره اصلی اعمال می‌شود.',
view: 'مشاهده',
manage: 'مدیریت',
authManage: 'مدیریت احراز هویت',
auth: {
providerNavigation: 'ارائه دهندگان احراز هویت',
providers: {
ldap: 'AD/LDAP',
passkey: 'Passkey',
radius: 'Radius',
oidc: 'OIDC',
saml2: 'SAML2',
cas: 'CAS',
oauth2: 'OAuth2',
dingtalk: 'دینگ تاک',
feishu: 'فیشو',
wecom: 'WeCom',
},
providerDescriptions: {
ldap: 'سازگار با Active Directory، OpenLDAP و سایر خدمات LDAP',
passkey: 'از اعتبار دستگاه برای ورود بدون رمز عبور استفاده کنید',
radius: 'دسترسی به شبکه را از طریق سرویس Radius تأیید اعتبار کنید',
oidc: 'با OpenID Connect به یک ورود به سیستم سازمانی متصل شوید',
saml2: 'از SAML2 برای فدراسیون هویت سازمانی استفاده کنید',
cas: 'یک سرویس احراز هویت متمرکز را برای یک ورود به سیستم متصل کنید',
oauth2: 'یک سرویس هویت سازگار OAuth2 را وصل کنید',
dingtalk: 'از هویت سازمانی DingTalk و ورود به سیستم QR استفاده کنید',
feishu: 'از هویت سازمانی فیشو و همگام سازی حساب استفاده کنید',
wecom: 'با هویت عضو WeCom احراز هویت کنید',
},
planned: 'برنامه ریزی شده است',
plannedTitle: 'تنظیمات احراز هویت {0}',
plannedDesc: 'این ارائه دهنده احراز هویت برنامه ریزی شده است و هنوز در دسترس نیست.',
ldap: {
enable: 'فعال کردن',
enabled: 'فعال شد',
disabled: 'غیرفعال',
connection: 'اتصال اولیه',
connectionDesc: 'سرویس دایرکتوری و حساب bind مورد استفاده برای جستجوی کاربران را پیکربندی کنید.',
serverURL: 'آدرس سرور',
serverURLHelper: 'از URL های ldap:// و ldaps:// پشتیبانی می کند.',
userBaseDN: 'کاربر Base DN',
userBaseDNHelper: 'شروع DN برای جستجوهای کاربر LDAP. این می تواند یک OU، CN یا ریشه دامنه DN باشد.',
bindDN: 'DN را ببندید',
bindPassword: 'رمز عبور',
passwordSaved: 'برای حفظ رمز عبور ذخیره شده خالی بگذارید',
userSearch: 'جستجوی کاربر',
userSearchDesc:
'پایه و فیلتر جستجوی کاربر را تنظیم کنید، سپس ویژگی LDAP مورد استفاده به عنوان 1Panel name را ترسیم کنید.',
userFilter: 'فیلتر کاربر',
userFilterTooltip:
'%(user)s را با نام کاربری فرار شده جایگزین کنید، یا برای خواندن فهرست کامل، با * استفاده کنید.',
userFilterHelper: 'نام‌های کاربری قبل از درج در فیلتر LDAP حذف می‌شوند.',
attributeMap: 'نگاشت صفت',
attributeMapTooltip: 'نقشه برداری JSON از فیلد 1Panel name به ویژگی LDAP.',
attributeMapHelper: 'ویژگی LDAP نگاشت شده را روی فیلد 1Panel name تنظیم کنید.',
advanced: 'تنظیمات پیشرفته',
advancedDesc: 'صفحه بندی پرس و جو TLS و LDAP را پیکربندی کنید.',
strictSync: 'همگام سازی دقیق',
strictSyncTooltip:
'پس از وارد کردن کامل، کاربرانی که از این منبع LDAP غایب هستند غیرفعال می شوند اما حذف نمی شوند.',
strictSyncHelper:
'فقط برای یک واردات کامل کامل اعمال می شود. وارد کردن کاربران انتخابی هرگز سایر کاربران را غیرفعال نمی کند.',
skipTLSVerify: 'رد شدن از تأیید TLS',
skipTLSVerifyTooltip: 'تأیید گواهی را برای اتصالات LDAPS غیرفعال کنید.',
skipTLSVerifyHelper:
'فقط با یک گواهی خودامضا مورد اعتماد استفاده کنید. این تنظیم مستقل از همگام سازی دقیق است.',
connectTimeout: 'پایان زمان اتصال (ثانیه)',
searchPageSize: 'اندازه صفحه پرس و جو LDAP',
restore: 'بازیابی کنید',
testConnection: 'تست اتصال',
testLogin: 'تست ورود',
userImport: 'کاربران را وارد کنید',
saveBeforeImport: 'تنظیمات فعلی AD/LDAP را قبل از وارد کردن کاربران ذخیره کنید.',
format: 'قالب',
restoreExample: 'نمونه را بازیابی کنید',
mappingValid: 'معتبر JSON; name پیکربندی شده است.',
mappingInvalid: 'JSON معتبر وارد کنید.',
mappingObject: 'نگاشت ویژگی باید یک شی JSON باشد.',
mappingOnlyName: 'فقط نقشه برداری name پشتیبانی می شود.',
mappingStringValues: 'هر ویژگی نگاشت شده باید یک رشته باشد.',
mappingNameRequired: 'name باید یک رشته غیر خالی باشد.',
restored: 'آخرین تنظیمات ذخیره شده بازیابی شدند.',
connectionTestSuccess: 'تست اتصال LDAP با موفقیت انجام شد.',
recentTestSuccess: 'آخرین آزمایش موفق: {0}',
recentTestFailed: 'آخرین آزمایش ناموفق: {0}',
serverURLRequired: 'آدرس سرور LDAP را وارد کنید.',
serverURLInvalid: 'از یک URL معتبر ldap:// یا ldaps:// استفاده کنید.',
userBaseDNRequired: 'کاربر Base DN را وارد کنید.',
bindDNRequired: 'Bind DN را وارد کنید.',
passwordRequired: 'رمز عبور را وارد کنید.',
userFilterRequired: 'فیلتر کاربر را وارد کنید.',
connectTimeoutRequired: 'زمان اتصال را وارد کنید.',
searchPageSizeRequired: 'اندازه صفحه پرس و جو LDAP را وارد کنید.',
sync: {
title: 'همگام سازی برنامه ریزی شده',
description:
'فهرست کامل LDAP را بر اساس یک برنامه زمان بندی بخوانید و کاربران LDAP وارد شده را در 1Panel حفظ کنید.',
enable: 'زمانبندی را فعال کنید',
enableHelper:
'در صورت غیرفعال شدن، اجرای خودکار متوقف می شود. همگام سازی دستی در دسترس باقی می ماند.',
schedule: 'برنامه ریزی کنید',
daily: 'روزانه',
weekly: 'هفتگی',
customCron: 'سفارشی Cron',
preview: 'پیش نمایش',
previewTitle: '5 اجرا بعدی',
previewEmpty: 'زمان اجرا در دسترس نیست',
cronHelper: 'از عبارت استاندارد پنج فیلدی Cron استفاده کنید: دقیقه، ساعت، روز، ماه، روز هفته.',
autoImport: 'وارد کردن کاربران جدید',
autoImportHelper:
'وقتی غیرفعال است، فقط شناسه‌های دایرکتوری و وضعیت برای کاربران وارداتی LDAP حفظ می‌شود. کاربر جدیدی ایجاد نمی شود',
defaultRole: 'نقش کاربر جدید',
defaultRolePlaceholder: 'یک نقش را انتخاب کنید',
defaultRoleHelper: 'فقط برای کاربران ایجاد شده توسط همگام سازی برنامه ریزی شده اعمال می شود.',
defaultRoleRequired: 'نقشی را برای کاربران جدید LDAP انتخاب کنید.',
strictSyncHelper:
'کاربرانی که از یک پرس و جو کامل کامل غایب هستند غیرفعال می شوند و جلسات آنها پاک می شود. کاربران، نقش‌ها و مجوزها حذف نمی‌شوند.',
safetyTitle: 'کاربران گمشده فقط پس از یک پرس و جو کامل LDAP پردازش می شوند',
safetyDescription:
'پرس و جو ناموفق، مهلت زمانی، یا نتیجه صفحه ناقص هرگز وضعیت کاربر را تغییر نمی دهد. محدوده همگام سازی از نگاشت کاربر Base DN، فیلتر و ویژگی پیروی می کند.',
runNow: 'اکنون همگام سازی کنید',
lastRunSuccess: 'آخرین همگام سازی موفقیت آمیز: {0}',
lastRunFailed: 'آخرین همگام سازی ناموفق بود: {0}',
lastRunRunning: 'همگام سازی شروع شد: {0}',
sourceDisabled: 'قبل از اجرای همگام سازی، AD/LDAP را فعال و ذخیره کنید.',
cronRequired: 'عبارت Cron را وارد کنید.',
saveBeforeRun: 'قبل از اجرای کار، تنظیمات همگام سازی را ذخیره کنید.',
runConfirmTitle: 'همگام سازی دقیق را اجرا کنید',
runConfirmDescription:
'کاربران LDAP که یک پرس و جو کامل کامل ندارند غیرفعال می شوند و جلسات فعال آنها پاک می شود. ادامه دهید؟',
runSuccess: 'همگام سازی LDAP تکمیل شد.',
weekdays: {
0: 'یکشنبه',
1: 'دوشنبه',
2: 'سه شنبه',
3: 'چهارشنبه',
4: 'پنج شنبه',
5: 'جمعه',
6: 'شنبه',
},
},
syncLogs: {
title: 'همگام سازی گزارش ها',
description: 'نتایج همگام سازی زمان بندی شده و دستی LDAP را مرور کنید.',
startedAt: 'زمان شروع',
trigger: 'نوع اجرا',
manual: 'دستی',
scheduled: 'برنامه ریزی شده است',
success: 'موفقیت',
failed: 'شکست خورد',
running: 'در حال اجرا',
result: 'نتیجه',
resultSummary: '{0} ایجاد شد، {1} به‌روزرسانی شد، {2} موجود نیست',
duration: 'مدت زمان',
action: 'اقدام',
},
testLoginTitle: 'آزمایش ورود AD/LDAP',
testLoginDesc:
'فقط برای آزمایش احراز هویت، با یک اعتبار کاربری AD/LDAP متصل شوید. هیچ جلسه 1Panel ایجاد نشده است.',
ldapUsername: 'نام کاربری LDAP',
usernameRequired: 'نام کاربری LDAP را وارد کنید.',
startTest: 'شروع تست',
testLoginSuccess: 'احراز هویت با موفقیت انجام شد.',
testLoginSuccessWithDN: 'احراز هویت با موفقیت انجام شد. کاربر DN: {0}',
import: {
title: 'وارد کردن کاربران AD/LDAP',
source: 'منبع داده: دایرکتوری AD/LDAP',
lastRead: 'آخرین خوانده شده: {0}',
cacheHit: 'نتیجه ذخیره شده',
keywordPlaceholder: 'جستجوی نام کاربری',
search: 'جستجو کنید',
refresh: 'از LDAP بخوانید',
refreshTip: 'کش کوتاه مدت را نادیده بگیرید و فهرست LDAP را دوباره بخوانید.',
loadFailed: 'دایرکتوری LDAP خوانده نشد.',
retry: 'دوباره امتحان کنید',
noData: 'هیچ کاربر دایرکتوری پیدا نشد.',
username: 'نام کاربری',
status: 'وضعیت',
changes: 'تغییرات',
noChanges: 'بدون تغییر',
importable: 'آماده واردات',
updateAvailable: 'به روز رسانی موجود است',
upToDate: 'به روز',
conflict: 'تضاد نام',
selectedCount: '{0} انتخاب شد',
totalCount: '{0} کاربر',
newUserRole: 'نقش کاربر جدید',
newUserRoleRequired: 'نقشی را برای کاربران جدید انتخاب کنید.',
noNewUsers: 'هیچ کاربر جدیدی در این عملیات وجود ندارد.',
roleOnlyForNewUsers: 'نقش انتخاب شده فقط برای کاربران تازه ایجاد شده اعمال می شود.',
strictOff: 'همگام سازی دقیق غیرفعال است. وارد کردن کامل کاربران را غیرفعال نمی کند.',
importSelected: 'وارد کردن/به‌روزرسانی انتخاب شد ({0})',
importAll: 'وارد کردن/به‌روزرسانی همه ({0})',
previewTitle: 'واردات کامل را تأیید کنید',
previewDesc: 'فهرست کامل LDAP خوانده شد. کلمه کلیدی جستجو این عملیات را محدود نمی کند.',
created: 'ایجاد کنید',
updated: 'به روز رسانی',
unchanged: 'بدون تغییر',
conflicts: 'درگیری ها',
missing: 'غیر فعال کردن',
reactivated: 'دوباره فعال کنید',
strictWarning:
'همگام سازی دقیق فعال است. کاربرانی که در LDAP گم شده اند نمی توانند وارد سیستم شوند، اما سوابق، نقش ها و مجوزهای آنها حفظ می شود.',
missingUsers: 'کاربرانی که از LDAP غایب هستند',
missingScope: 'فقط این منبع LDAP تحت تأثیر قرار می گیرد.',
willDisable: 'غیر فعال خواهد شد',
confirmAll: 'واردات را تایید کنید',
confirmAllWithMissing: 'درون‌ریزی را تأیید و {0} کاربر را غیرفعال کنید',
executeSuccess: 'کاربران LDAP با موفقیت پردازش شدند.',
queryExpired: 'نتیجه دایرکتوری منقضی شد. دوباره از LDAP بخوانید.',
planIncomplete: 'دایرکتوری کامل خوانده شده ناقص است و قابل اجرا نیست.',
},
},
},
},
app: {
app: 'برنامه',
+277
View File
@@ -4235,6 +4235,70 @@ const message = {
noFail: 'マウント失敗はシステム起動に影響しません',
},
xpack: {
ldap: {
source: 'ソース',
directoryMissing: 'LDAP に存在しません',
localCredentialsManaged:
'このユーザーのユーザー名とパスワードは LDAP で管理されているためローカルでは変更できません',
sources: {
local: 'ローカル',
ldap: 'LDAP',
},
importUsers: 'AD/LDAP ユーザーをインポート',
searchUsersPlaceholder: 'ユーザー名を検索',
readFromLDAP: 'LDAP から読み取る',
selectedUsers: '{0} が選択されました',
queriedAt: '読み取り時刻',
cachedResult: 'キャッシュされた結果',
roleForNewUsers: '新規ユーザーの役割',
selectRole: '役割を選択してください',
roleOnlyForNewUsers: 'ロールはインポートによってユーザーが作成される場合にのみ必要です',
roleRequiredForNewUsers: '新しい LDAP ユーザーのロールを選択します',
changedFields: '変更されたフィールド',
importSelected: '選択したインポート',
importAll: 'すべてインポート',
importPreview: 'AD/LDAP インポートプレビュー',
importCompleted: 'AD/LDAP インポート完了',
incompletePreview: 'LDAP ディレクトリの読み取りが不完全でした再び LDAP から読み取ります',
missingUsersWarning: 'LDAP にないユーザーは厳密な同期によって無効になります',
missingUsersWarningDetail: 'ローカル LDAP ユーザー {0} 人がサインインできなくなります',
action: 'アクション',
reason: '理由',
noImportChanges: 'インポートの変更はありません',
confirmImport: 'インポートの確認',
created: '作成',
updated: '更新',
reactivated: '再有効化',
unchanged: '変更なし',
conflicts: '競合',
missing: '欠落',
missingUsersConfirm: 'LDAP に存在しない {0} 人のユーザーを無効化しセッションを終了します続行しますか',
strictSyncConfirm: '厳密な同期を確認する',
status: {
importable: '新規ユーザー',
update_available: '利用可能なアップデート',
up_to_date: '最新の状態',
conflict: '競合',
},
fields: {
name: 'ユーザー名',
externalDN: 'ディレクトリ DN',
externalID: '外部ID',
authSourceStatus: '認証状態',
},
actions: {
created: '作成',
updated: '更新',
reactivated: '再有効化',
unchanged: '変更なし',
skipped: 'スキップされました',
conflicts: '競合',
conflict: '競合',
missing: '無効にする',
errors: 'エラー',
error: 'エラー',
},
},
expiresEnterpriseAlert:
'ご注意: あなたのEnterprise Editionライセンスは{0}日後に終了しすべてのEnterprise Edition機能が使用できなくなります継続的な使用のために速やかに更新してください',
expiresProAlert:
@@ -4792,6 +4856,219 @@ const message = {
masterOnlyPermissionHelper: 'この権限はマスターノードでのみ有効です',
view: '表示',
manage: '管理',
authManage: '認証管理',
auth: {
providerNavigation: '認証プロバイダー',
providers: {
ldap: 'AD/LDAP',
passkey: 'Passkey',
radius: 'Radius',
oidc: 'OIDC',
saml2: 'SAML2',
cas: 'CAS',
oauth2: 'OAuth2',
dingtalk: 'DingTalk',
feishu: 'Feishu',
wecom: 'WeCom',
},
providerDescriptions: {
ldap: 'Active DirectoryOpenLDAPおよびその他の LDAP サービスと互換性があります',
passkey: 'パスワードなしのサインインにデバイス資格情報を使用する',
radius: 'Radius サービスを介したネットワーク アクセスの認証',
oidc: 'OpenID Connect を使用してエンタープライズ シングル サインオンを接続する',
saml2: 'エンタープライズ ID フェデレーションに SAML2 を使用する',
cas: 'シングル サインオンのための集中認証サービスに接続する',
oauth2: '互換性のある OAuth2 ID サービスに接続する',
dingtalk: 'DingTalk 組織 ID QR サインインを使用する',
feishu: 'Feishu 組織 ID とアカウント同期を使用する',
wecom: 'WeCom メンバー ID で認証する',
},
planned: '計画済み',
plannedTitle: '{0} 認証設定',
plannedDesc: 'この認証プロバイダーは計画されておりまだ利用できません',
ldap: {
enable: '有効にする',
enabled: '有効',
disabled: '無効',
connection: '基本接続',
connectionDesc: 'ユーザーの検索に使用するディレクトリ サービスとバインド アカウントを構成します',
serverURL: 'サーバーURL',
serverURLHelper: 'ldap:// および ldaps:// URL をサポートします。',
userBaseDN: 'ユーザー Base DN',
userBaseDNHelper:
'LDAP ユーザー検索のために DN を開始します OUCNまたはドメイン ルート DN にすることができます',
bindDN: 'バインド DN',
bindPassword: 'パスワード',
passwordSaved: '保存したパスワードを保持するには空白のままにしてください',
userSearch: 'ユーザー検索',
userSearchDesc:
'ユーザー検索ベースとフィルターを設定し1Panel name として使用される LDAP 属性をマップします',
userFilter: 'ユーザーフィルター',
userFilterTooltip:
'%(user)s をエスケープされたユーザー名に置き換えるかディレクトリ全体を読み取る場合は * に置き換えます',
userFilterHelper: 'ユーザー名はLDAP フィルターに挿入される前にエスケープされます',
attributeMap: '属性マッピング',
attributeMapTooltip: '1Panel name フィールドから LDAP 属性への JSON マッピング',
attributeMapHelper: '1Panel name フィールドにマップされる LDAP 属性を設定します',
advanced: '詳細設定',
advancedDesc: 'TLS および LDAP クエリ ページングを構成します',
strictSync: '厳密な同期',
strictSyncTooltip:
'完全なインポートが完了するとこの LDAP ソースから欠落しているユーザーは無効になりますが削除されません',
strictSyncHelper:
'完全な全件インポートにのみ適用されます選択したユーザーのインポートでは他のユーザーは無効化されません',
skipTLSVerify: 'TLS検証をスキップする',
skipTLSVerifyTooltip: 'LDAPS 接続の証明書検証を無効にします',
skipTLSVerifyHelper:
'信頼できる自己署名証明書のみを使用してくださいこの設定は厳密な同期とは独立しています',
connectTimeout: '接続タイムアウト ()',
searchPageSize: 'LDAP クエリ ページ サイズ',
restore: '復元',
testConnection: '接続テスト',
testLogin: 'ログインテスト',
userImport: 'ユーザーをインポートする',
saveBeforeImport: 'ユーザーをインポートする前に現在の AD/LDAP 設定を保存します',
format: 'フォーマット',
restoreExample: '復元の例',
mappingValid: '有効なJSON; name が設定されています',
mappingInvalid: '有効な JSON を入力してください',
mappingObject: '属性マッピングは JSON オブジェクトである必要があります',
mappingOnlyName: 'name マッピングのみがサポートされます',
mappingStringValues: 'マッピングされたすべての属性は文字列である必要があります',
mappingNameRequired: 'name は空ではない文字列である必要があります',
restored: '最後に保存された設定が復元されました',
connectionTestSuccess: 'LDAP 接続テストに成功しました',
recentTestSuccess: '最後のテストが成功しました: {0}',
recentTestFailed: '最後のテストが失敗しました: {0}',
serverURLRequired: 'LDAP サーバーの URL を入力します',
serverURLInvalid: '有効な ldap:// または ldaps:// URL を使用してください。',
userBaseDNRequired: 'ユーザー Base DN を入力します',
bindDNRequired: 'バインド DN を入力してください',
passwordRequired: 'パスワードを入力します',
userFilterRequired: 'ユーザーフィルターを入力します',
connectTimeoutRequired: '接続タイムアウトを入力します',
searchPageSizeRequired: 'LDAP クエリのページ サイズを入力します',
sync: {
title: 'スケジュールされた同期',
description:
'スケジュールに従って完全な LDAP ディレクトリを読み取りインポートされた LDAP ユーザーを 1Panel に維持します',
enable: 'スケジュールを有効にする',
enableHelper: '無効にすると自動実行が停止します手動同期は引き続き利用可能です',
schedule: 'スケジュール',
daily: '毎日',
weekly: '毎週',
customCron: 'カスタムCron',
preview: 'プレビュー',
previewTitle: '次の 5 回の実行',
previewEmpty: '利用可能な実行時間がありません',
cronHelper: '標準の 5 フィールド Cron (曜日) を使用します',
autoImport: '新しいユーザーをインポートする',
autoImportHelper:
'無効にするとインポートされた LDAP ユーザーのディレクトリ識別子とステータスのみが維持されます新しいユーザーは作成されません',
defaultRole: '新しいユーザーの役割',
defaultRolePlaceholder: '役割を選択してください',
defaultRoleHelper: 'スケジュールされた同期によって作成されたユーザーにのみ適用されます',
defaultRoleRequired: '新しい LDAP ユーザーのロールを選択します',
strictSyncHelper:
'完全な全件クエリで見つからないユーザーは無効化されセッションが終了しますユーザーロール権限は削除されません',
safetyTitle: 'LDAP の全件クエリが正常に完了した場合のみ欠落ユーザーを処理します',
safetyDescription:
'クエリの失敗タイムアウトまたは不完全なページング結果によってもユーザーのステータスは変更されません同期スコープはユーザー Base DNフィルターおよび属性マッピングに従います',
runNow: '今すぐ同期する',
lastRunSuccess: '最後に成功した同期: {0}',
lastRunFailed: '前回の同期失敗: {0}',
lastRunRunning: '同期が開始されました: {0}',
sourceDisabled: '同期を実行する前にAD/LDAP を有効にして保存します',
cronRequired: 'Cron 式を入力します',
saveBeforeRun: 'タスクを実行する前に同期設定を保存します',
runConfirmTitle: '厳密な同期を実行する',
runConfirmDescription:
'LDAP の全件クエリで見つからないユーザーを無効化しアクティブなセッションを終了します続行しますか',
runSuccess: 'LDAP の同期が完了しました',
weekdays: {
0: '日曜日',
1: '月曜日',
2: '火曜日',
3: '水曜日',
4: '木曜日',
5: '金曜日',
6: '土曜日',
},
},
syncLogs: {
title: 'ログを同期する',
description: 'スケジュールされたおよび手動の LDAP 同期結果を確認します',
startedAt: '開始時間',
trigger: '実行方式',
manual: '手動',
scheduled: '予定されている',
success: '成功',
failed: '失敗しました',
running: '実行中',
result: '結果',
resultSummary: '作成 {0}更新 {1}欠落 {2}',
duration: '所要時間',
action: 'アクション',
},
testLoginTitle: 'AD/LDAP ログインテスト',
testLoginDesc:
'認証のみをテストするためにAD/LDAP ユーザー資格情報をバインドします 1Panel セッションは作成されません',
ldapUsername: 'LDAP ユーザー名',
usernameRequired: 'LDAP ユーザー名を入力します',
startTest: 'テストの開始',
testLoginSuccess: '認証に成功しました',
testLoginSuccessWithDN: '認証に成功しましたユーザー DN: {0}',
import: {
title: 'AD/LDAP ユーザーをインポート',
source: 'データソース: AD/LDAP ディレクトリ',
lastRead: '最終読み取り: {0}',
cacheHit: 'キャッシュされた結果',
keywordPlaceholder: 'ユーザー名を検索',
search: '検索',
refresh: 'LDAP から読み取る',
refreshTip: '短期キャッシュを無視してLDAP ディレクトリを再度読み取ります',
loadFailed: 'LDAP ディレクトリの読み取りに失敗しました',
retry: '再試行',
noData: 'ディレクトリ ユーザーが見つかりません',
username: 'ユーザー名',
status: 'ステータス',
changes: '変更点',
noChanges: '変更なし',
importable: 'インポートの準備ができました',
updateAvailable: '利用可能なアップデート',
upToDate: '最新の状態',
conflict: '名前の競合',
selectedCount: '{0} が選択されました',
totalCount: '{0} 人のユーザー',
newUserRole: '新しいユーザーの役割',
newUserRoleRequired: '新しいユーザーの役割を選択します',
noNewUsers: 'この操作には新規ユーザーはいません',
roleOnlyForNewUsers: '選択したロールは新しく作成されたユーザーにのみ適用されます',
strictOff: '厳密な同期は無効になっています完全インポートではユーザーは無効になりません',
importSelected: '選択されたインポート/更新 ({0})',
importAll: 'すべてインポート/更新 ({0})',
previewTitle: '完全なインポートを確認する',
previewDesc:
'完全な LDAP ディレクトリが読み取られました検索キーワードによる制限はありません',
created: '作成',
updated: 'アップデート',
unchanged: '変わらない',
conflicts: '紛争',
missing: '無効にする',
reactivated: '再アクティブ化',
strictWarning:
'厳密な同期が有効になっています LDAP にいないユーザーはサインインできませんがレコードロール権限は保持されます',
missingUsers: 'LDAP からユーザーが欠落しています',
missingScope: 'この LDAP ソースのみが影響を受けます',
willDisable: '無効になります',
confirmAll: 'インポートの確認',
confirmAllWithMissing: 'インポートを確認し{0} 人のユーザーを無効化する',
executeSuccess: 'LDAP ユーザーは正常に処理されました',
queryExpired: 'ディレクトリ結果の有効期限が切れました再び LDAP から読み取ります',
planIncomplete: 'ディレクトリ全体の読み取りは不完全であるため実行できません',
},
},
},
},
app: {
app: 'APP',
+275
View File
@@ -4148,6 +4148,70 @@ const message = {
noFail: '마운트 실패는 시스템 시작에 영향을 미치지 않습니다',
},
xpack: {
ldap: {
source: '소스',
directoryMissing: 'LDAP에 없음',
localCredentialsManaged:
' 사용자의 사용자 이름과 비밀번호는 LDAP에서 관리되므로 로컬에서 변경할 없습니다.',
sources: {
local: '로컬',
ldap: 'LDAP',
},
importUsers: 'AD/LDAP 사용자 가져오기',
searchUsersPlaceholder: '사용자 이름 검색',
readFromLDAP: 'LDAP에서 읽기',
selectedUsers: '{0} 선택됨',
queriedAt: '읽기 시간',
cachedResult: '캐시된 결과',
roleForNewUsers: '신규 사용자의 역할',
selectRole: '역할 선택',
roleOnlyForNewUsers: '가져오기를 통해 사용자가 생성되는 경우에만 역할이 필요합니다.',
roleRequiredForNewUsers: '새로운 LDAP 사용자의 역할을 선택합니다.',
changedFields: '변경된 필드',
importSelected: '선택 항목 가져오기',
importAll: '모두 가져오기',
importPreview: 'AD/LDAP 가져오기 미리보기',
importCompleted: 'AD/LDAP 가져오기 완료',
incompletePreview: 'LDAP 디렉터리 읽기가 완료되지 않았습니다. LDAP에서 다시 읽어보세요.',
missingUsersWarning: 'LDAP에서 누락된 사용자는 엄격한 동기화로 인해 비활성화됩니다.',
missingUsersWarningDetail: '{0} 로컬 LDAP 사용자는 이상 로그인할 없습니다.',
action: '액션',
reason: '이유',
noImportChanges: '가져오기 변경사항 없음',
confirmImport: '가져오기 확인',
created: '만들기',
updated: '업데이트',
reactivated: '재활성화',
unchanged: '변경되지 않음',
conflicts: '충돌',
missing: '누락',
missingUsersConfirm: 'LDAP에서 누락된 {0}명의 사용자를 비활성화하고 로그아웃합니다. 계속하시겠습니까?',
strictSyncConfirm: '엄격한 동기화 확인',
status: {
importable: '신규 사용자',
update_available: '업데이트 가능',
up_to_date: '최신',
conflict: '충돌',
},
fields: {
name: '사용자 이름',
externalDN: '디렉토리 DN',
externalID: '외부 ID',
authSourceStatus: '인증 상태',
},
actions: {
created: '만들기',
updated: '업데이트',
reactivated: '재활성화',
unchanged: '변경되지 않음',
skipped: '건너뛰었습니다.',
conflicts: '충돌',
conflict: '충돌',
missing: '비활성화',
errors: '오류',
error: '오류',
},
},
expiresEnterpriseAlert:
'친절한 알림: 귀하의 Enterprise Edition 라이선스가 {0} 만료되며, 모든 Enterprise Edition 기능에 이상 접근할 없습니다. 지속적인 사용을 위해 신속하게 갱신하시기 바랍니다.',
expiresProAlert:
@@ -4699,6 +4763,217 @@ const message = {
masterOnlyPermissionHelper: ' 권한은 마스터 노드에서만 적용됩니다.',
view: '보기',
manage: '관리',
authManage: '인증 관리',
auth: {
providerNavigation: '인증 공급자',
providers: {
ldap: 'AD/LDAP',
passkey: 'Passkey',
radius: 'Radius',
oidc: 'OIDC',
saml2: 'SAML2',
cas: 'CAS',
oauth2: 'OAuth2',
dingtalk: 'DingTalk',
feishu: 'Feishu',
wecom: 'WeCom',
},
providerDescriptions: {
ldap: 'Active Directory, OpenLDAP 기타 LDAP 서비스와 호환 가능',
passkey: '비밀번호 없는 로그인을 위해 장치 자격 증명 사용',
radius: 'Radius 서비스를 통해 네트워크 액세스 인증',
oidc: 'OpenID Connect로 엔터프라이즈 Single Sign-On 연결',
saml2: '기업 ID 연동을 위해 SAML2 사용',
cas: 'Single Sign-On을 위한 중앙 집중식 인증 서비스 연결',
oauth2: '호환 가능한 OAuth2 ID 서비스 연결',
dingtalk: 'DingTalk 조직 ID QR 로그인 사용',
feishu: 'Feishu 조직 ID 계정 동기화 사용',
wecom: 'WeCom 회원 본인 인증',
},
planned: '예정',
plannedTitle: '{0} 인증 설정',
plannedDesc: ' 인증 공급자는 계획되어 있으며 아직 사용할 없습니다.',
ldap: {
enable: '활성화',
enabled: '활성화됨',
disabled: '비활성화됨',
connection: '기본 연결',
connectionDesc: '사용자 검색에 사용되는 디렉터리 서비스와 바인딩 계정을 구성합니다.',
serverURL: '서버 URL',
serverURLHelper: 'ldap:// 및 ldaps:// URL을 지원합니다.',
userBaseDN: '사용자 Base DN',
userBaseDNHelper: 'LDAP 사용자 검색을 위해 DN 시작 OU, CN 또는 도메인 루트 DN일 있습니다.',
bindDN: 'DN 바인딩',
bindPassword: '비밀번호',
passwordSaved: '저장된 비밀번호를 유지하려면 비워두세요.',
userSearch: '사용자 검색',
userSearchDesc:
'사용자 검색 기반 필터를 설정한 다음 1Panel name로 사용되는 LDAP 속성을 매핑합니다.',
userFilter: '사용자 필터',
userFilterTooltip:
'%(user)s를 이스케이프된 사용자 이름으로 바꾸거나 전체 디렉터리 읽기를 위해 * 바꿉니다.',
userFilterHelper: '사용자 이름은 LDAP 필터에 삽입되기 전에 이스케이프됩니다.',
attributeMap: '속성 매핑',
attributeMapTooltip: '1Panel name 필드에서 LDAP 속성으로 매핑되는 JSON.',
attributeMapHelper: '1Panel name 필드에 매핑된 LDAP 속성을 설정합니다.',
advanced: '고급 설정',
advancedDesc: 'TLS LDAP 쿼리 페이징을 구성합니다.',
strictSync: '엄격한 동기화',
strictSyncTooltip:
'전체 가져오기가 완료된 LDAP 소스에서 누락된 사용자는 비활성화되지만 삭제되지는 않습니다.',
strictSyncHelper:
'완전한 전체 가져오기에만 적용됩니다. 선택한 사용자를 가져와도 다른 사용자는 비활성화되지 않습니다.',
skipTLSVerify: 'TLS 확인 건너뛰기',
skipTLSVerifyTooltip: 'LDAPS 연결에 대한 인증서 확인을 비활성화합니다.',
skipTLSVerifyHelper:
'신뢰할 있는 자체 서명된 인증서에만 사용하세요. 설정은 엄격한 동기화와 무관합니다.',
connectTimeout: '연결 시간 초과()',
searchPageSize: 'LDAP 쿼리 페이지 크기',
restore: '복원',
testConnection: '연결 테스트',
testLogin: '로그인 테스트',
userImport: '사용자 가져오기',
saveBeforeImport: '사용자를 가져오기 전에 현재 AD/LDAP 설정을 저장하십시오.',
format: '형식',
restoreExample: '복원 예시',
mappingValid: '유효한 JSON; name가 구성되었습니다.',
mappingInvalid: '유효한 JSON를 입력하세요.',
mappingObject: '속성 매핑은 JSON 개체여야 합니다.',
mappingOnlyName: 'name 매핑만 지원됩니다.',
mappingStringValues: '매핑된 모든 속성은 문자열이어야 합니다.',
mappingNameRequired: 'name는 비어 있지 않은 문자열이어야 합니다.',
restored: '마지막으로 저장된 설정이 복원되었습니다.',
connectionTestSuccess: 'LDAP 연결 테스트에 성공했습니다.',
recentTestSuccess: '마지막 테스트 성공: {0}',
recentTestFailed: '마지막 테스트 실패: {0}',
serverURLRequired: 'LDAP 서버 URL을 입력하세요.',
serverURLInvalid: '유효한 ldap:// 또는 ldaps:// URL을 사용하세요.',
userBaseDNRequired: '사용자 Base DN를 입력합니다.',
bindDNRequired: '바인딩 DN를 입력합니다.',
passwordRequired: '비밀번호를 입력하세요.',
userFilterRequired: '사용자 필터를 입력하세요.',
connectTimeoutRequired: '연결 시간 초과를 입력합니다.',
searchPageSizeRequired: 'LDAP 쿼리 페이지 크기를 입력합니다.',
sync: {
title: '예약된 동기화',
description: '일정에 따라 전체 LDAP 디렉터리를 읽고 가져온 LDAP 사용자를 1Panel에 유지합니다.',
enable: '일정 활성화',
enableHelper: '비활성화되면 자동 실행이 중지됩니다. 수동 동기화는 계속 사용할 있습니다.',
schedule: '일정',
daily: '매일',
weekly: '주간',
customCron: '커스텀 Cron',
preview: '미리보기',
previewTitle: '다음 5 실행',
previewEmpty: '사용 가능한 실행 시간이 없습니다.',
cronHelper: '표준 5 필드 Cron 표현식(, , , , 요일) 사용합니다.',
autoImport: ' 사용자 가져오기',
autoImportHelper:
'비활성화되면 가져온 LDAP 사용자에 대해 디렉터리 식별자와 상태만 유지됩니다. 새로운 사용자가 생성되지 않습니다.',
defaultRole: '새로운 사용자 역할',
defaultRolePlaceholder: '역할 선택',
defaultRoleHelper: '예약된 동기화로 생성된 사용자에게만 적용됩니다.',
defaultRoleRequired: '새로운 LDAP 사용자의 역할을 선택합니다.',
strictSyncHelper:
'완전한 전체 쿼리에서 누락된 사용자는 비활성화되고 해당 세션이 지워집니다. 사용자, 역할 권한은 삭제되지 않습니다.',
safetyTitle: '누락된 사용자는 완전한 LDAP 전체 쿼리 후에만 처리됩니다.',
safetyDescription:
'실패한 쿼리, 시간 초과 또는 불완전한 페이징 결과는 사용자 상태를 변경하지 않습니다. 동기화 범위는 사용자 Base DN, 필터 특성 매핑을 따릅니다.',
runNow: '지금 동기화',
lastRunSuccess: '마지막 동기화 성공: {0}',
lastRunFailed: '마지막 동기화 실패: {0}',
lastRunRunning: '동기화 시작됨: {0}',
sourceDisabled: '동기화를 실행하기 전에 AD/LDAP를 활성화하고 저장하세요.',
cronRequired: 'Cron 표현식을 입력하세요.',
saveBeforeRun: '작업을 실행하기 전에 동기화 설정을 저장하십시오.',
runConfirmTitle: '엄격한 동기화 실행',
runConfirmDescription:
'완전한 전체 쿼리에서 누락된 LDAP 사용자를 비활성화하고 활성 세션을 종료합니다. 계속하시겠습니까?',
runSuccess: 'LDAP 동기화가 완료되었습니다.',
weekdays: {
0: '일요일',
1: '월요일',
2: '화요일',
3: '수요일',
4: '목요일',
5: '금요일',
6: '토요일',
},
},
syncLogs: {
title: '동기화 로그',
description: '예약된 수동 LDAP 동기화 결과를 검토합니다.',
startedAt: '시작 시간',
trigger: '실행 방식',
manual: '수동',
scheduled: '예정됨',
success: '성공',
failed: '실패',
running: '실행 ',
result: '결과',
resultSummary: '{0} 생성, {1} 업데이트, {2} 누락',
duration: '기간',
action: '액션',
},
testLoginTitle: 'AD/LDAP 로그인 테스트',
testLoginDesc:
'인증을 테스트하기 위해 AD/LDAP 사용자 자격 증명으로 바인딩합니다. 1Panel 세션이 생성되지 않습니다.',
ldapUsername: 'LDAP 사용자 이름',
usernameRequired: 'LDAP 사용자 이름을 입력하세요.',
startTest: '테스트 시작',
testLoginSuccess: '인증에 성공했습니다.',
testLoginSuccessWithDN: '인증에 성공했습니다. 사용자 DN: {0}',
import: {
title: 'AD/LDAP 사용자 가져오기',
source: '데이터 소스: AD/LDAP 디렉토리',
lastRead: '마지막으로 읽은 날짜: {0}',
cacheHit: '캐시된 결과',
keywordPlaceholder: '사용자 이름 검색',
search: '검색',
refresh: 'LDAP에서 읽기',
refreshTip: '단기 캐시를 무시하고 LDAP 디렉토리를 다시 읽으십시오.',
loadFailed: 'LDAP 디렉터리를 읽지 못했습니다.',
retry: '재시도',
noData: '디렉터리 사용자를 찾을 없습니다.',
username: '사용자 이름',
status: '상태',
changes: '변경 사항',
noChanges: '변경사항 없음',
importable: '가져올 준비가 되었습니다.',
updateAvailable: '업데이트 가능',
upToDate: '최신',
conflict: '이름 충돌',
selectedCount: '{0} 선택됨',
totalCount: '{0}',
newUserRole: '새로운 사용자 역할',
newUserRoleRequired: ' 사용자의 역할을 선택합니다.',
noNewUsers: ' 작업에는 새로운 사용자가 없습니다.',
roleOnlyForNewUsers: '선택한 역할은 새로 생성된 사용자에게만 적용됩니다.',
strictOff:
'엄격한 동기화가 비활성화되었습니다. 전체 가져오기는 사용자를 비활성화하지 않습니다.',
importSelected: '가져오기/업데이트 선택됨({0})',
importAll: '모두 가져오기/업데이트({0})',
previewTitle: '전체 가져오기 확인',
previewDesc: '전체 LDAP 디렉토리를 읽었습니다. 검색 키워드는 작업을 제한하지 않습니다.',
created: '만들기',
updated: '업데이트',
unchanged: '변경되지 않음',
conflicts: '충돌',
missing: '비활성화',
reactivated: '재활성화',
strictWarning:
'엄격한 동기화가 활성화되었습니다. LDAP에서 누락된 사용자는 로그인할 없지만 해당 기록, 역할 권한은 유지됩니다.',
missingUsers: 'LDAP에서 누락된 사용자',
missingScope: ' LDAP 소스만 영향을 받습니다.',
willDisable: '비활성화됩니다',
confirmAll: '가져오기 확인',
confirmAllWithMissing: '가져오기를 확인하고 {0}명의 사용자 비활성화',
executeSuccess: 'LDAP 사용자가 성공적으로 처리되었습니다.',
queryExpired: '디렉터리 결과가 만료되었습니다. LDAP에서 다시 읽어보세요.',
planIncomplete: '전체 디렉터리 읽기가 불완전하여 실행할 없습니다.',
},
},
},
},
app: {
app: 'APP',
+275
View File
@@ -4112,6 +4112,69 @@ const message = {
noFail: 'ຄວາມລົ້ມເຫຼວໃນການ Mount ຈະບໍ່ມີຜົນຕໍ່ການເລີ່ມຕົ້ນລະບົບ',
},
xpack: {
ldap: {
source: 'ທີ່ມາ',
directoryMissing: 'ບໍ່ພົບໃນ LDAP',
localCredentialsManaged: 'ຊື່ຜູ້ໃຊ້ ແລະລະຫັດຜ່ານຖືກຈັດການໂດຍ LDAP ແລະບໍ່ສາມາດປ່ຽນຢູ່ໃນທ້ອງຖິ່ນໄດ້.',
sources: {
local: 'ທ້ອງຖິ່ນ',
ldap: 'LDAP',
},
importUsers: 'ນໍາເຂົ້າຜູ້ໃຊ້ AD/LDAP',
searchUsersPlaceholder: 'ຊອກຫາຊື່ຜູ້ໃຊ້',
readFromLDAP: 'ອ່ານຈາກ LDAP',
selectedUsers: 'ເລືອກ {0} ແລ້ວ',
queriedAt: 'ເວລາອ່ານ',
cachedResult: 'ຜົນໄດ້ຮັບຈາກຖານຄວາມຈໍາ',
roleForNewUsers: 'ບົດບາດສໍາລັບຜູ້ໃຊ້ໃຫມ່',
selectRole: 'ເລືອກບົດບາດ',
roleOnlyForNewUsers: 'ພາລະບົດບາດແມ່ນຕ້ອງການພຽງແຕ່ໃນເວລາທີ່ການນໍາເຂົ້າສ້າງຜູ້ໃຊ້.',
roleRequiredForNewUsers: 'ເລືອກບົດບາດສຳລັບຜູ້ໃຊ້ LDAP ໃໝ່.',
changedFields: 'ຊ່ອງຂໍ້ມູນທີ່ມີການປ່ຽນແປງ',
importSelected: 'ເລືອກການນໍາເຂົ້າ',
importAll: 'ນຳເຂົ້າທັງໝົດ',
importPreview: 'ຕົວຢ່າງການນໍາເຂົ້າ AD/LDAP',
importCompleted: 'ການນໍາເຂົ້າ AD/LDAP ສໍາເລັດ',
incompletePreview: 'ໄດເຣັກທໍຣີ LDAP ອ່ານບໍ່ຄົບຖ້ວນ. ອ່ານຈາກ LDAP ອີກເທື່ອຫນຶ່ງ.',
missingUsersWarning: 'ຜູ້ໃຊ້ທີ່ຂາດຫາຍໄປຈາກ LDAP ຈະຖືກປິດໃຊ້ງານໂດຍການຊິ້ງຂໍ້ມູນຢ່າງເຂັ້ມງວດ.',
missingUsersWarningDetail: 'ຜູ້ໃຊ້ LDAP ທ້ອງຖິ່ນ {0} ຄົນຈະບໍ່ສາມາດເຂົ້າລະບົບໄດ້.',
action: 'ການປະຕິບັດ',
reason: 'ເຫດຜົນ',
noImportChanges: 'ບໍ່ມີການປ່ຽນແປງການນໍາເຂົ້າ',
confirmImport: 'ຢືນຢັນການນໍາເຂົ້າ',
created: 'ສ້າງ',
updated: 'ອັບເດດ',
reactivated: 'ເປີດໃຊ້ຄືນໃໝ່',
unchanged: 'ບໍ່ປ່ຽນແປງ',
conflicts: 'ຂໍ້ຂັດແຍ່ງ',
missing: 'ຫາຍໄປ',
missingUsersConfirm: 'ຜູ້ໃຊ້ {0} ຫາຍໄປຈາກ LDAP ຈະຖືກປິດການນຳໃຊ້ ແລະອອກຈາກລະບົບ. ສືບຕໍ່?',
strictSyncConfirm: 'ຢືນຢັນການ synchronization ທີ່ເຄັ່ງຄັດ',
status: {
importable: 'ຜູ້ໃຊ້ໃຫມ່',
update_available: 'ມີອັບເດດ',
up_to_date: 'ເຖິງວັນທີ',
conflict: 'ການຂັດແຍ້ງ',
},
fields: {
name: 'ຊື່ຜູ້ໃຊ້',
externalDN: 'ໄດເລກະທໍລີ DN',
externalID: 'ID ພາຍນອກ',
authSourceStatus: 'ສະຖານະການກວດສອບ',
},
actions: {
created: 'ສ້າງ',
updated: 'ອັບເດດ',
reactivated: 'ເປີດໃຊ້ຄືນໃໝ່',
unchanged: 'ບໍ່ປ່ຽນແປງ',
skipped: 'ຂ້າມ',
conflicts: 'ການຂັດແຍ້ງ',
conflict: 'ການຂັດແຍ້ງ',
missing: 'ປິດໃຊ້ງານ',
errors: 'ຜິດພາດ',
error: 'ຜິດພາດ',
},
},
expiresEnterpriseAlert:
'ຄຳເຕືອນ: ໃບອະນຸຍາດເວີຊັນ Enterprise ຂອງທ່ານຈະໝົດອາຍຸໃນອີກ {0} ວັນ, ຟີເຈີທັງໝົດຂອງເວີຊັນ Enterprise ຈະບໍ່ສາມາດໃຊ້ໄດ້. ກະລຸນາຕໍ່ອາຍຸໃຫ້ທັນເວລາ.',
expiresProAlert:
@@ -4664,6 +4727,218 @@ const message = {
masterOnlyPermissionHelper: 'ສິດນີ້ມີຜົນສະເພາະຢູ່ໃນໂນດຫຼັກເທົ່ານັ້ນ.',
view: 'ເບິ່ງ',
manage: 'ຈັດການ',
authManage: 'ການຢືນຢັນ',
auth: {
providerNavigation: 'ຜູ້ໃຫ້ບໍລິການຢັ້ງຢືນ',
providers: {
ldap: 'AD/LDAP',
passkey: 'Passkey',
radius: 'Radius',
oidc: 'OIDC',
saml2: 'SAML2',
cas: 'CAS',
oauth2: 'OAuth2',
dingtalk: 'DingTalk',
feishu: 'Feishu',
wecom: 'WeCom',
},
providerDescriptions: {
ldap: 'ເຂົ້າກັນໄດ້ກັບ Active Directory, OpenLDAP, ແລະບໍລິການ LDAP ອື່ນໆ',
passkey: 'ໃຊ້ຂໍ້ມູນປະຈຳຕົວຂອງອຸປະກອນສຳລັບການເຂົ້າສູ່ລະບົບແບບບໍ່ມີລະຫັດຜ່ານ',
radius: 'ກວດສອບການເຂົ້າເຖິງເຄືອຂ່າຍຜ່ານບໍລິການ Radius',
oidc: 'ເຊື່ອມຕໍ່ວິສາຫະກິດດຽວເຂົ້າສູ່ລະບົບດ້ວຍ OpenID Connect',
saml2: 'ໃຊ້ SAML2 ສໍາລັບສະຫະພັນເອກກະລັກວິສາຫະກິດ',
cas: 'ເຊື່ອມຕໍ່ການບໍລິການການພິສູດຢືນຢັນແບບສູນກາງສໍາລັບການເຂົ້າສູ່ລະບົບດຽວ',
oauth2: 'ເຊື່ອມຕໍ່ການບໍລິການຕົວຕົນ OAuth2 ທີ່ເຂົ້າກັນໄດ້',
dingtalk: 'ໃຊ້ຕົວຕົນຂອງອົງການ DingTalk ແລະການເຂົ້າສູ່ລະບົບ QR',
feishu: 'ໃຊ້ຕົວຕົນຂອງອົງການ Feishu ແລະ synchronization ບັນຊີ',
wecom: 'ພິສູດຢືນຢັນຕົວຕົນຂອງສະມາຊິກ WeCom',
},
planned: 'ວາງແຜນ',
plannedTitle: 'ການຕັ້ງຄ່າການພິສູດຢືນຢັນ {0}',
plannedDesc: 'ຜູ້ໃຫ້ບໍລິການການພິສູດຢືນຢັນນີ້ຖືກວາງແຜນໄວ້ ແລະຍັງບໍ່ສາມາດໃຊ້ໄດ້ເທື່ອ.',
ldap: {
enable: 'ເປີດໃຊ້',
enabled: 'ເປີດໃຊ້ແລ້ວ',
disabled: 'ປິດໃຊ້ງານ',
connection: 'ການເຊື່ອມຕໍ່ພື້ນຖານ',
connectionDesc: 'ຕັ້ງຄ່າບໍລິການໄດເລກະທໍລີ ແລະບັນຊີຜູກມັດທີ່ໃຊ້ເພື່ອຊອກຫາຜູ້ໃຊ້.',
serverURL: 'URL ເຊີບເວີ',
serverURLHelper: 'ຮອງຮັບ ldap:// ແລະ ldaps:// URLs.',
userBaseDN: 'ຜູ້ໃຊ້ Base DN',
userBaseDNHelper:
'ເລີ່ມຕົ້ນ DN ສໍາລັບການຄົ້ນຫາຂອງຜູ້ໃຊ້ LDAP; ມັນສາມາດເປັນ OU, CN, ຫຼືຮາກໂດເມນ DN.',
bindDN: 'ຜູກມັດ DN',
bindPassword: 'ລະຫັດຜ່ານ',
passwordSaved: 'ປ່ອຍຫວ່າງໄວ້ເພື່ອຮັກສາລະຫັດຜ່ານທີ່ບັນທຶກໄວ້',
userSearch: 'ຄົ້ນຫາຜູ້ໃຊ້',
userSearchDesc:
'ກໍານົດຖານຄົ້ນຫາຂອງຜູ້ໃຊ້ແລະການກັ່ນຕອງ, ຫຼັງຈາກນັ້ນສ້າງແຜນທີ່ຄຸນລັກສະນະ LDAP ທີ່ໃຊ້ເປັນ 1Panel name.',
userFilter: 'ຕົວກອງຜູ້ໃຊ້',
userFilterTooltip: 'ແທນທີ່ %(user)s ດ້ວຍຊື່ຜູ້ໃຊ້ທີ່ໜີໄປ, ຫຼືດ້ວຍ * ສໍາລັບການອ່ານໄດເລກະທໍລີເຕັມ.',
userFilterHelper: 'ຊື່ຜູ້ໃຊ້ຖືກຫລົບຫນີກ່ອນທີ່ພວກມັນຈະຖືກໃສ່ເຂົ້າໄປໃນຕົວກອງ LDAP.',
attributeMap: 'ການສ້າງແຜນທີ່ຄຸນສົມບັດ',
attributeMapTooltip: 'ການສ້າງແຜນທີ່ JSON ຈາກຊ່ອງຂໍ້ມູນ 1Panel name ໄປຫາຄຸນສົມບັດ LDAP.',
attributeMapHelper: 'ຕັ້ງຄຸນສົມບັດ LDAP ແຜນທີ່ໃສ່ກັບຊ່ອງຂໍ້ມູນ 1Panel name.',
advanced: 'ການຕັ້ງຄ່າຂັ້ນສູງ',
advancedDesc: 'ຕັ້ງຄ່າ TLS ແລະ LDAP query paging.',
strictSync: 'synchronization ຢ່າງເຂັ້ມງວດ',
strictSyncTooltip:
'ຫຼັງຈາກການນໍາເຂົ້າຄົບຖ້ວນສົມບູນ, ຜູ້ໃຊ້ທີ່ຂາດຫາຍໄປຈາກແຫຼ່ງ LDAP ນີ້ຖືກປິດໃຊ້ງານແຕ່ບໍ່ໄດ້ຖືກລຶບຖິ້ມ.',
strictSyncHelper:
'ນຳໃຊ້ກັບການນຳເຂົ້າເຕັມຮູບແບບເທົ່ານັ້ນ. ການນໍາເຂົ້າຜູ້ໃຊ້ທີ່ເລືອກບໍ່ເຄີຍປິດຜູ້ໃຊ້ອື່ນ.',
skipTLSVerify: 'ຂ້າມການຢັ້ງຢືນ TLS',
skipTLSVerifyTooltip: 'ປິດການໃຊ້ງານການຢັ້ງຢືນໃບຢັ້ງຢືນສໍາລັບການເຊື່ອມຕໍ່ LDAPS.',
skipTLSVerifyHelper:
'ໃຊ້ພຽງແຕ່ມີໃບຢັ້ງຢືນການເຊັນດ້ວຍຕົນເອງທີ່ເຊື່ອຖືໄດ້. ການຕັ້ງຄ່ານີ້ແມ່ນເປັນເອກະລາດຂອງການ synchronization ທີ່ເຄັ່ງຄັດ.',
connectTimeout: 'ໝົດເວລາການເຊື່ອມຕໍ່ (ວິນາທີ)',
searchPageSize: 'LDAP ຂະໜາດໜ້າສອບຖາມ',
restore: 'ຟື້ນຟູ',
testConnection: 'ທົດສອບການເຊື່ອມຕໍ່',
testLogin: 'ທົດສອບການເຂົ້າສູ່ລະບົບ',
userImport: 'ນໍາເຂົ້າຜູ້ໃຊ້',
saveBeforeImport: 'ບັນທຶກການຕັ້ງຄ່າ AD/LDAP ໃນປັດຈຸບັນກ່ອນທີ່ຈະນໍາເຂົ້າຜູ້ໃຊ້.',
format: 'ຮູບແບບ',
restoreExample: 'ຟື້ນຟູຕົວຢ່າງ',
mappingValid: 'ຖືກຕ້ອງ JSON; name ຖືກຕັ້ງຄ່າ.',
mappingInvalid: 'ໃສ່ JSON ທີ່ຖືກຕ້ອງ.',
mappingObject: 'ການສ້າງແຜນທີ່ຄຸນລັກສະນະຕ້ອງເປັນວັດຖຸ JSON.',
mappingOnlyName: 'ຮອງຮັບພຽງແຕ່ການສ້າງແຜນທີ່ name.',
mappingStringValues: 'ທຸກໆຄຸນລັກສະນະທີ່ເຮັດແຜນທີ່ຕ້ອງເປັນສະຕຣິງ.',
mappingNameRequired: 'name ຕ້ອງເປັນສະຕຣິງທີ່ບໍ່ຫວ່າງເປົ່າ.',
restored: 'ການຕັ້ງຄ່າທີ່ບັນທຶກໄວ້ຫຼ້າສຸດໄດ້ຖືກຟື້ນຟູຄືນມາ.',
connectionTestSuccess: 'ການທົດສອບການເຊື່ອມຕໍ່ LDAP ສຳເລັດແລ້ວ.',
recentTestSuccess: 'ການທົດສອບຄັ້ງສຸດທ້າຍປະສົບຜົນສໍາເລັດ: {0}',
recentTestFailed: 'ການທົດສອບຄັ້ງສຸດທ້າຍລົ້ມເຫລວ: {0}',
serverURLRequired: 'ໃສ່ URL ເຊີບເວີ LDAP.',
serverURLInvalid: 'ໃຊ້ ldap:// ຫຼື ldaps:// URL ທີ່ຖືກຕ້ອງ.',
userBaseDNRequired: 'ໃສ່ຜູ້ໃຊ້ Base DN.',
bindDNRequired: 'ໃສ່ Bind DN.',
passwordRequired: 'ໃສ່ລະຫັດຜ່ານ.',
userFilterRequired: 'ໃສ່ຕົວກອງຜູ້ໃຊ້.',
connectTimeoutRequired: 'ກະລຸນາໃສ່ການໝົດເວລາການເຊື່ອມຕໍ່.',
searchPageSizeRequired: 'ໃສ່ຂະໜາດຂອງໜ້າສອບຖາມ LDAP.',
sync: {
title: 'ການຊິງຄ໌ທີ່ກໍານົດເວລາ',
description: 'ອ່ານລາຍຊື່ LDAP ເຕັມໃນຕາຕະລາງແລະຮັກສາຜູ້ໃຊ້ LDAP ທີ່ນໍາເຂົ້າໃນ 1Panel.',
enable: 'ເປີດໃຊ້ຕາຕະລາງ',
enableHelper:
'ເມື່ອປິດການໃຊ້ງານ, ການປະຕິບັດອັດຕະໂນມັດຢຸດເຊົາ; ການ synchronization ຄູ່ມືຍັງມີຢູ່.',
schedule: 'ຕາຕະລາງ',
daily: 'ປະຈໍາວັນ',
weekly: 'ອາທິດ',
customCron: 'Cron ແບບກຳນົດເອງ',
preview: 'ເບິ່ງຕົວຢ່າງ',
previewTitle: 'ການດຳເນີນການ 5 ຄັ້ງຕໍ່ໄປ',
previewEmpty: 'ບໍ່ມີເວລາປະຕິບັດ',
cronHelper: 'ໃຊ້ການສະແດງອອກ Cron ຫ້າຊ່ອງມາດຕະຖານ: ນາທີ, ຊົ່ວໂມງ, ມື້, ເດືອນ, ມື້ເຮັດວຽກ.',
autoImport: 'ນໍາເຂົ້າຜູ້ໃຊ້ໃຫມ່',
autoImportHelper:
'ເມື່ອປິດໃຊ້ງານ, ມີພຽງແຕ່ຕົວລະບຸໄດເລກະທໍລີ ແລະສະຖານະທີ່ຖືກຮັກສາໄວ້ສໍາລັບຜູ້ໃຊ້ LDAP ທີ່ນໍາເຂົ້າມາ; ບໍ່ມີຜູ້ໃຊ້ໃຫມ່ຖືກສ້າງຂຶ້ນ.',
defaultRole: 'ບົດບາດຜູ້ໃຊ້ໃຫມ່',
defaultRolePlaceholder: 'ເລືອກບົດບາດ',
defaultRoleHelper: 'ນຳໃຊ້ກັບຜູ້ໃຊ້ທີ່ສ້າງຂຶ້ນໂດຍການຊິງໂຄຣໄນກຳນົດເວລາເທົ່ານັ້ນ.',
defaultRoleRequired: 'ເລືອກບົດບາດສຳລັບຜູ້ໃຊ້ LDAP ໃໝ່.',
strictSyncHelper:
'ຜູ້ໃຊ້ທີ່ຂາດຫາຍໄປຈາກການສອບຖາມເຕັມທີ່ຖືກປິດໃຊ້ງານແລະເຊດຊັນຂອງພວກເຂົາຖືກລຶບລ້າງ; ຜູ້ໃຊ້, ພາລະບົດບາດ, ແລະການອະນຸຍາດບໍ່ໄດ້ຖືກລຶບ.',
safetyTitle:
'ຜູ້ໃຊ້ທີ່ຂາດໄປແມ່ນໄດ້ຮັບການປະຕິບັດພຽງແຕ່ຫຼັງຈາກການສອບຖາມເຕັມ LDAP ທີ່ສົມບູນ',
safetyDescription:
'ການສອບຖາມທີ່ລົ້ມເຫລວ, ໝົດເວລາ, ຫຼືຜົນຂອງ paged ບໍ່ຄົບຖ້ວນບໍ່ເຄີຍປ່ຽນສະຖານະຜູ້ໃຊ້. ຂອບເຂດການຊິ້ງຂໍ້ມູນປະຕິບັດຕາມຜູ້ໃຊ້ Base DN, ການກັ່ນຕອງ, ແລະການສ້າງແຜນທີ່ຄຸນລັກສະນະ.',
runNow: 'ຊິ້ງຂໍ້ມູນດຽວນີ້',
lastRunSuccess: 'ການຊິ້ງຂໍ້ມູນຫຼ້າສຸດສຳເລັດແລ້ວ: {0}',
lastRunFailed: 'ການຊິ້ງຂໍ້ມູນຫຼ້າສຸດລົ້ມເຫລວ: {0}',
lastRunRunning: 'ເລີ່ມການຊິ້ງຂໍ້ມູນ: {0}',
sourceDisabled: 'ເປີດໃຊ້ ແລະບັນທຶກ AD/LDAP ກ່ອນທີ່ຈະດໍາເນີນການ synchronization.',
cronRequired: 'ໃສ່ການສະແດງອອກ Cron.',
saveBeforeRun: 'ບັນທຶກການຕັ້ງຄ່າ synchronization ກ່ອນທີ່ຈະດໍາເນີນການວຽກງານ.',
runConfirmTitle: 'ດໍາເນີນການ synchronization ທີ່ເຄັ່ງຄັດ',
runConfirmDescription:
'ຜູ້ໃຊ້ LDAP ຫາຍໄປຈາກການສອບຖາມເຕັມທີ່ຈະຖືກປິດໃຊ້ງານ ແລະເຊດຊັນທີ່ເຄື່ອນໄຫວຂອງເຂົາເຈົ້າຖືກລຶບລ້າງ. ສືບຕໍ່?',
runSuccess: 'ການຊິ້ງຂໍ້ມູນ LDAP ສຳເລັດແລ້ວ.',
weekdays: {
0: 'ວັນອາທິດ',
1: 'ວັນຈັນ',
2: 'ວັນອັງຄານ',
3: 'ວັນພຸດ',
4: 'ວັນພະຫັດ',
5: 'ວັນສຸກ',
6: 'ວັນເສົາ',
},
},
syncLogs: {
title: 'ບັນທຶກການຊິ້ງຂໍ້ມູນ',
description: 'ກວດເບິ່ງຜົນການຊິງຄ໌ LDAP ທີ່ກຳນົດເວລາ ແລະຄູ່ມື.',
startedAt: 'ເວລາເລີ່ມຕົ້ນ',
trigger: 'ວິທີເລີ່ມ',
manual: 'ດ້ວຍຕົນເອງ',
scheduled: 'ກຳນົດເວລາ',
success: 'ສຳເລັດ',
failed: 'ລົ້ມເຫລວ',
running: 'ກຳລັງດຳເນີນການ',
result: 'ຜົນໄດ້ຮັບ',
resultSummary: 'ສ້າງ {0}, ອັບເດດ {1}, ຂາດ {2}',
duration: 'ໄລຍະເວລາ',
action: 'ການປະຕິບັດ',
},
testLoginTitle: 'ທົດສອບການເຂົ້າສູ່ລະບົບ AD/LDAP',
testLoginDesc:
'ຜູກມັດກັບຂໍ້ມູນປະຈຳຕົວຜູ້ໃຊ້ AD/LDAP ເພື່ອທົດສອບການພິສູດຢືນຢັນເທົ່ານັ້ນ. ບໍ່ມີເຊດຊັນ 1Panel ຖືກສ້າງຂຶ້ນ.',
ldapUsername: 'ຊື່ຜູ້ໃຊ້ LDAP',
usernameRequired: 'ໃສ່ຊື່ຜູ້ໃຊ້ LDAP.',
startTest: 'ເລີ່ມການທົດສອບ',
testLoginSuccess: 'ການພິສູດຢືນຢັນສຳເລັດແລ້ວ.',
testLoginSuccessWithDN: 'ການພິສູດຢືນຢັນສຳເລັດແລ້ວ. ຜູ້ໃຊ້ DN: {0}',
import: {
title: 'ນໍາເຂົ້າຜູ້ໃຊ້ AD/LDAP',
source: 'ແຫຼ່ງຂໍ້ມູນ: AD/LDAP directory',
lastRead: 'ອ່ານຫຼ້າສຸດ: {0}',
cacheHit: 'ຜົນໄດ້ຮັບຈາກຖານຄວາມຈໍາ',
keywordPlaceholder: 'ຊອກຫາຊື່ຜູ້ໃຊ້',
search: 'ຊອກຫາ',
refresh: 'ອ່ານຈາກ LDAP',
refreshTip: 'ບໍ່ສົນໃຈ cache ໄລຍະສັ້ນແລະອ່ານລາຍຊື່ LDAP ອີກເທື່ອຫນຶ່ງ.',
loadFailed: 'ລົ້ມເຫລວໃນການອ່ານລາຍຊື່ LDAP.',
retry: 'ລອງໃໝ່',
noData: 'ບໍ່ພົບຜູ້ໃຊ້ໄດເລກະທໍລີ.',
username: 'ຊື່ຜູ້ໃຊ້',
status: 'ສະຖານະ',
changes: 'ການປ່ຽນແປງ',
noChanges: 'ບໍ່ມີການປ່ຽນແປງ',
importable: 'ພ້ອມທີ່ຈະນໍາເຂົ້າ',
updateAvailable: 'ມີອັບເດດ',
upToDate: 'ເຖິງວັນທີ',
conflict: 'ຊື່ຂັດກັນ',
selectedCount: 'ເລືອກ {0} ແລ້ວ',
totalCount: '{0} ຜູ້ໃຊ້',
newUserRole: 'ບົດບາດຜູ້ໃຊ້ໃຫມ່',
newUserRoleRequired: 'ເລືອກບົດບາດສຳລັບຜູ້ໃຊ້ໃໝ່.',
noNewUsers: 'ບໍ່ມີຜູ້ໃຊ້ໃຫມ່ໃນການດໍາເນີນງານນີ້.',
roleOnlyForNewUsers: 'ບົດບາດທີ່ເລືອກແມ່ນໃຊ້ກັບຜູ້ໃຊ້ທີ່ສ້າງຂຶ້ນໃໝ່ເທົ່ານັ້ນ.',
strictOff: 'ການຊິ້ງຂໍ້ມູນຢ່າງເຂັ້ມງວດຖືກປິດໄວ້. ການນໍາເຂົ້າຢ່າງເຕັມທີ່ຈະບໍ່ປິດຜູ້ໃຊ້.',
importSelected: 'ເລືອກການນຳເຂົ້າ/ອັບເດດ ({0})',
importAll: 'ນຳເຂົ້າ/ອັບເດດທັງໝົດ ({0})',
previewTitle: 'ຢືນຢັນການນໍາເຂົ້າເຕັມ',
previewDesc: 'ລາຍຊື່ LDAP ຄົບຖ້ວນໄດ້ຖືກອ່ານແລ້ວ. ຄໍາຄົ້ນຫາບໍ່ຈໍາກັດການປະຕິບັດນີ້.',
created: 'ສ້າງ',
updated: 'ອັບເດດ',
unchanged: 'ບໍ່ປ່ຽນແປງ',
conflicts: 'ຂໍ້ຂັດແຍ່ງ',
missing: 'ປິດໃຊ້ງານ',
reactivated: 'ເປີດໃຊ້ຄືນໃໝ່',
strictWarning:
'ການຊິ້ງຂໍ້ມູນຢ່າງເຂັ້ມງວດຖືກເປີດໃຊ້ງານ. ຜູ້ໃຊ້ທີ່ຂາດຫາຍໄປຈາກ LDAP ບໍ່ສາມາດເຂົ້າສູ່ລະບົບໄດ້, ແຕ່ບັນທຶກ, ບົດບາດ, ແລະການອະນຸຍາດຂອງເຂົາເຈົ້າຖືກຮັກສາໄວ້.',
missingUsers: 'ຜູ້ໃຊ້ຫາຍໄປຈາກ LDAP',
missingScope: 'ພຽງແຕ່ແຫຼ່ງ LDAP ນີ້ໄດ້ຮັບຜົນກະທົບ.',
willDisable: 'ຈະຖືກປິດໃຊ້ງານ',
confirmAll: 'ຢືນຢັນການນໍາເຂົ້າ',
confirmAllWithMissing: 'ຢືນຢັນການນຳເຂົ້າ ແລະປິດໃຊ້ງານຜູ້ໃຊ້ {0} ຄົນ',
executeSuccess: 'ຜູ້ໃຊ້ LDAP ຖືກປະມວນຜົນສຳເລັດແລ້ວ.',
queryExpired: 'ຜົນການຄົ້ນຫາໄດເລກະທໍລີຫມົດອາຍຸ. ອ່ານຈາກ LDAP ອີກເທື່ອຫນຶ່ງ.',
planIncomplete: 'ການອ່ານໄດເລກະທໍລີເຕັມບໍ່ຄົບຖ້ວນ ແລະບໍ່ສາມາດດໍາເນີນການໄດ້.',
},
},
},
},
app: {
app: 'ແອັບ',
+279
View File
@@ -4298,6 +4298,70 @@ const message = {
mountPoint: 'Titik lekap',
},
xpack: {
ldap: {
source: 'Sumber',
directoryMissing: 'Tiada dalam LDAP',
localCredentialsManaged:
'Nama pengguna dan kata laluan diurus oleh LDAP dan tidak boleh diubah secara setempat.',
sources: {
local: 'Setempat',
ldap: 'LDAP',
},
importUsers: 'Import pengguna AD/LDAP',
searchUsersPlaceholder: 'Cari nama pengguna',
readFromLDAP: 'Baca daripada LDAP',
selectedUsers: '{0} dipilih',
queriedAt: 'Masa dibaca',
cachedResult: 'Hasil cache',
roleForNewUsers: 'Peranan untuk pengguna baharu',
selectRole: 'Pilih peranan',
roleOnlyForNewUsers: 'Peranan diperlukan hanya apabila import mencipta pengguna.',
roleRequiredForNewUsers: 'Pilih peranan untuk pengguna LDAP baharu.',
changedFields: 'Medan ditukar',
importSelected: 'Import dipilih',
importAll: 'Import semua',
importPreview: 'Pratonton import AD/LDAP',
importCompleted: 'Import AD/LDAP selesai',
incompletePreview: 'Direktori LDAP dibaca tidak lengkap. Baca dari LDAP sekali lagi.',
missingUsersWarning: 'Pengguna yang hilang dari LDAP akan dilumpuhkan oleh penyegerakan yang ketat.',
missingUsersWarningDetail: '{0} pengguna LDAP tempatan tidak akan dapat log masuk lagi.',
action: 'Tindakan',
reason: 'Sebab',
noImportChanges: 'Tiada perubahan import',
confirmImport: 'Sahkan import',
created: 'Buat',
updated: 'Kemas kini',
reactivated: 'Aktifkan semula',
unchanged: 'Tidak berubah',
conflicts: 'Konflik',
missing: 'hilang',
missingUsersConfirm: '{0} pengguna yang tiada dalam LDAP akan dinyahdayakan dan dilog keluar. Teruskan?',
strictSyncConfirm: 'Sahkan penyegerakan yang ketat',
status: {
importable: 'Pengguna baharu',
update_available: 'Kemas kini tersedia',
up_to_date: 'Terkini',
conflict: 'Konflik',
},
fields: {
name: 'Nama pengguna',
externalDN: 'Direktori DN',
externalID: 'ID Luaran',
authSourceStatus: 'Status pengesahan',
},
actions: {
created: 'Buat',
updated: 'Kemas kini',
reactivated: 'Aktifkan semula',
unchanged: 'Tidak berubah',
skipped: 'Dilangkau',
conflicts: 'Konflik',
conflict: 'Konflik',
missing: 'Lumpuhkan',
errors: 'ralat',
error: 'ralat',
},
},
expiresEnterpriseAlert:
'Peringatan mesra: Lesen Enterprise Edition anda akan tamat dalam {0} hari, dan semua ciri Enterprise Edition tidak lagi dapat diakses. Sila perbaharui segera untuk memastikan penggunaan berterusan.',
expiresProAlert:
@@ -4855,6 +4919,221 @@ const message = {
masterOnlyPermissionHelper: 'Kebenaran ini hanya berkuat kuasa pada nod utama.',
view: 'Lihat',
manage: 'Urus',
authManage: 'Pengurusan pengesahan',
auth: {
providerNavigation: 'Pembekal pengesahan',
providers: {
ldap: 'AD/LDAP',
passkey: 'Passkey',
radius: 'Radius',
oidc: 'OIDC',
saml2: 'SAML2',
cas: 'CAS',
oauth2: 'OAuth2',
dingtalk: 'DingTalk',
feishu: 'Feishu',
wecom: 'WeCom',
},
providerDescriptions: {
ldap: 'Serasi dengan Active Directory, OpenLDAP dan perkhidmatan LDAP yang lain',
passkey: 'Gunakan bukti kelayakan peranti untuk log masuk tanpa kata laluan',
radius: 'Sahkan akses rangkaian melalui perkhidmatan Radius',
oidc: 'Sambungkan log masuk tunggal perusahaan dengan OpenID Connect',
saml2: 'Gunakan SAML2 untuk persekutuan identiti perusahaan',
cas: 'Sambungkan perkhidmatan pengesahan berpusat untuk log masuk tunggal',
oauth2: 'Sambungkan perkhidmatan identiti OAuth2 yang serasi',
dingtalk: 'Gunakan identiti organisasi DingTalk dan log masuk QR',
feishu: 'Gunakan identiti organisasi Feishu dan penyegerakan akaun',
wecom: 'Sahkan dengan identiti ahli WeCom',
},
planned: 'Terancang',
plannedTitle: 'Tetapan pengesahan {0}',
plannedDesc: 'Pembekal pengesahan ini telah dirancang dan belum tersedia lagi.',
ldap: {
enable: 'Dayakan',
enabled: 'Didayakan',
disabled: 'Dilumpuhkan',
connection: 'Sambungan asas',
connectionDesc:
'Konfigurasikan perkhidmatan direktori dan akaun bind yang digunakan untuk mencari pengguna.',
serverURL: 'URL pelayan',
serverURLHelper: 'Menyokong URL ldap:// dan ldaps://.',
userBaseDN: 'Pengguna Base DN',
userBaseDNHelper:
'Memulakan DN untuk carian pengguna LDAP; ia boleh menjadi OU, CN atau akar domain DN.',
bindDN: 'Ikat DN',
bindPassword: 'Kata laluan',
passwordSaved: 'Biarkan kosong untuk menyimpan kata laluan yang disimpan',
userSearch: 'Carian pengguna',
userSearchDesc:
'Tetapkan pangkalan carian dan penapis pengguna, kemudian petakan atribut LDAP yang digunakan sebagai 1Panel name.',
userFilter: 'Penapis pengguna',
userFilterTooltip:
'Gantikan %(user)s dengan nama pengguna yang dilepaskan, atau dengan * untuk membaca direktori penuh.',
userFilterHelper: 'Nama pengguna dikeluarkan sebelum ia dimasukkan ke dalam penapis LDAP.',
attributeMap: 'Pemetaan atribut',
attributeMapTooltip: 'Pemetaan JSON daripada medan 1Panel name kepada atribut LDAP.',
attributeMapHelper: 'Tetapkan atribut LDAP yang dipetakan ke medan 1Panel name.',
advanced: 'Tetapan lanjutan',
advancedDesc: 'Konfigurasikan halaman pertanyaan TLS dan LDAP.',
strictSync: 'Penyegerakan yang ketat',
strictSyncTooltip:
'Selepas import penuh lengkap, pengguna yang tiada daripada sumber LDAP ini dilumpuhkan tetapi tidak dipadamkan.',
strictSyncHelper:
'Hanya digunakan untuk import penuh yang lengkap. Mengimport pengguna terpilih tidak sekali-kali melumpuhkan pengguna lain.',
skipTLSVerify: 'Langkau pengesahan TLS',
skipTLSVerifyTooltip: 'Lumpuhkan pengesahan sijil untuk sambungan LDAPS.',
skipTLSVerifyHelper:
'Gunakan hanya dengan sijil yang ditandatangani sendiri yang dipercayai. Tetapan ini bebas daripada penyegerakan yang ketat.',
connectTimeout: 'Tamat masa sambungan (saat)',
searchPageSize: 'LDAP saiz halaman pertanyaan',
restore: 'Pulihkan',
testConnection: 'Uji sambungan',
testLogin: 'Uji log masuk',
userImport: 'Import pengguna',
saveBeforeImport: 'Simpan tetapan AD/LDAP semasa sebelum mengimport pengguna.',
format: 'Format',
restoreExample: 'Pulihkan contoh',
mappingValid: 'JSON sah; name dikonfigurasikan.',
mappingInvalid: 'Masukkan JSON yang sah.',
mappingObject: 'Pemetaan atribut mestilah objek JSON.',
mappingOnlyName: 'Hanya pemetaan name disokong.',
mappingStringValues: 'Setiap atribut yang dipetakan mestilah rentetan.',
mappingNameRequired: 'name mestilah rentetan bukan kosong.',
restored: 'Tetapan terakhir yang disimpan telah dipulihkan.',
connectionTestSuccess: 'Ujian sambungan LDAP berjaya.',
recentTestSuccess: 'Ujian terakhir berjaya: {0}',
recentTestFailed: 'Ujian terakhir gagal: {0}',
serverURLRequired: 'Masukkan URL pelayan LDAP.',
serverURLInvalid: 'Gunakan URL ldap:// atau ldaps:// yang sah.',
userBaseDNRequired: 'Masukkan Pengguna Base DN.',
bindDNRequired: 'Masukkan Bind DN.',
passwordRequired: 'Masukkan kata laluan.',
userFilterRequired: 'Masukkan penapis pengguna.',
connectTimeoutRequired: 'Masukkan tamat masa sambungan.',
searchPageSizeRequired: 'Masukkan saiz halaman pertanyaan LDAP.',
sync: {
title: 'Penyegerakan berjadual',
description:
'Baca direktori LDAP penuh mengikut jadual dan kekalkan pengguna LDAP yang diimport dalam 1Panel.',
enable: 'Dayakan jadual',
enableHelper:
'Apabila dilumpuhkan, pelaksanaan automatik berhenti; penyegerakan manual masih tersedia.',
schedule: 'Jadual',
daily: 'Setiap hari',
weekly: 'Mingguan',
customCron: 'Cron tersuai',
preview: 'Pratonton',
previewTitle: '5 pelaksanaan seterusnya',
previewEmpty: 'Tiada masa pelaksanaan tersedia',
cronHelper: 'Gunakan ungkapan Cron lima medan standard: minit, jam, hari, bulan, hari bekerja.',
autoImport: 'Import pengguna baharu',
autoImportHelper:
'Apabila dilumpuhkan, hanya pengecam dan status direktori dikekalkan untuk pengguna LDAP yang diimport; tiada pengguna baharu dibuat.',
defaultRole: 'Peranan pengguna baharu',
defaultRolePlaceholder: 'Pilih peranan',
defaultRoleHelper: 'Hanya terpakai kepada pengguna yang dibuat melalui penyegerakan berjadual.',
defaultRoleRequired: 'Pilih peranan untuk pengguna LDAP baharu.',
strictSyncHelper:
'Pengguna yang tiada daripada pertanyaan penuh lengkap dilumpuhkan dan sesi mereka dikosongkan; pengguna, peranan dan kebenaran tidak dipadamkan.',
safetyTitle: 'Pengguna yang hilang diproses hanya selepas pertanyaan penuh LDAP lengkap',
safetyDescription:
'Pertanyaan yang gagal, tamat masa atau hasil halaman yang tidak lengkap tidak pernah mengubah status pengguna. Skop penyegerakan mengikut Base DN Pengguna, penapis dan pemetaan atribut.',
runNow: 'Segerakkan sekarang',
lastRunSuccess: 'Penyegerakan terakhir berjaya: {0}',
lastRunFailed: 'Penyegerakan terakhir gagal: {0}',
lastRunRunning: 'Penyegerakan dimulakan: {0}',
sourceDisabled: 'Dayakan dan simpan AD/LDAP sebelum menjalankan penyegerakan.',
cronRequired: 'Masukkan ungkapan Cron.',
saveBeforeRun: 'Simpan tetapan penyegerakan sebelum menjalankan tugas.',
runConfirmTitle: 'Jalankan penyegerakan yang ketat',
runConfirmDescription:
'Pengguna LDAP yang hilang daripada pertanyaan penuh yang lengkap akan dilumpuhkan dan sesi aktif mereka dikosongkan. teruskan?',
runSuccess: 'Penyegerakan LDAP selesai.',
weekdays: {
0: 'Ahad',
1: 'Isnin',
2: 'Selasa',
3: 'Rabu',
4: 'Khamis',
5: 'Jumaat',
6: 'Sabtu',
},
},
syncLogs: {
title: 'Segerakkan log',
description: 'Semak keputusan penyegerakan LDAP yang dijadualkan dan manual.',
startedAt: 'Masa mula',
trigger: 'Cara pelaksanaan',
manual: 'Manual',
scheduled: 'Dijadualkan',
success: 'Kejayaan',
failed: 'gagal',
running: 'Sedang berjalan',
result: 'Hasilnya',
resultSummary: 'Dicipta {0}, dikemas kini {1}, tiada {2}',
duration: 'Tempoh',
action: 'Tindakan',
},
testLoginTitle: 'Uji log masuk AD/LDAP',
testLoginDesc:
'Ikat dengan bukti kelayakan pengguna AD/LDAP untuk menguji pengesahan sahaja. Tiada sesi 1Panel dibuat.',
ldapUsername: 'Nama pengguna LDAP',
usernameRequired: 'Masukkan nama pengguna LDAP.',
startTest: 'Mulakan ujian',
testLoginSuccess: 'Pengesahan berjaya.',
testLoginSuccessWithDN: 'Pengesahan berjaya. Pengguna DN: {0}',
import: {
title: 'Import pengguna AD/LDAP',
source: 'Sumber data: direktori AD/LDAP',
lastRead: 'Bacaan terakhir: {0}',
cacheHit: 'Hasil cache',
keywordPlaceholder: 'Cari nama pengguna',
search: 'Cari',
refresh: 'Baca daripada LDAP',
refreshTip: 'Abaikan cache jangka pendek dan baca direktori LDAP sekali lagi.',
loadFailed: 'Gagal membaca direktori LDAP.',
retry: 'Cuba semula',
noData: 'Tiada pengguna direktori ditemui.',
username: 'Nama pengguna',
status: 'Status',
changes: 'Perubahan',
noChanges: 'Tiada perubahan',
importable: 'Sedia untuk diimport',
updateAvailable: 'Kemas kini tersedia',
upToDate: 'Terkini',
conflict: 'Konflik nama',
selectedCount: '{0} dipilih',
totalCount: '{0} pengguna',
newUserRole: 'Peranan pengguna baharu',
newUserRoleRequired: 'Pilih peranan untuk pengguna baharu.',
noNewUsers: 'Tiada pengguna baharu dalam operasi ini.',
roleOnlyForNewUsers: 'Peranan yang dipilih hanya digunakan kepada pengguna yang baru dibuat.',
strictOff: 'Penyegerakan yang ketat dilumpuhkan. Import penuh tidak akan melumpuhkan pengguna.',
importSelected: 'Import/kemas kini dipilih ({0})',
importAll: 'Import/kemas kini semua ({0})',
previewTitle: 'Sahkan import penuh',
previewDesc:
'Direktori LDAP lengkap telah dibaca. Kata kunci carian tidak mengehadkan operasi ini.',
created: 'Buat',
updated: 'Kemas kini',
unchanged: 'Tidak berubah',
conflicts: 'Konflik',
missing: 'Lumpuhkan',
reactivated: 'Aktifkan semula',
strictWarning:
'Penyegerakan yang ketat didayakan. Pengguna yang tiada dari LDAP tidak boleh log masuk, tetapi rekod, peranan dan kebenaran mereka dikekalkan.',
missingUsers: 'Pengguna hilang dari LDAP',
missingScope: 'Hanya sumber LDAP ini terjejas.',
willDisable: 'Akan dilumpuhkan',
confirmAll: 'Sahkan import',
confirmAllWithMissing: 'Sahkan import dan nyahdayakan {0} pengguna',
executeSuccess: 'Pengguna LDAP telah berjaya diproses.',
queryExpired: 'Keputusan direktori telah tamat tempoh. Baca dari LDAP sekali lagi.',
planIncomplete: 'Direktori penuh dibaca tidak lengkap dan tidak boleh dilaksanakan.',
},
},
},
},
app: {
app: 'APP',
+281
View File
@@ -4438,6 +4438,70 @@ const message = {
noFail: 'Falha na montagem não afeta a inicialização do sistema',
},
xpack: {
ldap: {
source: 'Origem',
directoryMissing: 'Não encontrado no LDAP',
localCredentialsManaged:
'O nome de usuário e a senha são gerenciados pelo LDAP e não podem ser alterados localmente.',
sources: {
local: 'Local',
ldap: 'LDAP',
},
importUsers: 'Importar usuários AD/LDAP',
searchUsersPlaceholder: 'Pesquisar nome de usuário',
readFromLDAP: 'Leia de LDAP',
selectedUsers: '{0} selecionado',
queriedAt: 'Lido em',
cachedResult: 'Resultado armazenado em cache',
roleForNewUsers: 'Função para novos usuários',
selectRole: 'Selecione uma função',
roleOnlyForNewUsers: 'Uma função é necessária somente quando a importação cria usuários.',
roleRequiredForNewUsers: 'Selecione uma função para novos usuários LDAP.',
changedFields: 'Campos alterados',
importSelected: 'Importação selecionada',
importAll: 'Importar tudo',
importPreview: 'Pré-visualização da importação AD/LDAP',
importCompleted: 'Importação AD/LDAP concluída',
incompletePreview: 'A leitura do diretório LDAP estava incompleta. Leia LDAP novamente.',
missingUsersWarning: 'Os usuários ausentes de LDAP serão desabilitados pela sincronização estrita.',
missingUsersWarningDetail: '{0} usuários LDAP locais não poderão mais fazer login.',
action: 'Ação',
reason: 'Razão',
noImportChanges: 'Nenhuma alteração de importação',
confirmImport: 'Confirmar importação',
created: 'Criar',
updated: 'Atualizar',
reactivated: 'Reativar',
unchanged: 'Inalterado',
conflicts: 'Conflitos',
missing: 'Desaparecido',
missingUsersConfirm: 'Usuários {0} ausentes em LDAP serão desabilitados e desconectados. Continuar?',
strictSyncConfirm: 'Confirme a sincronização estrita',
status: {
importable: 'Novo usuário',
update_available: 'Atualização disponível',
up_to_date: 'Atualizado',
conflict: 'Conflito',
},
fields: {
name: 'Nome de usuário',
externalDN: 'Diretório DN',
externalID: 'ID externo',
authSourceStatus: 'Status de autenticação',
},
actions: {
created: 'Criar',
updated: 'Atualizar',
reactivated: 'Reativar',
unchanged: 'Inalterado',
skipped: 'Ignorado',
conflicts: 'Conflito',
conflict: 'Conflito',
missing: 'Desativar',
errors: 'Erro',
error: 'Erro',
},
},
expiresEnterpriseAlert:
'Lembrete: Sua licença da Enterprise Edition expira em {0} dias. Depois disso, todos os recursos da Enterprise Edition deixarão de ficar disponíveis. Renove a licença para manter o uso contínuo.',
expiresProAlert:
@@ -4996,6 +5060,223 @@ const message = {
masterOnlyPermissionHelper: 'Esta permissão tem efeito no principal.',
view: 'Visualizar',
manage: 'Gerenciar',
authManage: 'Gerenciamento de autenticação',
auth: {
providerNavigation: 'Provedores de autenticação',
providers: {
ldap: 'AD/LDAP',
passkey: 'Passkey',
radius: 'Radius',
oidc: 'OIDC',
saml2: 'SAML2',
cas: 'CAS',
oauth2: 'OAuth2',
dingtalk: 'DingTalk',
feishu: 'Feishu',
wecom: 'WeCom',
},
providerDescriptions: {
ldap: 'Compatível com Active Directory, OpenLDAP e outros serviços LDAP',
passkey: 'Use credenciais do dispositivo para login sem senha',
radius: 'Autenticar o acesso à rede através de um serviço Radius',
oidc: 'Conecte o logon único empresarial com OpenID Connect',
saml2: 'Use SAML2 para federação de identidade corporativa',
cas: 'Conecte um serviço de autenticação centralizado para logon único',
oauth2: 'Conecte um serviço de identidade OAuth2 compatível',
dingtalk: 'Use a identidade da organização DingTalk e login QR',
feishu: 'Use a identidade da organização Feishu e a sincronização de contas',
wecom: 'Autenticar com identidade de membro WeCom',
},
planned: 'Planejado',
plannedTitle: 'Configurações de autenticação {0}',
plannedDesc: 'Este provedor de autenticação está planejado e ainda não está disponível.',
ldap: {
enable: 'Habilitar',
enabled: 'Habilitado',
disabled: 'Desativado',
connection: 'Conexão básica',
connectionDesc:
'Configure o serviço de diretório e a conta de ligação usada para procurar usuários.',
serverURL: 'URL do servidor',
serverURLHelper: 'Suporta URLs ldap:// e ldaps://.',
userBaseDN: 'Base DN do usuário',
userBaseDNHelper:
'DN inicial para pesquisas de usuários LDAP; pode ser uma OU, um CN ou o DN raiz do domínio.',
bindDN: 'DN de vínculo',
bindPassword: 'Senha',
passwordSaved: 'Deixe em branco para manter a senha salva',
userSearch: 'Pesquisa de usuário',
userSearchDesc:
'Configure a base e o filtro de pesquisa e mapeie o atributo LDAP para o campo name do 1Panel.',
userFilter: 'Filtro de usuário',
userFilterTooltip:
'Substitua %(user)s pelo nome de usuário com escape ou por * para uma leitura completa do diretório.',
userFilterHelper: 'Os nomes de usuário têm escape antes de serem inseridos no filtro LDAP.',
attributeMap: 'Mapeamento de atributos',
attributeMapTooltip: 'Mapeamento JSON do campo name do 1Panel para um atributo LDAP.',
attributeMapHelper: 'Configure o atributo LDAP mapeado para o campo name do 1Panel.',
advanced: 'Configurações avançadas',
advancedDesc: 'Configure a paginação de consulta TLS e LDAP.',
strictSync: 'Sincronização estrita',
strictSyncTooltip:
'Após uma importação completa, os usuários ausentes nesta origem LDAP serão desativados, mas não excluídos.',
strictSyncHelper:
'Aplica-se apenas a uma importação completa. A importação de usuários selecionados nunca desabilita outros usuários.',
skipTLSVerify: 'Ignorar verificação TLS',
skipTLSVerifyTooltip: 'Desative a verificação de certificado para conexões LDAPS.',
skipTLSVerifyHelper:
'Use somente com um certificado autoassinado confiável. Esta configuração é independente da sincronização estrita.',
connectTimeout: 'Tempo limite de conexão (segundos)',
searchPageSize: 'Tamanho da página de consulta LDAP',
restore: 'Restaurar',
testConnection: 'Testar conexão',
testLogin: 'Testar login',
userImport: 'Importar usuários',
saveBeforeImport: 'Salve as configurações AD/LDAP atuais antes de importar usuários.',
format: 'Formato',
restoreExample: 'Exemplo de restauração',
mappingValid: 'JSON válido; name está configurado.',
mappingInvalid: 'Insira JSON válido.',
mappingObject: 'O mapeamento de atributos deve ser um objeto JSON.',
mappingOnlyName: 'Somente o mapeamento name é suportado.',
mappingStringValues: 'Cada atributo mapeado deve ser uma string.',
mappingNameRequired: 'name deve ser uma sequência não vazia.',
restored: 'As últimas configurações salvas foram restauradas.',
connectionTestSuccess: 'O teste de conexão LDAP foi bem-sucedido.',
recentTestSuccess: 'Último teste bem-sucedido: {0}',
recentTestFailed: 'Último teste falhou: {0}',
serverURLRequired: 'Insira a URL do servidor LDAP.',
serverURLInvalid: 'Use um URL ldap:// ou ldaps:// válido.',
userBaseDNRequired: 'Informe a Base DN do usuário.',
bindDNRequired: 'Insira a ligação DN.',
passwordRequired: 'Digite a senha.',
userFilterRequired: 'Insira o filtro do usuário.',
connectTimeoutRequired: 'Insira o tempo limite de conexão.',
searchPageSizeRequired: 'Insira o tamanho da página de consulta LDAP.',
sync: {
title: 'Sincronização agendada',
description:
'Leia o diretório LDAP completo de acordo com uma programação e mantenha os usuários LDAP importados em 1Panel.',
enable: 'Ativar agendamento',
enableHelper:
'Quando desativado, a execução automática é interrompida; a sincronização manual permanece disponível.',
schedule: 'Cronograma',
daily: 'Diariamente',
weekly: 'Semanalmente',
customCron: 'Cron personalizado',
preview: 'Visualização',
previewTitle: 'Próximas 5 execuções',
previewEmpty: 'Não tempo de execução disponível',
cronHelper:
'Use uma expressão Cron padrão de cinco campos: minuto, hora, dia, mês, dia da semana.',
autoImport: 'Importar novos usuários',
autoImportHelper:
'Quando desativado, apenas os identificadores e o status do diretório são mantidos para usuários LDAP importados; nenhum novo usuário é criado.',
defaultRole: 'Nova função de usuário',
defaultRolePlaceholder: 'Selecione uma função',
defaultRoleHelper: 'Aplica-se apenas a usuários criados por sincronização agendada.',
defaultRoleRequired: 'Selecione uma função para novos usuários LDAP.',
strictSyncHelper:
'Os usuários ausentes em uma consulta completa são desabilitados e suas sessões são apagadas; usuários, funções e permissões não são excluídos.',
safetyTitle: 'Usuários ausentes são processados somente após uma consulta completa LDAP',
safetyDescription:
'Uma consulta com falha, tempo limite ou resultado paginado incompleto nunca altera o status do usuário. O escopo de sincronização segue o usuário Base DN, filtro e mapeamento de atributos.',
runNow: 'Sincronize agora',
lastRunSuccess: 'Última sincronização bem-sucedida: {0}',
lastRunFailed: 'Falha na última sincronização: {0}',
lastRunRunning: 'Sincronização iniciada: {0}',
sourceDisabled: 'Habilite e salve AD/LDAP antes de executar a sincronização.',
cronRequired: 'Insira uma expressão Cron.',
saveBeforeRun: 'Salve as configurações de sincronização antes de executar a tarefa.',
runConfirmTitle: 'Execute a sincronização estrita',
runConfirmDescription:
'Os usuários LDAP ausentes em uma consulta completa serão desabilitados e suas sessões ativas serão apagadas. Continuar?',
runSuccess: 'Sincronização LDAP concluída.',
weekdays: {
0: 'Domingo',
1: 'Segunda-feira',
2: 'Terça-feira',
3: 'Quarta-feira',
4: 'Quinta-feira',
5: 'Sexta-feira',
6: 'Sábado',
},
},
syncLogs: {
title: 'Sincronizar registros',
description: 'Revise os resultados da sincronização LDAP programada e manual.',
startedAt: 'Hora de início',
trigger: 'Tipo de execução',
manual: 'Manual',
scheduled: 'Agendado',
success: 'Sucesso',
failed: 'Falha',
running: 'Em execução',
result: 'Resultado',
resultSummary: 'Criados {0}, atualizados {1}, ausentes {2}',
duration: 'Duração',
action: 'Ação',
},
testLoginTitle: 'Testar login AD/LDAP',
testLoginDesc:
'Vincule com uma credencial de usuário AD/LDAP apenas para testar a autenticação. Nenhuma sessão 1Panel é criada.',
ldapUsername: 'Nome de usuário LDAP',
usernameRequired: 'Digite o nome de usuário LDAP.',
startTest: 'Iniciar teste',
testLoginSuccess: 'Autenticação bem-sucedida.',
testLoginSuccessWithDN: 'Autenticação bem-sucedida. Usuário DN: {0}',
import: {
title: 'Importar usuários AD/LDAP',
source: 'Fonte de dados: diretório AD/LDAP',
lastRead: 'Última leitura: {0}',
cacheHit: 'Resultado armazenado em cache',
keywordPlaceholder: 'Pesquisar nome de usuário',
search: 'Pesquisar',
refresh: 'Leia de LDAP',
refreshTip: 'Ignore o cache de curto prazo e leia o diretório LDAP novamente.',
loadFailed: 'Falha ao ler o diretório LDAP.',
retry: 'Tentar novamente',
noData: 'Nenhum usuário do diretório encontrado.',
username: 'Nome de usuário',
status: 'Estado',
changes: 'Mudanças',
noChanges: 'Sem alterações',
importable: 'Pronto para importar',
updateAvailable: 'Atualização disponível',
upToDate: 'Atualizado',
conflict: 'Conflito de nome',
selectedCount: '{0} selecionado',
totalCount: '{0} usuários',
newUserRole: 'Nova função de usuário',
newUserRoleRequired: 'Selecione uma função para novos usuários.',
noNewUsers: 'Não novos usuários nesta operação.',
roleOnlyForNewUsers: 'A função selecionada é aplicada somente aos usuários recém-criados.',
strictOff:
'A sincronização estrita está desativada. Uma importação completa não desativará os usuários.',
importSelected: 'Importação/atualização selecionada ({0})',
importAll: 'Importar/atualizar tudo ({0})',
previewTitle: 'Confirme a importação completa',
previewDesc:
'O diretório LDAP completo foi lido. A palavra-chave de pesquisa não limita esta operação.',
created: 'Criar',
updated: 'Atualizar',
unchanged: 'Inalterado',
conflicts: 'Conflitos',
missing: 'Desativar',
reactivated: 'Reativar',
strictWarning:
'A sincronização estrita está habilitada. Os usuários ausentes de LDAP não podem fazer login, mas seus registros, funções e permissões são mantidos.',
missingUsers: 'Usuários ausentes em LDAP',
missingScope: 'Somente esta fonte LDAP é afetada.',
willDisable: 'Será desativado',
confirmAll: 'Confirmar importação',
confirmAllWithMissing: 'Confirmar importação e desabilitar {0} usuários',
executeSuccess: 'Os usuários LDAP foram processados com sucesso.',
queryExpired: 'O resultado do diretório expirou. Leia LDAP novamente.',
planIncomplete: 'A leitura completa do diretório está incompleta e não pode ser executada.',
},
},
},
},
app: {
app: 'APP',
+282
View File
@@ -4285,6 +4285,71 @@ const message = {
noFail: 'Сбой монтирования не влияет на запуск системы',
},
xpack: {
ldap: {
source: 'Источник',
directoryMissing: 'Отсутствует в LDAP',
localCredentialsManaged: 'Имя пользователя и пароль управляются LDAP и не могут быть изменены локально.',
sources: {
local: 'Локальный',
ldap: 'LDAP',
},
importUsers: 'Импорт пользователей AD/LDAP',
searchUsersPlaceholder: 'Поиск имени пользователя',
readFromLDAP: 'Читать из LDAP',
selectedUsers: '{0} выбрано',
queriedAt: 'Время чтения',
cachedResult: 'Кэшированный результат',
roleForNewUsers: 'Роль для новых пользователей',
selectRole: 'Выберите роль',
roleOnlyForNewUsers: 'Роль требуется только тогда, когда при импорте создаются пользователи.',
roleRequiredForNewUsers: 'Выберите роль для новых пользователей LDAP.',
changedFields: 'Измененные поля',
importSelected: 'Импортировать выбранное',
importAll: 'Импортировать все',
importPreview: 'Предпросмотр импорта AD/LDAP',
importCompleted: 'Импорт AD/LDAP завершён',
incompletePreview: 'Чтение каталога LDAP было неполным. Прочтите еще раз LDAP.',
missingUsersWarning:
'Пользователи, отсутствующие в LDAP, будут отключены посредством строгой синхронизации.',
missingUsersWarningDetail: '{0} локальных пользователей LDAP больше не смогут войти в систему.',
action: 'Действие',
reason: 'Причина',
noImportChanges: 'Никаких изменений импорта',
confirmImport: 'Подтвердить импорт',
created: 'Создать',
updated: 'Обновить',
reactivated: 'Повторно активировать',
unchanged: 'Без изменений',
conflicts: 'Конфликты',
missing: 'Отсутствует',
missingUsersConfirm:
'{0} пользователей, отсутствующих в LDAP, будут отключены, а их сеансы завершены. Продолжить?',
strictSyncConfirm: 'Подтвердить строгую синхронизацию',
status: {
importable: 'Новый пользователь',
update_available: 'Доступно обновление',
up_to_date: 'Актуально',
conflict: 'Конфликт',
},
fields: {
name: 'Имя пользователя',
externalDN: 'Каталог DN',
externalID: 'Внешний идентификатор',
authSourceStatus: 'Статус аутентификации',
},
actions: {
created: 'Создать',
updated: 'Обновить',
reactivated: 'Повторно активировать',
unchanged: 'Без изменений',
skipped: 'Пропущено',
conflicts: 'Конфликт',
conflict: 'Конфликт',
missing: 'Отключить',
errors: 'Ошибка',
error: 'Ошибка',
},
},
expiresEnterpriseAlert:
'Дружеское напоминание: ваша лицензия Enterprise Edition истечет через {0} дней, и все функции Enterprise Edition станут недоступны. Пожалуйста, продлите лицензию вовремя, чтобы обеспечить дальнейшее использование.',
expiresProAlert:
@@ -4843,6 +4908,223 @@ const message = {
masterOnlyPermissionHelper: 'Это право действует только на главном узле.',
view: 'Просмотр',
manage: 'Управление',
authManage: 'Управление аутентификацией',
auth: {
providerNavigation: 'Поставщики аутентификации',
providers: {
ldap: 'AD/LDAP',
passkey: 'Passkey',
radius: 'Radius',
oidc: 'OIDC',
saml2: 'SAML2',
cas: 'CAS',
oauth2: 'OAuth2',
dingtalk: 'DingTalk',
feishu: 'Feishu',
wecom: 'WeCom',
},
providerDescriptions: {
ldap: 'Совместимость с Active Directory, OpenLDAP и другими службами LDAP.',
passkey: 'Используйте учетные данные устройства для входа без пароля',
radius: 'Аутентификация доступа к сети через службу Radius',
oidc: 'Подключите корпоративный единый вход с помощью OpenID Connect',
saml2: 'Используйте SAML2 для федерации корпоративных удостоверений.',
cas: 'Подключите централизованную службу аутентификации для единого входа',
oauth2: 'Подключите совместимую службу идентификации OAuth2.',
dingtalk: 'Используйте идентификатор организации DingTalk и вход с помощью QR',
feishu: 'Используйте идентификацию организации Feishu и синхронизацию учетных записей.',
wecom: 'Аутентификация с использованием удостоверения участника WeCom',
},
planned: 'Планируется',
plannedTitle: 'Настройки аутентификации {0}',
plannedDesc: 'Этот поставщик аутентификации запланирован и пока недоступен.',
ldap: {
enable: 'Включить',
enabled: 'Включено',
disabled: 'Отключено',
connection: 'Базовое подключение',
connectionDesc:
'Настройте службу каталогов и учетную запись привязки, используемую для поиска пользователей.',
serverURL: 'URL-адрес сервера',
serverURLHelper: 'Поддерживает URL-адреса ldap:// и ldaps://.',
userBaseDN: 'Пользователь Base DN',
userBaseDNHelper:
'Запуск DN для поиска пользователей LDAP; это может быть OU, CN или корень домена DN.',
bindDN: 'Привязать DN',
bindPassword: 'Пароль',
passwordSaved: 'Оставьте поле пустым, чтобы сохранить сохраненный пароль.',
userSearch: 'Поиск пользователей',
userSearchDesc:
'Установите базу поиска пользователей и фильтр, затем сопоставьте атрибут LDAP, используемый как 1Panel name.',
userFilter: 'Пользовательский фильтр',
userFilterTooltip:
'Замените %(user)s экранированным именем пользователя или на * для полного чтения каталога.',
userFilterHelper: 'Имена пользователей экранируются перед вставкой в фильтр LDAP.',
attributeMap: 'Сопоставление атрибутов',
attributeMapTooltip: 'Сопоставление JSON поля 1Panel name с атрибутом LDAP.',
attributeMapHelper: 'Установите атрибут LDAP, сопоставленный с полем 1Panel name.',
advanced: 'Расширенные настройки',
advancedDesc: 'Настройте разбиение запросов TLS и LDAP.',
strictSync: 'Строгая синхронизация',
strictSyncTooltip:
'После полного импорта пользователи, отсутствующие в этом источнике LDAP, отключаются, но не удаляются.',
strictSyncHelper:
'Применяется только к полному импорту. Импорт выбранных пользователей никогда не отключает других пользователей.',
skipTLSVerify: 'Пропустить проверку TLS',
skipTLSVerifyTooltip: 'Отключите проверку сертификата для соединений LDAPS.',
skipTLSVerifyHelper:
'Используйте только с доверенным самозаверяющим сертификатом. Этот параметр не зависит от строгой синхронизации.',
connectTimeout: 'Таймаут соединения (секунды)',
searchPageSize: 'Размер страницы запроса LDAP',
restore: 'Восстановить',
testConnection: 'Тестовое соединение',
testLogin: 'Тестовый вход',
userImport: 'Импортировать пользователей',
saveBeforeImport: 'Сохраните текущие настройки AD/LDAP перед импортом пользователей.',
format: 'Формат',
restoreExample: 'Пример восстановления',
mappingValid: 'Действителен JSON; name настроен.',
mappingInvalid: 'Введите действительный JSON.',
mappingObject: 'Сопоставление атрибутов должно быть объектом JSON.',
mappingOnlyName: 'Поддерживается только сопоставление name.',
mappingStringValues: 'Каждый сопоставленный атрибут должен быть строкой.',
mappingNameRequired: 'name должен быть непустой строкой.',
restored: 'Последние сохраненные настройки были восстановлены.',
connectionTestSuccess: 'Проверка соединения LDAP прошла успешно.',
recentTestSuccess: 'Последний тест прошел успешно: {0}',
recentTestFailed: 'Последний тест не пройден: {0}',
serverURLRequired: 'Введите URL-адрес сервера LDAP.',
serverURLInvalid: 'Используйте действительный URL-адрес ldap:// или ldaps://.',
userBaseDNRequired: 'Введите пользователя Base DN.',
bindDNRequired: 'Введите привязку DN.',
passwordRequired: 'Введите пароль.',
userFilterRequired: 'Введите фильтр пользователей.',
connectTimeoutRequired: 'Введите тайм-аут соединения.',
searchPageSizeRequired: 'Введите размер страницы запроса LDAP.',
sync: {
title: 'Запланированная синхронизация',
description:
'Чтение полного каталога LDAP по расписанию и поддержка импортированных пользователей LDAP в 1Panel.',
enable: 'Включить расписание',
enableHelper:
'При отключении автоматическое выполнение останавливается; ручная синхронизация остается доступной.',
schedule: 'Расписание',
daily: 'Ежедневно',
weekly: 'Еженедельно',
customCron: 'Пользовательский Cron',
preview: 'Предварительный просмотр',
previewTitle: 'Следующие 5 запусков',
previewEmpty: 'Нет времени выполнения',
cronHelper:
'Используйте стандартное выражение Cron из пяти полей: минуты, часы, день, месяц, день недели.',
autoImport: 'Импортировать новых пользователей',
autoImportHelper:
'Если этот параметр отключен, для импортированных пользователей LDAP сохраняются только идентификаторы каталогов и статус; новые пользователи не создаются.',
defaultRole: 'Новая роль пользователя',
defaultRolePlaceholder: 'Выберите роль',
defaultRoleHelper:
'Применяется только к пользователям, созданным с помощью запланированной синхронизации.',
defaultRoleRequired: 'Выберите роль для новых пользователей LDAP.',
strictSyncHelper:
'Пользователи, отсутствующие в полном запросе, отключаются, а их сеансы очищаются; пользователи, роли и разрешения не удаляются.',
safetyTitle: 'Отсутствующие пользователи обрабатываются только после полного запроса LDAP.',
safetyDescription:
'Неудачный запрос, тайм-аут или неполный постраничный результат никогда не меняют статус пользователя. Область синхронизации соответствует пользователю Base DN, фильтру и сопоставлению атрибутов.',
runNow: 'Синхронизировать сейчас',
lastRunSuccess: 'Последняя синхронизация завершилась успешно: {0}.',
lastRunFailed: 'Последняя синхронизация не удалась: {0}.',
lastRunRunning: 'Синхронизация началась: {0}',
sourceDisabled: 'Включите и сохраните AD/LDAP перед запуском синхронизации.',
cronRequired: 'Введите выражение Cron.',
saveBeforeRun: 'Сохраните настройки синхронизации перед запуском задачи.',
runConfirmTitle: 'Запустить строгую синхронизацию',
runConfirmDescription:
'Пользователи LDAP, отсутствующие в полном запросе, будут отключены, а их активные сеансы удалены. Продолжать?',
runSuccess: 'Синхронизация LDAP завершена.',
weekdays: {
0: 'воскресенье',
1: 'понедельник',
2: 'вторник',
3: 'среда',
4: 'Четверг',
5: 'пятница',
6: 'Суббота',
},
},
syncLogs: {
title: 'Синхронизировать журналы',
description: 'Просмотрите результаты запланированной и ручной синхронизации LDAP.',
startedAt: 'Время начала',
trigger: 'Тип запуска',
manual: 'Вручную',
scheduled: 'Запланировано',
success: 'Успех',
failed: 'Не удалось',
running: 'Выполняется',
result: 'Результат',
resultSummary: 'Создано {0}, обновлено {1}, отсутствует {2}',
duration: 'Продолжительность',
action: 'Действие',
},
testLoginTitle: 'Проверка входа AD/LDAP',
testLoginDesc:
'Привяжите учетные данные пользователя AD/LDAP только для проверки аутентификации. Сеанс 1Panel не создается.',
ldapUsername: 'Имя пользователя LDAP',
usernameRequired: 'Введите имя пользователя LDAP.',
startTest: 'Начать тест',
testLoginSuccess: 'Аутентификация прошла успешно.',
testLoginSuccessWithDN: 'Аутентификация прошла успешно. Пользователь DN: {0}',
import: {
title: 'Импорт пользователей AD/LDAP',
source: 'Источник данных: каталог AD/LDAP.',
lastRead: 'Последнее чтение: {0}',
cacheHit: 'Кэшированный результат',
keywordPlaceholder: 'Поиск имени пользователя',
search: 'Поиск',
refresh: 'Читать из LDAP',
refreshTip: 'Игнорируйте кратковременный кеш и снова прочитайте каталог LDAP.',
loadFailed: 'Не удалось прочитать каталог LDAP.',
retry: 'Повторить попытку',
noData: 'Пользователи каталога не найдены.',
username: 'Имя пользователя',
status: 'Статус',
changes: 'Изменения',
noChanges: 'Никаких изменений',
importable: 'Готов к импорту',
updateAvailable: 'Доступно обновление',
upToDate: 'Актуально',
conflict: 'Конфликт имен',
selectedCount: '{0} выбрано',
totalCount: '{0} пользователей',
newUserRole: 'Новая роль пользователя',
newUserRoleRequired: 'Выберите роль для новых пользователей.',
noNewUsers: 'В этой операции нет новых пользователей.',
roleOnlyForNewUsers: 'Выбранная роль применяется только к вновь созданным пользователям.',
strictOff: 'Строгая синхронизация отключена. Полный импорт не отключит пользователей.',
importSelected: 'Выбран импорт/обновление ({0})',
importAll: 'Импортировать/обновить все ({0})',
previewTitle: 'Подтвердить полный импорт',
previewDesc:
'Полный каталог LDAP был прочитан. Ключевое слово поиска не ограничивает эту операцию.',
created: 'Создать',
updated: 'Обновить',
unchanged: 'Без изменений',
conflicts: 'Конфликты',
missing: 'Отключить',
reactivated: 'Повторно активировать',
strictWarning:
'Строгая синхронизация включена. Пользователи, отсутствующие в LDAP, не могут войти в систему, но их записи, роли и разрешения сохраняются.',
missingUsers: 'Пользователи отсутствуют в LDAP',
missingScope: 'Затрагивается только этот источник LDAP.',
willDisable: 'Будет отключен',
confirmAll: 'Подтвердить импорт',
confirmAllWithMissing: 'Подтвердить импорт и отключить {0} пользователей',
executeSuccess: 'Пользователи LDAP обработаны успешно.',
queryExpired: 'Срок действия каталога истек. Прочтите еще раз LDAP.',
planIncomplete: 'Полное чтение каталога неполное и не может быть выполнено.',
},
},
},
},
app: {
app: 'APP',
+282
View File
@@ -4286,6 +4286,71 @@ const message = {
noFail: 'Bağlama hatası sistem başlangıcını etkilemez',
},
xpack: {
ldap: {
source: 'Kaynak',
directoryMissing: "LDAP'te bulunamadı",
localCredentialsManaged:
'Kullanıcı adı ve parola LDAP tarafından yönetilir ve yerel olarak değiştirilemez.',
sources: {
local: 'Yerel',
ldap: 'LDAP',
},
importUsers: 'AD/LDAP kullanıcılarını içe aktar',
searchUsersPlaceholder: 'Kullanıcı adını ara',
readFromLDAP: "LDAP'dan okuyun",
selectedUsers: '{0} seçildi',
queriedAt: 'Okuma zamanı',
cachedResult: 'Önbelleğe alınmış sonuç',
roleForNewUsers: 'Yeni kullanıcılar için rol',
selectRole: 'Bir rol seçin',
roleOnlyForNewUsers: 'Bir rol yalnızca içe aktarma işleminde kullanıcılar oluşturduğunda gereklidir.',
roleRequiredForNewUsers: 'Yeni LDAP kullanıcıları için bir rol seçin.',
changedFields: 'Değiştirilen alanlar',
importSelected: 'Seçileni içe aktar',
importAll: 'Tümünü içe aktar',
importPreview: 'AD/LDAP içe aktarma önizlemesi',
importCompleted: 'AD/LDAP içe aktarma tamamlandı',
incompletePreview: "LDAP dizin okuması tamamlanmadı. LDAP'dan tekrar okuyun.",
missingUsersWarning: "LDAP'da eksik olan kullanıcılar katı senkronizasyonla devre dışı bırakılacak.",
missingUsersWarningDetail: '{0} yerel LDAP kullanıcıları artık oturum açamayacak.',
action: 'Eylem',
reason: 'Sebep',
noImportChanges: 'İçe aktarma değişikliği yok',
confirmImport: 'İçe aktarmayı onayla',
created: 'Oluştur',
updated: 'Güncelleme',
reactivated: 'Yeniden etkinleştir',
unchanged: 'değişmedi',
conflicts: 'Çatışmalar',
missing: 'Eksik',
missingUsersConfirm:
"LDAP'da bulunmayan {0} kullanıcı devre dışı bırakılacak ve oturumları kapatılacak. Devam edilsin mi?",
strictSyncConfirm: 'Kesin senkronizasyonu onaylayın',
status: {
importable: 'Yeni kullanıcı',
update_available: 'Güncelleme mevcut',
up_to_date: 'güncel',
conflict: 'Çatışma',
},
fields: {
name: 'Kullanıcı adı',
externalDN: 'Dizin DN',
externalID: 'Harici Kimlik',
authSourceStatus: 'Kimlik doğrulama durumu',
},
actions: {
created: 'Oluştur',
updated: 'Güncelleme',
reactivated: 'Yeniden etkinleştir',
unchanged: 'değişmedi',
skipped: 'Atlandı',
conflicts: 'Çatışma',
conflict: 'Çatışma',
missing: 'Devre dışı bırak',
errors: 'Hata',
error: 'Hata',
},
},
expiresEnterpriseAlert:
'Nazik hatırlatma: Enterprise Edition lisansınız {0} gün içinde sona erecek ve tüm Enterprise Edition özellikleri kullanılamaz hale gelecektir. Lütfen devam eden kullanım için zamanında yenileyin.',
expiresProAlert:
@@ -4840,6 +4905,223 @@ const message = {
masterOnlyPermissionHelper: 'Bu izin yalnızca ana düğümde geçerlidir.',
view: 'Görüntüle',
manage: 'Yönet',
authManage: 'Kimlik doğrulama yönetimi',
auth: {
providerNavigation: 'Kimlik doğrulama sağlayıcıları',
providers: {
ldap: 'AD/LDAP',
passkey: 'Passkey',
radius: 'Radius',
oidc: 'OIDC',
saml2: 'SAML2',
cas: 'CAS',
oauth2: 'OAuth2',
dingtalk: 'DingTalk',
feishu: 'Feishu',
wecom: 'WeCom',
},
providerDescriptions: {
ldap: 'Active Directory, OpenLDAP ve diğer LDAP hizmetleriyle uyumludur',
passkey: 'Parolasız oturum açmak için cihaz kimlik bilgilerini kullanın',
radius: 'Radius hizmeti aracılığıyla erişimini doğrulayın',
oidc: 'Kurumsal çoklu oturum açmayı OpenID Connect ile bağlayın',
saml2: "Kurumsal kimlik federasyonu için SAML2'yi kullanın",
cas: 'Tek oturum açma için merkezi bir kimlik doğrulama hizmetine bağlanın',
oauth2: 'Uyumlu bir OAuth2 kimlik hizmetine bağlanın',
dingtalk: 'DingTalk kuruluş kimliğini ve QR ile oturum açmayı kullanın',
feishu: 'Feishu kuruluş kimliğini ve hesap senkronizasyonunu kullanma',
wecom: 'WeCom üye kimliğiyle kimlik doğrulama',
},
planned: 'Planlanan',
plannedTitle: '{0} kimlik doğrulama ayarları',
plannedDesc: 'Bu kimlik doğrulama sağlayıcısı planlanmıştır ve henüz kullanılamamaktadır.',
ldap: {
enable: 'Etkinleştir',
enabled: 'Etkin',
disabled: 'Devre dışı',
connection: 'Temel bağlantı',
connectionDesc:
'Kullanıcıları aramak için kullanılan dizin hizmetini ve bağlama hesabını yapılandırın.',
serverURL: "Sunucu URL'si",
serverURLHelper: "ldap:// ve ldaps:// URL'lerini destekler.",
userBaseDN: 'Kullanıcı Base DN',
userBaseDNHelper:
"LDAP kullanıcı aramaları için DN'nun başlatılması; bu bir OU, CN veya etki alanı kökü DN olabilir.",
bindDN: "DN'yu bağla",
bindPassword: 'Şifre',
passwordSaved: 'Kaydedilen şifreyi korumak için boş bırakın',
userSearch: 'Kullanıcı arama',
userSearchDesc:
'Kullanıcı arama tabanını ve filtreyi ayarlayın, ardından 1Panel name olarak kullanılan LDAP niteliğini eşleyin.',
userFilter: 'Kullanıcı filtresi',
userFilterTooltip:
"Tam dizin okunması için %(user)s'yu çıkışlı kullanıcı adıyla veya * ile değiştirin.",
userFilterHelper: 'Kullanıcı adları LDAP filtresine eklenmeden önce çıkış karakteri kullanılır.',
attributeMap: 'Özellik eşleme',
attributeMapTooltip: 'JSON, 1Panel name alanından bir LDAP özniteliğine eşleme.',
attributeMapHelper: '1Panel name alanına eşlenen LDAP niteliğini ayarlayın.',
advanced: 'Gelişmiş ayarlar',
advancedDesc: 'TLS ve LDAP sorgu sayfalamayı yapılandırın.',
strictSync: 'Sıkı senkronizasyon',
strictSyncTooltip:
'Tam bir içe aktarma işleminin ardından, bu LDAP kaynağında eksik olan kullanıcılar devre dışı bırakılır ancak silinmez.',
strictSyncHelper:
'Yalnızca tam bir tam içe aktarma için geçerlidir. Seçilen kullanıcıları içe aktarmak hiçbir zaman diğer kullanıcıları devre dışı bırakmaz.',
skipTLSVerify: 'TLS doğrulamasını atla',
skipTLSVerifyTooltip: 'LDAPS bağlantıları için sertifika doğrulamayı devre dışı bırakın.',
skipTLSVerifyHelper:
'Yalnızca güvenilir, kendinden imzalı bir sertifikayla kullanın. Bu ayar katı senkronizasyondan bağımsızdır.',
connectTimeout: 'Bağlantı zaman aşımı (saniye)',
searchPageSize: 'LDAP sorgu sayfası boyutu',
restore: 'Geri yükle',
testConnection: 'Bağlantıyı test edin',
testLogin: 'Oturum açmayı test edin',
userImport: 'Kullanıcıları içe aktar',
saveBeforeImport: 'Kullanıcıları içe aktarmadan önce mevcut AD/LDAP ayarlarını kaydedin.',
format: 'Biçim',
restoreExample: 'Örneği geri yükle',
mappingValid: 'Geçerli JSON; name yapılandırıldı.',
mappingInvalid: 'Geçerli JSON girin.',
mappingObject: 'Öznitelik eşlemesi bir JSON nesnesi olmalıdır.',
mappingOnlyName: 'Yalnızca name eşlemesi desteklenir.',
mappingStringValues: 'Her eşlenen öznitelik bir dize olmalıdır.',
mappingNameRequired: 'name boş olmayan bir dize olmalıdır.',
restored: 'Son kaydedilen ayarlar geri yüklendi.',
connectionTestSuccess: 'LDAP bağlantı testi başarılı oldu.',
recentTestSuccess: 'Son test başarılı oldu: {0}',
recentTestFailed: 'Son test başarısız oldu: {0}',
serverURLRequired: "LDAP sunucu URL'sini girin.",
serverURLInvalid: "Geçerli bir ldap:// veya ldaps:// URL'si kullanın.",
userBaseDNRequired: 'Base DN Kullanıcısını girin.',
bindDNRequired: 'DN bağlamasını girin.',
passwordRequired: 'Şifreyi girin.',
userFilterRequired: 'Kullanıcı filtresini girin.',
connectTimeoutRequired: 'Bağlantı zaman aşımını girin.',
searchPageSizeRequired: 'LDAP sorgu sayfası boyutunu girin.',
sync: {
title: 'Planlanmış senkronizasyon',
description:
"LDAP dizininin tamamını bir programa göre okuyun ve 1Panel'da içe aktarılan LDAP kullanıcılarını koruyun.",
enable: 'Programı etkinleştir',
enableHelper:
'Devre dışı bırakıldığında otomatik yürütme durur; manuel senkronizasyon kullanılabilir durumda kalır.',
schedule: 'Program',
daily: 'Günlük',
weekly: 'Haftalık',
customCron: 'Özel Cron',
preview: 'Önizleme',
previewTitle: 'Sonraki 5 çalıştırma',
previewEmpty: 'Yürütme süresi yok',
cronHelper:
'Standart beş alanlı Cron ifadesini kullanın: dakika, saat, gün, ay, haftanın günü.',
autoImport: 'Yeni kullanıcıları içe aktar',
autoImportHelper:
'Devre dışı bırakıldığında, içe aktarılan LDAP kullanıcıları için yalnızca dizin tanımlayıcıları ve durumu korunur; yeni kullanıcı oluşturulmaz.',
defaultRole: 'Yeni kullanıcı rolü',
defaultRolePlaceholder: 'Bir rol seçin',
defaultRoleHelper:
'Yalnızca zamanlanmış senkronizasyonla oluşturulan kullanıcılar için geçerlidir.',
defaultRoleRequired: 'Yeni LDAP kullanıcıları için bir rol seçin.',
strictSyncHelper:
'Tam sorguda eksik olan kullanıcılar devre dışı bırakılır ve oturumları temizlenir; kullanıcılar, roller ve izinler silinmez.',
safetyTitle: 'Eksik kullanıcılar yalnızca LDAP tam sorgusunun tamamlanmasından sonra işlenir',
safetyDescription:
'Başarısız bir sorgu, zaman aşımı veya tamamlanmamış sayfalanmış sonuç, kullanıcı durumunu hiçbir zaman değiştirmez. Senkronizasyon kapsamı Kullanıcı Base DN, filtre ve öznitelik eşlemesini takip eder.',
runNow: 'Şimdi senkronize et',
lastRunSuccess: 'Son senkronizasyon başarılı oldu: {0}',
lastRunFailed: 'Son senkronizasyon başarısız oldu: {0}',
lastRunRunning: 'Senkronizasyon başladı: {0}',
sourceDisabled: "Senkronizasyonu çalıştırmadan önce AD/LDAP'yu etkinleştirin ve kaydedin.",
cronRequired: 'Bir Cron ifadesi girin.',
saveBeforeRun: 'Görevi çalıştırmadan önce senkronizasyon ayarlarını kaydedin.',
runConfirmTitle: 'Kesin senkronizasyonu çalıştır',
runConfirmDescription:
'Tam sorguda bulunmayan LDAP kullanıcıları devre dışı bırakılacak ve etkin oturumları kapatılacaktır. Devam edilsin mi?',
runSuccess: 'LDAP senkronizasyonu tamamlandı.',
weekdays: {
0: 'Pazar',
1: 'Pazartesi',
2: 'Salı',
3: 'Çarşamba',
4: 'perşembe',
5: 'Cuma',
6: 'Cumartesi',
},
},
syncLogs: {
title: 'Günlükleri senkronize et',
description: 'Planlanmış ve manuel LDAP senkronizasyon sonuçlarını inceleyin.',
startedAt: 'Başlangıç zamanı',
trigger: 'Çalıştırma türü',
manual: 'Manuel',
scheduled: 'planlanmış',
success: 'Başarı',
failed: 'Başarısız',
running: 'Çalışıyor',
result: 'Sonuç',
resultSummary: '{0} oluşturuldu, {1} güncellendi, {2} eksik',
duration: 'Süre',
action: 'Eylem',
},
testLoginTitle: 'AD/LDAP oturum açmayı test et',
testLoginDesc:
'Yalnızca kimlik doğrulamayı test etmek için AD/LDAP kullanıcı kimlik bilgileriyle bağlantı kurun. 1Panel oturumu oluşturulmadı.',
ldapUsername: 'LDAP kullanıcı adı',
usernameRequired: 'LDAP kullanıcı adını girin.',
startTest: 'Testi başlat',
testLoginSuccess: 'Kimlik doğrulama başarılı oldu.',
testLoginSuccessWithDN: 'Kimlik doğrulama başarılı oldu. Kullanıcı DN: {0}',
import: {
title: 'AD/LDAP kullanıcılarını içe aktar',
source: 'Veri kaynağı: AD/LDAP dizini',
lastRead: 'Son okuma: {0}',
cacheHit: 'Önbelleğe alınmış sonuç',
keywordPlaceholder: 'Kullanıcı adını ara',
search: 'Ara',
refresh: "LDAP'dan okuyun",
refreshTip: 'Kısa süreli önbelleği göz ardı edin ve LDAP dizinini yeniden okuyun.',
loadFailed: 'LDAP dizini okunamadı.',
retry: 'Yeniden dene',
noData: 'Hiçbir dizin kullanıcısı bulunamadı.',
username: 'Kullanıcı adı',
status: 'Durum',
changes: 'Değişiklikler',
noChanges: 'Değişiklik yok',
importable: 'İçe aktarmaya hazır',
updateAvailable: 'Güncelleme mevcut',
upToDate: 'güncel',
conflict: 'Ad çakışması',
selectedCount: '{0} seçildi',
totalCount: '{0} kullanıcı',
newUserRole: 'Yeni kullanıcı rolü',
newUserRoleRequired: 'Yeni kullanıcılar için bir rol seçin.',
noNewUsers: 'Bu operasyonda yeni kullanıcı yok.',
roleOnlyForNewUsers: 'Seçilen rol yalnızca yeni oluşturulan kullanıcılara uygulanır.',
strictOff:
'Katı senkronizasyon devre dışı bırakıldı. Tam içe aktarma, kullanıcıları devre dışı bırakmaz.',
importSelected: 'İçe aktarma/güncelleme seçildi ({0})',
importAll: 'Tümünü içe aktar/güncelle ({0})',
previewTitle: 'Tam içe aktarmayı onaylayın',
previewDesc: 'LDAP dizininin tamamı okundu. Arama anahtar sözcüğü bu işlemi sınırlamaz.',
created: 'Oluştur',
updated: 'Güncelleme',
unchanged: 'değişmedi',
conflicts: 'Çatışmalar',
missing: 'Devre dışı bırak',
reactivated: 'Yeniden etkinleştir',
strictWarning:
"Katı senkronizasyon etkinleştirildi. LDAP'da bulunmayan kullanıcılar oturum açamaz ancak kayıtları, rolleri ve izinleri korunur.",
missingUsers: "LDAP'da eksik olan kullanıcılar",
missingScope: 'Yalnızca bu LDAP kaynağı etkilenir.',
willDisable: 'Devre dışı bırakılacak',
confirmAll: 'İçe aktarmayı onayla',
confirmAllWithMissing: 'İçe aktarmayı onayla ve {0} kullanıcıyı devre dışı bırak',
executeSuccess: 'LDAP kullanıcıları başarıyla işlendi.',
queryExpired: "Dizin sonucunun süresi doldu. LDAP'dan tekrar okuyun.",
planIncomplete: 'Tam dizin okuması tamamlanmadı ve yürütülemiyor.',
},
},
},
},
app: {
app: 'Uygulama',
+256
View File
@@ -3910,6 +3910,59 @@ const message = {
noFail: '掛載失敗不影響系統啟動',
},
xpack: {
ldap: {
source: '來源',
directoryMissing: 'LDAP 中不存在',
localCredentialsManaged: '此使用者的使用者名稱和密碼由 LDAP 管理無法在本機修改',
sources: {
local: '本機',
ldap: 'LDAP',
},
importUsers: '匯入 AD/LDAP 使用者',
searchUsersPlaceholder: '搜尋使用者名稱',
readFromLDAP: ' LDAP 讀取',
selectedUsers: '已選擇 {0} ',
queriedAt: '讀取時間',
cachedResult: '快取結果',
roleForNewUsers: '新使用者角色',
selectRole: '請選擇角色',
roleOnlyForNewUsers: '僅在本次處理包含新使用者時需要選擇角色',
roleRequiredForNewUsers: '請為新的 LDAP 使用者選擇角色',
changedFields: '變更欄位',
importSelected: '匯入/更新所選',
importAll: '匯入/更新全部',
importPreview: 'AD/LDAP 匯入預覽',
importCompleted: 'AD/LDAP 使用者處理完成',
incompletePreview: 'LDAP 目錄未完整讀取請重新從 LDAP 讀取',
missingUsersWarning: '嚴格同步將停用 LDAP 中不存在的使用者',
missingUsersWarningDetail: '{0} 個本機 LDAP 使用者將無法繼續登入',
action: '處理結果',
reason: '原因',
noImportChanges: '沒有需要處理的變更',
confirmImport: '確認匯入',
created: '新增',
updated: '更新',
reactivated: '恢復',
unchanged: '無變更',
conflicts: '衝突',
missing: '將停用',
missingUsersConfirm: 'LDAP 中不存在的 {0} 個使用者將被停用並登出是否繼續',
strictSyncConfirm: '確認嚴格同步',
status: { importable: '可匯入', update_available: '待更新', up_to_date: '已是最新', conflict: '同名衝突' },
fields: { name: '使用者名稱', externalDN: '目錄 DN', externalID: '外部識別', authSourceStatus: '認證狀態' },
actions: {
created: '新增',
updated: '更新',
reactivated: '恢復',
unchanged: '無變更',
skipped: '略過',
conflicts: '衝突',
conflict: '衝突',
missing: '停用',
errors: '錯誤',
error: '錯誤',
},
},
expiresEnterpriseAlert: '溫馨提醒您的企業版許可證將在 {0} 天後到期屆時所有企業版功能將無法繼續使用',
expiresProAlert: '溫馨提醒您的專業版許可證將在 {0} 天後到期屆時所有專業版功能將無法繼續使用',
name: '商業版',
@@ -4455,6 +4508,209 @@ const message = {
masterOnlyPermissionHelper: '該權限僅在主節點生效',
view: '檢視',
manage: '管理',
authManage: '認證管理',
auth: {
providerNavigation: '認證類型',
providers: {
ldap: 'AD/LDAP',
passkey: 'Passkey',
radius: 'Radius',
oidc: 'OIDC',
saml2: 'SAML2',
cas: 'CAS',
oauth2: 'OAuth2',
dingtalk: '釘釘',
feishu: '飛書',
wecom: '企業微信',
},
providerDescriptions: {
ldap: '相容 Active DirectoryOpenLDAP LDAP 服務',
passkey: '使用裝置憑證進行無密碼安全登入',
radius: '透過 Radius 服務完成網路存取認證',
oidc: '使用 OpenID Connect 接入企業單一登入',
saml2: '透過 SAML2 完成企業身分聯合登入',
cas: '接入集中式認證服務實現單一登入',
oauth2: '接入相容 OAuth2 的第三方身分服務',
dingtalk: '使用釘釘組織身分和掃碼登入',
feishu: '使用飛書組織身分和帳號同步',
wecom: '使用企業微信成員身分認證',
},
planned: '待接入',
plannedTitle: '{0} 認證設定',
plannedDesc: '該認證方式正在規劃中暫不可用',
ldap: {
enable: '是否啟用',
enabled: '已啟用',
disabled: '未啟用',
connection: '基礎連線',
connectionDesc: '設定目錄服務和用於搜尋使用者的綁定帳號',
serverURL: '伺服器位址',
serverURLHelper: '支援 ldap:// 和 ldaps:// 位址。',
userBaseDN: '使用者 Base DN',
userBaseDNHelper: 'LDAP 使用者搜尋的起始 DN可使用 OUCN 或網域根 DN',
bindDN: '綁定 DN',
bindPassword: '密碼',
passwordSaved: '留空則保留已儲存的密碼',
userSearch: '使用者搜尋',
userSearchDesc: '設定使用者搜尋基準與過濾器並映射到 1Panel 使用者名稱欄位',
userFilter: '使用者篩選器',
userFilterTooltip: '按使用者名稱查詢時替換 %(user)s全量讀取時替換為 *',
userFilterHelper: '搜尋和認證時會對使用者名稱執行 LDAP filter escaping',
attributeMap: '映射屬性',
attributeMapTooltip: '1Panel 使用者名稱欄位name LDAP 屬性的 JSON 映射',
attributeMapHelper: '填寫映射到 1Panel 使用者名稱欄位name LDAP 屬性',
advanced: '進階設定',
advancedDesc: '設定 TLS LDAP 查詢分頁',
strictSync: '嚴格同步',
strictSyncTooltip: '完整全量處理後LDAP 中不存在的同源使用者將被停用但不會刪除',
strictSyncHelper: '僅作用於完整成功的全量處理匯入選中使用者時不會停用其他使用者',
skipTLSVerify: '略過 TLS 憑證驗證',
skipTLSVerifyTooltip: '連線 LDAPS 時不驗證伺服器端憑證',
skipTLSVerifyHelper: '僅用於可信任的自簽憑證此設定與嚴格同步互相獨立',
connectTimeout: '連線逾時',
searchPageSize: 'LDAP 查詢分頁大小',
restore: '還原',
testConnection: '測試連線',
testLogin: '測試登入',
userImport: '使用者匯入',
saveBeforeImport: '請先儲存目前 AD/LDAP 設定再匯入使用者',
format: '格式化',
restoreExample: '還原範例',
mappingValid: 'JSON 格式正確name 已設定',
mappingInvalid: '請輸入有效的 JSON',
mappingObject: '映射屬性必須是 JSON 物件',
mappingOnlyName: '僅支援 name 映射',
mappingStringValues: '每個映射屬性都必須是字串',
mappingNameRequired: 'name 必須是非空字串',
restored: '已還原為上次儲存的設定',
connectionTestSuccess: 'LDAP 連線測試成功',
recentTestSuccess: '最近測試成功{0}',
recentTestFailed: '最近測試失敗{0}',
serverURLRequired: '請輸入 LDAP 伺服器位址',
serverURLInvalid: '請輸入有效的 ldap:// 或 ldaps:// 位址。',
userBaseDNRequired: '請輸入使用者 Base DN',
bindDNRequired: '請輸入綁定 DN',
passwordRequired: '請輸入密碼',
userFilterRequired: '請輸入使用者篩選器',
connectTimeoutRequired: '請輸入連線逾時時間',
searchPageSizeRequired: '請輸入 LDAP 查詢分頁大小',
sync: {
title: '定時同步',
description: '定期讀取 LDAP 全量使用者並維護 1Panel 中的 LDAP 使用者',
enable: '是否啟用',
enableHelper: '關閉後不再自動執行仍可手動立即同步',
schedule: '執行週期',
daily: '每天',
weekly: '每週',
customCron: '自訂 Cron',
preview: '預覽',
previewTitle: '未來 5 次執行',
previewEmpty: '暫無可用執行時間',
cronHelper: '使用 五段式 Cron 運算式',
autoImport: '自動匯入新使用者',
autoImportHelper: '關閉後僅維護已匯入 LDAP 使用者的目錄識別與狀態不會自動建立新使用者',
defaultRole: '新使用者角色',
defaultRolePlaceholder: '請選擇角色',
defaultRoleHelper: '僅用於定時同步中新建立的使用者後續可在使用者管理中調整',
defaultRoleRequired: '請選擇新 LDAP 使用者的角色',
strictSyncHelper:
'全量查詢中缺失的同源 LDAP 使用者將被停用並清理工作階段但不會刪除使用者角色和權限',
safetyTitle: '僅在 LDAP 全量查詢完整成功後處理缺失使用者',
safetyDescription:
'查詢失敗逾時或分頁結果不完整時本次工作不會變更使用者狀態同步範圍沿用使用者搜尋中的 Base DN篩選器和屬性對應',
runNow: '立即同步',
lastRunSuccess: '最近同步成功{0}',
lastRunFailed: '最近同步失敗{0}',
lastRunRunning: '同步開始時間{0}',
sourceDisabled: '請先啟用並儲存 AD/LDAP再執行同步',
cronRequired: '請輸入 Cron 運算式',
saveBeforeRun: '請先儲存同步設定再執行同步',
runConfirmTitle: '執行嚴格同步',
runConfirmDescription: '完整全量查詢中缺失的 LDAP 使用者將被停用並清理活動工作階段是否繼續',
runSuccess: 'LDAP 同步完成',
weekdays: {
0: '週日',
1: '週一',
2: '週二',
3: '週三',
4: '週四',
5: '週五',
6: '週六',
},
},
syncLogs: {
title: '同步記錄',
description: '查看定時和手動 LDAP 同步的執行結果',
startedAt: '開始時間',
trigger: '觸發方式',
manual: '手動執行',
scheduled: '定時執行',
success: '成功',
failed: '失敗',
running: '執行中',
result: '執行結果',
resultSummary: '新增 {0}更新 {1}缺失 {2}',
duration: '耗時',
action: '處理動作',
},
testLoginTitle: '測試 AD/LDAP 登入',
testLoginDesc:
'使用 AD/LDAP 使用者憑證執行 bind 驗證僅測試認證能力不建立 1Panel 登入工作階段',
ldapUsername: 'LDAP 使用者名稱',
usernameRequired: '請輸入 LDAP 使用者名稱',
startTest: '開始測試',
testLoginSuccess: '認證成功',
testLoginSuccessWithDN: '認證成功使用者 DN{0}',
import: {
title: '匯入 AD/LDAP 使用者',
source: '資料來源AD/LDAP 目錄',
lastRead: '最近讀取{0}',
cacheHit: '使用快取結果',
keywordPlaceholder: '搜尋使用者名稱',
search: '搜尋',
refresh: ' LDAP 讀取',
refreshTip: '忽略短期快取並重新讀取 LDAP 目錄',
loadFailed: 'LDAP 目錄讀取失敗',
retry: '重試',
noData: '未找到目錄使用者',
username: '使用者名稱',
status: '狀態',
changes: '變更欄位',
noChanges: '無變化',
importable: '可匯入',
updateAvailable: '待更新',
upToDate: '已是最新',
conflict: '同名衝突',
selectedCount: '已選擇 {0} ',
totalCount: ' {0} 個使用者',
newUserRole: '新使用者角色',
newUserRoleRequired: '請選擇新使用者角色',
noNewUsers: '本次無新使用者',
roleOnlyForNewUsers: '所選角色僅套用於本次新建使用者',
strictOff: '嚴格同步未啟用全量處理不會停用使用者',
importSelected: '匯入/更新選中{0}',
importAll: '匯入/更新全部{0}',
previewTitle: '確認全量處理',
previewDesc: '已完整讀取 LDAP 目錄目前搜尋關鍵字不會縮小本次處理範圍',
created: '新建',
updated: '更新',
unchanged: '無變化',
conflicts: '衝突',
missing: '將停用',
reactivated: '恢復',
strictWarning:
'嚴格同步已啟用LDAP 中不存在的同源使用者將無法繼續登入但不會刪除使用者角色和本機權限',
missingUsers: 'LDAP 中不存在的使用者',
missingScope: '僅處理目前 LDAP 認證來源',
willDisable: '將停用',
confirmAll: '確認匯入',
confirmAllWithMissing: '確認匯入並停用 {0} 個使用者',
executeSuccess: 'LDAP 使用者處理成功',
queryExpired: '目錄查詢結果已過期請重新從 LDAP 讀取',
planIncomplete: 'LDAP 目錄未完整讀取無法執行全量處理',
},
},
},
},
logExport: {
title: '匯出日誌',
+255
View File
@@ -3910,6 +3910,59 @@ const message = {
noFail: '挂载失败不影响系统启动',
},
xpack: {
ldap: {
source: '来源',
directoryMissing: 'LDAP 中不存在',
localCredentialsManaged: '该用户的用户名和密码由 LDAP 管理无法在本地修改',
sources: {
local: '本地',
ldap: 'LDAP',
},
importUsers: '导入 AD/LDAP 用户',
searchUsersPlaceholder: '搜索用户名',
readFromLDAP: ' LDAP 读取',
selectedUsers: '已选择 {0} ',
queriedAt: '读取时间',
cachedResult: '缓存结果',
roleForNewUsers: '新用户角色',
selectRole: '请选择角色',
roleOnlyForNewUsers: '仅在本次处理包含新用户时需要选择角色',
roleRequiredForNewUsers: '请为新的 LDAP 用户选择角色',
changedFields: '变更字段',
importSelected: '导入/更新选中',
importAll: '导入/更新全部',
importPreview: 'AD/LDAP 导入预览',
importCompleted: 'AD/LDAP 用户处理完成',
incompletePreview: 'LDAP 目录未完整读取请重新从 LDAP 读取',
missingUsersWarning: '严格同步将停用 LDAP 中不存在的用户',
missingUsersWarningDetail: '{0} 个本地 LDAP 用户将无法继续登录',
action: '处理结果',
reason: '原因',
noImportChanges: '没有需要处理的变更',
confirmImport: '确认导入',
created: '新建',
updated: '更新',
reactivated: '恢复',
unchanged: '无变化',
conflicts: '冲突',
missing: '将停用',
missingUsersConfirm: 'LDAP 中不存在的 {0} 个用户将被停用并退出登录是否继续',
strictSyncConfirm: '确认严格同步',
status: { importable: '可导入', update_available: '待更新', up_to_date: '已是最新', conflict: '同名冲突' },
fields: { name: '用户名', externalDN: '目录 DN', externalID: '外部标识', authSourceStatus: '认证状态' },
actions: {
created: '新建',
updated: '更新',
reactivated: '恢复',
unchanged: '无变化',
skipped: '跳过',
conflicts: '冲突',
conflict: '冲突',
missing: '停用',
errors: '错误',
error: '错误',
},
},
expiresEnterpriseAlert: '温馨提醒企业版许可证将于 [{0}] 天后到期届时将停止使用所有企业版功能',
expiresProAlert: '温馨提醒专业版许可证将于 [{0}] 天后到期届时将停止使用所有专业版功能',
menu: '高级功能',
@@ -5120,6 +5173,208 @@ const message = {
masterOnlyPermissionHelper: '该权限仅在主节点生效',
view: '查看',
manage: '管理',
authManage: '认证管理',
auth: {
providerNavigation: '认证类型',
providers: {
ldap: 'AD/LDAP',
passkey: 'Passkey',
radius: 'Radius',
oidc: 'OIDC',
saml2: 'SAML2',
cas: 'CAS',
oauth2: 'OAuth2',
dingtalk: '钉钉',
feishu: '飞书',
wecom: '企业微信',
},
providerDescriptions: {
ldap: '兼容 Active DirectoryOpenLDAP LDAP 服务',
passkey: '使用设备凭据进行无密码安全登录',
radius: '通过 Radius 服务完成网络访问认证',
oidc: '使用 OpenID Connect 接入企业单点登录',
saml2: '通过 SAML2 完成企业身份联合登录',
cas: '接入集中式认证服务实现单点登录',
oauth2: '接入兼容 OAuth2 的第三方身份服务',
dingtalk: '使用钉钉组织身份和扫码登录',
feishu: '使用飞书组织身份和账号同步',
wecom: '使用企业微信成员身份认证',
},
planned: '待接入',
plannedTitle: '{0} 认证设置',
plannedDesc: '该认证方式正在规划中暂不可用',
ldap: {
enable: '是否开启',
enabled: '已启用',
disabled: '未启用',
connection: '基础连接',
connectionDesc: '配置目录服务和用于搜索用户的绑定账号',
serverURL: '服务端地址',
serverURLHelper: '支持 ldap:// 和 ldaps:// 地址。',
userBaseDN: '用户 Base DN',
userBaseDNHelper: 'LDAP 用户搜索的起始 DN可使用 OUCN 或域根 DN',
bindDN: '绑定 DN',
bindPassword: '密码',
passwordSaved: '留空则保留已保存的密码',
userSearch: '用户搜索',
userSearchDesc: '配置用户搜索基准与过滤器并映射到 1Panel 用户名字段',
userFilter: '用户过滤器',
userFilterTooltip: '按用户名查询时替换 %(user)s全量读取时替换为 *',
userFilterHelper: '搜索和认证时会对用户名执行 LDAP filter escaping',
attributeMap: '映射属性',
attributeMapTooltip: '1Panel 用户名字段name LDAP 属性的 JSON 映射',
attributeMapHelper: '填写映射到 1Panel 用户名字段name LDAP 属性',
advanced: '高级设置',
advancedDesc: '配置 TLS LDAP 查询分页',
strictSync: '严格同步',
strictSyncTooltip: '完整全量处理后LDAP 中不存在的同源用户将被停用但不会删除',
strictSyncHelper: '仅作用于完整成功的全量处理导入选中用户时不会停用其他用户',
skipTLSVerify: '跳过 TLS 证书校验',
skipTLSVerifyTooltip: '连接 LDAPS 时不校验服务端证书',
skipTLSVerifyHelper: '仅用于可信的自签名证书该设置与严格同步相互独立',
connectTimeout: '连接超时',
searchPageSize: 'LDAP 查询分页大小',
restore: '还原',
testConnection: '测试连接',
testLogin: '测试登录',
userImport: '用户导入',
saveBeforeImport: '请先保存当前 AD/LDAP 配置再导入用户',
format: '格式化',
restoreExample: '恢复示例',
mappingValid: 'JSON 格式正确name 已配置',
mappingInvalid: '请输入有效的 JSON',
mappingObject: '映射属性必须是 JSON 对象',
mappingOnlyName: '仅支持 name 映射',
mappingStringValues: '每个映射属性都必须是字符串',
mappingNameRequired: 'name 必须是非空字符串',
restored: '已还原为上次保存的配置',
connectionTestSuccess: 'LDAP 连接测试成功',
recentTestSuccess: '最近测试成功{0}',
recentTestFailed: '最近测试失败{0}',
serverURLRequired: '请输入 LDAP 服务端地址',
serverURLInvalid: '请输入有效的 ldap:// 或 ldaps:// 地址。',
userBaseDNRequired: '请输入用户 Base DN',
bindDNRequired: '请输入绑定 DN',
passwordRequired: '请输入密码',
userFilterRequired: '请输入用户过滤器',
connectTimeoutRequired: '请输入连接超时时间',
searchPageSizeRequired: '请输入 LDAP 查询分页大小',
sync: {
title: '定时同步',
description: '定期读取 LDAP 全量用户并维护 1Panel 中的 LDAP 用户',
enable: '是否启用',
enableHelper: '关闭后不再自动执行仍可手动立即同步',
schedule: '执行周期',
daily: '每天',
weekly: '每周',
customCron: '自定义 Cron',
preview: '预览',
previewTitle: '未来 5 次执行',
previewEmpty: '暂无可用执行时间',
cronHelper: '使用 五段式 Cron 表达式',
autoImport: '自动导入新用户',
autoImportHelper: '关闭后仅维护已导入 LDAP 用户的目录标识和状态不会自动创建新用户',
defaultRole: '新用户角色',
defaultRolePlaceholder: '请选择角色',
defaultRoleHelper: '仅用于定时同步中新创建的用户后续可在用户管理中调整',
defaultRoleRequired: '请选择新 LDAP 用户的角色',
strictSyncHelper:
'全量查询中缺失的同源 LDAP 用户将被停用并清理会话但不会删除用户角色和权限',
safetyTitle: '仅在 LDAP 全量查询完整成功后处理缺失用户',
safetyDescription:
'查询失败超时或分页结果不完整时本次任务不会改变用户状态同步范围沿用用户搜索中的 Base DN过滤器和属性映射',
runNow: '立即同步',
lastRunSuccess: '最近同步成功{0}',
lastRunFailed: '最近同步失败{0}',
lastRunRunning: '同步开始时间{0}',
sourceDisabled: '请先启用并保存 AD/LDAP再执行同步',
cronRequired: '请输入 Cron 表达式',
saveBeforeRun: '请先保存同步设置再执行同步',
runConfirmTitle: '执行严格同步',
runConfirmDescription: '完整全量查询中缺失的 LDAP 用户将被停用并清理活动会话是否继续',
runSuccess: 'LDAP 同步完成',
weekdays: {
0: '周日',
1: '周一',
2: '周二',
3: '周三',
4: '周四',
5: '周五',
6: '周六',
},
},
syncLogs: {
title: '同步记录',
description: '查看定时和手动 LDAP 同步的执行结果',
startedAt: '开始时间',
trigger: '触发方式',
manual: '手动执行',
scheduled: '定时执行',
success: '成功',
failed: '失败',
running: '执行中',
result: '执行结果',
resultSummary: '新增 {0}更新 {1}缺失 {2}',
duration: '耗时',
action: '处理动作',
},
testLoginTitle: '测试 AD/LDAP 登录',
testLoginDesc: '使用 AD/LDAP 用户凭据执行 bind 验证仅测试认证能力不创建 1Panel 登录会话',
ldapUsername: 'LDAP 用户名',
usernameRequired: '请输入 LDAP 用户名',
startTest: '开始测试',
testLoginSuccess: '认证成功',
testLoginSuccessWithDN: '认证成功用户 DN{0}',
import: {
title: '导入 AD/LDAP 用户',
source: '数据来源AD/LDAP 目录',
lastRead: '最近读取{0}',
cacheHit: '使用缓存结果',
keywordPlaceholder: '搜索用户名',
search: '搜索',
refresh: ' LDAP 读取',
refreshTip: '忽略短时缓存并重新读取 LDAP 目录',
loadFailed: 'LDAP 目录读取失败',
retry: '重试',
noData: '未找到目录用户',
username: '用户名',
status: '状态',
changes: '变更字段',
noChanges: '无变化',
importable: '可导入',
updateAvailable: '待更新',
upToDate: '已是最新',
conflict: '同名冲突',
selectedCount: '已选择 {0} ',
totalCount: ' {0} 个用户',
newUserRole: '新用户角色',
newUserRoleRequired: '请选择新用户角色',
noNewUsers: '本次无新用户',
roleOnlyForNewUsers: '所选角色仅应用于本次新建用户',
strictOff: '严格同步未启用全量处理不会停用用户',
importSelected: '导入/更新选中{0}',
importAll: '导入/更新全部{0}',
previewTitle: '确认全量处理',
previewDesc: '已完整读取 LDAP 目录当前搜索关键字不会缩小本次处理范围',
created: '新建',
updated: '更新',
unchanged: '无变化',
conflicts: '冲突',
missing: '将停用',
reactivated: '恢复',
strictWarning:
'严格同步已启用LDAP 中不存在的同源用户将无法继续登录但不会删除用户角色和本地权限',
missingUsers: 'LDAP 中不存在的用户',
missingScope: '仅处理当前 LDAP 认证源',
willDisable: '将停用',
confirmAll: '确认导入',
confirmAllWithMissing: '确认导入并停用 {0} 个用户',
executeSuccess: 'LDAP 用户处理成功',
queryExpired: '目录查询结果已过期请重新从 LDAP 读取',
planIncomplete: 'LDAP 目录未完整读取不能执行全量处理',
},
},
},
},
customApp: {
name: '自定义仓库',
@@ -1,6 +1,14 @@
<template>
<DrawerPro v-model="open" :header="$t('xpack.user.userInfo')">
<div v-loading="loading">
<el-alert
v-if="isLDAPUser"
class="mb-4"
:title="$t('xpack.ldap.localCredentialsManaged')"
type="info"
:closable="false"
show-icon
/>
<el-form ref="userRef" label-position="top" :model="form" :rules="userRules">
<input
class="hidden-autofill-field"
@@ -17,7 +25,13 @@
tabindex="-1"
/>
<el-form-item :label="$t('commons.login.username')" prop="name">
<el-input type="primary" v-model="form.name" name="profile-name" autocomplete="off" />
<el-input
type="primary"
v-model="form.name"
name="profile-name"
autocomplete="off"
:disabled="isLDAPUser"
/>
</el-form-item>
<el-form-item :label="$t('commons.login.password')" prop="password">
<el-input
@@ -27,10 +41,11 @@
v-model.trim="form.password"
name="profile-new-password"
autocomplete="new-password"
:disabled="isLDAPUser"
/>
<span class="input-help">{{ $t('setting.passwordEmptyTip') }}</span>
<span v-if="!isLDAPUser" class="input-help">{{ $t('setting.passwordEmptyTip') }}</span>
</el-form-item>
<el-form-item v-if="form.password" :label="$t('setting.oldPassword')" prop="oldPassword">
<el-form-item v-if="form.password && !isLDAPUser" :label="$t('setting.oldPassword')" prop="oldPassword">
<el-input
type="password"
show-password
@@ -147,7 +162,7 @@
<el-button :disabled="loading" @click="open = false">
{{ $t('commons.button.cancel') }}
</el-button>
<el-button :disabled="loading" type="primary" @click="onSubmit(userRef)">
<el-button :disabled="loading || isLDAPUser" type="primary" @click="onSubmit(userRef)">
{{ $t('commons.button.confirm') }}
</el-button>
</template>
@@ -442,6 +457,7 @@ const mfaForm = reactive({
const passkeyForm = reactive({
name: '',
});
const isLDAPUser = computed(() => (props.currentUser?.authSource || '').toLowerCase() === 'ldap');
const passkeyPrereqBindDomain = computed(() => hasBindDomain.value);
const passkeyPrereqHttps = computed(() => window.isSecureContext);
@@ -812,6 +828,7 @@ const buildPasskeyAttestation = (credential: PublicKeyCredential) => {
const onSubmit = async (formEl: FormInstance | undefined) => {
if (!formEl) return;
if (isLDAPUser.value) return;
const valid = await formEl.validateField(getUserFormFields(), () => {});
if (!valid) return;
const needReLogin = form.name !== props.currentUser?.name || !!form.password;