merge 4.7.1 to master

This commit is contained in:
Saturnino Abril
2018-02-19 23:47:34 +08:00
20 changed files with 771 additions and 376 deletions

View File

@@ -566,8 +566,6 @@ func (a *App) sendPushNotification(post *model.Post, user *model.User, channel *
channelName = senderName
}
userLocale := utils.GetUserTranslations(user.Locale)
msg := model.PushNotification{}
if badge := <-a.Srv.Store.User().GetUnreadCount(user.Id); badge.Err != nil {
msg.Badge = 1
@@ -596,44 +594,10 @@ func (a *App) sendPushNotification(post *model.Post, user *model.User, channel *
msg.FromWebhook = fw
}
if *a.Config().EmailSettings.PushNotificationContents == model.FULL_NOTIFICATION {
msg.Category = model.CATEGORY_CAN_REPLY
if channel.Type == model.CHANNEL_DIRECT {
msg.Message = senderName + ": " + model.ClearMentionTags(post.Message)
} else {
msg.Message = senderName + userLocale("api.post.send_notifications_and_forget.push_in") + channelName + ": " + model.ClearMentionTags(post.Message)
}
} else if *a.Config().EmailSettings.PushNotificationContents == model.GENERIC_NO_CHANNEL_NOTIFICATION {
if channel.Type == model.CHANNEL_DIRECT {
msg.Category = model.CATEGORY_CAN_REPLY
msg.Message = senderName + userLocale("api.post.send_notifications_and_forget.push_message")
} else if wasMentioned || channel.Type == model.CHANNEL_GROUP {
msg.Message = senderName + userLocale("api.post.send_notifications_and_forget.push_mention_no_channel")
} else {
msg.Message = senderName + userLocale("api.post.send_notifications_and_forget.push_non_mention_no_channel")
}
} else {
if channel.Type == model.CHANNEL_DIRECT {
msg.Category = model.CATEGORY_CAN_REPLY
msg.Message = senderName + userLocale("api.post.send_notifications_and_forget.push_message")
} else if wasMentioned || channel.Type == model.CHANNEL_GROUP {
msg.Category = model.CATEGORY_CAN_REPLY
msg.Message = senderName + userLocale("api.post.send_notifications_and_forget.push_mention") + channelName
} else {
msg.Message = senderName + userLocale("api.post.send_notifications_and_forget.push_non_mention") + channelName
}
}
userLocale := utils.GetUserTranslations(user.Locale)
hasFiles := post.FileIds != nil && len(post.FileIds) > 0
// If the post only has images then push an appropriate message
if len(post.Message) == 0 && post.FileIds != nil && len(post.FileIds) > 0 {
if channel.Type == model.CHANNEL_DIRECT {
msg.Message = senderName + userLocale("api.post.send_notifications_and_forget.push_image_only_dm")
} else {
msg.Message = senderName + userLocale("api.post.send_notifications_and_forget.push_image_only") + channelName
}
}
//l4g.Debug("Sending push notification for user %v with msg of '%v'", user.Id, msg.Message)
msg.Message, msg.Category = a.getPushNotificationMessage(post.Message, wasMentioned, hasFiles, senderName, channelName, channel.Type, userLocale)
for _, session := range sessions {
tmpMessage := *model.PushNotificationFromJson(strings.NewReader(msg.ToJson()))
@@ -655,6 +619,54 @@ func (a *App) sendPushNotification(post *model.Post, user *model.User, channel *
return nil
}
func (a *App) getPushNotificationMessage(postMessage string, wasMentioned bool, hasFiles bool, senderName string, channelName string, channelType string, userLocale i18n.TranslateFunc) (string, string) {
message := ""
category := ""
if *a.Config().EmailSettings.PushNotificationContents == model.FULL_NOTIFICATION {
category = model.CATEGORY_CAN_REPLY
if channelType == model.CHANNEL_DIRECT {
message = senderName + ": " + model.ClearMentionTags(postMessage)
} else {
message = senderName + userLocale("api.post.send_notifications_and_forget.push_in") + channelName + ": " + model.ClearMentionTags(postMessage)
}
} else if *a.Config().EmailSettings.PushNotificationContents == model.GENERIC_NO_CHANNEL_NOTIFICATION {
if channelType == model.CHANNEL_DIRECT {
category = model.CATEGORY_CAN_REPLY
message = senderName + userLocale("api.post.send_notifications_and_forget.push_message")
} else if wasMentioned {
message = senderName + userLocale("api.post.send_notifications_and_forget.push_mention_no_channel")
} else {
message = senderName + userLocale("api.post.send_notifications_and_forget.push_non_mention_no_channel")
}
} else {
if channelType == model.CHANNEL_DIRECT {
category = model.CATEGORY_CAN_REPLY
message = senderName + userLocale("api.post.send_notifications_and_forget.push_message")
} else if wasMentioned {
category = model.CATEGORY_CAN_REPLY
message = senderName + userLocale("api.post.send_notifications_and_forget.push_mention") + channelName
} else {
message = senderName + userLocale("api.post.send_notifications_and_forget.push_non_mention") + channelName
}
}
// If the post only has images then push an appropriate message
if len(postMessage) == 0 && hasFiles {
if channelType == model.CHANNEL_DIRECT {
message = senderName + userLocale("api.post.send_notifications_and_forget.push_image_only_dm")
} else {
message = senderName + userLocale("api.post.send_notifications_and_forget.push_image_only") + channelName
}
}
return message, category
}
func (a *App) ClearPushNotification(userId string, channelId string) {
a.Go(func() {
// Sleep is to allow the read replicas a chance to fully sync
@@ -819,44 +831,52 @@ func GetExplicitMentions(message string, keywords map[string][]string) *Explicit
ret.MentionedUserIds[id] = true
}
}
checkForMention := func(word string) bool {
isMention := false
if word == "@here" {
ret.HereMentioned = true
}
if word == "@channel" {
ret.ChannelMentioned = true
}
if word == "@all" {
ret.AllMentioned = true
}
// Non-case-sensitive check for regular keys
if ids, match := keywords[strings.ToLower(word)]; match {
addMentionedUsers(ids)
isMention = true
}
// Case-sensitive check for first name
if ids, match := keywords[word]; match {
addMentionedUsers(ids)
isMention = true
}
return isMention
}
processText := func(text string) {
for _, word := range strings.FieldsFunc(text, func(c rune) bool {
// Split on any whitespace or punctuation that can't be part of an at mention or emoji pattern
return !(c == ':' || c == '.' || c == '-' || c == '_' || c == '@' || unicode.IsLetter(c) || unicode.IsNumber(c))
}) {
isMention := false
// skip word with format ':word:' with an assumption that it is an emoji format only
if word[0] == ':' && word[len(word)-1] == ':' {
continue
}
if word == "@here" {
ret.HereMentioned = true
if checkForMention(word) {
continue
}
if word == "@channel" {
ret.ChannelMentioned = true
}
if word == "@all" {
ret.AllMentioned = true
}
// Non-case-sensitive check for regular keys
if ids, match := keywords[strings.ToLower(word)]; match {
addMentionedUsers(ids)
isMention = true
}
// Case-sensitive check for first name
if ids, match := keywords[word]; match {
addMentionedUsers(ids)
isMention = true
}
if isMention {
// remove trailing '.', as that is the end of a sentence
word = strings.TrimSuffix(word, ".")
if checkForMention(word) {
continue
}
@@ -867,27 +887,10 @@ func GetExplicitMentions(message string, keywords map[string][]string) *Explicit
})
for _, splitWord := range splitWords {
if splitWord == "@here" {
ret.HereMentioned = true
if checkForMention(splitWord) {
continue
}
if splitWord == "@all" {
ret.AllMentioned = true
}
if splitWord == "@channel" {
ret.ChannelMentioned = true
}
// Non-case-sensitive check for regular keys
if ids, match := keywords[strings.ToLower(splitWord)]; match {
addMentionedUsers(ids)
}
// Case-sensitive check for first name
if ids, match := keywords[splitWord]; match {
addMentionedUsers(ids)
} else if _, ok := systemMentions[splitWord]; !ok && strings.HasPrefix(splitWord, "@") {
if _, ok := systemMentions[splitWord]; !ok && strings.HasPrefix(splitWord, "@") {
username := splitWord[1:]
ret.OtherPotentialMentions = append(ret.OtherPotentialMentions, username)
}

View File

@@ -109,6 +109,33 @@ func TestGetExplicitMentions(t *testing.T) {
},
},
},
"OnePersonWithPeriodAtEndOfUsername": {
Message: "this is a message for @user.name.",
Keywords: map[string][]string{"@user.name.": {id1}},
Expected: &ExplicitMentions{
MentionedUserIds: map[string]bool{
id1: true,
},
},
},
"OnePersonWithPeriodAtEndOfUsernameButNotSimilarName": {
Message: "this is a message for @user.name.",
Keywords: map[string][]string{"@user.name.": {id1}, "@user.name": {id2}},
Expected: &ExplicitMentions{
MentionedUserIds: map[string]bool{
id1: true,
},
},
},
"OnePersonAtEndOfSentence": {
Message: "this is a message for @user.",
Keywords: map[string][]string{"@user": {id1}},
Expected: &ExplicitMentions{
MentionedUserIds: map[string]bool{
id1: true,
},
},
},
"OnePersonWithoutAtMention": {
Message: "this is a message for @user",
Keywords: map[string][]string{"this": {id1}},
@@ -179,6 +206,24 @@ func TestGetExplicitMentions(t *testing.T) {
},
},
},
"AtUserWithPeriodAtEndOfSentence": {
Message: "this is a message for @user.period.",
Keywords: map[string][]string{"@user.period": {id1}},
Expected: &ExplicitMentions{
MentionedUserIds: map[string]bool{
id1: true,
},
},
},
"UserWithPeriodAtEndOfSentence": {
Message: "this is a message for user.period.",
Keywords: map[string][]string{"user.period": {id1}},
Expected: &ExplicitMentions{
MentionedUserIds: map[string]bool{
id1: true,
},
},
},
"PotentialOutOfChannelUser": {
Message: "this is an message for @potential and @user",
Keywords: map[string][]string{"@user": {id1}},
@@ -1166,3 +1211,238 @@ func TestGetNotificationEmailBodyGenericNotificationDirectChannel(t *testing.T)
t.Fatal("Expected email text '" + teamURL + "'. Got " + body)
}
}
func TestGetPushNotificationMessage(t *testing.T) {
th := Setup()
defer th.TearDown()
for name, tc := range map[string]struct {
Message string
WasMentioned bool
HasFiles bool
Locale string
PushNotificationContents string
ChannelType string
ExpectedMessage string
ExpectedCategory string
}{
"full message, public channel, no mention": {
Message: "this is a message",
ChannelType: model.CHANNEL_OPEN,
ExpectedMessage: "user in channel: this is a message",
ExpectedCategory: model.CATEGORY_CAN_REPLY,
},
"full message, public channel, mention": {
Message: "this is a message",
WasMentioned: true,
ChannelType: model.CHANNEL_OPEN,
ExpectedMessage: "user in channel: this is a message",
ExpectedCategory: model.CATEGORY_CAN_REPLY,
},
"full message, private channel, no mention": {
Message: "this is a message",
ChannelType: model.CHANNEL_PRIVATE,
ExpectedMessage: "user in channel: this is a message",
ExpectedCategory: model.CATEGORY_CAN_REPLY,
},
"full message, private channel, mention": {
Message: "this is a message",
WasMentioned: true,
ChannelType: model.CHANNEL_PRIVATE,
ExpectedMessage: "user in channel: this is a message",
ExpectedCategory: model.CATEGORY_CAN_REPLY,
},
"full message, group message channel, no mention": {
Message: "this is a message",
ChannelType: model.CHANNEL_GROUP,
ExpectedMessage: "user in channel: this is a message",
ExpectedCategory: model.CATEGORY_CAN_REPLY,
},
"full message, group message channel, mention": {
Message: "this is a message",
WasMentioned: true,
ChannelType: model.CHANNEL_GROUP,
ExpectedMessage: "user in channel: this is a message",
ExpectedCategory: model.CATEGORY_CAN_REPLY,
},
"full message, direct message channel, no mention": {
Message: "this is a message",
ChannelType: model.CHANNEL_DIRECT,
ExpectedMessage: "user: this is a message",
ExpectedCategory: model.CATEGORY_CAN_REPLY,
},
"full message, direct message channel, mention": {
Message: "this is a message",
WasMentioned: true,
ChannelType: model.CHANNEL_DIRECT,
ExpectedMessage: "user: this is a message",
ExpectedCategory: model.CATEGORY_CAN_REPLY,
},
"generic message with channel, public channel, no mention": {
Message: "this is a message",
PushNotificationContents: model.GENERIC_NOTIFICATION,
ChannelType: model.CHANNEL_OPEN,
ExpectedMessage: "user posted in channel",
},
"generic message with channel, public channel, mention": {
Message: "this is a message",
WasMentioned: true,
PushNotificationContents: model.GENERIC_NOTIFICATION,
ChannelType: model.CHANNEL_OPEN,
ExpectedMessage: "user mentioned you in channel",
ExpectedCategory: model.CATEGORY_CAN_REPLY,
},
"generic message with channel, private channel, no mention": {
Message: "this is a message",
PushNotificationContents: model.GENERIC_NOTIFICATION,
ChannelType: model.CHANNEL_PRIVATE,
ExpectedMessage: "user posted in channel",
},
"generic message with channel, private channel, mention": {
Message: "this is a message",
WasMentioned: true,
PushNotificationContents: model.GENERIC_NOTIFICATION,
ChannelType: model.CHANNEL_PRIVATE,
ExpectedMessage: "user mentioned you in channel",
ExpectedCategory: model.CATEGORY_CAN_REPLY,
},
"generic message with channel, group message channel, no mention": {
Message: "this is a message",
PushNotificationContents: model.GENERIC_NOTIFICATION,
ChannelType: model.CHANNEL_GROUP,
ExpectedMessage: "user posted in channel",
},
"generic message with channel, group message channel, mention": {
Message: "this is a message",
WasMentioned: true,
PushNotificationContents: model.GENERIC_NOTIFICATION,
ChannelType: model.CHANNEL_GROUP,
ExpectedMessage: "user mentioned you in channel",
ExpectedCategory: model.CATEGORY_CAN_REPLY,
},
"generic message with channel, direct message channel, no mention": {
Message: "this is a message",
PushNotificationContents: model.GENERIC_NOTIFICATION,
ChannelType: model.CHANNEL_DIRECT,
ExpectedMessage: "user sent you a direct message",
ExpectedCategory: model.CATEGORY_CAN_REPLY,
},
"generic message with channel, direct message channel, mention": {
Message: "this is a message",
WasMentioned: true,
PushNotificationContents: model.GENERIC_NOTIFICATION,
ChannelType: model.CHANNEL_DIRECT,
ExpectedMessage: "user sent you a direct message",
ExpectedCategory: model.CATEGORY_CAN_REPLY,
},
"generic message without channel, public channel, no mention": {
Message: "this is a message",
PushNotificationContents: model.GENERIC_NO_CHANNEL_NOTIFICATION,
ChannelType: model.CHANNEL_OPEN,
ExpectedMessage: "user posted a message",
},
"generic message without channel, public channel, mention": {
Message: "this is a message",
WasMentioned: true,
PushNotificationContents: model.GENERIC_NO_CHANNEL_NOTIFICATION,
ChannelType: model.CHANNEL_OPEN,
ExpectedMessage: "user mentioned you",
},
"generic message without channel, private channel, no mention": {
Message: "this is a message",
PushNotificationContents: model.GENERIC_NO_CHANNEL_NOTIFICATION,
ChannelType: model.CHANNEL_PRIVATE,
ExpectedMessage: "user posted a message",
},
"generic message without channel, private channel, mention": {
Message: "this is a message",
WasMentioned: true,
PushNotificationContents: model.GENERIC_NO_CHANNEL_NOTIFICATION,
ChannelType: model.CHANNEL_PRIVATE,
ExpectedMessage: "user mentioned you",
},
"generic message without channel, group message channel, no mention": {
Message: "this is a message",
PushNotificationContents: model.GENERIC_NO_CHANNEL_NOTIFICATION,
ChannelType: model.CHANNEL_GROUP,
ExpectedMessage: "user posted a message",
},
"generic message without channel, group message channel, mention": {
Message: "this is a message",
WasMentioned: true,
PushNotificationContents: model.GENERIC_NO_CHANNEL_NOTIFICATION,
ChannelType: model.CHANNEL_GROUP,
ExpectedMessage: "user mentioned you",
},
"generic message without channel, direct message channel, no mention": {
Message: "this is a message",
PushNotificationContents: model.GENERIC_NO_CHANNEL_NOTIFICATION,
ChannelType: model.CHANNEL_DIRECT,
ExpectedMessage: "user sent you a direct message",
ExpectedCategory: model.CATEGORY_CAN_REPLY,
},
"generic message without channel, direct message channel, mention": {
Message: "this is a message",
WasMentioned: true,
PushNotificationContents: model.GENERIC_NO_CHANNEL_NOTIFICATION,
ChannelType: model.CHANNEL_DIRECT,
ExpectedMessage: "user sent you a direct message",
ExpectedCategory: model.CATEGORY_CAN_REPLY,
},
"only files, public channel": {
HasFiles: true,
ChannelType: model.CHANNEL_OPEN,
ExpectedMessage: "user uploaded one or more files in channel",
ExpectedCategory: model.CATEGORY_CAN_REPLY,
},
"only files, private channel": {
HasFiles: true,
ChannelType: model.CHANNEL_PRIVATE,
ExpectedMessage: "user uploaded one or more files in channel",
ExpectedCategory: model.CATEGORY_CAN_REPLY,
},
"only files, group message channel": {
HasFiles: true,
ChannelType: model.CHANNEL_GROUP,
ExpectedMessage: "user uploaded one or more files in channel",
ExpectedCategory: model.CATEGORY_CAN_REPLY,
},
"only files, direct message channel": {
HasFiles: true,
ChannelType: model.CHANNEL_DIRECT,
ExpectedMessage: "user uploaded one or more files in a direct message",
ExpectedCategory: model.CATEGORY_CAN_REPLY,
},
} {
t.Run(name, func(t *testing.T) {
locale := tc.Locale
if locale == "" {
locale = "en"
}
pushNotificationContents := tc.PushNotificationContents
if pushNotificationContents == "" {
pushNotificationContents = model.FULL_NOTIFICATION
}
th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.EmailSettings.PushNotificationContents = pushNotificationContents
})
if actualMessage, actualCategory := th.App.getPushNotificationMessage(
tc.Message,
tc.WasMentioned,
tc.HasFiles,
"user",
"channel",
tc.ChannelType,
utils.GetUserTranslations(locale),
); actualMessage != tc.ExpectedMessage {
t.Fatalf("Received incorrect push notification message `%v`, expected `%v`", actualMessage, tc.ExpectedMessage)
} else if actualCategory != tc.ExpectedCategory {
t.Fatalf("Received incorrect push notification category `%v`, expected `%v`", actualCategory, tc.ExpectedCategory)
}
})
}
}

View File

@@ -302,10 +302,16 @@ func (a *App) joinUserToTeam(team *model.Team, user *model.User) (*model.TeamMem
return rtm, true, nil
}
if tmr := <-a.Srv.Store.Team().UpdateMember(tm); tmr.Err != nil {
return nil, false, tmr.Err
if membersCount := <-a.Srv.Store.Team().GetActiveMemberCount(tm.TeamId); membersCount.Err != nil {
return nil, false, membersCount.Err
} else if membersCount.Data.(int64) >= int64(*a.Config().TeamSettings.MaxUsersPerTeam) {
return nil, false, model.NewAppError("joinUserToTeam", "app.team.join_user_to_team.max_accounts.app_error", nil, "teamId="+tm.TeamId, http.StatusBadRequest)
} else {
return tmr.Data.(*model.TeamMember), false, nil
if tmr := <-a.Srv.Store.Team().UpdateMember(tm); tmr.Err != nil {
return nil, false, tmr.Err
} else {
return tmr.Data.(*model.TeamMember), false, nil
}
}
} else {
// Membership appears to be missing. Lets try to add.

View File

@@ -460,3 +460,92 @@ func TestAddUserToTeamByHashMismatchedInviteId(t *testing.T) {
assert.Nil(t, team)
assert.Equal(t, "api.user.create_user.signup_link_mismatched_invite_id.app_error", err.Id)
}
func TestJoinUserToTeam(t *testing.T) {
th := Setup().InitBasic()
defer th.TearDown()
id := model.NewId()
team := &model.Team{
DisplayName: "dn_" + id,
Name: "name" + id,
Email: "success+" + id + "@simulator.amazonses.com",
Type: model.TEAM_OPEN,
}
if _, err := th.App.CreateTeam(team); err != nil {
t.Log(err)
t.Fatal("Should create a new team")
}
maxUsersPerTeam := th.App.Config().TeamSettings.MaxUsersPerTeam
defer func() {
th.App.UpdateConfig(func(cfg *model.Config) { cfg.TeamSettings.MaxUsersPerTeam = maxUsersPerTeam })
th.App.SetDefaultRolesBasedOnConfig()
th.App.PermanentDeleteTeam(team)
}()
one := 1
th.App.UpdateConfig(func(cfg *model.Config) { cfg.TeamSettings.MaxUsersPerTeam = &one })
t.Run("new join", func(t *testing.T) {
user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""}
ruser, _ := th.App.CreateUser(&user)
defer th.App.PermanentDeleteUser(&user)
if _, alreadyAdded, err := th.App.joinUserToTeam(team, ruser); alreadyAdded || err != nil {
t.Fatal("Should return already added equal to false and no error")
}
})
t.Run("join when you are a member", func(t *testing.T) {
user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""}
ruser, _ := th.App.CreateUser(&user)
defer th.App.PermanentDeleteUser(&user)
th.App.joinUserToTeam(team, ruser)
if _, alreadyAdded, err := th.App.joinUserToTeam(team, ruser); !alreadyAdded || err != nil {
t.Fatal("Should return already added and no error")
}
})
t.Run("re-join after leaving", func(t *testing.T) {
user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""}
ruser, _ := th.App.CreateUser(&user)
defer th.App.PermanentDeleteUser(&user)
th.App.joinUserToTeam(team, ruser)
th.App.LeaveTeam(team, ruser, ruser.Id)
if _, alreadyAdded, err := th.App.joinUserToTeam(team, ruser); alreadyAdded || err != nil {
t.Fatal("Should return already added equal to false and no error")
}
})
t.Run("new join with limit problem", func(t *testing.T) {
user1 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""}
ruser1, _ := th.App.CreateUser(&user1)
user2 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""}
ruser2, _ := th.App.CreateUser(&user2)
defer th.App.PermanentDeleteUser(&user1)
defer th.App.PermanentDeleteUser(&user2)
th.App.joinUserToTeam(team, ruser1)
if _, _, err := th.App.joinUserToTeam(team, ruser2); err == nil {
t.Fatal("Should fail")
}
})
t.Run("re-join alfter leaving with limit problem", func(t *testing.T) {
user1 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""}
ruser1, _ := th.App.CreateUser(&user1)
user2 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""}
ruser2, _ := th.App.CreateUser(&user2)
defer th.App.PermanentDeleteUser(&user1)
defer th.App.PermanentDeleteUser(&user2)
th.App.joinUserToTeam(team, ruser1)
th.App.LeaveTeam(team, ruser1, ruser1.Id)
th.App.joinUserToTeam(team, ruser2)
if _, _, err := th.App.joinUserToTeam(team, ruser1); err == nil {
t.Fatal("Should fail")
}
})
}

