summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcpanato <ctadeu@gmail.com>2018-07-12 19:50:16 +0200
committercpanato <ctadeu@gmail.com>2018-07-12 19:50:16 +0200
commitadc56ae78df2a84c14c5e2921ec9cb14817a2474 (patch)
treea66d4646ecc3baef4d365f7148fe3921ab267e15
parent8cad7070acc537d070edd1029fe0c6ce422ab0ed (diff)
parent2e861c4df4063f325df40861ee045c0136d34f1e (diff)
downloadchat-adc56ae78df2a84c14c5e2921ec9cb14817a2474.tar.gz
chat-adc56ae78df2a84c14c5e2921ec9cb14817a2474.tar.bz2
chat-adc56ae78df2a84c14c5e2921ec9cb14817a2474.zip
Merge remote-tracking branch 'upstream/release-5.1' into release-5.1-daily-merge-20180712
-rw-r--r--api4/commands_test.go25
-rw-r--r--api4/image_test.go9
-rw-r--r--api4/oauth_test.go36
-rw-r--r--api4/post_test.go9
-rw-r--r--api4/team_test.go14
-rw-r--r--api4/user_test.go64
-rw-r--r--app/notification.go36
-rw-r--r--i18n/de.json24
-rw-r--r--i18n/en.json48
-rw-r--r--i18n/es.json28
-rw-r--r--i18n/fr.json456
-rw-r--r--i18n/it.json26
-rw-r--r--i18n/ja.json24
-rw-r--r--i18n/ko.json142
-rw-r--r--i18n/nl.json24
-rw-r--r--i18n/pl.json24
-rw-r--r--i18n/pt-BR.json26
-rw-r--r--i18n/ru.json24
-rw-r--r--i18n/tr.json24
-rw-r--r--i18n/zh-CN.json26
-rw-r--r--i18n/zh-TW.json24
-rw-r--r--model/user.go12
-rw-r--r--web/handlers.go4
-rw-r--r--web/saml.go3
24 files changed, 797 insertions, 335 deletions
diff --git a/api4/commands_test.go b/api4/commands_test.go
index cb960c608..66238df7d 100644
--- a/api4/commands_test.go
+++ b/api4/commands_test.go
@@ -163,6 +163,11 @@ func TestLoadTestHelpCommands(t *testing.T) {
Client := th.Client
channel := th.BasicChannel
+ enableTesting := th.App.Config().ServiceSettings.EnableTesting
+ defer func() {
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableTesting = enableTesting })
+ }()
+
th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableTesting = true })
rs := Client.Must(Client.ExecuteCommand(channel.Id, "/test help")).(*model.CommandResponse)
@@ -180,6 +185,11 @@ func TestLoadTestSetupCommands(t *testing.T) {
Client := th.Client
channel := th.BasicChannel
+ enableTesting := th.App.Config().ServiceSettings.EnableTesting
+ defer func() {
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableTesting = enableTesting })
+ }()
+
th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableTesting = true })
rs := Client.Must(Client.ExecuteCommand(channel.Id, "/test setup fuzz 1 1 1")).(*model.CommandResponse)
@@ -197,6 +207,11 @@ func TestLoadTestUsersCommands(t *testing.T) {
Client := th.Client
channel := th.BasicChannel
+ enableTesting := th.App.Config().ServiceSettings.EnableTesting
+ defer func() {
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableTesting = enableTesting })
+ }()
+
th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableTesting = true })
rs := Client.Must(Client.ExecuteCommand(channel.Id, "/test users fuzz 1 2")).(*model.CommandResponse)
@@ -214,6 +229,11 @@ func TestLoadTestChannelsCommands(t *testing.T) {
Client := th.Client
channel := th.BasicChannel
+ enableTesting := th.App.Config().ServiceSettings.EnableTesting
+ defer func() {
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableTesting = enableTesting })
+ }()
+
th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableTesting = true })
rs := Client.Must(Client.ExecuteCommand(channel.Id, "/test channels fuzz 1 2")).(*model.CommandResponse)
@@ -231,6 +251,11 @@ func TestLoadTestPostsCommands(t *testing.T) {
Client := th.Client
channel := th.BasicChannel
+ enableTesting := th.App.Config().ServiceSettings.EnableTesting
+ defer func() {
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableTesting = enableTesting })
+ }()
+
th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableTesting = true })
rs := Client.Must(Client.ExecuteCommand(channel.Id, "/test posts fuzz 2 3 2")).(*model.CommandResponse)
diff --git a/api4/image_test.go b/api4/image_test.go
index aa3619cdd..3b029ac72 100644
--- a/api4/image_test.go
+++ b/api4/image_test.go
@@ -28,6 +28,15 @@ func TestGetImage(t *testing.T) {
require.NoError(t, err)
r.Header.Set(model.HEADER_AUTH, th.Client.AuthType+" "+th.Client.AuthToken)
+ imageProxyType := th.App.Config().ServiceSettings.ImageProxyType
+ imageProxyOptions := th.App.Config().ServiceSettings.ImageProxyOptions
+ imageProxyURL := th.App.Config().ServiceSettings.ImageProxyURL
+ defer func() {
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.ImageProxyType = imageProxyType })
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.ImageProxyOptions = imageProxyOptions })
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.ImageProxyOptions = imageProxyURL })
+ }()
+
th.App.UpdateConfig(func(cfg *model.Config) {
cfg.ServiceSettings.ImageProxyType = nil
})
diff --git a/api4/oauth_test.go b/api4/oauth_test.go
index 6bbd99ccc..5415e485e 100644
--- a/api4/oauth_test.go
+++ b/api4/oauth_test.go
@@ -26,8 +26,10 @@ func TestCreateOAuthApp(t *testing.T) {
AdminClient := th.SystemAdminClient
defaultRolePermissions := th.SaveDefaultRolePermissions()
+ enableOAuthServiceProvider := th.App.Config().ServiceSettings.EnableOAuthServiceProvider
defer func() {
th.RestoreDefaultRolePermissions(defaultRolePermissions)
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableOAuthServiceProvider = enableOAuthServiceProvider })
}()
// Grant permission to regular users.
@@ -97,8 +99,10 @@ func TestUpdateOAuthApp(t *testing.T) {
AdminClient := th.SystemAdminClient
defaultRolePermissions := th.SaveDefaultRolePermissions()
+ enableOAuthServiceProvider := th.App.Config().ServiceSettings.EnableOAuthServiceProvider
defer func() {
th.RestoreDefaultRolePermissions(defaultRolePermissions)
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableOAuthServiceProvider = enableOAuthServiceProvider })
}()
// Grant permission to regular users.
@@ -212,8 +216,10 @@ func TestGetOAuthApps(t *testing.T) {
AdminClient := th.SystemAdminClient
defaultRolePermissions := th.SaveDefaultRolePermissions()
+ enableOAuthServiceProvider := th.App.Config().ServiceSettings.EnableOAuthServiceProvider
defer func() {
th.RestoreDefaultRolePermissions(defaultRolePermissions)
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableOAuthServiceProvider = enableOAuthServiceProvider })
}()
// Grant permission to regular users.
@@ -284,8 +290,10 @@ func TestGetOAuthApp(t *testing.T) {
AdminClient := th.SystemAdminClient
defaultRolePermissions := th.SaveDefaultRolePermissions()
+ enableOAuthServiceProvider := th.App.Config().ServiceSettings.EnableOAuthServiceProvider
defer func() {
th.RestoreDefaultRolePermissions(defaultRolePermissions)
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableOAuthServiceProvider = enableOAuthServiceProvider })
}()
// Grant permission to regular users.
@@ -358,8 +366,10 @@ func TestGetOAuthAppInfo(t *testing.T) {
AdminClient := th.SystemAdminClient
defaultRolePermissions := th.SaveDefaultRolePermissions()
+ enableOAuthServiceProvider := th.App.Config().ServiceSettings.EnableOAuthServiceProvider
defer func() {
th.RestoreDefaultRolePermissions(defaultRolePermissions)
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableOAuthServiceProvider = enableOAuthServiceProvider })
}()
// Grant permission to regular users.
@@ -432,8 +442,10 @@ func TestDeleteOAuthApp(t *testing.T) {
AdminClient := th.SystemAdminClient
defaultRolePermissions := th.SaveDefaultRolePermissions()
+ enableOAuthServiceProvider := th.App.Config().ServiceSettings.EnableOAuthServiceProvider
defer func() {
th.RestoreDefaultRolePermissions(defaultRolePermissions)
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableOAuthServiceProvider = enableOAuthServiceProvider })
}()
// Grant permission to regular users.
@@ -500,8 +512,10 @@ func TestRegenerateOAuthAppSecret(t *testing.T) {
AdminClient := th.SystemAdminClient
defaultRolePermissions := th.SaveDefaultRolePermissions()
+ enableOAuthServiceProvider := th.App.Config().ServiceSettings.EnableOAuthServiceProvider
defer func() {
th.RestoreDefaultRolePermissions(defaultRolePermissions)
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableOAuthServiceProvider = enableOAuthServiceProvider })
}()
// Grant permission to regular users.
@@ -631,6 +645,11 @@ func TestAuthorizeOAuthApp(t *testing.T) {
Client := th.Client
AdminClient := th.SystemAdminClient
+ enableOAuth := th.App.Config().ServiceSettings.EnableOAuthServiceProvider
+ defer func() {
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableOAuthServiceProvider = enableOAuth })
+ }()
+
th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableOAuthServiceProvider = true })
oapp := &model.OAuthApp{Name: GenerateTestAppName(), Homepage: "https://nowhere.com", Description: "test", CallbackUrls: []string{"https://nowhere.com"}}
@@ -958,6 +977,23 @@ func TestOAuthComplete(t *testing.T) {
Client := th.Client
+ gitLabSettingsEnable := th.App.Config().GitLabSettings.Enable
+ gitLabSettingsAuthEndpoint := th.App.Config().GitLabSettings.AuthEndpoint
+ gitLabSettingsId := th.App.Config().GitLabSettings.Id
+ gitLabSettingsSecret := th.App.Config().GitLabSettings.Secret
+ gitLabSettingsTokenEndpoint := th.App.Config().GitLabSettings.TokenEndpoint
+ gitLabSettingsUserApiEndpoint := th.App.Config().GitLabSettings.UserApiEndpoint
+ enableOAuthServiceProvider := th.App.Config().ServiceSettings.EnableOAuthServiceProvider
+ defer func() {
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.GitLabSettings.Enable = gitLabSettingsEnable })
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.GitLabSettings.AuthEndpoint = gitLabSettingsAuthEndpoint })
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.GitLabSettings.Id = gitLabSettingsId })
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.GitLabSettings.Secret = gitLabSettingsSecret })
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.GitLabSettings.TokenEndpoint = gitLabSettingsTokenEndpoint })
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.GitLabSettings.UserApiEndpoint = gitLabSettingsUserApiEndpoint })
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableOAuthServiceProvider = enableOAuthServiceProvider })
+ }()
+
r, err := HttpGet(Client.Url+"/login/gitlab/complete?code=123", Client.HttpClient, "", true)
assert.NotNil(t, err)
closeBody(r)
diff --git a/api4/post_test.go b/api4/post_test.go
index 63d71b5bd..720fdc410 100644
--- a/api4/post_test.go
+++ b/api4/post_test.go
@@ -170,6 +170,15 @@ func testCreatePostWithOutgoingHook(
team := th.BasicTeam
channel := th.BasicChannel
+ enableOutgoingWebhooks := th.App.Config().ServiceSettings.EnableOutgoingWebhooks
+ allowedUntrustedInternalConnections := th.App.Config().ServiceSettings.AllowedUntrustedInternalConnections
+ defer func() {
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableOutgoingWebhooks = enableOutgoingWebhooks })
+ th.App.UpdateConfig(func(cfg *model.Config) {
+ cfg.ServiceSettings.AllowedUntrustedInternalConnections = allowedUntrustedInternalConnections
+ })
+ }()
+
th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableOutgoingWebhooks = true })
th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.AllowedUntrustedInternalConnections = "localhost 127.0.0.1"
diff --git a/api4/team_test.go b/api4/team_test.go
index 307e91635..fc49b794f 100644
--- a/api4/team_test.go
+++ b/api4/team_test.go
@@ -540,6 +540,11 @@ func TestPermanentDeleteTeam(t *testing.T) {
team := &model.Team{DisplayName: "DisplayName", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TEAM_OPEN}
team, _ = Client.CreateTeam(team)
+ enableAPITeamDeletion := *th.App.Config().ServiceSettings.EnableAPITeamDeletion
+ defer func() {
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableAPITeamDeletion = &enableAPITeamDeletion })
+ }()
+
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableAPITeamDeletion = false })
// Does not error when deletion is disabled, just soft deletes
@@ -1935,15 +1940,20 @@ func TestInviteUsersToTeam(t *testing.T) {
utils.DeleteMailBox(user1)
utils.DeleteMailBox(user2)
- th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableEmailInvitations = false })
+ enableEmailInvitations := *th.App.Config().ServiceSettings.EnableEmailInvitations
+ restrictCreationToDomains := th.App.Config().TeamSettings.RestrictCreationToDomains
+ defer func() {
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.ServiceSettings.EnableEmailInvitations = &enableEmailInvitations })
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.TeamSettings.RestrictCreationToDomains = restrictCreationToDomains })
+ }()
+ th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableEmailInvitations = false })
_, resp := th.SystemAdminClient.InviteUsersToTeam(th.BasicTeam.Id, emailList)
if resp.Error == nil {
t.Fatal("Should be disabled")
}
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableEmailInvitations = true })
-
okMsg, resp := th.SystemAdminClient.InviteUsersToTeam(th.BasicTeam.Id, emailList)
CheckNoError(t, resp)
if !okMsg {
diff --git a/api4/user_test.go b/api4/user_test.go
index ad77c8c4c..4cbaf449a 100644
--- a/api4/user_test.go
+++ b/api4/user_test.go
@@ -22,6 +22,13 @@ func TestCreateUser(t *testing.T) {
Client := th.Client
AdminClient := th.SystemAdminClient
+ enableOpenServer := th.App.Config().TeamSettings.EnableOpenServer
+ enableUserCreation := th.App.Config().TeamSettings.EnableUserCreation
+ defer func() {
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.TeamSettings.EnableOpenServer = enableOpenServer })
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.TeamSettings.EnableUserCreation = enableUserCreation })
+ }()
+
user := model.User{Email: th.GenerateTestEmail(), Nickname: "Corey Hulen", Password: "hello1", Username: GenerateTestUsername(), Roles: model.SYSTEM_ADMIN_ROLE_ID + " " + model.SYSTEM_USER_ROLE_ID}
ruser, resp := Client.CreateUser(&user)
@@ -161,6 +168,12 @@ func TestCreateUserWithToken(t *testing.T) {
})
t.Run("EnableUserCreationDisable", func(t *testing.T) {
+
+ enableUserCreation := th.App.Config().TeamSettings.EnableUserCreation
+ defer func() {
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.TeamSettings.EnableUserCreation = enableUserCreation })
+ }()
+
user := model.User{Email: th.GenerateTestEmail(), Nickname: "Corey Hulen", Password: "hello1", Username: GenerateTestUsername(), Roles: model.SYSTEM_ADMIN_ROLE_ID + " " + model.SYSTEM_USER_ROLE_ID}
token := model.NewToken(
@@ -176,7 +189,6 @@ func TestCreateUserWithToken(t *testing.T) {
CheckNotImplementedStatus(t, resp)
CheckErrorMessage(t, resp, "api.user.create_user.signup_email_disabled.app_error")
- th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.EnableUserCreation = true })
})
t.Run("EnableOpenServerDisable", func(t *testing.T) {
@@ -188,6 +200,11 @@ func TestCreateUserWithToken(t *testing.T) {
)
<-th.App.Srv.Store.Token().Save(token)
+ enableOpenServer := th.App.Config().TeamSettings.EnableOpenServer
+ defer func() {
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.TeamSettings.EnableOpenServer = enableOpenServer })
+ }()
+
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.EnableOpenServer = false })
ruser, resp := Client.CreateUserWithToken(&user, token.Token)
@@ -270,6 +287,11 @@ func TestCreateUserWithInviteId(t *testing.T) {
t.Run("EnableUserCreationDisable", func(t *testing.T) {
user := model.User{Email: th.GenerateTestEmail(), Nickname: "Corey Hulen", Password: "hello1", Username: GenerateTestUsername(), Roles: model.SYSTEM_ADMIN_ROLE_ID + " " + model.SYSTEM_USER_ROLE_ID}
+ enableUserCreation := th.App.Config().TeamSettings.EnableUserCreation
+ defer func() {
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.TeamSettings.EnableUserCreation = enableUserCreation })
+ }()
+
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.EnableUserCreation = false })
inviteId := th.BasicTeam.InviteId
@@ -277,13 +299,16 @@ func TestCreateUserWithInviteId(t *testing.T) {
_, resp := Client.CreateUserWithInviteId(&user, inviteId)
CheckNotImplementedStatus(t, resp)
CheckErrorMessage(t, resp, "api.user.create_user.signup_email_disabled.app_error")
-
- th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.EnableUserCreation = true })
})
t.Run("EnableOpenServerDisable", func(t *testing.T) {
user := model.User{Email: th.GenerateTestEmail(), Nickname: "Corey Hulen", Password: "hello1", Username: GenerateTestUsername(), Roles: model.SYSTEM_ADMIN_ROLE_ID + " " + model.SYSTEM_USER_ROLE_ID}
+ enableOpenServer := th.App.Config().TeamSettings.EnableOpenServer
+ defer func() {
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.TeamSettings.EnableOpenServer = enableOpenServer })
+ }()
+
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.EnableOpenServer = false })
inviteId := th.BasicTeam.InviteId
@@ -332,6 +357,13 @@ func TestGetUser(t *testing.T) {
th.App.UpdateUser(user, false)
+ showEmailAddress := th.App.Config().PrivacySettings.ShowEmailAddress
+ showFullName := th.App.Config().PrivacySettings.ShowFullName
+ defer func() {
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowEmailAddress = showEmailAddress })
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowFullName = showFullName })
+ }()
+
ruser, resp := Client.GetUser(user.Id, "")
CheckNoError(t, resp)
CheckUserSanitization(t, ruser)
@@ -393,6 +425,13 @@ func TestGetUserByUsername(t *testing.T) {
user := th.BasicUser
+ showEmailAddress := th.App.Config().PrivacySettings.ShowEmailAddress
+ showFullName := th.App.Config().PrivacySettings.ShowFullName
+ defer func() {
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowEmailAddress = showEmailAddress })
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowFullName = showFullName })
+ }()
+
ruser, resp := Client.GetUserByUsername(user.Username, "")
CheckNoError(t, resp)
CheckUserSanitization(t, ruser)
@@ -452,6 +491,13 @@ func TestGetUserByEmail(t *testing.T) {
defer th.TearDown()
Client := th.Client
+ showEmailAddress := th.App.Config().PrivacySettings.ShowEmailAddress
+ showFullName := th.App.Config().PrivacySettings.ShowFullName
+ defer func() {
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowEmailAddress = showEmailAddress })
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowFullName = showFullName })
+ }()
+
user := th.CreateUser()
ruser, resp := Client.GetUserByEmail(user.Email, "")
@@ -510,6 +556,13 @@ func TestSearchUsers(t *testing.T) {
defer th.TearDown()
Client := th.Client
+ showEmailAddress := th.App.Config().PrivacySettings.ShowEmailAddress
+ showFullName := th.App.Config().PrivacySettings.ShowFullName
+ defer func() {
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowEmailAddress = showEmailAddress })
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowFullName = showFullName })
+ }()
+
search := &model.UserSearch{Term: th.BasicUser.Username}
users, resp := Client.SearchUsers(search)
@@ -696,6 +749,11 @@ func TestAutocompleteUsers(t *testing.T) {
channelId := th.BasicChannel.Id
username := th.BasicUser.Username
+ showFullName := th.App.Config().PrivacySettings.ShowFullName
+ defer func() {
+ th.App.UpdateConfig(func(cfg *model.Config) { cfg.PrivacySettings.ShowFullName = showFullName })
+ }()
+
rusers, resp := Client.AutocompleteUsersInChannel(teamId, channelId, username, "")
CheckNoError(t, resp)
diff --git a/app/notification.go b/app/notification.go
index 8da581c00..b4d36291d 100644
--- a/app/notification.go
+++ b/app/notification.go
@@ -694,26 +694,15 @@ func (a *App) GetMessageForNotification(post *model.Post, translateFunc i18n.Tra
func (a *App) sendPushNotification(post *model.Post, user *model.User, channel *model.Channel, channelName string, sender *model.User, senderName string,
explicitMention, channelWideMention bool, replyToThreadType string) *model.AppError {
- contentsConfig := *a.Config().EmailSettings.PushNotificationContents
+ cfg := a.Config()
+ contentsConfig := *cfg.EmailSettings.PushNotificationContents
+ teammateNameConfig := *cfg.TeamSettings.TeammateNameDisplay
sessions, err := a.getMobileAppSessions(user.Id)
+ sentBySystem := senderName == utils.T("system.message.name")
if err != nil {
return err
}
- if channel.Type == model.CHANNEL_DIRECT {
- if senderName == utils.T("system.message.name") {
- channelName = senderName
- } else {
- preference, prefError := a.GetPreferenceByCategoryAndNameForUser(user.Id, model.PREFERENCE_CATEGORY_DISPLAY_SETTINGS, "name_format")
- if prefError != nil {
- channelName = fmt.Sprintf("@%v", senderName)
- } else {
- channelName = fmt.Sprintf("@%v", sender.GetDisplayName(preference.Value))
- senderName = channelName
- }
- }
- }
-
msg := model.PushNotification{}
if badge := <-a.Srv.Store.User().GetUnreadCount(user.Id); badge.Err != nil {
msg.Badge = 1
@@ -731,15 +720,28 @@ func (a *App) sendPushNotification(post *model.Post, user *model.User, channel *
msg.RootId = post.RootId
msg.SenderId = post.UserId
+ if !sentBySystem {
+ senderName = sender.GetDisplayName(teammateNameConfig)
+ preference, prefError := a.GetPreferenceByCategoryAndNameForUser(user.Id, model.PREFERENCE_CATEGORY_DISPLAY_SETTINGS, "name_format")
+ if prefError == nil && preference.Value != teammateNameConfig {
+ senderName = sender.GetDisplayName(preference.Value)
+ }
+ }
+
+ if channel.Type == model.CHANNEL_DIRECT {
+ channelName = fmt.Sprintf("@%v", senderName)
+ }
+
if contentsConfig != model.GENERIC_NO_CHANNEL_NOTIFICATION || channel.Type == model.CHANNEL_DIRECT {
msg.ChannelName = channelName
}
- if ou, ok := post.Props["override_username"].(string); ok {
+ if ou, ok := post.Props["override_username"].(string); ok && cfg.ServiceSettings.EnablePostUsernameOverride {
msg.OverrideUsername = ou
+ senderName = ou
}
- if oi, ok := post.Props["override_icon_url"].(string); ok {
+ if oi, ok := post.Props["override_icon_url"].(string); ok && cfg.ServiceSettings.EnablePostIconOverride {
msg.OverrideIconUrl = oi
}
diff --git a/i18n/de.json b/i18n/de.json
index 879cd35ae..ff2cf5d21 100644
--- a/i18n/de.json
+++ b/i18n/de.json
@@ -192,6 +192,10 @@
"translation": "%v hat den Kanal verlassen."
},
{
+ "id": "api.channel.patch_update_channel.forbidden.app_error",
+ "translation": "Konnte das Kanalmitglied nicht aktualisieren."
+ },
+ {
"id": "api.channel.post_channel_privacy_message.error",
"translation": "Konnte Kanal-Privatsphären-Aktualisierungsnachricht nicht senden."
},
@@ -308,6 +312,10 @@
"translation": "Eine E-Mail-Einladung zu Ihrem Mattermost-Team senden"
},
{
+ "id": "api.command.invite_people.email_invitations_off",
+ "translation": "Email invitations are disabled, no invite(s) sent"
+ },
+ {
"id": "api.command.invite_people.email_off",
"translation": "E-Mail wurde bisher nicht konfiguriert, keine Einladung(en) versendet"
},
@@ -575,6 +583,10 @@
"translation": "nachricht"
},
{
+ "id": "api.command_groupmsg.permission.app_error",
+ "translation": "You don't have the appropriate permissions to create a new group message."
+ },
+ {
"id": "api.command_help.desc",
"translation": "Die Mattermost-Hilfeseite öffnen"
},
@@ -635,6 +647,10 @@
"translation": "{{.User}} ist bereits im Kanal."
},
{
+ "id": "api.command_invite_people.permission.app_error",
+ "translation": "You don't have permission to invite new users to this server."
+ },
+ {
"id": "api.command_join.desc",
"translation": "Öffentlichen Kanal beitreten"
},
@@ -727,6 +743,10 @@
"translation": "nachricht"
},
{
+ "id": "api.command_msg.permission.app_error",
+ "translation": "You don't have the appropriate permissions to direct message this user."
+ },
+ {
"id": "api.command_mute.desc",
"translation": "Schaltet Desktop-, E-Mail- und Push-Benachrichtigungen für den aktuellen Kanal oder den spezifizierten [Kanal] ab."
},
@@ -1599,6 +1619,10 @@
"translation": "Falsch gebildete Anfrage: Feld filesize fehlt."
},
{
+ "id": "api.team.invite_members.disabled.app_error",
+ "translation": "Email invitations are disabled."
+ },
+ {
"id": "api.team.invite_members.invalid_email.app_error",
"translation": "Die folgenden E-Mail-Adressen gehören nicht zu einer akzeptierten Domäne: {{.Addresses}}. Bitte kontaktieren Sie ihren Systemadministrator für Details."
},
diff --git a/i18n/en.json b/i18n/en.json
index fc6d1c55b..7c424e18d 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -88,10 +88,6 @@
"translation": "Failed to add user to channel"
},
{
- "id": "api.channel.patch_update_channel.forbidden.app_error",
- "translation": "Failed to update the channel"
- },
- {
"id": "api.channel.add_user.to.channel.failed.deleted.app_error",
"translation": "Failed to add user to channel because they have been removed from the team."
},
@@ -196,6 +192,10 @@
"translation": "%v left the channel."
},
{
+ "id": "api.channel.patch_update_channel.forbidden.app_error",
+ "translation": "Failed to update the channel"
+ },
+ {
"id": "api.channel.post_channel_privacy_message.error",
"translation": "Failed to post channel privacy update message."
},
@@ -312,14 +312,14 @@
"translation": "Send an email invite to your Mattermost team"
},
{
- "id": "api.command.invite_people.email_off",
- "translation": "Email has not been configured, no invite(s) sent"
- },
- {
"id": "api.command.invite_people.email_invitations_off",
"translation": "Email invitations are disabled, no invite(s) sent"
},
{
+ "id": "api.command.invite_people.email_off",
+ "translation": "Email has not been configured, no invite(s) sent"
+ },
+ {
"id": "api.command.invite_people.fail",
"translation": "Encountered an error sending email invite(s)"
},
@@ -583,6 +583,10 @@
"translation": "message"
},
{
+ "id": "api.command_groupmsg.permission.app_error",
+ "translation": "You don't have the appropriate permissions to create a new group message."
+ },
+ {
"id": "api.command_help.desc",
"translation": "Open the Mattermost help page"
},
@@ -631,10 +635,6 @@
"translation": "You don't have enough permissions to add {{.User}} in {{.Channel}}."
},
{
- "id": "api.command_invite_people.permission.app_error",
- "translation": "You don't have permission to invite new users to this server."
- },
- {
"id": "api.command_invite.private_channel.app_error",
"translation": "Could not find the channel {{.Channel}}. Please use the channel handle to identify channels."
},
@@ -647,6 +647,10 @@
"translation": "{{.User}} is already in the channel."
},
{
+ "id": "api.command_invite_people.permission.app_error",
+ "translation": "You don't have permission to invite new users to this server."
+ },
+ {
"id": "api.command_join.desc",
"translation": "Join the open channel"
},
@@ -739,6 +743,10 @@
"translation": "message"
},
{
+ "id": "api.command_msg.permission.app_error",
+ "translation": "You don't have the appropriate permissions to direct message this user."
+ },
+ {
"id": "api.command_mute.desc",
"translation": "Turns off desktop, email and push notifications for the current channel or the [channel] specified."
},
@@ -835,18 +843,10 @@
"translation": "You do not have the appropriate permissions to remove the member."
},
{
- "id": "api.command_msg.permission.app_error",
- "translation": "You don't have the appropriate permissions to direct message this user."
- },
- {
"id": "api.command_remove.user_not_in_channel",
"translation": "{{.Username}} is not a member of this channel."
},
{
- "id": "api.command_groupmsg.permission.app_error",
- "translation": "You don't have the appropriate permissions to create a new group message."
- },
- {
"id": "api.command_search.desc",
"translation": "Search text in messages"
},
@@ -1619,6 +1619,10 @@
"translation": "Malformed request: filesize field is not present."
},
{
+ "id": "api.team.invite_members.disabled.app_error",
+ "translation": "Email invitations are disabled."
+ },
+ {
"id": "api.team.invite_members.invalid_email.app_error",
"translation": "The following email addresses do not belong to an accepted domain: {{.Addresses}}. Please contact your System Administrator for details."
},
@@ -1631,10 +1635,6 @@
"translation": "No one to invite."
},
{
- "id": "api.team.invite_members.disabled.app_error",
- "translation": "Email invitations are disabled."
- },
- {
"id": "api.team.is_team_creation_allowed.disabled.app_error",
"translation": "Team creation has been disabled. Please ask your systems administrator for details."
},
diff --git a/i18n/es.json b/i18n/es.json
index 8f56b74fb..714c82056 100644
--- a/i18n/es.json
+++ b/i18n/es.json
@@ -161,7 +161,7 @@
},
{
"id": "api.channel.delete_channel.type.invalid",
- "translation": "Cannot delete direct or group message channels"
+ "translation": "No se pueden eliminar canales de grupo o mensajes directos"
},
{
"id": "api.channel.join_channel.already_deleted.app_error",
@@ -192,6 +192,10 @@
"translation": "%v abandonó el canal."
},
{
+ "id": "api.channel.patch_update_channel.forbidden.app_error",
+ "translation": "Error al actualizar el canal"
+ },
+ {
"id": "api.channel.post_channel_privacy_message.error",
"translation": "No pudo publicar el mensaje de actualización de la privacidad del canal."
},
@@ -308,6 +312,10 @@
"translation": "Envía un correo de invitación a tu equipo de Mattermost"
},
{
+ "id": "api.command.invite_people.email_invitations_off",
+ "translation": "Las invitaciones por correo electrónico han sido inhabilitadas, no se enviaron invitaciones"
+ },
+ {
"id": "api.command.invite_people.email_off",
"translation": "El servicio de correo electrónico no ha sido configurado. no se envió la(s) invitacion(es)"
},
@@ -575,6 +583,10 @@
"translation": "mensaje"
},
{
+ "id": "api.command_groupmsg.permission.app_error",
+ "translation": "No tienes los permisos necesarios para crear un grupo de mensajes."
+ },
+ {
"id": "api.command_help.desc",
"translation": "Abrir la página de ayuda de Mattermost"
},
@@ -635,6 +647,10 @@
"translation": "{{.User}} ya está en el canal."
},
{
+ "id": "api.command_invite_people.permission.app_error",
+ "translation": "No tienes permiso para invitar nuevos usuarios a este servidor."
+ },
+ {
"id": "api.command_join.desc",
"translation": "Unirte a un canal público"
},
@@ -727,6 +743,10 @@
"translation": "mensaje"
},
{
+ "id": "api.command_msg.permission.app_error",
+ "translation": "No tienes los permisos necesarios para enviar un mensaje directo a este usuario."
+ },
+ {
"id": "api.command_mute.desc",
"translation": "Apaga las notificaciones de escritorio, correo electrónico y a dispositivos móviles para el canal actual o el [canal] especificado."
},
@@ -1599,6 +1619,10 @@
"translation": "Solicitud con formato incorrecto: campo con el tamaño del archivo no está presente."
},
{
+ "id": "api.team.invite_members.disabled.app_error",
+ "translation": "Invitaciones por correo electrónico inhabilitadas."
+ },
+ {
"id": "api.team.invite_members.invalid_email.app_error",
"translation": "Las siguientes direcciones de correo electrónico no pertenecen a un dominio aceptado: {{.Addresses}}. Por favor, ponte en contacto con tu Administrador del Sistema para obtener más detalles."
},
@@ -3784,7 +3808,7 @@
},
{
"id": "model.config.is_valid.display.custom_url_schemes.app_error",
- "translation": "El esquema de URL personalizado {{.Scheme}} no es válido. Los esquemas de URL personalizados deben empezar con una letra, contener solo letras, números, más (+), punto (.), y guion (-)."
+ "translation": "El esquema de URL personalizado {{.Scheme}} no es válido. Los esquemas de URL personalizados deben empezar con una letra, sólo tener letras, números y guion (-)."
},
{
"id": "model.config.is_valid.elastic_search.aggregate_posts_after_days.app_error",
diff --git a/i18n/fr.json b/i18n/fr.json
index c7a04656d..fe925a4df 100644
--- a/i18n/fr.json
+++ b/i18n/fr.json
@@ -1,15 +1,15 @@
[
{
"id": "actiance.xml.output.formatter.marshalToXml.appError",
- "translation": "Unable to convert export to XML."
+ "translation": "Impossible de convertir l'export en XML."
},
{
"id": "api.admin.add_certificate.array.app_error",
- "translation": "Aucun fichier dans le champ 'certificate' de la requête."
+ "translation": "Aucun fichier dans le champ « certificate » de la requête."
},
{
"id": "api.admin.add_certificate.no_file.app_error",
- "translation": "Aucun fichier dans le champ 'certificate' de la requête."
+ "translation": "Aucun fichier dans le champ « certificate » de la requête."
},
{
"id": "api.admin.add_certificate.open.app_error",
@@ -65,11 +65,11 @@
},
{
"id": "api.admin.upload_brand_image.no_file.app_error",
- "translation": "Pas de fichier dans le paramètre \"image\" de la requête"
+ "translation": "Aucun fichier dans le champ « image » de la requête."
},
{
"id": "api.admin.upload_brand_image.parse.app_error",
- "translation": "Impossible d'analyser le formulaire multipart"
+ "translation": "Impossible d'interpréter le formulaire multipart."
},
{
"id": "api.admin.upload_brand_image.storage.app_error",
@@ -161,7 +161,7 @@
},
{
"id": "api.channel.delete_channel.type.invalid",
- "translation": "Cannot delete direct or group message channels"
+ "translation": "Impossible de supprimer des canaux de groupe ou de messages personnels"
},
{
"id": "api.channel.join_channel.already_deleted.app_error",
@@ -192,8 +192,12 @@
"translation": "%v a quitté le canal."
},
{
+ "id": "api.channel.patch_update_channel.forbidden.app_error",
+ "translation": "Impossible de mettre à jour le canal"
+ },
+ {
"id": "api.channel.post_channel_privacy_message.error",
- "translation": "Failed to post channel privacy update message."
+ "translation": "Impossible de mettre à jour le message de politique de vie privée du canal"
},
{
"id": "api.channel.post_update_channel_displayname_message_and_forget.create_post.error",
@@ -297,7 +301,7 @@
},
{
"id": "api.command.execute_command.not_found.app_error",
- "translation": "Une commande avec le mot-clé déclencheur '{{.Trigger}}' n'a pas pu être trouvée. Pour envoyer un message commençant par \"/\", ajoutez un espace au début du message."
+ "translation": "Une commande avec le mot-clé déclencheur '{{.Trigger}}' n'a pas pu être trouvée. Pour envoyer un message commençant par « / », ajoutez un espace au début du message."
},
{
"id": "api.command.execute_command.start.app_error",
@@ -308,6 +312,10 @@
"translation": "Envoyer un e-mail d'invitation à votre équipe"
},
{
+ "id": "api.command.invite_people.email_invitations_off",
+ "translation": "Les invitations par e-mail sont désactivées, aucune invitation envoyée."
+ },
+ {
"id": "api.command.invite_people.email_off",
"translation": "Les e-mails n'ont pas été configurés, aucune invitation envoyée."
},
@@ -575,6 +583,10 @@
"translation": "message"
},
{
+ "id": "api.command_groupmsg.permission.app_error",
+ "translation": "Vous n'avez pas les permissions requises pour créer de nouveaux messages de groupe."
+ },
+ {
"id": "api.command_help.desc",
"translation": "Ouvre l'aide de Mattermost"
},
@@ -635,6 +647,10 @@
"translation": "{{.User}} est déjà membre de ce canal."
},
{
+ "id": "api.command_invite_people.permission.app_error",
+ "translation": "Vous n'avez pas les permissions requises pour inviter de nouveaux utilisateurs sur ce serveur."
+ },
+ {
"id": "api.command_join.desc",
"translation": "Rejoint un canal ouvert"
},
@@ -727,6 +743,10 @@
"translation": "[message]"
},
{
+ "id": "api.command_msg.permission.app_error",
+ "translation": "Vous n'avez pas les permissions requises pour envoyer des messages personnels à cet utilisateur."
+ },
+ {
"id": "api.command_mute.desc",
"translation": "Désactive les notifications de bureau, par e-mail et push pour le canal actuel ou pour le canal [channel]."
},
@@ -1014,7 +1034,7 @@
},
{
"id": "api.emoji.upload.open.app_error",
- "translation": "Impossible de créer l'émoticône. Une erreur est survenue durant l'encodage de l'image."
+ "translation": "Impossible de créer l'émoticône. Une erreur est survenue lors de l'ouverture de l'image liée."
},
{
"id": "api.file.attachments.disabled.app_error",
@@ -1054,43 +1074,43 @@
},
{
"id": "api.file.no_driver.app_error",
- "translation": "No file driver selected."
+ "translation": "Aucun fichier de driver sélectionné."
},
{
"id": "api.file.read_file.reading_local.app_error",
- "translation": "Une erreur est survenue lors de la lecture depuis le stockage local du serveur"
+ "translation": "Une erreur est survenue lors de la lecture à partir du stockage local du serveur"
},
{
"id": "api.file.read_file.s3.app_error",
- "translation": "Une erreur est survenue lors de la lecture depuis le stockage local du serveur"
+ "translation": "Une erreur est survenue lors de la lecture à partir du stockage S3"
},
{
"id": "api.file.reader.reading_local.app_error",
- "translation": "Une erreur s'est produite lors de l'affichage du dossier à partir du système de stockage local du serveur."
+ "translation": "Une erreur s'est produite lors de l'ouverture du processus de lecture du stockage local du serveur."
},
{
"id": "api.file.reader.s3.app_error",
- "translation": "Une erreur est survenue lors de la lecture depuis le stockage local du serveur"
+ "translation": "Une erreur s'est produite lors de l'ouverture du processus de lecture du stockage S3"
},
{
"id": "api.file.test_connection.local.connection.app_error",
- "translation": "Don't have permissions to write to local path specified or other error."
+ "translation": "Vous n'avez pas les permissions requises pour écrire dans le dossier local spécifié ou une autre erreur s'est produite."
},
{
"id": "api.file.test_connection.s3.bucked_create.app_error",
- "translation": "Unable to create bucket."
+ "translation": "Impossible de créer le bucket."
},
{
"id": "api.file.test_connection.s3.bucket_exists.app_error",
- "translation": "Error checking if bucket exists."
+ "translation": "Une erreur s'est produite lors de la vérification de l'existence du bucket."
},
{
"id": "api.file.test_connection.s3.connection.app_error",
- "translation": "Bad connection to S3 or minio."
+ "translation": "Erreur de connexion à S3 ou minio."
},
{
"id": "api.file.upload_file.bad_parse.app_error",
- "translation": "Impossible d'envoyer le fichier. L'entête ne peut être analysé."
+ "translation": "Impossible d'envoyer le fichier. L'entête ne peut être interprété."
},
{
"id": "api.file.upload_file.incorrect_number_of_files.app_error",
@@ -1146,7 +1166,7 @@
},
{
"id": "api.license.add_license.no_file.app_error",
- "translation": "Le paramètre « license » de la requête ne contient pas de fichier"
+ "translation": "Aucun fichier dans le champ « license » de la requête."
},
{
"id": "api.license.add_license.open.app_error",
@@ -1162,7 +1182,7 @@
},
{
"id": "api.license.add_license.unique_users.app_error",
- "translation": "Cette licence supporte {{.Users}} utilisateurs, mais votre système compte {{.Count}} utilisateurs uniques. Les utilisateurs uniques sont comptabilisés par adresse e-mail distincte. Vous pouvez voir le nombre d'utilisateurs uniques dans le menu \"Rapports -> Statistiques\"."
+ "translation": "Cette licence supporte {{.Users}} utilisateurs, mais votre système compte {{.Count}} utilisateurs uniques. Les utilisateurs uniques sont comptabilisés par adresse e-mail distincte. Vous pouvez voir le nombre d'utilisateurs uniques dans le menu « Rapports -> Statistiques »."
},
{
"id": "api.license.client.old_format.app_error",
@@ -1238,7 +1258,7 @@
},
{
"id": "api.oauth.invalid_state_token.app_error",
- "translation": "Token d'état invalide"
+ "translation": "Jeton d'état invalide"
},
{
"id": "api.oauth.register_oauth_app.turn_off.app_error",
@@ -1404,15 +1424,15 @@
},
{
"id": "api.preference.delete_preferences.delete.app_error",
- "translation": "Unable to delete user preferences."
+ "translation": "Impossible de supprimer les préférences de l'utilisateur."
},
{
"id": "api.preference.preferences_category.get.app_error",
- "translation": "Unable to get user preferences."
+ "translation": "Impossible de récupérer les préférences de l'utilisateur."
},
{
"id": "api.preference.update_preferences.set.app_error",
- "translation": "Unable to set user preferences."
+ "translation": "Impossible de définir les préférences de l'utilisateur."
},
{
"id": "api.reaction.save_reaction.invalid.app_error",
@@ -1428,11 +1448,11 @@
},
{
"id": "api.scheme.create_scheme.license.error",
- "translation": "La licence actuelle ne supporte pas la modification d'un schéma de permissions d'équipe"
+ "translation": "Votre licence actuelle ne supporte pas la création de schémas de permissions."
},
{
"id": "api.scheme.delete_scheme.license.error",
- "translation": "La licence actuelle ne supporte pas la modification d'un schéma de permissions d'équipe"
+ "translation": "Votre licence actuelle ne supporte pas la modification d'un schémas de permissions."
},
{
"id": "api.scheme.get_channels_for_scheme.scope.error",
@@ -1444,7 +1464,7 @@
},
{
"id": "api.scheme.patch_scheme.license.error",
- "translation": "La licence actuelle ne supporte pas la modification d'un schéma de permissions d'équipe"
+ "translation": "Votre licence actuelle ne supporte pas la modification des schémas de permissions."
},
{
"id": "api.server.start_server.forward80to443.disabled_while_using_lets_encrypt",
@@ -1564,11 +1584,11 @@
},
{
"id": "api.team.get_team_icon.filesettings_no_driver.app_error",
- "translation": "Nom de pilote invalide dans les paramètres de fichiers. Doit être 'local' ou 'amazons3'"
+ "translation": "Nom de pilote invalide dans les paramètres de fichiers. Doit être « local » ou « amazons3 »."
},
{
"id": "api.team.get_team_icon.read_file.app_error",
- "translation": "Unable to read the team icon file."
+ "translation": "Impossible de lire l'icône d'équipe."
},
{
"id": "api.team.import_team.array.app_error",
@@ -1580,7 +1600,7 @@
},
{
"id": "api.team.import_team.no_file.app_error",
- "translation": "Aucun fichier pour les 'fichiers' dans la requête"
+ "translation": "Aucun fichier dans le champ « fichier » de la requête."
},
{
"id": "api.team.import_team.no_import_from.app_error",
@@ -1592,13 +1612,17 @@
},
{
"id": "api.team.import_team.parse.app_error",
- "translation": "Impossible d'analyser le formulaire multipart"
+ "translation": "Impossible d'interpréter le formulaire multipart."
},
{
"id": "api.team.import_team.unavailable.app_error",
"translation": "Requête malformée : le champ de taille de fichier n'est pas présent."
},
{
+ "id": "api.team.invite_members.disabled.app_error",
+ "translation": "Les invitations par e-mail sont désactivées."
+ },
+ {
"id": "api.team.invite_members.invalid_email.app_error",
"translation": "Les adresses e-mail suivantes ne font pas partie d'un domaine accepté : {{.Addresses}}. Veuillez contacter votre administrateur système pour plus de détails."
},
@@ -1668,7 +1692,7 @@
},
{
"id": "api.team.set_team_icon.no_file.app_error",
- "translation": "Pas de fichier dans le paramètre 'image' de la requête"
+ "translation": "Aucun fichier dans le champ « image » de la requête."
},
{
"id": "api.team.set_team_icon.open.app_error",
@@ -1676,7 +1700,7 @@
},
{
"id": "api.team.set_team_icon.parse.app_error",
- "translation": "Impossible d'analyser le formulaire multipart"
+ "translation": "Impossible d'interpréter le formulaire multipart."
},
{
"id": "api.team.set_team_icon.storage.app_error",
@@ -1700,7 +1724,7 @@
},
{
"id": "api.team.update_team_scheme.license.error",
- "translation": "La licence actuelle ne supporte pas la modification d'un schéma de permissions d'équipe"
+ "translation": "Votre licence actuelle ne supporte pas la modification d'es schémas de permissions d'équipe."
},
{
"id": "api.team.update_team_scheme.scheme_scope.error",
@@ -1820,7 +1844,7 @@
},
{
"id": "api.templates.reset_body.info",
- "translation": "Pour modifier votre mot de passe, cliquez sur \"Réinitialiser le mot de passe\" ci-dessous.<br>Si vous ne souhaitiez pas réinitialiser votre mot de passe, ignorez ce message et votre mot de passe restera inchangé. Le lien de réinitialisation de votre mot de passe expirera dans 24 heures."
+ "translation": "Pour modifier votre mot de passe, cliquez sur « Réinitialiser le mot de passe » ci-dessous.<br>Si vous ne souhaitiez pas réinitialiser votre mot de passe, ignorez ce message et votre mot de passe restera inchangé. Le lien de réinitialisation de votre mot de passe expirera dans 24 heures."
},
{
"id": "api.templates.reset_body.title",
@@ -1972,7 +1996,7 @@
},
{
"id": "api.user.complete_switch_with_oauth.parse.app_error",
- "translation": "Impossible d'analyser les données de connexion d'après l'objet utilisateur de {{.Service}}"
+ "translation": "Impossible d'interpréter les données de connexion de l'objet utilisateur {{.Service}}."
},
{
"id": "api.user.complete_switch_with_oauth.unavailable.app_error",
@@ -2040,7 +2064,7 @@
},
{
"id": "api.user.email_to_oauth.not_available.app_error",
- "translation": "Authentication Transfer not configured or available on this server."
+ "translation": "L'authentification de Transfert n'est pas configuré ou disponible sur ce serveur."
},
{
"id": "api.user.generate_mfa_qr.not_available.app_error",
@@ -2048,7 +2072,7 @@
},
{
"id": "api.user.get_authorization_code.unsupported.app_error",
- "translation": "Prestataire OAuth non-supporté"
+ "translation": "Fournisseur de service OAuth non-supporté"
},
{
"id": "api.user.get_profile_image.not_found.app_error",
@@ -2068,11 +2092,11 @@
},
{
"id": "api.user.login.client_side_cert.certificate.app_error",
- "translation": "Attempted to sign in using the experimental feature ClientSideCert without providing a valid certificate"
+ "translation": "Tentative de connexion à l'aide de la fonctionnalité expérimentale ClientSideCert sans avoir fourni un certificat valide"
},
{
"id": "api.user.login.client_side_cert.license.app_error",
- "translation": "Attempt to use the experimental feature ClientSideCertEnable without a valid enterprise license"
+ "translation": "Tentative d'utilisation la fonctionnalité expérimentale ClientSideCertEnable sans avoir défini une licence entreprise valide"
},
{
"id": "api.user.login.inactive.app_error",
@@ -2096,7 +2120,7 @@
},
{
"id": "api.user.login_by_oauth.parse.app_error",
- "translation": "Impossible d'analyser les données de l'objet utilisateur pour {{.Service}} (could not parse auth data)"
+ "translation": "Impossible d'interpréter les données de connexion de l'objet utilisateur {{.Service}}."
},
{
"id": "api.user.login_ldap.not_available.app_error",
@@ -2108,23 +2132,23 @@
},
{
"id": "api.user.oauth_to_email.not_available.app_error",
- "translation": "Authentication Transfer not configured or available on this server."
+ "translation": "L'authentification de Transfert n'est pas configuré ou disponible sur ce serveur."
},
{
"id": "api.user.reset_password.broken_token.app_error",
- "translation": "Le lien \"mot de passe oublié\" ne semble pas être correct"
+ "translation": "Le jeton de redéfinition de mot de passe ne semble pas être valide."
},
{
"id": "api.user.reset_password.invalid_link.app_error",
- "translation": "Le lien \"mot de passe oublié\" ne semble pas être correct"
+ "translation": "Le lien de redéfinition de mot de passe ne semble pas être valide."
},
{
"id": "api.user.reset_password.link_expired.app_error",
- "translation": "Le lien \"mot de passe oublié\" n'est plus valide"
+ "translation": "Le lien de redéfinition de mot de passe a expiré."
},
{
"id": "api.user.reset_password.method",
- "translation": "utilisation d'un lien \"mot de passe oublié\""
+ "translation": "utilisation d'un lien de réinitialisation de mot de passe"
},
{
"id": "api.user.reset_password.sso.app_error",
@@ -2152,7 +2176,7 @@
},
{
"id": "api.user.send_mfa_change_email.error",
- "translation": "Unable to send email notification for MFA change."
+ "translation": "Impossible d'envoyer une notification par e-mail pour le changement de méthode d'authentification multi-facteurs (MFA)."
},
{
"id": "api.user.send_password_change_email_and_forget.error",
@@ -2240,7 +2264,7 @@
},
{
"id": "api.user.upload_profile_user.no_file.app_error",
- "translation": "Pas de fichier dans le paramètre \"image\" de la requête"
+ "translation": "Aucun fichier dans le champ « image » de la requête."
},
{
"id": "api.user.upload_profile_user.open.app_error",
@@ -2248,7 +2272,7 @@
},
{
"id": "api.user.upload_profile_user.parse.app_error",
- "translation": "Impossible d'interpréter le formulaire composite (multipart form)"
+ "translation": "Impossible d'interpréter le formulaire multipart."
},
{
"id": "api.user.upload_profile_user.storage.app_error",
@@ -2268,27 +2292,27 @@
},
{
"id": "api.user.verify_email.broken_token.app_error",
- "translation": "Bad verify email token type."
+ "translation": "Mauvais type de jeton de vérification d'adresse e-mail."
},
{
"id": "api.web_socket.connect.upgrade.app_error",
- "translation": "Échec de la mise-à-jour de la connexion websocket"
+ "translation": "Échec de la mise-à-jour de la connexion WebSocket"
},
{
"id": "api.web_socket_router.bad_action.app_error",
- "translation": "Unknown WebSocket action."
+ "translation": "Action WebSocket inconnue."
},
{
"id": "api.web_socket_router.bad_seq.app_error",
- "translation": "Invalid sequence for WebSocket message."
+ "translation": "Séquence invalide pour le message WebSocket."
},
{
"id": "api.web_socket_router.no_action.app_error",
- "translation": "No websocket action."
+ "translation": "Aucune action WebSocket."
},
{
"id": "api.web_socket_router.not_authenticated.app_error",
- "translation": "WebSocket connection is not authenticated. Please log in and try again."
+ "translation": "La connexion WebSocket n'est pas authentifiée. Veuillez vous connecter et réessayer."
},
{
"id": "api.webhook.create_outgoing.intersect.app_error",
@@ -2364,7 +2388,7 @@
},
{
"id": "app.cluster.404.app_error",
- "translation": "Cluster API endpoint not found."
+ "translation": "Le nœud d'API cluster est introuvable."
},
{
"id": "app.import.bulk_import.file_scan.error",
@@ -2376,19 +2400,19 @@
},
{
"id": "app.import.bulk_import.unsupported_version.error",
- "translation": "Incorrect or missing version in the data import file. Make sure version is the first object in your import file and try again."
+ "translation": "Version incorrecte ou manquante dans le fichier d'importation de données. Veuillez vous assurer que la version est le premier objet dans votre fichier d'importation et réessayer."
},
{
"id": "app.import.import_channel.scheme_deleted.error",
- "translation": "Cannot set a channel to use a deleted scheme."
+ "translation": "Impossible de définir un canal à utiliser sur un schéma de permissions supprimé."
},
{
"id": "app.import.import_channel.scheme_wrong_scope.error",
- "translation": "Channel must be assigned to a Channel-scoped scheme."
+ "translation": "Le canal doit être assigné à un schéma de permissions de canal."
},
{
"id": "app.import.import_channel.team_not_found.error",
- "translation": "Erreur lors de l'importation du canal. L'équipe portant le nom \"{{.TeamName}}\" n'a pas pu être trouvée."
+ "translation": "Erreur lors de l'importation du canal. L'équipe portant le nom « {{.TeamName}} » n'a pas pu être trouvée."
},
{
"id": "app.import.import_direct_channel.create_direct_channel.error",
@@ -2428,39 +2452,39 @@
},
{
"id": "app.import.import_line.null_channel.error",
- "translation": "La ligne de données importée dispose d'un type \"channel\", mais l'objet channel est null."
+ "translation": "La ligne de données importée dispose d'un type « channel », mais l'objet channel est null."
},
{
"id": "app.import.import_line.null_direct_channel.error",
- "translation": "La ligne de données importée dispose d'un type \"direct_channel\", mais l'objet direct_channel est null."
+ "translation": "La ligne de données importée dispose d'un type « direct_channel », mais l'objet direct_channel est null."
},
{
"id": "app.import.import_line.null_direct_post.error",
- "translation": "La ligne de données importée dispose d'un type \"direct_post\", mais l'objet direct_post est null."
+ "translation": "La ligne de données importée dispose d'un type « direct_post », mais l'objet direct_post est null."
},
{
"id": "app.import.import_line.null_post.error",
- "translation": "La ligne de données importée dispose d'un type \"post\", mais l'objet post est null."
+ "translation": "La ligne de données importée dispose d'un type « post », mais l'objet post est null."
},
{
"id": "app.import.import_line.null_scheme.error",
- "translation": "La ligne de données importée dispose d'un type \"channel\", mais l'objet channel est null."
+ "translation": "La ligne de données importée dispose d'un type « channel », mais l'objet channel est null."
},
{
"id": "app.import.import_line.null_team.error",
- "translation": "La ligne de données importée dispose d'un type \"team\", mais l'objet team est null."
+ "translation": "La ligne de données importée dispose d'un type « team », mais l'objet team est null."
},
{
"id": "app.import.import_line.null_user.error",
- "translation": "La ligne de données importée dispose d'un type \"user\", mais l'objet user est null."
+ "translation": "La ligne de données importée dispose d'un type « user », mais l'objet user est null."
},
{
"id": "app.import.import_line.unknown_line_type.error",
- "translation": "La ligne de données importée dispose d'un type inconnu \"{{.Type}}\"."
+ "translation": "La ligne de données importée dispose d'un type inconnu « {{.Type}} »."
},
{
"id": "app.import.import_post.channel_not_found.error",
- "translation": "Erreur lors de l'importation du message. Le canal portant le nom \"{{.ChannelName}}\" n'a pas pu être trouvé."
+ "translation": "Erreur lors de l'importation du message. Le canal portant le nom « {{.ChannelName}} » n'a pas pu être trouvé."
},
{
"id": "app.import.import_post.save_preferences.error",
@@ -2468,27 +2492,27 @@
},
{
"id": "app.import.import_post.team_not_found.error",
- "translation": "Erreur lors de l'importation du message. L'équipe portant le nom \"{{.TeamName}}\" n'a pas pu être trouvée."
+ "translation": "Erreur lors de l'importation du message. L'équipe portant le nom « {{.TeamName}} » n'a pas pu être trouvée."
},
{
"id": "app.import.import_post.user_not_found.error",
- "translation": "Erreur lors de l'importation du message. L'utilisateur portant le nom \"{{.Username}}\" n'a pas pu être trouvé."
+ "translation": "Erreur lors de l'importation du message. L'utilisateur portant le nom « {{.Username}} » n'a pas pu être trouvé."
},
{
"id": "app.import.import_scheme.scope_change.error",
- "translation": "The bulk importer cannot change the scope of an already-existing scheme."
+ "translation": "L'outil d’importation en masse ne peut pas changer la portée d'un schéma de permissions existant."
},
{
"id": "app.import.import_team.scheme_deleted.error",
- "translation": "Cannot set a team to use a deleted scheme."
+ "translation": "Impossible d'assigner une équipe à un schéma de permissions supprimé."
},
{
"id": "app.import.import_team.scheme_wrong_scope.error",
- "translation": "Team must be assigned to a Team-scoped scheme."
+ "translation": "L'équipe doit être assignée à un schéma de permissions d'équipe."
},
{
"id": "app.import.import_user.save_preferences.error",
- "translation": "Erreur lors de l'importation des membres du canal. Impossible de sauvegarder les préférences."
+ "translation": "Erreur lors de l'importation des préférences utilisateur. Impossible de sauvegarder les préférences."
},
{
"id": "app.import.import_user_channels.save_preferences.error",
@@ -2496,7 +2520,7 @@
},
{
"id": "app.import.process_import_data_file_version_line.invalid_version.error",
- "translation": "Unable to read the version of the data import file."
+ "translation": "Impossible de lire la version du fichier d'importation de données."
},
{
"id": "app.import.validate_channel_import_data.display_name_length.error",
@@ -2528,7 +2552,7 @@
},
{
"id": "app.import.validate_channel_import_data.scheme_invalid.error",
- "translation": "Invalid scheme name for channel."
+ "translation": "Nom de schéma de permissions invalide pour le canal."
},
{
"id": "app.import.validate_channel_import_data.team_missing.error",
@@ -2560,7 +2584,7 @@
},
{
"id": "app.import.validate_direct_channel_import_data.unknown_favoriter.error",
- "translation": "Les canaux de messages privés ne peuvent être placés en favoris que par ses membres. \"{{.Username}}\" n'en est pas un."
+ "translation": "Les canaux de messages privés ne peuvent être placés en favoris que par ses membres. « {{.Username}} » n'en est pas un."
},
{
"id": "app.import.validate_direct_post_import_data.channel_members_required.error",
@@ -2592,7 +2616,7 @@
},
{
"id": "app.import.validate_direct_post_import_data.unknown_flagger.error",
- "translation": "Les messages privés ne peuvent être marqués que par ses membres. \"{{.Username}}\" n'en est pas un."
+ "translation": "Les messages privés ne peuvent être marqués que par ses membres. « {{.Username}} » n'en est pas un."
},
{
"id": "app.import.validate_direct_post_import_data.user_missing.error",
@@ -2676,43 +2700,43 @@
},
{
"id": "app.import.validate_role_import_data.description_invalid.error",
- "translation": "Description invalide"
+ "translation": "La description de rôle est invalide."
},
{
"id": "app.import.validate_role_import_data.display_name_invalid.error",
- "translation": "Nom d'affichage invalide"
+ "translation": "Le rôle affiché est invalide."
},
{
"id": "app.import.validate_role_import_data.invalid_permission.error",
- "translation": "Invalid permission on role."
+ "translation": "Permissions invalides sur le rôle."
},
{
"id": "app.import.validate_role_import_data.name_invalid.error",
- "translation": "Nom d'utilisateur invalide."
+ "translation": "Le nom de rôle est invalide."
},
{
"id": "app.import.validate_scheme_import_data.description_invalid.error",
- "translation": "Description invalide"
+ "translation": "La description du schéma de permissions est invalide."
},
{
"id": "app.import.validate_scheme_import_data.display_name_invalid.error",
- "translation": "Nom d'affichage invalide"
+ "translation": "Le nom de schéma de permissions affiché est invalide."
},
{
"id": "app.import.validate_scheme_import_data.name_invalid.error",
- "translation": "Nom d'utilisateur invalide."
+ "translation": "Le nom de schéma de permissions est invalide."
},
{
"id": "app.import.validate_scheme_import_data.null_scope.error",
- "translation": "Scheme scope is required."
+ "translation": "La portée du schéma de permissions est requise."
},
{
"id": "app.import.validate_scheme_import_data.unknown_scheme.error",
- "translation": "Unknown scheme scope."
+ "translation": "La portée du schéma de permissions est inconnue."
},
{
"id": "app.import.validate_scheme_import_data.wrong_roles_for_scope.error",
- "translation": "The wrong roles were provided for a scheme with this scope."
+ "translation": "Des rôles incorrects ont été fournis pour un schéma de permissions de cette portée."
},
{
"id": "app.import.validate_team_import_data.description_length.error",
@@ -2744,7 +2768,7 @@
},
{
"id": "app.import.validate_team_import_data.scheme_invalid.error",
- "translation": "Invalid scheme name for team."
+ "translation": "Le nom de schéma de permissions d'équipe est invalide."
},
{
"id": "app.import.validate_team_import_data.type_invalid.error",
@@ -2812,7 +2836,7 @@
},
{
"id": "app.import.validate_user_import_data.notify_props_comments_trigger_invalid.error",
- "translation": "La valeur de la propriété de notification mobile est invalide pour l'utilisateur."
+ "translation": "La valeur de la propriété de commentaires est invalide pour l'utilisateur."
},
{
"id": "app.import.validate_user_import_data.notify_props_desktop_invalid.error",
@@ -2960,7 +2984,7 @@
},
{
"id": "app.plugin.get_cluster_plugin_statuses.app_error",
- "translation": "Unable to get plugin statuses from the cluster."
+ "translation": "Impossible de récupérer les statuts de plugin du cluster."
},
{
"id": "app.plugin.get_plugins.app_error",
@@ -3020,7 +3044,7 @@
},
{
"id": "app.user.complete_switch_with_oauth.blank_email.app_error",
- "translation": "Unable to complete SAML login with an empty email address."
+ "translation": "Impossible de terminer la connexion via SAML avec une adresse e-mail vide."
},
{
"id": "app.user_access_token.disabled",
@@ -3032,27 +3056,27 @@
},
{
"id": "brand.save_brand_image.decode.app_error",
- "translation": "Unable to decode the image data."
+ "translation": "Impossible de décoder les données de l'image."
},
{
"id": "brand.save_brand_image.decode_config.app_error",
- "translation": "Unable to get image metadata."
+ "translation": "Impossible de récupérer les métadonnées de l'image."
},
{
"id": "brand.save_brand_image.encode.app_error",
- "translation": "Unable to convert the image data to PNG format. Please try again."
+ "translation": "Impossible de convertir l'image en format PNG. Veuillez réessayer. "
},
{
"id": "brand.save_brand_image.open.app_error",
- "translation": "Unable to upload the custom brand image. Make sure the image size is less than 2 MB and try again."
+ "translation": "Impossible d'envoyer une image de marque personnalisée. Veuillez vous assurer que la taille de l'image fasse moins que 2 Mio et réessayez."
},
{
"id": "brand.save_brand_image.save_image.app_error",
- "translation": "Unable to write the image file to your file storage. Please check your connection and try again."
+ "translation": "Impossible d'enregistrer l'image dans le stockage de fichiers. Veuillez vérifier votre connexion et réessayez."
},
{
"id": "brand.save_brand_image.too_large.app_error",
- "translation": "Unable to read the image file. Make sure the image size is less than 2 MB and try again."
+ "translation": "Impossible de lire l'image. Veuillez vous assurer que la taille de l'image fasse moins que 2 Mio et réessayez."
},
{
"id": "cli.license.critical",
@@ -3060,59 +3084,59 @@
},
{
"id": "ent.account_migration.get_all_failed",
- "translation": "Impossible de récupérer le message"
+ "translation": "Impossible de récupérer les utilisateurs."
},
{
"id": "ent.account_migration.get_saml_users_failed",
- "translation": "Impossible de récupérer le message"
+ "translation": "Impossible de récupérer les utilisateurs SAML."
},
{
"id": "ent.cluster.config_changed.info",
- "translation": "La configuration du cluster a changé pour l'id={{ .id }}. Le cluster peut devenir instable et un redémarrage est nécessaire. Pour s'assurer que le cluster est configuré correctement, vous devriez effectuer un redémarrage immédiatement."
+ "translation": "La configuration du cluster a changé pour l'id={{ .id }}. Le cluster peut devenir instable et un redémarrage peut s'avérer nécessaire. Pour s'assurer que le cluster soit configuré correctement, vous devriez effectuer un redémarrage immédiatement."
},
{
"id": "ent.cluster.save_config.error",
- "translation": "La console système est définie en lecture seule lorsque le mode haute disponibilité est activé à moins que ReadOnlyConfig est désactivé dans le fichier de configuration. "
+ "translation": "La console système est définie en lecture seule lorsque le mode haute disponibilité est activé à moins que ReadOnlyConfig soit désactivé dans le fichier de configuration. "
},
{
"id": "ent.compliance.bad_export_type.appError",
- "translation": "Unknown output format {{.ExportType}}"
+ "translation": "Format de sortie inconnu {{.ExportType}}"
},
{
"id": "ent.compliance.csv.attachment.copy.appError",
- "translation": "Unable to copy the attachment into the zip file."
+ "translation": "Impossible de copier le fichier joint dans le fichier zip."
},
{
"id": "ent.compliance.csv.attachment.export.appError",
- "translation": "Unable to add attachment to the CSV export."
+ "translation": "Impossible d'ajouter le fichier joint dans l'export CSV."
},
{
"id": "ent.compliance.csv.file.creation.appError",
- "translation": "Unable to create temporary CSV export file."
+ "translation": "Impossible de créer un fichier d'export CSV temporaire."
},
{
"id": "ent.compliance.csv.header.export.appError",
- "translation": "Unable to add header to the CSV export."
+ "translation": "Impossible d'ajouter l'entête à l'export CSV."
},
{
"id": "ent.compliance.csv.metadata.export.appError",
- "translation": "Unable to add metadata file to the zip file."
+ "translation": "Impossible d'ajouter les métadonnées de fichier au fichier zip."
},
{
"id": "ent.compliance.csv.metadata.json.marshalling.appError",
- "translation": "Unable to convert metadata to json."
+ "translation": "Impossible de convertir les métadonnées en json."
},
{
"id": "ent.compliance.csv.post.export.appError",
- "translation": "Unable to export a post."
+ "translation": "Impossible d'exporter un message."
},
{
"id": "ent.compliance.csv.zip.creation.appError",
- "translation": "Unable to create the zip export file."
+ "translation": "Impossible de créer le fichier d'export zip."
},
{
"id": "ent.compliance.global_relay.attachments_removed.appError",
- "translation": "Uploaded file was removed from Global Relay export because it was too large to send."
+ "translation": "Le fichier envoyé a été supprimé de l'export Global Relay, car il était trop lourd à envoyer."
},
{
"id": "ent.compliance.licence_disable.app_error",
@@ -3120,15 +3144,15 @@
},
{
"id": "ent.compliance.run_export.template_watcher.appError",
- "translation": "Unable to load export templates. Please try again."
+ "translation": "Impossible de charger les modèles d'export. Veuillez réessayer."
},
{
"id": "ent.compliance.run_failed.error",
- "translation": "Échec de l'export du certificat de conformité pour la tâche '{{.JobName}}' à '{{.FilePath}}'"
+ "translation": "Échec de l'export de conformité pour la tâche '{{.JobName}}' à '{{.FilePath}}'"
},
{
"id": "ent.data_retention.generic.license.error",
- "translation": "La licence ne supporte pas la conservation des données."
+ "translation": "Votre licence actuelle ne supporte pas la rétention de données."
},
{
"id": "ent.elasticsearch.aggregator_worker.create_index_job.error",
@@ -3180,7 +3204,7 @@
},
{
"id": "ent.elasticsearch.indexer.do_job.parse_end_time.error",
- "translation": "Le système d’agrégation Elasticsearch n'a pas pu analyser l'heure de fin"
+ "translation": "Le système d’agrégation Elasticsearch n'a pas pu interpréter l'heure de fin"
},
{
"id": "ent.elasticsearch.indexer.do_job.parse_start_time.error",
@@ -3200,7 +3224,7 @@
},
{
"id": "ent.elasticsearch.search_posts.parse_matches_failed",
- "translation": "Failed to parse search result matches"
+ "translation": "Impossible d'interpréter les résultats de recherche"
},
{
"id": "ent.elasticsearch.search_posts.search_failed",
@@ -3228,7 +3252,7 @@
},
{
"id": "ent.elasticsearch.test_config.license.error",
- "translation": "La licence actuelle ne supporte pas Elasticsearch."
+ "translation": "Votre licence actuelle ne supporte pas Elasticsearch."
},
{
"id": "ent.elasticsearch.test_config.reenter_password",
@@ -3280,7 +3304,7 @@
},
{
"id": "ent.ldap.syncronize.search_failure.app_error",
- "translation": "Failed to search users in AD/LDAP. Test if the Mattermost server can connect to your AD/LDAP server and try again."
+ "translation": "Impossible de rechercher des utilisateurs dans AD/LDAP. Veuillez vous assurer que le serveur Mattermost puisse se connecter à votre serveur AD/LDAP et réessayez."
},
{
"id": "ent.ldap.validate_filter.app_error",
@@ -3288,11 +3312,11 @@
},
{
"id": "ent.mfa.activate.authenticate.app_error",
- "translation": "Erreur tentative d'authentification MFA token"
+ "translation": "Une erreur s'est produite lors de l'authentification du jeton MFA"
},
{
"id": "ent.mfa.activate.bad_token.app_error",
- "translation": "MFA token invalide"
+ "translation": "Jeton MFA invalide"
},
{
"id": "ent.mfa.activate.save_active.app_error",
@@ -3320,7 +3344,7 @@
},
{
"id": "ent.mfa.validate_token.authenticate.app_error",
- "translation": "Erreur tentative d'authentification MFA token"
+ "translation": "Une erreur s'est produite lors de l'authentification du jeton MFA"
},
{
"id": "ent.migration.migratetoldap.duplicate_field",
@@ -3360,7 +3384,7 @@
},
{
"id": "ent.saml.configure.encryption_not_enabled.app_error",
- "translation": "La connexion SAML a échoué car le chiffrement n'est pas activé. Veuillez contacter votre administrateur système."
+ "translation": "La connexion via SAML a échoué, car le chiffrement n'est pas activé. Veuillez contacter votre administrateur système."
},
{
"id": "ent.saml.configure.load_idp_cert.app_error",
@@ -3368,15 +3392,15 @@
},
{
"id": "ent.saml.configure.load_private_key.app_error",
- "translation": "La connexion SAML a échoué car la clé privée du fournisseur d'identité est introuvable. Veuillez contacter votre administrateur système."
+ "translation": "La connexion via SAML a échoué, car la clé privée du fournisseur d'identité est introuvable. Veuillez contacter votre administrateur système."
},
{
"id": "ent.saml.configure.not_encrypted_response.app_error",
- "translation": "La connexion SAML a échoué, car la réponse du fournisseur d'identité n'est pas chiffrée. Veuillez contacter votre administrateur système."
+ "translation": "La connexion via SAML a échoué, car la réponse du fournisseur d'identité n'est pas chiffrée. Veuillez contacter votre administrateur système."
},
{
"id": "ent.saml.do_login.decrypt.app_error",
- "translation": "Connexion SAML échouée car une erreur s'est produite lors du décryptage de la réponse du serveur d'identité. Veuillez contacter votre administrateur système."
+ "translation": "La connexion via SAML a échoué, car une erreur s'est produite lors du décryptage de la réponse du serveur d'identité. Veuillez contacter votre administrateur système."
},
{
"id": "ent.saml.do_login.empty_response.app_error",
@@ -3404,11 +3428,11 @@
},
{
"id": "jobs.do_job.batch_size.parse_error",
- "translation": "Could not parse message export job BatchSize."
+ "translation": "Impossible d'interpréter le paramètre BatchSize de la tâche d'exportation de messages."
},
{
"id": "jobs.do_job.batch_start_timestamp.parse_error",
- "translation": "Could not parse message export job ExportFromTimestamp."
+ "translation": "Impossible d'interpréter le paramètre ExportFromTimestamp de la tâche d'exportation de messages."
},
{
"id": "jobs.request_cancellation.status.error",
@@ -3420,11 +3444,11 @@
},
{
"id": "jobs.start_synchronize_job.timeout",
- "translation": "Reached AD/LDAP sychronization job timeout."
+ "translation": "Temps d'attente pour la tâche de synchronisation AD/LDAP atteint."
},
{
"id": "manaultesting.manual_test.parse.app_error",
- "translation": "Impossible de décoder l'URL"
+ "translation": "Impossible d'interpréter l'URL"
},
{
"id": "manaultesting.test_autolink.unable.app_error",
@@ -3584,7 +3608,7 @@
},
{
"id": "model.client.get_team_icon.app_error",
- "translation": "Unable to read the team icon from the body response."
+ "translation": "Impossible de lire l'icône d'équipe du corps de la réponse."
},
{
"id": "model.client.read_file.app_error",
@@ -3592,7 +3616,7 @@
},
{
"id": "model.client.set_profile_user.no_file.app_error",
- "translation": "Pas de fichier dans le paramètre \"image\" de la requête"
+ "translation": "Aucun fichier dans le champ « image » de la requête."
},
{
"id": "model.client.set_profile_user.writer.app_error",
@@ -3600,11 +3624,11 @@
},
{
"id": "model.client.set_team_icon.no_file.app_error",
- "translation": "Pas de fichier dans le paramètre \"image\" de la requête"
+ "translation": "Aucun fichier dans le champ « image » de la requête."
},
{
"id": "model.client.set_team_icon.writer.app_error",
- "translation": "Impossible d'écrire la demande"
+ "translation": "Impossible d'écrire la requête."
},
{
"id": "model.client.upload_post_attachment.channel_id.app_error",
@@ -3636,11 +3660,11 @@
},
{
"id": "model.cluster.is_valid.create_at.app_error",
- "translation": "CreateAt must be set"
+ "translation": "CreateAt doit être défini."
},
{
"id": "model.cluster.is_valid.hostname.app_error",
- "translation": "Hostname must be set"
+ "translation": "Hostname doit être défini."
},
{
"id": "model.cluster.is_valid.id.app_error",
@@ -3648,15 +3672,15 @@
},
{
"id": "model.cluster.is_valid.last_ping_at.app_error",
- "translation": "LastPingAt must be set"
+ "translation": "LastPingAt doit être défini."
},
{
"id": "model.cluster.is_valid.name.app_error",
- "translation": "ClusterName must be set"
+ "translation": "ClusterName doit être défini."
},
{
"id": "model.cluster.is_valid.type.app_error",
- "translation": "Type must be set"
+ "translation": "Le type doit être défini."
},
{
"id": "model.command.is_valid.create_at.app_error",
@@ -3760,7 +3784,7 @@
},
{
"id": "model.config.is_valid.allow_cookies_for_subdomains.app_error",
- "translation": "Allowing cookies for subdomains requires SiteURL to be set."
+ "translation": "Autoriser les cookies pour les sous-domaines requiert le paramètre SiteURL d'être défini."
},
{
"id": "model.config.is_valid.atmos_camo_image_proxy_options.app_error",
@@ -3784,7 +3808,7 @@
},
{
"id": "model.config.is_valid.display.custom_url_schemes.app_error",
- "translation": "Le protocole URL personnalisé {{.Scheme}} est invalide. Les protocoles URL personnalisés doivent commencer par une lettre et ne peuvent contenir que des lettres, des chiffres, et les caractères plus (+), point (.), et trait d'union (-)."
+ "translation": "Le protocole URL personnalisé {{.Scheme}} est invalide. Les protocoles URL personnalisés doivent commencer par une lettre et ne peuvent contenir que des lettres, des chiffres et traits d'union (-)."
},
{
"id": "model.config.is_valid.elastic_search.aggregate_posts_after_days.app_error",
@@ -3808,7 +3832,7 @@
},
{
"id": "model.config.is_valid.elastic_search.posts_aggregator_job_start_time.app_error",
- "translation": "Le paramètre Elasticsearch PostsAggregatorJobStartTime doit être une heure au format \"hh:mm\""
+ "translation": "Le paramètre Elasticsearch PostsAggregatorJobStartTime doit être une heure au format « hh:mm »"
},
{
"id": "model.config.is_valid.elastic_search.request_timeout_seconds.app_error",
@@ -3816,7 +3840,7 @@
},
{
"id": "model.config.is_valid.email_batching_buffer_size.app_error",
- "translation": "Taille du buffer d'envoi d'e-mails par lot invalide. Doit être 0 ou un nombre positif."
+ "translation": "Taille du buffer d'envoi d'e-mails par lot invalide pour les paramètres d'e-mail. Doit être 0 ou un nombre positif."
},
{
"id": "model.config.is_valid.email_batching_interval.app_error",
@@ -3828,23 +3852,23 @@
},
{
"id": "model.config.is_valid.email_salt.app_error",
- "translation": "Clé de salage pour les invitations invalide dans les paramètres de messagerie. Doit être composée de 32 caractères ou plus."
+ "translation": "Clé de salage pour les invitations invalide pour les paramètres d'e-mail. Doit être égal ou supérieure à 32 caractères."
},
{
"id": "model.config.is_valid.email_security.app_error",
- "translation": "Sécurité de connexion invalide pour les paramètres e-mail. Doit être '', 'TLS' ou 'STARTTLS'"
+ "translation": "Sécurité de connexion invalide pour les paramètres d'e-mail. Doit être « », « TLS » ou « STARTTLS »."
},
{
"id": "model.config.is_valid.encrypt_sql.app_error",
- "translation": "Clé de chiffrement rest invalide dans les paramètres SQL. Doit être composée de 32 caractères ou plus."
+ "translation": "Clé de chiffrement invalide pour les paramètres SQL pour les données au repos (les données stockées sur des disques dans ces centres de données sont appelées « au repos », au contraire de « en transit » soit lorsqu'elles sont transférées sur le réseau). Doit être égale ou supérieure à 32 caractères."
},
{
"id": "model.config.is_valid.file_driver.app_error",
- "translation": "Nom de pilote invalide dans les paramètres de fichiers. Doit être 'local' ou 'amazons3'"
+ "translation": "Nom de pilote invalide pour les paramètres de fichiers. Doit être « local » ou « amazons3 »."
},
{
"id": "model.config.is_valid.file_salt.app_error",
- "translation": "Clé de salage des liens publics invalide dans les paramètres de fichier. Doit être composée de 32 caractères ou plus."
+ "translation": "Clé de salage des liens publics invalide pour les paramètres de fichier. Doit être égale ou supérieure à 32 caractères."
},
{
"id": "model.config.is_valid.group_unread_channels.app_error",
@@ -3856,11 +3880,11 @@
},
{
"id": "model.config.is_valid.ldap_basedn",
- "translation": "Le champ AD/LDAP \"BaseDN\" est requis."
+ "translation": "Le champ AD/LDAP « BaseDN » est requis."
},
{
"id": "model.config.is_valid.ldap_email",
- "translation": "Le champ AD/LDAP \"Email Attribute\" est requis."
+ "translation": "Le champ AD/LDAP « Email Attribute » est requis."
},
{
"id": "model.config.is_valid.ldap_id",
@@ -3876,11 +3900,11 @@
},
{
"id": "model.config.is_valid.ldap_security.app_error",
- "translation": "Sécurité de connexion invalide pour les paramètres AD/LDAP. Doit être '', 'TLS' ou 'STARTTLS'"
+ "translation": "Sécurité de connexion invalide pour les paramètres AD/LDAP. Doit être « », « TLS » ou « STARTTLS »."
},
{
"id": "model.config.is_valid.ldap_server",
- "translation": "Le champ \"AD/LDAP Server\" est requis."
+ "translation": "Le champ AD/LDAP « AD/LDAP Server » est requis."
},
{
"id": "model.config.is_valid.ldap_sync_interval.app_error",
@@ -3888,7 +3912,7 @@
},
{
"id": "model.config.is_valid.ldap_username",
- "translation": "Le champ AD/LDAP \"Username Attribute\" est obligatoire."
+ "translation": "Le champ AD/LDAP « Username Attribute » est obligatoire."
},
{
"id": "model.config.is_valid.listen_address.app_error",
@@ -3900,7 +3924,7 @@
},
{
"id": "model.config.is_valid.login_attempts.app_error",
- "translation": "Nombre maximum de tentatives de connexion invalide dans les paramètre de service. Doit être un entier positif."
+ "translation": "Nombre maximum de tentatives de connexion invalide pour les paramètres de service. Doit être un entier positif."
},
{
"id": "model.config.is_valid.max_burst.app_error",
@@ -3908,7 +3932,7 @@
},
{
"id": "model.config.is_valid.max_channels.app_error",
- "translation": "Le nombre maximum de canaux par équipe défini dans les paramètres d'équipe est invalide. Doit être un entier positif."
+ "translation": "Nombre maximum de canaux par équipe invalide pour les paramètres d'équipe. Doit être un entier positif."
},
{
"id": "model.config.is_valid.max_file_size.app_error",
@@ -3916,11 +3940,11 @@
},
{
"id": "model.config.is_valid.max_notify_per_channel.app_error",
- "translation": "Le nombre maximum de notifications par canal pour les paramètres d'équipe. Doit être un entier positif."
+ "translation": "Nombre maximum de notifications par canal invalide pour les paramètres d'équipe. Doit être un entier positif."
},
{
"id": "model.config.is_valid.max_users.app_error",
- "translation": "Nombre maximum d'utilisateurs par équipe invalide dans les paramètres d'équipes. Doit être un entier positif."
+ "translation": "Nombre maximum d'utilisateurs par équipe invalide pour les paramètres d'équipe. Doit être un entier positif."
},
{
"id": "model.config.is_valid.message_export.batch_size.app_error",
@@ -3940,7 +3964,7 @@
},
{
"id": "model.config.is_valid.message_export.export_type.app_error",
- "translation": "Le paramètre ExportFormat de la tâche d'exportation de messages doit être « actiance » ou « globalrelay »"
+ "translation": "Le paramètre ExportFormat de la tâche d'exportation de messages doit être « actiance », « csv » ou « globalrelay »."
},
{
"id": "model.config.is_valid.message_export.global_relay.config_missing.app_error",
@@ -3972,7 +3996,7 @@
},
{
"id": "model.config.is_valid.rate_sec.app_error",
- "translation": "Nombre par secondes invalide pour les paramètres de limite de fréquence. Doit être un entier positif."
+ "translation": "Nombre par seconde invalide pour les paramètres de limite de fréquence. Doit être un entier positif."
},
{
"id": "model.config.is_valid.read_timeout.app_error",
@@ -3980,7 +4004,7 @@
},
{
"id": "model.config.is_valid.restrict_direct_message.app_error",
- "translation": "La restriction du message personnel est invalide. Doit être 'tout', ou 'équipe'"
+ "translation": "Restriction du message personnel invalide. Doit être « tout » ou « équipe »."
},
{
"id": "model.config.is_valid.saml_assertion_consumer_service_url.app_error",
@@ -3988,7 +4012,7 @@
},
{
"id": "model.config.is_valid.saml_email_attribute.app_error",
- "translation": "L'attribut \"Email\" est invalide. Il doit être renseigné."
+ "translation": "L'attribut « Email » est invalide. Il doit être défini."
},
{
"id": "model.config.is_valid.saml_idp_cert.app_error",
@@ -4012,7 +4036,7 @@
},
{
"id": "model.config.is_valid.saml_username_attribute.app_error",
- "translation": "L'attribut \"Username\" est invalide. Il doit être renseigné."
+ "translation": "L'attribut « Username » est invalide. Il doit être défini."
},
{
"id": "model.config.is_valid.site_url.app_error",
@@ -4028,31 +4052,31 @@
},
{
"id": "model.config.is_valid.sql_conn_max_lifetime_milliseconds.app_error",
- "translation": "Invalid connection maximum lifetime for SQL settings. Must be a non-negative number."
+ "translation": "Durée de vie maximale de la connexion invalide pour les paramètres SQL. Doit être un entier positif."
},
{
"id": "model.config.is_valid.sql_data_src.app_error",
- "translation": "Source de données invalide pour les paramètres SQL. Doit être renseignée."
+ "translation": "Source de données invalide pour les paramètres SQL. Doit être définie."
},
{
"id": "model.config.is_valid.sql_driver.app_error",
- "translation": "Nom de driver invalide pour les paramètres SQL. Doit être 'mysql' ou 'postgres'"
+ "translation": "Nom de driver invalide pour les paramètres SQL. Doit être « mysql » ou « postgres »."
},
{
"id": "model.config.is_valid.sql_idle.app_error",
- "translation": "Le nombre maximum invalide de connexions inoccupées dans les paramètres SQL. Doit être un entier positif."
+ "translation": "Nombre maximum de connexions inactives invalide pour les paramètres SQL. Doit être un entier positif."
},
{
"id": "model.config.is_valid.sql_max_conn.app_error",
- "translation": "Le nombre maximum invalide de connexions ouvertes dans les paramètres SQL. Doit être un entier positif."
+ "translation": "Nombre maximum de connexions ouvertes invalide dans les paramètres SQL. Doit être un entier positif."
},
{
"id": "model.config.is_valid.sql_query_timeout.app_error",
- "translation": "Temps d'attente pour la requête SQL invalide. Doit être un entier positif."
+ "translation": "Temps d'attente de requête SQL invalide. Doit être un entier positif."
},
{
"id": "model.config.is_valid.teammate_name_display.app_error",
- "translation": "Affichage invalide du coéquipier. Doit être 'full_name', 'nickname_full_name' ou 'username'"
+ "translation": "Affichage du membre d'équipe invalide. Doit être « full_name », « nickname_full_name » ou « username »."
},
{
"id": "model.config.is_valid.time_between_user_typing.app_error",
@@ -4068,7 +4092,7 @@
},
{
"id": "model.config.is_valid.webrtc_gateway_ws_url.app_error",
- "translation": "L'URL de la passerelle Websocket WebRTC doit être une URL valide et doit commencer par ws:// ou wss://."
+ "translation": "L'URL de la passerelle WebSocket WebRTC doit être une URL valide et doit commencer par ws:// ou wss://."
},
{
"id": "model.config.is_valid.webrtc_stun_uri.app_error",
@@ -4092,7 +4116,7 @@
},
{
"id": "model.config.is_valid.websocket_url.app_error",
- "translation": "L'URL websocket doit être une URL valide et commencer par ws:// ou wss://."
+ "translation": "L'URL WebSocket doit être une URL valide et commencer par ws:// ou wss://."
},
{
"id": "model.config.is_valid.write_timeout.app_error",
@@ -4124,27 +4148,27 @@
},
{
"id": "model.file_info.is_valid.create_at.app_error",
- "translation": "Valeur invalide pour le délai d'attente de lecture."
+ "translation": "Valeur invalide pour le paramètre « create_at »."
},
{
"id": "model.file_info.is_valid.id.app_error",
- "translation": "Valeur invalide pour le délai d'attente de lecture."
+ "translation": "Valeur invalide pour le paramètre « id »."
},
{
"id": "model.file_info.is_valid.path.app_error",
- "translation": "Valeur invalide pour le délai d'attente de lecture."
+ "translation": "Valeur invalide pour le paramètre « path »."
},
{
"id": "model.file_info.is_valid.post_id.app_error",
- "translation": "Valeur invalide pour le délai d'attente de lecture."
+ "translation": "Valeur invalide pour le paramètre « post_id »."
},
{
"id": "model.file_info.is_valid.update_at.app_error",
- "translation": "Valeur invalide pour le délai d'attente de lecture."
+ "translation": "Valeur invalide pour le paramètre « update_at »."
},
{
"id": "model.file_info.is_valid.user_id.app_error",
- "translation": "Valeur invalide pour le délai d'attente de lecture."
+ "translation": "Valeur invalide pour le paramètre « user_id »."
},
{
"id": "model.incoming_hook.channel_id.app_error",
@@ -4208,11 +4232,11 @@
},
{
"id": "model.license_record.is_valid.create_at.app_error",
- "translation": "Invalid value for create_at when uploading a license."
+ "translation": "Valeur du paramètre « create_at » invalide lors de l'envoi de la licence."
},
{
"id": "model.license_record.is_valid.id.app_error",
- "translation": "Invalid value for id when uploading a license."
+ "translation": "Valeur du paramètre « id » invalide lors de l'envoi de la licence."
},
{
"id": "model.oauth.is_valid.app_id.app_error",
@@ -4264,7 +4288,7 @@
},
{
"id": "model.outgoing_hook.is_valid.content_type.app_error",
- "translation": "Invalid value for content_type"
+ "translation": "Valeur invalide pour le paramètre « content_type »."
},
{
"id": "model.outgoing_hook.is_valid.create_at.app_error",
@@ -4492,7 +4516,7 @@
},
{
"id": "model.user_access_token.is_valid.id.app_error",
- "translation": "Valeur invalide pour le délai d'attente de lecture."
+ "translation": "Valeur invalide pour le paramètre « id »."
},
{
"id": "model.user_access_token.is_valid.token.app_error",
@@ -4508,11 +4532,11 @@
},
{
"id": "model.websocket_client.connect_fail.app_error",
- "translation": "Unable to connect to the WebSocket server."
+ "translation": "Impossible de se connecter au serveur WebSocket."
},
{
"id": "oauth.gitlab.tos.error",
- "translation": "GitLab's Terms of Service have updated. Please go to gitlab.com to accept them and then try logging into Mattermost again."
+ "translation": "Les conditions d'utilisation de GitLab ont été mises à jour. Veuillez vous rendre sur gitlab.com pour les accepter et réessayez de vous connecter à Mattermost."
},
{
"id": "plugin.rpcplugin.invocation.error",
@@ -4572,7 +4596,7 @@
},
{
"id": "store.sql_channel.clear_all_custom_role_assignments.select.app_error",
- "translation": "Impossible de mettre à jour le membre du canal"
+ "translation": "Impossible de récupérer les membres du canal"
},
{
"id": "store.sql_channel.clear_all_custom_role_assignments.update.app_error",
@@ -4632,7 +4656,7 @@
},
{
"id": "store.sql_channel.get_deleted.missing.app_error",
- "translation": "No deleted channels exist"
+ "translation": "Il n'y a aucun canal supprimé"
},
{
"id": "store.sql_channel.get_deleted_by_name.existing.app_error",
@@ -4844,27 +4868,27 @@
},
{
"id": "store.sql_cluster_discovery.cleanup.app_error",
- "translation": "Failed to save ClusterDiscovery row"
+ "translation": "Impossible d'enregistrer la ligne ClusterDiscovery"
},
{
"id": "store.sql_cluster_discovery.delete.app_error",
- "translation": "Failed to delete"
+ "translation": "Impossible de supprimer"
},
{
"id": "store.sql_cluster_discovery.exists.app_error",
- "translation": "Échec de la vérification de l'existence de la table %v"
+ "translation": "Impossible de vérifier s'il existe"
},
{
"id": "store.sql_cluster_discovery.get_all.app_error",
- "translation": "Failed to get all discovery rows"
+ "translation": "Impossible de récupérer l'ensemble des lignes découvertes"
},
{
"id": "store.sql_cluster_discovery.save.app_error",
- "translation": "Failed to save ClusterDiscovery row"
+ "translation": "Impossible d'enregistrer la ligne ClusterDiscovery"
},
{
"id": "store.sql_cluster_discovery.set_last_ping.app_error",
- "translation": "Failed to update last ping at"
+ "translation": "Impossible de mettre à jour le paramètre « last ping at »"
},
{
"id": "store.sql_command.analytics_command_count.app_error",
@@ -5156,7 +5180,7 @@
},
{
"id": "store.sql_post.compliance_export.app_error",
- "translation": "We couldn't get the compliance export posts."
+ "translation": "Impossible de récupérer les messages de l'export de conformité."
},
{
"id": "store.sql_post.delete.app_error",
@@ -5168,7 +5192,7 @@
},
{
"id": "store.sql_post.get_flagged_posts.app_error",
- "translation": "Impossible de récupérer le nombre de canaux"
+ "translation": "Impossible de récupérer les messages marqués d'un indicateur"
},
{
"id": "store.sql_post.get_parents_posts.app_error",
@@ -5328,11 +5352,11 @@
},
{
"id": "store.sql_reaction.delete_all_with_emoji_name.delete_reactions.app_error",
- "translation": "Impossible de supprimer la réaction avec le nom d'émoticône donné"
+ "translation": "Impossible de supprimer toutes les réactions portant le nom d'émoticône spécifié"
},
{
"id": "store.sql_reaction.delete_all_with_emoji_name.get_reactions.app_error",
- "translation": "Impossible de récupérer les réactions avec le nom d'émoticône donné"
+ "translation": "Impossible de récupérer toutes les réactions portant le nom d'émoticône spécifié"
},
{
"id": "store.sql_reaction.get_for_post.app_error",
@@ -5356,15 +5380,15 @@
},
{
"id": "store.sql_recover.delete.app_error",
- "translation": "Impossible de supprimer le plugin"
+ "translation": "Impossible de supprimer le jeton"
},
{
"id": "store.sql_recover.get_by_code.app_error",
- "translation": "Unable to get a token with this code"
+ "translation": "Impossible de récupérer un jeton avec ce code"
},
{
"id": "store.sql_recover.save.app_error",
- "translation": "Impossible de sauvegarder le nouveau rôle"
+ "translation": "Impossible de sauvegarder le jeton"
},
{
"id": "store.sql_role.delete.update.app_error",
@@ -5536,7 +5560,7 @@
},
{
"id": "store.sql_status.update_last_activity_at.app_error",
- "translation": "Unable to update the last activity date and time of the user"
+ "translation": "Impossible de mettre à jour la date et heure de dernière activité de l'utilisateur"
},
{
"id": "store.sql_system.get.app_error",
@@ -5576,7 +5600,7 @@
},
{
"id": "store.sql_team.clear_all_custom_role_assignments.select.app_error",
- "translation": "Impossible de modifier le membre d'équipe"
+ "translation": "Impossible de récupérer les membres de l'équipe"
},
{
"id": "store.sql_team.clear_all_custom_role_assignments.update.app_error",
@@ -5720,11 +5744,11 @@
},
{
"id": "store.sql_team.update_last_team_icon_update.app_error",
- "translation": "We couldn't update the date of the last team icon update"
+ "translation": "Impossible de modifier la date de la dernière mise à jour de l'icône d'équipe"
},
{
"id": "store.sql_user.analytics_daily_active_users.app_error",
- "translation": "We couldn't get the active users during the requested period"
+ "translation": "Impossible de récupérer les utilisateurs actifs de la période spécifiée"
},
{
"id": "store.sql_user.analytics_get_inactive_users_count.app_error",
@@ -5752,11 +5776,11 @@
},
{
"id": "store.sql_user.clear_all_custom_role_assignments.select.app_error",
- "translation": "Failed to retrieve the users"
+ "translation": "Impossible de récupérer les utilisateurs"
},
{
"id": "store.sql_user.clear_all_custom_role_assignments.update.app_error",
- "translation": "Failed to update the user"
+ "translation": "Impossible de mettre à jour l'utilisateur"
},
{
"id": "store.sql_user.get.app_error",
@@ -5860,7 +5884,7 @@
},
{
"id": "store.sql_user.search.app_error",
- "translation": "We couldn't find any user maching the search parameters"
+ "translation": "Impossible de trouver des utilisateurs qui correspondent aux paramètres de recherche"
},
{
"id": "store.sql_user.update.app_error",
@@ -5920,7 +5944,7 @@
},
{
"id": "store.sql_user.update_update.app_error",
- "translation": "We couldn't update the date of the last update of the user"
+ "translation": "Impossible de modifier la date de la dernière mise à jour de l'utilisateur"
},
{
"id": "store.sql_user.verify_email.app_error",
@@ -5956,11 +5980,11 @@
},
{
"id": "store.sql_user_access_token.update_token_disable.app_error",
- "translation": "Impossible d'enregistrer le jeton d'accès."
+ "translation": "Impossible de désactiver le jeton d'accès."
},
{
"id": "store.sql_user_access_token.update_token_enable.app_error",
- "translation": "Impossible d'enregistrer le jeton d'accès."
+ "translation": "Impossible d'activer le jeton d'accès."
},
{
"id": "store.sql_webhooks.analytics_incoming_count.app_error",
@@ -6048,7 +6072,7 @@
},
{
"id": "utils.config.add_client_locale.app_error",
- "translation": "Impossible de charger le fichier de configuration de Mattermost : Ajout de DefaultClientLocale à AvailableLocales."
+ "translation": "Impossible de charger le fichier de configuration de Mattermost : Ajout de DefaultClientLocale à AvailableLocales."
},
{
"id": "utils.config.load_config.decoding.panic",
@@ -6064,15 +6088,15 @@
},
{
"id": "utils.config.supported_available_locales.app_error",
- "translation": "Impossible de charger le fichier de configuration de Mattermost : AvailableLocales doit inclure DefaultClientLocale. AvailableLocales sera défini pour toutes les langues comme valeur par défaut."
+ "translation": "Impossible de charger le fichier de configuration de Mattermost : AvailableLocales doit inclure DefaultClientLocale. AvailableLocales sera défini pour toutes les langues comme valeur par défaut."
},
{
"id": "utils.config.supported_client_locale.app_error",
- "translation": "Impossible de charger le fichier de configuration de Mattermost : DefaultClientLocale doit être l'une des langues supportées. DefaultClientLocale sera défini comme valeur par défaut."
+ "translation": "Impossible de charger le fichier de configuration de Mattermost : DefaultClientLocale doit être l'une des langues supportées. DefaultClientLocale sera défini sur Anglais (en) comme valeur par défaut."
},
{
"id": "utils.config.supported_server_locale.app_error",
- "translation": "Impossible de charger le fichier de configuration Mattermost : DefaultServerLocale doit être l'une des langues supportées. DefaultServerLocale sera défini comme valeur par défaut."
+ "translation": "Impossible de charger le fichier de configuration Mattermost : DefaultServerLocale doit être l'une des langues supportées. DefaultServerLocale sera défini sur Anglais (en) comme valeur par défaut."
},
{
"id": "utils.file.list_directory.local.app_error",
@@ -6160,7 +6184,7 @@
},
{
"id": "web.get_access_token.internal_saving.app_error",
- "translation": "Impossible de mettre à jour le mot de passe de l'utilisateur"
+ "translation": "Impossible de mettre à jour les données d'accès de l'utilisateur."
},
{
"id": "web.incoming_webhook.channel.app_error",
@@ -6180,7 +6204,7 @@
},
{
"id": "web.incoming_webhook.parse.app_error",
- "translation": "Impossible d'analyser les données entrantes"
+ "translation": "Impossible d'interpréter les données entrantes"
},
{
"id": "web.incoming_webhook.permissions.app_error",
diff --git a/i18n/it.json b/i18n/it.json
index 998ab7602..f6787294f 100644
--- a/i18n/it.json
+++ b/i18n/it.json
@@ -192,6 +192,10 @@
"translation": "%v ha lasciato il canale."
},
{
+ "id": "api.channel.patch_update_channel.forbidden.app_error",
+ "translation": "Errore durante l'aggiornamento del membro del canale"
+ },
+ {
"id": "api.channel.post_channel_privacy_message.error",
"translation": "Impossibile pubblicare il messaggio di aggiornamento privacy sul canale"
},
@@ -308,6 +312,10 @@
"translation": "Manda un email di invito al tuo gruppo Mattermost"
},
{
+ "id": "api.command.invite_people.email_invitations_off",
+ "translation": "Email invitations are disabled, no invite(s) sent"
+ },
+ {
"id": "api.command.invite_people.email_off",
"translation": "Le email non sono state configurate, quindi nessun invito è stato inviato"
},
@@ -575,6 +583,10 @@
"translation": "messaggio"
},
{
+ "id": "api.command_groupmsg.permission.app_error",
+ "translation": "You don't have the appropriate permissions to create a new group message."
+ },
+ {
"id": "api.command_help.desc",
"translation": "Vai alla pagina di aiuto di Mattermost"
},
@@ -635,6 +647,10 @@
"translation": "{{.User}} è già membro del canale."
},
{
+ "id": "api.command_invite_people.permission.app_error",
+ "translation": "You don't have permission to invite new users to this server."
+ },
+ {
"id": "api.command_join.desc",
"translation": "Entra nel canale aperto"
},
@@ -727,6 +743,10 @@
"translation": "messaggio"
},
{
+ "id": "api.command_msg.permission.app_error",
+ "translation": "You don't have the appropriate permissions to direct message this user."
+ },
+ {
"id": "api.command_mute.desc",
"translation": "Disattiva le notifiche desktop, email e push per il canale corrente oppure per i canali specificati."
},
@@ -1599,6 +1619,10 @@
"translation": "Richiesta mal formata: campo filesize non presente."
},
{
+ "id": "api.team.invite_members.disabled.app_error",
+ "translation": "Email invitations are disabled."
+ },
+ {
"id": "api.team.invite_members.invalid_email.app_error",
"translation": "I seguenti indirizzi email non appartengono ad un dominio accettato: {{.Addresses}}. Contattare l'amministratore di sistema per maggiori dettagli."
},
@@ -3784,7 +3808,7 @@
},
{
"id": "model.config.is_valid.display.custom_url_schemes.app_error",
- "translation": "Lo schema URL personalizzato {{.Scheme}} non è valido. Gli schemi URL personalizzati devono iniziare con una lettera e contenere solo lettere, numeri, più (+), punti, (.) e trattini (-)."
+ "translation": "Lo schema URL personalizzato {{.Scheme}} non è valido. Gli schemi URL personalizzati devono iniziare con una lettera e contenere solo lettere, numeri e trattini (-)."
},
{
"id": "model.config.is_valid.elastic_search.aggregate_posts_after_days.app_error",
diff --git a/i18n/ja.json b/i18n/ja.json
index d70038d97..5ffa7d64a 100644
--- a/i18n/ja.json
+++ b/i18n/ja.json
@@ -192,6 +192,10 @@
"translation": "%v がチャンネルから脱退しました。"
},
{
+ "id": "api.channel.patch_update_channel.forbidden.app_error",
+ "translation": "チャンネルメンバーを更新できませんでした"
+ },
+ {
"id": "api.channel.post_channel_privacy_message.error",
"translation": "チャンネル可視性更新メッセージを投稿できませんでした。"
},
@@ -308,6 +312,10 @@
"translation": "あなたのMattermostチームに招待の電子メールを送る"
},
{
+ "id": "api.command.invite_people.email_invitations_off",
+ "translation": "Email invitations are disabled, no invite(s) sent"
+ },
+ {
"id": "api.command.invite_people.email_off",
"translation": "電子メールが使えるように設定されていません。招待の電子メールは送信できませんでした。"
},
@@ -575,6 +583,10 @@
"translation": "メッセージ"
},
{
+ "id": "api.command_groupmsg.permission.app_error",
+ "translation": "You don't have the appropriate permissions to create a new group message."
+ },
+ {
"id": "api.command_help.desc",
"translation": "Mattermostヘルプページを開く"
},
@@ -635,6 +647,10 @@
"translation": "{{.User}} は既にチャンネルに追加されています。"
},
{
+ "id": "api.command_invite_people.permission.app_error",
+ "translation": "You don't have permission to invite new users to this server."
+ },
+ {
"id": "api.command_join.desc",
"translation": "公開されているチャンネルに参加する"
},
@@ -727,6 +743,10 @@
"translation": "メッセージ"
},
{
+ "id": "api.command_msg.permission.app_error",
+ "translation": "You don't have the appropriate permissions to direct message this user."
+ },
+ {
"id": "api.command_mute.desc",
"translation": "現在のチャンネル、もしくは指定された [チャンネル] のデスクトップ、電子メール、プッシュ通知をオフにする。"
},
@@ -1599,6 +1619,10 @@
"translation": "不正なリクエスト: ファイルサイズ項目が存在しません。"
},
{
+ "id": "api.team.invite_members.disabled.app_error",
+ "translation": "Email invitations are disabled."
+ },
+ {
"id": "api.team.invite_members.invalid_email.app_error",
"translation": "以下の電子メールアドレスのドメインは許可されていません: {{.Addresses}}。詳細についてはシステム管理者に問い合わせてください。"
},
diff --git a/i18n/ko.json b/i18n/ko.json
index 077414d56..4be357e96 100644
--- a/i18n/ko.json
+++ b/i18n/ko.json
@@ -37,7 +37,7 @@
},
{
"id": "api.admin.saml.not_available.app_error",
- "translation": "SAML이 설정되지 않았거나 서버에서 지원하지 않습니다"
+ "translation": "SAML 2.0이 설정되지 않았거나 해당 서버에서 지원하지 않습니다."
},
{
"id": "api.admin.test_email.body",
@@ -161,7 +161,7 @@
},
{
"id": "api.channel.delete_channel.type.invalid",
- "translation": "Cannot delete direct or group message channels"
+ "translation": "개인 혹은 단체 메시지 채널을 삭제할 수 없습니다."
},
{
"id": "api.channel.join_channel.already_deleted.app_error",
@@ -192,6 +192,10 @@
"translation": "%v 가 채널을 떠났습니다."
},
{
+ "id": "api.channel.patch_update_channel.forbidden.app_error",
+ "translation": "Failed to update the channel"
+ },
+ {
"id": "api.channel.post_channel_privacy_message.error",
"translation": "채널 공개상태설정 업데이트 메시지 전달이 실패했습니다."
},
@@ -257,7 +261,7 @@
},
{
"id": "api.channel.update_channel_scheme.license.error",
- "translation": "지금 라이선스는 고급 퍼미션을 지원하지 않습니다."
+ "translation": "귀하의 라이센스는 채널 스키마의 업데이트를 지원하지 않습니다."
},
{
"id": "api.channel.update_channel_scheme.scheme_scope.error",
@@ -308,6 +312,10 @@
"translation": "여러분의 Mattermost 팀에게 초대 메일을 보내기"
},
{
+ "id": "api.command.invite_people.email_invitations_off",
+ "translation": "Email invitations are disabled, no invite(s) sent"
+ },
+ {
"id": "api.command.invite_people.email_off",
"translation": "이메일이 설정되어 있지 않아서 초대메일 보낼 수 없음"
},
@@ -575,6 +583,10 @@
"translation": "메시지"
},
{
+ "id": "api.command_groupmsg.permission.app_error",
+ "translation": "You don't have the appropriate permissions to create a new group message."
+ },
+ {
"id": "api.command_help.desc",
"translation": "Mattermost 도움말 페이지 열기"
},
@@ -635,6 +647,10 @@
"translation": "채널에 이미 {{.User}} 가 있습니다."
},
{
+ "id": "api.command_invite_people.permission.app_error",
+ "translation": "You don't have permission to invite new users to this server."
+ },
+ {
"id": "api.command_join.desc",
"translation": "열린 채널에 참가"
},
@@ -727,6 +743,10 @@
"translation": "메시지"
},
{
+ "id": "api.command_msg.permission.app_error",
+ "translation": "You don't have the appropriate permissions to direct message this user."
+ },
+ {
"id": "api.command_mute.desc",
"translation": "지정된 현재 채널 또는[채널]에 대해 데스크 톱, 이메일 및 푸시 알림 기능을 해제합니다."
},
@@ -1014,7 +1034,7 @@
},
{
"id": "api.emoji.upload.open.app_error",
- "translation": "이모티콘을 생성할 수 없습니다. 이미지 인코딩 시도 중 오류가 발생했습니다."
+ "translation": "이모티콘을 생성할 수 없습니다. 첨부된 이미지를 여는 도중에 문제가 발생하였습니다."
},
{
"id": "api.file.attachments.disabled.app_error",
@@ -1058,19 +1078,19 @@
},
{
"id": "api.file.read_file.reading_local.app_error",
- "translation": "로컬 서버 저장소를 읽는 도중 에러가 발생했습니다."
+ "translation": "로컬 서버의 파일 저장소를 읽는 도중에 문제가 발생했습니다."
},
{
"id": "api.file.read_file.s3.app_error",
- "translation": "로컬 서버 저장소를 읽는 도중 에러가 발생했습니다."
+ "translation": "S3저장소를 읽는 도중에 문제가 발생했습니다."
},
{
"id": "api.file.reader.reading_local.app_error",
- "translation": "로컬 서버 저장소를 읽는 도중 에러가 발생했습니다."
+ "translation": "로컬 서버의 파일 저장소를 읽는 도중 문제가 발생했습니다."
},
{
"id": "api.file.reader.s3.app_error",
- "translation": "로컬 서버 저장소를 읽는 도중 에러가 발생했습니다."
+ "translation": "S3저장소 탐색기를 여는 도중에 문제가 발생했습니다."
},
{
"id": "api.file.test_connection.local.connection.app_error",
@@ -1270,7 +1290,7 @@
},
{
"id": "api.outgoing_webhook.disabled.app_error",
- "translation": "Outgoing webhook은 관리자가 사용할 수 없게 설정했습니다."
+ "translation": "Outgoing webhook은 관리자에 의해 제한되었습니다."
},
{
"id": "api.plugin.upload.array.app_error",
@@ -1368,11 +1388,11 @@
},
{
"id": "api.post.send_notifications_and_forget.push_explicit_mention",
- "translation": "~에서 메시지 전송"
+ "translation": "~가 당신을 언급했습니다."
},
{
"id": "api.post.send_notifications_and_forget.push_general_message",
- "translation": "메세지 게시"
+ "translation": "~가 메시지를 게시했습니다."
},
{
"id": "api.post.send_notifications_and_forget.push_image_only",
@@ -1424,15 +1444,15 @@
},
{
"id": "api.roles.patch_roles.license.error",
- "translation": "지금 라이선스는 고급 퍼미션을 지원하지 않습니다."
+ "translation": "귀하의 라이센스는 고급 권한을 지원하지 않습니다."
},
{
"id": "api.scheme.create_scheme.license.error",
- "translation": "지금 라이선스는 고급 퍼미션을 지원하지 않습니다."
+ "translation": "귀하의 라이센스는 권한 스키마 생성을 지원하지 않습니다."
},
{
"id": "api.scheme.delete_scheme.license.error",
- "translation": "지금 라이선스는 고급 퍼미션을 지원하지 않습니다."
+ "translation": "귀하의 라이센스는 권한 스키마 삭제를 지원하지 않습니다."
},
{
"id": "api.scheme.get_channels_for_scheme.scope.error",
@@ -1444,7 +1464,7 @@
},
{
"id": "api.scheme.patch_scheme.license.error",
- "translation": "지금 라이선스는 고급 퍼미션을 지원하지 않습니다."
+ "translation": "귀하의 라이센스는 권한 스키마 업데이트를 지원하지 않습니다."
},
{
"id": "api.server.start_server.forward80to443.disabled_while_using_lets_encrypt",
@@ -1468,51 +1488,51 @@
},
{
"id": "api.slackimport.slack_add_bot_user.email_pwd",
- "translation": "The Integration/Slack Bot user with email {{.Email}} and password {{.Password}} has been imported.\r\n"
+ "translation": "이메일 {{.Email}}, 비밀번호 {{.Password}}를 사용하는 Slack Bot 계정이 추가되었습니다.\r\n"
},
{
"id": "api.slackimport.slack_add_bot_user.unable_import",
- "translation": "Unable to import the Integration/Slack Bot user {{.Username}}.\r\n"
+ "translation": "{{.Username}} Slack Bot계정을 추가할 수 없습니다.\r\n"
},
{
"id": "api.slackimport.slack_add_channels.added",
- "translation": "\r\n 채널 추가됨 \r\n"
+ "translation": "\r\n채널 추가되었습니다:\r\n"
},
{
"id": "api.slackimport.slack_add_channels.failed_to_add_user",
- "translation": "Unable to add Slack user {{.Username}} to channel.\r\n"
+ "translation": "Slack 사용자 {{.Username}}을(를) 채널에 추가할 수 없습니다.\r\n"
},
{
"id": "api.slackimport.slack_add_channels.import_failed",
- "translation": "Unable to import Slack channel {{.DisplayName}}.\r\n"
+ "translation": "Slack채널 {{.DisplayName}}을(를) 적용할 수 없습니다.\r\n"
},
{
"id": "api.slackimport.slack_add_channels.merge",
- "translation": "The Slack channel {{.DisplayName}} already exists as an active Mattermost channel. Both channels have been merged.\r\n"
+ "translation": "Slack채널 {{.DisplayName}}이(가) 이미 Mattermost채널에 활성상태로 존재합니다. 두 채널은 통합되었습니다.\r\n"
},
{
"id": "api.slackimport.slack_add_users.created",
- "translation": "\r\n 사용자 생성됨\r\n"
+ "translation": "\r\n사용자가 생성되었습니다:\r\n"
},
{
"id": "api.slackimport.slack_add_users.email_pwd",
- "translation": "Slack user with email {{.Email}} and password {{.Password}} has been imported.\r\n"
+ "translation": "이메일 {{.Email}}, 비밀번호 {{.Password}}의 Slack사용자가 추가되었습니다.\r\n"
},
{
"id": "api.slackimport.slack_add_users.merge_existing",
- "translation": "Slack user merged with an existing Mattermost user with matching email {{.Email}} and username {{.Username}}.\r\n"
+ "translation": "이메일 {{.Email}}, 사용자명 {{.Username}}을 통해 Slack유저와 Mattermost에 존재하는 유저를 통합하였습니다.\r\n"
},
{
"id": "api.slackimport.slack_add_users.merge_existing_failed",
- "translation": "Slack user merged with an existing Mattermost user with matching email {{.Email}} and username {{.Username}}, but was unable to add the user to their team.\r\n"
+ "translation": "이메일 {{.Email}}, 사용자명 {{.Username}}을 통해 Slack유저와 Mattermost에 존재하는 유저를 통합하였습니다, 하지만 팀에는 추가하지 못했습니다.\r\n"
},
{
"id": "api.slackimport.slack_add_users.missing_email_address",
- "translation": "User {{.Username}} does not have an email address in the Slack export. Used {{.Email}} as a placeholder. The user should update their email address once logged in to the system.\r\n"
+ "translation": "사용자 {{.Username}}은(는) Slack 추출 정보에 이메일 계정이 없습니다. {{.Email}}을(를) 표시합니다. 사용자는 시스템에 접속하여 이메일 주소를 업데이트 해야 합니다.\r\n"
},
{
"id": "api.slackimport.slack_add_users.unable_import",
- "translation": "불러올 수 없는 사용자: {{.Username}}\r\n"
+ "translation": "불러올 수 없는 Slack사용자 입니다: {{.Username}}\r\n"
},
{
"id": "api.slackimport.slack_import.log",
@@ -1520,11 +1540,11 @@
},
{
"id": "api.slackimport.slack_import.note1",
- "translation": "- Some posts may not have been imported because they where not supported by this importer.\r\n"
+ "translation": "- 몇몇 메시지는 이 불러오기 프로그램을 지원하지 않기 때문에 불러올 수 없을 수 없습니다.\r\n"
},
{
"id": "api.slackimport.slack_import.note2",
- "translation": "- Slack bot posts are currently not supported.\r\n"
+ "translation": "- Slack bot 메시지는 최근 지원하지 않습니다.\r\n"
},
{
"id": "api.slackimport.slack_import.note3",
@@ -1532,31 +1552,31 @@
},
{
"id": "api.slackimport.slack_import.notes",
- "translation": "\r\n Notes \r\n"
+ "translation": "\r\n알림:\r\n"
},
{
"id": "api.slackimport.slack_import.open.app_error",
- "translation": "Unable to open the file: {{.Filename}}.\r\n"
+ "translation": "{{.Filename}}을 열 수 없습니다.\r\n"
},
{
"id": "api.slackimport.slack_import.team_fail",
- "translation": "팀을 가져오는데 실패했습니다.\r\n"
+ "translation": "불러오기 할 팀을 가져올 수 없습니다.\r\n"
},
{
"id": "api.slackimport.slack_import.zip.app_error",
- "translation": "Unable to open the Slack export zip file.\r\n"
+ "translation": "Slack에서 불러온 zip파일을 열 수 없습니다.\r\n"
},
{
"id": "api.status.user_not_found.app_error",
- "translation": "User not found"
+ "translation": "사용자를 찾을 수 업습니다."
},
{
"id": "api.team.add_user_to_team.added",
- "translation": "%v 이/가 %v에 의해 채널에 추가되었습니다"
+ "translation": "%v이/가 %v를 채널에 추가했습니다."
},
{
"id": "api.team.add_user_to_team.missing_parameter.app_error",
- "translation": "Parameter required to add user to team."
+ "translation": "사용자를 팀에 추가하기 위해서는 매개변수가 필요합니다."
},
{
"id": "api.team.get_invite_info.not_open_team",
@@ -1564,11 +1584,11 @@
},
{
"id": "api.team.get_team_icon.filesettings_no_driver.app_error",
- "translation": "Invalid driver name for file settings. Must be 'local' or 'amazons3'"
+ "translation": "파일 설정을 위한 잘못된 드라이버 입니다.~ ~는 '로컬' 혹은 'amazons3'여야 합니다."
},
{
"id": "api.team.get_team_icon.read_file.app_error",
- "translation": "Unable to read the team icon file."
+ "translation": "팀 아이콘 파일을 읽을 수 없습니다."
},
{
"id": "api.team.import_team.array.app_error",
@@ -1584,7 +1604,7 @@
},
{
"id": "api.team.import_team.no_import_from.app_error",
- "translation": "Malformed request: importFrom field is not present."
+ "translation": "잘못된 리퀘스트: importFrom필드가 존재하지 않습니다."
},
{
"id": "api.team.import_team.open.app_error",
@@ -1596,11 +1616,15 @@
},
{
"id": "api.team.import_team.unavailable.app_error",
- "translation": "Malformed request: filesize field is not present."
+ "translation": "잘못된 리퀘스트: filesize필드가 존재하지 않습니다."
+ },
+ {
+ "id": "api.team.invite_members.disabled.app_error",
+ "translation": "Email invitations are disabled."
},
{
"id": "api.team.invite_members.invalid_email.app_error",
- "translation": "The following email addresses do not belong to an accepted domain: {{.Addresses}}. Please contact your System Administrator for details."
+ "translation": "해당 이메일은 허가된 도메인이 아닙니다: {{.Addresses}}. 시스템 어드민에게 문의해 주세요."
},
{
"id": "api.team.invite_members.member",
@@ -1620,55 +1644,55 @@
},
{
"id": "api.team.join_team.post_and_forget",
- "translation": "%v joined the team."
+ "translation": "%v가 팀에 가입했습니다."
},
{
"id": "api.team.leave.left",
- "translation": "%v left the team."
+ "translation": "%v가 팀을 떠났습니다."
},
{
"id": "api.team.move_channel.post.error",
- "translation": "들어옴/나감 메시지를 등록하는 데 실패함"
+ "translation": "채널 이동 메시지를 게시할 수 없습니다."
},
{
"id": "api.team.move_channel.success",
- "translation": "This channel has been moved to this team from %v."
+ "translation": "본 채널은 %v에 의해 해당 팀으로 이동되었습니다. "
},
{
"id": "api.team.remove_team_icon.get_team.app_error",
- "translation": "An error occurred getting the team"
+ "translation": "팀을 받아오는 도중에 문제가 발생했습니다."
},
{
"id": "api.team.remove_user_from_team.missing.app_error",
- "translation": "The user does not appear to be part of this team."
+ "translation": "사용자는 해당 팀의 소속이 아닙니다."
},
{
"id": "api.team.remove_user_from_team.removed",
- "translation": "%v 가 채널에서 제거되었습니다."
+ "translation": "%v가 팀에서 제외되었습니다."
},
{
"id": "api.team.set_team_icon.array.app_error",
- "translation": "요청의 'image' 속성에 빈 배열이 전달되었습니다"
+ "translation": "'이미지'요청의 배열이 비어있습니다."
},
{
"id": "api.team.set_team_icon.decode.app_error",
- "translation": "Could not decode team icon"
+ "translation": "팀 아이콘을 decode할 수 없습니다."
},
{
"id": "api.team.set_team_icon.decode_config.app_error",
- "translation": "Could not decode team icon metadata"
+ "translation": "팀 아이콘 메타데이터를 decode할 수 없습니다."
},
{
"id": "api.team.set_team_icon.encode.app_error",
- "translation": "Could not encode team icon"
+ "translation": "팀 아이콘을 encode할 수 없습니다."
},
{
"id": "api.team.set_team_icon.get_team.app_error",
- "translation": "An error occurred getting the team"
+ "translation": "팀을 불러오는 도중 문제가 발생했습니다."
},
{
"id": "api.team.set_team_icon.no_file.app_error",
- "translation": "요청의 'image' 속성 아래에 파일이 없습니다"
+ "translation": "'이미지'요청에 파일이 없습니다."
},
{
"id": "api.team.set_team_icon.open.app_error",
@@ -1676,23 +1700,23 @@
},
{
"id": "api.team.set_team_icon.parse.app_error",
- "translation": "잘못된 multipart form을 파싱할 수 없습니다."
+ "translation": "multipart form을 파싱할 수 없습니다."
},
{
"id": "api.team.set_team_icon.storage.app_error",
- "translation": "파일을 업로드할 수 없습니다. 이미지 저장소가 설정되지 않았습니다."
+ "translation": "팀 아이콘을 업로드할 수 없습니다. 이미지 저장소가 설정되지 않았습니다."
},
{
"id": "api.team.set_team_icon.too_large.app_error",
- "translation": "이미지 파일을 불러올 수 없습니다. 파일이 너무 큽니다."
+ "translation": "팀 아이콘을 업로드 할 수 없습니다. 파일이 너무 큽니다."
},
{
"id": "api.team.set_team_icon.write_file.app_error",
- "translation": "Could not save team icon"
+ "translation": "팀 아이콘을 decode할 수 없습니다."
},
{
"id": "api.team.team_icon.update.app_error",
- "translation": "An error occurred updating the team icon"
+ "translation": "팀을 받아오는 도중에 문제가 발생했습니다."
},
{
"id": "api.team.update_member_roles.not_a_member",
diff --git a/i18n/nl.json b/i18n/nl.json
index 4ce0e742d..2b751e794 100644
--- a/i18n/nl.json
+++ b/i18n/nl.json
@@ -192,6 +192,10 @@
"translation": "%v heeft het kanaal verlaten."
},
{
+ "id": "api.channel.patch_update_channel.forbidden.app_error",
+ "translation": "Failed to update the channel"
+ },
+ {
"id": "api.channel.post_channel_privacy_message.error",
"translation": "Failed to post channel privacy update message."
},
@@ -308,6 +312,10 @@
"translation": "Stuur een email uitnodiging naar jouw Mattermost team"
},
{
+ "id": "api.command.invite_people.email_invitations_off",
+ "translation": "Email invitations are disabled, no invite(s) sent"
+ },
+ {
"id": "api.command.invite_people.email_off",
"translation": "Email is niet geconfigureerd, geen uitnodiging(en) verstuurd"
},
@@ -575,6 +583,10 @@
"translation": "bericht"
},
{
+ "id": "api.command_groupmsg.permission.app_error",
+ "translation": "You don't have the appropriate permissions to create a new group message."
+ },
+ {
"id": "api.command_help.desc",
"translation": "Open the Mattermost help page"
},
@@ -635,6 +647,10 @@
"translation": "{{.User}} is already in the channel."
},
{
+ "id": "api.command_invite_people.permission.app_error",
+ "translation": "You don't have permission to invite new users to this server."
+ },
+ {
"id": "api.command_join.desc",
"translation": "Neem deel aan het open kanaal"
},
@@ -727,6 +743,10 @@
"translation": "bericht"
},
{
+ "id": "api.command_msg.permission.app_error",
+ "translation": "You don't have the appropriate permissions to direct message this user."
+ },
+ {
"id": "api.command_mute.desc",
"translation": "Turns off desktop, email and push notifications for the current channel or the [channel] specified."
},
@@ -1599,6 +1619,10 @@
"translation": "Malformed request: filesize field is not present."
},
{
+ "id": "api.team.invite_members.disabled.app_error",
+ "translation": "Email invitations are disabled."
+ },
+ {
"id": "api.team.invite_members.invalid_email.app_error",
"translation": "The following email addresses do not belong to an accepted domain: {{.Addresses}}. Please contact your System Administrator for details."
},
diff --git a/i18n/pl.json b/i18n/pl.json
index 889d3b542..cb5db175a 100644
--- a/i18n/pl.json
+++ b/i18n/pl.json
@@ -192,6 +192,10 @@
"translation": "%v opuszcza kanał."
},
{
+ "id": "api.channel.patch_update_channel.forbidden.app_error",
+ "translation": "Nie udało się zaktualizować tytułu bezpośredniego kanału"
+ },
+ {
"id": "api.channel.post_channel_privacy_message.error",
"translation": "Failed to post channel privacy update message."
},
@@ -308,6 +312,10 @@
"translation": "Wyślij email z zaproszeniem do Twojego zespołu Mattermost"
},
{
+ "id": "api.command.invite_people.email_invitations_off",
+ "translation": "Email invitations are disabled, no invite(s) sent"
+ },
+ {
"id": "api.command.invite_people.email_off",
"translation": "Email nie został jeszcze skonfigurowany, nie wysłano żadnych zaproszeń"
},
@@ -575,6 +583,10 @@
"translation": "wiadomość"
},
{
+ "id": "api.command_groupmsg.permission.app_error",
+ "translation": "You don't have the appropriate permissions to create a new group message."
+ },
+ {
"id": "api.command_help.desc",
"translation": "Otwórz stronę pomocy Mattermost"
},
@@ -635,6 +647,10 @@
"translation": "{{.User}} is already in the channel."
},
{
+ "id": "api.command_invite_people.permission.app_error",
+ "translation": "You don't have permission to invite new users to this server."
+ },
+ {
"id": "api.command_join.desc",
"translation": "Dołącz do otwartego kanału"
},
@@ -727,6 +743,10 @@
"translation": "wiadomość"
},
{
+ "id": "api.command_msg.permission.app_error",
+ "translation": "You don't have the appropriate permissions to direct message this user."
+ },
+ {
"id": "api.command_mute.desc",
"translation": "Turns off desktop, email and push notifications for the current channel or the [channel] specified."
},
@@ -1599,6 +1619,10 @@
"translation": "Nieprawidłowe zapytanie: pole rozmiaru pliku nie istnieje."
},
{
+ "id": "api.team.invite_members.disabled.app_error",
+ "translation": "Email invitations are disabled."
+ },
+ {
"id": "api.team.invite_members.invalid_email.app_error",
"translation": "Następujące adresy e-mail nie należą do akceptowanej domeny: {{.Addresses}}. Skontaktuj się z administratorem systemu, by dowiedzieć się więcej."
},
diff --git a/i18n/pt-BR.json b/i18n/pt-BR.json
index 831f23258..f6c3dfd11 100644
--- a/i18n/pt-BR.json
+++ b/i18n/pt-BR.json
@@ -192,6 +192,10 @@
"translation": "%v deixou o canal."
},
{
+ "id": "api.channel.patch_update_channel.forbidden.app_error",
+ "translation": "Falha ao atualizar o canal"
+ },
+ {
"id": "api.channel.post_channel_privacy_message.error",
"translation": "Falha ao publicar a mensagem de atualização de privacidade do canal."
},
@@ -308,6 +312,10 @@
"translation": "Enviar um email para convidar sua equipe para Mattermost"
},
{
+ "id": "api.command.invite_people.email_invitations_off",
+ "translation": "Convites por email estão desativados, nenhum convite enviado"
+ },
+ {
"id": "api.command.invite_people.email_off",
"translation": "Email não foi configurado, nenhum convite enviado"
},
@@ -575,6 +583,10 @@
"translation": "mensagem"
},
{
+ "id": "api.command_groupmsg.permission.app_error",
+ "translation": "Você não tem a permissão apropriada para criar um novo grupo de mensagens."
+ },
+ {
"id": "api.command_help.desc",
"translation": "Abrir a página de ajuda do Mattermost"
},
@@ -635,6 +647,10 @@
"translation": "{{.User}} já está no canal."
},
{
+ "id": "api.command_invite_people.permission.app_error",
+ "translation": "Você não tem permissão para convidar um novo usuário para este servidor."
+ },
+ {
"id": "api.command_join.desc",
"translation": "Junte-se ao canal aberto"
},
@@ -727,6 +743,10 @@
"translation": "mensagem"
},
{
+ "id": "api.command_msg.permission.app_error",
+ "translation": "Você não tem a permissão apropriada para enviar uma mensagem direta a este usuário."
+ },
+ {
"id": "api.command_mute.desc",
"translation": "Desativa a área de trabalho, e-mail e envio notificações para o canal atual ou o [canal] especificado."
},
@@ -1599,6 +1619,10 @@
"translation": "Requisição mal formada: campo filesize não está presente."
},
{
+ "id": "api.team.invite_members.disabled.app_error",
+ "translation": "Convites por email estão desativados."
+ },
+ {
"id": "api.team.invite_members.invalid_email.app_error",
"translation": "O seguinte endereço de email não pertence a um dominio aceito: {{.Addresses}}. Por favor contate o Administrador do Sistema para detalhes."
},
@@ -3784,7 +3808,7 @@
},
{
"id": "model.config.is_valid.display.custom_url_schemes.app_error",
- "translation": "O esquema de URL personalizado {{.Scheme}} é inválido. Os esquemas de URL personalizados devem começar com uma letra e conter apenas letras, números, mais (+), ponto (.) e hífen (-)."
+ "translation": "O esquema de URL personalizado {{.Scheme}} é inválido. Os esquemas de URL personalizados devem começar com uma letra e conter apenas letras, números e hífen (-)."
},
{
"id": "model.config.is_valid.elastic_search.aggregate_posts_after_days.app_error",
diff --git a/i18n/ru.json b/i18n/ru.json
index f40769777..20304f0a1 100644
--- a/i18n/ru.json
+++ b/i18n/ru.json
@@ -192,6 +192,10 @@
"translation": "%v покинул канал."
},
{
+ "id": "api.channel.patch_update_channel.forbidden.app_error",
+ "translation": "Не удалось обновить заголовок канала"
+ },
+ {
"id": "api.channel.post_channel_privacy_message.error",
"translation": "Невозможно отправить сообщение обновления приватности канала."
},
@@ -308,6 +312,10 @@
"translation": "Отправить письмо с приглашением вашей команде в Mattermost"
},
{
+ "id": "api.command.invite_people.email_invitations_off",
+ "translation": "Email invitations are disabled, no invite(s) sent"
+ },
+ {
"id": "api.command.invite_people.email_off",
"translation": "Электронная почта не настроена, приглашение не отослано"
},
@@ -575,6 +583,10 @@
"translation": "сообщение"
},
{
+ "id": "api.command_groupmsg.permission.app_error",
+ "translation": "You don't have the appropriate permissions to create a new group message."
+ },
+ {
"id": "api.command_help.desc",
"translation": "Открыть страницу помощи Mattermost"
},
@@ -635,6 +647,10 @@
"translation": "{{.User}} уже находится в канале."
},
{
+ "id": "api.command_invite_people.permission.app_error",
+ "translation": "You don't have permission to invite new users to this server."
+ },
+ {
"id": "api.command_join.desc",
"translation": "Присоединиться к отрытому каналу"
},
@@ -727,6 +743,10 @@
"translation": "сообщение"
},
{
+ "id": "api.command_msg.permission.app_error",
+ "translation": "You don't have the appropriate permissions to direct message this user."
+ },
+ {
"id": "api.command_mute.desc",
"translation": "Отключить уведомления на рабочем столе, электронной почте и push для текущего или указанного канала [канала]."
},
@@ -1599,6 +1619,10 @@
"translation": "Неправильный запрос: отсутствует поле \"filesize\"."
},
{
+ "id": "api.team.invite_members.disabled.app_error",
+ "translation": "Email invitations are disabled."
+ },
+ {
"id": "api.team.invite_members.invalid_email.app_error",
"translation": "Данный адрес почтового ящика не принадлежит списку разрешенных доменов: {{.Addresses}}. Пожалуйста, обратитесь к Вашему системному администратору за информацией."
},
diff --git a/i18n/tr.json b/i18n/tr.json
index 817c9d6ca..7dfce0b04 100644
--- a/i18n/tr.json
+++ b/i18n/tr.json
@@ -192,6 +192,10 @@
"translation": "%v kanaldan ayrıldı."
},
{
+ "id": "api.channel.patch_update_channel.forbidden.app_error",
+ "translation": "Kanal üyesi güncellenemedi"
+ },
+ {
"id": "api.channel.post_channel_privacy_message.error",
"translation": "Kanal gizliliği güncelleme iletisi gönderilemedi."
},
@@ -308,6 +312,10 @@
"translation": "Mattermost takımına bir e-posta çağrısı gönderin"
},
{
+ "id": "api.command.invite_people.email_invitations_off",
+ "translation": "Email invitations are disabled, no invite(s) sent"
+ },
+ {
"id": "api.command.invite_people.email_off",
"translation": "E-posta ayarları yapılmamış. Hehrangi bir çağrı gönderilmedi"
},
@@ -575,6 +583,10 @@
"translation": "ileti"
},
{
+ "id": "api.command_groupmsg.permission.app_error",
+ "translation": "You don't have the appropriate permissions to create a new group message."
+ },
+ {
"id": "api.command_help.desc",
"translation": "Mattermost yardım sayfasını aç"
},
@@ -635,6 +647,10 @@
"translation": "{{.User}} zaten kanalda."
},
{
+ "id": "api.command_invite_people.permission.app_error",
+ "translation": "You don't have permission to invite new users to this server."
+ },
+ {
"id": "api.command_join.desc",
"translation": "Açık kanala katılın"
},
@@ -727,6 +743,10 @@
"translation": "ileti"
},
{
+ "id": "api.command_msg.permission.app_error",
+ "translation": "You don't have the appropriate permissions to direct message this user."
+ },
+ {
"id": "api.command_mute.desc",
"translation": "Geçerli kanal ya da belirtilen [kanal] için masaüstü, e-posta ve anlık bildirimlerini kapatır."
},
@@ -1599,6 +1619,10 @@
"translation": "İstek biçimi bozuk: Dosya boyutu alanı bulunamadı."
},
{
+ "id": "api.team.invite_members.disabled.app_error",
+ "translation": "Email invitations are disabled."
+ },
+ {
"id": "api.team.invite_members.invalid_email.app_error",
"translation": "Şu e-posta adresleri onaylanmış etki alanına ait değil: {{.Addresses}}. Ayrıntılar için sistem yöneticiniz ile görüşün."
},
diff --git a/i18n/zh-CN.json b/i18n/zh-CN.json
index 07dac0d36..40e5340ad 100644
--- a/i18n/zh-CN.json
+++ b/i18n/zh-CN.json
@@ -192,6 +192,10 @@
"translation": "%v 已退出该频道。"
},
{
+ "id": "api.channel.patch_update_channel.forbidden.app_error",
+ "translation": "更新频道成员失败"
+ },
+ {
"id": "api.channel.post_channel_privacy_message.error",
"translation": "发布频道隐私更新消息失败。"
},
@@ -308,6 +312,10 @@
"translation": "发送一封邀请邮件给你的Mattermost团队"
},
{
+ "id": "api.command.invite_people.email_invitations_off",
+ "translation": "Email invitations are disabled, no invite(s) sent"
+ },
+ {
"id": "api.command.invite_people.email_off",
"translation": "邮件没有配置,没发送邀请"
},
@@ -575,6 +583,10 @@
"translation": "消息"
},
{
+ "id": "api.command_groupmsg.permission.app_error",
+ "translation": "You don't have the appropriate permissions to create a new group message."
+ },
+ {
"id": "api.command_help.desc",
"translation": "打开 Mattermost 帮助页面"
},
@@ -635,6 +647,10 @@
"translation": "{{.User}} 已在频道。"
},
{
+ "id": "api.command_invite_people.permission.app_error",
+ "translation": "You don't have permission to invite new users to this server."
+ },
+ {
"id": "api.command_join.desc",
"translation": "添加到公开频道"
},
@@ -727,6 +743,10 @@
"translation": "消息"
},
{
+ "id": "api.command_msg.permission.app_error",
+ "translation": "You don't have the appropriate permissions to direct message this user."
+ },
+ {
"id": "api.command_mute.desc",
"translation": "关闭当前频道或指定[频道]的桌面、邮件以及推送通知。"
},
@@ -1599,6 +1619,10 @@
"translation": "错误请求:缺少 filesize 字段。"
},
{
+ "id": "api.team.invite_members.disabled.app_error",
+ "translation": "Email invitations are disabled."
+ },
+ {
"id": "api.team.invite_members.invalid_email.app_error",
"translation": "以下邮箱地址不在允许的域名范围内:{{.Addresses}}。请联系您的系统管理员了解详情。"
},
@@ -3784,7 +3808,7 @@
},
{
"id": "model.config.is_valid.display.custom_url_schemes.app_error",
- "translation": "无效的自定义 URL 方案 {{.Scheme}}。自定义 URL 方案必须以字母开头并且只能含有字母、数字、加号 (+)、句号 (.) 以及横杠 (-)。"
+ "translation": "无效的自定义 URL 方案 {{.Scheme}}。自定义 URL 方案必须以字母开头并且只能含有字母、数字以及横杠 (-)。"
},
{
"id": "model.config.is_valid.elastic_search.aggregate_posts_after_days.app_error",
diff --git a/i18n/zh-TW.json b/i18n/zh-TW.json
index e259923b0..d0f94bbcc 100644
--- a/i18n/zh-TW.json
+++ b/i18n/zh-TW.json
@@ -192,6 +192,10 @@
"translation": "%v 退出頻道。"
},
{
+ "id": "api.channel.patch_update_channel.forbidden.app_error",
+ "translation": "更新頻道成員時失敗"
+ },
+ {
"id": "api.channel.post_channel_privacy_message.error",
"translation": "發布頻道隱私更新訊息時失敗"
},
@@ -308,6 +312,10 @@
"translation": "送個邀請函給您的 Mattermost 團隊"
},
{
+ "id": "api.command.invite_people.email_invitations_off",
+ "translation": "Email invitations are disabled, no invite(s) sent"
+ },
+ {
"id": "api.command.invite_people.email_off",
"translation": "電子郵件還沒設定好,沒有任何邀請被送出"
},
@@ -575,6 +583,10 @@
"translation": "訊息"
},
{
+ "id": "api.command_groupmsg.permission.app_error",
+ "translation": "You don't have the appropriate permissions to create a new group message."
+ },
+ {
"id": "api.command_help.desc",
"translation": "開啟 Mattermost 說明頁面"
},
@@ -635,6 +647,10 @@
"translation": "{{.User}} 已在頻道當中。"
},
{
+ "id": "api.command_invite_people.permission.app_error",
+ "translation": "You don't have permission to invite new users to this server."
+ },
+ {
"id": "api.command_join.desc",
"translation": "加入公開頻道"
},
@@ -727,6 +743,10 @@
"translation": "訊息"
},
{
+ "id": "api.command_msg.permission.app_error",
+ "translation": "You don't have the appropriate permissions to direct message this user."
+ },
+ {
"id": "api.command_mute.desc",
"translation": "對當前或指定的[頻道]關閉桌面、郵件及推播通知。"
},
@@ -1599,6 +1619,10 @@
"translation": "要求格式錯誤:沒有檔案大小欄位。"
},
{
+ "id": "api.team.invite_members.disabled.app_error",
+ "translation": "Email invitations are disabled."
+ },
+ {
"id": "api.team.invite_members.invalid_email.app_error",
"translation": "這些電子郵件地址的網域不被接受:{{.Addresses}}。詳情請聯絡系統管理員。"
},
diff --git a/model/user.go b/model/user.go
index e56f3aaed..f02b5afa1 100644
--- a/model/user.go
+++ b/model/user.go
@@ -406,11 +406,11 @@ func (u *User) AddNotifyProp(key string, value string) {
}
func (u *User) GetFullName() string {
- if u.FirstName != "" && u.LastName != "" {
+ if len(u.FirstName) > 0 && len(u.LastName) > 0 {
return u.FirstName + " " + u.LastName
- } else if u.FirstName != "" {
+ } else if len(u.FirstName) > 0 {
return u.FirstName
- } else if u.LastName != "" {
+ } else if len(u.LastName) > 0 {
return u.LastName
} else {
return ""
@@ -421,13 +421,13 @@ func (u *User) GetDisplayName(nameFormat string) string {
displayName := u.Username
if nameFormat == SHOW_NICKNAME_FULLNAME {
- if u.Nickname != "" {
+ if len(u.Nickname) > 0 {
displayName = u.Nickname
- } else if fullName := u.GetFullName(); fullName != "" {
+ } else if fullName := u.GetFullName(); len(fullName) > 0 {
displayName = fullName
}
} else if nameFormat == SHOW_FULLNAME {
- if fullName := u.GetFullName(); fullName != "" {
+ if fullName := u.GetFullName(); len(fullName) > 0 {
displayName = fullName
}
}
diff --git a/web/handlers.go b/web/handlers.go
index c089f460b..71a43bc48 100644
--- a/web/handlers.go
+++ b/web/handlers.go
@@ -68,7 +68,9 @@ func (h Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
}
}
- c.SetSiteURLHeader(app.GetProtocol(r) + "://" + r.Host)
+ subpath, _ := utils.GetSubpathFromConfig(c.App.Config())
+ siteURLHeader := app.GetProtocol(r) + "://" + r.Host + subpath
+ c.SetSiteURLHeader(siteURLHeader)
w.Header().Set(model.HEADER_REQUEST_ID, c.RequestId)
w.Header().Set(model.HEADER_VERSION_ID, fmt.Sprintf("%v.%v.%v.%v", model.CurrentVersion, model.BuildNumber, c.App.ClientConfigHash(), c.App.License() != nil))
diff --git a/web/saml.go b/web/saml.go
index f3e5a12e8..9cf93bdab 100644
--- a/web/saml.go
+++ b/web/saml.go
@@ -8,7 +8,6 @@ import (
"net/http"
"strings"
- "github.com/mattermost/mattermost-server/app"
"github.com/mattermost/mattermost-server/mlog"
"github.com/mattermost/mattermost-server/model"
)
@@ -143,7 +142,7 @@ func completeSaml(c *Context, w http.ResponseWriter, r *http.Request) {
if action == model.OAUTH_ACTION_MOBILE {
ReturnStatusOK(w)
} else {
- http.Redirect(w, r, app.GetProtocol(r)+"://"+r.Host, http.StatusFound)
+ http.Redirect(w, r, c.GetSiteURLHeader(), http.StatusFound)
}
}
}