Merge branch 'master' into MM-50966-in-product-expansion
Этот коммит содержится в:
@@ -18,7 +18,7 @@ import {
|
||||
makeOnSubmit,
|
||||
makeOnEditLatestPost,
|
||||
} from 'actions/views/create_comment';
|
||||
import {removeDraft} from 'actions/views/drafts';
|
||||
import {removeDraft, setGlobalDraftSource} from 'actions/views/drafts';
|
||||
import {setGlobalItem, actionOnGlobalItemsWithPrefix} from 'actions/storage';
|
||||
import * as PostActions from 'actions/post_actions';
|
||||
import {executeCommand} from 'actions/command';
|
||||
@@ -205,12 +205,13 @@ describe('rhs view actions', () => {
|
||||
|
||||
const testStore = mockStore(initialState);
|
||||
|
||||
testStore.dispatch(setGlobalItem(`${StoragePrefixes.COMMENT_DRAFT}${rootId}`, {
|
||||
const expectedKey = `${StoragePrefixes.COMMENT_DRAFT}${rootId}`;
|
||||
testStore.dispatch(setGlobalItem(expectedKey, {
|
||||
...draft,
|
||||
createAt: 42,
|
||||
updateAt: 42,
|
||||
remote: false,
|
||||
}));
|
||||
testStore.dispatch(setGlobalDraftSource(expectedKey, false));
|
||||
|
||||
expect(store.getActions()).toEqual(testStore.getActions());
|
||||
jest.useRealTimers();
|
||||
|
||||
@@ -13,7 +13,7 @@ import {getPreferenceKey} from 'mattermost-redux/utils/preference_utils';
|
||||
|
||||
import {Client4} from 'mattermost-redux/client';
|
||||
|
||||
import {removeDraft, updateDraft} from './drafts';
|
||||
import {removeDraft, setGlobalDraftSource, updateDraft} from './drafts';
|
||||
|
||||
jest.mock('mattermost-redux/client', () => {
|
||||
const original = jest.requireActual('mattermost-redux/client');
|
||||
@@ -146,12 +146,13 @@ describe('draft actions', () => {
|
||||
|
||||
const testStore = mockStore(initialState);
|
||||
|
||||
testStore.dispatch(setGlobalItem(StoragePrefixes.DRAFT + channelId, {
|
||||
const expectedKey = StoragePrefixes.DRAFT + channelId;
|
||||
testStore.dispatch(setGlobalItem(expectedKey, {
|
||||
...draft,
|
||||
createAt: 42,
|
||||
updateAt: 42,
|
||||
remote: false,
|
||||
}));
|
||||
testStore.dispatch(setGlobalDraftSource(expectedKey, false));
|
||||
|
||||
expect(store.getActions()).toEqual(testStore.getActions());
|
||||
jest.useRealTimers();
|
||||
|
||||
@@ -15,7 +15,7 @@ import {PostDraft} from 'types/store/draft';
|
||||
import {getGlobalItem} from 'selectors/storage';
|
||||
import {makeGetDrafts} from 'selectors/drafts';
|
||||
|
||||
import {StoragePrefixes} from 'utils/constants';
|
||||
import {ActionTypes, StoragePrefixes} from 'utils/constants';
|
||||
|
||||
import type {Draft as ServerDraft} from '@mattermost/types/drafts';
|
||||
import type {UserProfile} from '@mattermost/types/users';
|
||||
@@ -101,11 +101,10 @@ export function updateDraft(key: string, value: PostDraft|null, rootId = '', sav
|
||||
...value,
|
||||
createAt: data.createAt || timestamp,
|
||||
updateAt: timestamp,
|
||||
remote: false,
|
||||
};
|
||||
}
|
||||
|
||||
dispatch(setGlobalItem(key, updatedValue));
|
||||
dispatch(setGlobalDraft(key, updatedValue, false));
|
||||
|
||||
if (syncedDraftsAreAllowedAndEnabled(state) && save && updatedValue) {
|
||||
const connectionId = getConnectionId(state);
|
||||
@@ -153,6 +152,24 @@ export function setDraftsTourTipPreference(initializationState: Record<string, b
|
||||
};
|
||||
}
|
||||
|
||||
export function setGlobalDraft(key: string, value: PostDraft|null, isRemote: boolean) {
|
||||
return (dispatch: DispatchFunc) => {
|
||||
dispatch(setGlobalItem(key, value));
|
||||
dispatch(setGlobalDraftSource(key, isRemote));
|
||||
return {data: true};
|
||||
};
|
||||
}
|
||||
|
||||
export function setGlobalDraftSource(key: string, isRemote: boolean) {
|
||||
return {
|
||||
type: ActionTypes.SET_DRAFT_SOURCE,
|
||||
data: {
|
||||
key,
|
||||
isRemote,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export function transformServerDraft(draft: ServerDraft): Draft {
|
||||
let key: Draft['key'] = `${StoragePrefixes.DRAFT}${draft.channel_id}`;
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ import {
|
||||
} from 'mattermost-redux/actions/users';
|
||||
import {removeNotVisibleUsers} from 'mattermost-redux/actions/websocket';
|
||||
import {setGlobalItem} from 'actions/storage';
|
||||
import {transformServerDraft} from 'actions/views/drafts';
|
||||
import {setGlobalDraft, transformServerDraft} from 'actions/views/drafts';
|
||||
|
||||
import {Client4} from 'mattermost-redux/client';
|
||||
import {getCurrentUser, getCurrentUserId, getUser, getIsManualStatusForUserId, isCurrentUserSystemAdmin} from 'mattermost-redux/selectors/entities/users';
|
||||
@@ -89,7 +89,6 @@ import {getStandardAnalytics} from 'mattermost-redux/actions/admin';
|
||||
|
||||
import {fetchAppBindings, fetchRHSAppsBindings} from 'mattermost-redux/actions/apps';
|
||||
|
||||
import {getConnectionId} from 'selectors/general';
|
||||
import {getSelectedChannelId, getSelectedPost} from 'selectors/rhs';
|
||||
import {isThreadOpen, isThreadManuallyUnread} from 'selectors/views/threads';
|
||||
|
||||
@@ -1700,20 +1699,12 @@ function handlePostAcknowledgementRemoved(msg) {
|
||||
}
|
||||
|
||||
function handleUpsertDraftEvent(msg) {
|
||||
return async (doDispatch, doGetState) => {
|
||||
const state = doGetState();
|
||||
const connectionId = getConnectionId(state);
|
||||
|
||||
return async (doDispatch) => {
|
||||
const draft = JSON.parse(msg.data.draft);
|
||||
const {key, value} = transformServerDraft(draft);
|
||||
value.show = true;
|
||||
value.remote = false;
|
||||
|
||||
if (msg.broadcast.omit_connection_id !== connectionId) {
|
||||
value.remote = true;
|
||||
}
|
||||
|
||||
doDispatch(setGlobalItem(key, value));
|
||||
doDispatch(setGlobalDraft(key, value, true));
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1722,7 +1713,11 @@ function handleDeleteDraftEvent(msg) {
|
||||
const draft = JSON.parse(msg.data.draft);
|
||||
const {key} = transformServerDraft(draft);
|
||||
|
||||
doDispatch(setGlobalItem(key, {message: '', fileInfos: [], uploadsInProgress: [], remote: true}));
|
||||
doDispatch(setGlobalItem(key, {
|
||||
message: '',
|
||||
fileInfos: [],
|
||||
uploadsInProgress: [],
|
||||
}));
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@ describe('components/AdvancedCreateComment', () => {
|
||||
uploadsInProgress: [{}],
|
||||
fileInfos: [{}, {}, {}],
|
||||
},
|
||||
isRemoteDraft: false,
|
||||
enableAddButton: true,
|
||||
ctrlSend: false,
|
||||
latestPostId,
|
||||
@@ -84,9 +85,10 @@ describe('components/AdvancedCreateComment', () => {
|
||||
|
||||
test('should match snapshot, empty comment', () => {
|
||||
const draft = emptyDraft;
|
||||
const isRemoteDraft = false;
|
||||
const enableAddButton = false;
|
||||
const ctrlSend = true;
|
||||
const props = {...baseProps, draft, enableAddButton, ctrlSend};
|
||||
const props = {...baseProps, draft, isRemoteDraft, enableAddButton, ctrlSend};
|
||||
|
||||
const wrapper = shallow(
|
||||
<AdvancedCreateComment {...props}/>,
|
||||
@@ -104,8 +106,9 @@ describe('components/AdvancedCreateComment', () => {
|
||||
uploadsInProgress: [],
|
||||
fileInfos: [],
|
||||
};
|
||||
const isRemoteDraft = false;
|
||||
const ctrlSend = true;
|
||||
const props = {...baseProps, ctrlSend, draft, clearCommentDraftUploads, onResetHistoryIndex, getChannelMemberCountsByGroup};
|
||||
const props = {...baseProps, ctrlSend, draft, isRemoteDraft, clearCommentDraftUploads, onResetHistoryIndex, getChannelMemberCountsByGroup};
|
||||
|
||||
const wrapper = shallow(
|
||||
<AdvancedCreateComment {...props}/>,
|
||||
|
||||
@@ -74,6 +74,9 @@ type Props = {
|
||||
// The current draft of the comment
|
||||
draft: PostDraft;
|
||||
|
||||
// Data used for knowing if the draft came from a WS event
|
||||
isRemoteDraft: boolean;
|
||||
|
||||
// Determines if the submit button should be rendered
|
||||
enableAddButton?: boolean;
|
||||
|
||||
@@ -233,8 +236,14 @@ class AdvancedCreateComment extends React.PureComponent<Props, State> {
|
||||
|
||||
const rootChanged = props.rootId !== state.rootId;
|
||||
const messageInHistoryChanged = props.messageInHistory !== state.messageInHistory;
|
||||
if (rootChanged || messageInHistoryChanged || props.draft.remote) {
|
||||
updatedState = {...updatedState, draft: {...props.draft, uploadsInProgress: rootChanged ? [] : props.draft.uploadsInProgress}};
|
||||
if (rootChanged || messageInHistoryChanged || (props.isRemoteDraft && props.draft.message !== state.draft?.message)) {
|
||||
updatedState = {
|
||||
...updatedState,
|
||||
draft: {
|
||||
...props.draft,
|
||||
uploadsInProgress: rootChanged ? [] : props.draft.uploadsInProgress,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
return updatedState;
|
||||
@@ -252,6 +261,7 @@ class AdvancedCreateComment extends React.PureComponent<Props, State> {
|
||||
serverError: null,
|
||||
showFormat: false,
|
||||
isFormattingBarHidden: props.isFormattingBarHidden,
|
||||
caretPosition: props.draft.caretPosition,
|
||||
};
|
||||
|
||||
this.textboxRef = React.createRef();
|
||||
@@ -343,7 +353,6 @@ class AdvancedCreateComment extends React.PureComponent<Props, State> {
|
||||
const updatedDraft = {
|
||||
...this.state.draft,
|
||||
show: !isDraftEmpty(this.state.draft),
|
||||
remote: false,
|
||||
} as PostDraft;
|
||||
|
||||
this.props.onUpdateCommentDraft(updatedDraft, true);
|
||||
@@ -356,7 +365,6 @@ class AdvancedCreateComment extends React.PureComponent<Props, State> {
|
||||
draft: {
|
||||
...prev.draft,
|
||||
show: !isDraftEmpty(prev.draft),
|
||||
remote: false,
|
||||
} as PostDraft,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -64,6 +64,7 @@ function makeMapStateToProps() {
|
||||
const err = state.requests.posts.createPost.error || {};
|
||||
|
||||
const draft = getPostDraft(state, StoragePrefixes.COMMENT_DRAFT, ownProps.rootId);
|
||||
const isRemoteDraft = state.views.drafts.remotes[`${StoragePrefixes.COMMENT_DRAFT}${ownProps.rootId}`] || false;
|
||||
|
||||
const channelMembersCount = getAllChannelStats(state)[ownProps.channelId] ? getAllChannelStats(state)[ownProps.channelId].member_count : 1;
|
||||
const messageInHistory = getMessageInHistoryItem(state);
|
||||
@@ -91,6 +92,7 @@ function makeMapStateToProps() {
|
||||
return {
|
||||
currentTeamId,
|
||||
draft,
|
||||
isRemoteDraft,
|
||||
messageInHistory,
|
||||
channelMembersCount,
|
||||
currentUserId,
|
||||
@@ -121,11 +123,11 @@ function makeMapStateToProps() {
|
||||
}
|
||||
|
||||
function makeOnUpdateCommentDraft(rootId: string, channelId: string) {
|
||||
return (draft?: PostDraft, save = false) => updateCommentDraft(rootId, draft ? {...draft, channelId, remote: false} : draft, save);
|
||||
return (draft?: PostDraft, save = false) => updateCommentDraft(rootId, draft ? {...draft, channelId} : draft, save);
|
||||
}
|
||||
|
||||
function makeUpdateCommentDraftWithRootId(channelId: string) {
|
||||
return (rootId: string, draft?: PostDraft, save = false) => updateCommentDraft(rootId, draft ? {...draft, channelId, remote: false} : draft, save);
|
||||
return (rootId: string, draft?: PostDraft, save = false) => updateCommentDraft(rootId, draft ? {...draft, channelId} : draft, save);
|
||||
}
|
||||
|
||||
type Actions = {
|
||||
|
||||
@@ -115,6 +115,7 @@ function advancedCreatePost({
|
||||
fullWidthTextBox={fullWidthTextBox}
|
||||
currentChannelMembersCount={currentChannelMembersCount}
|
||||
draft={draft}
|
||||
isRemoteDraft={false}
|
||||
recentPostIdInChannel={recentPostIdInChannel}
|
||||
latestReplyablePostId={latestReplyablePostId}
|
||||
locale={locale}
|
||||
|
||||
@@ -124,6 +124,9 @@ type Props = {
|
||||
// Data used for populating message state from previous draft
|
||||
draft: PostDraft;
|
||||
|
||||
// Data used for knowing if the draft came from a WS event
|
||||
isRemoteDraft: boolean;
|
||||
|
||||
// Data used dispatching handleViewAction ex: edit post
|
||||
latestReplyablePostId?: string;
|
||||
locale: string;
|
||||
@@ -279,7 +282,7 @@ class AdvancedCreatePost extends React.PureComponent<Props, State> {
|
||||
};
|
||||
if (
|
||||
props.currentChannel.id !== state.currentChannel.id ||
|
||||
(props.draft.remote && props.draft.message !== state.message)
|
||||
(props.isRemoteDraft && props.draft.message !== state.message)
|
||||
) {
|
||||
updatedState = {
|
||||
...updatedState,
|
||||
@@ -294,8 +297,8 @@ class AdvancedCreatePost extends React.PureComponent<Props, State> {
|
||||
constructor(props: Props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
message: this.props.draft.message,
|
||||
caretPosition: this.props.draft.message.length,
|
||||
message: props.draft.message,
|
||||
caretPosition: props.draft.message.length,
|
||||
submitting: false,
|
||||
showEmojiPicker: false,
|
||||
uploadsProgressPercent: {},
|
||||
@@ -387,7 +390,6 @@ class AdvancedCreatePost extends React.PureComponent<Props, State> {
|
||||
this.draftsForChannel[channelId] = {
|
||||
...draft,
|
||||
show: !isDraftEmpty(draft),
|
||||
remote: false,
|
||||
} as PostDraft;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,6 +77,7 @@ function makeMapStateToProps() {
|
||||
const currentChannel = getCurrentChannel(state) || {};
|
||||
const currentChannelTeammateUsername = getUser(state, currentChannel.teammate_id || '')?.username;
|
||||
const draft = getChannelDraft(state, currentChannel.id);
|
||||
const isRemoteDraft = state.views.drafts.remotes[`${StoragePrefixes.DRAFT}${currentChannel.id}`] || false;
|
||||
const latestReplyablePostId = getLatestReplyablePostId(state);
|
||||
const currentChannelMembersCount = getCurrentChannelStats(state) ? getCurrentChannelStats(state).member_count : 1;
|
||||
const enableEmojiPicker = config.EnableEmojiPicker === 'true';
|
||||
@@ -117,6 +118,7 @@ function makeMapStateToProps() {
|
||||
showSendTutorialTip,
|
||||
messageInHistoryItem: getMessageInHistoryItem(state),
|
||||
draft,
|
||||
isRemoteDraft,
|
||||
latestReplyablePostId,
|
||||
locale: getCurrentLocale(state),
|
||||
currentUsersLatestPost: getCurrentUsersLatestPost(state, ''),
|
||||
@@ -181,12 +183,7 @@ function setDraft(key: string, value: PostDraft, draftChannelId: string, save =
|
||||
const channelId = draftChannelId || getCurrentChannelId(getState());
|
||||
let updatedValue = null;
|
||||
if (value) {
|
||||
updatedValue = {...value};
|
||||
updatedValue = {
|
||||
...value,
|
||||
channelId,
|
||||
remote: false,
|
||||
};
|
||||
updatedValue = {...value, channelId};
|
||||
}
|
||||
if (updatedValue) {
|
||||
return dispatch(updateDraft(key, updatedValue, '', save));
|
||||
|
||||
@@ -39,6 +39,7 @@ exports[`components/drafts/drafts_row should match snapshot for channel draft 1`
|
||||
"type": "channel",
|
||||
}
|
||||
}
|
||||
isRemote={false}
|
||||
status={Object {}}
|
||||
user={Object {}}
|
||||
/>
|
||||
@@ -84,6 +85,7 @@ exports[`components/drafts/drafts_row should match snapshot for thread draft 1`]
|
||||
"type": "thread",
|
||||
}
|
||||
}
|
||||
isRemote={false}
|
||||
status={Object {}}
|
||||
user={Object {}}
|
||||
/>
|
||||
|
||||
@@ -34,6 +34,7 @@ exports[`components/drafts/drafts should match snapshot 1`] = `
|
||||
>
|
||||
<Memo(Drafts)
|
||||
displayName="display_name"
|
||||
draftRemotes={Object {}}
|
||||
drafts={Array []}
|
||||
localDraftsAreEnabled={true}
|
||||
status={Object {}}
|
||||
@@ -76,6 +77,7 @@ exports[`components/drafts/drafts should match snapshot for local drafts disable
|
||||
>
|
||||
<Memo(Drafts)
|
||||
displayName="display_name"
|
||||
draftRemotes={Object {}}
|
||||
drafts={Array []}
|
||||
localDraftsAreEnabled={false}
|
||||
status={Object {}}
|
||||
|
||||
@@ -42,6 +42,7 @@ exports[`components/drafts/drafts_row should match snapshot for channel draft 1`
|
||||
displayName=""
|
||||
draftId=""
|
||||
id={Object {}}
|
||||
isRemote={false}
|
||||
status={Object {}}
|
||||
type="channel"
|
||||
user={Object {}}
|
||||
@@ -88,6 +89,7 @@ exports[`components/drafts/drafts_row should match snapshot for undefined channe
|
||||
displayName=""
|
||||
draftId=""
|
||||
id={Object {}}
|
||||
isRemote={false}
|
||||
status={Object {}}
|
||||
type="channel"
|
||||
user={Object {}}
|
||||
|
||||
@@ -26,6 +26,7 @@ describe('components/drafts/drafts_row', () => {
|
||||
type: 'channel' as 'channel' | 'thread',
|
||||
user: {} as UserProfile,
|
||||
value: {} as PostDraft,
|
||||
isRemote: false,
|
||||
};
|
||||
|
||||
it('should match snapshot for channel draft', () => {
|
||||
|
||||
@@ -29,6 +29,7 @@ type Props = {
|
||||
type: 'channel' | 'thread';
|
||||
user: UserProfile;
|
||||
value: PostDraft;
|
||||
isRemote: boolean;
|
||||
}
|
||||
|
||||
function ChannelDraft({
|
||||
@@ -40,6 +41,7 @@ function ChannelDraft({
|
||||
type,
|
||||
user,
|
||||
value,
|
||||
isRemote,
|
||||
}: Props) {
|
||||
const dispatch = useDispatch();
|
||||
const history = useHistory();
|
||||
@@ -101,7 +103,7 @@ function ChannelDraft({
|
||||
/>
|
||||
)}
|
||||
timestamp={value.updateAt}
|
||||
remote={value.remote || false}
|
||||
remote={isRemote || false}
|
||||
/>
|
||||
<PanelBody
|
||||
channelId={channel.id}
|
||||
|
||||
@@ -21,6 +21,7 @@ describe('components/drafts/drafts_row', () => {
|
||||
user: {} as UserProfile,
|
||||
status: {} as UserStatus['status'],
|
||||
displayName: 'test',
|
||||
isRemote: false,
|
||||
};
|
||||
|
||||
it('should match snapshot for channel draft', () => {
|
||||
|
||||
@@ -14,9 +14,10 @@ type Props = {
|
||||
status: UserStatus['status'];
|
||||
displayName: string;
|
||||
draft: Draft;
|
||||
isRemote: boolean;
|
||||
}
|
||||
|
||||
function DraftRow({draft, user, status, displayName}: Props) {
|
||||
function DraftRow({draft, user, status, displayName, isRemote}: Props) {
|
||||
switch (draft.type) {
|
||||
case 'channel':
|
||||
return (
|
||||
@@ -26,6 +27,7 @@ function DraftRow({draft, user, status, displayName}: Props) {
|
||||
user={user}
|
||||
status={status}
|
||||
displayName={displayName}
|
||||
isRemote={isRemote}
|
||||
/>
|
||||
);
|
||||
case 'thread':
|
||||
@@ -37,6 +39,7 @@ function DraftRow({draft, user, status, displayName}: Props) {
|
||||
user={user}
|
||||
status={status}
|
||||
displayName={displayName}
|
||||
isRemote={isRemote}
|
||||
/>
|
||||
);
|
||||
default:
|
||||
|
||||
@@ -20,6 +20,7 @@ describe('components/drafts/drafts', () => {
|
||||
displayName: 'display_name',
|
||||
status: {} as UserStatus['status'],
|
||||
localDraftsAreEnabled: true,
|
||||
draftRemotes: {},
|
||||
};
|
||||
|
||||
it('should match snapshot', () => {
|
||||
|
||||
@@ -27,11 +27,13 @@ type Props = {
|
||||
displayName: string;
|
||||
status: UserStatus['status'];
|
||||
localDraftsAreEnabled: boolean;
|
||||
draftRemotes: Record<string, boolean>;
|
||||
}
|
||||
|
||||
function Drafts({
|
||||
displayName,
|
||||
drafts,
|
||||
draftRemotes,
|
||||
status,
|
||||
user,
|
||||
localDraftsAreEnabled,
|
||||
@@ -75,6 +77,7 @@ function Drafts({
|
||||
key={d.key}
|
||||
displayName={displayName}
|
||||
draft={d}
|
||||
isRemote={draftRemotes[d.key]}
|
||||
user={user}
|
||||
status={status}
|
||||
/>
|
||||
|
||||
@@ -22,6 +22,7 @@ function makeMapStateToProps() {
|
||||
return {
|
||||
displayName: displayUsername(user, getTeammateNameDisplaySetting(state)),
|
||||
drafts: getDrafts(state),
|
||||
draftRemotes: state.views.drafts.remotes,
|
||||
status,
|
||||
user,
|
||||
localDraftsAreEnabled: localDraftsAreEnabled(state),
|
||||
|
||||
@@ -42,6 +42,7 @@ exports[`components/drafts/drafts_row should match snapshot for channel draft 1`
|
||||
displayName=""
|
||||
draftId=""
|
||||
id={Object {}}
|
||||
isRemote={false}
|
||||
rootId=""
|
||||
status={Object {}}
|
||||
thread={
|
||||
@@ -98,6 +99,7 @@ exports[`components/drafts/drafts_row should match snapshot for undefined thread
|
||||
displayName=""
|
||||
draftId=""
|
||||
id={Object {}}
|
||||
isRemote={false}
|
||||
rootId=""
|
||||
status={Object {}}
|
||||
thread={null}
|
||||
|
||||
@@ -31,6 +31,7 @@ describe('components/drafts/drafts_row', () => {
|
||||
type: 'thread' as 'channel' | 'thread',
|
||||
user: {} as UserProfile,
|
||||
value: {} as PostDraft,
|
||||
isRemote: false,
|
||||
};
|
||||
|
||||
it('should match snapshot for channel draft', () => {
|
||||
|
||||
@@ -33,6 +33,7 @@ type Props = {
|
||||
type: 'channel' | 'thread';
|
||||
user: UserProfile;
|
||||
value: PostDraft;
|
||||
isRemote: boolean;
|
||||
}
|
||||
|
||||
function ThreadDraft({
|
||||
@@ -45,6 +46,7 @@ function ThreadDraft({
|
||||
type,
|
||||
user,
|
||||
value,
|
||||
isRemote,
|
||||
}: Props) {
|
||||
const dispatch = useDispatch();
|
||||
|
||||
@@ -107,7 +109,7 @@ function ThreadDraft({
|
||||
/>
|
||||
)}
|
||||
timestamp={value.updateAt}
|
||||
remote={value.remote || false}
|
||||
remote={isRemote || false}
|
||||
/>
|
||||
<PanelBody
|
||||
channelId={channel.id}
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
{
|
||||
"FIFTY_TO_100": "51-100",
|
||||
"FIVE_HUNDRED_TO_1000": "501-1000",
|
||||
"ONE_HUNDRED_TO_500": "101-500",
|
||||
"ONE_THOUSAND_TO_2500": "1001-2500",
|
||||
"ONE_TO_50": "1-50",
|
||||
"TWO_THOUSAND_FIVE_HUNDRED_AND_UP": "2501-5000",
|
||||
"about.buildnumber": "Build-Nummer:",
|
||||
"about.cloudEdition": "Cloud",
|
||||
"about.copyright": "Copyright 2015 - {currentYear} Mattermost, Inc. Alle Rechte vorbehalten",
|
||||
@@ -304,6 +310,9 @@
|
||||
"admin.billing.subscription.cancelSubscriptionSection.description": "Zurzeit ist das Löschen eines Workspaces nur mit der Hilfe eines Supportmitarbeiters möglich.",
|
||||
"admin.billing.subscription.cancelSubscriptionSection.title": "Dein Abonnement kündigen",
|
||||
"admin.billing.subscription.cloudMonthlyBadge": "Monatlich",
|
||||
"admin.billing.subscription.cloudReverseTrial.daysLeftOnTrial": "{daysLeftOnTrial} Tage verbleibende Testzeit. Erwirb einen Plan oder kontaktiere den Vertrieb, um deinen Arbeitsbereich zu behalten.",
|
||||
"admin.billing.subscription.cloudReverseTrial.lastDay": "Dies ist der letzte Tag deiner Testphase. Kaufe einen Plan vor {userEndTrialHour} oder kontaktiere den Vertrieb",
|
||||
"admin.billing.subscription.cloudReverseTrial.subscribeButton": "Prüfe deine Optionen",
|
||||
"admin.billing.subscription.cloudTrial.daysLeftOnTrial": "Es verbleiben noch {daysLeftOnTrial} Tage für deine kostenlose Testversion",
|
||||
"admin.billing.subscription.cloudTrial.lastDay": "Dies ist der letzte Tag deiner kostenlosen Testversion. Dein Zugang wird am {userEndTrialDate} um {userEndTrialHour} ablaufen.",
|
||||
"admin.billing.subscription.cloudTrial.moreThan3Days": "Deine kostenlose Testphase hat begonnen! Es sind noch {daysLeftOnTrial} übrig",
|
||||
@@ -3034,10 +3043,16 @@
|
||||
"cloud.startTrial.modal.btn": "Starte Test",
|
||||
"cloud_archived.error.access": "Der Permalink gehört zu einer Nachricht, die aufgrund der Beschränkungen von {planName} archiviert wurde. Aktualisiere um erneut auf die Nachricht zuzugreifen.",
|
||||
"cloud_archived.error.title": "Nachricht archiviert",
|
||||
"cloud_billing.nudge_to_paid.contact_sales": "Vertrieb kontaktieren",
|
||||
"cloud_billing.nudge_to_paid.description": "Cloud Free wird in {days} Tagen ablaufen. Steige auf einen kostenpflichtigen Plan um oder kontaktiere den Vertrieb.",
|
||||
"cloud_billing.nudge_to_paid.learn_more": "Aktualisierung",
|
||||
"cloud_billing.nudge_to_paid.title": "Upgrade auf einen kostenpflichtigen Plan, um deinen Arbeitsbereich zu behalten",
|
||||
"cloud_billing.nudge_to_paid.view_plans": "Zeige Pläne",
|
||||
"cloud_billing.nudge_to_yearly.announcement_bar": "Die monatliche Abrechnung wird in {days} Tagen eingestellt. Umstellung auf jährliche Abrechnung",
|
||||
"cloud_billing.nudge_to_yearly.contact_sales": "Vertrieb kontaktieren",
|
||||
"cloud_billing.nudge_to_yearly.description": "Vereinfache deine Abrechnung, indem du zu einem Jahresabonnement wechselst.",
|
||||
"cloud_billing.nudge_to_yearly.description": "Die monatliche Abrechnung wird zum {date} eingestellt. Um deinen Arbeitsbereich zu behalten, wechsele zur jährlichen Abrechnung.",
|
||||
"cloud_billing.nudge_to_yearly.learn_more": "Mehr erfahren",
|
||||
"cloud_billing.nudge_to_yearly.title": "Wechsele noch heute zu einem Jahresplan",
|
||||
"cloud_billing.nudge_to_yearly.title": "Maßnahme erforderlich: Wechsele zur jährlichen Abrechnung, um deinen Arbeitsbereich zu behalten.",
|
||||
"cloud_billing_history_modal.title": "Rechnung(en)",
|
||||
"cloud_delinquency.banner.buttonText": "Rechnung jetzt aktualisieren",
|
||||
"cloud_delinquency.banner.end_user_notify_admin_button": "Admin benachrichtigen",
|
||||
@@ -3063,6 +3078,7 @@
|
||||
"cloud_delinquency.post_downgrade_banner.title": "Aktualisiere jetzt deine Rechnungsdaten, um bezahlte Funktionen wieder zu aktivieren.",
|
||||
"cloud_signup.signup_consequences": "Deine Kreditkarte wird noch heute belastet. <a>Sieh, wie die Abrechnung funktioniert.</a>",
|
||||
"cloud_subscribe.contact_support": "Pläne vergleichen",
|
||||
"cloud_upgrade.error_min_seats": "Mindestanzahl von 10 Sitzen erforderlich",
|
||||
"collapsed_reply_threads_modal.confirm": "Verstanden",
|
||||
"collapsed_reply_threads_modal.description": "Nachrichtenverläufe sind überarbeitet worden, um dich dabei zu unterstützen eine übersichtliche Diskussion rund um bestimmte Nachrichten zu erstellen. Dadurch werden Kanäle übersichtlicher, da alle Antworten unter der Ursprungsnachricht zusammengefasst werden, und alle Diskussionen, denen du folgst unter **Unterhaltungen** angezeigt werden. Folge der Tour um zu sehen, was neu ist.",
|
||||
"collapsed_reply_threads_modal.skip_tour": "Tour überspringen",
|
||||
@@ -4254,9 +4270,9 @@
|
||||
"navbar_dropdown.viewMembers": "Zeige Mitglieder",
|
||||
"newChannelWithBoard.tutorialTip.description": "Auf das soeben erstellte Board kannst du schnell zugreifen, indem du auf das Symbol Boards in der App-Leiste klickst. Du kannst die Boards, die mit diesem Kanal verknüpft sind, in der rechten Seitenleiste anzeigen und eines in der Vollansicht öffnen.",
|
||||
"newChannelWithBoard.tutorialTip.title": "Zugriff auf verknüpfte Boards über die App-Leiste",
|
||||
"newsletter_optin.checkmark.text": "Ich möchte die Sicherheitsupdates von Mattermost per Newsletter erhalten. <a> Es gelten die Allgemeinen Geschäftsbedingungen und Datenschutzrichtlinien</a>",
|
||||
"newsletter_optin.checkmark.text": "<span>Ich möchte die Sicherheitsupdates von Mattermost per Newsletter erhalten.</span> Mit der Anmeldung erkläre ich mich damit einverstanden, E-Mails von Mattermost mit Produktaktualisierungen, Werbeaktionen und Unternehmensnachrichten zu erhalten. Ich habe die <a>Datenschutzrichtlinie</a> gelesen und verstehe, dass ich <aa>jederzeit abbestellen</aa> kann",
|
||||
"newsletter_optin.desc": "Melde dich unter <a>{link}</a> an.",
|
||||
"newsletter_optin.title": "Bist du daran interessiert, Mattermost-Sicherheitsupdates per Newsletter zu erhalten?",
|
||||
"newsletter_optin.title": "Bist du daran interessiert, per Newsletter über Sicherheits-, Produkt-, Werbe- und Unternehmens-Updates von Mattermost informiert zu werden?",
|
||||
"next_steps_view.welcomeToMattermost": "Willkommen bei Mattermost",
|
||||
"no_results.channel_files.subtitle": "Dateien, die in diesem Kanal gepostet wurden, werden hier angezeigt.",
|
||||
"no_results.channel_files.title": "Noch keine Dateien",
|
||||
@@ -4548,23 +4564,29 @@
|
||||
"pricing_modal.briefing.ssoWithGitLab": "SSO mit Gitlab",
|
||||
"pricing_modal.briefing.storageStarter": "{storage} Dateispeicherlimit",
|
||||
"pricing_modal.briefing.title": "Top Funktionen",
|
||||
"pricing_modal.briefing.title_large_scale": "Zusammenarbeit im großen Maßstab",
|
||||
"pricing_modal.briefing.title_no_limit": "Keine Einschränkungen für die Nutzung durch dein Team",
|
||||
"pricing_modal.briefing.unlimitedPlaybookRuns": "Unbeschränkte Playbooks und Durchläufe",
|
||||
"pricing_modal.briefing.unlimitedWorkspaceTeams": "Unbeschränkte Teams",
|
||||
"pricing_modal.btn.contactSales": "Verkaufsteam kontaktieren",
|
||||
"pricing_modal.btn.contactSalesForQuote": "Kontaktiere den Vertrieb",
|
||||
"pricing_modal.btn.contactSupport": "Support kontaktieren",
|
||||
"pricing_modal.btn.downgrade": "Runterstufen",
|
||||
"pricing_modal.btn.purchase": "Kaufen",
|
||||
"pricing_modal.btn.switch_to_annual": "Wechsel auf jährliche Abrechnung",
|
||||
"pricing_modal.btn.tooltip": "Nur sichtbar für System Admins",
|
||||
"pricing_modal.btn.tryDays": "Teste kostenfrei für {days} Tage",
|
||||
"pricing_modal.btn.upgrade": "Upgrade",
|
||||
"pricing_modal.btn.viewPlans": "Zeige Pläne",
|
||||
"pricing_modal.contact_us": "Kontaktiere uns",
|
||||
"pricing_modal.extra_briefing.cloud.free.calls": "Gruppenanrufe mit bis zu 8 Personen, 1:1-Anrufe und Bildschirmfreigabe",
|
||||
"pricing_modal.extra_briefing.enterprise.playBookAnalytics": "Playbooks Analyse Dashboard",
|
||||
"pricing_modal.extra_briefing.free.calls": "Sprachanrufe und Bildschirmfreigabe",
|
||||
"pricing_modal.extra_briefing.professional.guestAccess": "Gastzugriff mit MFA Zwang",
|
||||
"pricing_modal.extra_briefing.professional.ssoSaml": "SSO mit SAML 2.0, inklusive Okta, OneLogin und ADFS",
|
||||
"pricing_modal.extra_briefing.professional.ssoadLdap": "SSO Unterstützung mit AD/LDAP, Google, O365, OpenID",
|
||||
"pricing_modal.interested_self_hosting": "Interessiert an Selbst-Hosting?",
|
||||
"pricing_modal.learn_more": "Erfahre mehr",
|
||||
"pricing_modal.lookingForCloudOption": "Suchst du eine Cloud Lösung?",
|
||||
"pricing_modal.lookingToSelfHost": "Möchtest du selbst hosten?",
|
||||
"pricing_modal.noitfy_cta.request": "Administrator zum Upgrade auffordern",
|
||||
@@ -4576,10 +4598,12 @@
|
||||
"pricing_modal.planLabel.mostPopular": "POPULÄR",
|
||||
"pricing_modal.planSummary.enterprise": "Verwaltung, Sicherheit und Compliance für große Teams",
|
||||
"pricing_modal.planSummary.free": "Erhöhte Produktivität für kleine Teams",
|
||||
"pricing_modal.planSummary.professional": "Skalierbare Lösungen für wachsende Teams",
|
||||
"pricing_modal.planSummary.professional": "Skalierbare Lösungen {br} für wachsende Teams",
|
||||
"pricing_modal.plan_label_trialDays": "{days} TAGE, DIE IM TEST VERBLEIBEN",
|
||||
"pricing_modal.price.freeForever": "Kostenlos für immer",
|
||||
"pricing_modal.questions": "Fragen?",
|
||||
"pricing_modal.rate.seatPerMonth": "USD pro Sitz/Monat {br}<b>(jährliche Abrechnung)</b>",
|
||||
"pricing_modal.reach_out": "Setze dich mit uns in Verbindung und wir helfen dir bei der Entscheidung, welcher Plan für dich und dein Unternehmen der richtige ist.",
|
||||
"pricing_modal.reviewDeploymentOptions": "Prüfe deine Bereitstellungsoptionen",
|
||||
"pricing_modal.start_trial.disclaimer": "Durch Auswahl von <span>30 Tage lang kostenlos testen,</span> stimme ich dem <linkAgreement>Mattermost Software und Services License Agreement</linkAgreement>, <linkPrivacy>der Datenschutz-Richtlinie</linkPrivacy> und dem Erhalt von Produkt-E-Mails zu.",
|
||||
"pricing_modal.subtitle": "Wähle einen Plan um loszulegen",
|
||||
@@ -5627,7 +5651,10 @@
|
||||
"user_groups_modal.viewGroup": "Gruppe anzeigen",
|
||||
"user_list.notFound": "Keine Benutzer gefunden",
|
||||
"user_profile.account.editProfile": "Profil bearbeiten",
|
||||
"user_profile.account.hoursAhead": "({timeOffset} voraus)",
|
||||
"user_profile.account.hoursBehind": "({timeOffset} zurück)",
|
||||
"user_profile.account.localTime": "Ortszeit",
|
||||
"user_profile.account.localTimeWithTimezone": "Ortszeit ({timezone})",
|
||||
"user_profile.account.post_was_created": "Dieser Beitrag wurde erstellt durch eine Integration von",
|
||||
"user_profile.add_user_to_channel": "Einem Kanal hinzufügen",
|
||||
"user_profile.add_user_to_channel.icon": "Benutzer zu Kanal-Symbol hinzufügen",
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
"about.database": "데이터베이스:",
|
||||
"about.date": "빌드 날짜:",
|
||||
"about.dbversion": "데이터베이스 스키마 버전:",
|
||||
"about.enterpriseEditionLearn": "엔터프라이즈 에디션에 대한 자세한 정보 ",
|
||||
"about.enterpriseEditionLearn": "다음에서 Enterprise Edition에 대해 더 알아보기 ",
|
||||
"about.enterpriseEditionSst": "엔터프라이즈에 적합한 신뢰도 높은 메시징",
|
||||
"about.enterpriseEditionSt": "보안 네트워크에 구축하는 현대적인 커뮤니케이션 플랫폼.",
|
||||
"about.enterpriseEditione1": "엔터프라이즈 에디션",
|
||||
"about.enterpriseEditione1": "Enterprise Edition",
|
||||
"about.hash": "빌드 해쉬:",
|
||||
"about.hashee": "EE 빌드 해쉬:",
|
||||
"about.licensed": "다음 사용자에게 허가되었습니다:",
|
||||
@@ -254,6 +254,13 @@
|
||||
"admin.billing.company_info_edit.sameAsBillingAddress": "결제 주소와 동일",
|
||||
"admin.billing.company_info_edit.save": "정보 저장",
|
||||
"admin.billing.company_info_edit.title": "회사 정보 수정",
|
||||
"admin.billing.deleteWorkspace.failureModal.buttonText": "다시 시도하세요",
|
||||
"admin.billing.deleteWorkspace.failureModal.subtitle": "워크스페이스 삭제중에 문제가 발생했습니다. 다시 시도하거나 지원팀에 문의하세요.",
|
||||
"admin.billing.deleteWorkspace.failureModal.title": "워크스페이스 삭제에 실패했습니다",
|
||||
"admin.billing.deleteWorkspace.progressModal.title": "워크스페이스를 삭제합니다",
|
||||
"admin.billing.deleteWorkspace.resultModal.ContactSupport": "지원팀에 문의",
|
||||
"admin.billing.deleteWorkspace.successModal.subtitle": "워크스페이스가 삭제되었습니다. 고객이 되어 주셔서 감사했습니다.",
|
||||
"admin.billing.deleteWorkspace.successModal.title": "워크스페이스가 삭제되었습니다",
|
||||
"admin.billing.history.allPaymentsShowHere": "모든 월별 결제 금액이 여기에 표시됩니다",
|
||||
"admin.billing.history.date": "날짜",
|
||||
"admin.billing.history.description": "설명",
|
||||
@@ -288,16 +295,21 @@
|
||||
"admin.billing.purchaseModal.savedPaymentDetailsTitle": "저장된 결제 세부정보",
|
||||
"admin.billing.subscription.LearnMore": "더 보기",
|
||||
"admin.billing.subscription.billedFrom": "청구일: {beginDate}",
|
||||
"admin.billing.subscription.byClickingYouAgree": "{buttonContent}을(를) 클릭하면 <linkAgreement>{legalText}</linkAgreement>에 동의하게 됩니다",
|
||||
"admin.billing.subscription.cancelSubscriptionSection.contactUs": "문의",
|
||||
"admin.billing.subscription.cancelSubscriptionSection.description": "현재, 작업 공간 삭제는 고객 지원 담당자의 도움이 있어야만 가능합니다.",
|
||||
"admin.billing.subscription.cancelSubscriptionSection.description": "현재, 워크스페이스 삭제는 고객 지원 담당자의 도움이 있어야만 가능합니다.",
|
||||
"admin.billing.subscription.cancelSubscriptionSection.title": "구독 취소",
|
||||
"admin.billing.subscription.cloudMonthlyBadge": "월간",
|
||||
"admin.billing.subscription.cloudReverseTrial.daysLeftOnTrial": "평가 기간이 {daysLeftOnTrial}일 남았습니다. 워크스페이스를 유지하려면 플랜을 구매하거나 영업팀에 연락하세요.",
|
||||
"admin.billing.subscription.cloudReverseTrial.lastDay": "평가기간 마지막 날입니다. {userEndTrialHour} 전에 플랜을 구매하거나 영업팀에 문의하세요",
|
||||
"admin.billing.subscription.cloudReverseTrial.subscribeButton": "옵션을 검토하세요",
|
||||
"admin.billing.subscription.cloudTrial.daysLeftOnTrial": "무료 체험이 {daysLeftOnTrial} 일 남았습니다",
|
||||
"admin.billing.subscription.cloudTrial.lastDay": "무료 평가판의 마지막 날입니다. 귀하의 액세스는 {userEndTrialDate} {userEndTrialHour}에 만료됩니다.",
|
||||
"admin.billing.subscription.cloudTrial.moreThan3Days": "무료 체험이 시작되었습니다! 무료 체험 기간이 {daysLeftOnTrial}일 남았습니다",
|
||||
"admin.billing.subscription.cloudTrial.subscribeButton": "지금 구독하기",
|
||||
"admin.billing.subscription.cloudTrialBadge.daysLeftOnTrial": "평가판 사용 기간이 {daysLeftOnTrial}일 남았습니다",
|
||||
"admin.billing.subscription.cloudYearlyBadge": "연간",
|
||||
"admin.billing.subscription.complianceScreenFailed.button": "Cloud Free로 계속합니다",
|
||||
"admin.billing.subscription.constCloudCard.contactSupport": "지원 담당자에게 연락",
|
||||
"admin.billing.subscription.creditCardExpired": "신용 카드가 만료되었습니다. 원할한 서비스 제공을 위해 결제 정보를 업데이트하세요.",
|
||||
"admin.billing.subscription.creditCardHasExpired": "신용 카드가 만료되었습니다",
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
{
|
||||
"FIFTY_TO_100": "51-100",
|
||||
"FIVE_HUNDRED_TO_1000": "501-1000",
|
||||
"ONE_HUNDRED_TO_500": "101-500",
|
||||
"ONE_THOUSAND_TO_2500": "1001-2500",
|
||||
"ONE_TO_50": "1-50",
|
||||
"TWO_THOUSAND_FIVE_HUNDRED_AND_UP": "2501-5000",
|
||||
"about.buildnumber": "Compilatienummer:",
|
||||
"about.cloudEdition": "Cloud",
|
||||
"about.copyright": "Copyright 2015 - {currentYear} Mattermost, Inc. Alle rechten voorbehouden",
|
||||
@@ -4024,7 +4030,7 @@
|
||||
"licensingPage.infoBanner.startTrialTitle": "Gratis 30 dagen proberen!",
|
||||
"licensingPage.overageUsersBanner.cta": "Neem contact op met de verkoopsafdeling",
|
||||
"licensingPage.overageUsersBanner.ctaExpandSeats": "Extra plaatsen kopen",
|
||||
"licensingPage.overageUsersBanner.noticeDescription": "Breng jouw Customer Success Manager op de hoogte bij jouw volgende true-up check.",
|
||||
"licensingPage.overageUsersBanner.noticeDescription": "Breng jouw Customer Success Manager op de hoogte bij jouw volgende true-up check.<a></a>",
|
||||
"licensingPage.overageUsersBanner.noticeTitle": "Het aantal gebruikers van jouw werkruimte heeft het aantal betaalde licentieplaatsen overschreden met {seats, number} {seats, plural, one {plaats} other {plaatsen}}",
|
||||
"licensingPage.overageUsersBanner.text": "Het aantal gebruikers van jouw werkruimte heeft het aantal betaalde licenties overschreden met {seats, number} {seats, plural, one {plaats} other {plaatsen}}. Koop extra licenties om aan de eisen te blijven voldoen.",
|
||||
"link_preview.image_preview": "Voorbeeld van afbeelding tonen",
|
||||
@@ -4581,7 +4587,7 @@
|
||||
"pricing_modal.price.freeForever": "Voor altijd gratis",
|
||||
"pricing_modal.rate.seatPerMonth": "USD per gebruiker/maand{br}<b>(Jaarlijks gefactureerd)</b>",
|
||||
"pricing_modal.reviewDeploymentOptions": "Bekijk de installatiemogelijkheden",
|
||||
"pricing_modal.start_trial.disclaimer": "Door <span>Gratis 30 dagen proberen,</span> te selecteren ga ik akkoord met de <a>Mattermost Software Evaluatie Overeenkomst, Privacy Beleid,</a> en het ontvangen van product emails.",
|
||||
"pricing_modal.start_trial.disclaimer": "Door het selecteren van <span>Probeer 30 dagen gratis,</span> ga ik akkoord met de <linkAgreement>Mattermost Software and Services License Agreement</linkAgreement>, <linkPrivacy>Privacy Policy</linkPrivacy>, en het ontvangen van product e-mails.",
|
||||
"pricing_modal.subtitle": "Kies een plan om te beginnen",
|
||||
"pricing_modal.title": "Kies een plan",
|
||||
"pricing_modal.wantToTry": "Wil je proberen? ",
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
{
|
||||
"FIFTY_TO_100": "51-100",
|
||||
"FIVE_HUNDRED_TO_1000": "501-1000",
|
||||
"ONE_HUNDRED_TO_500": "101-500",
|
||||
"ONE_THOUSAND_TO_2500": "1001-2500",
|
||||
"ONE_TO_50": "1-50",
|
||||
"TWO_THOUSAND_FIVE_HUNDRED_AND_UP": "2501-5000",
|
||||
"about.buildnumber": "Numer Kompilacji:",
|
||||
"about.cloudEdition": "Chmura",
|
||||
"about.copyright": "Copyright 2015 - {currentYear} Mattermost, Inc. Wszystkie prawa zastrzeżone",
|
||||
@@ -264,11 +270,15 @@
|
||||
"admin.billing.history.allPaymentsShowHere": "Wszystkie Twoje faktury będą widoczne tutaj",
|
||||
"admin.billing.history.date": "Data",
|
||||
"admin.billing.history.description": "Opis",
|
||||
"admin.billing.history.fractionalAndRatedSeats": "{fractionalSeats} miejsca opomiarowane, {fullSeats} miejsca po stawce pełnej, {partialSeats} miejsca z opłatą częściową",
|
||||
"admin.billing.history.fractionalSeats": "{fractionalUsers} miejsca",
|
||||
"admin.billing.history.noBillingHistory": "W przyszłości w tym miejscu będzie widoczna historia Twoich rozliczeń.",
|
||||
"admin.billing.history.onPremSeats": "{num} miejsca",
|
||||
"admin.billing.history.pageInfo": "{startRecord} - {endRecord} z {totalRecords}",
|
||||
"admin.billing.history.paid": "Płatne",
|
||||
"admin.billing.history.paymentFailed": "Płatność nie powiodła się",
|
||||
"admin.billing.history.pending": "Oczekiwanie",
|
||||
"admin.billing.history.seatsAndRates": "{fullUsers} miejsca po stawce pełnej, {partialUsers} miejsca z opłatami częściowymi",
|
||||
"admin.billing.history.seeHowBillingWorks": "Zobacz jak działa rozliczenie",
|
||||
"admin.billing.history.status": "Stan",
|
||||
"admin.billing.history.title": "Historia rozliczeń",
|
||||
@@ -300,6 +310,9 @@
|
||||
"admin.billing.subscription.cancelSubscriptionSection.description": "W chwili obecnej usunięcie obszaru roboczego może być wykonane tylko z pomocą przedstawiciela działu obsługi klienta.",
|
||||
"admin.billing.subscription.cancelSubscriptionSection.title": "Anuluj subskrypcję",
|
||||
"admin.billing.subscription.cloudMonthlyBadge": "Miesięcznie",
|
||||
"admin.billing.subscription.cloudReverseTrial.daysLeftOnTrial": "{daysLeftOnTrial} dni pozostały do końca okresu próbnego. Wykup plan lub skontaktuj się z działem sprzedaży, aby zachować swój obszar roboczy.",
|
||||
"admin.billing.subscription.cloudReverseTrial.lastDay": "To ostatni dzień okresu próbnego. Kup plan przed {userEndTrialHour} lub skontaktuj się z działem sprzedaży",
|
||||
"admin.billing.subscription.cloudReverseTrial.subscribeButton": "Przejrzyj swoje opcje",
|
||||
"admin.billing.subscription.cloudTrial.daysLeftOnTrial": "Do końca bezpłatnego okresu próbnego pozostało {daysLeftOnTrial} dni",
|
||||
"admin.billing.subscription.cloudTrial.lastDay": "To jest ostatni dzień bezpłatnego okresu próbnego. Twój dostęp wygaśnie w dniu {userEndTrialDate} o godzinie {userEndTrialHour}.",
|
||||
"admin.billing.subscription.cloudTrial.moreThan3Days": "Twoja wersja testowa rozpoczęła! Pozostało jeszcze {daysLeftOnTrial} dni",
|
||||
@@ -407,6 +420,8 @@
|
||||
"admin.billing.subscriptions.billing_summary.lastInvoice.paid": "Płatne",
|
||||
"admin.billing.subscriptions.billing_summary.lastInvoice.partialCharges": "Opłaty częściowe",
|
||||
"admin.billing.subscriptions.billing_summary.lastInvoice.pending": "Oczekiwanie",
|
||||
"admin.billing.subscriptions.billing_summary.lastInvoice.seatCount": " x {seats} miejsc",
|
||||
"admin.billing.subscriptions.billing_summary.lastInvoice.seatCountPartial": "{seats} miejsca",
|
||||
"admin.billing.subscriptions.billing_summary.lastInvoice.seeBillingHistory": "Zobacz historię rozliczeń",
|
||||
"admin.billing.subscriptions.billing_summary.lastInvoice.taxes": "Podatki",
|
||||
"admin.billing.subscriptions.billing_summary.lastInvoice.title": "Ostatnia faktura",
|
||||
@@ -1353,6 +1368,7 @@
|
||||
"admin.license.upload-modal.file": "Plik",
|
||||
"admin.license.upload-modal.subtitle": "Prześlij klucz licencyjny dla Mattermost Enterprise Edition, aby uaktualnić ten serwer. ",
|
||||
"admin.license.upload-modal.successfulUpgrade": "Udana aktualizacja!",
|
||||
"admin.license.upload-modal.successfulUpgradeText": "Dokonałeś aktualizacji do planu {skuName} dla {licensedUsersNum, number} miejsc . Obowiązuje to od {startsAt} do {expiresAt}. ",
|
||||
"admin.license.upload-modal.title": "Prześlij klucz licencyjny",
|
||||
"admin.license.uploadFile": "Prześlij plik",
|
||||
"admin.license.warn.renew": "Ponów",
|
||||
@@ -2572,6 +2588,7 @@
|
||||
"analytics.system.postTypes": "Wiadomości, Pliki i Hashtagi",
|
||||
"analytics.system.privateGroups": "Kanały prywatne",
|
||||
"analytics.system.publicChannels": "Kanały publiczne",
|
||||
"analytics.system.seatsPurchased": "Licencjonowane miejsca",
|
||||
"analytics.system.skippedIntensiveQueries": "Aby zmaksymalizować wydajność, niektóre statystyki są wyłączone. Możesz <link>ponownie je włączyć w config.json</link>.",
|
||||
"analytics.system.textPosts": "Wiadomości z samym tekstem",
|
||||
"analytics.system.title": "Statystyki systemu",
|
||||
@@ -2591,6 +2608,7 @@
|
||||
"analytics.team.activeUsers": "Aktywni użytkownicy z wiadomościami",
|
||||
"analytics.team.newlyCreated": "Nowi użytkownicy",
|
||||
"analytics.team.noTeams": "Nie ma na tym serwerze zespołów dla których można zobaczyć statystyki.",
|
||||
"analytics.team.overageUsersSeats": "Przekracza to łączną liczbę miejsc płatnych",
|
||||
"analytics.team.privateGroups": "Kanały prywatne",
|
||||
"analytics.team.publicChannels": "Kanały publiczne",
|
||||
"analytics.team.recentUsers": "Ostatnio Aktywni Użytkownicy",
|
||||
@@ -3025,10 +3043,16 @@
|
||||
"cloud.startTrial.modal.btn": "Rozpoczęcie wersji trial",
|
||||
"cloud_archived.error.access": "Permalink należy do wiadomości, która została zarchiwizowana z powodu limitów {planName}. Uaktualnij, aby ponownie uzyskać dostęp do wiadomości.",
|
||||
"cloud_archived.error.title": "Wiadomość zarchiwizowana",
|
||||
"cloud_billing.nudge_to_paid.contact_sales": "Kontakt ze sprzedażą",
|
||||
"cloud_billing.nudge_to_paid.description": "Program Cloud Free zostanie wycofany z użytku za {days} dni. Uaktualnij do płatnego planu lub skontaktuj się z działem sprzedaży.",
|
||||
"cloud_billing.nudge_to_paid.learn_more": "Aktualizuj",
|
||||
"cloud_billing.nudge_to_paid.title": "Uaktualnij do płatnego planu, aby zachować swoją przestrzeń roboczą",
|
||||
"cloud_billing.nudge_to_paid.view_plans": "Zobacz plany",
|
||||
"cloud_billing.nudge_to_yearly.announcement_bar": "Rozliczenia miesięczne przestaną obowiązywać za {days} dni . Przejdź na rozliczenie roczne",
|
||||
"cloud_billing.nudge_to_yearly.contact_sales": "Kontakt ze sprzedażą",
|
||||
"cloud_billing.nudge_to_yearly.description": "Uprość swoje rozliczenia, przechodząc na roczną subskrypcję.",
|
||||
"cloud_billing.nudge_to_yearly.description": "Rozliczenia miesięczne przestaną obowiązywać {date}. Aby zachować swoją przestrzeń roboczą, przejdź na rozliczenie roczne.",
|
||||
"cloud_billing.nudge_to_yearly.learn_more": "Dowiedź się więcej",
|
||||
"cloud_billing.nudge_to_yearly.title": "Przejdź na plan roczny już dziś",
|
||||
"cloud_billing.nudge_to_yearly.title": "Wymagane działanie: Przełącz się na rozliczenie roczne, aby zachować swoją przestrzeń roboczą.",
|
||||
"cloud_billing_history_modal.title": "Faktura(y)",
|
||||
"cloud_delinquency.banner.buttonText": "Zaktualizuj rozliczenie teraz",
|
||||
"cloud_delinquency.banner.end_user_notify_admin_button": "Powiadom administratora",
|
||||
@@ -3054,6 +3078,7 @@
|
||||
"cloud_delinquency.post_downgrade_banner.title": "Zaktualizuj teraz swoje informacje rozliczeniowe, aby ponownie aktywować płatne funkcje.",
|
||||
"cloud_signup.signup_consequences": "Twoja karta kredytowa zostanie obciążona już dziś. <a>Zobacz jak działa rozliczenie.</a>",
|
||||
"cloud_subscribe.contact_support": "Porównaj plany",
|
||||
"cloud_upgrade.error_min_seats": "Wymagane minimum 10 miejsc",
|
||||
"collapsed_reply_threads_modal.confirm": "Jasne",
|
||||
"collapsed_reply_threads_modal.description": "Wątki zostały odświeżone, aby ułatwić Ci tworzenie zorganizowanych konwersacji wokół konkretnych wiadomości. Teraz kanały będą wyglądały na mniej zagracone, ponieważ odpowiedzi są zwinięte pod oryginalną wiadomością, a wszystkie wątki, które śledzisz, są dostępne w widoku **Wątki**. Przejdź się i zobacz, co nowego.",
|
||||
"collapsed_reply_threads_modal.skip_tour": "Pomiń Przewodnik",
|
||||
@@ -4097,7 +4122,7 @@
|
||||
"marketplace_modal.list.update_confirmation.message.warning_major_version_with_release_notes": "Ta aktualizacja może zawierać duże zmiany. Przejrzyj [release notes](!{releaseNotesUrl}) przed aktualizacją.",
|
||||
"marketplace_modal.list.update_confirmation.title": "Potwierdź aktualizację wtyczki",
|
||||
"marketplace_modal.no_plugins": "Nie znaleziono żadnych wtyczek",
|
||||
"marketplace_modal.no_plugins_installed": "Nie masz zainstalowanych żadnych wtyczek.",
|
||||
"marketplace_modal.no_plugins_installed": "Nie masz zainstalowanych żadnych wtyczek",
|
||||
"marketplace_modal.search": "Szukaj w sklepie",
|
||||
"marketplace_modal.tabs.all_listing": "Wszystko",
|
||||
"marketplace_modal.tabs.installed_listing": "Zainstalowane ({count})",
|
||||
@@ -4159,7 +4184,7 @@
|
||||
"more_channels.join": "Dołącz",
|
||||
"more_channels.joining": "Dołączanie...",
|
||||
"more_channels.next": "Dalej",
|
||||
"more_channels.noMore": "Brak wyników dla \"{text}\"",
|
||||
"more_channels.noMore": "Nie ma więcej kanałów do dołączenia",
|
||||
"more_channels.prev": "Wstecz",
|
||||
"more_channels.show_archived_channels": "Pokaż: Archiwizowane kanały",
|
||||
"more_channels.show_public_channels": "Pokaż: Publiczne kanały",
|
||||
@@ -4245,6 +4270,9 @@
|
||||
"navbar_dropdown.viewMembers": "Wyświetl Użytkowników",
|
||||
"newChannelWithBoard.tutorialTip.description": "Do utworzonej właśnie tablicy można szybko przejść, klikając ikonę Tablica na pasku aplikacji. W prawym pasku bocznym możesz przeglądać tablice powiązane z tym kanałem, a także otworzyć jedną w pełnym widoku.",
|
||||
"newChannelWithBoard.tutorialTip.title": "Dostęp do połączonych tablic z Paska Aplikacji",
|
||||
"newsletter_optin.checkmark.text": "<span>Chcę otrzymywać aktualizacje zabezpieczeń firmy Mattermost za pośrednictwem newslettera.</span> Zapisując się, wyrażam zgodę na otrzymywanie od Mattermost wiadomości e-mail z aktualizacjami produktów, promocjami i wiadomościami o firmie. Zapoznałem się z <a>Polityką prywatności</a> i rozumiem, że mogę <aa>zrezygnować z subskrypcji</aa> w dowolnym momencie",
|
||||
"newsletter_optin.desc": "Zapisz się na stronie <a>{link}</a> .",
|
||||
"newsletter_optin.title": "Chcesz otrzymywać za pośrednictwem newslettera informacje o bezpieczeństwie, produktach, promocjach i aktualizacjach firmy Mattermost?",
|
||||
"next_steps_view.welcomeToMattermost": "Witamy w Mattermost",
|
||||
"no_results.channel_files.subtitle": "Pliki umieszczone w tym kanale będą wyświetlane tutaj.",
|
||||
"no_results.channel_files.title": "Nie ma jeszcze plików",
|
||||
@@ -4536,23 +4564,29 @@
|
||||
"pricing_modal.briefing.ssoWithGitLab": "SSO z Gitlabem",
|
||||
"pricing_modal.briefing.storageStarter": "{storage} limit przechowywania plików",
|
||||
"pricing_modal.briefing.title": "Główne właściwości",
|
||||
"pricing_modal.briefing.title_large_scale": "Współpraca na dużą skalę",
|
||||
"pricing_modal.briefing.title_no_limit": "Brak ograniczeń w korzystaniu przez Twój zespół",
|
||||
"pricing_modal.briefing.unlimitedPlaybookRuns": "Nieograniczona liczba playbooków i uruchomień",
|
||||
"pricing_modal.briefing.unlimitedWorkspaceTeams": "Nieograniczone zespoły przestrzeni roboczych",
|
||||
"pricing_modal.btn.contactSales": "Kontakt ze Sprzedażą",
|
||||
"pricing_modal.btn.contactSalesForQuote": "Kontakt ze Sprzedażą",
|
||||
"pricing_modal.btn.contactSupport": "Skontaktuj się ze Wsparciem",
|
||||
"pricing_modal.btn.downgrade": "Obniżenie licencji",
|
||||
"pricing_modal.btn.purchase": "Kup",
|
||||
"pricing_modal.btn.switch_to_annual": "Przejście na rozliczenie roczne",
|
||||
"pricing_modal.btn.tooltip": "Widoczne tylko dla administratorów systemu",
|
||||
"pricing_modal.btn.tryDays": "Wypróbuj za darmo przez {days} dni",
|
||||
"pricing_modal.btn.upgrade": "Aktualizuj",
|
||||
"pricing_modal.btn.viewPlans": "Zobacz plany",
|
||||
"pricing_modal.contact_us": "Skontaktuj się z nami",
|
||||
"pricing_modal.extra_briefing.cloud.free.calls": "Połączenia grupowe do 8 osób, połączenia 1:1 i współdzielenie ekranu",
|
||||
"pricing_modal.extra_briefing.enterprise.playBookAnalytics": "Pulpit analityczny Playbook",
|
||||
"pricing_modal.extra_briefing.free.calls": "Połączenia głosowe i współdzielenie ekranu",
|
||||
"pricing_modal.extra_briefing.professional.guestAccess": "Dostęp dla gości z egzekwowaniem MFA",
|
||||
"pricing_modal.extra_briefing.professional.ssoSaml": "SSO z SAML 2.0, w tym Okta, OneLogin, i ADFS",
|
||||
"pricing_modal.extra_briefing.professional.ssoadLdap": "Obsługa SSO z AD/LDAP, Google, O365, OpenID",
|
||||
"pricing_modal.interested_self_hosting": "Interesuje Cię self-hosting?",
|
||||
"pricing_modal.learn_more": "Dowiedź się więcej",
|
||||
"pricing_modal.lookingForCloudOption": "Szukasz opcji chmurowej?",
|
||||
"pricing_modal.lookingToSelfHost": "Szukasz samodzielnego hostingu?",
|
||||
"pricing_modal.noitfy_cta.request": "Poproś administratora o aktualizację",
|
||||
@@ -4564,9 +4598,12 @@
|
||||
"pricing_modal.planLabel.mostPopular": "NAJPOPULARNIEJSZE",
|
||||
"pricing_modal.planSummary.enterprise": "Administracja, bezpieczeństwo i zgodność dla dużych zespołów",
|
||||
"pricing_modal.planSummary.free": "Zwiększona wydajność dla małych zespołów",
|
||||
"pricing_modal.planSummary.professional": "Skalowalne rozwiązania dla rozwijających się zespołów",
|
||||
"pricing_modal.planSummary.professional": "Skalowalne rozwiązania {br} dla rosnących zespołów",
|
||||
"pricing_modal.plan_label_trialDays": "{days} POZOSTAŁO DNI TESTOWYCH",
|
||||
"pricing_modal.price.freeForever": "Bezpłatny na zawsze",
|
||||
"pricing_modal.questions": "Pytania?",
|
||||
"pricing_modal.rate.seatPerMonth": "USD za miejsce/miesiąc {br}<b>(rozliczane rocznie)</b>",
|
||||
"pricing_modal.reach_out": "Skontaktuj się z nami, a pomożemy Ci zdecydować, który plan jest odpowiedni dla Ciebie i Twojej organizacji.",
|
||||
"pricing_modal.reviewDeploymentOptions": "Zapoznaj się z opcjami rozmieszczania",
|
||||
"pricing_modal.start_trial.disclaimer": "Wybierając opcję <span>Wypróbuj przez 30 dni,</span> wyrażam zgodę na <linkAgreement>Mattermost Software and Services License Agreement</linkAgreement>, <linkPrivacy>Privacy Policy</linkPrivacy> oraz na otrzymywanie wiadomości e-mail dotyczących produktu.",
|
||||
"pricing_modal.subtitle": "Wybierz plan, aby rozpocząć pracę",
|
||||
@@ -4704,9 +4741,12 @@
|
||||
"self_hosted_signup.cta": "Aktualizuj",
|
||||
"self_hosted_signup.disclaimer": "Zapoznałem się i akceptuję <a>warunki subskrypcji Enterprise Edition.</a>",
|
||||
"self_hosted_signup.error_invalid_number": "Wprowadź prawidłową liczbę miejsc",
|
||||
"self_hosted_signup.error_max_seats": " zakup licencji obsługuje tylko zakupy do {num} miejsc",
|
||||
"self_hosted_signup.error_min_seats": "W Twojej przestrzeni roboczej znajduje się obecnie {num} użytkowników",
|
||||
"self_hosted_signup.failed_export.subtitle": "Sprawdzimy wszystko po naszej stronie i skontaktujemy się z Tobą w ciągu 3 dni po zatwierdzeniu licencji. W międzyczasie prosimy o dalsze korzystanie z darmowej wersji naszego produktu.",
|
||||
"self_hosted_signup.failed_export.title": "Twoja transakcja jest sprawdzana",
|
||||
"self_hosted_signup.license_applied": "Twoja licencja {planName} została zastosowana. Funkcje {planName} są teraz dostępne i gotowe do użycia.",
|
||||
"self_hosted_signup.line_item_subtotal": "{num} miejsca × 12 m-cy.",
|
||||
"self_hosted_signup.organization": "Nazwa organizacji",
|
||||
"self_hosted_signup.progress_step.applying_license": "Zastosowanie licencji {planName} do instancji Mattermost",
|
||||
"self_hosted_signup.progress_step.submitting_payment": "Przekazanie informacji o płatności",
|
||||
@@ -4716,10 +4756,10 @@
|
||||
"self_hosted_signup.purchase_in_progress.by_self_restart": "Jeśli uważasz, że to błąd, zrestartuj swój zakup.",
|
||||
"self_hosted_signup.purchase_in_progress.reset": "Ponowne uruchomienie zakupu",
|
||||
"self_hosted_signup.purchase_in_progress.title": "Zakupy w toku",
|
||||
"self_hosted_signup.error_min_seats": "W Twojej przestrzeni roboczej znajduje się obecnie {num} użytkowników",
|
||||
"self_hosted_signup.retry": "Spróbuj ponownie",
|
||||
"self_hosted_signup.screening_description": "Sprawdzimy wszystko po naszej stronie i skontaktujemy się z Tobą w ciągu 3 dni po zatwierdzeniu licencji. W międzyczasie prosimy o dalsze korzystanie z darmowej wersji naszego produktu.",
|
||||
"self_hosted_signup.screening_title": "Twoja transakcja jest sprawdzana",
|
||||
"self_hosted_signup.seats": "Miejsca",
|
||||
"self_hosted_signup.signup_consequences": "Zostaniesz rozliczony dzisiaj. Twoja licencja zostanie zastosowana automatycznie. <a>Zobacz jak działa rozliczenie.</a>",
|
||||
"self_hosted_signup.total": "Ogółem",
|
||||
"setting_item_max.cancel": "Anuluj",
|
||||
@@ -4971,6 +5011,18 @@
|
||||
"start_trial.modal_btn.start_free_trial": "Rozpocznij bezpłatny 30-dniowy okres próbny",
|
||||
"start_trial.tutorialTip.desc": "Zapoznaj się z naszymi najbardziej pożądanymi funkcjami premium. Określ dostęp użytkowników za pomocą kont gości, zautomatyzuj raporty zgodności i wysyłaj bezpieczne powiadomienia mobilne push z wykorzystaniem wyłącznie identyfikatorów.",
|
||||
"start_trial.tutorialTip.title": "Wypróbuj nasze funkcje premium za darmo",
|
||||
"start_trial_form.company_name": "Nazwa organizacji",
|
||||
"start_trial_form.company_size": "Wielkość Organizacji",
|
||||
"start_trial_form.disclaimer": "Wybierając opcję Rozpocznij test, wyrażam zgodę na <agreement>Mattermost Software Evaluation Agreement</agreement>, <privacypolicy>Privacy Policy</privacypolicy> oraz na otrzymywanie wiadomości e-mail dotyczących produktu.",
|
||||
"start_trial_form.email": "E-mail służbowy",
|
||||
"start_trial_form.invalid_business_email": "Proszę wpisać prawidłowy służbowy adres e-mail.",
|
||||
"start_trial_form.modal_body": "Kilka krótkich informacji, które pomogą nam dostosować się do Twoich potrzeb",
|
||||
"start_trial_form.modal_btn.start": "Rozpoczęcie wersji trial",
|
||||
"start_trial_form.modal_title": "Rozpoczęcie wersji Trial",
|
||||
"start_trial_form.name": "Nazwa",
|
||||
"start_trial_form_modal.failureModal.subtitle": "Wystąpił problem z przetworzeniem Twojego wniosku o wersję testową.",
|
||||
"start_trial_form_modal.failureModal.subtitle2": "Proszę spróbować ponownie lub skontaktować się z pomocą techniczną.",
|
||||
"start_trial_form_modal.failureModal.title": "Proszę spróbować ponownie",
|
||||
"status_dropdown.dnd_sub_menu_header": "Wyłącz powiadomienia do:",
|
||||
"status_dropdown.dnd_sub_menu_item.custom": "Niestandardowy",
|
||||
"status_dropdown.dnd_sub_menu_item.one_hour": "1 godzina",
|
||||
@@ -5599,7 +5651,10 @@
|
||||
"user_groups_modal.viewGroup": "Wyświetl Grupę",
|
||||
"user_list.notFound": "Nie znaleziono użytkowników",
|
||||
"user_profile.account.editProfile": "Edytuj Profil",
|
||||
"user_profile.account.hoursAhead": "({timeOffset} przed)",
|
||||
"user_profile.account.hoursBehind": "({timeOffset} po)",
|
||||
"user_profile.account.localTime": "Czas Lokalny",
|
||||
"user_profile.account.localTimeWithTimezone": "Czas lokalny ({timezone})",
|
||||
"user_profile.account.post_was_created": "Ten post został stworzony przez integrację z",
|
||||
"user_profile.add_user_to_channel": "Dodaj do kanału",
|
||||
"user_profile.add_user_to_channel.icon": "Dodaj Użytkownika do Ikony Kanału",
|
||||
@@ -5654,6 +5709,7 @@
|
||||
"welcome_post_renderer.user_message.first_paragraph": "Mattermost to platforma open source do bezpiecznej komunikacji, współpracy i dostrojenia pracy między narzędziami i zespołami.",
|
||||
"welcome_post_renderer.user_message.second_paragraph": "Oto lista poleceń, których należy użyć, aby spróbować zapoznać się z platformą.",
|
||||
"welcome_post_renderer.user_message.title": "Witamy w Mattermost! :rocket:",
|
||||
"widget.input.clear": "Wyczyść",
|
||||
"widget.input.required": "To pole jest wymagane",
|
||||
"widget.passwordInput.createPassword": "Wybierz hasło",
|
||||
"widget.passwordInput.password": "Hasło",
|
||||
@@ -5670,9 +5726,13 @@
|
||||
"work_templates.customize.name_label_all": "Nazwij swój kanał, tablicę i playbook",
|
||||
"work_templates.customize.name_label_channels_boards": "Nazwij swój kanał i tablicę",
|
||||
"work_templates.customize.name_label_channels_playbooks": "Nazwij swój kanał i playbook",
|
||||
"work_templates.customize.private_channel_permission_issue": "Nie masz uprawnień do tworzenia prywatnych kanałów.",
|
||||
"work_templates.customize.private_playbook_license_issue": "Prywatne playbooki wymagają licencji Enterprise.",
|
||||
"work_templates.customize.private_playbook_permission_issue": "Nie masz uprawnień do tworzenia prywatnych playbooków.",
|
||||
"work_templates.customize.public_channel_permission_issue": "Nie masz uprawnień do tworzenia kanałów publicznych.",
|
||||
"work_templates.customize.public_playbook_permission_issue": "Nie masz uprawnień do tworzenia publicznych playbooków.",
|
||||
"work_templates.customize.visibility_title": "Kto powinien mieć do tego dostęp?",
|
||||
"work_templates.menu.modal_title": "Zacznij od szablonu",
|
||||
"work_templates.menu.modal_title": "Utwórz z szablonu",
|
||||
"work_templates.menu.quick_use": "Szybkie użycie",
|
||||
"work_templates.menu.template_title": "SZABLON",
|
||||
"work_templates.menu.usecase_boards_count": "{boardsCount, plural, =1 {# tablica} other {# tablic}}",
|
||||
|
||||
@@ -872,9 +872,9 @@
|
||||
"admin.experimental.clientSideCertCheck.title": "Метод авторизации на стороне клиента:",
|
||||
"admin.experimental.clientSideCertEnable.desc": "Включает сертификацию на стороне клиента для вашего сервера Mattermost. См. <link>Документация</link>, чтобы узнать больше.",
|
||||
"admin.experimental.clientSideCertEnable.title": "Включить сертификацию на стороне клиента:",
|
||||
"admin.experimental.collapsedThreads.always_on": "Всегда включен",
|
||||
"admin.experimental.collapsedThreads.default_off": "Включено (по умолчанию Выкл)",
|
||||
"admin.experimental.collapsedThreads.default_on": "Включено (По умолчанию вкл.)",
|
||||
"admin.experimental.collapsedThreads.always_on": "Всегда включено",
|
||||
"admin.experimental.collapsedThreads.default_off": "Включено (по умолчанию Выкл.)",
|
||||
"admin.experimental.collapsedThreads.default_on": "Включено (по умолчанию Вкл.)",
|
||||
"admin.experimental.collapsedThreads.desc": "Если этот параметр включен (по умолчанию выключен), пользователи могут включить функцию Свернутые Цепочки Обсуждений в Настройках аккаунта. Если этот параметр включен (включено по умолчанию), пользователи по умолчанию видят Свернутые Цепочки Обсуждений и могут отключить его в Настройках аккаунта. Когда он всегда включен, пользователи должны использовать Свернутые Цепочки Обсуждений и не могут его отключить.",
|
||||
"admin.experimental.collapsedThreads.off": "Выключено",
|
||||
"admin.experimental.collapsedThreads.title": "Свернутые цепочки ответов",
|
||||
@@ -1422,10 +1422,10 @@
|
||||
"admin.nav.menuAriaLabel": "Меню консоли администратора",
|
||||
"admin.nav.switch": "Выбор команды",
|
||||
"admin.nav.troubleshootingForum": "Форум поддержки",
|
||||
"admin.notices.enableAdminNoticesDescription": "Когда эта функция включена, системные администраторы будут получать уведомления о доступных обновлениях сервера и соответствующих функциях системного администрирования. <link>Узнайте больше об уведомлениях</link> в нашей документации.",
|
||||
"admin.notices.enableAdminNoticesTitle": "Включить уведомления администратора: ",
|
||||
"admin.notices.enableEndUserNoticesDescription": "Когда эта функция включена, все пользователи будут получать уведомления о доступных обновлениях клиентов и соответствующих функциях конечного пользователя для улучшения работы пользователей. <link>Узнайте больше об уведомлениях</link> в нашей документации.",
|
||||
"admin.notices.enableEndUserNoticesTitle": "Включить уведомления конечных пользователей: ",
|
||||
"admin.notices.enableAdminNoticesDescription": "Когда эта функция включена, системные администраторы будут получать объявления о доступных обновлениях сервера и соответствующих функциях системного администрирования. <link>Узнайте больше об объявлениях</link> в нашей документации.",
|
||||
"admin.notices.enableAdminNoticesTitle": "Включить объявления для администраторов: ",
|
||||
"admin.notices.enableEndUserNoticesDescription": "Когда эта функция включена, все пользователи будут получать объявления о доступных обновлениях клиентов и соответствующих функциях конечного пользователя для улучшения работы пользователей. <link>Узнайте больше об объявлениях</link> в нашей документации.",
|
||||
"admin.notices.enableEndUserNoticesTitle": "Включить объявления для конечных пользователей: ",
|
||||
"admin.oauth.gitlab": "GitLab",
|
||||
"admin.oauth.google": "Google Apps",
|
||||
"admin.oauth.off": "Запретить вход через OAuth 2.0 поставщика",
|
||||
@@ -1754,7 +1754,7 @@
|
||||
"admin.permissions.sysconsole_section_site_emoji.name": "Эмодзи",
|
||||
"admin.permissions.sysconsole_section_site_file_sharing_and_downloads.name": "Общий доступ к файлам и загрузка",
|
||||
"admin.permissions.sysconsole_section_site_localization.name": "Локализация",
|
||||
"admin.permissions.sysconsole_section_site_notices.name": "Примечания",
|
||||
"admin.permissions.sysconsole_section_site_notices.name": "Объявления",
|
||||
"admin.permissions.sysconsole_section_site_notifications.name": "Уведомления",
|
||||
"admin.permissions.sysconsole_section_site_posts.name": "Сообщения",
|
||||
"admin.permissions.sysconsole_section_site_public_links.name": "Публичные ссылки",
|
||||
@@ -1935,7 +1935,7 @@
|
||||
"admin.reporting.workspace_optimization.access.title": "Доступ к рабочему пространству",
|
||||
"admin.reporting.workspace_optimization.chip_problems": "Проблемы: {count}",
|
||||
"admin.reporting.workspace_optimization.chip_suggestions": "Предложения: {count}",
|
||||
"admin.reporting.workspace_optimization.chip_warnings": "Предупреждений: {count}",
|
||||
"admin.reporting.workspace_optimization.chip_warnings": "Предупреждения: {count}",
|
||||
"admin.reporting.workspace_optimization.configuration.description": "У Вас имеются проблемы с конфигурацией, которые нужно решить",
|
||||
"admin.reporting.workspace_optimization.configuration.descriptionOk": "Кажется, у Вас хорошая конфигурация для SSL и длительности сеанса!",
|
||||
"admin.reporting.workspace_optimization.configuration.session_length.description": "Продолжительность Вашего сеанса по умолчанию составляет 30 дней. Более продолжительный сеанс обеспечивает удобство, а более короткий сеанс обеспечивает более строгую безопасность. Мы рекомендуем настроить это на основе политик безопасности Вашей организации.",
|
||||
@@ -2244,7 +2244,7 @@
|
||||
"admin.sidebar.logs": "Журнал сервера",
|
||||
"admin.sidebar.metrics": "Мониторинг производительности",
|
||||
"admin.sidebar.mfa": "МФА",
|
||||
"admin.sidebar.notices": "Уведомления",
|
||||
"admin.sidebar.notices": "Объявления",
|
||||
"admin.sidebar.notifications": "Уведомления",
|
||||
"admin.sidebar.oauth": "OAuth 2.0",
|
||||
"admin.sidebar.openid": "OpenID Connect",
|
||||
@@ -2281,7 +2281,7 @@
|
||||
"admin.site.emoji": "Смайлики",
|
||||
"admin.site.fileSharingDownloads": "Общий доступ к файлам и загрузка",
|
||||
"admin.site.localization": "Локализация",
|
||||
"admin.site.notices": "Уведомления",
|
||||
"admin.site.notices": "Объявления",
|
||||
"admin.site.posts": "Сообщения",
|
||||
"admin.site.public_links": "Публичные ссылки",
|
||||
"admin.site.usersAndTeams": "Пользователи и команды",
|
||||
@@ -2919,7 +2919,7 @@
|
||||
"channel_members_rhs.action_bar.add_button": "Добавить",
|
||||
"channel_members_rhs.action_bar.done_button": "Готово",
|
||||
"channel_members_rhs.action_bar.manage_button": "Управление",
|
||||
"channel_members_rhs.action_bar.managing_title": "Управляющие участники",
|
||||
"channel_members_rhs.action_bar.managing_title": "Управление участниками",
|
||||
"channel_members_rhs.action_bar.members_count_title": "{members_count} участников",
|
||||
"channel_members_rhs.default_channel_moderation_restrictions": "В этом канале вы можете удалять только гостей. Только <link>администраторы канала</link> могут управлять другими участниками.",
|
||||
"channel_members_rhs.header.title": "Участники",
|
||||
@@ -2960,17 +2960,17 @@
|
||||
"channel_notifications.levels.default": "По умолчанию",
|
||||
"channel_notifications.levels.mention": "Упоминание",
|
||||
"channel_notifications.levels.none": "Нет",
|
||||
"channel_notifications.muteChannel.help": "Отключение уведомлений на рабочем столе, по электронной почте и через push-уведомления для этого канала. Канал не будет помечен как непрочитанный, если вы не упомянуты.",
|
||||
"channel_notifications.muteChannel.help": "Отключение уведомлений на рабочем столе, по электронной почте и через push-уведомления для этого канала. Канал не будет помечен как непрочитанный, если вы не были упомянуты.",
|
||||
"channel_notifications.muteChannel.off.title": "Выкл",
|
||||
"channel_notifications.muteChannel.on.title": "Вкл",
|
||||
"channel_notifications.muteChannel.on.title.collapse": "Приглушение включено. Рабочий стол, электронная почта и push-уведомления не будут отправляться по этому каналу.",
|
||||
"channel_notifications.muteChannel.on.title.collapse": "Приглушение включено. Уведомления на раб. стол, по эл. почте и push не отправляются с этого канала.",
|
||||
"channel_notifications.muteChannel.settings": "Отключить уведомления",
|
||||
"channel_notifications.never": "Никогда",
|
||||
"channel_notifications.onlyMentions": "Только при упоминаниях",
|
||||
"channel_notifications.override": "При выборе настройки, отличной от \"По умолчанию\" перезапишутся глобальные настройки уведомлений. Уведомления на рабочий стол доступны в Firefox, Safari, и Chrome.",
|
||||
"channel_notifications.overridePush": "Выбор параметра, отличного от «По умолчанию», переопределит глобальные параметры уведомлений для мобильных push-уведомлений в настройках учетной записи. Push-уведомления должны быть включены системным администратором.",
|
||||
"channel_notifications.preferences": "Настройки уведомлений для ",
|
||||
"channel_notifications.push": "Отправить мобильное push-уведомление",
|
||||
"channel_notifications.push": "Отправлять мобильные push-уведомления",
|
||||
"channel_notifications.sendDesktop": "Отправлять уведомления на рабочий стол",
|
||||
"channel_select.placeholder": "--- Выбрать канал ---",
|
||||
"channel_switch_modal.deactivated": "Деактивирован",
|
||||
@@ -3556,14 +3556,14 @@
|
||||
"get_public_link_modal.help": "Ссылка ниже позволяет видеть этот файл любому, не будучи зарегистрированным на этом сервере.",
|
||||
"get_public_link_modal.title": "Получить публичную ссылку",
|
||||
"gif_picker.gfycat": "Поиск Gfycat",
|
||||
"globalThreads.heading": "Отслеживаемые треды",
|
||||
"globalThreads.heading": "Отслеживаемые обсуждения",
|
||||
"globalThreads.noThreads.subtitle": "Здесь будут показаны все обсуждения, в которых вы упоминались или в которых вы участвовали, вместе с любыми обсуждениями, на которые вы подписаны.",
|
||||
"globalThreads.noThreads.title": "Пока отслеживаемых тредов нет",
|
||||
"globalThreads.noThreads.title": "Пока отслеживаемых обсуждений нет",
|
||||
"globalThreads.searchGuidance.subtitle": "Если вы ищете старые разговоры, попробуйте выполнить поиск с помощью {searchShortcut}",
|
||||
"globalThreads.searchGuidance.title": "Это конец списка",
|
||||
"globalThreads.sidebarLink": "Треды",
|
||||
"globalThreads.subtitle": "Треды, в которых вы участвуете, будут автоматически отображаться здесь",
|
||||
"globalThreads.threadList.noUnreadThreads": "Нет непрочитанных тредов",
|
||||
"globalThreads.sidebarLink": "Обсуждения",
|
||||
"globalThreads.subtitle": "Обсуждения, в которых вы участвуете, будут автоматически отображаться здесь",
|
||||
"globalThreads.threadList.noUnreadThreads": "Нет непрочитанных обсуждений",
|
||||
"globalThreads.threadPane.unreadMessageLink": "У вас {numUnread, plural, =0 {нет непрочитанных обсуждений} =1 {<link>{numUnread} обсуждение</link>} few {<link>{numUnread} обсуждения</link>} other {<link>{numUnread} обсуждений</link>}} {numUnread, plural, =0 {} other {с непрочитанными сообщениями}}",
|
||||
"globalThreads.threadPane.unselectedTitle": "{numUnread, plural, =0 {Похоже, вы все обсудили} other {Обсудите свои темы}}",
|
||||
"globalThreads.title": "{prefix}Обсуждения – {displayName} {siteName}",
|
||||
@@ -3672,7 +3672,7 @@
|
||||
"help.formatting.supportedSyntax": "Поддерживаемые языки: `applescript`, `as`, `atom`, `bas`, `bash`, `boot`, `_coffee`, `c++`, `c`, `cake`, `cc`, `cl2`, `clj`, `cljc`, `cljs`, `cljs.hl`, `cljscm`, `cljx`, `cjsx`, `cson`, `coffee`, `cpp`, `cs`, `csharp`, `css`, `d`, `dart`, `dfm`, `di`, `delphi`, `diff`, `django`, `docker`, `dockerfile`, `dpr`, `erl`, `fortran`, `freepascal`, `fs`, `fsharp`, `gcode`, `gemspec`, `go`, `groovy`, `gyp`, `h++`, `h`, `handlebars`, `hbs`, `hic`, `hpp`, `html`, `html.handlebars`, `html.hbs`, `hs`, `hx`, `iced`, `irb`, `java`, `jinja`, `jl`, `js`, `json`, `jsp`, `jsx`, `kt`, `ktm`, `kts`, `latexcode`, `lazarus`, `less`, `lfm`, `lisp`, `lpr`, `lua`, `m`, `mak`, `matlab`, `md`, `mk`, `mkd`, `mkdown`, `ml`, `mm`, `nc`, `objc`, `obj-c`, `osascript`, `pas`, `pascal`, `perl`, `pgsql`, `php`, `php3`, `php4`, `php5`, `php6`, `pl`, `plist`, `podspec`, `postgres`, `postgresql`, `ps`, `ps1`, `pp`, `py`, `r`, `rb`, `rs`, `rss`, `ruby`, `scala`, `scm`, `scpt`, `scss`, `sh`, `sld`, `st`, `styl`, `sql`, `swift`, `tex`, `texcode`, `thor`, `ts`, `tsx`, `v`, `vb`, `vbnet`, `vbs`, `veo`, `xhtml`, `xml`, `xsl`, `yaml`, `zsh`.",
|
||||
"help.formatting.syntax.description": "Чтобы добавить подсветку синтаксиса, напишите язык после ``` в начале блока кода. Mattermost предлагает четыре темы оформления (GitHub, Solarized Dark, Solarized Light, Monokai), которые можно изменить в **Настройки учётной записи > Вид > Тема > Пользовательская тема > Стили ленты канала > Темы оформления**.",
|
||||
"help.formatting.syntax.title": "Подсветка синтаксиса",
|
||||
"help.formatting.syntaxEx": "```goAA\npackage main\nimport \"fmt\"\nfunc main() {\n fmt.Println(\"Привет, мир!\")\n}\n```",
|
||||
"help.formatting.syntaxEx": "```goAA\npackage main\nimport \"fmt\"\nfunc main()\n{\n fmt.Println(\"Привет, мир!\")\n}\n```",
|
||||
"help.formatting.tableExample": "| По левому краю | По центру | По правому краю |\n| :-------------- |:---------------:| ---------------:|\n| Строка 1 | этот текст | 100₽ |\n| Строка 2 | выравнен | 10₽ |\n| Строка 3 | по центру | 1₽ |",
|
||||
"help.formatting.tables.description": "Создайте таблицу, разместив пунктирную линию ниже заголовка строки и разделите столбцы знаком `|`. (Не нужно разлиновывать, и так будет работать). Выравнивание колонок таблицы делается установкой знака \":\" в строке заголовка.",
|
||||
"help.formatting.tables.title": "Таблицы",
|
||||
@@ -4087,11 +4087,11 @@
|
||||
"marketplace_modal.list.update_confirmation.message.warning_major_version": "Это обновление может содержать критические изменения.",
|
||||
"marketplace_modal.list.update_confirmation.message.warning_major_version_with_release_notes": "Это обновление может содержать критические изменения. Ознакомьтесь с [примечаниями к выпуску](!{releaseNotesUrl}) перед обновлением.",
|
||||
"marketplace_modal.list.update_confirmation.title": "Подтвердите обновление плагина",
|
||||
"marketplace_modal.no_plugins": "На данный момент нет доступных плагинов.",
|
||||
"marketplace_modal.no_plugins_installed": "У вас не установлены плагины.",
|
||||
"marketplace_modal.no_plugins": "Плагины не найдены",
|
||||
"marketplace_modal.no_plugins_installed": "У вас не установлены плагины",
|
||||
"marketplace_modal.search": "Поиск в Marketplace",
|
||||
"marketplace_modal.tabs.all_listing": "Все",
|
||||
"marketplace_modal.tabs.installed_listing": "Установлено",
|
||||
"marketplace_modal.tabs.installed_listing": "Установлено ({count})",
|
||||
"marketplace_modal.title": "Магазин плагинов",
|
||||
"members_popover.button.message": "сообщение",
|
||||
"menu.cloudFree.enterpriseTrialDescription": "Ваша пробная версия активна до {trialEndDay}. Откройте для себя наши лучшие Enterprise функции. <openModalLink>Узнать больше</openModalLink>",
|
||||
@@ -4146,7 +4146,7 @@
|
||||
"more.details": "Подробнее",
|
||||
"more_channels.create": "Создать канал",
|
||||
"more_channels.next": "Далее",
|
||||
"more_channels.noMore": "Нет результатов поиска для \"{text}\"",
|
||||
"more_channels.noMore": "Доступных каналов не найдено",
|
||||
"more_channels.prev": "Предыдущая",
|
||||
"more_channels.show_archived_channels": "Показать: Архивированные каналы",
|
||||
"more_channels.show_public_channels": "Показать: Публичные каналы",
|
||||
@@ -4272,7 +4272,7 @@
|
||||
"onboardingTask.checklist.main_subtitle": "Давайте вставать и работать.",
|
||||
"onboardingTask.checklist.start_enterprise_now": "Начните бесплатную пробную версию Enterprise прямо сейчас!",
|
||||
"onboardingTask.checklist.task_complete_your_profile": "Заполните свой профиль.",
|
||||
"onboardingTask.checklist.task_create_from_work_template": "Создание на основе шаблона - установите канал с привязанными к нему досками и плейбуками.",
|
||||
"onboardingTask.checklist.task_create_from_work_template": "Создание из шаблона",
|
||||
"onboardingTask.checklist.task_download_mm_apps": "Загрузите приложения для настольных компьютеров и мобильных устройств.",
|
||||
"onboardingTask.checklist.task_explore_other_tools_in_platform": "Изучите другие инструменты платформы.",
|
||||
"onboardingTask.checklist.task_invite_team_members": "Пригласите участников команды в рабочее пространство.",
|
||||
@@ -4625,7 +4625,7 @@
|
||||
"rhs_header.closeTooltip.icon": "Значок закрытия боковой панели",
|
||||
"rhs_header.collapseSidebarTooltip": "Свернуть правую боковую панель",
|
||||
"rhs_header.collapseSidebarTooltip.icon": "значок сворачивания боковой панели",
|
||||
"rhs_header.details": "Нить",
|
||||
"rhs_header.details": "Обсуждение",
|
||||
"rhs_header.expandSidebarTooltip": "Раскрыть правую боковую панель",
|
||||
"rhs_header.expandSidebarTooltip.icon": "Значок раскрытия боковой панели",
|
||||
"rhs_root.mobile.add_reaction": "Добавить реакцию",
|
||||
@@ -4689,6 +4689,7 @@
|
||||
"self_hosted_signup.cta": "Обновить",
|
||||
"self_hosted_signup.disclaimer": "Я прочитал и согласен с условиями подписки на <a>Enterprise Edition.</a>",
|
||||
"self_hosted_signup.error_invalid_number": "Введите действительное количество рабочих мест",
|
||||
"self_hosted_signup.error_min_seats": "В вашем рабочем пространстве в настоящее время {num} пользователей",
|
||||
"self_hosted_signup.failed_export.subtitle": "Мы проверим ситуацию на нашей стороне и свяжемся с вами в течение 3 дней, когда ваша лицензия будет одобрена. Тем временем, пожалуйста, продолжайте пользоваться бесплатной версией нашего продукта.",
|
||||
"self_hosted_signup.failed_export.title": "Ваша транзакция находится на рассмотрении",
|
||||
"self_hosted_signup.license_applied": "Ваша лицензия {planName} была применена. Функции {planName} теперь доступны и готовы к использованию.",
|
||||
@@ -4701,7 +4702,6 @@
|
||||
"self_hosted_signup.purchase_in_progress.by_self_restart": "Если вы считаете, что это ошибка, перезапустите покупку.",
|
||||
"self_hosted_signup.purchase_in_progress.reset": "Перезапуск покупки",
|
||||
"self_hosted_signup.purchase_in_progress.title": "Покупка в процессе",
|
||||
"self_hosted_signup.error_min_seats": "В вашем рабочем пространстве в настоящее время {num} пользователей",
|
||||
"self_hosted_signup.retry": "Попробовать снова",
|
||||
"self_hosted_signup.screening_description": "Мы проверим ситуацию на нашей стороне и свяжемся с вами в течение 3 дней, когда ваша лицензия будет одобрена. Тем временем, пожалуйста, продолжайте пользоваться бесплатной версией нашего продукта.",
|
||||
"self_hosted_signup.screening_title": "Ваша транзакция находится на рассмотрении",
|
||||
@@ -5065,11 +5065,11 @@
|
||||
"textbox.quote": ">цитата",
|
||||
"textbox.strike": "зачеркнутый",
|
||||
"threadFromArchivedChannelMessage": "Вы просматриваете обсуждение в **архивированном канале**. На этом канале нельзя опубликовать новые сообщения.",
|
||||
"threading.filters.allThreads": "Все ваши треды",
|
||||
"threading.filters.allThreads": "Все ваши обсуждения",
|
||||
"threading.filters.unreads": "Непрочитанное",
|
||||
"threading.following": "Отслеживается",
|
||||
"threading.footer.lastReplyAt": "Последний ответ {formatted}",
|
||||
"threading.header.heading": "Тред",
|
||||
"threading.header.heading": "Обсуждение",
|
||||
"threading.notFollowing": "Отслеживать",
|
||||
"threading.numNewMessages": "{newReplies, plural, =0 {Нет непрочитанных сообщений} =1 {Одно непрочитанное сообщение}=2{непрочитанных сообщения}=3{непрочитанных сообщения}=4{непрочитанных сообщения} other {# непрочитанных сообщений}}",
|
||||
"threading.numNewReplies": "{newReplies, plural, =1 {# новый ответ}=2 {# новых ответа}=3 {# новых ответа}=4 {# новых ответа} other {# новых ответов}}",
|
||||
@@ -5078,14 +5078,14 @@
|
||||
"threading.threadItem.menu": "Действия",
|
||||
"threading.threadList.markRead": "Пометить всё как прочитанное",
|
||||
"threading.threadMenu.copy": "Скопировать ссылку",
|
||||
"threading.threadMenu.follow": "Отслеживать тред",
|
||||
"threading.threadMenu.follow": "Отслеживать обсуждение",
|
||||
"threading.threadMenu.followExtra": "Вы будете уведомлены об ответах",
|
||||
"threading.threadMenu.followMessage": "Подписаться на сообщение",
|
||||
"threading.threadMenu.markRead": "Отметить как прочитанное",
|
||||
"threading.threadMenu.markUnread": "Пометить как непрочитанное",
|
||||
"threading.threadMenu.openInChannel": "Открыт в канале",
|
||||
"threading.threadMenu.save": "Сохранить",
|
||||
"threading.threadMenu.unfollow": "Прекратить отслеживание треда",
|
||||
"threading.threadMenu.unfollow": "Не отслеживать обсуждение",
|
||||
"threading.threadMenu.unfollowExtra": "Вы не будете уведомлены об ответах",
|
||||
"threading.threadMenu.unfollowMessage": "Отписаться от сообщения",
|
||||
"threading.threadMenu.unsave": "Убрать из сохраненных",
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
{
|
||||
"FIFTY_TO_100": "51-100",
|
||||
"FIVE_HUNDRED_TO_1000": "501-1000",
|
||||
"ONE_HUNDRED_TO_500": "101-500",
|
||||
"ONE_THOUSAND_TO_2500": "1001-2500",
|
||||
"ONE_TO_50": "1-50",
|
||||
"TWO_THOUSAND_FIVE_HUNDRED_AND_UP": "2501-5000",
|
||||
"about.buildnumber": "Yapım numarası:",
|
||||
"about.cloudEdition": "Cloud",
|
||||
"about.copyright": "Telif hakkı 2015 - {currentYear} Mattermost, Inc. Tüm hakları saklıdır",
|
||||
@@ -304,6 +310,9 @@
|
||||
"admin.billing.subscription.cancelSubscriptionSection.description": "Şu anda bir çalışma alanı yalnızca bir müşteri hizmetleri temsilcisi ile görüşerek silinebilir.",
|
||||
"admin.billing.subscription.cancelSubscriptionSection.title": "Aboneliğinizi iptal edin",
|
||||
"admin.billing.subscription.cloudMonthlyBadge": "Aylık",
|
||||
"admin.billing.subscription.cloudReverseTrial.daysLeftOnTrial": "Deneme sürenizin bitmesine {daysLeftOnTrial} gün kaldı. Çalışma alanınızı korumak için ücretli bir tarife satın alın ya da satış ekibiyle görüşün.",
|
||||
"admin.billing.subscription.cloudReverseTrial.lastDay": "Bugün deneme sürenizin son günü. {userEndTrialHour} saatinden önce ücretli bir tarife satın alın ya da satış ekibi ile görüşün",
|
||||
"admin.billing.subscription.cloudReverseTrial.subscribeButton": "Seçeneklerinize bakın",
|
||||
"admin.billing.subscription.cloudTrial.daysLeftOnTrial": "Ücretsiz deneme sürenizin sonlanmasına {daysLeftOnTrial} gün kaldı",
|
||||
"admin.billing.subscription.cloudTrial.lastDay": "Bugün ücretsiz deneme sürenizin son günü. Erişiminiz {userEndTrialDate} günü {userEndTrialHour} saatinde sona erecek.",
|
||||
"admin.billing.subscription.cloudTrial.moreThan3Days": "Deneme süreniz başladı! Bitmesine {daysLeftOnTrial} gün var",
|
||||
@@ -963,7 +972,7 @@
|
||||
"admin.featureDiscovery.WarningDescription": "Lisansınız, tüm Enterprise tarifesi özelliklerine tam erişim sağlayacak şekilde güncelleniyor. Lisans güncellemesi tamamlandığında bu sayfa otomatik olarak yenilenecek. Lütfen bekleyin ",
|
||||
"admin.featureDiscovery.WarningTitle": "Deneme süreniz başladı ve lisansınız güncelleniyor.",
|
||||
"admin.feature_discovery.trial-request.accept-terms": "<highlight>Denemeyi başlat</highlight> üzerine tıklayarak, <linkEvaluation>Mattermost yazılım deneme sözleşmesi</linkEvaluation> ve <linkPrivacy>kişisel verilerin gizliliği ilkesi</linkPrivacy> metinlerini ve ürün ile ilgili e-postaları almayı kabul ediyorum.",
|
||||
"admin.feature_discovery.trial-request.accept-terms.cloudFree": "<highlight>{trialLength} günlük ücretsiz deneme</highlight> süresini başlatırken, <linkEvaluation>Mattermost yazılım değerlendirme sözleşmesi</linkEvaluation> ve <linkPrivacy>kişisel verilerin gizliliği ilkesi</linkPrivacy> metinleri ile ürün tanırımı e-postalarını almayı kabul ediyorum.",
|
||||
"admin.feature_discovery.trial-request.accept-terms.cloudFree": "<highlight>{trialLength} günlük ücretsiz deneme</highlight> süresini başlatırken, <linkEvaluation>Mattermost yazılım değerlendirme sözleşmesi</linkEvaluation> ve <linkPrivacy>kişisel verilerin gizliliği ilkesi</linkPrivacy> metinleri ile ürün tanıtımı e-postalarını almayı kabul ediyorum.",
|
||||
"admin.feature_discovery.trial-request.error": "Deneme lisansı alınamadı. <link>https://mattermost.com/trial</link> adresinden lisans isteğinde bulunabilirsiniz.",
|
||||
"admin.feature_flags.flag": "İşaret",
|
||||
"admin.feature_flags.flag_value": "Değer",
|
||||
@@ -3034,10 +3043,16 @@
|
||||
"cloud.startTrial.modal.btn": "Denemeyi başlat",
|
||||
"cloud_archived.error.access": "Kalıcı bağlantı, {planName} tarifesinin sınırları nedeniyle arşivlenmiş olan bir iletiye ait. İletiye yeniden erişmek için tarifenizi yükseltin.",
|
||||
"cloud_archived.error.title": "İleti arşivlenmiş",
|
||||
"cloud_billing.nudge_to_paid.contact_sales": "Satış ekibi ile görüşün",
|
||||
"cloud_billing.nudge_to_paid.description": "Cloud Free, {days} gün içinde kullanımdan kaldırılacak. Ücretli bir tarifeye yükseltin ya da satış ekibi ile görüşün.",
|
||||
"cloud_billing.nudge_to_paid.learn_more": "Üst tarifeye geç",
|
||||
"cloud_billing.nudge_to_paid.title": "Çalışma alanınızı korumak için ücretli tarifeye yükseltin",
|
||||
"cloud_billing.nudge_to_paid.view_plans": "Tarifelere bakın",
|
||||
"cloud_billing.nudge_to_yearly.announcement_bar": "Aylık faturalama {days} gün içinde durdurulacak. Yıllık faturalamaya geçin",
|
||||
"cloud_billing.nudge_to_yearly.contact_sales": "Satış ekibi ile görüşün",
|
||||
"cloud_billing.nudge_to_yearly.description": "Yıllık aboneliğe geçerek faturalamanızı basitleştirin.",
|
||||
"cloud_billing.nudge_to_yearly.description": "Aylık faturalama {date} adresinde durdurulacak. Çalışma alanınızı korumak için yıllık faturalamaya geçin.",
|
||||
"cloud_billing.nudge_to_yearly.learn_more": "Ayrıntılı bilgi alın",
|
||||
"cloud_billing.nudge_to_yearly.title": "Bugün yıllık plana geçin",
|
||||
"cloud_billing.nudge_to_yearly.title": "İşlem yapılması gerekiyor: Çalışma alanınızı korumak için yıllık faturalamaya geçin.",
|
||||
"cloud_billing_history_modal.title": "Fatura(lar)",
|
||||
"cloud_delinquency.banner.buttonText": "Fatura bilgilerini güncelle",
|
||||
"cloud_delinquency.banner.end_user_notify_admin_button": "Yöneticiyi bilgilendir",
|
||||
@@ -5627,7 +5642,10 @@
|
||||
"user_groups_modal.viewGroup": "Grubu görüntüle",
|
||||
"user_list.notFound": "Herhangi bir kullanıcı bulunamadı",
|
||||
"user_profile.account.editProfile": "Profili düzenle",
|
||||
"user_profile.account.hoursAhead": "({timeOffset} ileride)",
|
||||
"user_profile.account.hoursBehind": "({timeOffset} geride)",
|
||||
"user_profile.account.localTime": "Yerel saat",
|
||||
"user_profile.account.localTimeWithTimezone": "Yerel saat ({timezone})",
|
||||
"user_profile.account.post_was_created": "Bu ileti bir bütünleştirme formu ile gönderilmiş",
|
||||
"user_profile.add_user_to_channel": "Kanala ekle",
|
||||
"user_profile.add_user_to_channel.icon": "Kanala kullanıcı ekle simgesi",
|
||||
@@ -5699,7 +5717,11 @@
|
||||
"work_templates.customize.name_label_all": "Kanalınızı, panonuzu ve senaryonuzu adlandırın",
|
||||
"work_templates.customize.name_label_channels_boards": "Kanalınızı ve panonuzu adlandırın",
|
||||
"work_templates.customize.name_label_channels_playbooks": "Kanalınızı ve senaryonuzu adlandırın",
|
||||
"work_templates.customize.private_channel_permission_issue": "Özel kanallar oluşturma izniniz yok.",
|
||||
"work_templates.customize.private_playbook_license_issue": "Gizli senaryolar Enterprise lisansı ile kullanılabilir.",
|
||||
"work_templates.customize.private_playbook_permission_issue": "Özel senaryolar oluşturma izniniz yok.",
|
||||
"work_templates.customize.public_channel_permission_issue": "Herkese açık kanallar oluşturma izniniz yok.",
|
||||
"work_templates.customize.public_playbook_permission_issue": "Herkese açık senaryolar oluşturma izniniz yok.",
|
||||
"work_templates.customize.visibility_title": "Buna kimler erişebilmeli?",
|
||||
"work_templates.menu.modal_title": "Kalıptan oluştur",
|
||||
"work_templates.menu.quick_use": "Hızlı kullanım",
|
||||
|
||||
@@ -144,7 +144,6 @@ function migrateDrafts(state: any) {
|
||||
createAt: timestamp.getTime(),
|
||||
updateAt: timestamp.getTime(),
|
||||
show: true,
|
||||
remote: false,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
25
webapp/channels/src/reducers/views/drafts.ts
Обычный файл
25
webapp/channels/src/reducers/views/drafts.ts
Обычный файл
@@ -0,0 +1,25 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
import {combineReducers} from 'redux';
|
||||
import {GenericAction} from 'mattermost-redux/types/actions';
|
||||
import {ActionTypes} from 'utils/constants';
|
||||
|
||||
function remotes(state: Record<string, boolean> = {}, action: GenericAction) {
|
||||
switch (action.type) {
|
||||
case ActionTypes.SET_DRAFT_SOURCE:
|
||||
return {
|
||||
...state,
|
||||
[action.data.key]: action.data.isRemote,
|
||||
};
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
}
|
||||
|
||||
export default combineReducers({
|
||||
|
||||
// object that stores global draft keys indicating whether the draft came from a WebSocket event.
|
||||
remotes,
|
||||
|
||||
});
|
||||
@@ -28,6 +28,7 @@ import addChannelDropdown from './add_channel_dropdown';
|
||||
import addChannelCtaDropdown from './add_channel_cta_dropdown';
|
||||
import threads from './threads';
|
||||
import onboardingTasks from './onboarding_tasks';
|
||||
import drafts from './drafts';
|
||||
|
||||
export default combineReducers({
|
||||
admin,
|
||||
@@ -55,4 +56,5 @@ export default combineReducers({
|
||||
onboardingTasks,
|
||||
threads,
|
||||
productMenu,
|
||||
drafts,
|
||||
});
|
||||
|
||||
@@ -20,7 +20,6 @@ export type PostDraft = {
|
||||
createAt: number;
|
||||
updateAt: number;
|
||||
show?: boolean;
|
||||
remote?: boolean;
|
||||
metadata?: {
|
||||
priority?: {
|
||||
priority: PostPriority|'';
|
||||
|
||||
@@ -62,6 +62,12 @@ export type ViewsState = {
|
||||
toastStatus: boolean;
|
||||
};
|
||||
|
||||
drafts: {
|
||||
remotes: {
|
||||
[storageKey: string]: boolean;
|
||||
};
|
||||
};
|
||||
|
||||
rhs: RhsViewState;
|
||||
|
||||
rhsSuppressed: boolean;
|
||||
|
||||
@@ -337,6 +337,8 @@ export const ActionTypes = keyMirror({
|
||||
RECEIVED_PLUGIN_INSIGHT: null,
|
||||
SET_EDIT_CHANNEL_MEMBERS: null,
|
||||
NEEDS_LOGGED_IN_LIMIT_REACHED_CHECK: null,
|
||||
|
||||
SET_DRAFT_SOURCE: null,
|
||||
});
|
||||
|
||||
export const PostRequestTypes = keyMirror({
|
||||
|
||||
Ссылка в новой задаче
Block a user