mirror of
https://github.com/pocket-id/pocket-id.git
synced 2026-03-28 10:16:37 +00:00
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f125cf0dad | ||
|
|
6a038fcf9a | ||
|
|
76e0192cee | ||
|
|
3ebf94dd84 | ||
|
|
7ec57437ac | ||
|
|
ed2c7b2303 | ||
|
|
e03270eb9d | ||
|
|
d683d18d91 | ||
|
|
f184120890 |
20
CHANGELOG.md
20
CHANGELOG.md
@@ -1,3 +1,23 @@
|
|||||||
|
## v1.15.0
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
- sorting by PKCE and re-auth of OIDC clients ([e03270e](https://github.com/pocket-id/pocket-id/commit/e03270eb9d474735ff4a1b4d8c90f1857b8cd52b) by @stonith404)
|
||||||
|
- replace %lang% placeholder in html lang ([#1071](https://github.com/pocket-id/pocket-id/pull/1071) by @daimond113)
|
||||||
|
- disabled property gets ignored when creating an user ([76e0192](https://github.com/pocket-id/pocket-id/commit/76e0192ceec339b6ddb4ad3424057d2bb48fae8f) by @stonith404)
|
||||||
|
- remove redundant indexes in Postgres ([6a038fc](https://github.com/pocket-id/pocket-id/commit/6a038fcf9afabbf00c45e42071e9bbe62ecab403) by @stonith404)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
- open edit page on table row click ([f184120](https://github.com/pocket-id/pocket-id/commit/f184120890c32f1e75a918c171084878a10e8b42) by @stonith404)
|
||||||
|
- add ability to set default profile picture ([#1061](https://github.com/pocket-id/pocket-id/pull/1061) by @stonith404)
|
||||||
|
|
||||||
|
### Other
|
||||||
|
|
||||||
|
- add support for OpenBSD binaries ([d683d18](https://github.com/pocket-id/pocket-id/commit/d683d18d9109ca2850e278b78f7bf3e5aca1d34d) by @stonith404)
|
||||||
|
|
||||||
|
**Full Changelog**: https://github.com/pocket-id/pocket-id/compare/v1.14.2...v1.15.0
|
||||||
|
|
||||||
## v1.14.2
|
## v1.14.2
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ func initServices(ctx context.Context, db *gorm.DB, httpClient *http.Client, ima
|
|||||||
}
|
}
|
||||||
|
|
||||||
svc.userGroupService = service.NewUserGroupService(db, svc.appConfigService)
|
svc.userGroupService = service.NewUserGroupService(db, svc.appConfigService)
|
||||||
svc.userService = service.NewUserService(db, svc.jwtService, svc.auditLogService, svc.emailService, svc.appConfigService, svc.customClaimService)
|
svc.userService = service.NewUserService(db, svc.jwtService, svc.auditLogService, svc.emailService, svc.appConfigService, svc.customClaimService, svc.appImagesService)
|
||||||
svc.ldapService = service.NewLdapService(db, httpClient, svc.appConfigService, svc.userService, svc.userGroupService)
|
svc.ldapService = service.NewLdapService(db, httpClient, svc.appConfigService, svc.userService, svc.userGroupService)
|
||||||
svc.apiKeyService = service.NewApiKeyService(db, svc.emailService)
|
svc.apiKeyService = service.NewApiKeyService(db, svc.emailService)
|
||||||
|
|
||||||
|
|||||||
@@ -388,3 +388,13 @@ func (e *UserEmailNotSetError) Error() string {
|
|||||||
func (e *UserEmailNotSetError) HttpStatusCode() int {
|
func (e *UserEmailNotSetError) HttpStatusCode() int {
|
||||||
return http.StatusBadRequest
|
return http.StatusBadRequest
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ImageNotFoundError struct{}
|
||||||
|
|
||||||
|
func (e *ImageNotFoundError) Error() string {
|
||||||
|
return "Image not found"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *ImageNotFoundError) HttpStatusCode() int {
|
||||||
|
return http.StatusNotFound
|
||||||
|
}
|
||||||
|
|||||||
@@ -25,10 +25,14 @@ func NewAppImagesController(
|
|||||||
group.GET("/application-images/logo", controller.getLogoHandler)
|
group.GET("/application-images/logo", controller.getLogoHandler)
|
||||||
group.GET("/application-images/background", controller.getBackgroundImageHandler)
|
group.GET("/application-images/background", controller.getBackgroundImageHandler)
|
||||||
group.GET("/application-images/favicon", controller.getFaviconHandler)
|
group.GET("/application-images/favicon", controller.getFaviconHandler)
|
||||||
|
group.GET("/application-images/default-profile-picture", authMiddleware.Add(), controller.getDefaultProfilePicture)
|
||||||
|
|
||||||
group.PUT("/application-images/logo", authMiddleware.Add(), controller.updateLogoHandler)
|
group.PUT("/application-images/logo", authMiddleware.Add(), controller.updateLogoHandler)
|
||||||
group.PUT("/application-images/background", authMiddleware.Add(), controller.updateBackgroundImageHandler)
|
group.PUT("/application-images/background", authMiddleware.Add(), controller.updateBackgroundImageHandler)
|
||||||
group.PUT("/application-images/favicon", authMiddleware.Add(), controller.updateFaviconHandler)
|
group.PUT("/application-images/favicon", authMiddleware.Add(), controller.updateFaviconHandler)
|
||||||
|
group.PUT("/application-images/default-profile-picture", authMiddleware.Add(), controller.updateDefaultProfilePicture)
|
||||||
|
|
||||||
|
group.DELETE("/application-images/default-profile-picture", authMiddleware.Add(), controller.deleteDefaultProfilePicture)
|
||||||
}
|
}
|
||||||
|
|
||||||
type AppImagesController struct {
|
type AppImagesController struct {
|
||||||
@@ -78,6 +82,18 @@ func (c *AppImagesController) getFaviconHandler(ctx *gin.Context) {
|
|||||||
c.getImage(ctx, "favicon")
|
c.getImage(ctx, "favicon")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getDefaultProfilePicture godoc
|
||||||
|
// @Summary Get default profile picture image
|
||||||
|
// @Description Get the default profile picture image for the application
|
||||||
|
// @Tags Application Images
|
||||||
|
// @Produce image/png
|
||||||
|
// @Produce image/jpeg
|
||||||
|
// @Success 200 {file} binary "Default profile picture image"
|
||||||
|
// @Router /api/application-images/default-profile-picture [get]
|
||||||
|
func (c *AppImagesController) getDefaultProfilePicture(ctx *gin.Context) {
|
||||||
|
c.getImage(ctx, "default-profile-picture")
|
||||||
|
}
|
||||||
|
|
||||||
// updateLogoHandler godoc
|
// updateLogoHandler godoc
|
||||||
// @Summary Update logo
|
// @Summary Update logo
|
||||||
// @Description Update the application logo
|
// @Description Update the application logo
|
||||||
@@ -171,3 +187,41 @@ func (c *AppImagesController) getImage(ctx *gin.Context, name string) {
|
|||||||
utils.SetCacheControlHeader(ctx, 15*time.Minute, 24*time.Hour)
|
utils.SetCacheControlHeader(ctx, 15*time.Minute, 24*time.Hour)
|
||||||
ctx.File(imagePath)
|
ctx.File(imagePath)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// updateDefaultProfilePicture godoc
|
||||||
|
// @Summary Update default profile picture image
|
||||||
|
// @Description Update the default profile picture image
|
||||||
|
// @Tags Application Images
|
||||||
|
// @Accept multipart/form-data
|
||||||
|
// @Param file formData file true "Profile picture image file"
|
||||||
|
// @Success 204 "No Content"
|
||||||
|
// @Router /api/application-images/default-profile-picture [put]
|
||||||
|
func (c *AppImagesController) updateDefaultProfilePicture(ctx *gin.Context) {
|
||||||
|
file, err := ctx.FormFile("file")
|
||||||
|
if err != nil {
|
||||||
|
_ = ctx.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := c.appImagesService.UpdateImage(file, "default-profile-picture"); err != nil {
|
||||||
|
_ = ctx.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.Status(http.StatusNoContent)
|
||||||
|
}
|
||||||
|
|
||||||
|
// deleteDefaultProfilePicture godoc
|
||||||
|
// @Summary Delete default profile picture image
|
||||||
|
// @Description Delete the default profile picture image
|
||||||
|
// @Tags Application Images
|
||||||
|
// @Success 204 "No Content"
|
||||||
|
// @Router /api/application-images/default-profile-picture [delete]
|
||||||
|
func (c *AppImagesController) deleteDefaultProfilePicture(ctx *gin.Context) {
|
||||||
|
if err := c.appImagesService.DeleteImage("default-profile-picture"); err != nil {
|
||||||
|
_ = ctx.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.Status(http.StatusNoContent)
|
||||||
|
}
|
||||||
|
|||||||
@@ -54,8 +54,8 @@ type OidcClient struct {
|
|||||||
ImageType *string
|
ImageType *string
|
||||||
DarkImageType *string
|
DarkImageType *string
|
||||||
IsPublic bool
|
IsPublic bool
|
||||||
PkceEnabled bool `filterable:"true"`
|
PkceEnabled bool `sortable:"true" filterable:"true"`
|
||||||
RequiresReauthentication bool `filterable:"true"`
|
RequiresReauthentication bool `sortable:"true" filterable:"true"`
|
||||||
Credentials OidcClientCredentials
|
Credentials OidcClientCredentials
|
||||||
LaunchURL *string
|
LaunchURL *string
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ func (s *AppImagesService) UpdateImage(file *multipart.FileHeader, imageName str
|
|||||||
|
|
||||||
currentExt, ok := s.extensions[imageName]
|
currentExt, ok := s.extensions[imageName]
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("unknown application image '%s'", imageName)
|
s.extensions[imageName] = fileType
|
||||||
}
|
}
|
||||||
|
|
||||||
imagePath := filepath.Join(common.EnvConfig.UploadPath, "application-images", fmt.Sprintf("%s.%s", imageName, fileType))
|
imagePath := filepath.Join(common.EnvConfig.UploadPath, "application-images", fmt.Sprintf("%s.%s", imageName, fileType))
|
||||||
@@ -69,13 +69,39 @@ func (s *AppImagesService) UpdateImage(file *multipart.FileHeader, imageName str
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *AppImagesService) DeleteImage(imageName string) error {
|
||||||
|
s.mu.Lock()
|
||||||
|
defer s.mu.Unlock()
|
||||||
|
|
||||||
|
ext, ok := s.extensions[imageName]
|
||||||
|
if !ok || ext == "" {
|
||||||
|
return &common.ImageNotFoundError{}
|
||||||
|
}
|
||||||
|
|
||||||
|
imagePath := filepath.Join(common.EnvConfig.UploadPath, "application-images", imageName+"."+ext)
|
||||||
|
if err := os.Remove(imagePath); err != nil && !os.IsNotExist(err) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
delete(s.extensions, imageName)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *AppImagesService) IsDefaultProfilePictureSet() bool {
|
||||||
|
s.mu.RLock()
|
||||||
|
defer s.mu.RUnlock()
|
||||||
|
|
||||||
|
_, ok := s.extensions["default-profile-picture"]
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
func (s *AppImagesService) getExtension(name string) (string, error) {
|
func (s *AppImagesService) getExtension(name string) (string, error) {
|
||||||
s.mu.RLock()
|
s.mu.RLock()
|
||||||
defer s.mu.RUnlock()
|
defer s.mu.RUnlock()
|
||||||
|
|
||||||
ext, ok := s.extensions[name]
|
ext, ok := s.extensions[name]
|
||||||
if !ok || ext == "" {
|
if !ok || ext == "" {
|
||||||
return "", fmt.Errorf("unknown application image '%s'", name)
|
return "", &common.ImageNotFoundError{}
|
||||||
}
|
}
|
||||||
|
|
||||||
return strings.ToLower(ext), nil
|
return strings.ToLower(ext), nil
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import (
|
|||||||
"log/slog"
|
"log/slog"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -33,9 +34,10 @@ type UserService struct {
|
|||||||
emailService *EmailService
|
emailService *EmailService
|
||||||
appConfigService *AppConfigService
|
appConfigService *AppConfigService
|
||||||
customClaimService *CustomClaimService
|
customClaimService *CustomClaimService
|
||||||
|
appImagesService *AppImagesService
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewUserService(db *gorm.DB, jwtService *JwtService, auditLogService *AuditLogService, emailService *EmailService, appConfigService *AppConfigService, customClaimService *CustomClaimService) *UserService {
|
func NewUserService(db *gorm.DB, jwtService *JwtService, auditLogService *AuditLogService, emailService *EmailService, appConfigService *AppConfigService, customClaimService *CustomClaimService, appImagesService *AppImagesService) *UserService {
|
||||||
return &UserService{
|
return &UserService{
|
||||||
db: db,
|
db: db,
|
||||||
jwtService: jwtService,
|
jwtService: jwtService,
|
||||||
@@ -43,6 +45,7 @@ func NewUserService(db *gorm.DB, jwtService *JwtService, auditLogService *AuditL
|
|||||||
emailService: emailService,
|
emailService: emailService,
|
||||||
appConfigService: appConfigService,
|
appConfigService: appConfigService,
|
||||||
customClaimService: customClaimService,
|
customClaimService: customClaimService,
|
||||||
|
appImagesService: appImagesService,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,39 +90,42 @@ func (s *UserService) GetProfilePicture(ctx context.Context, userID string) (io.
|
|||||||
return nil, 0, &common.InvalidUUIDError{}
|
return nil, 0, &common.InvalidUUIDError{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// First check for a custom uploaded profile picture (userID.png)
|
|
||||||
profilePicturePath := common.EnvConfig.UploadPath + "/profile-pictures/" + userID + ".png"
|
|
||||||
file, err := os.Open(profilePicturePath)
|
|
||||||
if err == nil {
|
|
||||||
// Get the file size
|
|
||||||
fileInfo, err := file.Stat()
|
|
||||||
if err != nil {
|
|
||||||
file.Close()
|
|
||||||
return nil, 0, err
|
|
||||||
}
|
|
||||||
return file, fileInfo.Size(), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// If no custom picture exists, get the user's data for creating initials
|
|
||||||
user, err := s.GetUser(ctx, userID)
|
user, err := s.GetUser(ctx, userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, err
|
return nil, 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if we have a cached default picture for these initials
|
profilePicturePath := filepath.Join(common.EnvConfig.UploadPath, "profile-pictures", userID+".png")
|
||||||
defaultProfilePicturesDir := common.EnvConfig.UploadPath + "/profile-pictures/defaults/"
|
|
||||||
defaultPicturePath := defaultProfilePicturesDir + user.Initials() + ".png"
|
// Try custom profile picture
|
||||||
file, err = os.Open(defaultPicturePath)
|
if file, size, err := utils.OpenFileWithSize(profilePicturePath); err == nil {
|
||||||
if err == nil {
|
return file, size, nil
|
||||||
fileInfo, err := file.Stat()
|
} else if !errors.Is(err, os.ErrNotExist) {
|
||||||
if err != nil {
|
return nil, 0, err
|
||||||
file.Close()
|
|
||||||
return nil, 0, err
|
|
||||||
}
|
|
||||||
return file, fileInfo.Size(), nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If no cached default picture exists, create one and save it for future use
|
// Try default global profile picture
|
||||||
|
if s.appImagesService.IsDefaultProfilePictureSet() {
|
||||||
|
path, _, err := s.appImagesService.GetImage("default-profile-picture")
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
if file, size, err := utils.OpenFileWithSize(path); err == nil {
|
||||||
|
return file, size, nil
|
||||||
|
} else if !errors.Is(err, os.ErrNotExist) {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try cached default for initials
|
||||||
|
defaultProfilePicturesDir := filepath.Join(common.EnvConfig.UploadPath, "profile-pictures", "defaults")
|
||||||
|
defaultPicturePath := filepath.Join(defaultProfilePicturesDir, user.Initials()+".png")
|
||||||
|
|
||||||
|
if file, size, err := utils.OpenFileWithSize(defaultPicturePath); err == nil {
|
||||||
|
return file, size, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create and return generated default with initials
|
||||||
defaultPicture, err := profilepicture.CreateDefaultProfilePicture(user.Initials())
|
defaultPicture, err := profilepicture.CreateDefaultProfilePicture(user.Initials())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, err
|
return nil, 0, err
|
||||||
@@ -128,19 +134,16 @@ func (s *UserService) GetProfilePicture(ctx context.Context, userID string) (io.
|
|||||||
// Save the default picture for future use (in a goroutine to avoid blocking)
|
// Save the default picture for future use (in a goroutine to avoid blocking)
|
||||||
defaultPictureBytes := defaultPicture.Bytes()
|
defaultPictureBytes := defaultPicture.Bytes()
|
||||||
go func() {
|
go func() {
|
||||||
// Ensure the directory exists
|
if err := os.MkdirAll(defaultProfilePicturesDir, os.ModePerm); err != nil {
|
||||||
errInternal := os.MkdirAll(defaultProfilePicturesDir, os.ModePerm)
|
slog.Error("Failed to create directory for default profile picture", slog.Any("error", err))
|
||||||
if errInternal != nil {
|
|
||||||
slog.Error("Failed to create directory for default profile picture", slog.Any("error", errInternal))
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
errInternal = utils.SaveFileStream(bytes.NewReader(defaultPictureBytes), defaultPicturePath)
|
if err := utils.SaveFileStream(bytes.NewReader(defaultPictureBytes), defaultPicturePath); err != nil {
|
||||||
if errInternal != nil {
|
slog.Error("Failed to cache default profile picture", slog.String("initials", user.Initials()), slog.Any("error", err))
|
||||||
slog.Error("Failed to cache default profile picture for initials", slog.String("initials", user.Initials()), slog.Any("error", errInternal))
|
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
return io.NopCloser(bytes.NewReader(defaultPictureBytes)), int64(defaultPicture.Len()), nil
|
return io.NopCloser(bytes.NewReader(defaultPictureBytes)), int64(len(defaultPictureBytes)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *UserService) GetUserGroups(ctx context.Context, userID string) ([]model.UserGroup, error) {
|
func (s *UserService) GetUserGroups(ctx context.Context, userID string) ([]model.UserGroup, error) {
|
||||||
@@ -256,6 +259,7 @@ func (s *UserService) createUserInternal(ctx context.Context, input dto.UserCrea
|
|||||||
Username: input.Username,
|
Username: input.Username,
|
||||||
IsAdmin: input.IsAdmin,
|
IsAdmin: input.IsAdmin,
|
||||||
Locale: input.Locale,
|
Locale: input.Locale,
|
||||||
|
Disabled: input.Disabled,
|
||||||
}
|
}
|
||||||
if input.LdapID != "" {
|
if input.LdapID != "" {
|
||||||
user.LdapID = &input.LdapID
|
user.LdapID = &input.LdapID
|
||||||
|
|||||||
@@ -239,3 +239,17 @@ func IsWritableDir(dir string) (bool, error) {
|
|||||||
|
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// OpenFileWithSize opens a file and returns its size
|
||||||
|
func OpenFileWithSize(path string) (io.ReadCloser, int64, error) {
|
||||||
|
f, err := os.Open(path)
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
info, err := f.Stat()
|
||||||
|
if err != nil {
|
||||||
|
f.Close()
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
return f, info.Size(), nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
-- No-op
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
DROP INDEX IF EXISTS idx_api_keys_key;
|
||||||
|
DROP INDEX IF EXISTS idx_oidc_refresh_tokens_token;
|
||||||
|
DROP INDEX IF EXISTS idx_signup_tokens_token;
|
||||||
|
DROP INDEX IF EXISTS idx_reauthentication_tokens_token;
|
||||||
@@ -155,7 +155,7 @@
|
|||||||
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Jste si jisti, že chcete zrušit klíč API \"{apiKeyName}\"? To naruší všechny integrace pomocí tohoto klíče.",
|
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Jste si jisti, že chcete zrušit klíč API \"{apiKeyName}\"? To naruší všechny integrace pomocí tohoto klíče.",
|
||||||
"last_used": "Naposledy použito",
|
"last_used": "Naposledy použito",
|
||||||
"actions": "Akce",
|
"actions": "Akce",
|
||||||
"images_updated_successfully": "Obrázky úspěšně aktualizovány",
|
"images_updated_successfully": "Obrázky byly úspěšně aktualizovány. Aktualizace může trvat několik minut.",
|
||||||
"general": "Obecné",
|
"general": "Obecné",
|
||||||
"configure_smtp_to_send_emails": "Povolte e-mailová oznámení pro upozornění uživatelů, pokud je zjištěno přihlášení z nového zařízení nebo lokace.",
|
"configure_smtp_to_send_emails": "Povolte e-mailová oznámení pro upozornění uživatelů, pokud je zjištěno přihlášení z nového zařízení nebo lokace.",
|
||||||
"ldap": "LDAP",
|
"ldap": "LDAP",
|
||||||
@@ -456,10 +456,11 @@
|
|||||||
"invalid_url": "Neplatná adresa URL",
|
"invalid_url": "Neplatná adresa URL",
|
||||||
"require_user_email": "Vyžadovat e-mailovou adresu",
|
"require_user_email": "Vyžadovat e-mailovou adresu",
|
||||||
"require_user_email_description": "Vyžaduje, aby uživatelé měli e-mailovou adresu. Pokud je tato možnost deaktivována, uživatelé bez e-mailové adresy nebudou moci používat funkce, které e-mailovou adresu vyžadují.",
|
"require_user_email_description": "Vyžaduje, aby uživatelé měli e-mailovou adresu. Pokud je tato možnost deaktivována, uživatelé bez e-mailové adresy nebudou moci používat funkce, které e-mailovou adresu vyžadují.",
|
||||||
"view": "Zobrazit",
|
"view": "Zobrazení",
|
||||||
"toggle_columns": "Přepínat sloupce",
|
"toggle_columns": "Přepnout sloupce",
|
||||||
"locale": "Místní nastavení",
|
"locale": "Jazyk",
|
||||||
"ldap_id": "LDAP ID",
|
"ldap_id": "LDAP ID",
|
||||||
"reauthentication": "Opětovné ověření",
|
"reauthentication": "Opětovné ověření",
|
||||||
"clear_filters": "Vymazat filtry"
|
"clear_filters": "Vymazat filtry",
|
||||||
|
"default_profile_picture": "Výchozí profilový obrázek"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,7 +155,7 @@
|
|||||||
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Er du sikker på, at du vil tilbagekalde API-nøglen \"{apiKeyName}\"? Dette vil afbryde alle integrationer, der bruger nøglen.",
|
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Er du sikker på, at du vil tilbagekalde API-nøglen \"{apiKeyName}\"? Dette vil afbryde alle integrationer, der bruger nøglen.",
|
||||||
"last_used": "Sidst brugt",
|
"last_used": "Sidst brugt",
|
||||||
"actions": "Handlinger",
|
"actions": "Handlinger",
|
||||||
"images_updated_successfully": "Billeder blev opdateret",
|
"images_updated_successfully": "Billeder opdateret. Det kan tage et par minutter at opdatere.",
|
||||||
"general": "Generelt",
|
"general": "Generelt",
|
||||||
"configure_smtp_to_send_emails": "Aktivér e-mailnotifikationer for at advare brugere, når et login registreres fra en ny enhed eller placering.",
|
"configure_smtp_to_send_emails": "Aktivér e-mailnotifikationer for at advare brugere, når et login registreres fra en ny enhed eller placering.",
|
||||||
"ldap": "LDAP",
|
"ldap": "LDAP",
|
||||||
@@ -461,5 +461,6 @@
|
|||||||
"locale": "Lokale",
|
"locale": "Lokale",
|
||||||
"ldap_id": "LDAP-id",
|
"ldap_id": "LDAP-id",
|
||||||
"reauthentication": "Genbekræftelse",
|
"reauthentication": "Genbekræftelse",
|
||||||
"clear_filters": "Ryd filtre"
|
"clear_filters": "Ryd filtre",
|
||||||
|
"default_profile_picture": "Standardprofilbillede"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,7 +155,7 @@
|
|||||||
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Bist du sicher, dass du den API-Schlüssel \"{apiKeyName}\" widerrufen willst? Das wird jegliche Integrationen, die diesen Schlüssel verwenden, brechen.",
|
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Bist du sicher, dass du den API-Schlüssel \"{apiKeyName}\" widerrufen willst? Das wird jegliche Integrationen, die diesen Schlüssel verwenden, brechen.",
|
||||||
"last_used": "Letzte Verwendung",
|
"last_used": "Letzte Verwendung",
|
||||||
"actions": "Aktionen",
|
"actions": "Aktionen",
|
||||||
"images_updated_successfully": "Bild erfolgreich aktualisiert",
|
"images_updated_successfully": "Bilder erfolgreich aktualisiert. Die Aktualisierung kann ein paar Minuten dauern.",
|
||||||
"general": "Allgemein",
|
"general": "Allgemein",
|
||||||
"configure_smtp_to_send_emails": "Aktiviere E-Mail Benachrichtigungen, um Benutzer zu informieren, wenn ein Login von einem neuen Gerät oder Standort erkannt wird.",
|
"configure_smtp_to_send_emails": "Aktiviere E-Mail Benachrichtigungen, um Benutzer zu informieren, wenn ein Login von einem neuen Gerät oder Standort erkannt wird.",
|
||||||
"ldap": "LDAP",
|
"ldap": "LDAP",
|
||||||
@@ -461,5 +461,6 @@
|
|||||||
"locale": "Ort",
|
"locale": "Ort",
|
||||||
"ldap_id": "LDAP-ID",
|
"ldap_id": "LDAP-ID",
|
||||||
"reauthentication": "Erneute Authentifizierung",
|
"reauthentication": "Erneute Authentifizierung",
|
||||||
"clear_filters": "Filter löschen"
|
"clear_filters": "Filter löschen",
|
||||||
|
"default_profile_picture": "Standard-Profilbild"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,7 +155,7 @@
|
|||||||
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Are you sure you want to revoke the API key \"{apiKeyName}\"? This will break any integrations using this key.",
|
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Are you sure you want to revoke the API key \"{apiKeyName}\"? This will break any integrations using this key.",
|
||||||
"last_used": "Last Used",
|
"last_used": "Last Used",
|
||||||
"actions": "Actions",
|
"actions": "Actions",
|
||||||
"images_updated_successfully": "Images updated successfully",
|
"images_updated_successfully": "Images updated successfully. It may take a few minutes to update.",
|
||||||
"general": "General",
|
"general": "General",
|
||||||
"configure_smtp_to_send_emails": "Enable email notifications to alert users when a login is detected from a new device or location.",
|
"configure_smtp_to_send_emails": "Enable email notifications to alert users when a login is detected from a new device or location.",
|
||||||
"ldap": "LDAP",
|
"ldap": "LDAP",
|
||||||
@@ -459,7 +459,8 @@
|
|||||||
"view": "View",
|
"view": "View",
|
||||||
"toggle_columns": "Toggle columns",
|
"toggle_columns": "Toggle columns",
|
||||||
"locale": "Locale",
|
"locale": "Locale",
|
||||||
"ldap_id" : "LDAP ID",
|
"ldap_id": "LDAP ID",
|
||||||
"reauthentication": "Re-authentication",
|
"reauthentication": "Re-authentication",
|
||||||
"clear_filters" : "Clear Filters"
|
"clear_filters": "Clear Filters",
|
||||||
|
"default_profile_picture": "Default Profile Picture"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,7 +155,7 @@
|
|||||||
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "¿Estás seguro de que deseas invalidar la API Key \"{apiKeyName}\"? Esto romperá cualquier integración que esté usando esta clave.",
|
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "¿Estás seguro de que deseas invalidar la API Key \"{apiKeyName}\"? Esto romperá cualquier integración que esté usando esta clave.",
|
||||||
"last_used": "Utilizado por última vez",
|
"last_used": "Utilizado por última vez",
|
||||||
"actions": "Acciones",
|
"actions": "Acciones",
|
||||||
"images_updated_successfully": "Imágenes actualizadas correctamente",
|
"images_updated_successfully": "Imágenes actualizadas correctamente. La actualización puede tardar unos minutos.",
|
||||||
"general": "General",
|
"general": "General",
|
||||||
"configure_smtp_to_send_emails": "Habilita las notificaciones por correo electrónico para alertar a los usuarios cuando se detecta un inicio de sesión desde un nuevo dispositivo o ubicación.",
|
"configure_smtp_to_send_emails": "Habilita las notificaciones por correo electrónico para alertar a los usuarios cuando se detecta un inicio de sesión desde un nuevo dispositivo o ubicación.",
|
||||||
"ldap": "LDAP",
|
"ldap": "LDAP",
|
||||||
@@ -461,5 +461,6 @@
|
|||||||
"locale": "Configuración regional",
|
"locale": "Configuración regional",
|
||||||
"ldap_id": "Identificador LDAP",
|
"ldap_id": "Identificador LDAP",
|
||||||
"reauthentication": "Reautenticación",
|
"reauthentication": "Reautenticación",
|
||||||
"clear_filters": "Borrar filtros"
|
"clear_filters": "Borrar filtros",
|
||||||
|
"default_profile_picture": "Imagen de perfil predeterminada"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,14 +17,14 @@
|
|||||||
"image_should_be_in_format": "L'image doit être au format PNG ou JPEG.",
|
"image_should_be_in_format": "L'image doit être au format PNG ou JPEG.",
|
||||||
"items_per_page": "Éléments par page",
|
"items_per_page": "Éléments par page",
|
||||||
"no_items_found": "Aucune donnée trouvée",
|
"no_items_found": "Aucune donnée trouvée",
|
||||||
"select_items": "Choisis des trucs...",
|
"select_items": "Sélectionner des éléments...",
|
||||||
"search": "Rechercher...",
|
"search": "Rechercher...",
|
||||||
"expand_card": "Carte d'expansion",
|
"expand_card": "Développer la carte",
|
||||||
"copied": "Copié",
|
"copied": "Copié",
|
||||||
"click_to_copy": "Cliquer pour copier",
|
"click_to_copy": "Cliquer pour copier",
|
||||||
"something_went_wrong": "Quelque chose n'a pas fonctionné",
|
"something_went_wrong": "Quelque chose n'a pas fonctionné",
|
||||||
"go_back_to_home": "Retourner à l'accueil",
|
"go_back_to_home": "Retourner à l'accueil",
|
||||||
"alternative_sign_in_methods": "Autres façons de se connecter",
|
"alternative_sign_in_methods": "Méthodes de connexion alternatives",
|
||||||
"login_background": "Arrière-plan de connexion",
|
"login_background": "Arrière-plan de connexion",
|
||||||
"logo": "Logo",
|
"logo": "Logo",
|
||||||
"login_code": "Code de connexion",
|
"login_code": "Code de connexion",
|
||||||
@@ -75,10 +75,10 @@
|
|||||||
"use_your_passkey_instead": "Utiliser votre clé d'accès à la place ?",
|
"use_your_passkey_instead": "Utiliser votre clé d'accès à la place ?",
|
||||||
"email_login": "Connexion par e-mail",
|
"email_login": "Connexion par e-mail",
|
||||||
"enter_a_login_code_to_sign_in": "Entrez un code de connexion pour vous connecter.",
|
"enter_a_login_code_to_sign_in": "Entrez un code de connexion pour vous connecter.",
|
||||||
"sign_in_with_login_code": "Connecte-toi avec ton code d'accès",
|
"sign_in_with_login_code": "Connectez-vous avec votre code d'accès",
|
||||||
"request_a_login_code_via_email": "Demander un code de connexion par e-mail.",
|
"request_a_login_code_via_email": "Demander un code de connexion par e-mail.",
|
||||||
"go_back": "Retour",
|
"go_back": "Retour",
|
||||||
"an_email_has_been_sent_to_the_provided_email_if_it_exists_in_the_system": "Un e-mail a été envoyé à l'e-mail mentionné, si elle existe dans le système.",
|
"an_email_has_been_sent_to_the_provided_email_if_it_exists_in_the_system": "Un e-mail a été envoyé à l'adresse mentionnée, si celle-ci existe dans le système.",
|
||||||
"enter_code": "Entrez le code",
|
"enter_code": "Entrez le code",
|
||||||
"enter_your_email_address_to_receive_an_email_with_a_login_code": "Entrez votre adresse e-mail pour recevoir un email avec un code de connexion.",
|
"enter_your_email_address_to_receive_an_email_with_a_login_code": "Entrez votre adresse e-mail pour recevoir un email avec un code de connexion.",
|
||||||
"your_email": "Votre email",
|
"your_email": "Votre email",
|
||||||
@@ -90,10 +90,10 @@
|
|||||||
"users": "Utilisateurs",
|
"users": "Utilisateurs",
|
||||||
"user_groups": "Groupes d’utilisateurs",
|
"user_groups": "Groupes d’utilisateurs",
|
||||||
"oidc_clients": "Clients OIDC",
|
"oidc_clients": "Clients OIDC",
|
||||||
"api_keys": "Clés API",
|
"api_keys": "Clés d'API",
|
||||||
"application_configuration": "Configuration de l’application",
|
"application_configuration": "Configuration de l’application",
|
||||||
"settings": "Paramètres",
|
"settings": "Paramètres",
|
||||||
"update_pocket_id": "Mise à jour de Pocket ID",
|
"update_pocket_id": "Mettre à jour Pocket ID",
|
||||||
"powered_by": "Propulsé par",
|
"powered_by": "Propulsé par",
|
||||||
"see_your_account_activities_from_the_last_3_months": "Consultez les activités de votre compte au cours des 3 derniers mois.",
|
"see_your_account_activities_from_the_last_3_months": "Consultez les activités de votre compte au cours des 3 derniers mois.",
|
||||||
"time": "Date et heure",
|
"time": "Date et heure",
|
||||||
@@ -139,7 +139,7 @@
|
|||||||
"add_api_key": "Crée une clé API",
|
"add_api_key": "Crée une clé API",
|
||||||
"manage_api_keys": "Gérer les clés API",
|
"manage_api_keys": "Gérer les clés API",
|
||||||
"api_key_created": "Clé API créée",
|
"api_key_created": "Clé API créée",
|
||||||
"for_security_reasons_this_key_will_only_be_shown_once": "Pour des raisons de sécurité, cette clé ne sera affichée qu'une seule fois. Veuillez la conserver en toute sécurité.",
|
"for_security_reasons_this_key_will_only_be_shown_once": "Pour des raisons de sécurité, cette clé ne sera affichée qu'une seule fois. Veuillez la conserver dans un endroit sûr.",
|
||||||
"description": "Description",
|
"description": "Description",
|
||||||
"api_key": "Clé API",
|
"api_key": "Clé API",
|
||||||
"close": "Fermer",
|
"close": "Fermer",
|
||||||
@@ -155,7 +155,7 @@
|
|||||||
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Êtes-vous sûr de vouloir révoquer la clé API \"{apiKeyName}\" ? Cela va casser toutes les intégrations utilisant cette clé.",
|
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Êtes-vous sûr de vouloir révoquer la clé API \"{apiKeyName}\" ? Cela va casser toutes les intégrations utilisant cette clé.",
|
||||||
"last_used": "Dernière utilisation",
|
"last_used": "Dernière utilisation",
|
||||||
"actions": "Actions",
|
"actions": "Actions",
|
||||||
"images_updated_successfully": "Image mise à jour avec succès",
|
"images_updated_successfully": "Les images ont été mises à jour sans problème. Ça peut prendre quelques minutes pour que tout se mette à jour.",
|
||||||
"general": "Général",
|
"general": "Général",
|
||||||
"configure_smtp_to_send_emails": "Activer les notifications par e-mail pour alerter les utilisateurs lorsqu'une connexion est détectée à partir d'un nouvel appareil ou d'un nouvel emplacement.",
|
"configure_smtp_to_send_emails": "Activer les notifications par e-mail pour alerter les utilisateurs lorsqu'une connexion est détectée à partir d'un nouvel appareil ou d'un nouvel emplacement.",
|
||||||
"ldap": "LDAP",
|
"ldap": "LDAP",
|
||||||
@@ -163,7 +163,7 @@
|
|||||||
"images": "Images",
|
"images": "Images",
|
||||||
"update": "Mise à jour",
|
"update": "Mise à jour",
|
||||||
"email_configuration_updated_successfully": "La configuration du serveur mail à été mise à jour avec succès",
|
"email_configuration_updated_successfully": "La configuration du serveur mail à été mise à jour avec succès",
|
||||||
"save_changes_question": "Enregistrer des changements ?",
|
"save_changes_question": "Enregistrer ces changements ?",
|
||||||
"you_have_to_save_the_changes_before_sending_a_test_email_do_you_want_to_save_now": "Vous devez enregistrer les modifications avant d'envoyer un e-mail de test. Voulez-vous enregistrer maintenant ?",
|
"you_have_to_save_the_changes_before_sending_a_test_email_do_you_want_to_save_now": "Vous devez enregistrer les modifications avant d'envoyer un e-mail de test. Voulez-vous enregistrer maintenant ?",
|
||||||
"save_and_send": "Enregistrer et envoyer",
|
"save_and_send": "Enregistrer et envoyer",
|
||||||
"test_email_sent_successfully": "L'e-mail de test a été envoyé avec succès à votre adresse e-mail.",
|
"test_email_sent_successfully": "L'e-mail de test a été envoyé avec succès à votre adresse e-mail.",
|
||||||
@@ -256,7 +256,7 @@
|
|||||||
"manage_user_groups": "Gérer les groupes d'utilisateurs",
|
"manage_user_groups": "Gérer les groupes d'utilisateurs",
|
||||||
"friendly_name": "Nom d'affichage",
|
"friendly_name": "Nom d'affichage",
|
||||||
"name_that_will_be_displayed_in_the_ui": "Nom qui sera affiché dans l'interface utilisateur",
|
"name_that_will_be_displayed_in_the_ui": "Nom qui sera affiché dans l'interface utilisateur",
|
||||||
"name_that_will_be_in_the_groups_claim": "Nommez ce qui sera dans le \"groupe\" claim",
|
"name_that_will_be_in_the_groups_claim": "Nom qui sera dans la revendication \"groups\"",
|
||||||
"delete_name": "Supprimer {name}",
|
"delete_name": "Supprimer {name}",
|
||||||
"are_you_sure_you_want_to_delete_this_user_group": "Êtes-vous sûr de vouloir supprimer ce groupe d'utilisateurs?",
|
"are_you_sure_you_want_to_delete_this_user_group": "Êtes-vous sûr de vouloir supprimer ce groupe d'utilisateurs?",
|
||||||
"user_group_deleted_successfully": "Groupe d'utilisateurs supprimé avec succès",
|
"user_group_deleted_successfully": "Groupe d'utilisateurs supprimé avec succès",
|
||||||
@@ -272,14 +272,14 @@
|
|||||||
"add_oidc_client": "Ajouter un client OIDC",
|
"add_oidc_client": "Ajouter un client OIDC",
|
||||||
"manage_oidc_clients": "Gérer les clients OIDC",
|
"manage_oidc_clients": "Gérer les clients OIDC",
|
||||||
"one_time_link": "Lien de connexion unique",
|
"one_time_link": "Lien de connexion unique",
|
||||||
"use_this_link_to_sign_in_once": "Utilisez ce lien pour vous connecter. Ceci est nécessaire pour les utilisateurs qui n'ont pas encore ajouté de clé d'accès ou l'ont perdu.",
|
"use_this_link_to_sign_in_once": "Utilisez ce lien pour vous connecter. Ceci est nécessaire pour les utilisateurs qui n'ont pas encore ajouté de clé d'accès ou qui l'ont perdu.",
|
||||||
"add": "Ajouter",
|
"add": "Ajouter",
|
||||||
"callback_urls": "URL de callback",
|
"callback_urls": "URL de callback",
|
||||||
"logout_callback_urls": "URL de callback de déconnexion",
|
"logout_callback_urls": "URL de callback de déconnexion",
|
||||||
"public_client": "Client public",
|
"public_client": "Client public",
|
||||||
"public_clients_description": "Les clients publics n'ont pas de secret client et utilisent PKCE à la place. Activez cette option si votre client est une application SPA ou une application mobile.",
|
"public_clients_description": "Les clients publics n'ont pas de secret client et utilisent PKCE à la place. Activez cette option si votre client est une application SPA ou une application mobile.",
|
||||||
"pkce": "PKCE",
|
"pkce": "PKCE",
|
||||||
"public_key_code_exchange_is_a_security_feature_to_prevent_csrf_and_authorization_code_interception_attacks": "Le Public Key Code Exchange est une fonctionnalité de sécurité conçue pour prévenir les attaques CSRF et l’interception de code d’autorisation.",
|
"public_key_code_exchange_is_a_security_feature_to_prevent_csrf_and_authorization_code_interception_attacks": "Le Public Key Code Exchange est une fonctionnalité de sécurité conçue pour prévenir les attaques CSRF et d’interception de code d’autorisation.",
|
||||||
"requires_reauthentication": "Nécessite une nouvelle authentification",
|
"requires_reauthentication": "Nécessite une nouvelle authentification",
|
||||||
"requires_users_to_authenticate_again_on_each_authorization": "Demande aux utilisateurs de se connecter à nouveau à chaque autorisation, même s'ils sont déjà connectés.",
|
"requires_users_to_authenticate_again_on_each_authorization": "Demande aux utilisateurs de se connecter à nouveau à chaque autorisation, même s'ils sont déjà connectés.",
|
||||||
"name_logo": "Logo {name}",
|
"name_logo": "Logo {name}",
|
||||||
@@ -318,7 +318,7 @@
|
|||||||
"reset": "Réinitialiser",
|
"reset": "Réinitialiser",
|
||||||
"reset_to_default": "Valeurs par défaut",
|
"reset_to_default": "Valeurs par défaut",
|
||||||
"profile_picture_has_been_reset": "La photo de profil a été réinitialisée. La mise à jour peut prendre quelques minutes.",
|
"profile_picture_has_been_reset": "La photo de profil a été réinitialisée. La mise à jour peut prendre quelques minutes.",
|
||||||
"select_the_language_you_want_to_use": "Choisis la langue que tu veux utiliser. Attention, certains textes peuvent être traduits automatiquement et ne pas être tout à fait exacts.",
|
"select_the_language_you_want_to_use": "Choisissez la langue que vous souhaitez utiliser. Attention, certains textes peuvent être traduits automatiquement et ne pas être tout à fait exacts.",
|
||||||
"contribute_to_translation": "Si vous trouvez un problème, n'hésitez pas à contribuer à la traduction sur <link href='https://crowdin.com/project/pocket-id'>Crowdin</link>.",
|
"contribute_to_translation": "Si vous trouvez un problème, n'hésitez pas à contribuer à la traduction sur <link href='https://crowdin.com/project/pocket-id'>Crowdin</link>.",
|
||||||
"personal": "Personnel",
|
"personal": "Personnel",
|
||||||
"global": "Global",
|
"global": "Global",
|
||||||
@@ -348,7 +348,7 @@
|
|||||||
"callback_url_description": "URL(s) fournies par votre client. Sera automatiquement ajoutée si laissée vide. Les jokers (*) sont supportés, mais il est préférable de les éviter pour plus de sécurité.",
|
"callback_url_description": "URL(s) fournies par votre client. Sera automatiquement ajoutée si laissée vide. Les jokers (*) sont supportés, mais il est préférable de les éviter pour plus de sécurité.",
|
||||||
"logout_callback_url_description": "URL(s) fournies par votre client pour la déconnexion. Les jokers (*) sont supportés, mais il est préférable de les éviter pour plus de sécurité.",
|
"logout_callback_url_description": "URL(s) fournies par votre client pour la déconnexion. Les jokers (*) sont supportés, mais il est préférable de les éviter pour plus de sécurité.",
|
||||||
"api_key_expiration": "Expiration de la clé API",
|
"api_key_expiration": "Expiration de la clé API",
|
||||||
"send_an_email_to_the_user_when_their_api_key_is_about_to_expire": "Envoyer un email à l'utilisateur lorsque sa clé API est sur le point d'expirer.",
|
"send_an_email_to_the_user_when_their_api_key_is_about_to_expire": "Envoyer un email à l'utilisateur lorsque sa clé d'API est sur le point d'expirer.",
|
||||||
"authorize_device": "Autoriser l'appareil",
|
"authorize_device": "Autoriser l'appareil",
|
||||||
"the_device_has_been_authorized": "L'appareil a été autorisé.",
|
"the_device_has_been_authorized": "L'appareil a été autorisé.",
|
||||||
"enter_code_displayed_in_previous_step": "Entrez le code affiché à l'étape précédente.",
|
"enter_code_displayed_in_previous_step": "Entrez le code affiché à l'étape précédente.",
|
||||||
@@ -382,7 +382,7 @@
|
|||||||
"select_an_accent_color_to_customize_the_appearance_of_pocket_id": "Sélectionnez une couleur d'accent pour personnaliser l'apparence de Pocket ID.",
|
"select_an_accent_color_to_customize_the_appearance_of_pocket_id": "Sélectionnez une couleur d'accent pour personnaliser l'apparence de Pocket ID.",
|
||||||
"accent_color": "Couleur d'accent",
|
"accent_color": "Couleur d'accent",
|
||||||
"custom_accent_color": "Couleur d'accent personnalisée",
|
"custom_accent_color": "Couleur d'accent personnalisée",
|
||||||
"custom_accent_color_description": "Entrez une couleur personnalisée en utilisant un format CSS valide (par ex. hex, rgb, hsl).",
|
"custom_accent_color_description": "Entrez une couleur personnalisée en utilisant un format CSS valide (ex. : hex, rgb, hsl).",
|
||||||
"color_value": "Valeur de la couleur",
|
"color_value": "Valeur de la couleur",
|
||||||
"apply": "Appliquer",
|
"apply": "Appliquer",
|
||||||
"signup_token": "Jeton d'inscription",
|
"signup_token": "Jeton d'inscription",
|
||||||
@@ -429,19 +429,19 @@
|
|||||||
"signup_open": "Inscription ouverte",
|
"signup_open": "Inscription ouverte",
|
||||||
"signup_open_description": "Toute personne peut créer un nouveau compte sans restriction.",
|
"signup_open_description": "Toute personne peut créer un nouveau compte sans restriction.",
|
||||||
"of": "sur",
|
"of": "sur",
|
||||||
"skip_passkey_setup": "Ignorer la configuration de la clé d'accès",
|
"skip_passkey_setup": "Ignorer la configuration d'une clé d'accès",
|
||||||
"skip_passkey_setup_description": "Il est fortement recommandé de configurer une clé d'accès, car sans elle, vous serez verrouillé hors de votre compte dès l'expiration de la session.",
|
"skip_passkey_setup_description": "Il est fortement recommandé de configurer une clé d'accès, car sans elle, vous serez verrouillé hors de votre compte dès l'expiration de la session.",
|
||||||
"my_apps": "Mes applications",
|
"my_apps": "Mes applications",
|
||||||
"no_apps_available": "Aucune appli disponible",
|
"no_apps_available": "Aucune app disponible",
|
||||||
"contact_your_administrator_for_app_access": "Contacte ton administrateur pour avoir accès aux applications.",
|
"contact_your_administrator_for_app_access": "Contactez votre administrateur pour avoir accès aux applications.",
|
||||||
"launch": "Lancement",
|
"launch": "Lancement",
|
||||||
"client_launch_url": "URL de lancement du client",
|
"client_launch_url": "URL de lancement du client",
|
||||||
"client_launch_url_description": "L'URL qui s'ouvrira quand quelqu'un lancera l'appli depuis la page Mes applis.",
|
"client_launch_url_description": "L'URL qui s'ouvrira quand quelqu'un lancera l'appli depuis la page Mes applis.",
|
||||||
"client_name_description": "Le nom du client qui apparaît dans l'interface utilisateur Pocket ID.",
|
"client_name_description": "Le nom du client qui apparaît dans l'interface utilisateur Pocket ID.",
|
||||||
"revoke_access": "Supprimer l'accès",
|
"revoke_access": "Supprimer l'accès",
|
||||||
"revoke_access_description": "Supprimer l'accès à <b>{clientName}</b>. <b>{clientName}</b> ne pourra plus accéder aux infos de ton compte.",
|
"revoke_access_description": "Supprimer l'accès à <b>{clientName}</b>. <b>{clientName}</b> ne pourra plus accéder aux infos de votre compte.",
|
||||||
"revoke_access_successful": "L'accès à {clientName} a été supprimé.",
|
"revoke_access_successful": "L'accès à {clientName} a été supprimé.",
|
||||||
"last_signed_in_ago": "Dernière connexion il y a {time} il y a",
|
"last_signed_in_ago": "Dernière connexion il y a {time}",
|
||||||
"invalid_client_id": "L'ID client ne peut contenir que des lettres, des chiffres, des traits de soulignement et des tirets.",
|
"invalid_client_id": "L'ID client ne peut contenir que des lettres, des chiffres, des traits de soulignement et des tirets.",
|
||||||
"custom_client_id_description": "Définissez un identifiant client personnalisé si votre application l'exige. Sinon, laissez ce champ vide pour qu'un identifiant aléatoire soit généré.",
|
"custom_client_id_description": "Définissez un identifiant client personnalisé si votre application l'exige. Sinon, laissez ce champ vide pour qu'un identifiant aléatoire soit généré.",
|
||||||
"generated": "Généré",
|
"generated": "Généré",
|
||||||
@@ -452,14 +452,15 @@
|
|||||||
"configure_application_images": "Configurer les images d'application",
|
"configure_application_images": "Configurer les images d'application",
|
||||||
"ui_config_disabled_info_title": "Configuration de l'interface utilisateur désactivée",
|
"ui_config_disabled_info_title": "Configuration de l'interface utilisateur désactivée",
|
||||||
"ui_config_disabled_info_description": "La configuration de l'interface utilisateur est désactivée parce que les paramètres de configuration de l'application sont gérés par des variables d'environnement. Certains paramètres peuvent ne pas être modifiables.",
|
"ui_config_disabled_info_description": "La configuration de l'interface utilisateur est désactivée parce que les paramètres de configuration de l'application sont gérés par des variables d'environnement. Certains paramètres peuvent ne pas être modifiables.",
|
||||||
"logo_from_url_description": "Colle une URL d'image directe (svg, png, webp). Trouve des icônes sur <link href=\"https://selfh.st/icons\">Selfh.st Icons</link> ou <link href=\"https://dashboardicons.com\">Dashboard Icons</link>.",
|
"logo_from_url_description": "Collez une URL pointant une image (svg, png, webp). Trouvez des icônes sur <link href=\"https://selfh.st/icons\">Selfh.st Icons</link> ou <link href=\"https://dashboardicons.com\">Dashboard Icons</link>.",
|
||||||
"invalid_url": "URL pas valide",
|
"invalid_url": "URL invalide",
|
||||||
"require_user_email": "Besoin d'une adresse e-mail",
|
"require_user_email": "Adresse e-mail requise",
|
||||||
"require_user_email_description": "Les utilisateurs doivent avoir une adresse e-mail. Si cette option est désactivée, ceux qui n'ont pas d'adresse e-mail ne pourront pas utiliser les fonctionnalités qui en ont besoin.",
|
"require_user_email_description": "Les utilisateurs doivent avoir une adresse e-mail. Si cette option est désactivée, ceux qui n'ont pas d'adresse e-mail ne pourront pas utiliser les fonctionnalités nécessitant un e-mail.",
|
||||||
"view": "Voir",
|
"view": "Voir",
|
||||||
"toggle_columns": "Basculer les colonnes",
|
"toggle_columns": "Basculer les colonnes",
|
||||||
"locale": "Paramètres régionaux",
|
"locale": "Paramètres régionaux",
|
||||||
"ldap_id": "ID LDAP",
|
"ldap_id": "ID LDAP",
|
||||||
"reauthentication": "Réauthentification",
|
"reauthentication": "Réauthentification",
|
||||||
"clear_filters": "Effacer les filtres"
|
"clear_filters": "Effacer les filtres",
|
||||||
|
"default_profile_picture": "Photo de profil par défaut"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,7 +155,7 @@
|
|||||||
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Sei sicuro di voler revocare la chiave API \"{apiKeyName}\"? Questo comprometterà qualsiasi integrazione che utilizza questa chiave.",
|
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Sei sicuro di voler revocare la chiave API \"{apiKeyName}\"? Questo comprometterà qualsiasi integrazione che utilizza questa chiave.",
|
||||||
"last_used": "Ultimo utilizzo",
|
"last_used": "Ultimo utilizzo",
|
||||||
"actions": "Azioni",
|
"actions": "Azioni",
|
||||||
"images_updated_successfully": "Immagini aggiornate con successo",
|
"images_updated_successfully": "Immagini aggiornate senza problemi. Potrebbe volerci qualche minuto per l'aggiornamento.",
|
||||||
"general": "Generale",
|
"general": "Generale",
|
||||||
"configure_smtp_to_send_emails": "Abilita le notifiche email per avvisare gli utenti quando viene rilevato un accesso da un nuovo dispositivo o posizione.",
|
"configure_smtp_to_send_emails": "Abilita le notifiche email per avvisare gli utenti quando viene rilevato un accesso da un nuovo dispositivo o posizione.",
|
||||||
"ldap": "LDAP",
|
"ldap": "LDAP",
|
||||||
@@ -461,5 +461,6 @@
|
|||||||
"locale": "Locale",
|
"locale": "Locale",
|
||||||
"ldap_id": "ID LDAP",
|
"ldap_id": "ID LDAP",
|
||||||
"reauthentication": "Riautenticazione",
|
"reauthentication": "Riautenticazione",
|
||||||
"clear_filters": "Cancella filtri"
|
"clear_filters": "Cancella filtri",
|
||||||
|
"default_profile_picture": "Immagine del profilo predefinita"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,7 +155,7 @@
|
|||||||
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "APIキー \"{apiKeyName}\" を本当に削除しますか?このAPI キーを使用しているすべての連携が停止します。",
|
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "APIキー \"{apiKeyName}\" を本当に削除しますか?このAPI キーを使用しているすべての連携が停止します。",
|
||||||
"last_used": "最終使用日",
|
"last_used": "最終使用日",
|
||||||
"actions": "Actions",
|
"actions": "Actions",
|
||||||
"images_updated_successfully": "画像が正常に更新されました",
|
"images_updated_successfully": "画像の更新が正常に完了しました。更新には数分かかる場合があります。",
|
||||||
"general": "一般",
|
"general": "一般",
|
||||||
"configure_smtp_to_send_emails": "新しいデバイスや場所からのログインが検出された際にユーザーに警告するメール通知を有効にします。",
|
"configure_smtp_to_send_emails": "新しいデバイスや場所からのログインが検出された際にユーザーに警告するメール通知を有効にします。",
|
||||||
"ldap": "LDAP",
|
"ldap": "LDAP",
|
||||||
@@ -461,5 +461,6 @@
|
|||||||
"locale": "ロケール",
|
"locale": "ロケール",
|
||||||
"ldap_id": "LDAP ID",
|
"ldap_id": "LDAP ID",
|
||||||
"reauthentication": "再認証",
|
"reauthentication": "再認証",
|
||||||
"clear_filters": "フィルターをクリア"
|
"clear_filters": "フィルターをクリア",
|
||||||
|
"default_profile_picture": "デフォルトのプロフィール画像"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -103,8 +103,8 @@
|
|||||||
"device": "기기",
|
"device": "기기",
|
||||||
"client": "클라이언트",
|
"client": "클라이언트",
|
||||||
"unknown": "알 수 없음",
|
"unknown": "알 수 없음",
|
||||||
"account_details_updated_successfully": "계정 세부 사항이 성공적으로 업데이트되었습니다",
|
"account_details_updated_successfully": "계정 정보가 성공적으로 변경되었습니다",
|
||||||
"profile_picture_updated_successfully": "프로필 사진이 성공적으로 업데이트되었습니다. 업데이트 적용까지 몇 분 정도 걸릴 수 있습니다.",
|
"profile_picture_updated_successfully": "프로필 사진이 성공적으로 변경되었습니다. 변경 적용까지 몇 분 정도 걸릴 수 있습니다.",
|
||||||
"account_settings": "계정 설정",
|
"account_settings": "계정 설정",
|
||||||
"passkey_missing": "패스키가 없습니다",
|
"passkey_missing": "패스키가 없습니다",
|
||||||
"please_provide_a_passkey_to_prevent_losing_access_to_your_account": "계정 접근 권한을 잃지 않기 위해 패스키를 추가해주세요.",
|
"please_provide_a_passkey_to_prevent_losing_access_to_your_account": "계정 접근 권한을 잃지 않기 위해 패스키를 추가해주세요.",
|
||||||
@@ -131,11 +131,11 @@
|
|||||||
"are_you_sure_you_want_to_delete_this_passkey": "이 패스키를 삭제하시겠습니까?",
|
"are_you_sure_you_want_to_delete_this_passkey": "이 패스키를 삭제하시겠습니까?",
|
||||||
"passkey_deleted_successfully": "패스키가 성공적으로 삭제되었습니다",
|
"passkey_deleted_successfully": "패스키가 성공적으로 삭제되었습니다",
|
||||||
"delete_passkey_name": "{passkeyName} 삭제",
|
"delete_passkey_name": "{passkeyName} 삭제",
|
||||||
"passkey_name_updated_successfully": "패스키 이름이 성공적으로 업데이트되었습니다",
|
"passkey_name_updated_successfully": "패스키 이름이 성공적으로 변경되었습니다",
|
||||||
"name_passkey": "패스키 이름",
|
"name_passkey": "패스키 이름",
|
||||||
"name_your_passkey_to_easily_identify_it_later": "패스키의 이름을 지정하여 나중에 쉽게 구분할 수 있도록 합니다.",
|
"name_your_passkey_to_easily_identify_it_later": "패스키의 이름을 지정하여 나중에 쉽게 구분할 수 있도록 합니다.",
|
||||||
"create_api_key": "API 키 생성",
|
"create_api_key": "API 키 생성",
|
||||||
"add_a_new_api_key_for_programmatic_access": "<link href='https://pocket-id.org/docs/api'>Pocket ID API에</link> 대한 프로그래매틱 액세스를 위해 새 API 키를 추가하세요.",
|
"add_a_new_api_key_for_programmatic_access": "<link href='https://pocket-id.org/docs/api'>Pocket ID API에</link> 대한 프로그램 접근을 위해 새 API 키를 추가하세요.",
|
||||||
"add_api_key": "API 키 추가",
|
"add_api_key": "API 키 추가",
|
||||||
"manage_api_keys": "API 키 관리",
|
"manage_api_keys": "API 키 관리",
|
||||||
"api_key_created": "API 키 생성됨",
|
"api_key_created": "API 키 생성됨",
|
||||||
@@ -155,14 +155,14 @@
|
|||||||
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "API 키 \"{apiKeyName}\"를 정말로 취소하시겠습니까? 이 키를 사용하는 모든 통합이 작동하지 않습니다.",
|
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "API 키 \"{apiKeyName}\"를 정말로 취소하시겠습니까? 이 키를 사용하는 모든 통합이 작동하지 않습니다.",
|
||||||
"last_used": "마지막 사용",
|
"last_used": "마지막 사용",
|
||||||
"actions": "동작",
|
"actions": "동작",
|
||||||
"images_updated_successfully": "이미지가 성공적으로 업데이트되었습니다",
|
"images_updated_successfully": "이미지가 성공적으로 변경되었습니다. 변경에는 몇 분 정도 소요될 수 있습니다.",
|
||||||
"general": "일반",
|
"general": "일반",
|
||||||
"configure_smtp_to_send_emails": "새로운 기기나 위치에서 로그인 감지 시 이메일 알림을 활성화합니다.",
|
"configure_smtp_to_send_emails": "새로운 기기나 위치에서 로그인 감지 시 이메일 알림을 활성화합니다.",
|
||||||
"ldap": "LDAP",
|
"ldap": "LDAP",
|
||||||
"configure_ldap_settings_to_sync_users_and_groups_from_an_ldap_server": "LDAP 서버에서 사용자와 그룹을 동기화하기 위해 LDAP을 구성합니다.",
|
"configure_ldap_settings_to_sync_users_and_groups_from_an_ldap_server": "LDAP 서버에서 사용자와 그룹을 동기화하기 위해 LDAP을 구성합니다.",
|
||||||
"images": "이미지",
|
"images": "이미지",
|
||||||
"update": "업데이트",
|
"update": "업데이트",
|
||||||
"email_configuration_updated_successfully": "이메일 설정이 성공적으로 업데이트되었습니다",
|
"email_configuration_updated_successfully": "이메일 구성이 성공적으로 변경되었습니다",
|
||||||
"save_changes_question": "변경 내용을 저장하시겠습니까?",
|
"save_changes_question": "변경 내용을 저장하시겠습니까?",
|
||||||
"you_have_to_save_the_changes_before_sending_a_test_email_do_you_want_to_save_now": "테스트 이메일을 전송하기 전에 변경 내용을 저장해야 합니다. 지금 저장하시겠습니까?",
|
"you_have_to_save_the_changes_before_sending_a_test_email_do_you_want_to_save_now": "테스트 이메일을 전송하기 전에 변경 내용을 저장해야 합니다. 지금 저장하시겠습니까?",
|
||||||
"save_and_send": "저장하고 전송하기",
|
"save_and_send": "저장하고 전송하기",
|
||||||
@@ -186,7 +186,7 @@
|
|||||||
"email_login_code_from_admin": "관리자 로그인 코드 전송",
|
"email_login_code_from_admin": "관리자 로그인 코드 전송",
|
||||||
"allows_an_admin_to_send_a_login_code_to_the_user": "관리자가 사용자에게 로그인 코드를 전송할 수 있게 합니다.",
|
"allows_an_admin_to_send_a_login_code_to_the_user": "관리자가 사용자에게 로그인 코드를 전송할 수 있게 합니다.",
|
||||||
"send_test_email": "테스트 이메일 보내기",
|
"send_test_email": "테스트 이메일 보내기",
|
||||||
"application_configuration_updated_successfully": "애플리케이션 구성이 성공적으로 업데이트되었습니다",
|
"application_configuration_updated_successfully": "애플리케이션 구성이 성공적으로 변경되었습니다",
|
||||||
"application_name": "애플리케이션 이름",
|
"application_name": "애플리케이션 이름",
|
||||||
"session_duration": "세션 기간",
|
"session_duration": "세션 기간",
|
||||||
"the_duration_of_a_session_in_minutes_before_the_user_has_to_sign_in_again": "사용자가 다시 로그인하기 전 세션의 시간(분)입니다.",
|
"the_duration_of_a_session_in_minutes_before_the_user_has_to_sign_in_again": "사용자가 다시 로그인하기 전 세션의 시간(분)입니다.",
|
||||||
@@ -194,7 +194,7 @@
|
|||||||
"whether_the_users_should_be_able_to_edit_their_own_account_details": "사용자가 자신의 계정 정보를 편집할 수 있습니다.",
|
"whether_the_users_should_be_able_to_edit_their_own_account_details": "사용자가 자신의 계정 정보를 편집할 수 있습니다.",
|
||||||
"emails_verified": "이메일 인증됨",
|
"emails_verified": "이메일 인증됨",
|
||||||
"whether_the_users_email_should_be_marked_as_verified_for_the_oidc_clients": "OIDC 클라이언트에게 사용자의 이메일이 인증된 것으로 표시합니다.",
|
"whether_the_users_email_should_be_marked_as_verified_for_the_oidc_clients": "OIDC 클라이언트에게 사용자의 이메일이 인증된 것으로 표시합니다.",
|
||||||
"ldap_configuration_updated_successfully": "LDAP 구성이 성공적으로 업데이트되었습니다",
|
"ldap_configuration_updated_successfully": "LDAP 구성이 성공적으로 변경되었습니다",
|
||||||
"ldap_disabled_successfully": "LDAP가 성공적으로 비활성화되었습니다",
|
"ldap_disabled_successfully": "LDAP가 성공적으로 비활성화되었습니다",
|
||||||
"ldap_sync_finished": "LDAP 동기화 완료",
|
"ldap_sync_finished": "LDAP 동기화 완료",
|
||||||
"client_configuration": "클라이언트 구성",
|
"client_configuration": "클라이언트 구성",
|
||||||
@@ -301,7 +301,7 @@
|
|||||||
"are_you_sure_you_want_to_create_a_new_client_secret": "새로운 클라이언트 시크릿 생성하시겠습니까? 기존 클라이언트 시크릿은 무효화됩니다.",
|
"are_you_sure_you_want_to_create_a_new_client_secret": "새로운 클라이언트 시크릿 생성하시겠습니까? 기존 클라이언트 시크릿은 무효화됩니다.",
|
||||||
"generate": "생성",
|
"generate": "생성",
|
||||||
"new_client_secret_created_successfully": "새로운 클라이언트 시크릿이 성공적으로 생성되었습니다",
|
"new_client_secret_created_successfully": "새로운 클라이언트 시크릿이 성공적으로 생성되었습니다",
|
||||||
"allowed_user_groups_updated_successfully": "허용된 사용자 그룹이 성공적으로 업데이트되었습니다",
|
"allowed_user_groups_updated_successfully": "허용된 사용자 그룹이 성공적으로 변경되었습니다",
|
||||||
"oidc_client_name": "OIDC 클라이언트 {name}",
|
"oidc_client_name": "OIDC 클라이언트 {name}",
|
||||||
"client_id": "클라이언트 ID",
|
"client_id": "클라이언트 ID",
|
||||||
"client_secret": "클라이언트 시크릿",
|
"client_secret": "클라이언트 시크릿",
|
||||||
@@ -395,7 +395,7 @@
|
|||||||
"configure_user_creation": "사용자 생성 설정을 관리합니다. 여기에는 신규 사용자 등록 방법 및 신규 사용자의 기본 권한이 포함됩니다.",
|
"configure_user_creation": "사용자 생성 설정을 관리합니다. 여기에는 신규 사용자 등록 방법 및 신규 사용자의 기본 권한이 포함됩니다.",
|
||||||
"user_creation_groups_description": "새 사용자가 계정을 만들 때 이 그룹을 자동으로 할당합니다.",
|
"user_creation_groups_description": "새 사용자가 계정을 만들 때 이 그룹을 자동으로 할당합니다.",
|
||||||
"user_creation_claims_description": "새 사용자가 계정을 만들 때 이 사용자 정의 클레임을 자동으로 할당합니다.",
|
"user_creation_claims_description": "새 사용자가 계정을 만들 때 이 사용자 정의 클레임을 자동으로 할당합니다.",
|
||||||
"user_creation_updated_successfully": "사용자 생성 설정이 성공적으로 업데이트되었습니다.",
|
"user_creation_updated_successfully": "사용자 생성 설정이 성공적으로 변경되었습니다.",
|
||||||
"signup_disabled_description": "계정 생성이 완전히 비활성화됩니다. 새로운 사용자 계정은 관리자만 생성할 수 있습니다.",
|
"signup_disabled_description": "계정 생성이 완전히 비활성화됩니다. 새로운 사용자 계정은 관리자만 생성할 수 있습니다.",
|
||||||
"signup_requires_valid_token": "계정을 생성하려면 유효한 가입 토큰이 필요합니다",
|
"signup_requires_valid_token": "계정을 생성하려면 유효한 가입 토큰이 필요합니다",
|
||||||
"validating_signup_token": "가입 토큰 검증",
|
"validating_signup_token": "가입 토큰 검증",
|
||||||
@@ -461,5 +461,6 @@
|
|||||||
"locale": "로케일",
|
"locale": "로케일",
|
||||||
"ldap_id": "LDAP ID",
|
"ldap_id": "LDAP ID",
|
||||||
"reauthentication": "재인증",
|
"reauthentication": "재인증",
|
||||||
"clear_filters": "필터 지우기"
|
"clear_filters": "필터 지우기",
|
||||||
|
"default_profile_picture": "기본 프로필 사진"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,7 +155,7 @@
|
|||||||
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Weet je zeker dat je de API-sleutel \"{apiKeyName}\" wilt intrekken? Hiermee worden alle integraties die deze sleutel gebruiken, verbroken.",
|
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Weet je zeker dat je de API-sleutel \"{apiKeyName}\" wilt intrekken? Hiermee worden alle integraties die deze sleutel gebruiken, verbroken.",
|
||||||
"last_used": "Laatst gebruikt",
|
"last_used": "Laatst gebruikt",
|
||||||
"actions": "Acties",
|
"actions": "Acties",
|
||||||
"images_updated_successfully": "Afbeeldingen succesvol bijgewerkt",
|
"images_updated_successfully": "Afbeeldingen zijn bijgewerkt. Het kan even duren voordat alles is bijgewerkt.",
|
||||||
"general": "Algemeen",
|
"general": "Algemeen",
|
||||||
"configure_smtp_to_send_emails": "Zet e-mailmeldingen aan om gebruikers te laten weten als iemand inlogt vanaf een nieuw apparaat of een nieuwe plek.",
|
"configure_smtp_to_send_emails": "Zet e-mailmeldingen aan om gebruikers te laten weten als iemand inlogt vanaf een nieuw apparaat of een nieuwe plek.",
|
||||||
"ldap": "LDAP",
|
"ldap": "LDAP",
|
||||||
@@ -461,5 +461,6 @@
|
|||||||
"locale": "Locatie",
|
"locale": "Locatie",
|
||||||
"ldap_id": "LDAP-ID",
|
"ldap_id": "LDAP-ID",
|
||||||
"reauthentication": "Opnieuw inloggen",
|
"reauthentication": "Opnieuw inloggen",
|
||||||
"clear_filters": "Filters wissen"
|
"clear_filters": "Filters wissen",
|
||||||
|
"default_profile_picture": "Standaard profielfoto"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,7 +155,7 @@
|
|||||||
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Czy na pewno chcesz unieważnić klucz API \"{apiKeyName}\"? To przerwie wszelkie integracje korzystające z tego klucza.",
|
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Czy na pewno chcesz unieważnić klucz API \"{apiKeyName}\"? To przerwie wszelkie integracje korzystające z tego klucza.",
|
||||||
"last_used": "Ostatnio używane",
|
"last_used": "Ostatnio używane",
|
||||||
"actions": "Akcje",
|
"actions": "Akcje",
|
||||||
"images_updated_successfully": "Sukces! Obrazy zostały zaktualizowane.",
|
"images_updated_successfully": "Obrazy zostały pomyślnie zaktualizowane. Aktualizacja może potrwać kilka minut.",
|
||||||
"general": "Ogólne",
|
"general": "Ogólne",
|
||||||
"configure_smtp_to_send_emails": "Włącz powiadomienia e-mail, aby informować użytkowników, gdy logowanie zostanie wykryte z nowego urządzenia lub lokalizacji.",
|
"configure_smtp_to_send_emails": "Włącz powiadomienia e-mail, aby informować użytkowników, gdy logowanie zostanie wykryte z nowego urządzenia lub lokalizacji.",
|
||||||
"ldap": "LDAP",
|
"ldap": "LDAP",
|
||||||
@@ -461,5 +461,6 @@
|
|||||||
"locale": "Ustawienia regionalne",
|
"locale": "Ustawienia regionalne",
|
||||||
"ldap_id": "Identyfikator LDAP",
|
"ldap_id": "Identyfikator LDAP",
|
||||||
"reauthentication": "Ponowne uwierzytelnianie",
|
"reauthentication": "Ponowne uwierzytelnianie",
|
||||||
"clear_filters": "Wyczyść filtry"
|
"clear_filters": "Wyczyść filtry",
|
||||||
|
"default_profile_picture": "Domyślne zdjęcie profilowe"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,7 +155,7 @@
|
|||||||
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Tem certeza que deseja cancelar a chave API “{apiKeyName}”? Isto irá desligar todas as integrações que usam esta chave.",
|
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Tem certeza que deseja cancelar a chave API “{apiKeyName}”? Isto irá desligar todas as integrações que usam esta chave.",
|
||||||
"last_used": "Último uso",
|
"last_used": "Último uso",
|
||||||
"actions": "Ações",
|
"actions": "Ações",
|
||||||
"images_updated_successfully": "Imagens atualizadas com sucesso",
|
"images_updated_successfully": "Imagens atualizadas com sucesso. A atualização pode demorar alguns minutos.",
|
||||||
"general": "Geral",
|
"general": "Geral",
|
||||||
"configure_smtp_to_send_emails": "Ative as notificações por e-mail para avisar os usuários quando um login for detectado em um novo dispositivo ou local.",
|
"configure_smtp_to_send_emails": "Ative as notificações por e-mail para avisar os usuários quando um login for detectado em um novo dispositivo ou local.",
|
||||||
"ldap": "LDAP",
|
"ldap": "LDAP",
|
||||||
@@ -461,5 +461,6 @@
|
|||||||
"locale": "Localização",
|
"locale": "Localização",
|
||||||
"ldap_id": "ID LDAP",
|
"ldap_id": "ID LDAP",
|
||||||
"reauthentication": "Re-autenticação",
|
"reauthentication": "Re-autenticação",
|
||||||
"clear_filters": "Limpar filtros"
|
"clear_filters": "Limpar filtros",
|
||||||
|
"default_profile_picture": "Foto de perfil padrão"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,7 +155,7 @@
|
|||||||
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Вы уверены, что хотите отозвать ключ API \"{apiKeyName}\"? Любые интеграции, использующие этот ключ, перестанут работать.",
|
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Вы уверены, что хотите отозвать ключ API \"{apiKeyName}\"? Любые интеграции, использующие этот ключ, перестанут работать.",
|
||||||
"last_used": "Последнее использование",
|
"last_used": "Последнее использование",
|
||||||
"actions": "Действия",
|
"actions": "Действия",
|
||||||
"images_updated_successfully": "Изображения успешно обновлены",
|
"images_updated_successfully": "Изображения обновились, но может занять пару минут.",
|
||||||
"general": "Общее",
|
"general": "Общее",
|
||||||
"configure_smtp_to_send_emails": "Включить уведомления пользователей по электронной почте при обнаружении логина с нового устройства или локации.",
|
"configure_smtp_to_send_emails": "Включить уведомления пользователей по электронной почте при обнаружении логина с нового устройства или локации.",
|
||||||
"ldap": "LDAP",
|
"ldap": "LDAP",
|
||||||
@@ -461,5 +461,6 @@
|
|||||||
"locale": "Язык",
|
"locale": "Язык",
|
||||||
"ldap_id": "LDAP ID",
|
"ldap_id": "LDAP ID",
|
||||||
"reauthentication": "Повторная аутентификация",
|
"reauthentication": "Повторная аутентификация",
|
||||||
"clear_filters": "Сбросить фильтры"
|
"clear_filters": "Сбросить фильтры",
|
||||||
|
"default_profile_picture": "Изображение профиля по умолчанию"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,7 +155,7 @@
|
|||||||
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Är du säker på att du vill återkalla API-nyckeln ”{apiKeyName}”? Alla integrationer som använder nyckeln slutar att fungera.",
|
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Är du säker på att du vill återkalla API-nyckeln ”{apiKeyName}”? Alla integrationer som använder nyckeln slutar att fungera.",
|
||||||
"last_used": "Senast använd",
|
"last_used": "Senast använd",
|
||||||
"actions": "Åtgärder",
|
"actions": "Åtgärder",
|
||||||
"images_updated_successfully": "Bilderna har uppdaterats",
|
"images_updated_successfully": "Bilderna har uppdaterats. Det kan ta några minuter att uppdatera.",
|
||||||
"general": "Allmänt",
|
"general": "Allmänt",
|
||||||
"configure_smtp_to_send_emails": "Aktivera e-postaviseringar för att varna användare när en inloggning upptäcks från en ny enhet eller plats.",
|
"configure_smtp_to_send_emails": "Aktivera e-postaviseringar för att varna användare när en inloggning upptäcks från en ny enhet eller plats.",
|
||||||
"ldap": "LDAP",
|
"ldap": "LDAP",
|
||||||
@@ -461,5 +461,6 @@
|
|||||||
"locale": "Lokalisering",
|
"locale": "Lokalisering",
|
||||||
"ldap_id": "LDAP-ID",
|
"ldap_id": "LDAP-ID",
|
||||||
"reauthentication": "Omverifiering",
|
"reauthentication": "Omverifiering",
|
||||||
"clear_filters": "Rensa filter"
|
"clear_filters": "Rensa filter",
|
||||||
|
"default_profile_picture": "Standardprofilbild"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,465 +1,466 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://inlang.com/schema/inlang-message-format",
|
"$schema": "https://inlang.com/schema/inlang-message-format",
|
||||||
"my_account": "My Account",
|
"my_account": "Hesabım",
|
||||||
"logout": "Logout",
|
"logout": "Çıkış Yap",
|
||||||
"confirm": "Confirm",
|
"confirm": "Onayla",
|
||||||
"docs": "Docs",
|
"docs": "Belgeler",
|
||||||
"key": "Key",
|
"key": "Anahtar",
|
||||||
"value": "Value",
|
"value": "Değer",
|
||||||
"remove_custom_claim": "Remove custom claim",
|
"remove_custom_claim": "Özel yetkiyi kaldır",
|
||||||
"add_custom_claim": "Add custom claim",
|
"add_custom_claim": "Özel yetki ekle",
|
||||||
"add_another": "Add another",
|
"add_another": "Başka bir tane ekle",
|
||||||
"select_a_date": "Select a date",
|
"select_a_date": "Bir tarih seçin",
|
||||||
"select_file": "Select File",
|
"select_file": "Dosya Seç",
|
||||||
"profile_picture": "Profile Picture",
|
"profile_picture": "Profil resmi",
|
||||||
"profile_picture_is_managed_by_ldap_server": "The profile picture is managed by the LDAP server and cannot be changed here.",
|
"profile_picture_is_managed_by_ldap_server": "Profil resmi LDAP sunucusu tarafından yönetilmektedir ve burada değiştirilemez.",
|
||||||
"click_profile_picture_to_upload_custom": "Click on the profile picture to upload a custom one from your files.",
|
"click_profile_picture_to_upload_custom": "Özel bir resim yüklemek için profil resmine tıklayın.",
|
||||||
"image_should_be_in_format": "The image should be in PNG or JPEG format.",
|
"image_should_be_in_format": "Resim PNG veya JPEG formatın’da olmalıdır.",
|
||||||
"items_per_page": "Items per page",
|
"items_per_page": "Sayfa başına öğe sayısı",
|
||||||
"no_items_found": "No items found",
|
"no_items_found": "Hiçbir öğe bulunamadı",
|
||||||
"select_items": "Select items...",
|
"select_items": "Öğeleri seçin...",
|
||||||
"search": "Search...",
|
"search": "Ara...",
|
||||||
"expand_card": "Expand card",
|
"expand_card": "Kartı genişlet",
|
||||||
"copied": "Copied",
|
"copied": "Kopyalandı",
|
||||||
"click_to_copy": "Click to copy",
|
"click_to_copy": "Kopyalamak için tıklayın",
|
||||||
"something_went_wrong": "Something went wrong",
|
"something_went_wrong": "Bir şeyler ters gitti",
|
||||||
"go_back_to_home": "Go back to home",
|
"go_back_to_home": "Ana sayfaya geri dön",
|
||||||
"alternative_sign_in_methods": "Alternative Sign In Methods",
|
"alternative_sign_in_methods": "Alternatif Giriş Yöntemleri",
|
||||||
"login_background": "Login background",
|
"login_background": "Giriş arka planı",
|
||||||
"logo": "Logo",
|
"logo": "Logo",
|
||||||
"login_code": "Login Code",
|
"login_code": "Giriş Kodu",
|
||||||
"create_a_login_code_to_sign_in_without_a_passkey_once": "Create a login code that the user can use to sign in without a passkey once.",
|
"create_a_login_code_to_sign_in_without_a_passkey_once": "Kullanıcının bir kez parolasız oturum açmak için kullanabileceği bir giriş kodu oluşturun.",
|
||||||
"one_hour": "1 hour",
|
"one_hour": "1 saat",
|
||||||
"twelve_hours": "12 hours",
|
"twelve_hours": "12 saat",
|
||||||
"one_day": "1 day",
|
"one_day": "1 gün",
|
||||||
"one_week": "1 week",
|
"one_week": "1 hafta",
|
||||||
"one_month": "1 month",
|
"one_month": "1 ay",
|
||||||
"expiration": "Expiration",
|
"expiration": "Son Geçerlilik Tarihi",
|
||||||
"generate_code": "Generate Code",
|
"generate_code": "Kod Oluştur",
|
||||||
"name": "Name",
|
"name": "İsim",
|
||||||
"browser_unsupported": "Browser unsupported",
|
"browser_unsupported": "Desteklenmeyen tarayıcı",
|
||||||
"this_browser_does_not_support_passkeys": "This browser doesn't support passkeys. Please use an alternative sign in method.",
|
"this_browser_does_not_support_passkeys": "Bu tarayıcı geçiş anahtarlarını desteklemiyor. Lütfen alternatif bir oturum açma yöntemi kullanın.",
|
||||||
"an_unknown_error_occurred": "An unknown error occurred",
|
"an_unknown_error_occurred": "Bilinmeyen bir hata oluştu",
|
||||||
"authentication_process_was_aborted": "The authentication process was aborted",
|
"authentication_process_was_aborted": "Kimlik doğrulama süreci iptal edildi",
|
||||||
"error_occurred_with_authenticator": "An error occurred with the authenticator",
|
"error_occurred_with_authenticator": "Kimlik doğrulayıcıda bir hata oluştu",
|
||||||
"authenticator_does_not_support_discoverable_credentials": "The authenticator does not support discoverable credentials",
|
"authenticator_does_not_support_discoverable_credentials": "Kimlik doğrulayıcı, keşfedilebilir kimlik bilgilerini desteklemiyor",
|
||||||
"authenticator_does_not_support_resident_keys": "The authenticator does not support resident keys",
|
"authenticator_does_not_support_resident_keys": "Kimlik doğrulayıcı yerleşik anahtarları desteklemiyor",
|
||||||
"passkey_was_previously_registered": "This passkey was previously registered",
|
"passkey_was_previously_registered": "Bu geçiş anahtarı daha önce kaydedilmiştir",
|
||||||
"authenticator_does_not_support_any_of_the_requested_algorithms": "The authenticator does not support any of the requested algorithms",
|
"authenticator_does_not_support_any_of_the_requested_algorithms": "Kimlik doğrulayıcı, talep edilen algoritmalardan hiçbirini desteklemiyor",
|
||||||
"authenticator_timed_out": "The authenticator timed out",
|
"authenticator_timed_out": "Kimlik doğrulayıcı zaman aşımına uğradı",
|
||||||
"critical_error_occurred_contact_administrator": "A critical error occurred. Please contact your administrator.",
|
"critical_error_occurred_contact_administrator": "Kritik bir hata oluştu. Lütfen sistem yöneticinizle iletişime geçin.",
|
||||||
"sign_in_to": "Sign in to {name}",
|
"sign_in_to": "{name} hesabına giriş yap",
|
||||||
"client_not_found": "Client not found",
|
"client_not_found": "İstemci bulunamadı",
|
||||||
"client_wants_to_access_the_following_information": "<b>{client}</b> wants to access the following information:",
|
"client_wants_to_access_the_following_information": "<b>{client}</b> aşağıdaki bilgilere erişmek istiyor:",
|
||||||
"do_you_want_to_sign_in_to_client_with_your_app_name_account": "Do you want to sign in to <b>{client}</b> with your {appName} account?",
|
"do_you_want_to_sign_in_to_client_with_your_app_name_account": "{appName} hesabınla <b>{client}</b> uygulamasına giriş yapmak istiyor musun?",
|
||||||
"email": "Email",
|
"email": "E-posta",
|
||||||
"view_your_email_address": "View your email address",
|
"view_your_email_address": "E-posta adresinizi görüntüleyin",
|
||||||
"profile": "Profile",
|
"profile": "Profil",
|
||||||
"view_your_profile_information": "View your profile information",
|
"view_your_profile_information": "Profil bilgilerinizi görüntüleyin",
|
||||||
"groups": "Groups",
|
"groups": "Gruplar",
|
||||||
"view_the_groups_you_are_a_member_of": "View the groups you are a member of",
|
"view_the_groups_you_are_a_member_of": "Üyesi olduğunuz grupları görüntüleyin",
|
||||||
"cancel": "Cancel",
|
"cancel": "İptal",
|
||||||
"sign_in": "Sign in",
|
"sign_in": "Giriş yap",
|
||||||
"try_again": "Try again",
|
"try_again": "Tekrar deneyin",
|
||||||
"client_logo": "Client Logo",
|
"client_logo": "İstemci Logosu",
|
||||||
"sign_out": "Sign out",
|
"sign_out": "Çıkış yap",
|
||||||
"do_you_want_to_sign_out_of_pocketid_with_the_account": "Do you want to sign out of {appName} with the account <b>{username}</b>?",
|
"do_you_want_to_sign_out_of_pocketid_with_the_account": "<b>{username}</b> adlı hesapla {appName} uygulamasından çıkış yapmak istiyor musun?",
|
||||||
"sign_in_to_appname": "Sign in to {appName}",
|
"sign_in_to_appname": "{appName} hesabına giriş yap",
|
||||||
"please_try_to_sign_in_again": "Please try to sign in again.",
|
"please_try_to_sign_in_again": "Lütfen tekrar giriş yapmayı deneyin.",
|
||||||
"authenticate_with_passkey_to_access_account": "Authenticate yourself with your passkey to access your account.",
|
"authenticate_with_passkey_to_access_account": "Hesabınıza erişmek için geçiş anahtarınızla kimlik doğrulaması yapın.",
|
||||||
"authenticate": "Authenticate",
|
"authenticate": "Kimliğini Doğrula",
|
||||||
"please_try_again": "Please try again.",
|
"please_try_again": "Lütfen tekrar deneyin.",
|
||||||
"continue": "Continue",
|
"continue": "Devam et",
|
||||||
"alternative_sign_in": "Alternative Sign In",
|
"alternative_sign_in": "Alternatif Giriş",
|
||||||
"if_you_do_not_have_access_to_your_passkey_you_can_sign_in_using_one_of_the_following_methods": "If you don't have access to your passkey, you can sign in using one of the following methods.",
|
"if_you_do_not_have_access_to_your_passkey_you_can_sign_in_using_one_of_the_following_methods": "Geçiş anahtarınıza erişiminiz yoksa, aşağıdaki yöntemlerden biriyle giriş yapabilirsiniz.",
|
||||||
"use_your_passkey_instead": "Use your passkey instead?",
|
"use_your_passkey_instead": "Geçiş anahtarınızı kullanmak ister misiniz?",
|
||||||
"email_login": "Email Login",
|
"email_login": "E-posta ile Giriş",
|
||||||
"enter_a_login_code_to_sign_in": "Enter a login code to sign in.",
|
"enter_a_login_code_to_sign_in": "Giriş yapmak için bir kod girin.",
|
||||||
"sign_in_with_login_code": "Sign in with login code",
|
"sign_in_with_login_code": "Giriş kodu ile giriş yap",
|
||||||
"request_a_login_code_via_email": "Request a login code via email.",
|
"request_a_login_code_via_email": "E-posta ile giriş kodu isteyin.",
|
||||||
"go_back": "Go back",
|
"go_back": "Geri dön",
|
||||||
"an_email_has_been_sent_to_the_provided_email_if_it_exists_in_the_system": "An email has been sent to the provided email, if it exists in the system.",
|
"an_email_has_been_sent_to_the_provided_email_if_it_exists_in_the_system": "Verilen e-posta adresine, sistemde mevcutsa bir e-posta gönderilmiştir.",
|
||||||
"enter_code": "Enter code",
|
"enter_code": "Kodu girin",
|
||||||
"enter_your_email_address_to_receive_an_email_with_a_login_code": "Enter your email address to receive an email with a login code.",
|
"enter_your_email_address_to_receive_an_email_with_a_login_code": "Giriş kodunu içeren bir e-posta almak için e-posta adresinizi girin.",
|
||||||
"your_email": "Your email",
|
"your_email": "E-posta adresiniz",
|
||||||
"submit": "Submit",
|
"submit": "Gönder",
|
||||||
"enter_the_code_you_received_to_sign_in": "Enter the code you received to sign in.",
|
"enter_the_code_you_received_to_sign_in": "Aldığınız kodu girin ve giriş yapın.",
|
||||||
"code": "Code",
|
"code": "Kod",
|
||||||
"invalid_redirect_url": "Invalid redirect URL",
|
"invalid_redirect_url": "Geçersiz yönlendirme URL'si",
|
||||||
"audit_log": "Audit Log",
|
"audit_log": "Denetim Kaydı",
|
||||||
"users": "Users",
|
"users": "Kullanıcılar",
|
||||||
"user_groups": "User Groups",
|
"user_groups": "Kullanıcı Grupları",
|
||||||
"oidc_clients": "OIDC Clients",
|
"oidc_clients": "OIDC İstemcileri",
|
||||||
"api_keys": "API Keys",
|
"api_keys": "API Anahtarları",
|
||||||
"application_configuration": "Application Configuration",
|
"application_configuration": "Uygulama Yapılandırması",
|
||||||
"settings": "Settings",
|
"settings": "Ayarlar",
|
||||||
"update_pocket_id": "Update Pocket ID",
|
"update_pocket_id": "Pocket ID'yi Güncelle",
|
||||||
"powered_by": "Powered by",
|
"powered_by": "Destekleyen",
|
||||||
"see_your_account_activities_from_the_last_3_months": "See your account activities from the last 3 months.",
|
"see_your_account_activities_from_the_last_3_months": "Son 3 aydaki hesap aktivitelerinizi görüntüleyin.",
|
||||||
"time": "Time",
|
"time": "Zaman",
|
||||||
"event": "Event",
|
"event": "Olay",
|
||||||
"approximate_location": "Approximate Location",
|
"approximate_location": "Yaklaşık Konum",
|
||||||
"ip_address": "IP Address",
|
"ip_address": "IP Adresi",
|
||||||
"device": "Device",
|
"device": "Cihaz",
|
||||||
"client": "Client",
|
"client": "İstemci",
|
||||||
"unknown": "Unknown",
|
"unknown": "Bilinmeyen",
|
||||||
"account_details_updated_successfully": "Account details updated successfully",
|
"account_details_updated_successfully": "Hesap bilgileri başarıyla güncellendi",
|
||||||
"profile_picture_updated_successfully": "Profile picture updated successfully. It may take a few minutes to update.",
|
"profile_picture_updated_successfully": "Profil resmi başarıyla güncellendi. Güncellenmesi birkaç dakika sürebilir.",
|
||||||
"account_settings": "Account Settings",
|
"account_settings": "Hesap Ayarları",
|
||||||
"passkey_missing": "Passkey missing",
|
"passkey_missing": "Geçiş anahtarı eksik",
|
||||||
"please_provide_a_passkey_to_prevent_losing_access_to_your_account": "Please add a passkey to prevent losing access to your account.",
|
"please_provide_a_passkey_to_prevent_losing_access_to_your_account": "Hesabınıza erişimi kaybetmemek için lütfen bir geçiş anahtarı ekleyin.",
|
||||||
"single_passkey_configured": "Single Passkey Configured",
|
"single_passkey_configured": "Tek geçiş anahtarı yapılandırıldı",
|
||||||
"it_is_recommended_to_add_more_than_one_passkey": "It is recommended to add more than one passkey to avoid losing access to your account.",
|
"it_is_recommended_to_add_more_than_one_passkey": "Birden fazla geçiş anahtarı eklemeniz önerilir, böylece hesabınıza erişimi kaybetmezsiniz.",
|
||||||
"account_details": "Account Details",
|
"account_details": "Hesap Bilgileri",
|
||||||
"passkeys": "Passkeys",
|
"passkeys": "Geçiş Anahtarları",
|
||||||
"manage_your_passkeys_that_you_can_use_to_authenticate_yourself": "Manage your passkeys that you can use to authenticate yourself.",
|
"manage_your_passkeys_that_you_can_use_to_authenticate_yourself": "Kendinizi doğrulamak için kullanabileceğiniz geçiş anahtarlarınızı yönetin.",
|
||||||
"add_passkey": "Add Passkey",
|
"add_passkey": "Geçiş Anahtarı Ekle",
|
||||||
"create_a_one_time_login_code_to_sign_in_from_a_different_device_without_a_passkey": "Create a one-time login code to sign in from a different device without a passkey.",
|
"create_a_one_time_login_code_to_sign_in_from_a_different_device_without_a_passkey": "Geçiş anahtarı olmadan farklı bir cihazdan giriş yapmak için tek kullanımlık bir giriş kodu oluşturun.",
|
||||||
"create": "Create",
|
"create": "Oluştur",
|
||||||
"first_name": "First name",
|
"first_name": "İsim",
|
||||||
"last_name": "Last name",
|
"last_name": "Soyadı",
|
||||||
"username": "Username",
|
"username": "Kullanıcı Adı",
|
||||||
"save": "Save",
|
"save": "Kaydet",
|
||||||
"username_can_only_contain": "Username can only contain lowercase letters, numbers, underscores, dots, hyphens, and '@' symbols",
|
"username_can_only_contain": "Kullanıcı adı yalnızca küçük harfler, sayılar, alt çizgiler, noktalar, tireler ve '@' sembolleri içerebilir",
|
||||||
"username_must_start_with": "Username must start with an alphanumeric character",
|
"username_must_start_with": "Kullanıcı adı bir harf veya sayısal karakterle başlamalıdır",
|
||||||
"username_must_end_with": "Username must end with an alphanumeric character",
|
"username_must_end_with": "Kullanıcı adı bir harf veya sayısal karakterle bitmelidir",
|
||||||
"sign_in_using_the_following_code_the_code_will_expire_in_minutes": "Sign in using the following code. The code will expire in 15 minutes.",
|
"sign_in_using_the_following_code_the_code_will_expire_in_minutes": "Aşağıdaki kodu kullanarak giriş yapın. Kod 15 dakika içinde süresi dolacaktır.",
|
||||||
"or_visit": "or visit",
|
"or_visit": "veya ziyaret edin",
|
||||||
"added_on": "Added on",
|
"added_on": "Ekleme tarihi",
|
||||||
"rename": "Rename",
|
"rename": "Yeniden Adlandır",
|
||||||
"delete": "Delete",
|
"delete": "Sil",
|
||||||
"are_you_sure_you_want_to_delete_this_passkey": "Are you sure you want to delete this passkey?",
|
"are_you_sure_you_want_to_delete_this_passkey": "Bu geçiş anahtarını silmek istediğinizden emin misiniz?",
|
||||||
"passkey_deleted_successfully": "Passkey deleted successfully",
|
"passkey_deleted_successfully": "Geçiş anahtarı başarıyla silindi",
|
||||||
"delete_passkey_name": "Delete {passkeyName}",
|
"delete_passkey_name": "Sil {passkeyName}",
|
||||||
"passkey_name_updated_successfully": "Passkey name updated successfully",
|
"passkey_name_updated_successfully": "Geçiş anahtarı adı başarıyla güncellendi",
|
||||||
"name_passkey": "Name Passkey",
|
"name_passkey": "Geçiş Anahtarı Adı",
|
||||||
"name_your_passkey_to_easily_identify_it_later": "Name your passkey to easily identify it later.",
|
"name_your_passkey_to_easily_identify_it_later": "Geçiş anahtarınızı daha sonra kolayca tanımlayabilmek için adlandırın.",
|
||||||
"create_api_key": "Create API Key",
|
"create_api_key": "API Anahtarı Oluştur",
|
||||||
"add_a_new_api_key_for_programmatic_access": "Add a new API key for programmatic access to the <link href='https://pocket-id.org/docs/api'>Pocket ID API</link>.",
|
"add_a_new_api_key_for_programmatic_access": "Programatik erişim için <link href='https://pocket-id.org/docs/api'>Pocket ID API</link>’ye yeni bir API anahtarı ekle.",
|
||||||
"add_api_key": "Add API Key",
|
"add_api_key": "API Anahtarı Ekle",
|
||||||
"manage_api_keys": "Manage API Keys",
|
"manage_api_keys": "API Anahtarlarını Yönet",
|
||||||
"api_key_created": "API Key Created",
|
"api_key_created": "API Anahtarı Oluşturuldu",
|
||||||
"for_security_reasons_this_key_will_only_be_shown_once": "For security reasons, this key will only be shown once. Please store it securely.",
|
"for_security_reasons_this_key_will_only_be_shown_once": "Güvenlik nedenleriyle, bu anahtar yalnızca bir kez gösterilecektir. Lütfen güvenli bir şekilde saklayın.",
|
||||||
"description": "Description",
|
"description": "Açıklama",
|
||||||
"api_key": "API Key",
|
"api_key": "API Anahtarı",
|
||||||
"close": "Close",
|
"close": "Kapat",
|
||||||
"name_to_identify_this_api_key": "Name to identify this API key.",
|
"name_to_identify_this_api_key": "Bu API anahtarını tanımlamak için bir isim girin.",
|
||||||
"expires_at": "Expires At",
|
"expires_at": "Son Geçerlilik Tarihi",
|
||||||
"when_this_api_key_will_expire": "When this API key will expire.",
|
"when_this_api_key_will_expire": "Bu API anahtarının süresinin ne zaman dolacağını belirtin.",
|
||||||
"optional_description_to_help_identify_this_keys_purpose": "Optional description to help identify this key's purpose.",
|
"optional_description_to_help_identify_this_keys_purpose": "Bu anahtarın amacını tanımlamaya yardımcı olacak isteğe bağlı açıklama.",
|
||||||
"expiration_date_must_be_in_the_future": "Expiration date must be in the future",
|
"expiration_date_must_be_in_the_future": "Son geçerlilik tarihi gelecekte olmalıdır",
|
||||||
"revoke_api_key": "Revoke API Key",
|
"revoke_api_key": "API Anahtarını İptal Et",
|
||||||
"never": "Never",
|
"never": "Asla",
|
||||||
"revoke": "Revoke",
|
"revoke": "İptal Et",
|
||||||
"api_key_revoked_successfully": "API key revoked successfully",
|
"api_key_revoked_successfully": "API anahtarı başarıyla iptal edildi",
|
||||||
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Are you sure you want to revoke the API key \"{apiKeyName}\"? This will break any integrations using this key.",
|
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "API anahtarı \"{apiKeyName}\" iptal etmek istediğinizden emin misiniz? Bu, bu anahtarı kullanan tüm entegrasyonları bozacaktır.",
|
||||||
"last_used": "Last Used",
|
"last_used": "Son Kullanım",
|
||||||
"actions": "Actions",
|
"actions": "Eylemler",
|
||||||
"images_updated_successfully": "Images updated successfully",
|
"images_updated_successfully": "Görüntüler başarıyla güncellendi. Güncelleme işlemi birkaç dakika sürebilir.",
|
||||||
"general": "General",
|
"general": "Genel",
|
||||||
"configure_smtp_to_send_emails": "Enable email notifications to alert users when a login is detected from a new device or location.",
|
"configure_smtp_to_send_emails": "Yeni bir cihaz veya konumdan giriş tespit edildiğinde kullanıcıları bilgilendirmek için e-posta bildirimlerini etkinleştirin.",
|
||||||
"ldap": "LDAP",
|
"ldap": "LDAP",
|
||||||
"configure_ldap_settings_to_sync_users_and_groups_from_an_ldap_server": "Configure LDAP settings to sync users and groups from an LDAP server.",
|
"configure_ldap_settings_to_sync_users_and_groups_from_an_ldap_server": "LDAP ayarlarını yapılandırarak kullanıcıları ve grupları bir LDAP sunucusundan senkronize edin.",
|
||||||
"images": "Images",
|
"images": "Görseller",
|
||||||
"update": "Update",
|
"update": "Güncelle",
|
||||||
"email_configuration_updated_successfully": "Email configuration updated successfully",
|
"email_configuration_updated_successfully": "E-posta yapılandırması başarıyla güncellendi",
|
||||||
"save_changes_question": "Save changes?",
|
"save_changes_question": "Değişiklikleri kaydetmek istiyor musunuz?",
|
||||||
"you_have_to_save_the_changes_before_sending_a_test_email_do_you_want_to_save_now": "You have to save the changes before sending a test email. Do you want to save now?",
|
"you_have_to_save_the_changes_before_sending_a_test_email_do_you_want_to_save_now": "Test e-postası göndermeden önce değişiklikleri kaydetmelisiniz. Şimdi kaydetmek istiyor musunuz?",
|
||||||
"save_and_send": "Save and send",
|
"save_and_send": "Kaydet ve Gönder",
|
||||||
"test_email_sent_successfully": "Test email sent successfully to your email address.",
|
"test_email_sent_successfully": "Test e-postası, e-posta adresine başarıyla gönderildi.",
|
||||||
"failed_to_send_test_email": "Failed to send test email. Check the server logs for more information.",
|
"failed_to_send_test_email": "Test e-postası gönderilemedi. Daha fazla bilgi için sunucu günlüklerini kontrol edin.",
|
||||||
"smtp_configuration": "SMTP Configuration",
|
"smtp_configuration": "SMTP Yapılandırması",
|
||||||
"smtp_host": "SMTP Host",
|
"smtp_host": "SMTP Sunucusu",
|
||||||
"smtp_port": "SMTP Port",
|
"smtp_port": "SMTP Portu",
|
||||||
"smtp_user": "SMTP User",
|
"smtp_user": "SMTP kullanıcı adı",
|
||||||
"smtp_password": "SMTP Password",
|
"smtp_password": "SMTP Parolası",
|
||||||
"smtp_from": "SMTP From",
|
"smtp_from": "SMTP Gönderen",
|
||||||
"smtp_tls_option": "SMTP TLS Option",
|
"smtp_tls_option": "SMTP TLS Seçeneği",
|
||||||
"email_tls_option": "Email TLS Option",
|
"email_tls_option": "E-posta TLS Seçeneği",
|
||||||
"skip_certificate_verification": "Skip Certificate Verification",
|
"skip_certificate_verification": "Sertifika Doğrulamasını Atla",
|
||||||
"this_can_be_useful_for_selfsigned_certificates": "This can be useful for self-signed certificates.",
|
"this_can_be_useful_for_selfsigned_certificates": "Bu, kendi imzaladığınız sertifikalar için yararlı olabilir.",
|
||||||
"enabled_emails": "Enabled Emails",
|
"enabled_emails": "Etkin E-postalar",
|
||||||
"email_login_notification": "Email Login Notification",
|
"email_login_notification": "E-posta Giriş Bildirimi",
|
||||||
"send_an_email_to_the_user_when_they_log_in_from_a_new_device": "Send an email to the user when they log in from a new device.",
|
"send_an_email_to_the_user_when_they_log_in_from_a_new_device": "Kullanıcı yeni bir cihazdan oturum açtığında e-posta gönder.",
|
||||||
"emai_login_code_requested_by_user": "Email Login Code Requested by User",
|
"emai_login_code_requested_by_user": "Kullanıcı tarafından talep edilen e-posta giriş kodu",
|
||||||
"allow_users_to_sign_in_with_a_login_code_sent_to_their_email": "Allows users to bypass passkeys by requesting a login code sent to their email. This significantly reduces security as anyone with access to the user's email can gain entry.",
|
"allow_users_to_sign_in_with_a_login_code_sent_to_their_email": "Kullanıcıların e-posta ile gönderilen bir giriş kodu ile oturum açmalarına izin verin. Bu, güvenliği önemli ölçüde azaltır çünkü kullanıcının e-postasına erişimi olan herkes giriş yapabilir.",
|
||||||
"email_login_code_from_admin": "Email Login Code from Admin",
|
"email_login_code_from_admin": "Yönetici tarafından gönderilen e-posta giriş kodu",
|
||||||
"allows_an_admin_to_send_a_login_code_to_the_user": "Allows an admin to send a login code to the user via email.",
|
"allows_an_admin_to_send_a_login_code_to_the_user": "Bir yöneticinin kullanıcıya e-posta ile giriş kodu göndermesine izin verir.",
|
||||||
"send_test_email": "Send test email",
|
"send_test_email": "Test e-postası gönder",
|
||||||
"application_configuration_updated_successfully": "Application configuration updated successfully",
|
"application_configuration_updated_successfully": "Uygulama yapılandırması başarıyla güncellendi",
|
||||||
"application_name": "Application Name",
|
"application_name": "Uygulama Adı",
|
||||||
"session_duration": "Session Duration",
|
"session_duration": "Oturum Süresi",
|
||||||
"the_duration_of_a_session_in_minutes_before_the_user_has_to_sign_in_again": "The duration of a session in minutes before the user has to sign in again.",
|
"the_duration_of_a_session_in_minutes_before_the_user_has_to_sign_in_again": "Kullanıcının tekrar oturum açması gereken süre, dakika cinsinden.",
|
||||||
"enable_self_account_editing": "Enable Self-Account Editing",
|
"enable_self_account_editing": "Kullanıcının kendi hesabını düzenlemesini etkinleştir",
|
||||||
"whether_the_users_should_be_able_to_edit_their_own_account_details": "Whether the users should be able to edit their own account details.",
|
"whether_the_users_should_be_able_to_edit_their_own_account_details": "Kullanıcıların kendi hesap bilgilerini düzenlemesine izin verilsin mi.",
|
||||||
"emails_verified": "Emails Verified",
|
"emails_verified": "E-postalar doğrulandı",
|
||||||
"whether_the_users_email_should_be_marked_as_verified_for_the_oidc_clients": "Whether the user's email should be marked as verified for the OIDC clients.",
|
"whether_the_users_email_should_be_marked_as_verified_for_the_oidc_clients": "Kullanıcının e-postasının OIDC istemcileri için doğrulanmış olarak işaretlenip işaretlenmeyeceği.",
|
||||||
"ldap_configuration_updated_successfully": "LDAP configuration updated successfully",
|
"ldap_configuration_updated_successfully": "LDAP yapılandırması başarıyla güncellendi",
|
||||||
"ldap_disabled_successfully": "LDAP disabled successfully",
|
"ldap_disabled_successfully": "LDAP başarıyla devre dışı bırakıldı",
|
||||||
"ldap_sync_finished": "LDAP sync finished",
|
"ldap_sync_finished": "LDAP senkronizasyonu tamamlandı",
|
||||||
"client_configuration": "Client Configuration",
|
"client_configuration": "İstemci Yapılandırması",
|
||||||
"ldap_url": "LDAP URL",
|
"ldap_url": "LDAP URL",
|
||||||
"ldap_bind_dn": "LDAP Bind DN",
|
"ldap_bind_dn": "LDAP Bind DN",
|
||||||
"ldap_bind_password": "LDAP Bind Password",
|
"ldap_bind_password": "LDAP Bind Parolası",
|
||||||
"ldap_base_dn": "LDAP Base DN",
|
"ldap_base_dn": "LDAP Base DN",
|
||||||
"user_search_filter": "User Search Filter",
|
"user_search_filter": "Kullanıcı Arama Filtresi",
|
||||||
"the_search_filter_to_use_to_search_or_sync_users": "The Search filter to use to search/sync users.",
|
"the_search_filter_to_use_to_search_or_sync_users": "Kullanıcıları aramak veya senkronize etmek için kullanılacak arama filtresi.",
|
||||||
"groups_search_filter": "Groups Search Filter",
|
"groups_search_filter": "Grupları Arama Filtresi",
|
||||||
"the_search_filter_to_use_to_search_or_sync_groups": "The Search filter to use to search/sync groups.",
|
"the_search_filter_to_use_to_search_or_sync_groups": "Grupları aramak veya senkronize etmek için kullanılacak arama filtresi.",
|
||||||
"attribute_mapping": "Attribute Mapping",
|
"attribute_mapping": "Öznitelik Haritalama",
|
||||||
"user_unique_identifier_attribute": "User Unique Identifier Attribute",
|
"user_unique_identifier_attribute": "Kullanıcı Benzersiz Tanımlayıcı Özniteliği",
|
||||||
"the_value_of_this_attribute_should_never_change": "The value of this attribute should never change.",
|
"the_value_of_this_attribute_should_never_change": "Bu özniteliğin değeri asla değişmemelidir.",
|
||||||
"username_attribute": "Username Attribute",
|
"username_attribute": "Kullanıcı Adı Özniteliği",
|
||||||
"user_mail_attribute": "User Mail Attribute",
|
"user_mail_attribute": "Kullanıcı E-posta Özniteliği",
|
||||||
"user_first_name_attribute": "User First Name Attribute",
|
"user_first_name_attribute": "Kullanıcı Adı Özniteliği",
|
||||||
"user_last_name_attribute": "User Last Name Attribute",
|
"user_last_name_attribute": "Kullanıcı Soyadı Özniteliği",
|
||||||
"user_profile_picture_attribute": "User Profile Picture Attribute",
|
"user_profile_picture_attribute": "Kullanıcı Profil Resmi Özniteliği",
|
||||||
"the_value_of_this_attribute_can_either_be_a_url_binary_or_base64_encoded_image": "The value of this attribute can either be a URL, a binary or a base64 encoded image.",
|
"the_value_of_this_attribute_can_either_be_a_url_binary_or_base64_encoded_image": "Bu özniteliğin değeri ya bir URL, binary ya da base64 kodlu bir resim olabilir.",
|
||||||
"group_members_attribute": "Group Members Attribute",
|
"group_members_attribute": "Grup Üyeleri Özniteliği",
|
||||||
"the_attribute_to_use_for_querying_members_of_a_group": "The attribute to use for querying members of a group.",
|
"the_attribute_to_use_for_querying_members_of_a_group": "Bir grubun üyelerini sorgulamak için kullanılacak öznitelik.",
|
||||||
"group_unique_identifier_attribute": "Group Unique Identifier Attribute",
|
"group_unique_identifier_attribute": "Grup Benzersiz Tanımlayıcı Özniteliği",
|
||||||
"group_rdn_attribute": "Group RDN Attribute (in DN)",
|
"group_rdn_attribute": "Grup RDN Özniteliği (DN içinde)",
|
||||||
"admin_group_name": "Admin Group Name",
|
"admin_group_name": "Yönetici Grup Adı",
|
||||||
"members_of_this_group_will_have_admin_privileges_in_pocketid": "Members of this group will have Admin Privileges in Pocket ID.",
|
"members_of_this_group_will_have_admin_privileges_in_pocketid": "Bu grubun üyeleri Pocket ID'de yönetici ayrıcalıklarına sahip olacaktır.",
|
||||||
"disable": "Disable",
|
"disable": "Devre Dışı Bırak",
|
||||||
"sync_now": "Sync now",
|
"sync_now": "Şimdi Senkronize et",
|
||||||
"enable": "Enable",
|
"enable": "Etkinleştir",
|
||||||
"user_created_successfully": "User created successfully",
|
"user_created_successfully": "Kullanıcı başarıyla oluşturuldu",
|
||||||
"create_user": "Create User",
|
"create_user": "Kullanıcı Oluştur",
|
||||||
"add_a_new_user_to_appname": "Add a new user to {appName}",
|
"add_a_new_user_to_appname": "{appName} uygulamasına yeni bir kullanıcı ekleyin",
|
||||||
"add_user": "Add User",
|
"add_user": "Kullanıcı Ekle",
|
||||||
"manage_users": "Manage Users",
|
"manage_users": "Kullanıcıları Yönet",
|
||||||
"admin_privileges": "Admin Privileges",
|
"admin_privileges": "Yönetici Ayrıcalıkları",
|
||||||
"admins_have_full_access_to_the_admin_panel": "Admins have full access to the admin panel.",
|
"admins_have_full_access_to_the_admin_panel": "Yöneticilerin yönetici paneline tam erişimi vardır.",
|
||||||
"delete_firstname_lastname": "Delete {firstName} {lastName}",
|
"delete_firstname_lastname": "Sil {firstName} {lastName}",
|
||||||
"are_you_sure_you_want_to_delete_this_user": "Are you sure you want to delete this user?",
|
"are_you_sure_you_want_to_delete_this_user": "Bu kullanıcıyı silmek istediğinizden emin misiniz?",
|
||||||
"user_deleted_successfully": "User deleted successfully",
|
"user_deleted_successfully": "Kullanıcı başarıyla silindi,",
|
||||||
"role": "Role",
|
"role": "Rol",
|
||||||
"source": "Source",
|
"source": "Kaynak",
|
||||||
"admin": "Admin",
|
"admin": "Yönetici",
|
||||||
"user": "User",
|
"user": "Kullanıcı",
|
||||||
"local": "Local",
|
"local": "Yerel",
|
||||||
"toggle_menu": "Toggle menu",
|
"toggle_menu": "Menüyü aç/kapat",
|
||||||
"edit": "Edit",
|
"edit": "Düzenle",
|
||||||
"user_groups_updated_successfully": "User groups updated successfully",
|
"user_groups_updated_successfully": "Kullanıcı grupları başarıyla güncellendi",
|
||||||
"user_updated_successfully": "User updated successfully",
|
"user_updated_successfully": "Kullanıcı başarıyla güncellendi",
|
||||||
"custom_claims_updated_successfully": "Custom claims updated successfully",
|
"custom_claims_updated_successfully": "Özel alanlar başarıyla güncellendi",
|
||||||
"back": "Back",
|
"back": "Geri",
|
||||||
"user_details_firstname_lastname": "User Details {firstName} {lastName}",
|
"user_details_firstname_lastname": "Kullanıcı Detayları {firstName} {lastName}",
|
||||||
"manage_which_groups_this_user_belongs_to": "Manage which groups this user belongs to.",
|
"manage_which_groups_this_user_belongs_to": "Bu kullanıcının ait olduğu grupları yönetin.",
|
||||||
"custom_claims": "Custom Claims",
|
"custom_claims": "Özel Alan",
|
||||||
"custom_claims_are_key_value_pairs_that_can_be_used_to_store_additional_information_about_a_user": "Custom claims are key-value pairs that can be used to store additional information about a user. These claims will be included in the ID token if the scope 'profile' is requested.",
|
"custom_claims_are_key_value_pairs_that_can_be_used_to_store_additional_information_about_a_user": "Özel alan, bir kullanıcı hakkında ek bilgi depolamak için kullanılabilecek anahtar-değer çiftleridir. Bu alanlar, 'profil' kapsamı istendiğinde ID belirtecine dahil edilecektir.",
|
||||||
"user_group_created_successfully": "User group created successfully",
|
"user_group_created_successfully": "Kullanıcı grubu başarıyla oluşturuldu",
|
||||||
"create_user_group": "Create User Group",
|
"create_user_group": "Kullanıcı Grubu Oluştur",
|
||||||
"create_a_new_group_that_can_be_assigned_to_users": "Create a new group that can be assigned to users.",
|
"create_a_new_group_that_can_be_assigned_to_users": "Kullanıcılara atanabilecek yeni bir grup oluşturun.",
|
||||||
"add_group": "Add Group",
|
"add_group": "Grup Ekle",
|
||||||
"manage_user_groups": "Manage User Groups",
|
"manage_user_groups": "Kullanıcı Gruplarını Yönet",
|
||||||
"friendly_name": "Friendly Name",
|
"friendly_name": "Kullanıcı Dostu İsim",
|
||||||
"name_that_will_be_displayed_in_the_ui": "Name that will be displayed in the UI",
|
"name_that_will_be_displayed_in_the_ui": "Kullanıcı arayüzünde görüntülenecek isim",
|
||||||
"name_that_will_be_in_the_groups_claim": "Name that will be in the \"groups\" claim",
|
"name_that_will_be_in_the_groups_claim": "“Gruplar” alanında bulunacak ad",
|
||||||
"delete_name": "Delete {name}",
|
"delete_name": "Sil {name}",
|
||||||
"are_you_sure_you_want_to_delete_this_user_group": "Are you sure you want to delete this user group?",
|
"are_you_sure_you_want_to_delete_this_user_group": "Bu kullanıcı grubunu silmek istediğinizden emin misiniz?",
|
||||||
"user_group_deleted_successfully": "User group deleted successfully",
|
"user_group_deleted_successfully": "Kullanıcı grubu başarıyla silindi",
|
||||||
"user_count": "User Count",
|
"user_count": "Kullanıcı Sayısı",
|
||||||
"user_group_updated_successfully": "User group updated successfully",
|
"user_group_updated_successfully": "Kullanıcı grubu başarıyla güncellendi",
|
||||||
"users_updated_successfully": "Users updated successfully",
|
"users_updated_successfully": "Kullanıcılar başarıyla güncellendi",
|
||||||
"user_group_details_name": "User Group Details {name}",
|
"user_group_details_name": "Kullanıcı Grubu Detayları {name}",
|
||||||
"assign_users_to_this_group": "Assign users to this group.",
|
"assign_users_to_this_group": "Bu gruba kullanıcı atayın.",
|
||||||
"custom_claims_are_key_value_pairs_that_can_be_used_to_store_additional_information_about_a_user_prioritized": "Custom claims are key-value pairs that can be used to store additional information about a user. These claims will be included in the ID token if the scope 'profile' is requested. Custom claims defined on the user will be prioritized if there are conflicts.",
|
"custom_claims_are_key_value_pairs_that_can_be_used_to_store_additional_information_about_a_user_prioritized": "Özel alanlar, bir kullanıcı hakkında ek bilgileri depolamak için kullanılabilen anahtar-değer çiftleridir. Bu alanlar, 'profil' kapsamı talep edildiğinde kimlik belirtecine dahil edilecektir. Çakışma olması durumunda, kullanıcı üzerinde tanımlanan özel alanlar öncelikli olacaktır.",
|
||||||
"oidc_client_created_successfully": "OIDC client created successfully",
|
"oidc_client_created_successfully": "OIDC istemcisi başarıyla oluşturuldu",
|
||||||
"create_oidc_client": "Create OIDC Client",
|
"create_oidc_client": "OIDC İstemcisi Oluştur",
|
||||||
"add_a_new_oidc_client_to_appname": "Add a new OIDC client to {appName}.",
|
"add_a_new_oidc_client_to_appname": "{appName} uygulamasına yeni bir oidc istemcisi ekleyin.",
|
||||||
"add_oidc_client": "Add OIDC Client",
|
"add_oidc_client": "OIDC İstemcisi Ekle",
|
||||||
"manage_oidc_clients": "Manage OIDC Clients",
|
"manage_oidc_clients": "OIDC İstemcilerini Yönet",
|
||||||
"one_time_link": "One Time Link",
|
"one_time_link": "Tek Seferlik Bağlantı",
|
||||||
"use_this_link_to_sign_in_once": "Use this link to sign in once. This is needed for users who haven't added a passkey yet or have lost it.",
|
"use_this_link_to_sign_in_once": "Bu bağlantıyı bir kez oturum açmak için kullanın. Bu, henüz bir geçiş anahtarı eklememiş veya kaybetmiş kullanıcılar için gereklidir.",
|
||||||
"add": "Add",
|
"add": "Ekle",
|
||||||
"callback_urls": "Callback URLs",
|
"callback_urls": "Callback URL'leri",
|
||||||
"logout_callback_urls": "Logout Callback URLs",
|
"logout_callback_urls": "Çıkış Callback URL'leri",
|
||||||
"public_client": "Public Client",
|
"public_client": "Genel İstemci",
|
||||||
"public_clients_description": "Public clients do not have a client secret. They are designed for mobile, web, and native applications where secrets cannot be securely stored.",
|
"public_clients_description": "Genel istemciler bir istemci sırrına sahip değildir. Güvenlik anahtarlarının güvenli bir şekilde saklanamayacağı mobil, web ve yerel uygulamalar için tasarlanmıştır.",
|
||||||
"pkce": "PKCE",
|
"pkce": "PKCE",
|
||||||
"public_key_code_exchange_is_a_security_feature_to_prevent_csrf_and_authorization_code_interception_attacks": "Public Key Code Exchange is a security feature to prevent CSRF and authorization code interception attacks.",
|
"public_key_code_exchange_is_a_security_feature_to_prevent_csrf_and_authorization_code_interception_attacks": "Genel Anahtar Kod Değişimi, CSRF ve yetkilendirme kodu ele geçirme saldırılarını önlemek için bir güvenlik özelliğidir.",
|
||||||
"requires_reauthentication": "Requires Re-Authentication",
|
"requires_reauthentication": "Yeniden Kimlik Doğrulama Gerekir",
|
||||||
"requires_users_to_authenticate_again_on_each_authorization": "Requires users to authenticate again on each authorization, even if already signed in",
|
"requires_users_to_authenticate_again_on_each_authorization": "Kullanıcıların her yetkilendirmede tekrar kimlik doğrulaması yapmasını gerektirir, oturum açmış olsalar bile",
|
||||||
"name_logo": "{name} logo",
|
"name_logo": "{name} logosu",
|
||||||
"change_logo": "Change Logo",
|
"change_logo": "Logoyu Değiştir",
|
||||||
"upload_logo": "Upload Logo",
|
"upload_logo": "Logo Yükle",
|
||||||
"remove_logo": "Remove Logo",
|
"remove_logo": "Logoyu Kaldır",
|
||||||
"are_you_sure_you_want_to_delete_this_oidc_client": "Are you sure you want to delete this OIDC client?",
|
"are_you_sure_you_want_to_delete_this_oidc_client": "Bu OIDC istemcisini silmek istediğinizden emin misiniz?",
|
||||||
"oidc_client_deleted_successfully": "OIDC client deleted successfully",
|
"oidc_client_deleted_successfully": "OIDC istemcisi başarıyla silindi",
|
||||||
"authorization_url": "Authorization URL",
|
"authorization_url": "Yetkilendirme URL'si",
|
||||||
"oidc_discovery_url": "OIDC Discovery URL",
|
"oidc_discovery_url": "OIDC Discovery URL'si",
|
||||||
"token_url": "Token URL",
|
"token_url": "Token URL'si",
|
||||||
"userinfo_url": "Userinfo URL",
|
"userinfo_url": "Kullanıcı bilgisi URL'si",
|
||||||
"logout_url": "Logout URL",
|
"logout_url": "Çıkış URL'si",
|
||||||
"certificate_url": "Certificate URL",
|
"certificate_url": "Sertifika URL'si",
|
||||||
"enabled": "Enabled",
|
"enabled": "Etkin",
|
||||||
"disabled": "Disabled",
|
"disabled": "Devre dışı",
|
||||||
"oidc_client_updated_successfully": "OIDC client updated successfully",
|
"oidc_client_updated_successfully": "OIDC istemcisi başarıyla güncellendi",
|
||||||
"create_new_client_secret": "Create new client secret",
|
"create_new_client_secret": "Yeni istemci sırrı oluştur",
|
||||||
"are_you_sure_you_want_to_create_a_new_client_secret": "Are you sure you want to create a new client secret? The old one will be invalidated.",
|
"are_you_sure_you_want_to_create_a_new_client_secret": "Yeni bir istemci sırrı oluşturmak istediğinizden emin misiniz? Eskisi geçersiz kılınacaktır.",
|
||||||
"generate": "Generate",
|
"generate": "Üret",
|
||||||
"new_client_secret_created_successfully": "New client secret created successfully",
|
"new_client_secret_created_successfully": "Yeni istemci sırrı başarıyla oluşturuldu",
|
||||||
"allowed_user_groups_updated_successfully": "Allowed user groups updated successfully",
|
"allowed_user_groups_updated_successfully": "İzin verilen kullanıcı grupları başarıyla güncellendi",
|
||||||
"oidc_client_name": "OIDC Client {name}",
|
"oidc_client_name": "OIDC İstemcisi {name}",
|
||||||
"client_id": "Client ID",
|
"client_id": "İstemci kimliği",
|
||||||
"client_secret": "Client secret",
|
"client_secret": "İstemci sırrı",
|
||||||
"show_more_details": "Show more details",
|
"show_more_details": "Daha fazla detay göster",
|
||||||
"allowed_user_groups": "Allowed User Groups",
|
"allowed_user_groups": "İzin Verilen Kullanıcı Grupları",
|
||||||
"add_user_groups_to_this_client_to_restrict_access_to_users_in_these_groups": "Add user groups to this client to restrict access to users in these groups. If no user groups are selected, all users will have access to this client.",
|
"add_user_groups_to_this_client_to_restrict_access_to_users_in_these_groups": "Bu istemciye kullanıcı grupları ekleyerek bu gruplardaki kullanıcılara erişimi kısıtlayın. Hiçbir kullanıcı grubu seçilmezse, tüm kullanıcılar bu istemciye erişebilecektir.",
|
||||||
"favicon": "Favicon",
|
"favicon": "Favicon",
|
||||||
"light_mode_logo": "Light Mode Logo",
|
"light_mode_logo": "Açık Mod Logo",
|
||||||
"dark_mode_logo": "Dark Mode Logo",
|
"dark_mode_logo": "Karanlık Mod Logo",
|
||||||
"background_image": "Background Image",
|
"background_image": "Arkaplan Resmi",
|
||||||
"language": "Language",
|
"language": "Dil",
|
||||||
"reset_profile_picture_question": "Reset profile picture?",
|
"reset_profile_picture_question": "Profil resmini sıfırlamak istiyor musunuz?",
|
||||||
"this_will_remove_the_uploaded_image_and_reset_the_profile_picture_to_default": "This will remove the uploaded image and reset the profile picture to default. Do you want to continue?",
|
"this_will_remove_the_uploaded_image_and_reset_the_profile_picture_to_default": "Bu, yüklenen resmi kaldıracak ve profil resmini varsayılan ayarına sıfırlayacaktır. Devam etmek istiyor musunuz?",
|
||||||
"reset": "Reset",
|
"reset": "Sıfırla",
|
||||||
"reset_to_default": "Reset to default",
|
"reset_to_default": "Varsayılan Ayara Sıfırla",
|
||||||
"profile_picture_has_been_reset": "Profile picture has been reset. It may take a few minutes to update.",
|
"profile_picture_has_been_reset": "Profil resmi sıfırlandı. Güncellenmesi birkaç dakika sürebilir.",
|
||||||
"select_the_language_you_want_to_use": "Select the language you want to use. Please note that some text may be automatically translated and could be inaccurate.",
|
"select_the_language_you_want_to_use": "Kullanmak istediğiniz dili seçin. Lütfen bazı metinlerin otomatik olarak çevrilebileceğini ve hatalı olabileceğini unutmayın.",
|
||||||
"contribute_to_translation": "If you find an issue you're welcome to contribute to the translation on <link href='https://crowdin.com/project/pocket-id'>Crowdin</link>.",
|
"contribute_to_translation": "Bir sorunla karşılaşırsan, <link href='https://crowdin.com/project/pocket-id'>Crowdin</link> üzerinden çeviriye katkı sağlayabilirsin.",
|
||||||
"personal": "Personal",
|
"personal": "Kişisel",
|
||||||
"global": "Global",
|
"global": "Genel",
|
||||||
"all_users": "All Users",
|
"all_users": "Tüm Kullanıcılar",
|
||||||
"all_events": "All Events",
|
"all_events": "Tüm Etkinlikler",
|
||||||
"all_clients": "All Clients",
|
"all_clients": "Tüm İstemciler",
|
||||||
"all_locations": "All Locations",
|
"all_locations": "Tüm Konumlar",
|
||||||
"global_audit_log": "Global Audit Log",
|
"global_audit_log": "Genel Denetim Kaydı",
|
||||||
"see_all_account_activities_from_the_last_3_months": "See all user activity for the last 3 months.",
|
"see_all_account_activities_from_the_last_3_months": "Son 3 ay içindeki tüm kullanıcı etkinliklerini görüntüle.",
|
||||||
"token_sign_in": "Token Sign In",
|
"token_sign_in": "Token ile Giriş",
|
||||||
"client_authorization": "Client Authorization",
|
"client_authorization": "İstemci Yetkilendirmesi",
|
||||||
"new_client_authorization": "New Client Authorization",
|
"new_client_authorization": "Yeni İstemci Yetkilendirmesi",
|
||||||
"disable_animations": "Disable Animations",
|
"disable_animations": "Animasyonları Devre Dışı Bırak",
|
||||||
"turn_off_ui_animations": "Turn off animations throughout the UI.",
|
"turn_off_ui_animations": "Kullanıcı arayüzü animasyonlarını kapatın.",
|
||||||
"user_disabled": "Account Disabled",
|
"user_disabled": "Hesap Devre Dışı",
|
||||||
"disabled_users_cannot_log_in_or_use_services": "Disabled users cannot log in or use services.",
|
"disabled_users_cannot_log_in_or_use_services": "Hesapları devre dışı olan kullanıcılar, giriş yapamaz veya hizmetleri kullanamaz.",
|
||||||
"user_disabled_successfully": "User has been disabled successfully.",
|
"user_disabled_successfully": "Kullanıcı başarıyla devre dışı bırakıldı.",
|
||||||
"user_enabled_successfully": "User has been enabled successfully.",
|
"user_enabled_successfully": "Kullanıcı başarıyla etkinleştirildi.",
|
||||||
"status": "Status",
|
"status": "Durum",
|
||||||
"disable_firstname_lastname": "Disable {firstName} {lastName}",
|
"disable_firstname_lastname": "{firstName} {lastName} hesabını devre dışı bırak",
|
||||||
"are_you_sure_you_want_to_disable_this_user": "Are you sure you want to disable this user? They will not be able to log in or access any services.",
|
"are_you_sure_you_want_to_disable_this_user": "Bu kullanıcıyı devre dışı bırakmak istediğinizden emin misiniz? Devre dışı bırakılan kullanıcılar giriş yapamaz veya hizmetleri kullanamaz.",
|
||||||
"ldap_soft_delete_users": "Keep disabled users from LDAP.",
|
"ldap_soft_delete_users": "Hesapları devre dışı olan kullanıcıları LDAP'tan koru.",
|
||||||
"ldap_soft_delete_users_description": "When enabled, users removed from LDAP will be disabled rather than deleted from the system.",
|
"ldap_soft_delete_users_description": "Etkinleştirildiğinde, LDAP'tan kaldırılan kullanıcılar sistemden silinmek yerine hesapları devre dışı bırakılacaktır.",
|
||||||
"login_code_email_success": "The login code has been sent to the user.",
|
"login_code_email_success": "Giriş kodu kullanıcıya gönderildi.",
|
||||||
"send_email": "Send Email",
|
"send_email": "E-posta Gönder",
|
||||||
"show_code": "Show Code",
|
"show_code": "Kodu Göster",
|
||||||
"callback_url_description": "URL(s) provided by your client. Will be automatically added if left blank. Wildcards (*) are supported, but best avoided for better security.",
|
"callback_url_description": "URL'ler, istemciniz tarafından sağlanır. Boş bırakılırsa otomatik olarak eklenecektir. Wildcard (*) karakterleri desteklenmektedir, ancak daha iyi güvenlik için kaçınılması önerilir.",
|
||||||
"logout_callback_url_description": "URL(s) provided by your client for logout. Wildcards (*) are supported, but best avoided for better security.",
|
"logout_callback_url_description": "Çıkış URL'leri, istemciniz tarafından sağlanır. Boş bırakılırsa otomatik olarak eklenecektir. Wildcard (*) karakterleri desteklenmektedir, ancak daha iyi güvenlik için kaçınılması önerilir.",
|
||||||
"api_key_expiration": "API Key Expiration",
|
"api_key_expiration": "API Anahtarının Geçerlilik Süresi",
|
||||||
"send_an_email_to_the_user_when_their_api_key_is_about_to_expire": "Send an email to the user when their API key is about to expire.",
|
"send_an_email_to_the_user_when_their_api_key_is_about_to_expire": "API anahtarları sona ermek üzere olduğunda kullanıcıya bir e-posta gönderin.",
|
||||||
"authorize_device": "Authorize Device",
|
"authorize_device": "Cihazı Yetkilendir",
|
||||||
"the_device_has_been_authorized": "The device has been authorized.",
|
"the_device_has_been_authorized": "Cihaz yetkilendirildi.",
|
||||||
"enter_code_displayed_in_previous_step": "Enter the code that was displayed in the previous step.",
|
"enter_code_displayed_in_previous_step": "Önceki adımda görüntülenen kodu girin.",
|
||||||
"authorize": "Authorize",
|
"authorize": "Yetkilendir",
|
||||||
"federated_client_credentials": "Federated Client Credentials",
|
"federated_client_credentials": "Birleştirilmiş İstemci Kimlik Bilgileri",
|
||||||
"federated_client_credentials_description": "Using federated client credentials, you can authenticate OIDC clients using JWT tokens issued by third-party authorities.",
|
"federated_client_credentials_description": "Birleşik istemci kimlik bilgilerini kullanarak, üçüncü taraf otoriteleri tarafından verilen JWT token'ları kullanarak OIDC istemcilerinin kimliklerini doğrulayabilirsiniz.",
|
||||||
"add_federated_client_credential": "Add Federated Client Credential",
|
"add_federated_client_credential": "Birleştirilmiş İstemci Kimlik Bilgisi Ekle",
|
||||||
"add_another_federated_client_credential": "Add another federated client credential",
|
"add_another_federated_client_credential": "Başka bir birleştirilmiş istemci kimlik bilgisi ekle",
|
||||||
"oidc_allowed_group_count": "Allowed Group Count",
|
"oidc_allowed_group_count": "İzin Verilen Grup Sayısı",
|
||||||
"unrestricted": "Unrestricted",
|
"unrestricted": "Kısıtlanmamış",
|
||||||
"show_advanced_options": "Show Advanced Options",
|
"show_advanced_options": "Gelişmiş Seçenekleri Göster",
|
||||||
"hide_advanced_options": "Hide Advanced Options",
|
"hide_advanced_options": "Gelişmiş Seçenekleri Gizle",
|
||||||
"oidc_data_preview": "OIDC Data Preview",
|
"oidc_data_preview": "OIDC Veri Önizlemesi",
|
||||||
"preview_the_oidc_data_that_would_be_sent_for_different_users": "Preview the OIDC data that would be sent for different users",
|
"preview_the_oidc_data_that_would_be_sent_for_different_users": "Farklı kullanıcılar için gönderilecek OIDC verilerini önizleyin",
|
||||||
"id_token": "ID Token",
|
"id_token": "Kimlik Tokeni",
|
||||||
"access_token": "Access Token",
|
"access_token": "Erişim Tokeni",
|
||||||
"userinfo": "Userinfo",
|
"userinfo": "Kullanıcı bilgisi",
|
||||||
"id_token_payload": "ID Token Payload",
|
"id_token_payload": "Kimlik Belirteci Yükü",
|
||||||
"access_token_payload": "Access Token Payload",
|
"access_token_payload": "Erişim Token’ı İçeriği",
|
||||||
"userinfo_endpoint_response": "Userinfo Endpoint Response",
|
"userinfo_endpoint_response": "Kullanıcı Bilgisi Uç Noktası Yanıtı",
|
||||||
"copy": "Copy",
|
"copy": "Kopyala",
|
||||||
"no_preview_data_available": "No preview data available",
|
"no_preview_data_available": "Önizleme verisi mevcut değil",
|
||||||
"copy_all": "Copy All",
|
"copy_all": "Tümünü Kopyala",
|
||||||
"preview": "Preview",
|
"preview": "Önizleme",
|
||||||
"preview_for_user": "Preview for {name}",
|
"preview_for_user": "{name} için Önizleme",
|
||||||
"preview_the_oidc_data_that_would_be_sent_for_this_user": "Preview the OIDC data that would be sent for this user",
|
"preview_the_oidc_data_that_would_be_sent_for_this_user": "Bu kullanıcı için gönderilecek OIDC verilerini önizleyin",
|
||||||
"show": "Show",
|
"show": "Göster",
|
||||||
"select_an_option": "Select an option",
|
"select_an_option": "Bir seçenek seçin",
|
||||||
"select_user": "Select User",
|
"select_user": "Kullanıcı Seç",
|
||||||
"error": "Error",
|
"error": "Hata",
|
||||||
"select_an_accent_color_to_customize_the_appearance_of_pocket_id": "Select an accent color to customize the appearance of Pocket ID.",
|
"select_an_accent_color_to_customize_the_appearance_of_pocket_id": "Pocket ID'nin görünümünü özelleştirmek için bir vurgu rengi seçin.",
|
||||||
"accent_color": "Accent Color",
|
"accent_color": "Vurgu Rengi",
|
||||||
"custom_accent_color": "Custom Accent Color",
|
"custom_accent_color": "Özel Vurgu Rengi",
|
||||||
"custom_accent_color_description": "Enter a custom color using valid CSS color formats (e.g., hex, rgb, hsl).",
|
"custom_accent_color_description": "Geçerli CSS renk formatlarını kullanarak (örn. hex, rgb, hsl) özel bir renk girin.",
|
||||||
"color_value": "Color Value",
|
"color_value": "Renk Değeri",
|
||||||
"apply": "Apply",
|
"apply": "Uygula",
|
||||||
"signup_token": "Signup Token",
|
"signup_token": "Kayıt Olma Tokeni",
|
||||||
"create_a_signup_token_to_allow_new_user_registration": "Create a signup token to allow new user registration.",
|
"create_a_signup_token_to_allow_new_user_registration": "Yeni kullanıcı kaydına izin vermek için bir kayıt token'i oluşturun.",
|
||||||
"usage_limit": "Usage Limit",
|
"usage_limit": "Kullanım Limiti",
|
||||||
"number_of_times_token_can_be_used": "Number of times the signup token can be used.",
|
"number_of_times_token_can_be_used": "Kayıt token'inin kullanılabileceği maksimum sayıyı belirtin.",
|
||||||
"expires": "Expires",
|
"expires": "Sona Erme Tarihi",
|
||||||
"signup": "Sign Up",
|
"signup": "Kaydol",
|
||||||
"user_creation": "User Creation",
|
"user_creation": "Kullanıcı Oluşturma",
|
||||||
"configure_user_creation": "Manage user creation settings, including signup methods and default permissions for new users.",
|
"configure_user_creation": "Kullanıcı oluşturma ayarlarını yönetin, kayıt yöntemleri ve yeni kullanıcılar için varsayılan izinler dahil.",
|
||||||
"user_creation_groups_description": "Assign these groups automatically to new users upon signup.",
|
"user_creation_groups_description": "Bu grupları otomatik olarak yeni kullanıcılara atayın.",
|
||||||
"user_creation_claims_description": "Assign these custom claims automatically to new users upon signup.",
|
"user_creation_claims_description": "Bu özel alanları otomatik olarak yeni kullanıcılara atayın.",
|
||||||
"user_creation_updated_successfully": "User creation settings updated successfully.",
|
"user_creation_updated_successfully": "Kullanıcı oluşturma ayarları başarıyla güncellendi.",
|
||||||
"signup_disabled_description": "User signups are completely disabled. Only administrators can create new user accounts.",
|
"signup_disabled_description": "Kullanıcı kayıtları tamamen devre dışı bırakılmıştır. Sadece yöneticiler yeni kullanıcı hesapları oluşturabilir.",
|
||||||
"signup_requires_valid_token": "A valid signup token is required to create an account",
|
"signup_requires_valid_token": "Bir hesap oluşturmak için geçerli bir kayıt token'i gereklidir",
|
||||||
"validating_signup_token": "Validating signup token",
|
"validating_signup_token": "Kayıt token'i doğrulanıyor",
|
||||||
"go_to_login": "Go to login",
|
"go_to_login": "Giriş yap",
|
||||||
"signup_to_appname": "Sign Up to {appName}",
|
"signup_to_appname": "{appName} Kayıt Ol",
|
||||||
"create_your_account_to_get_started": "Create your account to get started.",
|
"create_your_account_to_get_started": "Başlamak için hesabınızı oluşturun.",
|
||||||
"initial_account_creation_description": "Please create your account to get started. You will be able to set up a passkey later.",
|
"initial_account_creation_description": "Başlamak için lütfen hesabınızı oluşturun. Daha sonra bir geçiş anahtarı ayarlayabileceksiniz.",
|
||||||
"setup_your_passkey": "Set up your passkey",
|
"setup_your_passkey": "Geçiş Anahtarınızı Ayarlayın",
|
||||||
"create_a_passkey_to_securely_access_your_account": "Create a passkey to securely access your account. This will be your primary way to sign in.",
|
"create_a_passkey_to_securely_access_your_account": "Hesabınıza güvenli bir şekilde erişmek için bir geçiş anahtarı oluşturun. Bu, oturum açmanın birincil yolu olacaktır.",
|
||||||
"skip_for_now": "Skip for now",
|
"skip_for_now": "Şimdilik Atla",
|
||||||
"account_created": "Account Created",
|
"account_created": "Hesap Oluşturuldu",
|
||||||
"enable_user_signups": "Enable User Signups",
|
"enable_user_signups": "Kullanıcıların hesap oluşturmasını Etkinleştir",
|
||||||
"enable_user_signups_description": "Decide how users can sign up for new accounts in Pocket ID.",
|
"enable_user_signups_description": "Kullanıcıların Pocket ID'de yeni hesaplar için nasıl kaydolabileceğini belirleyin.",
|
||||||
"user_signups_are_disabled": "User signups are currently disabled",
|
"user_signups_are_disabled": "Kullanıcıların hesap oluşturma işlemleri şimdilik devre dışı",
|
||||||
"create_signup_token": "Create Signup Token",
|
"create_signup_token": "Kayıt Token'i Oluştur",
|
||||||
"view_active_signup_tokens": "View Active Signup Tokens",
|
"view_active_signup_tokens": "Aktif Kayıt Token'lerini Görüntüle",
|
||||||
"manage_signup_tokens": "Manage Signup Tokens",
|
"manage_signup_tokens": "Kayıt Token'lerini Yönet",
|
||||||
"view_and_manage_active_signup_tokens": "View and manage active signup tokens.",
|
"view_and_manage_active_signup_tokens": "Aktif kayıt token'lerini görüntüleyin ve yönetin.",
|
||||||
"signup_token_deleted_successfully": "Signup token deleted successfully.",
|
"signup_token_deleted_successfully": "Kayıt token'i başarıyla silindi.",
|
||||||
"expired": "Expired",
|
"expired": "Süresi Dolmuş",
|
||||||
"used_up": "Used Up",
|
"used_up": "Tükenmiş",
|
||||||
"active": "Active",
|
"active": "Aktif",
|
||||||
"usage": "Usage",
|
"usage": "Kullanım",
|
||||||
"created": "Created",
|
"created": "Oluşturuldu",
|
||||||
"token": "Token",
|
"token": "Token",
|
||||||
"loading": "Loading",
|
"loading": "Yükleniyor",
|
||||||
"delete_signup_token": "Delete Signup Token",
|
"delete_signup_token": "Kayıt Token'ini Sil",
|
||||||
"are_you_sure_you_want_to_delete_this_signup_token": "Are you sure you want to delete this signup token? This action cannot be undone.",
|
"are_you_sure_you_want_to_delete_this_signup_token": "Bu kayıt token'ini silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.",
|
||||||
"signup_with_token": "Signup with token",
|
"signup_with_token": "Kayıt olma token'i ile kaydol",
|
||||||
"signup_with_token_description": "Users can only sign up using a valid signup token created by an administrator.",
|
"signup_with_token_description": "Kullanıcılar yalnızca bir yönetici tarafından oluşturulan geçerli bir kayıt token'i ile kaydolabilir.",
|
||||||
"signup_open": "Open Signup",
|
"signup_open": "Hesap oluşturma açık",
|
||||||
"signup_open_description": "Anyone can create a new account without restrictions.",
|
"signup_open_description": "Herkes kısıtlama olmaksızın yeni bir hesap oluşturabilir.",
|
||||||
"of": "of",
|
"of": "of",
|
||||||
"skip_passkey_setup": "Skip Passkey Setup",
|
"skip_passkey_setup": "Geçiş Anahtarı Kurulumunu Atla",
|
||||||
"skip_passkey_setup_description": "It's highly recommended to set up a passkey because without one, you will be locked out of your account as soon as the session expires.",
|
"skip_passkey_setup_description": "Bir geçiş anahtarı ayarlamanız şiddetle önerilir çünkü bir tane olmadan, oturum süresi dolduğunda hesabınıza erişiminiz engellenecektir.",
|
||||||
"my_apps": "My Apps",
|
"my_apps": "Uygulamalarım",
|
||||||
"no_apps_available": "No apps available",
|
"no_apps_available": "Kullanılabilir uygulama yok",
|
||||||
"contact_your_administrator_for_app_access": "Contact your administrator to get access to applications.",
|
"contact_your_administrator_for_app_access": "Uygulamalara erişim için yöneticinizle iletişime geçin.",
|
||||||
"launch": "Launch",
|
"launch": "Başlat",
|
||||||
"client_launch_url": "Client Launch URL",
|
"client_launch_url": "İstemci Başlatma URL'si",
|
||||||
"client_launch_url_description": "The URL that will be opened when a user launches the app from the My Apps page.",
|
"client_launch_url_description": "Kullanıcıların Uygulamalarım sayfasından uygulamayı başlattığında açılacak URL.",
|
||||||
"client_name_description": "The name of the client that shows in the Pocket ID UI.",
|
"client_name_description": "Pocket ID arayüzünde gösterilen istemci adı.",
|
||||||
"revoke_access": "Revoke Access",
|
"revoke_access": "Erişimi iptal et",
|
||||||
"revoke_access_description": "Revoke access to <b>{clientName}</b>. <b>{clientName}</b> will no longer be able to access your account information.",
|
"revoke_access_description": "Erişimi <b>{clientName}</b> için iptal et. <b>{clientName}</b> artık hesap bilgilerinize erişemeyecek.",
|
||||||
"revoke_access_successful": "The access to {clientName} has been successfully revoked.",
|
"revoke_access_successful": "Erişim {clientName} başarıyla iptal edildi.",
|
||||||
"last_signed_in_ago": "Last signed in {time} ago",
|
"last_signed_in_ago": "Son oturum açma {time} önce",
|
||||||
"invalid_client_id": "Client ID can only contain letters, numbers, underscores, and hyphens",
|
"invalid_client_id": "İstemci kimliği yalnızca harfler, rakamlar, alt çizgi ve tire içerebilir",
|
||||||
"custom_client_id_description": "Set a custom client ID if this is required by your application. Otherwise, leave it blank to generate a random one.",
|
"custom_client_id_description": "Uygulamanızın gerektirmesi durumunda özel bir istemci kimliği ayarlayın. Aksi takdirde, rastgele bir tane oluşturmak için boş bırakın.",
|
||||||
"generated": "Generated",
|
"generated": "Oluşturuldu",
|
||||||
"administration": "Administration",
|
"administration": "Yönetim",
|
||||||
"group_rdn_attribute_description": "The attribute used in the groups distinguished name (DN).",
|
"group_rdn_attribute_description": "Grupların ayırt edici adında (DN) kullanılan öznitelik.",
|
||||||
"display_name_attribute": "Display Name Attribute",
|
"display_name_attribute": "Görünen Ad Özniteliği",
|
||||||
"display_name": "Display Name",
|
"display_name": "Görünen Ad",
|
||||||
"configure_application_images": "Configure Application Images",
|
"configure_application_images": "Uygulama Görsellerini Yapılandır",
|
||||||
"ui_config_disabled_info_title": "UI Configuration Disabled",
|
"ui_config_disabled_info_title": "UI Yapılandırması Devre Dışı",
|
||||||
"ui_config_disabled_info_description": "The UI configuration is disabled because the application configuration settings are managed through environment variables. Some settings may not be editable.",
|
"ui_config_disabled_info_description": "Kullanıcı arayüzü yapılandırması devre dışı bırakıldı çünkü uygulama yapılandırma ayarları ortam değişkenleri aracılığıyla yönetiliyor. Bazı ayarlar düzenlenemeyebilir.",
|
||||||
"logo_from_url_description": "Paste a direct image URL (svg, png, webp). Find icons at <link href=\"https://selfh.st/icons\">Selfh.st Icons</link> or <link href=\"https://dashboardicons.com\">Dashboard Icons</link>.",
|
"logo_from_url_description": "Doğrudan bir resim URL’si (svg, png, webp) yapıştırın. İkonları <link href=\"https://selfh.st/icons\">Selfh.st Icons</link> veya <link href=\"https://dashboardicons.com\">Dashboard Icons</link>adreslerinden bulabilirsiniz.",
|
||||||
"invalid_url": "Invalid URL",
|
"invalid_url": "Geçersiz URL",
|
||||||
"require_user_email": "Require Email Address",
|
"require_user_email": "E-posta Adresi Gerektir",
|
||||||
"require_user_email_description": "Requires users to have an email address. If disabled, the users without an email address won't be able to use features that require an email address.",
|
"require_user_email_description": "Kullanıcıların bir e-posta adresine sahip olmasını gerektirir. Devre dışı bırakılırsa, e-posta adresi olmayan kullanıcılar, bir e-posta adresi gerektiren özellikleri kullanamayacaktır.",
|
||||||
"view": "View",
|
"view": "Görüntüle",
|
||||||
"toggle_columns": "Toggle columns",
|
"toggle_columns": "Sütünları değiştir",
|
||||||
"locale": "Locale",
|
"locale": "Yerel",
|
||||||
"ldap_id" : "LDAP ID",
|
"ldap_id": "LDAP Kimliği",
|
||||||
"reauthentication": "Re-authentication",
|
"reauthentication": "Yeniden Kimlik Doğrulama",
|
||||||
"clear_filters" : "Clear Filters"
|
"clear_filters": "Filtreleri Temizle",
|
||||||
|
"default_profile_picture": "Varsayılan Profil Resmi"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,7 +155,7 @@
|
|||||||
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Ви впевнені, що хочете анулювати API-ключ «{apiKeyName}»? Це призведе до зупинки всіх інтеграцій, які використовують цей ключ.",
|
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Ви впевнені, що хочете анулювати API-ключ «{apiKeyName}»? Це призведе до зупинки всіх інтеграцій, які використовують цей ключ.",
|
||||||
"last_used": "Останнє використання",
|
"last_used": "Останнє використання",
|
||||||
"actions": "Дії",
|
"actions": "Дії",
|
||||||
"images_updated_successfully": "Зображення успішно оновлено",
|
"images_updated_successfully": "Зображення успішно оновлено. Оновлення може зайняти кілька хвилин.",
|
||||||
"general": "Загальне",
|
"general": "Загальне",
|
||||||
"configure_smtp_to_send_emails": "Увімкніть сповіщення електронною поштою, щоб повідомляти користувачів про вхід з нового пристрою або місцеперебування.",
|
"configure_smtp_to_send_emails": "Увімкніть сповіщення електронною поштою, щоб повідомляти користувачів про вхід з нового пристрою або місцеперебування.",
|
||||||
"ldap": "LDAP",
|
"ldap": "LDAP",
|
||||||
@@ -461,5 +461,6 @@
|
|||||||
"locale": "Локаль",
|
"locale": "Локаль",
|
||||||
"ldap_id": "LDAP-ідентифікатор",
|
"ldap_id": "LDAP-ідентифікатор",
|
||||||
"reauthentication": "Повторна аутентифікація",
|
"reauthentication": "Повторна аутентифікація",
|
||||||
"clear_filters": "Очистити фільтри"
|
"clear_filters": "Очистити фільтри",
|
||||||
|
"default_profile_picture": "Стандартне зображення профілю"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,7 +155,7 @@
|
|||||||
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Bạn có chắc chắn muốn hủy API Key \"{apiKeyName}\" không? Việc này sẽ làm gián đoạn tất cả các tích hợp sử dụng khóa này.",
|
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Bạn có chắc chắn muốn hủy API Key \"{apiKeyName}\" không? Việc này sẽ làm gián đoạn tất cả các tích hợp sử dụng khóa này.",
|
||||||
"last_used": "Lần Sử Dụng Cuối",
|
"last_used": "Lần Sử Dụng Cuối",
|
||||||
"actions": "Hành động",
|
"actions": "Hành động",
|
||||||
"images_updated_successfully": "Đã cập nhật hình ảnh thành công",
|
"images_updated_successfully": "Hình ảnh đã được cập nhật thành công. Quá trình cập nhật có thể mất vài phút.",
|
||||||
"general": "Tổng quan",
|
"general": "Tổng quan",
|
||||||
"configure_smtp_to_send_emails": "Bật thông báo email để thông báo cho người dùng khi phát hiện đăng nhập từ thiết bị hoặc vị trí mới.",
|
"configure_smtp_to_send_emails": "Bật thông báo email để thông báo cho người dùng khi phát hiện đăng nhập từ thiết bị hoặc vị trí mới.",
|
||||||
"ldap": "LDAP",
|
"ldap": "LDAP",
|
||||||
@@ -461,5 +461,6 @@
|
|||||||
"locale": "Vùng",
|
"locale": "Vùng",
|
||||||
"ldap_id": "ID LDAP",
|
"ldap_id": "ID LDAP",
|
||||||
"reauthentication": "Xác thực lại",
|
"reauthentication": "Xác thực lại",
|
||||||
"clear_filters": "Xóa bộ lọc"
|
"clear_filters": "Xóa bộ lọc",
|
||||||
|
"default_profile_picture": "Ảnh đại diện mặc định"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
"no_items_found": "这里暂时空空如也",
|
"no_items_found": "这里暂时空空如也",
|
||||||
"select_items": "选择项目……",
|
"select_items": "选择项目……",
|
||||||
"search": "搜索……",
|
"search": "搜索……",
|
||||||
"expand_card": "展开卡片",
|
"expand_card": "展开",
|
||||||
"copied": "已复制",
|
"copied": "已复制",
|
||||||
"click_to_copy": "点击复制",
|
"click_to_copy": "点击复制",
|
||||||
"something_went_wrong": "出了点问题",
|
"something_went_wrong": "出了点问题",
|
||||||
@@ -155,7 +155,7 @@
|
|||||||
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "您确定要撤销 API 密钥 \"{apiKeyName}\" 吗?这将中断使用此密钥的任何集成。",
|
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "您确定要撤销 API 密钥 \"{apiKeyName}\" 吗?这将中断使用此密钥的任何集成。",
|
||||||
"last_used": "上次使用时间",
|
"last_used": "上次使用时间",
|
||||||
"actions": "操作",
|
"actions": "操作",
|
||||||
"images_updated_successfully": "已成功更新图片",
|
"images_updated_successfully": "图片更新成功。更新过程可能需要几分钟时间。",
|
||||||
"general": "常规",
|
"general": "常规",
|
||||||
"configure_smtp_to_send_emails": "启用电子邮件通知,当检测到来自新设备或新位置的登录时提醒用户。",
|
"configure_smtp_to_send_emails": "启用电子邮件通知,当检测到来自新设备或新位置的登录时提醒用户。",
|
||||||
"ldap": "LDAP",
|
"ldap": "LDAP",
|
||||||
@@ -394,7 +394,7 @@
|
|||||||
"user_creation": "用户创建",
|
"user_creation": "用户创建",
|
||||||
"configure_user_creation": "管理用户创建设置,包括注册方式和新用户的默认权限。",
|
"configure_user_creation": "管理用户创建设置,包括注册方式和新用户的默认权限。",
|
||||||
"user_creation_groups_description": "新用户注册时自动分配的群组。",
|
"user_creation_groups_description": "新用户注册时自动分配的群组。",
|
||||||
"user_creation_claims_description": "在用户注册时自动为新用户分配这些自定义声明。",
|
"user_creation_claims_description": "新用户注册时自动分配的自定义声明。",
|
||||||
"user_creation_updated_successfully": "用户创建设置已成功更新。",
|
"user_creation_updated_successfully": "用户创建设置已成功更新。",
|
||||||
"signup_disabled_description": "已完全禁止新用户注册。只有管理员可以创建新账户。",
|
"signup_disabled_description": "已完全禁止新用户注册。只有管理员可以创建新账户。",
|
||||||
"signup_requires_valid_token": "必须输入有效注册令牌才能注册新账户",
|
"signup_requires_valid_token": "必须输入有效注册令牌才能注册新账户",
|
||||||
@@ -435,21 +435,21 @@
|
|||||||
"no_apps_available": "没有可用应用",
|
"no_apps_available": "没有可用应用",
|
||||||
"contact_your_administrator_for_app_access": "请联系您的管理员以获取应用的访问权限。",
|
"contact_your_administrator_for_app_access": "请联系您的管理员以获取应用的访问权限。",
|
||||||
"launch": "启动",
|
"launch": "启动",
|
||||||
"client_launch_url": "客户发布链接",
|
"client_launch_url": "客户端启动网址",
|
||||||
"client_launch_url_description": "当用户从“我的应用”页面启动应用时将打开的 URL。",
|
"client_launch_url_description": "当用户从“我的应用”页面启动应用时将打开的 URL。",
|
||||||
"client_name_description": "在Pocket ID用户界面中显示的客户端名称。",
|
"client_name_description": "在Pocket ID用户界面中显示的客户端名称。",
|
||||||
"revoke_access": "撤销访问权限",
|
"revoke_access": "撤销访问权限",
|
||||||
"revoke_access_description": "撤销对 <b>{clientName}</b>. <b>{clientName}</b>将无法再访问您的账户信息。",
|
"revoke_access_description": "撤销 <b>{clientName}</b>的访问权限。 <b>{clientName}</b>将无法再访问您的账户信息。",
|
||||||
"revoke_access_successful": "对 {clientName} 的访问权限已成功撤销。",
|
"revoke_access_successful": "对 {clientName} 的访问权限已成功撤销。",
|
||||||
"last_signed_in_ago": "最后一次登录 {time} 前",
|
"last_signed_in_ago": "最后一次登录 {time} 前",
|
||||||
"invalid_client_id": "客户端 ID 只能包含字母、数字、下划线和连字符。",
|
"invalid_client_id": "客户端 ID 只能包含字母、数字、下划线和连字符",
|
||||||
"custom_client_id_description": "此处可根据应用需要设置自定义客户端 ID。留空随机生成。",
|
"custom_client_id_description": "此处可根据应用需要设置自定义客户端 ID。留空随机生成。",
|
||||||
"generated": "已生成",
|
"generated": "已生成",
|
||||||
"administration": "管理员选项",
|
"administration": "管理员选项",
|
||||||
"group_rdn_attribute_description": "在组的区分名称(DN)中使用的属性。",
|
"group_rdn_attribute_description": "在组的区分名称(DN)中使用的属性。",
|
||||||
"display_name_attribute": "显示名称属性",
|
"display_name_attribute": "显示名称属性",
|
||||||
"display_name": "显示名称",
|
"display_name": "显示名称",
|
||||||
"configure_application_images": "配置应用程序图标",
|
"configure_application_images": "配置应用图标",
|
||||||
"ui_config_disabled_info_title": "用户界面配置已禁用",
|
"ui_config_disabled_info_title": "用户界面配置已禁用",
|
||||||
"ui_config_disabled_info_description": "由于应用配置设置已通过环境变量设定,用户界面配置已禁用。某些设置可能无法编辑。",
|
"ui_config_disabled_info_description": "由于应用配置设置已通过环境变量设定,用户界面配置已禁用。某些设置可能无法编辑。",
|
||||||
"logo_from_url_description": "粘贴直接图片URL(svg、png、webp格式)。<link href=\"https://selfh.st/icons\">可在Selfh.st图标库</link>或<link href=\"https://dashboardicons.com\">仪表盘图标库</link>中查找图标。",
|
"logo_from_url_description": "粘贴直接图片URL(svg、png、webp格式)。<link href=\"https://selfh.st/icons\">可在Selfh.st图标库</link>或<link href=\"https://dashboardicons.com\">仪表盘图标库</link>中查找图标。",
|
||||||
@@ -461,5 +461,6 @@
|
|||||||
"locale": "区域设置",
|
"locale": "区域设置",
|
||||||
"ldap_id": "LDAP标识符",
|
"ldap_id": "LDAP标识符",
|
||||||
"reauthentication": "重新认证",
|
"reauthentication": "重新认证",
|
||||||
"clear_filters": "清除筛选条件"
|
"clear_filters": "清除筛选条件",
|
||||||
|
"default_profile_picture": "默认个人资料图片"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,7 +155,7 @@
|
|||||||
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "您確定要撤銷 API 金鑰「{apiKeyName}」嗎?這將會中斷所有使用此金鑰的整合。",
|
"are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "您確定要撤銷 API 金鑰「{apiKeyName}」嗎?這將會中斷所有使用此金鑰的整合。",
|
||||||
"last_used": "上次使用",
|
"last_used": "上次使用",
|
||||||
"actions": "操作",
|
"actions": "操作",
|
||||||
"images_updated_successfully": "圖片更新成功",
|
"images_updated_successfully": "圖片已成功更新。更新過程可能需要數分鐘。",
|
||||||
"general": "一般",
|
"general": "一般",
|
||||||
"configure_smtp_to_send_emails": "啟用電子郵件通知以提醒使用者有來自新裝置或位置的登入。",
|
"configure_smtp_to_send_emails": "啟用電子郵件通知以提醒使用者有來自新裝置或位置的登入。",
|
||||||
"ldap": "LDAP",
|
"ldap": "LDAP",
|
||||||
@@ -461,5 +461,6 @@
|
|||||||
"locale": "地區",
|
"locale": "地區",
|
||||||
"ldap_id": "LDAP 識別碼",
|
"ldap_id": "LDAP 識別碼",
|
||||||
"reauthentication": "重新驗證",
|
"reauthentication": "重新驗證",
|
||||||
"clear_filters": "清除篩選條件"
|
"clear_filters": "清除篩選條件",
|
||||||
|
"default_profile_picture": "預設個人資料照片"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "pocket-id-frontend",
|
"name": "pocket-id-frontend",
|
||||||
"version": "1.14.2",
|
"version": "1.15.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="%lang%">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<link rel="icon" href="/api/application-images/favicon" />
|
<link rel="icon" href="/api/application-images/favicon" />
|
||||||
|
|||||||
@@ -166,6 +166,12 @@
|
|||||||
return filters;
|
return filters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getPrimaryAction(item: T) {
|
||||||
|
if (!actions) return null;
|
||||||
|
const availableActions = actions(item).filter((a) => a.primary);
|
||||||
|
return availableActions.length > 0 ? () => availableActions[0].onClick(item) : null;
|
||||||
|
}
|
||||||
|
|
||||||
export async function refresh() {
|
export async function refresh() {
|
||||||
items = await fetchCallback(requestOptions);
|
items = await fetchCallback(requestOptions);
|
||||||
changePageState(items.pagination.currentPage);
|
changePageState(items.pagination.currentPage);
|
||||||
@@ -248,7 +254,13 @@
|
|||||||
</Table.Header>
|
</Table.Header>
|
||||||
<Table.Body>
|
<Table.Body>
|
||||||
{#each items.data as item}
|
{#each items.data as item}
|
||||||
<Table.Row class={selectedIds?.includes(item.id) ? 'bg-muted/20' : ''}>
|
<Table.Row
|
||||||
|
class={{
|
||||||
|
'bg-muted/20': selectedIds?.includes(item.id),
|
||||||
|
'cursor-pointer': getPrimaryAction(item)
|
||||||
|
}}
|
||||||
|
onclick={getPrimaryAction(item)}
|
||||||
|
>
|
||||||
{#if selectedIds}
|
{#if selectedIds}
|
||||||
<Table.Cell class="w-12">
|
<Table.Cell class="w-12">
|
||||||
<Checkbox
|
<Checkbox
|
||||||
|
|||||||
@@ -55,9 +55,13 @@
|
|||||||
disabled,
|
disabled,
|
||||||
isLoading = false,
|
isLoading = false,
|
||||||
autofocus = false,
|
autofocus = false,
|
||||||
|
onclick,
|
||||||
|
usePromiseLoading = false,
|
||||||
children,
|
children,
|
||||||
...restProps
|
...restProps
|
||||||
}: ButtonProps = $props();
|
}: ButtonProps & {
|
||||||
|
usePromiseLoading?: boolean;
|
||||||
|
} = $props();
|
||||||
|
|
||||||
onMount(async () => {
|
onMount(async () => {
|
||||||
// Using autofocus can be bad for a11y, but in the case of Pocket ID is only used responsibly in places where there are not many choices, and on buttons only where there's descriptive text
|
// Using autofocus can be bad for a11y, but in the case of Pocket ID is only used responsibly in places where there are not many choices, and on buttons only where there's descriptive text
|
||||||
@@ -66,6 +70,19 @@
|
|||||||
setTimeout(() => ref?.focus(), 100);
|
setTimeout(() => ref?.focus(), 100);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
async function handleOnClick(event: any) {
|
||||||
|
if (usePromiseLoading && onclick) {
|
||||||
|
isLoading = true;
|
||||||
|
try {
|
||||||
|
await onclick(event);
|
||||||
|
} finally {
|
||||||
|
isLoading = false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
onclick?.(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if href}
|
{#if href}
|
||||||
@@ -91,6 +108,7 @@
|
|||||||
class={cn(buttonVariants({ variant, size }), className)}
|
class={cn(buttonVariants({ variant, size }), className)}
|
||||||
{type}
|
{type}
|
||||||
disabled={disabled || isLoading}
|
disabled={disabled || isLoading}
|
||||||
|
onclick={handleOnClick}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
>
|
>
|
||||||
{#if isLoading}
|
{#if isLoading}
|
||||||
|
|||||||
@@ -1,5 +1,12 @@
|
|||||||
|
import userStore from '$lib/stores/user-store';
|
||||||
import type { AllAppConfig, AppConfigRawResponse } from '$lib/types/application-configuration';
|
import type { AllAppConfig, AppConfigRawResponse } from '$lib/types/application-configuration';
|
||||||
import { cachedApplicationLogo, cachedBackgroundImage } from '$lib/utils/cached-image-util';
|
import {
|
||||||
|
cachedApplicationLogo,
|
||||||
|
cachedBackgroundImage,
|
||||||
|
cachedDefaultProfilePicture,
|
||||||
|
cachedProfilePicture
|
||||||
|
} from '$lib/utils/cached-image-util';
|
||||||
|
import { get } from 'svelte/store';
|
||||||
import APIService from './api-service';
|
import APIService from './api-service';
|
||||||
|
|
||||||
export default class AppConfigService extends APIService {
|
export default class AppConfigService extends APIService {
|
||||||
@@ -24,14 +31,14 @@ export default class AppConfigService extends APIService {
|
|||||||
|
|
||||||
updateFavicon = async (favicon: File) => {
|
updateFavicon = async (favicon: File) => {
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append('file', favicon!);
|
formData.append('file', favicon);
|
||||||
|
|
||||||
await this.api.put(`/application-images/favicon`, formData);
|
await this.api.put(`/application-images/favicon`, formData);
|
||||||
}
|
};
|
||||||
|
|
||||||
updateLogo = async (logo: File, light = true) => {
|
updateLogo = async (logo: File, light = true) => {
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append('file', logo!);
|
formData.append('file', logo);
|
||||||
|
|
||||||
await this.api.put(`/application-images/logo`, formData, {
|
await this.api.put(`/application-images/logo`, formData, {
|
||||||
params: { light }
|
params: { light }
|
||||||
@@ -39,6 +46,14 @@ export default class AppConfigService extends APIService {
|
|||||||
cachedApplicationLogo.bustCache(light);
|
cachedApplicationLogo.bustCache(light);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
updateDefaultProfilePicture = async (defaultProfilePicture: File) => {
|
||||||
|
const formData = new FormData();
|
||||||
|
formData.append('file', defaultProfilePicture);
|
||||||
|
|
||||||
|
await this.api.put(`/application-images/default-profile-picture`, formData);
|
||||||
|
cachedDefaultProfilePicture.bustCache();
|
||||||
|
};
|
||||||
|
|
||||||
updateBackgroundImage = async (backgroundImage: File) => {
|
updateBackgroundImage = async (backgroundImage: File) => {
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append('file', backgroundImage!);
|
formData.append('file', backgroundImage!);
|
||||||
@@ -47,6 +62,12 @@ export default class AppConfigService extends APIService {
|
|||||||
cachedBackgroundImage.bustCache();
|
cachedBackgroundImage.bustCache();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
deleteDefaultProfilePicture = async () => {
|
||||||
|
await this.api.delete('/application-images/default-profile-picture');
|
||||||
|
cachedDefaultProfilePicture.bustCache();
|
||||||
|
cachedProfilePicture.bustCache(get(userStore)!.id);
|
||||||
|
};
|
||||||
|
|
||||||
sendTestEmail = async () => {
|
sendTestEmail = async () => {
|
||||||
await this.api.post('/application-configuration/test-email');
|
await this.api.post('/application-configuration/test-email');
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -22,5 +22,6 @@ export type AdvancedTableAction<T> = {
|
|||||||
variant?: 'primary' | 'secondary' | 'danger' | 'outline' | 'ghost';
|
variant?: 'primary' | 'secondary' | 'danger' | 'outline' | 'ghost';
|
||||||
onClick: (item: T) => void;
|
onClick: (item: T) => void;
|
||||||
hidden?: boolean;
|
hidden?: boolean;
|
||||||
|
primary?: boolean;
|
||||||
disabled?: boolean;
|
disabled?: boolean;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -20,6 +20,13 @@ export const cachedApplicationLogo: CachableImage = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const cachedDefaultProfilePicture: CachableImage = {
|
||||||
|
getUrl: () =>
|
||||||
|
getCachedImageUrl(new URL('/api/application-images/default-profile-picture', window.location.origin)),
|
||||||
|
bustCache: () =>
|
||||||
|
bustImageCache(new URL('/api/application-images/default-profile-picture', window.location.origin))
|
||||||
|
};
|
||||||
|
|
||||||
export const cachedBackgroundImage: CachableImage = {
|
export const cachedBackgroundImage: CachableImage = {
|
||||||
getUrl: () =>
|
getUrl: () =>
|
||||||
getCachedImageUrl(new URL('/api/application-images/background', window.location.origin)),
|
getCachedImageUrl(new URL('/api/application-images/background', window.location.origin)),
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import { z } from 'zod/v4';
|
|||||||
export async function setLocale(locale: Locale, reload = true) {
|
export async function setLocale(locale: Locale, reload = true) {
|
||||||
await setLocaleForLibraries(locale);
|
await setLocaleForLibraries(locale);
|
||||||
setParaglideLocale(locale, { reload });
|
setParaglideLocale(locale, { reload });
|
||||||
|
document.documentElement.lang = locale;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function setLocaleForLibraries(
|
export async function setLocaleForLibraries(
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
import { Toaster } from '$lib/components/ui/sonner';
|
import { Toaster } from '$lib/components/ui/sonner';
|
||||||
import { m } from '$lib/paraglide/messages';
|
import { m } from '$lib/paraglide/messages';
|
||||||
import { ModeWatcher } from 'mode-watcher';
|
import { ModeWatcher } from 'mode-watcher';
|
||||||
import type { Snippet } from 'svelte';
|
import { type Snippet } from 'svelte';
|
||||||
import '../app.css';
|
import '../app.css';
|
||||||
import type { LayoutData } from './$types';
|
import type { LayoutData } from './$types';
|
||||||
|
|
||||||
|
|||||||
@@ -40,23 +40,40 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function updateImages(
|
async function updateImages(
|
||||||
logoLight: File | null,
|
logoLight: File | undefined,
|
||||||
logoDark: File | null,
|
logoDark: File | undefined,
|
||||||
backgroundImage: File | null,
|
defaultProfilePicture: File | null | undefined,
|
||||||
favicon: File | null
|
backgroundImage: File | undefined,
|
||||||
|
favicon: File | undefined
|
||||||
) {
|
) {
|
||||||
const faviconPromise = favicon ? appConfigService.updateFavicon(favicon) : Promise.resolve();
|
const faviconPromise = favicon ? appConfigService.updateFavicon(favicon) : Promise.resolve();
|
||||||
|
|
||||||
const lightLogoPromise = logoLight
|
const lightLogoPromise = logoLight
|
||||||
? appConfigService.updateLogo(logoLight, true)
|
? appConfigService.updateLogo(logoLight, true)
|
||||||
: Promise.resolve();
|
: Promise.resolve();
|
||||||
|
|
||||||
const darkLogoPromise = logoDark
|
const darkLogoPromise = logoDark
|
||||||
? appConfigService.updateLogo(logoDark, false)
|
? appConfigService.updateLogo(logoDark, false)
|
||||||
: Promise.resolve();
|
: Promise.resolve();
|
||||||
|
|
||||||
|
const defaultProfilePicturePromise =
|
||||||
|
defaultProfilePicture === null
|
||||||
|
? appConfigService.deleteDefaultProfilePicture()
|
||||||
|
: defaultProfilePicture
|
||||||
|
? appConfigService.updateDefaultProfilePicture(defaultProfilePicture)
|
||||||
|
: Promise.resolve();
|
||||||
|
|
||||||
const backgroundImagePromise = backgroundImage
|
const backgroundImagePromise = backgroundImage
|
||||||
? appConfigService.updateBackgroundImage(backgroundImage)
|
? appConfigService.updateBackgroundImage(backgroundImage)
|
||||||
: Promise.resolve();
|
: Promise.resolve();
|
||||||
|
|
||||||
await Promise.all([lightLogoPromise, darkLogoPromise, backgroundImagePromise, faviconPromise])
|
await Promise.all([
|
||||||
|
lightLogoPromise,
|
||||||
|
darkLogoPromise,
|
||||||
|
defaultProfilePicturePromise,
|
||||||
|
backgroundImagePromise,
|
||||||
|
faviconPromise
|
||||||
|
])
|
||||||
.then(() => toast.success(m.images_updated_successfully()))
|
.then(() => toast.success(m.images_updated_successfully()))
|
||||||
.catch(axiosErrorToast);
|
.catch(axiosErrorToast);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import FileInput from '$lib/components/form/file-input.svelte';
|
import FileInput from '$lib/components/form/file-input.svelte';
|
||||||
|
import { Button } from '$lib/components/ui/button';
|
||||||
import { Label } from '$lib/components/ui/label';
|
import { Label } from '$lib/components/ui/label';
|
||||||
import { cn } from '$lib/utils/style';
|
import { cn } from '$lib/utils/style';
|
||||||
import { LucideUpload } from '@lucide/svelte';
|
import { LucideImageOff, LucideUpload, LucideX } from '@lucide/svelte';
|
||||||
import type { HTMLAttributes } from 'svelte/elements';
|
import type { HTMLAttributes } from 'svelte/elements';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
@@ -13,54 +14,98 @@
|
|||||||
imageURL,
|
imageURL,
|
||||||
accept = 'image/png, image/jpeg, image/svg+xml, image/gif, image/webp, image/avif, image/heic',
|
accept = 'image/png, image/jpeg, image/svg+xml, image/gif, image/webp, image/avif, image/heic',
|
||||||
forceColorScheme,
|
forceColorScheme,
|
||||||
|
isResetable = false,
|
||||||
|
isImageSet = $bindable(true),
|
||||||
...restProps
|
...restProps
|
||||||
}: HTMLAttributes<HTMLDivElement> & {
|
}: HTMLAttributes<HTMLDivElement> & {
|
||||||
id: string;
|
id: string;
|
||||||
imageClass: string;
|
imageClass: string;
|
||||||
label: string;
|
label: string;
|
||||||
image: File | null;
|
image: File | null | undefined;
|
||||||
imageURL: string;
|
imageURL: string;
|
||||||
forceColorScheme?: 'light' | 'dark';
|
forceColorScheme?: 'light' | 'dark';
|
||||||
accept?: string;
|
accept?: string;
|
||||||
|
isResetable?: boolean;
|
||||||
|
isImageSet?: boolean;
|
||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
let imageDataURL = $state(imageURL);
|
let imageDataURL = $state(imageURL);
|
||||||
|
|
||||||
|
$effect(() => {
|
||||||
|
if (image) {
|
||||||
|
isImageSet = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
function onImageChange(e: Event) {
|
function onImageChange(e: Event) {
|
||||||
const file = (e.target as HTMLInputElement).files?.[0] || null;
|
const file = (e.target as HTMLInputElement).files?.[0] || undefined;
|
||||||
if (!file) return;
|
if (!file) return;
|
||||||
|
|
||||||
image = file;
|
image = file;
|
||||||
imageDataURL = URL.createObjectURL(file);
|
imageDataURL = URL.createObjectURL(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function onReset() {
|
||||||
|
image = null;
|
||||||
|
imageDataURL = imageURL;
|
||||||
|
isImageSet = false;
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="flex flex-col items-start md:flex-row md:items-center" {...restProps}>
|
<div class="flex flex-col items-start md:flex-row md:items-center" {...restProps}>
|
||||||
<Label class="w-52" for={id}>{label}</Label>
|
<Label class="w-52" for={id}>{label}</Label>
|
||||||
<FileInput {id} variant="secondary" {accept} onchange={onImageChange}>
|
<FileInput {id} variant="secondary" {accept} onchange={onImageChange}>
|
||||||
<div
|
<div
|
||||||
class={{
|
class={cn('group/image relative flex items-center rounded transition-colors', {
|
||||||
'group relative flex items-center rounded': true,
|
|
||||||
'bg-[#F5F5F5]': forceColorScheme === 'light',
|
'bg-[#F5F5F5]': forceColorScheme === 'light',
|
||||||
'bg-[#262626]': forceColorScheme === 'dark',
|
'bg-[#262626]': forceColorScheme === 'dark',
|
||||||
'bg-muted': !forceColorScheme
|
'bg-muted': !forceColorScheme
|
||||||
}}
|
})}
|
||||||
>
|
>
|
||||||
<img
|
{#if !isImageSet}
|
||||||
class={cn(
|
<div
|
||||||
'h-full w-full rounded object-cover p-3 transition-opacity duration-200 group-hover:opacity-10',
|
class={cn(
|
||||||
imageClass
|
'flex h-full w-full items-center justify-center p-3 transition-opacity duration-200',
|
||||||
)}
|
'group-hover/image:opacity-10 group-has-[button:hover]/image:opacity-100',
|
||||||
src={imageDataURL}
|
imageClass
|
||||||
alt={label}
|
)}
|
||||||
/>
|
>
|
||||||
|
<LucideImageOff class="text-muted-foreground" />
|
||||||
|
</div>
|
||||||
|
{:else}
|
||||||
|
<img
|
||||||
|
class={cn(
|
||||||
|
'h-full w-full rounded object-cover p-3 transition-opacity duration-200',
|
||||||
|
'group-hover/image:opacity-10 group-has-[button:hover]/image:opacity-100',
|
||||||
|
imageClass
|
||||||
|
)}
|
||||||
|
src={imageDataURL}
|
||||||
|
alt={label}
|
||||||
|
onerror={() => (isImageSet = false)}
|
||||||
|
/>
|
||||||
|
{/if}
|
||||||
<LucideUpload
|
<LucideUpload
|
||||||
class={{
|
class={cn(
|
||||||
'absolute top-1/2 left-1/2 size-5 -translate-x-1/2 -translate-y-1/2 transform font-medium opacity-0 transition-opacity group-hover:opacity-100': true,
|
'absolute top-1/2 left-1/2 size-5 -translate-x-1/2 -translate-y-1/2 transform font-medium opacity-0 transition-opacity duration-200',
|
||||||
'text-black': forceColorScheme === 'light',
|
'group-hover/image:opacity-100 group-has-[button:hover]/image:opacity-0',
|
||||||
'text-white': forceColorScheme === 'dark'
|
{
|
||||||
}}
|
'text-black': forceColorScheme === 'light',
|
||||||
|
'text-white': forceColorScheme === 'dark'
|
||||||
|
}
|
||||||
|
)}
|
||||||
/>
|
/>
|
||||||
|
{#if isResetable && isImageSet}
|
||||||
|
<Button
|
||||||
|
size="icon"
|
||||||
|
onclick={(e) => {
|
||||||
|
e.stopPropagation();
|
||||||
|
onReset();
|
||||||
|
}}
|
||||||
|
class="absolute -top-2 -right-2 size-6 rounded-full shadow-md"
|
||||||
|
>
|
||||||
|
<LucideX class="size-3" />
|
||||||
|
</Button>
|
||||||
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</FileInput>
|
</FileInput>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,24 +1,32 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Button from '$lib/components/ui/button/button.svelte';
|
import Button from '$lib/components/ui/button/button.svelte';
|
||||||
import { m } from '$lib/paraglide/messages';
|
import { m } from '$lib/paraglide/messages';
|
||||||
import { cachedApplicationLogo, cachedBackgroundImage } from '$lib/utils/cached-image-util';
|
import {
|
||||||
|
cachedApplicationLogo,
|
||||||
|
cachedBackgroundImage,
|
||||||
|
cachedDefaultProfilePicture
|
||||||
|
} from '$lib/utils/cached-image-util';
|
||||||
import ApplicationImage from './application-image.svelte';
|
import ApplicationImage from './application-image.svelte';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
callback
|
callback
|
||||||
}: {
|
}: {
|
||||||
callback: (
|
callback: (
|
||||||
logoLight: File | null,
|
logoLight: File | undefined,
|
||||||
logoDark: File | null,
|
logoDark: File | undefined,
|
||||||
backgroundImage: File | null,
|
defaultProfilePicture: File | null | undefined,
|
||||||
favicon: File | null
|
backgroundImage: File | undefined,
|
||||||
|
favicon: File | undefined
|
||||||
) => void;
|
) => void;
|
||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
let logoLight = $state<File | null>(null);
|
let logoLight = $state<File | undefined>();
|
||||||
let logoDark = $state<File | null>(null);
|
let logoDark = $state<File | undefined>();
|
||||||
let backgroundImage = $state<File | null>(null);
|
let defaultProfilePicture = $state<File | null | undefined>();
|
||||||
let favicon = $state<File | null>(null);
|
let backgroundImage = $state<File | undefined>();
|
||||||
|
let favicon = $state<File | undefined>();
|
||||||
|
|
||||||
|
let defaultProfilePictureSet = $state(true);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="flex flex-col gap-8">
|
<div class="flex flex-col gap-8">
|
||||||
@@ -46,6 +54,15 @@
|
|||||||
imageURL={cachedApplicationLogo.getUrl(false)}
|
imageURL={cachedApplicationLogo.getUrl(false)}
|
||||||
forceColorScheme="dark"
|
forceColorScheme="dark"
|
||||||
/>
|
/>
|
||||||
|
<ApplicationImage
|
||||||
|
id="default-profile-picture"
|
||||||
|
imageClass="size-24"
|
||||||
|
label={m.default_profile_picture()}
|
||||||
|
isResetable
|
||||||
|
bind:image={defaultProfilePicture}
|
||||||
|
imageURL={cachedDefaultProfilePicture.getUrl()}
|
||||||
|
isImageSet={defaultProfilePictureSet}
|
||||||
|
/>
|
||||||
<ApplicationImage
|
<ApplicationImage
|
||||||
id="background-image"
|
id="background-image"
|
||||||
imageClass="h-[350px] max-w-[500px]"
|
imageClass="h-[350px] max-w-[500px]"
|
||||||
@@ -55,7 +72,10 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-end">
|
<div class="flex justify-end">
|
||||||
<Button class="mt-5" onclick={() => callback(logoLight, logoDark, backgroundImage, favicon)}
|
<Button
|
||||||
|
class="mt-5"
|
||||||
|
usePromiseLoading
|
||||||
|
onclick={() => callback(logoLight, logoDark, defaultProfilePicture, backgroundImage, favicon)}
|
||||||
>{m.save()}</Button
|
>{m.save()}</Button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -70,6 +70,7 @@
|
|||||||
const actions: CreateAdvancedTableActions<OidcClientWithAllowedUserGroupsCount> = (_) => [
|
const actions: CreateAdvancedTableActions<OidcClientWithAllowedUserGroupsCount> = (_) => [
|
||||||
{
|
{
|
||||||
label: m.edit(),
|
label: m.edit(),
|
||||||
|
primary: true,
|
||||||
icon: LucidePencil,
|
icon: LucidePencil,
|
||||||
onClick: (client) => goto(`/settings/admin/oidc-clients/${client.id}`)
|
onClick: (client) => goto(`/settings/admin/oidc-clients/${client.id}`)
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -41,6 +41,7 @@
|
|||||||
const actions: CreateAdvancedTableActions<UserGroupWithUserCount> = (group) => [
|
const actions: CreateAdvancedTableActions<UserGroupWithUserCount> = (group) => [
|
||||||
{
|
{
|
||||||
label: m.edit(),
|
label: m.edit(),
|
||||||
|
primary: true,
|
||||||
icon: LucidePencil,
|
icon: LucidePencil,
|
||||||
variant: 'ghost',
|
variant: 'ghost',
|
||||||
onClick: (group) => goto(`/settings/admin/user-groups/${group.id}`)
|
onClick: (group) => goto(`/settings/admin/user-groups/${group.id}`)
|
||||||
|
|||||||
@@ -143,6 +143,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: m.edit(),
|
label: m.edit(),
|
||||||
|
primary: true,
|
||||||
icon: LucidePencil,
|
icon: LucidePencil,
|
||||||
onClick: (u) => goto(`/settings/admin/users/${u.id}`)
|
onClick: (u) => goto(`/settings/admin/users/${u.id}`)
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -69,6 +69,10 @@ else
|
|||||||
# FreeBSD builds
|
# FreeBSD builds
|
||||||
build_platform "freebsd-amd64" "freebsd" "amd64" ""
|
build_platform "freebsd-amd64" "freebsd" "amd64" ""
|
||||||
build_platform "freebsd-arm64" "freebsd" "arm64" ""
|
build_platform "freebsd-arm64" "freebsd" "arm64" ""
|
||||||
|
|
||||||
|
# OpenBSD builds
|
||||||
|
build_platform "openbsd-amd64" "openbsd" "amd64" ""
|
||||||
|
build_platform "openbsd-arm64" "openbsd" "arm64" ""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Compilation done"
|
echo "Compilation done"
|
||||||
|
|||||||
@@ -122,10 +122,13 @@ test('Update application images', async ({ page }) => {
|
|||||||
await page.getByLabel('Favicon').setInputFiles('assets/w3-schools-favicon.ico');
|
await page.getByLabel('Favicon').setInputFiles('assets/w3-schools-favicon.ico');
|
||||||
await page.getByLabel('Light Mode Logo').setInputFiles('assets/pingvin-share-logo.png');
|
await page.getByLabel('Light Mode Logo').setInputFiles('assets/pingvin-share-logo.png');
|
||||||
await page.getByLabel('Dark Mode Logo').setInputFiles('assets/nextcloud-logo.png');
|
await page.getByLabel('Dark Mode Logo').setInputFiles('assets/nextcloud-logo.png');
|
||||||
|
await page.getByLabel('Default Profile Picture').setInputFiles('assets/pingvin-share-logo.png');
|
||||||
await page.getByLabel('Background Image').setInputFiles('assets/clouds.jpg');
|
await page.getByLabel('Background Image').setInputFiles('assets/clouds.jpg');
|
||||||
await page.getByRole('button', { name: 'Save' }).last().click();
|
await page.getByRole('button', { name: 'Save' }).last().click();
|
||||||
|
|
||||||
await expect(page.locator('[data-type="success"]')).toHaveText('Images updated successfully');
|
await expect(page.locator('[data-type="success"]')).toHaveText(
|
||||||
|
'Images updated successfully. It may take a few minutes to update.'
|
||||||
|
);
|
||||||
|
|
||||||
await page.request
|
await page.request
|
||||||
.get('/api/application-images/favicon')
|
.get('/api/application-images/favicon')
|
||||||
|
|||||||
Reference in New Issue
Block a user