View File

@@ -2184,7 +2184,7 @@
},
{
"id": "api.team.add_user_to_team.added",
"translation": "%v wurde von %v zum Team hinzugefügt"
"translation": "%v wurde von %v zum Team hinzugefügt."
},
{
"id": "api.team.add_user_to_team.missing_parameter.app_error",
@@ -2202,10 +2202,6 @@
"id": "api.team.create_team_from_signup.expired_link.app_error",
"translation": "Der Link ist abgelaufen"
},
{
"id": "api.team.create_team_from_signup.invalid_link.app_error",
"translation": "Der Einladungslink scheint nicht gültig zu sein"
},
{
"id": "api.team.create_team_from_signup.unavailable.app_error",
"translation": "Diese URL ist nicht verfügbar. Bitte wähle eine andere."
@@ -2710,6 +2706,10 @@
"id": "api.user.create_user.signup_link_invalid.app_error",
"translation": "Der Registrierungslink scheint nicht gültig zu sein"
},
{
"id": "api.user.create_user.signup_link_mismatched_invite_id.app_error",
"translation": "Der Einladungslink scheint nicht gültig zu sein"
},
{
"id": "api.user.create_user.team_name.app_error",
"translation": "Ungültiger Teamname"
@@ -3690,6 +3690,10 @@
"id": "app.plugin.upload_disabled.app_error",
"translation": "Plugins und/oder Plugin-Uploads wurden deaktiviert."
},
{
"id": "app.team.join_user_to_team.max_accounts.app_error",
"translation": "Dieses Team hat die maximale Anzahl erlaubter Konten erreicht. Kontaktieren Sie Ihren Systemadministrator, um eine höhere Begrenzung setzen zu lassen."
},
{
"id": "app.user_access_token.disabled",
"translation": "Persönliche Zugriffs-Token sind auf diesem Server deaktiviert. Bitte kontaktieren Sie ihren Systemadministrator für Details."
@@ -4758,6 +4762,10 @@
"id": "model.config.is_valid.file_thumb_width.app_error",
"translation": "Ungültige Thumbnauilbreite in Dateieinstellungen. Muss eine positive Zahl sein."
},
{
"id": "model.config.is_valid.group_unread_channels.app_error",
"translation": "Ungültige Diensteinstellungen für Gruppierung von ungelesenen Kanälen. Muss 'disabled', 'default_on' oder default_off' sein."
},
{
"id": "model.config.is_valid.image_proxy_type.app_error",
"translation": "Ungültiger Bild-Proxy-Typ für Diensteinstellungen."
@@ -7290,10 +7298,6 @@
"id": "web.root.singup_title",
"translation": "Registrieren"
},
{
"id": "web.signup_team_complete.invalid_link.app_error",
"translation": "Der Registrierungslink scheint nicht gültig zu sein"
},
{
"id": "web.signup_team_complete.link_expired.app_error",
"translation": "Der Registrierungslink ist abgelaufen"
@@ -7310,10 +7314,6 @@
"id": "web.signup_user_complete.link_expired.app_error",
"translation": "Der Registrierungslink ist abgelaufen"
},
{
"id": "web.signup_user_complete.link_invalid.app_error",
"translation": "Der Registrierungslink scheint nicht gültig zu sein"
},
{
"id": "web.signup_user_complete.no_invites.app_error",
"translation": "Dieser Teamtyp erlaubt keine offnen Einladungen"

View File

@@ -1808,11 +1808,11 @@
},
{
"id": "api.post.send_notifications_and_forget.push_image_only",
"translation": " Uploaded one or more files in "
"translation": " uploaded one or more files in "
},
{
"id": "api.post.send_notifications_and_forget.push_image_only_dm",
"translation": " Uploaded one or more files in a direct message"
"translation": " uploaded one or more files in a direct message"
},
{
"id": "api.post.send_notifications_and_forget.push_in",
@@ -2699,11 +2699,11 @@
"translation": "The signup link has expired"
},
{
"id": "api.user.create_user.signup_link_mismatched_invite_id.app_error",
"id": "api.user.create_user.signup_link_invalid.app_error",
"translation": "The signup link does not appear to be valid"
},
{
"id": "api.user.create_user.signup_link_invalid.app_error",
"id": "api.user.create_user.signup_link_mismatched_invite_id.app_error",
"translation": "The signup link does not appear to be valid"
},
{
@@ -3698,6 +3698,10 @@
"id": "app.plugin.upload_disabled.app_error",
"translation": "Plugins and/or plugin uploads have been disabled."
},
{
"id": "app.team.join_user_to_team.max_accounts.app_error",
"translation": "This team has reached the maximum number of allowed accounts. Contact your systems administrator to set a higher limit."
},
{
"id": "app.user_access_token.disabled",
"translation": "Personal access tokens are disabled on this server. Please contact your system administrator for details."

View File

@@ -2202,10 +2202,6 @@
"id": "api.team.create_team_from_signup.expired_link.app_error",
"translation": "El enlace de registro ha expirado"
},
{
"id": "api.team.create_team_from_signup.invalid_link.app_error",
"translation": "El enlace de registro parece ser inválido"
},
{
"id": "api.team.create_team_from_signup.unavailable.app_error",
"translation": "Este URL no está disponible. Por favor, prueba con otra."
@@ -2710,6 +2706,10 @@
"id": "api.user.create_user.signup_link_invalid.app_error",
"translation": "El enlace de registro parece ser inválido"
},
{
"id": "api.user.create_user.signup_link_mismatched_invite_id.app_error",
"translation": "El enlace de registro parece ser inválido"
},
{
"id": "api.user.create_user.team_name.app_error",
"translation": "Nombre del equipo inválido"
@@ -3690,6 +3690,10 @@
"id": "app.plugin.upload_disabled.app_error",
"translation": "Los Complementos y/o la carga de complementos han sido deshabilitados."
},
{
"id": "app.team.join_user_to_team.max_accounts.app_error",
"translation": "Este equipo ha alcanzado el número máximo de cuentas permitidas. Contacta a un administrador de sistema para que asigne un límite mayor."
},
{
"id": "app.user_access_token.disabled",
"translation": "Los tokens de acceso personal están inhabilitados en este servidor. Por favor, póngase en contacto con su administrador del sistema para obtener más detalles."
@@ -4758,6 +4762,10 @@
"id": "model.config.is_valid.file_thumb_width.app_error",
"translation": "El ancho para la imagen de miniatura es inválido en la configuración de archivos. Debe ser un número positivo."
},
{
"id": "model.config.is_valid.group_unread_channels.app_error",
"translation": "Ajuste invalido para el agrupamiento de canales no leídos en la configuración de servicio. Debe ser 'disabled', 'default_on' o 'default_off'."
},
{
"id": "model.config.is_valid.image_proxy_type.app_error",
"translation": "Tipo de proxy para las imágenes no válido en la configuración del servicio."
@@ -7290,10 +7298,6 @@
"id": "web.root.singup_title",
"translation": "Registrar"
},
{
"id": "web.signup_team_complete.invalid_link.app_error",
"translation": "El enlace de registro parece ser inválido"
},
{
"id": "web.signup_team_complete.link_expired.app_error",
"translation": "El enlace de registro ha expirado"
@@ -7310,10 +7314,6 @@
"id": "web.signup_user_complete.link_expired.app_error",
"translation": "El enlace de registro ha expirado"
},
{
"id": "web.signup_user_complete.link_invalid.app_error",
"translation": "El enlace de registro parece ser inválido"
},
{
"id": "web.signup_user_complete.no_invites.app_error",
"translation": "El tipo de equipo no permite realizar invitaciones"

View File

@@ -153,7 +153,7 @@
},
{
"id": "api.channel.add_member.added",
"translation": "%v a été ajouté au canal par %v"
"translation": "%v a été ajouté au canal par %v."
},
{
"id": "api.channel.add_member.find_channel.app_error",
@@ -201,11 +201,11 @@
},
{
"id": "api.channel.change_channel_privacy.private_to_public",
"translation": "This channel has been converted to a Public Channel and can be joined by any team member."
"translation": "Ce canal a été converti en canal public et peut être rejoint par tout membre de l'équipe."
},
{
"id": "api.channel.change_channel_privacy.public_to_private",
"translation": "This channel has been converted to a Private Channel."
"translation": "Ce canal a été converti en canal privé."
},
{
"id": "api.channel.create_channel.direct_channel.app_error",
@@ -2184,7 +2184,7 @@
},
{
"id": "api.team.add_user_to_team.added",
"translation": "%v a été ajouté à l'équipe par %v"
"translation": "%v a été ajouté à l'équipe par %v."
},
{
"id": "api.team.add_user_to_team.missing_parameter.app_error",
@@ -2202,10 +2202,6 @@
"id": "api.team.create_team_from_signup.expired_link.app_error",
"translation": "Le lien d'inscription a expiré."
},
{
"id": "api.team.create_team_from_signup.invalid_link.app_error",
"translation": "Le lien d'inscription semble ne pas être valide."
},
{
"id": "api.team.create_team_from_signup.unavailable.app_error",
"translation": "Cette URL n'est pas disponible. Veuillez en essayer une autre."
@@ -2710,6 +2706,10 @@
"id": "api.user.create_user.signup_link_invalid.app_error",
"translation": "Le lien d'enregistrement n'est pas valide."
},
{
"id": "api.user.create_user.signup_link_mismatched_invite_id.app_error",
"translation": "Le lien d'inscription semble ne pas être valide."
},
{
"id": "api.user.create_user.team_name.app_error",
"translation": "Nom d'équipe incorrect"
@@ -2956,7 +2956,7 @@
},
{
"id": "api.user.upload_profile_user.decode_config.app_error",
"translation": "Impossible de sauvegarder l'image de profile. Le fichier ne semble pas être un fichier d'image valide."
"translation": "Impossible de sauvegarder l'image de profil. Le fichier ne semble pas être un fichier d'image valide."
},
{
"id": "api.user.upload_profile_user.encode.app_error",
@@ -3360,7 +3360,7 @@
},
{
"id": "app.import.validate_post_import_data.create_at_zero.error",
"translation": "La propriété de message CreateAt ne doit pas être 0 si ce champ est défini."
"translation": "La propriété de message CreateAt ne doit pas être 0."
},
{
"id": "app.import.validate_post_import_data.message_length.error",
@@ -3380,51 +3380,51 @@
},
{
"id": "app.import.validate_reaction_import_data.create_at_before_parent.error",
"translation": "Reaction CreateAt property must be greater than the parent post CreateAt."
"translation": "La propriété de réponse CreateAt doit être plus grande que la valeur de la propriété CreateAt parente."
},
{
"id": "app.import.validate_reaction_import_data.create_at_missing.error",
"translation": "La propriété requise pour un message est manquante : create_at."
"translation": "La propriété requise de réaction est manquante : create_at."
},
{
"id": "app.import.validate_reaction_import_data.create_at_zero.error",
"translation": "La propriété de message CreateAt ne doit pas être 0 si ce champ est défini."
"translation": "La propriété de réaction CreateAt ne doit pas être 0."
},
{
"id": "app.import.validate_reaction_import_data.emoji_name_length.error",
"translation": "La propriété Message du message est plus longue que la longueur maximale autorisée."
"translation": "La propriété de réaction EmojiName est plus longue que la longueur maximale autorisée."
},
{
"id": "app.import.validate_reaction_import_data.emoji_name_missing.error",
"translation": "La propriété requise du message est manquante : User."
"translation": "La propriété requise de réaction est manquante : EmojiName."
},
{
"id": "app.import.validate_reaction_import_data.user_missing.error",
"translation": "La propriété requise du message est manquante : User."
"translation": "La propriété requise de réaction est manquante : User."
},
{
"id": "app.import.validate_reply_import_data.create_at_before_parent.error",
"translation": "Reply CreateAt property must be greater than the parent post CreateAt."
"translation": "La propriété de réponse CreateAt doit être plus grande que la valeur de la propriété CreateAt parente."
},
{
"id": "app.import.validate_reply_import_data.create_at_missing.error",
"translation": "La propriété requise pour un message est manquante : create_at."
"translation": "La propriété requise de réponse est manquante : create_at."
},
{
"id": "app.import.validate_reply_import_data.create_at_zero.error",
"translation": "La propriété de message CreateAt ne doit pas être 0 si ce champ est défini."
"translation": "La propriété de message CreateAt ne doit pas être 0."
},
{
"id": "app.import.validate_reply_import_data.message_length.error",
"translation": "La propriété Message du message est plus longue que la longueur maximale autorisée."
"translation": "La propriété de réponse Message est plus longue que la longueur maximale autorisée."
},
{
"id": "app.import.validate_reply_import_data.message_missing.error",
"translation": "La propriété requise du message est manquante : Message."
"translation": "La propriété requise de réponse est manquante : Message."
},
{
"id": "app.import.validate_reply_import_data.user_missing.error",
"translation": "La propriété requise du message est manquante : User."
"translation": "La propriété requise de réponse est manquante : User."
},
{
"id": "app.import.validate_team_import_data.allowed_domains_length.error",
@@ -3564,7 +3564,7 @@
},
{
"id": "app.import.validate_user_import_data.profile_image.error",
"translation": "Invalid profile image."
"translation": "Image de profil invalide."
},
{
"id": "app.import.validate_user_import_data.roles_invalid.error",
@@ -3690,6 +3690,10 @@
"id": "app.plugin.upload_disabled.app_error",
"translation": "Les plugins et/ou l'envoi de plugins ont été désactivés."
},
{
"id": "app.team.join_user_to_team.max_accounts.app_error",
"translation": "Cette équipe a atteint la limite du nombre maximum de comptes autorisés. Contactez votre administrateur système pour augmenter cette limite."
},
{
"id": "app.user_access_token.disabled",
"translation": "Les jetons d'accès personnel sont désactivés sur ce serveur. Veuillez contacter votre administrateur système pour plus d'informations."
@@ -4644,7 +4648,7 @@
},
{
"id": "model.config.is_valid.atmos_camo_image_proxy_options.app_error",
"translation": "Invalid atmos/camo image proxy options for service settings. Must be set to your shared key."
"translation": "Les paramètres d'options du proxy d'image atmos/camo sont invalides. Votre clé partagée doit être définie comme paramètre."
},
{
"id": "model.config.is_valid.cluster_email_batching.app_error",
@@ -4758,9 +4762,13 @@
"id": "model.config.is_valid.file_thumb_width.app_error",
"translation": "Largeur des miniatures invalide dans les paramètres de fichiers. Doit être un entier positif."
},
{
"id": "model.config.is_valid.group_unread_channels.app_error",
"translation": "Le paramètre de groupement de canaux non lus est invalide. Doit être défini sur « disabled », « default_on » ou « default_off »."
},
{
"id": "model.config.is_valid.image_proxy_type.app_error",
"translation": "Invalid image proxy type for service settings."
"translation": "Paramètre de type de proxy d'image invalide."
},
{
"id": "model.config.is_valid.ldap_basedn",
@@ -5404,7 +5412,7 @@
},
{
"id": "model.user.is_valid.position.app_error",
"translation": "Rôle invalide : ne doit pas faire plus de 35 caractères."
"translation": "Rôle invalide : ne doit pas faire plus de 128 caractères."
},
{
"id": "model.user.is_valid.pwd.app_error",
@@ -6848,7 +6856,7 @@
},
{
"id": "store.sql_user_access_token.get_all.app_error",
"translation": "Impossible de récupérer le jeton d'accès personnel"
"translation": "Impossible de récupérer tous les jetons d'accès personnel"
},
{
"id": "store.sql_user_access_token.get_by_token.app_error",
@@ -6864,7 +6872,7 @@
},
{
"id": "store.sql_user_access_token.search.app_error",
"translation": "Nous avons rencontré une erreur lors de la recherche du jeton d'accès"
"translation": "Nous avons rencontré une erreur lors de la recherche des jetons d'accès personnel"
},
{
"id": "store.sql_webhooks.analytics_incoming_count.app_error",
@@ -7290,10 +7298,6 @@
"id": "web.root.singup_title",
"translation": "Inscription"
},
{
"id": "web.signup_team_complete.invalid_link.app_error",
"translation": "Le lien d'inscription ne semble pas être valide"
},
{
"id": "web.signup_team_complete.link_expired.app_error",
"translation": "Le lien d'inscription a expiré"
@@ -7310,10 +7314,6 @@
"id": "web.signup_user_complete.link_expired.app_error",
"translation": "Le lien d'inscription a expiré"
},
{
"id": "web.signup_user_complete.link_invalid.app_error",
"translation": "Le lien d'inscription ne semble pas être valide"
},
{
"id": "web.signup_user_complete.no_invites.app_error",
"translation": "Le type d'équipe ne permet pas les invitations ouvertes"

View File

@@ -2202,10 +2202,6 @@
"id": "api.team.create_team_from_signup.expired_link.app_error",
"translation": "Il collegamento per l'iscrizione è scaduto"
},
{
"id": "api.team.create_team_from_signup.invalid_link.app_error",
"translation": "Il collegamento per l'iscrizione non sembra essere valido"
},
{
"id": "api.team.create_team_from_signup.unavailable.app_error",
"translation": "L'URL non è disponibile. Provane un altro."
@@ -2710,6 +2706,10 @@
"id": "api.user.create_user.signup_link_invalid.app_error",
"translation": "Il collegamento per l'iscrizione non sembra essere valido"
},
{
"id": "api.user.create_user.signup_link_mismatched_invite_id.app_error",
"translation": "Il collegamento per l'iscrizione non sembra essere valido"
},
{
"id": "api.user.create_user.team_name.app_error",
"translation": "Nome gruppo non valido"
@@ -3690,6 +3690,10 @@
"id": "app.plugin.upload_disabled.app_error",
"translation": "I plugin e/o il caricamento dei plugin è stato disattivato."
},
{
"id": "app.team.join_user_to_team.max_accounts.app_error",
"translation": "Questo gruppo ha raggiunto il limite massimo di utenti ammessi. Contatta il tuo amministratore di sistema per innalzare il limite."
},
{
"id": "app.user_access_token.disabled",
"translation": "I Token di accesso personale sono disattivati su questo server. Per favore contatta l'Amministratore di Sistema per ulteriori dettagli."
@@ -4758,6 +4762,10 @@
"id": "model.config.is_valid.file_thumb_width.app_error",
"translation": "Larghezza antemprima non valida per le impostazioni file. Deve essere un numero positivo."
},
{
"id": "model.config.is_valid.group_unread_channels.app_error",
"translation": "Canali non letti del gruppo non validi per le impostazioni del servizio. Dev'essere 'disabled', 'default_on' oppure 'default_off'."
},
{
"id": "model.config.is_valid.image_proxy_type.app_error",
"translation": "Tipo proxy immagine non valido nelle impostazioni del servizio."
@@ -7290,10 +7298,6 @@
"id": "web.root.singup_title",
"translation": "Iscrizione"
},
{
"id": "web.signup_team_complete.invalid_link.app_error",
"translation": "Il collegamento per l'iscrizione non sembra essere valido"
},
{
"id": "web.signup_team_complete.link_expired.app_error",
"translation": "Il collegamento per l'iscrizione è scaduto"
@@ -7310,10 +7314,6 @@
"id": "web.signup_user_complete.link_expired.app_error",
"translation": "Il collegamento per l'iscrizione è scaduto"
},
{
"id": "web.signup_user_complete.link_invalid.app_error",
"translation": "Il collegamento per l'iscrizione non sembra essere valido"
},
{
"id": "web.signup_user_complete.no_invites.app_error",
"translation": "La tipologia del gruppo non ammette inviti aperti"

View File

@@ -2202,10 +2202,6 @@
"id": "api.team.create_team_from_signup.expired_link.app_error",
"translation": "利用登録リンクは有効期限が切れています"
},
{
"id": "api.team.create_team_from_signup.invalid_link.app_error",
"translation": "利用登録リンクが不正です"
},
{
"id": "api.team.create_team_from_signup.unavailable.app_error",
"translation": "このURLは利用できません。他のURLを試してみてください。"
@@ -2710,6 +2706,10 @@
"id": "api.user.create_user.signup_link_invalid.app_error",
"translation": "利用登録リンクが不正です"
},
{
"id": "api.user.create_user.signup_link_mismatched_invite_id.app_error",
"translation": "利用登録リンクが不正です"
},
{
"id": "api.user.create_user.team_name.app_error",
"translation": "不正なチーム名です"
@@ -3690,6 +3690,10 @@
"id": "app.plugin.upload_disabled.app_error",
"translation": "プラグインのアップロードは無効化されています。"
},
{
"id": "app.team.join_user_to_team.max_accounts.app_error",
"translation": "このチームは登録ユーザー数の上限に達しました。システム管理者に上限値の設定を変更するように依頼してください。"
},
{
"id": "app.user_access_token.disabled",
"translation": "このサーバーではパーソナルアクセストークンが無効になっています。詳しくはシステム管理者に問い合わせてください。"
@@ -4758,6 +4762,10 @@
"id": "model.config.is_valid.file_thumb_width.app_error",
"translation": "ファイル設定のサムネイルの幅が不正です。ゼロ以上の数を指定してください。"
},
{
"id": "model.config.is_valid.group_unread_channels.app_error",
"translation": "未読チャンネルのグループ化設定が不正です。'disabled', 'default_on', 'default_off'のいずれかでなくてはなりません。"
},
{
"id": "model.config.is_valid.image_proxy_type.app_error",
"translation": "画像プロキシタイプの設定が不正です。"
@@ -7290,10 +7298,6 @@
"id": "web.root.singup_title",
"translation": "利用登録"
},
{
"id": "web.signup_team_complete.invalid_link.app_error",
"translation": "利用登録リンクが不正です"
},
{
"id": "web.signup_team_complete.link_expired.app_error",
"translation": "利用登録リンクの期限が切れています"
@@ -7310,10 +7314,6 @@
"id": "web.signup_user_complete.link_expired.app_error",
"translation": "利用登録リンクの期限が切れています"
},
{
"id": "web.signup_user_complete.link_invalid.app_error",
"translation": "利用登録リンクが不正です"
},
{
"id": "web.signup_user_complete.no_invites.app_error",
"translation": "このチームは誰でも招待できるような形式ではありません"

View File

@@ -1812,11 +1812,11 @@
},
{
"id": "api.post.send_notifications_and_forget.push_image_only",
"translation": " Uploaded one or more files in "
"translation": " uploaded one or more files in "
},
{
"id": "api.post.send_notifications_and_forget.push_image_only_dm",
"translation": " Uploaded one or more files in a direct message"
"translation": " uploaded one or more files in a direct message"
},
{
"id": "api.post.send_notifications_and_forget.push_in",
@@ -2202,10 +2202,6 @@
"id": "api.team.create_team_from_signup.expired_link.app_error",
"translation": "가입 링크가 만료되었습니다."
},
{
"id": "api.team.create_team_from_signup.invalid_link.app_error",
"translation": "유효하지 않은 가입 링크입니다."
},
{
"id": "api.team.create_team_from_signup.unavailable.app_error",
"translation": "유효하지 않는 URL 입니다. 변경 후 다시 시도해주세요."
@@ -2710,6 +2706,10 @@
"id": "api.user.create_user.signup_link_invalid.app_error",
"translation": "유효하지 않은 가입 링크입니다."
},
{
"id": "api.user.create_user.signup_link_mismatched_invite_id.app_error",
"translation": "유효하지 않은 가입 링크입니다."
},
{
"id": "api.user.create_user.team_name.app_error",
"translation": "올바르지 않은 팀 이름"
@@ -3136,7 +3136,7 @@
},
{
"id": "app.channel.post_update_channel_purpose_message.post.error",
"translation": "Failed to post channel purpose message"
"translation": "들어옴/나감 메시지를 등록하는 데 실패함"
},
{
"id": "app.channel.post_update_channel_purpose_message.removed",
@@ -3690,6 +3690,10 @@
"id": "app.plugin.upload_disabled.app_error",
"translation": "Plugins and/or plugin uploads have been disabled."
},
{
"id": "app.team.join_user_to_team.max_accounts.app_error",
"translation": "This team has reached the maximum number of allowed accounts. Contact your systems administrator to set a higher limit."
},
{
"id": "app.user_access_token.disabled",
"translation": "Personal access tokens are disabled on this server. Please contact your system administrator for details."
@@ -4758,6 +4762,10 @@
"id": "model.config.is_valid.file_thumb_width.app_error",
"translation": "파일 세팅에 대한 잘못된 썸네일 너비값입니다. 0보다 큰 값이여야 합니다."
},
{
"id": "model.config.is_valid.group_unread_channels.app_error",
"translation": "Invalid group unread channels for service settings. Must be 'disabled', 'default_on', or 'default_off'."
},
{
"id": "model.config.is_valid.image_proxy_type.app_error",
"translation": "Invalid image proxy type for service settings."
@@ -7290,10 +7298,6 @@
"id": "web.root.singup_title",
"translation": "가입"
},
{
"id": "web.signup_team_complete.invalid_link.app_error",
"translation": "유효하지 않은 가입 링크입니다."
},
{
"id": "web.signup_team_complete.link_expired.app_error",
"translation": "가입 링크가 만료되었습니다."
@@ -7310,10 +7314,6 @@
"id": "web.signup_user_complete.link_expired.app_error",
"translation": "가입 링크가 만료되었습니다."
},
{
"id": "web.signup_user_complete.link_invalid.app_error",
"translation": "유효하지 않은 가입 링크입니다."
},
{
"id": "web.signup_user_complete.no_invites.app_error",
"translation": "The team type doesn't allow open invites"

View File

@@ -49,7 +49,7 @@
},
{
"id": "api.admin.add_certificate.no_file.app_error",
"translation": "Geen bestand in 'certificate' veld in aanvraag"
"translation": "Geen bestand gevonden in 'certificate' veld in verzoek"
},
{
"id": "api.admin.add_certificate.open.app_error",
@@ -57,15 +57,15 @@
},
{
"id": "api.admin.add_certificate.saving.app_error",
"translation": "Kon het certificaat-bestand niet opslaan"
"translation": "Kon het certificaat-bestand niet opslaan."
},
{
"id": "api.admin.file_read_error",
"translation": "Fout bij lezen van logbestand"
"translation": "Fout bij lezen van logbestand."
},
{
"id": "api.admin.get_brand_image.not_available.app_error",
"translation": "Personaliseren is niet ondersteund, of niet geconfigureerd op deze server"
"translation": "Personalisatie is niet ondersteund of niet geconfigureerd op deze server."
},
{
"id": "api.admin.get_brand_image.storage.app_error",
@@ -73,15 +73,15 @@
},
{
"id": "api.admin.init.debug",
"translation": "Initialisatie van de admin API routes"
"translation": "Initialisatie van de admin API routes."
},
{
"id": "api.admin.recycle_db_end.warn",
"translation": "Klaar met herstarten van de databaseverbinding"
"translation": "Klaar met herstarten van de databaseverbinding."
},
{
"id": "api.admin.recycle_db_start.warn",
"translation": "Proberen om de databaseverbinding te herstarten"
"translation": "Proberen om de databaseverbinding te herstarten."
},
{
"id": "api.admin.remove_certificate.delete.app_error",
@@ -89,7 +89,7 @@
},
{
"id": "api.admin.saml.metadata.app_error",
"translation": "Er is een fout opgetreden tijdens het opstellen van Service Provider Metadata."
"translation": "Er is een fout opgetreden tijdens het opzetten van Service Provider Metadata."
},
{
"id": "api.admin.test_email.body",
@@ -153,7 +153,7 @@
},
{
"id": "api.channel.add_member.added",
"translation": "%v is door %v aan het kanaal toegevoegd"
"translation": "%v is door %v aan het kanaal toegevoegd."
},
{
"id": "api.channel.add_member.find_channel.app_error",
@@ -185,11 +185,11 @@
},
{
"id": "api.channel.can_manage_channel.private_restricted_system_admin.app_error",
"translation": "Alleen systeembeheerders mogen publieke kanalen beheren en aanmaken."
"translation": "Alleen systeembeheerders mogen privékanalen beheren en aanmaken."
},
{
"id": "api.channel.can_manage_channel.private_restricted_team_admin.app_error",
"translation": "Alleen team- en systeembeheerders mogen publieke kanalen beheren en aanmaken."
"translation": "Alleen team- en systeembeheerders mogen privékanalen beheren en aanmaken."
},
{
"id": "api.channel.can_manage_channel.public_restricted_system_admin.app_error",
@@ -201,11 +201,11 @@
},
{
"id": "api.channel.change_channel_privacy.private_to_public",
"translation": "This channel has been converted to a Public Channel and can be joined by any team member."
"translation": "Dit kanaal is omgezet naar een publiek kanaal en is open voor ieder teamlid."
},
{
"id": "api.channel.change_channel_privacy.public_to_private",
"translation": "This channel has been converted to a Private Channel."
"translation": "This kanaal is omgezet naar een privékanaal."
},
{
"id": "api.channel.create_channel.direct_channel.app_error",
@@ -229,15 +229,15 @@
},
{
"id": "api.channel.create_direct_channel.invalid_user.app_error",
"translation": "Invalid user ID for direct channel creation"
"translation": "Onjuiste gebruikers ID voor het aanmaken van een direct kanaal."
},
{
"id": "api.channel.create_group.bad_size.app_error",
"translation": "Group message channels must contain at least 3 and no more than 8 users"
"translation": "Groep bericht kanalen moeten tenminste 3 en niet meer dan 8 gebruikers bevatten"
},
{
"id": "api.channel.create_group.bad_user.app_error",
"translation": "One of the provided users does not exist"
"translation": "Een van de opgegeven gebruikers bestaat niet"
},
{
"id": "api.channel.delete_channel.archived",
@@ -305,7 +305,7 @@
},
{
"id": "api.channel.join_channel.post_and_forget",
"translation": "%v is het kanaal binnengekomen."
"translation": "%v is nu lid van het kanaal."
},
{
"id": "api.channel.leave.default.app_error",
@@ -317,7 +317,7 @@
},
{
"id": "api.channel.leave.last_member.app_error",
"translation": "U bent het laatste lid, probeer de privégroep te verwijderen in plaats van die te verlaten."
"translation": "U bent het laatste lid, probeer de privékanaalte verwijderen in plaats van die te verlaten."
},
{
"id": "api.channel.leave.left",
@@ -329,7 +329,7 @@
},
{
"id": "api.channel.post_update_channel_displayname_message_and_forget.retrieve_user.error",
"translation": "Kon de gebruiker niet ophalen tijdens het bewaren van de nieuwe kanaalkoptekst %v"
"translation": "Kon de gebruiker niet ophalen tijdens het bijwerken van het kanaal weergavenaam veld"
},
{
"id": "api.channel.post_update_channel_displayname_message_and_forget.updated_from",
@@ -337,7 +337,7 @@
},
{
"id": "api.channel.post_update_channel_header_message_and_forget.post.error",
"translation": "Failed to post update channel header message"
"translation": "Kanaalkoptekst bijwerken mislukt"
},
{
"id": "api.channel.post_update_channel_header_message_and_forget.removed",
@@ -1812,11 +1812,11 @@
},
{
"id": "api.post.send_notifications_and_forget.push_image_only",
"translation": " Uploaded one or more files in "
"translation": " uploaded one or more files in "
},
{
"id": "api.post.send_notifications_and_forget.push_image_only_dm",
"translation": " Uploaded one or more files in a direct message"
"translation": " uploaded one or more files in a direct message"
},
{
"id": "api.post.send_notifications_and_forget.push_in",
@@ -2202,10 +2202,6 @@
"id": "api.team.create_team_from_signup.expired_link.app_error",
"translation": "De aanmeld link is verlopen"
},
{
"id": "api.team.create_team_from_signup.invalid_link.app_error",
"translation": "De aanmeld link is niet geldig"
},
{
"id": "api.team.create_team_from_signup.unavailable.app_error",
"translation": "Deze URL is niet beschikbaar. Probeer een andere."
@@ -2710,6 +2706,10 @@
"id": "api.user.create_user.signup_link_invalid.app_error",
"translation": "De aanmeld link is niet geldig"
},
{
"id": "api.user.create_user.signup_link_mismatched_invite_id.app_error",
"translation": "De aanmeld link is niet geldig"
},
{
"id": "api.user.create_user.team_name.app_error",
"translation": "Ongeldige team naam"
@@ -3136,7 +3136,7 @@
},
{
"id": "app.channel.post_update_channel_purpose_message.post.error",
"translation": "Failed to post channel purpose message"
"translation": "Plaatsen van bericht over binnenkomen/verlaten %v is mislukt"
},
{
"id": "app.channel.post_update_channel_purpose_message.removed",
@@ -3204,27 +3204,27 @@
},
{
"id": "app.import.import_line.null_channel.error",
"translation": "Import data line has type \"channel\" but the channel object is null."
"translation": "Geimporteerde lijn met type \"user\", maar het \"user\" object is null."
},
{
"id": "app.import.import_line.null_direct_channel.error",
"translation": "Import data line has type \"direct_channel\" but the direct_channel object is null."
"translation": "Geimporteerde lijn met type \"user\", maar het \"user\" object is null."
},
{
"id": "app.import.import_line.null_direct_post.error",
"translation": "Import data line has type \"direct_post\" but the direct_post object is null."
"translation": "Geimporteerde lijn met type \"user\", maar het \"user\" object is null."
},
{
"id": "app.import.import_line.null_post.error",
"translation": "Import data line has type \"post\" but the post object is null."
"translation": "Geimporteerde lijn met type \"user\", maar het \"user\" object is null."
},
{
"id": "app.import.import_line.null_team.error",
"translation": "Import data line has type \"team\" but the team object is null."
"translation": "Geimporteerde lijn met type \"user\", maar het \"user\" object is null."
},
{
"id": "app.import.import_line.null_user.error",
"translation": "Import data line has type \"user\" but the user object is null."
"translation": "Geimporteerde lijn met type \"user\", maar het \"user\" object is null."
},
{
"id": "app.import.import_line.unknown_line_type.error",
@@ -3252,7 +3252,7 @@
},
{
"id": "app.import.validate_channel_import_data.create_at_zero.error",
"translation": "Channel create_at must not be zero if provided."
"translation": "Kanaaleigenschap create_at mag niet 0 zijn indien opgegeven."
},
{
"id": "app.import.validate_channel_import_data.display_name_length.error",
@@ -3260,7 +3260,7 @@
},
{
"id": "app.import.validate_channel_import_data.display_name_missing.error",
"translation": "Missing required channel property: display_name"
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_channel_import_data.header_length.error",
@@ -3276,7 +3276,7 @@
},
{
"id": "app.import.validate_channel_import_data.name_missing.error",
"translation": "Missing required channel property: name"
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_channel_import_data.purpose_length.error",
@@ -3284,7 +3284,7 @@
},
{
"id": "app.import.validate_channel_import_data.team_missing.error",
"translation": "Missing required channel property: team"
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_channel_import_data.type_invalid.error",
@@ -3292,7 +3292,7 @@
},
{
"id": "app.import.validate_channel_import_data.type_missing.error",
"translation": "Missing required channel property: type."
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_direct_channel_import_data.header_length.error",
@@ -3300,7 +3300,7 @@
},
{
"id": "app.import.validate_direct_channel_import_data.members_required.error",
"translation": "Missing required direct channel property: members"
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_direct_channel_import_data.members_too_few.error",
@@ -3316,7 +3316,7 @@
},
{
"id": "app.import.validate_direct_post_import_data.channel_members_required.error",
"translation": "Missing required direct post property: channel_members"
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_direct_post_import_data.channel_members_too_few.error",
@@ -3328,7 +3328,7 @@
},
{
"id": "app.import.validate_direct_post_import_data.create_at_missing.error",
"translation": "Missing required direct post property: create_at"
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_direct_post_import_data.create_at_zero.error",
@@ -3340,7 +3340,7 @@
},
{
"id": "app.import.validate_direct_post_import_data.message_missing.error",
"translation": "Missing required direct post property: message"
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_direct_post_import_data.unknown_flagger.error",
@@ -3348,15 +3348,15 @@
},
{
"id": "app.import.validate_direct_post_import_data.user_missing.error",
"translation": "Missing required direct post property: user"
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_post_import_data.channel_missing.error",
"translation": "Missing required Post property: Channel."
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_post_import_data.create_at_missing.error",
"translation": "Missing required Post property: create_at."
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_post_import_data.create_at_zero.error",
@@ -3368,23 +3368,23 @@
},
{
"id": "app.import.validate_post_import_data.message_missing.error",
"translation": "Missing required Post property: Message."
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_post_import_data.team_missing.error",
"translation": "Missing required Post property: Team."
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_post_import_data.user_missing.error",
"translation": "Missing required Post property: User."
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_reaction_import_data.create_at_before_parent.error",
"translation": "Reaction CreateAt property must be greater than the parent post CreateAt."
"translation": "Reactie CreateAt eigenschap moet groter zijn dan het hoofdbericht CreateAt"
},
{
"id": "app.import.validate_reaction_import_data.create_at_missing.error",
"translation": "Missing required Reaction property: create_at."
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_reaction_import_data.create_at_zero.error",
@@ -3396,19 +3396,19 @@
},
{
"id": "app.import.validate_reaction_import_data.emoji_name_missing.error",
"translation": "Missing required Reaction property: EmojiName."
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_reaction_import_data.user_missing.error",
"translation": "Missing required Reaction property: User."
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_reply_import_data.create_at_before_parent.error",
"translation": "Reply CreateAt property must be greater than the parent post CreateAt."
"translation": "Reactie CreateAt eigenschap moet groter zijn dan het hoofdbericht CreateAt"
},
{
"id": "app.import.validate_reply_import_data.create_at_missing.error",
"translation": "Missing required Reply property: create_at."
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_reply_import_data.create_at_zero.error",
@@ -3420,11 +3420,11 @@
},
{
"id": "app.import.validate_reply_import_data.message_missing.error",
"translation": "Missing required Reply property: Message."
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_reply_import_data.user_missing.error",
"translation": "Missing required Reply property: User."
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_team_import_data.allowed_domains_length.error",
@@ -3432,7 +3432,7 @@
},
{
"id": "app.import.validate_team_import_data.create_at_zero.error",
"translation": "Team create_at must not be zero if provided."
"translation": "Kanaaleigenschap create_at mag niet 0 zijn indien opgegeven."
},
{
"id": "app.import.validate_team_import_data.description_length.error",
@@ -3444,7 +3444,7 @@
},
{
"id": "app.import.validate_team_import_data.display_name_missing.error",
"translation": "Missing required team property: display_name."
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_team_import_data.name_characters.error",
@@ -3456,7 +3456,7 @@
},
{
"id": "app.import.validate_team_import_data.name_missing.error",
"translation": "Missing required team property: name."
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_team_import_data.name_reserved.error",
@@ -3468,7 +3468,7 @@
},
{
"id": "app.import.validate_team_import_data.type_missing.error",
"translation": "Missing required team property: type."
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_user_channels_import_data.channel_name_missing.error",
@@ -3508,7 +3508,7 @@
},
{
"id": "app.import.validate_user_import_data.email_missing.error",
"translation": "Missing required user property: email."
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_user_import_data.first_name_length.error",
@@ -3576,7 +3576,7 @@
},
{
"id": "app.import.validate_user_import_data.username_missing.error",
"translation": "Missing require user property: username."
"translation": "Mist vereiste team kenmerk: naam."
},
{
"id": "app.import.validate_user_teams_import_data.invalid_roles.error",
@@ -3690,6 +3690,10 @@
"id": "app.plugin.upload_disabled.app_error",
"translation": "Plugins and/or plugin uploads have been disabled."
},
{
"id": "app.team.join_user_to_team.max_accounts.app_error",
"translation": "Het maximaal aantal leden voor dit team is bereikt. Neem contact op met de beheerder voor een hoger limiet."
},
{
"id": "app.user_access_token.disabled",
"translation": "Personal access tokens are disabled on this server. Please contact your system administrator for details."
@@ -4028,7 +4032,7 @@
},
{
"id": "ent.elasticsearch.test_config.connect_failed",
"translation": "Connecting to Elasticsearch server failed."
"translation": "Connectie naar Elasticsearch server is mislukt."
},
{
"id": "ent.elasticsearch.test_config.indexing_disabled.error",
@@ -4672,7 +4676,7 @@
},
{
"id": "model.config.is_valid.elastic_search.connection_url.app_error",
"translation": "Elastic Search ConnectionUrl setting must be provided when Elastic Search indexing is enabled."
"translation": "Elastic Search Username instelling moet ingevuld zijn wanneer Elastic Search indexing is ingeschakeld."
},
{
"id": "model.config.is_valid.elastic_search.enable_searching.app_error",
@@ -4684,7 +4688,7 @@
},
{
"id": "model.config.is_valid.elastic_search.password.app_error",
"translation": "Elastic Search Password setting must be provided when Elastic Search indexing is enabled."
"translation": "Elastic Search Username instelling moet ingevuld zijn wanneer Elastic Search indexing is ingeschakeld."
},
{
"id": "model.config.is_valid.elastic_search.posts_aggregator_job_start_time.app_error",
@@ -4696,7 +4700,7 @@
},
{
"id": "model.config.is_valid.elastic_search.username.app_error",
"translation": "Elastic Search Username setting must be provided when Elastic Search indexing is enabled."
"translation": "Elastic Search Username instelling moet ingevuld zijn wanneer Elastic Search indexing is ingeschakeld."
},
{
"id": "model.config.is_valid.email_batching_buffer_size.app_error",
@@ -4758,6 +4762,10 @@
"id": "model.config.is_valid.file_thumb_width.app_error",
"translation": "Ongeldige voorvertonings breedte bij bestands instellingen. Moet een getal groter dan 0 zijn."
},
{
"id": "model.config.is_valid.group_unread_channels.app_error",
"translation": "Invalid group unread channels for service settings. Must be 'disabled', 'default_on', or 'default_off'."
},
{
"id": "model.config.is_valid.image_proxy_type.app_error",
"translation": "Invalid image proxy type for service settings."
@@ -7290,10 +7298,6 @@
"id": "web.root.singup_title",
"translation": "Aanmelden"
},
{
"id": "web.signup_team_complete.invalid_link.app_error",
"translation": "De aanmeld link is niet geldig"
},
{
"id": "web.signup_team_complete.link_expired.app_error",
"translation": "De aanmeld link is verlopen"
@@ -7310,10 +7314,6 @@
"id": "web.signup_user_complete.link_expired.app_error",
"translation": "De aanmeld link is verlopen"
},
{
"id": "web.signup_user_complete.link_invalid.app_error",
"translation": "De aanmeld link is niet geldig"
},
{
"id": "web.signup_user_complete.no_invites.app_error",
"translation": "Het team type staat open uitnodiging niet toe"

View File

@@ -2202,10 +2202,6 @@
"id": "api.team.create_team_from_signup.expired_link.app_error",
"translation": "Odnośnik zapisu jest przeterminowany"
},
{
"id": "api.team.create_team_from_signup.invalid_link.app_error",
"translation": "Odnośnik zapisu nie wydaje się być poprawny"
},
{
"id": "api.team.create_team_from_signup.unavailable.app_error",
"translation": "Ten adres URL jest niedostępny. Proszę wybrać inny."
@@ -2710,6 +2706,10 @@
"id": "api.user.create_user.signup_link_invalid.app_error",
"translation": "Link rejestracyjny wydaje się być niepoprawny"
},
{
"id": "api.user.create_user.signup_link_mismatched_invite_id.app_error",
"translation": "Łącze rejestracji wydaje się być niepoprawne."
},
{
"id": "api.user.create_user.team_name.app_error",
"translation": "Niepoprawna nazwa zespołu"
@@ -3690,6 +3690,10 @@
"id": "app.plugin.upload_disabled.app_error",
"translation": "Plugins and/or plugin uploads have been disabled."
},
{
"id": "app.team.join_user_to_team.max_accounts.app_error",
"translation": "Ten zespół osiągnął limit kont. Skontaktuj się z administratorem aby ustanowić wyższy pułap."
},
{
"id": "app.user_access_token.disabled",
"translation": "Personal access tokens are disabled on this server. Please contact your system administrator for details."
@@ -4758,6 +4762,10 @@
"id": "model.config.is_valid.file_thumb_width.app_error",
"translation": "Nieprawidłowa szerokość miniaturki dla ustawień plików. Musi być liczbą większą od 0."
},
{
"id": "model.config.is_valid.group_unread_channels.app_error",
"translation": "Invalid group unread channels for service settings. Must be 'disabled', 'default_on', or 'default_off'."
},
{
"id": "model.config.is_valid.image_proxy_type.app_error",
"translation": "Invalid image proxy type for service settings."
@@ -7290,10 +7298,6 @@
"id": "web.root.singup_title",
"translation": "Rejestracja"
},
{
"id": "web.signup_team_complete.invalid_link.app_error",
"translation": "Link do rejestracji jest niepoprawny"
},
{
"id": "web.signup_team_complete.link_expired.app_error",
"translation": "Link do rejestracji wygasł"
@@ -7310,10 +7314,6 @@
"id": "web.signup_user_complete.link_expired.app_error",
"translation": "Link do rejestracji wygasł"
},
{
"id": "web.signup_user_complete.link_invalid.app_error",
"translation": "Link do rejestracji jest niepoprawny"
},
{
"id": "web.signup_user_complete.no_invites.app_error",
"translation": "The team type doesn't allow open invites"

View File

@@ -2202,10 +2202,6 @@
"id": "api.team.create_team_from_signup.expired_link.app_error",
"translation": "O link de inscrição expirou"
},
{
"id": "api.team.create_team_from_signup.invalid_link.app_error",
"translation": "O link de inscrição não parece ser válido"
},
{
"id": "api.team.create_team_from_signup.unavailable.app_error",
"translation": "Esta URL não está disponível. Por favor, tente outra."
@@ -2710,6 +2706,10 @@
"id": "api.user.create_user.signup_link_invalid.app_error",
"translation": "O link de inscrição não parece ser válido"
},
{
"id": "api.user.create_user.signup_link_mismatched_invite_id.app_error",
"translation": "O link de inscrição não parece ser válido"
},
{
"id": "api.user.create_user.team_name.app_error",
"translation": "Inválido nome de equipe"
@@ -3690,6 +3690,10 @@
"id": "app.plugin.upload_disabled.app_error",
"translation": "Plugins e/ou envio de plugin foi desabilitado."
},
{
"id": "app.team.join_user_to_team.max_accounts.app_error",
"translation": "Esta equipe alcançou o número máximo de contas permitidas. Contate o administrador do sistema para ajustar um limite maior."
},
{
"id": "app.user_access_token.disabled",
"translation": "Os tokens de acesso individual estão desativados neste servidor. Entre em contato com o administrador do sistema para obter detalhes."
@@ -4758,6 +4762,10 @@
"id": "model.config.is_valid.file_thumb_width.app_error",
"translation": "Definição da largura do thumbnail inválida. Deve ser um número positivo."
},
{
"id": "model.config.is_valid.group_unread_channels.app_error",
"translation": "Grupo de canais não lidos inválido nas configurações do serviço. Deve ser 'disabled', 'default_on', ou 'default_off'."
},
{
"id": "model.config.is_valid.image_proxy_type.app_error",
"translation": "Tipo de proxy de imagem inválido nas configurações de serviços."
@@ -7290,10 +7298,6 @@
"id": "web.root.singup_title",
"translation": "Inscrever-se"
},
{
"id": "web.signup_team_complete.invalid_link.app_error",
"translation": "O link de inscrição não parece ser válido"
},
{
"id": "web.signup_team_complete.link_expired.app_error",
"translation": "O link de inscrição expirou"
@@ -7310,10 +7314,6 @@
"id": "web.signup_user_complete.link_expired.app_error",
"translation": "O link de inscrição expirou"
},
{
"id": "web.signup_user_complete.link_invalid.app_error",
"translation": "O link de inscrição não parece ser válido"
},
{
"id": "web.signup_user_complete.no_invites.app_error",
"translation": "O tipo da equipe não permite convites abertos"

View File

@@ -201,11 +201,11 @@
},
{
"id": "api.channel.change_channel_privacy.private_to_public",
"translation": "This channel has been converted to a Public Channel and can be joined by any team member."
"translation": "Канал преобразован в публичный и к нему может присоединиться любой участник."
},
{
"id": "api.channel.change_channel_privacy.public_to_private",
"translation": "This channel has been converted to a Private Channel."
"translation": "Канал преобразован в приватный."
},
{
"id": "api.channel.create_channel.direct_channel.app_error",
@@ -2202,10 +2202,6 @@
"id": "api.team.create_team_from_signup.expired_link.app_error",
"translation": "Ссылка на регистрацию устарела"
},
{
"id": "api.team.create_team_from_signup.invalid_link.app_error",
"translation": "Неправильная ссылка на регистрацию"
},
{
"id": "api.team.create_team_from_signup.unavailable.app_error",
"translation": "Этот URL-адрес недоступен. Пожалуйста, попробуйте другой."
@@ -2710,6 +2706,10 @@
"id": "api.user.create_user.signup_link_invalid.app_error",
"translation": "Ссылка для регистрации, похоже, неверна."
},
{
"id": "api.user.create_user.signup_link_mismatched_invite_id.app_error",
"translation": "Неправильная ссылка на регистрацию"
},
{
"id": "api.user.create_user.team_name.app_error",
"translation": "Неверное имя команды"
@@ -3248,7 +3248,7 @@
},
{
"id": "app.import.import_user_channels.save_preferences.error",
"translation": "Error importing user channel memberships. Failed to save preferences."
"translation": "Ошибка импорта участия пользователя в каналах. Не удалось сохранить настройки."
},
{
"id": "app.import.validate_channel_import_data.create_at_zero.error",
@@ -3296,7 +3296,7 @@
},
{
"id": "app.import.validate_direct_channel_import_data.header_length.error",
"translation": "Direct channel header is too long"
"translation": "Заголовок личного канала слишком длинный."
},
{
"id": "app.import.validate_direct_channel_import_data.members_required.error",
@@ -3304,11 +3304,11 @@
},
{
"id": "app.import.validate_direct_channel_import_data.members_too_few.error",
"translation": "Direct channel members list contains too few items"
"translation": "В списке пользователей личного канала слишком мало элементов."
},
{
"id": "app.import.validate_direct_channel_import_data.members_too_many.error",
"translation": "Direct channel members list contains too many items"
"translation": "В списке пользователей личного канала слишком много элементов."
},
{
"id": "app.import.validate_direct_channel_import_data.unknown_favoriter.error",
@@ -3320,11 +3320,11 @@
},
{
"id": "app.import.validate_direct_post_import_data.channel_members_too_few.error",
"translation": "Direct post channel members list contains too few items"
"translation": "В списке пользователей личного канала слишком мало элементов."
},
{
"id": "app.import.validate_direct_post_import_data.channel_members_too_many.error",
"translation": "Direct post channel members list contains too many items"
"translation": "В списке пользователей личного канала слишком много элементов."
},
{
"id": "app.import.validate_direct_post_import_data.create_at_missing.error",
@@ -3690,6 +3690,10 @@
"id": "app.plugin.upload_disabled.app_error",
"translation": "Plugins and/or plugin uploads have been disabled."
},
{
"id": "app.team.join_user_to_team.max_accounts.app_error",
"translation": "Эта команда достигла максимального количества разрешенных учетных записей. Свяжитесь с системным администратором для установки большего предела."
},
{
"id": "app.user_access_token.disabled",
"translation": "Personal access tokens are disabled on this server. Please contact your system administrator for details."
@@ -4758,6 +4762,10 @@
"id": "model.config.is_valid.file_thumb_width.app_error",
"translation": "Неверная ширина миниатюры в настройках файлов. Число должно быть положительным."
},
{
"id": "model.config.is_valid.group_unread_channels.app_error",
"translation": "Invalid group unread channels for service settings. Must be 'disabled', 'default_on', or 'default_off'."
},
{
"id": "model.config.is_valid.image_proxy_type.app_error",
"translation": "Invalid image proxy type for service settings."
@@ -7290,10 +7298,6 @@
"id": "web.root.singup_title",
"translation": "Регистрация"
},
{
"id": "web.signup_team_complete.invalid_link.app_error",
"translation": "Ссылка для регистрации, похоже, недействительна"
},
{
"id": "web.signup_team_complete.link_expired.app_error",
"translation": "Ссылка для регистрации устарела"
@@ -7310,10 +7314,6 @@
"id": "web.signup_user_complete.link_expired.app_error",
"translation": "Ссылка для регистрации устарела"
},
{
"id": "web.signup_user_complete.link_invalid.app_error",
"translation": "Ссылка для регистрации, похоже, недействительна"
},
{
"id": "web.signup_user_complete.no_invites.app_error",
"translation": "Тип команды не позволяет открытые приглашения"

View File

@@ -2202,10 +2202,6 @@
"id": "api.team.create_team_from_signup.expired_link.app_error",
"translation": "Hesap açma bağlantısının süresi geçmiş"
},
{
"id": "api.team.create_team_from_signup.invalid_link.app_error",
"translation": "Hesap açma bağlantısı geçersiz görünüyor"
},
{
"id": "api.team.create_team_from_signup.unavailable.app_error",
"translation": "Adres kullanılamıyor. Lütfen yeniden deneyin."
@@ -2710,6 +2706,10 @@
"id": "api.user.create_user.signup_link_invalid.app_error",
"translation": "Hesap açma bağlantısı geçersiz görünüyor"
},
{
"id": "api.user.create_user.signup_link_mismatched_invite_id.app_error",
"translation": "Hesap açma bağlantısı geçersiz görünüyor"
},
{
"id": "api.user.create_user.team_name.app_error",
"translation": "Takım adı geçersiz"
@@ -3690,6 +3690,10 @@
"id": "app.plugin.upload_disabled.app_error",
"translation": "Uygulama ekleri ya da uygulama eki yüklemeleri devre dışı bırakılmış. "
},
{
"id": "app.team.join_user_to_team.max_accounts.app_error",
"translation": "Bu takım izin verilen en fazla hesap sayısına ulaşmış. Sınırı yükseltmesi için sistem yöneticinizle görüşün."
},
{
"id": "app.user_access_token.disabled",
"translation": "Bu sunucu üzerinde kişisel erişim kodları devre dışı bırakılmış. Lütfen ayrıntılı bilgi almak için sistem yöneticiniz ile görüşün."
@@ -4758,6 +4762,10 @@
"id": "model.config.is_valid.file_thumb_width.app_error",
"translation": "Küçük görsel genişliği dosya ayarı geçersiz. Sıfır ya da pozitif bir sayı olmalı."
},
{
"id": "model.config.is_valid.group_unread_channels.app_error",
"translation": "Hizmet ayarları okunmamış kanallar gruplansın geçersiz. 'disabled', 'default_on' ya da 'default_off' olmalıdır."
},
{
"id": "model.config.is_valid.image_proxy_type.app_error",
"translation": "Hizmet ayarlarında görsel vekil sunucu türü geçersiz."
@@ -7290,10 +7298,6 @@
"id": "web.root.singup_title",
"translation": "Hesap Açın"
},
{
"id": "web.signup_team_complete.invalid_link.app_error",
"translation": "Hesap açma bağlantısı geçersiz görünüyor"
},
{
"id": "web.signup_team_complete.link_expired.app_error",
"translation": "Hesap açma bağlantısının süresi geçmiş"
@@ -7310,10 +7314,6 @@
"id": "web.signup_user_complete.link_expired.app_error",
"translation": "Hesap açma bağlantısının süresi geçmiş"
},
{
"id": "web.signup_user_complete.link_invalid.app_error",
"translation": "Hesap açma bağlantısı geçersiz görünüyor"
},
{
"id": "web.signup_user_complete.no_invites.app_error",
"translation": "Takım türü açık çağrılara izin vermiyor"

View File

@@ -1162,7 +1162,7 @@
},
{
"id": "api.emoji.delete.delete_reactions.app_error",
"translation": "无法删除表情符 %v 时删除反应"
"translation": "无法删除表情符 %v 时删除互动"
},
{
"id": "api.emoji.delete.permissions.app_error",
@@ -1904,31 +1904,31 @@
},
{
"id": "api.reaction.delete_reaction.mismatched_channel_id.app_error",
"translation": "因网址中频道 ID 与消息 ID不符而删除反应失败"
"translation": "因网址中频道 ID 与消息 ID不符而删除互动失败"
},
{
"id": "api.reaction.init.debug",
"translation": "正在初始化反应 API 路由"
"translation": "正在初始化互动 API 路由"
},
{
"id": "api.reaction.list_reactions.mismatched_channel_id.app_error",
"translation": "因网址中频道 ID 与消息 ID不符而获取反应失败"
"translation": "因网址中频道 ID 与消息 ID不符而获取互动失败"
},
{
"id": "api.reaction.save_reaction.invalid.app_error",
"translation": "无效反应。"
"translation": "无效互动。"
},
{
"id": "api.reaction.save_reaction.mismatched_channel_id.app_error",
"translation": "因网址中频道 ID 与消息 ID不符而保存反应失败"
"translation": "因网址中频道 ID 与消息 ID不符而保存互动失败"
},
{
"id": "api.reaction.save_reaction.user_id.app_error",
"translation": "您不能保存其他用户的反应。"
"translation": "您不能保存其他用户的互动。"
},
{
"id": "api.reaction.send_reaction_event.post.app_error",
"translation": "发送 websocket 反应事件时获取消息失败"
"translation": "发送 websocket 互动事件时获取消息失败"
},
{
"id": "api.saml.save_certificate.app_error",
@@ -2202,10 +2202,6 @@
"id": "api.team.create_team_from_signup.expired_link.app_error",
"translation": "注册链接已过期"
},
{
"id": "api.team.create_team_from_signup.invalid_link.app_error",
"translation": "注册链接无效"
},
{
"id": "api.team.create_team_from_signup.unavailable.app_error",
"translation": "该URL无效。请尝试其他。"
@@ -2710,6 +2706,10 @@
"id": "api.user.create_user.signup_link_invalid.app_error",
"translation": "注册链接无效"
},
{
"id": "api.user.create_user.signup_link_mismatched_invite_id.app_error",
"translation": "注册链接无效"
},
{
"id": "api.user.create_user.team_name.app_error",
"translation": "无效团队名称"
@@ -3380,31 +3380,31 @@
},
{
"id": "app.import.validate_reaction_import_data.create_at_before_parent.error",
"translation": "Reaction CreateAt property must be greater than the parent post CreateAt."
"translation": "互动 CreateAt 属性必须大于父消息 CreateAt"
},
{
"id": "app.import.validate_reaction_import_data.create_at_missing.error",
"translation": "缺少反应必须属性create_at。"
"translation": "缺少互动必须属性create_at。"
},
{
"id": "app.import.validate_reaction_import_data.create_at_zero.error",
"translation": "反应 CreateAt 属性不能为零。"
"translation": "互动 CreateAt 属性不能为零。"
},
{
"id": "app.import.validate_reaction_import_data.emoji_name_length.error",
"translation": "反应 EmojiName 属性超过允许的最大长度。"
"translation": "互动 EmojiName 属性超过允许的最大长度。"
},
{
"id": "app.import.validate_reaction_import_data.emoji_name_missing.error",
"translation": "缺少反应必须属性User。"
"translation": "缺少互动必须属性User。"
},
{
"id": "app.import.validate_reaction_import_data.user_missing.error",
"translation": "缺少反应必须属性User。"
"translation": "缺少互动必须属性User。"
},
{
"id": "app.import.validate_reply_import_data.create_at_before_parent.error",
"translation": "Reply CreateAt property must be greater than the parent post CreateAt."
"translation": "回复 CreateAt 属性必须大于父消息 CreateAt"
},
{
"id": "app.import.validate_reply_import_data.create_at_missing.error",
@@ -3690,6 +3690,10 @@
"id": "app.plugin.upload_disabled.app_error",
"translation": "插件上传已禁用。"
},
{
"id": "app.team.join_user_to_team.max_accounts.app_error",
"translation": "这个团队已经达到允许的最大用户数量。请与系统管理员联系以设置更高的限制。"
},
{
"id": "app.user_access_token.disabled",
"translation": "个人访问令牌在本服务器禁用。请联系您的系统管理员了解详情。"
@@ -4758,6 +4762,10 @@
"id": "model.config.is_valid.file_thumb_width.app_error",
"translation": "文件设置时缩略图宽度无效。必须是正数。"
},
{
"id": "model.config.is_valid.group_unread_channels.app_error",
"translation": "无效未读频道分组的服务设定。必须为 'disabled'、'default_on' 或 'default_off'。"
},
{
"id": "model.config.is_valid.image_proxy_type.app_error",
"translation": "无效的图片代理类型服务设定。"
@@ -6380,47 +6388,47 @@
},
{
"id": "store.sql_reaction.delete.begin.app_error",
"translation": "删除反应时无法打开事务"
"translation": "删除互动时无法打开事务"
},
{
"id": "store.sql_reaction.delete.commit.app_error",
"translation": "删除反应时无法提交事务"
"translation": "删除互动时无法提交事务"
},
{
"id": "store.sql_reaction.delete.save.app_error",
"translation": "无法删除反应"
"translation": "无法删除互动"
},
{
"id": "store.sql_reaction.delete_all_with_emoj_name.delete_reactions.app_error",
"translation": "无法用提供的表情符删除反应"
"translation": "无法用提供的表情符删除互动"
},
{
"id": "store.sql_reaction.delete_all_with_emoj_name.get_reactions.app_error",
"translation": "无法用提供的表情符获取反应"
"translation": "无法用提供的表情符获取互动"
},
{
"id": "store.sql_reaction.delete_all_with_emoji_name.update_post.warn",
"translation": "无法删除反应时更新 Post.HasReactions post_id=%v, error=%v"
"translation": "无法删除互动时更新 Post.HasReactions post_id=%v, error=%v"
},
{
"id": "store.sql_reaction.get_for_post.app_error",
"translation": "无法获取消息的反应"
"translation": "无法获取消息的互动"
},
{
"id": "store.sql_reaction.permanent_delete_batch.app_error",
"translation": "批量永久删除反应时遇到错误"
"translation": "批量永久删除互动时遇到错误"
},
{
"id": "store.sql_reaction.save.begin.app_error",
"translation": "无法保存反应时打开事务"
"translation": "无法保存互动时打开事务"
},
{
"id": "store.sql_reaction.save.commit.app_error",
"translation": "无法保存反应时提交事务"
"translation": "无法保存互动时提交事务"
},
{
"id": "store.sql_reaction.save.save.app_error",
"translation": "无法保存反应"
"translation": "无法保存互动"
},
{
"id": "store.sql_session.analytics_session_count.app_error",
@@ -7290,10 +7298,6 @@
"id": "web.root.singup_title",
"translation": "注册"
},
{
"id": "web.signup_team_complete.invalid_link.app_error",
"translation": "注册链接无效"
},
{
"id": "web.signup_team_complete.link_expired.app_error",
"translation": "注册链接已过期"
@@ -7310,10 +7314,6 @@
"id": "web.signup_user_complete.link_expired.app_error",
"translation": "注册链接已过期"
},
{
"id": "web.signup_user_complete.link_invalid.app_error",
"translation": "注册链接无效"
},
{
"id": "web.signup_user_complete.no_invites.app_error",
"translation": "团队类型不允许公开邀请"

View File

@@ -2202,10 +2202,6 @@
"id": "api.team.create_team_from_signup.expired_link.app_error",
"translation": "註冊連結已過期"
},
{
"id": "api.team.create_team_from_signup.invalid_link.app_error",
"translation": "此註冊連結不是有效連結"
},
{
"id": "api.team.create_team_from_signup.unavailable.app_error",
"translation": "這個網址不存在。請嘗試其他的。"
@@ -2710,6 +2706,10 @@
"id": "api.user.create_user.signup_link_invalid.app_error",
"translation": "此註冊連結不是有效連結"
},
{
"id": "api.user.create_user.signup_link_mismatched_invite_id.app_error",
"translation": "此註冊連結不是有效連結"
},
{
"id": "api.user.create_user.team_name.app_error",
"translation": "無效的團隊名稱"
@@ -3564,7 +3564,7 @@
},
{
"id": "app.import.validate_user_import_data.profile_image.error",
"translation": "Invalid profile image."
"translation": "無效的個人頭像。"
},
{
"id": "app.import.validate_user_import_data.roles_invalid.error",
@@ -3690,6 +3690,10 @@
"id": "app.plugin.upload_disabled.app_error",
"translation": "模組 跟/或 上傳模組已被停用。"
},
{
"id": "app.team.join_user_to_team.max_accounts.app_error",
"translation": "此團隊已達最大使用者數量上限。請聯絡系統管理員調大數量限制。"
},
{
"id": "app.user_access_token.disabled",
"translation": "個人存取 Token 在此伺服器被停用。詳情請洽管理員。"
@@ -4644,7 +4648,7 @@
},
{
"id": "model.config.is_valid.atmos_camo_image_proxy_options.app_error",
"translation": "Invalid atmos/camo image proxy options for service settings. Must be set to your shared key."
"translation": "服務設定中的 atmos/camo 圖片代理無效。必須設定為分享金鑰。"
},
{
"id": "model.config.is_valid.cluster_email_batching.app_error",
@@ -4758,9 +4762,13 @@
"id": "model.config.is_valid.file_thumb_width.app_error",
"translation": "檔案設定中縮圖寬度無效。必須為正數。"
},
{
"id": "model.config.is_valid.group_unread_channels.app_error",
"translation": "服務設定中的未讀頻道分組無效。必須為 'disabled' 、 'default_on' 或 'default_off'。"
},
{
"id": "model.config.is_valid.image_proxy_type.app_error",
"translation": "Invalid image proxy type for service settings."
"translation": "服務設定中的圖片代理類型無效。"
},
{
"id": "model.config.is_valid.ldap_basedn",
@@ -5404,7 +5412,7 @@
},
{
"id": "model.user.is_valid.position.app_error",
"translation": "無效的位置:不能超過35個字元。"
"translation": "無效的位置:不能超過128個字元。"
},
{
"id": "model.user.is_valid.pwd.app_error",
@@ -6848,7 +6856,7 @@
},
{
"id": "store.sql_user_access_token.get_all.app_error",
"translation": "無法取得個人存取 Token"
"translation": "無法取得全部的個人存取 Token"
},
{
"id": "store.sql_user_access_token.get_by_token.app_error",
@@ -7290,10 +7298,6 @@
"id": "web.root.singup_title",
"translation": "註冊"
},
{
"id": "web.signup_team_complete.invalid_link.app_error",
"translation": "此註冊連結不是有效連結"
},
{
"id": "web.signup_team_complete.link_expired.app_error",
"translation": "註冊連結已過期"
@@ -7310,10 +7314,6 @@
"id": "web.signup_user_complete.link_expired.app_error",
"translation": "註冊連結已過期"
},
{
"id": "web.signup_user_complete.link_invalid.app_error",
"translation": "此註冊連結不是有效連結"
},
{
"id": "web.signup_user_complete.no_invites.app_error",
"translation": "此團隊類型不允許自由加入"

View File

@@ -13,6 +13,7 @@ import (
// It should be maitained in chronological order with most current
// release at the front of the list.
var versions = []string{
"4.7.1",
"4.7.0",
"4.6.0",
"4.5.0",

View File

@@ -16,6 +16,7 @@ import (
const (
VERSION_4_8_0 = "4.8.0"
VERSION_4_7_1 = "4.7.1"
VERSION_4_7_0 = "4.7.0"
VERSION_4_6_0 = "4.6.0"
VERSION_4_5_0 = "4.5.0"
@@ -65,6 +66,7 @@ func UpgradeDatabase(sqlStore SqlStore) {
UpgradeDatabaseToVersion45(sqlStore)
UpgradeDatabaseToVersion46(sqlStore)
UpgradeDatabaseToVersion47(sqlStore)
UpgradeDatabaseToVersion471(sqlStore)
UpgradeDatabaseToVersion48(sqlStore)
// If the SchemaVersion is empty this this is the first time it has ran
@@ -352,6 +354,16 @@ func UpgradeDatabaseToVersion47(sqlStore SqlStore) {
}
}
// If any new instances started with 4.7, they would have the bad Email column on the
// ChannelMemberHistory table. So for those cases we need to do an upgrade between
// 4.7.0 and 4.7.1
func UpgradeDatabaseToVersion471(sqlStore SqlStore) {
if shouldPerformUpgrade(sqlStore, VERSION_4_7_0, VERSION_4_7_1) {
sqlStore.RemoveColumnIfExists("ChannelMemberHistory", "Email")
saveSchemaVersion(sqlStore, VERSION_4_7_1)
}
}
func UpgradeDatabaseToVersion48(sqlStore SqlStore) {
//TODO: Uncomment the following condition when version 4.8.0 is released
//if shouldPerformUpgrade(sqlStore, VERSION_4_7_0, VERSION_4_8_0) {